Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@Javmenu@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiSmF2bWVudSIsImF1dGhvciI6IlIiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IyMvemgvY2Vuc29yZWQvb25saW5lP3BhZ2U9ZnlwYWdlIiwidmVyc2lvbiI6MjAyNDAyMjcsImNvbF90eXBlIjoibW92aWVfMyIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoidmlkZW8iLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBkID0gW107XG5hZGRMaXN0ZW5lcihcIm9uQ2xvc2VcIiwgJC50b1N0cmluZygoKSA9PiB7XG4gICAgbGV0IGtleXMgPSBsaXN0TXlWYXJLZXlzKCk7XG4gICAgZm9yIChsZXQgaXQgb2Yga2V5cykge1xuICAgICAgICBjbGVhck15VmFyKGl0KTtcbiAgICB9XG59KSk7XG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHvCoMKgwqDCoMKgwqDCoFxuICAgIHJldHVybiAnIycgKyAoJzAwMDAwJyArIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwIDw8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTvCoMKgwqDCoMKgXG59XG5jb25zdCDkuIvkuIDpobUgPSBcInBkKGh0bWwsICdhOm1hdGNoZXMo4oC6KSYmaHJlZicpXCI7XG5jb25zdCBwYWdlID0gTVlfUEFHRTtcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UveWknKSkucnVsZSlcblxudmFyIOWumuS9jeS/oeaBryA9IFt7XG4gICAg5aSn57G75a6a5L2NOiAnLm5hdi1pdGVtOmhhcygubmF2KScsXG4gICAg5bCP57G7OiAnYm9keSYmYTpub3QoOm1hdGNoZXMo8J+UpSkpJyxcbiAgICDpk77mjqXlpITnkIY6ICh1KSA9PiB7XG4gICAgICAgIGxldCB1cmwgPSB1LnJlcGxhY2UoJ2h0dHBzOi8vamF2bWVudS5jb20vemgvY2Vuc29yZWQvb25saW5lP3BhZ2U9MSNvbmxpbmUnLCAnaHR0cHM6Ly9qYXZtZW51LmNvbS96aC9jZW5zb3JlZC9vbmxpbmU/b3JkZXI9cHVibGlzaCcpO1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgfVxufSwge1xuICAgIOS4gOe6p+WumuS9jTogJy5zaWRlYmFyLWJvZHkmJi5uYXYtaXRlbTpoYXMoLm5hdik6bm90KDpoYXMoOm1hdGNoZXMo5LiL6L29fOWcqOe6v+eci3zlkI3nq5nmjqjojZB85bCP6K+0fOWwj+a5v+WmuSkpKScsXG4gICAg5bCP57G7OiAnYm9keSYmYTpub3QoOm1hdGNoZXMo54Ot5pKtKSknLFxufSwge1xuICAgIOS4gOe6p+WumuS9jTogJyN0YWdzJiZkdCcsXG4gICAg5bCP57G7OiAnYm9keSYmYTpub3QoOm1hdGNoZXMo5YuV5ryrfOabtOWkmikpJyxcbn0se1xuICAgIOS4gOe6p+WumuS9jTogJy5wYWdlLWNvbnRlbnQmJi5maWx0ZXItbGlzdCcsXG4gICAg5bCP57G7OiAnYm9keSYmYTpub3QoOm1hdGNoZXMo54Ot5pKtKSknLFxuICAgIOmTvuaOpeWkhOeQhjogKHUpID0+IHtcbiAgICAgICAgbGV0IHV1ID0gKHUubWF0Y2goL1xcZCskLyl8fFsnJ10pWzBdO1xuICAgICAgICAgICBpZih1dT09Jycpe1xuICAgICAgICBsZXQgdXJsID0gTVlfVVJMLm1hdGNoKC8uKmZpbHRlci8pWzBdXG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBpZihNWV9VUkwuaW5jbHVkZXMoXCI/Yz1cIikpe1xuICAgICAgICBsZXQgdXJsID0gTVlfVVJMLnJlcGxhY2UoLyZwYWdlPVxcZCsvLCcnKSArIFwiJTJDXCIgKyB1dVxuICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgbGV0IHVybCA9IE1ZX1VSTC5yZXBsYWNlKC9cXD9wYWdlPVxcZCsvLCcnKSArIFwiP2M9XCIgKyB1dVxuICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICB9XG4gICAgfSxcbiAgICDpk77mjqU6ICdzcGFuJiZnZW5yZS1pZCcsXG59XVxuXG52YXIgaG9zdCA9IGNvbmZpZy5ob3N0XG5NWV9VUkwgPSBNWV9VUkwucmVwbGFjZSgnaGlrZXI6Ly9lbXB0eSMjJywgaG9zdClcbmxldCB0cnVlX3VybCA9IGdldFRydWVsaW5rKE1ZX1JVTEUudXJsLCBNWV9VUkwsIHBhZ2UpO1xuTVlfVVJMPXRydWVfdXJsO1xubG9nKHRydWVfdXJsKVxuXG52YXIgaHRtbCA9IHJlcXVlc3QodHJ1ZV91cmwpXG5jb25zdCBkYyA9IGR5bmFtaWNDbGFzcyh7XG4gICAg5YiG57G76aKc6ImyOiBnZXRSYW5nZUNvbG9ycygpXG59KTtcbmRjLuW8gOWQr+aKmOWPoChmYWxzZSlcbmRjLuW8gOWQr+aQnOe0oigpXG5kYy7liJvlu7rliqjmgIHliIbnsbso5a6a5L2N5L+h5oGvKVxuXG5cbnZhciBwYXJzZVJ1bGUgPSB7XG4gICAgbGlzdDogJ2JvZHkmJi52aWRlby1saXN0LWl0ZW0uY29sLXhsLTM6bm90KDptYXRjaGVzKOiJsuermeaQreW7uuacjeWKoXxWUikpJywgLy/nu5/kuIBpdGVtXG4gICAgdGl0bGU6ICcubGF6eWxvYWQmJmFsdCcsXG4gICAgZGVzYzogJy50ZXh0LW11dGVkJiZUZXh0JyxcbiAgICBpbWc6ICcubGF6eWxvYWR8fGEmJmRhdGEtc3JjfHxkYXRhLW9yaWdpbmFsJyxcbiAgICB1cmw6ICdhJiZocmVmJyxcbiAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgIGNvbF90eXBlOiAnbW92aWVfMicsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5cbnZhciBwYXJzZVJ1bGUxID0ge1xuICAgIGxpc3Q6ICdib2R5JiYudmlkZW8tbGlzdC1pdGVtLmNvbC14bC0xOm5vdCg6bWF0Y2hlcyjoibLnq5nmkK3lu7rmnI3liqF8VlIpKScsIC8v57uf5LiAaXRlbVxuICAgIHRpdGxlOiAnaDYmJlRleHQnLFxuICAgIGRlc2M6ICcudGV4dC1tdXRlZCYmVGV4dCcsXG4gICAgaW1nOiAnLmxhenlsb2FkfHxhJiZkYXRhLXNyY3x8ZGF0YS1vcmlnaW5hbCcsXG4gICAgdXJsOiAnYSYmaHJlZicsXG4gICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICBjb2xfdHlwZTogJ21vdmllXzNfbWFycXVlZScsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5cbnZhciBwYXJzZVJ1bGUyID0ge1xuICAgIGxpc3Q6ICdib2R5JiYudmlkZW8tbGlzdC1pdGVtLmNvbC14bC0yOm5vdCg6bWF0Y2hlcyjoibLnq5nmkK3lu7rmnI3liqF8VlIpKScsIC8v57uf5LiAaXRlbVxuICAgIHRpdGxlOiAnaDQmJlRleHQnLFxuICAgIGRlc2M6ICcudGV4dC1tdXRlZCYmVGV4dCcsXG4gICAgaW1nOiAnLmxhenlsb2FkfHxhJiZkYXRhLXNyY3x8ZGF0YS1vcmlnaW5hbCcsXG4gICAgdXJsOiAnYSYmaHJlZicsXG4gICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICBjb2xfdHlwZTogJ21vdmllXzNfbWFycXVlZScsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5cbnZhciBwYXJzZVJ1bGUzID0ge1xuICAgIGxpc3Q6ICdib2R5JiYuY29sLWxnLTInLCAvL+e7n+S4gGl0ZW1cbiAgICB0aXRsZTogJy5jYXJkLWJvZHkmJlRleHQnLFxuICAgIGRlc2M6ICdzcGFuJiZUZXh0JyxcbiAgICBpbWc6ICdhJiZocmVmLmpzOmlucHV0LnJlcGxhY2UoaW5wdXQsXCJodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21vdmllLzMwLnN2Z1wiKScsXG4gICAgdXJsOiAnYSYmaHJlZicsXG4gICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICBjb2xfdHlwZTogJ2F2YXRhcicsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5pZihwYWdlPT0xKXtcbnRyeXtcbnZhciBrID0gcGRmaChodG1sLCdib2R5JiYucGFnaW5hdGlvbiYmYSwtMiYmVGV4dCcpLnJlcGxhY2UoL1xcLi9nLCcnKTsvL+iOt+WPluacgOWQjuS4gOmhtemhteeggVxuZm9yICh2YXIgaiA9MTsgaiA8PSBwYXJzZUludChrKSA7IGogKyspe1xuICAgICAgaWYgKE1ZX1VSTC5pbmNsdWRlcygncGFnZScpKSB7XG4gICAgICAgICAgdXJsID0gTVlfVVJMLnJlcGxhY2UoL3BhZ2U9XFxkKy8sICdwYWdlPScgKyBqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKE1ZX1VSTC5pbmNsdWRlcygnPycpKSB7XG4gICAgICAgICAgdXJsID0gTVlfVVJMICsgJyZwYWdlPScgKyBqO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB1cmwgPSBNWV9VUkwgKyAnP3BhZ2U9JyArIGo7XG59XG59XG4vL3ZhciB1cmwgPSBNWV9VUkwucmVwbGFjZSgvXFxkK1xcLmh0bWwvLCBqICsgJy5odG1sJyk7Ly/mm7/mjaLnv7vpobXpobXnoIFcbiAgICBkLnB1c2goe1xuICAgICAgICB0aXRsZTogIGogKyAn6aG1JywgICAgIFxuICAgICAgICB1cmw6JCh1cmwpLmxhenlSdWxlKCgpID0+IHtcbiAgICAgICAgICAgIHB1dE15VmFyKE1ZX1JVTEUudXJsLCBpbnB1dCk7XG4gICAgICAgICAgICBwdXRNeVZhcigneWlfZmlyc3RwYWdlJywgaW5wdXQpO1xuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XG4gICAgIH0pLFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxufSlcbn19Y2F0Y2goZXJyKXtcbiAgICAvL2NvbnNvbGUubG9nKCflj6rmnInkuIDpobUs5YeR5ZCI55yL5ZCnJywgZXJyKTtcbn07XG59XG5DcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGUpO1xuQ3JlYXRlLnJ1bGVMaXN0KGQsIGh0bWwsIHBhcnNlUnVsZTEpO1xuQ3JlYXRlLnJ1bGVMaXN0KGQsIGh0bWwsIHBhcnNlUnVsZTIpO1xuQ3JlYXRlLnJ1bGVMaXN0KGQsIGh0bWwsIHBhcnNlUnVsZTMpO1xuYXV0b1BhZ2UoKTtcblxuc2V0UmVzdWx0KGQpIiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHkjIy9zZWFyY2g/d2Q9KioiLCJncm91cCI6IuKRoFIiLCJzZWFyY2hGaW5kIjoianM6XG52YXIgZCA9IFtdO1xudmFyIGhvc3QgPSBjb25maWcuaG9zdDtcbmxldCBrZXkgPSBNWV9VUkwuc3BsaXQoJz0nKVsxXTtcbmQucHVzaCh7XG4gICAgdGl0bGU6IFwi54K55oiR5byA5aeL6IGa5ZCI5pCc57SiICAgIFwiICsga2V5LFxuICAgIHVybDogXCJoaWtlcjovL3BhZ2UveWo/dXJsPVwiICsgTVlfVVJMLnJlcGxhY2UoXCJoaWtlcjovL2VtcHR5IyNcIixob3N0KStcIu+8hu+8hnBhZ2U9ZnlwYWdlXCIsXG4gICAgZXh0cmE6IHtcbiAgICAgICAgcGFnZVRpdGxlOiBcIuaQnOe0oiAgICBcIiArIGtleSxcbiAgICAgICAga2V5OiBrZXlcbiAgICB9XG59KTtcblxuc2V0UmVzdWx0KGQpOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IioiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiIvL+awuOS5heWcsOWdgCAgIGh0dHBzOi8vamF2bWVudS5jb20vXG4vL+WPkeW4g+WcsOWdgCAgIGh0dHBzOi8vamF2bWVudS54eXovXG4vLyAgICBodHRwczovL2phdm1lbnUudG9wL1xuXG52YXIg5pu05paw6Ze06ZqUID0gMjNcbmxldCB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkudG9TdHJpbmcoKVxubGV0IOaXtumXtOmXtOmalCA9IHRpbWUtZ2V0SXRlbSgndGltZScsIG5ldyBEYXRlKCkuZ2V0VGltZSgpLnRvU3RyaW5nKCkpXG4vL2xvZyhcIuW9k+WJjeaXtumXtOaIs1wiK3RpbWUpXG4vL2xvZyhcIumXtOmalOaXtumXtOaIs1wiK+aXtumXtOmXtOmalClcbmxldCDpl7TpmpTlpKnmlbAgPSBNYXRoLmZsb29yKOaXtumXtOmXtOmalCAvICgyNCAqIDYwICogNjAgKiAxMDAwKSk7XG5sZXQg6Ze06ZqU5pe25pWwID0gTWF0aC5mbG9vcijml7bpl7Tpl7TpmpQgLyAoNjAgKiA2MCAqIDEwMDApKTtcbmxldCDpl7TpmpTliIbmlbAgPSBNYXRoLmZsb29yKOaXtumXtOmXtOmalCAvICggNjAgKiAxMDAwKSk7XG5sZXQg6Ze06ZqU56eS5pWwID0gTWF0aC5mbG9vcijml7bpl7Tpl7TpmpQgLyAxMDAwKTtcbiAgICAvL2xvZyhcIumXtOmalOaXtumXtD09PT1cIivpl7TpmpTnp5LmlbArXCLnp5JcIilcbnNldEl0ZW0oJ3RpbWUnLCB0aW1lKTtcblxuaWYgKOmXtOmalOWkqeaVsD495pu05paw6Ze06ZqUIHx8ICFnZXRJdGVtKCdsaW5rJywgJycpLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuXG4gICAgbGV0IGZhYnUgPSBmZXRjaChcImh0dHBzOi8vamF2bWVudS54eXovXCIpXG4gICAgbGV0IGpzID0gcGRmaChmYWJ1LFwiYm9keSYmc2NyaXB0LDEmJkh0bWxcIikubWF0Y2goLyh2YXJbXFxzXFxTXSspdmFyIHF1ZXJ5LylbMV1cbiAgICBldmFsKGpzKVxuICAgICBsaW5rID0gdXJsXG5cbiAgICBzZXRJdGVtKCdsaW5rJywgbGluayk7XG4gICAgLy90b2FzdCgn5pu05paw5Z+f5ZCNJyk7XG4gICAgbG9nKFwi5pyA5paw5Zyw5Z2AOlwiK2xpbmspXG4gICAgIGNvbmZpcm0oe1xuICAgICAgICB0aXRsZTonSkFW55uu5b2VJywgXG4gICAgICAgIGNvbnRlbnQ6J+W3suabtOaWsOe9keWdgOS4ulxcbicrbGluaywgXG4gICAgICAgIGNvbmZpcm06JC50b1N0cmluZygoKT0+e30pLCBcbiAgICAgICAgY2FuY2VsOiQudG9TdHJpbmcoKCk9Pnt9KVxuICAgIH0pXG5cbiAgICB9XG5cbi8vY2xlYXJJdGVtKCdsaW5rJylcbmluaXRDb25maWcoe1xuICAgIGhvc3Q6IGdldEl0ZW0oJ2xpbmsnLCAnaHR0cHM6Ly9qYXZtZW51LmNvbScpXG59KTsiLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiA57qn5YiG57G75YiX6KGoXCIsXCJwYXRoXCI6XCJ5aVwiLFwicnVsZVwiOlwianM6XFxuLypcXG7kuIDnuqflsIHoo4UgXFxu5Yqo5oCB5YiG57G7IOWIl+ihqOWIm+W7uiDoh6rliqjkuIvkuIDpobVcXG52ZXIgMjAyMzEwMDUwMSAxLjBcXG4qL1xcbnZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gJyMnICsgKCcwMDAwMCcgKyAoTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMCA8PCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XFxufVxcblxcbmZ1bmN0aW9uIGR5bmFtaWNDbGFzcyhvcHRpb25zKSB7XFxuICAgIGNvbnN0IG9iaiA9IHtcXG4gICAgICAgIC8v6buY6K6k5YC8XFxuICAgICAgICBsYXlvdXQ6IFxcXCJ1bmRlZmluZWRcXFwiLFxcbiAgICAgICAgaHRtbDogXFxcImVtcHR5XFxcIixcXG4gICAgICAgIHBhZ2U6IDAsXFxuICAgICAgICDliIbnsbvpopzoibI6IFxcXCIjRkE3Mjk4XFxcIixcXG4gICAgICAgIOaKmOWPoDogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi4oinXFxcIi5mb250Y29sb3IoXFxcIiMxYWFkMTlcXFwiKSArIFxcXCI8L2I+XFxcIixcXG4gICAgICAgIOWxleW8gDogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi4oioXFxcIi5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKSArIFxcXCI8L2I+XFxcIixcXG4gICAgICAgIG9wZW46IHRydWUsXFxuICAgICAgICBzdGF0ZTogTVlfUlVMRS51cmwsXFxuICAgICAgICBzZWFyY2g6IGZhbHNlLFxcbiAgICAgICAgY2xlYXJzOiBbXSxcXG4gICAgICAgIGNsZWFyYWxsOiBbXFxcInlpX2ZpcnN0cGFnZVxcXCJdLFxcbiAgICAgICAgZGVidWc6IGZhbHNlLFxcblxcbiAgICAgICAg6aKE6K6+KHBhcmFtKSB7XFxuICAgICAgICAgICAgaWYgKHBhcmFtID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBwYXJhbSA9IFtdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwYXJhbSkuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcXG4gICAgICAgICAgICAgICAgLy8g5a+55q+P5Liq5bGe5oCn5ZCN5omn6KGM5pON5L2cXFxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1bcHJvcGVydHldOyAvLyDojrflj5blsZ7mgKflgLxcXG4gICAgICAgICAgICAgICAgLy8g5Zyo6L+Z6YeM5omn6KGM5oKo55qE5pON5L2cXFxuICAgICAgICAgICAgICAgIHRoaXNbcHJvcGVydHldID0gdmFsdWU7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhwcm9wZXJ0eSArIFxcXCI6XFxcIiArIHZhbHVlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGV2YWxKU1J1bGUoaXRlbSwganNSdWxlKSB7XFxuICAgICAgICAgICAgbGV0IHJ1bGUgPSBqc1J1bGUucmVwbGFjZShcXFwiQGpzOlxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICBydWxlID0gcnVsZS50cmltKCk7XFxuICAgICAgICAgICAgLy9sb2coJC5zdHJpbmdpZnkocnVsZSkpXFxuICAgICAgICAgICAgbGV0IGlucHV0ID0gaXRlbTtcXG4gICAgICAgICAgICBpZiAocnVsZS5zdGFydHNXaXRoKFxcXCIoXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgZXZhbChcXFwicmVzdWx0ID0gXFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIC8qKlxcbiAgICAgICAgICAgICAgICAgKiDov5jljp/miJAgJC50b1N0cmluZyguLi4pIOeahOacgOe7iOe7k+aenO+8jOi+vuWIsOacgOe7iOWkhOeQhuaWueW8j+i3n+S4iumdoueahCBpZiDkuIDoh7TnmoTnm67nmoRcXG4gICAgICAgICAgICAgICAgICovXFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcInJlc3VsdCA9IFxcXCIgKyBcXFwiKCgpID0+IHtcXFwiICsgcnVsZSArIFxcXCJ9KSgpXFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgZ2V0VGl0bGUoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB0aXRsZVJ1bGUgPSBjYXRlZ29yeSB8fCBcXFwiYSYmVGV4dFxcXCI7XFxuICAgICAgICAgICAgaWYgKHRpdGxlUnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB0aXRsZVJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKHNyYywgdGl0bGVSdWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHRpdGxlIHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGdldFVybChzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB1cmxSdWxlID0gY2F0ZWdvcnku6ZO+5o6lIHx8IFxcXCJhJiZocmVmXFxcIjtcXG4gICAgICAgICAgICBpZiAodXJsUnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy5ldmFsSlNSdWxlKHNyYywgdXJsUnVsZSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gcGQoc3JjLCB1cmxSdWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYXRlZ29yeS7pk77mjqXlpITnkIYgPT0gXFxcImZ1bmN0aW9uXFxcIikge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBjYXRlZ29yeS7pk77mjqXlpITnkIYodXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHVybCB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH0sXFxuICAgICAgICBpc051bGwocGFyYW0pIHtcXG4gICAgICAgICAgICBpZiAocGFyYW0gPT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGlzQm9vbGVhbih2YXJpYWJsZSkge1xcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFyaWFibGUgIT09IFxcXCJib29sZWFuXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuW8gOWQr+aKmOWPoOivt+S8oOWFpeW4g+WwlOWAvFxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICDmuIXpmaQobGlzdCkge1xcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTnVsbChsaXN0KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGxpc3QuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5riF6Zmk5oql6ZSZOuivt+S8oOWIl+ihqFxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLmNsZWFycyA9IGxpc3Q7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5YWo5riFKGxpc3QpIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc051bGwobGlzdCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy5jbGVhcmFsbDtcXG4gICAgICAgICAgICBsaXN0ID0gYy5jb25jYXQobGlzdCk7XFxuICAgICAgICAgICAgdGhpcy5jbGVhcmFsbCA9IGxpc3Q7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5rqQ56CBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5odG1sID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg55WM6Z2iKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5sYXlvdXQgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDpobXnoIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDnirbmgIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5byA5ZCv5pCc57SiKGlucHV0KSB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBpbnB1dCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5byA5ZCv5oqY5Y+gKGlucHV0KSB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBpbnB1dCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuaXNCb29sZWFuKGlucHV0KTtcXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICBzZXRUaXRsZShrLCBpLCB0KSB7XFxuICAgICAgICAgICAgcmV0dXJuIGsgPT0gaSA/IFxcXCLigJzigJzigJ3igJ1cXFwiICsgdC5mb250Y29sb3IodGhpcy7liIbnsbvpopzoibIpIDogdDtcXG4gICAgICAgIH0sXFxuICAgICAgICBhY3Rpb24ob2JqKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5riF6Zmk54q25oCBXFxcIixcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKG9iaik7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKG9iai5zdGF0ZSk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJoZWFkLmNhdGVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIG9iai5hbGwuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIG9iai5jbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgfSwgb2JqKSxcXG4gICAgICAgICAgICB9LCBdO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGNoZWNrUGFyYW0oKSB7XFxuICAgICAgICAgICAgdmFyIG9iaiA9IHt9O1xcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2UgPT0gMCAmJiB0eXBlb2YgcGFnZSA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpemhteeggVxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFnZSA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLpobXnoIFcXFwiXSA9IHRoaXMucGFnZTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi6aG156CBXFxcIl0gPSBwYWdlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0aGlzLmh0bWwgPT0gXFxcImVtcHR5XFxcIiAmJiB0eXBlb2YgaHRtbCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpea6kOeggVxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaHRtbCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLmupDnoIFcXFwiXSA9IHRoaXMuaHRtbDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi5rqQ56CBXFxcIl0gPSBodG1sO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0aGlzLmxheW91dCA9PSBcXFwidW5kZWZpbmVkXFxcIiAmJiB0eXBlb2YgZCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpeeVjOmdolxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLnlYzpnaJcXFwiXSA9IHRoaXMubGF5b3V0O1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLnlYzpnaJcXFwiXSA9IGQ7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIG9iajtcXG4gICAgICAgIH0sXFxuICAgICAgICDliJvlu7rliqjmgIHliIbnsbsocnVsZU9iaikge1xcbiAgICAgICAgICAgIGlmIChydWxlT2JqID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBydWxlT2JqID0gW107XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8v5Yid5aeL5YyW5Y+Y6YeP5byA5aeLXFxuICAgICAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLmNoZWNrUGFyYW0oKTtcXG4gICAgICAgICAgICBjb25zdCBwYWdlID0gcGFyYW0u6aG156CBO1xcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBwYXJhbS7mupDnoIE7XFxuICAgICAgICAgICAgY29uc3QgZCA9IHBhcmFtLueVjOmdojtcXG4gICAgICAgICAgICBjb25zdCDnirbmgIEgPSB0aGlzLnN0YXRlO1xcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2VhcmNoO1xcbiAgICAgICAgICAgIGNvbnN0IGVtcHR5ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgIGNvbnN0IOaKmOWPoOeKtuaAgSA9IHRoaXMub3BlbjtcXG4gICAgICAgICAgICB2YXIg5bGV5byAID0gdGhpcy7lsZXlvIA7XFxuICAgICAgICAgICAgdmFyIOaKmOWPoCA9IHRoaXMu5oqY5Y+gO1xcbiAgICAgICAgICAgIHZhciDlhajmuIUgPSB0aGlzLmNsZWFyYWxsO1xcbiAgICAgICAgICAgIHZhciDmuIXpmaQgPSB0aGlzLmNsZWFycztcXG4gICAgICAgICAgICAvL+WIneWni+WMluWPmOmHj+e7k+adn1xcbiAgICAgICAgICAgIGxldCBpbml0X2NhdGUgPSBuZXcgQXJyYXkoMjApLmZpbGwoXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICBjb25zdCBmb2xkID0gZ2V0TXlWYXIoTVlfUlVMRS5ncm91cCwgXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICBjb25zdCBjYXRlX3RlbXAgPSBKU09OLnBhcnNlKFxcbiAgICAgICAgICAgICAgICBnZXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIiwgSlNPTi5zdHJpbmdpZnkoaW5pdF9jYXRlKSlcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGlmIChzZWFyY2ggJiYgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCInaGlrZXI6Ly9zZWFyY2g/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXCImcz0nK2lucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmkJzntKLlhbPplK7or41cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcImtleXdvcmRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwia2V5d29yZFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgcnVsZU9iai5mb3JFYWNoKCh4KSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgICAgIGlmICh4Lmpzb24gIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgICAgICB4Lmpzb24ubWFwKGsgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaChKU09OLnN0cmluZ2lmeShrKS5yZXBsYWNlKC9eXFxcXFt8XFxcXF0kL2csICcnKSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHgu5LiA57qn5a6a5L2NKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7kuIDnuqflrprkvY0uc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShodG1sLCB4LuS4gOe6p+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGh0bWwsIHgu5LiA57qn5a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoeC7lpKfnsbvlrprkvY0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuWkp+exu+WumuS9jS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIHgu5aSn57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IFtwZGZhKGh0bWwsIHgu5aSn57G75a6a5L2NKS5qb2luKCdcXFxcbicpXTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLy0t6aKd5aSW5aSE55CGLS1cXG4gICAgICAgICAgICAgICAgaWYgKCgn5aKe5YqgJyBpbiB4KSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5aKe5YqgLmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHgu5aKe5YqgID0gZXZhbCh4LuWinuWKoCk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBzbGlzdCA9IHgu5aKe5YqgLmNvbmNhdChzbGlzdCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKCgn6KGl5YWFJyBpbiB4KSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu6KGl5YWFLmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHgu6KGl5YWFID0gZXZhbCh4LuihpeWFhSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBzbGlzdCA9IHNsaXN0LmNvbmNhdCh4LuihpeWFhSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8tLemineWkluWkhOeQhi0tXFxuICAgICAgICAgICAgICAgIHZhciDkuIDnuqcgPSBsaXN0Lm1hcCgocykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNsaXN0ID0gW107XFxuICAgICAgICAgICAgICAgICAgICBpZiAoIShcXFwi5bCP57G7XFxcIiBpbiB4KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHgu5bCP57G7ID0gXFxcImJvZHkmJmE6bm90KDptYXRjaGVzKOmmlumhtSkpOm5vdChhOm5vdChbaHJlZl0pKVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7lsI/nsbsuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSB0aGlzLmV2YWxKU1J1bGUocywgeC7lsI/nsbspO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlzdCA9IHBkZmEocywgeC7lsI/nsbspO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIOWumuS9jSA9IHNsaXN0Lm1hcCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoaXRlbSwgeC7moIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLmdldFVybChpdGVtLCB4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIOWumuS9jTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKOS4gOe6pylcXG4gICAgICAgICAgICAgICAgLy9sb2co5LiA57qnLmxlbmd0aClcXG4gICAgICAgICAgICAgICAgaWYgKOS4gOe6py5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKOS4gOe6py5qb2luKFxcXCJcXFxcblxcXCIpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIOS4gOe6py5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKGl0ZW0uam9pbihcXFwiLFxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3JpZXMpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKOaKmOWPoOeKtuaAgSkge1xcbiAgICAgICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmb2xkID09PSBcXFwiMVxcXCIgPyDmipjlj6AgOiDlsZXlvIAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9sZCwgdSwgYWxsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLmdyb3VwLCBmb2xkID09PSBcXFwiMVxcXCIgPyBcXFwiMFxcXCIgOiBcXFwiMVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyphbGwuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5YWo5riFXFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogdGhpcy5hY3Rpb24oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbDog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2w6IOa4hemZpCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3JpZXMpXFxuICAgICAgICAgICAgICAgICAgICBsZXQgc3ViX2NhdGVnb3JpZXMgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIC8qaWYgKOWwj+exu+WumuS9jS5pbmNsdWRlcyhcXFwiO1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NLnNwbGl0KFxcXCI7XFxcIilbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViX2NhdGVnb3JpZXMubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jS5zcGxpdChcXFwiO1xcXCIpWzFdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsqL1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coaW5kZXgpXFxuICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IEpTT04ucGFyc2UoYFske2NhdGVnb3J5fV1gKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGV0IHRpdGxlID0gcGRmaChpdGVtLCBf5aSn57G75qCH6aKYKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gaXRlbS50aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3UmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqc29uID0gJydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcnM6IOa4hemZpCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb246IGpzb24sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTog54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsY2xlYXJzOiDlhajmuIUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGV0IHVybCA9IHBkKGl0ZW0sIF/lpKfnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qaWYgKOWkp+exu+WkhOeQhikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IOS4gOe6p+WIhuexu+WkhOeQhih1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2codXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3X2NhdGUgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWxsY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYXRlLnB1c2goaW5kZXggPT09IDAgPyBwYXJhbXMua2V5LnRvU3RyaW5nKCkgOiBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuanNvbi5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkdF9cXFwiICsgcGFyYW1zLmpzb24udHlwZSwgcGFyYW1zLmpzb24udmFsdWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy5zdGF0ZSwgcGFyYW1zLmpzb24pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcGFyYW1zKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGQgPT09IFxcXCIxXFxcIiB8fCDmipjlj6DnirbmgIEgPT0gZmFsc2UpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dHJhcG9zID0gZmFsc2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qaWYgKGl0ZW0uaW5jbHVkZXMoJ3R5cGU9XFxcIkBleHRyYVxcXCInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcG9zID0gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZygn6ZmE5Yqg5a6a5L2NJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHRyYXBvcykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gcGRmaChpdGVtLCBcXFwiYSYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBwZGZoKGl0ZW0sIFxcXCJhJiZzdGF0ZVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIFxcXCJhJiZ2YWx1ZVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHRpdGxlID0gcGRmaChpdGVtLCDliIbnsbvmoIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gaXRlbS50aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qc3dpdGNoICh0cnVlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQEBcXFwiKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAQFxcXCIpWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQFxcXCIpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGpzb24gPSBwZChpdGVtLCDliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnZhciBqc29uPeWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEBAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVswXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH06cGQoaXRlbSzliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbj3liIbnsbvpk77mjqUuaW5jbHVkZXMoJ0BAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTrliIbnsbvpk77mjqUuc3BsaXQoJ0BAJylbMF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQCcpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTpwZChpdGVtLOWIhuexu+mTvuaOpSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uOiBqc29uLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbGNsZWFyczog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFsbGNsZWFycy5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcFtwYXJhbXMuaW5kZXhdID0gcGFyYW1zLmtleS50b1N0cmluZygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuY2F0ZV90ZW1wKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5qc29uLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImR0X1xcXCIgKyBwYXJhbXMuanNvbi50eXBlLCBwYXJhbXMuanNvbi52YWx1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLnN0YXRlLCBwYXJhbXMuanNvbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHBhcmFtcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgfTtcXG4gICAgb2JqLumihOiuvihvcHRpb25zKTtcXG4gICAgcmV0dXJuIG9iajtcXG59XFxuXFxuLy8u54q25oCBKFxcXCJ1cmxcXFwiKVxcbi8vLueVjOmdoihkKVxcbi8vLua6kOeggSh4aHRtbClcXG4vLy7lhajmuIUoW1xcXCIxXFxcIiwgXFxcIjJcXFwiXSlcXG4vLy7muIXpmaQoKVxcbi8vLuW8gOWQr+aKmOWPoCgpXFxuLy8u6aG156CBKHBhZ2UpXFxuLy8u5Yib5bu65Yqo5oCB5YiG57G7KOWumuS9jeWIl+ihqCk7XFxuXFxuZnVuY3Rpb24gZ2V0T2JqZnVjKG9iaikge1xcbiAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5maWx0ZXIoXFxuICAgICAgICAobmFtZSkgPT4gdHlwZW9mIG9ialtuYW1lXSA9PT0gXFxcImZ1bmN0aW9uXFxcIlxcbiAgICApO1xcbiAgICBpZiAobWV0aG9kcy5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgY29uc29sZS5sb2cob2JqLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIGNvbnN0IGZvcm1hdHRlZFN0cmluZyA9IG1ldGhvZHNcXG4gICAgICAgIC5tYXAoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICBjb25zdCBmbiA9IG9ialtuYW1lXTtcXG4gICAgICAgICAgICBjb25zdCBmblN0cmluZyA9IGAke25hbWV9OiAke2ZuLnRvU3RyaW5nKCl9YDtcXG4gICAgICAgICAgICBjb25zdCByZXN0b3JlZEZuU3RyaW5nID0gZm5TdHJpbmcucmVwbGFjZShcXG4gICAgICAgICAgICAgICAgL1xcXFxcXFxcdShbXFxcXGRcXFxcd117NH0pL2dpLFxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihtYXRjaCwgZ3JwKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChncnAsIDE2KSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIHJldHVybiByZXN0b3JlZEZuU3RyaW5nO1xcbiAgICAgICAgfSlcXG4gICAgICAgIC5qb2luKFxcXCJcXFxcblxcXCIpO1xcbiAgICBjb25zb2xlLmxvZyhmb3JtYXR0ZWRTdHJpbmcpO1xcbn1cXG5cXG4vKlxcbnZlciAyMDIzLTA2LTE2ICAxLjBcXG4qL1xcbnZhciDnirbmgIEgPVxcbiAgICB0eXBlb2Yg54q25oCB5qCH6K6wICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOeKtuaAgeagh+iusCAhPSBcXFwiXFxcIiA/IOeKtuaAgeagh+iusCA6IE1ZX1JVTEUudXJsO1xcblxcbmxldCBkdF9kZWJ1ZyA9IGZhbHNlO1xcblxcbmFkZExpc3RlbmVyKFxcbiAgICBcXFwib25DbG9zZVxcXCIsXFxuICAgICQudG9TdHJpbmcoKCkgPT4ge30pXFxuKTtcXG5cXG52YXIgQ3JlYXRlID0ge1xcbiAgICBzcGFnZToge1xcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICByZXR1cm4gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcInNwYWdlXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgfSxcXG4gICAgICAgIHNldDogZnVuY3Rpb24odXJsKSB7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInNwYWdlXFxcIiwgdXJsKTtcXG4gICAgICAgIH0sXFxuICAgIH0sXFxuICAgIG5leHRQYWdlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAgICAgLy9sb2coJ246JytuZXh0KVxcbiAgICAgICAgICAgIGlmIChuZXh0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5LiL5LiA6aG16ZO+5o6l5Li656m6JylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcXG4gICAgICAgICAgICBpZiAodHJ1ZV91cmwgPT0gbmV4dCkge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgLy9sb2coXFxcIuWPr+iDveS4jeWtmOWcqOS4i+S4gOmhteaIluiAheS4i+S4gOmhteWumuS9jeaciemXrumimFxcXCIpO1xcbiAgICAgICAgICAgIGxvZyhcXFwi6ZSZ6K+v5L+h5oGvOlxcXCIgKyBlLm1lc3NhZ2UpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKChuZXh0ID09IFxcXCJcXFwiIHx8IG5leHQgPT0gdW5kZWZpbmVkKSAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZV91cmw7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vcmVzdWx0PWZhbHNlO1xcbiAgICAgICAgICAgIG5leHQgPSBnZXRNeVZhcijnirbmgIEpO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coJ2wnK3RydWVfdXJsKVxcbiAgICAgICAgLy9sb2coJ24nK25leHQpXFxuICAgICAgICBpZiAocGFnZSAhPSAxKSB7XFxuICAgICAgICAgICAgaWYgKHRydWVfdXJsID09IG5leHQgJiYgIXJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAvL3B1dE15VmFyKOeKtuaAgSwgbmV4dCk7XFxuICAgIH0sXFxuICAgIGdldEJhY2tJbWFnZTogZnVuY3Rpb24oaW1ndXJsKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gaW1ndXJsO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICByZXN1bHQgPSAvdXJsKD86XFxcXHMrKT9cXFxcKCguKj8pXFxcXCkvZ1xcbiAgICAgICAgICAgICAgICAuZXhlYyhpbWd1cmwpWzFdXFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oJ3xcXFwifCZxdW90OykvZ20sIFxcXCJcXFwiKTtcXG4gICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH0sXFxuICAgIGh0dHBIYW5kbGU6IGZ1bmN0aW9uKGlucHV0KSB7XFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCIvL1xcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczpcXFwiICsgaW5wdXQ7XFxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIi9cXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBNWV9IT01FICsgaW5wdXQ7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGltZ0hhbmRsZTogZnVuY3Rpb24oaXRlbSwgcnVsZSkge1xcbiAgICAgICAgdmFyIGltZyA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKHJ1bGUuaW1nLnN0YXJ0c1dpdGgoXFxcInBkXFxcIikpIHtcXG4gICAgICAgICAgICBpbWcgPSBldmFsKHJ1bGUuaW1nKTtcXG4gICAgICAgIH0gZWxzZSBpZiAocnVsZS5iYWNraW1nKSB7XFxuICAgICAgICAgICAgaW1nID0gcGRmaChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgaW1nID0gdGhpcy5nZXRCYWNrSW1hZ2UoaW1nKTtcXG4gICAgICAgICAgICBpbWcgPSB0aGlzLmh0dHBIYW5kbGUoaW1nKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaW1nID0gcGRmaChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgaWYgKCFpbWcuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGltZyA9IHBkKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICAgICAgaW1nID0gdGhpcy5odHRwSGFuZGxlKGltZyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGltZyArIHJ1bGUucmVmO1xcbiAgICB9LFxcbiAgICB1cmxIYW5kbGU6IGZ1bmN0aW9uKGl0ZW0sIHJ1bGUpIHtcXG4gICAgICAgIHZhciBocmVmID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAocnVsZS51cmwuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIGhyZWYgPSBldmFsKHJ1bGUudXJsKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaHJlZiA9IHBkKGl0ZW0sIHJ1bGUudXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGhyZWYgPSBydWxlLmltdCA/IGhyZWYgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCIgOiBocmVmO1xcbiAgICAgICAgcmV0dXJuIGhyZWY7XFxuICAgIH0sXFxuICAgIHNldENvbnRlbnQ6IGZ1bmN0aW9uKGl0ZW0sIGlucHV0KSB7XFxuICAgICAgICBsZXQgb3V0cHV0ID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgb3V0cHV0ID0gZXZhbChpbnB1dCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIG91dHB1dCA9IHBkZmgoaXRlbSwgaW5wdXQpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcXG4gICAgfSxcXG4gICAgcmVmcmVzaDogZnVuY3Rpb24oKSB7XFxuICAgICAgICBhZGRMaXN0ZW5lcihcXG4gICAgICAgICAgICBcXFwib25SZWZyZXNoXFxcIixcXG4gICAgICAgICAgICAkLnRvU3RyaW5nKCh1KSA9PiB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcInlpbGlzdFxcXCIpO1xcbiAgICAgICAgICAgICAgICAvL3ZhciBwID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ3NwYWdlJywgJycpO1xcbiAgICAgICAgICAgICAgICAvL3B1dE15VmFyKHUsIHApO1xcbiAgICAgICAgICAgIH0sIOeKtuaAgSlcXG4gICAgICAgICk7XFxuICAgIH0sXFxuICAgIGdldEJvb2xlYW5WYWx1ZTogZnVuY3Rpb24odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyBCb29sZWFuKHZhbHVlKSA6IChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHRydWUpO1xcbiAgICB9LFxcbiAgICBqc29uTGlzdDogZnVuY3Rpb24oYXJyLCBqc29uLCBydWxlKSB7XFxuICAgICAgICBpZiAoanNvbi5jb25zdHJ1Y3RvciAhPSBPYmplY3QpIHtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uKTtcXG4gICAgICAgICAgICB9IGNhdGNoIHt9XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZGVidWcgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmRlYnVnLCBmYWxzZSk7XFxuICAgICAgICB2YXIgZW1wdHkgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmVtcHR5KTtcXG4gICAgICAgIGpzb25bcnVsZS5saXN0XS5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhpdGVtKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgaW1nID0gZXZhbChydWxlLmltZykgKyBydWxlLnJlZjtcXG4gICAgICAgICAgICB2YXIgaHJlZiA9IGV2YWwocnVsZS51cmwpO1xcbiAgICAgICAgICAgIGhyZWYgPSBydWxlLmltdCA/IGhyZWYgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCIgOiBocmVmO1xcbiAgICAgICAgICAgIHZhciBsYXp5ID0gcnVsZS5sYXp5ID8gcnVsZS5sYXp5IDogXFxcIlxcXCI7XFxuICAgICAgICAgICAgdmFyIGRkID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogZXZhbChydWxlLnRpdGxlKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogZXZhbChydWxlLmRlc2MpLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBldmFsKHJ1bGUuY29udGVudCksXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgICAgICAgdXJsOiAoZW1wdHkgPyBcXFwiaGlrZXI6Ly9lbXB0eSMjXFxcIiA6ICcnKSArIGhyZWYsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfTtcXG5cXG4gICAgICAgICAgICBpZiAobGF6eSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBkZFtcXFwidXJsXFxcIl0gPSBocmVmICsgbGF6eTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgYXJyLnB1c2goZGQpO1xcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuICAgIHJ1bGVMaXN0OiBmdW5jdGlvbihhcnIsIGh0bWwsIHJ1bGUpIHtcXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCBydWxlLmxpc3QpO1xcbiAgICAgICAgdmFyIGRlYnVnID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5kZWJ1ZywgZmFsc2UpO1xcbiAgICAgICAgdmFyIGVtcHR5ID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5lbXB0eSk7XFxuICAgICAgICBsaXN0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgbG9nKGl0ZW0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLnRpdGxlKTtcXG4gICAgICAgICAgICB2YXIgZGVzYyA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MpO1xcbiAgICAgICAgICAgIHZhciBpbWcgPSB0aGlzLmltZ0hhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy51cmxIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5jb250ZW50KTtcXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwgKyAnP3BhZ2U9ZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiKScsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBpZiAobGF6eSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBkZFtcXFwidXJsXFxcIl0gPSB1cmwgKyBsYXp5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhcnIucHVzaChkZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgTGlzdDogZnVuY3Rpb24oYXJyLCBodG1sLCBydWxlLCBwYXJhbSkge1xcbiAgICAgICAgcGFyYW0gPSBwYXJhbSA/IHBhcmFtIDoge307XFxuICAgICAgICB2YXIgYXV0byA9IHBhcmFtLmF1dG8gPyBwYXJhbS5hdXRvIDogZmFsc2U7XFxuICAgICAgICB2YXIgc2hvdyA9IHBhcmFtLnNob3cgPyBwYXJhbS5zaG93IDogZmFsc2U7XFxuICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgLy90aGlzLnNwYWdlLnNldCh0cnVlX3VybCk7XFxuICAgICAgICB9XFxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCBydWxlLmxpc3QpO1xcbiAgICAgICAgLy9sb2codGhpcy5uZXh0UGFnZSgpKVxcbiAgICAgICAgaWYgKChzdG9yYWdlMC5nZXRNeVZhcigneWlfaXNuZXh0JywgJ3QnKSA9PSAndCcgJiYgbGlzdC5sZW5ndGggPiAwKSB8fCBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBsaXN0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFwicGFnZW51bVxcXCIpO1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKFxcXCJwYWdlbGluZVxcXCIpO1xcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIGNscyA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS50aXRsZSk7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuZGVzYyk7XFxuICAgICAgICAgICAgICAgIHZhciBpbWcgPSB0aGlzLmltZ0hhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpO1xcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsaXN0Lmxlbmd0aCAtIDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlkID0gXFxcImxhc3RpZF9cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICAgICAgICAgIGNscyA9IFxcXCJsYXN0bWFya1xcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5IyNcXFwiICsgdXJsICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2VqXFxcIiknLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogY2xzLFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGlmIChpID09IGxpc3QubGVuZ3RoIC0gMSAmJiBzaG93KSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJwYWdlbGluZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxzbWFsbD7liqDovb3kuK0uLi48L3NtYWxsPlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcInBhZ2VudW1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKFxcXCJwYWdlbnVtXFxcIiwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48c21hbGw+5Yiw5bqV5LqGPC9zbWFsbD48L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogXFxcImxhc3RcXFwiLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgLyppZiAobGlzdC5sZW5ndGggPT0gMCAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7ml6DlhoXlrrk8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHt9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSovXFxuICAgICAgICBpZiAodGhpcy5uZXh0UGFnZSgpKSB7XFxuICAgICAgICAgICAgLy9sb2coJ3QnKTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcigneWlfaXNuZXh0JywgJ3QnKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy9sb2coJ2YnKTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcigneWlfaXNuZXh0JywgJ2YnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChhdXRvKSB7XFxuICAgICAgICAgICAgLy9jcmVhdGVOZXh0UGFnZSgpO1xcbiAgICAgICAgICAgIGF1dG9QYWdlKCk7XFxuICAgICAgICB9XFxuICAgIH0sXFxufTtcXG5cXG52YXIgZXh0TWV0aG9kID0ge1xcbiAgICBUb1BhcmFtczogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIganNvbiA9IGFyZ3VtZW50c1swXTtcXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhqc29uKVxcbiAgICAgICAgICAgIC5tYXAoKGtleSkgPT4ga2V5ICsgXFxcIj1cXFwiICsganNvbltrZXldKVxcbiAgICAgICAgICAgIC5qb2luKFxcXCImXFxcIik7XFxuICAgIH0sXFxuICAgIHVybFBhcnNlOiBmdW5jdGlvbih1KSB7XFxuICAgICAgICB2YXIgZGljdCA9IHt9O1xcbiAgICAgICAgZGljdC5Tb3VyY2UgPSB1O1xcbiAgICAgICAgbGV0IHBhcmFtcyA9ICh1cmwpID0+IHtcXG4gICAgICAgICAgICBsZXQgcXVlcnlQYXJhbXMgPSB7fTtcXG4gICAgICAgICAgICBsZXQgcmVnID0gLyhbXj89Jl0rKT0oW14/PSZdKykvZztcXG4gICAgICAgICAgICB1cmwucmVwbGFjZShyZWcsIGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1thcmd1bWVudHNbMV1dID0gYXJndW1lbnRzWzJdO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBxdWVyeVBhcmFtcztcXG4gICAgICAgIH07XFxuICAgICAgICB2YXIgamF2YVVybCA9IEphdmFJbXBvcnRlcihqYXZhLm5ldC5VUkwpO1xcbiAgICAgICAgd2l0aChqYXZhVXJsKSB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IG5ldyBVUkwodSk7XFxuICAgICAgICAgICAgZGljdC5Qcm90b2NvbCA9IHVybC5nZXRQcm90b2NvbCgpO1xcbiAgICAgICAgICAgIGRpY3QuSG9zdCA9IHVybC5nZXRIb3N0KCk7XFxuICAgICAgICAgICAgZGljdC5Qb3J0ID0gdXJsLmdldFBvcnQoKTtcXG4gICAgICAgICAgICBkaWN0LkZpbGUgPSB1cmwuZ2V0RmlsZSgpO1xcbiAgICAgICAgICAgIGRpY3QuUGF0aCA9IHVybC5nZXRQYXRoKCk7XFxuICAgICAgICAgICAgZGljdC5SZWYgPSB1cmwuZ2V0UmVmKCk7XFxuICAgICAgICAgICAgZGljdC5Ib3N0cyA9IGAke2RpY3QuUHJvdG9jb2x9Oi8vJHt1cmwuZ2V0SG9zdCgpfWA7XFxuICAgICAgICB9XFxuICAgICAgICBkaWN0LlBhcmFtcyA9IHBhcmFtcyh1KTtcXG4gICAgICAgIHJldHVybiBkaWN0O1xcbiAgICB9LFxcbiAgICBpc0VxdWFsOiBmdW5jdGlvbih4LCB5KSB7XFxuICAgICAgICBjb25zdCBvayA9IE9iamVjdC5rZXlzLFxcbiAgICAgICAgICAgIHR4ID0gdHlwZW9mIHgsXFxuICAgICAgICAgICAgdHkgPSB0eXBlb2YgeTtcXG4gICAgICAgIHJldHVybiB4ICYmIHkgJiYgdHggPT09IFxcXCJvYmplY3RcXFwiICYmIHR4ID09PSB0eSA/XFxuICAgICAgICAgICAgb2soeCkubGVuZ3RoID09PSBvayh5KS5sZW5ndGggJiZcXG4gICAgICAgICAgICBvayh4KS5ldmVyeSgoa2V5KSA9PiB0aGlzLmlzRXF1YWwoeFtrZXldLCB5W2tleV0pKSA6XFxuICAgICAgICAgICAgeCA9PT0geTtcXG4gICAgfSxcXG4gICAgZmluZERpZmZlcmVudEluZGV4OiBmdW5jdGlvbihzdHIxLCBzdHIyKSB7XFxuICAgICAgICBjb25zdCBkaWZmQ2hhcnMgPSBbXTtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyMi5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGlmIChzdHIxW2ldICE9PSBzdHIyW2ldKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZDaGFycy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxcbiAgICAgICAgICAgICAgICAgICAgczE6IHN0cjFbaV0sXFxuICAgICAgICAgICAgICAgICAgICBzMjogc3RyMltpXSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGRpZmZDaGFycztcXG4gICAgfSxcXG4gICAgcmVwbGFjZUNoYXJBdDogZnVuY3Rpb24oc3RyLCBpbmRleCwgcmVwbGFjZW1lbnQpIHtcXG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RyLmxlbmd0aCkge1xcbiAgICAgICAgICAgIHJldHVybiBzdHI7XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhpbmRleClcXG4gICAgICAgIGNvbnN0IGFyciA9IHN0ci5zcGxpdChcXFwiXFxcIik7XFxuICAgICAgICBhcnJbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XFxuICAgICAgICByZXR1cm4gYXJyLmpvaW4oXFxcIlxcXCIpO1xcbiAgICB9LFxcbiAgICBnZXRPYmplY3RLZXlzRGlmZjogZnVuY3Rpb24ob2JqMSwgb2JqMikge1xcbiAgICAgICAgY29uc3QgZGlmZmVyZW50S2V5cyA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQga2V5IGluIG9iajEpIHtcXG4gICAgICAgICAgICBpZiAoIW9iajIuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBvYmoxW2tleV0gIT09IG9iajJba2V5XSkge1xcbiAgICAgICAgICAgICAgICBkaWZmZXJlbnRLZXlzLnB1c2goa2V5KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqMikge1xcbiAgICAgICAgICAgIGlmICghb2JqMS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZlcmVudEtleXMucHVzaChrZXkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkaWZmZXJlbnRLZXlzO1xcbiAgICB9LFxcbiAgICBnZXROZXh0VXJsOiBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgcGFyYW1zKSB7XFxuICAgICAgICB2YXIgdTEgPSB0aGlzLnVybFBhcnNlKHNvdXJjZSk7XFxuICAgICAgICB2YXIgdTIgPSB0aGlzLnVybFBhcnNlKHRhcmdldCk7XFxuICAgICAgICB2YXIgcGEgPSB1bmRlZmluZWQ7XFxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PSBcXFwib2JqZWN0XFxcIikge1xcbiAgICAgICAgICAgIHBhID0gcGFyYW1zLmhhc093blByb3BlcnR5KFxcXCLnibnlvoFcXFwiKSA/IHBhcmFtcy7nibnlvoEgOiB1bmRlZmluZWQ7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgbmV4dHVybCA9IHNvdXJjZTtcXG4gICAgICAgIHZhciBjYSA9IE9iamVjdC5rZXlzKHUyLlBhcmFtcykubGVuZ3RoID09IDAgPyBcXFwiXFxcIiA6IFxcXCI/XFxcIjtcXG4gICAgICAgIGlmIChwYSAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICB2YXIgcnMgPSBTdHJpbmcodTIuUGF0aCkucmVwbGFjZShuZXcgUmVnRXhwKHBhKSwgXFxcIiQxZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgbmV4dHVybCA9IHUyLkhvc3RzICsgcnMgKyBjYSArIHRoaXMuVG9QYXJhbXModTIuUGFyYW1zKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFcXVhbCh1MS5QYXJhbXMsIHUyLlBhcmFtcykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKGR0X2RlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2codTEuUGF0aCk7XFxuICAgICAgICAgICAgICAgICAgICBsb2codTIuUGF0aCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGRmID0gdGhpcy5maW5kRGlmZmVyZW50SW5kZXgoU3RyaW5nKHUxLlBhdGgpLCBTdHJpbmcodTIuUGF0aCkpO1xcbiAgICAgICAgICAgICAgICBpZiAoZHRfZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhkZik7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGRmLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmUgPSBkZlswXS5pbmRleDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBmID0gZGYuZmlsdGVyKCh4KSA9PiAvXFxcXGQrLy50ZXN0KHguczIpKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZSA9IGZbMF0uaW5kZXg7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGVxID0gdGhpcy5yZXBsYWNlQ2hhckF0KFN0cmluZyh1Mi5QYXRoKSwgcmUsIFxcXCJmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICAgICAgbmV4dHVybCA9IHUyLkhvc3RzICsgZXEgKyBjYSArIHRoaXMuVG9QYXJhbXModTIuUGFyYW1zKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgZXAgPSB0aGlzLmdldE9iamVjdEtleXNEaWZmKHUxLlBhcmFtcywgdTIuUGFyYW1zKVxcbiAgICAgICAgICAgICAgICBpZiAoZXAubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHUxLlBhcmFtc1tlcFswXV0gPSAnZnlwYWdlJ1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGVwKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZXEgPSBTdHJpbmcodTEuUGF0aCkucmVwbGFjZSgvXFxcXGQrLywgXFxcImZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBuZXh0dXJsID0gdTEuSG9zdHMgKyBlcSArIGNhICsgdGhpcy5Ub1BhcmFtcyh1MS5QYXJhbXMpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKCduZXh0OicrbmV4dHVybClcXG4gICAgICAgIHJldHVybiBuZXh0dXJsO1xcbiAgICB9LFxcbn07XFxuXFxuZnVuY3Rpb24gZ2V0VHJ1ZWxpbmsobWFyaywgdXJsLCBwYWdlKSB7XFxuICAgIHZhciBwID0gZ2V0TXlWYXIobWFyaywgdXJsKS5yZXBsYWNlKFxcXCJmeXBhZ2VcXFwiLCBwYWdlKTtcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcmV0dXJuIGdldE15VmFyKFxcXCJ5aV9maXJzdHBhZ2VcXFwiLCBwKTtcXG4gICAgfSBlbHNlIGlmIChwICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICByZXR1cm4gcDtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB1cmw7XFxuICAgIH1cXG59XFxuLy/mnoTlu7pcXG5mdW5jdGlvbiBjcmVhdGVOZXh0UGFnZSgpIHtcXG4gICAgbGV0IHN0YXJ0bnVtID0gMTtcXG4gICAgdmFyIG9iaiA9IGFyZ3VtZW50c1swXTtcXG4gICAgaWYgKHRydWVfdXJsICE9IGdldE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIiwgXFxcIlxcXCIpKSB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIik7XFxuICAgIH1cXG4gICAgaWYgKHBhZ2UgPT0gc3RhcnRudW0gJiYgZ2V0TXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHRydWVfdXJsKTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAgICAgLy9sb2coXFxcIm5leHRcXFwiKTtcXG4gICAgICAgICAgICAvL2xvZyhuZXh0KTtcXG4gICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgIGxvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICAgICAgbmV4dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG5leHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICB2YXIgbnh1cmwgPSBleHRNZXRob2QuZ2V0TmV4dFVybCh0cnVlX3VybCwgbmV4dCwgb2JqKTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibnh1cmw6XFxcIiArIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcijnirbmgIEsIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIsIG54dXJsKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBhdXRvUGFnZSgpIHtcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHRydWVfdXJsKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAvL2xvZyhcXFwibmV4dFxcXCIpO1xcbiAgICAgICAgLy9sb2coJ25leHQ6JytuZXh0KTtcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgICBsb2coXFxcIuWPr+iDveS4jeWtmOWcqOS4i+S4gOmhteaIluiAheS4i+S4gOmhteWumuS9jeaciemXrumimFxcXCIpO1xcbiAgICAgICAgbmV4dCA9IFxcXCJcXFwiO1xcbiAgICB9XFxuICAgIGlmIChuZXh0ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICBwdXRNeVZhcijnirbmgIEsIG5leHQpO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqM57qn5aSW6YOo5pCc57SiXCIsXCJwYXRoXCI6XCJ0b29sXCIsXCJydWxlXCI6XCIvL3ZhciB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChodG1sLCDmkJzntKLmoIfnrb4pO1xcbi8vdmFyIHRpdGxlID0gTVlfUEFSQU1TLnRpdGxlO1xcbi8vbG9nKHRpdGxlKVxcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI0ZGMDAwMFxcXCI+IFRoaXNBVjwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG40Lmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvbG9nb3MtYW5kLWJyYW5kcy81MTIvMjMyX05pbnRlbmRvX1N3aXRjaF9sb2dvLTEyOC5wbmcnLFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjnlarlj7cpID0+IHtcXG4gICAgICAgICAgICAgICAgIHZhciBhdiA9IFxcXCJodHRwczovL3RoaXNhdi5jb20vY24vXFxcIiArIOeVquWPtzsgXFxuLy9sb2coYXYpXFxuICAgICAgICAgICAgICB0cnl7XFxuICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGF2LCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMCknXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgfSx0aW1lb3V0OjMwMDBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvZXZhbC4qP1xcXFxuLylbMF0pXFxuICAgICAgICAgICAgICAgICB2YXIgc291cmNlMTkyMCA9IHNvdXJjZTEyODAucmVwbGFjZShcXFwiMTI4MHg3MjBcXFwiLFxcXCIxOTIweDEwODBcXFwiKVxcbiAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBKU09OLnBhcnNlKGZldGNoKHNvdXJjZTE5MjAse29ubHlIZWFkZXJzOnRydWUsdGltZW91dDozMDAwfSkpLnN0YXR1c0NvZGU7XFxuICAgICAgICAgICAgICAgICBpZihjb2RlICE9PSAyMDApe1xcbiAgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTEyODAgKyAnO3tSZWZlcmVyQGh0dHBzOi8vdGhpc2F2LmNvbX0nXFxufWVsc2V7XFxuICAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlMTkyMCArICc7e1JlZmVyZXJAaHR0cHM6Ly90aGlzYXYuY29tfSdcXG4gICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgfWNhdGNoe3JldHVybiBcXFwidG9hc3Q6Ly/mjILmoq/miJbmsqHmnInmraTlvbHniYdcXFwifVxcbiAgICAgICAgICAgICAgICAgIH0s55Wq5Y+3KSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYTogeyBsb25nQ2xpY2s6IFt7dGl0bGU6ICfmn6XnnIvnvZHlnYAnLCBqczogJC50b1N0cmluZygo55Wq5Y+3KT0+eyByZXR1cm4gXFxcImh0dHBzOi8vdGhpc2F2LmNvbS9jbi9cXFwiICsg55Wq5Y+3O30s55Wq5Y+3KX1dIH1cXG59KTtcXG5cXG4vL01JU1NBVlxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzAwRkYwMFxcXCI+IE1JU1NBVjwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG4xLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvZnJ1aXRzLW4tdmVnZXRhYmxlcy1jb2xvcmVkLWdyYWRpZW50LzEyOC9jYXVsaWZsb3dlci0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo55Wq5Y+3KSA9PiB7XFxuICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgdmFyIGF2ID0gXFxcImh0dHBzOi8vbWlzc2F2LnRvL3NlYXJjaC9tb3ZpZS9cXFwiICsg55Wq5Y+3OyAgXFxuICAgICAgICAgICAgIHZhciB1cmxzID0gW107ICAgIFxcbiAgICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoZmV0Y2goYXYse3RpbWVvdXQ6MzAwMH0pLFxcXCIudmlkZW9zLWxpc3QmJmFydGljbGVcXFwiKTtcXG4gICAgICAgICAgICBmb3IodmFyIGogaW4gbGlzdCl7XFxuICAgICAgICAgICAgICB1cmxzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBwZGZoKGxpc3Rbal0sXFxcImEmJmhyZWZcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBwbGF5cyA9IGJmKHVybHMpLm1hcChoPT5oLm1hdGNoKC9zcmM9XFxcIiguKj8pXFxcIi8pWzFdLnNwbGl0KFxcXCImXFxcIilbMF0ucmVwbGFjZShcXFwiP2lkPVxcXCIsXFxcImhscy9cXFwiKSArIFxcXCIubTN1OFxcXCIpICAgXFxuICAgICAgICAgICAgIHJldHVybiB7dXJsczpwbGF5c31cXG4gICAgICAgfWNhdGNoe1xcbiAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgdmFyIGF2ID0gXFxcImh0dHBzOi8vbWlzc2F2LnRvL3NlYXJjaC9tb3ZpZS9cXFwiICsg55Wq5Y+3LnJlcGxhY2UoL1xcXFwtfFxcXFxfLyxcXFwiJTIwXFxcIik7ICBcXG4gICAgICAgICAgICAgdmFyIHVybHMgPSBbXTsgICAgXFxuICAgICAgICAgICAgIHZhciBsaXN0ID0gcGRmYShmZXRjaChhdix7dGltZW91dDozMDAwfSksXFxcIi52aWRlb3MtbGlzdCYmYXJ0aWNsZVxcXCIpO1xcbiAgICAgICAgICAgIGZvcih2YXIgaiBpbiBsaXN0KXtcXG4gICAgICAgICAgICAgIHVybHMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHBkZmgobGlzdFtqXSxcXFwiYSYmaHJlZlxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIHBsYXlzID0gYmYodXJscykubWFwKGg9PmgubWF0Y2goL3NyYz1cXFwiKC4qPylcXFwiLylbMV0uc3BsaXQoXFxcIiZcXFwiKVswXS5yZXBsYWNlKFxcXCI/aWQ9XFxcIixcXFwiaGxzL1xcXCIpICsgXFxcIi5tM3U4XFxcIikgICBcXG4gICAgICAgICAgICAgcmV0dXJuIHt1cmxzOnBsYXlzfVxcbiAgICAgICAgICB9Y2F0Y2h7cmV0dXJuIFxcXCJ0b2FzdDovL+ayoeacieatpOW9seeJh1xcXCJ9XFxuICAgICAgIH0gICBcXG4gICAgICAgICAgICAgICAgICB9LOeVquWPtyksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgZXh0cmE6IHsgbG9uZ0NsaWNrOiBbe3RpdGxlOiAn5p+l55yL572R5Z2AJywganM6ICQudG9TdHJpbmcoKOeVquWPtyk9PnsgcmV0dXJuIFxcXCJodHRwczovL21pc3Nhdi50by9zZWFyY2gvbW92aWUvXFxcIiArIOeVquWPt30s55Wq5Y+3KX1dIH1cXG59KTtcXG5cXG4vL25qYXZcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiMxRTkwRkZcXFwiPiBuSmF2LnR2PC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjIuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9zb2NpYWwtaWNvbnMtMzMvMTI4L0ZhY2Vib29rX01lc3Nlbmdlci0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo55Wq5Y+3KSA9PiB7XFxuICAgICAgICAgICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly9uamF2LnR2L3poL3YvXFxcIiArIOeVquWPtzsgXFxuLy9sb2coYXYpXFxuICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IEpTT04ucGFyc2UoZmV0Y2goYXYse29ubHlIZWFkZXJzOnRydWUsdGltZW91dDozMDAwfSkpLnN0YXR1c0NvZGVcXG4gICAgICAgICAgICAgICAgIGlmKGNvZGUgIT09IDIwMCl7ICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aMguair+aIluayoeacieatpOW9seeJh1xcXCJcXG4gICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInZpZGVvOi8vXFxcIiArIGF2O1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgIH0s55Wq5Y+3KSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICB2aWRlb0V4Y2x1ZGVSdWxlczogWycyNDAnXSxcXG4gICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycqLmRvcHBpb2Nkbi4qJ10sXFxuICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnZG1tLmNvLmpwJ10sXFxuICAgICAgICAgICAgICAgIC8vdmlkZW9SdWxlczogWycqbTN1OConXSxcXG4gICAgICAgICAgICAgICAgY2FjaGVNM3U4OiB0cnVlLFxcbiAgICAgICAgICAgICAgIGxvbmdDbGljazogW3t0aXRsZTogJ+afpeeci+e9keWdgCcsIGpzOiAkLnRvU3RyaW5nKCjnlarlj7cpPT57IHJldHVybiBcXFwiaHR0cHM6Ly9uamF2LnR2L3poL3YvXFxcIiArIOeVquWPtzt9LOeVquWPtyl9XVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG59KTtcXG5cXG4vL2F2MDFcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNGRjAwRkZcXFwiPiBBVjAxPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjIuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9vd2wtMTAvNTAwL25pbTUzMl8xMV9wdXJwbGVfb3dsX2tpZF9iaXJ0aGRheV9mYWNlX2V5ZS0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo55Wq5Y+3KSA9PiB7XFxuICAgICAgICAgICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly93d3cuYXYwMS50di9cXFwiICsg55Wq5Y+3OyBcXG4vL2xvZyhhdilcXG4gICAgICAgICAgICAgICAgIHZhciBidiA9IEpTT04ucGFyc2UoZmV0Y2goYXYse29ubHlIZWFkZXJzOnRydWUsdGltZW91dDozMDAwfSkpXFxuLy9sb2coYnYpXFxuICAgICAgICAgICAgICAgICBpZihidi51cmwuaW5jbHVkZXMoJ2Vycm9yJyl8fGJ2LnN0YXR1c0NvZGUgIT09IDIwMCl7ICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aMguair+aIluayoeacieatpOW9seeJh1xcXCJcXG4gICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInZpZGVvOi8vXFxcIiArIGJ2LnVybDtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICB9LOeVquWPtyksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgdmlkZW9FeGNsdWRlUnVsZXM6IFsnZG9wcGlvY2RuJ10sXFxuICAgICAgICAgICAgICAgIHZpZGVvRXhjbHVkZVJ1bGVzOiBbJzI0MCddLFxcbiAgICAgICAgICAgICAgICB2aWRlb0V4Y2x1ZGVSdWxlczogWyc0ODAnXSxcXG4gICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycuZG9wcGlvY2RuLiddLFxcbiAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJ2RtbS5jby5qcCddLFxcbiAgICAgICAgICAgICAgICAvL3ZpZGVvUnVsZXM6IFsnKm0zdTgqJ10sXFxuICAgICAgICAgICAgICAgIGNhY2hlTTN1ODogdHJ1ZSxcXG4gICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7dGl0bGU6ICfmn6XnnIvnvZHlnYAnLCBqczogJC50b1N0cmluZygo55Wq5Y+3KT0+eyByZXR1cm4gXFxcImh0dHBzOi8vd3d3LmF2MDEudHYvXFxcIiArIOeVquWPtzt9LOeVquWPtyl9XVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG59KTtcXG5cXG4vL0phYmxlXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjRkY4QzAwXFxcIj4gSmFibGU8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vY2RuMy5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL2NhdC1wb3dlci1wcmVtaXVtLzEyMC9jYXRfZm9vZGxvdmUtMTI4LnBuZycsXFxuICAgIHVybDogJCgnJykubGF6eVJ1bGUoKOeVquWPtykgPT4ge1xcbiAgICAgICAgICAgICAgICAgdmFyIGF2ID0gXFxcImh0dHBzOi8vamFibGUudHYvdmlkZW9zL1xcXCIgKyDnlarlj7cgKyBcXFwiL1xcXCI7IFxcbi8vbG9nKGF2KVxcbiAgICAgICAgICAgICAgICAvLyByZXF1ZXN0KFxcXCJodHRwczovL2phYmxlLnR2L1xcXCIpXFxuICAgICAgICAgICAgICB0cnl7XFxuICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGF2LHt0aW1lb3V0OjMwMDB9KVxcbiAgICAgICAgICAgICAgICAgdmFyIHVybCA9IGh0bWwubWF0Y2goL2h0dHBzPzpcXFxcL1xcXFwvXFxcXFMrP1xcXFwubTN1OC8pWzBdXFxuICAgICAgICAgICAgICAgICByZXR1cm4gdXJsXFxuICAgICAgICAgICAgICAgICB9Y2F0Y2h7cmV0dXJuIFxcXCJ0b2FzdDovL+ayoeacieaMguair+WtkOaIluayoeacieatpOW9seeJh1xcXCJ9XFxuICAgICAgICAgICAgICAgICAgfSznlarlj7cpLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7IGxvbmdDbGljazogW3t0aXRsZTogJ+afpeeci+e9keWdgCcsIGpzOiAkLnRvU3RyaW5nKCjnlarlj7cpPT57IHJldHVybiBcXFwiaHR0cHM6Ly9qYWJsZS50di92aWRlb3MvXFxcIiArIOeVquWPtyArIFxcXCIvXFxcIjt9LOeVquWPtyl9XSB9XFxufSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpBcIixcInBhdGhcIjpcImxhenlcIixcInJ1bGVcIjpcInZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKE1ZX0hPTUUpID0+IHtcXG4gICAgdmFyIGlucCA9IGZldGNoKGlucHV0LHt9KTsgXFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIrcGRmYShpbnAsICcuY29sLTEyOm1hdGNoZXMo5Zu+54mHKSYmYScpLm1hcChpbWcgPT5wZChpbWcsICdhJiZocmVmJykrXFxcIkBSZWZlcmVyPVxcXCIsKS5qb2luKFxcXCImJlxcXCIpICBcXG59LE1ZX0hPTUUpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqfpobXpnaLlhoXlrrlcIixcInBhdGhcIjpcInlqXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcblxcbi8qXFxubG9nKE1ZX1VSTClcXG52YXIgaHRtbCA9IHJlcXVlc3QoTVlfVVJMKVxcblxcbmFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgKCkgPT4ge1xcbiAgICBmb3IgKGxldCBpdCBvZiBsaXN0TXlWYXJLZXlzKCkpIHtcXG4gICAgICAgIGNsZWFyTXlWYXIoaXQpO1xcbiAgICB9XFxufSk7Ki9cXG5hZGRMaXN0ZW5lcihcXFwib25SZWZyZXNoXFxcIiwgKCkgPT4ge1xcbiAgICBjbGVhck15VmFyKFxcXCJuZXh0UGFnZVxcXCIpO1xcbn0pO1xcblxcbk1ZX1VSTD1NWV9VUkwucmVwbGFjZSgnaGlrZXI6Ly9lbXB0eSMjJywnJyk7XFxubGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoTVlfUlVMRS51cmwsIE1ZX1VSTCk7XFxuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XFxuLy/ojrflj5bkuIrmrKHnvJPlrZjnmoTkuIvpobXpk77mjqVcXG5sZXQgbmV4dFBhZ2UgPSBnZXRNeVZhcihcXFwibmV4dFBhZ2VcXFwiLCBcXFwiXFxcIik7XFxuLy/lpoLmnpzmnInkuIvkuIDpobXkuJTkuI3mmK/nrKzkuIDpobXlsLHkvb/nlKjkuIvkuIDpobXpk77mjqVcXG5pZiAobmV4dFBhZ2UgJiYgTVlfUEFHRSA+IDEpIHtcXG4gICAgdHJ1ZV91cmwgPSBuZXh0UGFnZTtcXG59XFxubG9nKHRydWVfdXJsKTtcXG52YXIgaHRtbCA9IHJlcXVlc3QodHJ1ZV91cmwpO1xcblxcbnRyeSB7XFxuICAgIC8v57yT5a2Y5LiL5LiA6aG1XFxuICAgIGxldCBuZXh0VXJsID0gcGQoaHRtbCwgXFxcImE6Y29udGFpbnMo4oC6KSYmaHJlZlxcXCIpO1xcbiAgICBwdXRNeVZhcihcXFwibmV4dFBhZ2VcXFwiLCBuZXh0VXJsIHx8IFxcXCJcXFwiKTtcXG4gICAgLy9sb2coXFxcIuS4i+S4gOmhte+8mlxcXCIgKyBuZXh0VXJsKVxcbn0gY2F0Y2ggKGUpIHtcXG4gICAgY2xlYXJNeVZhcihcXFwibmV4dFBhZ2VcXFwiKTtcXG4gICAgdG9hc3QoXFxcIuWlveWDj+ayoeacieS4i+S4gOmhteS6hu+8gVxcXCIpO1xcbn1cXG5cXG5cXG5cXG50cnl7XFxuLy92YXIgayA9IHBkZmgoaHRtbCwnYm9keSYmI3ByaWNlLWN1cnJlbmN5LDAmJlRleHQnKS5yZXBsYWNlKC9cXFxcLy9nLCcnKTsvLyhrID4gMTAwKSA/IDEwMCA6IHBhcnNlSW50KGspXFxuZm9yICh2YXIgaiA9IDE7IGogPCAzNzsgaisrKXtcXG52YXIgdXJsID0gdHJ1ZV91cmwucmVwbGFjZSgvcGFnZT1cXFxcZCsvLCAncGFnZT0nK2opO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICBqICsgJ+mhtScsICAgICBcXG4gICAgICAgIHVybDogJCh1cmwpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLnVybCwgaW5wdXQpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG59KVxcbn19Y2F0Y2goZXJyKXtcXG4gICAgLy9jb25zb2xlLmxvZygn5Y+q5pyJ5LiA6aG1LOWHkeWQiOeci+WQpycsIGVycik7XFxuICAgICAgLy90b2FzdCgn5Y+q5pyJ5LiA6aG1LOWHkeWQiOeci+WQpycsIGVycik7XFxufTtcXG5cXG5cXG5sZXQgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi52aWRlby1saXN0LWl0ZW06bm90KDptYXRjaGVzKOiJsuermeaQreW7uuacjeWKoXxWUikpJyk7XFxubGlzdC5mb3JFYWNoKHggPT4geyAgIFxcbiBkLnB1c2goe1xcbiAgICB0aXRsZTogcGRmaCh4LCAnLmxhenlsb2FkJiZhbHQnKSxcXG4gICAgZGVzYzogcGRmaCh4LCcudGV4dC1tdXRlZCYmVGV4dCcpLFxcbiAgICBpbWc6IHBkKHgsJy5sYXp5bG9hZHx8YSYmZGF0YS1zcmN8fGRhdGEtb3JpZ2luYWwnKSxcXG4gICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2VqP3VybD0nK3BkKHgsICdhJiZocmVmJykrJyNub0hpc3RvcnkjJyxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8yJyxcXG4gIH0pO1xcbn0pXFxuXFxuXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqfpobXpnaLlhoXlrrlcIixcInBhdGhcIjpcImVqXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdXFxuTVlfVVJMPU1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCcnKTtcXG5sb2coTVlfVVJMKVxcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcXG5cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9sYXp5Jywge30pKS5ydWxlKTtcXG5cXG52YXIgaW1nID0gcGFyc2VEb20oaHRtbCwgJ3ZpZGVvJiZkYXRhLXBvc3RlcicpO1xcbmlmKGltZyl7XFxuZC5wdXNoKHtcXG4gICAgaW1nOiBpbWcgKyAnQFJlZmVyZXI9JyxcXG4gICAgdXJsOiBNWV9VUkwgKyBsYXp5LFxcbiAgICBjb2xfdHlwZTogXFxcInBpY18xX2Z1bGxcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgZ3JhZGllbnQ6IHRydWUsICAgXFxuICAgIH1cXG59KVxcbn1lbHNle1xcbiAgZC5wdXNoKHtcXG4gICAgaW1nOiBwYXJzZURvbShodG1sLCAnLmxhenlsb2FkJiZpbWcmJmRhdGEtc3JjJykgKyAnQFJlZmVyZXI9JyxcXG4gICAgdXJsOiBNWV9VUkwgKyBsYXp5LFxcbiAgICBjb2xfdHlwZTogXFxcInBpY18xX2Z1bGxcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgZ3JhZGllbnQ6IHRydWUsICAgXFxuICAgIH1cXG59KVxcbn1cXG5cXG5mb3IgKHZhciBiID0gMDsgYiA8IDI7IGIrKykge1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiAnYmlnX2JsYW5rX2Jsb2NrJ1xcbn0pXFxufVxcblxcbnRyeXtcXG52YXIgbmFtZXMgPSBwZGZhKGh0bWwsJyNwbGF5ZXItdGFiJiZsaScpO1xcbnZhciB1cmxzID0gaHRtbC5tYXRjaCgvaHR0cHM/OlxcXFwvXFxcXC8uKj8oXFxcXC5tM3U4fFxcXFwubXA0KS9nKTtcXG5mb3IgKHZhciBpID0gMDsgaSA8IE1hdGgubWluKHVybHMubGVuZ3RoLCBuYW1lcy5sZW5ndGgpOyBpKyspIHtcXG4gICBkLnB1c2goe1xcbiAgICAgICB0aXRsZTogcGRmaChuYW1lc1tpXSwnVGV4dCcpLFxcbiAgICAgICB1cmw6IHVybHNbaV0sXFxuICAgICAgIGNvbF90eXBlOiAndGV4dF8zJ1xcbn0pXFxufVxcbn0gY2F0Y2ggKGVycikge307XFxuXFxudmFyIOeVquWPtyA9IHBkZmgoaHRtbCwgJ2JvZHkmJi5jb2RlJiZUZXh0JykucmVwbGFjZSgn55Wq5Y+3OiAnLCcnKTtcXG5cXG4gICAgICBkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxtaWRkbGU+PGZvbnQgY29sb3I9cmVkPuejgeWKm+WQmy7nroA8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3NvdT9ydWxlPeejgeWKm+WQmy7nroAmcD1meXBhZ2Umc2VhcmNoVGVybXM9XFxcIiArIOeVquWPtyxcXG4gICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiXFxuICAgICAgICB9KVxcblxcbmQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICB9KTtcXG5cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS90b29sJywge30pKS5ydWxlKTsvL+WklumDqOaQnOe0olxcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PHNtYWxsPjxmb250IGNvbG9yPVxcXCIjMUU5MEZGXFxcIj4gJyArIHBkZmgoaHRtbCwgJ2gxJiZUZXh0JykucmVwbGFjZSgn5YWN6LS5QVblnKjnur/nnIsnLCcnKSArICc8L2ZvbnQ+PC9zbWFsbD4nLFxcbiAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzhBMkJFMlxcXCI+ICcgKyBwYXJzZURvbUZvckh0bWwoaHRtbCwgJy5jb2RlJiZUZXh0JykgKydcXFxcdFxcXFx0XFxcXHRcXFxcdCcrIHBkZmgoaHRtbCwgJ2JvZHkmJi5kLWZsZXgubXQtMTpjb250YWlucyjml6XmnJ8pJiZUZXh0JykgKyAnXFxcXHRcXFxcdFxcXFx0XFxcXHQnICsgcGRmaChodG1sLCAnYm9keSYmLmQtZmxleC5tdC0xOmNvbnRhaW5zKOaXtumVvykmJlRleHQnKSArICc8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgdXJsOiBNWV9VUkwsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIlxcbn0pO1xcblxcbi8v57O75YiXXFxudHJ5IHtcXG5sZXQgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwoaHRtbCwgJ2JvZHkmJi5zZXJpZXMmJmEmJlRleHQnKTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcImN5YW5cXFwiPicgKyB0aXRsZSArJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgdXJsOiBwYXJzZURvbShodG1sLCAnLnNlcmllcyYmYSYmaHJlZicpICsgJz9wYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwieWpcXFwiKScsLy/pk77mjqUsXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgIGV4dHJhOntcXG4gICAgICAgcGFnZVRpdGxlOiB0aXRsZSxcXG4gICAgIH1cXG59KVxcbn1jYXRjaCAoZXJyKSB7XFxuICBjb25zb2xlLmxvZygnVVJM6Kej5p6Q5Ye6546w6ZSZ6K+v77yaJywgZXJyKTtcXG59O1xcblxcbmQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICB9KTtcXG5cXG4vL+exu+WIq1xcbnZhciBhcnRzID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLmdlbnJlJyk7XFxuZm9yICh2YXIgaSBpbiBhcnRzKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNEQjRGMDBcXFwiPicrcGFyc2VEb21Gb3JIdG1sKGFydHNbaV0sICdUZXh0JykrJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgIHVybDogcGFyc2VEb20oYXJ0c1tpXSwgJ2EmJmhyZWYnKSArICc/cGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcInlqXFxcIiknLC8v6ZO+5o6lXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLC8v57uE5Lu25qC35byPXFxuICAgIGV4dHJhOntcXG4gICAgICAgcGFnZVRpdGxlOiBwYXJzZURvbUZvckh0bWwoYXJ0c1tpXSwgJ1RleHQnKSxcXG4gICAgIH1cXG59KVxcbn07XFxuXFxuZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgIH0pO1xcblxcbmQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcInllbGxvd1xcXCI+55Wq5Y+3PC9mb250PjwvbWlkZGxlPjwvYj4nLFxcbiAgICAgICAgdXJsOiAnY29weTovLycgKyBwYXJzZURvbUZvckh0bWwoaHRtbCwgJy5jb2RlJiZUZXh0JykucmVwbGFjZSgn55Wq5Y+3OiAnLCcnKSwvL+WkjeWItueVquWPt1xcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJywvL+e7hOS7tuagt+W8j1xcbn0pXFxuXFxuLy/mvJTlkZhcXG52YXIgYWN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLmFjdHJlc3MnKTtcXG5mb3IgKHZhciBpIGluIGFjdCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjRkY0QjY2XFxcIj4nK3BhcnNlRG9tRm9ySHRtbChhY3RbaV0sICdUZXh0JykrJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgIHVybDogcGFyc2VEb20oYWN0W2ldLCAnYSYmaHJlZicpICsgJz9wYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwieWpcXFwiKScsLy/pk77mjqVcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsLy/nu4Tku7bmoLflvI9cXG4gICAgZXh0cmE6e1xcbiAgICAgICBwYWdlVGl0bGU6IHBhcnNlRG9tRm9ySHRtbChhY3RbaV0sICdUZXh0JyksXFxuICAgICB9XFxufSlcXG59XFxuXFxuLy/no4HlipvliJfooahcXG52YXIgY29udHMgPSBwZGZhKGh0bWwsICdib2R5JiZ0Ym9keSYmLmNvbCcpO1xcbmQucHVzaCh7XFxuICAgICAgIHRpdGxlOiAoZ2V0VmFyKCdzaHNvcnQnKSA9PSAnMScpID8gJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogI0ZGMDAwMFxcXCI+5o6S5bqP8J+RhuWFseaciScgKyBjb250cy5sZW5ndGggKyAn5p2h57q/6LevPC9zcGFuPjwvYj4nIDogJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogIzFhYWQxOVxcXCI+5o6S5bqP8J+Rh+WFseaciScgKyBjb250cy5sZW5ndGggKyAn5p2h57q/6LevPC9zcGFuPjwvYj4nLFxcbiAgICAgICAgdXJsOiBgQGxhenlSdWxlPS5qczpsZXQgY29uZiA9IGdldFZhcignc2hzb3J0Jyk7aWYoY29uZj09JzEnKXtwdXRWYXIoe2tleTonc2hzb3J0JywgdmFsdWU6JzAnfSk7fWVsc2V7cHV0VmFyKHtrZXk6J3Noc29ydCcsIHZhbHVlOicxJ30pfTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovL+WIh+aNouaOkuW6j+aIkOWKnydgLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICB9KVxcbiAgICAgICBcXG4gaWYgKGdldFZhcignc2hzb3J0JykgPT0gJzEnKSB7XFxuICAgIGZvciAodmFyIGogPSBjb250cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChjb250c1tqXSwgJ1RleHQnKS5yZXBsYWNlKCfopIfliLYnLCcnKS5yZXBsYWNlKC9eLSguKikvLCckMScpLnJlcGxhY2UoLyhcXFxcZCsp5Liq5paH5Lu2L2csJycpLnJlcGxhY2UoLy4qQC8sJycpLnJlcGxhY2UoL1xcXFxbLipcXFxcXS8sJycpLnNsaWNlKC0zNiksXFxuICAgICAgICAgICAgZGVzYzogcGRmaChjb250c1tqXSwgJy5kYXRlJiZUZXh0JyksXFxuICAgICAgICAgICAgcGljX3VybDogJ2h0dHBzOi8vaW1nLnZpbnVhLmNuL2ltYWdlcy9PY3Fwai5wbmcnLFxcbiAgICAgICAgICAgIHVybDogcGQoY29udHNbal0sICdhJiZocmVmJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICAnYXZhdGFyJ1xcbiAgICAgICAgfSk7XFxuICAgICB9IFxcbiAgfWVsc2Uge1xcbiAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb250cy5sZW5ndGg7IGorKyl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGNvbnRzW2pdLCAnVGV4dCcpLnJlcGxhY2UoJ+ikh+WIticsJycpLnJlcGxhY2UoL14tKC4qKS8sJyQxJykucmVwbGFjZSgvKFxcXFxkKynkuKrmlofku7YvZywnJykucmVwbGFjZSgvLipALywnJykucmVwbGFjZSgvXFxcXFsuKlxcXFxdLywnJykuc2xpY2UoLTM2KSxcXG4gICAgICAgICAgICBkZXNjOiBwZGZoKGNvbnRzW2pdLCAnLmRhdGUmJlRleHQnKSxcXG4gICAgICAgICAgICBwaWNfdXJsOiAnaHR0cHM6Ly9pbWcudmludWEuY24vaW1hZ2VzL09jcXBqLnBuZycsXFxuICAgICAgICAgICAgdXJsOiBwZChjb250c1tqXSwgJ2EmJmhyZWYnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogICdhdmF0YXInXFxuICAgICAgICB9KTtcXG4gICAgIH1cXG4gIH1cXG5cXG4vL+aOqOiNkOWIl+ihqFxcbnZhciBsYXp5RUogPSAkKFxcXCJcXFwiKS5ydWxlKCgpID0+IHtcXG4gICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvZXJqJywge30pKS5ydWxlKTtcXG59KTsgXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNGRjAwRkY7XFxcIj7lkIzlpbPkvJjkvZzlk4E8L3NwYW4+JyxcXG4gICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxufSk7XFxuXFxudHJ5e1xcbnZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLnZpZGVvLWxpc3QtaXRlbSwxOicpOy8v5YiX6KGoXFxubGlzdC5mb3JFYWNoKHZpZGVvID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAgcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnaDUmJlRleHQnKSArIHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJ3AmJnRpdGxlJyksLy/moIfpophcXG4gICAgICAgIGRlc2M6IHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJy50ZXh0LW11dGVkJiZUZXh0JykgKyBwYXJzZURvbUZvckh0bWwodmlkZW8sICcudmlkZW8tbGlzdC1pdGVtLXRhZy13cmFwcGVyJiZUZXh0JyksXFxuICAgICAgICBpbWc6IHBhcnNlRG9tKHZpZGVvLCAnaW1nOmVxKDEpJiZkYXRhLXNyYycpICsgXFxcIkBSZWZlcmVyPVxcXCIsLy/lm77niYdcXG4gICAgICAgIHVybDogcGFyc2VEb20odmlkZW8sICdhJiZocmVmJykgKyAnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJlalxcXCIpJywvL+mTvuaOpVxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8yJywvL+e7hOS7tuagt+W8j1xcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpbWc6IHBhcnNlRG9tKHZpZGVvLCAnaW1nOmVxKDEpJiZkYXRhLXNyYycpICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgcGFnZVRpdGxlOiBwYXJzZURvbUZvckh0bWwodmlkZW8sICdoNSYmVGV4dCcpICsgcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAncCYmdGl0bGUnKSwvL+agh+mimFxcbiAgICAgICAgfVxcbiAgfSk7XFxufSkgICBcXG59IGNhdGNoIChlcnIpIHtcXG4gIGNvbnNvbGUubG9nKCfmsqHmnInmjqjojZDliJfooagnLCBlcnIpO1xcbn07XFxuXFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNGRjAwRkY7XFxcIj7lkIzkuLvpopjkvZzlk4E8L3NwYW4+JyxcXG4gICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxufSk7XFxuXFxudHJ5e1xcbnZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLmxpc3QtdW5zdHlsZWQmJmxpJyk7Ly/liJfooahcXG5saXN0LmZvckVhY2godmlkZW8gPT4ge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICBwYXJzZURvbUZvckh0bWwodmlkZW8sICdoNSYmVGV4dCcpLC8v5qCH6aKYXFxuICAgICAgICBkZXNjOiAnJyxcXG4gICAgICAgIGltZzogcGFyc2VEb20odmlkZW8sICdpbWcmJmRhdGEtc3JjJykgKyBcXFwiQFJlZmVyZXI9XFxcIiwvL+WbvueJh1xcbiAgICAgICAgdXJsOiBwYXJzZURvbSh2aWRlbywgJ2EmJmhyZWYnKSArICdAcnVsZT1qczokLnJlcXVpcmUoXFxcImVqXFxcIiknLC8v6ZO+5o6lXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLC8v57uE5Lu25qC35byPXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGltZzogcGFyc2VEb20odmlkZW8sICdpbWcmJmRhdGEtc3JjJykgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJ2g1JiZUZXh0JyksLy/moIfpophcXG4gICAgICAgIH1cXG4gIH0pO1xcbn0pICAgXFxufSBjYXRjaCAoZXJyKSB7XFxuICBjb25zb2xlLmxvZygn5rKh5pyJ5o6o6I2Q5YiX6KGoJywgZXJyKTtcXG59O1xcblxcblxcblxcbnNldFJlc3VsdChkKVwifV0iLCJpY29uIjoiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFGd0FBQUJRQ0FZQUFBQ1VMUklqQUFBZWVVbEVRVlI0bk8xY2VYaFRkZForc3lmZDk3MkFVTnBDV1V1VlVoWUJGVmxFUUZFRXhCbG5CQjFFSDJBV2NRWm4wYy9QYndaUlo4WU5SSEJoRVVSd1YwU1dVbG9LcFJUb1NsdTY3Mm1icGt1U0pybjNmcy81NVFiU2ZRUGtqNzdQazZlUTNKdmN2UGZjOTd6bm5OOE5CakdJUVF4aUVJTVl4Q0FHTVFoQTRzakJwRW1UYmdkS0ZnTjRVaXFSekJDQURFRVF2Z053R01DVjIrRFlCb3piaFhBZkFLc2tFc2xUTW9sa3RONW9SRTFEQTlRcUZmemQzYUdReWNEeC9JOEFQZ2J3QlFETEwzV2dBNFhNY2YrZ29LQmIvZmxSQURiTHBOSVBwY0NpeW9ZRzN5S3RGdjZlbmxnUUd3c1B0UnJaNWVVb3JhdURYQ1lMYzFXcmw5S0pFUUF2QU9VQTZtLzFBUThVdjFTRXp3YXdSaTZWTG11MVdsRmNXd3V6MVlyb0VTT3crSzY3OEVoTURFSkRRNEdtSmlUbTVlR0g5SFFjdVhRSm1TVWxjTlZvRU9MbFJTZUE0M2grUDRCZEFINitWUWMrVU54S3d0VUFIcGRJSkUvS3BkSzRCb01CcGJXMWpNQ1pZOGZpa2NtVHNXVENCRWc4UFlHR0JxQ3hFVkFvQVBxL1dvMm1xaW9jdW5BQmg4NmZSM0pPRGxwYVd4SHE3UTEzSnllU20zT0NJTHdQWUE4QTg4MzhFZ1BGclNBOEZNQnZwUkxKcjZRU3liQ2F4a1pVNm5RSTl2Ykd2RW1Uc0dMS0ZFd1pQZHBHcmxZTG1FeUF6RUhwQkFIZ2VjRFpHZkQyQmd3R3hHZG00a0JLQ242NmVCSGx0YlVJOFBDQW41c2JlRUVvNEFWaEo0QVBBVlRkVk9iNmladEpPTDNac3pLcGREblA4K3F5K25vMEdvMklEQTNGa3NtVHNYTHlaTnd4ZkRqUTJnclUxUUVjQjBpbDNiOGpFUytYMjRoWEtGQmNYSXc5eWNrNG1KeU1LeVVsOEhCMlJyQ1hGeVFTU1JQSDh6c0F2QVBnNm8zOFVnUEZ6U0I4RG9EZnlXV3l4U2FMQmNWYUxUaEJ3T1NJQ0R3YUY0ZEhKMDJDdTcrL1RUSklPaVFTMjZNdm9LaW5oNGNINE80T2ZWVVY5cDQ3aC8xSlNUaC81UXBVU2lXRytmcENMcFdhT1o0blovTWVnTFJiVFc1bnVGR0VrejQvSnBGSW5wWkxwYkc2bGhhVTFOWEIwOWtaOTR3ZmoyVlRwbURCdUhHQWl3dFFYdyswdFBTWjZJTHFhcVJldFFYcjNWRlI4SE4zdjA2OGt4UGc0d1BvOVRpY2xvWjlTVWs0Y2ZreUtDSGY0ZWNISjZVU0ZvNzdDc0IvVTFOVGozWDFHYmZDTkF5VThHQlJuNSswNjNPRlRvZWh2cjZZUDJrU25vaUx3OFJSbzJ6RWtqNmJ6VzMxdVFkY0xpNUdTbDRlOXA0NmhlTTVPVzAyUHJCK1BlWkhSOE5acmJZOVFaS2tVZ0YrZm9ERndnai9LQ0VCUjFKVDBXdzBNdUpwV3l2SGZRL2dyZFRVMUtQdFAvMTJKbnc4Z05VeXFmUTN2Q0JveXVycW1ENlBHaktFNmZNVFU2WWdkT2hRV3dJa2ZTYnQ3VW1mUlNUbDVDQTVOeGZiZnZvSnVUVTEzVzRiN3VlSEgxNTZDY05Kb3V5Z3o2S1Q2dXZML3A3THlzS3VVNmZ3ZlVvS3RIbzlodmo0c0N2UHl2UHhnaUM4blpxYWVyQWYzNy9mNkN2aE13Q3NKZjlzNWpoUWtVSi9ZeU1pOEVoY0hKYkh4TUF0SU1DbXpYcDlyMlNqeFdUQzZleHNKT2JrWUg5aVlxY2tFN0dkUGIvMThjZXg4Y0VITzM5aklwNCttNlNHQ3FqY1hCYnhYeVFuTTJkRHhIdTV1RkRFbnhlQXJhbXBxWi9kVG9SVEl2eXpYQ2E3bXdncXJLbUJzMGFEMldQSFlsbGNIQlpQbkdqVFo0cG0wbWVLNW02SWRpVDVsY09IdTl6dXBTVkxNRFV5RXBtbHBmajk3dDBkWG50NStmS2V2NkdkZUM4dlppMkxDd3V4S3pFUiswK2ZSbEZWRmJPbnZxNnVGUEhrNWY4TFlIZlBiOXAvOUVRNFBmR1VSSUpuSUFBR3M1a2xxMGxoWVZnNmNTSml4NCszWGI0VWZUM29jNDFlei96em9lUmtmSmFjM09rMkZNbFB6NW1EcU5CUVRCczFpbW51RzE5LzNZSHN4Mkpqc1dQdDJ1djYzUnZZL1R3NUcwOVBsQmNYWTJkQ0F2WW5KQ0Mvb2dMQlBqN3dzeEZQRGJPM1JDOS9Td2wvV1M2VHZkUmliRVZGVFQzOHZEMWc1RnB4WjloSWZMNWxDMkEwQXJtNXR1anBRcC90enFJN2tpRktRMng0T09JaUk5czhQeEN5NlFRM20weHQ5UjBPeEpQTDhmUkViVmtaZGlRa1lBOFJYMTZPQUU5UDFqRGplUDZTU0R6WlNxSGJEK3NEdW1wZXZhcFN5amVYVmRhRHMzS1lQMmNLcWl1MGFEVlpVVnhmZzRzWDB2QlFkRFNnMFZ5WEVCRkVNaEg4eDQ4K3dvWlBQOFhueWNuSUtDdnI5b2lzWmpQdURBdERXR0RndGVjKy9QbG5yTnUxcTgxMmRBWHNYTGNPL2hTbDNZQWthKzMyN1ZqendRZW9iV2hBaUkvUDlYM3NBVUlGbDA0SEp4Y1hUSnM4R1k5T25BZ1BEdy9rVlZRZ283Z1lNcGtzd0YyaldTd0F5OFJQdW5BamlPOHN3bU1WY3RtWjR2SmErUHQ2WU50YmEzSFg1RWs0bjNnV2k1NzRKd1NKRk0wd0lpNHNISWRlZkpGNVhGUldvcWFsQmN1M2J1MWczeHp4N0gzM01ROU4xZURlaEFTOGMvUm9oOWZYekptRHl2cDZ6SDN0dFE1a2QzQWtuWURJZnVyZGR6dGNVVjBtV0h2RXU3a3huYWVlelllSmlmZzBQaDVaeGNWTVFnTTlQY0h6ZkE1L1hXcXNmV1phUkFmQ0pVQktpOGtjMDlCa1FPTCt2K0tPMkZGQStsVWdjaWd1bjcrQ2hTditGNjFtSzFwbEZrUUdCdUhyelp2aFM5RlRWc1pJM3gwZjMwWUc3SW5QcnNtT09KS1dobjhkUHR6dFNiSWo4ZVdYTzBoT1oraE1oZ2cvdnZnaTdxZmszaDNJeTFQeTkvVkZZM1UxZHA0K2pUM3g4VWd2S21LOW1pQXZMeUkrbnhlRWR3RzgzWisrZkh2Q28yVXlhV3I2bFZMODlma2wyUFR5YjRHTGVZQkNCbGc1SUNJVVYzUEw4T0RLLzBWVnRRNFNKd2tDM0QzdzdWLytnbUVoSVVCSkNVdWNKQ3VrbnlQOC9YdVYyRDVQU3NMbXZYdTc5TjI5SW11Z1pOdGhqM2dpM3NjSEJxMFdIeWNtNHVOVHA1QmVVQUF2VjFjRVU4UUxRaTR2Q0Z2RWlPKzExTFRYOE9kYUxkYnBDb1VjYi96aFViaHJGSUN4OWJydVZldmdGUmFFbFV1bUlmNTBPa3BMZFRCTHJkZ1hmd3B4RVJFSURnOW4vcHNLQzlKTUpUV2FlZ0Z5SmRUeCs3eVR4RW9WNVlOMzNkWGptOUJKVzcxOWU3LzN2d2I3ZDdWYW1jWXJsRXJjT1drU1Z0MTVKL3g4ZkhDMXVocVhpb3BvYTI5M0o2Y0hSWTNuQVp6dnpkdTNJVHc0S0doemRWM1RzTmh4dzdINjhYdUJodWEyNTA0bUJXcjFVUHQ3WXRXeVdVaTdkQlVabWFXUXFXVk1Ta1lIQnlPY3JHSlRrKzN5N0dXdmhLUmwwZXV2ZDNpZWRQZXBlKys5NmZ0M0NRZmk1VElaWXFLakdmR0IzdDY0VWwzTnBFWWlrZmk0T1RrdEVJQ0hLSVZRUjZLN3QyeExlRWp3M3l1MURSN3pabzdIUGZmSEFMcW1qcVFSNmZWTmtHaFVlSFRGUGFpc3FrZFNVZzZjWGRUWWR6b0IvazVPbUVnUlpURFlEcllIMGtsK0huL3JMZFNSMjNFQWFmK2ZseTd0a1JOcUJjeCs1WlVPejNkYmhYWUNTclk1NWVWd1VhczdYcGxFUEFVUUVTK1hJNFlpUGlZR1h0N2V5SzJzeE9XaUlraWxVbjlYaldZSkJJR0lid1Z3c2JQUGFVdDRjTkRmNm5UTm1ua3pKMkRLMURHTTJFNEpJOUliRFlEQVkvNnltVkJJSlBqNTJDVTRxMVU0bkhvT1Vvc0YwK1BpYkFkSi9aUnVmUHE4VjE3cG9OM2t0Zi8xeEJNOVNoTHQvOGpycjNjNFdiMGxtMGcra1o2T1QwNmVaSzdvL2FOSGNUQXhrY2tidFhlN0kxNmhVR0J5VEF4V1JFY3orZFFaRE5DM3RFQ1FTUHdsRXNraUFQY0RJSTNVdHFITzhUL0J3VUYvck5NMU9VMkxpY1RVcVZHZFIvaTFQYVdBMFF3MEdURnR5VFNFaC9yaXkrOVNvSkxLY1RUN01zcXJxdkhBOU9tMmdVRTdyMjdIcnVQSHNlL01tVGJQOWJhdzZlcGtrYlY4WmNXS0x2ZWpndWo3Q3hmdzNvOC9Zc25XcmRoOStqUk9PYmdrT25tVVM1S3pzekhQc1J2cENQb3VWRm5YMWtJVkdJaTdGaXhBbEpNVHZqbC9ubzMrVkxZVEZTcEtUQnZ2MitZVUNnSnFaWEtaZDFsbExXRHBXUTRZNmEwV0lMTUlTMWZNUm5DZ04xYXRlUk1XUFllUDQwK3lwUTU3Tm15QW1ncWF5a29iK1E2Z0tLUUs4Nlc5ZTVrMUpLLzk2c3FWUFpKTmtmbVhQWHM2dlRMK3VXcFZweVQzMUZaQUY2MkZEckQzNEducTVPeU1yQ3RYOE1IMjdUaVpsUVd6eFFLMVRBWkJFRWpiajRnVHB6Wm9id3MvYTJ3eEx2TjBjOGFwajE2QXlra0ZOQnU3SngyaUthSkxMWElJS2dvcjhmQ3Yvd1d5bGxKbkNVWUhCZVBBcGswWVFsM0U0dUlPcE50QnZXODJtNlNTdXh0MFZkaTB2eko2MjFhWUhSbUpGVE5tNE02Ukl6R09Xc3BkZ2F3aWdicVBUazdJeXNuQnRwTW44ZVhaczZpcHI0ZVhXZzEvTHk4b1ZLcmpqWTJOTHdPSWQzWjJKdUxaQ2JDalBlSExwRkxKWnhtNTVmaGt5eG9zZlhJdWtGRms4K0c5Z2RrS2pBaUMwV2pDeW1mZXdvL0hMa0xoS29XZmh3ZjJiZHlJbURGamJGNmREcUN2WXpVUjZ6NzRvRU9GYWllN1dxOW5tdHpad0tMOTlnL0Z4bUxTaUJFOVZxN3QyN3lYc3JQeFFYdzh2azFKUVZWZEhWUldLM3pjM1JFZUVZRXhZOGZDemMzdGdjckt5dSt1WExtQzh2SnlScmJVUVU3YkV5NlhTaVFWRmRvRzN6dEMvWkJ3OEcrQW9aWENxdDJXM1lDa0tNZ2JjSFBHK2orOGorMmYvQXkxcXdJS3BSVHZQL003TEprOUd5Z3RaVk9aM2c0bDdPaXNzQ0VaK05QaXhUMlMzRjNGMnluc1JOTWdRNlhDeGN4TWJJK1B4emZuemtIYjBNQ0lwaUxvN2xtek1IdjJiRFEyTnFLbHBRVldxM1d6UnFONXRiVzFsUTI1NmEvTW9ZdmFXUy9sV2JsYytuWnFSaEgrdS9seFBMUHBjZUJTTGlEdi9XZ01GZzd3ZEFGQ2ZiRjF5d0g4NDdWOWtEbkp3Y2s0L0dQWmNteDQ1QkdXY0poZjcrWElqWnBaVDNWUzJIUUZrb29GTVRHZGRpRzdSVHVpVXpJenNlUEVDWHlmbWdxdFRzZUk5blp6UTJ4Y0hCNVl1QkRUcGs2RndXREFnUU1IWURRYW9WS3AzaEFFNGZkRXNwT1RFNU1VZXRpanZOUDJyRVFpS1RJWVc0ZVdheHZ3OHllYkVETnpBcEJWRENoN1Z6a3ljRHlnVmdEaG9UajAyUW1zM2ZBZVdubGJEK1kzcys3QjIwOC9iY3YwTk92c3dmNVIwdk5mdmJySGp5U3B1SGZjT013YU83Wm5xV2dQTzlFMEUxVW9jRFlqQTl1T0g4ZVJDeGRRcjlkRGFiSEF4OE1EVTZkUHh3TVBQSUNZbUJpWXpXYlUxTlF3MlVoS1NtSlJybEtwZGdpQ3NKb0lKK3ZvNHVJQ2p1TmdJbnZjVFQrY2RReExLdXFnVU1pUThzTnI4UFgzQkFxckFFVWZTT2RGclI0OUJPY1NNN0JxOVp1c3Q4NnJCY3dhTXhaN04yeUFHL1VzcUgzYkM5SmZQbkNnMHc0amRTQ3ZUZkw3Q3Z1OGxTSmFvVUJTZWpwMm5qaUJIeTVjUUowb0hUNmVucGcyZlRvV0xGaHdqZWpLeWtwR05CVkM5RGg5K2pScWEydUo0SU5lWGw2UDBEWjZ2WjV0ZC9ueVpaU1NqUFl3Z0ZpdFVzcTNaK2FWSTJwa01PSy8raC9JcVhLc2FlaWJ2TmdkVEVRb3FzdHFzWExORzBoS3pZWEVXWUtJZ0FCOHNuRWp4b1NGMlpJcDBHTXlKVGR6cGJ3Y2JocE43L1c0TTlpSkZxK0VVK25wK1BEa1NkWW1hTkRyb2JaYTRldnR6WWltaUNadVNES3FxcXJhSkVLU0M1VktoVE5uenFDNnVob2FqZWJiOHZMeWhSVHhoWVdGVEc0YzBkT0k3UjJsUXI0Mk5hTVFLeFpPd2E1UFhnQ0txbTBGajdTUExvTWN6REIvUnVpdm5uc2JCNzVNaE5KTkRqY25EYmF2VzRkNVZKbjJNNW4yQ2ZhcFBra0hnQk1YTDJKWGZEeGJOa2VTb09RNCtIcDZZdnJkZHpPaW82T2pHZEVVcVdBMVQ5dGpJOEkxR2cwanZLbXBpVWpQZmZ2dHQrT29odXJzc0hwYXJ2dzl4L094Z1g0ZVlUL0VYNFlMTHlEdW9lbEFiVVA3YzlVenhCNE1TZEtTbGZkQXpuR0lqOCtDVmVCd0tEa0p6bElaSnNmRzJnanZwaDNRYjlCVlJySkZSWmhhalI5U1UvSGkzcjNZOHRWWFNNdkxZNzJmSUc5dnpKODNEK3VlZng2UExWdEdGbzlaT3lLU2lKWjBjZldSVmxkVVZNQmlzVUNuMDBsVFUxT3B3bFFBS0c2L2JXOEVlVEVFNUk4SkR3MTVZZXNCakFvUHdmekhaZ0dYQzN2dno2OGRtUnlvMDdPVzc2YS9yc0tRWWY1WS84SU9tRnV0MkxUN1U5YjZmSXVTSXkzb0lSZlR5L1p1dHlDaWFTcEZSRnNzK09ITUdYd1lIODhxeitibVppWWR0RWhvNXV6Wm1EZHZIc2FORzhmczNWVnhsVmQzUkxlSHFPbDZBQVp4U2ZZSUFOODQ5bE42ODQxYWVVRzQxMG10eUJnUzRDMWZ0ZkU5Skk4SXdzaXh3NEhjMHI0bFVRSmR6aVJKMmNWWThjUWNoTjhSeU5vQnBUVTZiUHZwQ0FvcksvSHArdlZ3Q3c0R3lzdjdUN3A5SlJaZHRVWWpEaVlrNEtOVHA1Q1VtUW1qd1FBMXh5RXNPQmd6WjgzQy9QbnpFUlVWeFNTbG9LQ0E3ZDVlT3JxQy9XVHdQTS8yc1Znc0ZOMTVBRXoyT3p1b0F3MGdFMzI0QTZLT0Y0UTBkMWVuRlEyTkJueDNMQTIvV2pJVlNtODNXODljMXNmTG53NlNrbWxWUFlMR2o4QkQ4eWNqNld3MktrdDFLR3pRNHB1VUZNeU1pb0lQcmE2bFJaOTlxVXdkaVpaSzJXRGlEM3Yyc0daVmZra0pGSzJ0R0JZVWhNV0xGK1BaZGV1d2FORWlLSlZLNWlJb3dmVWxvaUVTVGhhd3BLU0VTVXByYTZ2ODh1WEx4VmFyTlV2a2w4WndZd0EwVXFUMzVaYVRYSTduT1Y4dnQ5azVCUlU0ZHo0UEsxZmVZeU9DcXRHK0psR0oySFdyMGNFMXlCdS9lbXdXcmhaV0lmMVNDUm90UnJaUVo0U3ZIeUluVExEMTFudEtwa1EwT1piZ1lCWnRuNTQ2eGFyUzk0OGNRVUZwS1pSbU04SkNRL0h3MHFWNDdybm5XRUlrTzFkV1ZzWThjbCtKeG5VSmdWcXRSbTV1THZ2Y3hzWkdqZEZvdk1ka01tV1pUQ1lxZlpWaTF6QU1RRmxmNy9FNXhmRjhlS0NmeDlpRTg3blFWZGRqTHVsNWs5RTI4K3hQZjhRKzBGQXFzWGo1TEhBV0t4SVRzbUNWQ1BnaUpSbFNzd1hUS0ptU0ZIWFc1aVdpYWJrR1NaRFZ5anoweGoxN1dHVmFVbDRPRlJFOWRDZ2VYYllNYTlldXhkeTVjeGxSbEF3SFFqU0JtbFBrVVBMejgxa1pUMG0ycUtpSU9ScHZiKytvbXBxYXI4VnRMV0swcS9welU5VWhnUmNXQnZpNkJ4MCttZ29mdVF4M0xaNEthUFY5Tmk3WFFLUlRWOUxZaXBrUFQ4ZndFRjgyME9ETlBJNWR5VURHMVVMTWpZNkdrcXljZmMyaS9hNklvQ0FtQlR1UEhjUEczYnRaajcyc29vSWx3MUZoWVZpMmZEbVRqdnZ1dTQ5VmZFUTA5VGY2UXpSRXJTYVNYVjFkVVZkWGgzUG56aUVqSTRPUjdldnJpL1QwZE9iVlhWMWRYYlZhN1ZHcjFWb2pPaGFhQWtsNzh1RmR3VXNxbFdRWmpHYi8zS0lxZlB2aEh6Qm42UXdndmJCdlJWR0hieVBZRG1rVVZhYVplUEtaTjFGV3BZT2dFUkRtSDRCdGE5Zml6cWdvTm5HaEpXc3RXaTEySmlXeE5TNlhDd3RacThDSnJ0MndNTncvZHk3bXpKbkRiczZpZ3FTaG9ZRnBiWDlJaGtnMHlRY1JUZTRtSnljSGVYbDU3UGtoUTRhd2s1Nldsb2JzN0d4V3pwdk41b2EwdExURlBNOHJSSE5DSDJ3WnlQcncwWEtaTExPbXJoRzZaZ01TdnZnN3hrd0tCN0pMK3RaemFROTdaUm9lZ3JwcUhXdnpuajZURFkybkNsSUkrTWVLRlZnWUY0ZHZFaE94NC9oeFpGT0ZhamJEUlNwRlJHUWtJNXFpT1NBZ2dCRk56cU8vMFF4UlBtaC9JcHFTSXRuRnJLd3NSbnB3Y0REejRFVHloUXNYV0YvRm41YUdPRHRUT2IrdXZyNCtFVUNBdUhDSXROQTAwQVg1RHlrVjhpOEtTN1Z3ZGxiaDdQZXZ3ZHZISFNpczdMdGRiQStxVEVPcFk2ZkEybzN2NGJNdmsrQWY0TTdtaHY0K1BpaXBya1pyY3pPY3BWS01HajBhOHhjc1lHMVNQejgvcHFGVXJNZ0g0T1B0T2szUmFuY2hSQ3k5TjBtSHA2Y24wK3ZVMUZTbTMxVGUwMmRiclZaRGRuYjJlcDFPUjNkYWpCVHZxdVBFdTBTcWJzUXRKNzlYS3VXdlorYVdZK3pJWUJ6NzZoV29LRXdyNnZ0ZUdMVUh0WG5kbllBNzdzQ08vK3pGUy8vY2o1QmdIeFRTNUlqak1ISENCTXlkTjQ4UjdlWGx4Y2lnb2tYV2g3c3NPZ1BKQkxWV3lYMlFIaFBSUkNwRmJtQmdJTFJhTFl0b0dqTFF0dlRaOUpwZXI3K1lrNVB6UjZQUmVGVXNlcXdpMlhiQ0w5NkFVZzVieldicmlLaVJ3YjlMelNyQzhxZGV4Nkg5THdFK1Zsc3AzMWVQN2dqYWwzVGRvRWQrVVRXVUtpVktTMG9SRlJtSnBVdVhZc2FNR1d3QkppVkMwbE9LNklHUVRlU1JKNmVvMXVsMHVIVHBFbnRmd3ZEaHc1bE9VMU9La2lSSmlydTdPeU9hSktlMHRIVEgxYXRYM3hCRk1Vd3NmSGlSZExWNEcyUDlqYnlMN1N1NVRQYmcrWXhDckZrMkUrOXUyd0NVYW0zdVl5Q2toNGZnejMvYWpuOXQveDdlTGdJbVQ0N0ZsaTFiV0FSU3NVS05wUnNSMGZiZU5aRktObytpbDk0N0pDU0U2VDlGT1owQWltN2F6bjRGR0F5R29vS0NnbGZxNit1L0Z5ZjFycUlqc1VlMlREd0pkQmVkK1liZU5paVJJQVdReEZCM2NmUGFSWGg1NnpOQWJwbHRzdC9Yd29oOC9hZ2hPUEw1S1R6NHpML2g3aXhnVkhnNHRtM2Z6bXdkSlNnaWFTQndUSWhXcTVWcE1oRkxkbytrZzRnbDhpOWV2TWcwbk93Z1JUUmRCWFNTcTZxcVBpb29LUGczeDNGMURoSmlGU09iRXcrTkNwOXNBTlR4dStFL2J2Q1pWQ3A1eE5mTHpldmdqeW53a2dDVEYwK3pyVy9oeElsS2IwQUp5OHNWemZXTldQYjhPekFhbXRrTkFXKzgrU2I3d3FTckF5RmJYTWJBaUNieWlNeVVsQlJtOVloVXNua1V5UWtKQ1RoNzlpeVREMHFTOUJwRnRzRmd5TXJOemQxWVhsNytnU0FJemtTZEdOVjJ6YmFLVWEwUWI4eTk5aU1NTjBMREhkSEU4OElNaFVLV05Ub3MyR1BEcTN1aGNsSmp6ZnFIYlNNNnZwZWswOG54OThKLy8vWXhzdlBMNGVjbXhabzFUek1kSlZMNjZ6NGNLMFI2RDBxeUpCMUVPRDAzY3VSSU5yVTVUbll6TzV0ZFNaUWo2Q29nK2VCNW5pc3FLbnFycEtUa1EwRVFtZ0ZFaU9RYVJhTHRtaTBSdVMxb3YvTHFSaE5PcUNUU25UWEtzeEhEQWpUUC9tVW5OQm9WVmozOVFPOUlaOUh0aHZxc0luejZUUkkwQ2c0eE1aT3hjT0ZDTmtIcEQ5bDJvaWs2S2FKSmppZ1oydCtQVGlSRnNUMGhrbmUzSjBTNmt1aFJXMXY3VTBsSnlSdk56YzJwQUlZQThCVVRJK2NnSVp6b3R3bUZuZjI4eU0wZ25KQnU1Zmhacmk3cU0yRkQvU1dyLzdnTmNvVU15Mzh6cjJmU2lSdy9keHplZndJRkpUWHdjM2ZDb3NXTG1RVFFuTEF2Q2RKT05Fa0JSU2pKQkdreXRXRHBOYXBDU2J0Sm8ybnVTTnBOTXVQajQzTXRxbHRhV3ZLdlhyMzZaazFOelpmMFZsVHdpZDdhNEVDMC9hOWM3SnZRQUxPNXMyTzZXWVFUemxvNS9oNTNONmZqUTRPODhldjE3ektIdC9LM0l1a2tHNTBsVWlLMDJZVDQxRnlZVzQySWpMaVRqYmxJdDN0TGRudWlTU2JJWVJEUlJEQlZpQVNTRXlLYXBJVzJKYUloWGdsbXM5bFlYRnhNOHJGYkVBU0sxR0ZpOUJyczliQUQwWUxJWmJOSWRwZDNSdHhNd2drbnJGWnVqcWU3eTA4U1NQRGsrbmRnTVZ2dzY5OHRBcTVRU2Q1Snk5VkpqWmFLT2hiZFNybUF5RkdSckRGRXZyaW5vVUI3NmFDSUpVSkpPcWd6U0VTVGhKQ2NaR1ptTWx0SjIzbDdlN045cVZxa0s2bXFxbXAzU1VuSmRwUEpsQzFhdlRBeEtWcTZrWkJxOGRFdGJqYmhoS05XanJ2UHc4UDU2SEFwOFBTZnRzTmdOR1B0aG9lQmdrcWd4ZGgyTVpCS2dZcmlSdFRvbXRueTU0REFRT2FUdSt1RjJGMkhQUm1TZEJESjlwVlBaUEZJaHluQ2llaGkyMTFxekhsQW5FblNRNmZUblM0cksvdVBUcWM3Q1lCZUhDVVNiZXlFYUVGMGVhVGpOVjFKU0h2Y0NzSUpQMXV0M0d3UFY2ZGpZY1A4SmM5djNvbHFiUVArOFQrL0FTcnJnTnJHNjIwQXFRUW1rd1VXS3dlWlRBb25qVk9ieFpDT3NIZndpR2phaHBLaG5XaTdkQkN4NUsrSmFIcU5yaElQOFJaQzJwZWl1cm01T2Ird3NQQS9WVlZWWDRwRWhvdHV3K0JBZFB1b2xvaEpzVVo4clZlNFZZU0R5UXZIVDNIUnFMOGJFeEhpL2VxL0Q2R3FWbzl0YjY0Rk5DcWd0TWJXOE9JRmFOUktLT1V5NksxV1Z2bkpyaThCdmtZK0VVVzZTMUpCQk5PREp1ZUVRUEYrVHlLWTdCM1pQdHFQbklkOUpFYmFiaktaYWdvS0N0NnBxS2o0bk9mNVdsR25GZTNjQjk5T3E2Vml4TmVLazV3KzRWWVNUampMOGZ3a3BWeCtkT0xvb1NNLzJuY0N4WVZWK0dUYkJ2aU5IZ3JrbEFJR0U0WUVlQ0RBeHczRnhhWE1WVkJVMnF0Q0lwa2lrMVkxa1VRUW1TUWhSQ0JGTkxWUVNhUEpyNWVKTitSU0RuQWt1clcxdGFHa3BHUlhSVVhGSHJQWlhDamFQSHRuejlpSis3QVRiUldKN3ZldnlmMFNQNk9uRjRCOUVvbms3cUFBejVEVTlDSWMvaVlaWXlOQ01KUnVjOUUzUStibmlVc1hyK0xNcFVJWTliV1lHQjJOc1dQSHNpRUNPUTRpMDU0TUtlbFJSTk1KSWRkQkMzTElrVkRYa0lnbWd1a0VVU0xsZWQ1Y1dWbTVMUzh2YjFOZFhkMGhqdU0wWWxLRVF4dlYydTZ2VlB5ckZ4dFFmWTVxUi94U3YxdEkycmlENTRYUUlIL1BhRzI5SHJ2MkhvZXAyWVJaZDQ4SFBBTVFxdUt3KzlzVVdNeEdsSmFXWU5pd1lXeDhSV1FTOFpUd3lNYlJ2K2s1SXRwZUhaSjAyUHNkUkRUSGNjM1YxZFc3OHZQelg5QnF0Wjl4SENjVm8xcnFVSkszSjFvaVJuYVRxTlA2dm1oMVYvaWxmeWp5YTQ3bm16emNuZThuM2Y3cXUyU2NPSmVORVFFdWlKbXpFRjZ5Rmh6OE1RMm01bnJXNktmU215WTVKQzNVa2oxLy9qenJnWkIrMDNNVTBlUTJLS0pKZWppT2E2bXFxdHFabjUvL1o2MVd1OTlLbWRTbTAvSjJ2US9Pb2Vra0ZZbHVGc3R5M1VCdTlXNlBYNXB3d2htZUY3NVRLT1NUUWdLOWdxN2tsV1Bmd1FSVWxwWGkxeXRtZzIrMUlyZXdCb2FXSmxacDBpU0hWcXJhSzBPU0RQdFVoaElwL2Q5c05wZFZWbGJ1eU0vUGY2bTJ0dmFBMVdybFJlbFFPVWhIWjBUekRoR3R1eGsvdVhxNy9kanYvOGxrMGhjTXhsWVVGbGNqUEN3RXNlTkhJRGt0RDFLWmxEa1drZ3k3UTZHb3BnZkpCNkdwcVNsTnE5VWVxcW1wK2NGcXRSYUxLNSs4SFFvV3JsMHlsSWdQc3hqUmVqRnAzalRjVm9SVDRsTW9GQk9rVXVrbXE4VzhyTVZvaHNGa2hxK1hLOTBTQ2dFMmEyaGZrMDMvTnBsTXRYcTkvcVJXcS8xV3A5T2RFVmM0MGVEV1dTVGEyczUxQ0E2SjBDUkdkT090K2tYUDI0cHcreXlSeU5UcGRCT1ZTdVhqQUI0UUJDR2NUZ1pGTXBGc05Cb0xqVVpqZGtORHcybWRUcGRvTnB1THhPOFM0TkJBc2pwNGFEc0VVYnViUmFKYmJrUWk3QXR1TzhKSktraVBxVVZLQ1ZBc2RLTGtjdm1RcHFhbXdMS3lNcUdwcVNsWEVJUW1NU3JkeEdoMm5MWUlEZzBtaXhqSkJwSGc1aHVaQlB1S1cxMzQ5QmVaY3JrOGt4SW1uUWlSNEFCeGZzaUprc0E3SkVGN0FXTnkrSHRMSTNrUWd4akVJQVl4aUVFTVloQ0Q2QW9BL2gvUnN4MVNZVEdIbGdBQUFBQkpSVTVFcmtKZ2dnPT0iLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment