{"id":11155,"date":"2025-11-25T11:14:07","date_gmt":"2025-11-25T11:14:07","guid":{"rendered":"https:\/\/www.liveconfluence.com\/11155-2\/"},"modified":"2025-11-25T11:17:22","modified_gmt":"2025-11-25T11:17:22","slug":"11155-2","status":"publish","type":"page","link":"https:\/\/www.liveconfluence.com\/es\/11155-2\/","title":{"rendered":""},"content":{"rendered":"<div class=\"wpb-content-wrapper\"><p>[vc_row kd_background_image_position=&#8221;vc_row-bg-position-top&#8221;][vc_column][vc_raw_html css=&#8221;&#8221; el_class=&#8221;custom-ac-form&#8221;]PHN0eWxlPkBpbXBvcnQgdXJsKGh0dHBzOi8vZm9udHMuYnVubnkubmV0L2Nzcz9mYW1pbHk9aWJtLXBsZXgtc2Fuczo0MDAsNjAwKTs8L3N0eWxlPgo8c3R5bGU+Ci5fZm9ybV9oaWRle2Rpc3BsYXk6bm9uZTt2aXNpYmlsaXR5OmhpZGRlbn0uX2Zvcm1fc2hvd3tkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6dmlzaWJsZX0jX2Zvcm1fMTlfIC5fc3VibWl0LnByb2Nlc3Npbmd7cG9zaXRpb246cmVsYXRpdmV9I19mb3JtXzE5XyAuX3N1Ym1pdC5wcm9jZXNzaW5nOjpiZWZvcmV7Y29udGVudDoiIjt3aWR0aDoxZW07aGVpZ2h0OjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7dG9wOjUwJTtsZWZ0OjUwJTtib3JkZXI6ZG91YmxlIDNweCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMUMyQzVBLCAjMUMyQzVBKSwgY29uaWMtZ3JhZGllbnQoIzFDMkM1QSwgI0ZGRkZGRik7YmFja2dyb3VuZC1vcmlnaW46Ym9yZGVyLWJveDtiYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3gsIGJvcmRlci1ib3g7YW5pbWF0aW9uOjEyMDBtcyBlYXNlIDBzIGluZmluaXRlIG5vcm1hbCBub25lIHJ1bm5pbmcgX3NwaW59I19mb3JtXzE5XyAuX3N1Ym1pdC5wcm9jZXNzaW5nOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfUBrZXlmcmFtZXMgX3NwaW57MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoOTBkZWcpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoNDUwZGVnKX19I19mb3JtXzE5XyAuX2Nsb3NlLWljb257Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1pbWFnZTp1cmwoImh0dHBzOi8vZDIyNmFqNGFvMXQ2MXEuY2xvdWRmcm9udC5uZXQvZXNma3lqaDF1X2Zvcm1zLWNsb3NlLWRhcmsucG5nIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxNC4ycHggMTQuMnB4O3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7dG9wOjExcHg7cmlnaHQ6OXB4O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxNi4ycHg7aGVpZ2h0OjE2LjJweH0jX2Zvcm1fMTlfIC5fY2xvc2UtaWNvbjpiZWZvcmV7cG9zaXRpb246cmVsYXRpdmV9I19mb3JtXzE5XyAuX2Zvcm0tYm9keXttYXJnaW4tYm90dG9tOjMwcHh9I19mb3JtXzE5XyAuX2Zvcm0taW1hZ2UtbGVmdHt3aWR0aDoxNTBweDtmbG9hdDpsZWZ0fSNfZm9ybV8xOV8gLl9mb3JtLWNvbnRlbnQtcmlnaHR7bWFyZ2luLWxlZnQ6MTY0cHh9I19mb3JtXzE5XyAuX2Zvcm0tYnJhbmRpbmd7Y29sb3I6I2ZmZjtmb250LXNpemU6MTBweDtjbGVhcjpib3RoO3RleHQtYWxpZ246bGVmdDttYXJnaW4tdG9wOjMwcHg7Zm9udC13ZWlnaHQ6MTAwfSNfZm9ybV8xOV8gLl9mb3JtLWJyYW5kaW5nIC5fbG9nb3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEzMHB4O2hlaWdodDoxNHB4O21hcmdpbi10b3A6NnB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCJodHRwczovL2QyMjZhajRhbzF0NjFxLmNsb3VkZnJvbnQubmV0L2hoOXVqcWd2NV9hY2xvZ29fbGkucG5nIik7YmFja2dyb3VuZC1zaXplOjEzMHB4IGF1dG87YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fSNfZm9ybV8xOV8gLmZvcm0tc3Itb25seXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjFweDtwYWRkaW5nOjA7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO2NsaXA6cmVjdCgwLCAwLCAwLCAwKTtib3JkZXI6MH0jX2Zvcm1fMTlfIC5fZm9ybS1sYWJlbCwjX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50IC5fZm9ybS1sYWJlbHtmb250LXdlaWdodDpib2xkO21hcmdpbi1ib3R0b206NXB4O2Rpc3BsYXk6YmxvY2t9I19mb3JtXzE5Xy5fZGFyayAuX2Zvcm0tYnJhbmRpbmd7Y29sb3I6IzMzM30jX2Zvcm1fMTlfLl9kYXJrIC5fZm9ybS1icmFuZGluZyAuX2xvZ297YmFja2dyb3VuZC1pbWFnZTp1cmwoImh0dHBzOi8vZDIyNmFqNGFvMXQ2MXEuY2xvdWRmcm9udC5uZXQvamZ0cTJjOHNfYWNsb2dvX2RrLnBuZyIpfSNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnR7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbToxMHB4O2ZvbnQtc2l6ZTowO21heC13aWR0aDoxMDAlfSNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgKntmb250LXNpemU6MTRweH0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50Ll9jbGVhcntjbGVhcjpib3RoO3dpZHRoOjEwMCU7ZmxvYXQ6bm9uZX0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50Ll9jbGVhcjphZnRlcntjbGVhcjpsZWZ0fSNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgaW5wdXRbdHlwZT0idGV4dCJdLCNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgaW5wdXRbdHlwZT0iZGF0ZSJdLCNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgc2VsZWN0LCNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgdGV4dGFyZWE6bm90KC5nLXJlY2FwdGNoYS1yZXNwb25zZSl7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LWZhbWlseTppbmhlcml0fSNfZm9ybV8xOV8gLl9maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfSNfZm9ybV8xOV8gLl9pbmxpbmUtc3R5bGV7ZmxvYXQ6bGVmdH0jX2Zvcm1fMTlfIC5faW5saW5lLXN0eWxlIGlucHV0W3R5cGU9InRleHQiXXt3aWR0aDoxNTBweH0jX2Zvcm1fMTlfIC5faW5saW5lLXN0eWxlOm5vdCguX2NsZWFyKXttYXJnaW4tcmlnaHQ6MjBweH0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50IGltZy5fZm9ybS1pbWFnZXttYXgtd2lkdGg6MTAwJX0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50IC5fZm9ybS1maWVsZHNldHtib3JkZXI6MDtwYWRkaW5nOjAuMDFlbSAwIDAgMDttYXJnaW46MDttaW4td2lkdGg6MH0jX2Zvcm1fMTlfIC5fY2xlYXItZWxlbWVudHtjbGVhcjpsZWZ0fSNfZm9ybV8xOV8gLl9mdWxsX3dpZHRoe3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX2Zvcm1fZnVsbF9maWVsZHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToxMHB4fSNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGV4dCJdLl9oYXNfZXJyb3IsI19mb3JtXzE5XyB0ZXh0YXJlYS5faGFzX2Vycm9ye2JvcmRlcjojRjM3QzdCIDFweCBzb2xpZH0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9ImNoZWNrYm94Il0uX2hhc19lcnJvcntvdXRsaW5lOiNGMzdDN0IgMXB4IHNvbGlkfSNfZm9ybV8xOV8gLl9zaG93X2JlX2Vycm9ye2Zsb2F0OmxlZnR9I19mb3JtXzE5XyAuX2Vycm9ye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjE0cHg7ei1pbmRleDoxMDAwMDAwMX0jX2Zvcm1fMTlfIC5fZXJyb3IuX2Fib3Zle3BhZGRpbmctYm90dG9tOjRweDtib3R0b206MzlweDtyaWdodDowfSNfZm9ybV8xOV8gLl9lcnJvci5fYmVsb3d7cGFkZGluZy10b3A6OHB4O3RvcDoxMDAlO3JpZ2h0OjB9I19mb3JtXzE5XyAuX2Vycm9yLl9hYm92ZSAuX2Vycm9yLWFycm93e2JvdHRvbTotNHB4O3JpZ2h0OjE1cHg7Ym9yZGVyLWxlZnQ6OHB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo4cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDo4cHggc29saWQgI0ZGRERERH0jX2Zvcm1fMTlfIC5fZXJyb3IuX2JlbG93IC5fZXJyb3ItYXJyb3d7dG9wOjA7cmlnaHQ6MTVweDtib3JkZXItbGVmdDo4cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjhweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjhweCBzb2xpZCAjRkZEREREfSNfZm9ybV8xOV8gLl9lcnJvci1pbm5lcntwYWRkaW5nOjEycHggMTJweCAxMnB4IDM2cHg7YmFja2dyb3VuZC1jb2xvcjojRkZEREREO2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDhDMTYgMTIuNDE4MyAxMi40MTgzIDE2IDggMTZDMy41ODE3MiAxNiAwIDEyLjQxODMgMCA4QzAgMy41ODE3MiAzLjU4MTcyIDAgOCAwQzEyLjQxODMgMCAxNiAzLjU4MTcyIDE2IDhaTTkgM1Y5SDdWM0g5Wk05IDEzVjExSDdWMTNIOVonIGZpbGw9JyUyM0NBMDAwMCcvJTNFJTNDL3N2ZyUzRSIpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEycHggY2VudGVyO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtZmFtaWx5OmFyaWFsLCBzYW5zLXNlcmlmO2ZvbnQtd2VpZ2h0OjYwMDtsaW5lLWhlaWdodDoxNnB4O2NvbG9yOiMwMDA7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMzEsIDMzLCA0MSwgMC4yOTgyOTUpfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDozMTlweCl7I19mb3JtXzE5XyAuX2Vycm9yLWlubmVye3BhZGRpbmc6N3B4IDdweCA3cHggMjVweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxMnB4O2JhY2tncm91bmQtcG9zaXRpb246NHB4IGNlbnRlcjttYXgtd2lkdGg6MTAwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfX0jX2Zvcm1fMTlfIC5fZXJyb3ItaW5uZXIuX2Zvcm1fZXJyb3J7bWFyZ2luLWJvdHRvbTo1cHg7dGV4dC1hbGlnbjpsZWZ0fSNfZm9ybV8xOV8gLl9idXR0b24td3JhcHBlciAuX2Vycm9yLWlubmVyLl9mb3JtX2Vycm9ye3Bvc2l0aW9uOnN0YXRpY30jX2Zvcm1fMTlfIC5fZXJyb3ItaW5uZXIuX25vX2Fycm93e21hcmdpbi1ib3R0b206MTBweH0jX2Zvcm1fMTlfIC5fZXJyb3ItYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDtoZWlnaHQ6MH0jX2Zvcm1fMTlfIC5fZXJyb3ItaHRtbHttYXJnaW4tYm90dG9tOjEwcHh9LnBpa2Etc2luZ2xle3otaW5kZXg6MTAwMDAwMDEgIWltcG9ydGFudH0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9InRleHQiXS5kYXRldGltZV9kYXRle3dpZHRoOjY5JTtkaXNwbGF5OmlubGluZX0jX2Zvcm1fMTlfIHNlbGVjdC5kYXRldGltZV90aW1le3dpZHRoOjI5JTtkaXNwbGF5OmlubGluZTtoZWlnaHQ6MzJweH0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9ImRhdGUiXS5kYXRldGltZV9kYXRle3dpZHRoOjY5JTtkaXNwbGF5OmlubGluZS1mbGV4fSNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGltZSJdLmRhdGV0aW1lX3RpbWV7d2lkdGg6MjklO2Rpc3BsYXk6aW5saW5lLWZsZXh9QG1lZGlhIChtaW4td2lkdGg6MzIwcHgpIGFuZCAobWF4LXdpZHRoOjY2N3B4KXs6Oi13ZWJraXQtc2Nyb2xsYmFye2Rpc3BsYXk6bm9uZX0jX2Zvcm1fMTlfICp7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc2l6ZToxZW19I19mb3JtXzE5XyAuX2Zvcm0tY29udGVudHttYXJnaW46MDt3aWR0aDoxMDAlfSNfZm9ybV8xOV8gLl9mb3JtLWlubmVye2Rpc3BsYXk6YmxvY2s7bWluLXdpZHRoOjEwMCV9I19mb3JtXzE5XyAuX2Zvcm0tdGl0bGUsI19mb3JtXzE5XyAuX2lubGluZS1zdHlsZXttYXJnaW4tdG9wOjA7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MH0jX2Zvcm1fMTlfIC5fZm9ybS10aXRsZXtmb250LXNpemU6MS4yZW19I19mb3JtXzE5XyAuX2Zvcm1fZWxlbWVudHttYXJnaW46MCAwIDIwcHg7cGFkZGluZzowO3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX2Zvcm0tZWxlbWVudCwjX2Zvcm1fMTlfIC5faW5saW5lLXN0eWxlLCNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGV4dCJdLCNfZm9ybV8xOV8gbGFiZWwsI19mb3JtXzE5XyBwLCNfZm9ybV8xOV8gdGV4dGFyZWE6bm90KC5nLXJlY2FwdGNoYS1yZXNwb25zZSl7ZmxvYXQ6bm9uZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX3Jvdy5fY2hlY2tib3gtcmFkaW8gbGFiZWx7ZGlzcGxheTppbmxpbmV9I19mb3JtXzE5XyAuX3JvdywjX2Zvcm1fMTlfIHAsI19mb3JtXzE5XyBsYWJlbHttYXJnaW4tYm90dG9tOjAuN2VtO3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX3JvdyBpbnB1dFt0eXBlPSJjaGVja2JveCJdLCNfZm9ybV8xOV8gLl9yb3cgaW5wdXRbdHlwZT0icmFkaW8iXXttYXJnaW46MCAhaW1wb3J0YW50O3ZlcnRpY2FsLWFsaWduOm1pZGRsZSAhaW1wb3J0YW50fSNfZm9ybV8xOV8gLl9yb3cgaW5wdXRbdHlwZT0iY2hlY2tib3giXStzcGFuIGxhYmVse2Rpc3BsYXk6aW5saW5lfSNfZm9ybV8xOV8gLl9yb3cgc3BhbiBsYWJlbHttYXJnaW46MCAhaW1wb3J0YW50O3dpZHRoOmluaXRpYWwgIWltcG9ydGFudDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUgIWltcG9ydGFudH0jX2Zvcm1fMTlfIC5fZm9ybS1pbWFnZXttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0byAhaW1wb3J0YW50fSNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGV4dCJde3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxLjNlbTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9InJhZGlvIl0sI19mb3JtXzE5XyBpbnB1dFt0eXBlPSJjaGVja2JveCJde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEuM2VtO2hlaWdodDoxLjNlbTtmb250LXNpemU6MWVtO21hcmdpbjowIDAuM2VtIDAgMDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0jX2Zvcm1fMTlfIGJ1dHRvblt0eXBlPSJzdWJtaXQiXXtwYWRkaW5nOjIwcHg7Zm9udC1zaXplOjEuNWVtfSNfZm9ybV8xOV8gLl9pbmxpbmUtc3R5bGV7bWFyZ2luOjIwcHggMCAwICFpbXBvcnRhbnR9I19mb3JtXzE5XyAuX2lubGluZS1zdHlsZSBpbnB1dFt0eXBlPSJ0ZXh0Il17d2lkdGg6MTAwJX19I19mb3JtXzE5XyAuc21zX2NvbnNlbnRfY2hlY2tib3h7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nOjIwcHggMH0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCBpbnB1dFt0eXBlPSJjaGVja2JveCJde2Zsb2F0OmxlZnQ7bWFyZ2luOjVweCAxMHB4IDEwcHggMH0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCAuc21zX2NvbnNlbnRfbWVzc2FnZXtkaXNwbGF5OmlubGluZTtmbG9hdDpsZWZ0O3RleHQtYWxpZ246bGVmdDttYXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzdEODc5OX0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCAuc21zX2NvbnNlbnRfbWVzc2FnZS5zbXNfY29uc2VudF9taW5pe3dpZHRoOjkwJX0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCAuX2Vycm9yLl9hYm92ZXtyaWdodDphdXRvO2JvdHRvbTowfSNfZm9ybV8xOV8gLnNtc19jb25zZW50X2NoZWNrYm94IC5fZXJyb3IuX2Fib3ZlIC5fZXJyb3ItYXJyb3d7cmlnaHQ6YXV0bztsZWZ0OjVweH1AbWVkaWEgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpeyNfZm9ybV8xOV8gLnNtc19jb25zZW50X2NoZWNrYm94IC5fZXJyb3IuX2Fib3Zle3RvcDotMzBweDtsZWZ0OjA7Ym90dG9tOmF1dG99fSNfZm9ybV8xOV8gLmZpZWxkLXJlcXVpcmVke2NvbG9yOiNGRjAwMDB9I19mb3JtXzE5XyAuX3Nob3dfYmVfZXJyb3J7bWluLXdpZHRoOjEwMCV9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0sI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWNvbnRlbnR7Zm9udC1mYW1pbHk6IklCTSBQbGV4IFNhbnMiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZ9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9yb3cgc3Bhbjpub3QoLmZpZWxkLXJlcXVpcmVkKSwjX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX3JvdyBsYWJlbHtmb250LWZhbWlseToiSUJNIFBsZXggU2FucyIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42ZW19I19mb3JtXzE5X19pbmxpbmVmb3JtIGlucHV0W3R5cGU9InRleHQiXSwjX2Zvcm1fMTlfX2lubGluZWZvcm0gaW5wdXRbdHlwZT0iZGF0ZSJdLCNfZm9ybV8xOV9faW5saW5lZm9ybSBpbnB1dFt0eXBlPSJ0ZWwiXSwjX2Zvcm1fMTlfX2lubGluZWZvcm0gc2VsZWN0LCNfZm9ybV8xOV9faW5saW5lZm9ybSB0ZXh0YXJlYTpub3QoLmctcmVjYXB0Y2hhLXJlc3BvbnNlKXtmb250LWZhbWlseToiSUJNIFBsZXggU2FucyIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7Zm9udC1jb2xvcjojMDAwMDAwO2xpbmUtaGVpZ2h0OjEuNmVtfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5faHRtbC1jb2RlICo6bm90KGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpLCNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5zbXNfY29uc2VudF9tZXNzYWdlLCNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS10aGFuay15b3V7Zm9udC1mYW1pbHk6IklCTSBQbGV4IFNhbnMiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZ9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWxhYmVsLCNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1lbWFpbGlkZW50aWZpZXIsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWNoZWNrYm94LW9wdGlvbi1sYWJlbHtmb250LWZhbWlseToiSUJNIFBsZXggU2FucyIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS42ZW19I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDEsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDIsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDMsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDQsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDUsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDYsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLXRpdGxle2ZvbnQtc2l6ZToyMnB4O2xpbmUtaGVpZ2h0Om5vcm1hbDtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTowO2Rpc3BsYXk6YmxvY2t9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWJyYW5kaW5ne2ZvbnQtZmFtaWx5OiJJQk0gUGxleCBTYW5zIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjEwMDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWRlY29yYXRpb246bm9uZX0jX2Zvcm1fMTlfOmJlZm9yZSwjX2Zvcm1fMTlfOmFmdGVye2NvbnRlbnQ6IiAiO2Rpc3BsYXk6dGFibGV9I19mb3JtXzE5XzphZnRlcntjbGVhcjpib3RofSNfZm9ybV8xOV8uX2lubGluZS1zdHlsZXt3aWR0aDphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrfSNfZm9ybV8xOV8uX2lubGluZS1zdHlsZSBpbnB1dFt0eXBlPSJ0ZXh0Il0sI19mb3JtXzE5Xy5faW5saW5lLXN0eWxlIGlucHV0W3R5cGU9ImRhdGUiXXtwYWRkaW5nOjEwcHggMTJweH0jX2Zvcm1fMTlfLl9pbmxpbmUtc3R5bGUgYnV0dG9uLl9pbmxpbmUtc3R5bGV7cG9zaXRpb246cmVsYXRpdmU7dG9wOjI3cHh9I19mb3JtXzE5Xy5faW5saW5lLXN0eWxlIHB7bWFyZ2luOjB9I19mb3JtXzE5Xy5faW5saW5lLXN0eWxlIC5fYnV0dG9uLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjE2cHggMTIuNXB4IDAgMjBweH0jX2Zvcm1fMTlfIC5fZm9ybS10aGFuay15b3V7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowO3JpZ2h0OjA7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE4cHh9I19mb3JtXzE5XyAuX2Zvcm0tcGMtY29uZmlybWF0aW9uIC5fc3VibWl0e21hcmdpbi10b3A6MTZweH1AbWVkaWEgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpeyNfZm9ybV8xOV8uX2lubGluZS1mb3JtLl9pbmxpbmUtc3R5bGUgLl9pbmxpbmUtc3R5bGUuX2J1dHRvbi13cmFwcGVye21hcmdpbi10b3A6MjBweCAhaW1wb3J0YW50O21hcmdpbi1sZWZ0OjAgIWltcG9ydGFudH19I19mb3JtXzE5XyAuaXRpe3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuaXRpLml0aS0tYWxsb3ctZHJvcGRvd24uaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGV7d2lkdGg6MTAwJX0jX2Zvcm1fMTlfIC5pdGkgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6Izk3OTc5NyAxcHggc29saWQ7Ym9yZGVyLXJhZGl1czo0cHh9I19mb3JtXzE5XyAuaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGUgLml0aV9fc2VsZWN0ZWQtZmxhZ3tiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7Ym9yZGVyLXJhZGl1czo0cHh9I19mb3JtXzE5XyAuaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGUgLml0aV9fc2VsZWN0ZWQtZmxhZzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNSl9I19mb3JtXzE5XyAuaXRpX19jb3VudHJ5LWxpc3R7Ym9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo0cHg7bWluLXdpZHRoOjQ2MHB4fSNfZm9ybV8xOV8gLml0aV9fY291bnRyeS1saXN0LS1kcm9wdXB7bWFyZ2luLWJvdHRvbTo0cHh9I19mb3JtXzE5XyAucGhvbmUtZXJyb3ItaGlkZGVue2Rpc3BsYXk6bm9uZX0jX2Zvcm1fMTlfIC5waG9uZS1lcnJvcntjb2xvcjojRTQwRTQ5fSNfZm9ybV8xOV8gLnBob25lLWlucHV0LWVycm9ye2JvcmRlcjoxcHggc29saWQgI0U0MEU0OSAhaW1wb3J0YW50fSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgZmllbGRzZXR7bWFyZ2luOjA7bWFyZ2luLWJvdHRvbToxLjE0Mjg1NzE0MjllbTtib3JkZXI6bm9uZTtwYWRkaW5nOjB9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWNvbnRlbnQgLl9mb3JtLWxpc3Qtc3Vic2NyaXB0aW9ucy1maWVsZCBmaWVsZHNldDpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIGxlZ2VuZHttYXJnaW4tYm90dG9tOjEuMTQyODU3MTQyOWVtfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgbGFiZWx7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWFyZ2luLWJvdHRvbTowLjg1NzE0Mjg1NzFlbX0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIGxhYmVsOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgaW5wdXR7bWFyZ2luOjA7bWFyZ2luLXJpZ2h0OjhweH0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIC5fZm9ybS1jaGVja2JveC1vcHRpb24tbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDo0MDA7bWFyZ2luLXRvcDotNHB4fSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgLl9mb3JtLWNoZWNrYm94LW9wdGlvbi1sYWJlbC13aXRoLWRlc2NyaXB0aW9ue2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi10b3A6LTRweH0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIC5fZm9ybS1jaGVja2JveC1vcHRpb24tZGVzY3JpcHRpb257bWFyZ2luOjA7Zm9udC1zaXplOjAuODU3MTQyODU3MWVtfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgLl9mb3JtLXN1YnNjcmlwdGlvbnMtdW5zdWJzY3JpYmUtYWxsLWRlc2NyaXB0aW9ue2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW4tdG9wOi0ycHh9PC9zdHlsZT4KPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249Imh0dHBzOi8vZm9ydGl1c2NhcDY0OTM3LmFjdGl2ZWhvc3RlZC5jb20vcHJvYy5waHAiIGlkPSJfZm9ybV8xOV8iIGNsYXNzPSJfZm9ybSBfZm9ybV8xOSBfaW5saW5lLWZvcm0gIF9kYXJrIiBub3ZhbGlkYXRlPSIiIGRhdGEtc3R5bGVzLXZlcnNpb249IjUiPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InUiIHZhbHVlPSIxOSI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZiIgdmFsdWU9IjE5Ij4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzIj4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjIiB2YWx1ZT0iMCI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibSIgdmFsdWU9IjAiPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InN1YiI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idiIgdmFsdWU9IjIiPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9yIiB2YWx1ZT0iN2YzMDBlM2YtMzg2OC00YzY3LWIwYTUtYmZkMTU2N2RiYjc1Ij4KICA8ZGl2IGNsYXNzPSJfZm9ybS1jb250ZW50Ij4KCgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iX2Zvcm1fZWxlbWVudCBfeDQ4MjM0MjA3IHZjX2NvbHVtbl9jb250YWluZXIgdmNfY29sLXNtLTUiPgogICAgICA8L2xhYmVsPgogICAgICA8ZGl2IGNsYXNzPSJfZmllbGQtd3JhcHBlciI+CiAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJmdWxsbmFtZSIgbmFtZT0iZnVsbG5hbWUiIHBsYWNlaG9sZGVyPSJTdSBub21icmUqIiByZXF1aXJlZD0iIj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Il9mb3JtX2VsZW1lbnQgX3g4NzkzMTMzMSB2Y19jb2x1bW5fY29udGFpbmVyIHZjX2NvbC1zbS01Ij4KICAgIDxkaXYgY2xhc3M9Il9maWVsZC13cmFwcGVyIj4KICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJlbWFpbCIgbmFtZT0iZW1haWwiIHBsYWNlaG9sZGVyPSJJbnRyb2R1emNhIHN1IGNvcnJlbyBlbGVjdHLDs25pY28qIiByZXF1aXJlZD0iIj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9Il9idXR0b24td3JhcHBlciB2Y19jb2x1bW5fY29udGFpbmVyIHZjX2NvbC1zbS0yIj4KICAgIDxidXR0b24gaWQ9Il9mb3JtXzE5X3N1Ym1pdCIgY2xhc3M9Il9zdWJtaXQiIHR5cGU9InN1Ym1pdCI+CiBSZWdpc3RyYXJzZQogICAgPC9idXR0b24+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iX2NsZWFyLWVsZW1lbnQiPgogIDwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iX2Zvcm0tdGhhbmsteW91IiBzdHlsZT0iZGlzcGxheTpub25lOyI+CjwvZGl2Pgo8L2Zvcm0+PHNjcmlwdD4Kd2luZG93LmNmaWVsZHMgPSBbXTsKd2luZG93Ll9zaG93X3RoYW5rX3lvdSA9IGZ1bmN0aW9uKGlkLCBtZXNzYWdlLCB0cmFja2NtcF91cmwsIGVtYWlsKSB7CiAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8nICsgaWQgKyAnXycpLCB0aGFua195b3UgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS10aGFuay15b3UnKTsKICAgIGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLWNvbnRlbnQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgdGhhbmtfeW91LmlubmVySFRNTCA9IG1lc3NhZ2U7CiAgICB0aGFua195b3Uuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICBjb25zdCB2Z29BbGlhcyA9IHR5cGVvZiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXMgPT09ICd1bmRlZmluZWQnID8gJ3ZnbycgOiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXM7CiAgICB2YXIgdmlzaXRvck9iamVjdCA9IHdpbmRvd1t2Z29BbGlhc107CiAgICBpZiAoZW1haWwgJiYgdHlwZW9mIHZpc2l0b3JPYmplY3QgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgdmlzaXRvck9iamVjdCgnc2V0RW1haWwnLCBlbWFpbCk7CiAgICAgICAgdmlzaXRvck9iamVjdCgndXBkYXRlJyk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZih0cmFja2NtcF91cmwpICE9ICd1bmRlZmluZWQnICYmIHRyYWNrY21wX3VybCkgewogICAgICAgIC8vIFNpdGUgdHJhY2tpbmcgVVJMIHRvIHVzZSBhZnRlciBpbmxpbmUgZm9ybSBzdWJtaXNzaW9uLgogICAgICAgIF9sb2FkX3NjcmlwdCh0cmFja2NtcF91cmwpOwogICAgfQogICAgaWYgKHR5cGVvZiB3aW5kb3cuX2Zvcm1fY2FsbGJhY2sgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuX2Zvcm1fY2FsbGJhY2soaWQpOwogICAgdGhhbmtfeW91LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTsKICAgIHRoYW5rX3lvdS5mb2N1cygpOwp9Owp3aW5kb3cuX3Nob3dfdW5zdWJzY3JpYmUgPSBmdW5jdGlvbihpZCwgbWVzc2FnZSwgdHJhY2tjbXBfdXJsLCBlbWFpbCkgewogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX2Zvcm1fJyArIGlkICsgJ18nKSwgdW5zdWIgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS10aGFuay15b3UnKTsKICAgIHZhciBicmFuZGluZyA9IGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLWJyYW5kaW5nJyk7CiAgICBpZiAoYnJhbmRpbmcpIHsKICAgICAgICBicmFuZGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQogICAgZm9ybS5xdWVyeVNlbGVjdG9yKCcuX2Zvcm0tY29udGVudCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB1bnN1Yi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIGZvcm0uaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsIG1lc3NhZ2UpCiAgICBjb25zdCB2Z29BbGlhcyA9IHR5cGVvZiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXMgPT09ICd1bmRlZmluZWQnID8gJ3ZnbycgOiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXM7CiAgICB2YXIgdmlzaXRvck9iamVjdCA9IHdpbmRvd1t2Z29BbGlhc107CiAgICBpZiAoZW1haWwgJiYgdHlwZW9mIHZpc2l0b3JPYmplY3QgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgdmlzaXRvck9iamVjdCgnc2V0RW1haWwnLCBlbWFpbCk7CiAgICAgICAgdmlzaXRvck9iamVjdCgndXBkYXRlJyk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZih0cmFja2NtcF91cmwpICE9ICd1bmRlZmluZWQnICYmIHRyYWNrY21wX3VybCkgewogICAgICAgIC8vIFNpdGUgdHJhY2tpbmcgVVJMIHRvIHVzZSBhZnRlciBpbmxpbmUgZm9ybSBzdWJtaXNzaW9uLgogICAgICAgIF9sb2FkX3NjcmlwdCh0cmFja2NtcF91cmwpOwogICAgfQogICAgaWYgKHR5cGVvZiB3aW5kb3cuX2Zvcm1fY2FsbGJhY2sgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuX2Zvcm1fY2FsbGJhY2soaWQpOwp9Owp3aW5kb3cuX3Nob3dfZXJyb3IgPSBmdW5jdGlvbihpZCwgbWVzc2FnZSwgaHRtbCkgewogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX2Zvcm1fJyArIGlkICsgJ18nKSwKICAgICAgICBlcnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKICAgICAgICBidXR0b24gPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPSJzdWJtaXQiXScpLAogICAgICAgIG9sZF9lcnJvciA9IGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtX2Vycm9yJyk7CiAgICBpZiAob2xkX2Vycm9yKSBvbGRfZXJyb3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRfZXJyb3IpOwogICAgZXJyLmlubmVySFRNTCA9IG1lc3NhZ2U7CiAgICBlcnIuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lciBfZm9ybV9lcnJvciBfbm9fYXJyb3cnOwogICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gJ19mb3JtLWlubmVyIF9zaG93X2JlX2Vycm9yJzsKICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoZXJyKTsKICAgIGJ1dHRvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLCBidXR0b24pOwogICAgdmFyIHN1Ym1pdEJ1dHRvbiA9IGZvcm0ucXVlcnlTZWxlY3RvcignW2lkXj0iX2Zvcm0iXVtpZCQ9Il9zdWJtaXQiXScpOwogICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICBzdWJtaXRCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgncHJvY2Vzc2luZycpOwogICAgaWYgKGh0bWwpIHsKICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICdfZXJyb3ItaHRtbCc7CiAgICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgZXJyLmFwcGVuZENoaWxkKGRpdik7CiAgICB9Cn07CndpbmRvdy5fc2hvd19wY19jb25maXJtYXRpb24gPSBmdW5jdGlvbihpZCwgaGVhZGVyLCBkZXRhaWwsIHNob3csIGVtYWlsKSB7CiAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8nICsgaWQgKyAnXycpLCBwY19jb25maXJtYXRpb24gPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS1wYy1jb25maXJtYXRpb24nKTsKICAgIGlmIChwY19jb25maXJtYXRpb24uc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7CiAgICAgICAgZm9ybS5xdWVyeVNlbGVjdG9yKCcuX2Zvcm0tY29udGVudCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgcGNfY29uZmlybWF0aW9uLmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPSdfZm9ybS10aXRsZSc+IiArIGhlYWRlciArICI8L2Rpdj4iICsgIjxwPiIgKyBkZXRhaWwgKyAiPC9wPiIgKwogICAgICAgICI8YnV0dG9uIGNsYXNzPSdfc3VibWl0JyBpZD0naGlkZUJ1dHRvbic+TWFuYWdlIHByZWZlcmVuY2VzPC9idXR0b24+IjsKICAgICAgICBwY19jb25maXJtYXRpb24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgdmFyIG1wID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT0ibXAiXScpOwogICAgICAgIG1wLnZhbHVlID0gJzAnOwogICAgfSBlbHNlIHsKICAgICAgICBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS1jb250ZW50Jykuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOwogICAgICAgIHBjX2NvbmZpcm1hdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQoKICAgIHZhciBoaWRlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hpZGVCdXR0b24nKTsKICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lciB0byB0aGUgYnV0dG9uCiAgICBoaWRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHN1Ym1pdEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNfZm9ybV8xOV9zdWJtaXQnKTsKICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICBzdWJtaXRCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgncHJvY2Vzc2luZycpOwogICAgICAgIHZhciBtcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9Im1wIl0nKTsKICAgICAgICBtcC52YWx1ZSA9ICcxJzsKICAgICAgICBjb25zdCBjYWNoZUJ1c3RlciA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpOwogICAgICAgIGNhY2hlQnVzdGVyLnNlYXJjaFBhcmFtcy5zZXQoJ3YnLCBuZXcgRGF0ZSgpLmdldFRpbWUoKSk7CiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBjYWNoZUJ1c3Rlci50b1N0cmluZygpOwogICAgfSk7CgogICAgY29uc3QgdmdvQWxpYXMgPSB0eXBlb2YgdmlzaXRvckdsb2JhbE9iamVjdEFsaWFzID09PSAndW5kZWZpbmVkJyA\/ICd2Z28nIDogdmlzaXRvckdsb2JhbE9iamVjdEFsaWFzOwogICAgdmFyIHZpc2l0b3JPYmplY3QgPSB3aW5kb3dbdmdvQWxpYXNdOwogICAgaWYgKGVtYWlsICYmIHR5cGVvZiB2aXNpdG9yT2JqZWN0ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHZpc2l0b3JPYmplY3QoJ3NldEVtYWlsJywgZW1haWwpOwogICAgICAgIHZpc2l0b3JPYmplY3QoJ3VwZGF0ZScpOwogICAgfSBlbHNlIGlmICh0eXBlb2YodHJhY2tjbXBfdXJsKSAhPSAndW5kZWZpbmVkJyAmJiB0cmFja2NtcF91cmwpIHsKICAgICAgICAvLyBTaXRlIHRyYWNraW5nIFVSTCB0byB1c2UgYWZ0ZXIgaW5saW5lIGZvcm0gc3VibWlzc2lvbi4KICAgICAgICBfbG9hZF9zY3JpcHQodHJhY2tjbXBfdXJsKTsKICAgIH0KICAgIGlmICh0eXBlb2Ygd2luZG93Ll9mb3JtX2NhbGxiYWNrICE9PSAndW5kZWZpbmVkJykgd2luZG93Ll9mb3JtX2NhbGxiYWNrKGlkKTsKfTsKd2luZG93Ll9sb2FkX3NjcmlwdCA9IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2ssIGlzU3VibWl0KSB7CiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKSwgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIHIgPSBmYWxzZTsKICAgIHZhciBzdWJtaXRCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjX2Zvcm1fMTlfc3VibWl0Jyk7CiAgICBzY3JpcHQuY2hhcnNldCA9ICd1dGYtOCc7CiAgICBzY3JpcHQuc3JjID0gdXJsOwogICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFyICYmICghdGhpcy5yZWFkeVN0YXRlIHx8IHRoaXMucmVhZHlTdGF0ZSA9PSAnY29tcGxldGUnKSkgewogICAgICAgICAgICAgICAgciA9IHRydWU7CiAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0KICAgIHNjcmlwdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGlzU3VibWl0KSB7CiAgICAgICAgICAgIGlmIChzY3JpcHQuc3JjLmxlbmd0aCA+IDEwMDAwKSB7CiAgICAgICAgICAgICAgICBfc2hvd19lcnJvcigiMTkiLCAiU29ycnksIHlvdXIgc3VibWlzc2lvbiBmYWlsZWQuIFBsZWFzZSBzaG9ydGVuIHlvdXIgcmVzcG9uc2VzIGFuZCB0cnkgYWdhaW4uIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfc2hvd19lcnJvcigiMTkiLCAiU29ycnksIHlvdXIgc3VibWlzc2lvbiBmYWlsZWQuIFBsZWFzZSB0cnkgYWdhaW4uIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdwcm9jZXNzaW5nJyk7CiAgICAgICAgfQogICAgfQoKICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKfTsKKGZ1bmN0aW9uKCkgewogICAgdmFyIGl0aTsKICAgIGlmICh3aW5kb3cubG9jYXRpb24uc2VhcmNoLnNlYXJjaCgiZXhjbHVkZWZvcm0iKSAhPT0gLTEpIHJldHVybiBmYWxzZTsKICAgIHZhciBnZXRDb29raWUgPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDsgKScgKyBuYW1lICsgJz0oW147XSspJykpOwogICAgICAgIHJldHVybiBtYXRjaCA\/IG1hdGNoWzJdIDogbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7CiAgICB9CiAgICB2YXIgc2V0Q29va2llID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHsKICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKICAgICAgICB2YXIgdGltZSA9IG5vdy5nZXRUaW1lKCk7CiAgICAgICAgdmFyIGV4cGlyZVRpbWUgPSB0aW1lICsgMTAwMCAqIDYwICogNjAgKiAyNCAqIDM2NTsKICAgICAgICBub3cuc2V0VGltZShleHBpcmVUaW1lKTsKICAgICAgICBkb2N1bWVudC5jb29raWUgPSBuYW1lICsgJz0nICsgdmFsdWUgKyAnOyBleHBpcmVzPScgKyBub3cgKyAnO3BhdGg9LzsgU2VjdXJlOyBTYW1lU2l0ZT1MYXg7JzsKICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCB2YWx1ZSk7CiAgICB9CiAgICB2YXIgYWRkRXZlbnQgPSBmdW5jdGlvbihlbGVtZW50LCBldmVudCwgZnVuYykgewogICAgICAgIGlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgb2xkRnVuYyA9IGVsZW1lbnRbJ29uJyArIGV2ZW50XTsKICAgICAgICAgICAgZWxlbWVudFsnb24nICsgZXZlbnRdID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBvbGRGdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgdmFyIF9yZW1vdmVkID0gZmFsc2U7CiAgICAgICAgdmFyIGZvcm1fdG9fc3VibWl0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19mb3JtXzE5XycpOwogICAgdmFyIGFsbElucHV0cyA9IGZvcm1fdG9fc3VibWl0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJyksIHRvb2x0aXBzID0gW10sIHN1Ym1pdHRlZCA9IGZhbHNlOwoKICAgIHZhciBnZXRVcmxQYXJhbSA9IGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnZW1haWwnKSB7CiAgICAgICAgICAgIHZhciBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgICAgICByZXR1cm4gcGFyYW1zLmdldChuYW1lKSB8fCBmYWxzZTsKICAgICAgICB9CiAgICAgICAgLy8gZW1haWwgaXMgYSBzcGVjaWFsIGNhc2UgYmVjYXVzZSBhIHBsdXMgaXMgdmFsaWQgaW4gdGhlIGVtYWlsIGFkZHJlc3MKICAgICAgICB2YXIgcVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CiAgICAgICAgaWYgKCFxU3RyaW5nKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSBxU3RyaW5nLnN1YnN0cigxKS5zcGxpdCgnJicpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tpXS5zcGxpdCgnPScpOwogICAgICAgICAgICBpZiAocGFyYW1ldGVyWzBdLnRvTG93ZXJDYXNlKCkgPT09ICdlbWFpbCcpIHsKICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJbMV0gPT09IHVuZGVmaW5lZCA\/IHRydWUgOiBkZWNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyWzFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHZhciBhY2N0RGF0ZUZvcm1hdCA9ICIlbS8lZC8lWSI7CiAgICB2YXIgZ2V0Tm9ybWFsaXplZERhdGUgPSBmdW5jdGlvbihkYXRlLCBhY2N0Rm9ybWF0KSB7CiAgICAgICAgdmFyIGRlY29kZWREYXRlID0gZGVjb2RlVVJJQ29tcG9uZW50KGRhdGUpOwogICAgICAgIGlmIChhY2N0Rm9ybWF0ICYmIGFjY3RGb3JtYXQubWF0Y2goLyglZHwlZSkuKiVtL2dpKSAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gZGVjb2RlZERhdGUucmVwbGFjZSgvKFxkezJ9KS4qKFxkezJ9KS4qKFxkezR9KS9nLCAnJDMtJDItJDEnKTsKICAgICAgICB9IGVsc2UgaWYgKERhdGUucGFyc2UoZGVjb2RlZERhdGUpKSB7CiAgICAgICAgICAgIHZhciBkYXRlT2JqID0gbmV3IERhdGUoZGVjb2RlZERhdGUpOwogICAgICAgICAgICB2YXIgeWVhciA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKTsKICAgICAgICAgICAgdmFyIG1vbnRoID0gZGF0ZU9iai5nZXRNb250aCgpICsgMTsKICAgICAgICAgICAgdmFyIGRheSA9IGRhdGVPYmouZ2V0RGF0ZSgpOwogICAgICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aCAgMTAgPyBgMCR7bW9udGh9YCA6IG1vbnRofS0ke2RheSAgMTAgPyBgMCR7ZGF5fWAgOiBkYXl9YDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCiAgICB2YXIgZ2V0Tm9ybWFsaXplZFRpbWUgPSBmdW5jdGlvbih0aW1lKSB7CiAgICAgICAgdmFyIGhvdXIsIG1pbnV0ZXM7CiAgICAgICAgdmFyIGRlY29kZWRUaW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHRpbWUpOwogICAgICAgIHZhciB0aW1lUGFydHMgPSBBcnJheS5mcm9tKGRlY29kZWRUaW1lLm1hdGNoQWxsKC8oXGR7MSwyfSk6KFxkezEsMn0pXFcqKFtBYVBwXVtNbV0pPy9nbSkpWzBdOwogICAgICAgIGlmICh0aW1lUGFydHNbM10pIHsgLy8gMTIgaG91ciBmb3JtYXQKICAgICAgICAgICAgdmFyIGlzUE0gPSB0aW1lUGFydHNbM10udG9Mb3dlckNhc2UoKSA9PT0gJ3BtJzsKICAgICAgICAgICAgaWYgKGlzUE0pIHsKICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludCh0aW1lUGFydHNbMV0pID09PSAxMiA\/ICcxMicgOiBgJHtwYXJzZUludCh0aW1lUGFydHNbMV0pICsgMTJ9YDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludCh0aW1lUGFydHNbMV0pID09PSAxMiA\/ICcwJyA6IHRpbWVQYXJ0c1sxXTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7IC8vIDI0IGhvdXIgZm9ybWF0CiAgICAgICAgICAgIGhvdXIgPSB0aW1lUGFydHNbMV07CiAgICAgICAgfQogICAgICAgIHZhciBub3JtYWxpemVkSG91ciA9IHBhcnNlSW50KGhvdXIpICAxMCA\/IGAwJHtwYXJzZUludChob3VyKX1gIDogaG91cjsKICAgICAgICB2YXIgbWludXRlcyA9IHRpbWVQYXJ0c1syXTsKICAgICAgICByZXR1cm4gYCR7bm9ybWFsaXplZEhvdXJ9OiR7bWludXRlc31gOwogICAgfTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSAgYWxsSW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlZ2V4U3RyID0gImZpZWxkXFxbKFxcZCspXFxdIjsKICAgICAgICB2YXIgcmVzdWx0cyA9IG5ldyBSZWdFeHAocmVnZXhTdHIpLmV4ZWMoYWxsSW5wdXRzW2ldLm5hbWUpOwogICAgICAgIGlmIChyZXN1bHRzICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICBhbGxJbnB1dHNbaV0uZGF0YXNldC5uYW1lID0gYWxsSW5wdXRzW2ldLm5hbWUubWF0Y2goL1xbdGltZVxdJC8pCiAgICAgICAgICAgICAgICA\/IGAke3dpbmRvdy5jZmllbGRzW3Jlc3VsdHNbMV1dfV90aW1lYAogICAgICAgICAgICAgICAgOiB3aW5kb3cuY2ZpZWxkc1tyZXN1bHRzWzFdXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhbGxJbnB1dHNbaV0uZGF0YXNldC5uYW1lID0gYWxsSW5wdXRzW2ldLm5hbWU7CiAgICAgICAgfQogICAgICAgIHZhciBmaWVsZFZhbCA9IGdldFVybFBhcmFtKGFsbElucHV0c1tpXS5kYXRhc2V0Lm5hbWUpOwoKICAgICAgICBpZiAoZmllbGRWYWwpIHsKICAgICAgICAgICAgaWYgKGFsbElucHV0c1tpXS5kYXRhc2V0LmF1dG9maWxsID09PSAiZmFsc2UiKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYWxsSW5wdXRzW2ldLnR5cGUgPT0gInJhZGlvIiB8fCBhbGxJbnB1dHNbaV0udHlwZSA9PSAiY2hlY2tib3giKSB7CiAgICAgICAgICAgICAgICBpZiAoYWxsSW5wdXRzW2ldLnZhbHVlID09IGZpZWxkVmFsKSB7CiAgICAgICAgICAgICAgICAgICAgYWxsSW5wdXRzW2ldLmNoZWNrZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGFsbElucHV0c1tpXS50eXBlID09ICJkYXRlIikgewogICAgICAgICAgICAgICAgYWxsSW5wdXRzW2ldLnZhbHVlID0gZ2V0Tm9ybWFsaXplZERhdGUoZmllbGRWYWwsIGFjY3REYXRlRm9ybWF0KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChhbGxJbnB1dHNbaV0udHlwZSA9PSAidGltZSIpIHsKICAgICAgICAgICAgICAgIGFsbElucHV0c1tpXS52YWx1ZSA9IGdldE5vcm1hbGl6ZWRUaW1lKGZpZWxkVmFsKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGFsbElucHV0c1tpXS52YWx1ZSA9IGZpZWxkVmFsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHZhciByZW1vdmVfdG9vbHRpcHMgPSBmdW5jdGlvbigpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSAgdG9vbHRpcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdG9vbHRpcHNbaV0udGlwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodG9vbHRpcHNbaV0udGlwKTsKICAgICAgICB9CiAgICAgICAgdG9vbHRpcHMgPSBbXTsKICAgIH07CiAgICB2YXIgcmVtb3ZlX3Rvb2x0aXAgPSBmdW5jdGlvbihlbGVtKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIHRvb2x0aXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICh0b29sdGlwc1tpXS5lbGVtID09PSBlbGVtKSB7CiAgICAgICAgICAgICAgICB0b29sdGlwc1tpXS50aXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0b29sdGlwc1tpXS50aXApOwogICAgICAgICAgICAgICAgdG9vbHRpcHMuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIHZhciBjcmVhdGVfdG9vbHRpcCA9IGZ1bmN0aW9uKGVsZW0sIHRleHQpIHsKICAgICAgICB2YXIgdG9vbHRpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAogICAgICAgICAgICBhcnJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAogICAgICAgICAgICBpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCBuZXdfdG9vbHRpcCA9IHt9OwogICAgICAgIHRvb2x0aXAuaWQgPSBgJHtlbGVtLmlkfS1lcnJvcmA7CiAgICAgICAgdG9vbHRpcC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnYWxlcnQnKQogICAgICAgIGlmIChlbGVtLnR5cGUgIT0gJ3JhZGlvJyAmJiAoZWxlbS50eXBlICE9ICdjaGVja2JveCcgfHwgZWxlbS5uYW1lID09PSAnc21zX2NvbnNlbnQnKSkgewogICAgICAgICAgICB0b29sdGlwLmNsYXNzTmFtZSA9ICdfZXJyb3InOwogICAgICAgICAgICBhcnJvdy5jbGFzc05hbWUgPSAnX2Vycm9yLWFycm93JzsKICAgICAgICAgICAgaW5uZXIuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lcic7CiAgICAgICAgICAgIGlubmVyLmlubmVySFRNTCA9IHRleHQ7CiAgICAgICAgICAgIHRvb2x0aXAuYXBwZW5kQ2hpbGQoYXJyb3cpOwogICAgICAgICAgICB0b29sdGlwLmFwcGVuZENoaWxkKGlubmVyKTsKICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRvb2x0aXApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRvb2x0aXAuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lciBfbm9fYXJyb3cnOwogICAgICAgICAgICB0b29sdGlwLmlubmVySFRNTCA9IHRleHQ7CiAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodG9vbHRpcCwgZWxlbSk7CiAgICAgICAgICAgIG5ld190b29sdGlwLm5vX2Fycm93ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgbmV3X3Rvb2x0aXAudGlwID0gdG9vbHRpcDsKICAgICAgICBuZXdfdG9vbHRpcC5lbGVtID0gZWxlbTsKICAgICAgICB0b29sdGlwcy5wdXNoKG5ld190b29sdGlwKTsKICAgICAgICByZXR1cm4gbmV3X3Rvb2x0aXA7CiAgICB9OwogICAgdmFyIHJlc2l6ZV90b29sdGlwID0gZnVuY3Rpb24odG9vbHRpcCkgewogICAgICAgIHZhciByZWN0ID0gdG9vbHRpcC5lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHZhciBkb2MgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCiAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uID0gcmVjdC50b3AgLSAoKHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wKSAgLSAoZG9jLmNsaWVudFRvcCB8fCAwKSk7CiAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uICA0MCkgewogICAgICAgICAgICB0b29sdGlwLnRpcC5jbGFzc05hbWUgPSB0b29sdGlwLnRpcC5jbGFzc05hbWUucmVwbGFjZSgvID8oX2Fib3ZlfF9iZWxvdykgPy9nLCAnJykgKyAnIF9iZWxvdyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdG9vbHRpcC50aXAuY2xhc3NOYW1lID0gdG9vbHRpcC50aXAuY2xhc3NOYW1lLnJlcGxhY2UoLyA\/KF9hYm92ZXxfYmVsb3cpID8vZywgJycpICsgJyBfYWJvdmUnOwogICAgICAgIH0KICAgIH07CiAgICB2YXIgcmVzaXplX3Rvb2x0aXBzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKF9yZW1vdmVkKSByZXR1cm47CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIHRvb2x0aXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICghdG9vbHRpcHNbaV0ubm9fYXJyb3cpIHJlc2l6ZV90b29sdGlwKHRvb2x0aXBzW2ldKTsKICAgICAgICB9CiAgICB9OwogICAgdmFyIHZhbGlkYXRlX2ZpZWxkID0gZnVuY3Rpb24oZWxlbSwgcmVtb3ZlKSB7CiAgICAgICAgdmFyIHRvb2x0aXAgPSBudWxsLCB2YWx1ZSA9IGVsZW0udmFsdWUsIG5vX2Vycm9yID0gdHJ1ZTsKICAgICAgICByZW1vdmUgPyByZW1vdmVfdG9vbHRpcChlbGVtKSA6IGZhbHNlOwogICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWludmFsaWQnKTsKICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpOwogICAgICAgIGlmIChlbGVtLnR5cGUgIT0gJ2NoZWNrYm94JykgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgaWYgKGVsZW0uZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpICE9PSBudWxsKSB7CiAgICAgICAgICAgIGlmIChlbGVtLnR5cGUgPT0gJ3JhZGlvJyB8fCAoZWxlbS50eXBlID09ICdjaGVja2JveCcgJiYgL2FueS8udGVzdChlbGVtLmNsYXNzTmFtZSkpKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbXMgPSBmb3JtX3RvX3N1Ym1pdC5lbGVtZW50c1tlbGVtLm5hbWVdOwogICAgICAgICAgICAgICAgaWYgKCEoZWxlbXMgaW5zdGFuY2VvZiBOb2RlTGlzdCB8fCBlbGVtcyBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uKSB8fCBlbGVtcy5sZW5ndGggPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgbm9fZXJyb3IgPSBlbGVtLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpICBlbGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbXNbaV0uY2hlY2tlZCkgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghbm9fZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIlBsZWFzZSBzZWxlY3QgYW4gb3B0aW9uLiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW0udHlwZSA9PSdjaGVja2JveCcpIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtcyA9IGZvcm1fdG9fc3VibWl0LmVsZW1lbnRzW2VsZW0ubmFtZV0sIGZvdW5kID0gZmFsc2UsIGVyciA9IFtdOwogICAgICAgICAgICAgICAgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIGVsZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1zW2ldLmdldEF0dHJpYnV0ZSgncmVxdWlyZWQnKSA9PT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiBlbGVtc1tpXSAhPT0gZWxlbSkgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1zW2ldLmNsYXNzTmFtZSA9IGVsZW1zW2ldLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVtc1tpXS5jaGVja2VkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1zW2ldLmNsYXNzTmFtZSA9IGVsZW1zW2ldLmNsYXNzTmFtZSArICcgX2hhc19lcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5wdXNoKCJDaGVja2luZyAlcyBpcyByZXF1aXJlZCIucmVwbGFjZSgiJXMiLCBlbGVtc1tpXS52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghbm9fZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgZXJyLmpvaW4oJyEtLSB3cG1sOmh0bWxfc2VsZl9jbG9zaW5nX3RhZyBici8gLS0+JykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW0udGFnTmFtZSA9PSAnU0VMRUNUJykgewogICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlmIChlbGVtLm11bHRpcGxlKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0ub3B0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbS5vcHRpb25zW2ldLnNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtLm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW0ub3B0aW9uc1tpXS5zZWxlY3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCFlbGVtLm9wdGlvbnNbaV0udmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChlbGVtLm9wdGlvbnNbaV0udmFsdWUubWF0Y2goL1xuL2cpKSkKICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcCA9IGNyZWF0ZV90b29sdGlwKGVsZW0sICJQbGVhc2Ugc2VsZWN0IGFuIG9wdGlvbi4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgewogICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZSArICcgX2hhc19lcnJvcic7CiAgICAgICAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgICAgICAgdG9vbHRpcCA9IGNyZWF0ZV90b29sdGlwKGVsZW0sICJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChub19lcnJvciAmJiBlbGVtLm5hbWUgPT0gJ2VtYWlsJykgewogICAgICAgICAgICBpZiAoIXZhbHVlLm1hdGNoKC9eW1wrX2EtejAtOS0nJj1dKyhcLltcK19hLXowLTktJ10rKSpAW2EtejAtOS1dKyhcLlthLXowLTktXSspKihcLlthLXpdezIsfSkkL2kpKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIkVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobm9fZXJyb3IgJiYgKGVsZW0uaWQgPT0gJ3Bob25lJykpIHsKICAgICAgICAgICAgaWYgKGVsZW0udmFsdWUudHJpbSgpICYmIHR5cGVvZiBpdGkgIT0gJ3VuZGVmaW5lZCcgJiYgIWl0aS5pc1ZhbGlkTnVtYmVyKCkpIHsKICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBjcmVhdGVfdG9vbHRpcChlbGVtLCAiRW50ZXIgYSB2YWxpZCBwaG9uZSBudW1iZXIuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG5vX2Vycm9yICYmIC9kYXRlX2ZpZWxkLy50ZXN0KGVsZW0uY2xhc3NOYW1lKSkgewogICAgICAgICAgICBpZiAoIXZhbHVlLm1hdGNoKC9eXGRcZFxkXGQtXGRcZC1cZFxkJC8pKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIkVudGVyIGEgdmFsaWQgZGF0ZS4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKG5vX2Vycm9yICYmIGVsZW0ubmFtZSA9PT0gJ3Ntc19jb25zZW50JykgewogICAgICAgICAgICBjb25zdCBwaG9uZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bob25lJyk7CiAgICAgICAgICAgIGNvbnN0IGNvbnNlbnRSZXF1aXJlZCA9IHBob25lSW5wdXQuYXR0cmlidXRlcy5yZXF1aXJlZCB8fCBwaG9uZUlucHV0LnZhbHVlLmxlbmd0aCA+IDA7CiAgICAgICAgICAgIGNvbnN0IHNob3dFcnJvciA9ICAoY29uc2VudFJlcXVpcmVkIHx8ICEhZWxlbS5hdHRyaWJ1dGVzLnJlcXVpcmVkKSAmJiAhZWxlbS5jaGVja2VkOwogICAgICAgICAgICBpZiAoc2hvd0Vycm9yKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIlBsZWFzZSBjaGVjayB0aGlzIGJveCB0byBjb250aW51ZSIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdG9vbHRpcCA\/IHJlc2l6ZV90b29sdGlwKHRvb2x0aXApIDogZmFsc2U7CiAgICAgICAgaWYgKCFub19lcnJvciAmJiBlbGVtLmhhc0F0dHJpYnV0ZSgnaWQnKSkgewogICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgJ3RydWUnKTsKICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBgJHtlbGVtLmlkfS1lcnJvcmApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbm9fZXJyb3I7CiAgICB9OwogICAgdmFyIG5lZWRzX3ZhbGlkYXRlID0gZnVuY3Rpb24oZWwpIHsKICAgICAgICBpZihlbC5nZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJykgIT09IG51bGwpewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYoKGVsLm5hbWUgPT09ICdlbWFpbCcgfHwgZWwuaWQgPT09ICdwaG9uZScgfHwgZWwuaWQgPT09ICdzbXNfY29uc2VudCcpICYmIGVsLnZhbHVlICE9PSAiIil7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHZhciB2YWxpZGF0ZV9mb3JtID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBlcnIgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCcuX2Zvcm1fZXJyb3InKSwgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgIGlmICghc3VibWl0dGVkKSB7CiAgICAgICAgICAgIHN1Ym1pdHRlZCA9IHRydWU7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhbGxJbnB1dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGFsbElucHV0c1tpXTsKICAgICAgICAgICAgICAgIGlmIChuZWVkc192YWxpZGF0ZShpbnB1dCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQudHlwZSA9PSAndGV4dCcgfHwgaW5wdXQudHlwZSA9PSAnbnVtYmVyJyB8fCBpbnB1dC50eXBlID09ICd0aW1lJyB8fCBpbnB1dC50eXBlID09ICd0ZWwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnYmx1cicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUudHJpbSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVfZmllbGQodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBhZGRFdmVudChpbnB1dCwgJ2lucHV0JywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC50eXBlID09ICdyYWRpbycgfHwgaW5wdXQudHlwZSA9PSAnY2hlY2tib3gnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbihlbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0RWxlbWVudHNBcnJheShuYW1lKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICBmb3JtX3RvX3N1Ym1pdC5lbGVtZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdmFsdWVdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGlvcyA9IGdldEVsZW1lbnRzQXJyYXkoZWwubmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhZGlvcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KHJhZGlvc1tpXSwgJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZChlbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pKGlucHV0KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnRhZ05hbWUgPT0gJ1NFTEVDVCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoaW5wdXQsICdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnR5cGUgPT0gJ3RleHRhcmVhJyl7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVtb3ZlX3Rvb2x0aXBzKCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFsbElucHV0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICB2YXIgZWxlbSA9IGFsbElucHV0c1tpXTsKICAgICAgICAgICAgaWYgKG5lZWRzX3ZhbGlkYXRlKGVsZW0pKSB7CiAgICAgICAgICAgICAgICBpZiAoZWxlbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJzZWxlY3QiKSB7CiAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IGVsZW0udmFsdWUudHJpbSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFsaWRhdGVfZmllbGQoZWxlbSkgPyB0cnVlIDogbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIW5vX2Vycm9yICYmIGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgICBpZiAoIW5vX2Vycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlRXJyb3IgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCcuX2hhc19lcnJvcjpub3QoW2Rpc2FibGVkXSknKTsKICAgICAgICAgICAgaWYgKGZpcnN0Rm9jdXNhYmxlRXJyb3IgJiYgdHlwZW9mIGZpcnN0Rm9jdXNhYmxlRXJyb3IuZm9jdXMgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgIGZpcnN0Rm9jdXNhYmxlRXJyb3IuZm9jdXMoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXNpemVfdG9vbHRpcHMoKTsKICAgICAgICByZXR1cm4gbm9fZXJyb3I7CiAgICB9OwogICAgYWRkRXZlbnQod2luZG93LCAncmVzaXplJywgcmVzaXplX3Rvb2x0aXBzKTsKICAgIGFkZEV2ZW50KHdpbmRvdywgJ3Njcm9sbCcsIHJlc2l6ZV90b29sdGlwcyk7CgogICAgdmFyIF9mb3JtX3NlcmlhbGl6ZSA9IGZ1bmN0aW9uKGZvcm0pe2lmKCFmb3JtfHxmb3JtLm5vZGVOYW1lIT09IkZPUk0iKXtyZXR1cm4gfXZhciBpLGoscT1bXTtmb3IoaT0wO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKXtpZihmb3JtLmVsZW1lbnRzW2ldLm5hbWU9PT0iIil7Y29udGludWV9c3dpdGNoKGZvcm0uZWxlbWVudHNbaV0ubm9kZU5hbWUpe2Nhc2UiSU5QVVQiOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2UidGVsIjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS5wcmV2aW91c1NpYmxpbmcucXVlcnlTZWxlY3RvcignZGl2Lml0aV9fc2VsZWN0ZWQtZGlhbC1jb2RlJykuaW5uZXJUZXh0KStlbmNvZGVVUklDb21wb25lbnQoIiAiKStlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrO2Nhc2UidGV4dCI6Y2FzZSJudW1iZXIiOmNhc2UiZGF0ZSI6Y2FzZSJ0aW1lIjpjYXNlImhpZGRlbiI6Y2FzZSJwYXNzd29yZCI6Y2FzZSJidXR0b24iOmNhc2UicmVzZXQiOmNhc2Uic3VibWl0IjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrO2Nhc2UiY2hlY2tib3giOmNhc2UicmFkaW8iOmlmKGZvcm0uZWxlbWVudHNbaV0uY2hlY2tlZCl7cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKX1icmVhaztjYXNlImZpbGUiOmJyZWFrfWJyZWFrO2Nhc2UiVEVYVEFSRUEiOnEucHVzaChmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLnZhbHVlKSk7YnJlYWs7Y2FzZSJTRUxFQ1QiOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2Uic2VsZWN0LW9uZSI6cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKTticmVhaztjYXNlInNlbGVjdC1tdWx0aXBsZSI6Zm9yKGo9MDtqPGZvcm0uZWxlbWVudHNbaV0ub3B0aW9ucy5sZW5ndGg7aisrKXtpZihmb3JtLmVsZW1lbnRzW2ldLm9wdGlvbnNbal0uc2VsZWN0ZWQpe3EucHVzaChmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLm9wdGlvbnNbal0udmFsdWUpKX19YnJlYWt9YnJlYWs7Y2FzZSJCVVRUT04iOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2UicmVzZXQiOmNhc2Uic3VibWl0IjpjYXNlImJ1dHRvbiI6cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKTticmVha31icmVha319cmV0dXJuIHEuam9pbigiJiIpfTsKCiAgICBjb25zdCBmb3JtU3VwcG9ydHNQb3N0ID0gZmFsc2U7CiAgICB2YXIgZm9ybV9zdWJtaXQgPSBmdW5jdGlvbihlKSB7CgogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICBpZiAodmFsaWRhdGVfZm9ybSgpKSB7CiAgICAgICAgICAgIGlmKGZvcm1fdG9fc3VibWl0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9InBob25lIl0nKSAmJiB0eXBlb2YgaXRpICE9ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgICBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSJwaG9uZSJdJykudmFsdWUgPSBpdGkuZ2V0TnVtYmVyKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gdXNlIHRoaXMgdHJpY2sgdG8gZ2V0IHRoZSBzdWJtaXQgYnV0dG9uICYgZGlzYWJsZSBpdCB1c2luZyBwbGFpbiBqYXZhc2NyaXB0CiAgICAgICAgICAgIHZhciBzdWJtaXRCdXR0b24gPSBlLnRhcmdldC5xdWVyeVNlbGVjdG9yKCcjX2Zvcm1fMTlfc3VibWl0Jyk7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdwcm9jZXNzaW5nJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBfZm9ybV9zZXJpYWxpemUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19mb3JtXzE5XycpKS5yZXBsYWNlKC8lMEEvZywgJ1xcbicpOwogICAgICAgICAgICB2YXIgZXJyID0gZm9ybV90b19zdWJtaXQucXVlcnlTZWxlY3RvcignLl9mb3JtX2Vycm9yJyk7CiAgICAgICAgICAgIGVyciA\/IGVyci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVycikgOiBmYWxzZTsKICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gc3VibWl0Rm9ybSgpIHsKICAgICAgICAgICAgICAgIHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZXJpYWxpemVkKTsKICAgICAgICAgICAgICAgIHNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ2hpZGVCdXR0b24nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gewogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIkFjY2VwdCI6ICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgYm9keTogZm9ybURhdGEsCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAiUE9TVCIKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgbGV0IHBhZ2VVcmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgICAgICAgICAgaWYgKHBhZ2VVcmxQYXJhbXMuaGFzKCd0JykpIHsKICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCZWFyZXIgJyArIHBhZ2VVcmxQYXJhbXMuZ2V0KCd0Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL2ZvcnRpdXNjYXA2NDkzNy5hY3RpdmVob3N0ZWQuY29tL3Byb2MucGhwP2pzb25wPXRydWUnLCByZXF1ZXN0KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmb3JtU3VwcG9ydHNQb3N0KSB7CiAgICAgICAgICAgICAgICBzdWJtaXRGb3JtKCkudGhlbigoZGF0YSkgPT4gewogICAgICAgICAgICAgICAgICAgIGV2YWwoZGF0YS5qcyk7CiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgX3Nob3dfZXJyb3IoIjE5IiwgIlNvcnJ5LCB5b3VyIHN1Ym1pc3Npb24gZmFpbGVkLiBQbGVhc2UgdHJ5IGFnYWluLiIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfbG9hZF9zY3JpcHQoJ2h0dHBzOi8vZm9ydGl1c2NhcDY0OTM3LmFjdGl2ZWhvc3RlZC5jb20vcHJvYy5waHA\/JyArIHNlcmlhbGl6ZWQgKyAnJmpzb25wPXRydWUnLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgYWRkRXZlbnQoZm9ybV90b19zdWJtaXQsICdzdWJtaXQnLCBmb3JtX3N1Ym1pdCk7Cn0pKCk7Cgo8L3NjcmlwdD4KCg==[\/vc_raw_html][\/vc_column][\/vc_row]<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>[vc_row kd_background_image_position=&#8221;vc_row-bg-position-top&#8221;][vc_column][vc_raw_html css=&#8221;&#8221; el_class=&#8221;custom-ac-form&#8221;]PHN0eWxlPkBpbXBvcnQgdXJsKGh0dHBzOi8vZm9udHMuYnVubnkubmV0L2Nzcz9mYW1pbHk9aWJtLXBsZXgtc2Fuczo0MDAsNjAwKTs8L3N0eWxlPgo8c3R5bGU+Ci5fZm9ybV9oaWRle2Rpc3BsYXk6bm9uZTt2aXNpYmlsaXR5OmhpZGRlbn0uX2Zvcm1fc2hvd3tkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6dmlzaWJsZX0jX2Zvcm1fMTlfIC5fc3VibWl0LnByb2Nlc3Npbmd7cG9zaXRpb246cmVsYXRpdmV9I19mb3JtXzE5XyAuX3N1Ym1pdC5wcm9jZXNzaW5nOjpiZWZvcmV7Y29udGVudDoiIjt3aWR0aDoxZW07aGVpZ2h0OjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7dG9wOjUwJTtsZWZ0OjUwJTtib3JkZXI6ZG91YmxlIDNweCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMUMyQzVBLCAjMUMyQzVBKSwgY29uaWMtZ3JhZGllbnQoIzFDMkM1QSwgI0ZGRkZGRik7YmFja2dyb3VuZC1vcmlnaW46Ym9yZGVyLWJveDtiYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3gsIGJvcmRlci1ib3g7YW5pbWF0aW9uOjEyMDBtcyBlYXNlIDBzIGluZmluaXRlIG5vcm1hbCBub25lIHJ1bm5pbmcgX3NwaW59I19mb3JtXzE5XyAuX3N1Ym1pdC5wcm9jZXNzaW5nOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfUBrZXlmcmFtZXMgX3NwaW57MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoOTBkZWcpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoNDUwZGVnKX19I19mb3JtXzE5XyAuX2Nsb3NlLWljb257Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1pbWFnZTp1cmwoImh0dHBzOi8vZDIyNmFqNGFvMXQ2MXEuY2xvdWRmcm9udC5uZXQvZXNma3lqaDF1X2Zvcm1zLWNsb3NlLWRhcmsucG5nIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxNC4ycHggMTQuMnB4O3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7dG9wOjExcHg7cmlnaHQ6OXB4O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxNi4ycHg7aGVpZ2h0OjE2LjJweH0jX2Zvcm1fMTlfIC5fY2xvc2UtaWNvbjpiZWZvcmV7cG9zaXRpb246cmVsYXRpdmV9I19mb3JtXzE5XyAuX2Zvcm0tYm9keXttYXJnaW4tYm90dG9tOjMwcHh9I19mb3JtXzE5XyAuX2Zvcm0taW1hZ2UtbGVmdHt3aWR0aDoxNTBweDtmbG9hdDpsZWZ0fSNfZm9ybV8xOV8gLl9mb3JtLWNvbnRlbnQtcmlnaHR7bWFyZ2luLWxlZnQ6MTY0cHh9I19mb3JtXzE5XyAuX2Zvcm0tYnJhbmRpbmd7Y29sb3I6I2ZmZjtmb250LXNpemU6MTBweDtjbGVhcjpib3RoO3RleHQtYWxpZ246bGVmdDttYXJnaW4tdG9wOjMwcHg7Zm9udC13ZWlnaHQ6MTAwfSNfZm9ybV8xOV8gLl9mb3JtLWJyYW5kaW5nIC5fbG9nb3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEzMHB4O2hlaWdodDoxNHB4O21hcmdpbi10b3A6NnB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCJodHRwczovL2QyMjZhajRhbzF0NjFxLmNsb3VkZnJvbnQubmV0L2hoOXVqcWd2NV9hY2xvZ29fbGkucG5nIik7YmFja2dyb3VuZC1zaXplOjEzMHB4IGF1dG87YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fSNfZm9ybV8xOV8gLmZvcm0tc3Itb25seXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjFweDtwYWRkaW5nOjA7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO2NsaXA6cmVjdCgwLCAwLCAwLCAwKTtib3JkZXI6MH0jX2Zvcm1fMTlfIC5fZm9ybS1sYWJlbCwjX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50IC5fZm9ybS1sYWJlbHtmb250LXdlaWdodDpib2xkO21hcmdpbi1ib3R0b206NXB4O2Rpc3BsYXk6YmxvY2t9I19mb3JtXzE5Xy5fZGFyayAuX2Zvcm0tYnJhbmRpbmd7Y29sb3I6IzMzM30jX2Zvcm1fMTlfLl9kYXJrIC5fZm9ybS1icmFuZGluZyAuX2xvZ297YmFja2dyb3VuZC1pbWFnZTp1cmwoImh0dHBzOi8vZDIyNmFqNGFvMXQ2MXEuY2xvdWRmcm9udC5uZXQvamZ0cTJjOHNfYWNsb2dvX2RrLnBuZyIpfSNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnR7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbToxMHB4O2ZvbnQtc2l6ZTowO21heC13aWR0aDoxMDAlfSNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgKntmb250LXNpemU6MTRweH0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50Ll9jbGVhcntjbGVhcjpib3RoO3dpZHRoOjEwMCU7ZmxvYXQ6bm9uZX0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50Ll9jbGVhcjphZnRlcntjbGVhcjpsZWZ0fSNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgaW5wdXRbdHlwZT0idGV4dCJdLCNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgaW5wdXRbdHlwZT0iZGF0ZSJdLCNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgc2VsZWN0LCNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgdGV4dGFyZWE6bm90KC5nLXJlY2FwdGNoYS1yZXNwb25zZSl7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LWZhbWlseTppbmhlcml0fSNfZm9ybV8xOV8gLl9maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfSNfZm9ybV8xOV8gLl9pbmxpbmUtc3R5bGV7ZmxvYXQ6bGVmdH0jX2Zvcm1fMTlfIC5faW5saW5lLXN0eWxlIGlucHV0W3R5cGU9InRleHQiXXt3aWR0aDoxNTBweH0jX2Zvcm1fMTlfIC5faW5saW5lLXN0eWxlOm5vdCguX2NsZWFyKXttYXJnaW4tcmlnaHQ6MjBweH0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50IGltZy5fZm9ybS1pbWFnZXttYXgtd2lkdGg6MTAwJX0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50IC5fZm9ybS1maWVsZHNldHtib3JkZXI6MDtwYWRkaW5nOjAuMDFlbSAwIDAgMDttYXJnaW46MDttaW4td2lkdGg6MH0jX2Zvcm1fMTlfIC5fY2xlYXItZWxlbWVudHtjbGVhcjpsZWZ0fSNfZm9ybV8xOV8gLl9mdWxsX3dpZHRoe3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX2Zvcm1fZnVsbF9maWVsZHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToxMHB4fSNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGV4dCJdLl9oYXNfZXJyb3IsI19mb3JtXzE5XyB0ZXh0YXJlYS5faGFzX2Vycm9ye2JvcmRlcjojRjM3QzdCIDFweCBzb2xpZH0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9ImNoZWNrYm94Il0uX2hhc19lcnJvcntvdXRsaW5lOiNGMzdDN0IgMXB4IHNvbGlkfSNfZm9ybV8xOV8gLl9zaG93X2JlX2Vycm9ye2Zsb2F0OmxlZnR9I19mb3JtXzE5XyAuX2Vycm9ye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjE0cHg7ei1pbmRleDoxMDAwMDAwMX0jX2Zvcm1fMTlfIC5fZXJyb3IuX2Fib3Zle3BhZGRpbmctYm90dG9tOjRweDtib3R0b206MzlweDtyaWdodDowfSNfZm9ybV8xOV8gLl9lcnJvci5fYmVsb3d7cGFkZGluZy10b3A6OHB4O3RvcDoxMDAlO3JpZ2h0OjB9I19mb3JtXzE5XyAuX2Vycm9yLl9hYm92ZSAuX2Vycm9yLWFycm93e2JvdHRvbTotNHB4O3JpZ2h0OjE1cHg7Ym9yZGVyLWxlZnQ6OHB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo4cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDo4cHggc29saWQgI0ZGRERERH0jX2Zvcm1fMTlfIC5fZXJyb3IuX2JlbG93IC5fZXJyb3ItYXJyb3d7dG9wOjA7cmlnaHQ6MTVweDtib3JkZXItbGVmdDo4cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjhweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjhweCBzb2xpZCAjRkZEREREfSNfZm9ybV8xOV8gLl9lcnJvci1pbm5lcntwYWRkaW5nOjEycHggMTJweCAxMnB4IDM2cHg7YmFja2dyb3VuZC1jb2xvcjojRkZEREREO2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDhDMTYgMTIuNDE4MyAxMi40MTgzIDE2IDggMTZDMy41ODE3MiAxNiAwIDEyLjQxODMgMCA4QzAgMy41ODE3MiAzLjU4MTcyIDAgOCAwQzEyLjQxODMgMCAxNiAzLjU4MTcyIDE2IDhaTTkgM1Y5SDdWM0g5Wk05IDEzVjExSDdWMTNIOVonIGZpbGw9JyUyM0NBMDAwMCcvJTNFJTNDL3N2ZyUzRSIpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEycHggY2VudGVyO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtZmFtaWx5OmFyaWFsLCBzYW5zLXNlcmlmO2ZvbnQtd2VpZ2h0OjYwMDtsaW5lLWhlaWdodDoxNnB4O2NvbG9yOiMwMDA7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMzEsIDMzLCA0MSwgMC4yOTgyOTUpfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDozMTlweCl7I19mb3JtXzE5XyAuX2Vycm9yLWlubmVye3BhZGRpbmc6N3B4IDdweCA3cHggMjVweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxMnB4O2JhY2tncm91bmQtcG9zaXRpb246NHB4IGNlbnRlcjttYXgtd2lkdGg6MTAwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfX0jX2Zvcm1fMTlfIC5fZXJyb3ItaW5uZXIuX2Zvcm1fZXJyb3J7bWFyZ2luLWJvdHRvbTo1cHg7dGV4dC1hbGlnbjpsZWZ0fSNfZm9ybV8xOV8gLl9idXR0b24td3JhcHBlciAuX2Vycm9yLWlubmVyLl9mb3JtX2Vycm9ye3Bvc2l0aW9uOnN0YXRpY30jX2Zvcm1fMTlfIC5fZXJyb3ItaW5uZXIuX25vX2Fycm93e21hcmdpbi1ib3R0b206MTBweH0jX2Zvcm1fMTlfIC5fZXJyb3ItYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDtoZWlnaHQ6MH0jX2Zvcm1fMTlfIC5fZXJyb3ItaHRtbHttYXJnaW4tYm90dG9tOjEwcHh9LnBpa2Etc2luZ2xle3otaW5kZXg6MTAwMDAwMDEgIWltcG9ydGFudH0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9InRleHQiXS5kYXRldGltZV9kYXRle3dpZHRoOjY5JTtkaXNwbGF5OmlubGluZX0jX2Zvcm1fMTlfIHNlbGVjdC5kYXRldGltZV90aW1le3dpZHRoOjI5JTtkaXNwbGF5OmlubGluZTtoZWlnaHQ6MzJweH0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9ImRhdGUiXS5kYXRldGltZV9kYXRle3dpZHRoOjY5JTtkaXNwbGF5OmlubGluZS1mbGV4fSNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGltZSJdLmRhdGV0aW1lX3RpbWV7d2lkdGg6MjklO2Rpc3BsYXk6aW5saW5lLWZsZXh9QG1lZGlhIChtaW4td2lkdGg6MzIwcHgpIGFuZCAobWF4LXdpZHRoOjY2N3B4KXs6Oi13ZWJraXQtc2Nyb2xsYmFye2Rpc3BsYXk6bm9uZX0jX2Zvcm1fMTlfICp7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc2l6ZToxZW19I19mb3JtXzE5XyAuX2Zvcm0tY29udGVudHttYXJnaW46MDt3aWR0aDoxMDAlfSNfZm9ybV8xOV8gLl9mb3JtLWlubmVye2Rpc3BsYXk6YmxvY2s7bWluLXdpZHRoOjEwMCV9I19mb3JtXzE5XyAuX2Zvcm0tdGl0bGUsI19mb3JtXzE5XyAuX2lubGluZS1zdHlsZXttYXJnaW4tdG9wOjA7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MH0jX2Zvcm1fMTlfIC5fZm9ybS10aXRsZXtmb250LXNpemU6MS4yZW19I19mb3JtXzE5XyAuX2Zvcm1fZWxlbWVudHttYXJnaW46MCAwIDIwcHg7cGFkZGluZzowO3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX2Zvcm0tZWxlbWVudCwjX2Zvcm1fMTlfIC5faW5saW5lLXN0eWxlLCNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGV4dCJdLCNfZm9ybV8xOV8gbGFiZWwsI19mb3JtXzE5XyBwLCNfZm9ybV8xOV8gdGV4dGFyZWE6bm90KC5nLXJlY2FwdGNoYS1yZXNwb25zZSl7ZmxvYXQ6bm9uZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX3Jvdy5fY2hlY2tib3gtcmFkaW8gbGFiZWx7ZGlzcGxheTppbmxpbmV9I19mb3JtXzE5XyAuX3JvdywjX2Zvcm1fMTlfIHAsI19mb3JtXzE5XyBsYWJlbHttYXJnaW4tYm90dG9tOjAuN2VtO3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX3JvdyBpbnB1dFt0eXBlPSJjaGVja2JveCJdLCNfZm9ybV8xOV8gLl9yb3cgaW5wdXRbdHlwZT0icmFkaW8iXXttYXJnaW46MCAhaW1wb3J0YW50O3ZlcnRpY2FsLWFsaWduOm1pZGRsZSAhaW1wb3J0YW50fSNfZm9ybV8xOV8gLl9yb3cgaW5wdXRbdHlwZT0iY2hlY2tib3giXStzcGFuIGxhYmVse2Rpc3BsYXk6aW5saW5lfSNfZm9ybV8xOV8gLl9yb3cgc3BhbiBsYWJlbHttYXJnaW46MCAhaW1wb3J0YW50O3dpZHRoOmluaXRpYWwgIWltcG9ydGFudDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUgIWltcG9ydGFudH0jX2Zvcm1fMTlfIC5fZm9ybS1pbWFnZXttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0byAhaW1wb3J0YW50fSNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGV4dCJde3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxLjNlbTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9InJhZGlvIl0sI19mb3JtXzE5XyBpbnB1dFt0eXBlPSJjaGVja2JveCJde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEuM2VtO2hlaWdodDoxLjNlbTtmb250LXNpemU6MWVtO21hcmdpbjowIDAuM2VtIDAgMDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0jX2Zvcm1fMTlfIGJ1dHRvblt0eXBlPSJzdWJtaXQiXXtwYWRkaW5nOjIwcHg7Zm9udC1zaXplOjEuNWVtfSNfZm9ybV8xOV8gLl9pbmxpbmUtc3R5bGV7bWFyZ2luOjIwcHggMCAwICFpbXBvcnRhbnR9I19mb3JtXzE5XyAuX2lubGluZS1zdHlsZSBpbnB1dFt0eXBlPSJ0ZXh0Il17d2lkdGg6MTAwJX19I19mb3JtXzE5XyAuc21zX2NvbnNlbnRfY2hlY2tib3h7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nOjIwcHggMH0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCBpbnB1dFt0eXBlPSJjaGVja2JveCJde2Zsb2F0OmxlZnQ7bWFyZ2luOjVweCAxMHB4IDEwcHggMH0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCAuc21zX2NvbnNlbnRfbWVzc2FnZXtkaXNwbGF5OmlubGluZTtmbG9hdDpsZWZ0O3RleHQtYWxpZ246bGVmdDttYXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzdEODc5OX0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCAuc21zX2NvbnNlbnRfbWVzc2FnZS5zbXNfY29uc2VudF9taW5pe3dpZHRoOjkwJX0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCAuX2Vycm9yLl9hYm92ZXtyaWdodDphdXRvO2JvdHRvbTowfSNfZm9ybV8xOV8gLnNtc19jb25zZW50X2NoZWNrYm94IC5fZXJyb3IuX2Fib3ZlIC5fZXJyb3ItYXJyb3d7cmlnaHQ6YXV0bztsZWZ0OjVweH1AbWVkaWEgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpeyNfZm9ybV8xOV8gLnNtc19jb25zZW50X2NoZWNrYm94IC5fZXJyb3IuX2Fib3Zle3RvcDotMzBweDtsZWZ0OjA7Ym90dG9tOmF1dG99fSNfZm9ybV8xOV8gLmZpZWxkLXJlcXVpcmVke2NvbG9yOiNGRjAwMDB9I19mb3JtXzE5XyAuX3Nob3dfYmVfZXJyb3J7bWluLXdpZHRoOjEwMCV9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0sI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWNvbnRlbnR7Zm9udC1mYW1pbHk6IklCTSBQbGV4IFNhbnMiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZ9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9yb3cgc3Bhbjpub3QoLmZpZWxkLXJlcXVpcmVkKSwjX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX3JvdyBsYWJlbHtmb250LWZhbWlseToiSUJNIFBsZXggU2FucyIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42ZW19I19mb3JtXzE5X19pbmxpbmVmb3JtIGlucHV0W3R5cGU9InRleHQiXSwjX2Zvcm1fMTlfX2lubGluZWZvcm0gaW5wdXRbdHlwZT0iZGF0ZSJdLCNfZm9ybV8xOV9faW5saW5lZm9ybSBpbnB1dFt0eXBlPSJ0ZWwiXSwjX2Zvcm1fMTlfX2lubGluZWZvcm0gc2VsZWN0LCNfZm9ybV8xOV9faW5saW5lZm9ybSB0ZXh0YXJlYTpub3QoLmctcmVjYXB0Y2hhLXJlc3BvbnNlKXtmb250LWZhbWlseToiSUJNIFBsZXggU2FucyIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7Zm9udC1jb2xvcjojMDAwMDAwO2xpbmUtaGVpZ2h0OjEuNmVtfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5faHRtbC1jb2RlICo6bm90KGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpLCNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5zbXNfY29uc2VudF9tZXNzYWdlLCNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS10aGFuay15b3V7Zm9udC1mYW1pbHk6IklCTSBQbGV4IFNhbnMiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZ9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWxhYmVsLCNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1lbWFpbGlkZW50aWZpZXIsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWNoZWNrYm94LW9wdGlvbi1sYWJlbHtmb250LWZhbWlseToiSUJNIFBsZXggU2FucyIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS42ZW19I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDEsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDIsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDMsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDQsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDUsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDYsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLXRpdGxle2ZvbnQtc2l6ZToyMnB4O2xpbmUtaGVpZ2h0Om5vcm1hbDtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTowO2Rpc3BsYXk6YmxvY2t9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWJyYW5kaW5ne2ZvbnQtZmFtaWx5OiJJQk0gUGxleCBTYW5zIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjEwMDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWRlY29yYXRpb246bm9uZX0jX2Zvcm1fMTlfOmJlZm9yZSwjX2Zvcm1fMTlfOmFmdGVye2NvbnRlbnQ6IiAiO2Rpc3BsYXk6dGFibGV9I19mb3JtXzE5XzphZnRlcntjbGVhcjpib3RofSNfZm9ybV8xOV8uX2lubGluZS1zdHlsZXt3aWR0aDphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrfSNfZm9ybV8xOV8uX2lubGluZS1zdHlsZSBpbnB1dFt0eXBlPSJ0ZXh0Il0sI19mb3JtXzE5Xy5faW5saW5lLXN0eWxlIGlucHV0W3R5cGU9ImRhdGUiXXtwYWRkaW5nOjEwcHggMTJweH0jX2Zvcm1fMTlfLl9pbmxpbmUtc3R5bGUgYnV0dG9uLl9pbmxpbmUtc3R5bGV7cG9zaXRpb246cmVsYXRpdmU7dG9wOjI3cHh9I19mb3JtXzE5Xy5faW5saW5lLXN0eWxlIHB7bWFyZ2luOjB9I19mb3JtXzE5Xy5faW5saW5lLXN0eWxlIC5fYnV0dG9uLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjE2cHggMTIuNXB4IDAgMjBweH0jX2Zvcm1fMTlfIC5fZm9ybS10aGFuay15b3V7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowO3JpZ2h0OjA7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE4cHh9I19mb3JtXzE5XyAuX2Zvcm0tcGMtY29uZmlybWF0aW9uIC5fc3VibWl0e21hcmdpbi10b3A6MTZweH1AbWVkaWEgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpeyNfZm9ybV8xOV8uX2lubGluZS1mb3JtLl9pbmxpbmUtc3R5bGUgLl9pbmxpbmUtc3R5bGUuX2J1dHRvbi13cmFwcGVye21hcmdpbi10b3A6MjBweCAhaW1wb3J0YW50O21hcmdpbi1sZWZ0OjAgIWltcG9ydGFudH19I19mb3JtXzE5XyAuaXRpe3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuaXRpLml0aS0tYWxsb3ctZHJvcGRvd24uaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGV7d2lkdGg6MTAwJX0jX2Zvcm1fMTlfIC5pdGkgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6Izk3OTc5NyAxcHggc29saWQ7Ym9yZGVyLXJhZGl1czo0cHh9I19mb3JtXzE5XyAuaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGUgLml0aV9fc2VsZWN0ZWQtZmxhZ3tiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7Ym9yZGVyLXJhZGl1czo0cHh9I19mb3JtXzE5XyAuaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGUgLml0aV9fc2VsZWN0ZWQtZmxhZzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNSl9I19mb3JtXzE5XyAuaXRpX19jb3VudHJ5LWxpc3R7Ym9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo0cHg7bWluLXdpZHRoOjQ2MHB4fSNfZm9ybV8xOV8gLml0aV9fY291bnRyeS1saXN0LS1kcm9wdXB7bWFyZ2luLWJvdHRvbTo0cHh9I19mb3JtXzE5XyAucGhvbmUtZXJyb3ItaGlkZGVue2Rpc3BsYXk6bm9uZX0jX2Zvcm1fMTlfIC5waG9uZS1lcnJvcntjb2xvcjojRTQwRTQ5fSNfZm9ybV8xOV8gLnBob25lLWlucHV0LWVycm9ye2JvcmRlcjoxcHggc29saWQgI0U0MEU0OSAhaW1wb3J0YW50fSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgZmllbGRzZXR7bWFyZ2luOjA7bWFyZ2luLWJvdHRvbToxLjE0Mjg1NzE0MjllbTtib3JkZXI6bm9uZTtwYWRkaW5nOjB9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWNvbnRlbnQgLl9mb3JtLWxpc3Qtc3Vic2NyaXB0aW9ucy1maWVsZCBmaWVsZHNldDpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIGxlZ2VuZHttYXJnaW4tYm90dG9tOjEuMTQyODU3MTQyOWVtfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgbGFiZWx7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWFyZ2luLWJvdHRvbTowLjg1NzE0Mjg1NzFlbX0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIGxhYmVsOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgaW5wdXR7bWFyZ2luOjA7bWFyZ2luLXJpZ2h0OjhweH0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIC5fZm9ybS1jaGVja2JveC1vcHRpb24tbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDo0MDA7bWFyZ2luLXRvcDotNHB4fSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgLl9mb3JtLWNoZWNrYm94LW9wdGlvbi1sYWJlbC13aXRoLWRlc2NyaXB0aW9ue2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi10b3A6LTRweH0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIC5fZm9ybS1jaGVja2JveC1vcHRpb24tZGVzY3JpcHRpb257bWFyZ2luOjA7Zm9udC1zaXplOjAuODU3MTQyODU3MWVtfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgLl9mb3JtLXN1YnNjcmlwdGlvbnMtdW5zdWJzY3JpYmUtYWxsLWRlc2NyaXB0aW9ue2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW4tdG9wOi0ycHh9PC9zdHlsZT4KPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249Imh0dHBzOi8vZm9ydGl1c2NhcDY0OTM3LmFjdGl2ZWhvc3RlZC5jb20vcHJvYy5waHAiIGlkPSJfZm9ybV8xOV8iIGNsYXNzPSJfZm9ybSBfZm9ybV8xOSBfaW5saW5lLWZvcm0gIF9kYXJrIiBub3ZhbGlkYXRlPSIiIGRhdGEtc3R5bGVzLXZlcnNpb249IjUiPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InUiIHZhbHVlPSIxOSI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZiIgdmFsdWU9IjE5Ij4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzIj4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjIiB2YWx1ZT0iMCI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibSIgdmFsdWU9IjAiPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InN1YiI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idiIgdmFsdWU9IjIiPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9yIiB2YWx1ZT0iN2YzMDBlM2YtMzg2OC00YzY3LWIwYTUtYmZkMTU2N2RiYjc1Ij4KICA8ZGl2IGNsYXNzPSJfZm9ybS1jb250ZW50Ij4KCgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iX2Zvcm1fZWxlbWVudCBfeDQ4MjM0MjA3IHZjX2NvbHVtbl9jb250YWluZXIgdmNfY29sLXNtLTUiPgogICAgICA8L2xhYmVsPgogICAgICA8ZGl2IGNsYXNzPSJfZmllbGQtd3JhcHBlciI+CiAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJmdWxsbmFtZSIgbmFtZT0iZnVsbG5hbWUiIHBsYWNlaG9sZGVyPSJTdSBub21icmUqIiByZXF1aXJlZD0iIj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Il9mb3JtX2VsZW1lbnQgX3g4NzkzMTMzMSB2Y19jb2x1bW5fY29udGFpbmVyIHZjX2NvbC1zbS01Ij4KICAgIDxkaXYgY2xhc3M9Il9maWVsZC13cmFwcGVyIj4KICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJlbWFpbCIgbmFtZT0iZW1haWwiIHBsYWNlaG9sZGVyPSJJbnRyb2R1emNhIHN1IGNvcnJlbyBlbGVjdHLDs25pY28qIiByZXF1aXJlZD0iIj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9Il9idXR0b24td3JhcHBlciB2Y19jb2x1bW5fY29udGFpbmVyIHZjX2NvbC1zbS0yIj4KICAgIDxidXR0b24gaWQ9Il9mb3JtXzE5X3N1Ym1pdCIgY2xhc3M9Il9zdWJtaXQiIHR5cGU9InN1Ym1pdCI+CiBSZWdpc3RyYXJzZQogICAgPC9idXR0b24+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iX2NsZWFyLWVsZW1lbnQiPgogIDwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iX2Zvcm0tdGhhbmsteW91IiBzdHlsZT0iZGlzcGxheTpub25lOyI+CjwvZGl2Pgo8L2Zvcm0+PHNjcmlwdD4Kd2luZG93LmNmaWVsZHMgPSBbXTsKd2luZG93Ll9zaG93X3RoYW5rX3lvdSA9IGZ1bmN0aW9uKGlkLCBtZXNzYWdlLCB0cmFja2NtcF91cmwsIGVtYWlsKSB7CiAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8nICsgaWQgKyAnXycpLCB0aGFua195b3UgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS10aGFuay15b3UnKTsKICAgIGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLWNvbnRlbnQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgdGhhbmtfeW91LmlubmVySFRNTCA9IG1lc3NhZ2U7CiAgICB0aGFua195b3Uuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICBjb25zdCB2Z29BbGlhcyA9IHR5cGVvZiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXMgPT09ICd1bmRlZmluZWQnID8gJ3ZnbycgOiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXM7CiAgICB2YXIgdmlzaXRvck9iamVjdCA9IHdpbmRvd1t2Z29BbGlhc107CiAgICBpZiAoZW1haWwgJiYgdHlwZW9mIHZpc2l0b3JPYmplY3QgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgdmlzaXRvck9iamVjdCgnc2V0RW1haWwnLCBlbWFpbCk7CiAgICAgICAgdmlzaXRvck9iamVjdCgndXBkYXRlJyk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZih0cmFja2NtcF91cmwpICE9ICd1bmRlZmluZWQnICYmIHRyYWNrY21wX3VybCkgewogICAgICAgIC8vIFNpdGUgdHJhY2tpbmcgVVJMIHRvIHVzZSBhZnRlciBpbmxpbmUgZm9ybSBzdWJtaXNzaW9uLgogICAgICAgIF9sb2FkX3NjcmlwdCh0cmFja2NtcF91cmwpOwogICAgfQogICAgaWYgKHR5cGVvZiB3aW5kb3cuX2Zvcm1fY2FsbGJhY2sgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuX2Zvcm1fY2FsbGJhY2soaWQpOwogICAgdGhhbmtfeW91LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTsKICAgIHRoYW5rX3lvdS5mb2N1cygpOwp9Owp3aW5kb3cuX3Nob3dfdW5zdWJzY3JpYmUgPSBmdW5jdGlvbihpZCwgbWVzc2FnZSwgdHJhY2tjbXBfdXJsLCBlbWFpbCkgewogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX2Zvcm1fJyArIGlkICsgJ18nKSwgdW5zdWIgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS10aGFuay15b3UnKTsKICAgIHZhciBicmFuZGluZyA9IGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLWJyYW5kaW5nJyk7CiAgICBpZiAoYnJhbmRpbmcpIHsKICAgICAgICBicmFuZGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQogICAgZm9ybS5xdWVyeVNlbGVjdG9yKCcuX2Zvcm0tY29udGVudCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB1bnN1Yi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIGZvcm0uaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsIG1lc3NhZ2UpCiAgICBjb25zdCB2Z29BbGlhcyA9IHR5cGVvZiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXMgPT09ICd1bmRlZmluZWQnID8gJ3ZnbycgOiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXM7CiAgICB2YXIgdmlzaXRvck9iamVjdCA9IHdpbmRvd1t2Z29BbGlhc107CiAgICBpZiAoZW1haWwgJiYgdHlwZW9mIHZpc2l0b3JPYmplY3QgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgdmlzaXRvck9iamVjdCgnc2V0RW1haWwnLCBlbWFpbCk7CiAgICAgICAgdmlzaXRvck9iamVjdCgndXBkYXRlJyk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZih0cmFja2NtcF91cmwpICE9ICd1bmRlZmluZWQnICYmIHRyYWNrY21wX3VybCkgewogICAgICAgIC8vIFNpdGUgdHJhY2tpbmcgVVJMIHRvIHVzZSBhZnRlciBpbmxpbmUgZm9ybSBzdWJtaXNzaW9uLgogICAgICAgIF9sb2FkX3NjcmlwdCh0cmFja2NtcF91cmwpOwogICAgfQogICAgaWYgKHR5cGVvZiB3aW5kb3cuX2Zvcm1fY2FsbGJhY2sgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuX2Zvcm1fY2FsbGJhY2soaWQpOwp9Owp3aW5kb3cuX3Nob3dfZXJyb3IgPSBmdW5jdGlvbihpZCwgbWVzc2FnZSwgaHRtbCkgewogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX2Zvcm1fJyArIGlkICsgJ18nKSwKICAgICAgICBlcnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKICAgICAgICBidXR0b24gPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPSJzdWJtaXQiXScpLAogICAgICAgIG9sZF9lcnJvciA9IGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtX2Vycm9yJyk7CiAgICBpZiAob2xkX2Vycm9yKSBvbGRfZXJyb3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRfZXJyb3IpOwogICAgZXJyLmlubmVySFRNTCA9IG1lc3NhZ2U7CiAgICBlcnIuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lciBfZm9ybV9lcnJvciBfbm9fYXJyb3cnOwogICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gJ19mb3JtLWlubmVyIF9zaG93X2JlX2Vycm9yJzsKICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoZXJyKTsKICAgIGJ1dHRvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLCBidXR0b24pOwogICAgdmFyIHN1Ym1pdEJ1dHRvbiA9IGZvcm0ucXVlcnlTZWxlY3RvcignW2lkXj0iX2Zvcm0iXVtpZCQ9Il9zdWJtaXQiXScpOwogICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICBzdWJtaXRCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgncHJvY2Vzc2luZycpOwogICAgaWYgKGh0bWwpIHsKICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICdfZXJyb3ItaHRtbCc7CiAgICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgZXJyLmFwcGVuZENoaWxkKGRpdik7CiAgICB9Cn07CndpbmRvdy5fc2hvd19wY19jb25maXJtYXRpb24gPSBmdW5jdGlvbihpZCwgaGVhZGVyLCBkZXRhaWwsIHNob3csIGVtYWlsKSB7CiAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8nICsgaWQgKyAnXycpLCBwY19jb25maXJtYXRpb24gPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS1wYy1jb25maXJtYXRpb24nKTsKICAgIGlmIChwY19jb25maXJtYXRpb24uc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7CiAgICAgICAgZm9ybS5xdWVyeVNlbGVjdG9yKCcuX2Zvcm0tY29udGVudCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgcGNfY29uZmlybWF0aW9uLmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPSdfZm9ybS10aXRsZSc+IiArIGhlYWRlciArICI8L2Rpdj4iICsgIjxwPiIgKyBkZXRhaWwgKyAiPC9wPiIgKwogICAgICAgICI8YnV0dG9uIGNsYXNzPSdfc3VibWl0JyBpZD0naGlkZUJ1dHRvbic+TWFuYWdlIHByZWZlcmVuY2VzPC9idXR0b24+IjsKICAgICAgICBwY19jb25maXJtYXRpb24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgdmFyIG1wID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT0ibXAiXScpOwogICAgICAgIG1wLnZhbHVlID0gJzAnOwogICAgfSBlbHNlIHsKICAgICAgICBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS1jb250ZW50Jykuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOwogICAgICAgIHBjX2NvbmZpcm1hdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQoKICAgIHZhciBoaWRlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hpZGVCdXR0b24nKTsKICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lciB0byB0aGUgYnV0dG9uCiAgICBoaWRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHN1Ym1pdEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNfZm9ybV8xOV9zdWJtaXQnKTsKICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICBzdWJtaXRCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgncHJvY2Vzc2luZycpOwogICAgICAgIHZhciBtcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9Im1wIl0nKTsKICAgICAgICBtcC52YWx1ZSA9ICcxJzsKICAgICAgICBjb25zdCBjYWNoZUJ1c3RlciA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpOwogICAgICAgIGNhY2hlQnVzdGVyLnNlYXJjaFBhcmFtcy5zZXQoJ3YnLCBuZXcgRGF0ZSgpLmdldFRpbWUoKSk7CiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBjYWNoZUJ1c3Rlci50b1N0cmluZygpOwogICAgfSk7CgogICAgY29uc3QgdmdvQWxpYXMgPSB0eXBlb2YgdmlzaXRvckdsb2JhbE9iamVjdEFsaWFzID09PSAndW5kZWZpbmVkJyA\/ICd2Z28nIDogdmlzaXRvckdsb2JhbE9iamVjdEFsaWFzOwogICAgdmFyIHZpc2l0b3JPYmplY3QgPSB3aW5kb3dbdmdvQWxpYXNdOwogICAgaWYgKGVtYWlsICYmIHR5cGVvZiB2aXNpdG9yT2JqZWN0ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHZpc2l0b3JPYmplY3QoJ3NldEVtYWlsJywgZW1haWwpOwogICAgICAgIHZpc2l0b3JPYmplY3QoJ3VwZGF0ZScpOwogICAgfSBlbHNlIGlmICh0eXBlb2YodHJhY2tjbXBfdXJsKSAhPSAndW5kZWZpbmVkJyAmJiB0cmFja2NtcF91cmwpIHsKICAgICAgICAvLyBTaXRlIHRyYWNraW5nIFVSTCB0byB1c2UgYWZ0ZXIgaW5saW5lIGZvcm0gc3VibWlzc2lvbi4KICAgICAgICBfbG9hZF9zY3JpcHQodHJhY2tjbXBfdXJsKTsKICAgIH0KICAgIGlmICh0eXBlb2Ygd2luZG93Ll9mb3JtX2NhbGxiYWNrICE9PSAndW5kZWZpbmVkJykgd2luZG93Ll9mb3JtX2NhbGxiYWNrKGlkKTsKfTsKd2luZG93Ll9sb2FkX3NjcmlwdCA9IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2ssIGlzU3VibWl0KSB7CiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKSwgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIHIgPSBmYWxzZTsKICAgIHZhciBzdWJtaXRCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjX2Zvcm1fMTlfc3VibWl0Jyk7CiAgICBzY3JpcHQuY2hhcnNldCA9ICd1dGYtOCc7CiAgICBzY3JpcHQuc3JjID0gdXJsOwogICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFyICYmICghdGhpcy5yZWFkeVN0YXRlIHx8IHRoaXMucmVhZHlTdGF0ZSA9PSAnY29tcGxldGUnKSkgewogICAgICAgICAgICAgICAgciA9IHRydWU7CiAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0KICAgIHNjcmlwdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGlzU3VibWl0KSB7CiAgICAgICAgICAgIGlmIChzY3JpcHQuc3JjLmxlbmd0aCA+IDEwMDAwKSB7CiAgICAgICAgICAgICAgICBfc2hvd19lcnJvcigiMTkiLCAiU29ycnksIHlvdXIgc3VibWlzc2lvbiBmYWlsZWQuIFBsZWFzZSBzaG9ydGVuIHlvdXIgcmVzcG9uc2VzIGFuZCB0cnkgYWdhaW4uIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfc2hvd19lcnJvcigiMTkiLCAiU29ycnksIHlvdXIgc3VibWlzc2lvbiBmYWlsZWQuIFBsZWFzZSB0cnkgYWdhaW4uIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdwcm9jZXNzaW5nJyk7CiAgICAgICAgfQogICAgfQoKICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKfTsKKGZ1bmN0aW9uKCkgewogICAgdmFyIGl0aTsKICAgIGlmICh3aW5kb3cubG9jYXRpb24uc2VhcmNoLnNlYXJjaCgiZXhjbHVkZWZvcm0iKSAhPT0gLTEpIHJldHVybiBmYWxzZTsKICAgIHZhciBnZXRDb29raWUgPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDsgKScgKyBuYW1lICsgJz0oW147XSspJykpOwogICAgICAgIHJldHVybiBtYXRjaCA\/IG1hdGNoWzJdIDogbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7CiAgICB9CiAgICB2YXIgc2V0Q29va2llID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHsKICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKICAgICAgICB2YXIgdGltZSA9IG5vdy5nZXRUaW1lKCk7CiAgICAgICAgdmFyIGV4cGlyZVRpbWUgPSB0aW1lICsgMTAwMCAqIDYwICogNjAgKiAyNCAqIDM2NTsKICAgICAgICBub3cuc2V0VGltZShleHBpcmVUaW1lKTsKICAgICAgICBkb2N1bWVudC5jb29raWUgPSBuYW1lICsgJz0nICsgdmFsdWUgKyAnOyBleHBpcmVzPScgKyBub3cgKyAnO3BhdGg9LzsgU2VjdXJlOyBTYW1lU2l0ZT1MYXg7JzsKICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCB2YWx1ZSk7CiAgICB9CiAgICB2YXIgYWRkRXZlbnQgPSBmdW5jdGlvbihlbGVtZW50LCBldmVudCwgZnVuYykgewogICAgICAgIGlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgb2xkRnVuYyA9IGVsZW1lbnRbJ29uJyArIGV2ZW50XTsKICAgICAgICAgICAgZWxlbWVudFsnb24nICsgZXZlbnRdID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBvbGRGdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgdmFyIF9yZW1vdmVkID0gZmFsc2U7CiAgICAgICAgdmFyIGZvcm1fdG9fc3VibWl0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19mb3JtXzE5XycpOwogICAgdmFyIGFsbElucHV0cyA9IGZvcm1fdG9fc3VibWl0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJyksIHRvb2x0aXBzID0gW10sIHN1Ym1pdHRlZCA9IGZhbHNlOwoKICAgIHZhciBnZXRVcmxQYXJhbSA9IGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnZW1haWwnKSB7CiAgICAgICAgICAgIHZhciBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgICAgICByZXR1cm4gcGFyYW1zLmdldChuYW1lKSB8fCBmYWxzZTsKICAgICAgICB9CiAgICAgICAgLy8gZW1haWwgaXMgYSBzcGVjaWFsIGNhc2UgYmVjYXVzZSBhIHBsdXMgaXMgdmFsaWQgaW4gdGhlIGVtYWlsIGFkZHJlc3MKICAgICAgICB2YXIgcVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CiAgICAgICAgaWYgKCFxU3RyaW5nKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSBxU3RyaW5nLnN1YnN0cigxKS5zcGxpdCgnJicpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tpXS5zcGxpdCgnPScpOwogICAgICAgICAgICBpZiAocGFyYW1ldGVyWzBdLnRvTG93ZXJDYXNlKCkgPT09ICdlbWFpbCcpIHsKICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJbMV0gPT09IHVuZGVmaW5lZCA\/IHRydWUgOiBkZWNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyWzFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHZhciBhY2N0RGF0ZUZvcm1hdCA9ICIlbS8lZC8lWSI7CiAgICB2YXIgZ2V0Tm9ybWFsaXplZERhdGUgPSBmdW5jdGlvbihkYXRlLCBhY2N0Rm9ybWF0KSB7CiAgICAgICAgdmFyIGRlY29kZWREYXRlID0gZGVjb2RlVVJJQ29tcG9uZW50KGRhdGUpOwogICAgICAgIGlmIChhY2N0Rm9ybWF0ICYmIGFjY3RGb3JtYXQubWF0Y2goLyglZHwlZSkuKiVtL2dpKSAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gZGVjb2RlZERhdGUucmVwbGFjZSgvKFxkezJ9KS4qKFxkezJ9KS4qKFxkezR9KS9nLCAnJDMtJDItJDEnKTsKICAgICAgICB9IGVsc2UgaWYgKERhdGUucGFyc2UoZGVjb2RlZERhdGUpKSB7CiAgICAgICAgICAgIHZhciBkYXRlT2JqID0gbmV3IERhdGUoZGVjb2RlZERhdGUpOwogICAgICAgICAgICB2YXIgeWVhciA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKTsKICAgICAgICAgICAgdmFyIG1vbnRoID0gZGF0ZU9iai5nZXRNb250aCgpICsgMTsKICAgICAgICAgICAgdmFyIGRheSA9IGRhdGVPYmouZ2V0RGF0ZSgpOwogICAgICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aCAgMTAgPyBgMCR7bW9udGh9YCA6IG1vbnRofS0ke2RheSAgMTAgPyBgMCR7ZGF5fWAgOiBkYXl9YDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCiAgICB2YXIgZ2V0Tm9ybWFsaXplZFRpbWUgPSBmdW5jdGlvbih0aW1lKSB7CiAgICAgICAgdmFyIGhvdXIsIG1pbnV0ZXM7CiAgICAgICAgdmFyIGRlY29kZWRUaW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHRpbWUpOwogICAgICAgIHZhciB0aW1lUGFydHMgPSBBcnJheS5mcm9tKGRlY29kZWRUaW1lLm1hdGNoQWxsKC8oXGR7MSwyfSk6KFxkezEsMn0pXFcqKFtBYVBwXVtNbV0pPy9nbSkpWzBdOwogICAgICAgIGlmICh0aW1lUGFydHNbM10pIHsgLy8gMTIgaG91ciBmb3JtYXQKICAgICAgICAgICAgdmFyIGlzUE0gPSB0aW1lUGFydHNbM10udG9Mb3dlckNhc2UoKSA9PT0gJ3BtJzsKICAgICAgICAgICAgaWYgKGlzUE0pIHsKICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludCh0aW1lUGFydHNbMV0pID09PSAxMiA\/ICcxMicgOiBgJHtwYXJzZUludCh0aW1lUGFydHNbMV0pICsgMTJ9YDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludCh0aW1lUGFydHNbMV0pID09PSAxMiA\/ICcwJyA6IHRpbWVQYXJ0c1sxXTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7IC8vIDI0IGhvdXIgZm9ybWF0CiAgICAgICAgICAgIGhvdXIgPSB0aW1lUGFydHNbMV07CiAgICAgICAgfQogICAgICAgIHZhciBub3JtYWxpemVkSG91ciA9IHBhcnNlSW50KGhvdXIpICAxMCA\/IGAwJHtwYXJzZUludChob3VyKX1gIDogaG91cjsKICAgICAgICB2YXIgbWludXRlcyA9IHRpbWVQYXJ0c1syXTsKICAgICAgICByZXR1cm4gYCR7bm9ybWFsaXplZEhvdXJ9OiR7bWludXRlc31gOwogICAgfTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSAgYWxsSW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlZ2V4U3RyID0gImZpZWxkXFxbKFxcZCspXFxdIjsKICAgICAgICB2YXIgcmVzdWx0cyA9IG5ldyBSZWdFeHAocmVnZXhTdHIpLmV4ZWMoYWxsSW5wdXRzW2ldLm5hbWUpOwogICAgICAgIGlmIChyZXN1bHRzICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICBhbGxJbnB1dHNbaV0uZGF0YXNldC5uYW1lID0gYWxsSW5wdXRzW2ldLm5hbWUubWF0Y2goL1xbdGltZVxdJC8pCiAgICAgICAgICAgICAgICA\/IGAke3dpbmRvdy5jZmllbGRzW3Jlc3VsdHNbMV1dfV90aW1lYAogICAgICAgICAgICAgICAgOiB3aW5kb3cuY2ZpZWxkc1tyZXN1bHRzWzFdXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhbGxJbnB1dHNbaV0uZGF0YXNldC5uYW1lID0gYWxsSW5wdXRzW2ldLm5hbWU7CiAgICAgICAgfQogICAgICAgIHZhciBmaWVsZFZhbCA9IGdldFVybFBhcmFtKGFsbElucHV0c1tpXS5kYXRhc2V0Lm5hbWUpOwoKICAgICAgICBpZiAoZmllbGRWYWwpIHsKICAgICAgICAgICAgaWYgKGFsbElucHV0c1tpXS5kYXRhc2V0LmF1dG9maWxsID09PSAiZmFsc2UiKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYWxsSW5wdXRzW2ldLnR5cGUgPT0gInJhZGlvIiB8fCBhbGxJbnB1dHNbaV0udHlwZSA9PSAiY2hlY2tib3giKSB7CiAgICAgICAgICAgICAgICBpZiAoYWxsSW5wdXRzW2ldLnZhbHVlID09IGZpZWxkVmFsKSB7CiAgICAgICAgICAgICAgICAgICAgYWxsSW5wdXRzW2ldLmNoZWNrZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGFsbElucHV0c1tpXS50eXBlID09ICJkYXRlIikgewogICAgICAgICAgICAgICAgYWxsSW5wdXRzW2ldLnZhbHVlID0gZ2V0Tm9ybWFsaXplZERhdGUoZmllbGRWYWwsIGFjY3REYXRlRm9ybWF0KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChhbGxJbnB1dHNbaV0udHlwZSA9PSAidGltZSIpIHsKICAgICAgICAgICAgICAgIGFsbElucHV0c1tpXS52YWx1ZSA9IGdldE5vcm1hbGl6ZWRUaW1lKGZpZWxkVmFsKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGFsbElucHV0c1tpXS52YWx1ZSA9IGZpZWxkVmFsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHZhciByZW1vdmVfdG9vbHRpcHMgPSBmdW5jdGlvbigpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSAgdG9vbHRpcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdG9vbHRpcHNbaV0udGlwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodG9vbHRpcHNbaV0udGlwKTsKICAgICAgICB9CiAgICAgICAgdG9vbHRpcHMgPSBbXTsKICAgIH07CiAgICB2YXIgcmVtb3ZlX3Rvb2x0aXAgPSBmdW5jdGlvbihlbGVtKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIHRvb2x0aXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICh0b29sdGlwc1tpXS5lbGVtID09PSBlbGVtKSB7CiAgICAgICAgICAgICAgICB0b29sdGlwc1tpXS50aXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0b29sdGlwc1tpXS50aXApOwogICAgICAgICAgICAgICAgdG9vbHRpcHMuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIHZhciBjcmVhdGVfdG9vbHRpcCA9IGZ1bmN0aW9uKGVsZW0sIHRleHQpIHsKICAgICAgICB2YXIgdG9vbHRpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAogICAgICAgICAgICBhcnJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAogICAgICAgICAgICBpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCBuZXdfdG9vbHRpcCA9IHt9OwogICAgICAgIHRvb2x0aXAuaWQgPSBgJHtlbGVtLmlkfS1lcnJvcmA7CiAgICAgICAgdG9vbHRpcC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnYWxlcnQnKQogICAgICAgIGlmIChlbGVtLnR5cGUgIT0gJ3JhZGlvJyAmJiAoZWxlbS50eXBlICE9ICdjaGVja2JveCcgfHwgZWxlbS5uYW1lID09PSAnc21zX2NvbnNlbnQnKSkgewogICAgICAgICAgICB0b29sdGlwLmNsYXNzTmFtZSA9ICdfZXJyb3InOwogICAgICAgICAgICBhcnJvdy5jbGFzc05hbWUgPSAnX2Vycm9yLWFycm93JzsKICAgICAgICAgICAgaW5uZXIuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lcic7CiAgICAgICAgICAgIGlubmVyLmlubmVySFRNTCA9IHRleHQ7CiAgICAgICAgICAgIHRvb2x0aXAuYXBwZW5kQ2hpbGQoYXJyb3cpOwogICAgICAgICAgICB0b29sdGlwLmFwcGVuZENoaWxkKGlubmVyKTsKICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRvb2x0aXApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRvb2x0aXAuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lciBfbm9fYXJyb3cnOwogICAgICAgICAgICB0b29sdGlwLmlubmVySFRNTCA9IHRleHQ7CiAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodG9vbHRpcCwgZWxlbSk7CiAgICAgICAgICAgIG5ld190b29sdGlwLm5vX2Fycm93ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgbmV3X3Rvb2x0aXAudGlwID0gdG9vbHRpcDsKICAgICAgICBuZXdfdG9vbHRpcC5lbGVtID0gZWxlbTsKICAgICAgICB0b29sdGlwcy5wdXNoKG5ld190b29sdGlwKTsKICAgICAgICByZXR1cm4gbmV3X3Rvb2x0aXA7CiAgICB9OwogICAgdmFyIHJlc2l6ZV90b29sdGlwID0gZnVuY3Rpb24odG9vbHRpcCkgewogICAgICAgIHZhciByZWN0ID0gdG9vbHRpcC5lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHZhciBkb2MgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCiAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uID0gcmVjdC50b3AgLSAoKHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wKSAgLSAoZG9jLmNsaWVudFRvcCB8fCAwKSk7CiAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uICA0MCkgewogICAgICAgICAgICB0b29sdGlwLnRpcC5jbGFzc05hbWUgPSB0b29sdGlwLnRpcC5jbGFzc05hbWUucmVwbGFjZSgvID8oX2Fib3ZlfF9iZWxvdykgPy9nLCAnJykgKyAnIF9iZWxvdyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdG9vbHRpcC50aXAuY2xhc3NOYW1lID0gdG9vbHRpcC50aXAuY2xhc3NOYW1lLnJlcGxhY2UoLyA\/KF9hYm92ZXxfYmVsb3cpID8vZywgJycpICsgJyBfYWJvdmUnOwogICAgICAgIH0KICAgIH07CiAgICB2YXIgcmVzaXplX3Rvb2x0aXBzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKF9yZW1vdmVkKSByZXR1cm47CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIHRvb2x0aXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICghdG9vbHRpcHNbaV0ubm9fYXJyb3cpIHJlc2l6ZV90b29sdGlwKHRvb2x0aXBzW2ldKTsKICAgICAgICB9CiAgICB9OwogICAgdmFyIHZhbGlkYXRlX2ZpZWxkID0gZnVuY3Rpb24oZWxlbSwgcmVtb3ZlKSB7CiAgICAgICAgdmFyIHRvb2x0aXAgPSBudWxsLCB2YWx1ZSA9IGVsZW0udmFsdWUsIG5vX2Vycm9yID0gdHJ1ZTsKICAgICAgICByZW1vdmUgPyByZW1vdmVfdG9vbHRpcChlbGVtKSA6IGZhbHNlOwogICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWludmFsaWQnKTsKICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpOwogICAgICAgIGlmIChlbGVtLnR5cGUgIT0gJ2NoZWNrYm94JykgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgaWYgKGVsZW0uZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpICE9PSBudWxsKSB7CiAgICAgICAgICAgIGlmIChlbGVtLnR5cGUgPT0gJ3JhZGlvJyB8fCAoZWxlbS50eXBlID09ICdjaGVja2JveCcgJiYgL2FueS8udGVzdChlbGVtLmNsYXNzTmFtZSkpKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbXMgPSBmb3JtX3RvX3N1Ym1pdC5lbGVtZW50c1tlbGVtLm5hbWVdOwogICAgICAgICAgICAgICAgaWYgKCEoZWxlbXMgaW5zdGFuY2VvZiBOb2RlTGlzdCB8fCBlbGVtcyBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uKSB8fCBlbGVtcy5sZW5ndGggPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgbm9fZXJyb3IgPSBlbGVtLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpICBlbGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbXNbaV0uY2hlY2tlZCkgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghbm9fZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIlBsZWFzZSBzZWxlY3QgYW4gb3B0aW9uLiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW0udHlwZSA9PSdjaGVja2JveCcpIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtcyA9IGZvcm1fdG9fc3VibWl0LmVsZW1lbnRzW2VsZW0ubmFtZV0sIGZvdW5kID0gZmFsc2UsIGVyciA9IFtdOwogICAgICAgICAgICAgICAgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIGVsZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1zW2ldLmdldEF0dHJpYnV0ZSgncmVxdWlyZWQnKSA9PT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiBlbGVtc1tpXSAhPT0gZWxlbSkgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1zW2ldLmNsYXNzTmFtZSA9IGVsZW1zW2ldLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVtc1tpXS5jaGVja2VkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1zW2ldLmNsYXNzTmFtZSA9IGVsZW1zW2ldLmNsYXNzTmFtZSArICcgX2hhc19lcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5wdXNoKCJDaGVja2luZyAlcyBpcyByZXF1aXJlZCIucmVwbGFjZSgiJXMiLCBlbGVtc1tpXS52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghbm9fZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgZXJyLmpvaW4oJyEtLSB3cG1sOmh0bWxfc2VsZl9jbG9zaW5nX3RhZyBici8gLS0+JykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW0udGFnTmFtZSA9PSAnU0VMRUNUJykgewogICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlmIChlbGVtLm11bHRpcGxlKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0ub3B0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbS5vcHRpb25zW2ldLnNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtLm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW0ub3B0aW9uc1tpXS5zZWxlY3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCFlbGVtLm9wdGlvbnNbaV0udmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChlbGVtLm9wdGlvbnNbaV0udmFsdWUubWF0Y2goL1xuL2cpKSkKICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcCA9IGNyZWF0ZV90b29sdGlwKGVsZW0sICJQbGVhc2Ugc2VsZWN0IGFuIG9wdGlvbi4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgewogICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZSArICcgX2hhc19lcnJvcic7CiAgICAgICAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgICAgICAgdG9vbHRpcCA9IGNyZWF0ZV90b29sdGlwKGVsZW0sICJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChub19lcnJvciAmJiBlbGVtLm5hbWUgPT0gJ2VtYWlsJykgewogICAgICAgICAgICBpZiAoIXZhbHVlLm1hdGNoKC9eW1wrX2EtejAtOS0nJj1dKyhcLltcK19hLXowLTktJ10rKSpAW2EtejAtOS1dKyhcLlthLXowLTktXSspKihcLlthLXpdezIsfSkkL2kpKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIkVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobm9fZXJyb3IgJiYgKGVsZW0uaWQgPT0gJ3Bob25lJykpIHsKICAgICAgICAgICAgaWYgKGVsZW0udmFsdWUudHJpbSgpICYmIHR5cGVvZiBpdGkgIT0gJ3VuZGVmaW5lZCcgJiYgIWl0aS5pc1ZhbGlkTnVtYmVyKCkpIHsKICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBjcmVhdGVfdG9vbHRpcChlbGVtLCAiRW50ZXIgYSB2YWxpZCBwaG9uZSBudW1iZXIuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG5vX2Vycm9yICYmIC9kYXRlX2ZpZWxkLy50ZXN0KGVsZW0uY2xhc3NOYW1lKSkgewogICAgICAgICAgICBpZiAoIXZhbHVlLm1hdGNoKC9eXGRcZFxkXGQtXGRcZC1cZFxkJC8pKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIkVudGVyIGEgdmFsaWQgZGF0ZS4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKG5vX2Vycm9yICYmIGVsZW0ubmFtZSA9PT0gJ3Ntc19jb25zZW50JykgewogICAgICAgICAgICBjb25zdCBwaG9uZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bob25lJyk7CiAgICAgICAgICAgIGNvbnN0IGNvbnNlbnRSZXF1aXJlZCA9IHBob25lSW5wdXQuYXR0cmlidXRlcy5yZXF1aXJlZCB8fCBwaG9uZUlucHV0LnZhbHVlLmxlbmd0aCA+IDA7CiAgICAgICAgICAgIGNvbnN0IHNob3dFcnJvciA9ICAoY29uc2VudFJlcXVpcmVkIHx8ICEhZWxlbS5hdHRyaWJ1dGVzLnJlcXVpcmVkKSAmJiAhZWxlbS5jaGVja2VkOwogICAgICAgICAgICBpZiAoc2hvd0Vycm9yKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIlBsZWFzZSBjaGVjayB0aGlzIGJveCB0byBjb250aW51ZSIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdG9vbHRpcCA\/IHJlc2l6ZV90b29sdGlwKHRvb2x0aXApIDogZmFsc2U7CiAgICAgICAgaWYgKCFub19lcnJvciAmJiBlbGVtLmhhc0F0dHJpYnV0ZSgnaWQnKSkgewogICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgJ3RydWUnKTsKICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBgJHtlbGVtLmlkfS1lcnJvcmApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbm9fZXJyb3I7CiAgICB9OwogICAgdmFyIG5lZWRzX3ZhbGlkYXRlID0gZnVuY3Rpb24oZWwpIHsKICAgICAgICBpZihlbC5nZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJykgIT09IG51bGwpewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYoKGVsLm5hbWUgPT09ICdlbWFpbCcgfHwgZWwuaWQgPT09ICdwaG9uZScgfHwgZWwuaWQgPT09ICdzbXNfY29uc2VudCcpICYmIGVsLnZhbHVlICE9PSAiIil7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHZhciB2YWxpZGF0ZV9mb3JtID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBlcnIgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCcuX2Zvcm1fZXJyb3InKSwgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgIGlmICghc3VibWl0dGVkKSB7CiAgICAgICAgICAgIHN1Ym1pdHRlZCA9IHRydWU7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhbGxJbnB1dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGFsbElucHV0c1tpXTsKICAgICAgICAgICAgICAgIGlmIChuZWVkc192YWxpZGF0ZShpbnB1dCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQudHlwZSA9PSAndGV4dCcgfHwgaW5wdXQudHlwZSA9PSAnbnVtYmVyJyB8fCBpbnB1dC50eXBlID09ICd0aW1lJyB8fCBpbnB1dC50eXBlID09ICd0ZWwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnYmx1cicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUudHJpbSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVfZmllbGQodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBhZGRFdmVudChpbnB1dCwgJ2lucHV0JywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC50eXBlID09ICdyYWRpbycgfHwgaW5wdXQudHlwZSA9PSAnY2hlY2tib3gnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbihlbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0RWxlbWVudHNBcnJheShuYW1lKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICBmb3JtX3RvX3N1Ym1pdC5lbGVtZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdmFsdWVdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGlvcyA9IGdldEVsZW1lbnRzQXJyYXkoZWwubmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhZGlvcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KHJhZGlvc1tpXSwgJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZChlbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pKGlucHV0KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnRhZ05hbWUgPT0gJ1NFTEVDVCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoaW5wdXQsICdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnR5cGUgPT0gJ3RleHRhcmVhJyl7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVtb3ZlX3Rvb2x0aXBzKCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFsbElucHV0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICB2YXIgZWxlbSA9IGFsbElucHV0c1tpXTsKICAgICAgICAgICAgaWYgKG5lZWRzX3ZhbGlkYXRlKGVsZW0pKSB7CiAgICAgICAgICAgICAgICBpZiAoZWxlbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJzZWxlY3QiKSB7CiAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IGVsZW0udmFsdWUudHJpbSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFsaWRhdGVfZmllbGQoZWxlbSkgPyB0cnVlIDogbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIW5vX2Vycm9yICYmIGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgICBpZiAoIW5vX2Vycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlRXJyb3IgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCcuX2hhc19lcnJvcjpub3QoW2Rpc2FibGVkXSknKTsKICAgICAgICAgICAgaWYgKGZpcnN0Rm9jdXNhYmxlRXJyb3IgJiYgdHlwZW9mIGZpcnN0Rm9jdXNhYmxlRXJyb3IuZm9jdXMgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgIGZpcnN0Rm9jdXNhYmxlRXJyb3IuZm9jdXMoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXNpemVfdG9vbHRpcHMoKTsKICAgICAgICByZXR1cm4gbm9fZXJyb3I7CiAgICB9OwogICAgYWRkRXZlbnQod2luZG93LCAncmVzaXplJywgcmVzaXplX3Rvb2x0aXBzKTsKICAgIGFkZEV2ZW50KHdpbmRvdywgJ3Njcm9sbCcsIHJlc2l6ZV90b29sdGlwcyk7CgogICAgdmFyIF9mb3JtX3NlcmlhbGl6ZSA9IGZ1bmN0aW9uKGZvcm0pe2lmKCFmb3JtfHxmb3JtLm5vZGVOYW1lIT09IkZPUk0iKXtyZXR1cm4gfXZhciBpLGoscT1bXTtmb3IoaT0wO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKXtpZihmb3JtLmVsZW1lbnRzW2ldLm5hbWU9PT0iIil7Y29udGludWV9c3dpdGNoKGZvcm0uZWxlbWVudHNbaV0ubm9kZU5hbWUpe2Nhc2UiSU5QVVQiOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2UidGVsIjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS5wcmV2aW91c1NpYmxpbmcucXVlcnlTZWxlY3RvcignZGl2Lml0aV9fc2VsZWN0ZWQtZGlhbC1jb2RlJykuaW5uZXJUZXh0KStlbmNvZGVVUklDb21wb25lbnQoIiAiKStlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrO2Nhc2UidGV4dCI6Y2FzZSJudW1iZXIiOmNhc2UiZGF0ZSI6Y2FzZSJ0aW1lIjpjYXNlImhpZGRlbiI6Y2FzZSJwYXNzd29yZCI6Y2FzZSJidXR0b24iOmNhc2UicmVzZXQiOmNhc2Uic3VibWl0IjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrO2Nhc2UiY2hlY2tib3giOmNhc2UicmFkaW8iOmlmKGZvcm0uZWxlbWVudHNbaV0uY2hlY2tlZCl7cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKX1icmVhaztjYXNlImZpbGUiOmJyZWFrfWJyZWFrO2Nhc2UiVEVYVEFSRUEiOnEucHVzaChmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLnZhbHVlKSk7YnJlYWs7Y2FzZSJTRUxFQ1QiOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2Uic2VsZWN0LW9uZSI6cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKTticmVhaztjYXNlInNlbGVjdC1tdWx0aXBsZSI6Zm9yKGo9MDtqPGZvcm0uZWxlbWVudHNbaV0ub3B0aW9ucy5sZW5ndGg7aisrKXtpZihmb3JtLmVsZW1lbnRzW2ldLm9wdGlvbnNbal0uc2VsZWN0ZWQpe3EucHVzaChmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLm9wdGlvbnNbal0udmFsdWUpKX19YnJlYWt9YnJlYWs7Y2FzZSJCVVRUT04iOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2UicmVzZXQiOmNhc2Uic3VibWl0IjpjYXNlImJ1dHRvbiI6cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKTticmVha31icmVha319cmV0dXJuIHEuam9pbigiJiIpfTsKCiAgICBjb25zdCBmb3JtU3VwcG9ydHNQb3N0ID0gZmFsc2U7CiAgICB2YXIgZm9ybV9zdWJtaXQgPSBmdW5jdGlvbihlKSB7CgogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICBpZiAodmFsaWRhdGVfZm9ybSgpKSB7CiAgICAgICAgICAgIGlmKGZvcm1fdG9fc3VibWl0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9InBob25lIl0nKSAmJiB0eXBlb2YgaXRpICE9ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgICBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSJwaG9uZSJdJykudmFsdWUgPSBpdGkuZ2V0TnVtYmVyKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gdXNlIHRoaXMgdHJpY2sgdG8gZ2V0IHRoZSBzdWJtaXQgYnV0dG9uICYgZGlzYWJsZSBpdCB1c2luZyBwbGFpbiBqYXZhc2NyaXB0CiAgICAgICAgICAgIHZhciBzdWJtaXRCdXR0b24gPSBlLnRhcmdldC5xdWVyeVNlbGVjdG9yKCcjX2Zvcm1fMTlfc3VibWl0Jyk7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdwcm9jZXNzaW5nJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBfZm9ybV9zZXJpYWxpemUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19mb3JtXzE5XycpKS5yZXBsYWNlKC8lMEEvZywgJ1xcbicpOwogICAgICAgICAgICB2YXIgZXJyID0gZm9ybV90b19zdWJtaXQucXVlcnlTZWxlY3RvcignLl9mb3JtX2Vycm9yJyk7CiAgICAgICAgICAgIGVyciA\/IGVyci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVycikgOiBmYWxzZTsKICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gc3VibWl0Rm9ybSgpIHsKICAgICAgICAgICAgICAgIHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZXJpYWxpemVkKTsKICAgICAgICAgICAgICAgIHNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ2hpZGVCdXR0b24nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gewogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIkFjY2VwdCI6ICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgYm9keTogZm9ybURhdGEsCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAiUE9TVCIKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgbGV0IHBhZ2VVcmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgICAgICAgICAgaWYgKHBhZ2VVcmxQYXJhbXMuaGFzKCd0JykpIHsKICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCZWFyZXIgJyArIHBhZ2VVcmxQYXJhbXMuZ2V0KCd0Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL2ZvcnRpdXNjYXA2NDkzNy5hY3RpdmVob3N0ZWQuY29tL3Byb2MucGhwP2pzb25wPXRydWUnLCByZXF1ZXN0KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmb3JtU3VwcG9ydHNQb3N0KSB7CiAgICAgICAgICAgICAgICBzdWJtaXRGb3JtKCkudGhlbigoZGF0YSkgPT4gewogICAgICAgICAgICAgICAgICAgIGV2YWwoZGF0YS5qcyk7CiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgX3Nob3dfZXJyb3IoIjE5IiwgIlNvcnJ5LCB5b3VyIHN1Ym1pc3Npb24gZmFpbGVkLiBQbGVhc2UgdHJ5IGFnYWluLiIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfbG9hZF9zY3JpcHQoJ2h0dHBzOi8vZm9ydGl1c2NhcDY0OTM3LmFjdGl2ZWhvc3RlZC5jb20vcHJvYy5waHA\/JyArIHNlcmlhbGl6ZWQgKyAnJmpzb25wPXRydWUnLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgYWRkRXZlbnQoZm9ybV90b19zdWJtaXQsICdzdWJtaXQnLCBmb3JtX3N1Ym1pdCk7Cn0pKCk7Cgo8L3NjcmlwdD4KCg==[\/vc_raw_html][\/vc_column][\/vc_row]<\/p>\n","protected":false},"author":6,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-11155","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>- Confluence at Two Rivers<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.liveconfluence.com\/es\/11155-2\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"- Confluence at Two Rivers\" \/>\n<meta property=\"og:description\" content=\"[vc_row kd_background_image_position=&#8221;vc_row-bg-position-top&#8221;][vc_column][vc_raw_html css=&#8221;&#8221; el_class=&#8221;custom-ac-form&#8221;]PHN0eWxlPkBpbXBvcnQgdXJsKGh0dHBzOi8vZm9udHMuYnVubnkubmV0L2Nzcz9mYW1pbHk9aWJtLXBsZXgtc2Fuczo0MDAsNjAwKTs8L3N0eWxlPgo8c3R5bGU+Ci5fZm9ybV9oaWRle2Rpc3BsYXk6bm9uZTt2aXNpYmlsaXR5OmhpZGRlbn0uX2Zvcm1fc2hvd3tkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6dmlzaWJsZX0jX2Zvcm1fMTlfIC5fc3VibWl0LnByb2Nlc3Npbmd7cG9zaXRpb246cmVsYXRpdmV9I19mb3JtXzE5XyAuX3N1Ym1pdC5wcm9jZXNzaW5nOjpiZWZvcmV7Y29udGVudDoiIjt3aWR0aDoxZW07aGVpZ2h0OjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7dG9wOjUwJTtsZWZ0OjUwJTtib3JkZXI6ZG91YmxlIDNweCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMUMyQzVBLCAjMUMyQzVBKSwgY29uaWMtZ3JhZGllbnQoIzFDMkM1QSwgI0ZGRkZGRik7YmFja2dyb3VuZC1vcmlnaW46Ym9yZGVyLWJveDtiYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3gsIGJvcmRlci1ib3g7YW5pbWF0aW9uOjEyMDBtcyBlYXNlIDBzIGluZmluaXRlIG5vcm1hbCBub25lIHJ1bm5pbmcgX3NwaW59I19mb3JtXzE5XyAuX3N1Ym1pdC5wcm9jZXNzaW5nOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfUBrZXlmcmFtZXMgX3NwaW57MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoOTBkZWcpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoNDUwZGVnKX19I19mb3JtXzE5XyAuX2Nsb3NlLWljb257Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1pbWFnZTp1cmwoImh0dHBzOi8vZDIyNmFqNGFvMXQ2MXEuY2xvdWRmcm9udC5uZXQvZXNma3lqaDF1X2Zvcm1zLWNsb3NlLWRhcmsucG5nIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxNC4ycHggMTQuMnB4O3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7dG9wOjExcHg7cmlnaHQ6OXB4O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxNi4ycHg7aGVpZ2h0OjE2LjJweH0jX2Zvcm1fMTlfIC5fY2xvc2UtaWNvbjpiZWZvcmV7cG9zaXRpb246cmVsYXRpdmV9I19mb3JtXzE5XyAuX2Zvcm0tYm9keXttYXJnaW4tYm90dG9tOjMwcHh9I19mb3JtXzE5XyAuX2Zvcm0taW1hZ2UtbGVmdHt3aWR0aDoxNTBweDtmbG9hdDpsZWZ0fSNfZm9ybV8xOV8gLl9mb3JtLWNvbnRlbnQtcmlnaHR7bWFyZ2luLWxlZnQ6MTY0cHh9I19mb3JtXzE5XyAuX2Zvcm0tYnJhbmRpbmd7Y29sb3I6I2ZmZjtmb250LXNpemU6MTBweDtjbGVhcjpib3RoO3RleHQtYWxpZ246bGVmdDttYXJnaW4tdG9wOjMwcHg7Zm9udC13ZWlnaHQ6MTAwfSNfZm9ybV8xOV8gLl9mb3JtLWJyYW5kaW5nIC5fbG9nb3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEzMHB4O2hlaWdodDoxNHB4O21hcmdpbi10b3A6NnB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCJodHRwczovL2QyMjZhajRhbzF0NjFxLmNsb3VkZnJvbnQubmV0L2hoOXVqcWd2NV9hY2xvZ29fbGkucG5nIik7YmFja2dyb3VuZC1zaXplOjEzMHB4IGF1dG87YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fSNfZm9ybV8xOV8gLmZvcm0tc3Itb25seXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjFweDtwYWRkaW5nOjA7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO2NsaXA6cmVjdCgwLCAwLCAwLCAwKTtib3JkZXI6MH0jX2Zvcm1fMTlfIC5fZm9ybS1sYWJlbCwjX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50IC5fZm9ybS1sYWJlbHtmb250LXdlaWdodDpib2xkO21hcmdpbi1ib3R0b206NXB4O2Rpc3BsYXk6YmxvY2t9I19mb3JtXzE5Xy5fZGFyayAuX2Zvcm0tYnJhbmRpbmd7Y29sb3I6IzMzM30jX2Zvcm1fMTlfLl9kYXJrIC5fZm9ybS1icmFuZGluZyAuX2xvZ297YmFja2dyb3VuZC1pbWFnZTp1cmwoImh0dHBzOi8vZDIyNmFqNGFvMXQ2MXEuY2xvdWRmcm9udC5uZXQvamZ0cTJjOHNfYWNsb2dvX2RrLnBuZyIpfSNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnR7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbToxMHB4O2ZvbnQtc2l6ZTowO21heC13aWR0aDoxMDAlfSNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgKntmb250LXNpemU6MTRweH0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50Ll9jbGVhcntjbGVhcjpib3RoO3dpZHRoOjEwMCU7ZmxvYXQ6bm9uZX0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50Ll9jbGVhcjphZnRlcntjbGVhcjpsZWZ0fSNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgaW5wdXRbdHlwZT0idGV4dCJdLCNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgaW5wdXRbdHlwZT0iZGF0ZSJdLCNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgc2VsZWN0LCNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgdGV4dGFyZWE6bm90KC5nLXJlY2FwdGNoYS1yZXNwb25zZSl7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LWZhbWlseTppbmhlcml0fSNfZm9ybV8xOV8gLl9maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfSNfZm9ybV8xOV8gLl9pbmxpbmUtc3R5bGV7ZmxvYXQ6bGVmdH0jX2Zvcm1fMTlfIC5faW5saW5lLXN0eWxlIGlucHV0W3R5cGU9InRleHQiXXt3aWR0aDoxNTBweH0jX2Zvcm1fMTlfIC5faW5saW5lLXN0eWxlOm5vdCguX2NsZWFyKXttYXJnaW4tcmlnaHQ6MjBweH0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50IGltZy5fZm9ybS1pbWFnZXttYXgtd2lkdGg6MTAwJX0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50IC5fZm9ybS1maWVsZHNldHtib3JkZXI6MDtwYWRkaW5nOjAuMDFlbSAwIDAgMDttYXJnaW46MDttaW4td2lkdGg6MH0jX2Zvcm1fMTlfIC5fY2xlYXItZWxlbWVudHtjbGVhcjpsZWZ0fSNfZm9ybV8xOV8gLl9mdWxsX3dpZHRoe3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX2Zvcm1fZnVsbF9maWVsZHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToxMHB4fSNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGV4dCJdLl9oYXNfZXJyb3IsI19mb3JtXzE5XyB0ZXh0YXJlYS5faGFzX2Vycm9ye2JvcmRlcjojRjM3QzdCIDFweCBzb2xpZH0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9ImNoZWNrYm94Il0uX2hhc19lcnJvcntvdXRsaW5lOiNGMzdDN0IgMXB4IHNvbGlkfSNfZm9ybV8xOV8gLl9zaG93X2JlX2Vycm9ye2Zsb2F0OmxlZnR9I19mb3JtXzE5XyAuX2Vycm9ye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjE0cHg7ei1pbmRleDoxMDAwMDAwMX0jX2Zvcm1fMTlfIC5fZXJyb3IuX2Fib3Zle3BhZGRpbmctYm90dG9tOjRweDtib3R0b206MzlweDtyaWdodDowfSNfZm9ybV8xOV8gLl9lcnJvci5fYmVsb3d7cGFkZGluZy10b3A6OHB4O3RvcDoxMDAlO3JpZ2h0OjB9I19mb3JtXzE5XyAuX2Vycm9yLl9hYm92ZSAuX2Vycm9yLWFycm93e2JvdHRvbTotNHB4O3JpZ2h0OjE1cHg7Ym9yZGVyLWxlZnQ6OHB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo4cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDo4cHggc29saWQgI0ZGRERERH0jX2Zvcm1fMTlfIC5fZXJyb3IuX2JlbG93IC5fZXJyb3ItYXJyb3d7dG9wOjA7cmlnaHQ6MTVweDtib3JkZXItbGVmdDo4cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjhweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjhweCBzb2xpZCAjRkZEREREfSNfZm9ybV8xOV8gLl9lcnJvci1pbm5lcntwYWRkaW5nOjEycHggMTJweCAxMnB4IDM2cHg7YmFja2dyb3VuZC1jb2xvcjojRkZEREREO2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDhDMTYgMTIuNDE4MyAxMi40MTgzIDE2IDggMTZDMy41ODE3MiAxNiAwIDEyLjQxODMgMCA4QzAgMy41ODE3MiAzLjU4MTcyIDAgOCAwQzEyLjQxODMgMCAxNiAzLjU4MTcyIDE2IDhaTTkgM1Y5SDdWM0g5Wk05IDEzVjExSDdWMTNIOVonIGZpbGw9JyUyM0NBMDAwMCcvJTNFJTNDL3N2ZyUzRSIpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEycHggY2VudGVyO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtZmFtaWx5OmFyaWFsLCBzYW5zLXNlcmlmO2ZvbnQtd2VpZ2h0OjYwMDtsaW5lLWhlaWdodDoxNnB4O2NvbG9yOiMwMDA7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMzEsIDMzLCA0MSwgMC4yOTgyOTUpfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDozMTlweCl7I19mb3JtXzE5XyAuX2Vycm9yLWlubmVye3BhZGRpbmc6N3B4IDdweCA3cHggMjVweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxMnB4O2JhY2tncm91bmQtcG9zaXRpb246NHB4IGNlbnRlcjttYXgtd2lkdGg6MTAwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfX0jX2Zvcm1fMTlfIC5fZXJyb3ItaW5uZXIuX2Zvcm1fZXJyb3J7bWFyZ2luLWJvdHRvbTo1cHg7dGV4dC1hbGlnbjpsZWZ0fSNfZm9ybV8xOV8gLl9idXR0b24td3JhcHBlciAuX2Vycm9yLWlubmVyLl9mb3JtX2Vycm9ye3Bvc2l0aW9uOnN0YXRpY30jX2Zvcm1fMTlfIC5fZXJyb3ItaW5uZXIuX25vX2Fycm93e21hcmdpbi1ib3R0b206MTBweH0jX2Zvcm1fMTlfIC5fZXJyb3ItYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDtoZWlnaHQ6MH0jX2Zvcm1fMTlfIC5fZXJyb3ItaHRtbHttYXJnaW4tYm90dG9tOjEwcHh9LnBpa2Etc2luZ2xle3otaW5kZXg6MTAwMDAwMDEgIWltcG9ydGFudH0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9InRleHQiXS5kYXRldGltZV9kYXRle3dpZHRoOjY5JTtkaXNwbGF5OmlubGluZX0jX2Zvcm1fMTlfIHNlbGVjdC5kYXRldGltZV90aW1le3dpZHRoOjI5JTtkaXNwbGF5OmlubGluZTtoZWlnaHQ6MzJweH0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9ImRhdGUiXS5kYXRldGltZV9kYXRle3dpZHRoOjY5JTtkaXNwbGF5OmlubGluZS1mbGV4fSNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGltZSJdLmRhdGV0aW1lX3RpbWV7d2lkdGg6MjklO2Rpc3BsYXk6aW5saW5lLWZsZXh9QG1lZGlhIChtaW4td2lkdGg6MzIwcHgpIGFuZCAobWF4LXdpZHRoOjY2N3B4KXs6Oi13ZWJraXQtc2Nyb2xsYmFye2Rpc3BsYXk6bm9uZX0jX2Zvcm1fMTlfICp7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc2l6ZToxZW19I19mb3JtXzE5XyAuX2Zvcm0tY29udGVudHttYXJnaW46MDt3aWR0aDoxMDAlfSNfZm9ybV8xOV8gLl9mb3JtLWlubmVye2Rpc3BsYXk6YmxvY2s7bWluLXdpZHRoOjEwMCV9I19mb3JtXzE5XyAuX2Zvcm0tdGl0bGUsI19mb3JtXzE5XyAuX2lubGluZS1zdHlsZXttYXJnaW4tdG9wOjA7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MH0jX2Zvcm1fMTlfIC5fZm9ybS10aXRsZXtmb250LXNpemU6MS4yZW19I19mb3JtXzE5XyAuX2Zvcm1fZWxlbWVudHttYXJnaW46MCAwIDIwcHg7cGFkZGluZzowO3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX2Zvcm0tZWxlbWVudCwjX2Zvcm1fMTlfIC5faW5saW5lLXN0eWxlLCNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGV4dCJdLCNfZm9ybV8xOV8gbGFiZWwsI19mb3JtXzE5XyBwLCNfZm9ybV8xOV8gdGV4dGFyZWE6bm90KC5nLXJlY2FwdGNoYS1yZXNwb25zZSl7ZmxvYXQ6bm9uZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX3Jvdy5fY2hlY2tib3gtcmFkaW8gbGFiZWx7ZGlzcGxheTppbmxpbmV9I19mb3JtXzE5XyAuX3JvdywjX2Zvcm1fMTlfIHAsI19mb3JtXzE5XyBsYWJlbHttYXJnaW4tYm90dG9tOjAuN2VtO3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX3JvdyBpbnB1dFt0eXBlPSJjaGVja2JveCJdLCNfZm9ybV8xOV8gLl9yb3cgaW5wdXRbdHlwZT0icmFkaW8iXXttYXJnaW46MCAhaW1wb3J0YW50O3ZlcnRpY2FsLWFsaWduOm1pZGRsZSAhaW1wb3J0YW50fSNfZm9ybV8xOV8gLl9yb3cgaW5wdXRbdHlwZT0iY2hlY2tib3giXStzcGFuIGxhYmVse2Rpc3BsYXk6aW5saW5lfSNfZm9ybV8xOV8gLl9yb3cgc3BhbiBsYWJlbHttYXJnaW46MCAhaW1wb3J0YW50O3dpZHRoOmluaXRpYWwgIWltcG9ydGFudDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUgIWltcG9ydGFudH0jX2Zvcm1fMTlfIC5fZm9ybS1pbWFnZXttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0byAhaW1wb3J0YW50fSNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGV4dCJde3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxLjNlbTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9InJhZGlvIl0sI19mb3JtXzE5XyBpbnB1dFt0eXBlPSJjaGVja2JveCJde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEuM2VtO2hlaWdodDoxLjNlbTtmb250LXNpemU6MWVtO21hcmdpbjowIDAuM2VtIDAgMDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0jX2Zvcm1fMTlfIGJ1dHRvblt0eXBlPSJzdWJtaXQiXXtwYWRkaW5nOjIwcHg7Zm9udC1zaXplOjEuNWVtfSNfZm9ybV8xOV8gLl9pbmxpbmUtc3R5bGV7bWFyZ2luOjIwcHggMCAwICFpbXBvcnRhbnR9I19mb3JtXzE5XyAuX2lubGluZS1zdHlsZSBpbnB1dFt0eXBlPSJ0ZXh0Il17d2lkdGg6MTAwJX19I19mb3JtXzE5XyAuc21zX2NvbnNlbnRfY2hlY2tib3h7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nOjIwcHggMH0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCBpbnB1dFt0eXBlPSJjaGVja2JveCJde2Zsb2F0OmxlZnQ7bWFyZ2luOjVweCAxMHB4IDEwcHggMH0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCAuc21zX2NvbnNlbnRfbWVzc2FnZXtkaXNwbGF5OmlubGluZTtmbG9hdDpsZWZ0O3RleHQtYWxpZ246bGVmdDttYXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzdEODc5OX0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCAuc21zX2NvbnNlbnRfbWVzc2FnZS5zbXNfY29uc2VudF9taW5pe3dpZHRoOjkwJX0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCAuX2Vycm9yLl9hYm92ZXtyaWdodDphdXRvO2JvdHRvbTowfSNfZm9ybV8xOV8gLnNtc19jb25zZW50X2NoZWNrYm94IC5fZXJyb3IuX2Fib3ZlIC5fZXJyb3ItYXJyb3d7cmlnaHQ6YXV0bztsZWZ0OjVweH1AbWVkaWEgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpeyNfZm9ybV8xOV8gLnNtc19jb25zZW50X2NoZWNrYm94IC5fZXJyb3IuX2Fib3Zle3RvcDotMzBweDtsZWZ0OjA7Ym90dG9tOmF1dG99fSNfZm9ybV8xOV8gLmZpZWxkLXJlcXVpcmVke2NvbG9yOiNGRjAwMDB9I19mb3JtXzE5XyAuX3Nob3dfYmVfZXJyb3J7bWluLXdpZHRoOjEwMCV9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0sI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWNvbnRlbnR7Zm9udC1mYW1pbHk6IklCTSBQbGV4IFNhbnMiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZ9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9yb3cgc3Bhbjpub3QoLmZpZWxkLXJlcXVpcmVkKSwjX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX3JvdyBsYWJlbHtmb250LWZhbWlseToiSUJNIFBsZXggU2FucyIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42ZW19I19mb3JtXzE5X19pbmxpbmVmb3JtIGlucHV0W3R5cGU9InRleHQiXSwjX2Zvcm1fMTlfX2lubGluZWZvcm0gaW5wdXRbdHlwZT0iZGF0ZSJdLCNfZm9ybV8xOV9faW5saW5lZm9ybSBpbnB1dFt0eXBlPSJ0ZWwiXSwjX2Zvcm1fMTlfX2lubGluZWZvcm0gc2VsZWN0LCNfZm9ybV8xOV9faW5saW5lZm9ybSB0ZXh0YXJlYTpub3QoLmctcmVjYXB0Y2hhLXJlc3BvbnNlKXtmb250LWZhbWlseToiSUJNIFBsZXggU2FucyIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7Zm9udC1jb2xvcjojMDAwMDAwO2xpbmUtaGVpZ2h0OjEuNmVtfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5faHRtbC1jb2RlICo6bm90KGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpLCNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5zbXNfY29uc2VudF9tZXNzYWdlLCNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS10aGFuay15b3V7Zm9udC1mYW1pbHk6IklCTSBQbGV4IFNhbnMiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZ9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWxhYmVsLCNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1lbWFpbGlkZW50aWZpZXIsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWNoZWNrYm94LW9wdGlvbi1sYWJlbHtmb250LWZhbWlseToiSUJNIFBsZXggU2FucyIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS42ZW19I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDEsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDIsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDMsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDQsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDUsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDYsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLXRpdGxle2ZvbnQtc2l6ZToyMnB4O2xpbmUtaGVpZ2h0Om5vcm1hbDtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTowO2Rpc3BsYXk6YmxvY2t9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWJyYW5kaW5ne2ZvbnQtZmFtaWx5OiJJQk0gUGxleCBTYW5zIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjEwMDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWRlY29yYXRpb246bm9uZX0jX2Zvcm1fMTlfOmJlZm9yZSwjX2Zvcm1fMTlfOmFmdGVye2NvbnRlbnQ6IiAiO2Rpc3BsYXk6dGFibGV9I19mb3JtXzE5XzphZnRlcntjbGVhcjpib3RofSNfZm9ybV8xOV8uX2lubGluZS1zdHlsZXt3aWR0aDphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrfSNfZm9ybV8xOV8uX2lubGluZS1zdHlsZSBpbnB1dFt0eXBlPSJ0ZXh0Il0sI19mb3JtXzE5Xy5faW5saW5lLXN0eWxlIGlucHV0W3R5cGU9ImRhdGUiXXtwYWRkaW5nOjEwcHggMTJweH0jX2Zvcm1fMTlfLl9pbmxpbmUtc3R5bGUgYnV0dG9uLl9pbmxpbmUtc3R5bGV7cG9zaXRpb246cmVsYXRpdmU7dG9wOjI3cHh9I19mb3JtXzE5Xy5faW5saW5lLXN0eWxlIHB7bWFyZ2luOjB9I19mb3JtXzE5Xy5faW5saW5lLXN0eWxlIC5fYnV0dG9uLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjE2cHggMTIuNXB4IDAgMjBweH0jX2Zvcm1fMTlfIC5fZm9ybS10aGFuay15b3V7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowO3JpZ2h0OjA7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE4cHh9I19mb3JtXzE5XyAuX2Zvcm0tcGMtY29uZmlybWF0aW9uIC5fc3VibWl0e21hcmdpbi10b3A6MTZweH1AbWVkaWEgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpeyNfZm9ybV8xOV8uX2lubGluZS1mb3JtLl9pbmxpbmUtc3R5bGUgLl9pbmxpbmUtc3R5bGUuX2J1dHRvbi13cmFwcGVye21hcmdpbi10b3A6MjBweCAhaW1wb3J0YW50O21hcmdpbi1sZWZ0OjAgIWltcG9ydGFudH19I19mb3JtXzE5XyAuaXRpe3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuaXRpLml0aS0tYWxsb3ctZHJvcGRvd24uaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGV7d2lkdGg6MTAwJX0jX2Zvcm1fMTlfIC5pdGkgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6Izk3OTc5NyAxcHggc29saWQ7Ym9yZGVyLXJhZGl1czo0cHh9I19mb3JtXzE5XyAuaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGUgLml0aV9fc2VsZWN0ZWQtZmxhZ3tiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7Ym9yZGVyLXJhZGl1czo0cHh9I19mb3JtXzE5XyAuaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGUgLml0aV9fc2VsZWN0ZWQtZmxhZzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNSl9I19mb3JtXzE5XyAuaXRpX19jb3VudHJ5LWxpc3R7Ym9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo0cHg7bWluLXdpZHRoOjQ2MHB4fSNfZm9ybV8xOV8gLml0aV9fY291bnRyeS1saXN0LS1kcm9wdXB7bWFyZ2luLWJvdHRvbTo0cHh9I19mb3JtXzE5XyAucGhvbmUtZXJyb3ItaGlkZGVue2Rpc3BsYXk6bm9uZX0jX2Zvcm1fMTlfIC5waG9uZS1lcnJvcntjb2xvcjojRTQwRTQ5fSNfZm9ybV8xOV8gLnBob25lLWlucHV0LWVycm9ye2JvcmRlcjoxcHggc29saWQgI0U0MEU0OSAhaW1wb3J0YW50fSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgZmllbGRzZXR7bWFyZ2luOjA7bWFyZ2luLWJvdHRvbToxLjE0Mjg1NzE0MjllbTtib3JkZXI6bm9uZTtwYWRkaW5nOjB9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWNvbnRlbnQgLl9mb3JtLWxpc3Qtc3Vic2NyaXB0aW9ucy1maWVsZCBmaWVsZHNldDpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIGxlZ2VuZHttYXJnaW4tYm90dG9tOjEuMTQyODU3MTQyOWVtfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgbGFiZWx7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWFyZ2luLWJvdHRvbTowLjg1NzE0Mjg1NzFlbX0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIGxhYmVsOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgaW5wdXR7bWFyZ2luOjA7bWFyZ2luLXJpZ2h0OjhweH0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIC5fZm9ybS1jaGVja2JveC1vcHRpb24tbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDo0MDA7bWFyZ2luLXRvcDotNHB4fSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgLl9mb3JtLWNoZWNrYm94LW9wdGlvbi1sYWJlbC13aXRoLWRlc2NyaXB0aW9ue2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi10b3A6LTRweH0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIC5fZm9ybS1jaGVja2JveC1vcHRpb24tZGVzY3JpcHRpb257bWFyZ2luOjA7Zm9udC1zaXplOjAuODU3MTQyODU3MWVtfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgLl9mb3JtLXN1YnNjcmlwdGlvbnMtdW5zdWJzY3JpYmUtYWxsLWRlc2NyaXB0aW9ue2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW4tdG9wOi0ycHh9PC9zdHlsZT4KPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249Imh0dHBzOi8vZm9ydGl1c2NhcDY0OTM3LmFjdGl2ZWhvc3RlZC5jb20vcHJvYy5waHAiIGlkPSJfZm9ybV8xOV8iIGNsYXNzPSJfZm9ybSBfZm9ybV8xOSBfaW5saW5lLWZvcm0gIF9kYXJrIiBub3ZhbGlkYXRlPSIiIGRhdGEtc3R5bGVzLXZlcnNpb249IjUiPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InUiIHZhbHVlPSIxOSI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZiIgdmFsdWU9IjE5Ij4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzIj4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjIiB2YWx1ZT0iMCI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibSIgdmFsdWU9IjAiPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InN1YiI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idiIgdmFsdWU9IjIiPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9yIiB2YWx1ZT0iN2YzMDBlM2YtMzg2OC00YzY3LWIwYTUtYmZkMTU2N2RiYjc1Ij4KICA8ZGl2IGNsYXNzPSJfZm9ybS1jb250ZW50Ij4KCgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iX2Zvcm1fZWxlbWVudCBfeDQ4MjM0MjA3IHZjX2NvbHVtbl9jb250YWluZXIgdmNfY29sLXNtLTUiPgogICAgICA8L2xhYmVsPgogICAgICA8ZGl2IGNsYXNzPSJfZmllbGQtd3JhcHBlciI+CiAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJmdWxsbmFtZSIgbmFtZT0iZnVsbG5hbWUiIHBsYWNlaG9sZGVyPSJTdSBub21icmUqIiByZXF1aXJlZD0iIj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Il9mb3JtX2VsZW1lbnQgX3g4NzkzMTMzMSB2Y19jb2x1bW5fY29udGFpbmVyIHZjX2NvbC1zbS01Ij4KICAgIDxkaXYgY2xhc3M9Il9maWVsZC13cmFwcGVyIj4KICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJlbWFpbCIgbmFtZT0iZW1haWwiIHBsYWNlaG9sZGVyPSJJbnRyb2R1emNhIHN1IGNvcnJlbyBlbGVjdHLDs25pY28qIiByZXF1aXJlZD0iIj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9Il9idXR0b24td3JhcHBlciB2Y19jb2x1bW5fY29udGFpbmVyIHZjX2NvbC1zbS0yIj4KICAgIDxidXR0b24gaWQ9Il9mb3JtXzE5X3N1Ym1pdCIgY2xhc3M9Il9zdWJtaXQiIHR5cGU9InN1Ym1pdCI+CiBSZWdpc3RyYXJzZQogICAgPC9idXR0b24+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iX2NsZWFyLWVsZW1lbnQiPgogIDwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iX2Zvcm0tdGhhbmsteW91IiBzdHlsZT0iZGlzcGxheTpub25lOyI+CjwvZGl2Pgo8L2Zvcm0+PHNjcmlwdD4Kd2luZG93LmNmaWVsZHMgPSBbXTsKd2luZG93Ll9zaG93X3RoYW5rX3lvdSA9IGZ1bmN0aW9uKGlkLCBtZXNzYWdlLCB0cmFja2NtcF91cmwsIGVtYWlsKSB7CiAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8nICsgaWQgKyAnXycpLCB0aGFua195b3UgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS10aGFuay15b3UnKTsKICAgIGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLWNvbnRlbnQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgdGhhbmtfeW91LmlubmVySFRNTCA9IG1lc3NhZ2U7CiAgICB0aGFua195b3Uuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICBjb25zdCB2Z29BbGlhcyA9IHR5cGVvZiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXMgPT09ICd1bmRlZmluZWQnID8gJ3ZnbycgOiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXM7CiAgICB2YXIgdmlzaXRvck9iamVjdCA9IHdpbmRvd1t2Z29BbGlhc107CiAgICBpZiAoZW1haWwgJiYgdHlwZW9mIHZpc2l0b3JPYmplY3QgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgdmlzaXRvck9iamVjdCgnc2V0RW1haWwnLCBlbWFpbCk7CiAgICAgICAgdmlzaXRvck9iamVjdCgndXBkYXRlJyk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZih0cmFja2NtcF91cmwpICE9ICd1bmRlZmluZWQnICYmIHRyYWNrY21wX3VybCkgewogICAgICAgIC8vIFNpdGUgdHJhY2tpbmcgVVJMIHRvIHVzZSBhZnRlciBpbmxpbmUgZm9ybSBzdWJtaXNzaW9uLgogICAgICAgIF9sb2FkX3NjcmlwdCh0cmFja2NtcF91cmwpOwogICAgfQogICAgaWYgKHR5cGVvZiB3aW5kb3cuX2Zvcm1fY2FsbGJhY2sgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuX2Zvcm1fY2FsbGJhY2soaWQpOwogICAgdGhhbmtfeW91LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTsKICAgIHRoYW5rX3lvdS5mb2N1cygpOwp9Owp3aW5kb3cuX3Nob3dfdW5zdWJzY3JpYmUgPSBmdW5jdGlvbihpZCwgbWVzc2FnZSwgdHJhY2tjbXBfdXJsLCBlbWFpbCkgewogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX2Zvcm1fJyArIGlkICsgJ18nKSwgdW5zdWIgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS10aGFuay15b3UnKTsKICAgIHZhciBicmFuZGluZyA9IGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLWJyYW5kaW5nJyk7CiAgICBpZiAoYnJhbmRpbmcpIHsKICAgICAgICBicmFuZGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQogICAgZm9ybS5xdWVyeVNlbGVjdG9yKCcuX2Zvcm0tY29udGVudCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB1bnN1Yi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIGZvcm0uaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsIG1lc3NhZ2UpCiAgICBjb25zdCB2Z29BbGlhcyA9IHR5cGVvZiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXMgPT09ICd1bmRlZmluZWQnID8gJ3ZnbycgOiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXM7CiAgICB2YXIgdmlzaXRvck9iamVjdCA9IHdpbmRvd1t2Z29BbGlhc107CiAgICBpZiAoZW1haWwgJiYgdHlwZW9mIHZpc2l0b3JPYmplY3QgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgdmlzaXRvck9iamVjdCgnc2V0RW1haWwnLCBlbWFpbCk7CiAgICAgICAgdmlzaXRvck9iamVjdCgndXBkYXRlJyk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZih0cmFja2NtcF91cmwpICE9ICd1bmRlZmluZWQnICYmIHRyYWNrY21wX3VybCkgewogICAgICAgIC8vIFNpdGUgdHJhY2tpbmcgVVJMIHRvIHVzZSBhZnRlciBpbmxpbmUgZm9ybSBzdWJtaXNzaW9uLgogICAgICAgIF9sb2FkX3NjcmlwdCh0cmFja2NtcF91cmwpOwogICAgfQogICAgaWYgKHR5cGVvZiB3aW5kb3cuX2Zvcm1fY2FsbGJhY2sgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuX2Zvcm1fY2FsbGJhY2soaWQpOwp9Owp3aW5kb3cuX3Nob3dfZXJyb3IgPSBmdW5jdGlvbihpZCwgbWVzc2FnZSwgaHRtbCkgewogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX2Zvcm1fJyArIGlkICsgJ18nKSwKICAgICAgICBlcnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKICAgICAgICBidXR0b24gPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPSJzdWJtaXQiXScpLAogICAgICAgIG9sZF9lcnJvciA9IGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtX2Vycm9yJyk7CiAgICBpZiAob2xkX2Vycm9yKSBvbGRfZXJyb3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRfZXJyb3IpOwogICAgZXJyLmlubmVySFRNTCA9IG1lc3NhZ2U7CiAgICBlcnIuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lciBfZm9ybV9lcnJvciBfbm9fYXJyb3cnOwogICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gJ19mb3JtLWlubmVyIF9zaG93X2JlX2Vycm9yJzsKICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoZXJyKTsKICAgIGJ1dHRvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLCBidXR0b24pOwogICAgdmFyIHN1Ym1pdEJ1dHRvbiA9IGZvcm0ucXVlcnlTZWxlY3RvcignW2lkXj0iX2Zvcm0iXVtpZCQ9Il9zdWJtaXQiXScpOwogICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICBzdWJtaXRCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgncHJvY2Vzc2luZycpOwogICAgaWYgKGh0bWwpIHsKICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICdfZXJyb3ItaHRtbCc7CiAgICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgZXJyLmFwcGVuZENoaWxkKGRpdik7CiAgICB9Cn07CndpbmRvdy5fc2hvd19wY19jb25maXJtYXRpb24gPSBmdW5jdGlvbihpZCwgaGVhZGVyLCBkZXRhaWwsIHNob3csIGVtYWlsKSB7CiAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8nICsgaWQgKyAnXycpLCBwY19jb25maXJtYXRpb24gPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS1wYy1jb25maXJtYXRpb24nKTsKICAgIGlmIChwY19jb25maXJtYXRpb24uc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7CiAgICAgICAgZm9ybS5xdWVyeVNlbGVjdG9yKCcuX2Zvcm0tY29udGVudCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgcGNfY29uZmlybWF0aW9uLmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPSdfZm9ybS10aXRsZSc+IiArIGhlYWRlciArICI8L2Rpdj4iICsgIjxwPiIgKyBkZXRhaWwgKyAiPC9wPiIgKwogICAgICAgICI8YnV0dG9uIGNsYXNzPSdfc3VibWl0JyBpZD0naGlkZUJ1dHRvbic+TWFuYWdlIHByZWZlcmVuY2VzPC9idXR0b24+IjsKICAgICAgICBwY19jb25maXJtYXRpb24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgdmFyIG1wID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT0ibXAiXScpOwogICAgICAgIG1wLnZhbHVlID0gJzAnOwogICAgfSBlbHNlIHsKICAgICAgICBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS1jb250ZW50Jykuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOwogICAgICAgIHBjX2NvbmZpcm1hdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQoKICAgIHZhciBoaWRlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hpZGVCdXR0b24nKTsKICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lciB0byB0aGUgYnV0dG9uCiAgICBoaWRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHN1Ym1pdEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNfZm9ybV8xOV9zdWJtaXQnKTsKICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICBzdWJtaXRCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgncHJvY2Vzc2luZycpOwogICAgICAgIHZhciBtcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9Im1wIl0nKTsKICAgICAgICBtcC52YWx1ZSA9ICcxJzsKICAgICAgICBjb25zdCBjYWNoZUJ1c3RlciA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpOwogICAgICAgIGNhY2hlQnVzdGVyLnNlYXJjaFBhcmFtcy5zZXQoJ3YnLCBuZXcgRGF0ZSgpLmdldFRpbWUoKSk7CiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBjYWNoZUJ1c3Rlci50b1N0cmluZygpOwogICAgfSk7CgogICAgY29uc3QgdmdvQWxpYXMgPSB0eXBlb2YgdmlzaXRvckdsb2JhbE9iamVjdEFsaWFzID09PSAndW5kZWZpbmVkJyA\/ICd2Z28nIDogdmlzaXRvckdsb2JhbE9iamVjdEFsaWFzOwogICAgdmFyIHZpc2l0b3JPYmplY3QgPSB3aW5kb3dbdmdvQWxpYXNdOwogICAgaWYgKGVtYWlsICYmIHR5cGVvZiB2aXNpdG9yT2JqZWN0ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHZpc2l0b3JPYmplY3QoJ3NldEVtYWlsJywgZW1haWwpOwogICAgICAgIHZpc2l0b3JPYmplY3QoJ3VwZGF0ZScpOwogICAgfSBlbHNlIGlmICh0eXBlb2YodHJhY2tjbXBfdXJsKSAhPSAndW5kZWZpbmVkJyAmJiB0cmFja2NtcF91cmwpIHsKICAgICAgICAvLyBTaXRlIHRyYWNraW5nIFVSTCB0byB1c2UgYWZ0ZXIgaW5saW5lIGZvcm0gc3VibWlzc2lvbi4KICAgICAgICBfbG9hZF9zY3JpcHQodHJhY2tjbXBfdXJsKTsKICAgIH0KICAgIGlmICh0eXBlb2Ygd2luZG93Ll9mb3JtX2NhbGxiYWNrICE9PSAndW5kZWZpbmVkJykgd2luZG93Ll9mb3JtX2NhbGxiYWNrKGlkKTsKfTsKd2luZG93Ll9sb2FkX3NjcmlwdCA9IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2ssIGlzU3VibWl0KSB7CiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKSwgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIHIgPSBmYWxzZTsKICAgIHZhciBzdWJtaXRCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjX2Zvcm1fMTlfc3VibWl0Jyk7CiAgICBzY3JpcHQuY2hhcnNldCA9ICd1dGYtOCc7CiAgICBzY3JpcHQuc3JjID0gdXJsOwogICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFyICYmICghdGhpcy5yZWFkeVN0YXRlIHx8IHRoaXMucmVhZHlTdGF0ZSA9PSAnY29tcGxldGUnKSkgewogICAgICAgICAgICAgICAgciA9IHRydWU7CiAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0KICAgIHNjcmlwdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGlzU3VibWl0KSB7CiAgICAgICAgICAgIGlmIChzY3JpcHQuc3JjLmxlbmd0aCA+IDEwMDAwKSB7CiAgICAgICAgICAgICAgICBfc2hvd19lcnJvcigiMTkiLCAiU29ycnksIHlvdXIgc3VibWlzc2lvbiBmYWlsZWQuIFBsZWFzZSBzaG9ydGVuIHlvdXIgcmVzcG9uc2VzIGFuZCB0cnkgYWdhaW4uIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfc2hvd19lcnJvcigiMTkiLCAiU29ycnksIHlvdXIgc3VibWlzc2lvbiBmYWlsZWQuIFBsZWFzZSB0cnkgYWdhaW4uIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdwcm9jZXNzaW5nJyk7CiAgICAgICAgfQogICAgfQoKICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKfTsKKGZ1bmN0aW9uKCkgewogICAgdmFyIGl0aTsKICAgIGlmICh3aW5kb3cubG9jYXRpb24uc2VhcmNoLnNlYXJjaCgiZXhjbHVkZWZvcm0iKSAhPT0gLTEpIHJldHVybiBmYWxzZTsKICAgIHZhciBnZXRDb29raWUgPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDsgKScgKyBuYW1lICsgJz0oW147XSspJykpOwogICAgICAgIHJldHVybiBtYXRjaCA\/IG1hdGNoWzJdIDogbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7CiAgICB9CiAgICB2YXIgc2V0Q29va2llID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHsKICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKICAgICAgICB2YXIgdGltZSA9IG5vdy5nZXRUaW1lKCk7CiAgICAgICAgdmFyIGV4cGlyZVRpbWUgPSB0aW1lICsgMTAwMCAqIDYwICogNjAgKiAyNCAqIDM2NTsKICAgICAgICBub3cuc2V0VGltZShleHBpcmVUaW1lKTsKICAgICAgICBkb2N1bWVudC5jb29raWUgPSBuYW1lICsgJz0nICsgdmFsdWUgKyAnOyBleHBpcmVzPScgKyBub3cgKyAnO3BhdGg9LzsgU2VjdXJlOyBTYW1lU2l0ZT1MYXg7JzsKICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCB2YWx1ZSk7CiAgICB9CiAgICB2YXIgYWRkRXZlbnQgPSBmdW5jdGlvbihlbGVtZW50LCBldmVudCwgZnVuYykgewogICAgICAgIGlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgb2xkRnVuYyA9IGVsZW1lbnRbJ29uJyArIGV2ZW50XTsKICAgICAgICAgICAgZWxlbWVudFsnb24nICsgZXZlbnRdID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBvbGRGdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgdmFyIF9yZW1vdmVkID0gZmFsc2U7CiAgICAgICAgdmFyIGZvcm1fdG9fc3VibWl0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19mb3JtXzE5XycpOwogICAgdmFyIGFsbElucHV0cyA9IGZvcm1fdG9fc3VibWl0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJyksIHRvb2x0aXBzID0gW10sIHN1Ym1pdHRlZCA9IGZhbHNlOwoKICAgIHZhciBnZXRVcmxQYXJhbSA9IGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnZW1haWwnKSB7CiAgICAgICAgICAgIHZhciBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgICAgICByZXR1cm4gcGFyYW1zLmdldChuYW1lKSB8fCBmYWxzZTsKICAgICAgICB9CiAgICAgICAgLy8gZW1haWwgaXMgYSBzcGVjaWFsIGNhc2UgYmVjYXVzZSBhIHBsdXMgaXMgdmFsaWQgaW4gdGhlIGVtYWlsIGFkZHJlc3MKICAgICAgICB2YXIgcVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CiAgICAgICAgaWYgKCFxU3RyaW5nKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSBxU3RyaW5nLnN1YnN0cigxKS5zcGxpdCgnJicpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tpXS5zcGxpdCgnPScpOwogICAgICAgICAgICBpZiAocGFyYW1ldGVyWzBdLnRvTG93ZXJDYXNlKCkgPT09ICdlbWFpbCcpIHsKICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJbMV0gPT09IHVuZGVmaW5lZCA\/IHRydWUgOiBkZWNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyWzFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHZhciBhY2N0RGF0ZUZvcm1hdCA9ICIlbS8lZC8lWSI7CiAgICB2YXIgZ2V0Tm9ybWFsaXplZERhdGUgPSBmdW5jdGlvbihkYXRlLCBhY2N0Rm9ybWF0KSB7CiAgICAgICAgdmFyIGRlY29kZWREYXRlID0gZGVjb2RlVVJJQ29tcG9uZW50KGRhdGUpOwogICAgICAgIGlmIChhY2N0Rm9ybWF0ICYmIGFjY3RGb3JtYXQubWF0Y2goLyglZHwlZSkuKiVtL2dpKSAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gZGVjb2RlZERhdGUucmVwbGFjZSgvKFxkezJ9KS4qKFxkezJ9KS4qKFxkezR9KS9nLCAnJDMtJDItJDEnKTsKICAgICAgICB9IGVsc2UgaWYgKERhdGUucGFyc2UoZGVjb2RlZERhdGUpKSB7CiAgICAgICAgICAgIHZhciBkYXRlT2JqID0gbmV3IERhdGUoZGVjb2RlZERhdGUpOwogICAgICAgICAgICB2YXIgeWVhciA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKTsKICAgICAgICAgICAgdmFyIG1vbnRoID0gZGF0ZU9iai5nZXRNb250aCgpICsgMTsKICAgICAgICAgICAgdmFyIGRheSA9IGRhdGVPYmouZ2V0RGF0ZSgpOwogICAgICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aCAgMTAgPyBgMCR7bW9udGh9YCA6IG1vbnRofS0ke2RheSAgMTAgPyBgMCR7ZGF5fWAgOiBkYXl9YDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCiAgICB2YXIgZ2V0Tm9ybWFsaXplZFRpbWUgPSBmdW5jdGlvbih0aW1lKSB7CiAgICAgICAgdmFyIGhvdXIsIG1pbnV0ZXM7CiAgICAgICAgdmFyIGRlY29kZWRUaW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHRpbWUpOwogICAgICAgIHZhciB0aW1lUGFydHMgPSBBcnJheS5mcm9tKGRlY29kZWRUaW1lLm1hdGNoQWxsKC8oXGR7MSwyfSk6KFxkezEsMn0pXFcqKFtBYVBwXVtNbV0pPy9nbSkpWzBdOwogICAgICAgIGlmICh0aW1lUGFydHNbM10pIHsgLy8gMTIgaG91ciBmb3JtYXQKICAgICAgICAgICAgdmFyIGlzUE0gPSB0aW1lUGFydHNbM10udG9Mb3dlckNhc2UoKSA9PT0gJ3BtJzsKICAgICAgICAgICAgaWYgKGlzUE0pIHsKICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludCh0aW1lUGFydHNbMV0pID09PSAxMiA\/ICcxMicgOiBgJHtwYXJzZUludCh0aW1lUGFydHNbMV0pICsgMTJ9YDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludCh0aW1lUGFydHNbMV0pID09PSAxMiA\/ICcwJyA6IHRpbWVQYXJ0c1sxXTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7IC8vIDI0IGhvdXIgZm9ybWF0CiAgICAgICAgICAgIGhvdXIgPSB0aW1lUGFydHNbMV07CiAgICAgICAgfQogICAgICAgIHZhciBub3JtYWxpemVkSG91ciA9IHBhcnNlSW50KGhvdXIpICAxMCA\/IGAwJHtwYXJzZUludChob3VyKX1gIDogaG91cjsKICAgICAgICB2YXIgbWludXRlcyA9IHRpbWVQYXJ0c1syXTsKICAgICAgICByZXR1cm4gYCR7bm9ybWFsaXplZEhvdXJ9OiR7bWludXRlc31gOwogICAgfTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSAgYWxsSW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlZ2V4U3RyID0gImZpZWxkXFxbKFxcZCspXFxdIjsKICAgICAgICB2YXIgcmVzdWx0cyA9IG5ldyBSZWdFeHAocmVnZXhTdHIpLmV4ZWMoYWxsSW5wdXRzW2ldLm5hbWUpOwogICAgICAgIGlmIChyZXN1bHRzICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICBhbGxJbnB1dHNbaV0uZGF0YXNldC5uYW1lID0gYWxsSW5wdXRzW2ldLm5hbWUubWF0Y2goL1xbdGltZVxdJC8pCiAgICAgICAgICAgICAgICA\/IGAke3dpbmRvdy5jZmllbGRzW3Jlc3VsdHNbMV1dfV90aW1lYAogICAgICAgICAgICAgICAgOiB3aW5kb3cuY2ZpZWxkc1tyZXN1bHRzWzFdXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhbGxJbnB1dHNbaV0uZGF0YXNldC5uYW1lID0gYWxsSW5wdXRzW2ldLm5hbWU7CiAgICAgICAgfQogICAgICAgIHZhciBmaWVsZFZhbCA9IGdldFVybFBhcmFtKGFsbElucHV0c1tpXS5kYXRhc2V0Lm5hbWUpOwoKICAgICAgICBpZiAoZmllbGRWYWwpIHsKICAgICAgICAgICAgaWYgKGFsbElucHV0c1tpXS5kYXRhc2V0LmF1dG9maWxsID09PSAiZmFsc2UiKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYWxsSW5wdXRzW2ldLnR5cGUgPT0gInJhZGlvIiB8fCBhbGxJbnB1dHNbaV0udHlwZSA9PSAiY2hlY2tib3giKSB7CiAgICAgICAgICAgICAgICBpZiAoYWxsSW5wdXRzW2ldLnZhbHVlID09IGZpZWxkVmFsKSB7CiAgICAgICAgICAgICAgICAgICAgYWxsSW5wdXRzW2ldLmNoZWNrZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGFsbElucHV0c1tpXS50eXBlID09ICJkYXRlIikgewogICAgICAgICAgICAgICAgYWxsSW5wdXRzW2ldLnZhbHVlID0gZ2V0Tm9ybWFsaXplZERhdGUoZmllbGRWYWwsIGFjY3REYXRlRm9ybWF0KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChhbGxJbnB1dHNbaV0udHlwZSA9PSAidGltZSIpIHsKICAgICAgICAgICAgICAgIGFsbElucHV0c1tpXS52YWx1ZSA9IGdldE5vcm1hbGl6ZWRUaW1lKGZpZWxkVmFsKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGFsbElucHV0c1tpXS52YWx1ZSA9IGZpZWxkVmFsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHZhciByZW1vdmVfdG9vbHRpcHMgPSBmdW5jdGlvbigpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSAgdG9vbHRpcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdG9vbHRpcHNbaV0udGlwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodG9vbHRpcHNbaV0udGlwKTsKICAgICAgICB9CiAgICAgICAgdG9vbHRpcHMgPSBbXTsKICAgIH07CiAgICB2YXIgcmVtb3ZlX3Rvb2x0aXAgPSBmdW5jdGlvbihlbGVtKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIHRvb2x0aXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICh0b29sdGlwc1tpXS5lbGVtID09PSBlbGVtKSB7CiAgICAgICAgICAgICAgICB0b29sdGlwc1tpXS50aXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0b29sdGlwc1tpXS50aXApOwogICAgICAgICAgICAgICAgdG9vbHRpcHMuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIHZhciBjcmVhdGVfdG9vbHRpcCA9IGZ1bmN0aW9uKGVsZW0sIHRleHQpIHsKICAgICAgICB2YXIgdG9vbHRpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAogICAgICAgICAgICBhcnJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAogICAgICAgICAgICBpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCBuZXdfdG9vbHRpcCA9IHt9OwogICAgICAgIHRvb2x0aXAuaWQgPSBgJHtlbGVtLmlkfS1lcnJvcmA7CiAgICAgICAgdG9vbHRpcC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnYWxlcnQnKQogICAgICAgIGlmIChlbGVtLnR5cGUgIT0gJ3JhZGlvJyAmJiAoZWxlbS50eXBlICE9ICdjaGVja2JveCcgfHwgZWxlbS5uYW1lID09PSAnc21zX2NvbnNlbnQnKSkgewogICAgICAgICAgICB0b29sdGlwLmNsYXNzTmFtZSA9ICdfZXJyb3InOwogICAgICAgICAgICBhcnJvdy5jbGFzc05hbWUgPSAnX2Vycm9yLWFycm93JzsKICAgICAgICAgICAgaW5uZXIuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lcic7CiAgICAgICAgICAgIGlubmVyLmlubmVySFRNTCA9IHRleHQ7CiAgICAgICAgICAgIHRvb2x0aXAuYXBwZW5kQ2hpbGQoYXJyb3cpOwogICAgICAgICAgICB0b29sdGlwLmFwcGVuZENoaWxkKGlubmVyKTsKICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRvb2x0aXApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRvb2x0aXAuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lciBfbm9fYXJyb3cnOwogICAgICAgICAgICB0b29sdGlwLmlubmVySFRNTCA9IHRleHQ7CiAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodG9vbHRpcCwgZWxlbSk7CiAgICAgICAgICAgIG5ld190b29sdGlwLm5vX2Fycm93ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgbmV3X3Rvb2x0aXAudGlwID0gdG9vbHRpcDsKICAgICAgICBuZXdfdG9vbHRpcC5lbGVtID0gZWxlbTsKICAgICAgICB0b29sdGlwcy5wdXNoKG5ld190b29sdGlwKTsKICAgICAgICByZXR1cm4gbmV3X3Rvb2x0aXA7CiAgICB9OwogICAgdmFyIHJlc2l6ZV90b29sdGlwID0gZnVuY3Rpb24odG9vbHRpcCkgewogICAgICAgIHZhciByZWN0ID0gdG9vbHRpcC5lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHZhciBkb2MgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCiAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uID0gcmVjdC50b3AgLSAoKHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wKSAgLSAoZG9jLmNsaWVudFRvcCB8fCAwKSk7CiAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uICA0MCkgewogICAgICAgICAgICB0b29sdGlwLnRpcC5jbGFzc05hbWUgPSB0b29sdGlwLnRpcC5jbGFzc05hbWUucmVwbGFjZSgvID8oX2Fib3ZlfF9iZWxvdykgPy9nLCAnJykgKyAnIF9iZWxvdyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdG9vbHRpcC50aXAuY2xhc3NOYW1lID0gdG9vbHRpcC50aXAuY2xhc3NOYW1lLnJlcGxhY2UoLyA\/KF9hYm92ZXxfYmVsb3cpID8vZywgJycpICsgJyBfYWJvdmUnOwogICAgICAgIH0KICAgIH07CiAgICB2YXIgcmVzaXplX3Rvb2x0aXBzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKF9yZW1vdmVkKSByZXR1cm47CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIHRvb2x0aXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICghdG9vbHRpcHNbaV0ubm9fYXJyb3cpIHJlc2l6ZV90b29sdGlwKHRvb2x0aXBzW2ldKTsKICAgICAgICB9CiAgICB9OwogICAgdmFyIHZhbGlkYXRlX2ZpZWxkID0gZnVuY3Rpb24oZWxlbSwgcmVtb3ZlKSB7CiAgICAgICAgdmFyIHRvb2x0aXAgPSBudWxsLCB2YWx1ZSA9IGVsZW0udmFsdWUsIG5vX2Vycm9yID0gdHJ1ZTsKICAgICAgICByZW1vdmUgPyByZW1vdmVfdG9vbHRpcChlbGVtKSA6IGZhbHNlOwogICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWludmFsaWQnKTsKICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpOwogICAgICAgIGlmIChlbGVtLnR5cGUgIT0gJ2NoZWNrYm94JykgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgaWYgKGVsZW0uZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpICE9PSBudWxsKSB7CiAgICAgICAgICAgIGlmIChlbGVtLnR5cGUgPT0gJ3JhZGlvJyB8fCAoZWxlbS50eXBlID09ICdjaGVja2JveCcgJiYgL2FueS8udGVzdChlbGVtLmNsYXNzTmFtZSkpKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbXMgPSBmb3JtX3RvX3N1Ym1pdC5lbGVtZW50c1tlbGVtLm5hbWVdOwogICAgICAgICAgICAgICAgaWYgKCEoZWxlbXMgaW5zdGFuY2VvZiBOb2RlTGlzdCB8fCBlbGVtcyBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uKSB8fCBlbGVtcy5sZW5ndGggPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgbm9fZXJyb3IgPSBlbGVtLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpICBlbGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbXNbaV0uY2hlY2tlZCkgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghbm9fZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIlBsZWFzZSBzZWxlY3QgYW4gb3B0aW9uLiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW0udHlwZSA9PSdjaGVja2JveCcpIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtcyA9IGZvcm1fdG9fc3VibWl0LmVsZW1lbnRzW2VsZW0ubmFtZV0sIGZvdW5kID0gZmFsc2UsIGVyciA9IFtdOwogICAgICAgICAgICAgICAgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIGVsZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1zW2ldLmdldEF0dHJpYnV0ZSgncmVxdWlyZWQnKSA9PT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiBlbGVtc1tpXSAhPT0gZWxlbSkgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1zW2ldLmNsYXNzTmFtZSA9IGVsZW1zW2ldLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVtc1tpXS5jaGVja2VkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1zW2ldLmNsYXNzTmFtZSA9IGVsZW1zW2ldLmNsYXNzTmFtZSArICcgX2hhc19lcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5wdXNoKCJDaGVja2luZyAlcyBpcyByZXF1aXJlZCIucmVwbGFjZSgiJXMiLCBlbGVtc1tpXS52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghbm9fZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgZXJyLmpvaW4oJyEtLSB3cG1sOmh0bWxfc2VsZl9jbG9zaW5nX3RhZyBici8gLS0+JykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW0udGFnTmFtZSA9PSAnU0VMRUNUJykgewogICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlmIChlbGVtLm11bHRpcGxlKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0ub3B0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbS5vcHRpb25zW2ldLnNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtLm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW0ub3B0aW9uc1tpXS5zZWxlY3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCFlbGVtLm9wdGlvbnNbaV0udmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChlbGVtLm9wdGlvbnNbaV0udmFsdWUubWF0Y2goL1xuL2cpKSkKICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcCA9IGNyZWF0ZV90b29sdGlwKGVsZW0sICJQbGVhc2Ugc2VsZWN0IGFuIG9wdGlvbi4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgewogICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZSArICcgX2hhc19lcnJvcic7CiAgICAgICAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgICAgICAgdG9vbHRpcCA9IGNyZWF0ZV90b29sdGlwKGVsZW0sICJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChub19lcnJvciAmJiBlbGVtLm5hbWUgPT0gJ2VtYWlsJykgewogICAgICAgICAgICBpZiAoIXZhbHVlLm1hdGNoKC9eW1wrX2EtejAtOS0nJj1dKyhcLltcK19hLXowLTktJ10rKSpAW2EtejAtOS1dKyhcLlthLXowLTktXSspKihcLlthLXpdezIsfSkkL2kpKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIkVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobm9fZXJyb3IgJiYgKGVsZW0uaWQgPT0gJ3Bob25lJykpIHsKICAgICAgICAgICAgaWYgKGVsZW0udmFsdWUudHJpbSgpICYmIHR5cGVvZiBpdGkgIT0gJ3VuZGVmaW5lZCcgJiYgIWl0aS5pc1ZhbGlkTnVtYmVyKCkpIHsKICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBjcmVhdGVfdG9vbHRpcChlbGVtLCAiRW50ZXIgYSB2YWxpZCBwaG9uZSBudW1iZXIuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG5vX2Vycm9yICYmIC9kYXRlX2ZpZWxkLy50ZXN0KGVsZW0uY2xhc3NOYW1lKSkgewogICAgICAgICAgICBpZiAoIXZhbHVlLm1hdGNoKC9eXGRcZFxkXGQtXGRcZC1cZFxkJC8pKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIkVudGVyIGEgdmFsaWQgZGF0ZS4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKG5vX2Vycm9yICYmIGVsZW0ubmFtZSA9PT0gJ3Ntc19jb25zZW50JykgewogICAgICAgICAgICBjb25zdCBwaG9uZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bob25lJyk7CiAgICAgICAgICAgIGNvbnN0IGNvbnNlbnRSZXF1aXJlZCA9IHBob25lSW5wdXQuYXR0cmlidXRlcy5yZXF1aXJlZCB8fCBwaG9uZUlucHV0LnZhbHVlLmxlbmd0aCA+IDA7CiAgICAgICAgICAgIGNvbnN0IHNob3dFcnJvciA9ICAoY29uc2VudFJlcXVpcmVkIHx8ICEhZWxlbS5hdHRyaWJ1dGVzLnJlcXVpcmVkKSAmJiAhZWxlbS5jaGVja2VkOwogICAgICAgICAgICBpZiAoc2hvd0Vycm9yKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIlBsZWFzZSBjaGVjayB0aGlzIGJveCB0byBjb250aW51ZSIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdG9vbHRpcCA\/IHJlc2l6ZV90b29sdGlwKHRvb2x0aXApIDogZmFsc2U7CiAgICAgICAgaWYgKCFub19lcnJvciAmJiBlbGVtLmhhc0F0dHJpYnV0ZSgnaWQnKSkgewogICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgJ3RydWUnKTsKICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBgJHtlbGVtLmlkfS1lcnJvcmApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbm9fZXJyb3I7CiAgICB9OwogICAgdmFyIG5lZWRzX3ZhbGlkYXRlID0gZnVuY3Rpb24oZWwpIHsKICAgICAgICBpZihlbC5nZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJykgIT09IG51bGwpewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYoKGVsLm5hbWUgPT09ICdlbWFpbCcgfHwgZWwuaWQgPT09ICdwaG9uZScgfHwgZWwuaWQgPT09ICdzbXNfY29uc2VudCcpICYmIGVsLnZhbHVlICE9PSAiIil7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHZhciB2YWxpZGF0ZV9mb3JtID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBlcnIgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCcuX2Zvcm1fZXJyb3InKSwgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgIGlmICghc3VibWl0dGVkKSB7CiAgICAgICAgICAgIHN1Ym1pdHRlZCA9IHRydWU7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhbGxJbnB1dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGFsbElucHV0c1tpXTsKICAgICAgICAgICAgICAgIGlmIChuZWVkc192YWxpZGF0ZShpbnB1dCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQudHlwZSA9PSAndGV4dCcgfHwgaW5wdXQudHlwZSA9PSAnbnVtYmVyJyB8fCBpbnB1dC50eXBlID09ICd0aW1lJyB8fCBpbnB1dC50eXBlID09ICd0ZWwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnYmx1cicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUudHJpbSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVfZmllbGQodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBhZGRFdmVudChpbnB1dCwgJ2lucHV0JywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC50eXBlID09ICdyYWRpbycgfHwgaW5wdXQudHlwZSA9PSAnY2hlY2tib3gnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbihlbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0RWxlbWVudHNBcnJheShuYW1lKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICBmb3JtX3RvX3N1Ym1pdC5lbGVtZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdmFsdWVdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGlvcyA9IGdldEVsZW1lbnRzQXJyYXkoZWwubmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhZGlvcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KHJhZGlvc1tpXSwgJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZChlbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pKGlucHV0KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnRhZ05hbWUgPT0gJ1NFTEVDVCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoaW5wdXQsICdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnR5cGUgPT0gJ3RleHRhcmVhJyl7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVtb3ZlX3Rvb2x0aXBzKCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFsbElucHV0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICB2YXIgZWxlbSA9IGFsbElucHV0c1tpXTsKICAgICAgICAgICAgaWYgKG5lZWRzX3ZhbGlkYXRlKGVsZW0pKSB7CiAgICAgICAgICAgICAgICBpZiAoZWxlbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJzZWxlY3QiKSB7CiAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IGVsZW0udmFsdWUudHJpbSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFsaWRhdGVfZmllbGQoZWxlbSkgPyB0cnVlIDogbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIW5vX2Vycm9yICYmIGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgICBpZiAoIW5vX2Vycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlRXJyb3IgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCcuX2hhc19lcnJvcjpub3QoW2Rpc2FibGVkXSknKTsKICAgICAgICAgICAgaWYgKGZpcnN0Rm9jdXNhYmxlRXJyb3IgJiYgdHlwZW9mIGZpcnN0Rm9jdXNhYmxlRXJyb3IuZm9jdXMgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgIGZpcnN0Rm9jdXNhYmxlRXJyb3IuZm9jdXMoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXNpemVfdG9vbHRpcHMoKTsKICAgICAgICByZXR1cm4gbm9fZXJyb3I7CiAgICB9OwogICAgYWRkRXZlbnQod2luZG93LCAncmVzaXplJywgcmVzaXplX3Rvb2x0aXBzKTsKICAgIGFkZEV2ZW50KHdpbmRvdywgJ3Njcm9sbCcsIHJlc2l6ZV90b29sdGlwcyk7CgogICAgdmFyIF9mb3JtX3NlcmlhbGl6ZSA9IGZ1bmN0aW9uKGZvcm0pe2lmKCFmb3JtfHxmb3JtLm5vZGVOYW1lIT09IkZPUk0iKXtyZXR1cm4gfXZhciBpLGoscT1bXTtmb3IoaT0wO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKXtpZihmb3JtLmVsZW1lbnRzW2ldLm5hbWU9PT0iIil7Y29udGludWV9c3dpdGNoKGZvcm0uZWxlbWVudHNbaV0ubm9kZU5hbWUpe2Nhc2UiSU5QVVQiOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2UidGVsIjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS5wcmV2aW91c1NpYmxpbmcucXVlcnlTZWxlY3RvcignZGl2Lml0aV9fc2VsZWN0ZWQtZGlhbC1jb2RlJykuaW5uZXJUZXh0KStlbmNvZGVVUklDb21wb25lbnQoIiAiKStlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrO2Nhc2UidGV4dCI6Y2FzZSJudW1iZXIiOmNhc2UiZGF0ZSI6Y2FzZSJ0aW1lIjpjYXNlImhpZGRlbiI6Y2FzZSJwYXNzd29yZCI6Y2FzZSJidXR0b24iOmNhc2UicmVzZXQiOmNhc2Uic3VibWl0IjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrO2Nhc2UiY2hlY2tib3giOmNhc2UicmFkaW8iOmlmKGZvcm0uZWxlbWVudHNbaV0uY2hlY2tlZCl7cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKX1icmVhaztjYXNlImZpbGUiOmJyZWFrfWJyZWFrO2Nhc2UiVEVYVEFSRUEiOnEucHVzaChmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLnZhbHVlKSk7YnJlYWs7Y2FzZSJTRUxFQ1QiOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2Uic2VsZWN0LW9uZSI6cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKTticmVhaztjYXNlInNlbGVjdC1tdWx0aXBsZSI6Zm9yKGo9MDtqPGZvcm0uZWxlbWVudHNbaV0ub3B0aW9ucy5sZW5ndGg7aisrKXtpZihmb3JtLmVsZW1lbnRzW2ldLm9wdGlvbnNbal0uc2VsZWN0ZWQpe3EucHVzaChmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLm9wdGlvbnNbal0udmFsdWUpKX19YnJlYWt9YnJlYWs7Y2FzZSJCVVRUT04iOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2UicmVzZXQiOmNhc2Uic3VibWl0IjpjYXNlImJ1dHRvbiI6cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKTticmVha31icmVha319cmV0dXJuIHEuam9pbigiJiIpfTsKCiAgICBjb25zdCBmb3JtU3VwcG9ydHNQb3N0ID0gZmFsc2U7CiAgICB2YXIgZm9ybV9zdWJtaXQgPSBmdW5jdGlvbihlKSB7CgogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICBpZiAodmFsaWRhdGVfZm9ybSgpKSB7CiAgICAgICAgICAgIGlmKGZvcm1fdG9fc3VibWl0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9InBob25lIl0nKSAmJiB0eXBlb2YgaXRpICE9ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgICBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSJwaG9uZSJdJykudmFsdWUgPSBpdGkuZ2V0TnVtYmVyKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gdXNlIHRoaXMgdHJpY2sgdG8gZ2V0IHRoZSBzdWJtaXQgYnV0dG9uICYgZGlzYWJsZSBpdCB1c2luZyBwbGFpbiBqYXZhc2NyaXB0CiAgICAgICAgICAgIHZhciBzdWJtaXRCdXR0b24gPSBlLnRhcmdldC5xdWVyeVNlbGVjdG9yKCcjX2Zvcm1fMTlfc3VibWl0Jyk7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdwcm9jZXNzaW5nJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBfZm9ybV9zZXJpYWxpemUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19mb3JtXzE5XycpKS5yZXBsYWNlKC8lMEEvZywgJ1xcbicpOwogICAgICAgICAgICB2YXIgZXJyID0gZm9ybV90b19zdWJtaXQucXVlcnlTZWxlY3RvcignLl9mb3JtX2Vycm9yJyk7CiAgICAgICAgICAgIGVyciA\/IGVyci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVycikgOiBmYWxzZTsKICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gc3VibWl0Rm9ybSgpIHsKICAgICAgICAgICAgICAgIHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZXJpYWxpemVkKTsKICAgICAgICAgICAgICAgIHNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ2hpZGVCdXR0b24nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gewogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIkFjY2VwdCI6ICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgYm9keTogZm9ybURhdGEsCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAiUE9TVCIKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgbGV0IHBhZ2VVcmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgICAgICAgICAgaWYgKHBhZ2VVcmxQYXJhbXMuaGFzKCd0JykpIHsKICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCZWFyZXIgJyArIHBhZ2VVcmxQYXJhbXMuZ2V0KCd0Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL2ZvcnRpdXNjYXA2NDkzNy5hY3RpdmVob3N0ZWQuY29tL3Byb2MucGhwP2pzb25wPXRydWUnLCByZXF1ZXN0KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmb3JtU3VwcG9ydHNQb3N0KSB7CiAgICAgICAgICAgICAgICBzdWJtaXRGb3JtKCkudGhlbigoZGF0YSkgPT4gewogICAgICAgICAgICAgICAgICAgIGV2YWwoZGF0YS5qcyk7CiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgX3Nob3dfZXJyb3IoIjE5IiwgIlNvcnJ5LCB5b3VyIHN1Ym1pc3Npb24gZmFpbGVkLiBQbGVhc2UgdHJ5IGFnYWluLiIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfbG9hZF9zY3JpcHQoJ2h0dHBzOi8vZm9ydGl1c2NhcDY0OTM3LmFjdGl2ZWhvc3RlZC5jb20vcHJvYy5waHA\/JyArIHNlcmlhbGl6ZWQgKyAnJmpzb25wPXRydWUnLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgYWRkRXZlbnQoZm9ybV90b19zdWJtaXQsICdzdWJtaXQnLCBmb3JtX3N1Ym1pdCk7Cn0pKCk7Cgo8L3NjcmlwdD4KCg==[\/vc_raw_html][\/vc_column][\/vc_row]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.liveconfluence.com\/es\/11155-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Confluence at Two Rivers\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-25T11:17:22+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"29 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.liveconfluence.com\\\/es\\\/11155-2\\\/\",\"url\":\"https:\\\/\\\/www.liveconfluence.com\\\/es\\\/11155-2\\\/\",\"name\":\"- Confluence at Two Rivers\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.liveconfluence.com\\\/es\\\/#website\"},\"datePublished\":\"2025-11-25T11:14:07+00:00\",\"dateModified\":\"2025-11-25T11:17:22+00:00\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.liveconfluence.com\\\/es\\\/11155-2\\\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.liveconfluence.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/www.liveconfluence.com\\\/es\\\/\",\"name\":\"Confluence at Two Rivers\",\"description\":\"Ser propietario en Vail Valley ahora est\u00e1 a su alcance\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.liveconfluence.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"- Confluence at Two Rivers","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.liveconfluence.com\/es\/11155-2\/","og_locale":"es_ES","og_type":"article","og_title":"- Confluence at Two Rivers","og_description":"[vc_row kd_background_image_position=&#8221;vc_row-bg-position-top&#8221;][vc_column][vc_raw_html css=&#8221;&#8221; el_class=&#8221;custom-ac-form&#8221;]PHN0eWxlPkBpbXBvcnQgdXJsKGh0dHBzOi8vZm9udHMuYnVubnkubmV0L2Nzcz9mYW1pbHk9aWJtLXBsZXgtc2Fuczo0MDAsNjAwKTs8L3N0eWxlPgo8c3R5bGU+Ci5fZm9ybV9oaWRle2Rpc3BsYXk6bm9uZTt2aXNpYmlsaXR5OmhpZGRlbn0uX2Zvcm1fc2hvd3tkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6dmlzaWJsZX0jX2Zvcm1fMTlfIC5fc3VibWl0LnByb2Nlc3Npbmd7cG9zaXRpb246cmVsYXRpdmV9I19mb3JtXzE5XyAuX3N1Ym1pdC5wcm9jZXNzaW5nOjpiZWZvcmV7Y29udGVudDoiIjt3aWR0aDoxZW07aGVpZ2h0OjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7dG9wOjUwJTtsZWZ0OjUwJTtib3JkZXI6ZG91YmxlIDNweCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMUMyQzVBLCAjMUMyQzVBKSwgY29uaWMtZ3JhZGllbnQoIzFDMkM1QSwgI0ZGRkZGRik7YmFja2dyb3VuZC1vcmlnaW46Ym9yZGVyLWJveDtiYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3gsIGJvcmRlci1ib3g7YW5pbWF0aW9uOjEyMDBtcyBlYXNlIDBzIGluZmluaXRlIG5vcm1hbCBub25lIHJ1bm5pbmcgX3NwaW59I19mb3JtXzE5XyAuX3N1Ym1pdC5wcm9jZXNzaW5nOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfUBrZXlmcmFtZXMgX3NwaW57MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoOTBkZWcpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoNDUwZGVnKX19I19mb3JtXzE5XyAuX2Nsb3NlLWljb257Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1pbWFnZTp1cmwoImh0dHBzOi8vZDIyNmFqNGFvMXQ2MXEuY2xvdWRmcm9udC5uZXQvZXNma3lqaDF1X2Zvcm1zLWNsb3NlLWRhcmsucG5nIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxNC4ycHggMTQuMnB4O3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7dG9wOjExcHg7cmlnaHQ6OXB4O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxNi4ycHg7aGVpZ2h0OjE2LjJweH0jX2Zvcm1fMTlfIC5fY2xvc2UtaWNvbjpiZWZvcmV7cG9zaXRpb246cmVsYXRpdmV9I19mb3JtXzE5XyAuX2Zvcm0tYm9keXttYXJnaW4tYm90dG9tOjMwcHh9I19mb3JtXzE5XyAuX2Zvcm0taW1hZ2UtbGVmdHt3aWR0aDoxNTBweDtmbG9hdDpsZWZ0fSNfZm9ybV8xOV8gLl9mb3JtLWNvbnRlbnQtcmlnaHR7bWFyZ2luLWxlZnQ6MTY0cHh9I19mb3JtXzE5XyAuX2Zvcm0tYnJhbmRpbmd7Y29sb3I6I2ZmZjtmb250LXNpemU6MTBweDtjbGVhcjpib3RoO3RleHQtYWxpZ246bGVmdDttYXJnaW4tdG9wOjMwcHg7Zm9udC13ZWlnaHQ6MTAwfSNfZm9ybV8xOV8gLl9mb3JtLWJyYW5kaW5nIC5fbG9nb3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEzMHB4O2hlaWdodDoxNHB4O21hcmdpbi10b3A6NnB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCJodHRwczovL2QyMjZhajRhbzF0NjFxLmNsb3VkZnJvbnQubmV0L2hoOXVqcWd2NV9hY2xvZ29fbGkucG5nIik7YmFja2dyb3VuZC1zaXplOjEzMHB4IGF1dG87YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fSNfZm9ybV8xOV8gLmZvcm0tc3Itb25seXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjFweDtwYWRkaW5nOjA7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO2NsaXA6cmVjdCgwLCAwLCAwLCAwKTtib3JkZXI6MH0jX2Zvcm1fMTlfIC5fZm9ybS1sYWJlbCwjX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50IC5fZm9ybS1sYWJlbHtmb250LXdlaWdodDpib2xkO21hcmdpbi1ib3R0b206NXB4O2Rpc3BsYXk6YmxvY2t9I19mb3JtXzE5Xy5fZGFyayAuX2Zvcm0tYnJhbmRpbmd7Y29sb3I6IzMzM30jX2Zvcm1fMTlfLl9kYXJrIC5fZm9ybS1icmFuZGluZyAuX2xvZ297YmFja2dyb3VuZC1pbWFnZTp1cmwoImh0dHBzOi8vZDIyNmFqNGFvMXQ2MXEuY2xvdWRmcm9udC5uZXQvamZ0cTJjOHNfYWNsb2dvX2RrLnBuZyIpfSNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnR7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbToxMHB4O2ZvbnQtc2l6ZTowO21heC13aWR0aDoxMDAlfSNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgKntmb250LXNpemU6MTRweH0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50Ll9jbGVhcntjbGVhcjpib3RoO3dpZHRoOjEwMCU7ZmxvYXQ6bm9uZX0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50Ll9jbGVhcjphZnRlcntjbGVhcjpsZWZ0fSNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgaW5wdXRbdHlwZT0idGV4dCJdLCNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgaW5wdXRbdHlwZT0iZGF0ZSJdLCNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgc2VsZWN0LCNfZm9ybV8xOV8gLl9mb3JtX2VsZW1lbnQgdGV4dGFyZWE6bm90KC5nLXJlY2FwdGNoYS1yZXNwb25zZSl7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LWZhbWlseTppbmhlcml0fSNfZm9ybV8xOV8gLl9maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfSNfZm9ybV8xOV8gLl9pbmxpbmUtc3R5bGV7ZmxvYXQ6bGVmdH0jX2Zvcm1fMTlfIC5faW5saW5lLXN0eWxlIGlucHV0W3R5cGU9InRleHQiXXt3aWR0aDoxNTBweH0jX2Zvcm1fMTlfIC5faW5saW5lLXN0eWxlOm5vdCguX2NsZWFyKXttYXJnaW4tcmlnaHQ6MjBweH0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50IGltZy5fZm9ybS1pbWFnZXttYXgtd2lkdGg6MTAwJX0jX2Zvcm1fMTlfIC5fZm9ybV9lbGVtZW50IC5fZm9ybS1maWVsZHNldHtib3JkZXI6MDtwYWRkaW5nOjAuMDFlbSAwIDAgMDttYXJnaW46MDttaW4td2lkdGg6MH0jX2Zvcm1fMTlfIC5fY2xlYXItZWxlbWVudHtjbGVhcjpsZWZ0fSNfZm9ybV8xOV8gLl9mdWxsX3dpZHRoe3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX2Zvcm1fZnVsbF9maWVsZHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToxMHB4fSNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGV4dCJdLl9oYXNfZXJyb3IsI19mb3JtXzE5XyB0ZXh0YXJlYS5faGFzX2Vycm9ye2JvcmRlcjojRjM3QzdCIDFweCBzb2xpZH0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9ImNoZWNrYm94Il0uX2hhc19lcnJvcntvdXRsaW5lOiNGMzdDN0IgMXB4IHNvbGlkfSNfZm9ybV8xOV8gLl9zaG93X2JlX2Vycm9ye2Zsb2F0OmxlZnR9I19mb3JtXzE5XyAuX2Vycm9ye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjE0cHg7ei1pbmRleDoxMDAwMDAwMX0jX2Zvcm1fMTlfIC5fZXJyb3IuX2Fib3Zle3BhZGRpbmctYm90dG9tOjRweDtib3R0b206MzlweDtyaWdodDowfSNfZm9ybV8xOV8gLl9lcnJvci5fYmVsb3d7cGFkZGluZy10b3A6OHB4O3RvcDoxMDAlO3JpZ2h0OjB9I19mb3JtXzE5XyAuX2Vycm9yLl9hYm92ZSAuX2Vycm9yLWFycm93e2JvdHRvbTotNHB4O3JpZ2h0OjE1cHg7Ym9yZGVyLWxlZnQ6OHB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo4cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDo4cHggc29saWQgI0ZGRERERH0jX2Zvcm1fMTlfIC5fZXJyb3IuX2JlbG93IC5fZXJyb3ItYXJyb3d7dG9wOjA7cmlnaHQ6MTVweDtib3JkZXItbGVmdDo4cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjhweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjhweCBzb2xpZCAjRkZEREREfSNfZm9ybV8xOV8gLl9lcnJvci1pbm5lcntwYWRkaW5nOjEycHggMTJweCAxMnB4IDM2cHg7YmFja2dyb3VuZC1jb2xvcjojRkZEREREO2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDhDMTYgMTIuNDE4MyAxMi40MTgzIDE2IDggMTZDMy41ODE3MiAxNiAwIDEyLjQxODMgMCA4QzAgMy41ODE3MiAzLjU4MTcyIDAgOCAwQzEyLjQxODMgMCAxNiAzLjU4MTcyIDE2IDhaTTkgM1Y5SDdWM0g5Wk05IDEzVjExSDdWMTNIOVonIGZpbGw9JyUyM0NBMDAwMCcvJTNFJTNDL3N2ZyUzRSIpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEycHggY2VudGVyO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtZmFtaWx5OmFyaWFsLCBzYW5zLXNlcmlmO2ZvbnQtd2VpZ2h0OjYwMDtsaW5lLWhlaWdodDoxNnB4O2NvbG9yOiMwMDA7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMzEsIDMzLCA0MSwgMC4yOTgyOTUpfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDozMTlweCl7I19mb3JtXzE5XyAuX2Vycm9yLWlubmVye3BhZGRpbmc6N3B4IDdweCA3cHggMjVweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxMnB4O2JhY2tncm91bmQtcG9zaXRpb246NHB4IGNlbnRlcjttYXgtd2lkdGg6MTAwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfX0jX2Zvcm1fMTlfIC5fZXJyb3ItaW5uZXIuX2Zvcm1fZXJyb3J7bWFyZ2luLWJvdHRvbTo1cHg7dGV4dC1hbGlnbjpsZWZ0fSNfZm9ybV8xOV8gLl9idXR0b24td3JhcHBlciAuX2Vycm9yLWlubmVyLl9mb3JtX2Vycm9ye3Bvc2l0aW9uOnN0YXRpY30jX2Zvcm1fMTlfIC5fZXJyb3ItaW5uZXIuX25vX2Fycm93e21hcmdpbi1ib3R0b206MTBweH0jX2Zvcm1fMTlfIC5fZXJyb3ItYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDtoZWlnaHQ6MH0jX2Zvcm1fMTlfIC5fZXJyb3ItaHRtbHttYXJnaW4tYm90dG9tOjEwcHh9LnBpa2Etc2luZ2xle3otaW5kZXg6MTAwMDAwMDEgIWltcG9ydGFudH0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9InRleHQiXS5kYXRldGltZV9kYXRle3dpZHRoOjY5JTtkaXNwbGF5OmlubGluZX0jX2Zvcm1fMTlfIHNlbGVjdC5kYXRldGltZV90aW1le3dpZHRoOjI5JTtkaXNwbGF5OmlubGluZTtoZWlnaHQ6MzJweH0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9ImRhdGUiXS5kYXRldGltZV9kYXRle3dpZHRoOjY5JTtkaXNwbGF5OmlubGluZS1mbGV4fSNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGltZSJdLmRhdGV0aW1lX3RpbWV7d2lkdGg6MjklO2Rpc3BsYXk6aW5saW5lLWZsZXh9QG1lZGlhIChtaW4td2lkdGg6MzIwcHgpIGFuZCAobWF4LXdpZHRoOjY2N3B4KXs6Oi13ZWJraXQtc2Nyb2xsYmFye2Rpc3BsYXk6bm9uZX0jX2Zvcm1fMTlfICp7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc2l6ZToxZW19I19mb3JtXzE5XyAuX2Zvcm0tY29udGVudHttYXJnaW46MDt3aWR0aDoxMDAlfSNfZm9ybV8xOV8gLl9mb3JtLWlubmVye2Rpc3BsYXk6YmxvY2s7bWluLXdpZHRoOjEwMCV9I19mb3JtXzE5XyAuX2Zvcm0tdGl0bGUsI19mb3JtXzE5XyAuX2lubGluZS1zdHlsZXttYXJnaW4tdG9wOjA7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MH0jX2Zvcm1fMTlfIC5fZm9ybS10aXRsZXtmb250LXNpemU6MS4yZW19I19mb3JtXzE5XyAuX2Zvcm1fZWxlbWVudHttYXJnaW46MCAwIDIwcHg7cGFkZGluZzowO3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX2Zvcm0tZWxlbWVudCwjX2Zvcm1fMTlfIC5faW5saW5lLXN0eWxlLCNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGV4dCJdLCNfZm9ybV8xOV8gbGFiZWwsI19mb3JtXzE5XyBwLCNfZm9ybV8xOV8gdGV4dGFyZWE6bm90KC5nLXJlY2FwdGNoYS1yZXNwb25zZSl7ZmxvYXQ6bm9uZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX3Jvdy5fY2hlY2tib3gtcmFkaW8gbGFiZWx7ZGlzcGxheTppbmxpbmV9I19mb3JtXzE5XyAuX3JvdywjX2Zvcm1fMTlfIHAsI19mb3JtXzE5XyBsYWJlbHttYXJnaW4tYm90dG9tOjAuN2VtO3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuX3JvdyBpbnB1dFt0eXBlPSJjaGVja2JveCJdLCNfZm9ybV8xOV8gLl9yb3cgaW5wdXRbdHlwZT0icmFkaW8iXXttYXJnaW46MCAhaW1wb3J0YW50O3ZlcnRpY2FsLWFsaWduOm1pZGRsZSAhaW1wb3J0YW50fSNfZm9ybV8xOV8gLl9yb3cgaW5wdXRbdHlwZT0iY2hlY2tib3giXStzcGFuIGxhYmVse2Rpc3BsYXk6aW5saW5lfSNfZm9ybV8xOV8gLl9yb3cgc3BhbiBsYWJlbHttYXJnaW46MCAhaW1wb3J0YW50O3dpZHRoOmluaXRpYWwgIWltcG9ydGFudDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUgIWltcG9ydGFudH0jX2Zvcm1fMTlfIC5fZm9ybS1pbWFnZXttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0byAhaW1wb3J0YW50fSNfZm9ybV8xOV8gaW5wdXRbdHlwZT0idGV4dCJde3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxLjNlbTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0jX2Zvcm1fMTlfIGlucHV0W3R5cGU9InJhZGlvIl0sI19mb3JtXzE5XyBpbnB1dFt0eXBlPSJjaGVja2JveCJde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEuM2VtO2hlaWdodDoxLjNlbTtmb250LXNpemU6MWVtO21hcmdpbjowIDAuM2VtIDAgMDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0jX2Zvcm1fMTlfIGJ1dHRvblt0eXBlPSJzdWJtaXQiXXtwYWRkaW5nOjIwcHg7Zm9udC1zaXplOjEuNWVtfSNfZm9ybV8xOV8gLl9pbmxpbmUtc3R5bGV7bWFyZ2luOjIwcHggMCAwICFpbXBvcnRhbnR9I19mb3JtXzE5XyAuX2lubGluZS1zdHlsZSBpbnB1dFt0eXBlPSJ0ZXh0Il17d2lkdGg6MTAwJX19I19mb3JtXzE5XyAuc21zX2NvbnNlbnRfY2hlY2tib3h7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nOjIwcHggMH0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCBpbnB1dFt0eXBlPSJjaGVja2JveCJde2Zsb2F0OmxlZnQ7bWFyZ2luOjVweCAxMHB4IDEwcHggMH0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCAuc21zX2NvbnNlbnRfbWVzc2FnZXtkaXNwbGF5OmlubGluZTtmbG9hdDpsZWZ0O3RleHQtYWxpZ246bGVmdDttYXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzdEODc5OX0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCAuc21zX2NvbnNlbnRfbWVzc2FnZS5zbXNfY29uc2VudF9taW5pe3dpZHRoOjkwJX0jX2Zvcm1fMTlfIC5zbXNfY29uc2VudF9jaGVja2JveCAuX2Vycm9yLl9hYm92ZXtyaWdodDphdXRvO2JvdHRvbTowfSNfZm9ybV8xOV8gLnNtc19jb25zZW50X2NoZWNrYm94IC5fZXJyb3IuX2Fib3ZlIC5fZXJyb3ItYXJyb3d7cmlnaHQ6YXV0bztsZWZ0OjVweH1AbWVkaWEgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpeyNfZm9ybV8xOV8gLnNtc19jb25zZW50X2NoZWNrYm94IC5fZXJyb3IuX2Fib3Zle3RvcDotMzBweDtsZWZ0OjA7Ym90dG9tOmF1dG99fSNfZm9ybV8xOV8gLmZpZWxkLXJlcXVpcmVke2NvbG9yOiNGRjAwMDB9I19mb3JtXzE5XyAuX3Nob3dfYmVfZXJyb3J7bWluLXdpZHRoOjEwMCV9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0sI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWNvbnRlbnR7Zm9udC1mYW1pbHk6IklCTSBQbGV4IFNhbnMiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZ9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9yb3cgc3Bhbjpub3QoLmZpZWxkLXJlcXVpcmVkKSwjX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX3JvdyBsYWJlbHtmb250LWZhbWlseToiSUJNIFBsZXggU2FucyIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42ZW19I19mb3JtXzE5X19pbmxpbmVmb3JtIGlucHV0W3R5cGU9InRleHQiXSwjX2Zvcm1fMTlfX2lubGluZWZvcm0gaW5wdXRbdHlwZT0iZGF0ZSJdLCNfZm9ybV8xOV9faW5saW5lZm9ybSBpbnB1dFt0eXBlPSJ0ZWwiXSwjX2Zvcm1fMTlfX2lubGluZWZvcm0gc2VsZWN0LCNfZm9ybV8xOV9faW5saW5lZm9ybSB0ZXh0YXJlYTpub3QoLmctcmVjYXB0Y2hhLXJlc3BvbnNlKXtmb250LWZhbWlseToiSUJNIFBsZXggU2FucyIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7Zm9udC1jb2xvcjojMDAwMDAwO2xpbmUtaGVpZ2h0OjEuNmVtfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5faHRtbC1jb2RlICo6bm90KGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYpLCNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5zbXNfY29uc2VudF9tZXNzYWdlLCNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS10aGFuay15b3V7Zm9udC1mYW1pbHk6IklCTSBQbGV4IFNhbnMiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZ9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWxhYmVsLCNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1lbWFpbGlkZW50aWZpZXIsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWNoZWNrYm94LW9wdGlvbi1sYWJlbHtmb250LWZhbWlseToiSUJNIFBsZXggU2FucyIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS42ZW19I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDEsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDIsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDMsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDQsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDUsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9odG1sLWNvZGUgaDYsI19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLXRpdGxle2ZvbnQtc2l6ZToyMnB4O2xpbmUtaGVpZ2h0Om5vcm1hbDtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTowO2Rpc3BsYXk6YmxvY2t9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWJyYW5kaW5ne2ZvbnQtZmFtaWx5OiJJQk0gUGxleCBTYW5zIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjEwMDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWRlY29yYXRpb246bm9uZX0jX2Zvcm1fMTlfOmJlZm9yZSwjX2Zvcm1fMTlfOmFmdGVye2NvbnRlbnQ6IiAiO2Rpc3BsYXk6dGFibGV9I19mb3JtXzE5XzphZnRlcntjbGVhcjpib3RofSNfZm9ybV8xOV8uX2lubGluZS1zdHlsZXt3aWR0aDphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrfSNfZm9ybV8xOV8uX2lubGluZS1zdHlsZSBpbnB1dFt0eXBlPSJ0ZXh0Il0sI19mb3JtXzE5Xy5faW5saW5lLXN0eWxlIGlucHV0W3R5cGU9ImRhdGUiXXtwYWRkaW5nOjEwcHggMTJweH0jX2Zvcm1fMTlfLl9pbmxpbmUtc3R5bGUgYnV0dG9uLl9pbmxpbmUtc3R5bGV7cG9zaXRpb246cmVsYXRpdmU7dG9wOjI3cHh9I19mb3JtXzE5Xy5faW5saW5lLXN0eWxlIHB7bWFyZ2luOjB9I19mb3JtXzE5Xy5faW5saW5lLXN0eWxlIC5fYnV0dG9uLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjE2cHggMTIuNXB4IDAgMjBweH0jX2Zvcm1fMTlfIC5fZm9ybS10aGFuay15b3V7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowO3JpZ2h0OjA7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE4cHh9I19mb3JtXzE5XyAuX2Zvcm0tcGMtY29uZmlybWF0aW9uIC5fc3VibWl0e21hcmdpbi10b3A6MTZweH1AbWVkaWEgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpeyNfZm9ybV8xOV8uX2lubGluZS1mb3JtLl9pbmxpbmUtc3R5bGUgLl9pbmxpbmUtc3R5bGUuX2J1dHRvbi13cmFwcGVye21hcmdpbi10b3A6MjBweCAhaW1wb3J0YW50O21hcmdpbi1sZWZ0OjAgIWltcG9ydGFudH19I19mb3JtXzE5XyAuaXRpe3dpZHRoOjEwMCV9I19mb3JtXzE5XyAuaXRpLml0aS0tYWxsb3ctZHJvcGRvd24uaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGV7d2lkdGg6MTAwJX0jX2Zvcm1fMTlfIC5pdGkgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6Izk3OTc5NyAxcHggc29saWQ7Ym9yZGVyLXJhZGl1czo0cHh9I19mb3JtXzE5XyAuaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGUgLml0aV9fc2VsZWN0ZWQtZmxhZ3tiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7Ym9yZGVyLXJhZGl1czo0cHh9I19mb3JtXzE5XyAuaXRpLS1zZXBhcmF0ZS1kaWFsLWNvZGUgLml0aV9fc2VsZWN0ZWQtZmxhZzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNSl9I19mb3JtXzE5XyAuaXRpX19jb3VudHJ5LWxpc3R7Ym9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo0cHg7bWluLXdpZHRoOjQ2MHB4fSNfZm9ybV8xOV8gLml0aV9fY291bnRyeS1saXN0LS1kcm9wdXB7bWFyZ2luLWJvdHRvbTo0cHh9I19mb3JtXzE5XyAucGhvbmUtZXJyb3ItaGlkZGVue2Rpc3BsYXk6bm9uZX0jX2Zvcm1fMTlfIC5waG9uZS1lcnJvcntjb2xvcjojRTQwRTQ5fSNfZm9ybV8xOV8gLnBob25lLWlucHV0LWVycm9ye2JvcmRlcjoxcHggc29saWQgI0U0MEU0OSAhaW1wb3J0YW50fSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgZmllbGRzZXR7bWFyZ2luOjA7bWFyZ2luLWJvdHRvbToxLjE0Mjg1NzE0MjllbTtib3JkZXI6bm9uZTtwYWRkaW5nOjB9I19mb3JtXzE5Xy5faW5saW5lLWZvcm0gLl9mb3JtLWNvbnRlbnQgLl9mb3JtLWxpc3Qtc3Vic2NyaXB0aW9ucy1maWVsZCBmaWVsZHNldDpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIGxlZ2VuZHttYXJnaW4tYm90dG9tOjEuMTQyODU3MTQyOWVtfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgbGFiZWx7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWFyZ2luLWJvdHRvbTowLjg1NzE0Mjg1NzFlbX0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIGxhYmVsOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgaW5wdXR7bWFyZ2luOjA7bWFyZ2luLXJpZ2h0OjhweH0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIC5fZm9ybS1jaGVja2JveC1vcHRpb24tbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDo0MDA7bWFyZ2luLXRvcDotNHB4fSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgLl9mb3JtLWNoZWNrYm94LW9wdGlvbi1sYWJlbC13aXRoLWRlc2NyaXB0aW9ue2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi10b3A6LTRweH0jX2Zvcm1fMTlfLl9pbmxpbmUtZm9ybSAuX2Zvcm0tY29udGVudCAuX2Zvcm0tbGlzdC1zdWJzY3JpcHRpb25zLWZpZWxkIC5fZm9ybS1jaGVja2JveC1vcHRpb24tZGVzY3JpcHRpb257bWFyZ2luOjA7Zm9udC1zaXplOjAuODU3MTQyODU3MWVtfSNfZm9ybV8xOV8uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50IC5fZm9ybS1saXN0LXN1YnNjcmlwdGlvbnMtZmllbGQgLl9mb3JtLXN1YnNjcmlwdGlvbnMtdW5zdWJzY3JpYmUtYWxsLWRlc2NyaXB0aW9ue2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW4tdG9wOi0ycHh9PC9zdHlsZT4KPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249Imh0dHBzOi8vZm9ydGl1c2NhcDY0OTM3LmFjdGl2ZWhvc3RlZC5jb20vcHJvYy5waHAiIGlkPSJfZm9ybV8xOV8iIGNsYXNzPSJfZm9ybSBfZm9ybV8xOSBfaW5saW5lLWZvcm0gIF9kYXJrIiBub3ZhbGlkYXRlPSIiIGRhdGEtc3R5bGVzLXZlcnNpb249IjUiPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InUiIHZhbHVlPSIxOSI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZiIgdmFsdWU9IjE5Ij4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzIj4KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjIiB2YWx1ZT0iMCI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibSIgdmFsdWU9IjAiPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InN1YiI+CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idiIgdmFsdWU9IjIiPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9yIiB2YWx1ZT0iN2YzMDBlM2YtMzg2OC00YzY3LWIwYTUtYmZkMTU2N2RiYjc1Ij4KICA8ZGl2IGNsYXNzPSJfZm9ybS1jb250ZW50Ij4KCgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iX2Zvcm1fZWxlbWVudCBfeDQ4MjM0MjA3IHZjX2NvbHVtbl9jb250YWluZXIgdmNfY29sLXNtLTUiPgogICAgICA8L2xhYmVsPgogICAgICA8ZGl2IGNsYXNzPSJfZmllbGQtd3JhcHBlciI+CiAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJmdWxsbmFtZSIgbmFtZT0iZnVsbG5hbWUiIHBsYWNlaG9sZGVyPSJTdSBub21icmUqIiByZXF1aXJlZD0iIj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Il9mb3JtX2VsZW1lbnQgX3g4NzkzMTMzMSB2Y19jb2x1bW5fY29udGFpbmVyIHZjX2NvbC1zbS01Ij4KICAgIDxkaXYgY2xhc3M9Il9maWVsZC13cmFwcGVyIj4KICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJlbWFpbCIgbmFtZT0iZW1haWwiIHBsYWNlaG9sZGVyPSJJbnRyb2R1emNhIHN1IGNvcnJlbyBlbGVjdHLDs25pY28qIiByZXF1aXJlZD0iIj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9Il9idXR0b24td3JhcHBlciB2Y19jb2x1bW5fY29udGFpbmVyIHZjX2NvbC1zbS0yIj4KICAgIDxidXR0b24gaWQ9Il9mb3JtXzE5X3N1Ym1pdCIgY2xhc3M9Il9zdWJtaXQiIHR5cGU9InN1Ym1pdCI+CiBSZWdpc3RyYXJzZQogICAgPC9idXR0b24+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iX2NsZWFyLWVsZW1lbnQiPgogIDwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iX2Zvcm0tdGhhbmsteW91IiBzdHlsZT0iZGlzcGxheTpub25lOyI+CjwvZGl2Pgo8L2Zvcm0+PHNjcmlwdD4Kd2luZG93LmNmaWVsZHMgPSBbXTsKd2luZG93Ll9zaG93X3RoYW5rX3lvdSA9IGZ1bmN0aW9uKGlkLCBtZXNzYWdlLCB0cmFja2NtcF91cmwsIGVtYWlsKSB7CiAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8nICsgaWQgKyAnXycpLCB0aGFua195b3UgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS10aGFuay15b3UnKTsKICAgIGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLWNvbnRlbnQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgdGhhbmtfeW91LmlubmVySFRNTCA9IG1lc3NhZ2U7CiAgICB0aGFua195b3Uuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICBjb25zdCB2Z29BbGlhcyA9IHR5cGVvZiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXMgPT09ICd1bmRlZmluZWQnID8gJ3ZnbycgOiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXM7CiAgICB2YXIgdmlzaXRvck9iamVjdCA9IHdpbmRvd1t2Z29BbGlhc107CiAgICBpZiAoZW1haWwgJiYgdHlwZW9mIHZpc2l0b3JPYmplY3QgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgdmlzaXRvck9iamVjdCgnc2V0RW1haWwnLCBlbWFpbCk7CiAgICAgICAgdmlzaXRvck9iamVjdCgndXBkYXRlJyk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZih0cmFja2NtcF91cmwpICE9ICd1bmRlZmluZWQnICYmIHRyYWNrY21wX3VybCkgewogICAgICAgIC8vIFNpdGUgdHJhY2tpbmcgVVJMIHRvIHVzZSBhZnRlciBpbmxpbmUgZm9ybSBzdWJtaXNzaW9uLgogICAgICAgIF9sb2FkX3NjcmlwdCh0cmFja2NtcF91cmwpOwogICAgfQogICAgaWYgKHR5cGVvZiB3aW5kb3cuX2Zvcm1fY2FsbGJhY2sgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuX2Zvcm1fY2FsbGJhY2soaWQpOwogICAgdGhhbmtfeW91LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTsKICAgIHRoYW5rX3lvdS5mb2N1cygpOwp9Owp3aW5kb3cuX3Nob3dfdW5zdWJzY3JpYmUgPSBmdW5jdGlvbihpZCwgbWVzc2FnZSwgdHJhY2tjbXBfdXJsLCBlbWFpbCkgewogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX2Zvcm1fJyArIGlkICsgJ18nKSwgdW5zdWIgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS10aGFuay15b3UnKTsKICAgIHZhciBicmFuZGluZyA9IGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLWJyYW5kaW5nJyk7CiAgICBpZiAoYnJhbmRpbmcpIHsKICAgICAgICBicmFuZGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQogICAgZm9ybS5xdWVyeVNlbGVjdG9yKCcuX2Zvcm0tY29udGVudCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB1bnN1Yi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIGZvcm0uaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsIG1lc3NhZ2UpCiAgICBjb25zdCB2Z29BbGlhcyA9IHR5cGVvZiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXMgPT09ICd1bmRlZmluZWQnID8gJ3ZnbycgOiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXM7CiAgICB2YXIgdmlzaXRvck9iamVjdCA9IHdpbmRvd1t2Z29BbGlhc107CiAgICBpZiAoZW1haWwgJiYgdHlwZW9mIHZpc2l0b3JPYmplY3QgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgdmlzaXRvck9iamVjdCgnc2V0RW1haWwnLCBlbWFpbCk7CiAgICAgICAgdmlzaXRvck9iamVjdCgndXBkYXRlJyk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZih0cmFja2NtcF91cmwpICE9ICd1bmRlZmluZWQnICYmIHRyYWNrY21wX3VybCkgewogICAgICAgIC8vIFNpdGUgdHJhY2tpbmcgVVJMIHRvIHVzZSBhZnRlciBpbmxpbmUgZm9ybSBzdWJtaXNzaW9uLgogICAgICAgIF9sb2FkX3NjcmlwdCh0cmFja2NtcF91cmwpOwogICAgfQogICAgaWYgKHR5cGVvZiB3aW5kb3cuX2Zvcm1fY2FsbGJhY2sgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuX2Zvcm1fY2FsbGJhY2soaWQpOwp9Owp3aW5kb3cuX3Nob3dfZXJyb3IgPSBmdW5jdGlvbihpZCwgbWVzc2FnZSwgaHRtbCkgewogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX2Zvcm1fJyArIGlkICsgJ18nKSwKICAgICAgICBlcnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKICAgICAgICBidXR0b24gPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPSJzdWJtaXQiXScpLAogICAgICAgIG9sZF9lcnJvciA9IGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtX2Vycm9yJyk7CiAgICBpZiAob2xkX2Vycm9yKSBvbGRfZXJyb3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRfZXJyb3IpOwogICAgZXJyLmlubmVySFRNTCA9IG1lc3NhZ2U7CiAgICBlcnIuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lciBfZm9ybV9lcnJvciBfbm9fYXJyb3cnOwogICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gJ19mb3JtLWlubmVyIF9zaG93X2JlX2Vycm9yJzsKICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoZXJyKTsKICAgIGJ1dHRvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLCBidXR0b24pOwogICAgdmFyIHN1Ym1pdEJ1dHRvbiA9IGZvcm0ucXVlcnlTZWxlY3RvcignW2lkXj0iX2Zvcm0iXVtpZCQ9Il9zdWJtaXQiXScpOwogICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICBzdWJtaXRCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgncHJvY2Vzc2luZycpOwogICAgaWYgKGh0bWwpIHsKICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICdfZXJyb3ItaHRtbCc7CiAgICAgICAgZGl2LmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgZXJyLmFwcGVuZENoaWxkKGRpdik7CiAgICB9Cn07CndpbmRvdy5fc2hvd19wY19jb25maXJtYXRpb24gPSBmdW5jdGlvbihpZCwgaGVhZGVyLCBkZXRhaWwsIHNob3csIGVtYWlsKSB7CiAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8nICsgaWQgKyAnXycpLCBwY19jb25maXJtYXRpb24gPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS1wYy1jb25maXJtYXRpb24nKTsKICAgIGlmIChwY19jb25maXJtYXRpb24uc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7CiAgICAgICAgZm9ybS5xdWVyeVNlbGVjdG9yKCcuX2Zvcm0tY29udGVudCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgcGNfY29uZmlybWF0aW9uLmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPSdfZm9ybS10aXRsZSc+IiArIGhlYWRlciArICI8L2Rpdj4iICsgIjxwPiIgKyBkZXRhaWwgKyAiPC9wPiIgKwogICAgICAgICI8YnV0dG9uIGNsYXNzPSdfc3VibWl0JyBpZD0naGlkZUJ1dHRvbic+TWFuYWdlIHByZWZlcmVuY2VzPC9idXR0b24+IjsKICAgICAgICBwY19jb25maXJtYXRpb24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgdmFyIG1wID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT0ibXAiXScpOwogICAgICAgIG1wLnZhbHVlID0gJzAnOwogICAgfSBlbHNlIHsKICAgICAgICBmb3JtLnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybS1jb250ZW50Jykuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOwogICAgICAgIHBjX2NvbmZpcm1hdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQoKICAgIHZhciBoaWRlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hpZGVCdXR0b24nKTsKICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lciB0byB0aGUgYnV0dG9uCiAgICBoaWRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHN1Ym1pdEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNfZm9ybV8xOV9zdWJtaXQnKTsKICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICBzdWJtaXRCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgncHJvY2Vzc2luZycpOwogICAgICAgIHZhciBtcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9Im1wIl0nKTsKICAgICAgICBtcC52YWx1ZSA9ICcxJzsKICAgICAgICBjb25zdCBjYWNoZUJ1c3RlciA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpOwogICAgICAgIGNhY2hlQnVzdGVyLnNlYXJjaFBhcmFtcy5zZXQoJ3YnLCBuZXcgRGF0ZSgpLmdldFRpbWUoKSk7CiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBjYWNoZUJ1c3Rlci50b1N0cmluZygpOwogICAgfSk7CgogICAgY29uc3QgdmdvQWxpYXMgPSB0eXBlb2YgdmlzaXRvckdsb2JhbE9iamVjdEFsaWFzID09PSAndW5kZWZpbmVkJyA\/ICd2Z28nIDogdmlzaXRvckdsb2JhbE9iamVjdEFsaWFzOwogICAgdmFyIHZpc2l0b3JPYmplY3QgPSB3aW5kb3dbdmdvQWxpYXNdOwogICAgaWYgKGVtYWlsICYmIHR5cGVvZiB2aXNpdG9yT2JqZWN0ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHZpc2l0b3JPYmplY3QoJ3NldEVtYWlsJywgZW1haWwpOwogICAgICAgIHZpc2l0b3JPYmplY3QoJ3VwZGF0ZScpOwogICAgfSBlbHNlIGlmICh0eXBlb2YodHJhY2tjbXBfdXJsKSAhPSAndW5kZWZpbmVkJyAmJiB0cmFja2NtcF91cmwpIHsKICAgICAgICAvLyBTaXRlIHRyYWNraW5nIFVSTCB0byB1c2UgYWZ0ZXIgaW5saW5lIGZvcm0gc3VibWlzc2lvbi4KICAgICAgICBfbG9hZF9zY3JpcHQodHJhY2tjbXBfdXJsKTsKICAgIH0KICAgIGlmICh0eXBlb2Ygd2luZG93Ll9mb3JtX2NhbGxiYWNrICE9PSAndW5kZWZpbmVkJykgd2luZG93Ll9mb3JtX2NhbGxiYWNrKGlkKTsKfTsKd2luZG93Ll9sb2FkX3NjcmlwdCA9IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2ssIGlzU3VibWl0KSB7CiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKSwgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIHIgPSBmYWxzZTsKICAgIHZhciBzdWJtaXRCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjX2Zvcm1fMTlfc3VibWl0Jyk7CiAgICBzY3JpcHQuY2hhcnNldCA9ICd1dGYtOCc7CiAgICBzY3JpcHQuc3JjID0gdXJsOwogICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFyICYmICghdGhpcy5yZWFkeVN0YXRlIHx8IHRoaXMucmVhZHlTdGF0ZSA9PSAnY29tcGxldGUnKSkgewogICAgICAgICAgICAgICAgciA9IHRydWU7CiAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0KICAgIHNjcmlwdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGlzU3VibWl0KSB7CiAgICAgICAgICAgIGlmIChzY3JpcHQuc3JjLmxlbmd0aCA+IDEwMDAwKSB7CiAgICAgICAgICAgICAgICBfc2hvd19lcnJvcigiMTkiLCAiU29ycnksIHlvdXIgc3VibWlzc2lvbiBmYWlsZWQuIFBsZWFzZSBzaG9ydGVuIHlvdXIgcmVzcG9uc2VzIGFuZCB0cnkgYWdhaW4uIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfc2hvd19lcnJvcigiMTkiLCAiU29ycnksIHlvdXIgc3VibWlzc2lvbiBmYWlsZWQuIFBsZWFzZSB0cnkgYWdhaW4uIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdwcm9jZXNzaW5nJyk7CiAgICAgICAgfQogICAgfQoKICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKfTsKKGZ1bmN0aW9uKCkgewogICAgdmFyIGl0aTsKICAgIGlmICh3aW5kb3cubG9jYXRpb24uc2VhcmNoLnNlYXJjaCgiZXhjbHVkZWZvcm0iKSAhPT0gLTEpIHJldHVybiBmYWxzZTsKICAgIHZhciBnZXRDb29raWUgPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDsgKScgKyBuYW1lICsgJz0oW147XSspJykpOwogICAgICAgIHJldHVybiBtYXRjaCA\/IG1hdGNoWzJdIDogbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7CiAgICB9CiAgICB2YXIgc2V0Q29va2llID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHsKICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKICAgICAgICB2YXIgdGltZSA9IG5vdy5nZXRUaW1lKCk7CiAgICAgICAgdmFyIGV4cGlyZVRpbWUgPSB0aW1lICsgMTAwMCAqIDYwICogNjAgKiAyNCAqIDM2NTsKICAgICAgICBub3cuc2V0VGltZShleHBpcmVUaW1lKTsKICAgICAgICBkb2N1bWVudC5jb29raWUgPSBuYW1lICsgJz0nICsgdmFsdWUgKyAnOyBleHBpcmVzPScgKyBub3cgKyAnO3BhdGg9LzsgU2VjdXJlOyBTYW1lU2l0ZT1MYXg7JzsKICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCB2YWx1ZSk7CiAgICB9CiAgICB2YXIgYWRkRXZlbnQgPSBmdW5jdGlvbihlbGVtZW50LCBldmVudCwgZnVuYykgewogICAgICAgIGlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgb2xkRnVuYyA9IGVsZW1lbnRbJ29uJyArIGV2ZW50XTsKICAgICAgICAgICAgZWxlbWVudFsnb24nICsgZXZlbnRdID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBvbGRGdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgdmFyIF9yZW1vdmVkID0gZmFsc2U7CiAgICAgICAgdmFyIGZvcm1fdG9fc3VibWl0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19mb3JtXzE5XycpOwogICAgdmFyIGFsbElucHV0cyA9IGZvcm1fdG9fc3VibWl0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJyksIHRvb2x0aXBzID0gW10sIHN1Ym1pdHRlZCA9IGZhbHNlOwoKICAgIHZhciBnZXRVcmxQYXJhbSA9IGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnZW1haWwnKSB7CiAgICAgICAgICAgIHZhciBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgICAgICByZXR1cm4gcGFyYW1zLmdldChuYW1lKSB8fCBmYWxzZTsKICAgICAgICB9CiAgICAgICAgLy8gZW1haWwgaXMgYSBzcGVjaWFsIGNhc2UgYmVjYXVzZSBhIHBsdXMgaXMgdmFsaWQgaW4gdGhlIGVtYWlsIGFkZHJlc3MKICAgICAgICB2YXIgcVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CiAgICAgICAgaWYgKCFxU3RyaW5nKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSBxU3RyaW5nLnN1YnN0cigxKS5zcGxpdCgnJicpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tpXS5zcGxpdCgnPScpOwogICAgICAgICAgICBpZiAocGFyYW1ldGVyWzBdLnRvTG93ZXJDYXNlKCkgPT09ICdlbWFpbCcpIHsKICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJbMV0gPT09IHVuZGVmaW5lZCA\/IHRydWUgOiBkZWNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyWzFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHZhciBhY2N0RGF0ZUZvcm1hdCA9ICIlbS8lZC8lWSI7CiAgICB2YXIgZ2V0Tm9ybWFsaXplZERhdGUgPSBmdW5jdGlvbihkYXRlLCBhY2N0Rm9ybWF0KSB7CiAgICAgICAgdmFyIGRlY29kZWREYXRlID0gZGVjb2RlVVJJQ29tcG9uZW50KGRhdGUpOwogICAgICAgIGlmIChhY2N0Rm9ybWF0ICYmIGFjY3RGb3JtYXQubWF0Y2goLyglZHwlZSkuKiVtL2dpKSAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gZGVjb2RlZERhdGUucmVwbGFjZSgvKFxkezJ9KS4qKFxkezJ9KS4qKFxkezR9KS9nLCAnJDMtJDItJDEnKTsKICAgICAgICB9IGVsc2UgaWYgKERhdGUucGFyc2UoZGVjb2RlZERhdGUpKSB7CiAgICAgICAgICAgIHZhciBkYXRlT2JqID0gbmV3IERhdGUoZGVjb2RlZERhdGUpOwogICAgICAgICAgICB2YXIgeWVhciA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKTsKICAgICAgICAgICAgdmFyIG1vbnRoID0gZGF0ZU9iai5nZXRNb250aCgpICsgMTsKICAgICAgICAgICAgdmFyIGRheSA9IGRhdGVPYmouZ2V0RGF0ZSgpOwogICAgICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aCAgMTAgPyBgMCR7bW9udGh9YCA6IG1vbnRofS0ke2RheSAgMTAgPyBgMCR7ZGF5fWAgOiBkYXl9YDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCiAgICB2YXIgZ2V0Tm9ybWFsaXplZFRpbWUgPSBmdW5jdGlvbih0aW1lKSB7CiAgICAgICAgdmFyIGhvdXIsIG1pbnV0ZXM7CiAgICAgICAgdmFyIGRlY29kZWRUaW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHRpbWUpOwogICAgICAgIHZhciB0aW1lUGFydHMgPSBBcnJheS5mcm9tKGRlY29kZWRUaW1lLm1hdGNoQWxsKC8oXGR7MSwyfSk6KFxkezEsMn0pXFcqKFtBYVBwXVtNbV0pPy9nbSkpWzBdOwogICAgICAgIGlmICh0aW1lUGFydHNbM10pIHsgLy8gMTIgaG91ciBmb3JtYXQKICAgICAgICAgICAgdmFyIGlzUE0gPSB0aW1lUGFydHNbM10udG9Mb3dlckNhc2UoKSA9PT0gJ3BtJzsKICAgICAgICAgICAgaWYgKGlzUE0pIHsKICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludCh0aW1lUGFydHNbMV0pID09PSAxMiA\/ICcxMicgOiBgJHtwYXJzZUludCh0aW1lUGFydHNbMV0pICsgMTJ9YDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludCh0aW1lUGFydHNbMV0pID09PSAxMiA\/ICcwJyA6IHRpbWVQYXJ0c1sxXTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7IC8vIDI0IGhvdXIgZm9ybWF0CiAgICAgICAgICAgIGhvdXIgPSB0aW1lUGFydHNbMV07CiAgICAgICAgfQogICAgICAgIHZhciBub3JtYWxpemVkSG91ciA9IHBhcnNlSW50KGhvdXIpICAxMCA\/IGAwJHtwYXJzZUludChob3VyKX1gIDogaG91cjsKICAgICAgICB2YXIgbWludXRlcyA9IHRpbWVQYXJ0c1syXTsKICAgICAgICByZXR1cm4gYCR7bm9ybWFsaXplZEhvdXJ9OiR7bWludXRlc31gOwogICAgfTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSAgYWxsSW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlZ2V4U3RyID0gImZpZWxkXFxbKFxcZCspXFxdIjsKICAgICAgICB2YXIgcmVzdWx0cyA9IG5ldyBSZWdFeHAocmVnZXhTdHIpLmV4ZWMoYWxsSW5wdXRzW2ldLm5hbWUpOwogICAgICAgIGlmIChyZXN1bHRzICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICBhbGxJbnB1dHNbaV0uZGF0YXNldC5uYW1lID0gYWxsSW5wdXRzW2ldLm5hbWUubWF0Y2goL1xbdGltZVxdJC8pCiAgICAgICAgICAgICAgICA\/IGAke3dpbmRvdy5jZmllbGRzW3Jlc3VsdHNbMV1dfV90aW1lYAogICAgICAgICAgICAgICAgOiB3aW5kb3cuY2ZpZWxkc1tyZXN1bHRzWzFdXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhbGxJbnB1dHNbaV0uZGF0YXNldC5uYW1lID0gYWxsSW5wdXRzW2ldLm5hbWU7CiAgICAgICAgfQogICAgICAgIHZhciBmaWVsZFZhbCA9IGdldFVybFBhcmFtKGFsbElucHV0c1tpXS5kYXRhc2V0Lm5hbWUpOwoKICAgICAgICBpZiAoZmllbGRWYWwpIHsKICAgICAgICAgICAgaWYgKGFsbElucHV0c1tpXS5kYXRhc2V0LmF1dG9maWxsID09PSAiZmFsc2UiKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYWxsSW5wdXRzW2ldLnR5cGUgPT0gInJhZGlvIiB8fCBhbGxJbnB1dHNbaV0udHlwZSA9PSAiY2hlY2tib3giKSB7CiAgICAgICAgICAgICAgICBpZiAoYWxsSW5wdXRzW2ldLnZhbHVlID09IGZpZWxkVmFsKSB7CiAgICAgICAgICAgICAgICAgICAgYWxsSW5wdXRzW2ldLmNoZWNrZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGFsbElucHV0c1tpXS50eXBlID09ICJkYXRlIikgewogICAgICAgICAgICAgICAgYWxsSW5wdXRzW2ldLnZhbHVlID0gZ2V0Tm9ybWFsaXplZERhdGUoZmllbGRWYWwsIGFjY3REYXRlRm9ybWF0KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChhbGxJbnB1dHNbaV0udHlwZSA9PSAidGltZSIpIHsKICAgICAgICAgICAgICAgIGFsbElucHV0c1tpXS52YWx1ZSA9IGdldE5vcm1hbGl6ZWRUaW1lKGZpZWxkVmFsKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGFsbElucHV0c1tpXS52YWx1ZSA9IGZpZWxkVmFsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHZhciByZW1vdmVfdG9vbHRpcHMgPSBmdW5jdGlvbigpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSAgdG9vbHRpcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdG9vbHRpcHNbaV0udGlwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodG9vbHRpcHNbaV0udGlwKTsKICAgICAgICB9CiAgICAgICAgdG9vbHRpcHMgPSBbXTsKICAgIH07CiAgICB2YXIgcmVtb3ZlX3Rvb2x0aXAgPSBmdW5jdGlvbihlbGVtKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIHRvb2x0aXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICh0b29sdGlwc1tpXS5lbGVtID09PSBlbGVtKSB7CiAgICAgICAgICAgICAgICB0b29sdGlwc1tpXS50aXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0b29sdGlwc1tpXS50aXApOwogICAgICAgICAgICAgICAgdG9vbHRpcHMuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIHZhciBjcmVhdGVfdG9vbHRpcCA9IGZ1bmN0aW9uKGVsZW0sIHRleHQpIHsKICAgICAgICB2YXIgdG9vbHRpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAogICAgICAgICAgICBhcnJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAogICAgICAgICAgICBpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCBuZXdfdG9vbHRpcCA9IHt9OwogICAgICAgIHRvb2x0aXAuaWQgPSBgJHtlbGVtLmlkfS1lcnJvcmA7CiAgICAgICAgdG9vbHRpcC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnYWxlcnQnKQogICAgICAgIGlmIChlbGVtLnR5cGUgIT0gJ3JhZGlvJyAmJiAoZWxlbS50eXBlICE9ICdjaGVja2JveCcgfHwgZWxlbS5uYW1lID09PSAnc21zX2NvbnNlbnQnKSkgewogICAgICAgICAgICB0b29sdGlwLmNsYXNzTmFtZSA9ICdfZXJyb3InOwogICAgICAgICAgICBhcnJvdy5jbGFzc05hbWUgPSAnX2Vycm9yLWFycm93JzsKICAgICAgICAgICAgaW5uZXIuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lcic7CiAgICAgICAgICAgIGlubmVyLmlubmVySFRNTCA9IHRleHQ7CiAgICAgICAgICAgIHRvb2x0aXAuYXBwZW5kQ2hpbGQoYXJyb3cpOwogICAgICAgICAgICB0b29sdGlwLmFwcGVuZENoaWxkKGlubmVyKTsKICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRvb2x0aXApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRvb2x0aXAuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lciBfbm9fYXJyb3cnOwogICAgICAgICAgICB0b29sdGlwLmlubmVySFRNTCA9IHRleHQ7CiAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodG9vbHRpcCwgZWxlbSk7CiAgICAgICAgICAgIG5ld190b29sdGlwLm5vX2Fycm93ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgbmV3X3Rvb2x0aXAudGlwID0gdG9vbHRpcDsKICAgICAgICBuZXdfdG9vbHRpcC5lbGVtID0gZWxlbTsKICAgICAgICB0b29sdGlwcy5wdXNoKG5ld190b29sdGlwKTsKICAgICAgICByZXR1cm4gbmV3X3Rvb2x0aXA7CiAgICB9OwogICAgdmFyIHJlc2l6ZV90b29sdGlwID0gZnVuY3Rpb24odG9vbHRpcCkgewogICAgICAgIHZhciByZWN0ID0gdG9vbHRpcC5lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHZhciBkb2MgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCiAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uID0gcmVjdC50b3AgLSAoKHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2Muc2Nyb2xsVG9wKSAgLSAoZG9jLmNsaWVudFRvcCB8fCAwKSk7CiAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uICA0MCkgewogICAgICAgICAgICB0b29sdGlwLnRpcC5jbGFzc05hbWUgPSB0b29sdGlwLnRpcC5jbGFzc05hbWUucmVwbGFjZSgvID8oX2Fib3ZlfF9iZWxvdykgPy9nLCAnJykgKyAnIF9iZWxvdyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdG9vbHRpcC50aXAuY2xhc3NOYW1lID0gdG9vbHRpcC50aXAuY2xhc3NOYW1lLnJlcGxhY2UoLyA\/KF9hYm92ZXxfYmVsb3cpID8vZywgJycpICsgJyBfYWJvdmUnOwogICAgICAgIH0KICAgIH07CiAgICB2YXIgcmVzaXplX3Rvb2x0aXBzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKF9yZW1vdmVkKSByZXR1cm47CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIHRvb2x0aXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICghdG9vbHRpcHNbaV0ubm9fYXJyb3cpIHJlc2l6ZV90b29sdGlwKHRvb2x0aXBzW2ldKTsKICAgICAgICB9CiAgICB9OwogICAgdmFyIHZhbGlkYXRlX2ZpZWxkID0gZnVuY3Rpb24oZWxlbSwgcmVtb3ZlKSB7CiAgICAgICAgdmFyIHRvb2x0aXAgPSBudWxsLCB2YWx1ZSA9IGVsZW0udmFsdWUsIG5vX2Vycm9yID0gdHJ1ZTsKICAgICAgICByZW1vdmUgPyByZW1vdmVfdG9vbHRpcChlbGVtKSA6IGZhbHNlOwogICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWludmFsaWQnKTsKICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpOwogICAgICAgIGlmIChlbGVtLnR5cGUgIT0gJ2NoZWNrYm94JykgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgaWYgKGVsZW0uZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpICE9PSBudWxsKSB7CiAgICAgICAgICAgIGlmIChlbGVtLnR5cGUgPT0gJ3JhZGlvJyB8fCAoZWxlbS50eXBlID09ICdjaGVja2JveCcgJiYgL2FueS8udGVzdChlbGVtLmNsYXNzTmFtZSkpKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbXMgPSBmb3JtX3RvX3N1Ym1pdC5lbGVtZW50c1tlbGVtLm5hbWVdOwogICAgICAgICAgICAgICAgaWYgKCEoZWxlbXMgaW5zdGFuY2VvZiBOb2RlTGlzdCB8fCBlbGVtcyBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uKSB8fCBlbGVtcy5sZW5ndGggPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgbm9fZXJyb3IgPSBlbGVtLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpICBlbGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbXNbaV0uY2hlY2tlZCkgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghbm9fZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIlBsZWFzZSBzZWxlY3QgYW4gb3B0aW9uLiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW0udHlwZSA9PSdjaGVja2JveCcpIHsKICAgICAgICAgICAgICAgIHZhciBlbGVtcyA9IGZvcm1fdG9fc3VibWl0LmVsZW1lbnRzW2VsZW0ubmFtZV0sIGZvdW5kID0gZmFsc2UsIGVyciA9IFtdOwogICAgICAgICAgICAgICAgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIGVsZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1zW2ldLmdldEF0dHJpYnV0ZSgncmVxdWlyZWQnKSA9PT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiBlbGVtc1tpXSAhPT0gZWxlbSkgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1zW2ldLmNsYXNzTmFtZSA9IGVsZW1zW2ldLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVtc1tpXS5jaGVja2VkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1zW2ldLmNsYXNzTmFtZSA9IGVsZW1zW2ldLmNsYXNzTmFtZSArICcgX2hhc19lcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5wdXNoKCJDaGVja2luZyAlcyBpcyByZXF1aXJlZCIucmVwbGFjZSgiJXMiLCBlbGVtc1tpXS52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghbm9fZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgZXJyLmpvaW4oJyEtLSB3cG1sOmh0bWxfc2VsZl9jbG9zaW5nX3RhZyBici8gLS0+JykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW0udGFnTmFtZSA9PSAnU0VMRUNUJykgewogICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlmIChlbGVtLm11bHRpcGxlKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0ub3B0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbS5vcHRpb25zW2ldLnNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtLm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW0ub3B0aW9uc1tpXS5zZWxlY3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCFlbGVtLm9wdGlvbnNbaV0udmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChlbGVtLm9wdGlvbnNbaV0udmFsdWUubWF0Y2goL1xuL2cpKSkKICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcCA9IGNyZWF0ZV90b29sdGlwKGVsZW0sICJQbGVhc2Ugc2VsZWN0IGFuIG9wdGlvbi4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgewogICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZSArICcgX2hhc19lcnJvcic7CiAgICAgICAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgICAgICAgdG9vbHRpcCA9IGNyZWF0ZV90b29sdGlwKGVsZW0sICJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChub19lcnJvciAmJiBlbGVtLm5hbWUgPT0gJ2VtYWlsJykgewogICAgICAgICAgICBpZiAoIXZhbHVlLm1hdGNoKC9eW1wrX2EtejAtOS0nJj1dKyhcLltcK19hLXowLTktJ10rKSpAW2EtejAtOS1dKyhcLlthLXowLTktXSspKihcLlthLXpdezIsfSkkL2kpKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIkVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobm9fZXJyb3IgJiYgKGVsZW0uaWQgPT0gJ3Bob25lJykpIHsKICAgICAgICAgICAgaWYgKGVsZW0udmFsdWUudHJpbSgpICYmIHR5cGVvZiBpdGkgIT0gJ3VuZGVmaW5lZCcgJiYgIWl0aS5pc1ZhbGlkTnVtYmVyKCkpIHsKICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBjcmVhdGVfdG9vbHRpcChlbGVtLCAiRW50ZXIgYSB2YWxpZCBwaG9uZSBudW1iZXIuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG5vX2Vycm9yICYmIC9kYXRlX2ZpZWxkLy50ZXN0KGVsZW0uY2xhc3NOYW1lKSkgewogICAgICAgICAgICBpZiAoIXZhbHVlLm1hdGNoKC9eXGRcZFxkXGQtXGRcZC1cZFxkJC8pKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIkVudGVyIGEgdmFsaWQgZGF0ZS4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKG5vX2Vycm9yICYmIGVsZW0ubmFtZSA9PT0gJ3Ntc19jb25zZW50JykgewogICAgICAgICAgICBjb25zdCBwaG9uZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bob25lJyk7CiAgICAgICAgICAgIGNvbnN0IGNvbnNlbnRSZXF1aXJlZCA9IHBob25lSW5wdXQuYXR0cmlidXRlcy5yZXF1aXJlZCB8fCBwaG9uZUlucHV0LnZhbHVlLmxlbmd0aCA+IDA7CiAgICAgICAgICAgIGNvbnN0IHNob3dFcnJvciA9ICAoY29uc2VudFJlcXVpcmVkIHx8ICEhZWxlbS5hdHRyaWJ1dGVzLnJlcXVpcmVkKSAmJiAhZWxlbS5jaGVja2VkOwogICAgICAgICAgICBpZiAoc2hvd0Vycm9yKSB7CiAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgICAgIG5vX2Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIlBsZWFzZSBjaGVjayB0aGlzIGJveCB0byBjb250aW51ZSIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdG9vbHRpcCA\/IHJlc2l6ZV90b29sdGlwKHRvb2x0aXApIDogZmFsc2U7CiAgICAgICAgaWYgKCFub19lcnJvciAmJiBlbGVtLmhhc0F0dHJpYnV0ZSgnaWQnKSkgewogICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgJ3RydWUnKTsKICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBgJHtlbGVtLmlkfS1lcnJvcmApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbm9fZXJyb3I7CiAgICB9OwogICAgdmFyIG5lZWRzX3ZhbGlkYXRlID0gZnVuY3Rpb24oZWwpIHsKICAgICAgICBpZihlbC5nZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJykgIT09IG51bGwpewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYoKGVsLm5hbWUgPT09ICdlbWFpbCcgfHwgZWwuaWQgPT09ICdwaG9uZScgfHwgZWwuaWQgPT09ICdzbXNfY29uc2VudCcpICYmIGVsLnZhbHVlICE9PSAiIil7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHZhciB2YWxpZGF0ZV9mb3JtID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBlcnIgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCcuX2Zvcm1fZXJyb3InKSwgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgIGlmICghc3VibWl0dGVkKSB7CiAgICAgICAgICAgIHN1Ym1pdHRlZCA9IHRydWU7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhbGxJbnB1dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGFsbElucHV0c1tpXTsKICAgICAgICAgICAgICAgIGlmIChuZWVkc192YWxpZGF0ZShpbnB1dCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQudHlwZSA9PSAndGV4dCcgfHwgaW5wdXQudHlwZSA9PSAnbnVtYmVyJyB8fCBpbnB1dC50eXBlID09ICd0aW1lJyB8fCBpbnB1dC50eXBlID09ICd0ZWwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnYmx1cicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUudHJpbSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVfZmllbGQodGhpcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBhZGRFdmVudChpbnB1dCwgJ2lucHV0JywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC50eXBlID09ICdyYWRpbycgfHwgaW5wdXQudHlwZSA9PSAnY2hlY2tib3gnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbihlbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0RWxlbWVudHNBcnJheShuYW1lKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICBmb3JtX3RvX3N1Ym1pdC5lbGVtZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdmFsdWVdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGlvcyA9IGdldEVsZW1lbnRzQXJyYXkoZWwubmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhZGlvcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KHJhZGlvc1tpXSwgJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZChlbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pKGlucHV0KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnRhZ05hbWUgPT0gJ1NFTEVDVCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoaW5wdXQsICdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnR5cGUgPT0gJ3RleHRhcmVhJyl7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVtb3ZlX3Rvb2x0aXBzKCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFsbElucHV0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICB2YXIgZWxlbSA9IGFsbElucHV0c1tpXTsKICAgICAgICAgICAgaWYgKG5lZWRzX3ZhbGlkYXRlKGVsZW0pKSB7CiAgICAgICAgICAgICAgICBpZiAoZWxlbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJzZWxlY3QiKSB7CiAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IGVsZW0udmFsdWUudHJpbSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFsaWRhdGVfZmllbGQoZWxlbSkgPyB0cnVlIDogbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIW5vX2Vycm9yICYmIGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgICBpZiAoIW5vX2Vycm9yKSB7CiAgICAgICAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlRXJyb3IgPSBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCcuX2hhc19lcnJvcjpub3QoW2Rpc2FibGVkXSknKTsKICAgICAgICAgICAgaWYgKGZpcnN0Rm9jdXNhYmxlRXJyb3IgJiYgdHlwZW9mIGZpcnN0Rm9jdXNhYmxlRXJyb3IuZm9jdXMgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgIGZpcnN0Rm9jdXNhYmxlRXJyb3IuZm9jdXMoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXNpemVfdG9vbHRpcHMoKTsKICAgICAgICByZXR1cm4gbm9fZXJyb3I7CiAgICB9OwogICAgYWRkRXZlbnQod2luZG93LCAncmVzaXplJywgcmVzaXplX3Rvb2x0aXBzKTsKICAgIGFkZEV2ZW50KHdpbmRvdywgJ3Njcm9sbCcsIHJlc2l6ZV90b29sdGlwcyk7CgogICAgdmFyIF9mb3JtX3NlcmlhbGl6ZSA9IGZ1bmN0aW9uKGZvcm0pe2lmKCFmb3JtfHxmb3JtLm5vZGVOYW1lIT09IkZPUk0iKXtyZXR1cm4gfXZhciBpLGoscT1bXTtmb3IoaT0wO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKXtpZihmb3JtLmVsZW1lbnRzW2ldLm5hbWU9PT0iIil7Y29udGludWV9c3dpdGNoKGZvcm0uZWxlbWVudHNbaV0ubm9kZU5hbWUpe2Nhc2UiSU5QVVQiOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2UidGVsIjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS5wcmV2aW91c1NpYmxpbmcucXVlcnlTZWxlY3RvcignZGl2Lml0aV9fc2VsZWN0ZWQtZGlhbC1jb2RlJykuaW5uZXJUZXh0KStlbmNvZGVVUklDb21wb25lbnQoIiAiKStlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrO2Nhc2UidGV4dCI6Y2FzZSJudW1iZXIiOmNhc2UiZGF0ZSI6Y2FzZSJ0aW1lIjpjYXNlImhpZGRlbiI6Y2FzZSJwYXNzd29yZCI6Y2FzZSJidXR0b24iOmNhc2UicmVzZXQiOmNhc2Uic3VibWl0IjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrO2Nhc2UiY2hlY2tib3giOmNhc2UicmFkaW8iOmlmKGZvcm0uZWxlbWVudHNbaV0uY2hlY2tlZCl7cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKX1icmVhaztjYXNlImZpbGUiOmJyZWFrfWJyZWFrO2Nhc2UiVEVYVEFSRUEiOnEucHVzaChmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLnZhbHVlKSk7YnJlYWs7Y2FzZSJTRUxFQ1QiOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2Uic2VsZWN0LW9uZSI6cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKTticmVhaztjYXNlInNlbGVjdC1tdWx0aXBsZSI6Zm9yKGo9MDtqPGZvcm0uZWxlbWVudHNbaV0ub3B0aW9ucy5sZW5ndGg7aisrKXtpZihmb3JtLmVsZW1lbnRzW2ldLm9wdGlvbnNbal0uc2VsZWN0ZWQpe3EucHVzaChmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLm9wdGlvbnNbal0udmFsdWUpKX19YnJlYWt9YnJlYWs7Y2FzZSJCVVRUT04iOnN3aXRjaChmb3JtLmVsZW1lbnRzW2ldLnR5cGUpe2Nhc2UicmVzZXQiOmNhc2Uic3VibWl0IjpjYXNlImJ1dHRvbiI6cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKTticmVha31icmVha319cmV0dXJuIHEuam9pbigiJiIpfTsKCiAgICBjb25zdCBmb3JtU3VwcG9ydHNQb3N0ID0gZmFsc2U7CiAgICB2YXIgZm9ybV9zdWJtaXQgPSBmdW5jdGlvbihlKSB7CgogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICBpZiAodmFsaWRhdGVfZm9ybSgpKSB7CiAgICAgICAgICAgIGlmKGZvcm1fdG9fc3VibWl0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9InBob25lIl0nKSAmJiB0eXBlb2YgaXRpICE9ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgICBmb3JtX3RvX3N1Ym1pdC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSJwaG9uZSJdJykudmFsdWUgPSBpdGkuZ2V0TnVtYmVyKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gdXNlIHRoaXMgdHJpY2sgdG8gZ2V0IHRoZSBzdWJtaXQgYnV0dG9uICYgZGlzYWJsZSBpdCB1c2luZyBwbGFpbiBqYXZhc2NyaXB0CiAgICAgICAgICAgIHZhciBzdWJtaXRCdXR0b24gPSBlLnRhcmdldC5xdWVyeVNlbGVjdG9yKCcjX2Zvcm1fMTlfc3VibWl0Jyk7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdwcm9jZXNzaW5nJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBfZm9ybV9zZXJpYWxpemUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19mb3JtXzE5XycpKS5yZXBsYWNlKC8lMEEvZywgJ1xcbicpOwogICAgICAgICAgICB2YXIgZXJyID0gZm9ybV90b19zdWJtaXQucXVlcnlTZWxlY3RvcignLl9mb3JtX2Vycm9yJyk7CiAgICAgICAgICAgIGVyciA\/IGVyci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVycikgOiBmYWxzZTsKICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gc3VibWl0Rm9ybSgpIHsKICAgICAgICAgICAgICAgIHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZXJpYWxpemVkKTsKICAgICAgICAgICAgICAgIHNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ2hpZGVCdXR0b24nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gewogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIkFjY2VwdCI6ICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgYm9keTogZm9ybURhdGEsCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAiUE9TVCIKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgbGV0IHBhZ2VVcmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgICAgICAgICAgaWYgKHBhZ2VVcmxQYXJhbXMuaGFzKCd0JykpIHsKICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCZWFyZXIgJyArIHBhZ2VVcmxQYXJhbXMuZ2V0KCd0Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL2ZvcnRpdXNjYXA2NDkzNy5hY3RpdmVob3N0ZWQuY29tL3Byb2MucGhwP2pzb25wPXRydWUnLCByZXF1ZXN0KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmb3JtU3VwcG9ydHNQb3N0KSB7CiAgICAgICAgICAgICAgICBzdWJtaXRGb3JtKCkudGhlbigoZGF0YSkgPT4gewogICAgICAgICAgICAgICAgICAgIGV2YWwoZGF0YS5qcyk7CiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgX3Nob3dfZXJyb3IoIjE5IiwgIlNvcnJ5LCB5b3VyIHN1Ym1pc3Npb24gZmFpbGVkLiBQbGVhc2UgdHJ5IGFnYWluLiIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfbG9hZF9zY3JpcHQoJ2h0dHBzOi8vZm9ydGl1c2NhcDY0OTM3LmFjdGl2ZWhvc3RlZC5jb20vcHJvYy5waHA\/JyArIHNlcmlhbGl6ZWQgKyAnJmpzb25wPXRydWUnLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgYWRkRXZlbnQoZm9ybV90b19zdWJtaXQsICdzdWJtaXQnLCBmb3JtX3N1Ym1pdCk7Cn0pKCk7Cgo8L3NjcmlwdD4KCg==[\/vc_raw_html][\/vc_column][\/vc_row]","og_url":"https:\/\/www.liveconfluence.com\/es\/11155-2\/","og_site_name":"Confluence at Two Rivers","article_modified_time":"2025-11-25T11:17:22+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"29 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.liveconfluence.com\/es\/11155-2\/","url":"https:\/\/www.liveconfluence.com\/es\/11155-2\/","name":"- Confluence at Two Rivers","isPartOf":{"@id":"https:\/\/www.liveconfluence.com\/es\/#website"},"datePublished":"2025-11-25T11:14:07+00:00","dateModified":"2025-11-25T11:17:22+00:00","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.liveconfluence.com\/es\/11155-2\/"]}]},{"@type":"WebSite","@id":"https:\/\/www.liveconfluence.com\/es\/#website","url":"https:\/\/www.liveconfluence.com\/es\/","name":"Confluence at Two Rivers","description":"Ser propietario en Vail Valley ahora est\u00e1 a su alcance","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.liveconfluence.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"}]}},"_links":{"self":[{"href":"https:\/\/www.liveconfluence.com\/es\/wp-json\/wp\/v2\/pages\/11155","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.liveconfluence.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.liveconfluence.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.liveconfluence.com\/es\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.liveconfluence.com\/es\/wp-json\/wp\/v2\/comments?post=11155"}],"version-history":[{"count":0,"href":"https:\/\/www.liveconfluence.com\/es\/wp-json\/wp\/v2\/pages\/11155\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.liveconfluence.com\/es\/wp-json\/wp\/v2\/media?parent=11155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}