xiaomianao666

小程序:小枭影视🌞

Sep 17th, 2023
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@小枭影视🌞@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6ImpzOlxudmFyIGNocCA9IFtdO1xudHJ5IHtcbiAgICB2YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcbiAgICB2YXIgY29udHMgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICdib2R5JiYuc29ydC1pdGVtJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoY29udHNbaV0sICdib2R5JiZhJyk7XG4gICAgICAgIGNocC5wdXNoKGxpc3QubGVuZ3RoKTtcbiAgICB9ICAgICBcbn0gY2F0Y2ggKGUpIHt9XG5zZXRSZXN1bHQoJ+abtOaWsOiHszonICsgKE1hdGgubWF4LmFwcGx5KG51bGwsIGNocCkpKTsiLCJ0aXRsZSI6IuWwj+aereW9seinhvCfjJ4iLCJhdXRob3IiOiJSIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSMjaHR0cHM6Ly93d3cueHh5czcuY29tL2luZGV4LnBocC92b2Qvc2hvdy9pZC8xL3BhZ2UvZnlwYWdlLmh0bWwiLCJ2ZXJzaW9uIjoyMDIzMDkxOCwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOlxudmFyIGQgPSBbXTtcbmFkZExpc3RlbmVyKFwib25DbG9zZVwiLCAkLnRvU3RyaW5nKCgpID0+IHtcbiAgICBsZXQga2V5cyA9IGxpc3RNeVZhcktleXMoKTtcbiAgICBmb3IgKGxldCBpdCBvZiBrZXlzKSB7XG4gICAgICAgIGNsZWFyTXlWYXIoaXQpO1xuICAgIH1cbn0pKTtcbnZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge8KgwqDCoMKgwqDCoMKgXG4gICAgcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO8KgwqDCoMKgwqBcbn1cbmNvbnN0IOS4i+S4gOmhtSA9IFwicGQoaHRtbCwgJ2E6bWF0Y2hlcyjkuIvkuIDpobUpJiZocmVmJylcIjtcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS95aScpKS5ydWxlKVxuXG52YXIg5a6a5L2N5L+h5oGvID0gW3tcbiAgICDlpKfnsbvlrprkvY06ICcuc2Nyb2xsLWNvbnRlbnQnLFxuICAgIOWwj+exuzogJ2JvZHkmJmE6bm90KDptYXRjaGVzKOmmlumhtXzotYTorq98QVBQfOS4k+mimHznpL7nvqR854Ot5pCcfOeVmeiogHznpo/liKkpKScsXG4gICAg6ZO+5o6l5aSE55CGOiAodSkgPT4ge1xuICAgICAgICBsZXQgdXJsID0gdS5yZXBsYWNlKC90eXBlKFxcL1xcZCspXFwuaHRtbC8sICdzaG93JDEtLS0tLS0tLS0tLS5odG1sJyk7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICB9XG59LCB7XG4gICAg5LiA57qn5a6a5L2NOiAnYm9keSYmLnNjcm9sbC1jb250ZW50LDE6bicsXG5cbn1dXG5cblxuTVlfVVJMID0gTVlfVVJMLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsICcnKVxubGV0IHRydWVfdXJsID0gZ2V0VHJ1ZWxpbmsoTVlfUlVMRS51cmwsIE1ZX1VSTCwgcGFnZSk7XG5sb2codHJ1ZV91cmwpXG5cbnZhciBodG1sID0gcmVxdWVzdCh0cnVlX3VybClcbmNvbnN0IGRjID0gZHluYW1pY0NsYXNzKHtcbiAgICDliIbnsbvpopzoibI6IGdldFJhbmdlQ29sb3JzKClcbn0pO1xuZGMu5byA5ZCv5oqY5Y+gKGZhbHNlKVxuZGMu5byA5ZCv5pCc57SiKClcbmRjLuWIm+W7uuWKqOaAgeWIhuexuyjlrprkvY3kv6Hmga8pXG5cbnZhciBwYXJzZVJ1bGUgPSB7XG4gICAgbGlzdDogJ2JvZHkmJi5tb2R1bGUtaXRlbScsIC8v57uf5LiAaXRlbVxuICAgIHRpdGxlOiAnYSYmdGl0bGUnLFxuICAgIGRlc2M6ICcubW9kdWxlLWl0ZW0tdGV4dCYmVGV4dCcsXG4gICAgaW1nOiAnaW1nfHxhJiZkYXRhLXNyY3x8ZGF0YS1vcmlnaW5hbCcsXG4gICAgdXJsOiAnYSYmaHJlZicsXG4gICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICBpbXQ6IHRydWUsXG4gICAgLy9iYWNraW1nOiB0cnVlLFxufVxuXG5DcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGUpO1xuYXV0b1BhZ2UoKTtcblxuc2V0UmVzdWx0KGQpIiwic2VhcmNoX3VybCI6Ii9pbmRleC5waHAvdm9kL3NlYXJjaC9wYWdlL2Z5cGFnZS93ZC8qKi5odG1sIiwiZ3JvdXAiOiIz77iP4oOjUmkiLCJzZWFyY2hGaW5kIjoianM6XG52YXIgZCA9IFtdXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKVxuXG52YXIg5qGG5p625YiX6KGoID0gJ2JvZHkmJi5tb2R1bGUtc2VhcmNoLWl0ZW0nXG52YXIg5qGG5p625qCH6aKYID0gJ2gzJiZUZXh0J1xudmFyIOahhuaetuaPj+i/sDEgPSAnLnZpZGVvLXNlcmlhbCYmVGV4dCdcbnZhciDmoYbmnrbmj4/ov7AyID0gJy52aWRlby1pbmZvLWF1eCYmVGV4dCdcbnZhciDmoYbmnrbnroDku4sxID0gJy52aWRlby1pbmZvLWl0ZW1zLDAmJlRleHQnXG52YXIg5qGG5p62566A5LuLMiA9ICcudmlkZW8taW5mby1pdGVtcywxJiZUZXh0J1xudmFyIOahhuaetuWbvueJhyA9ICdpbWd8fGEmJmRhdGEtc3JjfHxkYXRhLW9yaWdpbmFsJ1xudmFyIOahhuaetumTvuaOpSA9ICcudmlkZW8tc2VyaWFsJiZhJiZocmVmJ1xuXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9TZWFyY2hGcmFtZScsIHt9KSkucnVsZSk7XG5cbnNldFJlc3VsdChkKSIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoianM6XG52YXIgZCA9IFtdXG5NWV9VUkw9TVlfVVJMLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsJycpO1xudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xuXG4vL3ZhciDmkJzntKLmoIfnrb4gPSAnaDEmJlRleHQnO1xuXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2VyJykpLnJ1bGUpO1xuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGF6eScsIHt9KSkucnVsZSk7XG52YXIgcGxheWxpc3QgPSBbe1xuICAgIC8q6Ieq5a6a5LmJOntcbiAgICAgICAg5Zu+5qCHOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9xLzMucG5nJyxcbiAgICAgICAg5q2j5bqP6aKc6ImyOiAnIzMyQ0QzMicsXG4gICAgICAgIOmAhuW6j+minOiJsjogJyNGQTgwNzInLFxuICAgICAgICDnur/ot6/pgInkuK06ICcjODdDRUVCJywgICAgICAgXG4gICAgfSwqL1xuICAgIOexu+WeizogJ+WcqOe6v+ingueciycsXG4gICAg57q/6LevOiAnYm9keSYmLm1vZHVsZS10YWItaXRlbTpub3QoOm1hdGNoZXMo5Zac5qyiKSknLFxuICAgIOmAiembhjogJ2JvZHkmJi5zb3J0LWl0ZW06bm90KDptYXRjaGVzKM6xKSknLFxuICAgIOe6v+i3r+WQjeensDogJ3NwYW4mJlRleHRAQC5yZXBsYWNlKC/OsS8sXCLOslwiKScsXG4gICAg6YCJ6ZuG5YiX6KGoOiAnYm9keSYmYTpub3QoOm1hdGNoZXMozrEpKScsXG4gICAg5o6S6ZmkOiAnJyxcbiAgICAvL+mAiembhuWQjeensDogJ1RleHQnLFxuICAgIC8v6YCJ6ZuG6ZO+5o6lOiAnYSYmaHJlZicsXG4gICAgLy/lgJLluo86dHJ1ZSxcbiAgICDop6PmnpA6IGxhenksXG4gICAg5o6o6YCBOiB0cnVlLFxufSwge1xuICAgIOexu+WeizogJ+ejgeWKm+S4i+i9vScsXG4gICAgLy/nur/ot686ICcnLFxuICAgIOmAiembhjogJ2JvZHkmJi5zb3J0LWl0ZW1tJyxcbiAgICAvL+e6v+i3r+WQjeensDogJ1RleHRAQC5yZXBsYWNlKFwizrJcIixcIlwiKScsXG4gICAgLy/pgInpm4bliJfooag6ICd1bCYmbGknLFxuICAgIOmAiembhuWQjeensDogJ1RleHQnLFxuICAgIOmAiembhumTvuaOpTogJ2EmJmhyZWYnLFxuICAgIOagt+W8jzogJ2F2YXRhcicsXG4gICAg5Zu+5qCHOiAnaHR0cHM6Ly9pbWcudmludWEuY24vaW1hZ2VzL09vejRSLmpwZWcnXG59XVxuXG52YXIgb2JqID0ge1xuICAgIG1haW46IHBkZmEoaHRtbCwgJy5kYXRhOm5vdCg6bWF0Y2hlcyjliafmg4UpKScpLFxuICAgIHNvcnQ6IFsnJywn57G75Z6LJywgJ+WvvOa8lCcsICfkuLvmvJQnLCfnsbvlnosnLCAn5a+85ryUJywgJ+S4u+a8lCddLFxuICAgIGltZzogTVlfUEFSQU1TLmltZyxcbi8vcGQoaHRtbCwgJyNjb3Zlcl9zaG93Ym94JiZkYXRhLW9yaWdpbmFsJyksLy/lsIHpnaLlm77niYdcbn1cblxuRXJqaS5zZXRDb250ZW50KG9iaik7XG5FcmppLnNldERlc2MocGRmaChodG1sLCAnLnZvZF9jb250ZW50JiZUZXh0JykucmVwbGFjZSgv5pS26LW3LywnJykpOy8v5Ymn5oOF566A5LuLXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS90b29sJywge30pKS5ydWxlKTsvL+WklumDqOW/q+aNt+aQnOe0olxuRXJqaS5nZXRQbGF5ZXJzKHBsYXlsaXN0KTtcbkVyamku5aOw5piOKCk7XG5cbnNldFJlc3VsdChkKSIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIqIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoiIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4gOe6p+WIhuexu+WIl+ihqFwiLFwicGF0aFwiOlwieWlcIixcInJ1bGVcIjpcImpzOlxcbi8qXFxu5LiA57qn5bCB6KOFIFxcbuWKqOaAgeWIhuexuyDliJfooajliJvlu7og6Ieq5Yqo5LiL5LiA6aG1XFxudmVyIDIwMjMwNzEwIDEuMFxcbiovXFxuZnVuY3Rpb24gZHluYW1pY0NsYXNzKG9wdGlvbnMpIHtcXG4gIGNvbnN0IG9iaiA9IHtcXG4gICAgLy/pu5jorqTlgLxcXG4gICAgbGF5b3V0OiBcXFwidW5kZWZpbmVkXFxcIixcXG4gICAgaHRtbDogXFxcImVtcHR5XFxcIixcXG4gICAgcGFnZTogMCxcXG4gICAg5YiG57G76aKc6ImyOiBcXFwiI0ZBNzI5OFxcXCIsXFxuICAgIOaKmOWPoDogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi4oioXFxcIi5mb250Y29sb3IoXFxcIiMxYWFkMTlcXFwiKSArIFxcXCI8L2I+XFxcIixcXG4gICAg5bGV5byAOiBcXFwi4oCc4oCc4oCd4oCdPGI+XFxcIiArIFxcXCLiiKdcXFwiLmZvbnRjb2xvcihcXFwiI0ZGMDAwMFxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICBvcGVuOiB0cnVlLFxcbiAgICBzdGF0ZTogTVlfUlVMRS51cmwsXFxuICAgIHNlYXJjaDogZmFsc2UsXFxuICAgIGNsZWFyczogW10sXFxuICAgIGNsZWFyYWxsOiBbXFxcInlpX2ZpcnN0cGFnZVxcXCJdLFxcbiAgICBkZWJ1ZzogZmFsc2UsXFxuXFxuICAgIOmihOiuvihwYXJhbSkge1xcbiAgICAgIGlmKHBhcmFtPT11bmRlZmluZWQpe1xcbiAgICAgICAgcGFyYW09W107XFxuICAgICAgfVxcbiAgICAgIE9iamVjdC5rZXlzKHBhcmFtKS5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xcbiAgICAgICAgLy8g5a+55q+P5Liq5bGe5oCn5ZCN5omn6KGM5pON5L2cXFxuICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtW3Byb3BlcnR5XTsgLy8g6I635Y+W5bGe5oCn5YC8XFxuICAgICAgICAvLyDlnKjov5nph4zmiafooYzmgqjnmoTmk43kvZxcXG4gICAgICAgIHRoaXNbcHJvcGVydHldID0gdmFsdWU7XFxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xcbiAgICAgICAgICBjb25zb2xlLmxvZyhwcm9wZXJ0eSArIFxcXCI6XFxcIiArIHZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICB9KTtcXG4gICAgfSxcXG4gICAgZXZhbEpTUnVsZShpdGVtLCBqc1J1bGUpIHtcXG4gICAgICBsZXQgcnVsZSA9IGpzUnVsZS5yZXBsYWNlKFxcXCJAanM6XFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgIHJ1bGUgPSBydWxlLnRyaW0oKTtcXG4gICAgICAvL2xvZygkLnN0cmluZ2lmeShydWxlKSlcXG4gICAgICBsZXQgaW5wdXQgPSBpdGVtO1xcbiAgICAgIGlmIChydWxlLnN0YXJ0c1dpdGgoXFxcIihcXFwiKSkge1xcbiAgICAgICAgZXZhbChcXFwicmVzdWx0ID0gXFxcIiArIHJ1bGUpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICAvKipcXG4gICAgICAgICAqIOi/mOWOn+aIkCAkLnRvU3RyaW5nKC4uLikg55qE5pyA57uI57uT5p6c77yM6L6+5Yiw5pyA57uI5aSE55CG5pa55byP6Lef5LiK6Z2i55qEIGlmIOS4gOiHtOeahOebrueahFxcbiAgICAgICAgICovXFxuICAgICAgICBldmFsKFxcXCJyZXN1bHQgPSBcXFwiICsgXFxcIigoKSA9PiB7XFxcIiArIHJ1bGUgKyBcXFwifSkoKVxcXCIpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gcmVzdWx0IHx8IFxcXCJcXFwiO1xcbiAgICB9LFxcbiAgICBnZXRUaXRsZShzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgbGV0IHRpdGxlID0gXFxcIlxcXCI7XFxuICAgICAgbGV0IHRpdGxlUnVsZSA9IGNhdGVnb3J5IHx8IFxcXCJhJiZUZXh0XFxcIjtcXG4gICAgICBpZiAodGl0bGVSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgdGl0bGUgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB0aXRsZVJ1bGUpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChzcmMsIHRpdGxlUnVsZSk7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiB0aXRsZSB8fCBcXFwiXFxcIjtcXG4gICAgfSxcXG4gICAgZ2V0VXJsKHNyYywgY2F0ZWdvcnkpIHtcXG4gICAgICBsZXQgdXJsID0gXFxcIlxcXCI7XFxuICAgICAgbGV0IHVybFJ1bGUgPSBjYXRlZ29yeS7pk77mjqUgfHwgXFxcImEmJmhyZWZcXFwiO1xcbiAgICAgIGlmICh1cmxSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgdXJsID0gdGhpcy5ldmFsSlNSdWxlKHNyYywgdXJsUnVsZSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHVybCA9IHBkKHNyYywgdXJsUnVsZSk7XFxuICAgICAgfVxcbiAgICAgIGlmICh0eXBlb2YgY2F0ZWdvcnku6ZO+5o6l5aSE55CGID09IFxcXCJmdW5jdGlvblxcXCIpIHtcXG4gICAgICAgIHVybCA9IGNhdGVnb3J5LumTvuaOpeWkhOeQhih1cmwpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gdXJsIHx8IFxcXCJcXFwiO1xcbiAgICB9LFxcbiAgICBpc051bGwocGFyYW0pIHtcXG4gICAgICBpZiAocGFyYW0gPT0gbnVsbCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfSxcXG4gICAgaXNCb29sZWFuKHZhcmlhYmxlKSB7XFxuICAgICAgaWYgKHR5cGVvZiB2YXJpYWJsZSAhPT0gXFxcImJvb2xlYW5cXFwiKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuW8gOWQr+aKmOWPoOivt+S8oOWFpeW4g+WwlOWAvFxcXCIpO1xcbiAgICAgIH1cXG4gICAgfSxcXG4gICAg5riF6ZmkKGxpc3QpIHtcXG4gICAgICBpZiAodGhpcy5pc051bGwobGlzdCkpIHtcXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgIH1cXG4gICAgICBpZiAobGlzdC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5riF6Zmk5oql6ZSZOuivt+S8oOWIl+ihqFxcXCIpO1xcbiAgICAgIH1cXG4gICAgICB0aGlzLmNsZWFycyA9IGxpc3Q7XFxuICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIOWFqOa4hShsaXN0KSB7XFxuICAgICAgaWYgKHRoaXMuaXNOdWxsKGxpc3QpKSB7XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICB9XFxuICAgICAgdmFyIGMgPSB0aGlzLmNsZWFyYWxsO1xcbiAgICAgIGxpc3QgPSBjLmNvbmNhdChsaXN0KTtcXG4gICAgICB0aGlzLmNsZWFyYWxsID0gbGlzdDtcXG4gICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAg5rqQ56CBKGlucHV0KSB7XFxuICAgICAgdGhpcy5odG1sID0gaW5wdXQ7XFxuICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIOeVjOmdoihpbnB1dCkge1xcbiAgICAgIHRoaXMubGF5b3V0ID0gaW5wdXQ7XFxuICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIOmhteeggShpbnB1dCkge1xcbiAgICAgIHRoaXMucGFnZSA9IGlucHV0O1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICDnirbmgIEoaW5wdXQpIHtcXG4gICAgICB0aGlzLnN0YXRlID0gaW5wdXQ7XFxuICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIOW8gOWQr+aQnOe0oigpIHtcXG4gICAgICB0aGlzLnNlYXJjaCA9IHRydWU7XFxuICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIOW8gOWQr+aKmOWPoChpbnB1dCkge1xcbiAgICAgIGlmIChpbnB1dCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgIGlucHV0ID0gdHJ1ZTtcXG4gICAgICB9XFxuICAgICAgdGhpcy5pc0Jvb2xlYW4oaW5wdXQpO1xcbiAgICAgIHRoaXMub3BlbiA9IGlucHV0O1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBzZXRUaXRsZShrLCBpLCB0KSB7XFxuICAgICAgcmV0dXJuIGsgPT0gaSA/IFxcXCLigJzigJzigJ3igJ1cXFwiICsgdC5mb250Y29sb3IodGhpcy7liIbnsbvpopzoibIpIDogdDtcXG4gICAgfSxcXG4gICAgYWN0aW9uKG9iaikge1xcbiAgICAgIHJldHVybiBbXFxuICAgICAgICB7XFxuICAgICAgICAgIHRpdGxlOiBcXFwi5riF6Zmk54q25oCBXFxcIixcXG4gICAgICAgICAganM6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgIGxvZyhvYmopO1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIob2JqLnN0YXRlKTtcXG4gICAgICAgICAgICBjbGVhck15VmFyKFxcXCJoZWFkLmNhdGVcXFwiKTtcXG4gICAgICAgICAgICBvYmouYWxsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgb2JqLmNsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgfSwgb2JqKSxcXG4gICAgICAgIH0sXFxuICAgICAgXTtcXG4gICAgfSxcXG4gICAgY2hlY2tQYXJhbSgpIHtcXG4gICAgICB2YXIgb2JqID0ge307XFxuICAgICAgaWYgKHRoaXMucGFnZSA9PSAwICYmIHR5cGVvZiBwYWdlID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpemhteeggVxcXCIpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICBpZiAodHlwZW9mIHBhZ2UgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgb2JqW1xcXCLpobXnoIFcXFwiXSA9IHRoaXMucGFnZTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIG9ialtcXFwi6aG156CBXFxcIl0gPSBwYWdlO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBpZiAodGhpcy5odG1sID09IFxcXCJlbXB0eVxcXCIgJiYgdHlwZW9mIGh0bWwgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl5rqQ56CBXFxcIik7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIGlmICh0eXBlb2YgaHRtbCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICBvYmpbXFxcIua6kOeggVxcXCJdID0gdGhpcy5odG1sO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgb2JqW1xcXCLmupDnoIFcXFwiXSA9IGh0bWw7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlmICh0aGlzLmxheW91dCA9PSBcXFwidW5kZWZpbmVkXFxcIiAmJiB0eXBlb2YgZCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXnlYzpnaJcXFwiKTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgaWYgKHR5cGVvZiBkID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgIG9ialtcXFwi55WM6Z2iXFxcIl0gPSB0aGlzLmxheW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIG9ialtcXFwi55WM6Z2iXFxcIl0gPSBkO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gb2JqO1xcbiAgICB9LFxcbiAgICDliJvlu7rliqjmgIHliIbnsbsocnVsZU9iaikge1xcbiAgICAgIGlmIChydWxlT2JqID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgcnVsZU9iaiA9IFtdO1xcbiAgICAgIH1cXG4gICAgICAvL+WIneWni+WMluWPmOmHj+W8gOWni1xcbiAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5jaGVja1BhcmFtKCk7XFxuICAgICAgY29uc3QgcGFnZSA9IHBhcmFtLumhteeggTtcXG4gICAgICBjb25zdCBodG1sID0gcGFyYW0u5rqQ56CBO1xcbiAgICAgIGNvbnN0IGQgPSBwYXJhbS7nlYzpnaI7XFxuICAgICAgY29uc3Qg54q25oCBID0gdGhpcy5zdGF0ZTtcXG4gICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNlYXJjaDtcXG4gICAgICBjb25zdCBlbXB0eSA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICBjb25zdCDmipjlj6DnirbmgIEgPSB0aGlzLm9wZW47XFxuICAgICAgdmFyIOWxleW8gCA9IHRoaXMu5bGV5byAO1xcbiAgICAgIHZhciDmipjlj6AgPSB0aGlzLuaKmOWPoDtcXG4gICAgICB2YXIg5YWo5riFID0gdGhpcy5jbGVhcmFsbDtcXG4gICAgICB2YXIg5riF6ZmkID0gdGhpcy5jbGVhcnM7XFxuICAgICAgLy/liJ3lp4vljJblj5jph4/nu5PmnZ9cXG4gICAgICBsZXQgaW5pdF9jYXRlID0gbmV3IEFycmF5KDIwKS5maWxsKFxcXCIwXFxcIik7XFxuICAgICAgY29uc3QgZm9sZCA9IGdldE15VmFyKE1ZX1JVTEUuZ3JvdXAsIFxcXCIwXFxcIik7XFxuICAgICAgY29uc3QgY2F0ZV90ZW1wID0gSlNPTi5wYXJzZShcXG4gICAgICAgIGdldE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbiAgICAgICk7XFxuICAgICAgaWYgKHNlYXJjaCAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgdXJsOiBcXFwiJ2hpa2VyOi8vc2VhcmNoP3J1bGU9XFxcIiArIE1ZX1JVTEUudGl0bGUgKyBcXFwiJnM9JytpbnB1dFxcXCIsXFxuICAgICAgICAgIGRlc2M6IFxcXCLmkJzntKLlhbPplK7or41cXFwiLFxcbiAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJrZXl3b3JkXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJrZXl3b3JkXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICB9LFxcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbXTtcXG4gICAgICBydWxlT2JqLmZvckVhY2goKHgpID0+IHtcXG4gICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICBpZih4LuS4gOe6p+WumuS9jSl7XFxuICAgICAgICAgIGlmICh4LuS4gOe6p+WumuS9jS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShodG1sLCB4LuS4gOe6p+WumuS9jSk7XFxuICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgbGlzdCA9IHBkZmEoaHRtbCwgeC7kuIDnuqflrprkvY0pO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBpZih4LuWkp+exu+WumuS9jSl7XFxuICAgICAgICAgIGlmICh4LuWkp+exu+WumuS9jS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShodG1sLCB4LuWkp+exu+WumuS9jSk7XFxuICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgbGlzdCA9IFtwZGZhKGh0bWwsIHgu5aSn57G75a6a5L2NKS5qb2luKCdcXFxcbicpXTtcXG4gICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICB2YXIg5LiA57qnID0gbGlzdC5tYXAoKHMpID0+IHtcXG4gICAgICAgICAgdmFyIHNsaXN0ID0gW107XFxuICAgICAgICAgIGlmICghKFxcXCLlsI/nsbtcXFwiIGluIHgpKSB7XFxuICAgICAgICAgICAgeC7lsI/nsbsgPSBcXFwiYm9keSYmYTpub3QoOm1hdGNoZXMo6aaW6aG1KSk6bm90KGE6bm90KFtocmVmXSkpXFxcIjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZiAoeC7lsI/nsbsuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgc2xpc3QgPSB0aGlzLmV2YWxKU1J1bGUocywgeC7lsI/nsbspO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHNsaXN0ID0gcGRmYShzLCB4LuWwj+exuyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgdmFyIOWumuS9jSA9IHNsaXN0Lm1hcCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoaXRlbSwgeC7moIfpopgpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLmdldFVybChpdGVtLCB4KTtcXG4gICAgICAgICAgICB2YXIgb2JqID0geyB0aXRsZTogdGl0bGUsIHVybDogdXJsIH07XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgICByZXR1cm4g5a6a5L2NO1xcbiAgICAgICAgfSk7XFxuICAgICAgICAvL2xvZyjkuIDnuqcpXFxuICAgICAgICAvL2xvZyjkuIDnuqcubGVuZ3RoKVxcbiAgICAgICAgaWYgKOS4gOe6py5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICBjYXRlZ29yaWVzLnB1c2go5LiA57qnLmpvaW4oXFxcIlxcXFxuXFxcIikpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAg5LiA57qnLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goaXRlbS5qb2luKFxcXCIsXFxcIikpO1xcbiAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKGNhdGVnb3JpZXMpXFxuICAgICAgfSk7XFxuICAgICAgaWYgKOaKmOWPoOeKtuaAgSkge1xcbiAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBmb2xkID09PSBcXFwiMVxcXCIgPyDmipjlj6AgOiDlsZXlvIAsXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKFxcbiAgICAgICAgICAgICAgKGZvbGQsIHUsIGFsbCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLmdyb3VwLCBmb2xkID09PSBcXFwiMVxcXCIgPyBcXFwiMFxcXCIgOiBcXFwiMVxcXCIpO1xcbiAgICAgICAgICAgICAgICAvKmFsbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgfSk7Ki9cXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgIGZvbGQsXFxuICAgICAgICAgICAgICDnirbmgIEsXFxuICAgICAgICAgICAgICDlhajmuIVcXG4gICAgICAgICAgICApLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgIGxvbmdDbGljazogdGhpcy5hY3Rpb24oe1xcbiAgICAgICAgICAgICAgICBzdGF0ZTog54q25oCBLFxcbiAgICAgICAgICAgICAgICBhbGw6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgY2w6IOa4hemZpCxcXG4gICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcXG4gICAgICAgIC8vbG9nKGNhdGVnb3JpZXMpXFxuICAgICAgICBsZXQgc3ViX2NhdGVnb3JpZXMgPSBbXTtcXG4gICAgICAgIC8qaWYgKOWwj+exu+WumuS9jS5pbmNsdWRlcyhcXFwiO1xcXCIpKSB7XFxuICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NLnNwbGl0KFxcXCI7XFxcIilbMF0pO1xcbiAgICAgICAgICBpZiAoc3ViX2NhdGVnb3JpZXMubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jS5zcGxpdChcXFwiO1xcXCIpWzFdKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHsqL1xcbiAgICAgICAgLy9sb2coaW5kZXgpXFxuICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IEpTT04ucGFyc2UoYFske2NhdGVnb3J5fV1gKTtcXG4gICAgICAgIC8vIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NKTtcXG4gICAgICAgIC8vfVxcbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XFxuICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcblxcbiAgICAgICAgICAgIC8vbGV0IHRpdGxlID0gcGRmaChpdGVtLCBf5aSn57G75qCH6aKYKTtcXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBpdGVtLnRpdGxlO1xcbiAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ld1JlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IGpzb249JydcXG4gICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHtcXG4gICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgY2xlYXJzOiDmuIXpmaQsXFxuICAgICAgICAgICAgICBqc29uOiBqc29uLFxcbiAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgIGFsbGNsZWFyczog5YWo5riFLFxcbiAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgLy9sZXQgdXJsID0gcGQoaXRlbSwgX+Wkp+exu+mTvuaOpSk7XFxuICAgICAgICAgICAgbGV0IHVybCA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgIC8qaWYgKOWkp+exu+WkhOeQhikge1xcbiAgICAgICAgICAgICAgdXJsID0g5LiA57qn5YiG57G75aSE55CGKHVybCk7XFxuICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgLy9sb2codXJsKVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5zZXRUaXRsZShrZXkudG9TdHJpbmcoKSwgY2F0ZV90ZW1wW2luZGV4XSwgdGl0bGUpLFxcbiAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgbmV3X2NhdGUgPSBbXTtcXG4gICAgICAgICAgICAgICAgcGFyYW1zLmNsZWFycy5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHBhcmFtcy5hbGxjbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgbmV3X2NhdGUucHVzaChpbmRleCA9PT0gMCA/IHBhcmFtcy5rZXkudG9TdHJpbmcoKSA6IFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIiwgSlNPTi5zdHJpbmdpZnkobmV3X2NhdGUpKTtcXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5qc29uLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZHRfXFxcIiArIHBhcmFtcy5qc29uLnR5cGUsIHBhcmFtcy5qc29uLnZhbHVlKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMuc3RhdGUsIHBhcmFtcy5qc29uKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgIH0sIHBhcmFtcyksXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSBpZiAoZm9sZCA9PT0gXFxcIjFcXFwiIHx8IOaKmOWPoOeKtuaAgSA9PSBmYWxzZSkge1xcbiAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICB2YXIgZXh0cmFwb3MgPSBmYWxzZTtcXG4gICAgICAgICAgICAvKmlmIChpdGVtLmluY2x1ZGVzKCd0eXBlPVxcXCJAZXh0cmFcXFwiJykpIHtcXG4gICAgICAgICAgICAgIGV4dHJhcG9zID0gdHJ1ZTtcXG4gICAgICAgICAgICAgIC8vbG9nKCfpmYTliqDlrprkvY0nKVxcbiAgICAgICAgICAgIH0qL1xcblxcbiAgICAgICAgICAgIGlmIChleHRyYXBvcykge1xcbiAgICAgICAgICAgICAgdmFyIHRpdGxlID0gcGRmaChpdGVtLCBcXFwiYSYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgdmFyIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgIHR5cGU6IHBkZmgoaXRlbSwgXFxcImEmJnN0YXRlXFxcIiksXFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIFxcXCJhJiZ2YWx1ZVxcXCIpLFxcbiAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgLy92YXIgdGl0bGUgPSBwZGZoKGl0ZW0sIOWIhuexu+agh+mimCk7XFxuICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBpdGVtLnRpdGxlO1xcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgdmFyIGpzb24gPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgIC8qc3dpdGNoICh0cnVlKSB7XFxuICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQEBcXFwiKTpcXG4gICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAQFxcXCIpWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQFxcXCIpOlxcbiAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMF0sXFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgIC8vIGpzb24gPSBwZChpdGVtLCDliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAvKnZhciBqc29uPeWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEBAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgdHlwZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVswXSksXFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVsxXSksXFxuICAgICAgICAgICAgICAgIH06cGQoaXRlbSzliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAganNvbj3liIbnsbvpk77mjqUuaW5jbHVkZXMoJ0BAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgdHlwZTrliIbnsbvpk77mjqUuc3BsaXQoJ0BAJylbMF0sXFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQCcpWzFdKSxcXG4gICAgICAgICAgICAgICAgfTpwZChpdGVtLOWIhuexu+mTvuaOpSk7Ki9cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHtcXG4gICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxcbiAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAganNvbjoganNvbixcXG4gICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICBhbGxjbGVhcnM6IOWFqOa4hSxcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5zZXRUaXRsZShrZXkudG9TdHJpbmcoKSwgY2F0ZV90ZW1wW2luZGV4XSwgdGl0bGUpLFxcbiAgICAgICAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5XFxcIiArIFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFsbGNsZWFycy5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XSA9IHBhcmFtcy5rZXkudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKTtcXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5qc29uLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZHRfXFxcIiArIHBhcmFtcy5qc29uLnR5cGUsIHBhcmFtcy5qc29uLnZhbHVlKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMuc3RhdGUsIHBhcmFtcy5qc29uKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgfSwgcGFyYW1zKSxcXG4gICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICB9KTtcXG4gICAgfVxcbiAgICB9LFxcbiAgfTtcXG4gIG9iai7pooTorr4ob3B0aW9ucyk7XFxuICByZXR1cm4gb2JqO1xcbn1cXG5cXG4gIC8vLueKtuaAgShcXFwidXJsXFxcIilcXG4gIC8vLueVjOmdoihkKVxcbiAgLy8u5rqQ56CBKHhodG1sKVxcbiAgLy8u5YWo5riFKFtcXFwiMVxcXCIsIFxcXCIyXFxcIl0pXFxuICAvLy7muIXpmaQoKVxcbiAgLy8u5byA5ZCv5oqY5Y+gKClcXG4gIC8vLumhteeggShwYWdlKVxcbiAgLy8u5Yib5bu65Yqo5oCB5YiG57G7KOWumuS9jeWIl+ihqCk7XFxuXFxuZnVuY3Rpb24gZ2V0T2JqZnVjKG9iaikge1xcbiAgY29uc3QgbWV0aG9kcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuZmlsdGVyKFxcbiAgICAobmFtZSkgPT4gdHlwZW9mIG9ialtuYW1lXSA9PT0gXFxcImZ1bmN0aW9uXFxcIlxcbiAgKTtcXG4gIGlmIChtZXRob2RzLmxlbmd0aCA9PSAwKSB7XFxuICAgIGNvbnNvbGUubG9nKG9iai50b1N0cmluZygpKTtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgY29uc3QgZm9ybWF0dGVkU3RyaW5nID0gbWV0aG9kc1xcbiAgICAubWFwKChuYW1lKSA9PiB7XFxuICAgICAgY29uc3QgZm4gPSBvYmpbbmFtZV07XFxuICAgICAgY29uc3QgZm5TdHJpbmcgPSBgJHtuYW1lfTogJHtmbi50b1N0cmluZygpfWA7XFxuICAgICAgY29uc3QgcmVzdG9yZWRGblN0cmluZyA9IGZuU3RyaW5nLnJlcGxhY2UoXFxuICAgICAgICAvXFxcXFxcXFx1KFtcXFxcZFxcXFx3XXs0fSkvZ2ksXFxuICAgICAgICBmdW5jdGlvbiAobWF0Y2gsIGdycCkge1xcbiAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChncnAsIDE2KSk7XFxuICAgICAgICB9XFxuICAgICAgKTtcXG4gICAgICByZXR1cm4gcmVzdG9yZWRGblN0cmluZztcXG4gICAgfSlcXG4gICAgLmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICBjb25zb2xlLmxvZyhmb3JtYXR0ZWRTdHJpbmcpO1xcbn1cXG5cXG4vKlxcbnZlciAyMDIzLTA2LTE2ICAxLjBcXG4qL1xcbnZhciDnirbmgIEgPVxcbiAgdHlwZW9mIOeKtuaAgeagh+iusCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDnirbmgIHmoIforrAgIT0gXFxcIlxcXCIgPyDnirbmgIHmoIforrAgOiBNWV9SVUxFLnVybDtcXG5cXG5sZXQgZHRfZGVidWc9ZmFsc2U7ICBcXG4gIFxcbmFkZExpc3RlbmVyKFxcbiAgXFxcIm9uQ2xvc2VcXFwiLFxcbiAgJC50b1N0cmluZygoKSA9PiB7fSlcXG4pO1xcblxcbnZhciBDcmVhdGUgPSB7XFxuICBzcGFnZToge1xcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcXG4gICAgICByZXR1cm4gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcInNwYWdlXFxcIiwgXFxcIlxcXCIpO1xcbiAgICB9LFxcbiAgICBzZXQ6IGZ1bmN0aW9uICh1cmwpIHtcXG4gICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwic3BhZ2VcXFwiLCB1cmwpO1xcbiAgICB9LFxcbiAgfSxcXG4gIG5leHRQYWdlOiBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciByZXN1bHQgPSBmYWxzZTtcXG4gICAgdHJ5IHtcXG4gICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAvL2xvZygnbjonK25leHQpXFxuICAgICAgaWYobmV4dCA9PVxcXCJcXFwiKXtcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5LiL5LiA6aG16ZO+5o6l5Li656m6JylcXG4gICAgICB9XFxuICAgICAgcmVzdWx0PXRydWU7XFxuICAgICAgaWYodHJ1ZV91cmw9PW5leHQpe1xcbiAgICAgICAgIHJlc3VsdD1mYWxzZTtcXG4gICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAvL2xvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgbG9nKFxcXCLplJnor6/kv6Hmga86XFxcIiArIGUubWVzc2FnZSk7XFxuICAgIH1cXG4gICAgaWYgKChuZXh0ID09IFxcXCJcXFwiIHx8IG5leHQgPT0gdW5kZWZpbmVkKSAmJiBwYWdlID09IDEpIHtcXG4gICAgICBuZXh0ID0gdHJ1ZV91cmw7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgLy9yZXN1bHQ9ZmFsc2U7XFxuICAgICAgbmV4dCA9IGdldE15VmFyKOeKtuaAgSk7XFxuICAgIH1cXG4gICAgLy9sb2coJ2wnK3RydWVfdXJsKVxcbiAgICAvL2xvZygnbicrbmV4dClcXG4gICAgaWYocGFnZSE9MSl7XFxuICAgIGlmICh0cnVlX3VybCA9PSBuZXh0JiYhcmVzdWx0KSB7XFxuICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gdHJ1ZTtcXG4gICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgICAvL3B1dE15VmFyKOeKtuaAgSwgbmV4dCk7XFxuICB9LFxcbiAgZ2V0QmFja0ltYWdlOiBmdW5jdGlvbiAoaW1ndXJsKSB7XFxuICAgIHZhciByZXN1bHQgPSBpbWd1cmw7XFxuICAgIHRyeSB7XFxuICAgICAgcmVzdWx0ID0gL3VybCg/OlxcXFxzKyk/XFxcXCgoLio/KVxcXFwpL2dcXG4gICAgICAgIC5leGVjKGltZ3VybClbMV1cXG4gICAgICAgIC5yZXBsYWNlKC8oJ3xcXFwifCZxdW90OykvZ20sIFxcXCJcXFwiKTtcXG4gICAgfSBjYXRjaCB7fVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSxcXG4gIGh0dHBIYW5kbGU6IGZ1bmN0aW9uIChpbnB1dCkge1xcbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIi8vXFxcIikpIHtcXG4gICAgICByZXR1cm4gXFxcImh0dHBzOlxcXCIgKyBpbnB1dDtcXG4gICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCIvXFxcIikpIHtcXG4gICAgICByZXR1cm4gTVlfSE9NRSArIGlucHV0O1xcbiAgICB9XFxuICB9LFxcbiAgaW1nSGFuZGxlOiBmdW5jdGlvbiAoaXRlbSwgcnVsZSkge1xcbiAgICB2YXIgaW1nID0gXFxcIlxcXCI7XFxuICAgIGlmIChydWxlLmltZy5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgaW1nID0gZXZhbChydWxlLmltZyk7XFxuICAgIH0gZWxzZSBpZiAocnVsZS5iYWNraW1nKSB7XFxuICAgICAgaW1nID0gcGRmaChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgaW1nID0gdGhpcy5nZXRCYWNrSW1hZ2UoaW1nKTtcXG4gICAgICBpbWcgPSB0aGlzLmh0dHBIYW5kbGUoaW1nKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBpbWcgPSBwZGZoKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICBpZiAoIWltZy5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikpIHtcXG4gICAgICAgIGltZyA9IHBkKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgIGltZyA9IHRoaXMuaHR0cEhhbmRsZShpbWcpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gaW1nICsgcnVsZS5yZWY7XFxuICB9LFxcbiAgdXJsSGFuZGxlOiBmdW5jdGlvbiAoaXRlbSwgcnVsZSkge1xcbiAgICB2YXIgaHJlZiA9IFxcXCJcXFwiO1xcbiAgICBpZiAocnVsZS51cmwuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgIGhyZWYgPSBldmFsKHJ1bGUudXJsKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBocmVmID0gcGQoaXRlbSwgcnVsZS51cmwpO1xcbiAgICB9XFxuICAgIGhyZWYgPSBydWxlLmltdCA/IGhyZWYgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCIgOiBocmVmO1xcbiAgICByZXR1cm4gaHJlZjtcXG4gIH0sXFxuICBzZXRDb250ZW50OiBmdW5jdGlvbiAoaXRlbSwgaW5wdXQpIHtcXG4gICAgbGV0IG91dHB1dCA9IFxcXCJcXFwiO1xcbiAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgcmV0dXJuIG91dHB1dDtcXG4gICAgfVxcbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgIG91dHB1dCA9IGV2YWwoaW5wdXQpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIG91dHB1dCA9IHBkZmgoaXRlbSwgaW5wdXQpO1xcbiAgICB9XFxuICAgIHJldHVybiBvdXRwdXQ7XFxuICB9LFxcbiAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xcbiAgICBhZGRMaXN0ZW5lcihcXG4gICAgICBcXFwib25SZWZyZXNoXFxcIixcXG4gICAgICAkLnRvU3RyaW5nKCh1KSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ5aWxpc3RcXFwiKTtcXG4gICAgICAgIC8vdmFyIHAgPSBzdG9yYWdlMC5nZXRNeVZhcignc3BhZ2UnLCAnJyk7XFxuICAgICAgICAvL3B1dE15VmFyKHUsIHApO1xcbiAgICAgIH0sIOeKtuaAgSlcXG4gICAgKTtcXG4gIH0sXFxuICBqc29uTGlzdDogZnVuY3Rpb24gKGFyciwganNvbiwgcnVsZSkge1xcbiAgICBpZiAoanNvbi5jb25zdHJ1Y3RvciAhPSBPYmplY3QpIHtcXG4gICAgICB0cnkge1xcbiAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvbik7XFxuICAgICAgfSBjYXRjaCB7fVxcbiAgICB9XFxuICAgIGpzb25bcnVsZS5saXN0XS5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgdmFyIGltZyA9IGV2YWwocnVsZS5pbWcpICsgcnVsZS5yZWY7XFxuICAgICAgdmFyIGhyZWYgPSBldmFsKHJ1bGUudXJsKTtcXG4gICAgICBocmVmID0gcnVsZS5pbXQgPyBocmVmICsgXFxcIiNpbW1lcnNpdmVUaGVtZSNcXFwiIDogaHJlZjtcXG4gICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcbiAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgIHRpdGxlOiBldmFsKHJ1bGUudGl0bGUpLFxcbiAgICAgICAgZGVzYzogZXZhbChydWxlLmRlc2MpLFxcbiAgICAgICAgY29udGVudDogZXZhbChydWxlLmNvbnRlbnQpLFxcbiAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eSMjXFxcIiArIGhyZWYsXFxuICAgICAgICBjb2xfdHlwZTogcnVsZS5jb2xfdHlwZSxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgfSxcXG4gICAgICB9O1xcbiAgICAgIGlmIChsYXp5ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICBkZFtcXFwidXJsXFxcIl0gPSBocmVmICsgbGF6eTtcXG4gICAgICB9XFxuICAgICAgYXJyLnB1c2goZGQpO1xcbiAgICB9KTtcXG4gIH0sXFxuICBydWxlTGlzdDogZnVuY3Rpb24gKGFyciwgaHRtbCwgcnVsZSkge1xcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgcnVsZS5saXN0KTtcXG4gICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgdmFyIHRpdGxlID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUudGl0bGUpO1xcbiAgICAgIHZhciBkZXNjID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuZGVzYyk7XFxuICAgICAgdmFyIGltZyA9IHRoaXMuaW1nSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgIHZhciB1cmwgPSB0aGlzLnVybEhhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICB2YXIgY29udGVudCA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpO1xcbiAgICAgIHZhciBsYXp5ID0gcnVsZS5sYXp5ID8gcnVsZS5sYXp5IDogXFxcIlxcXCI7XFxuICAgICAgdmFyIGRkID0ge1xcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgKyB1cmwsXFxuICAgICAgICBjb250ZW50OiBjb250ZW50LFxcbiAgICAgICAgY29sX3R5cGU6IHJ1bGUuY29sX3R5cGUsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgIH0sXFxuICAgICAgfTtcXG4gICAgICBpZiAobGF6eSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgZGRbXFxcInVybFxcXCJdID0gdXJsICsgbGF6eTtcXG4gICAgICB9XFxuICAgICAgYXJyLnB1c2goZGQpO1xcbiAgICB9KTtcXG4gIH0sXFxuICBMaXN0OiBmdW5jdGlvbiAoYXJyLCBodG1sLCBydWxlLCBwYXJhbSkge1xcbiAgICBwYXJhbSA9IHBhcmFtID8gcGFyYW0gOiB7fTtcXG4gICAgdmFyIGF1dG8gPSBwYXJhbS5hdXRvID8gcGFyYW0uYXV0byA6IGZhbHNlO1xcbiAgICB2YXIgc2hvdyA9IHBhcmFtLnNob3cgPyBwYXJhbS5zaG93IDogZmFsc2U7XFxuICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAvL3RoaXMuc3BhZ2Uuc2V0KHRydWVfdXJsKTtcXG4gICAgfVxcbiAgICB0aGlzLnJlZnJlc2goKTtcXG4gICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsIHJ1bGUubGlzdCk7XFxuICAgIC8vbG9nKHRoaXMubmV4dFBhZ2UoKSlcXG4gICAgaWYgKChzdG9yYWdlMC5nZXRNeVZhcigneWlfaXNuZXh0JywndCcpPT0ndCcmJmxpc3QubGVuZ3RoID4gMCkgfHwgcGFnZSA9PSAxKSB7XFxuICAgICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICBkZWxldGVJdGVtKFxcXCJwYWdlbnVtXFxcIik7XFxuICAgICAgICBkZWxldGVJdGVtKFxcXCJwYWdlbGluZVxcXCIpO1xcbiAgICAgICAgdmFyIGlkID0gXFxcIlxcXCI7XFxuICAgICAgICB2YXIgY2xzID0gXFxcIlxcXCI7XFxuICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS50aXRsZSk7XFxuICAgICAgICB2YXIgZGVzYyA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MpO1xcbiAgICAgICAgdmFyIGltZyA9IHRoaXMuaW1nSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5jb250ZW50KTtcXG4gICAgICAgIGlmIChpID09IGxpc3QubGVuZ3RoIC0gMSkge1xcbiAgICAgICAgICBpZCA9IFxcXCJsYXN0aWRfXFxcIiArIHBhZ2U7XFxuICAgICAgICAgIGNscyA9IFxcXCJsYXN0bWFya1xcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eSMjXFxcIiArIHVybCxcXG4gICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgY29sX3R5cGU6IHJ1bGUuY29sX3R5cGUsXFxuICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgIGlkOiBpZCxcXG4gICAgICAgICAgICBjbHM6IGNscyxcXG4gICAgICAgICAgfSxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgaWYgKGkgPT0gbGlzdC5sZW5ndGggLSAxICYmIHNob3cpIHtcXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICBpZDogXFxcInBhZ2VsaW5lXFxcIixcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxzbWFsbD7liqDovb3kuK0uLi48L3NtYWxsPlxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgaWQ6IFxcXCJwYWdlbnVtXFxcIixcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICB9KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICB1cGRhdGVJdGVtKFxcXCJwYWdlbnVtXFxcIiwge1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+PHNtYWxsPuWIsOW6leS6hjwvc21hbGw+PC9mb250PicsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICBpZDogXFxcImxhc3RcXFwiLFxcbiAgICAgICAgfSxcXG4gICAgICB9KTtcXG4gICAgfVxcbiAgICBpZiAobGlzdC5sZW5ndGggPT0gMCAmJiBwYWdlID09IDEpIHtcXG4gICAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIixcXG4gICAgICB9KTtcXG4gICAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+PHNtYWxsPuaXoOWGheWuuTwvc21hbGw+PC9mb250PicsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICBleHRyYToge30sXFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgaWYodGhpcy5uZXh0UGFnZSgpKXtcXG4gICAgICAvL2xvZygndCcpO1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ3lpX2lzbmV4dCcsJ3QnKTtcXG4gICAgfWVsc2V7XFxuICAgICAgLy9sb2coJ2YnKTtcXG4gICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCd5aV9pc25leHQnLCdmJyk7XFxuICAgIH1cXG4gICAgaWYgKGF1dG8pIHtcXG4gICAgICAvL2NyZWF0ZU5leHRQYWdlKCk7XFxuICAgICAgYXV0b1BhZ2UoKTtcXG4gICAgfVxcbiAgfSxcXG59O1xcblxcbnZhciBleHRNZXRob2QgPSB7XFxuICBUb1BhcmFtczogZnVuY3Rpb24gKCkge1xcbiAgICB2YXIganNvbiA9IGFyZ3VtZW50c1swXTtcXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGpzb24pXFxuICAgICAgLm1hcCgoa2V5KSA9PiBrZXkgKyBcXFwiPVxcXCIgKyBqc29uW2tleV0pXFxuICAgICAgLmpvaW4oXFxcIiZcXFwiKTtcXG4gIH0sXFxuICB1cmxQYXJzZTogZnVuY3Rpb24gKHUpIHtcXG4gICAgdmFyIGRpY3QgPSB7fTtcXG4gICAgZGljdC5Tb3VyY2UgPSB1O1xcbiAgICBsZXQgcGFyYW1zID0gKHVybCkgPT4ge1xcbiAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHt9O1xcbiAgICAgIGxldCByZWcgPSAvKFtePz0mXSspPShbXj89Jl0rKS9nO1xcbiAgICAgIHVybC5yZXBsYWNlKHJlZywgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgcXVlcnlQYXJhbXNbYXJndW1lbnRzWzFdXSA9IGFyZ3VtZW50c1syXTtcXG4gICAgICB9KTtcXG4gICAgICByZXR1cm4gcXVlcnlQYXJhbXM7XFxuICAgIH07XFxuICAgIHZhciBqYXZhVXJsID0gSmF2YUltcG9ydGVyKGphdmEubmV0LlVSTCk7XFxuICAgIHdpdGggKGphdmFVcmwpIHtcXG4gICAgICB2YXIgdXJsID0gbmV3IFVSTCh1KTtcXG4gICAgICBkaWN0LlByb3RvY29sID0gdXJsLmdldFByb3RvY29sKCk7XFxuICAgICAgZGljdC5Ib3N0ID0gdXJsLmdldEhvc3QoKTtcXG4gICAgICBkaWN0LlBvcnQgPSB1cmwuZ2V0UG9ydCgpO1xcbiAgICAgIGRpY3QuRmlsZSA9IHVybC5nZXRGaWxlKCk7XFxuICAgICAgZGljdC5QYXRoID0gdXJsLmdldFBhdGgoKTtcXG4gICAgICBkaWN0LlJlZiA9IHVybC5nZXRSZWYoKTtcXG4gICAgICBkaWN0Lkhvc3RzID0gYCR7ZGljdC5Qcm90b2NvbH06Ly8ke3VybC5nZXRIb3N0KCl9YDtcXG4gICAgfVxcbiAgICBkaWN0LlBhcmFtcyA9IHBhcmFtcyh1KTtcXG4gICAgcmV0dXJuIGRpY3Q7XFxuICB9LFxcbiAgaXNFcXVhbDogZnVuY3Rpb24gKHgsIHkpIHtcXG4gICAgY29uc3Qgb2sgPSBPYmplY3Qua2V5cyxcXG4gICAgICB0eCA9IHR5cGVvZiB4LFxcbiAgICAgIHR5ID0gdHlwZW9mIHk7XFxuICAgIHJldHVybiB4ICYmIHkgJiYgdHggPT09IFxcXCJvYmplY3RcXFwiICYmIHR4ID09PSB0eVxcbiAgICAgID8gb2soeCkubGVuZ3RoID09PSBvayh5KS5sZW5ndGggJiZcXG4gICAgICAgICAgb2soeCkuZXZlcnkoKGtleSkgPT4gdGhpcy5pc0VxdWFsKHhba2V5XSwgeVtrZXldKSlcXG4gICAgICA6IHggPT09IHk7XFxuICB9LFxcbiAgZmluZERpZmZlcmVudEluZGV4OiBmdW5jdGlvbiAoc3RyMSwgc3RyMikge1xcbiAgICBjb25zdCBkaWZmQ2hhcnMgPSBbXTtcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgaWYgKHN0cjFbaV0gIT09IHN0cjJbaV0pIHtcXG4gICAgICAgIGRpZmZDaGFycy5wdXNoKHtcXG4gICAgICAgICAgaW5kZXg6IGksXFxuICAgICAgICAgIHMxOiBzdHIxW2ldLFxcbiAgICAgICAgICBzMjogc3RyMltpXSxcXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZGlmZkNoYXJzO1xcbiAgfSxcXG4gIHJlcGxhY2VDaGFyQXQ6IGZ1bmN0aW9uIChzdHIsIGluZGV4LCByZXBsYWNlbWVudCkge1xcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0ci5sZW5ndGgpIHtcXG4gICAgICByZXR1cm4gc3RyO1xcbiAgICB9XFxuICAgIC8vbG9nKGluZGV4KVxcbiAgICBjb25zdCBhcnIgPSBzdHIuc3BsaXQoXFxcIlxcXCIpO1xcbiAgICBhcnJbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XFxuICAgIHJldHVybiBhcnIuam9pbihcXFwiXFxcIik7XFxuICB9LFxcbiAgZ2V0T2JqZWN0S2V5c0RpZmY6ZnVuY3Rpb24ob2JqMSwgb2JqMikge1xcbiAgY29uc3QgZGlmZmVyZW50S2V5cyA9IFtdO1xcbiAgZm9yIChsZXQga2V5IGluIG9iajEpIHtcXG4gICAgaWYgKCFvYmoyLmhhc093blByb3BlcnR5KGtleSkgfHwgb2JqMVtrZXldICE9PSBvYmoyW2tleV0pIHtcXG4gICAgICBkaWZmZXJlbnRLZXlzLnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgZm9yIChsZXQga2V5IGluIG9iajIpIHtcXG4gICAgaWYgKCFvYmoxLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICBkaWZmZXJlbnRLZXlzLnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIGRpZmZlcmVudEtleXM7XFxuICB9LFxcbiAgZ2V0TmV4dFVybDogZnVuY3Rpb24gKHNvdXJjZSwgdGFyZ2V0LCBwYXJhbXMpIHtcXG4gICAgdmFyIHUxID0gdGhpcy51cmxQYXJzZShzb3VyY2UpO1xcbiAgICB2YXIgdTIgPSB0aGlzLnVybFBhcnNlKHRhcmdldCk7XFxuICAgIHZhciBwYSA9IHVuZGVmaW5lZDtcXG4gICAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gXFxcIm9iamVjdFxcXCIpIHtcXG4gICAgICBwYSA9IHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShcXFwi54m55b6BXFxcIikgPyBwYXJhbXMu54m55b6BIDogdW5kZWZpbmVkO1xcbiAgICB9XFxuICAgIHZhciBuZXh0dXJsID0gc291cmNlO1xcbiAgICB2YXIgY2EgPSBPYmplY3Qua2V5cyh1Mi5QYXJhbXMpLmxlbmd0aCA9PSAwID8gXFxcIlxcXCIgOiBcXFwiP1xcXCI7XFxuICAgIGlmIChwYSAhPSB1bmRlZmluZWQpIHtcXG4gICAgICB2YXIgcnMgPSBTdHJpbmcodTIuUGF0aCkucmVwbGFjZShuZXcgUmVnRXhwKHBhKSwgXFxcIiQxZnlwYWdlXFxcIik7XFxuICAgICAgbmV4dHVybCA9IHUyLkhvc3RzICsgcnMgKyBjYSArIHRoaXMuVG9QYXJhbXModTIuUGFyYW1zKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBpZiAodGhpcy5pc0VxdWFsKHUxLlBhcmFtcywgdTIuUGFyYW1zKSkge1xcbiAgICAgICAgaWYoZHRfZGVidWcpe1xcbiAgICAgICAgbG9nKHUxLlBhdGgpO1xcbiAgICAgICAgbG9nKHUyLlBhdGgpO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGRmID0gdGhpcy5maW5kRGlmZmVyZW50SW5kZXgoU3RyaW5nKHUxLlBhdGgpLCBTdHJpbmcodTIuUGF0aCkpO1xcbiAgICAgICAgaWYoZHRfZGVidWcpe1xcbiAgICAgICAgbG9nKGRmKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChkZi5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICB2YXIgcmUgPSBkZlswXS5pbmRleDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHZhciBmID0gZGYuZmlsdGVyKCh4KSA9PiAvXFxcXGQrLy50ZXN0KHguczIpKTtcXG4gICAgICAgICAgdmFyIHJlID0gZlswXS5pbmRleDtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBlcSA9IHRoaXMucmVwbGFjZUNoYXJBdChTdHJpbmcodTIuUGF0aCksIHJlLCBcXFwiZnlwYWdlXFxcIik7XFxuICAgICAgICBuZXh0dXJsID0gdTIuSG9zdHMgKyBlcSArIGNhICsgdGhpcy5Ub1BhcmFtcyh1Mi5QYXJhbXMpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgZXA9dGhpcy5nZXRPYmplY3RLZXlzRGlmZih1MS5QYXJhbXMsdTIuUGFyYW1zKVxcbiAgICAgICAgaWYoZXAubGVuZ3RoPT0xKXtcXG4gICAgICAgICAgdTEuUGFyYW1zW2VwWzBdXT0nZnlwYWdlJ1xcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgIGxvZyhlcCk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXEgPSBTdHJpbmcodTEuUGF0aCkucmVwbGFjZSgvXFxcXGQrLywgXFxcImZ5cGFnZVxcXCIpO1xcbiAgICAgICAgbmV4dHVybCA9IHUxLkhvc3RzICsgZXEgKyBjYSArIHRoaXMuVG9QYXJhbXModTEuUGFyYW1zKTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLy9sb2coJ25leHQ6JytuZXh0dXJsKVxcbiAgICByZXR1cm4gbmV4dHVybDtcXG4gIH0sXFxufTtcXG5cXG5mdW5jdGlvbiBnZXRUcnVlbGluayhtYXJrLCB1cmwsIHBhZ2UpIHtcXG4gIHZhciBwID0gZ2V0TXlWYXIobWFyaywgdXJsKS5yZXBsYWNlKFxcXCJmeXBhZ2VcXFwiLCBwYWdlKTtcXG4gIGlmIChwYWdlID09IDEpIHtcXG4gICAgcmV0dXJuIGdldE15VmFyKFxcXCJ5aV9maXJzdHBhZ2VcXFwiLCBwKTtcXG4gIH0gZWxzZSBpZiAocCAhPSBcXFwiXFxcIikge1xcbiAgICByZXR1cm4gcDtcXG4gIH0gZWxzZSB7XFxuICAgIHJldHVybiB1cmw7XFxuICB9XFxufVxcbi8v5p6E5bu6XFxuZnVuY3Rpb24gY3JlYXRlTmV4dFBhZ2UoKSB7XFxuICBsZXQgc3RhcnRudW0gPSAxO1xcbiAgdmFyIG9iaiA9IGFyZ3VtZW50c1swXTtcXG4gIGlmICh0cnVlX3VybCAhPSBnZXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIsIFxcXCJcXFwiKSkge1xcbiAgICBjbGVhck15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIik7XFxuICB9XFxuICBpZiAocGFnZSA9PSBzdGFydG51bSAmJiBnZXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgIHB1dE15VmFyKFxcXCJ5aV9maXJzdHBhZ2VcXFwiLCB0cnVlX3VybCk7XFxuICAgIHRyeSB7XFxuICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgLy9sb2coXFxcIm5leHRcXFwiKTtcXG4gICAgICAvL2xvZyhuZXh0KTtcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgbG9nKFxcXCLlj6/og73kuI3lrZjlnKjkuIvkuIDpobXmiJbogIXkuIvkuIDpobXlrprkvY3mnInpl67pophcXFwiKTtcXG4gICAgICBuZXh0ID0gXFxcIlxcXCI7XFxuICAgIH1cXG4gICAgaWYgKG5leHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICB2YXIgbnh1cmwgPSBleHRNZXRob2QuZ2V0TmV4dFVybCh0cnVlX3VybCwgbmV4dCwgb2JqKTtcXG4gICAgICAvL2xvZyhcXFwibnh1cmw6XFxcIiArIG54dXJsKTtcXG4gICAgICBwdXRNeVZhcijnirbmgIEsIG54dXJsKTtcXG4gICAgICBwdXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIsIG54dXJsKTtcXG4gICAgfVxcbiAgfVxcbn1cXG5cXG5mdW5jdGlvbiBhdXRvUGFnZSgpIHtcXG4gIGlmKHBhZ2U9PTEpe1xcbiAgICBwdXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgdHJ1ZV91cmwpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgLy9sb2coXFxcIm5leHRcXFwiKTtcXG4gICAgICAvL2xvZygnbmV4dDonK25leHQpO1xcbiAgICB9IGNhdGNoIHtcXG4gICAgICBsb2coXFxcIuWPr+iDveS4jeWtmOWcqOS4i+S4gOmhteaIluiAheS4i+S4gOmhteWumuS9jeaciemXrumimFxcXCIpO1xcbiAgICAgIG5leHQgPSBcXFwiXFxcIjtcXG4gICAgfVxcbiAgICBpZiAobmV4dCAhPSBcXFwiXFxcIikge1xcbiAgICAgIHB1dE15VmFyKOeKtuaAgSwgbmV4dCk7XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqfmkJzntKLpobXpnaJcIixcInBhdGhcIjpcIlNlYXJjaEZyYW1lXCIsXCJydWxlXCI6XCJcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3l6bScpKS5ydWxlKVxcbmxldCBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCDmoYbmnrbliJfooagpO1xcbmZvciAobGV0IGogaW4gbGlzdCkge1xcbiAgICAgdmFyIOagh+mimCA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCDmoYbmnrbmoIfpopgpLnNsaWNlKDAsMTYpO1xcbiAgICAgdmFyIOeugOS7izEgPSBwYXJzZURvbUZvckh0bWwobGlzdFtqXSwg5qGG5p62566A5LuLMSkuc2xpY2UoMCwyNCk7XFxuICAgICB2YXIg566A5LuLMiA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCDmoYbmnrbnroDku4syKTtcXG4gICAgIHZhciDmj4/ov7AxID0gcGFyc2VEb21Gb3JIdG1sKGxpc3Rbal0sIOahhuaetuaPj+i/sDEpO1xcbiAgICAgdmFyIOaPj+i/sDIgPSBwYXJzZURvbUZvckh0bWwobGlzdFtqXSwg5qGG5p625o+P6L+wMik7XFxuICAgICB2YXIg5Zu+54mHID0gcGFyc2VEb20obGlzdFtqXSwg5qGG5p625Zu+54mHKSArICdAUmVmZXJlcj0nO1xcbiAgICAgdmFyIOmTvuaOpSA9IHBhcnNlRG9tKGxpc3Rbal0sIOahhuaetumTvuaOpSkgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCI7XFxuICAgICAgXFxuICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgIHRpdGxlOiDmoIfpopgsICAgICAgICAgICBcXG4gICAgICAgICAgICAgICBjb250ZW50OiDnroDku4sxICsgJ1xcXFxuJyArIOeugOS7izIsXFxuICAgICAgICAgICAgICAgZGVzYzog5o+P6L+wMSArICcgJyArIOaPj+i/sDIsXFxuICAgICAgICAgICAgICAgaW1nOiDlm77niYcsXFxuICAgICAgICAgICAgICAgdXJsOiDpk77mjqUsXFxuICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICB0aXRsZTog5qCH6aKYLCAgICAgICAgICAgXFxuICAgICAgICAgICAgaW1nOiDlm77niYcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p+WklumDqOaQnOe0olwiLFwicGF0aFwiOlwidG9vbFwiLFwicnVsZVwiOlwiLy92YXIgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwoaHRtbCwg5pCc57Si5qCH562+KTtcXG52YXIgdGl0bGUgPSBNWV9QQVJBTVMudGl0bGU7XFxubG9nKHRpdGxlKVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI0ZGMDAwMFxcXCI+IOiBmuW9seKImjwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cDovL2ltYWdlLmNvb2xhcGsuY29tLy9hcGtfbG9nby8yMDIyLzA1MDcvMTQvMF8zODI4XzcyNTRfNjM5QDI2MHgyNjAucG5nLnQucG5nJyxcXG4gICAgdXJsOiAnaGlrZXI6Ly9zZWFyY2g/cz0nICsgdGl0bGUgKyAnJnJ1bGU96IGa5b2x4oiaJyxcXG4gICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzQnLFxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzFFOTBGRlxcXCI+IOS6keebmOWQmyjmjqjpgIEpPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwOi8vaW1hZ2UuY29vbGFway5jb20vYXBrX2xvZ28vMjAyMS8wNzIxLzEwL2JiNWM2ZDU5YTllMzYxNTk4MzRiM2YxOWZjNzQ5ZGY1LTI4NTEwNy1vXzFmYjNmdGwzZ2NzdDFzZHQxbjNiMW0ydW5qZDE4LXVpZC02NjI0MzVAMzYweDM2MC5wbmcnLFxcbiAgICB1cmw6ICdoaWtlcjovL3NlYXJjaD9zPScgKyB0aXRsZSArICcmcnVsZT3kupHnm5jlkJso5o6o6YCBKScsXFxuICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNGRjhDMDBcXFwiPiDpppnmg4XlvbHop4Y8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHA6Ly9zdGF0aWMueWluZ3lvbmdodWkuY29tL2ljb24vMTI4LzY4NjM0NDcucG5nJyxcXG4gICAgdXJsOiAnaGlrZXI6Ly9zZWFyY2g/cz0nICsgdGl0bGUgKyAnJnJ1bGU96aaZ5oOF5b2x6KeGJyxcXG4gICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzQnLFxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzAwRkYwMFxcXCI+IOmdkuixhjwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cDovL3N0YXRpYy55aW5neW9uZ2h1aS5jb20vaWNvbi8xMjgvNzAwMDQ3OC5wbmcnLFxcbiAgICB1cmw6ICdoaWtlcjovL3NlYXJjaD9zPScgKyB0aXRsZSArICcmcnVsZT3pnZLosYYnLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfNCcsXFxufSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqfpobXpnaLlhoXlrrlcIixcInBhdGhcIjpcImVyXCIsXCJydWxlXCI6XCJqczpcXG4vKnZlciAyMDIzMDcwOCAxLjBcXG4gKi9cXG52YXIgY3VzdG9tPXt9O1xcblxcbi8v6aKE6K6+XFxuZnVuY3Rpb24gY3VzdG9tRGF0YShjdXN0b20pIHtcXG4gICAgT2JqZWN0LmtleXMoY3VzdG9tKS5mb3JFYWNoKChrKT0+IHtcXG4gICAgICB0aGlzW2tdPWN1c3RvbVtrXSA7XFxuICAgIH0pXFxufVxcbiBcXG5sZXQgRXJqaSA9IHtcXG4gICAg6YCa5YWNOiAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0KS5tYXRjaCgvciBwbGF5ZXJfLio/PSguKj8pPC8pWzFdKVxcbiAgICAgICAgICAgIHZhciB1cmwgPSBodG1sLnVybFxcbiAgICAgICAgICAgIGlmIChodG1sLmVuY3J5cHQgPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHVuZXNjYXBlKHVybCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChodG1sLmVuY3J5cHQgPT0gJzInKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHVuZXNjYXBlKGJhc2U2NERlY29kZSh1cmwpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKC9tM3U4fG1wNC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInZpZGVvOi8vXFxcIiArIGlucHV0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidmlkZW86Ly9cXFwiICsgaW5wdXRcXG4gICAgICAgIH1cXG4gICAgfSksXFxuICAgIHVwZGF0YTogZnVuY3Rpb24ocnVsZSkge1xcbiAgICAgICAgc2V0TGFzdENoYXB0ZXJSdWxlKCdqczonICsgJC50b1N0cmluZygodXJsLHJ1bGUpID0+IHtcXG4gICAgICAgICAgICB2YXIgaHRtbD1mZXRjaCh1cmwpO1xcbiAgICAgICAgICAgIHNldFJlc3VsdChldmFsKHJ1bGUpKVxcbiAgICAgICAgfSxNWV9VUkwsIHJ1bGUpKVxcbiAgICB9LFxcbiAgICBjbG9zZTogZnVuY3Rpb24obGlzdCwgc29ydHMpIHtcXG4gICAgICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygobGlzdCwgc29ydHMpID0+IHtcXG4gICAgICAgICAgICBsaXN0Lm1hcCh4ID0+IHtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcignZXJfJyArIHggKyAnZm9sZCcpO1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdlcl8nK3gpO1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0czsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3BsYXlsaXN0XycgKyBpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgY2xlYXJNeVZhcignZXJfcGxheWxpc3RzJyk7XFxuICAgICAgICB9LCBsaXN0LCBzb3J0cykpXFxuICAgIH0sXFxuICAgIGRhdGFDb252ZXJ0OiBmdW5jdGlvbihkYXRhKSB7XFxuICAgICAgICB2YXIgbmV3Y2xzbGlzdCA9IGRhdGEubWFwKGZ1bmN0aW9uKG9iaikge1xcbiAgICAgICAgICAgIHZhciBuZXdPYmogPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xcbiAgICAgICAgICAgIGlmIChuZXdPYmouaGFzT3duUHJvcGVydHkoJ3R5cGUnKSkge1xcbiAgICAgICAgICAgICAgICBuZXdPYmouY29sX3R5cGUgPSBuZXdPYmoudHlwZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIG5ld09iajtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIG5ld2Nsc2xpc3Q7XFxuICAgIH0sXFxuICAgIHByZUxvYWQ6IGZ1bmN0aW9uKGZ1bmMpIHtcXG4gICAgICAgIGxldCBteWZ1bmM9bnVsbFxcbiAgICAgICAgaWYoZnVuYyE9dW5kZWZpbmVkJiZmdW5jLmNvbnN0cnVjdG9yPT1GdW5jdGlvbil7XFxuICAgICAgICAgICAgbXlmdW5jPWZ1bmNcXG4gICAgICAgIH1cXG4gICAgICAgICQuZXh0ZW5kKHtcXG4gICAgICAgICAgICBkYXRhQ29udmVydDogdGhpcy5kYXRhQ29udmVydCxcXG4gICAgICAgICAgICBtc206TWV0aG9kcy5NdWx0aVNlbGVjdE1vZGUsXFxuICAgICAgICAgICAgZnVuYzpteWZ1bmMsXFxuICAgICAgICB9KVxcbiAgICB9LFxcbiAgICBzbWFsbDogZnVuY3Rpb24oc3RyLCBjb2xvcikge1xcbiAgICAgICAgcmV0dXJuICfigJjigJjigJnigJk8c21hbGw+PGZvbnQgY29sb3I9XFxcIicgKyAoY29sb3IgfHwgJycpICsgJ1xcXCI+JyArIHN0ciArICc8L2ZvbnQ+PC9zbWFsbD4nO1xcbiAgICB9LFxcbiAgICDlo7DmmI46IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5zbWFsbCgn5Lul5LiK5pWw5o2u5p2l5rqQ5LqO572R57uc77yM5aaC5oKo5Zac5qyi77yM6K+35pSv5oyB5a6Y5pa577yBJywgJyM4NzFGNzgnKSxcXG4gICAgICAgICAgICBkZXNjOiB0aGlzLnNtYWxsKCfmraTop4TliJnku4XpmZDlrabkuaDkuqTmtYHkvb/nlKjvvIzor7fkuo7lr7zlhaXlkI4yNOWwj+aXtuWGheWIoOmZpO+8jOS7u+S9lee7hOe7h+aIluS4quS6uuS4jeW+l+S7peS7u+S9leaWueW8j+aWueazleS8oOaSreatpOinhOWImeeahOaVtOS9k+aIlumDqOWIhu+8gScsICcjRjIwQzAwJyksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuXFxuXFxuLy/nroDku4tcXG4gICAgc2V0RGVzYzogZnVuY3Rpb24oZGVzYywgbnVtKSB7XFxuICAgICAgICBkZXNjID0gZGVzYy5jb25zdHJ1Y3RvciA9PSBBcnJheSA/IGRlc2Muam9pbignPGJyPicpIDogZGVzYztcXG4gICAgICAgIGlmIChkZXNjLnJlcGxhY2UoLyg8YnI+fFxcXFxzKykvZywgJycpLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgcmV0dXJuXFxuICAgICAgICB9XFxuICAgICAgICB2YXIgaW5mbz1zdG9yYWdlMC5nZXRNeVZhcignZXJfaW5mbycsJ3t9JylcXG4gICAgICAgIGlmKGluZm9bJ2Rlc2MnXSE9dW5kZWZpbmVkKXtcXG4gICAgICAgICAgaW5mb1snZGVzYyddPWluZm9bJ2Rlc2MnXSsnIOeugOS7izonK2Rlc2M7XFxuICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdlcl9pbmZvJyxpbmZvKTtcXG4gICAgICAgIH1cXG4gICAgICAgIFxcbiAgICAgICAgY29uc3QgbWFyayA9ICdkZXNjJztcXG4gICAgICAgIG51bSA9IHR5cGVvZihudW0pID09ICd1bmRlZmluZWQnID8gOTAgOiBudW1cXG4gICAgICAgIGRlc2MgPSBkZXNjLnN0YXJ0c1dpdGgoJ+OAgOOAgCcpID8gZGVzYyA6ICfjgIDjgIAnICsgZGVzYztcXG4gICAgICAgIGRlc2MgPSBkZXNjLnJlcGxhY2UoLycvZywgXFxcIiYjMzk7XFxcIilcXG5cXG4gICAgICAgIGZ1bmN0aW9uIHN1YnN0cihzdHIsIG1heExlbmd0aCkge1xcbiAgICAgICAgICAgIGxldCBsZW4gPSAwO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGlmIChzdHIuY2hhckNvZGVBdChpKSA+IDI1NSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGVuICs9IDI7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsZW4rKztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAobGVuID4gbWF4TGVuZ3RoKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnNsaWNlKDAsIGkpICsgJy4uLic7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBzZGVzYyA9IHN1YnN0cihkZXNjLCBudW0pO1xcbiAgICAgICAgdmFyIGxhenkgPSAkKGAjbm9Mb2FkaW5nI2ApLmxhenlSdWxlKChkYywgc2RjLCBtKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHNob3cgPSBzdG9yYWdlMC5nZXRJdGVtKG0sICcwJyk7XFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gZmluZEl0ZW0oJ2Rlc2MnKS50aXRsZTtcXG4gICAgICAgICAgICB2YXIgcmUgPSAvKDxcXFxcL3NtYWxsPjxicj4uKj8+KS4rL2c7XFxuICAgICAgICAgICAgdmFyIGV4cCA9ICflsZXlvIA6JztcXG4gICAgICAgICAgICB2YXIgcmV0ID0gJ+aUtui1tzonO1xcbiAgICAgICAgICAgIGlmIChzaG93ID09ICcxJykge1xcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKCdkZXNjJywge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlXFxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UocmV0LCBleHApXFxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UocmUsICckMScgKyBzZGMgKyAnPC9zbWFsbD4nKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oPFxcXFwvc21hbGw+PGJyPjxmb250IGNvbG9yPVxcXCIpLio/KFxcXCI+KS8sICckMSM4QTJCRTIkMicpLy/mlLbotbfpopzoibJcXG5cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShtLCAnMCcpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ2Rlc2MnLCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShleHAsIHJldClcXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShyZSwgJyQxJyArIGRjICsgJzwvc21hbGw+JylcXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKDxcXFxcL3NtYWxsPjxicj48Zm9udCBjb2xvcj1cXFwiKS4qPyhcXFwiPikvLCAnJDEjMDA4MDAwJDInKS8v5bGV5byA6aKc6ImyXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0obSwgJzEnKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGBoaWtlcjovL2VtcHR5YFxcbiAgICAgICAgfSwgZGVzYywgc2Rlc2MsIG1hcmspXFxuICAgICAgICB2YXIgc2MgPSBzdG9yYWdlMC5nZXRJdGVtKG1hcmssICcwJykgPT0gJzAnID8gJ+WxleW8gDonIDogJ+aUtui1tzonO1xcbiAgICAgICAgdmFyIGRjID0gc3RvcmFnZTAuZ2V0SXRlbShtYXJrLCAnMCcpID09ICcwJyA/IHNkZXNjIDogZGVzYztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJycgKyAnPGI+PGZvbnQgY29sb3I9XFxcIiMwOThBQzFcXFwiPuKItyAg5Ymn5oOF566A5LuLXFx0PC9mb250PjwvYj4nICsgXFxcIjxzbWFsbD48YSBzdHlsZT0ndGV4dC1kZWNvcmF0aW9uOiBub25lOycgaHJlZj0nXFxcIiArIGxhenkgKyBcXFwiJz5cXFwiICsgc2MgKyAnPC9hPjwvc21hbGw+PGJyPjxmb250IGNvbG9yPVxcXCIjOEEyQkUyXFxcIj4nICsgYCR7ZGN9YCArICc8L3NtYWxsPicsLy/pu5jorqTpopzoibJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6ICdkZXNjJyxcXG4gICAgICAgICAgICAgICAgbGluZVNwYWNpbmc6IDYsXFxuICAgICAgICAgICAgICAgIHRleHRTaXplOiAxNSxcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IHRydWUsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfSxcXG5cXG5cXG4vL+a1t+aKpVxcbiAgICBzdHJDb252ZXJ0OiBmdW5jdGlvbihhcnIpIHtcXG4gICAgICAgIHJldHVybiBhcnIubWFwKHggPT4ge1xcbiAgICAgICAgICAgIHN0ciA9IHg7XFxuICAgICAgICAgICAgaWYgKC8o5a+85ryUfOS4u+a8lHznsbvlnosp77yaLy50ZXN0KHN0cikpIHtcXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnNwbGl0KCcvJykubWFwKCh2YWwsIGluZGV4KSA9PiAoaW5kZXggPT09IDAgPyAnJyA6ICcnKSArIHZhbCkuc2xpY2UoMCwgNSkuam9pbignICcpLnJlcGxhY2UoLyAkLywgJycpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gc3RyXFxuICAgICAgICB9KVxcbiAgICB9LFxcbiAgICBzZXRDb250ZW50OiBmdW5jdGlvbihvYmopIHtcXG4gICAgICAgIC8vbG9nKG9iailcXG4gICAgICAgIHZhciBjb250ZW50cyA9IG9iai5tYWluO1xcbiAgICAgICAgdmFyIHNvcnRPcmRlciA9IG9iai5zb3J0O1xcbiAgICAgICAgdmFyIGltZyA9IG9iai5pbWc7XFxuICAgICAgICB2YXIgdGV4dHMgPSBjb250ZW50cy5tYXAoeCA9PiBwZGZoKHgsICdUZXh0JykpO1xcbiAgICAgICAgXFxuICAgICAgICB2YXIgYXJyYXkgPSB0ZXh0cy5zb3J0KChhLCBiKSA9PiB7XFxuICAgICAgICAgICAgY29uc3QgaW5kZXhBID0gc29ydE9yZGVyLmluZGV4T2YoYS5zdWJzdHIoMCwgMikpO1xcbiAgICAgICAgICAgIGNvbnN0IGluZGV4QiA9IHNvcnRPcmRlci5pbmRleE9mKGIuc3Vic3RyKDAsIDIpKTtcXG4gICAgICAgICAgICByZXR1cm4gaW5kZXhBIC0gaW5kZXhCO1xcbiAgICAgICAgfSlcXG4gICAgICAgIHZhciByZWdleCA9IG5ldyBSZWdFeHAoJygnICsgc29ydE9yZGVyLmpvaW4oJ3wnKSArICcpJyk7XFxuICAgICAgICBhcnJheSA9IGFycmF5LmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QoaXRlbSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vbG9nKGFycmF5KVxcbiAgICAgICAgXFxuICAgICAgICAvL2FycmF5ID0gc29ydE9yZGVyLmxlbmd0aD09MD9hcnJheTp0aGlzLnN0ckNvbnZlcnQoYXJyYXkpO1xcbiAgICAgICAgYXJyYXkgPSB0aGlzLnN0ckNvbnZlcnQoYXJyYXkpO1xcbiAgICAgICAgXFxuICAgICAgICBpZihhcnJheS5sZW5ndGg+Nil7XFxuICAgICAgICAgICAgYXJyYXk9YXJyYXkuc2xpY2UoMCw2KTtcXG4gICAgICAgIH1cXG4gICAgICAgIFxcbiAgICAgICAgdmFyIHRpdGxlcyA9IFtdO1xcbiAgICAgICAgdmFyIGRlc2NzID0gW107XFxuICAgICAgICBcXG4gICAgICAgIHN3aXRjaCAoYXJyYXkubGVuZ3RoKSB7XFxuICAgICAgICAgICAgY2FzZSA0OlxcbiAgICAgICAgICAgIGNhc2UgNTpcXG4gICAgICAgICAgICAgICAgdGl0bGVzID0gYXJyYXkuc2xpY2UoMCwgMik7XFxuICAgICAgICAgICAgICAgIGRlc2NzID0gYXJyYXkuc2xpY2UoMik7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGNhc2UgNjpcXG4gICAgICAgICAgICAgICAgdGl0bGVzID0gYXJyYXkuc2xpY2UoMCwgMyk7XFxuICAgICAgICAgICAgICAgIGRlc2NzID0gYXJyYXkuc2xpY2UoMyk7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ2VyX2luZm8nLHtcXG4gICAgICAgICAgZGVzYzpkZXNjcy5qb2luKCdcXFxcbicpLFxcbiAgICAgICAgICBpbWc6aW1nLFxcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgLy90aXRsZTogdGl0bGVzWzBdICsgJ1xcXFxuJyArIHRoaXMuc21hbGwodGl0bGVzLnNsaWNlKDEsIDMpLmpvaW4oJ1xcXFxuJykpLFxcbiAgICAgdGl0bGU6ICB0aGlzLnNtYWxsKHBkZmgoaHRtbCwgJy52aWRlby1pbmZvLWF1eCYmVGV4dCcpICsgJ1xcXFxuJyArIHBkZmgoaHRtbCwgJy52aWRlby1pbmZvLWl0ZW1zOmNvbnRhaW5zKOabtOaWsCkmJlRleHQnKSwncmVkJyksXFxuICAgICAgICAgICBkZXNjOiB0aGlzLnNtYWxsKHBkZmgoaHRtbCwgJy52aWRlby1pbmZvLWl0ZW1zOmNvbnRhaW5zKOWvvOa8lCkmJlRleHQnKSArICdcXFxcbicgKyBwZGZoKGh0bWwsICcudmlkZW8taW5mby1pdGVtczpjb250YWlucyjkuLvmvJQpJiZUZXh0JyksJyNGRjdGMDAnKSxcXG4gICAgIC8vZGVzYzogdGhpcy5zbWFsbChwZGZoKGh0bWwsICcuZGF0YTpjb250YWlucyjmm7TmlrApJiZUZXh0JyksJyNGRjdGMDAnKSxcXG4gICAgICAgICAgICBwaWNfdXJsOiBpbWcgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICB1cmw6IE1ZX1VSTCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInLFxcbiAgICAgICAgfSlcXG4gICAgICAgIGlmIChvYmouZGVzYyAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICB0aGlzLnNldERlc2Mob2JqLmRlc2MpO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBzZXRDdXN0b206IGZ1bmN0aW9uKG9iaiwgaW1nKSB7XFxuICAgICAgICB2YXIgYXJyYXkgPSBbXTtcXG4gICAgICAgIGlmIChvYmouY29uc3RydWN0b3IgPT0gQXJyYXkpIHtcXG4gICAgICAgICAgICBhcnJheSA9IG9iajtcXG4gICAgICAgIH1cXG4gICAgICAgIGFycmF5ID0gdGhpcy5zdHJDb252ZXJ0KGFycmF5KTtcXG4gICAgICAgIHZhciB0aXRsZXMgPSBbXTtcXG4gICAgICAgIHZhciBkZXNjcyA9IFtdO1xcbiAgICAgICAgc3dpdGNoIChhcnJheS5sZW5ndGgpIHtcXG4gICAgICAgICAgICBjYXNlIDQ6XFxuICAgICAgICAgICAgY2FzZSA1OlxcbiAgICAgICAgICAgICAgICB0aXRsZXMgPSBhcnJheS5zbGljZSgwLCAyKTtcXG4gICAgICAgICAgICAgICAgZGVzY3MgPSBhcnJheS5zbGljZSgyKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSA2OlxcbiAgICAgICAgICAgICAgICB0aXRsZXMgPSBhcnJheS5zbGljZSgwLCAzKTtcXG4gICAgICAgICAgICAgICAgZGVzY3MgPSBhcnJheS5zbGljZSgzKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignZXJfaW5mbycse1xcbiAgICAgICAgICBkZXNjOmRlc2NzLmpvaW4oJ1xcXFxuJyksXFxuICAgICAgICAgIGltZzppbWcsXFxuICAgICAgICB9KVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGVzWzBdICsgJ1xcXFxuJyArIHRoaXMuc21hbGwodGl0bGVzLnNsaWNlKDEsIDMpLmpvaW4oJ1xcXFxuJykpLFxcbiAgICAgICAgICAgIGRlc2M6IHRoaXMuc21hbGwoZGVzY3Muam9pbignXFxcXG4nKSksXFxuICAgICAgICAgICAgcGljX3VybDogaW1nICsgJ0BSZWZlcmVyPScsXFxuICAgICAgICAgICAgdXJsOiBNWV9VUkwsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJyxcXG4gICAgICAgIH0pXFxuICAgIH0sXFxuICAgIGlzQ29sb3I6ZnVuY3Rpb24odGV4dCkge1xcbiAgICAgY29uc3QgcmVnZXggPSAvXiMoWzAtOUEtRmEtZl17M318WzAtOUEtRmEtZl17Nn0pJHxeKFthLXpdKykkL2k7XFxuICAgICByZXR1cm4gcmVnZXgudGVzdCh0ZXh0KTtcXG4gICAgfSxcXG4gICAgZ2V0UHJlc2V0OmZ1bmN0aW9uKGN1c3RvbSl7XFxuICAgICAgaWYodHlwZW9mIGN1c3RvbWRhdGE9PSdvYmplY3QnJiYhY3VzdG9tKXtcXG4gICAgICAgIGN1c3RvbT1jdXN0b21kYXRhO1xcbiAgICAgIH1lbHNle1xcbiAgICAgICAgY3VzdG9tPWN1c3RvbT9jdXN0b206e31cXG4gICAgICB9XFxuICAgICAgY3VzdG9tLuato+W6j+minOiJsj0oY3VzdG9tLuato+W6j+minOiJsiYmdGhpcy5pc0NvbG9yKGN1c3RvbS7mraPluo/popzoibIpKT9jdXN0b20u5q2j5bqP6aKc6ImyOicjMUFBRDE5JztcXG4gICAgICBjdXN0b20u6YCG5bqP6aKc6ImyPShjdXN0b20u6YCG5bqP6aKc6ImyJiZ0aGlzLmlzQ29sb3IoY3VzdG9tLumAhuW6j+minOiJsikpP2N1c3RvbS7pgIbluo/popzoibI6JyNGRjAwMDAnO1xcbiAgICAgIGN1c3RvbS7lm77moIc9Y3VzdG9tLuWbvuaghz9jdXN0b20u5Zu+5qCHOidodHRwczovL2kyLjEwMDAyNC54eXovMjAyMy8wNi8xMC9oNHo2Mjcud2VicCc7XFxuICAgICAgY3VzdG9tLue6v+i3r+mAieS4rT1jdXN0b20u57q/6Lev6YCJ5LitP2N1c3RvbS7nur/ot6/pgInkuK06JyMwMDhCOEInO1xcbiAgICAgIHJldHVybiBjdXN0b207XFxuICAgIH0sXFxuICAgIGNyZWF0ZVBMaXN0OiBmdW5jdGlvbih0YWJzLHZhcmksc2hzb3J0LGN1c3RvbSl7XFxuICAgICAgdmFyaT1cXFwiZXJfXFxcIit2YXJpO1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFicy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIHZhciB1cmwgPSAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh2YXJpLCBzaHNvcnQsIGksbGluZWMpID0+IHtcXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgdmFyIGxpc3RzID0gc3RvcmFnZTAuZ2V0TXlWYXIoc2hzb3J0ICsgJ19saXN0JywgJ1tdJyk7XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgaWYoZ2V0TXlWYXIodmFyaSsnZm9sZCcsJzEnKT09JzAnKXtcXG4gICAgICAgICAgICAgICAgdmFyIGJ0bj1maW5kSXRlbShzaHNvcnQrJ19idXR0b24nKTtcXG4gICAgICAgICAgICAgICAgdmFyIGZvbGRzPVsnPGZvbnQgY29sb3I9XFxcIiNEM0QzRDNcXFwiPuKYtycsJzxmb250IGNvbG9yPVxcXCIjRkZBNTAwXFxcIj7imLAnXTtcXG4gICAgICAgICAgICAgICAgICB2YXIgcGxpc3QgPSBzdG9yYWdlMC5nZXRNeVZhcignZXJfcGxheWxpc3RzJywgJ3t9Jyk7XFxuICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgdmFyIGNvbCA9IHBsaXN0W3Noc29ydF0uY29sX3R5cGU7XFxuICAgICAgICAgICAgICAgICAgdmFyIGNscyA9IHBsaXN0W3Noc29ydF0uY2xzO1xcbiAgICAgICAgICAgICAgICAgIHZhciBwaWM9cGxpc3Rbc2hzb3J0XS5waWM7XFxuICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbShidG4uZXh0cmEuaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBidG4udGl0bGUucmVwbGFjZShmb2xkc1swXSwgZm9sZHNbMV0pLFxcbiAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgcHV0TXlWYXIodmFyaSsnZm9sZCcsJzEnKTtcXG4gICAgICAgICAgICAgIC8vcmV0dXJuICd0b2FzdDovL+WxleW8gOaJjeiDveaTjeS9nCc7XFxuICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBwbGlzdCA9IHN0b3JhZ2UwLmdldE15VmFyKCdlcl9wbGF5bGlzdHMnLCAne30nKTtcXG4gICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbCA9IHBsaXN0W3Noc29ydF0uY29sX3R5cGU7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgY2xzID0gcGxpc3Rbc2hzb3J0XS5jbHM7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcGljPXBsaXN0W3Noc29ydF0ucGljO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKHZhcmksIGkpO1xcblxcbiAgICAgICAgICAgICAgICB2YXIgeGxpc3Q9bGlzdHNbaV07XFxuICAgICAgICAgICAgICAgIGlmKCQuZnVuYyE9dW5kZWZpbmVkJiYkLmZ1bmMuY29uc3RydWN0b3I9PUZ1bmN0aW9uKXtcXG4gICAgICAgICAgICAgICAgICAgIHhsaXN0PSQuZnVuYyhpKTtcXG4gICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoc2hzb3J0ICsgJ19saXN0JywgeGxpc3QpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBwbGF5cyA9IHhsaXN0Lm1hcCh4ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHgudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB4LnVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpYzpwaWMsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHgudXJsLnJlcGxhY2UoL0BsYXp5UnVsZVtcXFxcc1xcXFxTXSsvZywgJycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IGNscyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcihzaHNvcnQgKyAnX3NvcnQnKSA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHBsYXlzLnJldmVyc2UoKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgcGNmZz1zdG9yYWdlMC5nZXRNeVZhcihzaHNvcnQrJ19wdXNoY2ZnJywne30nKTtcXG4gICAgICAgICAgICAgICAgaWYocGNmZ1sn5Y2V5o6oJ10pe1xcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oc2hzb3J0KydfcHVzaCcse1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6cGNmZ1snb2JqJ11bJ+WNleaOqCddWzBdXFxuICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICBwY2ZnWyfljZXmjqgnXT1mYWxzZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZihwY2ZnWyfpgInmjqgnXSl7XFxuICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbShzaHNvcnQrJ19wdXNocycse1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6cGNmZ1snb2JqJ11bJ+mAieaOqCddWzBdXFxuICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICBwY2ZnWyfpgInmjqgnXT1mYWxzZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihzaHNvcnQrJ19wdXNoY2ZnJyxwY2ZnKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKHNoc29ydCk7XFxuICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcihzaHNvcnQgKyAnX2xpbmUnLCBwbGF5cyk7XFxuXFxuICAgICAgICAgICAgICAgIHZhciB0YWJ4ID0gZmluZEl0ZW1zQnlDbHMoc2hzb3J0ICsgJ190YWInKTtcXG4gICAgICAgICAgICAgICAgdGFieC5mb3JFYWNoKCh4LCBpaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0geC50aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09IGlpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh4LmV4dHJhLmlkLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZS5yZXBsYWNlKC8jKFxcXFx3Kyk/L2csIGxpbmVjKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHguZXh0cmEuaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLnJlcGxhY2UoLyMoXFxcXHcrKT8vZywgJyMnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5YiH5o2i5oiQ5Yqf77yBJztcXG4gICAgICAgICAgICB9LCB2YXJpLCBzaHNvcnQsIGksY3VzdG9tLue6v+i3r+mAieS4rSlcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAoZ2V0TXlWYXIodmFyaSwgJzAnKSA9PSBpID8gdGFic1tpXS5mb250Y29sb3IoY3VzdG9tLue6v+i3r+mAieS4rSkgOiB0YWJzW2ldLmZvbnRjb2xvcignIycpKSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IHNoc29ydCArICdfdGFiJyxcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBzaHNvcnQgKyAnX3RhYl8nICsgaSxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOidibGFua19ibG9jaycsIC8vJ2JsYW5rX2Jsb2NrJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogc2hzb3J0ICsgJ19saW5lJyxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9LFxcbiAgICBwdXNoVGFiOmZ1bmN0aW9uKHZhcmksc2hzb3J0KXtcXG4gICAgICBhZGRMaXN0ZW5lcignb25SZWZyZXNoJywgJC50b1N0cmluZygoc2hzb3J0KSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKHNoc29ydCsnX3B1c2hjZmcnKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoc2hzb3J0KydfZHVvc2VsZWN0Jyk7XFxuICAgICAgICB9LCBzaHNvcnQpKVxcbiAgICAgICB2YXIgcG9iaj17XFxuICAgICAgICfljZXmjqgnOlsn4qa/5Y2V5o6oJywnPGI+4qa/5Y2V5o6oPC9iPicuZm9udGNvbG9yKCcjMDBGQTlBJyldLFxcbiAgICAgICAn6YCJ5o6oJzpbJ+KYkemAieaOqCcsJzxiPuKYkemAieaOqDwvYj4nLmZvbnRjb2xvcignIzQ2ODJCNCcpXSxcXG4gICAgICB9XFxuICAgICAgXFxuICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6J+KMmCcsXFxuICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgdXJsOidoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgIGNsczpzaHNvcnQrJ19wdXNodGFiJyxcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSx7XFxuICAgICAgICAgIHRpdGxlOnBvYmpbJ+WNleaOqCddWzBdLFxcbiAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaHNvcnQscG9iaix2YXJpKT0+e1xcbiAgICAgICAgICBpZihnZXRNeVZhcih2YXJpKydmb2xkJywnMScpPT0nMCcpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lsZXlvIDmiY3og73mk43kvZwnO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgICAgXFxuICAgICAgICAgIHZhciB0aXRsZXM9cG9ialsn5Y2V5o6oJ107XFxuICAgICAgICAgIHZhciBwY2ZnPXN0b3JhZ2UwLmdldE15VmFyKHNoc29ydCsnX3B1c2hjZmcnLCd7fScpO1xcbiAgICAgICAgICBwY2ZnWydvYmonXT1wb2JqO1xcbiAgICAgICAgICB2YXIg5Y2V5o6oPXBjZmdbJ+WNleaOqCddP3BjZmdbJ+WNleaOqCddOmZhbHNlO1xcbiAgICAgICAgICBcXG4gICAgICAgICAgaWYo5Y2V5o6oKXtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKHNoc29ydCsnX3B1c2gnLHtcXG4gICAgICAgICAgICAgIHRpdGxlOnRpdGxlc1swXSxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHBjZmdbJ+WNleaOqCddPWZhbHNlO1xcbiAgICAgICAgICAgIHBjZmdbJ3BsYXlsaXN0J10ubWFwKCh4KT0+e1xcbiAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oeC5leHRyYS5pZCx7XFxuICAgICAgICAgICAgICAgICB1cmw6eC51cmwsXFxuICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKHNoc29ydCsnX3B1c2gnLHtcXG4gICAgICAgICAgICAgIHRpdGxlOifigJzigJzigJ3igJ0nK3RpdGxlc1sxXSxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oc2hzb3J0KydfcHVzaHMnLHtcXG4gICAgICAgICAgICAgIHRpdGxlOnBvYmpbJ+mAieaOqCddWzBdLFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgcGNmZ1sn5Y2V5o6oJ109dHJ1ZTtcXG4gICAgICAgICAgICBwY2ZnWyfpgInmjqgnXT1mYWxzZTtcXG4gICAgICAgICAgICB2YXIgcGxheWxpc3Q9ZmluZEl0ZW1zQnlDbHMoc2hzb3J0KTtcXG4gICAgICAgICAgICBwY2ZnWydwbGF5bGlzdCddPXBsYXlsaXN0O1xcbiAgICAgICAgICAgIGZpbmRJdGVtc0J5Q2xzKHNoc29ydCkubWFwKHg9PntcXG4gICAgICAgICAgICAgIHZhciBkcHVzaD17XFxuICAgICAgICAgICAgICAgIG5hbWU6Z2V0UGFnZVRpdGxlKCksXFxuICAgICAgICAgICAgICAgIHVybDp4LnRpdGxlKyckJyt4LmV4dHJhLmlkXFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB1cGRhdGVJdGVtKHguZXh0cmEuaWQse1xcbiAgICAgICAgICAgICAgICB1cmw6JCgnJykubGF6eVJ1bGUoKGRwdXNoKT0+e1xcbiAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD9ydWxlPVhZUeaOqOmAgSZwdXNodXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoZHB1c2gpKTtcXG4gICAgICAgICAgICAgICAgfSxkcHVzaClcXG4gICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihzaHNvcnQrJ19wdXNoY2ZnJyxwY2ZnKTtcXG4gICAgICAgICAgcmV0dXJuICd0b2FzdDovLycrKOWNleaOqD8n5Y2V5o6o5byA5ZCvJzon5Y2V5o6o5YWz6ZetJyk7XFxuICAgICAgICAgIH0sc2hzb3J0LHBvYmosdmFyaSksXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICBpZDpzaHNvcnQrJ19wdXNoJyxcXG4gICAgICAgICAgICBjbHM6c2hzb3J0KydfcHVzaHRhYicsXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0se1xcbiAgICAgICAgICB0aXRsZTpwb2JqWyfpgInmjqgnXVswXSxcXG4gICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2hzb3J0LHBvYmosdmFyaSk9PntcXG4gICAgICAgICAgaWYoZ2V0TXlWYXIodmFyaSsnZm9sZCcsJzEnKT09JzAnKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bGV5byA5omN6IO95pON5L2cJztcXG4gICAgICAgICAgfVxcbiAgICAgICAgICB2YXIgdGl0bGVzPXBvYmpbJ+mAieaOqCddO1xcbiAgICAgICAgICB2YXIgcGNmZz1zdG9yYWdlMC5nZXRNeVZhcihzaHNvcnQrJ19wdXNoY2ZnJywne30nKTtcXG4gICAgICAgICAgcGNmZ1snb2JqJ109cG9iajtcXG4gICAgICAgICAgdmFyIOmAieaOqD1wY2ZnWyfpgInmjqgnXT9wY2ZnWyfpgInmjqgnXTpmYWxzZTtcXG4gICAgICAgICAgaWYo6YCJ5o6oKXtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKHNoc29ydCsnX3B1c2hzJyx7XFxuICAgICAgICAgICAgICB0aXRsZTp0aXRsZXNbMF0sXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBwY2ZnWyfpgInmjqgnXT1mYWxzZTtcXG4gICAgICAgICAgICBwY2ZnWydwbGF5bGlzdCddLm1hcCgoeCk9PntcXG4gICAgICAgICAgICAgICB1cGRhdGVJdGVtKHguZXh0cmEuaWQse1xcbiAgICAgICAgICAgICAgICAgdGl0bGU6eC50aXRsZSxcXG4gICAgICAgICAgICAgICAgIHVybDp4LnVybCxcXG4gICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgdXBkYXRlSXRlbShzaHNvcnQrJ19wdXNodG8nLCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+aOqOmAgeacrOmhtT0+VFZCb3gnLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoc2hzb3J0KydfZHVvc2VsZWN0Jyk7XFxuICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKHNoc29ydCsnX3B1c2hzJyx7XFxuICAgICAgICAgICAgICB0aXRsZTon4oCc4oCc4oCd4oCdJyt0aXRsZXNbMV0sXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBwY2ZnWyfpgInmjqgnXT10cnVlO1xcbiAgICAgICAgICAgIHBjZmdbJ+WNleaOqCddPWZhbHNlO1xcbiAgICAgICAgICAgIHZhciBwbGF5bGlzdD1maW5kSXRlbXNCeUNscyhzaHNvcnQpO1xcbiAgICAgICAgICAgIHBjZmdbJ3BsYXlsaXN0J109cGxheWxpc3Q7XFxuICAgICAgICAgICAgbGV0IElkcz1wbGF5bGlzdC5tYXAoaXQgPT4gaXQuZXh0cmEuaWQpO1xcbiAgICAgICAgICAgICAgICBJZHMuZm9yRWFjaCh4ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGZpbmRJdGVtKHgpLnRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh4LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkLm1zbSh0aXRsZSwgeCxzaHNvcnQpLFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oc2hzb3J0KydfcHVzaCcse1xcbiAgICAgICAgICAgICAgdGl0bGU6cG9ialsn5Y2V5o6oJ11bMF0sXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKHNoc29ydCsnX3B1c2h0bycsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5o6o6YCB6YCJ5LitPT5UVkJveCcsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoc2hzb3J0KydfcHVzaGNmZycscGNmZyk7XFxuICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nKyjpgInmjqg/J+mAieaOqOW8gOWQryc6J+mAieaOqOWFs+mXrScpO1xcbiAgICAgICAgICB9LHNoc29ydCxwb2JqLHZhcmkpLFxcbiAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgaWQ6c2hzb3J0KydfcHVzaHMnLFxcbiAgICAgICAgICAgIGNsczpzaHNvcnQrJ19wdXNodGFiJ1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LHtcXG4gICAgICAgICAgdGl0bGU6IFxcXCLmjqjpgIHmnKzpobU9PlRWQm94XFxcIixcXG4gICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2hzb3J0LHZhcmkpPT57XFxuICAgICAgICAgIHZhciBwY2ZnPXN0b3JhZ2UwLmdldE15VmFyKHNoc29ydCsnX3B1c2hjZmcnLCd7fScpO1xcbiAgICAgICAgICB2YXIg5Y2V5o6oPXBjZmdbJ+WNleaOqCddP3BjZmdbJ+WNleaOqCddOmZhbHNlO1xcbiAgICAgICAgICB2YXIg6YCJ5o6oPXBjZmdbJ+mAieaOqCddP3BjZmdbJ+mAieaOqCddOmZhbHNlO1xcbiAgICAgICAgICBpZigh5Y2V5o6oJiYh6YCJ5o6oKXtcXG4gICAgICAgICAgdmFyIHRhYnM9c3RvcmFnZTAuZ2V0TXlWYXIoc2hzb3J0KydfdGFicycsJ1tdJyk7XFxuICAgICAgICAgIHRyeXtcXG4gICAgICAgICAgdmFyIHBscz1zdG9yYWdlMC5nZXRNeVZhcihzaHNvcnQrJ19saXN0JywnW10nKS5tYXAobGkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaS5tYXAoaXRlbSA9PiBpdGVtLnRpdGxlICsgJyQnICsgaXRlbS51cmwucmVwbGFjZSgvQGxhenlSdWxlW1xcXFxzXFxcXFNdKy9nLCcnKSkuam9pbignIycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJyQkJCcpO1xcbiAgICAgICAgICB9Y2F0Y2h7XFxuICAgICAgICAgIHZhciBwbHM9c3RvcmFnZTAuZ2V0TXlWYXIoc2hzb3J0K1xcXCJfbGlzdFxcXCIsJ1tdJykubWFwKHggPT4geC50aXRsZSArIFxcXCIkXFxcIiArIHgudXJsKS5qb2luKFxcXCIjXFxcIik7XFxuICAgICAgICAgIHZhciB0YWJzPVt0YWJzW2dldE15VmFyKHZhcmksJzAnKV1dO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIC8qbG9nKHBscylcXG4gICAgICAgICAgbG9nKHRhYnMpKi9cXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZijpgInmjqgpe1xcbiAgICAgICAgICB2YXIgcGxzPXN0b3JhZ2UwLmdldE15VmFyKHNoc29ydCtcXFwiX2R1b3NlbGVjdFxcXCIsJ1tdJykubWFwKHggPT4geC50aXRsZSArIFxcXCIkXFxcIiArIHgudXJsKS5qb2luKFxcXCIjXFxcIik7XFxuICAgICAgICAgIGlmKHBscy5sZW5ndGg9PTApe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/pgInmi6nkuLrnqbonO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHZhciB0YWJzPVsn5pKt5pS+5YiX6KGoJ107XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgXFxuICAgICAgICAgIHZhciBpbmZvPXN0b3JhZ2UwLmdldE15VmFyKCdlcl9pbmZvJywne30nKTtcXG4gICAgICAgICAgdmFyIGRlc2MgPWluZm9bJ2Rlc2MnXTtcXG4gICAgICAgICAgdmFyIOaOqOmAgSA9IHtcXG4gICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogZ2V0UGFnZVRpdGxlKCksXFxuICAgICAgICAgICAgICAgICBcXFwiY29udGVudFxcXCI6IGRlc2N8fCcnLFxcbiAgICAgICAgICAgICAgICAgXFxcInBpY1xcXCI6IGluZm9bJ2ltZyddIHx8ICcnLFxcbiAgICAgICAgICAgICAgICAgXFxcImZyb21cXFwiOiB0YWJzLmpvaW4oJyQkJCcpLFxcbiAgICAgICAgICAgICAgICAgXFxcInVybFxcXCI6IHBscyxcXG4gICAgICAgICAgIH1cXG4gICAgICAgICAgLy9sb2co5o6o6YCBKVxcbiAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcHVzaD9ydWxlPVhZUeaOqOmAgSZwdXNodXJsPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnko5o6o6YCBKSlcXG4gICAgICAgICAgfSxzaHNvcnQsdmFyaSksXFxuICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICBpZDpzaHNvcnQrJ19wdXNodG8nLFxcbiAgICAgICAgICAgIGNsczpzaHNvcnQrJ19wdXNodGFiJ1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LHtcXG4gICAgICAgICAgY29sX3R5cGU6J2JsYW5rX2Jsb2NrJyxcXG4gICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgIGNsczpzaHNvcnQrJ19wdXNodGFiJyxcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgc2V0TG9uZ2NsaWNrOmZ1bmN0aW9uKHNoc29ydCxjdXN0b20pe1xcbiAgICAgIHJldHVybiBbe3RpdGxlOifmoLflvI/wn46oJyxqczogJC50b1N0cmluZygoc2hzb3J0KT0+e1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFsbF9jb2xzID0gWycnXS5jb25jYXQoZ2V0Q29sVHlwZXMoKSk7XFxuICAgICAgICAgICAgICAgICAgICBhbGxfY29scz1hbGxfY29scy5maWx0ZXIoeD0+XFxuICAgICAgICAgICAgICAgICAgICAgIC8odGV4dF98ZmxleCkuKi8udGVzdCh4KSYmeCE9J3RleHRfaWNvbicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhhbGxfY29scylcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbHMgPSBzdG9yYWdlMC5nZXRNeVZhcignZXJfcGxheWxpc3RzJywne30nKVxcbiAgICAgICAgICAgICAgICAgICAgfHwgJyc7XFxuICAgICAgICAgICAgICAgICAgICBpZihjbHNbc2hzb3J0XSE9Jycpe1xcbiAgICAgICAgICAgICAgICAgICAgICBjb2w9Y2xzW3Noc29ydF0uY29sX3R5cGU7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBsZXQg5oyJ6ZKu5qC35byPID0gYWxsX2NvbHMubWFwKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCA9PT0gY29sID8gJ/CfkYknICsgaXQ6IGl0O1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGlwcyA9ICfor7fpgInmi6npgInpm4bmjInpkq7moLflvI8nO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQo5oyJ6ZKu5qC35byPLCAyLCB0aXBzKS5zZWxlY3QoKHNoc29ydCxjbHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC/wn5GJL2csICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvKnN0b3JhZ2UwLnNldEl0ZW0oJ+aMiemSruagt+W8jycsIGlucHV0KTsqL1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvbGRJZHMgPSAoZmluZEl0ZW1zQnlDbHMoc2hzb3J0KSB8fCBbXSkubWFwKGl0PT5pdC5leHRyYS5pZCk7IC8v6ICB5YWD57SgaWRzXFxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkSWRzLmZvckVhY2goeD0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh4LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogaW5wdXRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIh+aNoumAiembhuaMiemSruagt+W8j+S4ujonICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICB9LHNoc29ydCxjbHMpO1xcbiAgICAgICAgICAgICAgICB9LHNoc29ydCxjdXN0b20pfV1cXG4gICAgfSxcXG4gICAgc2V0VGFiczogZnVuY3Rpb24odGFicywgdmFyaSwgc2hzb3J0LHBhcnNlKSB7XFxuICAgICAgICBsZXQgY3VzdG9tPXBhcnNlLuiHquWumuS5iTtcXG4gICAgICAgIGN1c3RvbSA9dGhpcy5nZXRQcmVzZXQoY3VzdG9tKTtcXG4gICAgICAgIHNoc29ydCA9IHNoc29ydCA/IHNoc29ydCA6ICdzaHNvcnQnO1xcbiAgICAgICAgdmFyIHRpdGxlID0gKGdldE15VmFyKHNoc29ydCArICdfc29ydCcsICcwJykgPT0gJzEnKSA/ICc8Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICcrY3VzdG9tLumAhuW6j+minOiJsisnXFxcIj7pgIbluo88L3NwYW4+PC9iPicgOiAnPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiAnK2N1c3RvbS7mraPluo/popzoibIrJ1xcXCI+5q2j5bqPPC9zcGFuPjwvYj4nXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB2YXJpICsgJzonICsgdGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogJ+WFsScgKyBTdHJpbmcodGFicy5sZW5ndGgpLmZvbnRjb2xvcignIzQ2ODJCNCcpICsgJ+adoee6v+i3rycsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaHNvcnQsdmFyaSxjdXN0b20pID0+IHtcXG4gICAgICAgICAgICAgIGxldCBjb25mID0gZ2V0TXlWYXIoc2hzb3J0ICsgJ19zb3J0JywgJzAnKTtcXG4gICAgICAgICAgICAgIGlmKGdldE15VmFyKCdlcl8nK3ZhcmkrJ2ZvbGQnLCcxJyk9PScwJyl7XFxuICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bGV5byA5omN6IO95pON5L2cJztcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGNsc2xpc3RzID0gZmluZEl0ZW1zQnlDbHMoc2hzb3J0KTtcXG4gICAgICAgICAgICAgICAgdmFyIG5ld2Nsc2xpc3QgPSAkLmRhdGFDb252ZXJ0KGNsc2xpc3RzKTtcXG4gICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICB2YXIgdGl0bGVzPVtgJHtjdXN0b20u5q2j5bqP6aKc6ImyfVxcXCI+5q2j5bqPYCxgJHtjdXN0b20u6YCG5bqP6aKc6ImyfVxcXCI+6YCG5bqPYF07XFxuICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhzaHNvcnQpO1xcbiAgICAgICAgICAgICAgICBuZXdjbHNsaXN0LnJldmVyc2UoKTtcXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHNoc29ydCArICdfbGluZScsIG5ld2Nsc2xpc3QpO1xcblxcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gZmluZEl0ZW0oc2hzb3J0ICsgJ19hdmF0YXInKVxcblxcbiAgICAgICAgICAgICAgICBpZiAoY29uZiA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oc2hzb3J0ICsgJ19hdmF0YXInLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG9iai50aXRsZS5yZXBsYWNlKHRpdGxlc1sxXSwgdGl0bGVzWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihzaHNvcnQgKyAnX3NvcnQnLCAnMCcpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbShzaHNvcnQgKyAnX2F2YXRhcicsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb2JqLnRpdGxlLnJlcGxhY2UodGl0bGVzWzBdLCB0aXRsZXNbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHNoc29ydCArICdfc29ydCcsICcxJyk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouaOkuW6j+aIkOWKnyc7XFxuICAgICAgICAgICAgfSwgc2hzb3J0LHZhcmksY3VzdG9tKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiBjdXN0b20u5Zu+5qCHICxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICBpZDpzaHNvcnQrJ19hdmF0YXInLFxcbiAgICAgICAgICAgICAgbG9uZ0NsaWNrOnRoaXMuc2V0TG9uZ2NsaWNrKHNoc29ydCksXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIHZhciDmipjlj6AgPSAn4oCc4oCc4oCd4oCdPGI+JyArICfimLcnLmZvbnRjb2xvcihcXFwiI0QzRDNEM1xcXCIpO1xcbiAgICAgICAgdmFyIOWxleW8gCA9ICfigJzigJzigJ3igJ08Yj4nICsgJ+KYsCcuZm9udGNvbG9yKFxcXCIjRkZBNTAwXFxcIik7XFxuICAgICAgICB2YXIgZm9sZG5hbWUgPSAnZXJfJyt2YXJpICsgJ2ZvbGQnO1xcbiAgICAgICAgdmFyICBmb2xkID0gZ2V0TXlWYXIoZm9sZG5hbWUsICcxJyk7XFxuICAgICAgICBpZih0eXBlb2YocGFyc2VbJ+aOqOmAgSddKSE9J3VuZGVmaW5lZCcmJnBhcnNlWyfmjqjpgIEnXSlcXG4gICAgICAgIHRoaXMucHVzaFRhYignZXJfJyt2YXJpLHNoc29ydCk7XFxuICAgICAgICBcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGZvbGQgPT09ICcwJyA/IOaKmOWPoCA6IOWxleW8gCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZm9sZG5hbWUsc2hzb3J0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciAgZm9sZCA9IGdldE15VmFyKGZvbGRuYW1lLCAnMScpO1xcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gZmluZEl0ZW0oc2hzb3J0KydfbGluZScpO1xcbiAgICAgICAgICAgICAgICB2YXIgYnRuPWZpbmRJdGVtKHNoc29ydCsnX2J1dHRvbicpO1xcbiAgICAgICAgICAgICAgICB2YXIgZm9sZHM9Wyc8Zm9udCBjb2xvcj1cXFwiI0QzRDNEM1xcXCI+4pi3JywnPGZvbnQgY29sb3I9XFxcIiNGRkE1MDBcXFwiPuKYsCddO1xcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgaWYoZm9sZD09JzAnKXtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoZm9sZG5hbWUsICAnMScpO1xcbiAgICAgICAgICAgICAgICB2YXIgY3MgPSBzdG9yYWdlMC5nZXRNeVZhcihzaHNvcnQgKyAnX2NscycpO1xcbiAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIob2JqLmV4dHJhLmlkLCBjcyk7XFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oYnRuLmV4dHJhLmlkLCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYnRuLnRpdGxlLnJlcGxhY2UoZm9sZHNbMF0sIGZvbGRzWzFdKSxcXG4gICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmKGZvbGQ9PScxJyl7XFxuICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoZm9sZG5hbWUsICAnMCcpO1xcbiAgICAgICAgICAgICAgICB2YXIgcGNscyA9IGZpbmRJdGVtc0J5Q2xzKHNoc29ydCk7XFxuICAgICAgICAgICAgICAgIHZhciBjeCA9ICQuZGF0YUNvbnZlcnQocGNscyk7XFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKHNoc29ydCArICdfY2xzJywgY3gpO1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoc2hzb3J0KTtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbShidG4uZXh0cmEuaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBidG4udGl0bGUucmVwbGFjZShmb2xkc1sxXSwgZm9sZHNbMF0pLFxcbiAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJyArIChmb2xkID09PSAnMScgPyAn5pS26LW3JyA6ICflsZXlvIAnKTtcXG4gICAgICAgICAgICB9LCBmb2xkbmFtZSxzaHNvcnQpLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBzaHNvcnQgKyAnX2J1dHRvbicsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIHRoaXMuY3JlYXRlUExpc3QodGFicyx2YXJpLHNoc29ydCxjdXN0b20pO1xcbiAgICB9LFxcbiAgICBzZXRUYWJzMjogZnVuY3Rpb24odGFicywgdmFyaSwgc2hzb3J0LHBhcnNlLGV4cCkge1xcbiAgICAgICAgbGV0IGN1c3RvbT1wYXJzZS7oh6rlrprkuYk7XFxuICAgICAgICBjdXN0b20gPXRoaXMuZ2V0UHJlc2V0KGN1c3RvbSk7XFxuICAgICAgICBcXG4gICAgICAgIHNoc29ydCA9IHNoc29ydCA/IHNoc29ydCA6ICdzaHNvcnQnO1xcbiAgICAgICAgdmFyIHRpdGxlID0gKGdldE15VmFyKHNoc29ydCArICdfc29ydCcsICcwJykgPT0gJzEnKSA/ICc8Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6JytjdXN0b20u6YCG5bqP6aKc6ImyKydcXFwiPumAhuW6jzwvc3Bhbj48L2I+JyA6ICc8Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6JytjdXN0b20u5q2j5bqP6aKc6ImyKydcXFwiPuato+W6jzwvc3Bhbj48L2I+J1xcbiAgICAgIFxcbiAgICAgICAgdmFyIOaKmOWPoCA9ICc8Yj7mipjlj6AnICsgJ+KYtycuZm9udGNvbG9yKFxcXCIjRDNEM0QzXFxcIik7XFxuICAgICAgICB2YXIg5bGV5byAID0gJzxiPuWxleW8gCcgKyAn4piwJy5mb250Y29sb3IoXFxcIiNGRkE1MDBcXFwiKTtcXG4gICAgICAgIHZhciBmb2xkbmFtZSA9ICdlcl8nICsgdmFyaSArICdmb2xkJztcXG4gICAgICAgIHZhciBmb2xkID0gZ2V0TXlWYXIoZm9sZG5hbWUsICcxJyk7XFxuXFxuICAgICAgICB2YXIgdXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZm9sZG5hbWUsIHNoc29ydCxwdXNoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHBsID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ2VyX3BsYXlsaXN0cycsICd7fScpO1xcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhwbCkubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB2YXIgZm9sZCA9IGdldE15VmFyKGZvbGRuYW1lLCAnMScpO1xcbiAgICAgICAgICAgIHZhciBvYmogPSBmaW5kSXRlbShzaHNvcnQgKyAnX2F2YXRhcicpXFxuICAgICAgICAgICAgaWYgKGZvbGQgPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgIHZhciBiY2xzID0gZmluZEl0ZW0oc2hzb3J0ICsgJ19idXR0b24nKTtcXG4gICAgICAgICAgICAgICAgdmFyIHRjbHMgPSBmaW5kSXRlbXNCeUNscyhzaHNvcnQgKyAnX3RhYicpO1xcbiAgICAgICAgICAgICAgICB2YXIgbGNscyA9IGZpbmRJdGVtKHNoc29ydCArICdfbGluZScpO1xcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgdmFyIHBjbHMgPSBmaW5kSXRlbXNCeUNscyhzaHNvcnQpO1xcbiAgICAgICAgICAgICAgICB2YXIgY3MgPSBbYmNsc10uY29uY2F0KHRjbHMsIFtsY2xzXSwgcGNscyk7XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBpZihwdXNoKXtcXG4gICAgICAgICAgICAgICAgICB2YXIgcGNscz1maW5kSXRlbXNCeUNscyhzaHNvcnQrJ19wdXNodGFiJyk7XFxuICAgICAgICAgICAgICAgICAgY3M9cGNscy5jb25jYXQoY3MpO1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgIHZhciBjeCA9ICQuZGF0YUNvbnZlcnQoY3MpO1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihzaHNvcnQgKyAnX2NscycsIGN4KTtcXG4gICAgICAgICAgICAgICAgaWYocHVzaCl7XFxuICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKHNoc29ydCsnX3B1c2h0YWInKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKGJjbHMuZXh0cmEuaWQpO1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoc2hzb3J0ICsgJ190YWInKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShzaHNvcnQgKyAnX2xpbmUnKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKHNoc29ydCk7XFxuXFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0ob2JqLmV4dHJhLmlkLCB7XFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBvYmouZGVzYy5yZXBsYWNlKCflsZXlvIA8Zm9udCBjb2xvcj1cXFwiI0ZGQTUwMFxcXCI+4piwJywgJ+aKmOWPoDxmb250IGNvbG9yPVxcXCIjRDNEM0QzXFxcIj7imLcnKSxcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGZvbGQgPT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgIHZhciBjcyA9IHN0b3JhZ2UwLmdldE15VmFyKHNoc29ydCArICdfY2xzJyk7XFxuICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcihzaHNvcnQgKyAnX2F2YXRhcicsIGNzKTtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbShvYmouZXh0cmEuaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IG9iai5kZXNjLnJlcGxhY2UoJ+aKmOWPoDxmb250IGNvbG9yPVxcXCIjRDNEM0QzXFxcIj7imLcnLCAn5bGV5byAPGZvbnQgY29sb3I9XFxcIiNGRkE1MDBcXFwiPuKYsCcpLFxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBwdXRNeVZhcihmb2xkbmFtZSwgZm9sZCA9PT0gJzEnID8gJzAnIDogJzEnKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJyArIChmb2xkID09PSAnMScgPyAn5pS26LW3JyA6ICflsZXlvIAnKTtcXG4gICAgICAgIH0sIGZvbGRuYW1lLCBzaHNvcnQsKHBhcnNlWyfmjqjpgIEnXT90cnVlOmZhbHNlKSk7XFxuICAgICAgICB2YXIgZGVzYyA9IChmb2xkID09PSAnMCcgPyDmipjlj6AgOiDlsZXlvIApICsgJ1xcXFx0JztcXG4gICAgICAgIFxcbiAgICAgICAgaWYoZXhwLmxlbmd0aD09MSl7XFxuICAgICAgICAgICAgdXJsPSdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICBkZXNjPScnO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogdmFyaSArICc6XFxcXHRcXFxcdCcgKyAn5YWxJyArIFN0cmluZyh0YWJzLmxlbmd0aCkuZm9udGNvbG9yKCcjNDY4MkI0JykgKyAn5p2h57q/6LevJyxcXG4gICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICBpbWc6IGN1c3RvbS7lm77moIcsXFxuICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IHNoc29ydCArICdfYXZhdGFyJyxcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOnRoaXMuc2V0TG9uZ2NsaWNrKHNoc29ydCksXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIGlmKHR5cGVvZihwYXJzZVsn5o6o6YCBJ10pIT0ndW5kZWZpbmVkJyYmcGFyc2VbJ+aOqOmAgSddKVxcbiAgICAgICAgdGhpcy5wdXNoVGFiKCdlcl8nK3Zhcmksc2hzb3J0KTtcXG4gICAgICAgIFxcbiAgICAgICAgaWYgKGZvbGQgPT0gJzAnKSB7XFxuICAgICAgICAgICAgcmV0dXJuXFxuICAgICAgICB9XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArIHRpdGxlLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodmFyaSwgc2hzb3J0LGN1c3RvbSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgY29uZiA9IGdldE15VmFyKHNoc29ydCArICdfc29ydCcsICcwJyk7XFxuICAgICAgICAgICAgICAgIHZhciBjbHNsaXN0cyA9IGZpbmRJdGVtc0J5Q2xzKHNoc29ydCk7XFxuICAgICAgICAgICAgICAgIHZhciBuZXdjbHNsaXN0ID0gJC5kYXRhQ29udmVydChjbHNsaXN0cyk7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhzaHNvcnQpO1xcbiAgICAgICAgICAgICAgICBuZXdjbHNsaXN0LnJldmVyc2UoKTtcXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHNoc29ydCArICdfbGluZScsIG5ld2Nsc2xpc3QpO1xcblxcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gZmluZEl0ZW0oc2hzb3J0ICsgJ19idXR0b24nKVxcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGVzPVtgJHtjdXN0b20u5q2j5bqP6aKc6ImyfVxcXCI+5q2j5bqPYCxgJHtjdXN0b20u6YCG5bqP6aKc6ImyfVxcXCI+6YCG5bqPYF07XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBpZiAoY29uZiA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oc2hzb3J0ICsgJ19idXR0b24nLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG9iai50aXRsZS5yZXBsYWNlKHRpdGxlc1sxXSwgdGl0bGVzWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihzaHNvcnQgKyAnX3NvcnQnLCAnMCcpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbShzaHNvcnQgKyAnX2J1dHRvbicsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb2JqLnRpdGxlLnJlcGxhY2UodGl0bGVzWzBdLCB0aXRsZXNbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHNoc29ydCArICdfc29ydCcsICcxJyk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy9yZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLmjpLluo/miJDlip8nXFxuICAgICAgICAgICAgfSwgdmFyaSwgc2hzb3J0LGN1c3RvbSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogc2hzb3J0ICsgJ19idXR0b24nLFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICB0aGlzLmNyZWF0ZVBMaXN0KHRhYnMsdmFyaSxzaHNvcnQsY3VzdG9tKTtcXG4gICAgfSxcXG4gICAgc2V0TGlzdHM6IGZ1bmN0aW9uKGxpc3RzLCBpbmRleCwgc2hzb3J0LHBhcnNlKSB7XFxuXFxuICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihzaHNvcnQgKyAnX2xpc3QnLCBsaXN0cyk7XFxuICAgICAgICBcXG4gICAgICAgIHBhcnNlPXBhcnNlP3BhcnNlOnt9O1xcbiAgICAgICAgdmFyIOagt+W8jz1wYXJzZS7moLflvI8/cGFyc2Uu5qC35byPOicnO1xcbiAgICAgICAgdmFyIOWbvuaghz1wYXJzZS7lm77moIc/cGFyc2Uu5Zu+5qCHOidodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21vdmllLzEzLnN2Zyc7XFxuICAgICAgICB2YXIgYWpheD1wYXJzZS5BamF4P3BhcnNlLkFqYXg6ZmFsc2U7XFxuXFxuICAgICAgICBzaHNvcnQgPSBzaHNvcnQgPyBzaHNvcnQgOiAnc2hzb3J0JztcXG5cXG4gICAgICAgIGlmKGFqYXgpe1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gbGlzdHM7XFxuICAgICAgICAgICAgaWYgKGdldE15VmFyKHNoc29ydCArICdfc29ydCcpID09ICcxJyAmJiBsaXN0cy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgIGxpc3QgPSBsaXN0cy5yZXZlcnNlKCk7XFxuICAgICAgICAgICB9XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICB2YXIgbGlzdCA9IGxpc3RzW2luZGV4XTtcXG4gICAgICAgICAgICBpZiAoZ2V0TXlWYXIoc2hzb3J0ICsgJ19zb3J0JykgPT0gJzEnICYmIGxpc3RzLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGxpc3RzW2luZGV4XS5yZXZlcnNlKCk7XFxuICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBcXG4gICAgICAgIGlmKOagt+W8jz09Jycpe1xcbiAgICAgICAgICDmoLflvI89bGlzdC5sZW5ndGggPiAzID8gJ3RleHRfNCcgOiAndGV4dF8yJ1xcbiAgICAgICAgfVxcbiAgICAgICAgXFxuICAgICAgICBpZihsaXN0Lmxlbmd0aCA+IDApe1xcbiAgICAgICAgdmFyIHBsaXN0ID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ2VyX3BsYXlsaXN0cycsICd7fScpO1xcbiAgICAgICAgaWYoIXBsaXN0Lmhhc093blByb3BlcnR5KHNoc29ydCkpe1xcbiAgICAgICAgICAgICBwbGlzdFtzaHNvcnRdPXt9O1xcbiAgICAgICAgfVxcbiAgICAgICAgcGxpc3Rbc2hzb3J0XVsnY2xzJ109c2hzb3J0O1xcbiAgICAgICAgcGxpc3Rbc2hzb3J0XVsnY29sX3R5cGUnXT3moLflvI87XFxuICAgICAgICBwbGlzdFtzaHNvcnRdWydwaWMnXT3lm77moIc7XFxuICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignZXJfcGxheWxpc3RzJywgcGxpc3QpO1xcbiAgICAgICAgfSAgIFxcbiAgICAgICAgXFxuICAgICAgICBcXG4gICAgICAgIGZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0W2pdLnRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6IGxpc3Rbal0udXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTog5qC35byPLFxcbiAgICAgICAgICAgICAgICBwaWM65Zu+5qCHLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3Rbal0udXJsLnJlcGxhY2UoL0BsYXp5UnVsZVtcXFxcc1xcXFxTXSsvZywgJycpLFxcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBzaHNvcnQsXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgZ2V0VGFiczogZnVuY3Rpb24ocGFyc2UpIHtcXG4gICAgICAgIHZhciB0YWJzID0gW107XFxuICAgICAgICB2YXIgYXJ0cyA9IHBkZmEoaHRtbCwgcGFyc2Uu57q/6LevKTtcXG4gICAgICAgIHZhciDnur/ot6/lkI0gPSBwYXJzZS7nur/ot6/lkI3np7A7XFxuICAgICAgICB2YXIg5pu/5o2i5Ye95pWwID0gJyc7XFxuICAgICAgICBpZiAocGFyc2Uu57q/6Lev5ZCN56ewLmluY2x1ZGVzKCdAQCcpKSB7XFxuICAgICAgICAgICAg57q/6Lev5ZCNID0gcGFyc2Uu57q/6Lev5ZCN56ewLnNwbGl0KCdAQCcpWzBdO1xcbiAgICAgICAgICAgIOabv+aNouWHveaVsCA9IHBhcnNlLue6v+i3r+WQjeensC5zcGxpdCgnQEAnKVsxXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAodmFyIGkgaW4gYXJ0cykge1xcbiAgICAgICAgICAgIHZhciBsaW5lbmFtZSA9IHBkZmgoYXJ0c1tpXSwg57q/6Lev5ZCNKTtcXG4gICAgICAgICAgICBpZiAo5pu/5o2i5Ye95pWwICE9ICcnKSB7XFxuICAgICAgICAgICAgICAgIGxpbmVuYW1lID0gZXZhbCgnbGluZW5hbWUnICsg5pu/5o2i5Ye95pWwKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGFicy5wdXNoKGxpbmVuYW1lKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0YWJzO1xcbiAgICB9LFxcbiAgICBnZXRMaXN0czogZnVuY3Rpb24ocGFyc2Usc2hzb3J0KSB7XFxuICAgICAgICBzaHNvcnQgPSBzaHNvcnQgPyBzaHNvcnQgOiAnc2hzb3J0JztcXG4gICAgICAgIHZhciBsaXN0cyA9IFtdO1xcbiAgICAgICAgdmFyIGNvbnRzID0gcGRmYShodG1sLCBwYXJzZS7pgInpm4YpO1xcbiAgICAgICAgdmFyIOmAiembhuWQjeensCA9IHBhcnNlLumAiembhuWQjeensCA/IHBhcnNlLumAiembhuWQjeensCA6ICdhJiZUZXh0JztcXG4gICAgICAgIHZhciDpgInpm4bpk77mjqUgPSBwYXJzZS7pgInpm4bpk77mjqUgPyBwYXJzZS7pgInpm4bpk77mjqUgOiAnYSYmaHJlZic7XFxuICAgICAgICB2YXIg6Kej5p6QID0gcGFyc2Uu6Kej5p6QID8gcGFyc2Uu6Kej5p6QIDogJyc7XFxuICAgICAgICB2YXIgdGVtcCA9IFtdO1xcbiAgICAgICAgZm9yICh2YXIgaSBpbiBjb250cykge1xcbiAgICAgICAgICAgIGlmIChwYXJzZS7pgInpm4bliJfooaggIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIGxpc3RzLnB1c2gocGRmYShjb250c1tpXSwgcGFyc2Uu6YCJ6ZuG5YiX6KGoKS5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKHgsIOmAiembhuWQjeensCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBwZCh4LCDpgInpm4bpk77mjqUpICsg6Kej5p6QLFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KSlcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gcGQoY29udHNbaV0sIOmAiembhumTvuaOpSk7XFxuICAgICAgICAgICAgICAgIGlmICgh6YCJ6ZuG6ZO+5o6lLmluY2x1ZGVzKCdocmVmJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHBkZmgoY29udHNbaV0sIOmAiembhumTvuaOpSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdGVtcC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGNvbnRzW2ldLCDpgInpm4blkI3np7ApLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwgKyDop6PmnpAsXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IOWAkuW6jyA9IHBhcnNlLuWAkuW6jyA/IHBhcnNlLuWAkuW6jyA6IGZhbHNlO1xcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBsaXN0cy5sZW5ndGggPyBsaXN0cyA6IFt0ZW1wXTtcXG4gICAgICAgIGlmICjlgJLluo8pIHtcXG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5tYXAoeCA9PiB4LnJldmVyc2UoKSk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcGxpc3QgPSBzdG9yYWdlMC5nZXRNeVZhcignZXJfcGxheWxpc3RzJywgJ3t9Jyk7XFxuICAgICAgICBpZiAocmVzdWx0cy5zb21lKHggPT4geC5sZW5ndGggPiAwKSkge1xcbiAgICAgICAgICAgaWYoIXBsaXN0Lmhhc093blByb3BlcnR5KHNoc29ydCkpe1xcbiAgICAgICAgICAgICBwbGlzdFtzaHNvcnRdPXt9O1xcbiAgICAgICAgICAgfVxcbiAgICAgICAgICAgcGxpc3Rbc2hzb3J0XVsnbGVuZ3RoJ109cmVzdWx0cy5sZW5ndGg7XFxuICAgICAgICB9O1xcbiAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ2VyX3BsYXlsaXN0cycsIHBsaXN0KTtcXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xcbiAgICB9LFxcbiAgICBnZXRQbGF5ZXJzOiBmdW5jdGlvbihwYXJzZSwgbW9kZSxmdW5jKSB7XFxuICAgICAgICAvL2xvZyhtb2RlKVxcbiAgICAgICAgdmFyIHBsYXkgPSAnZXJfcGxheWxpc3RfJztcXG4gICAgICAgIHRoaXMucHJlTG9hZChmdW5jKTtcXG4gICAgICAgIHRoaXMuY2xvc2UocGFyc2UubWFwKHggPT4geC7nsbvlnospLCBwYXJzZS5sZW5ndGgpO1xcbiAgICAgICAgbW9kZSA9IG1vZGUgPyBtb2RlIDogMTtcXG4gICAgICAgIFxcbiAgICAgICAgdmFyIHBlPXBhcnNlLm1hcCh4PT5wZGZhKGh0bWwseC7nur/ot68pLmxlbmd0aCkuZmlsdGVyKHk9Pnk+MCk7XFxuICAgICAgICBcXG4gICAgICAgIFxcbiAgICAgICAgcGFyc2UuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIHZhciB0YWJzID0gWyfkuLvnur8nXTtcXG4gICAgICAgICAgICBpZiAoaXRlbS7nur/ot68gIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIHRhYnMgPSB0aGlzLmdldFRhYnMoaXRlbSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHB1dE15VmFyKHBsYXkraSsnX3RhYnMnLHRhYnMpO1xcbiAgICAgICAgICAgIGlmKGl0ZW0uQWpheCl7XFxuICAgICAgICAgICAgICAgIGlmIChtb2RlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFicyh0YWJzLCBpdGVtLuexu+WeiywgcGxheSArIGksaXRlbSk7XFxuICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJzMih0YWJzLCBpdGVtLuexu+WeiywgcGxheSArIGksaXRlbSxwZSk7XFxuICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICBwdXRNeVZhcignZXJfaHRtbCcsaHRtbCk7XFxuICAgICAgICAgICAgICAgICBwdXRNeVZhcignZXJfdXJsJyxNWV9VUkwpO1xcblxcbiAgICAgICAgICAgICAgICB2YXIgbGlzdHM9ZnVuYyhnZXRNeVZhcignZXJfJytpdGVtLuexu+WeiywnMCcpLE1ZX1VSTCk7XFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgdmFyIGxpc3RzID0gdGhpcy5nZXRMaXN0cyhpdGVtLCBwbGF5K2kpO1xcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIGlmIChsaXN0cy5zb21lKHggPT4geC5sZW5ndGggPiAwKSkge1xcbiAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYnModGFicywgaXRlbS7nsbvlnossIHBsYXkgKyBpLGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiczIodGFicywgaXRlbS7nsbvlnossIHBsYXkgKyBpLGl0ZW0scGUpO1xcbiAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChnZXRNeVZhcignZXJfJyArIGl0ZW0u57G75Z6LICsgJ2ZvbGQnLCAnMScpID09ICcxJykge1xcbiAgICAgICAgICAgICAgICB0aGlzLnNldExpc3RzKGxpc3RzLCBnZXRNeVZhcignZXJfJytpdGVtLuexu+WeiywgJzAnKSwgcGxheSArIGksaXRlbSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH1cXG59XFxuXFxuXFxubGV0IE1ldGhvZHM9e1xcbiAgICAvL+WkmumAieaooeWdl1xcbiAgICBNdWx0aVNlbGVjdE1vZGU6ZnVuY3Rpb24obmFtZSxpZCxzaHNvcnQpe1xcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGRhdGF0aXRsZSwgZGF0YXVybCxzaHNvcnQpID0+IHtcXG4gICAgICAgICAgICBmdW5jdGlvbiB1bmlxdWUoYXJyKSB7XFxuICAgICAgICAgICAgY29uc3QgcmVzID0gbmV3IE1hcCgpXFxuICAgICAgICAgICAgcmV0dXJuIGFyci5maWx0ZXIoKGEpID0+ICFyZXMuaGFzKGEudXJsKSAmJiByZXMuc2V0KGEudXJsLCAxKSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IGR1b3NlbGVjdCA9IHN0b3JhZ2UwLmdldE15VmFyKHNoc29ydCtcXFwiX2R1b3NlbGVjdFxcXCIpID8gc3RvcmFnZTAuZ2V0TXlWYXIoc2hzb3J0K1xcXCJfZHVvc2VsZWN0XFxcIikgOiBbXTtcXG4gICAgICAgICAgICBpZiAoZHVvc2VsZWN0LmZpbmRJbmRleCh4ID0+IHgudXJsID09PSBkYXRhdXJsKSA9PSAtMSkge1xcbiAgICAgICAgICAgICAgICBkdW9zZWxlY3QucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGF0YXRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBkYXRhdXJsXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIGR1b3NlbGVjdCA9IHVuaXF1ZShkdW9zZWxlY3QpXFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oZGF0YXVybCwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGDigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFwiY29sb3I6I0ZGNTczM1xcXCI+YCArIGRhdGF0aXRsZSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlQnlWYWx1ZShhcnIsIHZhbCkge1xcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyW2ldWyd1cmwnXSA9PSB2YWwpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlbW92ZUJ5VmFsdWUoZHVvc2VsZWN0LCBkYXRhdXJsKVxcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGRhdGF1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhdGl0bGVcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKHNoc29ydCtcXFwiX2R1b3NlbGVjdFxcXCIsIGR1b3NlbGVjdCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSwgbmFtZSwgaWQsIHNoc29ydClcXG4gICAgfSxcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpgJrnlKjop6PmnpDljrvlub/lkYpcIixcInBhdGhcIjpcImxhenlcIixcInJ1bGVcIjpcInZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbmlmIChpbnB1dC5pbmRleE9mKCdtYWduZXQ6P3h0JykgPT0gLTEpIHtcXG4gICAgdHJ5e1xcbiAgICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0KS5tYXRjaCgvciBwbGF5ZXJfLio/PSguKj8pPC8pWzFdKVxcbiAgICB2YXIgdXJsID0gaHRtbC51cmxcXG4gICAgaWYgKGh0bWwuZW5jcnlwdCA9PSAnMScpIHtcXG4gICAgICAgIHVybCA9IHVuZXNjYXBlKHVybCk7XFxuICAgIH0gZWxzZSBpZiAoaHRtbC5lbmNyeXB0ID09ICcyJykge1xcbiAgICAgICAgdXJsID0gdW5lc2NhcGUoYmFzZTY0RGVjb2RlKHVybCkpO1xcbiAgICB9XFxuICAgIGlmICgvbTN1OHxtcDR8Zmx2Ly50ZXN0KHVybCkpIHtcXG4gICAgICAgaWYgKC92aXB8aGQvLnRlc3QodXJsKSkge1xcclxcbiAgICAgICAgICAgZXZhbFByaXZhdGVKUygnVHVTSmRwblphcVhHUnZ2T0ZSUiszUzdlWlVqZUMxQ2ZmRmJIaG9vMGU1K2FaN0thdjlLWlZac2Zrd0trVUZmNHd6a1RyaW80akFSSDZad1RYcFJsSDNrSTQzcldDVFU0UGRZYW0xNXBQWWlxNWNXMEg2Z1VYaEpXN3RtSnR5TEtkamUxS2FwQklHdldhWEkwV21vSG9NRUZCVi9NQWljbVBncHlBSlpqc2M1RW12ZGgxbjcyV1BQaXloWU5Db01uWjlKcFA2YUVzV1FFbVFNY0FqUHhnczZVTXZzTy9QT3c1Q2NyNzlzSnppY3N0L0xsM0lPajVNK1B2cUtyVGQ2MTQ3VkdQRXp0anNVZUV1ZEFTelRjbis5NUM5VmcxdXdVdmQ5ejB3NXFzUGJvUWg1b1poVHlzNFJRRXpCR0lxdWxRTUFBUVk0SUZrYW5XWDk1RUlOWkRYNTBtQWlPU0d5SWQwNkhzcHJBZWwvZmg3d3lNWGRtZXUrUzE1WG5jTzdVdXVqTU9tR2dTQUVOL1NzYzJlemt4bEd2cGR5aGJsNHA0RGFRdWcvbnJnc3doWmo3NS9NNTNzS1lYMnpSZ09TVDdDTWpWLytwUEpkMUtQOTM0dXUvVnNCUVVHNjltV04rS2FGV2hLbndCUGhWOXFkcUd6L0xTSm5GeEl2UThrQngnKVxcbiAgICAgICAgICAgcmV0dXJuIHUgKyBcXFwiP3VybD1cXFwiICsgYmFzZTY0RW5jb2RlKHVybCkgKyBcXFwiIy5tM3U4XFxcIjtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICAgIHJldHVybiB1cmxcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vcmVxdWlyZUNhY2hlKCdodHRwczovL2FnaXQuYWkvbHprMjM1NTkvUHVibGljUnVsZS9yYXcvYnJhbmNoL21hc3Rlci94NXJ1bGUuanMnLCAyNCk7XFxuICAgICAgICAvL3JldHVybiB4NXJ1bGUoaW5wdXQsIGlucHV0KTtcXG4gICAgICAgIHJldHVybiAndmlkZW86Ly8nICsgaW5wdXQ7XFxuICB9XFxufWNhdGNoKGUpe1xcbi8vcmVxdWlyZUNhY2hlKCdodHRwczovL2FnaXQuYWkvbHprMjM1NTkvUHVibGljUnVsZS9yYXcvYnJhbmNoL21hc3Rlci94NXJ1bGUuanMnLCAyNCk7XFxuICAgICAgICAvL3JldHVybiB4NXJ1bGUoaW5wdXQsIGlucHV0KTtcXG4gICAgICAgIHJldHVybiAndmlkZW86Ly8nICsgaW5wdXQ7XFxufSAgIFxcbiB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIGlucHV0XFxuICAgIH1cXG59KVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6aqM6K+B56CBXCIsXCJwYXRoXCI6XCJ5em1cIixcInJ1bGVcIjpcIndoaWxlICgv6L6T5YWl6aqM6K+B56CBfOezu+e7n+WuieWFqOmqjOivgS8udGVzdChodG1sKSkge1xcbiAgICBsZXQgaGVhZGVycyA9IHtcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogTU9CSUxFX1VBLFxcbiAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBNWV9VUkxcXG4gICAgfVxcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2p4aHM/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSk7XFxuICAgIGV2YWxQcml2YXRlSlMoc3N5eik7XFxuXFxuICAgIGxldCB2Y29kZSA9IGdldFZDb2RlMihNWV9IT01FICsgJy9pbmRleC5waHAvdmVyaWZ5L2luZGV4Lmh0bWw/JywgSlNPTi5zdHJpbmdpZnkoaGVhZGVycyksICdudW0nKTtcXG4gICAgZmV0Y2goTVlfSE9NRSArIGh0bWwubWF0Y2goL1xcXFwvaW5kZXgucGhwLio/dmVyaWZ5PS8pWzBdICsgSlNPTi5wYXJzZSh2Y29kZSkucmV0LCB7XFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgfSlcXG4gICAgdmFyIHl6ID0gTVlfVFlQRSA9PSAnaG9tZScgPyB0cnVlX3VybCA6IE1ZX1VSTFxcbiAgICBsb2coTVlfVFlQRSlcXG4gICAgaHRtbCA9IHJlcXVlc3QoeXosIHtcXG4gICAgICAgIC8vICAgaGVhZGVyczogaGVhZGVyc1xcbiAgICB9KVxcbn1cXG5pZiAoL+mikee5geaTjeS9nC8udGVzdChodG1sKSkge1xcbiAgICBkLnB1c2goe1xcbiAgICB0aXRsZTogJ+e9keermeaQnOe0ouaXtumXtOmXtOmalCcsXFxuICAgIGRlc2M6IFxcXCLkuIvmi4nph43or5VcXFwiXFxufSlcXG5cXG59XCJ9XSIsImljb24iOiJodHRwczovL3d3dy54eHlzNy5jb20vdXBsb2FkL214Y21zLzIwMjMwNzE2LTEvZGY4ODkxZDU1M2Q1NGNjNThhOWNiMjdiMzhiYmVlNWQucG5nIiwicHJveHkiOiIifQ==
Add Comment
Please, Sign In to add comment