[fusion_builder_container type=”flex” hundred_percent=”no” hundred_percent_height=”no” min_height_medium=”” min_height_small=”” min_height=”” hundred_percent_height_scroll=”no” align_content=”stretch” flex_align_items=”flex-start” flex_justify_content=”flex-start” flex_wrap_medium=”” flex_wrap_small=”” flex_wrap=”wrap” flex_column_spacing=”” hundred_percent_height_center_content=”yes” equal_height_columns=”no” container_tag=”div” menu_anchor=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” status=”published” publish_date=”” class=”” id=”” spacing_medium=”” margin_top_medium=”” margin_bottom_medium=”” spacing_small=”” margin_top_small=”” margin_bottom_small=”” margin_top=”” margin_bottom=”” padding_dimensions_medium=”” padding_top_medium=”” padding_right_medium=”” padding_bottom_medium=”” padding_left_medium=”” padding_dimensions_small=”” padding_top_small=”” padding_right_small=”” padding_bottom_small=”” padding_left_small=”” padding_top=”” padding_right=”” padding_bottom=”” padding_left=”” link_hover_color=”” link_color=”” border_sizes=”” border_sizes_top=”” border_sizes_right=”” border_sizes_bottom=”” border_sizes_left=”” border_color=”” border_style=”solid” border_radius_top_left=”” border_radius_top_right=”” border_radius_bottom_right=”” 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=”” z_index=”” overflow=”” background_color_medium=”” background_color_small=”” background_color=”” 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_image_medium=”” background_image_small=”” background_image=”” skip_lazy_load=”” background_position_medium=”” background_position_small=”” background_position=”center center” background_repeat_medium=”” background_repeat_small=”” background_repeat=”no-repeat” background_size_medium=”” background_size_small=”” background_size=”” background_custom_size=”” background_custom_size_medium=”” background_custom_size_small=”” fade=”no” background_parallax=”none” enable_mobile=”no” parallax_speed=”0.3″ background_blend_mode_medium=”” background_blend_mode_small=”” background_blend_mode=”none” background_slider_images=”” background_slider_position=”” background_slider_skip_lazy_loading=”no” background_slider_loop=”yes” background_slider_pause_on_hover=”no” background_slider_slideshow_speed=”5000″ background_slider_animation=”fade” background_slider_direction=”up” background_slider_animation_speed=”800″ background_slider_blend_mode=”” video_mp4=”” video_webm=”” video_ogv=”” video_url=”” video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” video_preview_image=”” pattern_bg=”none” pattern_custom_bg=”” pattern_bg_color=”” pattern_bg_style=”default” pattern_bg_opacity=”100″ pattern_bg_size=”” pattern_bg_blend_mode=”normal” mask_bg=”none” mask_custom_bg=”” mask_bg_color=”” mask_bg_accent_color=”” mask_bg_style=”default” mask_bg_opacity=”100″ mask_bg_transform=”left” mask_bg_blend_mode=”normal” render_logics=”” logics=”” absolute=”off” absolute_devices=”small,medium,large” sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” sticky_background_color=”” sticky_height=”” sticky_offset=”” sticky_transition_offset=”0″ scroll_offset=”0″ animation_type=”” animation_direction=”left” animation_color=”” animation_speed=”0.3″ animation_delay=”0″ animation_offset=”” 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” spacing=”” center_content=”no” column_tag=”div” link=”” target=”_self” link_description=”” min_height=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” class=”” id=”” type_medium=”” type_small=”” flex_grow_medium=”” flex_grow_small=”” flex_grow=”” flex_shrink_medium=”” flex_shrink_small=”” flex_shrink=”” 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_hover=”” 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=”” z_index_hover=”” z_index=”” overflow=”” background_type=”single” background_color_medium=”” background_color_small=”” background_color_medium_hover=”” background_color_small_hover=”” background_color_hover=”” background_color=”” 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_image_medium=”” background_image_small=”” background_image=”” background_image_id_medium=”” background_image_id_small=”” background_image_id=”” lazy_load=”avada” skip_lazy_load=”” background_position_medium=”” background_position_small=”” background_position=”left top” background_repeat_medium=”” background_repeat_small=”” background_repeat=”no-repeat” background_size_medium=”” background_size_small=”” background_size=”” background_custom_size=”” background_custom_size_medium=”” background_custom_size_small=”” background_blend_mode_medium=”” background_blend_mode_small=”” background_blend_mode=”none” background_slider_images=”” background_slider_position=”” background_slider_skip_lazy_loading=”no” background_slider_loop=”yes” background_slider_pause_on_hover=”no” background_slider_slideshow_speed=”5000″ background_slider_animation=”fade” background_slider_direction=”up” background_slider_animation_speed=”800″ background_slider_blend_mode=”” render_logics=”” sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” sticky_offset=”” absolute=”off” absolute_props=”” filter_type=”regular” filter_hover_element=”self” 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″ transform_type=”regular” transform_hover_element=”self” transform_scale_x=”1″ transform_scale_y=”1″ transform_translate_x=”0″ transform_translate_y=”0″ transform_rotate=”0″ transform_skew_x=”0″ transform_skew_y=”0″ transform_scale_x_hover=”1″ transform_scale_y_hover=”1″ transform_translate_x_hover=”0″ transform_translate_y_hover=”0″ transform_rotate_hover=”0″ transform_skew_x_hover=”0″ transform_skew_y_hover=”0″ transform_origin=”” transition_duration=”300″ transition_easing=”ease” transition_custom_easing=”” motion_effects=”” scroll_motion_devices=”small-visibility,medium-visibility,large-visibility” animation_type=”” animation_direction=”left” animation_color=”” animation_speed=”0.3″ animation_delay=”0″ animation_offset=”” last=”true” border_position=”all” first=”true”][fusion_code]PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiIC8+Cjx0aXRsZT5ETVggQWRkcmVzcyBNYXBwZXI8L3RpdGxlPgoKPHN0eWxlPgovKiDilIDilIAgVGhlbWUgdG9rZW5zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwo6cm9vdHsKICAtLWJsdWU6IzAwN2JmZjsgLS1yZWQ6I2Q5NTM0ZjsgLS1ncmF5OiNmMWYxZjE7Cn0KLyog4pSA4pSAIEJhc2Ugc3R5bGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoqe2JveC1zaXppbmc6Ym9yZGVyLWJveDt9CmJvZHl7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7bWFyZ2luOjEuNXJlbTtjb2xvcjojMzMzO30KaDF7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEuOXJlbTttYXJnaW4tYm90dG9tOjEuMnJlbTt9Ci8qIOKUgOKUgCBDb250cm9scyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLmNvbnRyb2xzewogIGRpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6LjhyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tYm90dG9tOjFyZW07Cn0KLmNvbnRyb2xzIGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZTouOXJlbTttaW4td2lkdGg6MTYwcHg7fQouY29udHJvbHMgc2VsZWN0LC5jb250cm9scyBidXR0b257cGFkZGluZzouNXJlbTtmb250LXNpemU6MXJlbTttaW4td2lkdGg6MTUwcHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6NHB4O30KLmJ0bntjdXJzb3I6cG9pbnRlcjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MXJlbTt9Ci5wcmltYXJ5e2JhY2tncm91bmQ6dmFyKC0tYmx1ZSk7Y29sb3I6I2ZmZjt9IC5zZWNvbmRhcnl7YmFja2dyb3VuZDojNmM3NTdkO2NvbG9yOiNmZmY7fSAuZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tcmVkKTtjb2xvcjojZmZmO30KLyog4pSA4pSAIFRhYmxlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwp0YWJsZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW4tdG9wOi43NXJlbTt9CnRoZWFke2JhY2tncm91bmQ6dmFyKC0tZ3JheSk7fSB0aCx0ZHtwYWRkaW5nOi40NXJlbSAuNnJlbTtib3JkZXI6MXB4IHNvbGlkICNkZGQ7dGV4dC1hbGlnbjpjZW50ZXI7fQovKiDilIDilIAgQWN0aW9uIGJhciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLmFjdGlvbi1iYXJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDouN3JlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6MXJlbTt9Ci8qIOKUgOKUgCBNb2RhbHMgJiBkcmFnZ2FibGUgcGFuZWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubW9kYWx7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOiMwMDA2O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjt9Ci5oaWRkZW57ZGlzcGxheTpub25lO30KLm1vZGFsLWNvbnRlbnR7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MXJlbTtib3JkZXItcmFkaXVzOjZweDttaW4td2lkdGg6MjgwcHg7cG9zaXRpb246YWJzb2x1dGU7Y3Vyc29yOm1vdmU7dXNlci1zZWxlY3Q6bm9uZTtib3gtc2hhZG93OjAgNnB4IDE4cHggcmdiYSgwLDAsMCwuMyk7fQouY2xvc2UtYnRue3Bvc2l0aW9uOmFic29sdXRlO3RvcDouM3JlbTtyaWdodDouNXJlbTtmb250LXNpemU6MS40cmVtO2JvcmRlcjpub25lO2JhY2tncm91bmQ6bm9uZTtjdXJzb3I6cG9pbnRlcjt9Ci8qIGtleXBhZCAqLwoja2V5cGFkRGlzcGxheXt0ZXh0LWFsaWduOnJpZ2h0O2ZvbnQtc2l6ZToxLjZyZW07cGFkZGluZzouM3JlbSAuNXJlbTtib3JkZXI6MXB4IHNvbGlkICNjY2M7bWFyZ2luLWJvdHRvbTouNnJlbTt9Ci5rZXlwYWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMyw2MHB4KTtnYXA6LjRyZW07fQoua2V5cGFkIGJ1dHRvbntwYWRkaW5nOi42cmVtO2ZvbnQtc2l6ZToxLjFyZW07Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpwb2ludGVyO30KLyogY3VzdG9tLWZpeHR1cmUgcm93cyAqLwojY3VzdG9tTW9kZXMgLm1vZGUtcm93e2Rpc3BsYXk6ZmxleDtnYXA6LjRyZW07bWFyZ2luLWJvdHRvbTouNHJlbTt9CiNjdXN0b21Nb2RlcyBpbnB1dHtmbGV4OjE7cGFkZGluZzouNHJlbTtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czo0cHg7fQojY3VzdG9tTW9kZXMgLnJte2JhY2tncm91bmQ6dmFyKC0tcmVkKTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6MCAuNnJlbTt9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxoMT5ETVggQWRkcmVzcyBNYXBwZXI8L2gxPgoKPCEtLSDilIDilIAgQ29udHJvbCBiYXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIC0tPgo8ZGl2IGNsYXNzPSJjb250cm9scyI+CiAgPGxhYmVsPk1hbnVmYWN0dXJlcgogICAgPHNlbGVjdCBpZD0ibWFudWZhY3R1cmVyU2VsZWN0Ij48b3B0aW9uIHZhbHVlPSIiPlNlbGVjdCBNYW51ZmFjdHVyZXI8L29wdGlvbj48L3NlbGVjdD4KICA8L2xhYmVsPgogIDxsYWJlbD5GaXh0dXJlCiAgICA8c2VsZWN0IGlkPSJmaXh0dXJlU2VsZWN0IiBkaXNhYmxlZD48b3B0aW9uIHZhbHVlPSIiPlNlbGVjdCBGaXh0dXJlPC9vcHRpb24+PC9zZWxlY3Q+CiAgPC9sYWJlbD4KICA8bGFiZWw+TW9kZQogICAgPHNlbGVjdCBpZD0ibW9kZVNlbGVjdCIgZGlzYWJsZWQ+PG9wdGlvbiB2YWx1ZT0iIj5TZWxlY3QgTW9kZTwvb3B0aW9uPjwvc2VsZWN0PgogIDwvbGFiZWw+CgogIDxidXR0b24gaWQ9InF0eUJ0biIgIGNsYXNzPSJidG4gc2Vjb25kYXJ5Ij5RdHk6IDE8L2J1dHRvbj4KICA8YnV0dG9uIGlkPSJhZGRCdG4iICBjbGFzcz0iYnRuIHByaW1hcnkiIGRpc2FibGVkPkFkZCBGaXh0dXJlczwvYnV0dG9uPgogIDxidXR0b24gaWQ9ImN1c3RvbUJ0biIgY2xhc3M9ImJ0biBwcmltYXJ5Ij4rIEN1c3RvbSBGaXh0dXJlPC9idXR0b24+CjwvZGl2PgoKPCEtLSDilIDilIAgTWFwcGluZyB0YWJsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgLS0+Cjx0YWJsZSBpZD0ibWFwcGluZ1RhYmxlIj4KICA8dGhlYWQ+CiAgICA8dHI+PHRoPiM8L3RoPjx0aD5Vbml2ZXJzZTwvdGg+PHRoPlN0YXJ0PC90aD48dGg+RW5kPC90aD48dGg+TWFudWZhY3R1cmVyPC90aD48dGg+Rml4dHVyZTwvdGg+PHRoPk1vZGU8L3RoPjx0aD7wn5eR77iPPC90aD48L3RyPgogIDwvdGhlYWQ+CiAgPHRib2R5PjwvdGJvZHk+CjwvdGFibGU+Cgo8IS0tIOKUgOKUgCBBY3Rpb24gYnV0dG9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgLS0+CjxkaXYgY2xhc3M9ImFjdGlvbi1iYXIiPgogIDxidXR0b24gY2xhc3M9ImJ0biBwcmltYXJ5IiBvbmNsaWNrPSJleHBvcnRDU1YoKSI+RXhwb3J0IENTVjwvYnV0dG9uPgogIDxidXR0b24gY2xhc3M9ImJ0biBwcmltYXJ5IiBvbmNsaWNrPSJlbWFpbERhdGEoKSI+RW1haWwgTWFwcGluZzwvYnV0dG9uPgogIDxidXR0b24gY2xhc3M9ImJ0biBwcmltYXJ5IiBvbmNsaWNrPSJpbXBvcnRGaWxlLmNsaWNrKCkiPkltcG9ydCBKU09OPC9idXR0b24+CiAgPGJ1dHRvbiBjbGFzcz0iYnRuIHByaW1hcnkiIG9uY2xpY2s9InNhdmVGaXh0dXJlTGlzdCgpIj5TYXZlIEZpeHR1cmUgTGlzdDwvYnV0dG9uPgogIDxidXR0b24gY2xhc3M9ImJ0biBkYW5nZXIiICBvbmNsaWNrPSJjbGVhckFsbCgpIj5DbGVhciBBbGwgRml4dHVyZXM8L2J1dHRvbj4KPC9kaXY+CjxpbnB1dCBpZD0iaW1wb3J0RmlsZSIgdHlwZT0iZmlsZSIgYWNjZXB0PSIuanNvbiIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgLz4KCjwhLS0g4pSA4pSAIFF0eSBrZXlwYWQgbW9kYWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIC0tPgo8ZGl2IGlkPSJrZXlwYWRNb2RhbCIgY2xhc3M9Im1vZGFsIGhpZGRlbiI+CiAgPGRpdiBpZD0ia2V5cGFkUGFuZWwiIGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgIDxkaXYgaWQ9ImtleXBhZERpc3BsYXkiPjE8L2Rpdj4KICAgIDxkaXYgaWQ9ImtleXBhZEtleXMiIGNsYXNzPSJrZXlwYWQiPjwvZGl2PgogICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLXRvcDouNnJlbTsiPgogICAgICA8YnV0dG9uIGlkPSJrZXlwYWRPayIgICAgIGNsYXNzPSJidG4gcHJpbWFyeSIgc3R5bGU9Im1hcmdpbi1yaWdodDouNXJlbTsiPk9LPC9idXR0b24+CiAgICAgIDxidXR0b24gaWQ9ImtleXBhZENhbmNlbCIgY2xhc3M9ImJ0biBkYW5nZXIiPkNhbmNlbDwvYnV0dG9uPgogICAgPC9kaXY+CiAgPC9kaXY+CjwvZGl2PgoKPCEtLSDilIDilIAgQ3VzdG9tLWZpeHR1cmUgbW9kYWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIC0tPgo8ZGl2IGlkPSJjdXN0b21Nb2RhbCIgY2xhc3M9Im1vZGFsIGhpZGRlbiI+CiAgPGRpdiBpZD0iY3VzdG9tUGFuZWwiIGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgIDxidXR0b24gaWQ9ImN1c3RvbUNsb3NlIiBjbGFzcz0iY2xvc2UtYnRuIj7DlzwvYnV0dG9uPgogICAgPGgyIHN0eWxlPSJtYXJnaW4tdG9wOjA7Ij5BZGQgQ3VzdG9tIEZpeHR1cmU8L2gyPgoKICAgIDxsYWJlbD5NYW51ZmFjdHVyZXIgPGlucHV0IGlkPSJjdXN0b21NYW4iIHBsYWNlaG9sZGVyPSJlLmcuIEFESiI+PC9sYWJlbD4KICAgIDxsYWJlbD5Nb2RlbCAgICAgICAgPGlucHV0IGlkPSJjdXN0b21Nb2RlbCIgcGxhY2Vob2xkZXI9ImUuZy4gU3BvdCAyNTAiPjwvbGFiZWw+CgogICAgPGRpdiBpZD0iY3VzdG9tTW9kZXMiPjwvZGl2PgogICAgPGJ1dHRvbiBpZD0iY3VzdG9tQWRkTW9kZSIgY2xhc3M9ImJ0biBzZWNvbmRhcnkiIHN0eWxlPSJtYXJnaW4tYm90dG9tOi42cmVtOyI+KyBBZGQgTW9kZTwvYnV0dG9uPgoKICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6LjZyZW07anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21hcmdpbi10b3A6LjNyZW07Ij4KICAgICAgPGJ1dHRvbiBpZD0iY3VzdG9tQ2FuY2VsIiBjbGFzcz0iYnRuIGRhbmdlciI+Q2FuY2VsPC9idXR0b24+CiAgICAgIDxidXR0b24gaWQ9ImN1c3RvbVNhdmUiICAgY2xhc3M9ImJ0biBwcmltYXJ5Ij5BZGQgRml4dHVyZTwvYnV0dG9uPgogICAgPC9kaXY+CiAgPC9kaXY+CjwvZGl2PgoKPHNjcmlwdD4KLyog4pSA4pSAIENvbmZpZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KY29uc3QgSlNPTl9VUkwgICAgICAgID0gJ2h0dHBzOi8vd2lsc29ucHJvYXZsLmNvbS90b29scy9maXh0dXJlc19jb21iaW5lZC5qc29uJzsKY29uc3QgQVBJX1VTRVIgICAgICAgID0gJ215dXNlcic7ICAgICAgIC8vIGZvciB1cGxvYWQKY29uc3QgQVBJX1BBU1MgICAgICAgID0gJ215cGFzc3dvcmQnOwpjb25zdCBJTVBPUlRfUEFTU1dPUkQgPSAnTXcxOTcxMDAxNyEnOwpjb25zdCBVUExPQURfUEFTU1dPUkQgPSAnTXcxOTcxMDAxNyEnOwoKLyog4pSA4pSAIFN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwpsZXQgZml4dHVyZURhdGE9W10sIG1hcHBpbmc9W10sIHF0eT0xOwoKLyog4pSA4pSAIERPTSBzaG9ydGN1dHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCmNvbnN0IG1hblNlbCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFudWZhY3R1cmVyU2VsZWN0Jyk7CmNvbnN0IGZpeFNlbCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZml4dHVyZVNlbGVjdCcpOwpjb25zdCBtb2RlU2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGVTZWxlY3QnKTsKY29uc3QgYWRkQnRuICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGRCdG4nKTsKY29uc3QgcXR5QnRuICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxdHlCdG4nKTsKY29uc3QgdGJvZHkgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtYXBwaW5nVGFibGUgdGJvZHknKTsKY29uc3QgaW1wb3J0RmlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbXBvcnRGaWxlJyk7CgovKiDilIDilIAgSGVscGVyOiBnZXQgbWFudWZhY3R1cmVyIG5hbWUgc2FmZWx5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwpjb25zdCBtYW5OYW1lPWY9PnsKICBpZih0eXBlb2YgZi5tYW51ZmFjdHVyZXI9PT0nc3RyaW5nJykgcmV0dXJuIGYubWFudWZhY3R1cmVyOwogIGlmKHR5cGVvZiBmLk1hbnVmYWN0dXJlcj09PSdzdHJpbmcnKSByZXR1cm4gZi5NYW51ZmFjdHVyZXI7CiAgaWYodHlwZW9mIGYuYnJhbmQ9PT0nc3RyaW5nJykgICAgICAgIHJldHVybiBmLmJyYW5kOwogIGlmKGYubWFudWZhY3R1cmVyPy5uYW1lKSAgICAgICAgICAgICByZXR1cm4gZi5tYW51ZmFjdHVyZXIubmFtZTsKICByZXR1cm4gJyc7Cn07CgovKiDilIDilIAgTG9hZCBsaWJyYXJ5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwpmZXRjaChKU09OX1VSTCkudGhlbihyPT5yLmpzb24oKSkudGhlbihqPT57CiAgZml4dHVyZURhdGEgPSBBcnJheS5pc0FycmF5KGopID8gaiA6CiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGouZml4dHVyZXMpPyBqLmZpeHR1cmVzIDoKICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoai5kYXRhKT8gICAgIGouZGF0YSA6IFtdOwogIGlmKCFmaXh0dXJlRGF0YS5sZW5ndGgpIHRocm93ICdVbmtub3duIEpTT04gZm9ybWF0JzsKICByZWZyZXNoTWFuKCk7Cn0pLmNhdGNoKGU9PnsKICBjb25zb2xlLmVycm9yKGUpOyBhbGVydCgnRmFpbGVkIHRvIGxvYWQgZml4dHVyZSBsaXN0Jyk7Cn0pOwoKLyog4pSA4pSAIFBvcHVsYXRlIG1hbnVmYWN0dXJlciBkcm9wZG93biDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KZnVuY3Rpb24gcmVmcmVzaE1hbigpewogIG1hblNlbC5pbm5lckhUTUw9JzxvcHRpb24gdmFsdWU9IiI+U2VsZWN0IE1hbnVmYWN0dXJlcjwvb3B0aW9uPic7CiAgWy4uLm5ldyBTZXQoZml4dHVyZURhdGEubWFwKG1hbk5hbWUpLmZpbHRlcihCb29sZWFuKSldLnNvcnQoKQogICAgLmZvckVhY2gobT0+bWFuU2VsLmFkZChuZXcgT3B0aW9uKG0sbSkpKTsKfQoKLyog4pSA4pSAIERyb3Bkb3duIGNoYWluIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwptYW5TZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywoKT0+ewogIGZpeFNlbC5pbm5lckhUTUw9JzxvcHRpb24gdmFsdWU9IiI+U2VsZWN0IEZpeHR1cmU8L29wdGlvbj4nOwogIG1vZGVTZWwuaW5uZXJIVE1MPSc8b3B0aW9uIHZhbHVlPSIiPlNlbGVjdCBNb2RlPC9vcHRpb24+JzsKICBmaXhTZWwuZGlzYWJsZWQ9bW9kZVNlbC5kaXNhYmxlZD1hZGRCdG4uZGlzYWJsZWQ9dHJ1ZTsKICBmaXh0dXJlRGF0YS5maWx0ZXIoZj0+bWFuTmFtZShmKT09PW1hblNlbC52YWx1ZSkKICAgICAgICAgICAgIC5mb3JFYWNoKGY9PmZpeFNlbC5hZGQobmV3IE9wdGlvbihmLm1vZGVsLGYubW9kZWwpKSk7CiAgZml4U2VsLmRpc2FibGVkID0gZml4U2VsLmxlbmd0aDw9MTsKfSk7CmZpeFNlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCgpPT57CiAgbW9kZVNlbC5pbm5lckhUTUw9JzxvcHRpb24gdmFsdWU9IiI+U2VsZWN0IE1vZGU8L29wdGlvbj4nOwogIGNvbnN0IGY9Zml4dHVyZURhdGEuZmluZCh4PT5tYW5OYW1lKHgpPT09bWFuU2VsLnZhbHVlICYmIHgubW9kZWw9PT1maXhTZWwudmFsdWUpOwogIGY/Lm1vZGVzLmZvckVhY2gobT0+bW9kZVNlbC5hZGQobmV3IE9wdGlvbihgJHttLm5hbWV9ICgke20uY2hhbm5lbHN9Y2gpYCxtLm5hbWUpKSk7CiAgbW9kZVNlbC5kaXNhYmxlZD0hZjsKfSk7Cm1vZGVTZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywoKT0+YWRkQnRuLmRpc2FibGVkPSFtb2RlU2VsLnZhbHVlKTsKCi8qIOKUgOKUgCBBZGQgZml4dHVyZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCmFkZEJ0bi5vbmNsaWNrPSgpPT57CiAgZm9yKGxldCBpPTA7aTxxdHk7aSsrKSBtYXBwaW5nLnB1c2goe21hbnVmYWN0dXJlcjptYW5TZWwudmFsdWUsbW9kZWw6Zml4U2VsLnZhbHVlLG1vZGU6bW9kZVNlbC52YWx1ZX0pOwogIHJlbmRlcigpOwp9OwoKLyog4pSA4pSAIEdldCBjaGFubmVsIGNvdW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwpjb25zdCBjaGFubmVscz0obWFuLG1vZCxtb2RlKT0+Zml4dHVyZURhdGEuZmluZChmPT5tYW5OYW1lKGYpPT09bWFuJiZmLm1vZGVsPT09bW9kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ubW9kZXMuZmluZChtPT5tLm5hbWU9PT1tb2RlKT8uY2hhbm5lbHN8fDA7CgovKiDilIDilIAgUmVuZGVyIHRhYmxlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwpmdW5jdGlvbiByZW5kZXIoKXsKICB0Ym9keS5pbm5lckhUTUw9Jyc7CiAgbGV0IHVuaT0xLGFkZHI9MTsKICBtYXBwaW5nLmZvckVhY2goKG0saSk9PnsKICAgIGNvbnN0IGNoPWNoYW5uZWxzKG0ubWFudWZhY3R1cmVyLG0ubW9kZWwsbS5tb2RlKTsKICAgIGlmKGFkZHIrY2gtMT41MTIpe3VuaSsrO2FkZHI9MTt9CiAgICBPYmplY3QuYXNzaWduKG0se3VuaSxzdGFydDphZGRyLGVuZDphZGRyK2NoLTF9KTsgYWRkcj1tLmVuZCsxOwoKICAgIGNvbnN0IHJvdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwogICAgY29uc3QgbW9kZVNlbGVjdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTsKICAgIGZpeHR1cmVEYXRhLmZpbmQoZj0+bWFuTmFtZShmKT09PW0ubWFudWZhY3R1cmVyICYmIGYubW9kZWw9PT1tLm1vZGVsKQogICAgICAgICAgICAgICAubW9kZXMuZm9yRWFjaChtZD0+ewogICAgICAgICAgICAgICAgIGNvbnN0IG89bmV3IE9wdGlvbihtZC5uYW1lLG1kLm5hbWUpOwogICAgICAgICAgICAgICAgIGlmKG1kLm5hbWU9PT1tLm1vZGUpIG8uc2VsZWN0ZWQ9dHJ1ZTsKICAgICAgICAgICAgICAgICBtb2RlU2VsZWN0LmFkZChvKTsKICAgICAgICAgICAgICAgfSk7CiAgICBtb2RlU2VsZWN0Lm9uY2hhbmdlPSgpPT57CiAgICAgIG1hcHBpbmcuZm9yRWFjaCh4PT57aWYoeC5tYW51ZmFjdHVyZXI9PT1tLm1hbnVmYWN0dXJlciYmeC5tb2RlbD09PW0ubW9kZWwpeC5tb2RlPW1vZGVTZWxlY3QudmFsdWU7fSk7CiAgICAgIHJlbmRlcigpOwogICAgfTsKCiAgICByb3cuaW5uZXJIVE1MPWA8dGQ+JHtpKzF9PC90ZD48dGQ+JHttLnVuaX08L3RkPjx0ZD4ke20uc3RhcnR9PC90ZD48dGQ+JHttLmVuZH08L3RkPgogICAgICAgICAgICAgICAgICAgPHRkPiR7bS5tYW51ZmFjdHVyZXJ9PC90ZD48dGQ+JHttLm1vZGVsfTwvdGQ+PHRkPjwvdGQ+CiAgICAgICAgICAgICAgICAgICA8dGQ+PGJ1dHRvbiBjbGFzcz0iYnRuIGRhbmdlciIgb25jbGljaz0ibWFwcGluZy5zcGxpY2UoJHtpfSwxKTtyZW5kZXIoKTsiPvCfl5HvuI88L2J1dHRvbj48L3RkPmA7CiAgICByb3cuY2hpbGRyZW5bNl0uYXBwZW5kQ2hpbGQobW9kZVNlbGVjdCk7CiAgICB0Ym9keS5hcHBlbmRDaGlsZChyb3cpOwogIH0pOwp9CgovKiDilIDilIAgRXhwb3J0IENTViAmIGVtYWlsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwpmdW5jdGlvbiBleHBvcnRDU1YoKXsKICBpZighbWFwcGluZy5sZW5ndGgpIHJldHVybiBhbGVydCgnTm8gZml4dHVyZXMgdG8gZXhwb3J0Jyk7CiAgY29uc3QgY3N2PSdJbmRleCxVbml2ZXJzZSxTdGFydCxFbmQsTWFudWZhY3R1cmVyLEZpeHR1cmUsTW9kZVxuJysKICAgICAgICAgICAgbWFwcGluZy5tYXAoKG0saSk9PmAke2krMX0sJHttLnVuaX0sJHttLnN0YXJ0fSwke20uZW5kfSwke20ubWFudWZhY3R1cmVyfSwke20ubW9kZWx9LCR7bS5tb2RlfWApLmpvaW4oJ1xuJyk7CiAgY29uc3QgdT1VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtjc3ZdLHt0eXBlOid0ZXh0L2Nzdid9KSk7CiAgT2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJykse2hyZWY6dSxkb3dubG9hZDonZG14LW1hcHBpbmcuY3N2J30pLmNsaWNrKCk7CiAgVVJMLnJldm9rZU9iamVjdFVSTCh1KTsKfQpmdW5jdGlvbiBlbWFpbERhdGEoKXsKICBpZighbWFwcGluZy5sZW5ndGgpIHJldHVybiBhbGVydCgnTm8gZml4dHVyZXMgdG8gZW1haWwnKTsKICBjb25zdCBib2R5PW1hcHBpbmcubWFwKChtLGkpPT5gIyR7aSsxfTogVSR7bS51bml9ICR7bS5zdGFydH0tJHttLmVuZH0gJHttLm1hbnVmYWN0dXJlcn0gJHttLm1vZGVsfSAoJHttLm1vZGV9KWApLmpvaW4oJ1xuJyk7CiAgbG9jYXRpb24uaHJlZj1gbWFpbHRvOj9zdWJqZWN0PURNWCUyME1hcHBpbmcmYm9keT0ke2VuY29kZVVSSUNvbXBvbmVudChib2R5KX1gOwp9CmZ1bmN0aW9uIGNsZWFyQWxsKCl7bWFwcGluZz1bXTtyZW5kZXIoKTt9CgovKiDilIDilIAgU2F2ZSBGaXh0dXJlIExpc3QgKGRvd25sb2FkICsgdXBsb2FkKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KZnVuY3Rpb24gc2F2ZUZpeHR1cmVMaXN0KCl7CiAgaWYoIWZpeHR1cmVEYXRhLmxlbmd0aCkgcmV0dXJuIGFsZXJ0KCdObyBmaXh0dXJlIGRhdGEgdG8gc2F2ZScpOwoKICAvKiBsb2NhbCBkb3dubG9hZCAqLwogIGNvbnN0IGJsb2I9bmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KHtmaXh0dXJlczpmaXh0dXJlRGF0YX0sbnVsbCwyKV0se3R5cGU6J2FwcGxpY2F0aW9uL2pzb24nfSk7CiAgY29uc3QgdXJsPVVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgT2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJykse2hyZWY6dXJsLGRvd25sb2FkOidmaXh0dXJlc19jb21iaW5lZC5qc29uJ30pLmNsaWNrKCk7CiAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpOwoKICAvKiB1cGxvYWQgKi8KICBpZihwcm9tcHQoJ0VudGVyIHVwbG9hZCBwYXNzd29yZDonKSE9PVVQTE9BRF9QQVNTV09SRCkgcmV0dXJuIGFsZXJ0KCdJbmNvcnJlY3QgcGFzc3dvcmQg4oCTIHVwbG9hZCBza2lwcGVkJyk7CiAgZmV0Y2goJ2h0dHBzOi8vd2lsc29ucHJvYXZsLmNvbS90b29scy9zYXZlLWZpeHR1cmVzLnBocCcsewogICAgbWV0aG9kOidQT1NUJywKICAgIGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJywnQXV0aG9yaXphdGlvbic6J0Jhc2ljICcrYnRvYShgJHtBUElfVVNFUn06JHtBUElfUEFTU31gKX0sCiAgICBib2R5OkpTT04uc3RyaW5naWZ5KHtmaXh0dXJlczpmaXh0dXJlRGF0YX0pCiAgfSkKICAudGhlbihyPT5yLm9rP3IudGV4dCgpOlByb21pc2UucmVqZWN0KCdVcGxvYWQgZmFpbGVkJykpCiAgLnRoZW4obXNnPT5hbGVydChtc2d8fCdVcGxvYWRlZCB0byBzZXJ2ZXInKSkKICAuY2F0Y2goZXJyPT5hbGVydChlcnIpKTsKfQoKLyog4pSA4pSAIEltcG9ydCBKU09OIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwppbXBvcnRGaWxlLm9uY2hhbmdlPWU9PnsKICBjb25zdCBmaWxlPWUudGFyZ2V0LmZpbGVzWzBdOyBpZighZmlsZSkgcmV0dXJuOwogIGlmKHByb21wdCgnRW50ZXIgaW1wb3J0IHBhc3N3b3JkOicpIT09SU1QT1JUX1BBU1NXT1JEKXthbGVydCgnSW5jb3JyZWN0IHBhc3N3b3JkJyk7ZS50YXJnZXQudmFsdWU9Jyc7cmV0dXJuO30KICBjb25zdCByZWFkZXI9bmV3IEZpbGVSZWFkZXIoKTsKICByZWFkZXIub25sb2FkPWV2PT57CiAgICB0cnl7CiAgICAgIGNvbnN0IGo9SlNPTi5wYXJzZShldi50YXJnZXQucmVzdWx0KTsKICAgICAgZml4dHVyZURhdGEgPSBBcnJheS5pc0FycmF5KGouZml4dHVyZXMpP2ouZml4dHVyZXM6QXJyYXkuaXNBcnJheShqKT9qOmouZGF0YXx8W107CiAgICAgIHJlZnJlc2hNYW4oKTsgYWxlcnQoJ0ZpeHR1cmUgbGlicmFyeSBpbXBvcnRlZCcpOwogICAgfWNhdGNoe2FsZXJ0KCdJbnZhbGlkIGZpeHR1cmUgSlNPTicpO30KICB9OwogIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOyBlLnRhcmdldC52YWx1ZT0nJzsKfTsKCi8qIOKUgOKUgCBDdXN0b20tZml4dHVyZSBsb2dpYyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KY29uc3QgY3VzdG9tTW9kYWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbU1vZGFsJyk7CmNvbnN0IGN1c3RvbVBhbmVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0b21QYW5lbCcpOwoKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbUJ0bicpLm9uY2xpY2s9KCk9PnsKICBjdXN0b21Nb2RhbC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTsKICBpZighZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1vZGUtcm93JykpIGFkZE1vZGVSb3coKTsKfTsKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbUNsb3NlJykub25jbGljaz0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbUNhbmNlbCcpLm9uY2xpY2s9KCk9PnsKICBjdXN0b21Nb2RhbC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VzdG9tTW9kZXMnKS5pbm5lckhUTUw9Jyc7Cn07CgovKiBhZGQvcmVtb3ZlIG1vZGUgcm93cyAqLwpmdW5jdGlvbiBhZGRNb2RlUm93KG5hbWU9JycsY2g9JycpewogIGNvbnN0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgci5jbGFzc05hbWU9J21vZGUtcm93JzsKICByLmlubmVySFRNTD1gPGlucHV0IHBsYWNlaG9sZGVyPSJNb2RlIiB2YWx1ZT0iJHtuYW1lfSI+CiAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMSIgbWF4PSI1MTIiIHZhbHVlPSIke2NofSIgcGxhY2Vob2xkZXI9IkNoIj4KICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icm0iPsOXPC9idXR0b24+YDsKICByLnF1ZXJ5U2VsZWN0b3IoJy5ybScpLm9uY2xpY2s9KCk9PnIucmVtb3ZlKCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbU1vZGVzJykuYXBwZW5kQ2hpbGQocik7Cn0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbUFkZE1vZGUnKS5vbmNsaWNrPSgpPT5hZGRNb2RlUm93KCk7CgovKiBzYXZlIGN1c3RvbSBmaXh0dXJlICovCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0b21TYXZlJykub25jbGljaz0oKT0+ewogIGNvbnN0IG1hbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VzdG9tTWFuJykudmFsdWUudHJpbSgpOwogIGNvbnN0IG1vZGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0b21Nb2RlbCcpLnZhbHVlLnRyaW0oKTsKICBjb25zdCBtb2Rlcz1bLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2N1c3RvbU1vZGVzIC5tb2RlLXJvdycpXS5tYXAocj0+KHsKICAgIG5hbWU6ci5jaGlsZHJlblswXS52YWx1ZS50cmltKCksIGNoYW5uZWxzOityLmNoaWxkcmVuWzFdLnZhbHVlfHwwCiAgfSkpLmZpbHRlcihtPT5tLm5hbWUmJm0uY2hhbm5lbHM+MCk7CiAgaWYoIW1hbnx8IW1vZGVsfHwhbW9kZXMubGVuZ3RoKSByZXR1cm4gYWxlcnQoJ0FsbCBmaWVsZHMgcmVxdWlyZWQnKTsKCiAgbGV0IGZ4PWZpeHR1cmVEYXRhLmZpbmQoZj0+bWFuTmFtZShmKT09PW1hbiYmZi5tb2RlbD09PW1vZGVsKTsKICBpZighZngpe2Z4PXttYW51ZmFjdHVyZXI6bWFuLG1vZGVsOm1vZGVsLG1vZGVzOltdfTtmaXh0dXJlRGF0YS5wdXNoKGZ4KTt9CiAgbW9kZXMuZm9yRWFjaChtPT57CiAgICBjb25zdCBleD1meC5tb2Rlcy5maW5kKHg9PngubmFtZT09PW0ubmFtZSk7CiAgICBleD9leC5jaGFubmVscz1tLmNoYW5uZWxzOmZ4Lm1vZGVzLnB1c2gobSk7CiAgfSk7CiAgcmVmcmVzaE1hbigpOwogIGN1c3RvbU1vZGFsLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0b21Nb2RlcycpLmlubmVySFRNTD0nJzsKICBhbGVydCgnQ3VzdG9tIGZpeHR1cmUgc2F2ZWQnKTsKfTsKCi8qIOKUgOKUgCBRdHkga2V5cGFkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwpjb25zdCBrZXlwYWRNb2RhbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5cGFkTW9kYWwnKTsKY29uc3Qga2V5cGFkUGFuZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleXBhZFBhbmVsJyk7CmNvbnN0IGtleXBhZERpc3BsYXk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleXBhZERpc3BsYXknKTsKY29uc3Qga2V5cGFkS2V5cz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5cGFkS2V5cycpOwpxdHlCdG4ub25jbGljaz0oKT0+e2tleXBhZERpc3BsYXkudGV4dENvbnRlbnQ9cXR5O2tleXBhZE1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO307ClsnMScsJzInLCczJywnNCcsJzUnLCc2JywnNycsJzgnLCc5JywnMCcsJ+KGkCcsJ0MnXS5mb3JFYWNoKGs9PnsKICBjb25zdCBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO2IudGV4dENvbnRlbnQ9azsKICBiLm9uY2xpY2s9KCk9PnsKICAgIGlmKGs9PT0nQycpIGtleXBhZERpc3BsYXkudGV4dENvbnRlbnQ9JzAnOwogICAgZWxzZSBpZihrPT09J+KGkCcpIGtleXBhZERpc3BsYXkudGV4dENvbnRlbnQ9a2V5cGFkRGlzcGxheS50ZXh0Q29udGVudC5zbGljZSgwLC0xKXx8JzAnOwogICAgZWxzZSBrZXlwYWREaXNwbGF5LnRleHRDb250ZW50PWtleXBhZERpc3BsYXkudGV4dENvbnRlbnQ9PT0nMCc/azprZXlwYWREaXNwbGF5LnRleHRDb250ZW50K2s7CiAgfTsKICBrZXlwYWRLZXlzLmFwcGVuZENoaWxkKGIpOwp9KTsKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleXBhZE9rJykub25jbGljaz0oKT0+ewogIHF0eT1NYXRoLm1heCgxLCtrZXlwYWREaXNwbGF5LnRleHRDb250ZW50KTsKICBxdHlCdG4udGV4dENvbnRlbnQ9YFF0eTogJHtxdHl9YDsKICBrZXlwYWRNb2RhbC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTsKfTsKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleXBhZENhbmNlbCcpLm9uY2xpY2s9KCk9PmtleXBhZE1vZGFsLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpOwoKLyog4pSA4pSAIE1ha2UgcGFuZWxzIGRyYWdnYWJsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KZnVuY3Rpb24gbWFrZURyYWcocGFuZWwpewogIGxldCBkcmFnPWZhbHNlLG94PTAsb3k9MDsKICBwYW5lbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLGU9PnsKICAgIGlmKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnY2xvc2UtYnRuJykpIHJldHVybjsKICAgIGRyYWc9dHJ1ZTtveD1lLmNsaWVudFgtcGFuZWwub2Zmc2V0TGVmdDtveT1lLmNsaWVudFktcGFuZWwub2Zmc2V0VG9wOwogIH0pOwogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsZT0+ewogICAgaWYoIWRyYWcpIHJldHVybjsKICAgIHBhbmVsLnN0eWxlLmxlZnQ9YCR7ZS5jbGllbnRYLW94fXB4YDtwYW5lbC5zdHlsZS50b3A9YCR7ZS5jbGllbnRZLW95fXB4YDsKICB9KTsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywoKT0+ZHJhZz1mYWxzZSk7Cn0KbWFrZURyYWcoa2V5cGFkUGFuZWwpOyBtYWtlRHJhZyhjdXN0b21QYW5lbCk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K[/fusion_code][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]