[fusion_builder_container hundred_percent=”no” hundred_percent_height=”no” hundred_percent_height_scroll=”no” hundred_percent_height_center_content=”yes” equal_height_columns=”no” menu_anchor=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” status=”published” publish_date=”” class=”” id=”” background_color=”” background_image=”” background_position=”center center” background_repeat=”no-repeat” fade=”no” background_parallax=”none” enable_mobile=”no” parallax_speed=”0.3″ video_mp4=”” video_webm=”” video_ogv=”” video_url=”” video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” video_preview_image=”” border_size=”” border_color=”” border_style=”solid” margin_top=”” margin_bottom=”” padding_top=”” padding_right=”” padding_bottom=”” padding_left=””][fusion_builder_row][fusion_builder_column type=”1_1″ layout=”1_1″ spacing=”” center_content=”no” link=”” target=”_self” min_height=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” class=”” id=”” background_color=”” background_image=”” background_image_id=”” background_position=”left top” background_repeat=”no-repeat” hover_type=”none” border_size=”0″ 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=”” padding_top=”” padding_right=”” padding_bottom=”” padding_left=”” margin_top=”” margin_bottom=”” animation_type=”” animation_direction=”left” animation_speed=”0.3″ animation_offset=”” last=”no”][fusion_code]PHN0eWxlPgogI19mb3JtXzFfIHsgZm9udC1zaXplOjE0cHg7IGxpbmUtaGVpZ2h0OjEuNjsgZm9udC1mYW1pbHk6YXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJpZjsgbWFyZ2luOjA7IH0KICNfZm9ybV8xXyAqIHsgb3V0bGluZTowOyB9CiAuX2Zvcm1faGlkZSB7IGRpc3BsYXk6bm9uZTsgdmlzaWJpbGl0eTpoaWRkZW47IH0KIC5fZm9ybV9zaG93IHsgZGlzcGxheTpibG9jazsgdmlzaWJpbGl0eTp2aXNpYmxlOyB9CiAjX2Zvcm1fMV8uX2Zvcm0tdG9wIHsgdG9wOjA7IH0KICNfZm9ybV8xXy5fZm9ybS1ib3R0b20geyBib3R0b206MDsgfQogI19mb3JtXzFfLl9mb3JtLWxlZnQgeyBsZWZ0OjA7IH0KICNfZm9ybV8xXy5fZm9ybS1yaWdodCB7IHJpZ2h0OjA7IH0KICNfZm9ybV8xXyBpbnB1dFt0eXBlPSJ0ZXh0Il0sI19mb3JtXzFfIGlucHV0W3R5cGU9ImRhdGUiXSwjX2Zvcm1fMV8gdGV4dGFyZWEgeyBwYWRkaW5nOjZweDsgaGVpZ2h0OmF1dG87IGJvcmRlcjojOTc5Nzk3IDFweCBzb2xpZDsgYm9yZGVyLXJhZGl1czo0cHg7IGNvbG9yOiMwMDAgIWltcG9ydGFudDsgZm9udC1zaXplOjEzcHg7IC13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94OyAtbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDsgYm94LXNpemluZzpib3JkZXItYm94OyB9CiAjX2Zvcm1fMV8gdGV4dGFyZWEgeyByZXNpemU6bm9uZTsgfQogI19mb3JtXzFfIC5fc3VibWl0IHsgLXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7IGN1cnNvcjpwb2ludGVyOyBmb250LWZhbWlseTphcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjE0cHg7IHRleHQtYWxpZ246Y2VudGVyOyBiYWNrZ3JvdW5kOiMzMzMgIWltcG9ydGFudDsgYm9yZGVyOjAgIWltcG9ydGFudDsgLW1vei1ib3JkZXItcmFkaXVzOjRweCAhaW1wb3J0YW50OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4ICFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6NHB4ICFpbXBvcnRhbnQ7IGNvbG9yOiNmZmYgIWltcG9ydGFudDsgcGFkZGluZzoxMHB4ICFpbXBvcnRhbnQ7IH0KICNfZm9ybV8xXyAuX2Nsb3NlLWljb24geyBjdXJzb3I6cG9pbnRlcjsgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2h0dHBzOi8vZDIyNmFqNGFvMXQ2MXEuY2xvdWRmcm9udC5uZXQvZXNma3lqaDF1X2Zvcm1zLWNsb3NlLWRhcmsucG5nJyk7IGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsgYmFja2dyb3VuZC1zaXplOjE0LjJweCAxNC4ycHg7IHBvc2l0aW9uOmFic29sdXRlOyBkaXNwbGF5OmJsb2NrOyB0b3A6MTFweDsgcmlnaHQ6OXB4OyBvdmVyZmxvdzpoaWRkZW47IHdpZHRoOjE2LjJweDsgaGVpZ2h0OjE2LjJweDsgfQogI19mb3JtXzFfIC5fY2xvc2UtaWNvbjpiZWZvcmUgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgfQogI19mb3JtXzFfIC5fZm9ybS1ib2R5IHsgbWFyZ2luLWJvdHRvbTozMHB4OyB9CiAjX2Zvcm1fMV8gLl9mb3JtLWltYWdlLWxlZnQgeyB3aWR0aDoxNTBweDsgZmxvYXQ6bGVmdDsgfQogI19mb3JtXzFfIC5fZm9ybS1jb250ZW50LXJpZ2h0IHsgbWFyZ2luLWxlZnQ6MTY0cHg7IH0KICNfZm9ybV8xXyAuX2Zvcm0tYnJhbmRpbmcgeyBjb2xvcjojZmZmOyBmb250LXNpemU6MTBweDsgY2xlYXI6Ym90aDsgdGV4dC1hbGlnbjpsZWZ0OyBtYXJnaW4tdG9wOjMwcHg7IGZvbnQtd2VpZ2h0OjEwMDsgfQogI19mb3JtXzFfIC5fZm9ybS1icmFuZGluZyAuX2xvZ28geyBkaXNwbGF5OmJsb2NrOyB3aWR0aDoxMzBweDsgaGVpZ2h0OjE0cHg7IG1hcmdpbi10b3A6NnB4OyBiYWNrZ3JvdW5kLWltYWdlOnVybCgnaHR0cHM6Ly9kMjI2YWo0YW8xdDYxcS5jbG91ZGZyb250Lm5ldC9oaDl1anFndjVfYWNsb2dvX2xpLnBuZycpOyBiYWNrZ3JvdW5kLXNpemU6MTMwcHggYXV0bzsgYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OyB9CiAjX2Zvcm1fMV8gLl9mb3JtLWxhYmVsLCNfZm9ybV8xXyAuX2Zvcm1fZWxlbWVudCAuX2Zvcm0tbGFiZWwgeyBmb250LXdlaWdodDpib2xkOyBtYXJnaW4tYm90dG9tOjVweDsgZGlzcGxheTpibG9jazsgfQogI19mb3JtXzFfLl9kYXJrIC5fZm9ybS1icmFuZGluZyB7IGNvbG9yOiMzMzM7IH0KICNfZm9ybV8xXy5fZGFyayAuX2Zvcm0tYnJhbmRpbmcgLl9sb2dvIHsgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2h0dHBzOi8vZDIyNmFqNGFvMXQ2MXEuY2xvdWRmcm9udC5uZXQvamZ0cTJjOHNfYWNsb2dvX2RrLnBuZycpOyB9CiAjX2Zvcm1fMV8gLl9mb3JtX2VsZW1lbnQgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxMHB4OyBmb250LXNpemU6MDsgbWF4LXdpZHRoOjEwMCU7IH0KICNfZm9ybV8xXyAuX2Zvcm1fZWxlbWVudCAqIHsgZm9udC1zaXplOjE0cHg7IH0KICNfZm9ybV8xXyAuX2Zvcm1fZWxlbWVudC5fY2xlYXIgeyBjbGVhcjpib3RoOyB3aWR0aDoxMDAlOyBmbG9hdDpub25lOyB9CiAjX2Zvcm1fMV8gLl9mb3JtX2VsZW1lbnQuX2NsZWFyOmFmdGVyIHsgY2xlYXI6bGVmdDsgfQogI19mb3JtXzFfIC5fZm9ybV9lbGVtZW50IGlucHV0W3R5cGU9InRleHQiXSwjX2Zvcm1fMV8gLl9mb3JtX2VsZW1lbnQgaW5wdXRbdHlwZT0iZGF0ZSJdLCNfZm9ybV8xXyAuX2Zvcm1fZWxlbWVudCBzZWxlY3QsI19mb3JtXzFfIC5fZm9ybV9lbGVtZW50IHRleHRhcmVhOm5vdCguZy1yZWNhcHRjaGEtcmVzcG9uc2UpIHsgZGlzcGxheTpibG9jazsgd2lkdGg6MTAwJTsgLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7IC1tb3otYm94LXNpemluZzpib3JkZXItYm94OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IH0KICNfZm9ybV8xXyAuX2ZpZWxkLXdyYXBwZXIgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgfQogI19mb3JtXzFfIC5faW5saW5lLXN0eWxlIHsgZmxvYXQ6bGVmdDsgfQogI19mb3JtXzFfIC5faW5saW5lLXN0eWxlIGlucHV0W3R5cGU9InRleHQiXSB7IHdpZHRoOjE1MHB4OyB9CiAjX2Zvcm1fMV8gLl9pbmxpbmUtc3R5bGU6bm90KC5fY2xlYXIpICsgLl9pbmxpbmUtc3R5bGU6bm90KC5fY2xlYXIpIHsgbWFyZ2luLWxlZnQ6MjBweDsgfQogI19mb3JtXzFfIC5fZm9ybV9lbGVtZW50IGltZy5fZm9ybS1pbWFnZSB7IG1heC13aWR0aDoxMDAlOyB9CiAjX2Zvcm1fMV8gLl9jbGVhci1lbGVtZW50IHsgY2xlYXI6bGVmdDsgfQogI19mb3JtXzFfIC5fZnVsbF93aWR0aCB7IHdpZHRoOjEwMCU7IH0KICNfZm9ybV8xXyAuX2Zvcm1fZnVsbF9maWVsZCB7IGRpc3BsYXk6YmxvY2s7IHdpZHRoOjEwMCU7IG1hcmdpbi1ib3R0b206MTBweDsgfQogI19mb3JtXzFfIGlucHV0W3R5cGU9InRleHQiXS5faGFzX2Vycm9yLCNfZm9ybV8xXyB0ZXh0YXJlYS5faGFzX2Vycm9yIHsgYm9yZGVyOiNmMzdjN2IgMXB4IHNvbGlkOyB9CiAjX2Zvcm1fMV8gaW5wdXRbdHlwZT0iY2hlY2tib3giXS5faGFzX2Vycm9yIHsgb3V0bGluZTojZjM3YzdiIDFweCBzb2xpZDsgfQogI19mb3JtXzFfIC5fZXJyb3IgeyBkaXNwbGF5OmJsb2NrOyBwb3NpdGlvbjphYnNvbHV0ZTsgZm9udC1zaXplOjEzcHg7IHotaW5kZXg6MTAwMDAwMDE7IH0KICNfZm9ybV8xXyAuX2Vycm9yLl9hYm92ZSB7IHBhZGRpbmctYm90dG9tOjRweDsgYm90dG9tOjM5cHg7IHJpZ2h0OjA7IH0KICNfZm9ybV8xXyAuX2Vycm9yLl9iZWxvdyB7IHBhZGRpbmctdG9wOjRweDsgdG9wOjEwMCU7IHJpZ2h0OjA7IH0KICNfZm9ybV8xXyAuX2Vycm9yLl9hYm92ZSAuX2Vycm9yLWFycm93IHsgYm90dG9tOjA7IHJpZ2h0OjE1cHg7IGJvcmRlci1sZWZ0OjVweCBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLXJpZ2h0OjVweCBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLXRvcDo1cHggc29saWQgI2YzN2M3YjsgfQogI19mb3JtXzFfIC5fZXJyb3IuX2JlbG93IC5fZXJyb3ItYXJyb3cgeyB0b3A6MDsgcmlnaHQ6MTVweDsgYm9yZGVyLWxlZnQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItYm90dG9tOjVweCBzb2xpZCAjZjM3YzdiOyB9CiAjX2Zvcm1fMV8gLl9lcnJvci1pbm5lciB7IHBhZGRpbmc6OHB4IDEycHg7IGJhY2tncm91bmQtY29sb3I6I2YzN2M3YjsgZm9udC1zaXplOjEzcHg7IGZvbnQtZmFtaWx5OmFyaWFsLCBzYW5zLXNlcmlmOyBjb2xvcjojZmZmOyB0ZXh0LWFsaWduOmNlbnRlcjsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IC13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7IC1tb3otYm9yZGVyLXJhZGl1czo0cHg7IGJvcmRlci1yYWRpdXM6NHB4OyB9CiAjX2Zvcm1fMV8gLl9lcnJvci1pbm5lci5fZm9ybV9lcnJvciB7IG1hcmdpbi1ib3R0b206NXB4OyB0ZXh0LWFsaWduOmxlZnQ7IH0KICNfZm9ybV8xXyAuX2J1dHRvbi13cmFwcGVyIC5fZXJyb3ItaW5uZXIuX2Zvcm1fZXJyb3IgeyBwb3NpdGlvbjpzdGF0aWM7IH0KICNfZm9ybV8xXyAuX2Vycm9yLWlubmVyLl9ub19hcnJvdyB7IG1hcmdpbi1ib3R0b206MTBweDsgfQogI19mb3JtXzFfIC5fZXJyb3ItYXJyb3cgeyBwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MDsgaGVpZ2h0OjA7IH0KICNfZm9ybV8xXyAuX2Vycm9yLWh0bWwgeyBtYXJnaW4tYm90dG9tOjEwcHg7IH0KIC5waWthLXNpbmdsZSB7IHotaW5kZXg6MTAwMDAwMDEgIWltcG9ydGFudDsgfQogQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpIHsgOjotd2Via2l0LXNjcm9sbGJhciB7IGRpc3BsYXk6bm9uZTsgfQogI19mb3JtXzFfIHsgbWFyZ2luOjA7IHdpZHRoOjEwMCU7IG1pbi13aWR0aDoxMDAlOyBtYXgtd2lkdGg6MTAwJTsgYm94LXNpemluZzpib3JkZXItYm94OyB9CiAjX2Zvcm1fMV8gKiB7IC13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94OyAtbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDsgYm94LXNpemluZzpib3JkZXItYm94OyBmb250LXNpemU6MWVtOyB9CiAjX2Zvcm1fMV8gLl9mb3JtLWNvbnRlbnQgeyBtYXJnaW46MDsgd2lkdGg6MTAwJTsgfQogI19mb3JtXzFfIC5fZm9ybS1pbm5lciB7IGRpc3BsYXk6YmxvY2s7IG1pbi13aWR0aDoxMDAlOyB9CiAjX2Zvcm1fMV8gLl9mb3JtLXRpdGxlLCNfZm9ybV8xXyAuX2lubGluZS1zdHlsZSB7IG1hcmdpbi10b3A6MDsgbWFyZ2luLXJpZ2h0OjA7IG1hcmdpbi1sZWZ0OjA7IH0KICNfZm9ybV8xXyAuX2Zvcm0tdGl0bGUgeyBmb250LXNpemU6MS4yZW07IH0KICNfZm9ybV8xXyAuX2Zvcm1fZWxlbWVudCB7IG1hcmdpbjowIDAgMjBweDsgcGFkZGluZzowOyB3aWR0aDoxMDAlOyB9CiAjX2Zvcm1fMV8gLl9mb3JtLWVsZW1lbnQsI19mb3JtXzFfIC5faW5saW5lLXN0eWxlLCNfZm9ybV8xXyBpbnB1dFt0eXBlPSJ0ZXh0Il0sI19mb3JtXzFfIGxhYmVsLCNfZm9ybV8xXyBwLCNfZm9ybV8xXyB0ZXh0YXJlYTpub3QoLmctcmVjYXB0Y2hhLXJlc3BvbnNlKSB7IGZsb2F0Om5vbmU7IGRpc3BsYXk6YmxvY2s7IHdpZHRoOjEwMCU7IH0KICNfZm9ybV8xXyAuX3Jvdy5fY2hlY2tib3gtcmFkaW8gbGFiZWwgeyBkaXNwbGF5OmlubGluZTsgfQogI19mb3JtXzFfIC5fcm93LCNfZm9ybV8xXyBwLCNfZm9ybV8xXyBsYWJlbCB7IG1hcmdpbi1ib3R0b206MC43ZW07IHdpZHRoOjEwMCU7IH0KICNfZm9ybV8xXyAuX3JvdyBpbnB1dFt0eXBlPSJjaGVja2JveCJdLCNfZm9ybV8xXyAuX3JvdyBpbnB1dFt0eXBlPSJyYWRpbyJdIHsgbWFyZ2luOjAgIWltcG9ydGFudDsgdmVydGljYWwtYWxpZ246bWlkZGxlICFpbXBvcnRhbnQ7IH0KICNfZm9ybV8xXyAuX3JvdyBpbnB1dFt0eXBlPSJjaGVja2JveCJdICsgc3BhbiBsYWJlbCB7IGRpc3BsYXk6aW5saW5lOyB9CiAjX2Zvcm1fMV8gLl9yb3cgc3BhbiBsYWJlbCB7IG1hcmdpbjowICFpbXBvcnRhbnQ7IHdpZHRoOmluaXRpYWwgIWltcG9ydGFudDsgdmVydGljYWwtYWxpZ246bWlkZGxlICFpbXBvcnRhbnQ7IH0KICNfZm9ybV8xXyAuX2Zvcm0taW1hZ2UgeyBtYXgtd2lkdGg6MTAwJTsgaGVpZ2h0OmF1dG8gIWltcG9ydGFudDsgfQogI19mb3JtXzFfIGlucHV0W3R5cGU9InRleHQiXSB7IHBhZGRpbmctbGVmdDoxMHB4OyBwYWRkaW5nLXJpZ2h0OjEwcHg7IGZvbnQtc2l6ZToxNnB4OyBsaW5lLWhlaWdodDoxLjNlbTsgLXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7IH0KICNfZm9ybV8xXyBpbnB1dFt0eXBlPSJyYWRpbyJdLCNfZm9ybV8xXyBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsgZGlzcGxheTppbmxpbmUtYmxvY2s7IHdpZHRoOjEuM2VtOyBoZWlnaHQ6MS4zZW07IGZvbnQtc2l6ZToxZW07IG1hcmdpbjowIDAuM2VtIDAgMDsgdmVydGljYWwtYWxpZ246YmFzZWxpbmU7IH0KICNfZm9ybV8xXyBidXR0b25bdHlwZT0ic3VibWl0Il0geyBwYWRkaW5nOjIwcHg7IGZvbnQtc2l6ZToxLjVlbTsgfQogI19mb3JtXzFfIC5faW5saW5lLXN0eWxlIHsgbWFyZ2luOjIwcHggMCAwICFpbXBvcnRhbnQ7IH0KIH0KICNfZm9ybV8xXyB7IHBvc2l0aW9uOnJlbGF0aXZlOyB0ZXh0LWFsaWduOmxlZnQ7IG1hcmdpbjoyNXB4IGF1dG8gMDsgcGFkZGluZzoyMHB4OyAtd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDsgLW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgKnpvb206MTsgYmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7IGJvcmRlcjowcHggc29saWQgI2IwYjBiMCAhaW1wb3J0YW50OyB3aWR0aDo1MDBweDsgLW1vei1ib3JkZXItcmFkaXVzOjBweCAhaW1wb3J0YW50OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6MHB4ICFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6MHB4ICFpbXBvcnRhbnQ7IGNvbG9yOiMwMDAgIWltcG9ydGFudDsgfQogI19mb3JtXzFfIC5fZm9ybS10aXRsZSB7IGZvbnQtc2l6ZToyMnB4OyBsaW5lLWhlaWdodDoyMnB4OyBmb250LXdlaWdodDo2MDA7IG1hcmdpbi1ib3R0b206MDsgfQogI19mb3JtXzFfOmJlZm9yZSwjX2Zvcm1fMV86YWZ0ZXIgeyBjb250ZW50OiIgIjsgZGlzcGxheTp0YWJsZTsgfQogI19mb3JtXzFfOmFmdGVyIHsgY2xlYXI6Ym90aDsgfQogI19mb3JtXzFfLl9pbmxpbmUtc3R5bGUgeyB3aWR0aDphdXRvOyBkaXNwbGF5OmlubGluZS1ibG9jazsgfQogI19mb3JtXzFfLl9pbmxpbmUtc3R5bGUgaW5wdXRbdHlwZT0idGV4dCJdLCNfZm9ybV8xXy5faW5saW5lLXN0eWxlIGlucHV0W3R5cGU9ImRhdGUiXSB7IHBhZGRpbmc6MTBweCAxMnB4OyB9CiAjX2Zvcm1fMV8uX2lubGluZS1zdHlsZSBidXR0b24uX2lubGluZS1zdHlsZSB7IHBvc2l0aW9uOnJlbGF0aXZlOyB0b3A6MjdweDsgfQogI19mb3JtXzFfLl9pbmxpbmUtc3R5bGUgcCB7IG1hcmdpbjowOyB9CiAjX2Zvcm1fMV8uX2lubGluZS1zdHlsZSAuX2J1dHRvbi13cmFwcGVyIHsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbjoyN3B4IDEyLjVweCAwIDIwcHg7IH0KICNfZm9ybV8xXyAuX2Zvcm0tdGhhbmsteW91IHsgcG9zaXRpb246cmVsYXRpdmU7IGxlZnQ6MDsgcmlnaHQ6MDsgdGV4dC1hbGlnbjpjZW50ZXI7IGZvbnQtc2l6ZToxOHB4OyB9CiBAbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOjMyMHB4KSBhbmQgKG1heC13aWR0aDo2NjdweCkgeyAjX2Zvcm1fMV8uX2lubGluZS1mb3JtLl9pbmxpbmUtc3R5bGUgLl9pbmxpbmUtc3R5bGUuX2J1dHRvbi13cmFwcGVyIHsgbWFyZ2luLXRvcDoyMHB4ICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OjAgIWltcG9ydGFudDsgfQogfQo8L3N0eWxlPgo8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iaHR0cHM6Ly9hZGVsYWluYmVhdXR5LmFjdGl2ZWhvc3RlZC5jb20vcHJvYy5waHAiIGlkPSJfZm9ybV8xXyIgY2xhc3M9Il9mb3JtIF9mb3JtXzEgX2lubGluZS1mb3JtICBfZGFyayIgbm92YWxpZGF0ZT4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ1IiB2YWx1ZT0iMSIgLz4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmIiB2YWx1ZT0iMSIgLz4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzIiAvPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImMiIHZhbHVlPSIwIiAvPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im0iIHZhbHVlPSIwIiAvPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InN1YiIgLz4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ2IiB2YWx1ZT0iMiIgLz4KICA8ZGl2IGNsYXNzPSJfZm9ybS1jb250ZW50Ij4KICAgIDxkaXYgY2xhc3M9Il9mb3JtX2VsZW1lbnQgX3g1NDc0MjYzMCBfZnVsbF93aWR0aCBfY2xlYXIiID4KICAgICAgPGRpdiBjbGFzcz0iX2Zvcm0tdGl0bGUiPgogICAgICAgIFRpbGFhIGt1dWthdXNpa2lyamVlbW1lCiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJfZm9ybV9lbGVtZW50IF94OTcwODI5NTYgX2Z1bGxfd2lkdGggX2NsZWFyIiA+CiAgICAgIDxkaXYgY2xhc3M9Il9odG1sLWNvZGUiPgogICAgICAgIDxwPgogICAgICAgICAgTMOkaGV0w6RtbWUga2VycmFuIGt1dWthdWRlc3NhIHV1dGlza2lyamVlbiwgam9zc2Ega2Vycm9tbWUgYWphbmtvaHRhaXNpc3RhIHRhcmpvdWtzaXN0YSBqYSB0dW90dGVpc3RhLiBWb2l0IHBvaXN0dWEgbGlzdGFsdGEgbWlsbG9uIHRhaGFuc2EgaGFsdXRlc3Nhc2kuIFBha29sbGlzZXQga29oZGF0IG9uIG1lcmtpdHR5IHTDpGhkZWxsw6QgKgogICAgICAgIDwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Il9mb3JtX2VsZW1lbnQgX3g5Njc3Mjc0MCBfZnVsbF93aWR0aCAiID4KICAgICAgPGxhYmVsIGNsYXNzPSJfZm9ybS1sYWJlbCI+CiAgICAgICAgRXR1bmltaQogICAgICA8L2xhYmVsPgogICAgICA8ZGl2IGNsYXNzPSJfZmllbGQtd3JhcHBlciI+CiAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZpcnN0bmFtZSIgcGxhY2Vob2xkZXI9IiIgLz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Il9mb3JtX2VsZW1lbnQgX3gwNTA1NTc2NiBfZnVsbF93aWR0aCAiID4KICAgICAgPGxhYmVsIGNsYXNzPSJfZm9ybS1sYWJlbCI+CiAgICAgICAgU3VrdW5pbWkKICAgICAgPC9sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0iX2ZpZWxkLXdyYXBwZXIiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJsYXN0bmFtZSIgcGxhY2Vob2xkZXI9IiIgLz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Il9mb3JtX2VsZW1lbnQgX3gzMTc4OTc0NSBfZnVsbF93aWR0aCAiID4KICAgICAgPGxhYmVsIGNsYXNzPSJfZm9ybS1sYWJlbCI+CiAgICAgICAgU8OkaGvDtnBvc3RpKgogICAgICA8L2xhYmVsPgogICAgICA8ZGl2IGNsYXNzPSJfZmllbGQtd3JhcHBlciI+CiAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImVtYWlsIiBwbGFjZWhvbGRlcj0iIiByZXF1aXJlZC8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJfZm9ybV9lbGVtZW50IF9maWVsZDMgX2Z1bGxfd2lkdGggIiA+CiAgICAgIDxkaXYgY2xhc3M9Il9yb3ciPgogICAgICAgIDxsYWJlbCBjbGFzcz0iX2Zvcm0tbGFiZWwiPgogICAgICAgICAgSGFsdWFpc2luIGxpc8OkdGlldG9hIGV0ZW5raW4gc2V1cmFhdmlzdGEgYWloZWlzdGE6CiAgICAgICAgPC9sYWJlbD4KICAgICAgPC9kaXY+CiAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZpZWxkWzNdW10iIHZhbHVlPSJ+fCI+CiAgICAgIDxkaXYgY2xhc3M9Il9yb3cgX2NoZWNrYm94LXJhZGlvIj4KICAgICAgICA8aW5wdXQgaWQ9ImZpZWxkXzNyYWtlbm5la3lubmV0IiB0eXBlPSJjaGVja2JveCIgbmFtZT0iZmllbGRbM11bXSIgdmFsdWU9InJha2VubmVreW5uZXQiICAgPgogICAgICAgIDxzcGFuPgogICAgICAgICAgPGxhYmVsIGZvcj0iZmllbGRfM3Jha2VubmVreW5uZXQiPgogICAgICAgICAgICByYWtlbm5la3lubmV0CiAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Il9yb3cgX2NoZWNrYm94LXJhZGlvIj4KICAgICAgICA8aW5wdXQgaWQ9ImZpZWxkXzNnZWVsaWxha2thdXMiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJmaWVsZFszXVtdIiB2YWx1ZT0iZ2VlbGlsYWtrYXVzIiAgID4KICAgICAgICA8c3Bhbj4KICAgICAgICAgIDxsYWJlbCBmb3I9ImZpZWxkXzNnZWVsaWxha2thdXMiPgogICAgICAgICAgICBnZWVsaWxha2thdXMKICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iX3JvdyBfY2hlY2tib3gtcmFkaW8iPgogICAgICAgIDxpbnB1dCBpZD0iZmllbGRfM2t5bnNpa29yaXN0ZWx1dCIgdHlwZT0iY2hlY2tib3giIG5hbWU9ImZpZWxkWzNdW10iIHZhbHVlPSJreW5zaWtvcmlzdGVsdXQiICAgPgogICAgICAgIDxzcGFuPgogICAgICAgICAgPGxhYmVsIGZvcj0iZmllbGRfM2t5bnNpa29yaXN0ZWx1dCI+CiAgICAgICAgICAgIGt5bnNpa29yaXN0ZWx1dAogICAgICAgICAgPC9sYWJlbD4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJfcm93IF9jaGVja2JveC1yYWRpbyI+CiAgICAgICAgPGlucHV0IGlkPSJmaWVsZF8zcmlwc2llbiBwaWRlbm55a3NldCIgdHlwZT0iY2hlY2tib3giIG5hbWU9ImZpZWxkWzNdW10iIHZhbHVlPSJyaXBzaWVuIHBpZGVubnlrc2V0IiAgID4KICAgICAgICA8c3Bhbj4KICAgICAgICAgIDxsYWJlbCBmb3I9ImZpZWxkXzNyaXBzaWVuIHBpZGVubnlrc2V0Ij4KICAgICAgICAgICAgcmlwc2llbiBwaWRlbm55a3NldAogICAgICAgICAgPC9sYWJlbD4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJfcm93IF9jaGVja2JveC1yYWRpbyI+CiAgICAgICAgPGlucHV0IGlkPSJmaWVsZF8zbWVpa2l0IiB0eXBlPSJjaGVja2JveCIgbmFtZT0iZmllbGRbM11bXSIgdmFsdWU9Im1laWtpdCIgICA+CiAgICAgICAgPHNwYW4+CiAgICAgICAgICA8bGFiZWwgZm9yPSJmaWVsZF8zbWVpa2l0Ij4KICAgICAgICAgICAgbWVpa2l0CiAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Il9yb3cgX2NoZWNrYm94LXJhZGlvIj4KICAgICAgICA8aW5wdXQgaWQ9ImZpZWxkXzNpaG9uaG9pdG90dW90dGVldCIgdHlwZT0iY2hlY2tib3giIG5hbWU9ImZpZWxkWzNdW10iIHZhbHVlPSJpaG9uaG9pdG90dW90dGVldCIgICA+CiAgICAgICAgPHNwYW4+CiAgICAgICAgICA8bGFiZWwgZm9yPSJmaWVsZF8zaWhvbmhvaXRvdHVvdHRlZXQiPgogICAgICAgICAgICBpaG9uaG9pdG90dW90dGVldAogICAgICAgICAgPC9sYWJlbD4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJfcm93IF9jaGVja2JveC1yYWRpbyI+CiAgICAgICAgPGlucHV0IGlkPSJmaWVsZF8zbWlrcm9uZXVsYXVzIiB0eXBlPSJjaGVja2JveCIgbmFtZT0iZmllbGRbM11bXSIgdmFsdWU9Im1pa3JvbmV1bGF1cyIgICA+CiAgICAgICAgPHNwYW4+CiAgICAgICAgICA8bGFiZWwgZm9yPSJmaWVsZF8zbWlrcm9uZXVsYXVzIj4KICAgICAgICAgICAgbWlrcm9uZXVsYXVzCiAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Il9yb3cgX2NoZWNrYm94LXJhZGlvIj4KICAgICAgICA8aW5wdXQgaWQ9ImZpZWxkXzNwbGFzbWEiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJmaWVsZFszXVtdIiB2YWx1ZT0icGxhc21hIiAgID4KICAgICAgICA8c3Bhbj4KICAgICAgICAgIDxsYWJlbCBmb3I9ImZpZWxkXzNwbGFzbWEiPgogICAgICAgICAgICBwbGFzbWEKICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iX3JvdyBfY2hlY2tib3gtcmFkaW8iPgogICAgICAgIDxpbnB1dCBpZD0iZmllbGRfM3Nva2Vyb2lubml0IiB0eXBlPSJjaGVja2JveCIgbmFtZT0iZmllbGRbM11bXSIgdmFsdWU9InNva2Vyb2lubml0IiAgID4KICAgICAgICA8c3Bhbj4KICAgICAgICAgIDxsYWJlbCBmb3I9ImZpZWxkXzNzb2tlcm9pbm5pdCI+CiAgICAgICAgICAgIHNva2Vyb2lubml0CiAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Il9yb3cgX2NoZWNrYm94LXJhZGlvIj4KICAgICAgICA8aW5wdXQgaWQ9ImZpZWxkXzNrb3VsdXR1a3NldCIgdHlwZT0iY2hlY2tib3giIG5hbWU9ImZpZWxkWzNdW10iIHZhbHVlPSJrb3VsdXR1a3NldCIgICA+CiAgICAgICAgPHNwYW4+CiAgICAgICAgICA8bGFiZWwgZm9yPSJmaWVsZF8za291bHV0dWtzZXQiPgogICAgICAgICAgICBrb3VsdXR1a3NldAogICAgICAgICAgPC9sYWJlbD4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJfZm9ybV9lbGVtZW50IF9maWVsZDQgX2Z1bGxfd2lkdGggIiA+CiAgICAgIDxkaXYgY2xhc3M9Il9yb3ciPgogICAgICAgIDxsYWJlbCBjbGFzcz0iX2Zvcm0tbGFiZWwiPgogICAgICAgICAgTWludWEga2lpbm5vc3RhdmF0IGVyaXR5aXNlc3RpIHNldXJhYXZhdCBicsOkbmRpdAogICAgICAgIDwvbGFiZWw+CiAgICAgIDwvZGl2PgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWVsZFs0XVtdIiB2YWx1ZT0ifnwiPgogICAgICA8ZGl2IGNsYXNzPSJfcm93IF9jaGVja2JveC1yYWRpbyI+CiAgICAgICAgPGlucHV0IGlkPSJmaWVsZF80TENOIiB0eXBlPSJjaGVja2JveCIgbmFtZT0iZmllbGRbNF1bXSIgdmFsdWU9IkxDTiIgICA+CiAgICAgICAgPHNwYW4+CiAgICAgICAgICA8bGFiZWwgZm9yPSJmaWVsZF80TENOIj4KICAgICAgICAgICAgTENOCiAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Il9yb3cgX2NoZWNrYm94LXJhZGlvIj4KICAgICAgICA8aW5wdXQgaWQ9ImZpZWxkXzRNb250ZWlsIFBhcmlzIiB0eXBlPSJjaGVja2JveCIgbmFtZT0iZmllbGRbNF1bXSIgdmFsdWU9Ik1vbnRlaWwgUGFyaXMiICAgPgogICAgICAgIDxzcGFuPgogICAgICAgICAgPGxhYmVsIGZvcj0iZmllbGRfNE1vbnRlaWwgUGFyaXMiPgogICAgICAgICAgICBNb250ZWlsIFBhcmlzCiAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Il9yb3cgX2NoZWNrYm94LXJhZGlvIj4KICAgICAgICA8aW5wdXQgaWQ9ImZpZWxkXzRGZWFyaWUgbGFzaGVzIiB0eXBlPSJjaGVja2JveCIgbmFtZT0iZmllbGRbNF1bXSIgdmFsdWU9IkZlYXJpZSBsYXNoZXMiICAgPgogICAgICAgIDxzcGFuPgogICAgICAgICAgPGxhYmVsIGZvcj0iZmllbGRfNEZlYXJpZSBsYXNoZXMiPgogICAgICAgICAgICBGZWFyaWUgbGFzaGVzCiAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Il9yb3cgX2NoZWNrYm94LXJhZGlvIj4KICAgICAgICA8aW5wdXQgaWQ9ImZpZWxkXzRCZWF1dHkgUHJvIC1uYWFtaW90IiB0eXBlPSJjaGVja2JveCIgbmFtZT0iZmllbGRbNF1bXSIgdmFsdWU9IkJlYXV0eSBQcm8gLW5hYW1pb3QiICAgPgogICAgICAgIDxzcGFuPgogICAgICAgICAgPGxhYmVsIGZvcj0iZmllbGRfNEJlYXV0eSBQcm8gLW5hYW1pb3QiPgogICAgICAgICAgICBCZWF1dHkgUHJvIC1uYWFtaW90CiAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Il9yb3cgX2NoZWNrYm94LXJhZGlvIj4KICAgICAgICA8aW5wdXQgaWQ9ImZpZWxkXzRMYU5hdHVyZSBsdW9ubm9ua29zbWV0aWlra2EiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJmaWVsZFs0XVtdIiB2YWx1ZT0iTGFOYXR1cmUgbHVvbm5vbmtvc21ldGlpa2thIiAgID4KICAgICAgICA8c3Bhbj4KICAgICAgICAgIDxsYWJlbCBmb3I9ImZpZWxkXzRMYU5hdHVyZSBsdW9ubm9ua29zbWV0aWlra2EiPgogICAgICAgICAgICBMYU5hdHVyZSBsdW9ubm9ua29zbWV0aWlra2EKICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iX3JvdyBfY2hlY2tib3gtcmFkaW8iPgogICAgICAgIDxpbnB1dCBpZD0iZmllbGRfNERhdmlkIEtlaW4gaXRzZXJ1c2tldHRhdmEgc3ByYXkiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJmaWVsZFs0XVtdIiB2YWx1ZT0iRGF2aWQgS2VpbiBpdHNlcnVza2V0dGF2YSBzcHJheSIgICA+CiAgICAgICAgPHNwYW4+CiAgICAgICAgICA8bGFiZWwgZm9yPSJmaWVsZF80RGF2aWQgS2VpbiBpdHNlcnVza2V0dGF2YSBzcHJheSI+CiAgICAgICAgICAgIERhdmlkIEtlaW4gaXRzZXJ1c2tldHRhdmEgc3ByYXkKICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iX2J1dHRvbi13cmFwcGVyIF9mdWxsX3dpZHRoIj4KICAgICAgPGJ1dHRvbiBpZD0iX2Zvcm1fMV9zdWJtaXQiIGNsYXNzPSJfc3VibWl0IiB0eXBlPSJzdWJtaXQiPgogICAgICAgIFRpbGFhIHV1dGlza2lyamUKICAgICAgPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Il9jbGVhci1lbGVtZW50Ij4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9Il9mb3JtLXRoYW5rLXlvdSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgogIDwvZGl2Pgo8L2Zvcm0+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgp3aW5kb3cuY2ZpZWxkcyA9IHsiMyI6Im1pc3RhbGlzYXRpZXRvYSIsIjQiOiJtaW51YV9raWlubm9zdGF2YXRfZXJpdHlpc2VzdGlfc2V1cmFhdmF0X2JybmRpdCJ9Owp3aW5kb3cuX3Nob3dfdGhhbmtfeW91ID0gZnVuY3Rpb24oaWQsIG1lc3NhZ2UsIHRyYWNrY21wX3VybCkgewogIHZhciBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19mb3JtXycgKyBpZCArICdfJyksIHRoYW5rX3lvdSA9IGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLXRoYW5rLXlvdScpOwogIGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLWNvbnRlbnQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIHRoYW5rX3lvdS5pbm5lckhUTUwgPSBtZXNzYWdlOwogIHRoYW5rX3lvdS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBpZiAodHlwZW9mKHRyYWNrY21wX3VybCkgIT0gJ3VuZGVmaW5lZCcgJiYgdHJhY2tjbXBfdXJsKSB7CiAgICAvLyBTaXRlIHRyYWNraW5nIFVSTCB0byB1c2UgYWZ0ZXIgaW5saW5lIGZvcm0gc3VibWlzc2lvbi4KICAgIF9sb2FkX3NjcmlwdCh0cmFja2NtcF91cmwpOwogIH0KICBpZiAodHlwZW9mIHdpbmRvdy5fZm9ybV9jYWxsYmFjayAhPT0gJ3VuZGVmaW5lZCcpIHdpbmRvdy5fZm9ybV9jYWxsYmFjayhpZCk7Cn07CndpbmRvdy5fc2hvd19lcnJvciA9IGZ1bmN0aW9uKGlkLCBtZXNzYWdlLCBodG1sKSB7CiAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX2Zvcm1fJyArIGlkICsgJ18nKSwgZXJyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIGJ1dHRvbiA9IGZvcm0ucXVlcnlTZWxlY3RvcignYnV0dG9uJyksIG9sZF9lcnJvciA9IGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtX2Vycm9yJyk7CiAgaWYgKG9sZF9lcnJvcikgb2xkX2Vycm9yLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2xkX2Vycm9yKTsKICBlcnIuaW5uZXJIVE1MID0gbWVzc2FnZTsKICBlcnIuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lciBfZm9ybV9lcnJvciBfbm9fYXJyb3cnOwogIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgd3JhcHBlci5jbGFzc05hbWUgPSAnX2Zvcm0taW5uZXInOwogIHdyYXBwZXIuYXBwZW5kQ2hpbGQoZXJyKTsKICBidXR0b24ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcHBlciwgYnV0dG9uKTsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWRePSJfZm9ybSJdW2lkJD0iX3N1Ym1pdCJdJykuZGlzYWJsZWQgPSBmYWxzZTsKICBpZiAoaHRtbCkgewogICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgZGl2LmNsYXNzTmFtZSA9ICdfZXJyb3ItaHRtbCc7CiAgICBkaXYuaW5uZXJIVE1MID0gaHRtbDsKICAgIGVyci5hcHBlbmRDaGlsZChkaXYpOwogIH0KfTsKd2luZG93Ll9sb2FkX3NjcmlwdCA9IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2spIHsKICAgIHZhciBoZWFkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCcpLCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgciA9IGZhbHNlOwogICAgc2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgIHNjcmlwdC5jaGFyc2V0ID0gJ3V0Zi04JzsKICAgIHNjcmlwdC5zcmMgPSB1cmw7CiAgICBpZiAoY2FsbGJhY2spIHsKICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKCFyICYmICghdGhpcy5yZWFkeVN0YXRlIHx8IHRoaXMucmVhZHlTdGF0ZSA9PSAnY29tcGxldGUnKSkgewogICAgICAgIHIgPSB0cnVlOwogICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpOwp9OwooZnVuY3Rpb24oKSB7CiAgaWYgKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc2VhcmNoKCJleGNsdWRlZm9ybSIpICE9PSAtMSkgcmV0dXJuIGZhbHNlOwogIHZhciBnZXRDb29raWUgPSBmdW5jdGlvbihuYW1lKSB7CiAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58OyApJyArIG5hbWUgKyAnPShbXjtdKyknKSk7CiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsyXSA6IG51bGw7CiAgfQogIHZhciBzZXRDb29raWUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkgewogICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CiAgICB2YXIgdGltZSA9IG5vdy5nZXRUaW1lKCk7CiAgICB2YXIgZXhwaXJlVGltZSA9IHRpbWUgKyAxMDAwICogNjAgKiA2MCAqIDI0ICogMzY1OwogICAgbm93LnNldFRpbWUoZXhwaXJlVGltZSk7CiAgICBkb2N1bWVudC5jb29raWUgPSBuYW1lICsgJz0nICsgdmFsdWUgKyAnOyBleHBpcmVzPScgKyBub3cgKyAnO3BhdGg9Lyc7CiAgfQogICAgICB2YXIgYWRkRXZlbnQgPSBmdW5jdGlvbihlbGVtZW50LCBldmVudCwgZnVuYykgewogICAgaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmMpOwogICAgfSBlbHNlIHsKICAgICAgdmFyIG9sZEZ1bmMgPSBlbGVtZW50WydvbicgKyBldmVudF07CiAgICAgIGVsZW1lbnRbJ29uJyArIGV2ZW50XSA9IGZ1bmN0aW9uKCkgewogICAgICAgIG9sZEZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICB9CiAgfQogIHZhciBfcmVtb3ZlZCA9IGZhbHNlOwogIHZhciBmb3JtX3RvX3N1Ym1pdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8xXycpOwogIHZhciBhbGxJbnB1dHMgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLCB0b29sdGlwcyA9IFtdLCBzdWJtaXR0ZWQgPSBmYWxzZTsKCiAgdmFyIGdldFVybFBhcmFtID0gZnVuY3Rpb24obmFtZSkgewogICAgdmFyIHJlZ2V4U3RyID0gJ1tcPyZdJyArIG5hbWUgKyAnPShbXiYjXSopJzsKICAgIHZhciByZXN1bHRzID0gbmV3IFJlZ0V4cChyZWdleFN0ciwgJ2knKS5leGVjKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKICAgIHJldHVybiByZXN1bHRzICE9IHVuZGVmaW5lZCA/IGRlY29kZVVSSUNvbXBvbmVudChyZXN1bHRzWzFdKSA6IGZhbHNlOwogIH07CgogIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsSW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgcmVnZXhTdHIgPSAiZmllbGRcXFsoXFxkKylcXF0iOwogICAgdmFyIHJlc3VsdHMgPSBuZXcgUmVnRXhwKHJlZ2V4U3RyKS5leGVjKGFsbElucHV0c1tpXS5uYW1lKTsKICAgIGlmIChyZXN1bHRzICE9IHVuZGVmaW5lZCkgewogICAgICBhbGxJbnB1dHNbaV0uZGF0YXNldC5uYW1lID0gd2luZG93LmNmaWVsZHNbcmVzdWx0c1sxXV07CiAgICB9IGVsc2UgewogICAgICBhbGxJbnB1dHNbaV0uZGF0YXNldC5uYW1lID0gYWxsSW5wdXRzW2ldLm5hbWU7CiAgICB9CiAgICB2YXIgZmllbGRWYWwgPSBnZXRVcmxQYXJhbShhbGxJbnB1dHNbaV0uZGF0YXNldC5uYW1lKTsKCiAgICBpZiAoZmllbGRWYWwpIHsKICAgICAgaWYgKGFsbElucHV0c1tpXS50eXBlID09ICJyYWRpbyIgfHwgYWxsSW5wdXRzW2ldLnR5cGUgPT0gImNoZWNrYm94IikgewogICAgICAgIGlmIChhbGxJbnB1dHNbaV0udmFsdWUgPT0gZmllbGRWYWwpIHsKICAgICAgICAgIGFsbElucHV0c1tpXS5jaGVja2VkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWxsSW5wdXRzW2ldLnZhbHVlID0gZmllbGRWYWw7CiAgICAgIH0KICAgIH0KICB9CgogIHZhciByZW1vdmVfdG9vbHRpcHMgPSBmdW5jdGlvbigpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9vbHRpcHMubGVuZ3RoOyBpKyspIHsKICAgICAgdG9vbHRpcHNbaV0udGlwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodG9vbHRpcHNbaV0udGlwKTsKICAgIH0KICAgICAgdG9vbHRpcHMgPSBbXTsKICB9OwogIHZhciByZW1vdmVfdG9vbHRpcCA9IGZ1bmN0aW9uKGVsZW0pIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9vbHRpcHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRvb2x0aXBzW2ldLmVsZW0gPT09IGVsZW0pIHsKICAgICAgICB0b29sdGlwc1tpXS50aXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0b29sdGlwc1tpXS50aXApOwogICAgICAgIHRvb2x0aXBzLnNwbGljZShpLCAxKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICB9OwogIHZhciBjcmVhdGVfdG9vbHRpcCA9IGZ1bmN0aW9uKGVsZW0sIHRleHQpIHsKICAgIHZhciB0b29sdGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIGFycm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIG5ld190b29sdGlwID0ge307CiAgICBpZiAoZWxlbS50eXBlICE9ICdyYWRpbycgJiYgZWxlbS50eXBlICE9ICdjaGVja2JveCcpIHsKICAgICAgdG9vbHRpcC5jbGFzc05hbWUgPSAnX2Vycm9yJzsKICAgICAgYXJyb3cuY2xhc3NOYW1lID0gJ19lcnJvci1hcnJvdyc7CiAgICAgIGlubmVyLmNsYXNzTmFtZSA9ICdfZXJyb3ItaW5uZXInOwogICAgICBpbm5lci5pbm5lckhUTUwgPSB0ZXh0OwogICAgICB0b29sdGlwLmFwcGVuZENoaWxkKGFycm93KTsKICAgICAgdG9vbHRpcC5hcHBlbmRDaGlsZChpbm5lcik7CiAgICAgIGVsZW0ucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0b29sdGlwKTsKICAgIH0gZWxzZSB7CiAgICAgIHRvb2x0aXAuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lciBfbm9fYXJyb3cnOwogICAgICB0b29sdGlwLmlubmVySFRNTCA9IHRleHQ7CiAgICAgIGVsZW0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodG9vbHRpcCwgZWxlbSk7CiAgICAgIG5ld190b29sdGlwLm5vX2Fycm93ID0gdHJ1ZTsKICAgIH0KICAgIG5ld190b29sdGlwLnRpcCA9IHRvb2x0aXA7CiAgICBuZXdfdG9vbHRpcC5lbGVtID0gZWxlbTsKICAgIHRvb2x0aXBzLnB1c2gobmV3X3Rvb2x0aXApOwogICAgcmV0dXJuIG5ld190b29sdGlwOwogIH07CiAgdmFyIHJlc2l6ZV90b29sdGlwID0gZnVuY3Rpb24odG9vbHRpcCkgewogICAgdmFyIHJlY3QgPSB0b29sdGlwLmVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICB2YXIgZG9jID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBzY3JvbGxQb3NpdGlvbiA9IHJlY3QudG9wIC0gKCh3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jLnNjcm9sbFRvcCkgIC0gKGRvYy5jbGllbnRUb3AgfHwgMCkpOwogICAgaWYgKHNjcm9sbFBvc2l0aW9uIDwgNDApIHsKICAgICAgdG9vbHRpcC50aXAuY2xhc3NOYW1lID0gdG9vbHRpcC50aXAuY2xhc3NOYW1lLnJlcGxhY2UoLyA/KF9hYm92ZXxfYmVsb3cpID8vZywgJycpICsgJyBfYmVsb3cnOwogICAgfSBlbHNlIHsKICAgICAgdG9vbHRpcC50aXAuY2xhc3NOYW1lID0gdG9vbHRpcC50aXAuY2xhc3NOYW1lLnJlcGxhY2UoLyA/KF9hYm92ZXxfYmVsb3cpID8vZywgJycpICsgJyBfYWJvdmUnOwogICAgfQogIH07CiAgdmFyIHJlc2l6ZV90b29sdGlwcyA9IGZ1bmN0aW9uKCkgewogICAgaWYgKF9yZW1vdmVkKSByZXR1cm47CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvb2x0aXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICghdG9vbHRpcHNbaV0ubm9fYXJyb3cpIHJlc2l6ZV90b29sdGlwKHRvb2x0aXBzW2ldKTsKICAgIH0KICB9OwogIHZhciB2YWxpZGF0ZV9maWVsZCA9IGZ1bmN0aW9uKGVsZW0sIHJlbW92ZSkgewogICAgdmFyIHRvb2x0aXAgPSBudWxsLCB2YWx1ZSA9IGVsZW0udmFsdWUsIG5vX2Vycm9yID0gdHJ1ZTsKICAgIHJlbW92ZSA/IHJlbW92ZV90b29sdGlwKGVsZW0pIDogZmFsc2U7CiAgICBpZiAoZWxlbS50eXBlICE9ICdjaGVja2JveCcpIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUucmVwbGFjZSgvID9faGFzX2Vycm9yID8vZywgJycpOwogICAgaWYgKGVsZW0uZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpICE9PSBudWxsKSB7CiAgICAgIGlmIChlbGVtLnR5cGUgPT0gJ3JhZGlvJyB8fCAoZWxlbS50eXBlID09ICdjaGVja2JveCcgJiYgL2FueS8udGVzdChlbGVtLmNsYXNzTmFtZSkpKSB7CiAgICAgICAgdmFyIGVsZW1zID0gZm9ybV90b19zdWJtaXQuZWxlbWVudHNbZWxlbS5uYW1lXTsKICAgICAgICBpZiAoIShlbGVtcyBpbnN0YW5jZW9mIE5vZGVMaXN0IHx8IGVsZW1zIGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb24pIHx8IGVsZW1zLmxlbmd0aCA8PSAxKSB7CiAgICAgICAgICBub19lcnJvciA9IGVsZW0uY2hlY2tlZDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoZWxlbXNbaV0uY2hlY2tlZCkgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIW5vX2Vycm9yKSB7CiAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIlZhbGl0c2UgeWtzaSB2YWlodG9laGRvaXN0YS4iKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZWxlbS50eXBlID09J2NoZWNrYm94JykgewogICAgICAgIHZhciBlbGVtcyA9IGZvcm1fdG9fc3VibWl0LmVsZW1lbnRzW2VsZW0ubmFtZV0sIGZvdW5kID0gZmFsc2UsIGVyciA9IFtdOwogICAgICAgIG5vX2Vycm9yID0gdHJ1ZTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBpZiAoZWxlbXNbaV0uZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpID09PSBudWxsKSBjb250aW51ZTsKICAgICAgICAgIGlmICghZm91bmQgJiYgZWxlbXNbaV0gIT09IGVsZW0pIHJldHVybiB0cnVlOwogICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgZWxlbXNbaV0uY2xhc3NOYW1lID0gZWxlbXNbaV0uY2xhc3NOYW1lLnJlcGxhY2UoLyA/X2hhc19lcnJvciA/L2csICcnKTsKICAgICAgICAgIGlmICghZWxlbXNbaV0uY2hlY2tlZCkgewogICAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgICBlbGVtc1tpXS5jbGFzc05hbWUgPSBlbGVtc1tpXS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgICBlcnIucHVzaCgiUmFzdGl0YSAlcyBqb3MgaGFsdWF0IGphdGthYSIucmVwbGFjZSgiJXMiLCBlbGVtc1tpXS52YWx1ZSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIW5vX2Vycm9yKSB7CiAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgZXJyLmpvaW4oJzxici8+JykpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlbGVtLnRhZ05hbWUgPT0gJ1NFTEVDVCcpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0cnVlOwogICAgICAgIGlmIChlbGVtLm11bHRpcGxlKSB7CiAgICAgICAgICBzZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtLm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGVsZW0ub3B0aW9uc1tpXS5zZWxlY3RlZCkgewogICAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0ub3B0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoZWxlbS5vcHRpb25zW2ldLnNlbGVjdGVkICYmICFlbGVtLm9wdGlvbnNbaV0udmFsdWUpIHsKICAgICAgICAgICAgICBzZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghc2VsZWN0ZWQpIHsKICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgIHRvb2x0aXAgPSBjcmVhdGVfdG9vbHRpcChlbGVtLCAiVmFsaXRzZSB5a3NpIHZhaWh0b2VoZG9pc3RhLiIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgewogICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgdG9vbHRpcCA9IGNyZWF0ZV90b29sdGlwKGVsZW0sICJUw6Rtw6Qga29odGEgcGl0w6TDpCB0w6R5dHTDpMOkLiIpOwogICAgICB9CiAgICB9CiAgICBpZiAobm9fZXJyb3IgJiYgZWxlbS5uYW1lID09ICdlbWFpbCcpIHsKICAgICAgaWYgKCF2YWx1ZS5tYXRjaCgvXltcK19hLXowLTktJyY9XSsoXC5bXCtfYS16MC05LSddKykqQFthLXowLTktXSsoXC5bYS16MC05LV0rKSooXC5bYS16XXsyLH0pJC9pKSkgewogICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgdG9vbHRpcCA9IGNyZWF0ZV90b29sdGlwKGVsZW0sICJFbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuIik7CiAgICAgIH0KICAgIH0KICAgIGlmIChub19lcnJvciAmJiAvZGF0ZV9maWVsZC8udGVzdChlbGVtLmNsYXNzTmFtZSkpIHsKICAgICAgaWYgKCF2YWx1ZS5tYXRjaCgvXlxkXGRcZFxkLVxkXGQtXGRcZCQvKSkgewogICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgdG9vbHRpcCA9IGNyZWF0ZV90b29sdGlwKGVsZW0sICJMYWl0YSBvaWtlYSBww6RpdsOkbcOkw6Ryw6QuIik7CiAgICAgIH0KICAgIH0KICAgIHRvb2x0aXAgPyByZXNpemVfdG9vbHRpcCh0b29sdGlwKSA6IGZhbHNlOwogICAgcmV0dXJuIG5vX2Vycm9yOwogIH07CiAgdmFyIG5lZWRzX3ZhbGlkYXRlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbC5uYW1lID09ICdlbWFpbCcgfHwgZWwuZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpICE9PSBudWxsOwogIH07CiAgdmFyIHZhbGlkYXRlX2Zvcm0gPSBmdW5jdGlvbihlKSB7CiAgICB2YXIgZXJyID0gZm9ybV90b19zdWJtaXQucXVlcnlTZWxlY3RvcignLl9mb3JtX2Vycm9yJyksIG5vX2Vycm9yID0gdHJ1ZTsKICAgIGlmICghc3VibWl0dGVkKSB7CiAgICAgIHN1Ym1pdHRlZCA9IHRydWU7CiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhbGxJbnB1dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICB2YXIgaW5wdXQgPSBhbGxJbnB1dHNbaV07CiAgICAgICAgaWYgKG5lZWRzX3ZhbGlkYXRlKGlucHV0KSkgewogICAgICAgICAgaWYgKGlucHV0LnR5cGUgPT0gJ3RleHQnKSB7CiAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnYmx1cicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnRyaW0oKTsKICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnR5cGUgPT0gJ3JhZGlvJyB8fCBpbnB1dC50eXBlID09ICdjaGVja2JveCcpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgICAgICAgdmFyIHJhZGlvcyA9IGZvcm1fdG9fc3VibWl0LmVsZW1lbnRzW2VsLm5hbWVdOwogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFkaW9zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBhZGRFdmVudChyYWRpb3NbaV0sICdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZChlbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKGlucHV0KTsKICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQudGFnTmFtZSA9PSAnU0VMRUNUJykgewogICAgICAgICAgICBhZGRFdmVudChpbnB1dCwgJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQudHlwZSA9PSAndGV4dGFyZWEnKXsKICAgICAgICAgICAgYWRkRXZlbnQoaW5wdXQsICdpbnB1dCcsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJlbW92ZV90b29sdGlwcygpOwogICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFsbElucHV0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICB2YXIgZWxlbSA9IGFsbElucHV0c1tpXTsKICAgICAgaWYgKG5lZWRzX3ZhbGlkYXRlKGVsZW0pKSB7CiAgICAgICAgaWYgKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAic2VsZWN0IikgewogICAgICAgICAgZWxlbS52YWx1ZSA9IGVsZW0udmFsdWUudHJpbSgpOwogICAgICAgIH0KICAgICAgICB2YWxpZGF0ZV9maWVsZChlbGVtKSA/IHRydWUgOiBub19lcnJvciA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpZiAoIW5vX2Vycm9yICYmIGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgfQogICAgcmVzaXplX3Rvb2x0aXBzKCk7CiAgICByZXR1cm4gbm9fZXJyb3I7CiAgfTsKICBhZGRFdmVudCh3aW5kb3csICdyZXNpemUnLCByZXNpemVfdG9vbHRpcHMpOwogIGFkZEV2ZW50KHdpbmRvdywgJ3Njcm9sbCcsIHJlc2l6ZV90b29sdGlwcyk7CiAgd2luZG93Ll9vbGRfc2VyaWFsaXplID0gbnVsbDsKICBpZiAodHlwZW9mIHNlcmlhbGl6ZSAhPT0gJ3VuZGVmaW5lZCcpIHdpbmRvdy5fb2xkX3NlcmlhbGl6ZSA9IHdpbmRvdy5zZXJpYWxpemU7CiAgX2xvYWRfc2NyaXB0KCIvL2QzcnhhaWo1NnZqZWdlLmNsb3VkZnJvbnQubmV0L2Zvcm0tc2VyaWFsaXplLzAuMy9zZXJpYWxpemUubWluLmpzIiwgZnVuY3Rpb24oKSB7CiAgICB3aW5kb3cuX2Zvcm1fc2VyaWFsaXplID0gd2luZG93LnNlcmlhbGl6ZTsKICAgIGlmICh3aW5kb3cuX29sZF9zZXJpYWxpemUpIHdpbmRvdy5zZXJpYWxpemUgPSB3aW5kb3cuX29sZF9zZXJpYWxpemU7CiAgfSk7CiAgdmFyIGZvcm1fc3VibWl0ID0gZnVuY3Rpb24oZSkgewogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgaWYgKHZhbGlkYXRlX2Zvcm0oKSkgewogICAgICAvLyB1c2UgdGhpcyB0cmljayB0byBnZXQgdGhlIHN1Ym1pdCBidXR0b24gJiBkaXNhYmxlIGl0IHVzaW5nIHBsYWluIGphdmFzY3JpcHQKICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI19mb3JtXzFfc3VibWl0JykuZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgICB2YXIgc2VyaWFsaXplZCA9IF9mb3JtX3NlcmlhbGl6ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX2Zvcm1fMV8nKSk7CiAgICAgIHZhciBlcnIgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCcuX2Zvcm1fZXJyb3InKTsKICAgICAgZXJyID8gZXJyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZXJyKSA6IGZhbHNlOwogICAgICBfbG9hZF9zY3JpcHQoJ2h0dHBzOi8vYWRlbGFpbmJlYXV0eS5hY3RpdmVob3N0ZWQuY29tL3Byb2MucGhwPycgKyBzZXJpYWxpemVkICsgJyZqc29ucD10cnVlJyk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfTsKICBhZGRFdmVudChmb3JtX3RvX3N1Ym1pdCwgJ3N1Ym1pdCcsIGZvcm1fc3VibWl0KTsKfSkoKTsKCjwvc2NyaXB0Pg==[/fusion_code][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]