[fusion_builder_container hundred_percent=»no» equal_height_columns=»no» menu_anchor=»» hide_on_mobile=»small-visibility,medium-visibility,large-visibility» class=»» id=»» background_color=»» background_image=»» background_position=»center center» background_repeat=»no-repeat» fade=»no» background_parallax=»none» parallax_speed=»0.3″ video_mp4=»» video_webm=»» video_ogv=»» video_url=»» video_aspect_ratio=»16:9″ video_loop=»yes» video_mute=»yes» overlay_color=»» video_preview_image=»» border_size=»» border_color=»» border_style=»solid» padding_top=»» padding_bottom=»» padding_left=»» padding_right=»»][fusion_builder_row][fusion_builder_column type=»1_1″ layout=»1_1″ background_position=»left top» background_color=»» border_size=»» border_color=»» border_style=»solid» border_position=»all» spacing=»yes» background_image=»» background_repeat=»no-repeat» padding_top=»» padding_right=»» padding_bottom=»» padding_left=»» margin_top=»0px» margin_bottom=»0px» class=»» id=»» animation_type=»» animation_speed=»0.3″ animation_direction=»left» hide_on_mobile=»small-visibility,medium-visibility,large-visibility» center_content=»no» last=»true» min_height=»» hover_type=»none» link=»» first=»true»][fusion_text columns=»» column_min_width=»» column_spacing=»» rule_style=»default» rule_size=»» rule_color=»» hide_on_mobile=»small-visibility,medium-visibility,large-visibility» class=»» id=»» animation_type=»» animation_direction=»left» animation_speed=»0.3″ animation_offset=»»]

Felicitaciones!!!!

Te has inscripto al club de las mentes creactivas!

✨  Elegiste el plan Básico. 

Rellena este formulario para comenzar a recibir tus ejercicios en tu correo electrónico.

(Por las dudas, si no lo ves en tu bandeja de entrada, recuerda revisar la casilla de spam o promociones. No queremos que se te cuele por allí ningún ejercicio.)

[/fusion_text][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][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=»» border_size=»» border_color=»» border_style=»solid» margin_top=»» margin_bottom=»» padding_top=»» padding_right=»» padding_bottom=»» padding_left=»» gradient_start_color=»» gradient_end_color=»» gradient_start_position=»0″ gradient_end_position=»100″ gradient_type=»linear» radial_direction=»center» linear_angle=»180″ background_color=»» background_image=»» 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_mp4=»» video_webm=»» video_ogv=»» video_url=»» video_aspect_ratio=»16:9″ video_loop=»yes» video_mute=»yes» video_preview_image=»» 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″ spacing=»» center_content=»no» link=»» target=»_self» min_height=»» hide_on_mobile=»small-visibility,medium-visibility,large-visibility» class=»» id=»» hover_type=»none» border_size=»0″ 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» 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″ first=»true» last=»true»][fusion_code]PHN0eWxlPgogI19mb3JtXzI4XyB7IGZvbnQtc2l6ZToxNHB4OyBsaW5lLWhlaWdodDoxLjY7IGZvbnQtZmFtaWx5OmFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IG1hcmdpbjowOyB9CiAjX2Zvcm1fMjhfICogeyBvdXRsaW5lOjA7IH0KIC5fZm9ybV9oaWRlIHsgZGlzcGxheTpub25lOyB2aXNpYmlsaXR5OmhpZGRlbjsgfQogLl9mb3JtX3Nob3cgeyBkaXNwbGF5OmJsb2NrOyB2aXNpYmlsaXR5OnZpc2libGU7IH0KICNfZm9ybV8yOF8uX2Zvcm0tdG9wIHsgdG9wOjA7IH0KICNfZm9ybV8yOF8uX2Zvcm0tYm90dG9tIHsgYm90dG9tOjA7IH0KICNfZm9ybV8yOF8uX2Zvcm0tbGVmdCB7IGxlZnQ6MDsgfQogI19mb3JtXzI4Xy5fZm9ybS1yaWdodCB7IHJpZ2h0OjA7IH0KICNfZm9ybV8yOF8gaW5wdXRbdHlwZT0idGV4dCJdLCNfZm9ybV8yOF8gaW5wdXRbdHlwZT0idGVsIl0sI19mb3JtXzI4XyBpbnB1dFt0eXBlPSJkYXRlIl0sI19mb3JtXzI4XyB0ZXh0YXJlYSB7IHBhZGRpbmc6NnB4OyBoZWlnaHQ6YXV0bzsgYm9yZGVyOiM5Nzk3OTcgMXB4IHNvbGlkOyBib3JkZXItcmFkaXVzOjRweDsgY29sb3I6IzAwMCAhaW1wb3J0YW50OyBmb250LXNpemU6MTRweDsgLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7IC1tb3otYm94LXNpemluZzpib3JkZXItYm94OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IH0KICNfZm9ybV8yOF8gdGV4dGFyZWEgeyByZXNpemU6bm9uZTsgfQogI19mb3JtXzI4XyAuX3N1Ym1pdCB7IC13ZWJraXQtYXBwZWFyYW5jZTpub25lOyBjdXJzb3I6cG9pbnRlcjsgZm9udC1mYW1pbHk6YXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxNHB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYmFja2dyb3VuZDojNTMyZTcyICFpbXBvcnRhbnQ7IGJvcmRlcjowICFpbXBvcnRhbnQ7IC1tb3otYm9yZGVyLXJhZGl1czo0cHggIWltcG9ydGFudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOjRweCAhaW1wb3J0YW50OyBjb2xvcjojZmZmICFpbXBvcnRhbnQ7IHBhZGRpbmc6MTBweCAhaW1wb3J0YW50OyB9CiAjX2Zvcm1fMjhfIC5fY2xvc2UtaWNvbiB7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWltYWdlOnVybCgnaHR0cHM6Ly9kMjI2YWo0YW8xdDYxcS5jbG91ZGZyb250Lm5ldC9lc2ZreWpoMXVfZm9ybXMtY2xvc2UtZGFyay5wbmcnKTsgYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXNpemU6MTQuMnB4IDE0LjJweDsgcG9zaXRpb246YWJzb2x1dGU7IGRpc3BsYXk6YmxvY2s7IHRvcDoxMXB4OyByaWdodDo5cHg7IG92ZXJmbG93OmhpZGRlbjsgd2lkdGg6MTYuMnB4OyBoZWlnaHQ6MTYuMnB4OyB9CiAjX2Zvcm1fMjhfIC5fY2xvc2UtaWNvbjpiZWZvcmUgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgfQogI19mb3JtXzI4XyAuX2Zvcm0tYm9keSB7IG1hcmdpbi1ib3R0b206MzBweDsgfQogI19mb3JtXzI4XyAuX2Zvcm0taW1hZ2UtbGVmdCB7IHdpZHRoOjE1MHB4OyBmbG9hdDpsZWZ0OyB9CiAjX2Zvcm1fMjhfIC5fZm9ybS1jb250ZW50LXJpZ2h0IHsgbWFyZ2luLWxlZnQ6MTY0cHg7IH0KICNfZm9ybV8yOF8gLl9mb3JtLWJyYW5kaW5nIHsgY29sb3I6I2ZmZjsgZm9udC1zaXplOjEwcHg7IGNsZWFyOmJvdGg7IHRleHQtYWxpZ246bGVmdDsgbWFyZ2luLXRvcDozMHB4OyBmb250LXdlaWdodDoxMDA7IH0KICNfZm9ybV8yOF8gLl9mb3JtLWJyYW5kaW5nIC5fbG9nbyB7IGRpc3BsYXk6YmxvY2s7IHdpZHRoOjEzMHB4OyBoZWlnaHQ6MTRweDsgbWFyZ2luLXRvcDo2cHg7IGJhY2tncm91bmQtaW1hZ2U6dXJsKCdodHRwczovL2QyMjZhajRhbzF0NjFxLmNsb3VkZnJvbnQubmV0L2hoOXVqcWd2NV9hY2xvZ29fbGkucG5nJyk7IGJhY2tncm91bmQtc2l6ZToxMzBweCBhdXRvOyBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7IH0KICNfZm9ybV8yOF8gLmZvcm0tc3Itb25seSB7IHBvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxcHg7IGhlaWdodDoxcHg7IHBhZGRpbmc6MDsgbWFyZ2luOi0xcHg7IG92ZXJmbG93OmhpZGRlbjsgY2xpcDpyZWN0KDAsIDAsIDAsIDApOyBib3JkZXI6MDsgfQogI19mb3JtXzI4XyAuX2Zvcm0tbGFiZWwsI19mb3JtXzI4XyAuX2Zvcm1fZWxlbWVudCAuX2Zvcm0tbGFiZWwgeyBmb250LXdlaWdodDpib2xkOyBtYXJnaW4tYm90dG9tOjVweDsgZGlzcGxheTpibG9jazsgfQogI19mb3JtXzI4Xy5fZGFyayAuX2Zvcm0tYnJhbmRpbmcgeyBjb2xvcjojMzMzOyB9CiAjX2Zvcm1fMjhfLl9kYXJrIC5fZm9ybS1icmFuZGluZyAuX2xvZ28geyBiYWNrZ3JvdW5kLWltYWdlOnVybCgnaHR0cHM6Ly9kMjI2YWo0YW8xdDYxcS5jbG91ZGZyb250Lm5ldC9qZnRxMmM4c19hY2xvZ29fZGsucG5nJyk7IH0KICNfZm9ybV8yOF8gLl9mb3JtX2VsZW1lbnQgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgbWFyZ2luLWJvdHRvbToxMHB4OyBmb250LXNpemU6MDsgbWF4LXdpZHRoOjEwMCU7IH0KICNfZm9ybV8yOF8gLl9mb3JtX2VsZW1lbnQgKiB7IGZvbnQtc2l6ZToxNHB4OyB9CiAjX2Zvcm1fMjhfIC5fZm9ybV9lbGVtZW50Ll9jbGVhciB7IGNsZWFyOmJvdGg7IHdpZHRoOjEwMCU7IGZsb2F0Om5vbmU7IH0KICNfZm9ybV8yOF8gLl9mb3JtX2VsZW1lbnQuX2NsZWFyOmFmdGVyIHsgY2xlYXI6bGVmdDsgfQogI19mb3JtXzI4XyAuX2Zvcm1fZWxlbWVudCBpbnB1dFt0eXBlPSJ0ZXh0Il0sI19mb3JtXzI4XyAuX2Zvcm1fZWxlbWVudCBpbnB1dFt0eXBlPSJkYXRlIl0sI19mb3JtXzI4XyAuX2Zvcm1fZWxlbWVudCBzZWxlY3QsI19mb3JtXzI4XyAuX2Zvcm1fZWxlbWVudCB0ZXh0YXJlYTpub3QoLmctcmVjYXB0Y2hhLXJlc3BvbnNlKSB7IGRpc3BsYXk6YmxvY2s7IHdpZHRoOjEwMCU7IC13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94OyAtbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDsgYm94LXNpemluZzpib3JkZXItYm94OyBmb250LWZhbWlseTppbmhlcml0OyB9CiAjX2Zvcm1fMjhfIC5fZmllbGQtd3JhcHBlciB7IHBvc2l0aW9uOnJlbGF0aXZlOyB9CiAjX2Zvcm1fMjhfIC5faW5saW5lLXN0eWxlIHsgZmxvYXQ6bGVmdDsgfQogI19mb3JtXzI4XyAuX2lubGluZS1zdHlsZSBpbnB1dFt0eXBlPSJ0ZXh0Il0geyB3aWR0aDoxNTBweDsgfQogI19mb3JtXzI4XyAuX2lubGluZS1zdHlsZTpub3QoLl9jbGVhcikgKyAuX2lubGluZS1zdHlsZTpub3QoLl9jbGVhcikgeyBtYXJnaW4tbGVmdDoyMHB4OyB9CiAjX2Zvcm1fMjhfIC5fZm9ybV9lbGVtZW50IGltZy5fZm9ybS1pbWFnZSB7IG1heC13aWR0aDoxMDAlOyB9CiAjX2Zvcm1fMjhfIC5fZm9ybV9lbGVtZW50IC5fZm9ybS1maWVsZHNldCB7IGJvcmRlcjowOyBwYWRkaW5nOjAuMDFlbSAwIDAgMDsgbWFyZ2luOjA7IG1pbi13aWR0aDowOyB9CiAjX2Zvcm1fMjhfIC5fY2xlYXItZWxlbWVudCB7IGNsZWFyOmxlZnQ7IH0KICNfZm9ybV8yOF8gLl9mdWxsX3dpZHRoIHsgd2lkdGg6MTAwJTsgfQogI19mb3JtXzI4XyAuX2Zvcm1fZnVsbF9maWVsZCB7IGRpc3BsYXk6YmxvY2s7IHdpZHRoOjEwMCU7IG1hcmdpbi1ib3R0b206MTBweDsgfQogI19mb3JtXzI4XyBpbnB1dFt0eXBlPSJ0ZXh0Il0uX2hhc19lcnJvciwjX2Zvcm1fMjhfIHRleHRhcmVhLl9oYXNfZXJyb3IgeyBib3JkZXI6I2YzN2M3YiAxcHggc29saWQ7IH0KICNfZm9ybV8yOF8gaW5wdXRbdHlwZT0iY2hlY2tib3giXS5faGFzX2Vycm9yIHsgb3V0bGluZTojZjM3YzdiIDFweCBzb2xpZDsgfQogI19mb3JtXzI4XyAuX2Vycm9yIHsgZGlzcGxheTpibG9jazsgcG9zaXRpb246YWJzb2x1dGU7IGZvbnQtc2l6ZToxNHB4OyB6LWluZGV4OjEwMDAwMDAxOyB9CiAjX2Zvcm1fMjhfIC5fZXJyb3IuX2Fib3ZlIHsgcGFkZGluZy1ib3R0b206NHB4OyBib3R0b206MzlweDsgcmlnaHQ6MDsgfQogI19mb3JtXzI4XyAuX2Vycm9yLl9iZWxvdyB7IHBhZGRpbmctdG9wOjRweDsgdG9wOjEwMCU7IHJpZ2h0OjA7IH0KICNfZm9ybV8yOF8gLl9lcnJvci5fYWJvdmUgLl9lcnJvci1hcnJvdyB7IGJvdHRvbTowOyByaWdodDoxNXB4OyBib3JkZXItbGVmdDo1cHggc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1yaWdodDo1cHggc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci10b3A6NXB4IHNvbGlkICNmMzdjN2I7IH0KICNfZm9ybV8yOF8gLl9lcnJvci5fYmVsb3cgLl9lcnJvci1hcnJvdyB7IHRvcDowOyByaWdodDoxNXB4OyBib3JkZXItbGVmdDo1cHggc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1yaWdodDo1cHggc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1ib3R0b206NXB4IHNvbGlkICNmMzdjN2I7IH0KICNfZm9ybV8yOF8gLl9lcnJvci1pbm5lciB7IHBhZGRpbmc6OHB4IDEycHg7IGJhY2tncm91bmQtY29sb3I6I2YzN2M3YjsgZm9udC1zaXplOjE0cHg7IGZvbnQtZmFtaWx5OmFyaWFsLCBzYW5zLXNlcmlmOyBjb2xvcjojZmZmOyB0ZXh0LWFsaWduOmNlbnRlcjsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IC13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7IC1tb3otYm9yZGVyLXJhZGl1czo0cHg7IGJvcmRlci1yYWRpdXM6NHB4OyB9CiAjX2Zvcm1fMjhfIC5fZXJyb3ItaW5uZXIuX2Zvcm1fZXJyb3IgeyBtYXJnaW4tYm90dG9tOjVweDsgdGV4dC1hbGlnbjpsZWZ0OyB9CiAjX2Zvcm1fMjhfIC5fYnV0dG9uLXdyYXBwZXIgLl9lcnJvci1pbm5lci5fZm9ybV9lcnJvciB7IHBvc2l0aW9uOnN0YXRpYzsgfQogI19mb3JtXzI4XyAuX2Vycm9yLWlubmVyLl9ub19hcnJvdyB7IG1hcmdpbi1ib3R0b206MTBweDsgfQogI19mb3JtXzI4XyAuX2Vycm9yLWFycm93IHsgcG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjA7IGhlaWdodDowOyB9CiAjX2Zvcm1fMjhfIC5fZXJyb3ItaHRtbCB7IG1hcmdpbi1ib3R0b206MTBweDsgfQogLnBpa2Etc2luZ2xlIHsgei1pbmRleDoxMDAwMDAwMSAhaW1wb3J0YW50OyB9CiAjX2Zvcm1fMjhfIGlucHV0W3R5cGU9InRleHQiXS5kYXRldGltZV9kYXRlIHsgd2lkdGg6NjklOyBkaXNwbGF5OmlubGluZTsgfQogI19mb3JtXzI4XyBzZWxlY3QuZGF0ZXRpbWVfdGltZSB7IHdpZHRoOjI5JTsgZGlzcGxheTppbmxpbmU7IGhlaWdodDozMnB4OyB9CiAjX2Zvcm1fMjhfIGlucHV0W3R5cGU9ImRhdGUiXS5kYXRldGltZV9kYXRlIHsgd2lkdGg6NjklOyBkaXNwbGF5OmlubGluZS1mbGV4OyB9CiAjX2Zvcm1fMjhfIGlucHV0W3R5cGU9InRpbWUiXS5kYXRldGltZV90aW1lIHsgd2lkdGg6MjklOyBkaXNwbGF5OmlubGluZS1mbGV4OyB9CiBAbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOjMyMHB4KSBhbmQgKG1heC13aWR0aDo2NjdweCkgeyA6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgZGlzcGxheTpub25lOyB9CiAjX2Zvcm1fMjhfIHsgbWFyZ2luOjA7IHdpZHRoOjEwMCU7IG1pbi13aWR0aDoxMDAlOyBtYXgtd2lkdGg6MTAwJTsgYm94LXNpemluZzpib3JkZXItYm94OyB9CiAjX2Zvcm1fMjhfICogeyAtd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDsgLW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgZm9udC1zaXplOjFlbTsgfQogI19mb3JtXzI4XyAuX2Zvcm0tY29udGVudCB7IG1hcmdpbjowOyB3aWR0aDoxMDAlOyB9CiAjX2Zvcm1fMjhfIC5fZm9ybS1pbm5lciB7IGRpc3BsYXk6YmxvY2s7IG1pbi13aWR0aDoxMDAlOyB9CiAjX2Zvcm1fMjhfIC5fZm9ybS10aXRsZSwjX2Zvcm1fMjhfIC5faW5saW5lLXN0eWxlIHsgbWFyZ2luLXRvcDowOyBtYXJnaW4tcmlnaHQ6MDsgbWFyZ2luLWxlZnQ6MDsgfQogI19mb3JtXzI4XyAuX2Zvcm0tdGl0bGUgeyBmb250LXNpemU6MS4yZW07IH0KICNfZm9ybV8yOF8gLl9mb3JtX2VsZW1lbnQgeyBtYXJnaW46MCAwIDIwcHg7IHBhZGRpbmc6MDsgd2lkdGg6MTAwJTsgfQogI19mb3JtXzI4XyAuX2Zvcm0tZWxlbWVudCwjX2Zvcm1fMjhfIC5faW5saW5lLXN0eWxlLCNfZm9ybV8yOF8gaW5wdXRbdHlwZT0idGV4dCJdLCNfZm9ybV8yOF8gbGFiZWwsI19mb3JtXzI4XyBwLCNfZm9ybV8yOF8gdGV4dGFyZWE6bm90KC5nLXJlY2FwdGNoYS1yZXNwb25zZSkgeyBmbG9hdDpub25lOyBkaXNwbGF5OmJsb2NrOyB3aWR0aDoxMDAlOyB9CiAjX2Zvcm1fMjhfIC5fcm93Ll9jaGVja2JveC1yYWRpbyBsYWJlbCB7IGRpc3BsYXk6aW5saW5lOyB9CiAjX2Zvcm1fMjhfIC5fcm93LCNfZm9ybV8yOF8gcCwjX2Zvcm1fMjhfIGxhYmVsIHsgbWFyZ2luLWJvdHRvbTowLjdlbTsgd2lkdGg6MTAwJTsgfQogI19mb3JtXzI4XyAuX3JvdyBpbnB1dFt0eXBlPSJjaGVja2JveCJdLCNfZm9ybV8yOF8gLl9yb3cgaW5wdXRbdHlwZT0icmFkaW8iXSB7IG1hcmdpbjowICFpbXBvcnRhbnQ7IHZlcnRpY2FsLWFsaWduOm1pZGRsZSAhaW1wb3J0YW50OyB9CiAjX2Zvcm1fMjhfIC5fcm93IGlucHV0W3R5cGU9ImNoZWNrYm94Il0gKyBzcGFuIGxhYmVsIHsgZGlzcGxheTppbmxpbmU7IH0KICNfZm9ybV8yOF8gLl9yb3cgc3BhbiBsYWJlbCB7IG1hcmdpbjowICFpbXBvcnRhbnQ7IHdpZHRoOmluaXRpYWwgIWltcG9ydGFudDsgdmVydGljYWwtYWxpZ246bWlkZGxlICFpbXBvcnRhbnQ7IH0KICNfZm9ybV8yOF8gLl9mb3JtLWltYWdlIHsgbWF4LXdpZHRoOjEwMCU7IGhlaWdodDphdXRvICFpbXBvcnRhbnQ7IH0KICNfZm9ybV8yOF8gaW5wdXRbdHlwZT0idGV4dCJdIHsgcGFkZGluZy1sZWZ0OjEwcHg7IHBhZGRpbmctcmlnaHQ6MTBweDsgZm9udC1zaXplOjE2cHg7IGxpbmUtaGVpZ2h0OjEuM2VtOyAtd2Via2l0LWFwcGVhcmFuY2U6bm9uZTsgfQogI19mb3JtXzI4XyBpbnB1dFt0eXBlPSJyYWRpbyJdLCNfZm9ybV8yOF8gaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyB3aWR0aDoxLjNlbTsgaGVpZ2h0OjEuM2VtOyBmb250LXNpemU6MWVtOyBtYXJnaW46MCAwLjNlbSAwIDA7IHZlcnRpY2FsLWFsaWduOmJhc2VsaW5lOyB9CiAjX2Zvcm1fMjhfIGJ1dHRvblt0eXBlPSJzdWJtaXQiXSB7IHBhZGRpbmc6MjBweDsgZm9udC1zaXplOjEuNWVtOyB9CiAjX2Zvcm1fMjhfIC5faW5saW5lLXN0eWxlIHsgbWFyZ2luOjIwcHggMCAwICFpbXBvcnRhbnQ7IH0KIH0KICNfZm9ybV8yOF8geyBwb3NpdGlvbjpyZWxhdGl2ZTsgdGV4dC1hbGlnbjpsZWZ0OyBtYXJnaW46MjVweCBhdXRvIDA7IHBhZGRpbmc6MjBweDsgLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7IC1tb3otYm94LXNpemluZzpib3JkZXItYm94OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7ICp6b29tOjE7IGJhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50OyBib3JkZXI6MHB4IHNvbGlkICNiMGIwYjAgIWltcG9ydGFudDsgbWF4LXdpZHRoOjUwMHB4OyAtbW96LWJvcmRlci1yYWRpdXM6MHB4ICFpbXBvcnRhbnQ7IC13ZWJraXQtYm9yZGVyLXJhZGl1czowcHggIWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czowcHggIWltcG9ydGFudDsgY29sb3I6IzAwMCAhaW1wb3J0YW50OyB9CiAjX2Zvcm1fMjhfLl9pbmxpbmUtZm9ybSwjX2Zvcm1fMjhfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCwjX2Zvcm1fMjhfLl9pbmxpbmUtZm9ybSBpbnB1dCwjX2Zvcm1fMjhfLl9pbmxpbmUtZm9ybSAuX3N1Ym1pdCB7IGZvbnQtZmFtaWx5OiJJQk0gUGxleCBTYW5zIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9CiAjX2Zvcm1fMjhfIC5fZm9ybS10aXRsZSB7IGZvbnQtc2l6ZToyMnB4OyBsaW5lLWhlaWdodDoyMnB4OyBmb250LXdlaWdodDo2MDA7IG1hcmdpbi1ib3R0b206MDsgfQogI19mb3JtXzI4XzpiZWZvcmUsI19mb3JtXzI4XzphZnRlciB7IGNvbnRlbnQ6IiAiOyBkaXNwbGF5OnRhYmxlOyB9CiAjX2Zvcm1fMjhfOmFmdGVyIHsgY2xlYXI6Ym90aDsgfQogI19mb3JtXzI4Xy5faW5saW5lLXN0eWxlIHsgd2lkdGg6YXV0bzsgZGlzcGxheTppbmxpbmUtYmxvY2s7IH0KICNfZm9ybV8yOF8uX2lubGluZS1zdHlsZSBpbnB1dFt0eXBlPSJ0ZXh0Il0sI19mb3JtXzI4Xy5faW5saW5lLXN0eWxlIGlucHV0W3R5cGU9ImRhdGUiXSB7IHBhZGRpbmc6MTBweCAxMnB4OyB9CiAjX2Zvcm1fMjhfLl9pbmxpbmUtc3R5bGUgYnV0dG9uLl9pbmxpbmUtc3R5bGUgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgdG9wOjI3cHg7IH0KICNfZm9ybV8yOF8uX2lubGluZS1zdHlsZSBwIHsgbWFyZ2luOjA7IH0KICNfZm9ybV8yOF8uX2lubGluZS1zdHlsZSAuX2J1dHRvbi13cmFwcGVyIHsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbjoyN3B4IDEyLjVweCAwIDIwcHg7IH0KICNfZm9ybV8yOF8gLl9mb3JtLXRoYW5rLXlvdSB7IHBvc2l0aW9uOnJlbGF0aXZlOyBsZWZ0OjA7IHJpZ2h0OjA7IHRleHQtYWxpZ246Y2VudGVyOyBmb250LXNpemU6MThweDsgfQogQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpIHsgI19mb3JtXzI4Xy5faW5saW5lLWZvcm0uX2lubGluZS1zdHlsZSAuX2lubGluZS1zdHlsZS5fYnV0dG9uLXdyYXBwZXIgeyBtYXJnaW4tdG9wOjIwcHggIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6MCAhaW1wb3J0YW50OyB9CiB9CiAjX2Zvcm1fMjhfIC5pdGkuaXRpLS1hbGxvdy1kcm9wZG93bi5pdGktLXNlcGFyYXRlLWRpYWwtY29kZSB7IHdpZHRoOjEwMCU7IH0KICNfZm9ybV8yOF8gLml0aSBpbnB1dCB7IHdpZHRoOjEwMCU7IGhlaWdodDozMnB4OyBib3JkZXI6Izk3OTc5NyAxcHggc29saWQ7IGJvcmRlci1yYWRpdXM6NHB4OyB9CiAjX2Zvcm1fMjhfIC5pdGktLXNlcGFyYXRlLWRpYWwtY29kZSAuaXRpX19zZWxlY3RlZC1mbGFnIHsgYmFja2dyb3VuZC1jb2xvcjojZmZmOyBib3JkZXItcmFkaXVzOjRweDsgfQogI19mb3JtXzI4XyAuaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGUgLml0aV9fc2VsZWN0ZWQtZmxhZzpob3ZlciB7IGJhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA1KTsgfQogI19mb3JtXzI4XyAuaXRpX19jb3VudHJ5LWxpc3QgeyBib3JkZXItcmFkaXVzOjRweDsgbWFyZ2luLXRvcDo0cHg7IG1pbi13aWR0aDo0NjBweDsgfQogI19mb3JtXzI4XyAuaXRpX19jb3VudHJ5LWxpc3QtLWRyb3B1cCB7IG1hcmdpbi1ib3R0b206NHB4OyB9CiAjX2Zvcm1fMjhfIC5waG9uZS1lcnJvci1oaWRkZW4geyBkaXNwbGF5Om5vbmU7IH0KICNfZm9ybV8yOF8gLnBob25lLWVycm9yIHsgY29sb3I6I2U0MGU0OTsgfQogI19mb3JtXzI4XyAucGhvbmUtaW5wdXQtZXJyb3IgeyBib3JkZXI6MXB4IHNvbGlkICNlNDBlNDkgIWltcG9ydGFudDsgfQo8L3N0eWxlPgo8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PUxhdG8mZmFtaWx5PU1vbnRzZXJyYXQmZmFtaWx5PVJvYm90byZmYW1pbHk9SUJNK1BsZXgrU2Fuczp3Z2h0QDQwMDs2MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHBzOi8vdW5wa2cuY29tL2ludGwtdGVsLWlucHV0QDE3LjAuMTgvYnVpbGQvY3NzL2ludGxUZWxJbnB1dC5taW4uY3NzIi8+CiAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iaHR0cHM6Ly9zaWx2aW5hYWxvZXJvLmFjdGl2ZWhvc3RlZC5jb20vcHJvYy5waHAiIGlkPSJfZm9ybV8yOF8iIGNsYXNzPSJfZm9ybSBfZm9ybV8yOCBfaW5saW5lLWZvcm0gIF9kYXJrIiBub3ZhbGlkYXRlPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ1IiB2YWx1ZT0iMjgiIC8+CiAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImYiIHZhbHVlPSIyOCIgLz4KICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icyIgLz4KICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYyIgdmFsdWU9IjAiIC8+CiAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im0iIHZhbHVlPSIwIiAvPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzdWIiIC8+CiAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InYiIHZhbHVlPSIyIiAvPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJvciIgdmFsdWU9IjdjYTg2ODNmOTZkODk0MGM1MDk2MDg4YWJjMzI1MjQ1IiAvPgogICAgICA8ZGl2IGNsYXNzPSJfZm9ybS1jb250ZW50Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJfZm9ybV9lbGVtZW50IF94MTc3NTY4ODYgX2Z1bGxfd2lkdGggIiA+CiAgICAgICAgICA8bGFiZWwgZm9yPSJmaXJzdG5hbWUiIGNsYXNzPSJfZm9ybS1sYWJlbCI+CiAgICAgICAgICAgIE5vbWJyZSoKICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJfZmllbGQtd3JhcHBlciI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZmlyc3RuYW1lIiBuYW1lPSJmaXJzdG5hbWUiIHBsYWNlaG9sZGVyPSJFc2NyaWJhIHN1IG5vbWJyZSIgcmVxdWlyZWQvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iX2Zvcm1fZWxlbWVudCBfeDMxNDA0MDM5IF9mdWxsX3dpZHRoICIgPgogICAgICAgICAgPGxhYmVsIGZvcj0ibGFzdG5hbWUiIGNsYXNzPSJfZm9ybS1sYWJlbCI+CiAgICAgICAgICAgIEFwZWxsaWRvcyoKICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJfZmllbGQtd3JhcHBlciI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibGFzdG5hbWUiIG5hbWU9Imxhc3RuYW1lIiBwbGFjZWhvbGRlcj0iRXNjcmliYSBzdSBhcGVsbGlkbyIgcmVxdWlyZWQvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iX2Zvcm1fZWxlbWVudCBfeDUyMjg0MTcwIF9mdWxsX3dpZHRoICIgPgogICAgICAgICAgPGxhYmVsIGZvcj0iZW1haWwiIGNsYXNzPSJfZm9ybS1sYWJlbCI+CiAgICAgICAgICAgIENvcnJlbyBlbGVjdHLDs25pY28qCiAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgPGRpdiBjbGFzcz0iX2ZpZWxkLXdyYXBwZXIiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcGxhY2Vob2xkZXI9IkVzY3JpYmEgc3UgY29ycmVvIGVsZWN0csOzbmljbyIgcmVxdWlyZWQvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iX2Zvcm1fZWxlbWVudCBfeDE5NjYwODAwIF9mdWxsX3dpZHRoICIgPgogICAgICAgICAgPGxhYmVsIGZvcj0icGhvbmUiIGNsYXNzPSJfZm9ybS1sYWJlbCI+CiAgICAgICAgICAgIFRlbMOpZm9ubyoKICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJfZmllbGQtd3JhcHBlciI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icGhvbmUiIG5hbWU9InBob25lIiBwbGFjZWhvbGRlcj0iRXNjcmliYSBzdSBuw7ptZXJvIGRlIHRlbMOpZm9ubyIgcmVxdWlyZWQvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iX2Zvcm1fZWxlbWVudCBfeDk5Nzg4ODQyIF9mdWxsX3dpZHRoICIgPgogICAgICAgICAgPGxhYmVsIGZvcj0iZmllbGRbMV0iIGNsYXNzPSJfZm9ybS1sYWJlbCI+CiAgICAgICAgICAgIFBhw61zKgogICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgIDxkaXYgY2xhc3M9Il9maWVsZC13cmFwcGVyIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJmaWVsZFsxXSIgbmFtZT0iZmllbGRbMV0iIHZhbHVlPSIiIHBsYWNlaG9sZGVyPSIiIHJlcXVpcmVkLz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Il9mb3JtX2VsZW1lbnQgX3g1OTQwOTI4NSBfZnVsbF93aWR0aCAiID4KICAgICAgICAgIDxsYWJlbCBmb3I9ImxzIiBjbGFzcz0iX2Zvcm0tbGFiZWwiPgogICAgICAgICAgICBWZXJpZmlxdWUgc3Ugc29saWNpdHVkKgogICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgIDxkaXYgY2xhc3M9ImctcmVjYXB0Y2hhIiBkYXRhLXNpdGVrZXk9IjZMY3dJdzhUQUFBQUFDUDF5c00wOEVoQ2d6ZDZxNUpBT1VSMWEwR28iPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iX2J1dHRvbi13cmFwcGVyIF9mdWxsX3dpZHRoIj4KICAgICAgICAgIDxidXR0b24gaWQ9Il9mb3JtXzI4X3N1Ym1pdCIgY2xhc3M9Il9zdWJtaXQiIHR5cGU9InN1Ym1pdCI+CiAgICAgICAgICAgIEVudmlhcgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iX2NsZWFyLWVsZW1lbnQiPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iX2Zvcm0tdGhhbmsteW91IiBzdHlsZT0iZGlzcGxheTpub25lOyI+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJfZm9ybS1icmFuZGluZyI+CiAgICAgICAgPGRpdiBjbGFzcz0iX21hcmtldGluZy1ieSI+CiAgICAgICAgICBNYXJrZXRpbmcgcG9yCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYWN0aXZlY2FtcGFpZ24uY29tLz91dG1fbWVkaXVtPXJlZmVycmFsJnV0bV9jYW1wYWlnbj1hY2Zvcm1zIiBjbGFzcz0iX2xvZ28iPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImZvcm0tc3Itb25seSI+CiAgICAgICAgICAgIEFjdGl2ZUNhbXBhaWduCiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9hPgogICAgICA8L2Rpdj4KICAgIDwvZm9ybT48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CndpbmRvdy5jZmllbGRzID0geyIxIjoicGFzIn07CndpbmRvdy5fc2hvd190aGFua195b3UgPSBmdW5jdGlvbihpZCwgbWVzc2FnZSwgdHJhY2tjbXBfdXJsLCBlbWFpbCkgewogIHZhciBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19mb3JtXycgKyBpZCArICdfJyksIHRoYW5rX3lvdSA9IGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLXRoYW5rLXlvdScpOwogIGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLWNvbnRlbnQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIHRoYW5rX3lvdS5pbm5lckhUTUwgPSBtZXNzYWdlOwogIHRoYW5rX3lvdS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBjb25zdCB2Z29BbGlhcyA9IHR5cGVvZiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXMgPT09ICd1bmRlZmluZWQnID8gJ3ZnbycgOiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXM7CiAgdmFyIHZpc2l0b3JPYmplY3QgPSB3aW5kb3dbdmdvQWxpYXNdOwogIGlmIChlbWFpbCAmJiB0eXBlb2YgdmlzaXRvck9iamVjdCAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHZpc2l0b3JPYmplY3QoJ3NldEVtYWlsJywgZW1haWwpOwogICAgdmlzaXRvck9iamVjdCgndXBkYXRlJyk7CiAgfSBlbHNlIGlmICh0eXBlb2YodHJhY2tjbXBfdXJsKSAhPSAndW5kZWZpbmVkJyAmJiB0cmFja2NtcF91cmwpIHsKICAgIC8vIFNpdGUgdHJhY2tpbmcgVVJMIHRvIHVzZSBhZnRlciBpbmxpbmUgZm9ybSBzdWJtaXNzaW9uLgogICAgX2xvYWRfc2NyaXB0KHRyYWNrY21wX3VybCk7CiAgfQogIGlmICh0eXBlb2Ygd2luZG93Ll9mb3JtX2NhbGxiYWNrICE9PSAndW5kZWZpbmVkJykgd2luZG93Ll9mb3JtX2NhbGxiYWNrKGlkKTsKfTsKd2luZG93Ll9zaG93X2Vycm9yID0gZnVuY3Rpb24oaWQsIG1lc3NhZ2UsIGh0bWwpIHsKICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8nICsgaWQgKyAnXycpLCBlcnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgYnV0dG9uID0gZm9ybS5xdWVyeVNlbGVjdG9yKCdidXR0b24nKSwgb2xkX2Vycm9yID0gZm9ybS5xdWVyeVNlbGVjdG9yKCcuX2Zvcm1fZXJyb3InKTsKICBpZiAob2xkX2Vycm9yKSBvbGRfZXJyb3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRfZXJyb3IpOwogIGVyci5pbm5lckhUTUwgPSBtZXNzYWdlOwogIGVyci5jbGFzc05hbWUgPSAnX2Vycm9yLWlubmVyIF9mb3JtX2Vycm9yIF9ub19hcnJvdyc7CiAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICB3cmFwcGVyLmNsYXNzTmFtZSA9ICdfZm9ybS1pbm5lcic7CiAgd3JhcHBlci5hcHBlbmRDaGlsZChlcnIpOwogIGJ1dHRvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLCBidXR0b24pOwogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZF49Il9mb3JtIl1baWQkPSJfc3VibWl0Il0nKS5kaXNhYmxlZCA9IGZhbHNlOwogIGlmIChodG1sKSB7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBkaXYuY2xhc3NOYW1lID0gJ19lcnJvci1odG1sJzsKICAgIGRpdi5pbm5lckhUTUwgPSBodG1sOwogICAgZXJyLmFwcGVuZENoaWxkKGRpdik7CiAgfQp9Owp3aW5kb3cuX2xvYWRfc2NyaXB0ID0gZnVuY3Rpb24odXJsLCBjYWxsYmFjaykgewogIHZhciBoZWFkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCcpLCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgciA9IGZhbHNlOwogIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7CiAgc2NyaXB0LmNoYXJzZXQgPSAndXRmLTgnOwogIHNjcmlwdC5zcmMgPSB1cmw7CiAgaWYgKGNhbGxiYWNrKSB7CiAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXIgJiYgKCF0aGlzLnJlYWR5U3RhdGUgfHwgdGhpcy5yZWFkeVN0YXRlID09ICdjb21wbGV0ZScpKSB7CiAgICAgICAgciA9IHRydWU7CiAgICAgICAgY2FsbGJhY2soKTsKICAgICAgfQogICAgfTsKICB9CiAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpOwp9OwooZnVuY3Rpb24oKSB7CiAgaWYgKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc2VhcmNoKCJleGNsdWRlZm9ybSIpICE9PSAtMSkgcmV0dXJuIGZhbHNlOwogIHZhciBnZXRDb29raWUgPSBmdW5jdGlvbihuYW1lKSB7CiAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58OyApJyArIG5hbWUgKyAnPShbXjtdKyknKSk7CiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsyXSA6IG51bGw7CiAgfQogIHZhciBzZXRDb29raWUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkgewogICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CiAgICB2YXIgdGltZSA9IG5vdy5nZXRUaW1lKCk7CiAgICB2YXIgZXhwaXJlVGltZSA9IHRpbWUgKyAxMDAwICogNjAgKiA2MCAqIDI0ICogMzY1OwogICAgbm93LnNldFRpbWUoZXhwaXJlVGltZSk7CiAgICBkb2N1bWVudC5jb29raWUgPSBuYW1lICsgJz0nICsgdmFsdWUgKyAnOyBleHBpcmVzPScgKyBub3cgKyAnO3BhdGg9LzsgU2VjdXJlOyBTYW1lU2l0ZT1MYXg7JzsvLyBjYW5ub3QgYmUgSHR0cE9ubHkKICB9CiAgICAgIHZhciBhZGRFdmVudCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50LCBmdW5jKSB7CiAgICBpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZnVuYyk7CiAgICB9IGVsc2UgewogICAgICB2YXIgb2xkRnVuYyA9IGVsZW1lbnRbJ29uJyArIGV2ZW50XTsKICAgICAgZWxlbWVudFsnb24nICsgZXZlbnRdID0gZnVuY3Rpb24oKSB7CiAgICAgICAgb2xkRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfTsKICAgIH0KICB9CiAgdmFyIF9yZW1vdmVkID0gZmFsc2U7CiAgdmFyIGZvcm1fdG9fc3VibWl0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19mb3JtXzI4XycpOwogIHZhciBhbGxJbnB1dHMgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLCB0b29sdGlwcyA9IFtdLCBzdWJtaXR0ZWQgPSBmYWxzZTsKCiAgdmFyIGdldFVybFBhcmFtID0gZnVuY3Rpb24obmFtZSkgewogICAgdmFyIHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7CiAgICByZXR1cm4gcGFyYW1zLmdldChuYW1lKSB8fCBmYWxzZTsKICB9OwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbElucHV0cy5sZW5ndGg7IGkrKykgewogICAgdmFyIHJlZ2V4U3RyID0gImZpZWxkXFxbKFxcZCspXFxdIjsKICAgIHZhciByZXN1bHRzID0gbmV3IFJlZ0V4cChyZWdleFN0cikuZXhlYyhhbGxJbnB1dHNbaV0ubmFtZSk7CiAgICBpZiAocmVzdWx0cyAhPSB1bmRlZmluZWQpIHsKICAgICAgYWxsSW5wdXRzW2ldLmRhdGFzZXQubmFtZSA9IHdpbmRvdy5jZmllbGRzW3Jlc3VsdHNbMV1dOwogICAgfSBlbHNlIHsKICAgICAgYWxsSW5wdXRzW2ldLmRhdGFzZXQubmFtZSA9IGFsbElucHV0c1tpXS5uYW1lOwogICAgfQogICAgdmFyIGZpZWxkVmFsID0gZ2V0VXJsUGFyYW0oYWxsSW5wdXRzW2ldLmRhdGFzZXQubmFtZSk7CgogICAgaWYgKGZpZWxkVmFsKSB7CiAgICAgIGlmIChhbGxJbnB1dHNbaV0uZGF0YXNldC5hdXRvZmlsbCA9PT0gImZhbHNlIikgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChhbGxJbnB1dHNbaV0udHlwZSA9PSAicmFkaW8iIHx8IGFsbElucHV0c1tpXS50eXBlID09ICJjaGVja2JveCIpIHsKICAgICAgICBpZiAoYWxsSW5wdXRzW2ldLnZhbHVlID09IGZpZWxkVmFsKSB7CiAgICAgICAgICBhbGxJbnB1dHNbaV0uY2hlY2tlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGFsbElucHV0c1tpXS52YWx1ZSA9IGZpZWxkVmFsOwogICAgICB9CiAgICB9CiAgfQoKICB2YXIgcmVtb3ZlX3Rvb2x0aXBzID0gZnVuY3Rpb24oKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvb2x0aXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHRvb2x0aXBzW2ldLnRpcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRvb2x0aXBzW2ldLnRpcCk7CiAgICB9CiAgICB0b29sdGlwcyA9IFtdOwogIH07CiAgdmFyIHJlbW92ZV90b29sdGlwID0gZnVuY3Rpb24oZWxlbSkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b29sdGlwcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodG9vbHRpcHNbaV0uZWxlbSA9PT0gZWxlbSkgewogICAgICAgIHRvb2x0aXBzW2ldLnRpcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRvb2x0aXBzW2ldLnRpcCk7CiAgICAgICAgdG9vbHRpcHMuc3BsaWNlKGksIDEpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogIH07CiAgdmFyIGNyZWF0ZV90b29sdGlwID0gZnVuY3Rpb24oZWxlbSwgdGV4dCkgewogICAgdmFyIHRvb2x0aXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgYXJyb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgbmV3X3Rvb2x0aXAgPSB7fTsKICAgIGlmIChlbGVtLnR5cGUgIT0gJ3JhZGlvJyAmJiBlbGVtLnR5cGUgIT0gJ2NoZWNrYm94JykgewogICAgICB0b29sdGlwLmNsYXNzTmFtZSA9ICdfZXJyb3InOwogICAgICBhcnJvdy5jbGFzc05hbWUgPSAnX2Vycm9yLWFycm93JzsKICAgICAgaW5uZXIuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lcic7CiAgICAgIGlubmVyLmlubmVySFRNTCA9IHRleHQ7CiAgICAgIHRvb2x0aXAuYXBwZW5kQ2hpbGQoYXJyb3cpOwogICAgICB0b29sdGlwLmFwcGVuZENoaWxkKGlubmVyKTsKICAgICAgZWxlbS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRvb2x0aXApOwogICAgfSBlbHNlIHsKICAgICAgdG9vbHRpcC5jbGFzc05hbWUgPSAnX2Vycm9yLWlubmVyIF9ub19hcnJvdyc7CiAgICAgIHRvb2x0aXAuaW5uZXJIVE1MID0gdGV4dDsKICAgICAgZWxlbS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0b29sdGlwLCBlbGVtKTsKICAgICAgbmV3X3Rvb2x0aXAubm9fYXJyb3cgPSB0cnVlOwogICAgfQogICAgbmV3X3Rvb2x0aXAudGlwID0gdG9vbHRpcDsKICAgIG5ld190b29sdGlwLmVsZW0gPSBlbGVtOwogICAgdG9vbHRpcHMucHVzaChuZXdfdG9vbHRpcCk7CiAgICByZXR1cm4gbmV3X3Rvb2x0aXA7CiAgfTsKICB2YXIgcmVzaXplX3Rvb2x0aXAgPSBmdW5jdGlvbih0b29sdGlwKSB7CiAgICB2YXIgcmVjdCA9IHRvb2x0aXAuZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIHZhciBkb2MgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHNjcm9sbFBvc2l0aW9uID0gcmVjdC50b3AgLSAoKHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wKSAgLSAoZG9jLmNsaWVudFRvcCB8fCAwKSk7CiAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPCA0MCkgewogICAgICB0b29sdGlwLnRpcC5jbGFzc05hbWUgPSB0b29sdGlwLnRpcC5jbGFzc05hbWUucmVwbGFjZSgvID8oX2Fib3ZlfF9iZWxvdykgPy9nLCAnJykgKyAnIF9iZWxvdyc7CiAgICB9IGVsc2UgewogICAgICB0b29sdGlwLnRpcC5jbGFzc05hbWUgPSB0b29sdGlwLnRpcC5jbGFzc05hbWUucmVwbGFjZSgvID8oX2Fib3ZlfF9iZWxvdykgPy9nLCAnJykgKyAnIF9hYm92ZSc7CiAgICB9CiAgfTsKICB2YXIgcmVzaXplX3Rvb2x0aXBzID0gZnVuY3Rpb24oKSB7CiAgICBpZiAoX3JlbW92ZWQpIHJldHVybjsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9vbHRpcHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCF0b29sdGlwc1tpXS5ub19hcnJvdykgcmVzaXplX3Rvb2x0aXAodG9vbHRpcHNbaV0pOwogICAgfQogIH07CiAgdmFyIHZhbGlkYXRlX2ZpZWxkID0gZnVuY3Rpb24oZWxlbSwgcmVtb3ZlKSB7CiAgICB2YXIgdG9vbHRpcCA9IG51bGwsIHZhbHVlID0gZWxlbS52YWx1ZSwgbm9fZXJyb3IgPSB0cnVlOwogICAgcmVtb3ZlID8gcmVtb3ZlX3Rvb2x0aXAoZWxlbSkgOiBmYWxzZTsKICAgIGlmIChlbGVtLnR5cGUgIT0gJ2NoZWNrYm94JykgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICBpZiAoZWxlbS5nZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJykgIT09IG51bGwpIHsKICAgICAgaWYgKGVsZW0udHlwZSA9PSAncmFkaW8nIHx8IChlbGVtLnR5cGUgPT0gJ2NoZWNrYm94JyAmJiAvYW55Ly50ZXN0KGVsZW0uY2xhc3NOYW1lKSkpIHsKICAgICAgICB2YXIgZWxlbXMgPSBmb3JtX3RvX3N1Ym1pdC5lbGVtZW50c1tlbGVtLm5hbWVdOwogICAgICAgIGlmICghKGVsZW1zIGluc3RhbmNlb2YgTm9kZUxpc3QgfHwgZWxlbXMgaW5zdGFuY2VvZiBIVE1MQ29sbGVjdGlvbikgfHwgZWxlbXMubGVuZ3RoIDw9IDEpIHsKICAgICAgICAgIG5vX2Vycm9yID0gZWxlbS5jaGVja2VkOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChlbGVtc1tpXS5jaGVja2VkKSBub19lcnJvciA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghbm9fZXJyb3IpIHsKICAgICAgICAgIHRvb2x0aXAgPSBjcmVhdGVfdG9vbHRpcChlbGVtLCAiU2VsZWNjaW9uZSB1bmEgb3BjacOzbi4iKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZWxlbS50eXBlID09J2NoZWNrYm94JykgewogICAgICAgIHZhciBlbGVtcyA9IGZvcm1fdG9fc3VibWl0LmVsZW1lbnRzW2VsZW0ubmFtZV0sIGZvdW5kID0gZmFsc2UsIGVyciA9IFtdOwogICAgICAgIG5vX2Vycm9yID0gdHJ1ZTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBpZiAoZWxlbXNbaV0uZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpID09PSBudWxsKSBjb250aW51ZTsKICAgICAgICAgIGlmICghZm91bmQgJiYgZWxlbXNbaV0gIT09IGVsZW0pIHJldHVybiB0cnVlOwogICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgZWxlbXNbaV0uY2xhc3NOYW1lID0gZWxlbXNbaV0uY2xhc3NOYW1lLnJlcGxhY2UoLyA/X2hhc19lcnJvciA/L2csICcnKTsKICAgICAgICAgIGlmICghZWxlbXNbaV0uY2hlY2tlZCkgewogICAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgICBlbGVtc1tpXS5jbGFzc05hbWUgPSBlbGVtc1tpXS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgICBlcnIucHVzaCgiRXMgbmVjZXNhcmlvIHZlcmlmaWNhciAlcyIucmVwbGFjZSgiJXMiLCBlbGVtc1tpXS52YWx1ZSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIW5vX2Vycm9yKSB7CiAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgZXJyLmpvaW4oJzxici8+JykpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlbGVtLnRhZ05hbWUgPT0gJ1NFTEVDVCcpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0cnVlOwogICAgICAgIGlmIChlbGVtLm11bHRpcGxlKSB7CiAgICAgICAgICBzZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtLm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGVsZW0ub3B0aW9uc1tpXS5zZWxlY3RlZCkgewogICAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0ub3B0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoZWxlbS5vcHRpb25zW2ldLnNlbGVjdGVkICYmICghZWxlbS5vcHRpb25zW2ldLnZhbHVlIHx8IChlbGVtLm9wdGlvbnNbaV0udmFsdWUubWF0Y2goL1xuL2cpKSkpIHsKICAgICAgICAgICAgICBzZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghc2VsZWN0ZWQpIHsKICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgIHRvb2x0aXAgPSBjcmVhdGVfdG9vbHRpcChlbGVtLCAiU2VsZWNjaW9uZSB1bmEgb3BjacOzbi4iKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHsKICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgIHRvb2x0aXAgPSBjcmVhdGVfdG9vbHRpcChlbGVtLCAiRXN0ZSBjYW1wbyBlcyBvYmxpZ2F0b3Jpby4iKTsKICAgICAgfQogICAgfQogICAgaWYgKG5vX2Vycm9yICYmIChlbGVtLmlkID09ICdmaWVsZFtdJyB8fCBlbGVtLmlkID09ICdjYVsxMV1bdl0nKSkgewogICAgICBpZiAoZWxlbS5jbGFzc05hbWUuaW5jbHVkZXMoJ3Bob25lLWlucHV0LWVycm9yJykpIHsKICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpZiAobm9fZXJyb3IgJiYgZWxlbS5uYW1lID09ICdlbWFpbCcpIHsKICAgICAgaWYgKCF2YWx1ZS5tYXRjaCgvXltcK19hLXowLTktJyY9XSsoXC5bXCtfYS16MC05LSddKykqQFthLXowLTktXSsoXC5bYS16MC05LV0rKSooXC5bYS16XXsyLH0pJC9pKSkgewogICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgdG9vbHRpcCA9IGNyZWF0ZV90b29sdGlwKGVsZW0sICJJbnRyb2R1emNhIHVuYSBkaXJlY2Npw7NuIGRlIGNvcnJlbyBlbGVjdHLDs25pY28gdsOhbGlkYS4iKTsKICAgICAgfQogICAgfQogICAgaWYgKG5vX2Vycm9yICYmIC9kYXRlX2ZpZWxkLy50ZXN0KGVsZW0uY2xhc3NOYW1lKSkgewogICAgICBpZiAoIXZhbHVlLm1hdGNoKC9eXGRcZFxkXGQtXGRcZC1cZFxkJC8pKSB7CiAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZSArICcgX2hhc19lcnJvcic7CiAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIkludHJvZHV6Y2EgdW5hIGZlY2hhIHbDoWxpZGEuIik7CiAgICAgIH0KICAgIH0KICAgIHRvb2x0aXAgPyByZXNpemVfdG9vbHRpcCh0b29sdGlwKSA6IGZhbHNlOwogICAgcmV0dXJuIG5vX2Vycm9yOwogIH07CiAgdmFyIG5lZWRzX3ZhbGlkYXRlID0gZnVuY3Rpb24oZWwpIHsKICAgICAgICBpZihlbC5nZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJykgIT09IG51bGwpewogICAgICAgICAgICByZXR1cm4gdHJ1ZQogICAgICAgIH0KICAgICAgICBpZihlbC5uYW1lID09PSAnZW1haWwnICYmIGVsLnZhbHVlICE9PSAiIil7CiAgICAgICAgICAgIHJldHVybiB0cnVlCiAgICAgICAgfQoKICAgIGlmKChlbC5pZCA9PSAnZmllbGRbXScgfHwgZWwuaWQgPT0gJ2NhWzExXVt2XScpICYmIGVsLmNsYXNzTmFtZS5pbmNsdWRlcygncGhvbmUtaW5wdXQtZXJyb3InKSl7CiAgICAgICAgICAgIHJldHVybiB0cnVlCiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2UKICB9OwogIHZhciB2YWxpZGF0ZV9mb3JtID0gZnVuY3Rpb24oZSkgewogICAgdmFyIGVyciA9IGZvcm1fdG9fc3VibWl0LnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybV9lcnJvcicpLCBub19lcnJvciA9IHRydWU7CiAgICBpZiAoIXN1Ym1pdHRlZCkgewogICAgICBzdWJtaXR0ZWQgPSB0cnVlOwogICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYWxsSW5wdXRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgdmFyIGlucHV0ID0gYWxsSW5wdXRzW2ldOwogICAgICAgIGlmIChuZWVkc192YWxpZGF0ZShpbnB1dCkpIHsKICAgICAgICAgIGlmIChpbnB1dC50eXBlID09ICd0ZWwnKSB7CiAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnYmx1cicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnRyaW0oKTsKICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaW5wdXQudHlwZSA9PSAndGV4dCcgfHwgaW5wdXQudHlwZSA9PSAnbnVtYmVyJyB8fCBpbnB1dC50eXBlID09ICd0aW1lJykgewogICAgICAgICAgICBhZGRFdmVudChpbnB1dCwgJ2JsdXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS50cmltKCk7CiAgICAgICAgICAgICAgdmFsaWRhdGVfZmllbGQodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBhZGRFdmVudChpbnB1dCwgJ2lucHV0JywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgdmFsaWRhdGVfZmllbGQodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC50eXBlID09ICdyYWRpbycgfHwgaW5wdXQudHlwZSA9PSAnY2hlY2tib3gnKSB7CiAgICAgICAgICAgIChmdW5jdGlvbihlbCkgewogICAgICAgICAgICAgIHZhciByYWRpb3MgPSBmb3JtX3RvX3N1Ym1pdC5lbGVtZW50c1tlbC5uYW1lXTsKICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhZGlvcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgYWRkRXZlbnQocmFkaW9zW2ldLCAnY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgdmFsaWRhdGVfZmllbGQoZWwsIHRydWUpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KShpbnB1dCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnRhZ05hbWUgPT0gJ1NFTEVDVCcpIHsKICAgICAgICAgICAgYWRkRXZlbnQoaW5wdXQsICdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnR5cGUgPT0gJ3RleHRhcmVhJyl7CiAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZW1vdmVfdG9vbHRpcHMoKTsKICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhbGxJbnB1dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgdmFyIGVsZW0gPSBhbGxJbnB1dHNbaV07CiAgICAgIGlmIChuZWVkc192YWxpZGF0ZShlbGVtKSkgewogICAgICAgIGlmIChlbGVtLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gInNlbGVjdCIpIHsKICAgICAgICAgIGVsZW0udmFsdWUgPSBlbGVtLnZhbHVlLnRyaW0oKTsKICAgICAgICB9CiAgICAgICAgdmFsaWRhdGVfZmllbGQoZWxlbSkgPyB0cnVlIDogbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKCFub19lcnJvciAmJiBlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgIH0KICAgIHJlc2l6ZV90b29sdGlwcygpOwogICAgcmV0dXJuIG5vX2Vycm9yOwogIH07CiAgYWRkRXZlbnQod2luZG93LCAncmVzaXplJywgcmVzaXplX3Rvb2x0aXBzKTsKICBhZGRFdmVudCh3aW5kb3csICdzY3JvbGwnLCByZXNpemVfdG9vbHRpcHMpOwoKICB2YXIgaGlkZVBob25lSW5wdXRFcnJvciA9IGZ1bmN0aW9uKGlucHV0SWQpIHsKICAgIHZhciBlcnJvck1lc3NhZ2UgPSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVycm9yLW1zZy0iICsgaW5wdXRJZCk7CiAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dElkKTsKICAgIGVycm9yTWVzc2FnZS5jbGFzc0xpc3QucmVtb3ZlKCJwaG9uZS1lcnJvciIpOwogICAgZXJyb3JNZXNzYWdlLmNsYXNzTGlzdC5hZGQoInBob25lLWVycm9yLWhpZGRlbiIpOwogICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgicGhvbmUtaW5wdXQtZXJyb3IiKTsKICB9OwoKICB2YXIgaW5pdGlhbGl6ZVBob25lSW5wdXQgPSBmdW5jdGlvbihpbnB1dCwgZGVmYXVsdENvdW50cnkpIHsKICAgIHJldHVybiB3aW5kb3cuaW50bFRlbElucHV0KGlucHV0LCB7CiAgICAgIHV0aWxzU2NyaXB0OiAiaHR0cHM6Ly91bnBrZy5jb20vaW50bC10ZWwtaW5wdXRAMTcuMC4xOC9idWlsZC9qcy91dGlscy5qcyIsCiAgICAgIGF1dG9IaWRlRGlhbENvZGU6IGZhbHNlLAogICAgICBzZXBhcmF0ZURpYWxDb2RlOiB0cnVlLAogICAgICBpbml0aWFsQ291bnRyeTogZGVmYXVsdENvdW50cnksCiAgICAgIHByZWZlcnJlZENvdW50cmllczogW10KICAgIH0pOwogIH0KCiAgdmFyIHNldFBob25lSW5wdXRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uKGlucHV0SWQsIGlucHV0LCBpdGkpIHsKICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBmdW5jdGlvbigpIHsKICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlcnJvci1tc2ctIiArIGlucHV0SWQpOwogICAgICBpZiAoaW5wdXQudmFsdWUudHJpbSgpKSB7CiAgICAgICAgaWYgKGl0aS5pc1ZhbGlkTnVtYmVyKCkpIHsKICAgICAgICAgIGl0aS5zZXROdW1iZXIoaXRpLmdldE51bWJlcigpKTsKICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UuY2xhc3NMaXN0LmNvbnRhaW5zKCJwaG9uZS1lcnJvciIpKXsKICAgICAgICAgICAgaGlkZVBob25lSW5wdXRFcnJvcihpbnB1dElkKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2hvd1Bob25lSW5wdXRFcnJvcihpbnB1dElkKQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoZXJyb3JNZXNzYWdlLmNsYXNzTGlzdC5jb250YWlucygicGhvbmUtZXJyb3IiKSl7CiAgICAgICAgICBoaWRlUGhvbmVJbnB1dEVycm9yKGlucHV0SWQpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY291bnRyeWNoYW5nZSIsIGZ1bmN0aW9uKCkgewogICAgICBpdGkuc2V0TnVtYmVyKCcnKTsKICAgIH0pOwoKICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGNoYXJDb2RlID0gKGUud2hpY2gpID8gZS53aGljaCA6IGUua2V5Q29kZTsKICAgICAgICBpZiAoY2hhckNvZGUgPiAzMSAmJiAoY2hhckNvZGUgPCA0OCB8fCBjaGFyQ29kZSA+IDU3KSAmJiBjaGFyQ29kZSAhPT0gOCkgewogICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIH0KICAgICB9KTsKICB9OwoKICB2YXIgc2hvd1Bob25lSW5wdXRFcnJvciA9IGZ1bmN0aW9uKGlucHV0SWQpIHsKICAgIHZhciBlcnJvck1lc3NhZ2UgPSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVycm9yLW1zZy0iICsgaW5wdXRJZCk7CiAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dElkKTsKICAgIGVycm9yTWVzc2FnZS5jbGFzc0xpc3QuYWRkKCJwaG9uZS1lcnJvciIpOwogICAgZXJyb3JNZXNzYWdlLmNsYXNzTGlzdC5yZW1vdmUoInBob25lLWVycm9yLWhpZGRlbiIpOwogICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgicGhvbmUtaW5wdXQtZXJyb3IiKTsKICB9OwoKCiAgd2luZG93WydyZWNhcHRjaGFfY2FsbGJhY2snXSA9IGZ1bmN0aW9uKCkgewogIC8vIEdldCBhbGwgcmVjYXB0Y2hhcyBpbiB0aGUgRE9NICh0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBmb3JtIG9uIHRoZSBwYWdlKS4KICB2YXIgcmVjYXB0Y2hhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImctcmVjYXB0Y2hhIik7CiAgZm9yICh2YXIgaSBpbiByZWNhcHRjaGFzKSB7CiAgICAvLyBTZXQgdGhlIHJlY2FwdGNoYSBlbGVtZW50IElELCBzbyB0aGUgcmVjYXB0Y2hhIGNhbiBiZSBhcHBsaWVkIHRvIGVhY2ggZWxlbWVudC4KICAgIHZhciByZWNhcHRjaGFfaWQgPSAicmVjYXB0Y2hhXyIgKyBpOwogICAgcmVjYXB0Y2hhc1tpXS5pZCA9IHJlY2FwdGNoYV9pZDsKICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJlY2FwdGNoYV9pZCk7CiAgICBpZiAoZWwgIT0gbnVsbCkgewogICAgICB2YXIgc2l0ZWtleSA9IGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1zaXRla2V5Iik7CiAgICAgIHZhciBzdG9rZW4gPSBlbC5nZXRBdHRyaWJ1dGUoImRhdGEtc3Rva2VuIik7CiAgICAgIGdyZWNhcHRjaGEucmVuZGVyKHJlY2FwdGNoYV9pZCwgeyJzaXRla2V5IjpzaXRla2V5LCJzdG9rZW4iOnN0b2tlbn0pOwogICAgfQogIH0KfTsgIF9sb2FkX3NjcmlwdCgiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYXBpLmpzP29ubG9hZD1yZWNhcHRjaGFfY2FsbGJhY2smcmVuZGVyPWV4cGxpY2l0Iik7CiAgICB2YXIgX2Zvcm1fc2VyaWFsaXplID0gZnVuY3Rpb24oZm9ybSl7aWYoIWZvcm18fGZvcm0ubm9kZU5hbWUhPT0iRk9STSIpe3JldHVybiB9dmFyIGksaixxPVtdO2ZvcihpPTA7aTxmb3JtLmVsZW1lbnRzLmxlbmd0aDtpKyspe2lmKGZvcm0uZWxlbWVudHNbaV0ubmFtZT09PSIiKXtjb250aW51ZX1zd2l0Y2goZm9ybS5lbGVtZW50c1tpXS5ub2RlTmFtZSl7Y2FzZSJJTlBVVCI6c3dpdGNoKGZvcm0uZWxlbWVudHNbaV0udHlwZSl7Y2FzZSJ0ZWwiOnEucHVzaChmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLnByZXZpb3VzU2libGluZy5xdWVyeVNlbGVjdG9yKCdkaXYuaXRpX19zZWxlY3RlZC1kaWFsLWNvZGUnKS5pbm5lclRleHQpK2VuY29kZVVSSUNvbXBvbmVudCgiICIpK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLnZhbHVlKSk7YnJlYWs7Y2FzZSJ0ZXh0IjpjYXNlIm51bWJlciI6Y2FzZSJkYXRlIjpjYXNlInRpbWUiOmNhc2UiaGlkZGVuIjpjYXNlInBhc3N3b3JkIjpjYXNlImJ1dHRvbiI6Y2FzZSJyZXNldCI6Y2FzZSJzdWJtaXQiOnEucHVzaChmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLnZhbHVlKSk7YnJlYWs7Y2FzZSJjaGVja2JveCI6Y2FzZSJyYWRpbyI6aWYoZm9ybS5lbGVtZW50c1tpXS5jaGVja2VkKXtxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpfWJyZWFrO2Nhc2UiZmlsZSI6YnJlYWt9YnJlYWs7Y2FzZSJURVhUQVJFQSI6cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKTticmVhaztjYXNlIlNFTEVDVCI6c3dpdGNoKGZvcm0uZWxlbWVudHNbaV0udHlwZSl7Y2FzZSJzZWxlY3Qtb25lIjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrO2Nhc2Uic2VsZWN0LW11bHRpcGxlIjpmb3Ioaj0wO2o8Zm9ybS5lbGVtZW50c1tpXS5vcHRpb25zLmxlbmd0aDtqKyspe2lmKGZvcm0uZWxlbWVudHNbaV0ub3B0aW9uc1tqXS5zZWxlY3RlZCl7cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0ub3B0aW9uc1tqXS52YWx1ZSkpfX1icmVha31icmVhaztjYXNlIkJVVFRPTiI6c3dpdGNoKGZvcm0uZWxlbWVudHNbaV0udHlwZSl7Y2FzZSJyZXNldCI6Y2FzZSJzdWJtaXQiOmNhc2UiYnV0dG9uIjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrfWJyZWFrfX1yZXR1cm4gcS5qb2luKCImIil9OwogIHZhciBmb3JtX3N1Ym1pdCA9IGZ1bmN0aW9uKGUpIHsKICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgIGlmICh2YWxpZGF0ZV9mb3JtKCkpIHsKICAgICAgLy8gdXNlIHRoaXMgdHJpY2sgdG8gZ2V0IHRoZSBzdWJtaXQgYnV0dG9uICYgZGlzYWJsZSBpdCB1c2luZyBwbGFpbiBqYXZhc2NyaXB0CiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNfZm9ybV8yOF9zdWJtaXQnKS5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICAgIHZhciBzZXJpYWxpemVkID0gX2Zvcm1fc2VyaWFsaXplKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8yOF8nKSkucmVwbGFjZSgvJTBBL2csICdcXG4nKTsKICAgICAgdmFyIGVyciA9IGZvcm1fdG9fc3VibWl0LnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybV9lcnJvcicpOwogICAgICBlcnIgPyBlcnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlcnIpIDogZmFsc2U7CiAgICAgIF9sb2FkX3NjcmlwdCgnaHR0cHM6Ly9zaWx2aW5hYWxvZXJvLmFjdGl2ZWhvc3RlZC5jb20vcHJvYy5waHA/JyArIHNlcmlhbGl6ZWQgKyAnJmpzb25wPXRydWUnKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9OwogIGFkZEV2ZW50KGZvcm1fdG9fc3VibWl0LCAnc3VibWl0JywgZm9ybV9zdWJtaXQpOwp9KSgpOwoKPC9zY3JpcHQ+[/fusion_code][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]