Advertisement
xiaomianao666

邀您一起看:

Apr 26th, 2025
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWHveaVsFwiLFwicGF0aFwiOlwiaGFuc2h1XCIsXCJydWxlXCI6XCJjb25zdCBhcGl2aWV3ID0ge1xcbiAgICBjb2xvcjogKHRlc3QpID0+IHtcXG4gICAgICAgIHJldHVybiAnPGZvbnQgY29sb3I9XFxcIiNGQTcyOThcXFwiPicgKyB0ZXN0ICsgJzwvZnJvbnQ+JztcXG4gICAgfSxcXG4gICAgc3Ryb25nOiAodGVzdCkgPT4ge1xcbiAgICAgICAgcmV0dXJuICc8c3Ryb25nPicgKyB0ZXN0ICsgJzwvc3Ryb25nPic7XFxuICAgIH0sXFxuICAgIHNtYWxsOiAodGVzdCkgPT4ge1xcbiAgICAgICAgcmV0dXJuICc8c21hbGw+JyArIHRlc3QgKyAnPC9zbWFsbD4nO1xcbiAgICB9LFxcbiAgICBjZW50ZXI6ICh0ZXN0KSA9PiB7XFxuICAgICAgICByZXR1cm4gJzxwIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj4nICsgdGVzdCArICc8L3A+J1xcbiAgICB9LFxcbiAgICBiaWc6ICh0ZXN0KSA9PiB7XFxuICAgICAgICByZXR1cm4gJzxiaWc+JyArIHRlc3QgKyAnPC9iaWc+JztcXG4gICAgfSxcXG4gICAgZ3JheTogKHRlc3QpID0+IHtcXG4gICAgICAgIHJldHVybiBcXFwiPGZvbnQgY29sb3I9J2dyYXknPlxcXCIgKyB0ZXN0ICsgXFxcIjwvZm9udD5cXFwiO1xcbiAgICB9LFxcbiAgICByaWNoOiAodGVzdCkgPT4ge1xcbiAgICAgICAgcmV0dXJuIFxcXCLigJjigJjigJnigJlcXFwiICsgdGVzdDtcXG4gICAgfSxcXG4gICAgYWRkcmVzc1RhZzogKHVybCwgdGV4dCkgPT4ge1xcbiAgICAgICAgcmV0dXJuIFxcXCI8YSBocmVmPSdcXFwiICsgdXJsICsgXFxcIic+XFxcIiArIHRleHQgKyBcXFwiPC9hPlxcXCJcXG4gICAgfSxcXG4gICAgZW1wdHk6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgbGF5b3V0OiBbXSxcXG4gICAgbm9Mb2FkOiBcXFwiI25vTG9hZGluZyNcXFwiLFxcbiAgICB0aW1lc3RhbXA6ICgpID0+IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcXG4gICAgdDEwOiAoKSA9PiBhcGl2aWV3LnRpbWVzdGFtcCgpLnRvU3RyaW5nKCksXFxuICAgIHQxMzogKCkgPT4gYXBpdmlldy50MTAoKSArICcwMDAnLFxcbiAgICBob3N0OiBnZXRJdGVtKFxcXCJhcGlcXFwiKSxcXG4gICAgZ2V0RGF0ZXNBcnJheTogKGVuZERhdGUpID0+IHtcXG4gICAgICAgIC8vIOWwhue7k+adn+aXpeacn+Wtl+espuS4sui9rOaNouS4ukRhdGXlr7nosaFcXG4gICAgICAgIGxldCBlbmREYXRlT2JqID0gbmV3IERhdGUoZW5kRGF0ZSk7XFxuXFxuICAgICAgICAvLyDojrflj5blvZPliY3ml6XmnJ9cXG4gICAgICAgIGxldCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XFxuXFxuICAgICAgICAvLyDliJ3lp4vljJbml6XmnJ/mlbDnu4RcXG4gICAgICAgIGxldCBkYXRlc0FycmF5ID0gW107XFxuXFxuICAgICAgICAvLyDlvqrnjq/ku47lvZPliY3ml6XmnJ/liLDnu5PmnZ/ml6XmnJ9cXG4gICAgICAgIHdoaWxlIChjdXJyZW50RGF0ZSA+PSBlbmREYXRlT2JqKSB7XFxuICAgICAgICAgICAgLy8g5bCG5pel5pyf6L2s5o2i5Li6WVlZWS1NTS1EROagvOW8j+eahOWtl+espuS4suW5tua3u+WKoOWIsOaVsOe7hFxcbiAgICAgICAgICAgIGRhdGVzQXJyYXkucHVzaChjdXJyZW50RGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0pO1xcblxcbiAgICAgICAgICAgIC8vIOWHj+WOu+S4gOWkqVxcbiAgICAgICAgICAgIGN1cnJlbnREYXRlLnNldERhdGUoY3VycmVudERhdGUuZ2V0RGF0ZSgpIC0gMSk7XFxuICAgICAgICB9XFxuICAgICAgICAvKlxcbiAgICAgICAgICAgIC8vIOWPjei9rOaVsOe7hOS7peaMiemZjeW6j+aOkuWIl+aXpeacn1xcbiAgICAgICAgICAgIGRhdGVzQXJyYXkucmV2ZXJzZSgpO1xcbiAgICAgICAgKi9cXG4gICAgICAgIHJldHVybiBkYXRlc0FycmF5O1xcbiAgICB9LFxcbiAgICBnZXRZZWFyTW9udGhBcnJheTogKGVuZERhdGUpID0+IHtcXG4gICAgICAgIGxldCBlbmREYXRlT2JqID0gbmV3IERhdGUoZW5kRGF0ZSk7XFxuICAgICAgICBsZXQgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xcbiAgICAgICAgbGV0IHllYXJNb250aEFycmF5ID0gW107XFxuXFxuICAgICAgICAvLyDnoa7kv53lvZPliY3ml6XmnJ/kuI3lsI/kuo7nu5PmnZ/ml6XmnJ9cXG4gICAgICAgIGlmIChjdXJyZW50RGF0ZSA8IGVuZERhdGVPYmopIHtcXG4gICAgICAgICAgICByZXR1cm4geWVhck1vbnRoQXJyYXk7IC8vIOWmguaenOW9k+WJjeaXpeacn+Wwj+S6jue7k+adn+aXpeacn++8jOebtOaOpei/lOWbnuepuuaVsOe7hFxcbiAgICAgICAgfVxcblxcbiAgICAgICAgLy8g5b6q546v5LuO5b2T5YmN5pel5pyf5Yiw57uT5p2f5pel5pyfXFxuICAgICAgICB3aGlsZSAoY3VycmVudERhdGUgPj0gZW5kRGF0ZU9iaikge1xcbiAgICAgICAgICAgIC8vIOiOt+WPluW9k+WJjeaXpeacn+eahOW5tOWSjOaciO+8jOW5tuagvOW8j+WMluS4ulxcXCJZWVlZLU1NXFxcIuWtl+espuS4slxcbiAgICAgICAgICAgIGxldCB5ZWFyID0gY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKTtcXG4gICAgICAgICAgICBsZXQgbW9udGggPSAoY3VycmVudERhdGUuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsgLy8g5pyI5Lu95LuOMOW8gOWni++8jOaJgOS7peWKoDHvvIzlubbkuJTnoa7kv53mmK/kuKTkvY3mlbBcXG4gICAgICAgICAgICBsZXQgeWVhck1vbnRoID0gYCR7eWVhcn0tJHttb250aH1gOyAvLyDmraPnoa7kvb/nlKjmqKHmnb/lrZfnrKbkuLJcXG5cXG4gICAgICAgICAgICAvLyDlsIblubTmnIjlrZfnrKbkuLLmt7vliqDliLDmlbDnu4RcXG4gICAgICAgICAgICB5ZWFyTW9udGhBcnJheS5wdXNoKHllYXJNb250aCk7XFxuXFxuICAgICAgICAgICAgLy8g5YeP5Y675LiA5Liq5pyIXFxuICAgICAgICAgICAgY3VycmVudERhdGUuc2V0TW9udGgoY3VycmVudERhdGUuZ2V0TW9udGgoKSAtIDEpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgcmV0dXJuIHllYXJNb250aEFycmF5O1xcbiAgICB9LFxcbiAgICBDcnlwdG9KUzogbnVsbCwgLy8g55So5LqO5a2Y5YKoIENyeXB0b0pTIOWvueixoVxcbiAgICBpbml0Q3J5cHRvSlM6ICgpID0+IHtcXG4gICAgICAgIGlmICghYXBpdmlldy5DcnlwdG9KUykge1xcbiAgICAgICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7IC8vIOaJp+ihjOS4gOasoSBldmFs77yM56Gu5L+dIGBDcnlwdG9KU2Ag5Y+Y6YeP6KKr5a6a5LmJXFxuICAgICAgICAgICAgYXBpdmlldy5DcnlwdG9KUyA9IENyeXB0b0pTOyAvLyDlsIYgYENyeXB0b0pTYCDnvJPlrZjliLAgYGFwaXZpZXcuQ3J5cHRvSlNgXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIEVuY3J5cHQ6ICh3b3JkKSA9PiB7XFxuICAgICAgICBhcGl2aWV3LmluaXRDcnlwdG9KUygpOyAvLyDnoa7kv50gQ3J5cHRvSlMg5bey5Yqg6L29XFxuICAgICAgICBsZXQga2V5ID0gYXBpdmlldy5DcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwibCpidiVaaXEwMDBCaWFvZ1xcXCIpO1xcbiAgICAgICAgbGV0IGl2ID0gYXBpdmlldy5DcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiODU5NzUwNjAwMjkzOTI0OVxcXCIpO1xcbiAgICAgICAgbGV0IGVuY3J5cHQgPSBhcGl2aWV3LkNyeXB0b0pTLkFFUy5lbmNyeXB0KHdvcmQsIGtleSwge1xcbiAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICBtb2RlOiBhcGl2aWV3LkNyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgICAgIHBhZGRpbmc6IGFwaXZpZXcuQ3J5cHRvSlMucGFkLlBrY3M3LFxcbiAgICAgICAgfSk7XFxuICAgICAgICByZXR1cm4gZW5jcnlwdC50b1N0cmluZygpOyAvLyDpu5jorqTov5Tlm54gQmFzZTY0IOe8lueggeeahOWtl+espuS4slxcbiAgICB9LFxcbiAgICBEZWNyeXB0OiAod29yZCkgPT4ge1xcbiAgICAgICAgYXBpdmlldy5pbml0Q3J5cHRvSlMoKTsgLy8g56Gu5L+dIENyeXB0b0pTIOW3suWKoOi9vVxcbiAgICAgICAgbGV0IGtleSA9IGFwaXZpZXcuQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcImwqYnYlWmlxMDAwQmlhb2dcXFwiKTtcXG4gICAgICAgIGxldCBpdiA9IGFwaXZpZXcuQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjg1OTc1MDYwMDI5MzkyNDlcXFwiKTtcXG4gICAgICAgIGxldCBkZWNyeXB0ID0gYXBpdmlldy5DcnlwdG9KUy5BRVMuZGVjcnlwdCh3b3JkLCBrZXksIHtcXG4gICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgbW9kZTogYXBpdmlldy5DcnlwdG9KUy5tb2RlLkNCQyxcXG4gICAgICAgICAgICBwYWRkaW5nOiBhcGl2aWV3LkNyeXB0b0pTLnBhZC5Qa2NzNyxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIGRlY3J5cHQudG9TdHJpbmcoYXBpdmlldy5DcnlwdG9KUy5lbmMuVXRmOCk7IC8vIOino+Wvhue7k+aenOi9rOaNouS4uuaWh+acrOagvOW8j1xcbiAgICB9LFxcbiAgICBEZWNyeXB0MTogKGlucHV0KSA9PiB7XFxuICAgICAgICByZXR1cm4gJChpbnB1dCkuaW1hZ2UoKCkgPT4ge1xcbiAgICAgICAgICAgIGNvbnN0IENyeXB0b1V0aWwgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vYXNzZXRzL2NyeXB0by1qYXZhLmpzXFxcIik7XFxuICAgICAgICAgICAgbGV0IGtleSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXFxcInNhSVpYYzR5TXZxMEl6NTZcXFwiKTtcXG4gICAgICAgICAgICBsZXQgaXYgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VVVEY4KFxcXCJrYkpZdEJKVUVDVDBveWpvXFxcIik7XFxuICAgICAgICAgICAgbGV0IHRleHREYXRhID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlSW5wdXRTdHJlYW0oaW5wdXQpO1xcbiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWQgPSBDcnlwdG9VdGlsLkFFUy5kZWNyeXB0KHRleHREYXRhLCBrZXksIHtcXG4gICAgICAgICAgICAgICAgbW9kZTogXFxcIkFFUy9DQkMvUEtDUzdQYWRkaW5nXFxcIixcXG4gICAgICAgICAgICAgICAgaXY6IGl2XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHRlZC50b0lucHV0U3RyZWFtKCk7XFxuICAgICAgICB9KVxcbiAgICB9LFxcbiAgICBnZXR0b2tlbjogKCkgPT4ge1xcbiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChhcGl2aWV3Lmhvc3QrJy92Mi41L3JlZnJlc2gvdG9rZW4nLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgICAgICAgICAgICAgICd1dWlkJzogJ2M5YWQyMjFmLWI0NDUtMzlkMi04NWY1LWE2OTNjMjQxMTVlMycsXFxuICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnOiBhcGl2aWV3LnQxMCgpLFxcbiAgICAgICAgICAgICAgICAnaXAnOiAnMC4wLjAuMCcsXFxuICAgICAgICAgICAgICAgICd1c2VyLWtleSc6ICc3NjAzNTVjYzg4MjE4ZjBjMTUxNGY1Njc2NDM2MjA2NicsXFxuICAgICAgICAgICAgICAgICdwbGF0Zm9ybSc6ICcxJyxcXG4gICAgICAgICAgICAgICAgJ3NpZ24nOiBtZDUobWQ1KCcwLjAuMC4wLjEuJythcGl2aWV3LnQxMCgpKycuNzYwMzU1Y2M4ODIxOGYwYzE1MTRmNTY3NjQzNjIwNjYuYzlhZDIyMWYtYjQ0NS0zOWQyLTg1ZjUtYTY5M2MyNDExNWUzJykrJ200bjJoalBlWVdrRDZ0RnBxS0ZeM0hPXmgyNFBAaWRUJyksXFxuICAgICAgICAgICAgICAgICdhcHAtdmVyc2lvbic6ICcyLjIuOScsXFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6ICcwJyxcXG4gICAgICAgICAgICAgICAgJ0hvc3QnOiBhcGl2aWV3Lmhvc3Quc3BsaXQoJy8vJylbMV0sXFxuICAgICAgICAgICAgICAgICdDb25uZWN0aW9uJzogJ0tlZXAtQWxpdmUnLFxcbiAgICAgICAgICAgICAgICAvLydBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCcsXFxuICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ29raHR0cC80LjMuMScsXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgfSk7IC8vbG9nKGh0bWwpXFxuICAgICAgICB2YXIgaHRtbDEgPSBhcGl2aWV3LkRlY3J5cHQoaHRtbCk7IC8vbG9nKGh0bWwxKVxcbiAgICAgICAgLy92YXIgbG9nZ2VkX2F0ID0gSlNPTi5wYXJzZShodG1sMSkuZGF0YS51c2VyLmxvZ2dlZF9hdC5zcGxpdCgnICcpWzBdOyBsb2cobG9nZ2VkX2F0KVxcbiAgICAgICAgdmFyIHRva2VuID0gSlNPTi5wYXJzZShodG1sMSkuZGF0YS51c2VyLnRva2VuOyBsb2codG9rZW4pXFxuICAgICAgICAvL3NldEl0ZW0oXFxcImxvZ2dlZF9hdFxcXCIsbG9nZ2VkX2F0KVxcbiAgICAgICAgc2V0SXRlbShcXFwidG9rZW5cXFwiLHRva2VuKVxcbiAgICB9LFxcbiAgICBnZXRodG1sOiAodXJsLGJvZHkpID0+IHtcXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2godXJsLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAndXVpZCc6ICdjOWFkMjIxZi1iNDQ1LTM5ZDItODVmNS1hNjkzYzI0MTE1ZTMnLFxcbiAgICAgICAgICAgICAgICAndGltZXN0YW1wJzogYXBpdmlldy50MTAoKSxcXG4gICAgICAgICAgICAgICAgJ2lwJzogJzAuMC4wLjAnLFxcbiAgICAgICAgICAgICAgICAndXNlci1rZXknOiAnNzYwMzU1Y2M4ODIxOGYwYzE1MTRmNTY3NjQzNjIwNjYnLFxcbiAgICAgICAgICAgICAgICAncGxhdGZvcm0nOiAnMScsXFxuICAgICAgICAgICAgICAgICdzaWduJzogbWQ1KG1kNSgnMC4wLjAuMC4xLicrYXBpdmlldy50MTAoKSsnLjc2MDM1NWNjODgyMThmMGMxNTE0ZjU2NzY0MzYyMDY2LmM5YWQyMjFmLWI0NDUtMzlkMi04NWY1LWE2OTNjMjQxMTVlMycpKydtNG4yaGpQZVlXa0Q2dEZwcUtGXjNIT15oMjRQQGlkVCcpLFxcbiAgICAgICAgICAgICAgICAnYXBwLXZlcnNpb24nOiAnMi4yLjknLFxcbiAgICAgICAgICAgICAgICAndG9rZW4nOiBnZXRJdGVtKFxcXCJ0b2tlblxcXCIpLFxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6ICcwJyxcXG4gICAgICAgICAgICAgICAgJ0hvc3QnOiBhcGl2aWV3Lmhvc3Quc3BsaXQoJy8vJylbMV0sXFxuICAgICAgICAgICAgICAgICdDb25uZWN0aW9uJzogJ0tlZXAtQWxpdmUnLFxcbiAgICAgICAgICAgICAgICAvLydBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCcsXFxuICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ29raHR0cC80LjMuMScsXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBib2R5OiBib2R5LCAgICAgICAgICAgIFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcbiAgICAgICAgICAgIHJlamVjdENvZGluZzogdHJ1ZVxcbiAgICAgICAgfSk7IC8vbG9nKGh0bWwpXFxuICAgICAgICB2YXIgaHRtbDEgPSBhcGl2aWV3LkRlY3J5cHQoaHRtbCk7IC8vbG9nKGh0bWwxKVxcbiAgICAgICAgcmV0dXJuIGh0bWwxXFxuICAgIH0sXFxuICAgIHR1d2VueWlqaTogKGQsZGF0YSkgPT4ge1xcbiAgICAgICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIHZhciBpbWcgPSBhcGl2aWV3LkRlY3J5cHQxKCdodHRwczovL2ptdHAuZ3BncmVpaS5jb20nICsgaXRlbS50aHVtYilcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5wdWJsaXNoZWRfYXQuc3BsaXQoJyAnKVswXSxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogYGhpa2VyOi8vcGFnZS9lcmppP3BhZ2U9ZnlwYWdlI25vSGlzdG9yeSMjZ2FtZVRoZW1lI2AsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMicsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9pZDogaXRlbS5tb2RlbF9pZCxcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWdcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9LFxcbiAgICB5dWVkdXlpamk6IChkLGRhdGEpID0+IHtcXG4gICAgICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICB2YXIgaW1nID0gYXBpdmlldy5EZWNyeXB0MSgnaHR0cHM6Ly9qbXRwLmdwZ3JlaWkuY29tJyArIGl0ZW0udGh1bWIpXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUgKyAnXFxcXG4nICsgaXRlbS5hdXRob3IsXFxuICAgICAgICAgICAgICAgIGRlc2M6IGl0ZW0uZGVzY3JpcHRpb24sXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICB1cmw6IGBoaWtlcjovL3BhZ2UvZXJqaT9wYWdlPWZ5cGFnZSNub0hpc3RvcnkjI2dhbWVUaGVtZSNgLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfaWQ6IGl0ZW0ubW9kZWxfaWQsXFxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgeWluZ3NoaXlpamk6IChkLGRhdGEpID0+IHtcXG4gICAgICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICB2YXIgaW1nID0gYXBpdmlldy5EZWNyeXB0MSgnaHR0cHM6Ly9qbXRwLmdwZ3JlaWkuY29tJyArIGl0ZW0udGh1bWIpXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxuICAgICAgICAgICAgICAgIGRlc2M6IGl0ZW0uZGVzY3JpcHRpb24sXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICB1cmw6IGBoaWtlcjovL3BhZ2UvZXJqaT9wYWdlPWZ5cGFnZSNub0hpc3RvcnkjI2dhbWVUaGVtZSNgLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfaWQ6IGl0ZW0ubW9kZWxfaWQsXFxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgZGlhbnRhaXlpamk6IChkLGRhdGEpID0+IHtcXG4gICAgICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICB2YXIgaW1nID0gYXBpdmlldy5EZWNyeXB0MSgnaHR0cHM6Ly9qbXRwLmdwZ3JlaWkuY29tJyArIGl0ZW0udGh1bWIpXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxuICAgICAgICAgICAgICAgIGRlc2M6ICcwJyxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogYGhpa2VyOi8vcGFnZS9lcmppP3BhZ2U9ZnlwYWdlI25vSGlzdG9yeSMjZ2FtZVRoZW1lI2AsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMScsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9pZDogaXRlbS5tb2RlbF9pZCxcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWdcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9LFxcbiAgICB4aWV6aGVubWFuaHVheWlqaTogKGQsZGF0YSkgPT4ge1xcbiAgICAgICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIHZhciBpbWcgPSBhcGl2aWV3LkRlY3J5cHQxKCdodHRwczovL2ptdHAuZ3BncmVpaS5jb20nICsgaXRlbS50aHVtYilcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogJzAnLFxcbiAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5JyArIGl0ZW0uaWQpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcImhhbnNodVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gYXBpdmlldy5ob3N0KycvdjIuNS9zZXJpZXMvY2hhcHRlcnMnXFxuICAgICAgICAgICAgICAgICAgICB2YXIgYm9keSA9IGFwaXZpZXcuRW5jcnlwdCgnc2VyaWVzX2lkPScgKyBNWV9VUkwucmVwbGFjZSgnaGlrZXI6Ly9lbXB0eScsICcnKSlcXG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShhcGl2aWV3LmdldGh0bWwodXJsLCBib2R5KSkuZGF0YTsgLy9sb2coZGF0YSlcXG4gICAgICAgICAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICBkYXRhLmNoYXB0ZXJzLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZyA9IGFwaXZpZXcuRGVjcnlwdDEoJ2h0dHBzOi8vam10cC5ncGdyZWlpLmNvbScgKyBpdGVtLnRodW1iKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBpdGVtLmRlc2NyaXB0aW9uLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBgaGlrZXI6Ly9wYWdlL2Vyamk/cGFnZT1meXBhZ2Ujbm9IaXN0b3J5IyNnYW1lVGhlbWUjYCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX2lkOiAyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGltZ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZClcXG4gICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgdHV3ZW46IChkLGRhdGEpID0+IHtcXG4gICAgICAgIHZhciBpbWdzID0gZGF0YS5jb250ZW50LnJlcGxhY2UoLyg8ZmlndXJlW1xcXFxTXFxcXHNdKj88XFxcXC9maWd1cmU+KS9nLCBcXFwiQCQxQFxcXCIpO1xcbiAgICAgICAgaW1ncy5zcGxpdChcXFwiQFxcXCIpLmZvckVhY2goaXQgPT4ge1xcbiAgICAgICAgICAgIGlmIChpdC5pbmNsdWRlcyhcXFwiZmlndXJlXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgbGV0IGltZyA9IGFwaXZpZXcuRGVjcnlwdDEoJ2h0dHBzOi8vam10cC5ncGdyZWlpLmNvbScgKyBwZGZoKGl0LCBcXFwiaW1nJiZzcmNcXFwiKSlcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIC8vZGVzYzogJzAnLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCdcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpdC50cmltKCkpIHtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdCxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH0sXFxuICAgIGJpYW9xaWFuOiAoZCxkYXRhKSA9PiB7XFxuICAgICAgICBkYXRhLnRhZ3MuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKGl0ZW0gKyAnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAvL3B1dE15VmFyKCdzZWFyY2gnLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgIC8vcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgeXVsYW50dTogKGQsZGF0YSkgPT4ge1xcbiAgICAgICAgZGF0YS5tdWx0aXBsZV9waWMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBsZXQgaW1nID0gYXBpdmlldy5EZWNyeXB0MSgnaHR0cHM6Ly9qbXRwLmdwZ3JlaWkuY29tJyArIGl0ZW0pXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogaW1nLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzMnXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH0sXFxuICAgIHBpbmdsdW46IChkLCBkYXRhKSA9PiB7XFxuICAgICAgICBkYXRhLmZvckVhY2goZGF0YSA9PiB7XFxuICAgICAgICAgICAgaWYgKGRhdGEuYXV0aG9yKSB7XFxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmF2YXRhciA9PSAnJykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF2YXRhciA9ICdodHRwczovL2ltZy52aW51YS5jbi9pbWFnZXMvSW5uRGsudGgucG5nJ1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF2YXRhciA9IGFwaXZpZXcuRGVjcnlwdDEoJ2h0dHBzOi8vam10cC5ncGdyZWlpLmNvbScgKyBkYXRhLmF2YXRhcilcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEuYXV0aG9yLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogZGF0YS5jcmVhdGVkX2F0LFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBhdmF0YXIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXBsaWVzLmxlbmd0aCAhPSAnMCcpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGRhdGEudGV4dCArIGFwaXZpZXcuYWRkcmVzc1RhZygnaGlrZXI6Ly9wYWdlL3Bpbmx1bicsICdcXFxcdFxcXFx0XFxcXHTmn6XnnIvlhajpg6gnKVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gZGF0YS50ZXh0XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhcGl2aWV3LmdyYXkodGl0bGUpLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS5hdXRob3IsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogZGF0YS5jcmVhdGVkX2F0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MxOiBkYXRhLnRleHQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBhdmF0YXIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogZGF0YS5yZXBsaWVzLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogZGF0YS5hdXRob3JcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9XFxufVxcblxcbiQuZXhwb3J0cyA9IGFwaXZpZXc7XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLngrnmkq1cIixcInBhdGhcIjpcImNsYTFcIixcInJ1bGVcIjpcInZhciBlbmREYXRlID0gXFxcIjIwMjEtMDktMDFcXFwiO1xcbnZhciBoZSA9IGFwaXZpZXcuZ2V0WWVhck1vbnRoQXJyYXkoZW5kRGF0ZSk7IC8vbG9nKGhlKSBcXG52YXIgc3VicyA9IGhlIC8vbG9nKHN1YnMpIFxcbmlmKE1ZX1BBR0UgPT0gJzEnKXtcXG5oZS5mb3JFYWNoKCh4LGkpPT57XFxuICAgIHZhciBjdGl0bGUgPSB4XFxuICAgIHZhciBzdWIgPSBzdWJzW2ldXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ2N0aXRsZScsIGhlWzBdKSA9PSBjdGl0bGUgPyAn4oCc4oCc4oCd4oCdJytjdGl0bGUuZm9udGNvbG9yKCcjJytnZXRSYW5nZUNvbG9ycygpKTpjdGl0bGUsXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoY3RpdGxlLHN1YikgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiY3RpdGxlXFxcIiwgY3RpdGxlKTtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInN1YlxcXCIsc3ViKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIGN0aXRsZSxzdWIpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KVxcbn0pXFxufVxcbnZhciBoZSA9IGdldE15VmFyKFxcXCJjdGl0bGVcXFwiLGhlWzBdKVxcbnZhciBzdWIgPSBnZXRNeVZhcihcXFwic3ViXFxcIixzdWJzWzBdKTsgLy9sb2coc3ViKVxcblxcbnZhciB1cmwgPSBhcGl2aWV3Lmhvc3QrJy92Mi41L2FydGljbGUvZGlzY292ZXJ5J1xcbnZhciBib2R5ID0gYXBpdmlldy5FbmNyeXB0KCdtb2RlbF9pZD02JnB1Ymxpc2hlZF9hdD0nK3N1YisnJnBhZ2U9JytNWV9QQUdFKycmc2l6ZT0yMCZzb3J0PXB1Ymxpc2hlZF9hdCcpXFxudmFyIGRhdGEgPSBKU09OLnBhcnNlKGFwaXZpZXcuZ2V0aHRtbCh1cmwsYm9keSkpLmRhdGE7XFxuZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICB2YXIgaW1nID0gYXBpdmlldy5EZWNyeXB0MSgnaHR0cHM6Ly9qbXRwLmdwZ3JlaWkuY29tJyArIGl0ZW0udGh1bWIpXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcXG4gICAgICAgIGRlc2M6ICcnLFxcbiAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICB1cmw6IGBoaWtlcjovL3BhZ2UvZXJqaTE/cGFnZT1meXBhZ2Ujbm9IaXN0b3J5I2AsXFxuICAgICAgICBjb2xfdHlwZTogJ3BpY18xX2NhcmQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBtb2RlbF9pZDogaXRlbS5tb2RlbF9pZCxcXG4gICAgICAgICAgICBpZDogaXRlbS5pZCxcXG4gICAgICAgICAgICBpbWc6IGltZ1xcbiAgICAgICAgfVxcbiAgICB9KVxcbn0pXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLngrnmkq3kuoznuqdcIixcInBhdGhcIjpcImVyamkxXCIsXCJydWxlXCI6XCJqczpcXG52YXIgYXBpdmlldyA9ICQucmVxdWlyZShcXFwiaGFuc2h1XFxcIilcXG52YXIgbW9kZWxfaWQgPSBNWV9QQVJBTVMubW9kZWxfaWQ7IC8vbG9nKHR5cGVvZiBtb2RlbF9pZClcXG52YXIgaWQgPSBNWV9QQVJBTVMuaWQ7IC8vbG9nKGlkKVxcbnZhciBpbWcgPSBNWV9QQVJBTVMuaW1nXFxudmFyIGQgPSBbXTtcXG5pZihNWV9QQUdFID09ICcxJyl7XFxuZC5wdXNoKHtcXG4gICAgZGVzYzogJzAnLFxcbiAgICBpbWc6IGltZyxcXG4gICAgdXJsOiBpbWcsXFxuICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcXG59KVxcbmlmKGdldE15VmFyKCdhJykgPT0gJzEnKXtcXG52YXIgdGl0bGUxID0gJ1xcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx05b2x54mH5LuL57uNXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHQnXFxudmFyIHRpdGxlMiA9ICdcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdOKAmOKAmOeUqOaIt+ivhOS7t+KAmeKAmVxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0J1xcbn1lbHNle1xcbnZhciB0aXRsZTEgPSAnXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHTigJjigJjlvbHniYfku4vnu43igJnigJlcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdCdcXG52YXIgdGl0bGUyID0gJ1xcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx055So5oi36K+E5Lu3XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHQnXFxufVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiB0aXRsZTEsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKT0+e1xcbiAgICAgICAgY2xlYXJNeVZhcignYScpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgLy9leHRyYTogeydiYWNrZ3JvdW5kQ29sb3InOiAnI0UwRjhGRid9XFxufSlcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogdGl0bGUyLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcXG4gICAgICAgIHB1dE15VmFyKCdhJywnMScpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgLy9leHRyYTogeydiYWNrZ3JvdW5kQ29sb3InOiAnI0UwRjhGRid9XFxufSlcXG59XFxuaWYoZ2V0TXlWYXIoJ2EnKSA9PSAnMScpe1xcbnZhciB1cmwgPSBhcGl2aWV3Lmhvc3QrJy92Mi41L2NvbW1lbnQvbGlzdCdcXG52YXIgYm9keSA9IGFwaXZpZXcuRW5jcnlwdCgnYXJ0aWNsZV9pZD0nK2lkKycmcGFnZT0nK01ZX1BBR0UrJyZzaXplPTIwJnNvcnRpbmc9JytnZXRNeVZhcignYTEnLCdsaWtlcycpKVxcbnZhciBkYXRhID0gSlNPTi5wYXJzZShhcGl2aWV3LmdldGh0bWwodXJsLCBib2R5KSkuZGF0YTsgLy9sb2coZGF0YSlcXG5pZihNWV9QQUdFID09ICcxJyl7XFxuaWYoZ2V0TXlWYXIoJ2ExJywnbGlrZXMnKSA9PSAnbGlrZXMnKXtcXG52YXIgdGV4dCA9ICflvZPliY3mjpLluo/vvJrmjInng63luqYnXFxufVxcbmlmKGdldE15VmFyKCdhMScpID09ICdjcmVhdGVkX2F0Jyl7XFxudmFyIHRleHQgPSAn5b2T5YmN5o6S5bqP77ya5oyJ5pe26Ze0J1xcbn1cXG4vL2xvZyhnZXRNeVZhcignYTEnLCdsaWtlcycpKVxcbnZhciBwYWl4dSA9ICQoJyNub0xvYWRpbmcjJykuYjY0KCkubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICBpZihnZXRNeVZhcignYTEnLCdsaWtlcycpID09ICdsaWtlcycpe1xcbiAgICAgICAgcHV0TXlWYXIoJ2ExJywnY3JlYXRlZF9hdCcpXFxuICAgICAgICB0b2FzdCgn5oyJ5pe26Ze0JylcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfVxcbiAgICBpZihnZXRNeVZhcignYTEnKSA9PSAnY3JlYXRlZF9hdCcpe1xcbiAgICAgICAgcHV0TXlWYXIoJ2ExJywnbGlrZXMnKVxcbiAgICAgICAgdG9hc3QoJ+aMieeDreW6picpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH1cXG59KVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBhcGl2aWV3LmJpZyhhcGl2aWV3LnN0cm9uZygn6K+E6K665YiX6KGoJykpKydcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdCcrYXBpdmlldy5hZGRyZXNzVGFnKHBhaXh1LHRleHQpLFxcbiAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxufSlcXG59XFxuYXBpdmlldy5waW5nbHVuKGQsZGF0YSlcXG59ZWxzZXtcXG5pZihNWV9QQUdFID09ICcxJyl7XFxudmFyIHVybCA9IGFwaXZpZXcuaG9zdCsnL3YyLjUvYXJ0aWNsZS9kZXRhaWwnXFxudmFyIGJvZHkgPSBhcGl2aWV3LkVuY3J5cHQoJ2lkPScraWQpXFxudmFyIGRhdGEgPSBKU09OLnBhcnNlKGFwaXZpZXcuZ2V0aHRtbCh1cmwsYm9keSkpLmRhdGE7IC8vbG9nKGRhdGEpXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICdcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHTpooTop4hcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHQnLFxcbiAgICB1cmw6ICQoZGF0YS52aWRlb19maWxlKycjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChkYXRhKT0+e1xcbiAgICAgICAgcmV0dXJuICdodHRwczovL2FrbWFpdmlkZW8uY2RjaHVhbmdhby5jb20nK2lucHV0XFxuICAgIH0sZGF0YSksXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXG4gICAgLy9leHRyYTogeydiYWNrZ3JvdW5kQ29sb3InOiAnI0UwRjhGRid9XFxufSlcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ1xcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdOWOn+eJh1xcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdCcsXFxuICAgIHVybDogJChkYXRhLnZpZGVvX2ZpbGUrJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGRhdGEpPT57XFxuICAgICAgICBpZigvc2FtcGxlLy50ZXN0KGlucHV0KSl7XFxuICAgICAgICAgICAgdmFyIHVybCA9IGlucHV0LnJlcGxhY2UoL1teYS16QS1aMC05XShzYW1wbGUpLywnJylcXG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vYWttYWl2aWRlby5jZGNodWFuZ2FvLmNvbScrdXJsXFxuICAgICAgICB9XFxuICAgICAgICBpZighL+aXoC8udGVzdChkYXRhLm51bWJlcikpe1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBpbnB1dC5yZXBsYWNlKC9cXFxcLyhbXlxcXFwvXSspXFxcXC4vLCcvJytkYXRhLm51bWJlcisnLicpXFxuICAgICAgICAgICAgcmV0dXJuICdodHRwczovL2FrbWFpdmlkZW8uY2RjaHVhbmdhby5jb20nK3VybFxcbiAgICAgICAgfVxcbiAgICB9LGRhdGEpLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgIC8vZXh0cmE6IHsnYmFja2dyb3VuZENvbG9yJzogJyNFMEY4RkYnfVxcbn0pXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IGFwaXZpZXcuYmlnKGFwaXZpZXcuc3Ryb25nKGRhdGEudGl0bGUpKSsnPGJyPjxicj4nKyfnlarlj7fvvJonK2FwaXZpZXcuZ3JheShkYXRhLm51bWJlcikrJ1xcXFx0XFxcXHRcXFxcdCcrJ+a8lOWRmO+8micrYXBpdmlldy5ncmF5KGRhdGEuYWN0b3IpKyc8YnI+JythcGl2aWV3LmdyYXkoZGF0YS5wdWJsaXNoZWRfYXQuc3BsaXQoJyAnKVswXSkrJ1xcXFx0XFxcXHRcXFxcdCcrYXBpdmlldy5ncmF5KGRhdGEubGVuZ3RoKSsnXFxcXHRcXFxcdFxcXFx0JythcGl2aWV3LmdyYXkoZGF0YS5zaXplKSsnXFxcXHRcXFxcdFxcXFx0JythcGl2aWV3LmdyYXkoZGF0YS5xdWFsaXR5KSxcXG4gICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbn0pXFxuYXBpdmlldy5iaWFvcWlhbihkLGRhdGEpXFxuYXBpdmlldy55dWxhbnR1KGQsZGF0YSlcXG4vL2xvZyhkYXRhLmNvbnRlbnQpXFxuYXBpdmlldy50dXdlbihkLGRhdGEpXFxuXFxufVxcbn1cXG5cXG5zZXRSZXN1bHQoZClcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuivhOiuuuivpuaDhVwiLFwicGF0aFwiOlwicGlubHVuXCIsXCJydWxlXCI6XCJqczpcXG52YXIgYXBpdmlldyA9ICQucmVxdWlyZShcXFwiaGFuc2h1XFxcIilcXG52YXIgZCA9IFtdO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBNWV9QQVJBTVMudGl0bGUsXFxuICAgIGRlc2M6IE1ZX1BBUkFNUy5kZXNjLFxcbiAgICBpbWc6IE1ZX1BBUkFNUy5pbWcsXFxuICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICBjb2xfdHlwZTogJ2F2YXRhcidcXG59KVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBhcGl2aWV3LmdyYXkoTVlfUEFSQU1TLmRlc2MxKSxcXG4gICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbn0pXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IGFwaXZpZXcuYmlnKGFwaXZpZXcuc3Ryb25nKCfnm7jlhbPlm57lpI3lhbEnK01ZX1BBUkFNUy5pdGVtLmxlbmd0aCsn5p2hJykpLFxcbiAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxufSlcXG5NWV9QQVJBTVMuaXRlbS5yZXZlcnNlKCkuZm9yRWFjaChkYXRhID0+IHtcXG4gICAgaWYgKGRhdGEuYXZhdGFyID09ICcnKSB7XFxuICAgICAgICB2YXIgYXZhdGFyID0gJ2h0dHBzOi8vaW1nLnZpbnVhLmNuL2ltYWdlcy9Jbm5Eay50aC5wbmcnXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgYXZhdGFyID0gYXBpdmlldy5EZWNyeXB0MSgnaHR0cHM6Ly9qbXRwLmdwZ3JlaWkuY29tJyArIGRhdGEuYXZhdGFyKVxcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZGF0YS5hdXRob3IsXFxuICAgICAgICBkZXNjOiBkYXRhLmNyZWF0ZWRfYXQsXFxuICAgICAgICBpbWc6IGF2YXRhcixcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogYXBpdmlldy5hZGRyZXNzVGFnKCdoaWtlcjovL2VtcHR5JywnQCcrZGF0YS50YWdfYXV0aG9yKydcXFxcdFxcXFx0XFxcXHQnKSthcGl2aWV3LmdyYXkoZGF0YS50ZXh0KSxcXG4gICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgfSlcXG59KVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6aaW6aG1XCIsXCJwYXRoXCI6XCJob21lXCIsXCJydWxlXCI6XCJpZihNWV9QQUdFID09ICcxJyl7XFxudmFyIGVuZERhdGUgPSBcXFwiMjAxOS0xMS0wOFxcXCI7XFxudmFyIGRhdGVzQXJyYXkgPSBhcGl2aWV3LmdldERhdGVzQXJyYXkoZW5kRGF0ZSk7XFxudmFyIHVybCA9IGFwaXZpZXcuaG9zdCsnL3YyLjUvYXJ0aWNsZS9kYXknXFxudmFyIHB1Ymxpc2hlZF9hdCA9IGdldE15VmFyKFxcXCJwdWJsaXNoZWRfYXRcXFwiKSA9PSAnJyA/IGRhdGVzQXJyYXlbMF0gOiBnZXRNeVZhcihcXFwicHVibGlzaGVkX2F0XFxcIik7IC8vbG9nKHB1Ymxpc2hlZF9hdClcXG52YXIgYm9keSA9IGFwaXZpZXcuRW5jcnlwdCgncHVibGlzaGVkX2F0PScrcHVibGlzaGVkX2F0KVxcbnZhciBkYXRhID0gSlNPTi5wYXJzZShhcGl2aWV3LmdldGh0bWwodXJsLGJvZHkpKS5kYXRhO1xcbmRhdGEuaW5mby5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICB2YXIgaW1nID0gYXBpdmlldy5EZWNyeXB0MSgnaHR0cHM6Ly9qbXRwLmdwZ3JlaWkuY29tJyArIGl0ZW0udGh1bWIpXFxuICAgIGlmKGl0ZW0ubW9kZWxfaWQgPT0gJzYnKXtcXG4gICAgdmFyIHVybCA9IGBoaWtlcjovL3BhZ2UvZXJqaTE/cGFnZT1meXBhZ2Ujbm9IaXN0b3J5I2BcXG4gICAgfWVsc2V7XFxuICAgIHZhciB1cmwgPSBgaGlrZXI6Ly9wYWdlL2Vyamk/cGFnZT1meXBhZ2Ujbm9IaXN0b3J5IyNnYW1lVGhlbWUjYFxcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogYCR7YXBpdmlldy5zdHJvbmcoaXRlbS50aXRsZSl9PGJyPiR7YXBpdmlldy5ncmF5KGl0ZW0uYXV0aG9yKX08YnI+JHthcGl2aWV3LmdyYXkoaXRlbS5kZXNjcmlwdGlvbi5yZXBsYWNlKC9cXFxcbi9nLCc8YnI+JykpfWAsXFxuICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBtb2RlbF9pZDogaXRlbS5tb2RlbF9pZCxcXG4gICAgICAgICAgICBpZDogaXRlbS5pZCxcXG4gICAgICAgICAgICBpbWc6IGltZ1xcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICB9KVxcbn0pXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJzigJzliIfmjaLigJ3igJ0nLFxcbiAgICB1cmw6ICQoKS5sYXp5UnVsZSgocHVibGlzaGVkX2F0LGRhdGVzQXJyYXkpID0+IHtcXG4gICAgICAgIHNob3dTZWxlY3RPcHRpb25zKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+W9k+WJje+8micrcHVibGlzaGVkX2F0LFxcbiAgICAgICAgICAgIG9wdGlvbnM6IGRhdGVzQXJyYXksXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwicHVibGlzaGVkX2F0XFxcIixpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgaW5wdXRcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSk7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0scHVibGlzaGVkX2F0LGRhdGVzQXJyYXkpLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxufSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqdcIixcInBhdGhcIjpcImVyamlcIixcInJ1bGVcIjpcImpzOlxcbnZhciBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJoYW5zaHVcXFwiKVxcbnZhciBtb2RlbF9pZCA9IE1ZX1BBUkFNUy5tb2RlbF9pZDsgLy9sb2codHlwZW9mIG1vZGVsX2lkKVxcbnZhciBpZCA9IE1ZX1BBUkFNUy5pZDsgLy9sb2coaWQpXFxudmFyIGltZyA9IE1ZX1BBUkFNUy5pbWdcXG52YXIgZCA9IFtdO1xcblxcbmlmKE1ZX1BBR0UgPT0gJzEnKXtcXG52YXIgdXJsID0gYXBpdmlldy5ob3N0KycvdjIuNS9hcnRpY2xlL2RldGFpbCdcXG52YXIgYm9keSA9IGFwaXZpZXcuRW5jcnlwdCgnaWQ9JytpZClcXG52YXIgZGF0YSA9IEpTT04ucGFyc2UoYXBpdmlldy5nZXRodG1sKHVybCxib2R5KSkuZGF0YTsgLy9sb2coZGF0YSlcXG5zd2l0Y2ggKG1vZGVsX2lkKSB7XFxuICAgIGNhc2UgMTpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgdXJsOiBpbWcsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGAke2FwaXZpZXcuc3Ryb25nKGFwaXZpZXcuY2VudGVyKGRhdGEudGl0bGUpKX0ke2FwaXZpZXcuZ3JheShkYXRhLmRlc2NyaXB0aW9uKX0ke2FwaXZpZXcuZ3JheShhcGl2aWV3LmNlbnRlcihkYXRhLmF1dGhvcikpfWAsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxuICAgICAgICB9KVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgMjpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGA8aDE+JHthcGl2aWV3LnN0cm9uZyhkYXRhLnRpdGxlKX08L2gxPiR7YXBpdmlldy5ncmF5KGRhdGEuYXV0aG9yKX1gLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbiAgICAgICAgfSlcXG4gICAgICAgIGFwaXZpZXcudHV3ZW4oZCxkYXRhKVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgMzpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgdXJsOiBpbWcsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzop4bpopHigJ3igJ0nLFxcbiAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vYWttYWl2aWRlby5jZGNodWFuZ2FvLmNvbScgKyBkYXRhLnZpZGVvX2ZpbGUsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGA8aDE+JHthcGl2aWV3LnN0cm9uZyhkYXRhLnRpdGxlKX08L2gxPiR7YXBpdmlldy5ncmF5KGRhdGEuYXV0aG9yKX1gLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbiAgICAgICAgfSlcXG4gICAgICAgIGFwaXZpZXcudHV3ZW4oZCxkYXRhKVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgNDpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGA8aDE+JHthcGl2aWV3LnN0cm9uZyhkYXRhLnRpdGxlKX08L2gxPiR7YXBpdmlldy5ncmF5KGRhdGEuYXV0aG9yKX1gLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbiAgICAgICAgfSlcXG4gICAgICAgIGFwaXZpZXcudHV3ZW4oZCxkYXRhKVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgNTpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgdXJsOiBpbWcsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJznlLXlj7DigJ3igJ0nLFxcbiAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vYWttYWl2aWRlby5jZGNodWFuZ2FvLmNvbScgKyBkYXRhLnZpZGVvLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBgPGgxPiR7YXBpdmlldy5zdHJvbmcoZGF0YS50aXRsZSl9PC9oMT4ke2FwaXZpZXcuZ3JheShkYXRhLmF1dGhvcil9YCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgICAgIH0pXFxuICAgICAgICBhcGl2aWV3LnR1d2VuKGQsZGF0YSlcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIDY6XFxuXFxuICAgICAgICBicmVhaztcXG59XFxuaWYoZ2V0TXlWYXIoJ2ExJywnY3JlYXRlZF9hdCcpID09ICdjcmVhdGVkX2F0Jyl7XFxudmFyIHRleHQgPSAn5b2T5YmN5o6S5bqP77ya5oyJ5pe26Ze0J1xcbn1cXG5pZihnZXRNeVZhcignYTEnKSA9PSAnbGlrZXMnKXtcXG52YXIgdGV4dCA9ICflvZPliY3mjpLluo/vvJrmjInng63luqYnXFxufVxcbi8vbG9nKGdldE15VmFyKCdhMScsJ2NyZWF0ZWRfYXQnKSlcXG52YXIgcGFpeHUgPSAkKCcjbm9Mb2FkaW5nIycpLmI2NCgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgaWYoZ2V0TXlWYXIoJ2ExJywnY3JlYXRlZF9hdCcpID09ICdjcmVhdGVkX2F0Jyl7XFxuICAgICAgICBwdXRNeVZhcignYTEnLCdsaWtlcycpXFxuICAgICAgICB0b2FzdCgn5oyJ54Ot5bqmJylcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfVxcbiAgICBpZihnZXRNeVZhcignYTEnKSA9PSAnbGlrZXMnKXtcXG4gICAgICAgIHB1dE15VmFyKCdhMScsJ2NyZWF0ZWRfYXQnKVxcbiAgICAgICAgdG9hc3QoJ+aMieaXtumXtCcpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH1cXG59KVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBhcGl2aWV3LmJpZyhhcGl2aWV3LnN0cm9uZygn55u45YWz5Zue5aSN5YWxJytkYXRhLnJlcGx5X2NvdW50cysn5p2hJykpKydcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0JythcGl2aWV3LmFkZHJlc3NUYWcocGFpeHUsdGV4dCksXFxuICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG59KVxcbn1cXG52YXIgdXJsID0gYXBpdmlldy5ob3N0KycvdjIuNS9jb21tZW50L2xpc3QnXFxudmFyIGJvZHkgPSBhcGl2aWV3LkVuY3J5cHQoJ2FydGljbGVfaWQ9JytpZCsnJnBhZ2U9JytNWV9QQUdFKycmc2l6ZT0yMCZzb3J0aW5nPScrZ2V0TXlWYXIoJ2ExJywnY3JlYXRlZF9hdCcpKVxcbnZhciBkYXRhID0gSlNPTi5wYXJzZShhcGl2aWV3LmdldGh0bWwodXJsLCBib2R5KSkuZGF0YTsgLy9sb2coZGF0YSlcXG5hcGl2aWV3LnBpbmdsdW4oZCxkYXRhKVxcblxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Y+R546wXCIsXCJwYXRoXCI6XCJjbGFcIixcInJ1bGVcIjpcInZhciBlbmREYXRlID0gXFxcIjIwMjEtMDktMDFcXFwiO1xcbnZhciBoZTEgPSBbJ+WbvuaWhycsJ+mYheivuycsJ+W9seinhicsJ+eUteWPsCcsJ+WGmeecnycsJ+a8q+eUuyddOyAvL2xvZyhoZTEpIFxcbnZhciBzdWJzMSA9IFsnMScsJzInLCczJywnNScsJzAnLCcwJ107IC8vbG9nKHN1YnMxKSBcXG52YXIgc3ViczIgPSBhcGl2aWV3LmdldFllYXJNb250aEFycmF5KGVuZERhdGUpOyAvL2xvZyhzdWJzMilcXG5pZihNWV9QQUdFID09ICcxJyl7XFxuaGUxLmZvckVhY2goKHgsaSk9PntcXG4gICAgdmFyIGN0aXRsZTEgPSB4XFxuICAgIHZhciBzdWIxID0gc3ViczFbaV1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBnZXRNeVZhcignY3RpdGxlMScsIGhlMVswXSkgPT0gY3RpdGxlMSA/ICfigJzigJzigJ3igJ0nK2N0aXRsZTEuZm9udGNvbG9yKCcjJytnZXRSYW5nZUNvbG9ycygpKTpjdGl0bGUxLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGN0aXRsZTEsc3ViMSkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiY3RpdGxlMVxcXCIsIGN0aXRsZTEpO1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic3ViMVxcXCIsc3ViMSk7ICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgY3RpdGxlMSxzdWIxKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgfSlcXG59KVxcbn1cXG52YXIgaGUxID0gZ2V0TXlWYXIoXFxcImN0aXRsZTFcXFwiLGhlMVswXSk7IC8vbG9nKGhlMSlcXG52YXIgc3ViMSA9IGdldE15VmFyKFxcXCJzdWIxXFxcIixzdWJzMVswXSk7IC8vbG9nKHN1YjEpXFxudmFyIHN1YjIgPSBzdWJzMltNWV9QQUdFLTFdOyAvL2xvZyhzdWIyKVxcblxcbmlmKGhlMSA9PSAn5YaZ55yfJyl7XFxudmFyIHVybCA9IGFwaXZpZXcuaG9zdCsnL3YyLjUvc2VyaWVzL2FsYnVtL2xpc3QnXFxudmFyIGJvZHkgPSBhcGl2aWV3LkVuY3J5cHQoJ3R5cGU9JytzdWIxKycmcGFnZT0nK01ZX1BBR0UrJyZzaXplPTMxJnNvcnQ9cHVibGlzaGVkX2F0JylcXG59ZWxzZSBpZihoZTEgPT0gJ+a8q+eUuycpe1xcbnZhciB1cmwgPSBhcGl2aWV3Lmhvc3QrJy92Mi41L3Nlcmllcy9tYW5nYS9saXN0J1xcbnZhciBib2R5ID0gYXBpdmlldy5FbmNyeXB0KCd0eXBlPScrc3ViMSsnJnBhZ2U9JytNWV9QQUdFKycmc2l6ZT0zMSZzb3J0PXB1Ymxpc2hlZF9hdCcpXFxufWVsc2V7XFxudmFyIHVybCA9IGFwaXZpZXcuaG9zdCsnL3YyLjUvYXJ0aWNsZS9kaXNjb3ZlcnknXFxudmFyIGJvZHkgPSBhcGl2aWV3LkVuY3J5cHQoJ21vZGVsX2lkPScrc3ViMSsnJnB1Ymxpc2hlZF9hdD0nK3N1YjIrJyZwYWdlPTEmc2l6ZT0zMScpXFxufVxcbnZhciBkYXRhID0gSlNPTi5wYXJzZShhcGl2aWV3LmdldGh0bWwodXJsLGJvZHkpKS5kYXRhO1xcblxcbnN3aXRjaCAoc3ViMSkge1xcbiAgICBjYXNlICcwJzpcXG4gICAgICAgIGFwaXZpZXcueGllemhlbm1hbmh1YXlpamkoZCxkYXRhKVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJzEnOlxcbiAgICAgICAgYXBpdmlldy50dXdlbnlpamkoZCwgZGF0YSlcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICcyJzpcXG4gICAgICAgIGFwaXZpZXcueXVlZHV5aWppKGQsIGRhdGEpXFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnMyc6XFxuICAgICAgICBhcGl2aWV3LnlpbmdzaGl5aWppKGQsIGRhdGEpXFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnNSc6XFxuICAgICAgICBhcGl2aWV3LmRpYW50YWl5aWppKGQsIGRhdGEpXFxuICAgICAgICBicmVhaztcXG59XCJ9XSxcInBhcmFtc1wiOlwie1xcXCJpZFxcXCI6MzEzNzEsXFxcImltZ1xcXCI6XFxcImh0dHBzOi8vam10cC5ncGdyZWlpLmNvbS9zdG9yYWdlL3RodW1iLzMxMzcxLzY4MGI3YjUxOWZmNDcuanBnQGpzPSQuaGlrZXIuTVlfVElUTEUgPSBcXFxcXFxcIuS4gOS4qkFQUFxcXFxcXFwiOyhcXFxcbigpID0+IHtcXFxcbiAgICBjb25zdCBDcnlwdG9VdGlsID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9hc3NldHMvY3J5cHRvLWphdmEuanNcXFxcXFxcIik7XFxcXG4gICAgbGV0IGtleSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXFxcXFxcXCJzYUlaWGM0eU12cTBJejU2XFxcXFxcXCIpO1xcXFxuICAgIGxldCBpdiA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXFxcXFxcXCJrYkpZdEJKVUVDVDBveWpvXFxcXFxcXCIpO1xcXFxuICAgIGxldCB0ZXh0RGF0YSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUlucHV0U3RyZWFtKGlucHV0KTtcXFxcbiAgICBsZXQgZW5jcnlwdGVkID0gQ3J5cHRvVXRpbC5BRVMuZGVjcnlwdCh0ZXh0RGF0YSwga2V5LCB7bW9kZTogXFxcXFxcXCJBRVMvQ0JDL1BLQ1M3UGFkZGluZ1xcXFxcXFwiLCBpdjogaXZ9KTtcXFxcbiAgICByZXR1cm4gZW5jcnlwdGVkLnRvSW5wdXRTdHJlYW0oKTtcXFxcbn1cXFxcbikoKVxcXCIsXFxcIm1vZGVsX2lkXFxcIjoxfVwiLFwic2F2ZWRcIjpmYWxzZSxcInRpdGxlXCI6XCLkuIDkuKpBUFBcIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJoaWtlcjovL3BhZ2UvZXJqaT9wYWdlPWZ5cGFnZSNub0hpc3RvcnkjI2dhbWVUaGVtZSNcIixcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJmaW5kX3J1bGVcIjpcImpzOlxcbnZhciBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXCJoYW5zaHVcXFwiKVxcbnZhciBtb2RlbF9pZCA9IE1ZX1BBUkFNUy5tb2RlbF9pZDsgLy9sb2codHlwZW9mIG1vZGVsX2lkKVxcbnZhciBpZCA9IE1ZX1BBUkFNUy5pZDsgLy9sb2coaWQpXFxudmFyIGltZyA9IE1ZX1BBUkFNUy5pbWdcXG52YXIgZCA9IFtdO1xcblxcbmlmKE1ZX1BBR0UgPT0gJzEnKXtcXG52YXIgdXJsID0gYXBpdmlldy5ob3N0KycvdjIuNS9hcnRpY2xlL2RldGFpbCdcXG52YXIgYm9keSA9IGFwaXZpZXcuRW5jcnlwdCgnaWQ9JytpZClcXG52YXIgZGF0YSA9IEpTT04ucGFyc2UoYXBpdmlldy5nZXRodG1sKHVybCxib2R5KSkuZGF0YTsgLy9sb2coZGF0YSlcXG5zd2l0Y2ggKG1vZGVsX2lkKSB7XFxuICAgIGNhc2UgMTpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgdXJsOiBpbWcsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGAke2FwaXZpZXcuc3Ryb25nKGFwaXZpZXcuY2VudGVyKGRhdGEudGl0bGUpKX0ke2FwaXZpZXcuZ3JheShkYXRhLmRlc2NyaXB0aW9uKX0ke2FwaXZpZXcuZ3JheShhcGl2aWV3LmNlbnRlcihkYXRhLmF1dGhvcikpfWAsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxuICAgICAgICB9KVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgMjpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGA8aDE+JHthcGl2aWV3LnN0cm9uZyhkYXRhLnRpdGxlKX08L2gxPiR7YXBpdmlldy5ncmF5KGRhdGEuYXV0aG9yKX1gLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbiAgICAgICAgfSlcXG4gICAgICAgIGFwaXZpZXcudHV3ZW4oZCxkYXRhKVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgMzpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgdXJsOiBpbWcsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzop4bpopHigJ3igJ0nLFxcbiAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vYWttYWl2aWRlby5jZGNodWFuZ2FvLmNvbScgKyBkYXRhLnZpZGVvX2ZpbGUsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGA8aDE+JHthcGl2aWV3LnN0cm9uZyhkYXRhLnRpdGxlKX08L2gxPiR7YXBpdmlldy5ncmF5KGRhdGEuYXV0aG9yKX1gLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbiAgICAgICAgfSlcXG4gICAgICAgIGFwaXZpZXcudHV3ZW4oZCxkYXRhKVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgNDpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGA8aDE+JHthcGl2aWV3LnN0cm9uZyhkYXRhLnRpdGxlKX08L2gxPiR7YXBpdmlldy5ncmF5KGRhdGEuYXV0aG9yKX1gLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbiAgICAgICAgfSlcXG4gICAgICAgIGFwaXZpZXcudHV3ZW4oZCxkYXRhKVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgNTpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgdXJsOiBpbWcsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJznlLXlj7DigJ3igJ0nLFxcbiAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vYWttYWl2aWRlby5jZGNodWFuZ2FvLmNvbScgKyBkYXRhLnZpZGVvLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBgPGgxPiR7YXBpdmlldy5zdHJvbmcoZGF0YS50aXRsZSl9PC9oMT4ke2FwaXZpZXcuZ3JheShkYXRhLmF1dGhvcil9YCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgICAgIH0pXFxuICAgICAgICBhcGl2aWV3LnR1d2VuKGQsZGF0YSlcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIDY6XFxuXFxuICAgICAgICBicmVhaztcXG59XFxuaWYoZ2V0TXlWYXIoJ2ExJywnY3JlYXRlZF9hdCcpID09ICdjcmVhdGVkX2F0Jyl7XFxudmFyIHRleHQgPSAn5b2T5YmN5o6S5bqP77ya5oyJ5pe26Ze0J1xcbn1cXG5pZihnZXRNeVZhcignYTEnKSA9PSAnbGlrZXMnKXtcXG52YXIgdGV4dCA9ICflvZPliY3mjpLluo/vvJrmjInng63luqYnXFxufVxcbi8vbG9nKGdldE15VmFyKCdhMScsJ2NyZWF0ZWRfYXQnKSlcXG52YXIgcGFpeHUgPSAkKCcjbm9Mb2FkaW5nIycpLmI2NCgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgaWYoZ2V0TXlWYXIoJ2ExJywnY3JlYXRlZF9hdCcpID09ICdjcmVhdGVkX2F0Jyl7XFxuICAgICAgICBwdXRNeVZhcignYTEnLCdsaWtlcycpXFxuICAgICAgICB0b2FzdCgn5oyJ54Ot5bqmJylcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfVxcbiAgICBpZihnZXRNeVZhcignYTEnKSA9PSAnbGlrZXMnKXtcXG4gICAgICAgIHB1dE15VmFyKCdhMScsJ2NyZWF0ZWRfYXQnKVxcbiAgICAgICAgdG9hc3QoJ+aMieaXtumXtCcpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH1cXG59KVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBhcGl2aWV3LmJpZyhhcGl2aWV3LnN0cm9uZygn55u45YWz5Zue5aSN5YWxJytkYXRhLnJlcGx5X2NvdW50cysn5p2hJykpKydcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0JythcGl2aWV3LmFkZHJlc3NUYWcocGFpeHUsdGV4dCksXFxuICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG59KVxcbn1cXG52YXIgdXJsID0gYXBpdmlldy5ob3N0KycvdjIuNS9jb21tZW50L2xpc3QnXFxudmFyIGJvZHkgPSBhcGl2aWV3LkVuY3J5cHQoJ2FydGljbGVfaWQ9JytpZCsnJnBhZ2U9JytNWV9QQUdFKycmc2l6ZT0yMCZzb3J0aW5nPScrZ2V0TXlWYXIoJ2ExJywnY3JlYXRlZF9hdCcpKVxcbnZhciBkYXRhID0gSlNPTi5wYXJzZShhcGl2aWV3LmdldGh0bWwodXJsLCBib2R5KSkuZGF0YTsgLy9sb2coZGF0YSlcXG5hcGl2aWV3LnBpbmdsdW4oZCxkYXRhKVxcblxcbnNldFJlc3VsdChkKVwiLFwiZ3JvdXBcIjpcIuWFtuWug1wiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWHveaVsFxcXCIsXFxcInBhdGhcXFwiOlxcXCJoYW5zaHVcXFwiLFxcXCJydWxlXFxcIjpcXFwiY29uc3QgYXBpdmlldyA9IHtcXFxcbiAgICBjb2xvcjogKHRlc3QpID0+IHtcXFxcbiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj1cXFxcXFxcIiNGQTcyOThcXFxcXFxcIj4nICsgdGVzdCArICc8L2Zyb250Pic7XFxcXG4gICAgfSxcXFxcbiAgICBzdHJvbmc6ICh0ZXN0KSA9PiB7XFxcXG4gICAgICAgIHJldHVybiAnPHN0cm9uZz4nICsgdGVzdCArICc8L3N0cm9uZz4nO1xcXFxuICAgIH0sXFxcXG4gICAgc21hbGw6ICh0ZXN0KSA9PiB7XFxcXG4gICAgICAgIHJldHVybiAnPHNtYWxsPicgKyB0ZXN0ICsgJzwvc21hbGw+JztcXFxcbiAgICB9LFxcXFxuICAgIGNlbnRlcjogKHRlc3QpID0+IHtcXFxcbiAgICAgICAgcmV0dXJuICc8cCBzdHlsZT1cXFxcXFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFxcXFxcIj4nICsgdGVzdCArICc8L3A+J1xcXFxuICAgIH0sXFxcXG4gICAgYmlnOiAodGVzdCkgPT4ge1xcXFxuICAgICAgICByZXR1cm4gJzxiaWc+JyArIHRlc3QgKyAnPC9iaWc+JztcXFxcbiAgICB9LFxcXFxuICAgIGdyYXk6ICh0ZXN0KSA9PiB7XFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcIjxmb250IGNvbG9yPSdncmF5Jz5cXFxcXFxcIiArIHRlc3QgKyBcXFxcXFxcIjwvZm9udD5cXFxcXFxcIjtcXFxcbiAgICB9LFxcXFxuICAgIHJpY2g6ICh0ZXN0KSA9PiB7XFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcIuKAmOKAmOKAmeKAmVxcXFxcXFwiICsgdGVzdDtcXFxcbiAgICB9LFxcXFxuICAgIGFkZHJlc3NUYWc6ICh1cmwsIHRleHQpID0+IHtcXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFwiPGEgaHJlZj0nXFxcXFxcXCIgKyB1cmwgKyBcXFxcXFxcIic+XFxcXFxcXCIgKyB0ZXh0ICsgXFxcXFxcXCI8L2E+XFxcXFxcXCJcXFxcbiAgICB9LFxcXFxuICAgIGVtcHR5OiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIixcXFxcbiAgICBsYXlvdXQ6IFtdLFxcXFxuICAgIG5vTG9hZDogXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiLFxcXFxuICAgIHRpbWVzdGFtcDogKCkgPT4gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxcXFxuICAgIHQxMDogKCkgPT4gYXBpdmlldy50aW1lc3RhbXAoKS50b1N0cmluZygpLFxcXFxuICAgIHQxMzogKCkgPT4gYXBpdmlldy50MTAoKSArICcwMDAnLFxcXFxuICAgIGhvc3Q6IGdldEl0ZW0oXFxcXFxcXCJhcGlcXFxcXFxcIiksXFxcXG4gICAgZ2V0RGF0ZXNBcnJheTogKGVuZERhdGUpID0+IHtcXFxcbiAgICAgICAgLy8g5bCG57uT5p2f5pel5pyf5a2X56ym5Liy6L2s5o2i5Li6RGF0ZeWvueixoVxcXFxuICAgICAgICBsZXQgZW5kRGF0ZU9iaiA9IG5ldyBEYXRlKGVuZERhdGUpO1xcXFxuXFxcXG4gICAgICAgIC8vIOiOt+WPluW9k+WJjeaXpeacn1xcXFxuICAgICAgICBsZXQgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xcXFxuXFxcXG4gICAgICAgIC8vIOWIneWni+WMluaXpeacn+aVsOe7hFxcXFxuICAgICAgICBsZXQgZGF0ZXNBcnJheSA9IFtdO1xcXFxuXFxcXG4gICAgICAgIC8vIOW+queOr+S7juW9k+WJjeaXpeacn+WIsOe7k+adn+aXpeacn1xcXFxuICAgICAgICB3aGlsZSAoY3VycmVudERhdGUgPj0gZW5kRGF0ZU9iaikge1xcXFxuICAgICAgICAgICAgLy8g5bCG5pel5pyf6L2s5o2i5Li6WVlZWS1NTS1EROagvOW8j+eahOWtl+espuS4suW5tua3u+WKoOWIsOaVsOe7hFxcXFxuICAgICAgICAgICAgZGF0ZXNBcnJheS5wdXNoKGN1cnJlbnREYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSk7XFxcXG5cXFxcbiAgICAgICAgICAgIC8vIOWHj+WOu+S4gOWkqVxcXFxuICAgICAgICAgICAgY3VycmVudERhdGUuc2V0RGF0ZShjdXJyZW50RGF0ZS5nZXREYXRlKCkgLSAxKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKlxcXFxuICAgICAgICAgICAgLy8g5Y+N6L2s5pWw57uE5Lul5oyJ6ZmN5bqP5o6S5YiX5pel5pyfXFxcXG4gICAgICAgICAgICBkYXRlc0FycmF5LnJldmVyc2UoKTtcXFxcbiAgICAgICAgKi9cXFxcbiAgICAgICAgcmV0dXJuIGRhdGVzQXJyYXk7XFxcXG4gICAgfSxcXFxcbiAgICBnZXRZZWFyTW9udGhBcnJheTogKGVuZERhdGUpID0+IHtcXFxcbiAgICAgICAgbGV0IGVuZERhdGVPYmogPSBuZXcgRGF0ZShlbmREYXRlKTtcXFxcbiAgICAgICAgbGV0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcXFxcbiAgICAgICAgbGV0IHllYXJNb250aEFycmF5ID0gW107XFxcXG5cXFxcbiAgICAgICAgLy8g56Gu5L+d5b2T5YmN5pel5pyf5LiN5bCP5LqO57uT5p2f5pel5pyfXFxcXG4gICAgICAgIGlmIChjdXJyZW50RGF0ZSA8IGVuZERhdGVPYmopIHtcXFxcbiAgICAgICAgICAgIHJldHVybiB5ZWFyTW9udGhBcnJheTsgLy8g5aaC5p6c5b2T5YmN5pel5pyf5bCP5LqO57uT5p2f5pel5pyf77yM55u05o6l6L+U5Zue56m65pWw57uEXFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICAvLyDlvqrnjq/ku47lvZPliY3ml6XmnJ/liLDnu5PmnZ/ml6XmnJ9cXFxcbiAgICAgICAgd2hpbGUgKGN1cnJlbnREYXRlID49IGVuZERhdGVPYmopIHtcXFxcbiAgICAgICAgICAgIC8vIOiOt+WPluW9k+WJjeaXpeacn+eahOW5tOWSjOaciO+8jOW5tuagvOW8j+WMluS4ulxcXFxcXFwiWVlZWS1NTVxcXFxcXFwi5a2X56ym5LiyXFxcXG4gICAgICAgICAgICBsZXQgeWVhciA9IGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCk7XFxcXG4gICAgICAgICAgICBsZXQgbW9udGggPSAoY3VycmVudERhdGUuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsgLy8g5pyI5Lu95LuOMOW8gOWni++8jOaJgOS7peWKoDHvvIzlubbkuJTnoa7kv53mmK/kuKTkvY3mlbBcXFxcbiAgICAgICAgICAgIGxldCB5ZWFyTW9udGggPSBgJHt5ZWFyfS0ke21vbnRofWA7IC8vIOato+ehruS9v+eUqOaooeadv+Wtl+espuS4slxcXFxuXFxcXG4gICAgICAgICAgICAvLyDlsIblubTmnIjlrZfnrKbkuLLmt7vliqDliLDmlbDnu4RcXFxcbiAgICAgICAgICAgIHllYXJNb250aEFycmF5LnB1c2goeWVhck1vbnRoKTtcXFxcblxcXFxuICAgICAgICAgICAgLy8g5YeP5Y675LiA5Liq5pyIXFxcXG4gICAgICAgICAgICBjdXJyZW50RGF0ZS5zZXRNb250aChjdXJyZW50RGF0ZS5nZXRNb250aCgpIC0gMSk7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICByZXR1cm4geWVhck1vbnRoQXJyYXk7XFxcXG4gICAgfSxcXFxcbiAgICBDcnlwdG9KUzogbnVsbCwgLy8g55So5LqO5a2Y5YKoIENyeXB0b0pTIOWvueixoVxcXFxuICAgIGluaXRDcnlwdG9KUzogKCkgPT4ge1xcXFxuICAgICAgICBpZiAoIWFwaXZpZXcuQ3J5cHRvSlMpIHtcXFxcbiAgICAgICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7IC8vIOaJp+ihjOS4gOasoSBldmFs77yM56Gu5L+dIGBDcnlwdG9KU2Ag5Y+Y6YeP6KKr5a6a5LmJXFxcXG4gICAgICAgICAgICBhcGl2aWV3LkNyeXB0b0pTID0gQ3J5cHRvSlM7IC8vIOWwhiBgQ3J5cHRvSlNgIOe8k+WtmOWIsCBgYXBpdmlldy5DcnlwdG9KU2BcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgRW5jcnlwdDogKHdvcmQpID0+IHtcXFxcbiAgICAgICAgYXBpdmlldy5pbml0Q3J5cHRvSlMoKTsgLy8g56Gu5L+dIENyeXB0b0pTIOW3suWKoOi9vVxcXFxuICAgICAgICBsZXQga2V5ID0gYXBpdmlldy5DcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFxcXFxcImwqYnYlWmlxMDAwQmlhb2dcXFxcXFxcIik7XFxcXG4gICAgICAgIGxldCBpdiA9IGFwaXZpZXcuQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcXFxcXCI4NTk3NTA2MDAyOTM5MjQ5XFxcXFxcXCIpO1xcXFxuICAgICAgICBsZXQgZW5jcnlwdCA9IGFwaXZpZXcuQ3J5cHRvSlMuQUVTLmVuY3J5cHQod29yZCwga2V5LCB7XFxcXG4gICAgICAgICAgICBpdjogaXYsXFxcXG4gICAgICAgICAgICBtb2RlOiBhcGl2aWV3LkNyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICAgICAgcGFkZGluZzogYXBpdmlldy5DcnlwdG9KUy5wYWQuUGtjczcsXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICByZXR1cm4gZW5jcnlwdC50b1N0cmluZygpOyAvLyDpu5jorqTov5Tlm54gQmFzZTY0IOe8lueggeeahOWtl+espuS4slxcXFxuICAgIH0sXFxcXG4gICAgRGVjcnlwdDogKHdvcmQpID0+IHtcXFxcbiAgICAgICAgYXBpdmlldy5pbml0Q3J5cHRvSlMoKTsgLy8g56Gu5L+dIENyeXB0b0pTIOW3suWKoOi9vVxcXFxuICAgICAgICBsZXQga2V5ID0gYXBpdmlldy5DcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFxcXFxcImwqYnYlWmlxMDAwQmlhb2dcXFxcXFxcIik7XFxcXG4gICAgICAgIGxldCBpdiA9IGFwaXZpZXcuQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcXFxcXCI4NTk3NTA2MDAyOTM5MjQ5XFxcXFxcXCIpO1xcXFxuICAgICAgICBsZXQgZGVjcnlwdCA9IGFwaXZpZXcuQ3J5cHRvSlMuQUVTLmRlY3J5cHQod29yZCwga2V5LCB7XFxcXG4gICAgICAgICAgICBpdjogaXYsXFxcXG4gICAgICAgICAgICBtb2RlOiBhcGl2aWV3LkNyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICAgICAgcGFkZGluZzogYXBpdmlldy5DcnlwdG9KUy5wYWQuUGtjczcsXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICByZXR1cm4gZGVjcnlwdC50b1N0cmluZyhhcGl2aWV3LkNyeXB0b0pTLmVuYy5VdGY4KTsgLy8g6Kej5a+G57uT5p6c6L2s5o2i5Li65paH5pys5qC85byPXFxcXG4gICAgfSxcXFxcbiAgICBEZWNyeXB0MTogKGlucHV0KSA9PiB7XFxcXG4gICAgICAgIHJldHVybiAkKGlucHV0KS5pbWFnZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICBjb25zdCBDcnlwdG9VdGlsID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9hc3NldHMvY3J5cHRvLWphdmEuanNcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBsZXQga2V5ID0gQ3J5cHRvVXRpbC5EYXRhLnBhcnNlVVRGOChcXFxcXFxcInNhSVpYYzR5TXZxMEl6NTZcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBsZXQgaXYgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VVVEY4KFxcXFxcXFwia2JKWXRCSlVFQ1Qwb3lqb1xcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIGxldCB0ZXh0RGF0YSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUlucHV0U3RyZWFtKGlucHV0KTtcXFxcbiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWQgPSBDcnlwdG9VdGlsLkFFUy5kZWNyeXB0KHRleHREYXRhLCBrZXksIHtcXFxcbiAgICAgICAgICAgICAgICBtb2RlOiBcXFxcXFxcIkFFUy9DQkMvUEtDUzdQYWRkaW5nXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgaXY6IGl2XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIHJldHVybiBlbmNyeXB0ZWQudG9JbnB1dFN0cmVhbSgpO1xcXFxuICAgICAgICB9KVxcXFxuICAgIH0sXFxcXG4gICAgZ2V0dG9rZW46ICgpID0+IHtcXFxcbiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChhcGl2aWV3Lmhvc3QrJy92Mi41L3JlZnJlc2gvdG9rZW4nLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcXFxuICAgICAgICAgICAgICAgICd1dWlkJzogJ2M5YWQyMjFmLWI0NDUtMzlkMi04NWY1LWE2OTNjMjQxMTVlMycsXFxcXG4gICAgICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IGFwaXZpZXcudDEwKCksXFxcXG4gICAgICAgICAgICAgICAgJ2lwJzogJzAuMC4wLjAnLFxcXFxuICAgICAgICAgICAgICAgICd1c2VyLWtleSc6ICc3NjAzNTVjYzg4MjE4ZjBjMTUxNGY1Njc2NDM2MjA2NicsXFxcXG4gICAgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJzEnLFxcXFxuICAgICAgICAgICAgICAgICdzaWduJzogbWQ1KG1kNSgnMC4wLjAuMC4xLicrYXBpdmlldy50MTAoKSsnLjc2MDM1NWNjODgyMThmMGMxNTE0ZjU2NzY0MzYyMDY2LmM5YWQyMjFmLWI0NDUtMzlkMi04NWY1LWE2OTNjMjQxMTVlMycpKydtNG4yaGpQZVlXa0Q2dEZwcUtGXjNIT15oMjRQQGlkVCcpLFxcXFxuICAgICAgICAgICAgICAgICdhcHAtdmVyc2lvbic6ICcyLjIuOScsXFxcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogJzAnLFxcXFxuICAgICAgICAgICAgICAgICdIb3N0JzogYXBpdmlldy5ob3N0LnNwbGl0KCcvLycpWzFdLFxcXFxuICAgICAgICAgICAgICAgICdDb25uZWN0aW9uJzogJ0tlZXAtQWxpdmUnLFxcXFxuICAgICAgICAgICAgICAgIC8vJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwJyxcXFxcbiAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdva2h0dHAvNC4zLjEnLFxcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgICAgIH0pOyAvL2xvZyhodG1sKVxcXFxuICAgICAgICB2YXIgaHRtbDEgPSBhcGl2aWV3LkRlY3J5cHQoaHRtbCk7IC8vbG9nKGh0bWwxKVxcXFxuICAgICAgICAvL3ZhciBsb2dnZWRfYXQgPSBKU09OLnBhcnNlKGh0bWwxKS5kYXRhLnVzZXIubG9nZ2VkX2F0LnNwbGl0KCcgJylbMF07IGxvZyhsb2dnZWRfYXQpXFxcXG4gICAgICAgIHZhciB0b2tlbiA9IEpTT04ucGFyc2UoaHRtbDEpLmRhdGEudXNlci50b2tlbjsgbG9nKHRva2VuKVxcXFxuICAgICAgICAvL3NldEl0ZW0oXFxcXFxcXCJsb2dnZWRfYXRcXFxcXFxcIixsb2dnZWRfYXQpXFxcXG4gICAgICAgIHNldEl0ZW0oXFxcXFxcXCJ0b2tlblxcXFxcXFwiLHRva2VuKVxcXFxuICAgIH0sXFxcXG4gICAgZ2V0aHRtbDogKHVybCxib2R5KSA9PiB7XFxcXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2godXJsLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgJ3V1aWQnOiAnYzlhZDIyMWYtYjQ0NS0zOWQyLTg1ZjUtYTY5M2MyNDExNWUzJyxcXFxcbiAgICAgICAgICAgICAgICAndGltZXN0YW1wJzogYXBpdmlldy50MTAoKSxcXFxcbiAgICAgICAgICAgICAgICAnaXAnOiAnMC4wLjAuMCcsXFxcXG4gICAgICAgICAgICAgICAgJ3VzZXIta2V5JzogJzc2MDM1NWNjODgyMThmMGMxNTE0ZjU2NzY0MzYyMDY2JyxcXFxcbiAgICAgICAgICAgICAgICAncGxhdGZvcm0nOiAnMScsXFxcXG4gICAgICAgICAgICAgICAgJ3NpZ24nOiBtZDUobWQ1KCcwLjAuMC4wLjEuJythcGl2aWV3LnQxMCgpKycuNzYwMzU1Y2M4ODIxOGYwYzE1MTRmNTY3NjQzNjIwNjYuYzlhZDIyMWYtYjQ0NS0zOWQyLTg1ZjUtYTY5M2MyNDExNWUzJykrJ200bjJoalBlWVdrRDZ0RnBxS0ZeM0hPXmgyNFBAaWRUJyksXFxcXG4gICAgICAgICAgICAgICAgJ2FwcC12ZXJzaW9uJzogJzIuMi45JyxcXFxcbiAgICAgICAgICAgICAgICAndG9rZW4nOiBnZXRJdGVtKFxcXFxcXFwidG9rZW5cXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcXFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6ICcwJyxcXFxcbiAgICAgICAgICAgICAgICAnSG9zdCc6IGFwaXZpZXcuaG9zdC5zcGxpdCgnLy8nKVsxXSxcXFxcbiAgICAgICAgICAgICAgICAnQ29ubmVjdGlvbic6ICdLZWVwLUFsaXZlJyxcXFxcbiAgICAgICAgICAgICAgICAvLydBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCcsXFxcXG4gICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnb2todHRwLzQuMy4xJyxcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBib2R5OiBib2R5LCAgICAgICAgICAgIFxcXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxcXG4gICAgICAgICAgICByZWplY3RDb2Rpbmc6IHRydWVcXFxcbiAgICAgICAgfSk7IC8vbG9nKGh0bWwpXFxcXG4gICAgICAgIHZhciBodG1sMSA9IGFwaXZpZXcuRGVjcnlwdChodG1sKTsgLy9sb2coaHRtbDEpXFxcXG4gICAgICAgIHJldHVybiBodG1sMVxcXFxuICAgIH0sXFxcXG4gICAgdHV3ZW55aWppOiAoZCxkYXRhKSA9PiB7XFxcXG4gICAgICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBpbWcgPSBhcGl2aWV3LkRlY3J5cHQxKCdodHRwczovL2ptdHAuZ3BncmVpaS5jb20nICsgaXRlbS50aHVtYilcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ucHVibGlzaGVkX2F0LnNwbGl0KCcgJylbMF0sXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBgaGlrZXI6Ly9wYWdlL2Vyamk/cGFnZT1meXBhZ2Ujbm9IaXN0b3J5IyNnYW1lVGhlbWUjYCxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX2lkOiBpdGVtLm1vZGVsX2lkLFxcXFxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWdcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0sXFxcXG4gICAgeXVlZHV5aWppOiAoZCxkYXRhKSA9PiB7XFxcXG4gICAgICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBpbWcgPSBhcGl2aWV3LkRlY3J5cHQxKCdodHRwczovL2ptdHAuZ3BncmVpaS5jb20nICsgaXRlbS50aHVtYilcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUgKyAnXFxcXFxcXFxuJyArIGl0ZW0uYXV0aG9yLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IGl0ZW0uZGVzY3JpcHRpb24sXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBgaGlrZXI6Ly9wYWdlL2Vyamk/cGFnZT1meXBhZ2Ujbm9IaXN0b3J5IyNnYW1lVGhlbWUjYCxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX2lkOiBpdGVtLm1vZGVsX2lkLFxcXFxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWdcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0sXFxcXG4gICAgeWluZ3NoaXlpamk6IChkLGRhdGEpID0+IHtcXFxcbiAgICAgICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGltZyA9IGFwaXZpZXcuRGVjcnlwdDEoJ2h0dHBzOi8vam10cC5ncGdyZWlpLmNvbScgKyBpdGVtLnRodW1iKVxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBpdGVtLmRlc2NyaXB0aW9uLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgIHVybDogYGhpa2VyOi8vcGFnZS9lcmppP3BhZ2U9ZnlwYWdlI25vSGlzdG9yeSMjZ2FtZVRoZW1lI2AsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9pZDogaXRlbS5tb2RlbF9pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9LFxcXFxuICAgIGRpYW50YWl5aWppOiAoZCxkYXRhKSA9PiB7XFxcXG4gICAgICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBpbWcgPSBhcGl2aWV3LkRlY3J5cHQxKCdodHRwczovL2ptdHAuZ3BncmVpaS5jb20nICsgaXRlbS50aHVtYilcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogJzAnLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgIHVybDogYGhpa2VyOi8vcGFnZS9lcmppP3BhZ2U9ZnlwYWdlI25vSGlzdG9yeSMjZ2FtZVRoZW1lI2AsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18xJyxcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9pZDogaXRlbS5tb2RlbF9pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9LFxcXFxuICAgIHhpZXpoZW5tYW5odWF5aWppOiAoZCxkYXRhKSA9PiB7XFxcXG4gICAgICAgIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBpbWcgPSBhcGl2aWV3LkRlY3J5cHQxKCdodHRwczovL2ptdHAuZ3BncmVpaS5jb20nICsgaXRlbS50aHVtYilcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogJzAnLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScgKyBpdGVtLmlkKS5ydWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcXFxcXCJoYW5zaHVcXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IGFwaXZpZXcuaG9zdCsnL3YyLjUvc2VyaWVzL2NoYXB0ZXJzJ1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgYm9keSA9IGFwaXZpZXcuRW5jcnlwdCgnc2VyaWVzX2lkPScgKyBNWV9VUkwucmVwbGFjZSgnaGlrZXI6Ly9lbXB0eScsICcnKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKGFwaXZpZXcuZ2V0aHRtbCh1cmwsIGJvZHkpKS5kYXRhOyAvL2xvZyhkYXRhKVxcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxuICAgICAgICAgICAgICAgICAgICBkYXRhLmNoYXB0ZXJzLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1nID0gYXBpdmlldy5EZWNyeXB0MSgnaHR0cHM6Ly9qbXRwLmdwZ3JlaWkuY29tJyArIGl0ZW0udGh1bWIpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0ZW0uZGVzY3JpcHRpb24sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBgaGlrZXI6Ly9wYWdlL2Vyamk/cGFnZT1meXBhZ2Ujbm9IaXN0b3J5IyNnYW1lVGhlbWUjYCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX2lkOiAyLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZClcXFxcbiAgICAgICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2NhcmRfcGljXzEnXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0sXFxcXG4gICAgdHV3ZW46IChkLGRhdGEpID0+IHtcXFxcbiAgICAgICAgdmFyIGltZ3MgPSBkYXRhLmNvbnRlbnQucmVwbGFjZSgvKDxmaWd1cmVbXFxcXFxcXFxTXFxcXFxcXFxzXSo/PFxcXFxcXFxcL2ZpZ3VyZT4pL2csIFxcXFxcXFwiQCQxQFxcXFxcXFwiKTtcXFxcbiAgICAgICAgaW1ncy5zcGxpdChcXFxcXFxcIkBcXFxcXFxcIikuZm9yRWFjaChpdCA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoaXQuaW5jbHVkZXMoXFxcXFxcXCJmaWd1cmVcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaW1nID0gYXBpdmlldy5EZWNyeXB0MSgnaHR0cHM6Ly9qbXRwLmdwZ3JlaWkuY29tJyArIHBkZmgoaXQsIFxcXFxcXFwiaW1nJiZzcmNcXFxcXFxcIikpXFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgLy9kZXNjOiAnMCcsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGltZyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJ1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpdC50cmltKCkpIHtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXQsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICB9LFxcXFxuICAgIGJpYW9xaWFuOiAoZCxkYXRhKSA9PiB7XFxcXG4gICAgICAgIGRhdGEudGFncy5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoaXRlbSArICcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgLy9wdXRNeVZhcignc2VhcmNoJywgaW5wdXQpXFxcXG4gICAgICAgICAgICAgICAgICAgIC8vcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSxcXFxcbiAgICB5dWxhbnR1OiAoZCxkYXRhKSA9PiB7XFxcXG4gICAgICAgIGRhdGEubXVsdGlwbGVfcGljLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgaW1nID0gYXBpdmlldy5EZWNyeXB0MSgnaHR0cHM6Ly9qbXRwLmdwZ3JlaWkuY29tJyArIGl0ZW0pXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgIHVybDogaW1nLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMydcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSxcXFxcbiAgICBwaW5nbHVuOiAoZCwgZGF0YSkgPT4ge1xcXFxuICAgICAgICBkYXRhLmZvckVhY2goZGF0YSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoZGF0YS5hdXRob3IpIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5hdmF0YXIgPT0gJycpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF2YXRhciA9ICdodHRwczovL2ltZy52aW51YS5jbi9pbWFnZXMvSW5uRGsudGgucG5nJ1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdmF0YXIgPSBhcGl2aWV3LkRlY3J5cHQxKCdodHRwczovL2ptdHAuZ3BncmVpaS5jb20nICsgZGF0YS5hdmF0YXIpXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLmF1dGhvcixcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogZGF0YS5jcmVhdGVkX2F0LFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGF2YXRhcixcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucmVwbGllcy5sZW5ndGggIT0gJzAnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGRhdGEudGV4dCArIGFwaXZpZXcuYWRkcmVzc1RhZygnaGlrZXI6Ly9wYWdlL3Bpbmx1bicsICdcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHTmn6XnnIvlhajpg6gnKVxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGRhdGEudGV4dFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYXBpdmlldy5ncmF5KHRpdGxlKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEuYXV0aG9yLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogZGF0YS5jcmVhdGVkX2F0LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzE6IGRhdGEudGV4dCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogYXZhdGFyLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogZGF0YS5yZXBsaWVzLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBkYXRhLmF1dGhvclxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcbiQuZXhwb3J0cyA9IGFwaXZpZXc7XFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLngrnmkq1cXFwiLFxcXCJwYXRoXFxcIjpcXFwiY2xhMVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgZW5kRGF0ZSA9IFxcXFxcXFwiMjAyMS0wOS0wMVxcXFxcXFwiO1xcXFxudmFyIGhlID0gYXBpdmlldy5nZXRZZWFyTW9udGhBcnJheShlbmREYXRlKTsgLy9sb2coaGUpIFxcXFxudmFyIHN1YnMgPSBoZSAvL2xvZyhzdWJzKSBcXFxcbmlmKE1ZX1BBR0UgPT0gJzEnKXtcXFxcbmhlLmZvckVhY2goKHgsaSk9PntcXFxcbiAgICB2YXIgY3RpdGxlID0geFxcXFxuICAgIHZhciBzdWIgPSBzdWJzW2ldXFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IGdldE15VmFyKCdjdGl0bGUnLCBoZVswXSkgPT0gY3RpdGxlID8gJ+KAnOKAnOKAneKAnScrY3RpdGxlLmZvbnRjb2xvcignIycrZ2V0UmFuZ2VDb2xvcnMoKSk6Y3RpdGxlLFxcXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoY3RpdGxlLHN1YikgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwiY3RpdGxlXFxcXFxcXCIsIGN0aXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJzdWJcXFxcXFxcIixzdWIpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgfSwgY3RpdGxlLHN1YiksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIlxcXFxuICAgIH0pXFxcXG59KVxcXFxufVxcXFxudmFyIGhlID0gZ2V0TXlWYXIoXFxcXFxcXCJjdGl0bGVcXFxcXFxcIixoZVswXSlcXFxcbnZhciBzdWIgPSBnZXRNeVZhcihcXFxcXFxcInN1YlxcXFxcXFwiLHN1YnNbMF0pOyAvL2xvZyhzdWIpXFxcXG5cXFxcbnZhciB1cmwgPSBhcGl2aWV3Lmhvc3QrJy92Mi41L2FydGljbGUvZGlzY292ZXJ5J1xcXFxudmFyIGJvZHkgPSBhcGl2aWV3LkVuY3J5cHQoJ21vZGVsX2lkPTYmcHVibGlzaGVkX2F0PScrc3ViKycmcGFnZT0nK01ZX1BBR0UrJyZzaXplPTIwJnNvcnQ9cHVibGlzaGVkX2F0JylcXFxcbnZhciBkYXRhID0gSlNPTi5wYXJzZShhcGl2aWV3LmdldGh0bWwodXJsLGJvZHkpKS5kYXRhO1xcXFxuZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgIHZhciBpbWcgPSBhcGl2aWV3LkRlY3J5cHQxKCdodHRwczovL2ptdHAuZ3BncmVpaS5jb20nICsgaXRlbS50aHVtYilcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcXFxcbiAgICAgICAgZGVzYzogJycsXFxcXG4gICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICB1cmw6IGBoaWtlcjovL3BhZ2UvZXJqaTE/cGFnZT1meXBhZ2Ujbm9IaXN0b3J5I2AsXFxcXG4gICAgICAgIGNvbF90eXBlOiAncGljXzFfY2FyZCcsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBtb2RlbF9pZDogaXRlbS5tb2RlbF9pZCxcXFxcbiAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxcXFxuICAgICAgICAgICAgaW1nOiBpbWdcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG59KVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIueCueaSreS6jOe6p1xcXCIsXFxcInBhdGhcXFwiOlxcXCJlcmppMVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGFuc2h1XFxcXFxcXCIpXFxcXG52YXIgbW9kZWxfaWQgPSBNWV9QQVJBTVMubW9kZWxfaWQ7IC8vbG9nKHR5cGVvZiBtb2RlbF9pZClcXFxcbnZhciBpZCA9IE1ZX1BBUkFNUy5pZDsgLy9sb2coaWQpXFxcXG52YXIgaW1nID0gTVlfUEFSQU1TLmltZ1xcXFxudmFyIGQgPSBbXTtcXFxcbmlmKE1ZX1BBR0UgPT0gJzEnKXtcXFxcbmQucHVzaCh7XFxcXG4gICAgZGVzYzogJzAnLFxcXFxuICAgIGltZzogaW1nLFxcXFxuICAgIHVybDogaW1nLFxcXFxuICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMSdcXFxcbn0pXFxcXG5pZihnZXRNeVZhcignYScpID09ICcxJyl7XFxcXG52YXIgdGl0bGUxID0gJ1xcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdOW9seeJh+S7i+e7jVxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdCdcXFxcbnZhciB0aXRsZTIgPSAnXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx04oCY4oCY55So5oi36K+E5Lu34oCZ4oCZXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0J1xcXFxufWVsc2V7XFxcXG52YXIgdGl0bGUxID0gJ1xcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdOKAmOKAmOW9seeJh+S7i+e7jeKAmeKAmVxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdCdcXFxcbnZhciB0aXRsZTIgPSAnXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx055So5oi36K+E5Lu3XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0J1xcXFxufVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogdGl0bGUxLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKT0+e1xcXFxuICAgICAgICBjbGVhck15VmFyKCdhJylcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbicsXFxcXG4gICAgLy9leHRyYTogeydiYWNrZ3JvdW5kQ29sb3InOiAnI0UwRjhGRid9XFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogdGl0bGUyLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKT0+e1xcXFxuICAgICAgICBwdXRNeVZhcignYScsJzEnKVxcXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXFxcbiAgICAvL2V4dHJhOiB7J2JhY2tncm91bmRDb2xvcic6ICcjRTBGOEZGJ31cXFxcbn0pXFxcXG59XFxcXG5pZihnZXRNeVZhcignYScpID09ICcxJyl7XFxcXG52YXIgdXJsID0gYXBpdmlldy5ob3N0KycvdjIuNS9jb21tZW50L2xpc3QnXFxcXG52YXIgYm9keSA9IGFwaXZpZXcuRW5jcnlwdCgnYXJ0aWNsZV9pZD0nK2lkKycmcGFnZT0nK01ZX1BBR0UrJyZzaXplPTIwJnNvcnRpbmc9JytnZXRNeVZhcignYTEnLCdsaWtlcycpKVxcXFxudmFyIGRhdGEgPSBKU09OLnBhcnNlKGFwaXZpZXcuZ2V0aHRtbCh1cmwsIGJvZHkpKS5kYXRhOyAvL2xvZyhkYXRhKVxcXFxuaWYoTVlfUEFHRSA9PSAnMScpe1xcXFxuaWYoZ2V0TXlWYXIoJ2ExJywnbGlrZXMnKSA9PSAnbGlrZXMnKXtcXFxcbnZhciB0ZXh0ID0gJ+W9k+WJjeaOkuW6j++8muaMieeDreW6pidcXFxcbn1cXFxcbmlmKGdldE15VmFyKCdhMScpID09ICdjcmVhdGVkX2F0Jyl7XFxcXG52YXIgdGV4dCA9ICflvZPliY3mjpLluo/vvJrmjInml7bpl7QnXFxcXG59XFxcXG4vL2xvZyhnZXRNeVZhcignYTEnLCdsaWtlcycpKVxcXFxudmFyIHBhaXh1ID0gJCgnI25vTG9hZGluZyMnKS5iNjQoKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgaWYoZ2V0TXlWYXIoJ2ExJywnbGlrZXMnKSA9PSAnbGlrZXMnKXtcXFxcbiAgICAgICAgcHV0TXlWYXIoJ2ExJywnY3JlYXRlZF9hdCcpXFxcXG4gICAgICAgIHRvYXN0KCfmjInml7bpl7QnKVxcXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICB9XFxcXG4gICAgaWYoZ2V0TXlWYXIoJ2ExJykgPT0gJ2NyZWF0ZWRfYXQnKXtcXFxcbiAgICAgICAgcHV0TXlWYXIoJ2ExJywnbGlrZXMnKVxcXFxuICAgICAgICB0b2FzdCgn5oyJ54Ot5bqmJylcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgfVxcXFxufSlcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IGFwaXZpZXcuYmlnKGFwaXZpZXcuc3Ryb25nKCfor4TorrrliJfooagnKSkrJ1xcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdCcrYXBpdmlldy5hZGRyZXNzVGFnKHBhaXh1LHRleHQpLFxcXFxuICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXFxcbn0pXFxcXG59XFxcXG5hcGl2aWV3LnBpbmdsdW4oZCxkYXRhKVxcXFxufWVsc2V7XFxcXG5pZihNWV9QQUdFID09ICcxJyl7XFxcXG52YXIgdXJsID0gYXBpdmlldy5ob3N0KycvdjIuNS9hcnRpY2xlL2RldGFpbCdcXFxcbnZhciBib2R5ID0gYXBpdmlldy5FbmNyeXB0KCdpZD0nK2lkKVxcXFxudmFyIGRhdGEgPSBKU09OLnBhcnNlKGFwaXZpZXcuZ2V0aHRtbCh1cmwsYm9keSkpLmRhdGE7IC8vbG9nKGRhdGEpXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAnXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx06aKE6KeIXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0JyxcXFxcbiAgICB1cmw6ICQoZGF0YS52aWRlb19maWxlKycjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChkYXRhKT0+e1xcXFxuICAgICAgICByZXR1cm4gJ2h0dHBzOi8vYWttYWl2aWRlby5jZGNodWFuZ2FvLmNvbScraW5wdXRcXFxcbiAgICB9LGRhdGEpLFxcXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXFxcbiAgICAvL2V4dHJhOiB7J2JhY2tncm91bmRDb2xvcic6ICcjRTBGOEZGJ31cXFxcbn0pXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAnXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx05Y6f54mHXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0JyxcXFxcbiAgICB1cmw6ICQoZGF0YS52aWRlb19maWxlKycjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChkYXRhKT0+e1xcXFxuICAgICAgICBpZigvc2FtcGxlLy50ZXN0KGlucHV0KSl7XFxcXG4gICAgICAgICAgICB2YXIgdXJsID0gaW5wdXQucmVwbGFjZSgvW15hLXpBLVowLTldKHNhbXBsZSkvLCcnKVxcXFxuICAgICAgICAgICAgcmV0dXJuICdodHRwczovL2FrbWFpdmlkZW8uY2RjaHVhbmdhby5jb20nK3VybFxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmKCEv5pegLy50ZXN0KGRhdGEubnVtYmVyKSl7XFxcXG4gICAgICAgICAgICB2YXIgdXJsID0gaW5wdXQucmVwbGFjZSgvXFxcXFxcXFwvKFteXFxcXFxcXFwvXSspXFxcXFxcXFwuLywnLycrZGF0YS5udW1iZXIrJy4nKVxcXFxuICAgICAgICAgICAgcmV0dXJuICdodHRwczovL2FrbWFpdmlkZW8uY2RjaHVhbmdhby5jb20nK3VybFxcXFxuICAgICAgICB9XFxcXG4gICAgfSxkYXRhKSxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxcXG4gICAgLy9leHRyYTogeydiYWNrZ3JvdW5kQ29sb3InOiAnI0UwRjhGRid9XFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogYXBpdmlldy5iaWcoYXBpdmlldy5zdHJvbmcoZGF0YS50aXRsZSkpKyc8YnI+PGJyPicrJ+eVquWPt++8micrYXBpdmlldy5ncmF5KGRhdGEubnVtYmVyKSsnXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0Jysn5ryU5ZGY77yaJythcGl2aWV3LmdyYXkoZGF0YS5hY3RvcikrJzxicj4nK2FwaXZpZXcuZ3JheShkYXRhLnB1Ymxpc2hlZF9hdC5zcGxpdCgnICcpWzBdKSsnXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0JythcGl2aWV3LmdyYXkoZGF0YS5sZW5ndGgpKydcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHQnK2FwaXZpZXcuZ3JheShkYXRhLnNpemUpKydcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHQnK2FwaXZpZXcuZ3JheShkYXRhLnF1YWxpdHkpLFxcXFxuICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcXFxufSlcXFxcbmFwaXZpZXcuYmlhb3FpYW4oZCxkYXRhKVxcXFxuYXBpdmlldy55dWxhbnR1KGQsZGF0YSlcXFxcbi8vbG9nKGRhdGEuY29udGVudClcXFxcbmFwaXZpZXcudHV3ZW4oZCxkYXRhKVxcXFxuXFxcXG59XFxcXG59XFxcXG5cXFxcbnNldFJlc3VsdChkKVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6K+E6K666K+m5oOFXFxcIixcXFwicGF0aFxcXCI6XFxcInBpbmx1blxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBhcGl2aWV3ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGFuc2h1XFxcXFxcXCIpXFxcXG52YXIgZCA9IFtdO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogTVlfUEFSQU1TLnRpdGxlLFxcXFxuICAgIGRlc2M6IE1ZX1BBUkFNUy5kZXNjLFxcXFxuICAgIGltZzogTVlfUEFSQU1TLmltZyxcXFxcbiAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICBjb2xfdHlwZTogJ2F2YXRhcidcXFxcbn0pXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBhcGl2aWV3LmdyYXkoTVlfUEFSQU1TLmRlc2MxKSxcXFxcbiAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogYXBpdmlldy5iaWcoYXBpdmlldy5zdHJvbmcoJ+ebuOWFs+WbnuWkjeWFsScrTVlfUEFSQU1TLml0ZW0ubGVuZ3RoKyfmnaEnKSksXFxcXG4gICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxufSlcXFxcbk1ZX1BBUkFNUy5pdGVtLnJldmVyc2UoKS5mb3JFYWNoKGRhdGEgPT4ge1xcXFxuICAgIGlmIChkYXRhLmF2YXRhciA9PSAnJykge1xcXFxuICAgICAgICB2YXIgYXZhdGFyID0gJ2h0dHBzOi8vaW1nLnZpbnVhLmNuL2ltYWdlcy9Jbm5Eay50aC5wbmcnXFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgdmFyIGF2YXRhciA9IGFwaXZpZXcuRGVjcnlwdDEoJ2h0dHBzOi8vam10cC5ncGdyZWlpLmNvbScgKyBkYXRhLmF2YXRhcilcXFxcbiAgICB9XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IGRhdGEuYXV0aG9yLFxcXFxuICAgICAgICBkZXNjOiBkYXRhLmNyZWF0ZWRfYXQsXFxcXG4gICAgICAgIGltZzogYXZhdGFyLFxcXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInXFxcXG4gICAgfSlcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogYXBpdmlldy5hZGRyZXNzVGFnKCdoaWtlcjovL2VtcHR5JywnQCcrZGF0YS50YWdfYXV0aG9yKydcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHQnKSthcGl2aWV3LmdyYXkoZGF0YS50ZXh0KSxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxuICAgIH0pXFxcXG59KVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6aaW6aG1XFxcIixcXFwicGF0aFxcXCI6XFxcImhvbWVcXFwiLFxcXCJydWxlXFxcIjpcXFwiaWYoTVlfUEFHRSA9PSAnMScpe1xcXFxudmFyIGVuZERhdGUgPSBcXFxcXFxcIjIwMTktMTEtMDhcXFxcXFxcIjtcXFxcbnZhciBkYXRlc0FycmF5ID0gYXBpdmlldy5nZXREYXRlc0FycmF5KGVuZERhdGUpO1xcXFxudmFyIHVybCA9IGFwaXZpZXcuaG9zdCsnL3YyLjUvYXJ0aWNsZS9kYXknXFxcXG52YXIgcHVibGlzaGVkX2F0ID0gZ2V0TXlWYXIoXFxcXFxcXCJwdWJsaXNoZWRfYXRcXFxcXFxcIikgPT0gJycgPyBkYXRlc0FycmF5WzBdIDogZ2V0TXlWYXIoXFxcXFxcXCJwdWJsaXNoZWRfYXRcXFxcXFxcIik7IC8vbG9nKHB1Ymxpc2hlZF9hdClcXFxcbnZhciBib2R5ID0gYXBpdmlldy5FbmNyeXB0KCdwdWJsaXNoZWRfYXQ9JytwdWJsaXNoZWRfYXQpXFxcXG52YXIgZGF0YSA9IEpTT04ucGFyc2UoYXBpdmlldy5nZXRodG1sKHVybCxib2R5KSkuZGF0YTtcXFxcbmRhdGEuaW5mby5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgIHZhciBpbWcgPSBhcGl2aWV3LkRlY3J5cHQxKCdodHRwczovL2ptdHAuZ3BncmVpaS5jb20nICsgaXRlbS50aHVtYilcXFxcbiAgICBpZihpdGVtLm1vZGVsX2lkID09ICc2Jyl7XFxcXG4gICAgdmFyIHVybCA9IGBoaWtlcjovL3BhZ2UvZXJqaTE/cGFnZT1meXBhZ2Ujbm9IaXN0b3J5I2BcXFxcbiAgICB9ZWxzZXtcXFxcbiAgICB2YXIgdXJsID0gYGhpa2VyOi8vcGFnZS9lcmppP3BhZ2U9ZnlwYWdlI25vSGlzdG9yeSMjZ2FtZVRoZW1lI2BcXFxcbiAgICB9XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IGAke2FwaXZpZXcuc3Ryb25nKGl0ZW0udGl0bGUpfTxicj4ke2FwaXZpZXcuZ3JheShpdGVtLmF1dGhvcil9PGJyPiR7YXBpdmlldy5ncmF5KGl0ZW0uZGVzY3JpcHRpb24ucmVwbGFjZSgvXFxcXFxcXFxuL2csJzxicj4nKSl9YCxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxcXG4gICAgfSlcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICBpbWc6IGltZyxcXFxcbiAgICAgICAgdXJsOiB1cmwsXFxcXG4gICAgICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCcsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBtb2RlbF9pZDogaXRlbS5tb2RlbF9pZCxcXFxcbiAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxcXFxuICAgICAgICAgICAgaW1nOiBpbWdcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcXFxuICAgIH0pXFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+KAnOKAnOWIh+aNouKAneKAnScsXFxcXG4gICAgdXJsOiAkKCkubGF6eVJ1bGUoKHB1Ymxpc2hlZF9hdCxkYXRlc0FycmF5KSA9PiB7XFxcXG4gICAgICAgIHNob3dTZWxlY3RPcHRpb25zKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn5b2T5YmN77yaJytwdWJsaXNoZWRfYXQsXFxcXG4gICAgICAgICAgICBvcHRpb25zOiBkYXRlc0FycmF5LFxcXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwicHVibGlzaGVkX2F0XFxcXFxcXCIsaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9cXFxcXFxcIiArIGlucHV0XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgfSxwdWJsaXNoZWRfYXQsZGF0ZXNBcnJheSksXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiXFxcXG59KVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuS6jOe6p1xcXCIsXFxcInBhdGhcXFwiOlxcXCJlcmppXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGFwaXZpZXcgPSAkLnJlcXVpcmUoXFxcXFxcXCJoYW5zaHVcXFxcXFxcIilcXFxcbnZhciBtb2RlbF9pZCA9IE1ZX1BBUkFNUy5tb2RlbF9pZDsgLy9sb2codHlwZW9mIG1vZGVsX2lkKVxcXFxudmFyIGlkID0gTVlfUEFSQU1TLmlkOyAvL2xvZyhpZClcXFxcbnZhciBpbWcgPSBNWV9QQVJBTVMuaW1nXFxcXG52YXIgZCA9IFtdO1xcXFxuXFxcXG5pZihNWV9QQUdFID09ICcxJyl7XFxcXG52YXIgdXJsID0gYXBpdmlldy5ob3N0KycvdjIuNS9hcnRpY2xlL2RldGFpbCdcXFxcbnZhciBib2R5ID0gYXBpdmlldy5FbmNyeXB0KCdpZD0nK2lkKVxcXFxudmFyIGRhdGEgPSBKU09OLnBhcnNlKGFwaXZpZXcuZ2V0aHRtbCh1cmwsYm9keSkpLmRhdGE7IC8vbG9nKGRhdGEpXFxcXG5zd2l0Y2ggKG1vZGVsX2lkKSB7XFxcXG4gICAgY2FzZSAxOlxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxcXG4gICAgICAgICAgICB1cmw6IGltZyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCdcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBgJHthcGl2aWV3LnN0cm9uZyhhcGl2aWV3LmNlbnRlcihkYXRhLnRpdGxlKSl9JHthcGl2aWV3LmdyYXkoZGF0YS5kZXNjcmlwdGlvbil9JHthcGl2aWV3LmdyYXkoYXBpdmlldy5jZW50ZXIoZGF0YS5hdXRob3IpKX1gLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgMjpcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBgPGgxPiR7YXBpdmlldy5zdHJvbmcoZGF0YS50aXRsZSl9PC9oMT4ke2FwaXZpZXcuZ3JheShkYXRhLmF1dGhvcil9YCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBhcGl2aWV3LnR1d2VuKGQsZGF0YSlcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAzOlxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxcXG4gICAgICAgICAgICB1cmw6IGltZyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCdcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc6KeG6aKR4oCd4oCdJyxcXFxcbiAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vYWttYWl2aWRlby5jZGNodWFuZ2FvLmNvbScgKyBkYXRhLnZpZGVvX2ZpbGUsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogYDxoMT4ke2FwaXZpZXcuc3Ryb25nKGRhdGEudGl0bGUpfTwvaDE+JHthcGl2aWV3LmdyYXkoZGF0YS5hdXRob3IpfWAsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgYXBpdmlldy50dXdlbihkLGRhdGEpXFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgNDpcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBgPGgxPiR7YXBpdmlldy5zdHJvbmcoZGF0YS50aXRsZSl9PC9oMT4ke2FwaXZpZXcuZ3JheShkYXRhLmF1dGhvcil9YCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBhcGl2aWV3LnR1d2VuKGQsZGF0YSlcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSA1OlxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxcXG4gICAgICAgICAgICB1cmw6IGltZyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCdcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc55S15Y+w4oCd4oCdJyxcXFxcbiAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vYWttYWl2aWRlby5jZGNodWFuZ2FvLmNvbScgKyBkYXRhLnZpZGVvLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGA8aDE+JHthcGl2aWV3LnN0cm9uZyhkYXRhLnRpdGxlKX08L2gxPiR7YXBpdmlldy5ncmF5KGRhdGEuYXV0aG9yKX1gLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGFwaXZpZXcudHV3ZW4oZCxkYXRhKVxcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlIDY6XFxcXG5cXFxcbiAgICAgICAgYnJlYWs7XFxcXG59XFxcXG5pZihnZXRNeVZhcignYTEnLCdjcmVhdGVkX2F0JykgPT0gJ2NyZWF0ZWRfYXQnKXtcXFxcbnZhciB0ZXh0ID0gJ+W9k+WJjeaOkuW6j++8muaMieaXtumXtCdcXFxcbn1cXFxcbmlmKGdldE15VmFyKCdhMScpID09ICdsaWtlcycpe1xcXFxudmFyIHRleHQgPSAn5b2T5YmN5o6S5bqP77ya5oyJ54Ot5bqmJ1xcXFxufVxcXFxuLy9sb2coZ2V0TXlWYXIoJ2ExJywnY3JlYXRlZF9hdCcpKVxcXFxudmFyIHBhaXh1ID0gJCgnI25vTG9hZGluZyMnKS5iNjQoKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgaWYoZ2V0TXlWYXIoJ2ExJywnY3JlYXRlZF9hdCcpID09ICdjcmVhdGVkX2F0Jyl7XFxcXG4gICAgICAgIHB1dE15VmFyKCdhMScsJ2xpa2VzJylcXFxcbiAgICAgICAgdG9hc3QoJ+aMieeDreW6picpXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgIH1cXFxcbiAgICBpZihnZXRNeVZhcignYTEnKSA9PSAnbGlrZXMnKXtcXFxcbiAgICAgICAgcHV0TXlWYXIoJ2ExJywnY3JlYXRlZF9hdCcpXFxcXG4gICAgICAgIHRvYXN0KCfmjInml7bpl7QnKVxcXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICB9XFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogYXBpdmlldy5iaWcoYXBpdmlldy5zdHJvbmcoJ+ebuOWFs+WbnuWkjeWFsScrZGF0YS5yZXBseV9jb3VudHMrJ+adoScpKSsnXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0JythcGl2aWV3LmFkZHJlc3NUYWcocGFpeHUsdGV4dCksXFxcXG4gICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxufSlcXFxcbn1cXFxcbnZhciB1cmwgPSBhcGl2aWV3Lmhvc3QrJy92Mi41L2NvbW1lbnQvbGlzdCdcXFxcbnZhciBib2R5ID0gYXBpdmlldy5FbmNyeXB0KCdhcnRpY2xlX2lkPScraWQrJyZwYWdlPScrTVlfUEFHRSsnJnNpemU9MjAmc29ydGluZz0nK2dldE15VmFyKCdhMScsJ2NyZWF0ZWRfYXQnKSlcXFxcbnZhciBkYXRhID0gSlNPTi5wYXJzZShhcGl2aWV3LmdldGh0bWwodXJsLCBib2R5KSkuZGF0YTsgLy9sb2coZGF0YSlcXFxcbmFwaXZpZXcucGluZ2x1bihkLGRhdGEpXFxcXG5cXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWPkeeOsFxcXCIsXFxcInBhdGhcXFwiOlxcXCJjbGFcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGVuZERhdGUgPSBcXFxcXFxcIjIwMjEtMDktMDFcXFxcXFxcIjtcXFxcbnZhciBoZTEgPSBbJ+WbvuaWhycsJ+mYheivuycsJ+W9seinhicsJ+eUteWPsCcsJ+WGmeecnycsJ+a8q+eUuyddOyAvL2xvZyhoZTEpIFxcXFxudmFyIHN1YnMxID0gWycxJywnMicsJzMnLCc1JywnMCcsJzAnXTsgLy9sb2coc3ViczEpIFxcXFxudmFyIHN1YnMyID0gYXBpdmlldy5nZXRZZWFyTW9udGhBcnJheShlbmREYXRlKTsgLy9sb2coc3ViczIpXFxcXG5pZihNWV9QQUdFID09ICcxJyl7XFxcXG5oZTEuZm9yRWFjaCgoeCxpKT0+e1xcXFxuICAgIHZhciBjdGl0bGUxID0geFxcXFxuICAgIHZhciBzdWIxID0gc3ViczFbaV1cXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ2N0aXRsZTEnLCBoZTFbMF0pID09IGN0aXRsZTEgPyAn4oCc4oCc4oCd4oCdJytjdGl0bGUxLmZvbnRjb2xvcignIycrZ2V0UmFuZ2VDb2xvcnMoKSk6Y3RpdGxlMSxcXFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGN0aXRsZTEsc3ViMSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwiY3RpdGxlMVxcXFxcXFwiLCBjdGl0bGUxKTtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcInN1YjFcXFxcXFxcIixzdWIxKTsgICAgICAgICAgICAgICAgXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LCBjdGl0bGUxLHN1YjEpLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCJcXFxcbiAgICB9KVxcXFxufSlcXFxcbn1cXFxcbnZhciBoZTEgPSBnZXRNeVZhcihcXFxcXFxcImN0aXRsZTFcXFxcXFxcIixoZTFbMF0pOyAvL2xvZyhoZTEpXFxcXG52YXIgc3ViMSA9IGdldE15VmFyKFxcXFxcXFwic3ViMVxcXFxcXFwiLHN1YnMxWzBdKTsgLy9sb2coc3ViMSlcXFxcbnZhciBzdWIyID0gc3ViczJbTVlfUEFHRS0xXTsgLy9sb2coc3ViMilcXFxcblxcXFxuaWYoaGUxID09ICflhpnnnJ8nKXtcXFxcbnZhciB1cmwgPSBhcGl2aWV3Lmhvc3QrJy92Mi41L3Nlcmllcy9hbGJ1bS9saXN0J1xcXFxudmFyIGJvZHkgPSBhcGl2aWV3LkVuY3J5cHQoJ3R5cGU9JytzdWIxKycmcGFnZT0nK01ZX1BBR0UrJyZzaXplPTMxJnNvcnQ9cHVibGlzaGVkX2F0JylcXFxcbn1lbHNlIGlmKGhlMSA9PSAn5ryr55S7Jyl7XFxcXG52YXIgdXJsID0gYXBpdmlldy5ob3N0KycvdjIuNS9zZXJpZXMvbWFuZ2EvbGlzdCdcXFxcbnZhciBib2R5ID0gYXBpdmlldy5FbmNyeXB0KCd0eXBlPScrc3ViMSsnJnBhZ2U9JytNWV9QQUdFKycmc2l6ZT0zMSZzb3J0PXB1Ymxpc2hlZF9hdCcpXFxcXG59ZWxzZXtcXFxcbnZhciB1cmwgPSBhcGl2aWV3Lmhvc3QrJy92Mi41L2FydGljbGUvZGlzY292ZXJ5J1xcXFxudmFyIGJvZHkgPSBhcGl2aWV3LkVuY3J5cHQoJ21vZGVsX2lkPScrc3ViMSsnJnB1Ymxpc2hlZF9hdD0nK3N1YjIrJyZwYWdlPTEmc2l6ZT0zMScpXFxcXG59XFxcXG52YXIgZGF0YSA9IEpTT04ucGFyc2UoYXBpdmlldy5nZXRodG1sKHVybCxib2R5KSkuZGF0YTtcXFxcblxcXFxuc3dpdGNoIChzdWIxKSB7XFxcXG4gICAgY2FzZSAnMCc6XFxcXG4gICAgICAgIGFwaXZpZXcueGllemhlbm1hbmh1YXlpamkoZCxkYXRhKVxcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICcxJzpcXFxcbiAgICAgICAgYXBpdmlldy50dXdlbnlpamkoZCwgZGF0YSlcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAnMic6XFxcXG4gICAgICAgIGFwaXZpZXcueXVlZHV5aWppKGQsIGRhdGEpXFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJzMnOlxcXFxuICAgICAgICBhcGl2aWV3LnlpbmdzaGl5aWppKGQsIGRhdGEpXFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJzUnOlxcXFxuICAgICAgICBhcGl2aWV3LmRpYW50YWl5aWppKGQsIGRhdGEpXFxcXG4gICAgICAgIGJyZWFrO1xcXFxufVxcXCJ9XVwiLFwicHJveHlcIjpcIlwifSIsInBpY1VybCI6Imh0dHBzOi8vam10cC5ncGdyZWlpLmNvbS9zdG9yYWdlL3RodW1iLzMxMzcxLzY4MGI3YjUxOWZmNDcuanBnQGpzPSQuaGlrZXIuTVlfVElUTEUgPSBcIuS4gOS4qkFQUFwiOyhcbigpID0+IHtcbiAgICBjb25zdCBDcnlwdG9VdGlsID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9hc3NldHMvY3J5cHRvLWphdmEuanNcIik7XG4gICAgbGV0IGtleSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXCJzYUlaWGM0eU12cTBJejU2XCIpO1xuICAgIGxldCBpdiA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoXCJrYkpZdEJKVUVDVDBveWpvXCIpO1xuICAgIGxldCB0ZXh0RGF0YSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUlucHV0U3RyZWFtKGlucHV0KTtcbiAgICBsZXQgZW5jcnlwdGVkID0gQ3J5cHRvVXRpbC5BRVMuZGVjcnlwdCh0ZXh0RGF0YSwga2V5LCB7bW9kZTogXCJBRVMvQ0JDL1BLQ1M3UGFkZGluZ1wiLCBpdjogaXZ9KTtcbiAgICByZXR1cm4gZW5jcnlwdGVkLnRvSW5wdXRTdHJlYW0oKTtcbn1cbikoKSIsInRpdGxlIjoiIn0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement