Advertisement
xiaomianao666

小程序:云盘君(推送)

Sep 25th, 2023
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@云盘君(推送)@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi5LqR55uY5ZCbKOaOqOmAgSkiLCJhdXRob3IiOiLlsI/mo4noooTwn4yeKOaOqOmAgeS4juWOn+eUu+WKn+iDvWJ56aaZ6ZuF5oOFKSIsInVybCI6Imhpa2VyOi8vZW1wdHkjI2Z5cGFnZSIsInZlcnNpb24iOjE0LCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6InZpZGVvIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6XG52YXIgZCA9IFtdO1xuYWRkTGlzdGVuZXIoXG4gICAgJ29uUmVmcmVzaCcsICQudG9TdHJpbmcoKCkgPT4ge1xuICAgICAgICBjbGVhck15VmFyKCdzJylcbiAgICB9KVxuKVxuaWYgKCFmaWxlRXhpc3QoXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb25cIikpIHtcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXCJoaWtlcjovL3BhZ2UvTG9naW5cIikpLnJ1bGUpO1xufSBlbHNlIHtcbiAgICBsZXQgbnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKTtcbiAgICBpZiAobnRva2VuWzBdLnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKFwiaGlrZXI6Ly9wYWdlL3NvdVwiKSkucnVsZSk7XG4gICAgICAgIGxldCBzID0gZ2V0TXlWYXIoJ3MnLCAnJyk7XG4gICAgICAgIGlmIChzID09IFwiXCIpIHtcbiAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcblxuICAgICAgICAgICAgICAgIGhlYWRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDYuMDsgTmV4dXMgNSBCdWlsZC9NUkE1OE4pIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS85OS4wLjQ4NDQuNTEgTW9iaWxlIFNhZmFyaS81MzcuMzYnLFxuICAgICAgICAgICAgICAgICAgICAnSG9zdCc6ICd0b3AuYmFpZHUuY29tJyxcbiAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgICAgICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogJ3poLUNOLHpoO3E9MC45LGVuLVVTO3E9MC44LGVuO3E9MC43JyxcbiAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwLCBkZWZsYXRlLCBicicsXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vdG9wLmJhaWR1LmNvbS9ib2FyZD90YWI9bm92ZWwnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQganNvbjtcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGdldE15VmFyKCd0b3BiYWlkdScsICcxJykgPT0gJzEnID8gJ+eUteinhuWJp+eDreaQnOamnOKImicgOiAn55S16KeG5Ymn54Ot5pCc5qacJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogYGhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI0BsYXp5UnVsZT0uanM6Z2V0TXlWYXIoJ3RvcGJhaWR1JywnMScpPT0nMSc/cHV0TXlWYXIoJ3RvcGJhaWR1JywnMCcpOnB1dE15VmFyKCd0b3BiYWlkdScsJzEnKTtyZWZyZXNoUGFnZSgpOydoaWtlcjovL2VtcHR5J2AsXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nXG4gICAgICAgICAgICAgICAgfSx7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAoZ2V0TXlWYXIoJ3RvcGJhaWR1JywgJzEnKSA9PSAnMCcgPyAn55S15b2x54Ot5pCc5qac4oiaJyA6ICfnlLXlvbHng63mkJzmppwnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBgaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjQGxhenlSdWxlPS5qczpnZXRNeVZhcigndG9wYmFpZHUnLCcxJyk9PScxJz9wdXRNeVZhcigndG9wYmFpZHUnLCcwJyk6cHV0TXlWYXIoJ3RvcGJhaWR1JywnMScpO3JlZnJlc2hQYWdlKCk7J2hpa2VyOi8vZW1wdHknYCxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcigndG9wYmFpZHUnLCAnMScpID09IFwiMVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcignZHNqanNvbicsIFwiXCIpID09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSByZXF1ZXN0KCdodHRwczovL3RvcC5iYWlkdS5jb20vYXBpL2JvYXJkP3BsYXRmb3JtPXdpc2UmdGFiPXRlbGVwbGF5JnRhZz0lN0IlN0QnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdkc2pqc29uJywganNvbik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gZ2V0TXlWYXIoJ2Rzampzb24nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcignZHlqc29uJywgJycpID09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSByZXF1ZXN0KCdodHRwczovL3RvcC5iYWlkdS5jb20vYXBpL2JvYXJkP3BsYXRmb3JtPXdpc2UmdGFiPW1vdmllJnRhZz0lN0IlN0QnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdkeWpzb24nLCBqc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBnZXRNeVZhcignZHlqc29uJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGpzb24pLmRhdGEuY2FyZHNbMF0uY29udGVudDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGxpc3RbaV0ud29yZCArICcgICAgKCcgKyBsaXN0W2ldLnNob3dbMl0gKyAnKSc7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkZXMgPSBsaXN0W2ldLmRlc2M7XG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaSA9PSBcIjBcIiA/ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cImNvbG9yOiNmZjMzMDBcIj4nICsgKHBhcnNlSW50KGkpICsgMSkudG9TdHJpbmcoKSArICc8L3NwYW4+JyArIFwiXFx0XFx0XFx0XCIgKyBuYW1lIDogaSA9PSBcIjFcIiA/ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cImNvbG9yOiNmZjY2MDBcIj4nICsgKHBhcnNlSW50KGkpICsgMSkudG9TdHJpbmcoKSArICc8L3NwYW4+JyArIFwiXFx0XFx0XFx0XCIgKyBuYW1lIDogaSA9PSBcIjJcIiA/ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cImNvbG9yOiNmZjk5MDBcIj4nICsgKHBhcnNlSW50KGkpICsgMSkudG9TdHJpbmcoKSArICc8L3NwYW4+JyArIFwiXFx0XFx0XFx0XCIgKyBuYW1lIDogJ+KAnOKAnOKAneKAnTxzcGFuPicgKyAocGFyc2VJbnQoaSkgKyAxKS50b1N0cmluZygpICsgJzwvc3Bhbj4nICsgXCJcXHRcXHRcXHRcIiArIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zcGxpdCgnICAgICgnKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigncycsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBkZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXCJ0ZXh0XzFcIlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXCJoaWtlcjovL3BhZ2UvTG9naW5cIikpLnJ1bGUpO1xuICAgIH1cbiAgICAvL3NldFJlc3VsdChkKTtcbn1cbnNldFJlc3VsdChkKTsiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSMjKioiLCJncm91cCI6IiMiLCJzZWFyY2hGaW5kIjoianM6XG52YXIgZCA9IFtdO1xubGV0IGtleSA9IE1ZX1VSTC5zcGxpdChcIiMjXCIpWzFdO1xuZC5wdXNoKHtcbiAgICB0aXRsZTogXCLngrnmiJHlvIDlp4vogZrlkIjmkJzntKJcIiArIGtleSxcbiAgICB1cmw6IFwiaGlrZXI6Ly9wYWdlL3NvdXA/cD1meXBhZ2VcIixcbiAgICBleHRyYToge1xuICAgICAgICBwYWdlVGl0bGU6IFwi5pCc57SiXCIgKyBrZXksXG4gICAgICAgIGtleToga2V5XG4gICAgfVxufSk7XG5cbnNldFJlc3VsdChkKTsiLCJkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwiZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiJsZXQgcmVhY2Nlc3NUayA9IGdldE15VmFyKFwiYWxpYWNjZXNzVGtcIiwgJycpO1xubGV0IHRpbWVUb2tlbiA9IGdldE15VmFyKCd0aW1lVG9rZW4nLCAnMCcpO1xuaWYgKHJlYWNjZXNzVGsgPT0gJycgfHwgKHBhcnNlSW50KHRpbWVUb2tlbikgLSBwYXJzZUludChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApKS50b1N0cmluZygpIDw9IDYwMCkge1xuICAgIGxldCBudG9rZW4gPSBbXTtcbiAgICBsZXQgcmVmdG9rZW4gPSBcIlwiO1xuICAgIGlmICghZmlsZUV4aXN0KFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uXCIpKSB7XG4gICAgICAgIHRvYXN0KCfnlKjmiLfkv6Hmga/ojrflj5blpLHotKXvvIzor7fnmbvlhaXotKblj7fjgIInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBudG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb24nLCB7fSkpO1xuICAgICAgICBpZiAobnRva2VuWzBdLnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgICAgIHJlZnRva2VuID0gbnRva2VuWzBdLnJlZnJlc2hfdG9rZW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2FzdCgn55So5oi35L+h5oGv6I635Y+W5aSx6LSl77yM6K+355m75YWl6LSm5Y+344CCJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlZnRva2VuLmxlbmd0aCA9PSAzMikge1xuICAgICAgICB2YXIgcmVmcmVzaCA9IGZldGNoKCdodHRwczovL2F1dGguYWxpeXVuZHJpdmUuY29tL3YyL2FjY291bnQvdG9rZW4nLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogJ3tcInJlZnJlc2hfdG9rZW5cIjpcIicgKyByZWZ0b2tlbiArICdcIixcImdyYW50X3R5cGVcIjpcInJlZnJlc2hfdG9rZW5cIn0nLFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcbiAgICAgICAgfSk7XG4gICAgICAgIG50b2tlblswXSA9IEpTT04ucGFyc2UocmVmcmVzaCk7XG4gICAgICAgIHdyaXRlRmlsZShcImhpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvblwiLCBKU09OLnN0cmluZ2lmeShudG9rZW4pKTtcbiAgICAgICAgbG9nKCfov5DooYzpooTlpITnkIYnKTtcbiAgICAgICAgaWYgKCFmaWxlRXhpc3QoXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb25cIikgfHwgcmVmcmVzaC5sZW5ndGggPiAzMDApIHtcbiAgICAgICAgICAgIHZhciByZWZyZXNoID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvbicsIHt9KTtcbiAgICAgICAgICAgIHB1dE15VmFyKCd0aW1lVG9rZW4nLCAocGFyc2VJbnQoSlNPTi5wYXJzZShyZWZyZXNoKVswXS5leHBpcmVzX2luKSArIHBhcnNlSW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgbGV0IGRlZmRyaXZlaWQgPSBKU09OLnBhcnNlKHJlZnJlc2gpWzBdLmRlZmF1bHRfZHJpdmVfaWQ7XG4gICAgICAgICAgICBwdXRNeVZhcignZGVmZHJpdmVpZCcsIGRlZmRyaXZlaWQpO1xuICAgICAgICAgICAgdmFyIGFjY2Vzc1RrID0gSlNPTi5wYXJzZShyZWZyZXNoKVswXS50b2tlbl90eXBlICsgJyAnICsgSlNPTi5wYXJzZShyZWZyZXNoKVswXS5hY2Nlc3NfdG9rZW47XG4gICAgICAgICAgICAvL2xvZyhhY2Nlc3NUayk7XG4gICAgICAgICAgICBwdXRNeVZhcihcImFsaWFjY2Vzc1RrXCIsIGFjY2Vzc1RrKTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6KeE5YiZ5YiX6KGoXCIsXCJwYXRoXCI6XCJkYXRhXCIsXCJydWxlXCI6XCJ2YXIgd3JhcHUgPSAodSkgPT4ge1xcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcIuacrOWcsOi9rOeggVxcXCIpIHtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJ1xcbiAgICB9XFxuICAgIGlmICgvYWxpeXVuZHJpdmUvLnRlc3QodSkpIHtcXG4gICAgICAgIGNvbnN0IFtsaW5rLCBfc2hhcmVfcHdkXSA9IHUuc3BsaXQoJz9zaGFyZV9wd2Q9Jyk7XFxuICAgICAgICBjb25zdCBbX2xpbmssIF9mb2xkZXJJRF0gPSBsaW5rLnNwbGl0KCcvZm9sZGVyLycpO1xcbiAgICAgICAgbGV0IHNoYXJlX3B3ZCA9IChfc2hhcmVfcHdkIHx8ICcnKS5zcGxpdCgnI25hbWU9JylbMF0gfHwgJyc7XFxuICAgICAgICBsZXQgc2hhcmVJZCA9IF9saW5rLnNwbGl0KCdjb20vcy8nKVsxXTtcXG4gICAgICAgIHJldHVybiAnc21hcnRkcml2ZTovL3NoYXJlL2Jyb3dzZT9zaGFyZUlkPScgKyBzaGFyZUlkICsgJyZzaGFyZVB3ZD0nICsgc2hhcmVfcHdkO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwid2ViOi8vXFxcIiArIHU7XFxufTtcXG5cXG52YXIgY2hlY2thbGkgPSAocmVhbHVybCkgPT4ge1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IHNoYXJlSWQgPSByZWFsdXJsLnNwbGl0KFxcXCJjb20vcy9cXFwiKVsxXS5zdWJzdHJpbmcoMCwgMTEpO1xcbiAgICAgICAgaWYgKHJlYWx1cmwuaW5jbHVkZXMoXFxcImNvbS9zL1xcXCIpICYmIHJlYWx1cmwgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBsZXQgc2hhcmUgPSBmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9zaGFyZV9saW5rL2dldF9zaGFyZV9ieV9hbm9ueW1vdXNcXFwiLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL1xcXCJcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInNoYXJlX2lkXFxcIjogc2hhcmVJZFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGlmIChzaGFyZS5pbmNsdWRlcyhcXFwic2hhcmVfbGluayBpc1xcXCIpIHx8IHNoYXJlLmluY2x1ZGVzKFxcXCJzaGFyZV9saW5rIGNhbm5vdFxcXCIpKSByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIHJldHVybiB0cnVlO1xcbn1cXG5cXG5sZXQgcnVsZXMgPSBbe1xcbiAgICAgICAgbmFtZTogXFxcIuS6keebmOi1hOa6kFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly9yZXMueXVucGFuLndpbi8/UGFnZUluZGV4PVxcXCIgKyBwYWdlICsgXFxcIiZQYWdlU2l6ZT0xMiZLZXl3b3JkPVxcXCIgKyBzICsgXFxcIiZUeXBlPSZUYWc9XFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vcmVzLnl1bnBhbi53aW4vXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIm1haW4mJi5jYXJkXFxcIik7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCBcXFwiLmNhcmQtbGluaywxJiZvbmNsaWNrXFxcIikubWF0Y2goL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC5hbGl5dW5kcml2ZVxcXFwuY29tXFxcXC9zfGFseXdwXFxcXC5uZXQpXFxcXC9cXFxcdyovZykgfHwgW107XFxuICAgICAgICAgICAgICAgIHUgPSB1Lmxlbmd0aCA+IDAgPyB1WzBdIDogdXJsO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXCIuY2FyZC10aXRsZSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGQoaXQsIFxcXCJpbWcmJnNyY1xcXCIsIHVybCksXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5LqR55uY6LWE5rqQPC9mb250PiZuYnNwO1xcXCIgKyAocGRmaChpdCwgXFxcIi5jYXJkLXRleHQsLTEmJlRleHRcXFwiKSkgKyBcXFwiXFxcXG5cXFwiICsgKHUpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCJVUOS6keaQnFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly9hcGkudXB5dW5zbzIuY29tL3NlYXJjaD9rZXl3b3JkPVxcXCIgKyBzICsgXFxcIiZwYWdlPVxcXCIgKyBwYWdlICsgXFxcIiZzX3R5cGU9MVxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy51cHl1bnNvLmNvbVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogXFxcImNvZGU9MTkxOVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIC8vbG9nKGJhc2U2NERlY29kZShodG1sKSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGh0bWwpKS5yZXN1bHQuaXRlbXM7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBpdC5wYWdlX3VybDtcXG4gICAgICAgICAgICAgICAgLy91ID0gdS5sZW5ndGggPiAwID8gdVswXSA6IHVybDtcXG4gICAgICAgICAgICAgICAgaWYgKCF1LmluY2x1ZGVzKFxcXCJhbGl5dW5kcml2ZVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0LnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlVQ5LqR5pCcPC9mb250PiZuYnNwO1xcXCIgKyBcXFwiXFxcXG5cXFwiICsgKHUpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLnjKvni7jnm5jmkJxcXFwiLFxcbiAgICAgICAgcGFnZTogZmFsc2UsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KFxcXCJodHRwczovL3d3dy5hbGlwYW5zb3UuY29tL3NlYXJjaD9rPVxcXCIgKyBzLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmFsaXBhbnNvdS5jb20vc2VhcmNoP2s9XFxcIiArIHNcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCIjYXBwJiZhXFxcIik7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IFxcXCI8ZGl2PlxcXCIgKyBhcnJbaV0gKyBcXFwiPC9kaXY+XFxcIjtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCBcXFwiYSYmaHJlZlxcXCIpO1xcbiAgICAgICAgICAgICAgICAvL2xvZyh1KTtcXG4gICAgICAgICAgICAgICAgaWYgKCF1LmluY2x1ZGVzKFxcXCIvcy9cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwczovL3d3dy5hbGlwYW5zb3UuY29tXFxcIiArIHUucmVwbGFjZShcXFwiL3MvXFxcIiwgXFxcIi9jdi9cXFwiKTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0LCBcXFwidGVtcGxhdGUmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCh1KS5sYXp5UnVsZSgod3JhcHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IFxcXCJub19zaG93X2RvbmF0ZT0xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogaW5wdXQucmVwbGFjZShcXFwiL2N2L1xcXCIsIFxcXCIvcy9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gcGFyc2VEb21Gb3JIdG1sKGh0bWwsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgX2xpbmtzID0gaHRtbC5tYXRjaCgvaHR0cHM6XFxcXC9cXFxcLyh3d3dcXFxcLmFsaXl1bmRyaXZlXFxcXC5jb21cXFxcL3N8YWx5d3BcXFxcLm5ldClcXFxcL1xcXFx3Ki9nKSB8fCBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhfbGlua3MpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChodG1sLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyBfbGlua3NbMF0gKyAnPz9meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQoaHRtbCkgKyAnPz8/ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KGh0bWwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwdSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+54yr54u455uY5pCcPC9mb250PiZuYnNwO1xcXCIgKyBwZGZoKGl0LCBcXFwidGVtcGxhdGUsMSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLmmJPmkJxcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGtleWVuKHN0cikge1xcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjRPVG9TY1VGT2FlVlRySEVcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjlDTEdhbzF2SEtxbTE3T3pcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHtcXG4gICAgICAgICAgICAgICAgICAgIGNpcGhlcnRleHQ6IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2Uoc3RyKVxcbiAgICAgICAgICAgICAgICB9LCBrZXksIHtcXG4gICAgICAgICAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICAgICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHRlZDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KFxcXCJodHRwczovL3lpc28uZnVuL2FwaS9zZWFyY2g/bmFtZT1cXFwiICsgcyArIFxcXCImcGFnZU5vPVxcXCIgKyBwYWdlLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8veWlzby5mdW4vaW5mbz9zZWFyY2hLZXk9XFxcIiArIHMsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogZ2V0SXRlbSgneWlzb3Vjb29rZScsICcnKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgLy9sb2coaHRtbCk7XFxuICAgICAgICAgICAgaWYgKGh0bWwuaW5jbHVkZXMoJ+eZu+W9leeUqOaIt+aXoOmZkOWIticpKSB7XFxuICAgICAgICAgICAgICAgIHZhciBpID0gMDtcXG4gICAgICAgICAgICAgICAgZG8ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR5aW1nbGluID0gJ2h0dHBzOi8veWlzby5mdW4vYXBpL3VzZXIvbG9naW4vY2FwdGNoYT90PScgKyBwYXJzZUludChuZXcgRGF0ZSgpLmdldFRpbWUoKSkgKyAnJztcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBjb252ZXJ0QmFzZTY0SW1hZ2UodHlpbWdsaW4pLnNwbGl0KCcsJylbMV07XFxuICAgICAgICAgICAgICAgICAgICBsZXQgY29kID0gcmVxdWVzdCgnaHR0cHM6Ly9hcGkubm4uY2kvb2NyL2I2NC90ZXh0Jywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB2ZXIgPSBKU09OLnBhcnNlKHJlcXVlc3QoJ2h0dHBzOi8veWlzby5mdW4vYXBpL3VzZXIvbG9naW4nLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVmZXJlcic6ICdodHRwczovL3lpc28uZnVuL2xvZ2luJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nvb2tpZSc6IGdldENvb2tpZSh0eWltZ2xpbilcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVzZXJOYW1lXFxcIjogXFxcInR2Ym94MjAyM1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJwYXNzd29yZFxcXCI6IFxcXCJUdmJveDIwMjNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiY29kZVxcXCI6IGNvZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ZXIuY29kZSA9PSAyMDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+aYk+aQnOeZu+WFpemqjOivgeaIkOWKnycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3lpc291Y29va2UnLCBnZXRDb29raWUoJ2h0dHBzOi8veWlzby5mdW4nKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3QoXFxcImh0dHBzOi8veWlzby5mdW4vYXBpL3NlYXJjaD9uYW1lPVxcXCIgKyBzICsgXFxcIiZwYWdlTm89XFxcIiArIHBhZ2UsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly95aXNvLmZ1bi9pbmZvP3NlYXJjaEtleT1cXFwiICsgcyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBnZXRJdGVtKCd5aXNvdWNvb2tlJywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGkrKztcXG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoaSA8IDQpO1xcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgYXJyID0gSlNPTi5wYXJzZShodG1sKS5kYXRhLmxpc3Q7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBrZXllbihpdC51cmwpO1xcbiAgICAgICAgICAgICAgICAvL2xvZyh1KTtcXG4gICAgICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCB8fCAhdS5pbmNsdWRlcyhcXFwiYWxpeXVuXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBpdC5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuaYk+aQnDwvZm9udD4mbmJzcDtcXFwiICsgKGl0LmdtdFNoYXJlIHx8IGl0LmdtdENyZWF0ZSkgKyBcXFwiXFxcXG5cXFwiICsgKHUpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLmib7otYTmupBcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRodG1sKCkge1xcbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoXFxcImh0dHBzOi8vemhhb3ppeXVhbi5sYS9zbz9maWxlbmFtZT1cXFwiICsgcyArIFxcXCImcGFnZT1cXFwiICsgcGFnZSwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vemhhb3ppeXVhbi5sYS9zdG9wLmh0bWxcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJvcmlnaW5cXFwiOiBcXFwiaHR0cHM6Ly96aGFveml5dWFuLmxhXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogZ2V0SXRlbShcXFwienp5Y29va2VcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHNcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcImNvbnRlbnQtdHlwZVxcXCI6IFxcXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHZhciBodG1sID0gZ2V0aHRtbCgpO1xcbiAgICAgICAgICAgIGlmICghaHRtbC5pbmNsdWRlcyhcXFwic2VhcmNoX2JveFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGxldCB1c2VyID0gJ2RYTmxjbTVoYldVOWVYQnFNakF5TXlad1lYTnpkMjl5WkQxNWNHb3lNREl6JztcXG4gICAgICAgICAgICAgICAgbGV0IGNvb2sgPSBKU09OLnBhcnNlKGZldGNoQ29va2llKCdodHRwczovL3poYW96aXl1YW4ubGEvbG9naXUuaHRtbCcsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IE1PQklMRV9VQSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwczovL3poYW96aXl1YW4ubGEnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vemhhb3ppeXVhbi5sYS9sb2dpbi5odG1sJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwidXBncmFkZS1pbnNlY3VyZS1yZXF1ZXN0c1xcXCI6IFxcXCIxXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGJhc2U2NERlY29kZSh1c2VyKSxcXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcbiAgICAgICAgICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWUsXFxuICAgICAgICAgICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcbiAgICAgICAgICAgICAgICB9KSkuam9pbignOycpO1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJ6enljb29rZVxcXCIsIGNvb2spO1xcbiAgICAgICAgICAgICAgICBsb2coXFxcIuaJvui1hOa6kOeZu+WFpVxcXCIpO1xcbiAgICAgICAgICAgICAgICBodG1sID0gZ2V0aHRtbCgpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiYm9keSYmLm5ld3NMaXN0JiZsaTpub3QoOmZpcnN0LWNoaWxkKVxcXCIpO1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgXFxcImEmJmhyZWZcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwczovL3poYW96aXl1YW4ubGEvXFxcIiArIHU7XFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKGl0LCBcXFwiLm5ld3NfdGV4dCYmaDMmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7mib7otYTmupA8L2ZvbnQ+Jm5ic3A7XFxcIiArIChwZGZoKGl0LCBcXFwiLm5ld3NfdGV4dCYmcCYmVGV4dFxcXCIpKSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCh1KS5sYXp5UnVsZSgod3JhcHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbGlua3MgPSBodG1sLm1hdGNoKC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuYWxpeXVuZHJpdmVcXFxcLmNvbVxcXFwvc3xhbHl3cFxcXFwubmV0KVxcXFwvXFxcXHcqL2cpIHx8IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKF9saW5rcyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgX2xpbmtzWzBdICsgJz8/ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KF9saW5rc1swXSkgKyAnPz8/ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1swXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXB1KVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLlsI/nurjmnaFcXFwiLFxcbiAgICAgICAgcGFnZTogZmFsc2UsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0dG9rZW4oKSB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcigneHp5dG9rZW4nLCAnJykubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9IEpTT04ucGFyc2UocG9zdCgnaHR0cHM6Ly9naXRjYWZlLm5ldC90b29sL2FsaXBhcGVyLycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vdS5naXRjYWZlLm5ldC8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2dldF90b2tlbidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KSkuZGF0YTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd4enR0b2tlbicsIHRva2VuKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TXlWYXIoJ3h6dHRva2VuJywgJycpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBjYXRfY29kZShhKSB7XFxuICAgICAgICAgICAgICAgIHZhciBkLCBlLCBiID0gW1xcXCLljY7or63nlLXop4ZcXFwiLCBcXFwi5pel6Z+p55S16KeGXFxcIiwgXFxcIuasp+e+jueUteinhlxcXCIsIFxcXCLlhbbku5bnlLXop4ZcXFwiLCBcXFwi5Y2O6K+t55S15b2xXFxcIiwgXFxcIuaXpemfqeeUteW9sVxcXCIsIFxcXCLmrKfnvo7nlLXlvbFcXFwiLCBcXFwi5YW25LuW55S15b2xXFxcIiwgXFxcIuWNjuivreWKqOa8q1xcXCIsIFxcXCLml6Xpn6nliqjmvKtcXFwiLCBcXFwi5qyn576O5Yqo5ryrXFxcIiwgXFxcIue6quW9leeJh1xcXCIsIFxcXCLnu7zoibrniYdcXFwiLCBcXFwi5pWZ6IKy5Z+56K6tXFxcIiwgXFxcIuWFtuS7luinhumikVxcXCIsIFxcXCLljY7or63pn7PkuZBcXFwiLCBcXFwi5pel6Z+p6Z+z5LmQXFxcIiwgXFxcIuasp+e+jumfs+S5kFxcXCIsIFxcXCLlhbbku5bpn7PkuZBcXFwiLCBcXFwi5aix5LmQ6L2v5Lu2XFxcIiwgXFxcIuezu+e7n+i9r+S7tlxcXCIsIFxcXCLnvZHnu5zova/ku7ZcXFwiLCBcXFwi5Yqe5YWs6L2v5Lu2XFxcIiwgXFxcIuWFtuS7lui9r+S7tlxcXCIsIFxcXCLmvKvnlLtcXFwiLCBcXFwi5bCP6K+0XFxcIiwgXFxcIuWHuueJiOS5plxcXCIsIFxcXCLnn6Xor4bln7norq1cXFwiLCBcXFwi5YW25LuW5paH5qGjXFxcIiwgXFxcIuWjgee6uFxcXCIsIFxcXCLkurrnialcXFwiLCBcXFwi6aOO5pmvXFxcIiwgXFxcIuWFtuS7luWbvueJh1xcXCIsIFxcXCLlhbbku5ZcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIGMgPSBbXFxcImh5ZHNcXFwiLCBcXFwicmhkc1xcXCIsIFxcXCJvbWRzXFxcIiwgXFxcInF0ZHNcXFwiLCBcXFwiaHlkeVxcXCIsIFxcXCJyaGR5XFxcIiwgXFxcIm9tZHlcXFwiLCBcXFwicXRkeVxcXCIsIFxcXCJoeWRtXFxcIiwgXFxcInJoZG1cXFwiLCBcXFwib21kbVxcXCIsIFxcXCJqbHBcXFwiLCBcXFwienlwXFxcIiwgXFxcImp5cHhcXFwiLCBcXFwicXRzcFxcXCIsIFxcXCJoeXl5XFxcIiwgXFxcInJoeXlcXFwiLCBcXFwib215eVxcXCIsIFxcXCJxdHl5XFxcIiwgXFxcImtmcmpcXFwiLCBcXFwieHRyalxcXCIsIFxcXCJ3bHJqXFxcIiwgXFxcImJncmpcXFwiLCBcXFwicXRyalxcXCIsIFxcXCJtaFxcXCIsIFxcXCJ4c1xcXCIsIFxcXCJjYnNcXFwiLCBcXFwienNweFxcXCIsIFxcXCJxdHdkXFxcIiwgXFxcImJ6XFxcIiwgXFxcInJ3XFxcIiwgXFxcImZqXFxcIiwgXFxcInF0dHBcXFwiLCBcXFwicXRcXFwiXTtcXG4gICAgICAgICAgICAgICAgZm9yIChkID0gMCwgZSA9IGMubGVuZ3RoOyBlID4gZDsgZCsrKVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNbZF0gPT0gYSkgcmV0dXJuIGJbZF07XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSBwb3N0KFxcXCJodHRwczovL2dpdGNhZmUubmV0L3Rvb2wvYWxpcGFwZXIvXFxcIiwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3UuZ2l0Y2FmZS5uZXQvJ1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFxcXCJzZWFyY2hcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogXFxcIndlYlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB0b2tlbjogZ2V0dG9rZW4oKSxcXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IHNcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGh0bWwpO1xcbiAgICAgICAgICAgIGlmIChsaXN0LmRhdGEpIHtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QuZGF0YTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGxpc3RbaV1cXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gaXQudGl0bGU7XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gaXQuYWxpa2V5O1xcbiAgICAgICAgICAgICAgICBpZiAodSA9PSBudWxsKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsZXQgbXVybCA9ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nICsgdTtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja2FsaShtdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHMpKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oiaIFxcXCIgKyB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5bCP57q45p2hPC9mb250PiZuYnNwO1xcXCIgKyBjYXRfY29kZShpdC5jYXQpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlczogaXQuZGVzXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPWh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycgKyBtdXJsICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KG11cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCgnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJyArIG11cmwpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgbmFtZTogXFxcIueOqeWBtuWTpeWTpVxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cDovL3dvZ2cueHl6L2luZGV4LnBocC92b2RzZWFyY2gvXFxcIiArIHMgKyBcXFwiLS0tLS0tLS0tLVxcXCIgKyBwYWdlICsgXFxcIi0tLS5odG1sXFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7fSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5tb2R1bGUtaXRlbXMmJi5tb2R1bGUtc2VhcmNoLWl0ZW0nKTtcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgbGV0IGJldCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHV0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2gzJiZhJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgIGxldCB1c2VyaWFsID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnLnZpZGVvLXNlcmlhbCYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICBsZXQgdWltYWdlID0gcGFyc2VEb20oaXQsICcubGF6eWxvYWQmJmRhdGEtc3JjJywgJ2h0dHA6Ly93b2dnLnh5ei8nKTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbShpdCwgJ2gzJiZhJiZocmVmJywgJ2h0dHA6Ly93b2dnLnh5ei8nKTtcXG4gICAgICAgICAgICAgICAgLy9sZXQgZGV0ID0gcmVxdWVzdCh1LCB7fSk7XFxuICAgICAgICAgICAgICAgIGJldC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1dGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogdWltYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogdXNlcmlhbFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGJldC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgIGxldCBiZXRoID0gYmF0Y2hGZXRjaChiZXQpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJldGgubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShiZXRoW2ldLCAnLm1vZHVsZS1wbGF5ZXItbGlzdCYmcCcpXFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCAncCYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFwiL3MvXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiZXRbaV0udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGJldFtpXS5pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPueOqeWBtuWTpeWTpTwvZm9udD4mbmJzcDtcXFwiICsgKGJldFtpXS5kZXNjKSArICdcXFxcbicgKyB1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAgICBuYW1lOiBcXFwi6Zi/6YeM5LqR55uY572RXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJodHRwczovL3d3dy5hbHlwdy5jbi9zZWFyY2gucGhwP3E9XFxcIiArIHMgKyBcXFwiJnBhZ2U9XFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge30pO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcubGlzdCYmbGknKTtcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgbGV0IGJldCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHV0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2EmJnRpdGxlJyk7XFxuICAgICAgICAgICAgICAgIGxldCB1c2VyaWFsID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnLmZhLWNsb2NrLW8mJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgbGV0IHVpbWFnZSA9IHBhcnNlRG9tKGl0LCAnaW1nJiZzcmMnLCAnaHR0cHM6Ly93d3cuYWx5cHcuY24vJyk7XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb20oaXQsICdhJiZocmVmJywgJ2h0dHBzOi8vd3d3LmFseXB3LmNuLycpO1xcbiAgICAgICAgICAgICAgICAvL2xldCBkZXQgPSByZXF1ZXN0KHUsIHt9KTtcXG4gICAgICAgICAgICAgICAgaWYgKCF1dGl0bGUuaW5jbHVkZXMocykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGJldC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1dGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogdWltYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogdXNlcmlhbFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy9sb2coYmV0KTtcXG4gICAgICAgICAgICBpZiAoYmV0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgbGV0IGJldGggPSBiYXRjaEZldGNoKGJldCk7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmV0aC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGJldGhbaV0sICdib2R5JiZhW2hyZWZePWh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zL10nKVxcbiAgICAgICAgICAgICAgICAgICAgLy9sb2cobGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiZXRbaV0udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGJldFtpXS5pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPumYv+mHjOS6keebmOe9kTwvZm9udD4mbmJzcDtcXFwiICsgKGJldFtpXS5kZXNjKSArICdcXFxcbicgKyB1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAvKuWkseaViCB7XFxuICAgICAgICAgICAgbmFtZTogXFxcIuWcn+aLqOm8oFxcXCIsXFxuICAgICAgICAgICAgcGFnZTogZmFsc2UsXFxuICAgICAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy50YnNkeS5jb20vc2VhcmNoLmh0bWw/a2V5d29yZD0nICsgcyArICcmY2F0ZWdvcnk9OTgzOTIwJmRhdGFfdHlwZT05ODc5MTAnLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5zZWFyY2hfcmVzdWx0X25ldGRpc2tfbGlzdCYmYScpO1xcbiAgICAgICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coaXQpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbUZvckh0bWwoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0ID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnLm5ldGRpc2tfaXRlbV9kZXRhaWxfbmFtZSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aXQuaW5jbHVkZXMocykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7lnJ/mi6jpvKDmkJw8L2ZvbnQ+Jm5ic3A7XFxcIiArIFxcXCJcXFxcblxcXCIgKyB1LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwqL1xcbiAgICB7XFxuICAgICAgICBuYW1lOiBcXFwi6Zi/6YeM5pCcXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoJ2h0dHBzOi8vYWxpc28uY2Mvcy8nICsgcyArICctJyArIHBhZ2UgKyAnLTAuaHRtbCcsIHt9KTtcXG5cXG4gICAgICAgICAgICBsZXQgbGlzdCA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5zZWFyY2gtcmVzdWx0JiYucmVzb3VyY2UtaXRlbScpO1xcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcbiAgICAgICAgICAgICAgICBsZXQgdSA9IGxpc3Rbal07XFxuICAgICAgICAgICAgICAgIGxldCB0aXQgPSBwYXJzZURvbUZvckh0bWwodSwgJ2gzJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgIGlmICghdGl0LmluY2x1ZGVzKHMpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdCxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChwYXJzZURvbSh1LCAnaDMmJmEmJmhyZWYnLCAnaHR0cHM6Ly9hbGlzby5jYy8nKSkubGF6eVJ1bGUoKHdyYXB1KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNyeShzdHIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCI5RUIyMERERkQ2QUZCRDY4XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChzdHIsIGtleSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXY6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHRlZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnV0ID0gcGFyc2VEb20oaHRtbCwgJy5idXR0b24mJmhyZWYnLCAnaHR0cHM6Ly9hbGlzby5jYy8nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhidXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBnb3QgPSByZXF1ZXN0KGJ1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coZ290KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKHBhcnNlRG9tRm9ySHRtbChnb3QsICdoZWFkJiZzY3JpcHQsMSYmSHRtbCcpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHUoZGVjcnkoYmFzZTY0LnNwbGl0KCchJylbMF0pKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXB1KSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7pmL/ph4zmkJw8L2ZvbnQ+Jm5ic3A7XFxcIiArIHBhcnNlRG9tRm9ySHRtbCh1LCAnLnRpbWUmJlRleHQnKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAvKuWkseaViHtcXG4gICAgICAgICAgIG5hbWU6IFxcXCLlnJ/ni5fmkJxcXFwiLFxcbiAgICAgICAgICAgcGFnZTogZmFsc2UsXFxuICAgICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KCdodHRwczovL3d3dy50dWdvdXNvdS5jb20vc2VhcmNoJywge1xcbiAgICAgICAgICAgICAgICAgICBib2R5OiAna2V5d29yZD0nICsgcyxcXG4gICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICBsZXQgYXJyID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnLmxheXVpLWNvbnRhaW5lciwxJiYubGF5dWktcm93OmhhcyhhKScpO1xcbiAgICAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICAgaWYgKCF1LmluY2x1ZGVzKFxcXCIvcy9cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgLy9sb2codSk7XFxuICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFyc2VEb21Gb3JIdG1sKGl0LCAnYSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuWcn+eLl+aQnDwvZm9udD4mbmJzcDtcXFwiICsgcGFyc2VEb21Gb3JIdG1sKGl0LCAncCwtMSYmVGV4dCcpICsgXFxcIlxcXFxuXFxcIiArIHUsXFxuICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgICAgIH1cXG4gICAgICAgfSwgKi9cXG4gICAge1xcbiAgICAgICAgbmFtZTogXFxcIuS6keebmOWIhuS6q+ekvlxcXCIsXFxuICAgICAgICBwYWdlOiBmYWxzZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRlY3J5KHN0cikge1xcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjVGNkIyQUszM0RBU0QxMjNcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHN0ciwga2V5LCB7XFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkVDQixcXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICAgICAgICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBlbmNyeXB0ZWQ7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCgnaHR0cHM6Ly93d3cueXVucGFuZmVueGlhbmcuY24vYXBpL2Jicy9hcGkvZ2V0ZGF0YT9rZXk9JyArIHMgKyAnJnR5cGU9dmlkZW8nLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3Lnl1bnBhbmZlbnhpYW5nLmNuL1xcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGxldCBqc29uID0gZGVjcnkoSlNPTi5wYXJzZShodG1sKS5kYXRhKTtcXG4gICAgICAgICAgICAvL2xvZyhqc29uKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gSlNPTi5wYXJzZShqc29uKTsgLy9bMF0ucmVzdWx0Lml0ZW1zO1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuXFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBsZXQgYmV0ID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gaXQucGlkO1xcbiAgICAgICAgICAgICAgICBiZXQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdodHRwczovL3d3dy55dW5wYW5mZW54aWFuZy5jbi9hcGkvYmJzL2FwaS9nZXRhcnRpY2xlP2lkPScgKyB1cmwsXFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy55dW5wYW5mZW54aWFuZy5jbi9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy9sb2codSk7XFxuICAgICAgICAgICAgbGV0IGJldGggPSBiYXRjaEZldGNoKGJldCk7XFxuXFxuICAgICAgICAgICAgLy9sb2coYXJ0aWNsZSk7XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiZXRoLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShiZXRoW2ldKS5kYXRhO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhqc29uKTtcXG4gICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBqc29uLmRvd25sb2FkLnNwbGl0KCdAJyk7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBsaXN0W2pdO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZToganNvbi50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSgnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJyArIHUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7kupHnm5jliIbkuqvnpL48L2ZvbnQ+Jm5ic3A7XFxcIiArIChqc29uLmNyZWF0ZXRpbWUpICsgXFxcIlxcXFxuXFxcIiArICgnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJyArIHUpLFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLnm5jmkJxcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBwYWdlID0gKHBhZ2UgLSAxKSAqIDEwO1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly93d3cucGFuc2VhcmNoLm1lL3NlYXJjaD9rZXl3b3JkPVxcXCIgKyBzICsgXFxcIiZvZmZzZXQ9XFxcIiArIHBhZ2UgKyBcXFwiJnBhbj1hbGl5dW5kcml2ZVxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge30pO1xcblxcbiAgICAgICAgICAgIGxldCBhcnIgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcuZ3JpZCYmLnNoYWRvdzpoYXMoYVtocmVmXj1odHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy9dKScpO1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnYVtocmVmXj1odHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy9dJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhcnNlRG9tRm9ySHRtbChpdCwgJy5icmVhay1hbGwmJlRleHQnKS5zcGxpdCgnaHR0cCcpWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGFyc2VEb21Gb3JIdG1sKGl0LCAnaW1nJiZzcmMnKSxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7nm5jmkJw8L2ZvbnQ+Jm5ic3A7XFxcIiArIChwYXJzZURvbUZvckh0bWwoaXQsICdwJiZUZXh0JykpICsgXFxcIlxcXFxuXFxcIiArICh1KSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBuYW1lOiBcXFwiRE9WWOaQnFxcXCIsXFxuICAgICAgICBwYWdlOiBmYWxzZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcImh0dHBzOi8vYXBpLmRvdngudGsvYWxpL3NlYXJjaD93ZD1cXFwiICsgcztcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7fSk7XFxuICAgICAgICAgICAgLy9sb2coYmFzZTY0RGVjb2RlKGh0bWwpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gSlNPTi5wYXJzZShodG1sKS5saXN0O1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gaXQudm9kX2NvbnRlbnQ7XFxuICAgICAgICAgICAgICAgIC8vdSA9IHUubGVuZ3RoID4gMCA/IHVbMF0gOiB1cmw7XFxuICAgICAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFwiYWxpeXVuZHJpdmVcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja2FsaSh1KSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oiaIFxcXCIgKyBpdC52b2RfbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGl0LnZvZF9waWMsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+RE9WWOaQnDwvZm9udD4mbmJzcDtcXFwiICsgXFxcIlxcXFxuXFxcIiArICh1KSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBuYW1lOiBcXFwi5b+F5bqUXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJodHRwczovL2NuLmJpbmcuY29tL3NlYXJjaD9xPVxcXCIgKyBzICsgXFxcIithbGl5dW5kcml2ZSZxcz1kcyZmb3JtPVFCUkVcXFwiO1xcbiAgICAgICAgICAgIGlmIChwYWdlICE9IDEpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gZ2V0TXlWYXIoXFxcImJpbmdcXFwiLCB1cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vY24uYmluZy5jb20vXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIC8vXFxcIlgtUmVxdWVzdGVkLVdpdGhcXFwiOiBcXFwiY29tLmV4YW1wbGUuaGlrZXJ2aWV3XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJBY2NlcHRcXFwiOiBcXFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC45XFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmFcXFwiKTtcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICBsZXQgdSA9IHBkKGl0LCBcXFwiYSYmaHJlZlxcXCIsIHVybCk7XFxuICAgICAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgXFxcImEmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKGl0LmluY2x1ZGVzKFxcXCJOZXh0IHBhZ2VcXFwiKSB8fCBpdC5pbmNsdWRlcyhcXFwi5LiL5LiA6aG1XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1MiA9IHBkKGl0LCBcXFwiYSYmaHJlZlxcXCIsIHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhcXFwibmV4dCBwYWdlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyh1Mik7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiYmluZ1xcXCIsIHUyKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAodSA9PSBudWxsIHx8IHQgPT0gbnVsbCB8fCAhaXQuaW5jbHVkZXMocykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICghaXQuaW5jbHVkZXMoXFxcIue9keebmFxcXCIpICYmICFpdC5pbmNsdWRlcyhcXFwi5LqR55uYXFxcIikgJiZcXG4gICAgICAgICAgICAgICAgICAgICFpdC5pbmNsdWRlcyhcXFwiYWxpeXVuZHJpdmVcXFwiKSAmJiAhaXQuaW5jbHVkZXMoXFxcInl1bnBhblxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAodS5zdGFydHNXaXRoKFxcXCJodHRwczovL2NuLmJpbmcuY29tL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsZXQgZG9tID0gZ2V0SG9tZSh1KS5yZXBsYWNlKFxcXCJodHRwOi8vXFxcIiwgXFxcIlxcXCIpLnJlcGxhY2UoXFxcImh0dHBzOi8vXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgX2xpbmtzID0gdC5tYXRjaCgvaHR0cHM6XFxcXC9cXFxcLyh3d3dcXFxcLmFsaXl1bmRyaXZlXFxcXC5jb21cXFxcL3N8YWx5d3BcXFxcLm5ldClcXFxcL1xcXFx3Ki9nKSB8fCBbXTtcXG4gICAgICAgICAgICAgICAgLy9sb2coX2xpbmtzKTtcXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBudWxsO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhfbGlua3MpO1xcbiAgICAgICAgICAgICAgICAvL2lmIChfbGlua3MubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAvL2MgPSAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQoX2xpbmtzWzBdKSArICc/Pz9meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICAvL2M9d3JhcHUoX2xpbmtzWzBdKVxcbiAgICAgICAgICAgICAgICAvL31cXG4gICAgICAgICAgICAgICAgaWYgKF9saW5rcy5sZW5ndGggPiAxICYmIF9saW5rc1sxXS5yZXBsYWNlKF9saW5rc1swXSwgXFxcIlxcXCIpLnJlcGxhY2UoL1thLXpBLVowLTldKy9nLCBcXFwiXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGMgPSB3cmFwdShfbGlua3NbMV0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICBjID0gd3JhcHUoX2xpbmtzWzBdKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHQsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5b+F5bqUPC9mb250PiZuYnNwO1xcXCIgKyBkb20sXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGMgIT0gbnVsbCA/IGMgOiAkKHUpLmxhenlSdWxlKCh3cmFwdSwgbW9kZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9saW5rcyA9IGh0bWwubWF0Y2goL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC5hbGl5dW5kcml2ZVxcXFwuY29tXFxcXC9zfGFseXdwXFxcXC5uZXQpXFxcXC9cXFxcdyovZykgfHwgW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coX2xpbmtzKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChfbGlua3MubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgX2xpbmtzWzBdICsgJz8/ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQoX2xpbmtzWzBdKSArICc/Pz9meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbGlua3MubGVuZ3RoID4gMSAmJiBfbGlua3NbMV0ucmVwbGFjZShfbGlua3NbMF0sIFxcXCJcXFwiKS5yZXBsYWNlKC9bYS16QS1aMC05XSsvZywgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMV0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX2xpbmtzLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1swXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGUgPSBNWV9SVUxFLnRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS95c2Z4P3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnI9XFxcIiArIHJ1bGUgKyBcXFwiJm1vZGU9XFxcIiArIG1vZGUgKyBcXFwiIyNcXFwiICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHUsIGNvbmZpZy5tb2RlKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH1cXG5dO1xcblxcbi8qXFxubGV0IGNjb2YgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9jY29mJylcXG5ydWxlcy5wdXNoKGNjb2YpXFxuKi9cXG4vL+W5tuWPkeinhOWImeaVsFxcbmxldCBzaXplID0gMTA7XFxuXFxuJC5leHBvcnRzID0gZnVuY3Rpb24ocGFnZSwgcnVsZSkge1xcbiAgICBpZiAoIXBhZ2UgJiYgIXJ1bGUpIHtcXG4gICAgICAgIHJldHVybiBydWxlcy5tYXAoaXQgPT4gaXQubmFtZSk7XFxuICAgIH1cXG4gICAgaWYgKHJ1bGUgIT0gbnVsbCkge1xcbiAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCAmJiBwYWdlID4gMSkge1xcbiAgICAgICAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoaSA9PiBpLm5hbWUgPT0gcnVsZSAmJiBpLnBhZ2UpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlKTtcXG4gICAgfVxcbiAgICBsZXQgc3RhcnQgPSAocGFnZSAtIDEpICogc2l6ZTtcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHN0YXJ0ICsgMSkge1xcbiAgICAgICAgcmV0dXJuIFtdO1xcbiAgICB9XFxuICAgIGxldCBsZW4gPSBzaXplO1xcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgcGFnZSAqIHNpemUpIHtcXG4gICAgICAgIGxlbiA9IHJ1bGVzLmxlbmd0aCAtIHN0YXJ0XFxuICAgIH1cXG4gICAgcmV0dXJuIHJ1bGVzLnNsaWNlKHN0YXJ0LCBzdGFydCArIGxlbik7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57SiXCIsXCJwYXRoXCI6XCJzb3VcIixcInJ1bGVcIjpcImxldCByID0gZ2V0SXRlbShcXFwiclxcXCIsIFxcXCJcXFwiKTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGxldCByMSA9IGZldGNoKFxcXCJoaWtlcjovL2hvbWVAWFlR5o6o6YCBXFxcIik7XFxuICAgIGlmICghcjEgfHwgcjEubGVuZ3RoIDw9IDUpIHtcXG4gICAgICAgIGxldCBydSA9ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwi5rW36ZiU6KeG55WM6KeE5YiZ5YiG5Lqr77yM5b2T5YmN5YiG5Lqr55qE5piv77ya5bCP56iL5bqP77+laG9tZV9ydWxlX3Yy77+lYmFzZTY0Oi8vQFhZUeaOqOmAgUBleUpzWVhOMFgyTm9ZWEIwWlhKZmNuVnNaU0k2SWlJc0luUnBkR3hsSWpvaVdGbFI1bzZvNllDQklpd2lZWFYwYUc5eUlqb2k2YWFaNlp1RjVvT0ZJaXdpZFhKc0lqb2lhR2xyWlhJNkx5OWxiWEIwZVNJc0luWmxjbk5wYjI0aU9qRXNJbU52YkY5MGVYQmxJam9pYlc5MmFXVmZNeUlzSW1Oc1lYTnpYMjVoYldVaU9pSWlMQ0owZVhCbElqb2lkRzl2YkNJc0ltTnNZWE56WDNWeWJDSTZJaUlzSW1GeVpXRmZibUZ0WlNJNklpSXNJbUZ5WldGZmRYSnNJam9pSWl3aWMyOXlkRjl1WVcxbElqb2lJaXdpZVdWaGNsOXVZVzFsSWpvaUlpd2ljMjl5ZEY5MWNtd2lPaUlpTENKNVpXRnlYM1Z5YkNJNklpSXNJbVpwYm1SZmNuVnNaU0k2SW1wek9seHViR1YwSUdRZ1BTQmJYVHRjYm1RdWNIVnphQ2g3WEc0Z0lDQWdkR2wwYkdVNklDZm9ycjdudmE3bmxMWG9wNFpKVUNjc1hHNGdJQ0FnZFhKc09pQmNJbWx1Y0hWME9pOHZYQ0lnS3lCblpYUkpkR1Z0S0Nkb2FXdGxjblIyWW05NGMyVjBKeXdnSjJoMGRIQTZMeThuSUNzZ1oyVjBTVkFvS1NBcklDYzZPVGszT0NjcElDc2dYQ0l2THk4djZLKzM2TDZUNVlXbGRIWmliM2ptanFqcGdJRkpVT1djc09XZGdPKzhqT1dtZ21oMGRIQTZMeTljSWlBcklHZGxkRWxRS0NrZ0t5QmNJam81T1RjNExtcHpPbk5sZEVsMFpXMG9KMmhwYTJWeWRIWmliM2h6WlhRbkxHbHVjSFYwS1R0eVpXWnlaWE5vVUdGblpTZ3BYQ0lzWEc0Z0lDQWdZMjlzWDNSNWNHVTZJQ2R6WTNKdmJHeGZZblYwZEc5dUoxeHVmU2s3WEc1a0xuQjFjMmdvZTF4dUlDQWdJSFJwZEd4bE9pQm5aWFJKZEdWdEtDZG9hV3RsY25SMlltOTRjMlYwSnl3Z0p5Y3BMRnh1SUNBZ0lDOHZkWEpzT2lBbmFHbHJaWEk2THk5bGJYQjBlU2NzWEc0Z0lDQWdkWEpzT2lCY0ltbHVjSFYwT2k4dlhDSWdLeUJuWlhSSmRHVnRLQ2RvYVd0bGNuUjJZbTk0YzJWMEp5d2dKMmgwZEhBNkx5OG5JQ3NnWjJWMFNWQW9LU0FySUNjNk9UazNPQ2NwSUNzZ1hDSXZMeTh2NksrMzZMNlQ1WVdsZEhaaWIzam1qcWpwZ0lGSlVPV2NzT1dkZ08rOGpPV21nbWgwZEhBNkx5OWNJaUFySUdkbGRFbFFLQ2tnS3lCY0lqbzVPVGM0TG1wek9uTmxkRWwwWlcwb0oyaHBhMlZ5ZEhaaWIzaHpaWFFuTEdsdWNIVjBLVHR5WldaeVpYTm9VR0ZuWlNncFhDSXNYRzRnSUNBZ1kyOXNYM1I1Y0dVNklDZHpZM0p2Ykd4ZlluVjBkRzl1SjF4dWZTazdYRzVjYm1RdWNIVnphQ2g3WEc0Z0lDQWdkR2wwYkdVNklGd2k1bzZvNllDQlhDSXNYRzRnSUNBZ2RYSnNPaUFrTG5SdlUzUnlhVzVuS0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnWTJ4bFlYSk5lVlpoY2lnbmJtRnRaU2NwTzF4dUlDQWdJQ0FnSUNBdkwzWmhjaUJzYVc1cklEMGdKMmhwYTJWeU9pOHZjR0ZuWlM5d2RYTm9MbWgwYld3L2RYSnNQU2NnS3lCbGJtTnZaR1ZWVWtsRGIyMXdiMjVsYm5Rb2FXNXdkWFF1Y21Wd2JHRmpaU2hjSWlOcGMwMTFjMmxqUFhSeWRXVWpYQ0lzSUNjbktTNXlaWEJzWVdObEtDY2phWE5XYVdSbGJ6MTBjblZsSXljc0lDY25LU2s3WEc0Z0lDQWdJQ0FnSUhaaGNpQnNhVzVySUQwZ1hDSm9hV3RsY2pvdkwzQmhaMlV2Y0hWemFEOXdkWE5vZFhKc1BWd2lJQ3NnWlc1amIyUmxWVkpKUTI5dGNHOXVaVzUwS0dsdWNIVjBLVHRjYmx4dUlDQWdJQ0FnSUNCcFppQW9hVzV3ZFhRdWMzUmhjblJ6VjJsMGFDZ25hSFIwY0NjcElIeDhJR2x1Y0hWMExuTjBZWEowYzFkcGRHZ29KMjFoWjI1bGREb25LU0I4ZkNBb2FXNXdkWFF1YVc1amJIVmtaWE1vWENKY1hHNWNJaWtnSmlZZ0lXbHVjSFYwTG5OMFlYSjBjMWRwZEdnb1hDSjdYQ0lwS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR3hwYm1zN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9hVzV3ZFhRdWMzUmhjblJ6VjJsMGFDaGNJbnRjSWlrZ0ppWWdhVzV3ZFhRdVpXNWtjMWRwZEdnb1hDSjlYQ0lwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdiR2x1YXp0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDZ3ZYRnd1ZEc5eWNtVnVkSHhsWkRKclhGdzZMeTUwWlhOMEtHbHVjSFYwS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2QwYjJGemREb3ZMK1M0amVhVXIrYU1nZWFPcU9tQWdlaS9tZWVuamVtVHZ1YU9wZU9BZ2lkY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5kRzloYzNRNkx5L29yN2ZvdnBQbGhhWG1yYVBub2E3bm1vVHBrNzdtanFYamdJSW5YRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlLU3hjYmlBZ0lDQmxlSFJ5WVRvZ2UxeHVJQ0FnSUNBZ0lDQjBhWFJzWlZacGMybGliR1U2SUhSeWRXVmNiaUFnSUNCOUxGeHVJQ0FnSUdOdmJGOTBlWEJsT2lBbmFXNXdkWFFuWEc1OUtUdGNibVF1Y0hWemFDaDdYRzRnSUNBZ2RHbDBiR1U2SUZ3aVZGWkM1cENjNTdTaVhDSXNYRzRnSUNBZ2RYSnNPaUFrTG5SdlUzUnlhVzVuS0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnYkdWMElIUjJhWEFnUFNCblpYUkpkR1Z0S0Nkb2FXdGxjblIyWW05NGMyVjBKeXdnSnljcE8xeHVJQ0FnSUNBZ0lDQnNaWFFnYzNSaGRHVWdQU0FuWm1Gc2MyVW5PMXh1SUNBZ0lDQWdJQ0JwWmlBb2RIWnBjQ0FoUFNBbkp5QW1KaUIwZG1sd0xtbHVZMngxWkdWektDYzZPVGszSnlrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQnpkR0YwWlNBOUlISmxjWFZsYzNRb2RIWnBjQ0FySUNjdllXTjBhVzl1Snl3Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHaGxZV1JsY25NNklIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSjBOdmJuUmxiblF0Vkhsd1pTYzZJQ2RoY0hCc2FXTmhkR2x2Ymk5NExYZDNkeTFtYjNKdExYVnliR1Z1WTI5a1pXUW5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5ZFlMVkpsY1hWbGMzUmxaQzFYYVhSb0p6b2dKMWhOVEVoMGRIQlNaWEYxWlhOMEp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSjFKbFptVnlaWEluT2lCMGRtbHdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYVcxbGIzVjBPaUF5TURBd0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHSnZaSGs2SUNka2J6MXpaV0Z5WTJnbWQyOXlaRDBuSUNzZ2FXNXdkWFFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYldWMGFHOWtPaUFuVUU5VFZDZGNiaUFnSUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQzh2Ykc5bktITjBZWFJsS1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSE4wWVhSbElEMDlJQ2R2YXljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFuZEc5aGMzUTZMeS9ta0p6bnRLTG1qcWpwZ0lIbWlKRGxpcC92dkl6b3I3Zm1zNmptaEkvb3A0TG5uSXZubExYb3A0Ym5xNjkwZG1KdmVPZVZqT21kb2ljN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdKM1J2WVhOME9pOHY1cENjNTdTaTVvNm82WUNCNWFTeDZMU2xKMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmU2tzWEc0Z0lDQWdaWGgwY21FNklIdGNiaUFnSUNBZ0lDQWdkR2wwYkdWV2FYTnBZbXhsT2lCMGNuVmxYRzRnSUNBZ2ZTeGNiaUFnSUNCamIyeGZkSGx3WlRvZ0oybHVjSFYwSjF4dWZTazdYRzR2TCtpd2crZVVxT1M3bytlZ2dlZWt1dVMraTF4dUx5OXlaWFIxY200Z0oyaHBhMlZ5T2k4dmNHRm5aUzl3ZFhOb1AzSjFiR1U5V0ZsUjVvNm82WUNCSm5CMWMyaDFjbXc5SnlBcklHVnVZMjlrWlZWU1NVTnZiWEJ2Ym1WdWRDaHBibkIxZENrN1hHNHZMM1Z5YkRvZ0oyaHBhMlZ5T2k4dmNHRm5aUzl3ZFhOb1AzSjFiR1U5V0ZsUjVvNm82WUNCSm5CMWMyaDFjbXc5Snl0bGJtTnZaR1ZWVWtsRGIyMXdiMjVsYm5Rb2RYSnNLVHRjYm1RdWNIVnphQ2g3WEc0Z0lDQWdkR2wwYkdVNklDZmt1SXZvdmIxVVZrSnZlT2FPcU9tQWdlYVBrdVM3dGljc1hHNGdJQ0FnZFhKc09pQW5hSFIwY0hNNkx5OW1jbUZ0WVdkcGRDNXZjbWN2Ykhwck1qTTFOVGt2ZEhaaWIzZ3ZMUzkwY21WbEwyMWhhVzRuTEZ4dUlDQWdJR052YkY5MGVYQmxPaUFuZEdWNGRGOHlKMXh1ZlNrN1hHNWtMbkIxYzJnb2UxeHVJQ0FnSUhScGRHeGxPaUFuNXArbDU1eUxWRmJvcnI3bnZhN21sWm5ucUlzbkxGeHVJQ0FnSUhWeWJEb2dKMmgwZEhCek9pOHZabkpoYldGbmFYUXViM0puTDJ4NmF6SXpOVFU1TDNSMlltOTRMeTB2WW14dllpOXRZV2x1THlWRk5DVkNSQ1ZDUmlWRk55VTVOQ1ZCT0NWRk9DVkJSaVZDTkNWRk5pVTVPQ1U0UlMwbFJUVWxRa1lsT0RVbFJUY2xPVU1sT0VJdldGbFJWRlpDYjNnbFJUWWxRVVFsUVRVbFJUa2xRVUVsUVRRbFJUWWxPVE1sT0VRbFJUUWxRa1FsT1VNbFJUZ2xRVVlsUWpRbFJUWWxPVGdsT0VVdWNHUm1KeXhjYmlBZ0lDQmpiMnhmZEhsd1pUb2dKM1JsZUhSZk1pZGNibjBwTzF4dVpDNXdkWE5vS0h0Y2JpQWdJQ0IwYVhSc1pUb2dYQ0xtanFqcGdJSGxwS2ZscnJibWw0OWNJaXhjYmlBZ0lDQjFjbXc2SUNkb2RIUndjem92TDNCa0xuRnhMbU52YlM5ekx6VTFNM05tYkhkcVpUOXphR0Z5WlZOdmRYSmpaVDAxSnl4Y2JpQWdJQ0JqYjJ4ZmRIbHdaVG9nWENKMFpYaDBYekZjSWx4dWZTazdYRzUyWVhJZ2FuVnRjQ0E5SUZzbmRIWmliM2prdXBIbm01am1qcWpwZ0lFbkxDQW41THFSNTV1WTVaQ2JLT2FPcU9tQWdTa25MQ0FuUVVubHZiSG1rSndvNW82bzZZQ0JLU2NzSUNkTldlbVl2K21Iak9TNmtlZWJtQ2NzSUNmcHBwbm1nNFhsdmJIb3A0WW5MQ2ZvbVk3bmlabm5tN1Rta3EwbzVvNm82WUNCS1NkZE8xeHVabTl5SUNoMllYSWdhaUJwYmlCcWRXMXdLU0I3WEc0Z0lDQWdaQzV3ZFhOb0tIdGNiaUFnSUNBZ0lDQWdkR2wwYkdVNklHcDFiWEJiYWwwc1hHNGdJQ0FnSUNBZ0lIVnliRG9nSjJocGEyVnlPaTh2YUc5dFpVQW5JQ3NnYW5WdGNGdHFYU3hjYmlBZ0lDQWdJQ0FnWTI5c1gzUjVjR1U2SUZ3aWRHVjRkRjh6WENKY2JpQWdJQ0I5S1R0Y2JuMWNibk5sZEZKbGMzVnNkQ2hrS1RzaUxDSnpaV0Z5WTJoZmRYSnNJam9pSWl3aVozSnZkWEFpT2lMaWthSHBwcG5wbTRYbWc0VWlMQ0p6WldGeVkyaEdhVzVrSWpvaUlpd2laR1YwWVdsc1gyTnZiRjkwZVhCbElqb2liVzkyYVdWZk1TSXNJbVJsZEdGcGJGOW1hVzVrWDNKMWJHVWlPaUlpTENKelpHVjBZV2xzWDJOdmJGOTBlWEJsSWpvaWJXOTJhV1ZmTVNJc0luTmtaWFJoYVd4ZlptbHVaRjl5ZFd4bElqb2lJaXdpZFdFaU9pSnRiMkpwYkdVaUxDSndjbVZTZFd4bElqb2lJaXdpY0dGblpYTWlPaUpiZTF3aVkyOXNYM1I1Y0dWY0lqcGNJbTF2ZG1sbFh6TmNJaXhjSW01aGJXVmNJanBjSXVhT3FPbUFnVndpTEZ3aWNHRjBhRndpT2x3aWNIVnphRndpTEZ3aWNuVnNaVndpT2x3aWFuTTZYRnh1YkdWMElHbDBaVzF6SUQwZ1cxMDdYRnh1YkdWMElIQjFjMmhwYmlBOUlHUmxZMjlrWlZWU1NVTnZiWEJ2Ym1WdWRDaG5aWFJRWVhKaGJTaGNYRndpY0hWemFIVnliRnhjWENJcEtUdGNYRzVzWlhRZ2RIWnBjQ0E5SUdkbGRFbDBaVzBvSjJocGEyVnlkSFppYjNoelpYUW5MQ0FuSnlrN1hGeHVYRnh1YVhSbGJYTXVjSFZ6YUNoN1hGeHVJQ0FnSUhScGRHeGxPaUFuNTVTMTZLZUdTVkR2dkpvbklDc2dkSFpwY0N4Y1hHNGdJQ0FnZFhKc09pQmNYRndpYVc1d2RYUTZMeTljWEZ3aUlDc2daMlYwU1hSbGJTZ25hR2xyWlhKMGRtSnZlSE5sZENjc0lDZG9kSFJ3T2k4dkp5QXJJR2RsZEVsUUtDa2dLeUFuT2prNU56Z25LU0FySUZ4Y1hDSXZMeTh2NksrMzZMNlQ1WVdsVkZaQ2Izam5xNi9ubW9SSlVPV2NzT1dkZ08rOGpPV21nbWgwZEhBNkx5OWNYRndpSUNzZ1oyVjBTVkFvS1NBcklGeGNYQ0k2T1RrM09DNXFjenB6WlhSSmRHVnRLQ2RvYVd0bGNuUjJZbTk0YzJWMEp5eHBibkIxZENrN2NtVm1jbVZ6YUZCaFoyVW9LVnhjWENJc1hGeHVJQ0FnSUdOdmJGOTBlWEJsT2lBblpteGxlRjlpZFhSMGIyNG5YRnh1ZlNrN1hGeHVkbUZ5SUhCMWNtd2dQU0J3ZFhOb2FXNDdYRnh1WEZ4dWFXWWdLSEIxYzJocGJpNXBibU5zZFdSbGN5Z25YRnhjWEc0bktTQW1KaUFoY0hWemFHbHVMbk4wWVhKMGMxZHBkR2dvSjNzbktTa2dlMXhjYmlBZ0lDQndkWEpzSUQwZ2NIVnphR2x1TG5KbGNHeGhZMlVvWEZ4Y0lseGNYRnh1WEZ4Y0lpd2dKeVFuS1R0Y1hHNTlYRnh1YVdZZ0tIQjFjMmhwYmk1emRHRnlkSE5YYVhSb0tDZG9kSFJ3SnlrZ0ppWWdjSFZ6YUdsdUxtbHVZMngxWkdWektDYzdleWNwS1NCN1hGeHVJQ0FnSUhCMWNtd2dQU0JLVTA5T0xuTjBjbWx1WjJsbWVTaDdYRnh1SUNBZ0lDQWdJQ0JjWEZ3aWJtRnRaVnhjWENJNklGeGNYQ0xtdGJmcG1KVG5tN1Rwazc3bWpxanBnSUZjWEZ3aUxGeGNiaUFnSUNBZ0lDQWdYRnhjSW5WeWJGeGNYQ0k2SUhCMWMyaHBibHhjYmlBZ0lDQjlLVnhjYm4xY1hHNXBaaUFvY0hWemFHbHVMbk4wWVhKMGMxZHBkR2dvSjJoMGRIQnpPaTh2ZDNkM0xtRnNhWGwxYm1SeWFYWmxMbU52YlM5ekx5Y3BLU0I3WEZ4dUlDQWdJR3hsZENCeVpXWjBiMnRsYmlBOUlFcFRUMDR1Y0dGeWMyVW9abVYwWTJnb0oyaHBhMlZ5T2k4dlptbHNaWE12Y25Wc1pYTXZhV041TDJsamVTMWhiR2t0ZEc5clpXNHVhbk52Ymljc0lIdDlLU2xiTUYwdWNtVm1jbVZ6YUY5MGIydGxianRjWEc0Z0lDQWdjSFZ5YkNBOUlFcFRUMDR1YzNSeWFXNW5hV1o1S0h0Y1hHNGdJQ0FnSUNBZ0lGeGNYQ0oxY214Y1hGd2lPaUJ3ZFhOb2FXNHNYRnh1SUNBZ0lDQWdJQ0JjWEZ3aWNtVm1jbVZ6YUY5MGIydGxibHhjWENJNklISmxablJ2YTJWdVhGeHVJQ0FnSUgwcFhGeHVmVnhjYm1sbUlDaHdkWE5vYVc0dWFXNWpiSFZrWlhNb0p6bzFNakF5TUNjcEtTQjdYRnh1SUNBZ0lHbG1JQ2h3ZFhOb2FXNHVhVzVqYkhWa1pYTW9KM0psWkdseVpXTjBVR3hoZVZWeWJDY3BLU0I3WEZ4dUlDQWdJQ0FnSUNCd2RYSnNJRDBnU2xOUFRpNXpkSEpwYm1kcFpua29lMXhjYmlBZ0lDQWdJQ0FnSUNBZ0lGeGNYQ0p1WVcxbFhGeGNJam9nWEZ4Y0l1YTF0K21ZbE9hS2xlV3hqK2VidE9tVHZseGNYQ0lzWEZ4dUlDQWdJQ0FnSUNBZ0lDQWdYRnhjSW5WeWJGeGNYQ0k2SUhCMWMyaHBibHhjYmlBZ0lDQWdJQ0FnZlNsY1hHNGdJQ0FnZlNCbGJITmxJSHRjWEc0Z0lDQWdJQ0FnSUhCMWNtd2dQU0JLVTA5T0xuTjBjbWx1WjJsbWVTaDdYRnh1SUNBZ0lDQWdJQ0FnSUNBZ1hGeGNJbTVoYldWY1hGd2lPaUJjWEZ3aTVyVzM2WmlVNTcyUjZhRzE1b3FWNWJHUFhGeGNJaXhjWEc0Z0lDQWdJQ0FnSUNBZ0lDQmNYRndpZFhKc1hGeGNJam9nY0hWemFHbHVYRnh1SUNBZ0lDQWdJQ0I5S1Z4Y2JpQWdJQ0I5WEZ4dWZWeGNibHhjYmk4dmJHOW5LQ2ZtanFqcGdJRW5LM0IxY213cE8xeGNiblpoY2lCemRHRjBaU0E5SUhKbGNYVmxjM1FvZEhacGNDQXJJQ2N2WVdOMGFXOXVKeXdnZTF4Y2JpQWdJQ0JvWldGa1pYSnpPaUI3WEZ4dUlDQWdJQ0FnSUNBblEyOXVkR1Z1ZEMxVWVYQmxKem9nSjJGd2NHeHBZMkYwYVc5dUwzZ3RkM2QzTFdadmNtMHRkWEpzWlc1amIyUmxaQ2NzWEZ4dUlDQWdJQ0FnSUNBdkx5ZFlMVkpsY1hWbGMzUmxaQzFYYVhSb0p6b2dKMWhOVEVoMGRIQlNaWEYxWlhOMEp5eGNYRzRnSUNBZ0lDQWdJQ2RTWldabGNtVnlKem9nZEhacGNGeGNiaUFnSUNCOUxGeGNiaUFnSUNCMGFXMWxiM1YwT2lBeU1EQXdMRnhjYmlBZ0lDQmliMlI1T2lBblpHODljSFZ6YUNaMWNtdzlKeUFySUhCMWNtd3VjbVZ3YkdGalpTZ3ZYRnhjWENZdlp5d2dKKys4aHUrOGhpY3BMbkpsY0d4aFkyVW9MM1pwWkdWdlhGeGNYRHBjWEZ4Y0wxeGNYRnd2TDJjc0p5Y3BMRnhjYmlBZ0lDQnRaWFJvYjJRNklDZFFUMU5VSjF4Y2JuMHBPMXhjYmk4dmJHOW5LSE4wWVhSbEtUdGNYRzVwWmlBb2MzUmhkR1VnUFQwZ0oyOXJKeWtnZTF4Y2JpQWdJQ0F2TDJ4dlp5aHpkR0YwWlNrN1hGeHVJQ0FnSUdsMFpXMXpMbkIxYzJnb2UxeGNiaUFnSUNBZ0lDQWdkR2wwYkdVNklGeGNYQ0xpaUpwY1hGd2lJQ3NnYzNSaGRHVXNYRnh1SUNBZ0lDQWdJQ0IxY213NklGeGNYQ0pvYVd0bGNqb3ZMMlZ0Y0hSNVhGeGNJaXhjWEc0Z0lDQWdJQ0FnSUdOdmJGOTBlWEJsT2lCY1hGd2lkR1Y0ZEY5alpXNTBaWEpmTVZ4Y1hDSmNYRzRnSUNBZ2ZTazdYRnh1ZlNCbGJITmxJSHRjWEc0Z0lDQWdMeTlzYjJjb2MzUmhkR1VwTzF4Y2JpQWdJQ0JwZEdWdGN5NXdkWE5vS0h0Y1hHNGdJQ0FnSUNBZ0lIUnBkR3hsT2lCY1hGd2k0cFd6WEZ4Y0lpQXJJSE4wWVhSbExGeGNiaUFnSUNBZ0lDQWdkWEpzT2lCY1hGd2lhR2xyWlhJNkx5OWxiWEIwZVZ4Y1hDSXNYRnh1SUNBZ0lDQWdJQ0JqYjJ4ZmRIbHdaVG9nWEZ4Y0luUmxlSFJmWTJWdWRHVnlYekZjWEZ3aVhGeHVJQ0FnSUgwcE8xeGNibHhjYm4xY1hHNXpaWFJTWlhOMWJIUW9hWFJsYlhNcE8xd2lmVjBpTENKcFkyOXVJam9pSWl3aWNISnZlSGtpT2lJaWZRPT1cXFwiXFxuICAgICAgICB9KTtcXG4gICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgIHRpdGxlOiBNWV9SVUxFLnRpdGxlICsgJ+aPkOekuicsXFxuICAgICAgICAgICAgY29udGVudDogJ+acrOinhOWImeS+nei1llhZUeaOqOmAgeinhOWIme+8jOeCueWHu+S4i+mdoueahOehruWumuaMiemSruWvvOWFpVhZUeaOqOmAge+8jOazqOaEj+WvvOWFpeWQjuS4gOWumuimgeWcqFhZUeaOqOmAgemHjOiuvue9ruWlvVRW56uvSVDvvIzlkKbliJnmjqjpgIHlip/og73kuI3og73nlKgnLFxcbiAgICAgICAgICAgIGNvbmZpcm06IHJ1LFxcbiAgICAgICAgICAgIGNhbmNlbDogcnVcXG4gICAgICAgIH0pXFxuICAgIH1cXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInNcXFwiKTtcXG4gICAgfSkpO1xcblxcbiAgICBsZXQgdGlwID0gXFxcIlhZUeaOqOmAgVxcXCI7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdGlwLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCh0aXApID0+IHtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vaG9tZUBYWVHmjqjpgIEnXFxuICAgICAgICB9LCB0aXApLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzJfcm91bmRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaGlrZXI6Ly9pbWFnZXMvYWNjb3VudFxcXCJcXG4gICAgfSk7XFxuICAgIGxldCBkbW9kZSA9IGdldEl0ZW0oXFxcImRtb2RlXFxcIiwgXFxcIuacrOWcsOi9rOeggVxcXCIpO1xcbiAgICBpbml0Q29uZmlnKHtcXG4gICAgICAgIG1vZGU6IGRtb2RlXFxuICAgIH0pO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmqKHlvI/vvJpcXFwiICsgZG1vZGUsXFxuICAgICAgICB1cmw6IFxcXCJzZWxlY3Q6Ly9cXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi6YCJ5oup5qih5byPXFxcIixcXG4gICAgICAgICAgICBvcHRpb25zOiBbXFxcIuacrOWcsOi9rOeggVxcXCIsIFxcXCLlrpjmlrlBUFBcXFwiXSxcXG4gICAgICAgICAgICBjb2w6IDEsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJkbW9kZVxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXCLlrpjmlrlBUFBcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5Yqf77yM6K+356Gu5L+d5omL5py65pyJ5a6J6KOF6Zi/6YeM5LqR55uY5a6Y5pa5QVBQXFxcIjtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip/jgIJcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fMl9yb3VuZFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uMVxcXCJcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+aQnOe0oicsXFxuICAgICAgICBkZXNjOiAn6K+36L6T5YWl5YWz6ZSu6K+NJyxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJykpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCkgKyAnPz8/ZnlwYWdlJztcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcigncycsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKCdzJywgJycpXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIikoKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiXFxcIiA9PSByID8gXFxcIuKAnOKAnOWFqOmDqOKAneKAnVxcXCIgOiBcXFwi5YWo6YOoXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJyXFxcIik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJcXFwiXFxuICAgIH0pO1xcbiAgICBmb3IgKGxldCBpdCBvZiBydWxlcykge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogaXQgPT0gciA/IFxcXCLigJzigJxcXFwiICsgaXQgKyBcXFwi4oCd4oCdXFxcIiA6IGl0LFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocikgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJyXFxcIiwgcik7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBpdCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZScsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiAneXBqLWwnXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn1cXG5sZXQgcyA9IGdldE15VmFyKCdzJywgJycpO1xcbmlmIChzICE9IFxcXCJcXFwiKSB7XFxuICAgIGxldCBwID0gTVlfUEFHRTtcXG4gICAgbGV0IGRhdGEgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIikocCwgciAhPSBcXFwiXFxcIiA/IHIgOiBudWxsKTtcXG5cXG4gICAgbGV0IHBhZ2VpZCA9IFxcXCJ5cGotcGFnZVxcXCIgKyBwO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIHAgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaMS9cXFwiICsgZGF0YS5sZW5ndGgsXFxuICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZCk7XFxuICAgIC8vbG9nKGRhdGEubGVuZ3RoKTtcXG5cXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICAgICAgLy/lpJrnur/nqIvliqDovb0gICAgICAgIFxcbiAgICAgICAgbGV0IHJlYWxQYWdlID0gXFxcIlxcXCIgPT0gciA/IDEgOiBwO1xcbiAgICAgICAgbGV0IHRhc2tzID0gZGF0YS5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHJ1bGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLmZpbmQocywgcmVhbFBhZ2UpO1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBwYXJhbTogaXQsXFxuICAgICAgICAgICAgICAgIGlkOiBcXFwicnVsZUBcXFwiICsgaXQubmFtZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgYmF0Y2hFeGVjdXRlKHRhc2tzLCB7XFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocGFyYW0sIGlkLCBlcnJvciwgcmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgIC8vbG9nKFxcXCJsaXN0ZW5lcjogXFxcIiArIChyZXN1bHQgfHwgW10pLmxlbmd0aClcXG4gICAgICAgICAgICAgICAgcGFyYW0uaSA9IHBhcmFtLmkgKyAxO1xcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5qID0gcGFyYW0uaiArIDE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1CZWZvcmUocGFnZWlkLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXQudGl0bGUuaW5jbHVkZXMoXFxcIuKAnOKAnOKAneKAnVxcXCIpID8gaXQudGl0bGUgOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIGl0LnRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiPGVtPnw8L2VtPlxcXCIsIFxcXCJnXFxcIiksIFxcXCJcXFwiKS5yZXBsYWNlKG5ldyBSZWdFeHAocywgXFxcImdcXFwiKSwgXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogIzFFOTBGRlxcXFxcXFwiPlxcXCIgKyBzICsgXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0LmRlc2MsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LnVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGl0LnBpY191cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogaXQucGljX3VybCA/ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycgOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJfX2FwcFxcXCIgKyBNWV9QQUdFICsgXFxcIkBcXFwiICsgcGFyYW0uaixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAocGFyYW0uaSA+PSBwYXJhbS5hbGwpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0ocGFnZWlkKVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliqDovb3nrKxcXFwiICsgTVlfUEFHRSArIFxcXCLpobXkuK3vvIzov5vluqbvvJpcXFwiICsgKHBhcmFtLmkgKyAxKSArIFxcXCIvXFxcIiArIHBhcmFtLmFsbCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHBhcmFtOiB7XFxuICAgICAgICAgICAgICAgIGFsbDogZGF0YS5sZW5ndGgsXFxuICAgICAgICAgICAgICAgIGk6IDAsXFxuICAgICAgICAgICAgICAgIGo6IC0xXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0oumhtemdolwiLFwicGF0aFwiOlwic291cFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5pZiAoTVlfUEFSQU1TLmtleSkge1xcbiAgICBwdXRNeVZhcihcXFwic1xcXCIsIE1ZX1BBUkFNUy5rZXkpO1xcbn1cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9zb3VcXFwiKSkucnVsZSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJDQ09GXCIsXCJwYXRoXCI6XCJjY29mXCIsXCJydWxlXCI6XCJ2YXIgd3JhcHUgPSAodSkgPT4ge1xcbiAgICBpZihjb25maWcubW9kZSA9PSBcXFwi5pys5Zyw6L2s56CBXFxcIil7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZSdcXG4gICAgfVxcbiAgICBpZiAoL2FsaXl1bmRyaXZlLy50ZXN0KHUpKSB7XFxuICAgICAgICBjb25zdCBbbGluaywgX3NoYXJlX3B3ZF0gPSB1LnNwbGl0KCc/c2hhcmVfcHdkPScpO1xcbiAgICAgICAgY29uc3QgW19saW5rLCBfZm9sZGVySURdID0gbGluay5zcGxpdCgnL2ZvbGRlci8nKTtcXG4gICAgICAgIGxldCBzaGFyZV9wd2QgPSAoX3NoYXJlX3B3ZCB8fCAnJykuc3BsaXQoJyNuYW1lPScpWzBdIHx8ICcnO1xcbiAgICAgICAgbGV0IHNoYXJlSWQgPSBfbGluay5zcGxpdCgnY29tL3MvJylbMV07XFxuICAgICAgICByZXR1cm4gJ3NtYXJ0ZHJpdmU6Ly9zaGFyZS9icm93c2U/c2hhcmVJZD0nICsgc2hhcmVJZCArICcmc2hhcmVQd2Q9JyArIHNoYXJlX3B3ZDtcXG4gICAgfVxcbiAgICByZXR1cm4gXFxcIndlYjovL1xcXCIgKyB1O1xcbn07XFxuXFxuJC5leHBvcnRzID0ge1xcbiAgICBuYW1lOiAnQ0NPRicsXFxuICAgIHBhZ2U6IHRydWUsXFxuICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgIGxldCBkID0gW11cXG4gICAgICAgIGNvbnN0IHtcXG4gICAgICAgICAgICBieXRlc1RvU2l6ZSxcXG4gICAgICAgICAgICBjb2xvclxcbiAgICAgICAgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3Rvb2xzJyk7XFxuICAgICAgICBsZXQgaHRtbCA9IGZldGNoKCdodHRwczovL3Bhbi5jY29mLmNjL2FwaS9zZWFyY2gnLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiY29udGVudC10eXBlXFxcIjogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3Bhbi5jY29mLmNjL3NlYXJjaD9rZXl3b3JkPScgKyBzXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgIFxcXCJwYWdlU2l6ZVxcXCI6IDIwLFxcbiAgICAgICAgICAgICAgICBcXFwicGFnZU51bVxcXCI6IHBhZ2UsXFxuICAgICAgICAgICAgICAgIFxcXCJrZXl3b3JkXFxcIjogcyxcXG4gICAgICAgICAgICAgICAgXFxcImZyb21Nb2JpbGVcXFwiOiB0cnVlXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGxldCBsaXN0ID0gSlNPTi5wYXJzZShodG1sKVxcbiAgICAgICAgICAgIC5kYXRhLnJvd3NcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGxldCBpdCA9IGxpc3RbaV1cXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBpdC5maWxlTmFtZVxcbiAgICAgICAgICAgIGxldCBtdXJsID0gaXQudXJsXFxuICAgICAgICAgICAgbGV0IHR5cGUgPSBpdC50eXBlLnJlcGxhY2UoL2ZvbGRlci8sICfmlofku7blpLknKS5yZXBsYWNlKC9maWxlLywgJ+aWh+S7ticpXFxuICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHMpKSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+Q0NPRjwvZm9udD4mbmJzcDsnICsgJ+aWh+S7tuexu+Wei++8micgKyB0eXBlICsgJ++8jOaWh+S7tuWkp+Wwj++8micgKyBieXRlc1RvU2l6ZShpdC5zaXplKSxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIG11cmwgKyAnPz9meXBhZ2UnXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KG11cmwpICsgJz8/P2Z5cGFnZSdcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUobXVybClcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZFxcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5bel5YW3XCIsXCJwYXRoXCI6XCJ0b29sc1wiLFwicnVsZVwiOlwiZnVuY3Rpb24gYnl0ZXNUb1NpemUoc2l6ZSkge1xcbiAgICBpZiAoc2l6ZSA8IDAuMSAqIDEwMjQpIHtcXG4gICAgICAgIC8v5bCP5LqOMC4xS0LvvIzliJnovazljJbmiJBCXFxuICAgICAgICBzaXplID0gc2l6ZS50b0ZpeGVkKDIpICsgXFxcIkJcXFwiO1xcbiAgICB9IGVsc2UgaWYgKHNpemUgPCAwLjEgKiAxMDI0ICogMTAyNCkge1xcbiAgICAgICAgLy8g5bCP5LqOMC4xTULvvIzliJnovazljJbmiJBLQlxcbiAgICAgICAgc2l6ZSA9IChzaXplIC8gMTAyNCkudG9GaXhlZCgyKSArIFxcXCJLQlxcXCI7XFxuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDAuMSAqIDEwMjQgKiAxMDI0ICogMTAyNCkge1xcbiAgICAgICAgLy8g5bCP5LqOMC4xR0LvvIzliJnovazljJbmiJBNQlxcbiAgICAgICAgc2l6ZSA9IChzaXplIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKSArIFxcXCJNQlxcXCI7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvLyDlhbbku5bovazljJbmiJBHQlxcbiAgICAgICAgc2l6ZSA9IChzaXplIC8gKDEwMjQgKiAxMDI0ICogMTAyNCkpLnRvRml4ZWQoMikgKyBcXFwiR0JcXFwiO1xcbiAgICB9XFxuICAgIC8vIOi9rOaIkOWtl+espuS4slxcbiAgICBsZXQgc2l6ZVN0ciA9IHNpemUgKyBcXFwiXFxcIixcXG4gICAgICAgIC8vIOiOt+WPluWwj+aVsOeCueWkhOeahOe0ouW8lVxcbiAgICAgICAgaW5kZXggPSBzaXplU3RyLmluZGV4T2YoXFxcIi5cXFwiKSxcXG4gICAgICAgIC8vIOiOt+WPluWwj+aVsOeCueWQjuS4pOS9jeeahOWAvFxcbiAgICAgICAgZG91ID0gc2l6ZVN0ci5zdWJzdHIoaW5kZXggKyAxLCAyKTtcXG4gICAgLy8g5Yik5pat5ZCO5Lik5L2N5piv5ZCm5Li6MDDvvIzlpoLmnpzmmK/liJnliKDpmaQwMFxcbiAgICBpZiAoZG91ID09PSBcXFwiMDBcXFwiKSByZXR1cm4gc2l6ZVN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpICsgc2l6ZVN0ci5zdWJzdHIoaW5kZXggKyAzLCAyKTtcXG4gICAgcmV0dXJuIHNpemU7XFxufVxcbiQuZXhwb3J0cy5ieXRlc1RvU2l6ZSA9IGJ5dGVzVG9TaXplO1xcbiQuZXhwb3J0cy5jb2xvciA9IGZ1bmN0aW9uKHRleHQsIGNvbG9yKSB7XFxuICAgIHRleHQgKz0gXFxcIlxcXCI7XFxuICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcIuKAnOKAnOKAneKAnVxcXCIpID09PSAwKSB7XFxuICAgICAgICB0ZXh0LnJlcGxhY2UoXFxcIuKAnOKAnOKAneKAnVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgfVxcbiAgICByZXR1cm4gXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdcXFwiICsgY29sb3IgKyBcXFwiJz5cXFwiICsgdGV4dCArIFxcXCI8L2ZvbnQ+XFxcIjtcXG59XFxuXFxuJC5leHBvcnRzLnNsZWVwID0gZnVuY3Rpb24odGltZW91dCkge1xcbiAgICBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKHRpbWVvdXQpO1xcbn1cXG5cXG5mdW5jdGlvbiBodG1sVGFnKHRhZywgdGV4dCkge1xcbiAgICB0ZXh0ICs9IFxcXCJcXFwiO1xcbiAgICBpZiAodGV4dC5pbmRleE9mKFxcXCLigJzigJzigJ3igJ1cXFwiKSA9PT0gMCkge1xcbiAgICAgICAgdGV4dC5yZXBsYWNlKFxcXCLigJzigJzigJ3igJ1cXFwiLCBcXFwiXFxcIik7XFxuICAgIH1cXG4gICAgcmV0dXJuIFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIjxcXFwiICsgdGFnICsgXFxcIj5cXFwiICsgdGV4dCArIFxcXCI8L1xcXCIgKyB0YWcgKyBcXFwiPlxcXCI7XFxuXFxufVxcbiQuZXhwb3J0cy5odG1sVGFnID0gaHRtbFRhZztcXG4kLmV4cG9ydHMuc21hbGwgPSBmdW5jdGlvbih0ZXh0KSB7XFxuICAgIHJldHVybiBodG1sVGFnKFxcXCJzbWFsbFxcXCIsIHRleHQpO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRUaW1lKGZpbGUsaXNTdGFuZGFyZCkge1xcbiAgICBpc1N0YW5kYXJkID0gaXNTdGFuZGFyZHx8ZmFsc2U7XFxuICAgIGxldCB0VGltZSA9IGZpbGUudXBkYXRlZF9hdCB8fCBmaWxlLnRpbWVfc3RyIHx8IFxcXCJcXFwiO1xcbiAgICB0VGltZSA9IHRUaW1lLnNwbGl0KFxcXCJUXFxcIik7XFxuICAgIGxldCBkYXRlID0gdFRpbWVbMF07XFxuICAgIGlmKGlzU3RhbmRhcmQpe1xcbiAgICAgICAgZGF0ZSA9IGRhdGUucmVwbGFjZSgvLS9nLFxcXCIvXFxcIik7XFxuICAgIH1cXG4gICAgdFRpbWUgPSB0VGltZVsxXS5zcGxpdCgvWnxcXFxcLi8pO1xcbiAgICBkYXRlICs9IFxcXCIgXFxcIiArIHRUaW1lWzBdO1xcbiAgICByZXR1cm4gZGF0ZTtcXG59XFxuZnVuY3Rpb24gZ2V0VGltZUludCh0aW1lU3RyKXtcXG4gICAgcmV0dXJuIChuZXcgRGF0ZSh0aW1lU3RyKSkuZ2V0VGltZSgpXFxufVxcbiQuZXhwb3J0cy5nZXRUaW1lID0gZ2V0VGltZTtcXG5cXG5sZXQgY2huTnVtQ2hhciA9IHtcXG4gICAg6Zu2OiAwLFxcbiAgICDkuIA6IDEsXFxuICAgIOS6jDogMixcXG4gICAg5LiJOiAzLFxcbiAgICDlm5s6IDQsXFxuICAgIOS6lDogNSxcXG4gICAg5YWtOiA2LFxcbiAgICDkuIM6IDcsXFxuICAgIOWFqzogOCxcXG4gICAg5LmdOiA5XFxufTtcXG5cXG5sZXQgY2huTmFtZVZhbHVlID0ge1xcbiAgICDljYE6IHtcXG4gICAgICAgIHZhbHVlOiAxMCxcXG4gICAgICAgIHNlY1VuaXQ6IGZhbHNlXFxuICAgIH0sXFxuICAgIOeZvjoge1xcbiAgICAgICAgdmFsdWU6IDEwMCxcXG4gICAgICAgIHNlY1VuaXQ6IGZhbHNlXFxuICAgIH0sXFxuICAgIOWNgzoge1xcbiAgICAgICAgdmFsdWU6IDEwMDAsXFxuICAgICAgICBzZWNVbml0OiBmYWxzZVxcbiAgICB9LFxcbiAgICDkuIc6IHtcXG4gICAgICAgIHZhbHVlOiAxMDAwMCxcXG4gICAgICAgIHNlY1VuaXQ6IHRydWVcXG4gICAgfSxcXG4gICAg5Lq/OiB7XFxuICAgICAgICB2YWx1ZTogMTAwMDAwMDAwLFxcbiAgICAgICAgc2VjVW5pdDogdHJ1ZVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIENoaW5lc2VUb051bWJlcihjaG5TdHIpIHtcXG4gICAgbGV0IHJ0biA9IDA7XFxuICAgIGxldCBzZWN0aW9uID0gMDtcXG4gICAgbGV0IG51bWJlciA9IDA7XFxuICAgIGxldCBzZWNVbml0ID0gZmFsc2U7XFxuICAgIGxldCBzdHIgPSBjaG5TdHIuc3BsaXQoJycpO1xcblxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgbGV0IG51bSA9IGNobk51bUNoYXJbc3RyW2ldXTtcXG4gICAgICAgIGlmICh0eXBlb2YgbnVtICE9PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgICAgIG51bWJlciA9IG51bTtcXG4gICAgICAgICAgICBpZiAoaSA9PT0gc3RyLmxlbmd0aCAtIDEpIHtcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiArPSBudW1iZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBsZXQgdW5pdCA9IGNobk5hbWVWYWx1ZVtzdHJbaV1dLnZhbHVlO1xcbiAgICAgICAgICAgIHNlY1VuaXQgPSBjaG5OYW1lVmFsdWVbc3RyW2ldXS5zZWNVbml0O1xcbiAgICAgICAgICAgIGlmIChzZWNVbml0KSB7XFxuICAgICAgICAgICAgICAgIHNlY3Rpb24gPSAoc2VjdGlvbiArIG51bWJlcikgKiB1bml0O1xcbiAgICAgICAgICAgICAgICBydG4gKz0gc2VjdGlvbjtcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiA9IDA7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiArPSAobnVtYmVyICogdW5pdCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIG51bWJlciA9IDA7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJ0biArIHNlY3Rpb247XFxufVxcblxcbmZ1bmN0aW9uIG5hbWVDb21wYXJlKGEsIGIpIHtcXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpXFxuICAgICAgICByZXR1cm4gYSA9PSBudWxsID8gYiA9PSBudWxsID8gMCA6IC0xIDogMTtcXG5cXG4gICAgYSA9IGEucmVwbGFjZSgvKFvpm7bkuIDkuozkuInlm5vkupTlha3kuIPlhavkuZ3ljYHnmb7ljYPkuIfkur9dKS9nLCBmdW5jdGlvbihtYXRjaCwgcDEsIHAyLCBwMywgb2Zmc2V0LCBzdHJpbmcpIHtcXG4gICAgICAgIC8vIHAxIGlzIG5vbmRpZ2l0cywgcDIgZGlnaXRzLCBhbmQgcDMgbm9uLWFscGhhbnVtZXJpY3NcXG4gICAgICAgIHJldHVybiBDaGluZXNlVG9OdW1iZXIocDEpO1xcbiAgICB9KVxcbiAgICBiID0gYi5yZXBsYWNlKC8oW+mbtuS4gOS6jOS4ieWbm+S6lOWFreS4g+WFq+S5neWNgeeZvuWNg+S4h+S6v10pL2csIGZ1bmN0aW9uKG1hdGNoLCBwMSwgcDIsIHAzLCBvZmZzZXQsIHN0cmluZykge1xcbiAgICAgICAgLy8gcDEgaXMgbm9uZGlnaXRzLCBwMiBkaWdpdHMsIGFuZCBwMyBub24tYWxwaGFudW1lcmljc1xcbiAgICAgICAgcmV0dXJuIENoaW5lc2VUb051bWJlcihwMSk7XFxuICAgIH0pXFxuXFxuICAgIGxldCBOVU1CRVJTID0gamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4uY29tcGlsZShcXFwiKD88PVxcXFxcXFxcRCkoPz1cXFxcXFxcXGQpfCg/PD1cXFxcXFxcXGQpKD89XFxcXFxcXFxEKVxcXCIpXFxuICAgIGxldCBzcGxpdDEgPSBOVU1CRVJTLnNwbGl0KG5ldyBqYXZhLmxhbmcuU3RyaW5nKGEpKTtcXG4gICAgbGV0IHNwbGl0MiA9IE5VTUJFUlMuc3BsaXQobmV3IGphdmEubGFuZy5TdHJpbmcoYikpO1xcblxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKHNwbGl0MS5sZW5ndGgsIHNwbGl0Mi5sZW5ndGgpOyBpKyspIHtcXG4gICAgICAgIGxldCBjMSA9IHNwbGl0MVtpXS5jaGFyQ29kZUF0KDApO1xcbiAgICAgICAgbGV0IGMyID0gc3BsaXQyW2ldLmNoYXJDb2RlQXQoMCk7XFxuICAgICAgICBsZXQgY21wID0gMDtcXG4gICAgICAgIGxldCB6ZXJvQ2hhckNvZGUgPSAnMCcuY2hhckNvZGVBdCgwKTtcXG4gICAgICAgIGxldCBuaW5lQ2hhckNvZGUgPSAnOScuY2hhckNvZGVBdCgwKTtcXG5cXG4gICAgICAgIGlmIChjMSA+PSB6ZXJvQ2hhckNvZGUgJiYgYzEgPD0gbmluZUNoYXJDb2RlICYmIGMyID49IHplcm9DaGFyQ29kZSAmJiBjMiA8PSBuaW5lQ2hhckNvZGUpIHtcXG4gICAgICAgICAgICBjbXAgPSBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIoc3BsaXQxW2ldKS5jb21wYXJlVG8obmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHNwbGl0MltpXSkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKGNtcCA9PT0gMCkge1xcbiAgICAgICAgICAgIGxldCByZWdleCA9IC9bYS16QS1aMC05XS9cXG4gICAgICAgICAgICBsZXQgczEgPSBTdHJpbmcoc3BsaXQxW2ldKVxcbiAgICAgICAgICAgIGxldCBzMiA9IFN0cmluZyhzcGxpdDJbaV0pXFxuICAgICAgICAgICAgaWYgKHJlZ2V4LnRlc3QoczEpIHx8IHJlZ2V4LnRlc3QoczIpKSB7XFxuICAgICAgICAgICAgICAgIGNtcCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nKHNwbGl0MVtpXSkuY29tcGFyZVRvKG5ldyBqYXZhLmxhbmcuU3RyaW5nKHNwbGl0MltpXSkpO1xcbiAgICAgICAgICAgICAgICAvLyBjbXAgPSBzMS5sb2NhbGVDb21wYXJlKHMyLCAnZW4nKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGNtcCA9IHMxLmxvY2FsZUNvbXBhcmUoczIsICd6aCcpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKGNtcCAhPT0gMCkge1xcbiAgICAgICAgICAgIHJldHVybiBjbXA7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgbGV0IGxlbmd0aENtcCA9IHNwbGl0MS5sZW5ndGggLSBzcGxpdDIubGVuZ3RoO1xcbiAgICAvLyBpZiAobGVuZ3RoQ21wICE9PSAwKSBsZW5ndGhDbXAgPSBsZW5ndGhDbXAgPiAwID8gLTEgOiAxO1xcbiAgICByZXR1cm4gbGVuZ3RoQ21wO1xcbn1cXG5cXG4kLmV4cG9ydHMuc29ydHMgPSBmdW5jdGlvbihsaXN0LCBzb3J0KSB7XFxuICAgIGlmIChzb3J0ID09PSBcXFwi57G75Z6LXFxcIikge1xcbiAgICAgICAgLy8gbG9nKFxcXCLnsbvlnovmjpLluo9cXFwiKTtcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGEudHlwZSAtIGIudHlwZVxcbiAgICAgICAgfSk7XFxuICAgIH0gZWxzZSBpZiAoc29ydCA9PT0gXFxcIuWQjeensFxcXCIpIHtcXG4gICAgICAgIC8vIGxvZyhcXFwi5ZCN56ew5o6S5bqPXFxcIik7XFxuICAgICAgICAvLyBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcbiAgICAgICAgLy8gICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUsIFxcXCJ6aFxcXCIpXFxuICAgICAgICAvLyB9KTtcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5hbWVDb21wYXJlKGEubmFtZXx8YS50aXRsZSwgYi5uYW1lfHxiLnRpdGxlKTtcXG4gICAgICAgIH0pO1xcbiAgICB9IGVsc2UgaWYgKHNvcnQgPT09IFxcXCLlpKflsI9cXFwiKSB7XFxuICAgICAgICAvLyBsb2coXFxcIuWkp+Wwj+aOkuW6j1xcXCIpO1xcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgICAgICByZXR1cm4gKGEuc2l6ZSB8fCBOdW1iZXIoYS5zaXplX3N0cikgfHwgMCkgLSAoYi5zaXplIHx8IE51bWJlcihiLnNpemVfc3RyKSB8fCAwKTtcXG4gICAgICAgIH0pO1xcbiAgICB9ZWxzZSBpZiAoc29ydCA9PT0gXFxcIuaXtumXtFxcXCIpIHtcXG4gICAgICAgIC8vIGxvZyhcXFwi5pe26Ze05o6S5bqPXFxcIik7XFxuICAgICAgICBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcbiAgICAgICAgICAgIHJldHVybiBnZXRUaW1lSW50KGdldFRpbWUoYSx0cnVlKSkgLSBnZXRUaW1lSW50KGdldFRpbWUoYix0cnVlKSlcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHJldHVybiBsaXN0XFxufVxcblxcbmZ1bmN0aW9uIHNpbWlsYXIocywgdCwgZikgey8v5Yik5pat5Lik5Liq5a2X56ym5Liy5LmL6Ze055qE55u45Ly85bqmXFxuICAgIGlmICghcyB8fCAhdCkge1xcbiAgICAgICAgcmV0dXJuIDBcXG4gICAgfVxcbiAgICBpZihzID09PSB0KXtcXG4gICAgICAgIHJldHVybiAxMDA7XFxuICAgIH1cXG4gICAgdmFyIGwgPSBzLmxlbmd0aCA+IHQubGVuZ3RoID8gcy5sZW5ndGggOiB0Lmxlbmd0aFxcbiAgICB2YXIgbiA9IHMubGVuZ3RoXFxuICAgIHZhciBtID0gdC5sZW5ndGhcXG4gICAgdmFyIGQgPSBbXVxcbiAgICBmID0gZiB8fCAyXFxuICAgIHZhciBtaW4gPSBmdW5jdGlvbiAoYSwgYiwgYykge1xcbiAgICAgICAgcmV0dXJuIGEgPCBiID8gKGEgPCBjID8gYSA6IGMpIDogKGIgPCBjID8gYiA6IGMpXFxuICAgIH1cXG4gICAgdmFyIGksIGosIHNpLCB0aiwgY29zdFxcbiAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1cXG4gICAgaWYgKG0gPT09IDApIHJldHVybiBuXFxuICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgaSsrKSB7XFxuICAgICAgICBkW2ldID0gW11cXG4gICAgICAgIGRbaV1bMF0gPSBpXFxuICAgIH1cXG4gICAgZm9yIChqID0gMDsgaiA8PSBtOyBqKyspIHtcXG4gICAgICAgIGRbMF1bal0gPSBqXFxuICAgIH1cXG4gICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHtcXG4gICAgICAgIHNpID0gcy5jaGFyQXQoaSAtIDEpXFxuICAgICAgICBmb3IgKGogPSAxOyBqIDw9IG07IGorKykge1xcbiAgICAgICAgICAgIHRqID0gdC5jaGFyQXQoaiAtIDEpXFxuICAgICAgICAgICAgaWYgKHNpID09PSB0aikge1xcbiAgICAgICAgICAgICAgICBjb3N0ID0gMFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGNvc3QgPSAxXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGRbaV1bal0gPSBtaW4oZFtpIC0gMV1bal0gKyAxLCBkW2ldW2ogLSAxXSArIDEsIGRbaSAtIDFdW2ogLSAxXSArIGNvc3QpXFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgbGV0IHJlcyA9ICgxIC0gZFtuXVttXSAvIGwpICoxMDBcXG4gICAgcmV0dXJuIHJlcy50b0ZpeGVkKGYpXFxufVxcblxcbiQuZXhwb3J0cy5zaW1pbGFyID0gc2ltaWxhcjtcXG4kLmV4cG9ydHMucmVtb3ZlRXh0ID0gZnVuY3Rpb24gKGZpbGUpe1xcbiAgICByZXR1cm4gZmlsZS5zcGxpdCgnLicpLnNsaWNlKDAsLTEpLmpvaW4oJy4nKVxcbn07XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJ1XCIsXCJwYXRoXCI6XCJ1XCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSBmdW5jdGlvbihydWxlLCBvcmlnaW4sIG1vZGUpIHtcXG4gICAgcmV0dXJuICQudG9TdHJpbmcoKHJ1bGUsIG9yaWdpbiwgbW9kZSkgPT4ge1xcbiAgICAgICAgbGV0IGhvc3QgPSBvcmlnaW4ucmVwbGFjZShuZXcgUmVnRXhwKFxcXCJodHRwOi8vfGh0dHBzOi8vXFxcIiksIFxcXCJcXFwiKS5zcGxpdChcXFwiL1xcXCIpWzBdO1xcbiAgICAgICAgbGV0IGhvc3RzID0gaG9zdC5zcGxpdChcXFwiLlxcXCIpO1xcbiAgICAgICAgaWYgKGhvc3RzLmxlbmd0aCA+IDIpIHtcXG4gICAgICAgICAgICBob3N0ID0gaG9zdHNbaG9zdHMubGVuZ3RoIC0gMl0gKyBcXFwiLlxcXCIgKyBob3N0c1tob3N0cy5sZW5ndGggLSAxXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCJtYWduZXRcXFwiKSkge1xcbiAgICAgICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4qemmqOaPkOekulxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFxcXCLmo4DmtYvliLDmlrDnmoTno4Hpk77lnLDlnYDvvIzngrnlh7vnoa7lrprmjInpkq7ljbPlj6/mkq3mlL7vvIzngrnlh7vlj5bmtojmjInpkq7lj6/ku6XlpI3liLbpk77mjqVcXFwiLFxcbiAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKChtYWcpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWc7XFxuICAgICAgICAgICAgICAgIH0sIGlucHV0KSxcXG4gICAgICAgICAgICAgICAgY2FuY2VsOiAkLnRvU3RyaW5nKChtYWcpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBtYWdcXG4gICAgICAgICAgICAgICAgfSwgaW5wdXQpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuaW5jbHVkZXMoXFxcImFsaXl1bmRyaXZlLmNvbVxcXCIpICYmIG1vZGUgIT0gXFxcIuWumOaWuUFQUFxcXCIpIHtcXG4gICAgICAgICAgICAvL2xvZyhpbnB1dCk7XFxuICAgICAgICAgICAgaWYgKGlucHV0LmluY2x1ZGVzKCdjaGVja3VybD91cmw9JykgJiYgaW5wdXQuaW5jbHVkZXMoJyZ1cmxyZWZlcicpKSB7XFxuICAgICAgICAgICAgICAgIGlucHV0ID0gZGVjb2RlVVJJQ29tcG9uZW50KGlucHV0LnNwbGl0KCcmdXJscmVmZXInKVswXS5zcGxpdCgnY2hlY2t1cmw/dXJsPScpWzFdKTtcXG4gICAgICAgICAgICAgICAgLy9sb2coJ+i0tOWQpycraW5wdXQpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIumYv+mHjOS6keebmFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogXFxcImhpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPVxcXCIgKyB1cmwgKyAnPz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3B1c2g/cnVsZT1cXFwiICsgcnVsZSArIFxcXCImdXJsPWhpa2VyOi8vZW1wdHkjI1xcXCIgKyBlbmNvZGVVUklDb21wb25lbnQodXJsKSArICc/Pz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICB9KSlcXG4gICAgICAgICAgICB9LCBpbnB1dCwgcnVsZSlcXG4gICAgICAgIH0gZWxzZSBpZiAoL1xcXFwuKG1wM3xmbGFjfG00YSkkLy50ZXN0KGlucHV0KSkge1xcbiAgICAgICAgICAgIC8vbG9nKGlucHV0KTtcXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucGxheVZpZGVvKHVybCk7XFxuICAgICAgICAgICAgfSwgaW5wdXQsIHJ1bGUpXFxuICAgICAgICB9IGVsc2UgaWYgKCFpbnB1dC5pbmNsdWRlcyhob3N0KSAmJiBpbnB1dC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikpIHtcXG4gICAgICAgICAgICAvL2xvZyhpbnB1dCk7XFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSwgbW9kZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLor6bmg4VcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3lzZng/cnVsZT1cXFwiICsgcnVsZSArIFxcXCImcj1cXFwiICsgcnVsZSArIFxcXCImbW9kZT1cXFwiICsgbW9kZSArIFxcXCIjI1xcXCIgKyB1cmwsXFxuICAgICAgICAgICAgICAgIH0pKVxcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlLCBtb2RlKTtcXG4gICAgICAgIH0gZWxzZSBpZiAoIWlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgIC8vbG9nKGlucHV0KTtcXG4gICAgICAgICAgICAvL+iDveWUpOi1t0FQUOeahOeZveWQjeWNlVxcbiAgICAgICAgICAgIGxldCB3aGl0ZSA9IFtcXG4gICAgICAgICAgICAgICAgXFxcInFrbGlua1xcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJiZG5ldGRpc2tcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwieHVubGVpYXBwXFxcIlxcbiAgICAgICAgICAgIF07XFxuICAgICAgICAgICAgbGV0IGluV2hpdGUgPSB3aGl0ZS5maWx0ZXIoaXQgPT4gaW5wdXQuc3RhcnRzV2l0aChpdCkpLmxlbmd0aCA+IDA7XFxuICAgICAgICAgICAgaWYgKCFpbldoaXRlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW5UaGlyZEFwcCAmJiBmeV9icmlkZ2VfYXBwLm9wZW5UaGlyZEFwcCh1cmwpO1xcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlKVxcbiAgICAgICAgfSBlbHNlIHtcXG5cXG4gICAgICAgIH1cXG4gICAgfSwgcnVsZSwgb3JpZ2luLCBtb2RlKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJ5c2Z4XCIsXCJwYXRoXCI6XCJ5c2Z4XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmxldCBydWxlID0gZ2V0UGFyYW0oXFxcInJcXFwiKS5zcGxpdChcXFwiIyNcXFwiKVswXTtcXG5sZXQgbW9kZSA9IChnZXRQYXJhbShcXFwibW9kZVxcXCIpIHx8IFxcXCJcXFwiKS5zcGxpdChcXFwiIyNcXFwiKVswXTtcXG5sZXQgdXJsID0gTVlfVVJMLnNwbGl0KFxcXCIjI1xcXCIpWzFdO1xcbmxldCBpdGUgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91XFxcIikocnVsZSwgZ2V0SG9tZSh1cmwpLG1vZGUpO1xcbmxldCBqcyA9ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICB0cnkge1xcbiAgICAgICAgaWYgKGRvY3VtZW50LnRpdGxlICYmIGRvY3VtZW50LnRpdGxlLmxlbmd0aCkge1xcbiAgICAgICAgICAgIGxldCByID0gJCQkKCkubGF6eVJ1bGUoKHQpID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKHQpO1xcbiAgICAgICAgICAgIH0sIGRvY3VtZW50LnRpdGxlKTtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnBhcnNlTGF6eVJ1bGUocik7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGZ5X2JyaWRnZV9hcHAubG9nKGUudG9TdHJpbmcoKSk7XFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgIHVybDogdXJsLFxcbiAgICBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIixcXG4gICAgZGVzYzogXFxcIjEwMCUmJmZsb2F0XFxcIixcXG4gICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICB1cmxJbnRlcmNlcHRvcjogaXRlLFxcbiAgICAgICAganM6IGpzLFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZSxcXG4gICAgICAgIGpzTG9hZGluZ0luamVjdDogdHJ1ZSxcXG4gICAgICAgIGZsb2F0VmlkZW86IHRydWVcXG4gICAgfVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogdXJsXFxuICAgIH1cXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmjqjpgIFcIixcInBhdGhcIjpcInB1c2hcIixcInJ1bGVcIjpcImpzOlxcbi8vbG9nKE1ZX1VSTCk7XFxudmFyIGl0ZW1zID0gW107XFxudmFyIHJlYWx1cmwgPSBNWV9VUkwuc3BsaXQoJyMjJylbMV0uc3BsaXQoJz8/PycpWzBdO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgaXRlbXMucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIvCfk70g5o6o6YCB5YiwVFZCb3gg8J+TulxcXCIsXFxuICAgICAgICB1cmw6ICQocmVhbHVybCkubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIGlucHV0ID0gZGVjb2RlVVJJQ29tcG9uZW50KGlucHV0KTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3J1bGU9WFlR5o6o6YCBJnB1c2h1cmw9JyArIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcIlxcXCJcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFxcXCLimIHvuI/pmL/ph4xBUFDmiZPlvIDwn5K9XFxcIixcXG4gICAgICAgIHVybDogJChyZWFsdXJsKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgLy9pbnB1dCA9IGRlY29kZVVSSUNvbXBvbmVudChpbnB1dCk7XFxuICAgICAgICAgICAgY29uc3QgW2xpbmssIF9zaGFyZV9wd2RdID0gZGVjb2RlVVJJQ29tcG9uZW50KGlucHV0KS5zcGxpdCgnP3NoYXJlX3B3ZD0nKTtcXG4gICAgICAgICAgICBjb25zdCBbX2xpbmssIF9mb2xkZXJJRF0gPSBsaW5rLnNwbGl0KCcvZm9sZGVyLycpO1xcbiAgICAgICAgICAgIGxldCBzaGFyZV9wd2QgPSAoX3NoYXJlX3B3ZCB8fCAnJykuc3BsaXQoJyNuYW1lPScpWzBdIHx8ICcnO1xcbiAgICAgICAgICAgIGxldCBzaGFyZUlkID0gX2xpbmsuc3BsaXQoJ2NvbS9zLycpWzFdO1xcbiAgICAgICAgICAgIHJldHVybiAnc21hcnRkcml2ZTovL3NoYXJlL2Jyb3dzZT9zaGFyZUlkPScgKyBzaGFyZUlkICsgJyZzaGFyZVB3ZD0nICsgc2hhcmVfcHdkO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMlxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJcXFwiXFxuICAgIH0pO1xcbn1cXG5pZiAoZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLmluY2x1ZGVzKCd3d3cuYWxpeXVuZHJpdmUnKSAmJiAhcmVhbHVybC5pbmNsdWRlcygnJTNCJTdCJykpIHtcXG4gICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2Uvc2hhcmlkJywge30pKS5ydWxlKVxcbn1cXG5zZXRSZXN1bHQoaXRlbXMpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5o6o6YCB5Luj56CBXCIsXCJwYXRoXCI6XCJwdXNoY29kZVwiLFwicnVsZVwiOlwianM6XFxubGV0IHB1c2ggPSBKU09OLnN0cmluZ2lmeSh7XFxuICAgIFxcXCJuYW1lXFxcIjogcHVzaG5hbWUsXFxuICAgIFxcXCJ1cmxcXFwiOiB0dWlzb25nLmpvaW4oJyMnKSxcXG4gICAgXFxcInNoYXJlX2lkXFxcIjogc2hhcmVJZCxcXG4gICAgXFxcInJlZnJlc2hfdG9rZW5cXFwiOiByZWZ0b2tlblxcbn0pLnJlcGxhY2UoL1xcXFwmL2csICfvvIbvvIYnKTtcXG5pZiAodHVpc29uZy5sZW5ndGggPiAwKSB7XFxuICAgIGl0ZW1zLnVuc2hpZnQoe1xcbiAgICAgICAgdGl0bGU6IFxcXCLwn5O95o6o6YCB5b2T5YmN6aG16Z+z6KeG6aKR8J+TulxcXCIsXFxuICAgICAgICB1cmw6ICQocHVzaCkubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/cnVsZT1YWVHmjqjpgIEmcHVzaHVybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KTtcXG4gICAgaXRlbXMudW5zaGlmdCh7XFxuICAgICAgICB0aXRsZTogKGdldEl0ZW0oJ3F1YWxpdHknLCAnJykgPT0gJzEnID8gJ+WOn+eUu+aSreKImicgOiAn6L2s56CB5pKt4oiaJyksXFxuICAgICAgICB1cmw6IGBoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpnZXRJdGVtKCdxdWFsaXR5JywnMCcpPT0nMSc/c2V0SXRlbSgncXVhbGl0eScsJzAnKTpzZXRJdGVtKCdxdWFsaXR5JywnMScpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5YiH5o2i5oiQ5Yqf77yBJ2AsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0pO1xcbiAgICBpdGVtcy51bnNoaWZ0KHtcXG4gICAgICAgIHRpdGxlOiAoZ2V0SXRlbSgnc2luZ2xlcHVzaCcsICcnKSA9PSAnMScgPyAn5Y2V5o6o4oiaJyA6ICfljZXmjqjilbMnKSxcXG4gICAgICAgIHVybDogYGhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOmdldEl0ZW0oJ3NpbmdsZXB1c2gnLCcwJyk9PScxJz9zZXRJdGVtKCdzaW5nbGVwdXNoJywnMCcpOnNldEl0ZW0oJ3NpbmdsZXB1c2gnLCcxJyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/liIfmjaLmiJDlip/vvIEnYCxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgfSk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5YiG5Lqr6LWE5rqQ5LiA57qnXCIsXCJwYXRoXCI6XCJzaGFyaWRcIixcInJ1bGVcIjpcImpzOlxcbi8vdmFyIGl0ZW1zID0gW107XFxuZnVuY3Rpb24gZm9ybWF0RGF0ZShfZGF0ZSwgX2ZtdCkge1xcbiAgICBsZXQgZm10ID0gX2ZtdCB8fCBcXFwieXl5eS1NTS1kZCBISDptbTpzc1xcXCI7XFxuICAgIGNvbnN0IGRhdGUgPSAhaXNOYU4oX2RhdGUpID8gbmV3IERhdGUoX2RhdGUgKiAxMDAwKSA6IG5ldyBEYXRlKF9kYXRlKTtcXG4gICAgY29uc3QgbyA9IHtcXG4gICAgICAgIFxcXCJNK1xcXCI6IGRhdGUuZ2V0TW9udGgoKSArIDEsIC8v5pyI5Lu9IFxcbiAgICAgICAgXFxcImQrXFxcIjogZGF0ZS5nZXREYXRlKCksIC8v5pelIFxcbiAgICAgICAgXFxcImgrXFxcIjogZGF0ZS5nZXRIb3VycygpICUgMTIgPT0gMCA/IDEyIDogZGF0ZS5nZXRIb3VycygpICUgMTIsXFxuICAgICAgICBcXFwiSCtcXFwiOiBkYXRlLmdldEhvdXJzKCksIC8v5bCP5pe2IFxcbiAgICAgICAgXFxcIm0rXFxcIjogZGF0ZS5nZXRNaW51dGVzKCksIC8v5YiGIFxcbiAgICAgICAgXFxcInMrXFxcIjogZGF0ZS5nZXRTZWNvbmRzKCksIC8v56eSIFxcbiAgICAgICAgXFxcInErXFxcIjogTWF0aC5mbG9vcigoZGF0ZS5nZXRNb250aCgpICsgMykgLyAzKSwgLy/lraPluqYgXFxuICAgICAgICBcXFwiU1xcXCI6IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLy/mr6vnp5IgXFxuICAgIH07XFxuICAgIGlmICgvKHkrKS8udGVzdChmbXQpKSB7XFxuICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChkYXRlLmdldEZ1bGxZZWFyKCkgKyBcXFwiXFxcIikuc3Vic3RyKDQgLSBSZWdFeHAuJDEubGVuZ3RoKSk7XFxuICAgIH1cXG4gICAgZm9yIChsZXQgayBpbiBvKSB7XFxuICAgICAgICBpZiAobmV3IFJlZ0V4cChcXFwiKFxcXCIgKyBrICsgXFxcIilcXFwiKS50ZXN0KGZtdCkpIHtcXG4gICAgICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChSZWdFeHAuJDEubGVuZ3RoID09IDEpID8gKG9ba10pIDogKChcXFwiMDBcXFwiICsgb1trXSkuc3Vic3RyKChcXFwiXFxcIiArIG9ba10pLmxlbmd0aCkpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZm10O1xcbn07XFxuXFxuZnVuY3Rpb24gZm9ybWF0U2l6ZShzaXplKSB7XFxuICAgIGlmICghc2l6ZSkge1xcbiAgICAgICAgcmV0dXJuICcnO1xcbiAgICB9XFxuICAgIGNvbnN0IHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XFxuICAgIGxldCBpID0gMDtcXG4gICAgd2hpbGUgKHNpemUgPj0gMTAyNCkge1xcbiAgICAgICAgc2l6ZSAvPSAxMDI0O1xcbiAgICAgICAgaSsrO1xcbiAgICB9XFxuICAgIHNpemUgPSBpID8gTnVtYmVyKHNpemUudG9GaXhlZCgyKSkgOiBzaXplO1xcbiAgICByZXR1cm4gYCR7c2l6ZX0gJHt1bml0c1tpXX1gO1xcbn1cXG4vL2xvZyhyZWFsdXJsKTtcXG5cXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxufVxcbmlmIChNWV9QQUdFID4gMSAmJiBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgPT0gJycpIHtcXG4gICAgbG9nKCfmsqHmnInkuIvkuIDpobUnKTtcXG59IGVsc2Uge1xcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKVswXS5yZWZyZXNoX3Rva2VuO1xcbiAgICAgICAgdmFyIHNoYXJlSWQgPSBkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuc3BsaXQoJ2NvbS9zLycpWzFdLnN1YnN0cmluZygwLCAxMSk7XFxuICAgICAgICBsZXQgZ2V0c2hhciA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vYWRyaXZlL3YzL3NoYXJlX2xpbmsvZ2V0X3NoYXJlX2J5X2Fub255bW91cycsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIn0nLFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vbG9nKGdldHNoYXIpO1xcbiAgICAgICAgaWYgKGdldHNoYXIuaW5jbHVkZXMoXFxcInNoYXJlX2xpbmsgaXMgZm9yYmlkZGVuXFxcIikpIHtcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmlofku7bov53op4TvvIzmoLnmja7nm7jlhbPms5Xlvovms5Xop4TopoHmsYLvvIzor6Xmlofku7blt7LnpoHmraLorr/pl67jgIInLFxcbiAgICAgICAgICAgICAgICB1cmw6IGRlY29kZVVSSUNvbXBvbmVudChnZXRSZXNDb2RlKCkuc3BsaXQoJyMjJylbMV0pLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZ2V0c2hhci5pbmNsdWRlcyhcXFwic2hhcmVfbGluayBpcyBjYW5jZWxsZWRcXFwiKSB8fCBnZXRzaGFyLmluY2x1ZGVzKFxcXCJzaGFyZV9saW5rIGlzIGV4cGlyZWRcXFwiKSkge1xcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+adpeaZmuWVpu+8jOivpeWIhuS6q+W3suWkseaViOOAgicsXFxuICAgICAgICAgICAgICAgIHVybDogZGVjb2RlVVJJQ29tcG9uZW50KGdldFJlc0NvZGUoKS5zcGxpdCgnIyMnKVsxXSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChnZXRzaGFyLmluY2x1ZGVzKFxcXCJzaGFyZV9saW5rIGNhbm5vdCBiZSBmb3VuZFxcXCIpKSB7XFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5L2g5omT5byA55qE6ZO+5o6l5pyJ6K+v77yM6K+36YeN6K+V44CCJyxcXG4gICAgICAgICAgICAgICAgdXJsOiBkZWNvZGVVUklDb21wb25lbnQoZ2V0UmVzQ29kZSgpLnNwbGl0KCcjIycpWzFdKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgbGV0IHB1c2huYW1lID0gSlNPTi5wYXJzZShnZXRzaGFyKS5maWxlX2luZm9zWzBdLmZpbGVfbmFtZTtcXG5cXG4gICAgICAgIHZhciBzaGFyZXRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL3YyL3NoYXJlX2xpbmsvZ2V0X3NoYXJlX3Rva2VuJywge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfcHdkXFxcIjpcXFwiXFxcIixcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwifScsXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgIH0pKS5zaGFyZV90b2tlbjtcXG4gICAgICAgIC8vbG9nKHNoYXJldG9rZW4pO1xcblxcbiAgICAgICAgbGV0IG5leHQgPSBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgIT0gJycgPyAnLFxcXCJtYXJrZXJcXFwiOlxcXCInICsgZ2V0TXlWYXIoJ25leHRwYWdlJykgKyAnXFxcIicgOiAnJztcXG4gICAgICAgIGlmICghZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLmluY2x1ZGVzKCcvZm9sZGVyLycpKSB7XFxuICAgICAgICAgICAgLy9pZighbGlzdHlwID09ICdmb2xkZXInKXtcXG4gICAgICAgICAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIixcXFwicGFyZW50X2ZpbGVfaWRcXFwiOlxcXCJyb290XFxcIixcXFwibGltaXRcXFwiOjEwMCxcXFwiaW1hZ2VfdGh1bWJuYWlsX3Byb2Nlc3NcXFwiOlxcXCJpbWFnZS9yZXNpemUsd18xNjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJpbWFnZV91cmxfcHJvY2Vzc1xcXCI6XFxcImltYWdlL3Jlc2l6ZSx3XzE5MjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcInZpZGVvL3NuYXBzaG90LHRfMTAwMCxmX2pwZyxhcl9hdXRvLHdfMzAwXFxcIixcXFwib3JkZXJfYnlcXFwiOlxcXCJuYW1lXFxcIixcXFwib3JkZXJfZGlyZWN0aW9uXFxcIjpcXFwiQVNDXFxcIicgKyBuZXh0ICsgJ30nLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIC8vbG9nKHJlc2NvZCk7XFxuICAgICAgICAgICAgaWYgKHJlc2NvZC5pbmNsdWRlcyhcXFwiUGFyYW1GbG93RXhjZXB0aW9uXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGxpc3R5cCA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtc1swXS50eXBlO1xcbiAgICAgICAgICAgIHZhciBwZmlsZWlkID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zWzBdLmZpbGVfaWQ7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciBsaXN0eXAgPSAnZm9sZGVyJztcXG4gICAgICAgICAgICB2YXIgcGZpbGVpZCA9IGRlY29kZVVSSUNvbXBvbmVudChyZWFsdXJsKS5zcGxpdCgnZm9sZGVyLycpWzFdXFxuXFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhodG1sKTtcXG4gICAgICAgIGlmIChsaXN0eXAgPT0gJ2ZvbGRlcicpIHtcXG4gICAgICAgICAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIixcXFwicGFyZW50X2ZpbGVfaWRcXFwiOlxcXCInICsgcGZpbGVpZCArICdcXFwiLFxcXCJsaW1pdFxcXCI6MTAwLFxcXCJpbWFnZV90aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcImltYWdlL3Jlc2l6ZSx3XzE2MC9mb3JtYXQsanBlZ1xcXCIsXFxcImltYWdlX3VybF9wcm9jZXNzXFxcIjpcXFwiaW1hZ2VcXFxcL3Jlc2l6ZSx3XzE5MjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcInZpZGVvL3NuYXBzaG90LHRfMTAwMCxmX2pwZyxhcl9hdXRvLHdfMzAwXFxcIixcXFwib3JkZXJfYnlcXFwiOlxcXCJuYW1lXFxcIixcXFwib3JkZXJfZGlyZWN0aW9uXFxcIjpcXFwiQVNDXFxcIicgKyBuZXh0ICsgJ30nLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGlmIChyZXNjb2QuaW5jbHVkZXMoXFxcIlBhcmFtRmxvd0V4Y2VwdGlvblxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSAvL+WPluaWh+S7tuWkuVxcbiAgICAgICAgLy9sb2cocmVzY29kKTtcXG5cXG5cXG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlc2NvZCkubmV4dF9tYXJrZXIpIHtcXG4gICAgICAgICAgICBsZXQgbWFya2VyID0gSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyO1xcbiAgICAgICAgICAgIGlmIChtYXJrZXIubGVuZ3RoID4gMTApIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ25leHRwYWdlJywgbWFya2VyKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb250cyA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtcztcXG4gICAgICAgIGlmIChjb250cy5sZW5ndGggPCAxKSB7XFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn6K+l5paH5Lu25aS55LiL5rKh5pyJ5YiG5Lqr55qE5paH5Lu2JyxcXG4gICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBkb25ndGFpID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xhenl1cmwnLCB7fSkpLnJ1bGUudG9TdHJpbmcoKTtcXG5cXG4gICAgICAgIHZhciB0dWlzb25nID0gW107XFxuICAgICAgICB2YXIgemltdSA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQgaSBpbiBjb250cykge1xcbiAgICAgICAgICAgIC8vdmFyIGxpc3R5cCA9IGNvbnRzW2ldLnR5cGU7XFxuICAgICAgICAgICAgaWYgKGNvbnRzW2ldLnR5cGUgIT0gJ2ZvbGRlcicpIHtcXG4gICAgICAgICAgICAgICAgbGV0IGZuYW1lID0gY29udHNbaV0ubmFtZTtcXG4gICAgICAgICAgICAgICAgbGV0IGZ0eXBlID0gZm5hbWUudG9Mb3dlckNhc2UoKTtcXG4gICAgICAgICAgICAgICAgbGV0IGNhdGUgPSBjb250c1tpXS5jYXRlZ29yeTtcXG4gICAgICAgICAgICAgICAgaWYgKGZ0eXBlLmVuZHNXaXRoKCcuc3J0JykgfHwgZnR5cGUuZW5kc1dpdGgoJy52dHQnKSB8fCBmdHlwZS5lbmRzV2l0aCgnLmFzcycpKSB7XFxuICAgICAgICAgICAgICAgICAgICB6aW11LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdDogZm5hbWUuc3Vic3RyaW5nKDAsIGZuYW1lLmxhc3RJbmRleE9mKFxcXCIuXFxcIikpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dDogY29udHNbaV0uZmlsZV9leHRlbnNpb24sXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlkOiBjb250c1tpXS5maWxlX2lkXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgaWYgKGNhdGUgPT0gJ3ZpZGVvJyB8fCBjYXRlID09ICdhdWRpbycpIHtcXG4gICAgICAgICAgICAgICAgICAgIHR1aXNvbmcucHVzaChcXG4gICAgICAgICAgICAgICAgICAgICAgICBmbmFtZS5yZXBsYWNlKC9cXFxcIy9nLCAnXycpLnJlcGxhY2UoL1xcXFwkL2csICdfJykgKyAnJCcgKyBjYXRlICsgJ3wnICsgY29udHNbaV0uZmlsZV9pZFxcbiAgICAgICAgICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICBmb3IgKHZhciBpIGluIGNvbnRzKSB7XFxuICAgICAgICAgICAgdmFyIGxpc3R5cCA9IGNvbnRzW2ldLnR5cGU7XFxuICAgICAgICAgICAgaWYgKGxpc3R5cCAhPSAnZm9sZGVyJykge1xcbiAgICAgICAgICAgICAgICB2YXIgY2F0ZSA9IGNvbnRzW2ldLmNhdGVnb3J5O1xcbiAgICAgICAgICAgICAgICB2YXIgZm5hbWUgPSBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgICAgICBpZiAoY2F0ZSA9PSAndmlkZW8nKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TuicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ2RvYycpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OWJyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnaW1hZ2UnKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+WvCcgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ3ppcCcpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OmJyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBjb250c1tpXS5uYW1lXFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgLy8gaWYgKGNhdGUgPT0gJ3ZpZGVvJyB8fCBjYXRlID09ICdhdWRpbycgfHwgY2F0ZSA9PSAnaW1hZ2UnKSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKGNvbnRzW2ldLmZpbGVfaWQpLmxhenlSdWxlKChzaGFyZUlkLCBkb25ndGFpLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4sIHppbXUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0SXRlbSgnc2luZ2xlcHVzaCcsICcnKSA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD9ydWxlPVhZUeaOqOmAgSZwdXNodXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBmbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJyZWZyZXNoX3Rva2VuXFxcIjogcmVmdG9rZW4sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwidXJsXFxcIjogZm5hbWUucmVwbGFjZSgvXFxcXCMvZywgJ18nKS5yZXBsYWNlKC9cXFxcJC9nLCAnXycpICsgJyQnICsgY2F0ZSArICd8JyArIGlucHV0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInNoYXJlX2lkXFxcIjogc2hhcmVJZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChkb25ndGFpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYXlcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBkb25ndGFpLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4sIHppbXUpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogZm9ybWF0RGF0ZShjb250c1tpXS51cGRhdGVkX2F0KSArICcgICcgKyBmb3JtYXRTaXplKGNvbnRzW2ldLnNpemUpLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5o6o6YCB5YiwVFZCb3gnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoc2hhcmVJZCwgZmlsZWlkLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/cnVsZT1YWVHmjqjpgIEmcHVzaHVybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwibmFtZVxcXCI6IGZuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJyZWZyZXNoX3Rva2VuXFxcIjogcmVmdG9rZW4sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVybFxcXCI6IGZuYW1lLnJlcGxhY2UoL1xcXFwjL2csICdfJykucmVwbGFjZSgvXFxcXCQvZywgJ18nKSArICckJyArIGNhdGUgKyAnfCcgKyBmaWxlaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInNoYXJlX2lkXFxcIjogc2hhcmVJZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBjb250c1tpXS5maWxlX2lkLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4pXFxuICAgICAgICAgICAgICAgICAgICAgICAgfV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGNvbnRzW2ldLmZpbGVfaWRcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG5cXG4gICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgIC8qfSBlbHNlIGlmIChpID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5b2T5YmN5paH5Lu25aS55LiL5rKh5pyJ6Z+z6KeG6aKR5paH5Lu2JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSovXFxuXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ/Cfk4InICsgY29udHNbaV0ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScgKyBjb250c1tpXS5maWxlX2lkICsgJz8/P2Z5cGFnZScpLnJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIHB1c2huYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcnVsZWxvb3AnLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgc2hhcmVJZCwgc2hhcmV0b2tlbiwgY29udHNbaV0ubmFtZSksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICB9IC8vZW5kIGlmXFxuICAgICAgICB9IC8vZW5kIGZvciBpXFxuICAgICAgICAvL2xvZyh0dWlzb25nKTtcXG4gICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3B1c2hjb2RlJywge30pKS5ydWxlKTtcXG5cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgLypcXG4gICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5qyn5qyn77yM5oql6ZSZ5LqG44CCJyxcXG4gICAgICAgICAgICB1cmw6IGRlY29kZVVSSUNvbXBvbmVudChnZXRSZXNDb2RlKCkuc3BsaXQoJyMjJylbMV0pLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgKi9cXG4gICAgfVxcbn1cXG4vKlxcbnNldEhvbWVSZXN1bHQoe1xcbiAgICBkYXRhOiBpdGVtc1xcbn0pO1xcbiovXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliIbkuqvotYTmupDltYzlpZdcIixcInBhdGhcIjpcInJ1bGVsb29wXCIsXCJydWxlXCI6XCJ2YXIgaXRlbXMgPSBbXTtcXG5cXG5mdW5jdGlvbiBmb3JtYXREYXRlKF9kYXRlLCBfZm10KSB7XFxuICAgIGxldCBmbXQgPSBfZm10IHx8IFxcXCJ5eXl5LU1NLWRkIEhIOm1tOnNzXFxcIjtcXG4gICAgY29uc3QgZGF0ZSA9ICFpc05hTihfZGF0ZSkgPyBuZXcgRGF0ZShfZGF0ZSAqIDEwMDApIDogbmV3IERhdGUoX2RhdGUpO1xcbiAgICBjb25zdCBvID0ge1xcbiAgICAgICAgXFxcIk0rXFxcIjogZGF0ZS5nZXRNb250aCgpICsgMSwgLy/mnIjku70gXFxuICAgICAgICBcXFwiZCtcXFwiOiBkYXRlLmdldERhdGUoKSwgLy/ml6UgXFxuICAgICAgICBcXFwiaCtcXFwiOiBkYXRlLmdldEhvdXJzKCkgJSAxMiA9PSAwID8gMTIgOiBkYXRlLmdldEhvdXJzKCkgJSAxMixcXG4gICAgICAgIFxcXCJIK1xcXCI6IGRhdGUuZ2V0SG91cnMoKSwgLy/lsI/ml7YgXFxuICAgICAgICBcXFwibStcXFwiOiBkYXRlLmdldE1pbnV0ZXMoKSwgLy/liIYgXFxuICAgICAgICBcXFwicytcXFwiOiBkYXRlLmdldFNlY29uZHMoKSwgLy/np5IgXFxuICAgICAgICBcXFwicStcXFwiOiBNYXRoLmZsb29yKChkYXRlLmdldE1vbnRoKCkgKyAzKSAvIDMpLCAvL+Wto+W6piBcXG4gICAgICAgIFxcXCJTXFxcIjogZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAvL+avq+enkiBcXG4gICAgfTtcXG4gICAgaWYgKC8oeSspLy50ZXN0KGZtdCkpIHtcXG4gICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKGRhdGUuZ2V0RnVsbFllYXIoKSArIFxcXCJcXFwiKS5zdWJzdHIoNCAtIFJlZ0V4cC4kMS5sZW5ndGgpKTtcXG4gICAgfVxcbiAgICBmb3IgKGxldCBrIGluIG8pIHtcXG4gICAgICAgIGlmIChuZXcgUmVnRXhwKFxcXCIoXFxcIiArIGsgKyBcXFwiKVxcXCIpLnRlc3QoZm10KSkge1xcbiAgICAgICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKFJlZ0V4cC4kMS5sZW5ndGggPT0gMSkgPyAob1trXSkgOiAoKFxcXCIwMFxcXCIgKyBvW2tdKS5zdWJzdHIoKFxcXCJcXFwiICsgb1trXSkubGVuZ3RoKSkpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBmbXQ7XFxufTtcXG5cXG5mdW5jdGlvbiBmb3JtYXRTaXplKHNpemUpIHtcXG4gICAgaWYgKCFzaXplKSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgIH1cXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcXG4gICAgbGV0IGkgPSAwO1xcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0KSB7XFxuICAgICAgICBzaXplIC89IDEwMjQ7XFxuICAgICAgICBpKys7XFxuICAgIH1cXG4gICAgc2l6ZSA9IGkgPyBOdW1iZXIoc2l6ZS50b0ZpeGVkKDIpKSA6IHNpemU7XFxuICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XFxufVxcblxcbi8vbG9nKGdldFJlc0NvZGUoKSk7XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcbiAgICBpdGVtcy51bnNoaWZ0KHtcXG4gICAgICAgIHRpdGxlOiBcXFwi8J+TveaOqOmAgeW9k+WJjeaWh+S7tuWkufCfk7pcXFwiLFxcbiAgICAgICAgdXJsOiAkKCdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nICsgc2hhcmVJZCArICcvZm9sZGVyLycgKyBnZXRSZXNDb2RlKCkuc3BsaXQoJz8/PycpWzBdKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD9ydWxlPVhZUeaOqOmAgSZwdXNodXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgIH0pO1xcbn1cXG5pZiAoTVlfUEFHRSA+IDEgJiYgZ2V0TXlWYXIoJ25leHRwYWdlJywgJycpID09ICcnKSB7XFxuICAgIGxvZygn5rKh5pyJ5LiL5LiA6aG1Jyk7XFxufSBlbHNlIHtcXG4gICAgbGV0IHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKVswXS5yZWZyZXNoX3Rva2VuO1xcblxcbiAgICBsZXQgbmV4dCA9IGdldE15VmFyKCduZXh0cGFnZScsICcnKSAhPSAnJyA/ICcsXFxcIm1hcmtlclxcXCI6XFxcIicgKyBnZXRNeVZhcignbmV4dHBhZ2UnKSArICdcXFwiJyA6ICcnO1xcblxcbiAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxuICAgICAgICB9LFxcbiAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwiLFxcXCJwYXJlbnRfZmlsZV9pZFxcXCI6XFxcIicgKyBnZXRSZXNDb2RlKCkuc3BsaXQoJz8/PycpWzBdICsgJ1xcXCIsXFxcImxpbWl0XFxcIjoxMDAsXFxcImltYWdlX3RodW1ibmFpbF9wcm9jZXNzXFxcIjpcXFwiaW1hZ2UvcmVzaXplLHdfMTYwL2Zvcm1hdCxqcGVnXFxcIixcXFwiaW1hZ2VfdXJsX3Byb2Nlc3NcXFwiOlxcXCJpbWFnZVxcXFwvcmVzaXplLHdfMTkyMC9mb3JtYXQsanBlZ1xcXCIsXFxcInZpZGVvX3RodW1ibmFpbF9wcm9jZXNzXFxcIjpcXFwidmlkZW8vc25hcHNob3QsdF8xMDAwLGZfanBnLGFyX2F1dG8sd18zMDBcXFwiLFxcXCJvcmRlcl9ieVxcXCI6XFxcIm5hbWVcXFwiLFxcXCJvcmRlcl9kaXJlY3Rpb25cXFwiOlxcXCJBU0NcXFwiJyArIG5leHQgKyAnfScsXFxuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICB9KTtcXG4gICAgLy9sb2cocmVzY29kKTtcXG4gICAgaWYgKHJlc2NvZC5pbmNsdWRlcyhcXFwiUGFyYW1GbG93RXhjZXB0aW9uXFxcIikpIHtcXG4gICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgIH1cXG4gICAgaWYgKEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcikge1xcbiAgICAgICAgbGV0IG1hcmtlciA9IEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcjtcXG4gICAgICAgIGlmIChtYXJrZXIubGVuZ3RoID4gMTApIHtcXG4gICAgICAgICAgICBwdXRNeVZhcignbmV4dHBhZ2UnLCBtYXJrZXIpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHZhciBjb250cyA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtcztcXG4gICAgLypcXG4gICAgaWYgKGNvbnRzLmxlbmd0aCA8IDEpIHtcXG4gICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn6K+l5paH5Lu25aS55LiL5rKh5pyJ5YiG5Lqr55qE5paH5Lu2JyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICAqL1xcbiAgICB2YXIgZG9uZ3RhaSA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9sYXp5dXJsJywge30pKS5ydWxlLnRvU3RyaW5nKCk7XFxuICAgIFxcbiAgICB2YXIgdHVpc29uZyA9IFtdO1xcbiAgICB2YXIgemltdSA9IFtdO1xcbiAgICBmb3IgKGxldCBpIGluIGNvbnRzKSB7XFxuICAgICAgICAvL3ZhciBsaXN0eXAgPSBjb250c1tpXS50eXBlO1xcbiAgICAgICAgaWYgKGNvbnRzW2ldLnR5cGUgIT0gJ2ZvbGRlcicpIHtcXG4gICAgICAgICAgICBsZXQgZm5hbWUgPSBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIGxldCBmdHlwZSA9IGZuYW1lLnRvTG93ZXJDYXNlKCk7XFxuICAgICAgICAgICAgbGV0IGNhdGUgPSBjb250c1tpXS5jYXRlZ29yeTtcXG4gICAgICAgICAgICBpZiAoZnR5cGUuZW5kc1dpdGgoJy5zcnQnKSB8fCBmdHlwZS5lbmRzV2l0aCgnLnZ0dCcpIHx8IGZ0eXBlLmVuZHNXaXRoKCcuYXNzJykpIHtcXG4gICAgICAgICAgICAgICAgemltdS5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdDogZm5hbWUuc3Vic3RyaW5nKDAsIGZuYW1lLmxhc3RJbmRleE9mKFxcXCIuXFxcIikpLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0OiBjb250c1tpXS5maWxlX2V4dGVuc2lvbixcXG4gICAgICAgICAgICAgICAgICAgIGZpZDogY29udHNbaV0uZmlsZV9pZFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmIChjYXRlID09ICd2aWRlbycgfHwgY2F0ZSA9PSAnYXVkaW8nKSB7XFxuICAgICAgICAgICAgICAgIHR1aXNvbmcucHVzaChcXG4gICAgICAgICAgICAgICAgICAgIGZuYW1lLnJlcGxhY2UoL1xcXFwjL2csICdfJykucmVwbGFjZSgvXFxcXCQvZywgJ18nKSArICckJyArIGNhdGUgKyAnfCcgKyBjb250c1tpXS5maWxlX2lkXFxuICAgICAgICAgICAgICAgICk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBcXG4gICAgZm9yICh2YXIgaSBpbiBjb250cykge1xcbiAgICAgICAgdmFyIGxpc3R5cCA9IGNvbnRzW2ldLnR5cGU7XFxuICAgICAgICBpZiAobGlzdHlwICE9ICdmb2xkZXInKSB7XFxuICAgICAgICAgICAgdmFyIGNhdGUgPSBjb250c1tpXS5jYXRlZ29yeTtcXG4gICAgICAgICAgICB2YXIgZm5hbWUgPSBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIGlmIChjYXRlID09ICd2aWRlbycpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk7onICsgY29udHNbaV0ubmFtZTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ2RvYycpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk5YnICsgY29udHNbaV0ubmFtZTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ2ltYWdlJykge1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+WvCcgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnemlwJykge1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TpicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGNvbnRzW2ldLm5hbWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy9pZiAoY2F0ZSA9PSAndmlkZW8nIHx8IGNhdGUgPT0gJ2F1ZGlvJyB8fCBjYXRlID09ICdpbWFnZScpIHtcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoY29udHNbaV0uZmlsZV9pZCkubGF6eVJ1bGUoKHNoYXJlSWQsIGRvbmd0YWksIGNhdGUsIGZuYW1lLCByZWZ0b2tlbix6aW11KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0SXRlbSgnc2luZ2xlcHVzaCcsICcnKSA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3J1bGU9WFlR5o6o6YCBJnB1c2h1cmw9JyArIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogZm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJyZWZyZXNoX3Rva2VuXFxcIjogcmVmdG9rZW4sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBmbmFtZS5yZXBsYWNlKC9cXFxcIy9nLCAnXycpLnJlcGxhY2UoL1xcXFwkL2csICdfJykgKyAnJCcgKyBjYXRlICsgJ3wnICsgaW5wdXQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJzaGFyZV9pZFxcXCI6IHNoYXJlSWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZG9uZ3RhaSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYXlcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwgc2hhcmVJZCwgZG9uZ3RhaSwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuLHppbXUpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBmb3JtYXREYXRlKGNvbnRzW2ldLnVwZGF0ZWRfYXQpICsgJyAgJyArIGZvcm1hdFNpemUoY29udHNbaV0uc2l6ZSksXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfmjqjpgIHliLBUVkJveCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHNoYXJlSWQsIGZpbGVpZCwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/cnVsZT1YWVHmjqjpgIEmcHVzaHVybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogZm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwicmVmcmVzaF90b2tlblxcXCI6IHJlZnRva2VuLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVybFxcXCI6IGZuYW1lLnJlcGxhY2UoL1xcXFwjL2csICdfJykucmVwbGFjZSgvXFxcXCQvZywgJ18nKSArICckJyArIGNhdGUgKyAnfCcgKyBmaWxlaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwic2hhcmVfaWRcXFwiOiBzaGFyZUlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBjb250c1tpXS5maWxlX2lkLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4pXFxuICAgICAgICAgICAgICAgICAgICB9XSxcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBjb250c1tpXS5maWxlX2lkXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcblxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIC8vfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfwn5OCJyArIGNvbnRzW2ldLm5hbWUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScgKyBjb250c1tpXS5maWxlX2lkICsgJz8/P2Z5cGFnZScpLnJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIHB1c2huYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9ydWxlbG9vcCcsIHt9KSkucnVsZSk7XFxuICAgICAgICAgICAgICAgIH0sIHNoYXJlSWQsIHNoYXJldG9rZW4sIGNvbnRzW2ldLm5hbWUpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgfSAvL2VuZCBpZlxcblxcblxcbiAgICB9XFxuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3B1c2hjb2RlJywge30pKS5ydWxlKTtcXG59XFxuc2V0SG9tZVJlc3VsdCh7XFxuICAgIGRhdGE6IGl0ZW1zXFxufSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliIbkuqvotYTmupDliqjmgIHop6PmnpBcIixcInBhdGhcIjpcImxhenl1cmxcIixcInJ1bGVcIjpcInZhciBkZWZkcml2ZWlkID0gZ2V0TXlWYXIoJ2RlZmRyaXZlaWQnLCAnJyksXFxuICAgIHJlYWNjZXNzVGsgPSBnZXRNeVZhcihcXFwiYWxpYWNjZXNzVGtcXFwiLCAnJyksXFxuICAgIHRpbWVUb2tlbiA9IGdldE15VmFyKCd0aW1lVG9rZW4nLCAnMCcpLFxcbiAgICBzdFRva2VuID0gZ2V0TXlWYXIoJ3N0VG9rZW4nLCAnMCcpLFxcbiAgICBzaGFyZWlpZCA9IGdldE15VmFyKCdzaGFyZWlpZCcsIHNoYXJlSWQpLFxcbiAgICBzaGFyZXRva2VuID0gZ2V0SXRlbSgnc2hhcmV0b2tlbicsICcnKSxcXG4gICAgZnR5cGUgPSBmbmFtZS50b0xvd2VyQ2FzZSgpO1xcbi8vbG9nKChwYXJzZUludCh0aW1lVG9rZW4pIC0gcGFyc2VJbnQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSkudG9TdHJpbmcoKSk7XFxuZnVuY3Rpb24gYWNjZXNzVGsoKSB7XFxuICAgIGlmIChyZWFjY2Vzc1RrID09ICcnIHx8IChwYXJzZUludCh0aW1lVG9rZW4pIC0gcGFyc2VJbnQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSkudG9TdHJpbmcoKSA8PSA2MDApIHtcXG4gICAgICAgIGxvZygn5Yi35pawcmVhY2Nlc3NUaycpO1xcbiAgICAgICAgbGV0IG50b2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvbicsIHt9KSk7XFxuICAgICAgICB2YXIgcmVmdG9rZW4gPSBudG9rZW5bMF0ucmVmcmVzaF90b2tlbjtcXG4gICAgICAgIGxldCByZWZyZXNoID0gZmV0Y2goJ2h0dHBzOi8vYXV0aC5hbGl5dW5kcml2ZS5jb20vdjIvYWNjb3VudC90b2tlbicsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogUENfVUEsXFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBib2R5OiAne1xcXCJyZWZyZXNoX3Rva2VuXFxcIjpcXFwiJyArIHJlZnRva2VuICsgJ1xcXCIsXFxcImdyYW50X3R5cGVcXFwiOlxcXCJyZWZyZXNoX3Rva2VuXFxcIn0nLFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICB9KTtcXG4gICAgICAgIG50b2tlblswXSA9IEpTT04ucGFyc2UocmVmcmVzaCk7XFxuICAgICAgICBpZiAoIWZpbGVFeGlzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uXFxcIikgfHwgcmVmcmVzaC5sZW5ndGggPiAzMDApIHtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvblxcXCIsIEpTT04uc3RyaW5naWZ5KG50b2tlbikpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcHV0TXlWYXIoJ3RpbWVUb2tlbicsIChwYXJzZUludChKU09OLnBhcnNlKHJlZnJlc2gpLmV4cGlyZXNfaW4pICsgcGFyc2VJbnQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSkudG9TdHJpbmcoKSk7XFxuICAgICAgICBkZWZkcml2ZWlkID0gSlNPTi5wYXJzZShyZWZyZXNoKS5kZWZhdWx0X2RyaXZlX2lkO1xcbiAgICAgICAgcHV0TXlWYXIoJ2RlZmRyaXZlaWQnLCBkZWZkcml2ZWlkKTtcXG4gICAgICAgIHJlYWNjZXNzVGsgPSBKU09OLnBhcnNlKHJlZnJlc2gpLnRva2VuX3R5cGUgKyAnICcgKyBKU09OLnBhcnNlKHJlZnJlc2gpLmFjY2Vzc190b2tlbjtcXG4gICAgICAgIHB1dE15VmFyKFxcXCJhbGlhY2Nlc3NUa1xcXCIsIHJlYWNjZXNzVGspO1xcbiAgICB9XFxufTtcXG5cXG5hY2Nlc3NUaygpO1xcbi8v5Yi35pawc2hhcmV0b2tlblxcbmlmIChzaGFyZWlpZCAhPSBzaGFyZUlkIHx8IChwYXJzZUludChzdFRva2VuKSAtIHBhcnNlSW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkpLnRvU3RyaW5nKCkgPD0gNjAwKSB7XFxuICAgIHZhciBzaGFyZXRrID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS92Mi9zaGFyZV9saW5rL2dldF9zaGFyZV90b2tlbicsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgICAgIH0sXFxuICAgICAgICBib2R5OiAne1xcXCJzaGFyZV9wd2RcXFwiOlxcXCJcXFwiLFxcXCJzaGFyZV9pZFxcXCI6XFxcIicgKyBzaGFyZUlkICsgJ1xcXCJ9JyxcXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgIH0pO1xcbiAgICBsb2coJ+WIt+aWsHNoYXJldG9rZW4nKTtcXG4gICAgc2hhcmV0b2tlbiA9IEpTT04ucGFyc2Uoc2hhcmV0aykuc2hhcmVfdG9rZW47XFxuICAgIHNldEl0ZW0oJ3NoYXJldG9rZW4nLCBKU09OLnBhcnNlKHNoYXJldGspLnNoYXJlX3Rva2VuKTtcXG4gICAgcHV0TXlWYXIoJ3N0VG9rZW4nLCAocGFyc2VJbnQoSlNPTi5wYXJzZShzaGFyZXRrKS5leHBpcmVzX2luKSArIHBhcnNlSW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkpLnRvU3RyaW5nKCkpO1xcbiAgICBwdXRNeVZhcignc2hhcmVpaWQnLCBzaGFyZUlkKTtcXG59XFxuLy9sb2coemltdSk7XFxuY29uc3QgdHJhbnNjb2RpbmcgPSB7XFxuICAgIFVIRDogXFxcIjRLIOi2hea4hVxcXCIsXFxuICAgIFFIRDogXFxcIjJLIOi2hea4hVxcXCIsXFxuICAgIEZIRDogXFxcIjEwODAg5YWo6auY5riFXFxcIixcXG4gICAgSEQ6IFxcXCI3MjAg6auY5riFXFxcIixcXG4gICAgU0Q6IFxcXCI1NDAg5qCH5riFXFxcIixcXG4gICAgTEQ6IFxcXCIzNjAg5rWB55WFXFxcIlxcbn07XFxuaWYgKCFmaWxlRXhpc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktT3BlblRva2VuLmpzb25cXFwiKSkge1xcbiAgICB2YXIgT3BlblRva2VuID0ge1xcbiAgICAgICAgJ1JlZnJlc2hUb2tlbk9wZW4nOiAnJyxcXG4gICAgICAgICdBY2Nlc3NUb2tlbk9wZW4nOiAnJ1xcbiAgICB9O1xcbn0gZWxzZSB7XFxuICAgIHZhciBPcGVuVG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLU9wZW5Ub2tlbi5qc29uJywge30pKTtcXG59XFxuLy92YXIgcmVmdG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb24nLCB7fSkpWzBdLnJlZnJlc2hfdG9rZW47XFxuZnVuY3Rpb24gZ2V0c3ViKHptZmlkLCB6bWV4dCkge1xcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIGpzb24gPSBmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL3YyL2ZpbGUvZ2V0X3NoYXJlX2xpbmtfZG93bmxvYWRfdXJsJywge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiByZWFjY2Vzc1RrLFxcbiAgICAgICAgICAgICAgICAnWC1TaGFyZS1Ub2tlbic6IHNoYXJldG9rZW5cXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIixcXFwiZmlsZV9pZFxcXCI6XFxcIicgKyB6bWZpZCArICdcXFwifScsXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgLy9sb2coanNvbik7XFxuICAgICAgICBsZXQgemltdWwgPSBKU09OLnBhcnNlKGpzb24pLmRvd25sb2FkX3VybDtcXG4gICAgICAgIGRvd25sb2FkRmlsZSh6aW11bCwgJ2hpa2VyOi8vZmlsZXMvZG93bmxvYWQvc3VidGl0bGluZy4nICsgem1leHQsIHtcXG4gICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICByZXR1cm4gZ2V0UGF0aCgnaGlrZXI6Ly9maWxlcy9kb3dubG9hZC9zdWJ0aXRsaW5nLicgKyB6bWV4dClcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGFsaVNoYXJlUGxheVVybChzaGFyZV9pZCwgZmlsZV9pZCwgYWxpdG9rZW4pIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGZ1bmN0aW9uIGdldE5vd1RpbWUoKSB7XFxuICAgICAgICAgICAgY29uc3QgeXkgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKClcXG4gICAgICAgICAgICBjb25zdCBNTSA9IChuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxKSA8IDEwID8gJzAnICsgKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDEpIDogKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDEpXFxuICAgICAgICAgICAgY29uc3QgZGQgPSBuZXcgRGF0ZSgpLmdldERhdGUoKSA8IDEwID8gJzAnICsgbmV3IERhdGUoKS5nZXREYXRlKCkgOiBuZXcgRGF0ZSgpLmdldERhdGUoKVxcbiAgICAgICAgICAgIGNvbnN0IEhIID0gbmV3IERhdGUoKS5nZXRIb3VycygpIDwgMTAgPyAnMCcgKyBuZXcgRGF0ZSgpLmdldEhvdXJzKCkgOiBuZXcgRGF0ZSgpLmdldEhvdXJzKClcXG4gICAgICAgICAgICBjb25zdCBtbSA9IG5ldyBEYXRlKCkuZ2V0TWludXRlcygpIDwgMTAgPyAnMCcgKyBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKSA6IG5ldyBEYXRlKCkuZ2V0TWludXRlcygpXFxuICAgICAgICAgICAgcmV0dXJuIHl5ICsgJycgKyBkZCArICcnICsgSEggKyAnJyArIE1NICsgJycgKyBtbVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgbGV0IHNoYXJldG9rZW4gPSBKU09OLnBhcnNlKHJlcXVlc3QoJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS92Mi9zaGFyZV9saW5rL2dldF9zaGFyZV90b2tlbicsIHtcXG4gICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgIFxcXCJzaGFyZV9wd2RcXFwiOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcInNoYXJlX2lkXFxcIjogc2hhcmVfaWRcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcbiAgICAgICAgICAgIHRpbWVvdXQ6IDMwMDBcXG4gICAgICAgIH0pKS5zaGFyZV90b2tlbjtcXG5cXG4gICAgICAgIGxldCBoZWFkZXJzID0ge1xcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04JyxcXG4gICAgICAgICAgICBcXFwib3JpZ2luXFxcIjogXFxcImh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbVxcXCIsXFxuICAgICAgICAgICAgXFxcInJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL1xcXCIsXFxuICAgICAgICAgICAgLy9cXFwidXNlci1hZ2VudFxcXCI6IFxcXCJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEwLjAuMC4wIFNhZmFyaS81MzcuMzZcXFwiLFxcbiAgICAgICAgICAgIFxcXCJ1c2VyLWFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgXFxcIngtY2FuYXJ5XFxcIjogXFxcImNsaWVudD13ZWIsYXBwPWFkcml2ZSx2ZXJzaW9uPXYzLjEuMFxcXCJcXG4gICAgICAgIH07XFxuICAgICAgICBsZXQgbm93dGltZSA9IERhdGUubm93KCk7XFxuICAgICAgICBsZXQgb2xkdGltZSA9IHBhcnNlSW50KGdldE15VmFyKCd1c2VyaW5mb0NoZWNrdGltZScsICcwJykucmVwbGFjZSgndGltZScsICcnKSk7XFxuICAgICAgICBsZXQgdXNlcmluZm87XFxuICAgICAgICBsZXQgYWxpdXNlcmluZm8gPSBzdG9yYWdlMC5nZXRNeVZhcignYWxpdXNlcmluZm8nKTtcXG4gICAgICAgIGlmIChhbGl1c2VyaW5mbyAmJiBhbGl1c2VyaW5mby51c2VyX2lkICYmIG5vd3RpbWUgPCAob2xkdGltZSArIDEgKiA2MCAqIDYwICogMTAwMCkpIHtcXG4gICAgICAgICAgICB1c2VyaW5mbyA9IGFsaXVzZXJpbmZvO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB1c2VyaW5mbyA9IEpTT04ucGFyc2UocmVxdWVzdCgnaHR0cHM6Ly9hdXRoLmFsaXl1bmRyaXZlLmNvbS92Mi9hY2NvdW50L3Rva2VuJywge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcbiAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwicmVmcmVzaF90b2tlblxcXCI6IGFsaXRva2VuLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImdyYW50X3R5cGVcXFwiOiBcXFwicmVmcmVzaF90b2tlblxcXCJcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDMwMDBcXG4gICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ2FsaXVzZXJpbmZvJywgdXNlcmluZm8pO1xcbiAgICAgICAgICAgIHB1dE15VmFyKCd1c2VyaW5mb0NoZWNrdGltZScsIG5vd3RpbWUgKyAndGltZScpO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGF1dGhvcml6YXRpb24gPSAnQmVhcmVyICcgKyB1c2VyaW5mby5hY2Nlc3NfdG9rZW47XFxuICAgICAgICBsZXQgZGV2aWNlSWQgPSB1c2VyaW5mby5kZXZpY2VfaWQ7XFxuICAgICAgICBsZXQgdXNlcklkID0gdXNlcmluZm8udXNlcl9pZDtcXG4gICAgICAgIGxldCBzaWduYXR1cmU7XFxuXFxuICAgICAgICBsZXQgYXMgPSBqdXN0VGVzdFNpZ24oXFxcIjVkZGU0ZTFiZGY5ZTQ5NjZiMzg3YmE1OGY0YjNmZGMzXFxcIiwgZGV2aWNlSWQsIHVzZXJJZCk7XFxuICAgICAgICAvL2xvZyhhKTtcXG4gICAgICAgIGxldCBicCA9IGFzLnNwbGl0KFxcXCIjI1xcXCIpO1xcbiAgICAgICAgdmFyIHNpZ24gPSBicFswXTtcXG4gICAgICAgIHZhciBwdWJLZXkgPSBicFticC5sZW5ndGggLSAxXTtcXG5cXG4gICAgICAgIGxldCBpID0gMDtcXG4gICAgICAgIGRvIHtcXG5cXG4gICAgICAgICAgICBsZXQgc2VzcyA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vdXNlcnMvdjEvdXNlcnMvZGV2aWNlL2NyZWF0ZV9zZXNzaW9uJywge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nLFxcbiAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBhdXRob3JpemF0aW9uLFxcbiAgICAgICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuLFxcbiAgICAgICAgICAgICAgICAgICAgJ3gtZGV2aWNlLWlkJzogZGV2aWNlSWQsXFxuICAgICAgICAgICAgICAgICAgICAneC1zaWduYXR1cmUnOiBzaWduXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd7XFxcImRldmljZU5hbWVcXFwiOlxcXCJDaHJvbWXmtY/op4jlmahcXFwiLFxcXCJtb2RlbE5hbWVcXFwiOlxcXCJXaW5kb3dz572R6aG154mIXFxcIixcXFwibm9uY2VcXFwiOjAsXFxcInB1YktleVxcXCI6XFxcIicgKyBwdWJLZXkgKyAnXFxcIixcXFwicmVmcmVzaFRva2VuXFxcIjpcXFwiJyArIGFsaXRva2VuICsgJ1xcXCJ9JyxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBpZiAoc2Vzcy5pbmNsdWRlcygnc3VjY2VzcycpKSB7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsb2coJ2NyZWF0ZV9zZXNzaW9uICcgKyBzZXNzKTtcXG4gICAgICAgICAgICBhcyA9IGp1c3RUZXN0U2lnbihcXFwiNWRkZTRlMWJkZjllNDk2NmIzODdiYTU4ZjRiM2ZkYzNcXFwiLCBkZXZpY2VJZCwgdXNlcklkKTtcXG4gICAgICAgICAgICAvL2xvZyhhKTtcXG4gICAgICAgICAgICBicCA9IGFzLnNwbGl0KFxcXCIjI1xcXCIpO1xcbiAgICAgICAgICAgIHNpZ24gPSBicFswXTtcXG4gICAgICAgICAgICBwdWJLZXkgPSBicFticC5sZW5ndGggLSAxXTtcXG4gICAgICAgICAgICBpKys7XFxuICAgICAgICB9IHdoaWxlIChpIDwgNSk7XFxuXFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduO1xcbiAgICAgICAgaGVhZGVyc1snYXV0aG9yaXphdGlvbiddID0gYXV0aG9yaXphdGlvbjtcXG4gICAgICAgIGhlYWRlcnNbJ3gtZGV2aWNlLWlkJ10gPSBkZXZpY2VJZDtcXG4gICAgICAgIGhlYWRlcnNbJ3gtc2lnbmF0dXJlJ10gPSBzaWduYXR1cmU7XFxuICAgICAgICBsZXQgYWxpeXVuVXJsID0gW107XFxuICAgICAgICBoZWFkZXJzWyd4LXNoYXJlLXRva2VuJ10gPSBzaGFyZXRva2VuO1xcbiAgICAgICAgaGVhZGVyc1snZmlsZWlkJ10gPSB1c2VySWQ7XFxuICAgICAgICBsZXQgZGF0YSA9IHtcXG4gICAgICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBcXFwibGl2ZV90cmFuc2NvZGluZ1xcXCIsXFxuICAgICAgICAgICAgXFxcImZpbGVfaWRcXFwiOiBmaWxlX2lkLFxcbiAgICAgICAgICAgIFxcXCJnZXRfcHJldmlld191cmxcXFwiOiB0cnVlLFxcbiAgICAgICAgICAgIFxcXCJzaGFyZV9pZFxcXCI6IHNoYXJlX2lkLFxcbiAgICAgICAgICAgIFxcXCJ0ZW1wbGF0ZV9pZFxcXCI6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIFxcXCJnZXRfc3VidGl0bGVfaW5mb1xcXCI6IHRydWVcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKGRhdGEpO1xcbiAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS92Mi9maWxlL2dldF9zaGFyZV9saW5rX3ZpZGVvX3ByZXZpZXdfcGxheV9pbmZvJywge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXFxuICAgICAgICAgICAgYm9keTogZGF0YSxcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcXG4gICAgICAgICAgICB0aW1lb3V0OiAzMDAwXFxuICAgICAgICB9KSk7XFxuICAgICAgICBhbGl5dW5VcmwgPSBqc29uLnZpZGVvX3ByZXZpZXdfcGxheV9pbmZvLmxpdmVfdHJhbnNjb2RpbmdfdGFza19saXN0O1xcbiAgICAgICAgYWxpeXVuVXJsLnJldmVyc2UoKTtcXG5cXG4gICAgICAgIHJldHVybiBhbGl5dW5Vcmw7XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZygn5qC55o2u5YWx5Lqr6ZO+5o6l6I635Y+W5pKt5pS+5Zyw5Z2A5aSx6LSlPicgKyBlLm1lc3NhZ2UpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGdldEFsaVVybChzaGFyZV9pZCwgZmlsZV9pZCwgYWxpdG9rZW4pIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGxldCB1cmxzID0gW107XFxuICAgICAgICBsZXQgbmFtZXMgPSBbXTtcXG4gICAgICAgIGxldCBoZWFkcyA9IFtdO1xcbiAgICAgICAgbGV0IHUgPSBzdGFydFByb3h5U2VydmVyKCQudG9TdHJpbmcoKGFsaVNoYXJlUGxheVVybCwgZmlsZV9pZCwgc2hhcmVfaWQsIGFsaXRva2VuKSA9PiB7XFxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0dXJsKGZpbGVpZCwgbGluZSkge1xcbiAgICAgICAgICAgICAgICAvL+mihOWKoOi9veaXtuS8muWPmGZpbGVfaWQs5omA5LuldHPov4fmnJ/mm7TmlrDml7bov5jlj5bljp/mnaXnmoRpZFxcbiAgICAgICAgICAgICAgICBsZXQgcGxheVVybExpc3QgPSBhbGlTaGFyZVBsYXlVcmwoc2hhcmVfaWQsIGZpbGVpZCwgYWxpdG9rZW4pIHx8IFtdO1xcbiAgICAgICAgICAgICAgICBsZXQgYWxpdXJsO1xcbiAgICAgICAgICAgICAgICBwbGF5VXJsTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS50ZW1wbGF0ZV9pZCA9PSBsaW5lKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpdXJsID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLyphbGl1cmwgPSBKU09OLnBhcnNlKHJlcXVlc3QoaXRlbS51cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDMwMDBcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSkuaGVhZGVycy5sb2NhdGlvblswXTsqL1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAvL+S4iumdouaYr+iOt+WPlumYv+mHjOeahOaSreaUvuWcsOWdgFxcbiAgICAgICAgICAgICAgICAvL2xvZyhcXFwi5oiR5Zyo5Luj55CGXFxcIiArIGFsaXVybCk7XFxuICAgICAgICAgICAgICAgIGxldCBob21lID0gYWxpdXJsLnNwbGl0KCdtZWRpYS5tM3U4JylbMF07XFxuICAgICAgICAgICAgICAgIGxldCBmID0gZmV0Y2goYWxpdXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJ1xcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDMwMDBcXG4gICAgICAgICAgICAgICAgfSkuc3BsaXQoXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBmZiA9IGYubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC5zdGFydHNXaXRoKFxcXCJtZWRpYS1cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiL3Byb3h5P3VybD1cXFwiICsgYmFzZTY0RW5jb2RlKGhvbWUgKyBpdCk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XFxuICAgICAgICAgICAgICAgIH0pLmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICAgICAgICAgIC8vbG9nKCd1ZmlkLScrZmlsZWlkKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL19maWxlU2VsZWN0XycgKyBmaWxlaWQgKyAnLm0zdTgnLCBmZik7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmZjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IHVybCA9IGJhc2U2NERlY29kZShNWV9QQVJBTVMudXJsKTtcXG4gICAgICAgICAgICBpZiAodXJsLmluY2x1ZGVzKFxcXCIudHNcXFwiKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgZmlkID0gdXJsLnNwbGl0KCcmZj0nKVsxXS5zcGxpdCgnJicpWzBdO1xcbiAgICAgICAgICAgICAgICAvL2xvZygnc2ZpZC0nK2ZpZCk7XFxuICAgICAgICAgICAgICAgIGxldCBmID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvY2FjaGUvX2ZpbGVTZWxlY3RfJyArIGZpZCArICcubTN1OCcpLnNwbGl0KFxcXCJcXFxcblxcXCIpO1xcbiAgICAgICAgICAgICAgICBmLmZvckVhY2goaXQgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ICYmIGl0LnN0YXJ0c1dpdGgoJy9wcm94eT91cmw9JykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVybCA9IGJhc2U2NERlY29kZShpdC5yZXBsYWNlKCcvcHJveHk/dXJsPScsICcnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5zdWJzdHIodXJsLmluZGV4T2YoJy9tZWRpYS0nKSwgdXJsLmluZGV4T2YoJy50cycpKSA9PSBmdXJsLnN1YnN0cihmdXJsLmluZGV4T2YoJy9tZWRpYS0nKSwgZnVybC5pbmRleE9mKCcudHMnKSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gZnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIGxldCBleHBpcmVzID0gdXJsLnNwbGl0KCd4LW9zcy1leHBpcmVzPScpWzFdLnNwbGl0KCcmJylbMF07XFxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3R0aW1lID0gcGFyc2VJbnQoZXhwaXJlcykgLSBEYXRlLm5vdygpIC8gMTAwMDtcXG4gICAgICAgICAgICAgICAgaWYgKGxhc3R0aW1lIDwgNjApIHtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKCfov4fmnJ/mm7TmlrAnKVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmUgPSB1cmwuc3BsaXQoJy9tZWRpYScpWzBdOyAvL+WPluS5i+WJjeaSreaUvueahHRz5q6157q/6LevXFxuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcobGluZS5sYXN0SW5kZXhPZignLycpICsgMSk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGdldHVybChmaWQsIGxpbmUpLnNwbGl0KFxcXCJcXFxcblxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgZi5mb3JFYWNoKGl0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQgJiYgaXQuc3RhcnRzV2l0aCgnL3Byb3h5P3VybD0nKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVybCA9IGJhc2U2NERlY29kZShpdC5yZXBsYWNlKCcvcHJveHk/dXJsPScsICcnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwuc3Vic3RyKHVybC5pbmRleE9mKCcvbWVkaWEtJyksIHVybC5pbmRleE9mKCcudHMnKSkgPT0gZnVybC5zdWJzdHIoZnVybC5pbmRleE9mKCcvbWVkaWEtJyksIGZ1cmwuaW5kZXhPZignLnRzJykpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBmdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG5cXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKCfmnKrov4fmnJ8nKVxcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coXFxcIuS7o+eQhnRz77yaXFxcIiArIHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDMwMixcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiTG9jYXRpb25cXFwiOiB1cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJ1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAvL2xvZygn6aaW5qyh5pu05pawJylcXG4gICAgICAgICAgICAgICAgbGV0IGxpbmUgPSB1cmwuc3BsaXQoJ3wnKVsxXTtcXG4gICAgICAgICAgICAgICAgbGV0IGZmID0gZ2V0dXJsKGZpbGVfaWQsIGxpbmUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZmY7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgYWxpU2hhcmVQbGF5VXJsLCBmaWxlX2lkLCBzaGFyZV9pZCwgYWxpdG9rZW4pKTtcXG5cXG4gICAgICAgIGxldCBwbGF5VXJsTGlzdCA9IGFsaVNoYXJlUGxheVVybChzaGFyZV9pZCwgZmlsZV9pZCwgYWxpdG9rZW4pIHx8IFtdO1xcblxcbiAgICAgICAgaWYgKHBsYXlVcmxMaXN0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICBwbGF5VXJsTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgIHVybHMucHVzaCh1ICsgXFxcIj91cmw9XFxcIiArIGJhc2U2NEVuY29kZShpdGVtLnVybCArIFxcXCJ8XFxcIiArIGl0ZW0udGVtcGxhdGVfaWQpICsgXFxcIiMubTN1OFxcXCIpO1xcbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKHRyYW5zY29kaW5nW2l0ZW0udGVtcGxhdGVfaWRdID8gdHJhbnNjb2RpbmdbaXRlbS50ZW1wbGF0ZV9pZF0gOiBpdGVtLnRlbXBsYXRlX2hlaWdodCk7XFxuICAgICAgICAgICAgICAgIGhlYWRzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgdmFyIG11bHQgPSB7XFxuICAgICAgICAgICAgICAgIHVybHM6IHVybHMsXFxuICAgICAgICAgICAgICAgIG5hbWVzOiBuYW1lcyxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZHNcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmICh6aW11Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiB6aW11KSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgemltdXQgPSB6aW11W2ldLnRpdDtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChmbmFtZS5pbmNsdWRlcyh6aW11dCkgfHwgemltdXQuaW5jbHVkZXMoZm5hbWUuc3Vic3RyaW5nKDAsIGZuYW1lLmxhc3RJbmRleE9mKCcuJykpKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRbJ3N1YnRpdGxlJ10gPSBnZXRzdWIoemltdVtpXS5maWQsIHppbXVbaV0uZXh0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICByZXR1cm4gbXVsdDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgbG9nKCfmnKrojrflj5bpmL/ph4zmkq3mlL7lnLDlnYDvvIzlu7rorq7ph43ov5vova/ku7blho3or5XkuIDmrKEnKVxcbiAgICAgICAgICAgIHJldHVybiB7fTtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgbG9nKCfojrflj5blhbHkuqvpk77mjqXmkq3mlL7lnLDlnYDlpLHotKU+JyArIGUubWVzc2FnZSk7XFxuICAgICAgICByZXR1cm4ge307XFxuICAgIH1cXG59XFxuXFxuaWYgKGNhdGUgPT0gJ3ZpZGVvJykge1xcbiAgICAvL2xvZyhyZWFjY2Vzc1RrKTsgXFxuICAgIGlmIChnZXRJdGVtKCdxdWFsaXR5JywgJycpID09ICcxJykge1xcbiAgICAgICAgLy/ljp/nlLtcXG4gICAgICAgIC8vYWNjZXNzVGsoKTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIG9hdXRoUmVkaXJlY3QoY29kZSkge1xcbiAgICAgICAgICAgIC8vbG9nKGNvZGUpO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcignb3JlZCcsICcxJykgIT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQganNvbiA9IGZldGNoKCdodHRwczovL2FwaS54aG9mZS50b3AvYWxpc3QvYWxpX29wZW4vY29kZScsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJjb2RlXFxcIjogY29kZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImdyYW50X3R5cGVcXFwiOiBcXFwiYXV0aG9yaXphdGlvbl9jb2RlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gZmV0Y2goJ2h0dHBzOi8vYXBpLWNmLm5uLmNpL2FsaXN0L2FsaV9vcGVuL2NvZGUnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJ1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiY29kZVxcXCI6IGNvZGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiZ3JhbnRfdHlwZVxcXCI6IFxcXCJhdXRob3JpemF0aW9uX2NvZGVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+iOt+WPllJlZnJlc2hUb2tlbk9wZW4nKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmluY2x1ZGVzKCdUb28gTWFueSBSZXF1ZXN0cycpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ29yZWQnLCAnMCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCfor7fmsYLlpKrpopHnuYHvvIzooqvlsIHpmZDliLbkuoYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZygn6K+35rGC5aSq6aKR57mB77yM6KKr5bCBSVDkuoYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdvcmVkJywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTi5wYXJzZShqc29uKS5yZWZyZXNoX3Rva2VuKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBnZXRSZWZyZXNoVG9rZW5PcGVuID0gSlNPTi5wYXJzZShqc29uKS5yZWZyZXNoX3Rva2VuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuVG9rZW4uUmVmcmVzaFRva2VuT3BlbiA9IGdldFJlZnJlc2hUb2tlbk9wZW47XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBnZXRBY2Nlc3NUb2tlbk9wZW4gPSBKU09OLnBhcnNlKGpzb24pLnRva2VuX3R5cGUgKyAnICcgKyBKU09OLnBhcnNlKGpzb24pLmFjY2Vzc190b2tlbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlblRva2VuLkFjY2Vzc1Rva2VuT3BlbiA9IGdldEFjY2Vzc1Rva2VuT3BlbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLU9wZW5Ub2tlbi5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkoT3BlblRva2VuKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdyZWRpcmVjdCcsICcxJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgIH07XFxuXFxuICAgICAgICBmdW5jdGlvbiBvYXV0aFJlcXVlc3QoKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgbGV0IGpzb24gPSBmZXRjaCgnaHR0cHM6Ly9vcGVuLmFsaXl1bmRyaXZlLmNvbS9vYXV0aC91c2Vycy9hdXRob3JpemU/Y2xpZW50X2lkPScgKyAnNzY5MTdjY2NjZDQ0NDFjMzk0NTdhMDRmNjA4NGZiMmYnICsgJyZyZWRpcmVjdF91cmk9aHR0cHM6Ly9hbGlzdC5ubi5jaS90b29sL2FsaXl1bmRyaXZlL2NhbGxiYWNrJnNjb3BlPXVzZXI6YmFzZSxmaWxlOmFsbDpyZWFkLGZpbGU6YWxsOndyaXRlJnN0YXRlPScsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdhdXRob3JpemF0aW9uJzogcmVhY2Nlc3NUaywgLy9nZXRBY2Nlc3NUb2tlblxcbiAgICAgICAgICAgICAgICAgICAgICAgICd4LWNhbmFyeSc6ICdjbGllbnQ9d2ViLGFwcD1zaGFyZSx2ZXJzaW9uPXYyLjMuMScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3gtc2hhcmUtdG9rZW4nOiBzaGFyZXRva2VuXFxuXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJhdXRob3JpemVcXFwiOiAxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJzY29wZVxcXCI6IFxcXCJ1c2VyOmJhc2UsZmlsZTphbGw6cmVhZCxmaWxlOmFsbDp3cml0ZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgLy9sb2coJ29hdXRocmVxXFxcXG4nICsganNvbik7XFxuICAgICAgICAgICAgICAgIGxldCBjb2RlID0gSlNPTi5wYXJzZShqc29uKS5yZWRpcmVjdFVyaS5zcGxpdChcXFwiY29kZT1cXFwiKVsxXTtcXG4gICAgICAgICAgICAgICAgLy9sb2coY29kZSk7XFxuICAgICAgICAgICAgICAgIG9hdXRoUmVkaXJlY3QoY29kZSk7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICByZWFjY2Vzc1RrID0gJyc7XFxuICAgICAgICAgICAgICAgIGFjY2Vzc1RrKCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hPcGVuVG9rZW4oKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdyb3QnLCAnMScpICE9ICcwJykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSBmZXRjaCgnaHR0cHM6Ly9hcGkueGhvZmUudG9wL2FsaXN0L2FsaV9vcGVuL3Rva2VuJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tLydcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dyYW50X3R5cGUnOiAncmVmcmVzaF90b2tlbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWZyZXNoX3Rva2VuJzogT3BlblRva2VuLlJlZnJlc2hUb2tlbk9wZW5cXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGZldGNoKCdodHRwczovL2FwaS1jZi5ubi5jaS9hbGlzdC9hbGlfb3Blbi9jb2RlJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tLydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dyYW50X3R5cGUnOiAncmVmcmVzaF90b2tlbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVmcmVzaF90b2tlbic6IE9wZW5Ub2tlbi5SZWZyZXNoVG9rZW5PcGVuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+iOt+WPlkFjY2Vzc1Rva2VuT3BlbicpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uaW5jbHVkZXMoJ1RvbyBNYW55IFJlcXVlc3RzJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigncm90JywgJzAnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgn6K+35rGC5aSq6aKR57mB77yM6KKr5bCB6ZmQ5Yi25LqGJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coJ+ivt+axguWkqumikee5ge+8jOiiq+WwgUlQ5LqGJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigncm90JywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTi5wYXJzZShqc29uKS5yZWZyZXNoX3Rva2VuKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBnZXRSZWZyZXNoVG9rZW5PcGVuID0gSlNPTi5wYXJzZShqc29uKS5yZWZyZXNoX3Rva2VuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuVG9rZW4uUmVmcmVzaFRva2VuT3BlbiA9IGdldFJlZnJlc2hUb2tlbk9wZW47XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBnZXRBY2Nlc3NUb2tlbk9wZW4gPSBKU09OLnBhcnNlKGpzb24pLnRva2VuX3R5cGUgKyAnICcgKyBKU09OLnBhcnNlKGpzb24pLmFjY2Vzc190b2tlbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlblRva2VuLkFjY2Vzc1Rva2VuT3BlbiA9IGdldEFjY2Vzc1Rva2VuT3BlbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLU9wZW5Ub2tlbi5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkoT3BlblRva2VuKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgIH07XFxuXFxuICAgICAgICBmdW5jdGlvbiBjb3B5KGZpbGVJZCkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGxldCBqc29uID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjIvYmF0Y2gnLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnYXV0aG9yaXphdGlvbic6IHJlYWNjZXNzVGssXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9nZXRBY2Nlc3NUb2tlblxcbiAgICAgICAgICAgICAgICAgICAgICAgICd4LWNhbmFyeSc6ICdjbGllbnQ9d2ViLGFwcD1zaGFyZSx2ZXJzaW9uPXYyLjMuMScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3gtc2hhcmUtdG9rZW4nOiBzaGFyZXRva2VuXFxuXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJyZXF1ZXN0c1xcXCI6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJib2R5XFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImZpbGVfaWRcXFwiOiBmaWxlSWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwic2hhcmVfaWRcXFwiOiBzaGFyZUlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImF1dG9fcmVuYW1lXFxcIjogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ0b19wYXJlbnRfZmlsZV9pZFxcXCI6IFxcXCJyb290XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ0b19kcml2ZV9pZFxcXCI6IGRlZmRyaXZlaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImhlYWRlcnNcXFwiOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiQ29udGVudC1UeXBlXFxcIjogXFxcImFwcGxpY2F0aW9uL2pzb25cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJpZFxcXCI6IFxcXCIwXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm1ldGhvZFxcXCI6IFxcXCJQT1NUXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVybFxcXCI6IFxcXCIvZmlsZS9jb3B5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJyZXNvdXJjZVxcXCI6IFxcXCJmaWxlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAvL2xvZygnY29weVxcXFxuJyArIGpzb24pO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKS5yZXNwb25zZXNbMF0uYm9keS5maWxlX2lkO1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH07XFxuXFxuICAgICAgICBmdW5jdGlvbiBvcGVuKGZpbGVJZCkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGxldCBqc29uID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSAwO1xcbiAgICAgICAgICAgICAgICBkbyB7XFxuICAgICAgICAgICAgICAgICAgICBqc29uID0gZmV0Y2goJ2h0dHBzOi8vb3Blbi5hbGl5dW5kcml2ZS5jb20vYWRyaXZlL3YxLjAvb3BlbkZpbGUvZ2V0RG93bmxvYWRVcmwnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcml6YXRpb24nOiBPcGVuVG9rZW4uQWNjZXNzVG9rZW5PcGVuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZ2V0QWNjZXNzVG9rZW5PcGVuXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlX2lkJzogZmlsZUlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHJpdmVfaWQnOiBkZWZkcml2ZWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZygnb3BlblxcXFxuJyArIGpzb24pO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uaW5jbHVkZXMoJ1xcXCJ1cmxcXFwiOlxcXCJodHRwJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmluY2x1ZGVzKFxcXCJUb29NYW55UmVxdWVzdHNcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlZShmaWxlSWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCdUb28gTWFueSBSZXF1ZXN0cycpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdyZWRpcmVjdCcsICcwJykgPT0gJzAnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgb2F1dGhSZXF1ZXN0KCk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hPcGVuVG9rZW4oKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIG51bWJlcisrXFxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKG51bWJlciA8IDIpO1xcbiAgICAgICAgICAgICAgICAvL2RlbGV0ZWUoZmlsZUlkKTtcXG4gICAgICAgICAgICAgICAgaWYgKGpzb24uaW5jbHVkZXMoJ2h0dHAnKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbikudXJsICsgJyNpc1ZpZGVvPXRydWUjO3tSZWZlcmVyQGh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS99JztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhqc29uKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIGRlbGV0ZWUoZmlsZUlkKSB7XFxuXFxuICAgICAgICAgICAgZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjIvYmF0Y2gnLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJyxcXG4gICAgICAgICAgICAgICAgICAgICdhdXRob3JpemF0aW9uJzogcmVhY2Nlc3NUayxcXG4gICAgICAgICAgICAgICAgICAgICd4LWNhbmFyeSc6ICdjbGllbnQ9d2ViLGFwcD1zaGFyZSx2ZXJzaW9uPXYyLjMuMScsXFxuICAgICAgICAgICAgICAgICAgICAneC1zaGFyZS10b2tlbic6IHNoYXJldG9rZW5cXG5cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInJlcXVlc3RzXFxcIjogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiYm9keVxcXCI6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImRyaXZlX2lkXFxcIjogZGVmZHJpdmVpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImZpbGVfaWRcXFwiOiBmaWxlSWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJoZWFkZXJzXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiQ29udGVudC1UeXBlXFxcIjogXFxcImFwcGxpY2F0aW9uL2pzb25cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiaWRcXFwiOiBmaWxlSWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm1ldGhvZFxcXCI6IFxcXCJQT1NUXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwidXJsXFxcIjogXFxcIi9maWxlL2RlbGV0ZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInJlc291cmNlXFxcIjogXFxcImZpbGVcXFwiXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgLy9sb2coJ+WIoOmZpCAnICsgZGVsKTtcXG4gICAgICAgICAgICAvKlxcbiAgICAgICAgICAgIGZldGNoKCdodHRwczovL29wZW4uYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92MS4wL29wZW5GaWxlL2RlbGV0ZScsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS8nLFxcbiAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcml6YXRpb24nOiBnZXRJdGVtKCdnZXRBY2Nlc3NUb2tlbk9wZW4nLCAnJyksXFxuICAgICAgICAgICAgICAgICAgICAneC1zaGFyZS10b2tlbic6IHNoYXJldG9rZW5cXG5cXG5cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcImRyaXZlX2lkXFxcIjogZGVmZHJpdmVpZCxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJmaWxlX2lkXFxcIjogZmlsZUlkXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgKi9cXG4gICAgICAgICAgICAvL2xvZygnZGVsZVxcXFxuJyArIGpzb24pO1xcbiAgICAgICAgfTtcXG5cXG4gICAgICAgIC8v5aSE55CG6KeG6aKRICBcXG4gICAgICAgIHZhciBkc2lkID0gc2hhcmVJZDtcXG4gICAgICAgIHZhciBkZmlkID0gaW5wdXQ7XFxuXFxuICAgICAgICBsZXQgZmlsZUlkID0gY29weShkZmlkKTtcXG4gICAgICAgIHZhciBwbGF5ID0gb3BlbihmaWxlSWQpO1xcbiAgICAgICAgaWYgKGZpbGVJZC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgZGVsZXRlZShmaWxlSWQpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHppbXUubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgaW4gemltdSkge1xcbiAgICAgICAgICAgICAgICB2YXIgemltdXQgPSB6aW11W2ldLnRpdDtcXG4gICAgICAgICAgICAgICAgaWYgKGZuYW1lLmluY2x1ZGVzKHppbXV0KSB8fCB6aW11dC5pbmNsdWRlcyhmbmFtZS5zdWJzdHJpbmcoMCwgZm5hbWUubGFzdEluZGV4T2YoJy4nKSkpKSB7XFxuICAgICAgICAgICAgICAgICAgICBwbGF5ID0gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFtwbGF5LnNwbGl0KCc7eycpWzBdXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBnZXRzdWIoemltdVtpXS5maWQsIHppbXVbaV0uZXh0KVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgLy/mma7nlLsgIFxcbiAgICAgICAgdmFyIGRzaWQgPSBzaGFyZUlkO1xcbiAgICAgICAgdmFyIGRmaWQgPSBpbnB1dDtcXG5cXG4gICAgICAgIGlmIChjYXRlID09ICd2aWRlbycpIHtcXG4gICAgICAgICAgICB2YXIgcGxheSA9IEpTT04uc3RyaW5naWZ5KGdldEFsaVVybChcXG4gICAgICAgICAgICAgICAgc2hhcmVJZCxcXG4gICAgICAgICAgICAgICAgaW5wdXQsXFxuICAgICAgICAgICAgICAgIHJlZnRva2VuXFxuICAgICAgICAgICAgKSk7XFxuICAgICAgICB9XFxuICAgIH1cXG59IGVsc2UgaWYgKGNhdGUgPT0gJ2ltYWdlJykge1xcbiAgICAvL+WkhOeQhuaWh+aho1xcbiAgICAvL2FjY2Vzc1RrKCk7XFxuXFxuICAgIHZhciBqc29uID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS92Mi9maWxlL2dldF9zaGFyZV9saW5rX2Rvd25sb2FkX3VybCcsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogcmVhY2Nlc3NUayxcXG4gICAgICAgICAgICAnWC1TaGFyZS1Ub2tlbic6IHNoYXJldG9rZW5cXG4gICAgICAgIH0sXFxuICAgICAgICBib2R5OiAne1xcXCJzaGFyZV9pZFxcXCI6XFxcIicgKyBzaGFyZUlkICsgJ1xcXCIsXFxcImV4cGlyZV9zZWNcXFwiOiA2MDAsXFxcImZpbGVfaWRcXFwiOlxcXCInICsgaW5wdXQgKyAnXFxcIn0nLFxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgfSk7XFxuXFxuICAgIC8vbG9nKGpzb24pO1xcbiAgICAvKlxcbiAgICAgICAgdmFyIGxvY2xpbmsgPSBKU09OLnBhcnNlKGZldGNoKEpTT04ucGFyc2UoanNvbikuZG93bmxvYWRfdXJsLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IE1PQklMRV9VQSxcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcbiAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJ1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcbiAgICAgICAgICAgIHdpdGhTdGF0dXNDb2RlOiB0cnVlXFxuICAgICAgICB9KSkuaGVhZGVycy5sb2NhdGlvblswXTtcXG4gICAgICAgICovXFxuICAgIHZhciBsb2NsaW5rID0gSlNPTi5wYXJzZShqc29uKS5kb3dubG9hZF91cmw7XFxuICAgIC8vbG9nKGxvY2xpbmspO1xcbiAgICBpZiAoY2F0ZSA9PSAnaW1hZ2UnKSB7XFxuICAgICAgICB2YXIgcGxheSA9ICdwaWNzOi8vJyArIGxvY2xpbmsgKyAnQFJlZmVyZXI9aHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tLyc7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgcGxheSA9IGxvY2xpbmsgKyAnO3tSZWZlcmVyQGh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS99JztcXG4gICAgfVxcbn0gZWxzZSBpZiAoY2F0ZSA9PSAnYXVkaW8nKSB7XFxuICAgIHZhciBqc29uID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS92Mi9maWxlL2dldF9zaGFyZV9saW5rX2Rvd25sb2FkX3VybCcsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogcmVhY2Nlc3NUayxcXG4gICAgICAgICAgICAnWC1TaGFyZS1Ub2tlbic6IHNoYXJldG9rZW5cXG4gICAgICAgIH0sXFxuICAgICAgICBib2R5OiAne1xcXCJzaGFyZV9pZFxcXCI6XFxcIicgKyBzaGFyZUlkICsgJ1xcXCIsXFxcImdldF9hdWRpb19wbGF5X2luZm9cXFwiOiB0cnVlLFxcXCJmaWxlX2lkXFxcIjpcXFwiJyArIGlucHV0ICsgJ1xcXCJ9JyxcXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgIH0pO1xcbiAgICAvL2xvZyhqc29uKTtcXG4gICAgdmFyIHBsYXkgPSBKU09OLnBhcnNlKGpzb24pLmRvd25sb2FkX3VybCArICcjaXNNdXNpYz10cnVlIzt7UmVmZXJlckBodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vfSc7XFxufSBlbHNlIGlmIChmdHlwZS5lbmRzV2l0aCgnLnNydCcpIHx8IGZ0eXBlLmVuZHNXaXRoKCcudnR0JykgfHwgZnR5cGUuZW5kc1dpdGgoJy5hc3MnKSkge1xcbiAgICB2YXIganNvbiA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vdjIvZmlsZS9nZXRfc2hhcmVfbGlua19kb3dubG9hZF91cmwnLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXG4gICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IHJlYWNjZXNzVGssXFxuICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxuICAgICAgICB9LFxcbiAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwiLFxcXCJmaWxlX2lkXFxcIjpcXFwiJyArIGlucHV0ICsgJ1xcXCJ9JyxcXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgIH0pO1xcbiAgICAvL2xvZyhqc29uKTtcXG4gICAgdmFyIHppbXVsID0gSlNPTi5wYXJzZShqc29uKS5kb3dubG9hZF91cmw7XFxuICAgIGRvd25sb2FkRmlsZSh6aW11bCwgJ2hpa2VyOi8vZmlsZXMvZG93bmxvYWQvWFlRX3N1YnRpdGxpbmcnICsgZm5hbWUuc3Vic3RyaW5nKGZuYW1lLmxhc3RJbmRleE9mKFxcXCIuXFxcIikpLCB7XFxuICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vJ1xcbiAgICB9KTtcXG4gICAgdmFyIHBsYXkgPSAndG9hc3Q6Ly/lrZfluZXmlofku7blt7LkuIvovb3liLBoaWtlcjovL2ZpbGVzL2Rvd25sb2FkL1hZUV9zdWJ0aXRsaW5nJyArIGZuYW1lLnN1YnN0cmluZyhmbmFtZS5sYXN0SW5kZXhPZihcXFwiLlxcXCIpKVxcbiAgICAvLyArICc7e1JlZmVyZXJAaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL30nO1xcbn0gZWxzZSB7XFxuICAgIHZhciBwbGF5ID0gJ3RvYXN0Oi8v6K+l5qC85byP5pqC5pyq5pSv5oyB77yM55uu5YmN5Y+q5pSv5oyB6KeG6aKR44CCJ1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIueZu+WFpei0puWPt1wiLFwicGF0aFwiOlwiTG9naW5cIixcInJ1bGVcIjpcImQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi4puF77iP54K55Ye75oiR55m75b2VXFxcIixcXG4gICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5IyMjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjXFxcIikucnVsZSgoKSA9PiB7XFxuICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgbGV0IG50b2tlbiA9IFtdO1xcbiAgICAgICAgaWYgKGZpbGVFeGlzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uXFxcIikpIHtcXG4gICAgICAgICAgICBudG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb24nLCB7fSkpO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHVybCA9ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vc2lnbidcXG4gICAgICAgIGxldCBqcyA9ICQudG9TdHJpbmcoKG50b2tlbikgPT4ge1xcbiAgICAgICAgICAgIGNvbnN0IHRva2VuRnVuY3Rpb24gPSBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHRva2VuID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKSlcXG4gICAgICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnVzZXJfaWQpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBhbGlzdGZpbGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIG50b2tlblswXSA9IHRva2VuO1xcbiAgICAgICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC53cml0ZUZpbGUoYWxpc3RmaWxlLCBKU09OLnN0cmluZ2lmeShudG9rZW4pKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpO1xcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ1RPS0VO6I635Y+W5oiQ5Yqf77yM6L+U5Zue5ZCO5Yi35paw6aG16Z2i77yBJyk7XFxuICAgICAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnBhcnNlTGF6eVJ1bGUoYGhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnJlZnJlc2hYNVdlYlZpZXcoJycpO2ApO1xcbiAgICAgICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5iYWNrKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB0b2tlbl90aW1lcigpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciB0b2tlbl90aW1lciA9IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHRva2VuRnVuY3Rpb24sIDUwMClcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHRva2VuRnVuY3Rpb24oKTtcXG4gICAgICAgIH0sIG50b2tlbilcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZScsXFxuICAgICAgICAgICAgZGVzYzogJzEwMCUmJmZsb2F0JyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBjYW5CYWNrOiB0cnVlLFxcbiAgICAgICAgICAgICAgICB1YTogUENfVUEsXFxuICAgICAgICAgICAgICAgIGpzOiBqc1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxufSk7XCJ9XSIsImljb24iOiIiLCJwcm94eSI6IiJ9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement