Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥管理解析@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlBhcnNlX0RuLmh0bWxcIixcInBhdGhcIjpcIlBhcnNlX0RuLmh0bWxcIixcInJ1bGVcIjpcIjwhRE9DVFlQRSBodG1sPlxcbjxodG1sPlxcbjxoZWFkPlxcbiAgICA8bWV0YSBjaGFyc2V0PVxcXCJ1dGYtOFxcXCI+XFxuICAgIDxtZXRhIG5hbWU9XFxcInZpZXdwb3J0XFxcIiBjb250ZW50PVxcXCJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xLG1pbmltdW0tc2NhbGU9MSxtYXhpbXVtLXNjYWxlPTEsdXNlci1zY2FsYWJsZT1ub1xcXCIgLz5cXG4gICAgPHNjcmlwdCBzcmM9XFxcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vdnVlQDIuNS4xNi9kaXN0L3Z1ZS5taW4uanNcXFwiPjwvc2NyaXB0PlxcbiAgICA8c2NyaXB0IHNyYz1cXFwiaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTIuMS40Lm1pbi5qc1xcXCI+PC9zY3JpcHQ+XFxuICAgIDwhLS1cXG4gICAgPHNjcmlwdCBzcmM9XFxcImh0dHA6Ly9hcHBzLmJkaW1nLmNvbS9saWJzL2pxdWVyeS8yLjEuNC9qcXVlcnkubWluLmpzXFxcIj48L3NjcmlwdD5cXG4gICAgPHNjcmlwdCBzcmM9XFxcImh0dHA6Ly9hcHBzLmJkaW1nLmNvbS9saWJzL3Z1ZS8xLjAuMTQvdnVlLmpzXFxcIj48L3NjcmlwdD5cXG4gICAgLS0+XFxuICAgIDx0aXRsZT5QYXJzZV9EbjwvdGl0bGU+XFxuICAgIDxzdHlsZSB0eXBlPXRleHQvY3NzPlxcbiAgICAgICAgaHRtbCwgYm9keSB7XFxuICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICB9XFxuICAgICAgICBib2R5IHtcXG4gICAgICAgICAgICBtYXJnaW46IDAgNXB4IDAgNXB4O1xcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMHB4IDAgMHB4O1xcbiAgICAgICAgICAgIC8vYmFja2dyb3VuZDogI0Y5RjBEQTtcXG4gICAgICAgICAgICBmb250LXdlaWdodDogMDtcXG4gICAgICAgICAgICBmb250LWZhbWlseTogXFxcIk1pY3Jvc29mdCBZYUhlaVxcXCIsXFxcIuWui+S9k1xcXCIsXFxcIlNlZ29lIFVJXFxcIiwgXFxcIkx1Y2lkYSBHcmFuZGVcXFwiLCBIZWx2ZXRpY2EsIEFyaWFsLHNhbnMtc2VyaWYsIEZyZWVTYW5zLCBBcmltbztcXG4gICAgICAgIH1cXG4gICAgICAgICNkaXYye1xcbiAgICAgICAgICAgbWFyZ2luLXRvcDozNXB4O1xcbiAgICAgICAgfVxcbiAgICAgICAgLyrovpPlhaXmoYbniLblhYPntKAqL1xcbiAgICAgICAgZGl2LmJveCB7XFxuICAgICAgICAgICAgaGVpZ2h0OiA1M3B4O1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q6L6T5YWl5qGG5bC65a+4Ki9cXG4gICAgICAgIGZvcm0ge1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICAgICAgICB3aWR0aDogOTIlO1xcbiAgICAgICAgfVxcbiAgICAgICAgaW5wdXQsIGxhYmVsLCAubGllYiBidXR0b24ge1xcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcXG4gICAgICAgICAgICBvdXRsaW5lOiBub25lO1xcbiAgICAgICAgfVxcbiAgICAgICAgLyrlrZfkvZPkvY3nva4qL1xcbiAgICAgICAgaW5wdXQge1xcbiAgICAgICAgICAgIHdpZHRoOiA3NyU7XFxuICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNjZweDtcXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4O1xcbiAgICAgICAgfVxcbiAgICAgICAgbGFiZWwge1xcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0M3B4O1xcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXG4gICAgICAgICAgICB3aWR0aDogNjBweDtcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgfVxcbiAgICAgICAgLyrlsI/moYYqL1xcbiAgICAgICAgLmJhciBsYWJlbCB7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwNkI2QztcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1NTUgNTU1cHggNTU1cHggNTU1O1xcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcXG4gICAgICAgICAgICBjb2xvcjogI0Y5RjBEQTtcXG4gICAgICAgICAgICB0b3A6IDA7XFxuICAgICAgICAgICAgbGVmdDogM3B4O1xcbiAgICAgICAgfVxcbiAgICAgICAgLyrovpPlhaXmoYbmoLflvI8qL1xcbiAgICAgICAgLmJhciBpbnB1dCB7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y5RjBEQTtcXG4gICAgICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAjRDA2QjZDO1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q5YiX6KGoKi9cXG4gICAgICAgIC5saWViIGJ1dHRvbiB7XFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6NDBweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgd2lkdGg6IDI3cHg7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q5YiX6KGoKi9cXG4gICAgICAgIC5saWViIGJ1dHRvbntcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwNkI2QztcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxuICAgICAgICAgICAgY29sb3I6ICNGOUYwREE7XFxuICAgICAgICAgICAgdG9wOiAwO1xcbiAgICAgICAgICAgIHJpZ2h0OiAwcHg7XFxuICAgICAgICB9XFxuICAgICAgICAvKuWktOWDjyovXFxuICAgICAgICAucm91bmRfaWNvbntcXG4gICAgICAgICAgICB3aWR0aDogNDBweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLmp4LXVsLCAuY2otdWwge1xcbiAgICAgICAgICAgIHotaW5kZXg6IDk5OTtcXG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgICAgICAgICAgd2lkdGg6IDc3JTtcXG4gICAgICAgICAgIC8vIGxlZnQ6IDEwJTtcXG4gICAgICAgIH1cXG4gICAgICAgIC5qeC11bCwgLmNqLXVsIHtcXG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xcbiAgICAgICAgfVxcbiAgICAgICAgLmp4LXVsIHtcXG4gICAgICAgICAgICB0b3A6IDMlO1xcbiAgICAgICAgfVxcbiAgICAgICAgLmNqLXVsIHtcXG4gICAgICAgICAgICB0b3A6IDMwJTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxpIHtcXG4gICAgICAgICAgICBoZWlnaHQ6IDM1cHg7XFxuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzAxYmZkYTtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpO1xcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMzVweDtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gICAgICAgIH1cXG4gICAgICAgIGxpIHtcXG4gICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGk6aG92ZXIge1xcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgMTMxLCAxMjAsIDAuOSk7XFxuICAgICAgICB9XFxuICAgICAgICBsaVtjaGVjaz1cXFwidHJ1ZVxcXCJdIHtcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgMCwgMCwgMC45KTtcXG4gICAgICAgIH1cXG5cXG4gICAgPC9zdHlsZT5cXG48L2hlYWQ+XFxuXFxuPGJvZHk+XFxuICAgIDxkaXYgY2xhc3M9XFxcImZ1bmdcXFwiPlxcbiAgICAgICAgPGEgc3R5bGU9XFxcImZsb2F0OmxlZnQ7XFxcIj5cXG4gICAgICAgICAgICA8YnV0dG9uICBzdHlsZT1cXFwiYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAjYzU0NjRhO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICNGOUYwREE7XFxcIiBvbmNsaWNrPVxcXCJjYW5jZWwoKTtcXFwiPuWFsyDpl608L2J1dHRvbj5cXG4gICAgICAgIDwvYT5cXG4gICAgICAgIDxhIHN0eWxlPVxcXCJmbG9hdDpyaWdodFxcXCI+XFxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cXFwiYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAjMDY4MDA2O3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICNGOUYwREE7XFxcIm9uY2xpY2s9XFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+W8gCcpO1xcXCI+5L+dIOWtmDwvYnV0dG9uPiBcXG4gICAgICAgIDwvYT5cXG4gICAgPC9kaXY+XFxuICAgIDxicj5cXG4gICAgPGRpdiBpZD1cXFwiZGl2MlxcXCI+PC9kaXY+XFxuICAgIDxkaXY+XFxuICAgICAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6bGVmdDttYXJnaW4tdG9wOjVweDtcXFwiIG9uY2xpY2s9XFxcIm9wZW5EblBhZ2UoKVxcXCI+XFxuICAgICAgICAgICAgPGltZyBzcmM9XFxcImh0dHBzOi8vczMuYXgxeC5jb20vMjAyMS8wMi8yMi95N3diOU8uanBnXFxcIiBjbGFzcz1cXFwicm91bmRfaWNvblxcXCIgIGFsdD1cXFwiXFxcIj5cXG4gICAgICAgIDwvYT5cXG4gICAgICAgIDxzcGFuIHN0eWxlPVxcXCJsaW5lLWhlaWdodDo2MHB4O2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiBncmV5O1xcXCI+Jm5ic3A7Jm5ic3A75patJm5ic3A75b+1PC9zcGFuPlxcbiAgICAgICAgPGEgc3R5bGU9XFxcImZsb2F0OnJpZ2h0O21hcmdpbi10b3A6NXB4O1xcXCI+XFxuICAgICAgICAgICAgPGJ1dHRvbiAgc3R5bGU9XFxcImJvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogIzA1QkZDNTt3aWR0aDogMTg1cHg7aGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogI0Y5RjBEQTtcXFwiIG9uY2xpY2s9XFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+WFsycpO1xcXCI+5L+d5a2Y6K6+572u5bm25YWz6Zet55WM6Z2iPC9idXR0b24+XFxuICAgICAgICA8L2E+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJ6ai1kaXZcXFwiPlxcbiAgICAgICAgPHVsIGNsYXNzPVxcXCJqeC11bFxcXCIgc3R5bGU9XFxcImhlaWdodDo0NDRweDtvdmVyZmxvdy15OmF1dG87XFxcIj5cXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcIm15Q2hvaWNlXFxcIiBzdHlsZT1cXFwiei1pbmRleDo5OTk5O3Bvc2l0aW9uOiBmaXhlZDt3aWR0aDo3Ni41JTtjb2xvcjpyZWQ7XFxcIj48L2xpPlxcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cXFwidXNlbGVzc1xcXCI+PC9saT5cXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcInhsTGlzdFxcXCIgdi1mb3I9XFxcIml0ZW0gaW4ganhEYXRhXFxcIj57e2l0ZW19fTwvbGk+XFxuICAgICAgICA8L3VsPlxcbiAgICAgICAgPHVsIGNsYXNzPVxcXCJjai11bFxcXCI+XFxuICAgICAgICAgICAgPGxpIHN0eWxlPVxcXCJiYWNrZ3JvdW5kOmdyZXk7XFxcIj7or7fpgInmi6nmj5Lku7Y8L2xpPlxcbiAgICAgICAgICAgIDxsaSB2LWZvcj1cXFwiaXRlbSBpbiBjakRhdGFcXFwiPnt7aXRlbX19PC9saT5cXG4gICAgICAgIDwvdWw+XFxuICAgIDwvZGl2PlxcbjwvYm9keT5cXG48c2NyaXB0PlxcbiAgICAvL2V2YWwoZnlfYnJpZGdlX2FwcC5mZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9qcXVlcnkwMjE0LmpzXFxcIikpO1xcbiAgICAvL2V2YWwoZnlfYnJpZGdlX2FwcC5mZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS92dWUwMTAxNC5qc1xcXCIpKTtcXG4gICAgZXZhbChmeV9icmlkZ2VfYXBwLmdldEludGVybmFsSnMoKSk7XFxuICAgIFxcbiAgICB2YXIgc2V0dGluZ3MgPSB7XFxuICAgICAgICBxeTogJ3l1bjE3MTcnLFxcbiAgICAgICAgeWs6ICd5dW4xNzE3JyxcXG4gICAgICAgIHR4OiAneXVuMTcxNycsXFxuICAgICAgICBtZzogJ3l1bjE3MTcnLFxcbiAgICAgICAgYmw6ICd5dW4xNzE3JyxcXG4gICAgICAgIG90aDogJ3l1bjE3MTcnLFxcbiAgICAgICAgcWp1OiAn6buY6K6kJyxcXG4gICAgICAgIGNqOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcydcXG4gICAgfTtcXG4gICAgXFxuICAgIHZhciBvbGRSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCI7XFxuICAgIHZhciBteVNldCA9IGZ5X2JyaWRnZV9hcHAuZmV0Y2gob2xkUm91dGUpO1xcbiAgICBcXG4gICAgdmFyIG5ld1JvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uXFxcIjtcXG4gICAgdmFyIG5ld0NvbmZpZyA9IGZ5X2JyaWRnZV9hcHAuZmV0Y2gobmV3Um91dGUpO1xcbiAgICB2YXIgbXlTZWxlY3QgPSBbXTtcXG4gICAgdHJ5e1xcbiAgICAgICAgZXZhbChcXFwibmV3Q29uZmlnID1cXFwiICsgbmV3Q29uZmlnICsgXFxcIjtcXFwiKTtcXG4gICAgICAgIHNldHRpbmdzID0gbmV3Q29uZmlnLnNldHRpbmdzLnFqdSA9PSB1bmRlZmluZWQgPyBzZXR0aW5ncyA6IG5ld0NvbmZpZy5zZXR0aW5ncztcXG4gICAgICAgIHZhciB5Y1RpdGxlID0gWydkZWZhdWx0UGFyc2UnLCAnbWFvc3MnLCAnQ2l0eUlQJywgJ2NhY2hlTTN1OCcsICdwY1VBJywgJ3BhcnNlTGMnLCAnZ3BhcnNlJywgJ25wYXJzZSddO1xcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG5ld0NvbmZpZy50aXRsZS5sZW5ndGg7IGkrKyl7XFxuICAgICAgICAgICAgdmFyIFRpdGxlcyA9IG5ld0NvbmZpZy50aXRsZVtpXTtcXG4gICAgICAgICAgICBpZih5Y1RpdGxlLmluY2x1ZGVzKFRpdGxlcykgPT0gZmFsc2Upe1xcbiAgICAgICAgICAgICAgICBteVNlbGVjdC5wdXNoKFRpdGxlcyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9Y2F0Y2goZSl7fVxcbiAgICB2YXIgc2ZSZWZyZXNoID0gc2V0dGluZ3MuY2o7XFxuICAgIGZ1bmN0aW9uIERpZChpZCl7XFxuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xcbiAgICB9XFxuICAgIFxcbiAgICBpZihteVNldCA9PSAnJyl7XFxuICAgICAgICBEaWQoXFxcImRpdjJcXFwiKS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyQmVnaW4nLCdcXFxcXFxuPGg0PuaPkOekuu+8mjxicj7ikaDms6jmhI/mj5Lku7bpgInpobnvvIzmsqHmnInmiYvliqjlr7zlhaXmj5Lku7bnmoTor53kuI3nlKjliqjlroPjgILlpoLorr7nva7kuI3lvZPkvJrlr7zoh7Top4TliJnml6Dms5Xkvb/nlKjvvIw8YnI+6Kej5Yaz5Yqe5rOV77ya5bCP56iL5bqP6aaW6aG154K55Ye75oGi5aSN6buY6K6k5o+S5Lu277ybPGJyPuKRoeWFqOWxgOiuvue9ruWmguaenOmAieaLqeS6humdnum7mOiupOmCo+S5iOWFqOmDqOeahOino+aekOS8muS9v+eUqOi/meS4gOiuvue9ru+8jOS4jeaDs+i/meagt+eahOivneivt+Whq+WFpem7mOiupO+8mzxicj7ikaLnu7/oibLkv53lrZjmjInpkq7ku4Xku4Xkv53lrZjphY3nva7kuI3kvJrlhbPpl63orr7nva7pobXpnaLvvIzphY3nva7lkI7mg7Pkv53lrZjlubblhbPpl63orr7nva7pobXpnaLnmoTor53or7fngrnok53oibLmjInpkq7vvJs8YnI+4pGj6ZiF6K+75a6M5o+Q56S654K55YWz6Zet5Yqg6L295a6M5pW06K6+572u6aG16Z2i77yM5aaC5Ye66Zeu6aKY5peg5rOV6Ieq6KGM6Kej5Yaz54K55Zu+54mH6L+b5YWl6K665Z2b5ZCR5oiR5Y+N6aaI44CCPGJyPjwvaDQ+Jyk7XFxuICAgIH1cXG4gICAgXFxuICAgIHZhciBib3hEYXRhID0gW1xcbiAgICAgICAge1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5aWHIOWlh1xcXCIsXFxuICAgICAgICAgICAgaWQ6IFxcXCJxeVxcXCIsXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLnF5LFxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi6YW3IOmFt1xcXCIsXFxuICAgICAgICAgICAgaWQ6IFxcXCJ5a1xcXCIsXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLnlrLFxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi6IW+IOiFvlxcXCIsXFxuICAgICAgICAgICAgaWQ6IFxcXCJ0eFxcXCIsXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLnR4LFxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5p6cIOaenFxcXCIsXFxuICAgICAgICAgICAgaWQ6IFxcXCJtZ1xcXCIsXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLm1nLFxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5ZOpIOWTqVxcXCIsXFxuICAgICAgICAgICAgaWQ6IFxcXCJibFxcXCIsXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLmJsLFxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5YW2IOS7llxcXCIsXFxuICAgICAgICAgICAgaWQ6IFxcXCJvdGhcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5vdGgsXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLlhagg5bGAXFxcIixcXG4gICAgICAgICAgICBpZDogXFxcInFqdVxcXCIsXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLnFqdSxcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuaPkiDku7ZcXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwiY2pcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5jaixcXG4gICAgICAgIH1cXG4gICAgXTtcXG5cXG4gICAgdmFyIGlucHV0Qm94ID0gXFxcIlxcXCI7XFxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBib3hEYXRhLmxlbmd0aDsgaSsrKXtcXG4gICAgICAgIGxldCBiID0gYm94RGF0YVtpXTtcXG4gICAgICAgIGlucHV0Qm94ICs9ICc8ZGl2IGNsYXNzPVxcXCJib3ggYmFyXFxcIj5cXFxcXFxuICAgICAgICAgICAgPGZvcm0+XFxcXFxcbiAgICAgICAgICAgICAgICA8bGFiZWwgdHlwZT1cXFwic3VibWl0XFxcIj4nICsgYi50aXRsZSArICc8L2xhYmVsPlxcXFxcXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcInRleHRcXFwiIHBsYWNlaG9sZGVyPVxcXCLovpPlhaXop6PmnpDlkI3miJbogIVVUkwuLi4uLi5cXFwiIHZhbHVlPVxcXCInICsgYi52YWx1ZSArICdcXFwiIGlkPVxcXCInICsgYi5pZCArICdcXFwiPlxcXFxcXG4gICAgICAgICAgICA8L2Zvcm0+XFxcXFxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImxpZWJcXFwiPlxcXFxcXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cXFwiJyArIGIuaWQgKyAnU2VsZWN0XFxcIj7imLA8L2J1dHRvbj5cXFxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXFxcbiAgICAgICAgPC9kaXY+JztcXG4gICAgfVxcbiAgICBEaWQoXFxcImRpdjJcXFwiKS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyZW5kJywgaW5wdXRCb3gpO1xcbiAgICBEaWQoXFxcImNqXFxcIikucGxhY2Vob2xkZXIgPSBcXFwi6L6T5YWl5o+S5Lu25Zyw5Z2ALi4uLi4uXFxcIjtcXG4gICAgRGlkKFxcXCJxanVcXFwiKS5wbGFjZWhvbGRlciA9IFxcXCLmraTpobnlu7rorq7nlZnnqbrmiJbogIXloavpu5jorqTkuKTkuKrlrZdcXFwiO1xcbiAgICBcXG4gICAgbmV3IFZ1ZSh7XFxuICAgICAgICBlbDogXFxcIi56ai1kaXZcXFwiLFxcbiAgICAgICAgZGF0YToge1xcbiAgICAgICAgICAgIGp4RGF0YTogbXlTZWxlY3QsXFxuICAgICAgICAgICAgY2pEYXRhOiBbXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanNcXFwiLCBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2pzL3NyY2F1dG8uanNcXFwiLCBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9qcy9QYXJzZS1WMl9Ebi5qc1xcXCJdXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBsZW4gPSAkKCcuangtdWwnKS5jaGlsZHJlbignbGknKS5sZW5ndGg7XFxuICAgICAgICB2YXIgbGVuMiA9ICQoJy5jai11bCcpLmNoaWxkcmVuKCdsaScpLmxlbmd0aDtcXG4gICAgICAgICQoJy5saWViIGJ1dHRvbicpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcXG4gICAgICAgICAgICBpZigkKCcubGllYiBidXR0b24nKS50ZXh0KCkuaW5jbHVkZXMoJ+KUgScpKXtcXG4gICAgICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykuY3NzKCdiYWNrZ3JvdW5kJywgJycpO1xcbiAgICAgICAgICAgICAgICAkKCcubGllYiBidXR0b24nKS50ZXh0KCfimLAnKTtcXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgJCh0aGlzKS50ZXh0KCfilIEnKTtcXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoJ2JhY2tncm91bmQnLCAncmVkJyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICQoJ2xpJykuYXR0cignY2hlY2snLCAnZmFsc2UnKTtcXG4gICAgICAgICAgICB2YXIgaW5wdXRpZCA9IFxcXCIjXFxcIiArIHRoaXMuaWQuc3BsaXQoXFxcIlNlbGVjdFxcXCIpWzBdO1xcbiAgICAgICAgICAgIHZhciBhcnIgPSAkKGlucHV0aWQpLnZhbCgpLnNwbGl0KCcsJyk7XFxuICAgICAgICAgICAgYXJyID0gYXJyWzBdID09ICcnID8gW10gOiBhcnI7XFxuICAgICAgICAgICAgJCgnLm15Q2hvaWNlJykudGV4dChhcnIpO1xcbiAgICAgICAgICAgIGlmIChpbnB1dGlkICE9PSAnI2NqJyAmJiAkKCcuY2otdWwnKS5jc3MoJ2Rpc3BsYXknKT09J25vbmUnKSB7XFxuICAgICAgICAgICAgICAgICQoJy5qeC11bCcpLnNsaWRlVG9nZ2xlKDMwMCk7XFxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGVuOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBqeExpc3QgPSAkKCcuangtdWwgbGk6bm90KC5teUNob2ljZSknKS5lcShpKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnIuaW5jbHVkZXMoanhMaXN0LnRleHQoKSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqeExpc3QuYXR0cignY2hlY2snLCAndHJ1ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAganhMaXN0LnVuYmluZCgnY2xpY2snKS5jbGljayhmdW5jdGlvbihlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdjaGVjaycpICE9PSBcXFwidHJ1ZVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdjaGVjaycsICd0cnVlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci51bnNoaWZ0KCQodGhpcykudGV4dCgpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoYXJyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLm15Q2hvaWNlJykudGV4dChhcnIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignY2hlY2snLCAnZmFsc2UnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhcnIubGVuZ3RoOyBhKyspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJbYV0gPT0gJCh0aGlzKS50ZXh0KCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGEsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKGFycik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLm15Q2hvaWNlJykudGV4dChhcnIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZSBpZigkKCcuangtdWwnKS5jc3MoJ2Rpc3BsYXknKT09J25vbmUnKXtcXG4gICAgICAgICAgICAgICAgJCgnLmNqLXVsJykuc2xpZGVUb2dnbGUoMjAwKTtcXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4yOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBjakxpc3QgPSAkKCcuY2otdWwgbGknKS5lcShpKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKGlucHV0aWQpLnZhbCgpID09IGNqTGlzdC50ZXh0KCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjakxpc3QuYXR0cignY2hlY2snLCAndHJ1ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgY2pMaXN0LnVuYmluZCgnY2xpY2snKS5jbGljayhmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbCgkKHRoaXMpLnRleHQoKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignY2hlY2snLCAndHJ1ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnNpYmxpbmdzKCkuYXR0cignY2hlY2snLCAnZmFsc2UnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICAkKGRvY3VtZW50KS5ub3QoJCgnLnhsTGlzdCcpKS5jbGljayhmdW5jdGlvbihlKSB7XFxuICAgICAgICAgICAgJCgnLmp4LXVsJykuc2xpZGVVcCgpO1xcbiAgICAgICAgICAgICQoJy5jai11bCcpLnNsaWRlVXAoKTtcXG4gICAgICAgICAgICAkKCcubGllYiBidXR0b24nKS50ZXh0KCfimLAnKTtcXG4gICAgICAgICAgICAkKCcubGllYiBidXR0b24nKS5jc3MoJ2JhY2tncm91bmQnLCAnJyk7XFxuICAgICAgICB9KTtcXG4gICAgICAgICQoZnVuY3Rpb24oKXtcXG4gICAgICAgICAgICAkKCdsYWJlbCcpLm1vdXNldXAoZnVuY3Rpb24oKXtcXG4gICAgICAgICAgICAgICAgbGV0IGlucHV0aWQgPSAnIycgKyAkKHRoaXMpLm5leHQoKS5hdHRyKCdpZCcpO1xcbiAgICAgICAgICAgICAgICBvbmVPckRibChpbnB1dGlkKTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB2YXIgY291bnQgPSAwO1xcbiAgICAgICAgICAgIHZhciB0aW1lcjtcXG4gICAgICAgICAgICBmdW5jdGlvbiBvbmVPckRibChpbnB1dGlkKXtcXG4gICAgICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgICAgICAgICAgdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe1xcbiAgICAgICAgICAgICAgICAgICAgaWYoY291bnQgPT0gMSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9ICQoaW5wdXRpZCkudmFsKCkuc3BsaXQoJywnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKDAsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKGFycik7XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbCgnJyk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyKTtcXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMDtcXG4gICAgICAgICAgICAgICAgfSwyNjApXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfSk7XFxuICAgIFxcbiAgICBmdW5jdGlvbiBUb2FzdChtc2csZHVyYXRpb24peyAgXFxuICAgICAgICBkdXJhdGlvbj1pc05hTihkdXJhdGlvbik/MjAwMDpkdXJhdGlvbjsgIFxcbiAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgIFxcbiAgICAgICAgbS5pbm5lckhUTUwgPSBtc2c7ICBcXG4gICAgICAgIG0uc3R5bGUuY3NzVGV4dD1cXFwid2lkdGg6NDUlOyBtaW4td2lkdGg6MTUwcHg7IGJhY2tncm91bmQ6IzMxMTsgb3BhY2l0eTowLjY7IGhlaWdodDphdXRvO21pbi1oZWlnaHQ6IDQ1cHg7IGNvbG9yOiNmZmY7IGxpbmUtaGVpZ2h0OjQ1cHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOjEwcHg7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NjAlOyBsZWZ0OjI2JTsgei1pbmRleDo5OTk5OTk7XFxcIjsgIFxcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtKTsgIFxcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgIFxcbiAgICAgICAgICAgIHZhciBkID0gMC41OyAgXFxuICAgICAgICAgICAgbS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJy13ZWJraXQtdHJhbnNmb3JtICcgKyBkICsgJ3MgZWFzZS1pbiwgb3BhY2l0eSAnICsgZCArICdzIGVhc2UtaW4nOyAgXFxuICAgICAgICAgICAgbS5zdHlsZS5vcGFjaXR5ID0gJzAnOyAgXFxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtKSB9LCBkICogMTAwMCk7ICBcXG4gICAgICAgIH0sIGR1cmF0aW9uKTsgIFxcbiAgICB9ICBcXG5cXG4gICAgZnVuY3Rpb24gb3BlbkRuUGFnZSgpe1xcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHJ1bGU6IFxcXCI9Xl9ePVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLnrqHnkIbop6PmnpBcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5I1xcXCIsXFxuICAgICAgICAgICAgZmluZFJ1bGU6IFxcXCJqczp0aGlzLmQ9W107ZXZhbChmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9maWxlTGlua3PhtLDigb8udHh0JykpO3JlcXVpcmUoZkxpbmtzLmp4SXRVcmwpO2p4SXRlbS5qeExpc3QoKTtzZXRSZXN1bHQoZClcXFwiXFxuICAgICAgICB9KSk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gY2FuY2VsKCl7XFxuICAgICAgICBpZihteVNldD09Jycpe1xcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAud3JpdGVGaWxlKG9sZFJvdXRlLCBKU09OLnN0cmluZ2lmeShzZXR0aW5ncywgbnVsbCwgNCkpO1xcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLmJhY2soZmFsc2UpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGNsaWNrbWUobXNnLGR1cmF0aW9uLHRpdGxlKXtcXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBib3hEYXRhLmxlbmd0aDsgaSsrKXtcXG4gICAgICAgICAgICBsZXQgaWQgPSBib3hEYXRhW2ldLmlkO1xcbiAgICAgICAgICAgIHNldHRpbmdzW2lkXSA9IERpZChpZCkudmFsdWU7XFxuICAgICAgICB9XFxuICAgICAgICBpZihzZXR0aW5ncy5xanUgPT0gJycpe1xcbiAgICAgICAgICAgIHNldHRpbmdzLnFqdSA9ICfpu5jorqQnO1xcbiAgICAgICAgfVxcbiAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBiY0NvbmZpZz0nICsgZnlfYnJpZGdlX2FwcC5mZXRjaChuZXdSb3V0ZSkpO1xcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYmNDb25maWcuc2V0dGluZ3MsIHNldHRpbmdzKTtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShuZXdSb3V0ZSwgJCQkLnN0cmluZ2lmeShiY0NvbmZpZykpO1xcbiAgICAgICAgfWNhdGNoKGUpe31cXG4gICAgICAgIGZ5X2JyaWRnZV9hcHAud3JpdGVGaWxlKG9sZFJvdXRlLCAkJCQuc3RyaW5naWZ5KHNldHRpbmdzKSk7XFxuICAgICAgICAgICAgXFxuICAgICAgICBUb2FzdChtc2csZHVyYXRpb24pO1xcbiAgICAgICAgaWYodGl0bGU9PVxcXCLlhbNcXFwiKXtcXG4gICAgICAgICAgICBpZihzZlJlZnJlc2ggIT0gRGlkKFxcXCJjalxcXCIpLnZhbHVlKXtcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5iYWNrKCk7XFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAuYmFjayhmYWxzZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5yZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbjwvc2NyaXB0PiAgIFxcbjwvaHRtbD5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlBhcnNlX0RuLmpzXCIsXCJwYXRoXCI6XCJQYXJzZV9Ebi5qc1wiLFwicnVsZVwiOlwiLy89PT09PT09PT09PT3lhY3ll4XosIPnlKg9PT09PT09PT09PT1cXG4vL++8je+8je+8jT1eX149XFxudmFyIHZlcnNpb24gPSBcXFwiMy41LjI5XFxcIjtcXG5cXG52YXIgcGFyc2VSb3V0ZSA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbic7XFxudmFyIE15UGFyc2VTID0ge307XFxudmFyIG15U2V0ID0ge307XFxuaWYgKGZpbGVFeGlzdChwYXJzZVJvdXRlKSkge1xcbiAgICBldmFsKCd2YXIgcGFyc2VGaWxlID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICBNeVBhcnNlUyA9IHBhcnNlRmlsZS5jb2RlcztcXG4gICAgbXlTZXQgPSBwYXJzZUZpbGUuc2V0dGluZ3M7XFxufVxcbnZhciBwYXJzZVRpdGxlID0gW1xcbiAgICBcXFwi8J+lmlxcXCIsXFxuICAgIFxcXCJ5dW4xNzE3XFxcIixcXG4gICAgXFxcIlBhbkd1XFxcIixcXG4gICAgXFxcIkZ1WGluZ1xcXCIsXFxuICAgIFxcXCJodHRwczovL2p4eC5zbXlzOC5jbi9pbmRleC5waHA/dXJsPVxcXCIsXFxuICAgIFxcXCJodHRwczovL29ranguY2MvP3VybD1cXFwiLFxcbiAgICBcXFwiaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9XFxcIixcXG4gICAgXFxcImh0dHBzOi8vc2IuNWdzZW8ubmV0Lz91cmw9XFxcIlxcbl07XFxuXFxuLy/vvI3vvI3vvI09Xl9ePVxcblxcbi8v5o6l5Y+j6K6+572uLlxcblxcbnZhciBzZXRVcmwgPSBcXFwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjQHJ1bGU9anM6dGhpcy5kPVtdO3JlcXVpcmUoJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvUm91dGUuanMnKTtSb3V0ZS5zZXRQYXJzZSgpO3NldFJlc3VsdChkKTtcXFwiO1xcbnZhciBzZXRfc3dpdGNoID0gc2V0VXJsO1xcbnZhciBsYXp5ID0gYHJlcXVpcmUoJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvUm91dGUuanMnKTtheXRtUGFyc2UoaW5wdXQpYDtcXG5cXG4vL3ZhciBwYXJ3aXggPSBgdmFyIHl1cmw9J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vP3VybD0nO1JlZmVyZXInOiAnaHR0cHM6Ly93d3cubWF5aXhpb25nZGkuY24veXM/aWQ9JzsnaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi9hcGkucGhwJywgJ1JlZmVyZXInOidodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuJztcXG4vLyDlhajmsJFodHRwczovL3BjdmlkZW9hbGl5dW4udGlhbnNoYW5ncmVuamlhbi5tZ3R2LmNvbS44OHd1bWEuY29tLz91cmw9XFxuXFxuLy/vvI3vvI3vvI3lpIcg55So77yN77yN77yNXFxuLypcXG4gKiDlvbHop4blt6XlnLrvvJogaHR0cHM6Ly95c2djLmNjL1xcbiAqIOaxn+a5ljogNTU155S15b2xIGh0dHBzOi8vd3d3LjU1NWR5Mi5jb20vcGhvbmUuaHRtbCDvvZwgMTfnnIsgaHR0cDovLzE3a2FueXkuY24vIGh0dHA6Ly9qaGppZXhpLjMwdnIuY24vP3VybD0g772cIGh0dHA6Ly9hcGkubWFpemltYWxsLmNvbS9pbmRleC5waHA/dXJsPVxcbiAqIOaxn+a5ljogaHR0cDovL3d3dy50aWFuc2h1eXVuLm5ldC9pbmRleC5waHAvdm9kL3BsYXkvaWQvNDQ4Mzc3L3NpZC8xL25pZC8xLmh0bWxcXG4gKiDmsZ/muZYyOiBodHRwOi8vOThoeWsuY24vaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzcyODQxL3NpZC8xL25pZC8xLmh0bWxcXG4gKiDkurrkurrov7c6IGh0dHBzOi8vdmlwLnN1c291LnR2L3BsYXllci8/dXJsPSDvvZwgaHR0cHM6Ly93d3cubW9tZG0uY2MvXFxuICogXFxuICogd3VpZ2VuOiBodHRwczovL3d3dy41aWdlbi5jb20vZG1wbGF5ZXIvcGxheWVyLz91cmw9XFxuICog5bmy6aWtKOS6uuS6uui/tyk6IGh0dHBzOi8vanguenVpLmNtLz91cmw9XFxuICogaHR0cHM6Ly8yLjY2bW92aWUudG9wL3BsYXllci8/dXJsPVxcbiAqIFxcbiAqL1xcblxcblxcbnZhciB0b29scyA9IHtcXG4gICAgTUQ1OiBmdW5jdGlvbihkYXRhKSB7XFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLk1ENShkYXRhKS50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KTtcXG4gICAgfSxcXG4gICAgQUVTOiBmdW5jdGlvbih0ZXh0LCBrZXksIGl2LCBpc0VuY3J5cHQpIHtcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KTtcXG4gICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGl2KTtcXG4gICAgICAgIGlmIChpc0VuY3J5cHQpIHtcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQodGV4dCwga2V5LCB7XFxuICAgICAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICAgICAgICAgIH0pLnRvU3RyaW5nKCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KHRleHQsIGtleSwge1xcbiAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgfSxcXG4gICAgLy9hc2NpaVxcbiAgICBuZXh0Q2hhcmFjdGVyOiBmdW5jdGlvbihhc2NpaVZhbHVlLCBrKSB7XFxuICAgICAgICB2YXIgcyA9IGFzY2lpVmFsdWU7XFxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShzICsgayk7XFxuICAgIH0sXFxuICAgIC8v5Yev5pKSXFxuICAgIGNhZXNhckNpcGhlcjogZnVuY3Rpb24oc3RyaW5nVmFsdWUsIGspIHtcXG4gICAgICAgIHZhciBuZXdTdHJpbmcgPSBcXFwiXFxcIjtcXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nVmFsdWUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBuZXdTdHJpbmcgKz0gdGhpcy5uZXh0Q2hhcmFjdGVyKHN0cmluZ1ZhbHVlW2ldLmNoYXJDb2RlQXQoKSwgayk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gbmV3U3RyaW5nO1xcbiAgICB9LFxcbiAgICBoYW5kbGVVcmw6IGZ1bmN0aW9uKHVybCwgdmlwVXJsLCBuYW1lKSB7XFxuICAgICAgICBpZih1cmwgPT0gXFxcIlxcXCIgfHwgdXJsID09IHZpcFVybCkge1xcbiAgICAgICAgICAgIGxvZyhuYW1lICsgXFxcIuino+aekOWksei0pVxcXCIpO1xcbiAgICAgICAgICAgIHJldHVybiB2aXBVcmw7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodXJsWzBdID09ICcvJykge1xcbiAgICAgICAgICAgIHVybCA9ICdodHRwczonICsgdXJsO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCc9aHR0cCcpICE9IC0xKSB7XFxuICAgICAgICAgICAgdXJsID0gdXJsLmluZGV4T2YoJyZ1cmw9JykgPiAtMSA/IHVybCA6ICdodHRwJyArIGRlY29kZVVSSUNvbXBvbmVudCh1cmwuc3BsaXQoJz1odHRwJylbMV0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHZpcFVybC5pbmRleE9mKCdtZ3R2LmNvbScpICE9IC0xICYmIHVybC5pbmRleE9mKCdVc2VyLUFnZW50JykgPT0gLTEpIHtcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tVc2VyLUFnZW50QGFwcH0nO1xcbiAgICAgICAgfSBlbHNlIGlmICh1cmwuaW5kZXhPZignLmZsdicpICE9IC0xKSB7XFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7VXNlci1BZ2VudEBhcHAmJlJlZmVyZXJAJyArIHZpcFVybCArICd9JztcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcbiAgICB9XFxufTtcXG5cXG52YXIgUGFyc2VTID0ge307XFxudmFyIG9yaWdpbmFsUGFyc2VTID0ge1xcbiAgICBDaXR5SVA6ICdodHRwOi8vcHYuc29odS5jb20vY2l0eWpzb24nLFxcbiAgICBwY1VBOiAnVXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wXFxcXO+8m1xcXFzvvJsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80OS4wLjI2MjMuODcgU2FmYXJpLzUzNy4zNicsXFxuICAgIGNhY2hlTTN1ODogZnVuY3Rpb24odlVybCwgcmVmKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBtM3U4ID0gZmV0Y2godlVybCwge30pO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS92aWRlb3MubTN1OCcsIG0zdTgpO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgIHJldHVybiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvdmlkZW9zLm0zdTgjJztcXG4gICAgfSxcXG4gICAgZGVmYXVsdFBhcnNlOiBmdW5jdGlvbih1cmwpIHtcXG4gICAgICAgIHJldHVybiB1cmw7XFxuICAgIH0sXFxuICAgIG1hb3NzOiBmdW5jdGlvbihqeHVybCwgcmVmLCBrZXkpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGdldFZpZGVvSW5mbyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvb2xzLkFFUyh0ZXh0LCBrZXksIGl2KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmIChyZWYpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignJmJ0d2FmPScpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgIGh0bWwgPSByZXF1ZXN0KGp4dXJsICsgJyZidHdhZicgKyBodG1sLm1hdGNoKC8mYnR3YWYoLio/KVxcXCIvKVsxXSwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBpdiA9IGh0bWwuc3BsaXQoJ190b2tlbiA9IFxcXCInKVsxXS5zcGxpdCgnXFxcIicpWzBdO1xcbiAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvdmFyIGNvbmZpZyA9IHtbXFxcXHNcXFxcU10qP30vKVswXSArICcnKTtcXG4gICAgICAgICAgICBpZiAoY29uZmlnLnVybC5zbGljZSgwLCA0KSAhPSAnaHR0cCcpIHtcXG4gICAgICAgICAgICAgICAgY29uZmlnLnVybCA9IGRlY29kZVVSSUNvbXBvbmVudCh0b29scy5BRVMoY29uZmlnLnVybCwgXFxcImR2eVlSUWxuUFJDTWRRU2VcXFwiLCBpdikpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybDtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIExMUTogZnVuY3Rpb24oanh1cmwpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGFwaSA9IGp4dXJsLnNwbGl0KCc/dXJsPScpWzBdICsgXFxcImFwaS5waHBcXFwiO1xcbiAgICAgICAgICAgIHZhciBiNjRpZCA9IGJhc2U2NEVuY29kZShqeHVybC5zcGxpdCgndXJsPScpWzFdKTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VpZCA9IHRvb2xzLmNhZXNhckNpcGhlcihiNjRpZCwgLTEpO1xcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IGp4dXJsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyBwYXJzZWlkXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgIHVybCA9IChqc29uLmNvZGUgPT0gMjAwID8gYmFzZTY0RGVjb2RlKHRvb2xzLmNhZXNhckNpcGhlcihqc29uLnVybCwgLTEpKSA6ICcnKTtcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgUGFuR3U6IGZ1bmN0aW9uKHZpcFVybCwgZGF0YSkge1xcbiAgICAgICAgLyp2YXIgcmVmID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tLyc7XFxuICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpLz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpL2FwaS5waHAnO1xcbiAgICAgICAgKi9cXG4gICAgICAgIC8vdmFyIHJlZiA9ICdodHRwczovL3hteXN0di5jb20vJztcXG4gICAgICAgIC8vdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9pbmRleC5waHA/dXJsPScgKyB0YWlsVXJsO1xcbiAgICAgICAgLy92YXIgYXBpID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9hcGkucGhwJztcXG4gICAgICAgIHZhciBwYXJzZSA9IFxcXCJodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS9wYW5ndS8/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgYXBpID0gXFxcImh0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9wYW5ndTIwMjEvYXBpLnBocFxcXCI7XFxuICAgICAgICBpZiAoZGF0YSkge1xcbiAgICAgICAgICAgIHJlZiA9IGRhdGFbMF07XFxuICAgICAgICAgICAgcGFyc2UgPSBkYXRhWzFdO1xcbiAgICAgICAgICAgIGFwaSA9IGRhdGFbMl07XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgVGltZSA9IChNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxKS50b1N0cmluZygpO1xcbiAgICAgICAgdmFyIGpzb24gPSByZXF1ZXN0KGFwaSwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBwYXJzZVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogXFxcInVybD1cXFwiICsgdmlwVXJsICsgXFxcIiZyZWZlcmVyPVxcXCIgKyBiYXNlNjRFbmNvZGUocGFyc2UpICsgXFxcIiZyZWY9MSZ0aW1lPVxcXCIgKyBUaW1lICsgXFxcIiZ0eXBlPSZvdGhlcj1cXFwiICsgYmFzZTY0RW5jb2RlKHZpcFVybCkgKyBcXFwiJmlvcz0wXFxcIixcXG4gICAgICAgICAgICBtZXRob2Q6IFxcXCJQT1NUXFxcIlxcbiAgICAgICAgfSk7XFxuICAgICAgICB2YXIgdXJsID0ganNvblswXSA9PSBcXFwie1xcXCIgPyBKU09OLnBhcnNlKGpzb24pLnVybCA6IFxcXCJcXFwiO1xcbiAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgfSxcXG4gICAgeXVuMTcxNzogZnVuY3Rpb24odmlwVXJsKSB7XFxuICAgICAgICB2YXIgaXN5ayA9IHZpcFVybC5pbmRleE9mKCd5b3VrdScpO1xcbiAgICAgICAgdmFyIHJlZiA9IFxcXCJodHRwczovL3d3dy4xNzE3eXVuLmNvbS9qeC90eS5waHA/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgcGFyc2UgPSBcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMDgyOC8/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgYXBpID0gXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzEwMDQvLi5pbmRleC4ucGhwXFxcIjtcXG4gICAgICAgIHJldHVybiBpc3lrID09IC0xID8gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKSA6IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmICsgJyx2aXA6JywgcGFyc2UgKyAnLHZpcDonLCBhcGldKTtcXG4gICAgfSxcXG4gICAgRnVYaW5nOiBmdW5jdGlvbih2aXBVcmwpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy9pZih2aXBVcmwuaW5kZXhPZigndi55b3VrdScpIT0tMSl7XFxuICAgICAgICAgICAgLy8gICAgdmlwVXJsID0gKEpTT04ucGFyc2UocmVxdWVzdCh2aXBVcmwsIHtyZWRpcmVjdDpmYWxzZSwgd2l0aEhlYWRlcnM6dHJ1ZX0pKS5oZWFkZXJzLmxvY2F0aW9uICsgJycpLnJlcGxhY2UoL1xcXFw/LiovLCcnKTtcXG4gICAgICAgICAgICAvL31cXG4gICAgICAgICAgICB2YXIgcmVmID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvP3VybD0nICsgdmlwVXJsO1xcbiAgICAgICAgICAgIHZhciBwYXJzZSA9IHJlZjtcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvYXBpdV9meC5waHAnO1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiwgcGFyc2UsIGFwaV0pO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgXFxcIvCfpZpcXFwiOiBmdW5jdGlvbih2aXBVcmwpIHtcXG4gICAgICAgIGxldCDkvZzogIVf6KeG55WM55+l5ZCN5aSn5L2sO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBldmFsKGZldGNoKFxcXCJodHRwOi8vcTE2LjIyd2ViLm9yZy9hZXMuanNcXFwiKSk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHBkZmgoZmV0Y2goXFxcImh0dHA6Ly9xMTYuMjJ3ZWIub3JnL2FwaS5waHBcXFwiKSwgXFxcImJvZHkmJnNjcmlwdCwxJiZIdG1sXFxcIik7XFxuICAgICAgICAgICAgZXZhbCh1cmwucmVwbGFjZShcXFwiZG9jdW1lbnQuXFxcIiwgXFxcIlxcXCIpLnJlcGxhY2UoXFxcImxvY2F0aW9uLlxcXCIsIFxcXCJcXFwiKSk7XFxuICAgICAgICAgICAgdmFyIHBsYXkgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwOi8vcTE2LjIyd2ViLm9yZy9hcGkucGhwXFxcIiwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llLnNwbGl0KFxcXCI7XFxcIilbMF1cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keTogXFxcInVybD1cXFwiICsgaW5wdXQsXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgICAgICAgICAgfSkpLnVybDtcXG4gICAgICAgICAgICBpZiAocGxheS5zdGFydHNXaXRoKFxcXCIvXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczpcXFwiICsgcGxheTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcGxheTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxufTtcXG5cXG5PYmplY3QuYXNzaWduKFBhcnNlUywgb3JpZ2luYWxQYXJzZVMsIE15UGFyc2VTKTtcXG4vL+imhueblumhuuW6j++8jOesrOS4ieS4quimhuebluesrOS6jOS4queEtuWQjuimhuebluesrOS4gOS4qlxcblxcblxcbmZ1bmN0aW9uIGF5dG1QYXJzZSh2aXBVcmwsIHBhcnNlTmFtZSkge1xcbiAgICB0aGlzLnJlcXVlc3QgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKSB7XFxuICAgICAgICBwYXJhbTEgPSBwYXJhbTEgPT0gdW5kZWZpbmVkID8ge30gOiBwYXJhbTE7XFxuICAgICAgICBpZihpc05hTihwYXJhbTEudGltZW91dCkpIHtcXG4gICAgICAgICAgICBwYXJhbTEudGltZW91dCA9IDMwMDA7XFxuICAgICAgICB9XFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFO1xcbiAgICAgICAgdmFyIHJldFN0ciA9IG1ldGhvZF9yZXF1ZXN0Lmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEsIHBhcmFtMik7XFxuICAgICAgICByZXR1cm4gcmV0U3RyID09IG51bGwgPyByZXRTdHIgOiByZXRTdHIgKyBcXFwiXFxcIjtcXG4gICAgfTtcXG4gICAgdGhpcy5mZXRjaCA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIpIHtcXG4gICAgICAgIHBhcmFtMSA9IHBhcmFtMSA9PSB1bmRlZmluZWQgPyB7fSA6IHBhcmFtMTtcXG4gICAgICAgIHBhcmFtMS5oZWFkZXJzID0gcGFyYW0xLmhlYWRlcnMgPT0gdW5kZWZpbmVkID8ge30gOiBwYXJhbTEuaGVhZGVycztcXG4gICAgICAgIHBhcmFtMS5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBQQ19VQTtcXG4gICAgICAgIGlmKGlzTmFOKHBhcmFtMS50aW1lb3V0KSkge1xcbiAgICAgICAgICAgIHBhcmFtMS50aW1lb3V0ID0gMzAwMDtcXG4gICAgICAgIH1cXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEU7XFxuICAgICAgICB2YXIgcmV0U3RyID0gbWV0aG9kX2ZldGNoLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEsIHBhcmFtMik7XFxuICAgICAgICByZXR1cm4gcmV0U3RyID09IG51bGwgPyByZXRTdHIgOiByZXRTdHIgKyBcXFwiXFxcIjtcXG4gICAgfTtcXG4gICAgdmFyIGhvc3QgPSB2aXBVcmwubWF0Y2goL1xcXFwuKC4qPylcXFxcLy8pO1xcbiAgICBob3N0ID0gaG9zdCA9PSBudWxsID8gbnVsbCA6IGhvc3RbMV07XFxuICAgIHZhciBub1VybCA9IFxcXCJ0b2FzdDovL+aOpeaUtuWIsOeahOmTvuaOpeS4ujogXFxcIjtcXG4gICAgc3dpdGNoIChteVNldC5xanUpIHtcXG4gICAgICAgIGNhc2UgXFxcIum7mOiupFxcXCI6XFxuICAgICAgICAgICAgc3dpdGNoIChob3N0KSB7XFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcInFxLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC50eDtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlIFxcXCJpcWl5aS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucXk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwieW91a3UuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnlrO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcIm1ndHYuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm1nO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcImJpbGliaWxpLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5ibDtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gaG9zdCA9PSBudWxsID8gbm9VcmwgOiBteVNldC5vdGg7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgIHN0ciA9IGhvc3QgPT0gbnVsbCA/IG5vVXJsIDogbXlTZXQucWp1O1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIGlmIChwYXJzZU5hbWUpIHtcXG4gICAgICAgIHN0ciA9IHBhcnNlTmFtZTtcXG4gICAgfVxcbiAgICBsZXQgbXlDaG9pY2UgPSBzdHIuc3BsaXQoJywnKTtcXG4gICAgbGV0IGxlbiA9IG15Q2hvaWNlLmxlbmd0aDtcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xcbiAgICAgICAgbGV0IG5hbWUgPSBteUNob2ljZVtpXTtcXG4gICAgICAgIGlmICh0eXBlb2YgUGFyc2VTW25hbWVdID09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gUGFyc2VTW25hbWVdKHZpcFVybCk7XFxuICAgICAgICAgICAgbGV0IFJlZyA9IG5ldyBSZWdFeHAoXFxcIm0zdTh8bXA0fFxcXCIgKyB2aXBVcmwgKyBcXFwifGh0dHBcXFwiKTtcXG4gICAgICAgICAgICBpZiAoaSAhPSBsZW4gLSAxICYmICFSZWcudGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhuYW1lICsgJ+ino+aekOWksei0pScpO1xcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHRvb2xzLmhhbmRsZVVybCh1cmwsIHZpcFVybCwgbmFtZSk7XFxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBQYXJzZVNbbmFtZV0gPT0gJ3N0cmluZycpIHtcXG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZShQYXJzZVNbbmFtZV0gKyB2aXBVcmwsIHRvb2xzLmhhbmRsZVVybCwgbmFtZSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigwLCA0KSA9PSBcXFwiaHR0cFxcXCIgfHwgaG9zdCA9PSBudWxsID8gbmFtZSArIHZpcFVybCA6IFxcXCJ0b2FzdDovL1xcXCIgKyBuYW1lICsgXFxcIiDkuI3mmK/nm7Tpk77kuZ/kuI3mmK/lhY3ll4VcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9XFxufTtcXG5cXG52YXIgcGxheVBhcnNlID0ge1xcbiAgICBwbGF5ZXJfeHg6IGZ1bmN0aW9uKGp1cmwsIExhYmVsKSB7XFxuICAgICAgICByZXR1cm4gJChqdXJsKS5sYXp5UnVsZSgoTGFiZWwpID0+IHtcXG4gICAgICAgICAgICByZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L1JvdXRlLmpzJyk7XFxuICAgICAgICAgICAgdmFyIGZhID0gWydsZXR2JywgJ3BwdHYnLCAncXEnLCAneW91a3UnLCAncWl5aScsICdpcWl5aScsICdtZ3R2JywgJ2JpbGliaWxpJywgJ3NvaHUnLCAnbWlndScsICdtMTkwNScsICd2aXAnXTtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IHBhcnNlRG9tKHJlcXVlc3QoaW5wdXQpLCBMYWJlbCk7XFxuICAgICAgICAgICAgZXZhbChodG1sLnJlcGxhY2UoL3BsYXllcl8uKj89ey8sICdwZGF0YT17JykpO1xcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC9KVC4uSlQuLi8pKSB7XFxuICAgICAgICAgICAgICAgIHBkYXRhLnVybCA9IGJhc2U2NERlY29kZShwZGF0YS51cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvJS4uJS4uLykpIHtcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gdW5lc2NhcGUocGRhdGEudXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGZhLmluY2x1ZGVzKHBkYXRhLmZyb20pID09IHRydWUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShwZGF0YS51cmwpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBwZGF0YS51cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIExhYmVsKVxcbiAgICB9XFxufTtcXG5cXG5mdW5jdGlvbiBzZXRQYXJzZSgpIHtcXG4gICAgdGhpcy5kID0gW107XFxuICAgIHJlcXVpcmUoJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvUm91dGUuanMnKTtcXG4gICAgUm91dGUuc2V0UGFyc2UoKTtcXG4gICAgc2V0UmVzdWx0KGQpO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuiwg+eUqOi3r+eUsVwiLFwicGF0aFwiOlwiUm91dGVcIixcInJ1bGVcIjpcImpzOlxcbnJlcXVpcmUoJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvUm91dGUuanMnKTtcXG5zd2l0Y2ggKGdldFBhcmFtKFxcXCJ0eXBlXFxcIikpIHtcXG4gICAgY2FzZSBcXFwi6K6+572uXFxcIjpcXG4gICAgdGhpcy5kID0gW107XFxuICAgICAgICBSb3V0ZS5zZXRQYXJzZSgpO1xcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgXFxcIue8lui+kVxcXCI6XFxuICAgIHRoaXMuZCA9IFtdO1xcbiAgIHJlcXVpcmUoZkxpbmtzLmp4SXRVcmwpO1xcbiAgIGp4SXRlbS5qeExpc3QoKTtcXG4gICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICBicmVhaztcXG4gICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAkLmV4cG9ydHMgPSBSb3V0ZTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG5cIn1dLFwic2F2ZWRcIjpmYWxzZSxcInRpdGxlXCI6XCJNeUZpZWxk4bSw4oG/XCIsXCJ2ZXJzaW9uXCI6MCxcInVybFwiOlwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjO2dldDtVVEYtODt7VXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoTGludXjvvJvvvJsgQW5kcm9pZCAxMe+8m++8myBNaSAxMCBQcm8pIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS84OC4wLjQzMjQuMTUyIE1vYmlsZSBTYWZhcmkvNTM3LjM2fVwiLFwiY29sX3R5cGVcIjpcInRleHRfY2VudGVyXzFcIixcImZpbmRfcnVsZVwiOlwianM6KFxcbigpID0+IHtcXG4gICAgdGhpcy5kID0gW107XFxuICAgIGV2YWwoZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvZmlsZUxpbmtzXFxcXHUxZDMwXFxcXHUyMDdmLnR4dFxcXCIpKTtcXG4gICAgcmVxdWlyZShmTGlua3MuanhJdFVybCk7XFxuICAgIGp4SXRlbS5qeExpc3QoKTtcXG4gICAgc2V0UmVzdWx0KGQpO1xcbn1cXG4pKClcIixcImdyb3VwXCI6XCLikaDgvoTwn42nXCIsXCJ1YVwiOlwibW9iaWxlXCIsXCJwcmVSdWxlXCI6XCJ2YXIga1QgPSBcXFwiaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L2JyYW5jaC9tL3YvXFxcIjtcXG52YXIgZkxpbmtzID0ge1xcbiAgICBrVDoga1QsXFxuICAgIGNqRnJvbTogJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcycsXFxuICAgIHg1RnJvbTogJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sJyxcXG4gICAgX2JqVXJsOiBrVCArICdqeEl0ZW1fYmouanMnLFxcbiAgICBqeEl0VXJsOiBrVCArICdqeEl0ZW0uanMnLFxcbiAgICByb3V0ZVVybDogJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvUm91dGUuanMnLFxcbiAgICBjamNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsXFxuICAgIHg1Y2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmh0bWwnLFxcbiAgICBwbHNjOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9wbHNjUGFyc2UuaHRtbCcsXFxuICAgIExhbkppZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUveDVQYXJzZUxhbkppZS50eHQnLFxcbiAgICBjb25maWc6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvbicsXFxuICAgIHBhcnNlczogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyxcXG4gICAgdnVlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS92dWUwMTAxNC5qcycsXFxuICAgIGpxdWVyeTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvanF1ZXJ5MDIxNC5qcycsXFxuICAgIHg1Um91dGU6ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS8nXFxufTtcXG5sZXQgZlJvdXRlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvZmlsZUxpbmtz4bSw4oG/LnR4dCc7XFxuaWYgKCFnZXRWYXIoJ2p4T2xkVicpIHx8IGdldFZhcignanhOZXdWJywgJzAnKSAhPT0gJzAnKSB7XFxuICAgIHdyaXRlRmlsZShmUm91dGUsICd2YXIgZkxpbmtzPScgKyAkLnN0cmluZ2lmeShmTGlua3MpKTtcXG59XCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIlBhcnNlX0RuLmh0bWxcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUGFyc2VfRG4uaHRtbFxcXCIsXFxcInJ1bGVcXFwiOlxcXCI8IURPQ1RZUEUgaHRtbD5cXFxcbjxodG1sPlxcXFxuPGhlYWQ+XFxcXG4gICAgPG1ldGEgY2hhcnNldD1cXFxcXFxcInV0Zi04XFxcXFxcXCI+XFxcXG4gICAgPG1ldGEgbmFtZT1cXFxcXFxcInZpZXdwb3J0XFxcXFxcXCIgY29udGVudD1cXFxcXFxcIndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEsbWluaW11bS1zY2FsZT0xLG1heGltdW0tc2NhbGU9MSx1c2VyLXNjYWxhYmxlPW5vXFxcXFxcXCIgLz5cXFxcbiAgICA8c2NyaXB0IHNyYz1cXFxcXFxcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vdnVlQDIuNS4xNi9kaXN0L3Z1ZS5taW4uanNcXFxcXFxcIj48L3NjcmlwdD5cXFxcbiAgICA8c2NyaXB0IHNyYz1cXFxcXFxcImh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0yLjEuNC5taW4uanNcXFxcXFxcIj48L3NjcmlwdD5cXFxcbiAgICA8IS0tXFxcXG4gICAgPHNjcmlwdCBzcmM9XFxcXFxcXCJodHRwOi8vYXBwcy5iZGltZy5jb20vbGlicy9qcXVlcnkvMi4xLjQvanF1ZXJ5Lm1pbi5qc1xcXFxcXFwiPjwvc2NyaXB0PlxcXFxuICAgIDxzY3JpcHQgc3JjPVxcXFxcXFwiaHR0cDovL2FwcHMuYmRpbWcuY29tL2xpYnMvdnVlLzEuMC4xNC92dWUuanNcXFxcXFxcIj48L3NjcmlwdD5cXFxcbiAgICAtLT5cXFxcbiAgICA8dGl0bGU+UGFyc2VfRG48L3RpdGxlPlxcXFxuICAgIDxzdHlsZSB0eXBlPXRleHQvY3NzPlxcXFxuICAgICAgICBodG1sLCBib2R5IHtcXFxcbiAgICAgICAgICAgIGhlaWdodDogYXV0bztcXFxcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgYm9keSB7XFxcXG4gICAgICAgICAgICBtYXJnaW46IDAgNXB4IDAgNXB4O1xcXFxuICAgICAgICAgICAgcGFkZGluZzogMCAwcHggMCAwcHg7XFxcXG4gICAgICAgICAgICAvL2JhY2tncm91bmQ6ICNGOUYwREE7XFxcXG4gICAgICAgICAgICBmb250LXdlaWdodDogMDtcXFxcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBcXFxcXFxcIk1pY3Jvc29mdCBZYUhlaVxcXFxcXFwiLFxcXFxcXFwi5a6L5L2TXFxcXFxcXCIsXFxcXFxcXCJTZWdvZSBVSVxcXFxcXFwiLCBcXFxcXFxcIkx1Y2lkYSBHcmFuZGVcXFxcXFxcIiwgSGVsdmV0aWNhLCBBcmlhbCxzYW5zLXNlcmlmLCBGcmVlU2FucywgQXJpbW87XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgI2RpdjJ7XFxcXG4gICAgICAgICAgIG1hcmdpbi10b3A6MzVweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKui+k+WFpeahhueItuWFg+e0oCovXFxcXG4gICAgICAgIGRpdi5ib3gge1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiA1M3B4O1xcXFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrovpPlhaXmoYblsLrlr7gqL1xcXFxuICAgICAgICBmb3JtIHtcXFxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcXFxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcXFxuICAgICAgICAgICAgd2lkdGg6IDkyJTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpbnB1dCwgbGFiZWwsIC5saWViIGJ1dHRvbiB7XFxcXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XFxcXG4gICAgICAgICAgICBvdXRsaW5lOiBub25lO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q5a2X5L2T5L2N572uKi9cXFxcbiAgICAgICAgaW5wdXQge1xcXFxuICAgICAgICAgICAgd2lkdGg6IDc3JTtcXFxcbiAgICAgICAgICAgIGhlaWdodDogMzJweDtcXFxcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNjZweDtcXFxcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGFiZWwge1xcXFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDNweDtcXFxcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xcXFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcXFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q5bCP5qGGKi9cXFxcbiAgICAgICAgLmJhciBsYWJlbCB7XFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRDA2QjZDO1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTU1IDU1NXB4IDU1NXB4IDU1NTtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xcXFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcXFxuICAgICAgICAgICAgY29sb3I6ICNGOUYwREE7XFxcXG4gICAgICAgICAgICB0b3A6IDA7XFxcXG4gICAgICAgICAgICBsZWZ0OiAzcHg7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrovpPlhaXmoYbmoLflvI8qL1xcXFxuICAgICAgICAuYmFyIGlucHV0IHtcXFxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGOUYwREE7XFxcXG4gICAgICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAjRDA2QjZDO1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q5YiX6KGoKi9cXFxcbiAgICAgICAgLmxpZWIgYnV0dG9uIHtcXFxcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcXFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6NDBweDtcXFxcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXFxcbiAgICAgICAgICAgIHdpZHRoOiAyN3B4O1xcXFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcXFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q5YiX6KGoKi9cXFxcbiAgICAgICAgLmxpZWIgYnV0dG9ue1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwNkI2QztcXFxcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcXFxcbiAgICAgICAgICAgIGNvbG9yOiAjRjlGMERBO1xcXFxuICAgICAgICAgICAgdG9wOiAwO1xcXFxuICAgICAgICAgICAgcmlnaHQ6IDBweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKuWktOWDjyovXFxcXG4gICAgICAgIC5yb3VuZF9pY29ue1xcXFxuICAgICAgICAgICAgd2lkdGg6IDQwcHg7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcXFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXFxcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcXFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIC5qeC11bCwgLmNqLXVsIHtcXFxcbiAgICAgICAgICAgIHotaW5kZXg6IDk5OTtcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA3NyU7XFxcXG4gICAgICAgICAgIC8vIGxlZnQ6IDEwJTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAuangtdWwsIC5jai11bCB7XFxcXG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC5qeC11bCB7XFxcXG4gICAgICAgICAgICB0b3A6IDMlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC5jai11bCB7XFxcXG4gICAgICAgICAgICB0b3A6IDMwJTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsaSB7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDM1cHg7XFxcXG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMDFiZmRhO1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpO1xcXFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xcXFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDM1cHg7XFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxcXG4gICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XFxcXG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcXFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXFxcbiAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxpIHtcXFxcbiAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGk6aG92ZXIge1xcXFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxMzksIDEzMSwgMTIwLCAwLjkpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxpW2NoZWNrPVxcXFxcXFwidHJ1ZVxcXFxcXFwiXSB7XFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgMCwgMCwgMC45KTtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgPC9zdHlsZT5cXFxcbjwvaGVhZD5cXFxcblxcXFxuPGJvZHk+XFxcXG4gICAgPGRpdiBjbGFzcz1cXFxcXFxcImZ1bmdcXFxcXFxcIj5cXFxcbiAgICAgICAgPGEgc3R5bGU9XFxcXFxcXCJmbG9hdDpsZWZ0O1xcXFxcXFwiPlxcXFxuICAgICAgICAgICAgPGJ1dHRvbiAgc3R5bGU9XFxcXFxcXCJib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICNjNTQ2NGE7d2lkdGg6IDgwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogI0Y5RjBEQTtcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFwiY2FuY2VsKCk7XFxcXFxcXCI+5YWzIOmXrTwvYnV0dG9uPlxcXFxuICAgICAgICA8L2E+XFxcXG4gICAgICAgIDxhIHN0eWxlPVxcXFxcXFwiZmxvYXQ6cmlnaHRcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9XFxcXFxcXCJib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICMwNjgwMDY7d2lkdGg6IDgwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogI0Y5RjBEQTtcXFxcXFxcIm9uY2xpY2s9XFxcXFxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflvIAnKTtcXFxcXFxcIj7kv50g5a2YPC9idXR0b24+IFxcXFxuICAgICAgICA8L2E+XFxcXG4gICAgPC9kaXY+XFxcXG4gICAgPGJyPlxcXFxuICAgIDxkaXYgaWQ9XFxcXFxcXCJkaXYyXFxcXFxcXCI+PC9kaXY+XFxcXG4gICAgPGRpdj5cXFxcbiAgICAgICAgPGEgc3R5bGU9XFxcXFxcXCJmbG9hdDpsZWZ0O21hcmdpbi10b3A6NXB4O1xcXFxcXFwiIG9uY2xpY2s9XFxcXFxcXCJvcGVuRG5QYWdlKClcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgIDxpbWcgc3JjPVxcXFxcXFwiaHR0cHM6Ly9zMy5heDF4LmNvbS8yMDIxLzAyLzIyL3k3d2I5Ty5qcGdcXFxcXFxcIiBjbGFzcz1cXFxcXFxcInJvdW5kX2ljb25cXFxcXFxcIiAgYWx0PVxcXFxcXFwiXFxcXFxcXCI+XFxcXG4gICAgICAgIDwvYT5cXFxcbiAgICAgICAgPHNwYW4gc3R5bGU9XFxcXFxcXCJsaW5lLWhlaWdodDo2MHB4O2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiBncmV5O1xcXFxcXFwiPiZuYnNwOyZuYnNwO+aWrSZuYnNwO+W/tTwvc3Bhbj5cXFxcbiAgICAgICAgPGEgc3R5bGU9XFxcXFxcXCJmbG9hdDpyaWdodDttYXJnaW4tdG9wOjVweDtcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgIDxidXR0b24gIHN0eWxlPVxcXFxcXFwiYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAjMDVCRkM1O3dpZHRoOiAxODVweDtoZWlnaHQ6NDBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAjRjlGMERBO1xcXFxcXFwiIG9uY2xpY2s9XFxcXFxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflhbMnKTtcXFxcXFxcIj7kv53lrZjorr7nva7lubblhbPpl63nlYzpnaI8L2J1dHRvbj5cXFxcbiAgICAgICAgPC9hPlxcXFxuICAgIDwvZGl2PlxcXFxuICAgIDxkaXYgY2xhc3M9XFxcXFxcXCJ6ai1kaXZcXFxcXFxcIj5cXFxcbiAgICAgICAgPHVsIGNsYXNzPVxcXFxcXFwiangtdWxcXFxcXFxcIiBzdHlsZT1cXFxcXFxcImhlaWdodDo0NDRweDtvdmVyZmxvdy15OmF1dG87XFxcXFxcXCI+XFxcXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcXFxcXCJteUNob2ljZVxcXFxcXFwiIHN0eWxlPVxcXFxcXFwiei1pbmRleDo5OTk5O3Bvc2l0aW9uOiBmaXhlZDt3aWR0aDo3Ni41JTtjb2xvcjpyZWQ7XFxcXFxcXCI+PC9saT5cXFxcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cXFxcXFxcInVzZWxlc3NcXFxcXFxcIj48L2xpPlxcXFxuICAgICAgICAgICAgPGxpIGNsYXNzPVxcXFxcXFwieGxMaXN0XFxcXFxcXCIgdi1mb3I9XFxcXFxcXCJpdGVtIGluIGp4RGF0YVxcXFxcXFwiPnt7aXRlbX19PC9saT5cXFxcbiAgICAgICAgPC91bD5cXFxcbiAgICAgICAgPHVsIGNsYXNzPVxcXFxcXFwiY2otdWxcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgIDxsaSBzdHlsZT1cXFxcXFxcImJhY2tncm91bmQ6Z3JleTtcXFxcXFxcIj7or7fpgInmi6nmj5Lku7Y8L2xpPlxcXFxuICAgICAgICAgICAgPGxpIHYtZm9yPVxcXFxcXFwiaXRlbSBpbiBjakRhdGFcXFxcXFxcIj57e2l0ZW19fTwvbGk+XFxcXG4gICAgICAgIDwvdWw+XFxcXG4gICAgPC9kaXY+XFxcXG48L2JvZHk+XFxcXG48c2NyaXB0PlxcXFxuICAgIC8vZXZhbChmeV9icmlkZ2VfYXBwLmZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9qcXVlcnkwMjE0LmpzXFxcXFxcXCIpKTtcXFxcbiAgICAvL2V2YWwoZnlfYnJpZGdlX2FwcC5mZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvdnVlMDEwMTQuanNcXFxcXFxcIikpO1xcXFxuICAgIGV2YWwoZnlfYnJpZGdlX2FwcC5nZXRJbnRlcm5hbEpzKCkpO1xcXFxuICAgIFxcXFxuICAgIHZhciBzZXR0aW5ncyA9IHtcXFxcbiAgICAgICAgcXk6ICd5dW4xNzE3JyxcXFxcbiAgICAgICAgeWs6ICd5dW4xNzE3JyxcXFxcbiAgICAgICAgdHg6ICd5dW4xNzE3JyxcXFxcbiAgICAgICAgbWc6ICd5dW4xNzE3JyxcXFxcbiAgICAgICAgYmw6ICd5dW4xNzE3JyxcXFxcbiAgICAgICAgb3RoOiAneXVuMTcxNycsXFxcXG4gICAgICAgIHFqdTogJ+m7mOiupCcsXFxcXG4gICAgICAgIGNqOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcydcXFxcbiAgICB9O1xcXFxuICAgIFxcXFxuICAgIHZhciBvbGRSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcIjtcXFxcbiAgICB2YXIgbXlTZXQgPSBmeV9icmlkZ2VfYXBwLmZldGNoKG9sZFJvdXRlKTtcXFxcbiAgICBcXFxcbiAgICB2YXIgbmV3Um91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uXFxcXFxcXCI7XFxcXG4gICAgdmFyIG5ld0NvbmZpZyA9IGZ5X2JyaWRnZV9hcHAuZmV0Y2gobmV3Um91dGUpO1xcXFxuICAgIHZhciBteVNlbGVjdCA9IFtdO1xcXFxuICAgIHRyeXtcXFxcbiAgICAgICAgZXZhbChcXFxcXFxcIm5ld0NvbmZpZyA9XFxcXFxcXCIgKyBuZXdDb25maWcgKyBcXFxcXFxcIjtcXFxcXFxcIik7XFxcXG4gICAgICAgIHNldHRpbmdzID0gbmV3Q29uZmlnLnNldHRpbmdzLnFqdSA9PSB1bmRlZmluZWQgPyBzZXR0aW5ncyA6IG5ld0NvbmZpZy5zZXR0aW5ncztcXFxcbiAgICAgICAgdmFyIHljVGl0bGUgPSBbJ2RlZmF1bHRQYXJzZScsICdtYW9zcycsICdDaXR5SVAnLCAnY2FjaGVNM3U4JywgJ3BjVUEnLCAncGFyc2VMYycsICdncGFyc2UnLCAnbnBhcnNlJ107XFxcXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuZXdDb25maWcudGl0bGUubGVuZ3RoOyBpKyspe1xcXFxuICAgICAgICAgICAgdmFyIFRpdGxlcyA9IG5ld0NvbmZpZy50aXRsZVtpXTtcXFxcbiAgICAgICAgICAgIGlmKHljVGl0bGUuaW5jbHVkZXMoVGl0bGVzKSA9PSBmYWxzZSl7XFxcXG4gICAgICAgICAgICAgICAgbXlTZWxlY3QucHVzaChUaXRsZXMpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfWNhdGNoKGUpe31cXFxcbiAgICB2YXIgc2ZSZWZyZXNoID0gc2V0dGluZ3MuY2o7XFxcXG4gICAgZnVuY3Rpb24gRGlkKGlkKXtcXFxcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcXFxcbiAgICB9XFxcXG4gICAgXFxcXG4gICAgaWYobXlTZXQgPT0gJycpe1xcXFxuICAgICAgICBEaWQoXFxcXFxcXCJkaXYyXFxcXFxcXCIpLmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdpbicsJ1xcXFxcXFxcXFxcXG48aDQ+5o+Q56S677yaPGJyPuKRoOazqOaEj+aPkuS7tumAiemhue+8jOayoeacieaJi+WKqOWvvOWFpeaPkuS7tueahOivneS4jeeUqOWKqOWug+OAguWmguiuvue9ruS4jeW9k+S8muWvvOiHtOinhOWImeaXoOazleS9v+eUqO+8jDxicj7op6PlhrPlip7ms5XvvJrlsI/nqIvluo/pppbpobXngrnlh7vmgaLlpI3pu5jorqTmj5Lku7bvvJs8YnI+4pGh5YWo5bGA6K6+572u5aaC5p6c6YCJ5oup5LqG6Z2e6buY6K6k6YKj5LmI5YWo6YOo55qE6Kej5p6Q5Lya5L2/55So6L+Z5LiA6K6+572u77yM5LiN5oOz6L+Z5qC355qE6K+d6K+35aGr5YWl6buY6K6k77ybPGJyPuKRoue7v+iJsuS/neWtmOaMiemSruS7heS7heS/neWtmOmFjee9ruS4jeS8muWFs+mXreiuvue9rumhtemdou+8jOmFjee9ruWQjuaDs+S/neWtmOW5tuWFs+mXreiuvue9rumhtemdoueahOivneivt+eCueiTneiJsuaMiemSru+8mzxicj7ikaPpmIXor7vlrozmj5DnpLrngrnlhbPpl63liqDovb3lrozmlbTorr7nva7pobXpnaLvvIzlpoLlh7rpl67popjml6Dms5Xoh6rooYzop6PlhrPngrnlm77niYfov5vlhaXorrrlnZvlkJHmiJHlj43ppojjgII8YnI+PC9oND4nKTtcXFxcbiAgICB9XFxcXG4gICAgXFxcXG4gICAgdmFyIGJveERhdGEgPSBbXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWlhyDlpYdcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcInF5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MucXksXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIumFtyDphbdcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcInlrXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MueWssXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuiFviDohb5cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcInR4XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MudHgsXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuaenCDmnpxcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcIm1nXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MubWcsXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWTqSDlk6lcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcImJsXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MuYmwsXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWFtiDku5ZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcIm90aFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLm90aCxcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5YWoIOWxgFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwicWp1XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MucWp1LFxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmj5Ig5Lu2XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXCJjalxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLmNqLFxcXFxuICAgICAgICB9XFxcXG4gICAgXTtcXFxcblxcXFxuICAgIHZhciBpbnB1dEJveCA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGJveERhdGEubGVuZ3RoOyBpKyspe1xcXFxuICAgICAgICBsZXQgYiA9IGJveERhdGFbaV07XFxcXG4gICAgICAgIGlucHV0Qm94ICs9ICc8ZGl2IGNsYXNzPVxcXFxcXFwiYm94IGJhclxcXFxcXFwiPlxcXFxcXFxcXFxcXG4gICAgICAgICAgICA8Zm9ybT5cXFxcXFxcXFxcXFxuICAgICAgICAgICAgICAgIDxsYWJlbCB0eXBlPVxcXFxcXFwic3VibWl0XFxcXFxcXCI+JyArIGIudGl0bGUgKyAnPC9sYWJlbD5cXFxcXFxcXFxcXFxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXFxcXFwidGV4dFxcXFxcXFwiIHBsYWNlaG9sZGVyPVxcXFxcXFwi6L6T5YWl6Kej5p6Q5ZCN5oiW6ICFVVJMLi4uLi4uXFxcXFxcXCIgdmFsdWU9XFxcXFxcXCInICsgYi52YWx1ZSArICdcXFxcXFxcIiBpZD1cXFxcXFxcIicgKyBiLmlkICsgJ1xcXFxcXFwiPlxcXFxcXFxcXFxcXG4gICAgICAgICAgICA8L2Zvcm0+XFxcXFxcXFxcXFxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcXFxcXCJsaWViXFxcXFxcXCI+XFxcXFxcXFxcXFxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVxcXFxcXFwiJyArIGIuaWQgKyAnU2VsZWN0XFxcXFxcXCI+4piwPC9idXR0b24+XFxcXFxcXFxcXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxcXFxcXFxcXG4gICAgICAgIDwvZGl2Pic7XFxcXG4gICAgfVxcXFxuICAgIERpZChcXFxcXFxcImRpdjJcXFxcXFxcIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsIGlucHV0Qm94KTtcXFxcbiAgICBEaWQoXFxcXFxcXCJjalxcXFxcXFwiKS5wbGFjZWhvbGRlciA9IFxcXFxcXFwi6L6T5YWl5o+S5Lu25Zyw5Z2ALi4uLi4uXFxcXFxcXCI7XFxcXG4gICAgRGlkKFxcXFxcXFwicWp1XFxcXFxcXCIpLnBsYWNlaG9sZGVyID0gXFxcXFxcXCLmraTpobnlu7rorq7nlZnnqbrmiJbogIXloavpu5jorqTkuKTkuKrlrZdcXFxcXFxcIjtcXFxcbiAgICBcXFxcbiAgICBuZXcgVnVlKHtcXFxcbiAgICAgICAgZWw6IFxcXFxcXFwiLnpqLWRpdlxcXFxcXFwiLFxcXFxuICAgICAgICBkYXRhOiB7XFxcXG4gICAgICAgICAgICBqeERhdGE6IG15U2VsZWN0LFxcXFxuICAgICAgICAgICAgY2pEYXRhOiBbXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcXFxcXCIsIFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2pzL3NyY2F1dG8uanNcXFxcXFxcIiwgXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL1BhcnNlLVYyX0RuLmpzXFxcXFxcXCJdXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcblxcXFxuICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xcXFxuICAgICAgICB2YXIgbGVuID0gJCgnLmp4LXVsJykuY2hpbGRyZW4oJ2xpJykubGVuZ3RoO1xcXFxuICAgICAgICB2YXIgbGVuMiA9ICQoJy5jai11bCcpLmNoaWxkcmVuKCdsaScpLmxlbmd0aDtcXFxcbiAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykuY2xpY2soZnVuY3Rpb24oZSkge1xcXFxuICAgICAgICAgICAgaWYoJCgnLmxpZWIgYnV0dG9uJykudGV4dCgpLmluY2x1ZGVzKCfilIEnKSl7XFxcXG4gICAgICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykuY3NzKCdiYWNrZ3JvdW5kJywgJycpO1xcXFxuICAgICAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLnRleHQoJ+KYsCcpO1xcXFxuICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgJCh0aGlzKS50ZXh0KCfilIEnKTtcXFxcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcygnYmFja2dyb3VuZCcsICdyZWQnKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICQoJ2xpJykuYXR0cignY2hlY2snLCAnZmFsc2UnKTtcXFxcbiAgICAgICAgICAgIHZhciBpbnB1dGlkID0gXFxcXFxcXCIjXFxcXFxcXCIgKyB0aGlzLmlkLnNwbGl0KFxcXFxcXFwiU2VsZWN0XFxcXFxcXCIpWzBdO1xcXFxuICAgICAgICAgICAgdmFyIGFyciA9ICQoaW5wdXRpZCkudmFsKCkuc3BsaXQoJywnKTtcXFxcbiAgICAgICAgICAgIGFyciA9IGFyclswXSA9PSAnJyA/IFtdIDogYXJyO1xcXFxuICAgICAgICAgICAgJCgnLm15Q2hvaWNlJykudGV4dChhcnIpO1xcXFxuICAgICAgICAgICAgaWYgKGlucHV0aWQgIT09ICcjY2onICYmICQoJy5jai11bCcpLmNzcygnZGlzcGxheScpPT0nbm9uZScpIHtcXFxcbiAgICAgICAgICAgICAgICAkKCcuangtdWwnKS5zbGlkZVRvZ2dsZSgzMDApO1xcXFxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XFxcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsZW47IGkrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIganhMaXN0ID0gJCgnLmp4LXVsIGxpOm5vdCgubXlDaG9pY2UpJykuZXEoaSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnIuaW5jbHVkZXMoanhMaXN0LnRleHQoKSkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4TGlzdC5hdHRyKCdjaGVjaycsICd0cnVlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAganhMaXN0LnVuYmluZCgnY2xpY2snKS5jbGljayhmdW5jdGlvbihlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignY2hlY2snKSAhPT0gXFxcXFxcXCJ0cnVlXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIudW5zaGlmdCgkKHRoaXMpLnRleHQoKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoYXJyKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcubXlDaG9pY2UnKS50ZXh0KGFycik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignY2hlY2snLCAnZmFsc2UnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGFyci5sZW5ndGg7IGErKykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyW2FdID09ICQodGhpcykudGV4dCgpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGEsIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoYXJyKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5teUNob2ljZScpLnRleHQoYXJyKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYoJCgnLmp4LXVsJykuY3NzKCdkaXNwbGF5Jyk9PSdub25lJyl7XFxcXG4gICAgICAgICAgICAgICAgJCgnLmNqLXVsJykuc2xpZGVUb2dnbGUoMjAwKTtcXFxcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcXFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBjakxpc3QgPSAkKCcuY2otdWwgbGknKS5lcShpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQoaW5wdXRpZCkudmFsKCkgPT0gY2pMaXN0LnRleHQoKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2pMaXN0LmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBjakxpc3QudW5iaW5kKCdjbGljaycpLmNsaWNrKGZ1bmN0aW9uKCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbCgkKHRoaXMpLnRleHQoKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdjaGVjaycsICd0cnVlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5zaWJsaW5ncygpLmF0dHIoJ2NoZWNrJywgJ2ZhbHNlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgJChkb2N1bWVudCkubm90KCQoJy54bExpc3QnKSkuY2xpY2soZnVuY3Rpb24oZSkge1xcXFxuICAgICAgICAgICAgJCgnLmp4LXVsJykuc2xpZGVVcCgpO1xcXFxuICAgICAgICAgICAgJCgnLmNqLXVsJykuc2xpZGVVcCgpO1xcXFxuICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykudGV4dCgn4piwJyk7XFxcXG4gICAgICAgICAgICAkKCcubGllYiBidXR0b24nKS5jc3MoJ2JhY2tncm91bmQnLCAnJyk7XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICAkKGZ1bmN0aW9uKCl7XFxcXG4gICAgICAgICAgICAkKCdsYWJlbCcpLm1vdXNldXAoZnVuY3Rpb24oKXtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRpZCA9ICcjJyArICQodGhpcykubmV4dCgpLmF0dHIoJ2lkJyk7XFxcXG4gICAgICAgICAgICAgICAgb25lT3JEYmwoaW5wdXRpZCk7XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XFxcXG4gICAgICAgICAgICB2YXIgdGltZXI7XFxcXG4gICAgICAgICAgICBmdW5jdGlvbiBvbmVPckRibChpbnB1dGlkKXtcXFxcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xcXFxuICAgICAgICAgICAgICAgIHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoY291bnQgPT0gMSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gJChpbnB1dGlkKS52YWwoKS5zcGxpdCgnLCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZSgwLCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKGFycik7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoJycpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpO1xcXFxuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDA7XFxcXG4gICAgICAgICAgICAgICAgfSwyNjApXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSk7XFxcXG4gICAgXFxcXG4gICAgZnVuY3Rpb24gVG9hc3QobXNnLGR1cmF0aW9uKXsgIFxcXFxuICAgICAgICBkdXJhdGlvbj1pc05hTihkdXJhdGlvbik/MjAwMDpkdXJhdGlvbjsgIFxcXFxuICAgICAgICB2YXIgbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyAgXFxcXG4gICAgICAgIG0uaW5uZXJIVE1MID0gbXNnOyAgXFxcXG4gICAgICAgIG0uc3R5bGUuY3NzVGV4dD1cXFxcXFxcIndpZHRoOjQ1JTsgbWluLXdpZHRoOjE1MHB4OyBiYWNrZ3JvdW5kOiMzMTE7IG9wYWNpdHk6MC42OyBoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OiA0NXB4OyBjb2xvcjojZmZmOyBsaW5lLWhlaWdodDo0NXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyLXJhZGl1czoxMHB4OyBwb3NpdGlvbjpmaXhlZDsgdG9wOjYwJTsgbGVmdDoyNiU7IHotaW5kZXg6OTk5OTk5O1xcXFxcXFwiOyAgXFxcXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSk7ICBcXFxcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgIFxcXFxuICAgICAgICAgICAgdmFyIGQgPSAwLjU7ICBcXFxcbiAgICAgICAgICAgIG0uc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgZCArICdzIGVhc2UtaW4sIG9wYWNpdHkgJyArIGQgKyAncyBlYXNlLWluJzsgIFxcXFxuICAgICAgICAgICAgbS5zdHlsZS5vcGFjaXR5ID0gJzAnOyAgXFxcXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG0pIH0sIGQgKiAxMDAwKTsgIFxcXFxuICAgICAgICB9LCBkdXJhdGlvbik7ICBcXFxcbiAgICB9ICBcXFxcblxcXFxuICAgIGZ1bmN0aW9uIG9wZW5EblBhZ2UoKXtcXFxcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgcnVsZTogXFxcXFxcXCI9Xl9ePVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi566h55CG6Kej5p6QXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBmaW5kUnVsZTogXFxcXFxcXCJqczp0aGlzLmQ9W107ZXZhbChmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9maWxlTGlua3PhtLDigb8udHh0JykpO3JlcXVpcmUoZkxpbmtzLmp4SXRVcmwpO2p4SXRlbS5qeExpc3QoKTtzZXRSZXN1bHQoZClcXFxcXFxcIlxcXFxuICAgICAgICB9KSk7XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpe1xcXFxuICAgICAgICBpZihteVNldD09Jycpe1xcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC53cml0ZUZpbGUob2xkUm91dGUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCA0KSk7XFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAuYmFjayhmYWxzZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gY2xpY2ttZShtc2csZHVyYXRpb24sdGl0bGUpe1xcXFxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgYm94RGF0YS5sZW5ndGg7IGkrKyl7XFxcXG4gICAgICAgICAgICBsZXQgaWQgPSBib3hEYXRhW2ldLmlkO1xcXFxuICAgICAgICAgICAgc2V0dGluZ3NbaWRdID0gRGlkKGlkKS52YWx1ZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZihzZXR0aW5ncy5xanUgPT0gJycpe1xcXFxuICAgICAgICAgICAgc2V0dGluZ3MucWp1ID0gJ+m7mOiupCc7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdHJ5e1xcXFxuICAgICAgICAgICAgZXZhbCgndmFyIGJjQ29uZmlnPScgKyBmeV9icmlkZ2VfYXBwLmZldGNoKG5ld1JvdXRlKSk7XFxcXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGJjQ29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShuZXdSb3V0ZSwgJCQkLnN0cmluZ2lmeShiY0NvbmZpZykpO1xcXFxuICAgICAgICB9Y2F0Y2goZSl7fVxcXFxuICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShvbGRSb3V0ZSwgJCQkLnN0cmluZ2lmeShzZXR0aW5ncykpO1xcXFxuICAgICAgICAgICAgXFxcXG4gICAgICAgIFRvYXN0KG1zZyxkdXJhdGlvbik7XFxcXG4gICAgICAgIGlmKHRpdGxlPT1cXFxcXFxcIuWFs1xcXFxcXFwiKXtcXFxcbiAgICAgICAgICAgIGlmKHNmUmVmcmVzaCAhPSBEaWQoXFxcXFxcXCJjalxcXFxcXFwiKS52YWx1ZSl7XFxcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5iYWNrKCk7XFxcXG4gICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLmJhY2soZmFsc2UpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG5cXFxcbjwvc2NyaXB0PiAgIFxcXFxuPC9odG1sPlxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIlBhcnNlX0RuLmpzXFxcIixcXFwicGF0aFxcXCI6XFxcIlBhcnNlX0RuLmpzXFxcIixcXFwicnVsZVxcXCI6XFxcIi8vPT09PT09PT09PT095YWN5ZeF6LCD55SoPT09PT09PT09PT09XFxcXG4vL++8je+8je+8jT1eX149XFxcXG52YXIgdmVyc2lvbiA9IFxcXFxcXFwiMy41LjI5XFxcXFxcXCI7XFxcXG5cXFxcbnZhciBwYXJzZVJvdXRlID0gJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJztcXFxcbnZhciBNeVBhcnNlUyA9IHt9O1xcXFxudmFyIG15U2V0ID0ge307XFxcXG5pZiAoZmlsZUV4aXN0KHBhcnNlUm91dGUpKSB7XFxcXG4gICAgZXZhbCgndmFyIHBhcnNlRmlsZSA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcbiAgICBNeVBhcnNlUyA9IHBhcnNlRmlsZS5jb2RlcztcXFxcbiAgICBteVNldCA9IHBhcnNlRmlsZS5zZXR0aW5ncztcXFxcbn1cXFxcbnZhciBwYXJzZVRpdGxlID0gW1xcXFxuICAgIFxcXFxcXFwi8J+lmlxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwieXVuMTcxN1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiUGFuR3VcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcIkZ1WGluZ1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiaHR0cHM6Ly9qeHguc215czguY24vaW5kZXgucGhwP3VybD1cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImh0dHBzOi8vb2tqeC5jYy8/dXJsPVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJodHRwczovL3NiLjVnc2VvLm5ldC8/dXJsPVxcXFxcXFwiXFxcXG5dO1xcXFxuXFxcXG4vL++8je+8je+8jT1eX149XFxcXG5cXFxcbi8v5o6l5Y+j6K6+572uLlxcXFxuXFxcXG52YXIgc2V0VXJsID0gXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107cmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO1JvdXRlLnNldFBhcnNlKCk7c2V0UmVzdWx0KGQpO1xcXFxcXFwiO1xcXFxudmFyIHNldF9zd2l0Y2ggPSBzZXRVcmw7XFxcXG52YXIgbGF6eSA9IGByZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L1JvdXRlLmpzJyk7YXl0bVBhcnNlKGlucHV0KWA7XFxcXG5cXFxcbi8vdmFyIHBhcndpeCA9IGB2YXIgeXVybD0naHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi8/dXJsPSc7UmVmZXJlcic6ICdodHRwczovL3d3dy5tYXlpeGlvbmdkaS5jbi95cz9pZD0nOydodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuL2FwaS5waHAnLCAnUmVmZXJlcic6J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24nO1xcXFxuLy8g5YWo5rCRaHR0cHM6Ly9wY3ZpZGVvYWxpeXVuLnRpYW5zaGFuZ3JlbmppYW4ubWd0di5jb20uODh3dW1hLmNvbS8/dXJsPVxcXFxuXFxcXG4vL++8je+8je+8jeWkhyDnlKjvvI3vvI3vvI1cXFxcbi8qXFxcXG4gKiDlvbHop4blt6XlnLrvvJogaHR0cHM6Ly95c2djLmNjL1xcXFxuICog5rGf5rmWOiA1NTXnlLXlvbEgaHR0cHM6Ly93d3cuNTU1ZHkyLmNvbS9waG9uZS5odG1sIO+9nCAxN+eciyBodHRwOi8vMTdrYW55eS5jbi8gaHR0cDovL2poamlleGkuMzB2ci5jbi8/dXJsPSDvvZwgaHR0cDovL2FwaS5tYWl6aW1hbGwuY29tL2luZGV4LnBocD91cmw9XFxcXG4gKiDmsZ/muZY6IGh0dHA6Ly93d3cudGlhbnNodXl1bi5uZXQvaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzQ0ODM3Ny9zaWQvMS9uaWQvMS5odG1sXFxcXG4gKiDmsZ/muZYyOiBodHRwOi8vOThoeWsuY24vaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzcyODQxL3NpZC8xL25pZC8xLmh0bWxcXFxcbiAqIOS6uuS6uui/tzogaHR0cHM6Ly92aXAuc3Vzb3UudHYvcGxheWVyLz91cmw9IO+9nCBodHRwczovL3d3dy5tb21kbS5jYy9cXFxcbiAqIFxcXFxuICogd3VpZ2VuOiBodHRwczovL3d3dy41aWdlbi5jb20vZG1wbGF5ZXIvcGxheWVyLz91cmw9XFxcXG4gKiDlubLppa0o5Lq65Lq66L+3KTogaHR0cHM6Ly9qeC56dWkuY20vP3VybD1cXFxcbiAqIGh0dHBzOi8vMi42Nm1vdmllLnRvcC9wbGF5ZXIvP3VybD1cXFxcbiAqIFxcXFxuICovXFxcXG5cXFxcblxcXFxudmFyIHRvb2xzID0ge1xcXFxuICAgIE1ENTogZnVuY3Rpb24oZGF0YSkge1xcXFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcXFxuICAgICAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KGRhdGEpLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpO1xcXFxuICAgIH0sXFxcXG4gICAgQUVTOiBmdW5jdGlvbih0ZXh0LCBrZXksIGl2LCBpc0VuY3J5cHQpIHtcXFxcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXFxcbiAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGtleSk7XFxcXG4gICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGl2KTtcXFxcbiAgICAgICAgaWYgKGlzRW5jcnlwdCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KHRleHQsIGtleSwge1xcXFxuICAgICAgICAgICAgICAgIGl2OiBpdixcXFxcbiAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXFxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXFxcbiAgICAgICAgICAgIH0pLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh0ZXh0LCBrZXksIHtcXFxcbiAgICAgICAgICAgIGl2OiBpdixcXFxcbiAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxcXG4gICAgfSxcXFxcbiAgICAvL2FzY2lpXFxcXG4gICAgbmV4dENoYXJhY3RlcjogZnVuY3Rpb24oYXNjaWlWYWx1ZSwgaykge1xcXFxuICAgICAgICB2YXIgcyA9IGFzY2lpVmFsdWU7XFxcXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHMgKyBrKTtcXFxcbiAgICB9LFxcXFxuICAgIC8v5Yev5pKSXFxcXG4gICAgY2Flc2FyQ2lwaGVyOiBmdW5jdGlvbihzdHJpbmdWYWx1ZSwgaykge1xcXFxuICAgICAgICB2YXIgbmV3U3RyaW5nID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmdWYWx1ZS5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgbmV3U3RyaW5nICs9IHRoaXMubmV4dENoYXJhY3RlcihzdHJpbmdWYWx1ZVtpXS5jaGFyQ29kZUF0KCksIGspO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBuZXdTdHJpbmc7XFxcXG4gICAgfSxcXFxcbiAgICBoYW5kbGVVcmw6IGZ1bmN0aW9uKHVybCwgdmlwVXJsLCBuYW1lKSB7XFxcXG4gICAgICAgIGlmKHVybCA9PSBcXFxcXFxcIlxcXFxcXFwiIHx8IHVybCA9PSB2aXBVcmwpIHtcXFxcbiAgICAgICAgICAgIGxvZyhuYW1lICsgXFxcXFxcXCLop6PmnpDlpLHotKVcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICByZXR1cm4gdmlwVXJsO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICh1cmxbMF0gPT0gJy8nKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAodXJsLmluZGV4T2YoJz1odHRwJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgIHVybCA9IHVybC5pbmRleE9mKCcmdXJsPScpID4gLTEgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAodmlwVXJsLmluZGV4T2YoJ21ndHYuY29tJykgIT0gLTEgJiYgdXJsLmluZGV4T2YoJ1VzZXItQWdlbnQnKSA9PSAtMSkge1xcXFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7VXNlci1BZ2VudEBhcHB9JztcXFxcbiAgICAgICAgfSBlbHNlIGlmICh1cmwuaW5kZXhPZignLmZsdicpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tVc2VyLUFnZW50QGFwcCYmUmVmZXJlckAnICsgdmlwVXJsICsgJ30nO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcXFxuICAgIH1cXFxcbn07XFxcXG5cXFxcbnZhciBQYXJzZVMgPSB7fTtcXFxcbnZhciBvcmlnaW5hbFBhcnNlUyA9IHtcXFxcbiAgICBDaXR5SVA6ICdodHRwOi8vcHYuc29odS5jb20vY2l0eWpzb24nLFxcXFxuICAgIHBjVUE6ICdVc2VyLUFnZW50QE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjBcXFxcXFxcXO+8m1xcXFxcXFxc77ybIFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNDkuMC4yNjIzLjg3IFNhZmFyaS81MzcuMzYnLFxcXFxuICAgIGNhY2hlTTN1ODogZnVuY3Rpb24odlVybCwgcmVmKSB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB2YXIgbTN1OCA9IGZldGNoKHZVcmwsIHt9KTtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS92aWRlb3MubTN1OCcsIG0zdTgpO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgICAgICByZXR1cm4gJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL3ZpZGVvcy5tM3U4Iyc7XFxcXG4gICAgfSxcXFxcbiAgICBkZWZhdWx0UGFyc2U6IGZ1bmN0aW9uKHVybCkge1xcXFxuICAgICAgICByZXR1cm4gdXJsO1xcXFxuICAgIH0sXFxcXG4gICAgbWFvc3M6IGZ1bmN0aW9uKGp4dXJsLCByZWYsIGtleSkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgdmFyIGdldFZpZGVvSW5mbyA9IGZ1bmN0aW9uKHRleHQpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9vbHMuQUVTKHRleHQsIGtleSwgaXYpO1xcXFxuICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgICAgIGlmIChyZWYpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3Qoanh1cmwsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3Qoanh1cmwpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignJmJ0d2FmPScpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3Qoanh1cmwgKyAnJmJ0d2FmJyArIGh0bWwubWF0Y2goLyZidHdhZiguKj8pXFxcXFxcXCIvKVsxXSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZlxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHZhciBpdiA9IGh0bWwuc3BsaXQoJ190b2tlbiA9IFxcXFxcXFwiJylbMV0uc3BsaXQoJ1xcXFxcXFwiJylbMF07XFxcXG4gICAgICAgICAgICBldmFsKGh0bWwubWF0Y2goL3ZhciBjb25maWcgPSB7W1xcXFxcXFxcc1xcXFxcXFxcU10qP30vKVswXSArICcnKTtcXFxcbiAgICAgICAgICAgIGlmIChjb25maWcudXJsLnNsaWNlKDAsIDQpICE9ICdodHRwJykge1xcXFxuICAgICAgICAgICAgICAgIGNvbmZpZy51cmwgPSBkZWNvZGVVUklDb21wb25lbnQodG9vbHMuQUVTKGNvbmZpZy51cmwsIFxcXFxcXFwiZHZ5WVJRbG5QUkNNZFFTZVxcXFxcXFwiLCBpdikpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmw7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgTExROiBmdW5jdGlvbihqeHVybCkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgdmFyIGFwaSA9IGp4dXJsLnNwbGl0KCc/dXJsPScpWzBdICsgXFxcXFxcXCJhcGkucGhwXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB2YXIgYjY0aWQgPSBiYXNlNjRFbmNvZGUoanh1cmwuc3BsaXQoJ3VybD0nKVsxXSk7XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VpZCA9IHRvb2xzLmNhZXNhckNpcGhlcihiNjRpZCwgLTEpO1xcXFxuICAgICAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IGp4dXJsXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyBwYXJzZWlkXFxcXG4gICAgICAgICAgICB9KSk7XFxcXG4gICAgICAgICAgICB1cmwgPSAoanNvbi5jb2RlID09IDIwMCA/IGJhc2U2NERlY29kZSh0b29scy5jYWVzYXJDaXBoZXIoanNvbi51cmwsIC0xKSkgOiAnJyk7XFxcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIFBhbkd1OiBmdW5jdGlvbih2aXBVcmwsIGRhdGEpIHtcXFxcbiAgICAgICAgLyp2YXIgcmVmID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tLyc7XFxcXG4gICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvP3VybD0nICsgdmlwVXJsO1xcXFxuICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9qaWV4aS9hcGkucGhwJztcXFxcbiAgICAgICAgKi9cXFxcbiAgICAgICAgLy92YXIgcmVmID0gJ2h0dHBzOi8veG15c3R2LmNvbS8nO1xcXFxuICAgICAgICAvL3ZhciBwYXJzZSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvaW5kZXgucGhwP3VybD0nICsgdGFpbFVybDtcXFxcbiAgICAgICAgLy92YXIgYXBpID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9hcGkucGhwJztcXFxcbiAgICAgICAgdmFyIHBhcnNlID0gXFxcXFxcXCJodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS9wYW5ndS8/dXJsPVxcXFxcXFwiICsgdmlwVXJsO1xcXFxuICAgICAgICB2YXIgYXBpID0gXFxcXFxcXCJodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvcGFuZ3UyMDIxL2FwaS5waHBcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKGRhdGEpIHtcXFxcbiAgICAgICAgICAgIHJlZiA9IGRhdGFbMF07XFxcXG4gICAgICAgICAgICBwYXJzZSA9IGRhdGFbMV07XFxcXG4gICAgICAgICAgICBhcGkgPSBkYXRhWzJdO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciBUaW1lID0gKE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAqIDEpLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgIHZhciBqc29uID0gcmVxdWVzdChhcGksIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogcGFyc2VcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBib2R5OiBcXFxcXFxcInVybD1cXFxcXFxcIiArIHZpcFVybCArIFxcXFxcXFwiJnJlZmVyZXI9XFxcXFxcXCIgKyBiYXNlNjRFbmNvZGUocGFyc2UpICsgXFxcXFxcXCImcmVmPTEmdGltZT1cXFxcXFxcIiArIFRpbWUgKyBcXFxcXFxcIiZ0eXBlPSZvdGhlcj1cXFxcXFxcIiArIGJhc2U2NEVuY29kZSh2aXBVcmwpICsgXFxcXFxcXCImaW9zPTBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIG1ldGhvZDogXFxcXFxcXCJQT1NUXFxcXFxcXCJcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIHZhciB1cmwgPSBqc29uWzBdID09IFxcXFxcXFwie1xcXFxcXFwiID8gSlNPTi5wYXJzZShqc29uKS51cmwgOiBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICByZXR1cm4gdXJsO1xcXFxuICAgIH0sXFxcXG4gICAgeXVuMTcxNzogZnVuY3Rpb24odmlwVXJsKSB7XFxcXG4gICAgICAgIHZhciBpc3lrID0gdmlwVXJsLmluZGV4T2YoJ3lvdWt1Jyk7XFxcXG4gICAgICAgIHZhciByZWYgPSBcXFxcXFxcImh0dHBzOi8vd3d3LjE3MTd5dW4uY29tL2p4L3R5LnBocD91cmw9XFxcXFxcXCIgKyB2aXBVcmw7XFxcXG4gICAgICAgIHZhciBwYXJzZSA9IFxcXFxcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMDgyOC8/dXJsPVxcXFxcXFwiICsgdmlwVXJsO1xcXFxuICAgICAgICB2YXIgYXBpID0gXFxcXFxcXCJodHRwczovLzE3MTd5dW4uY29tLnpoMTg4Lm5ldC8xMDA0Ly4uaW5kZXguLnBocFxcXFxcXFwiO1xcXFxuICAgICAgICByZXR1cm4gaXN5ayA9PSAtMSA/IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSkgOiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiArICcsdmlwOicsIHBhcnNlICsgJyx2aXA6JywgYXBpXSk7XFxcXG4gICAgfSxcXFxcbiAgICBGdVhpbmc6IGZ1bmN0aW9uKHZpcFVybCkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgLy9pZih2aXBVcmwuaW5kZXhPZigndi55b3VrdScpIT0tMSl7XFxcXG4gICAgICAgICAgICAvLyAgICB2aXBVcmwgPSAoSlNPTi5wYXJzZShyZXF1ZXN0KHZpcFVybCwge3JlZGlyZWN0OmZhbHNlLCB3aXRoSGVhZGVyczp0cnVlfSkpLmhlYWRlcnMubG9jYXRpb24gKyAnJykucmVwbGFjZSgvXFxcXFxcXFw/LiovLCcnKTtcXFxcbiAgICAgICAgICAgIC8vfVxcXFxuICAgICAgICAgICAgdmFyIHJlZiA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpLz91cmw9JyArIHZpcFVybDtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZSA9IHJlZjtcXFxcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS9hcGl1X2Z4LnBocCc7XFxcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKTtcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICBcXFxcXFxcIvCfpZpcXFxcXFxcIjogZnVuY3Rpb24odmlwVXJsKSB7XFxcXG4gICAgICAgIGxldCDkvZzogIVf6KeG55WM55+l5ZCN5aSn5L2sO1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgZXZhbChmZXRjaChcXFxcXFxcImh0dHA6Ly9xMTYuMjJ3ZWIub3JnL2Flcy5qc1xcXFxcXFwiKSk7XFxcXG4gICAgICAgICAgICB2YXIgdXJsID0gcGRmaChmZXRjaChcXFxcXFxcImh0dHA6Ly9xMTYuMjJ3ZWIub3JnL2FwaS5waHBcXFxcXFxcIiksIFxcXFxcXFwiYm9keSYmc2NyaXB0LDEmJkh0bWxcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBldmFsKHVybC5yZXBsYWNlKFxcXFxcXFwiZG9jdW1lbnQuXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLnJlcGxhY2UoXFxcXFxcXCJsb2NhdGlvbi5cXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgdmFyIHBsYXkgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cDovL3ExNi4yMndlYi5vcmcvYXBpLnBocFxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWUuc3BsaXQoXFxcXFxcXCI7XFxcXFxcXCIpWzBdXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiBcXFxcXFxcInVybD1cXFxcXFxcIiArIGlucHV0LFxcXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogXFxcXFxcXCJQT1NUXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0pKS51cmw7XFxcXG4gICAgICAgICAgICBpZiAocGxheS5zdGFydHNXaXRoKFxcXFxcXFwiL1xcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImh0dHBzOlxcXFxcXFwiICsgcGxheTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBsYXk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuXFxcXG59O1xcXFxuXFxcXG5PYmplY3QuYXNzaWduKFBhcnNlUywgb3JpZ2luYWxQYXJzZVMsIE15UGFyc2VTKTtcXFxcbi8v6KaG55uW6aG65bqP77yM56ys5LiJ5Liq6KaG55uW56ys5LqM5Liq54S25ZCO6KaG55uW56ys5LiA5LiqXFxcXG5cXFxcblxcXFxuZnVuY3Rpb24gYXl0bVBhcnNlKHZpcFVybCwgcGFyc2VOYW1lKSB7XFxcXG4gICAgdGhpcy5yZXF1ZXN0ID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEsIHBhcmFtMikge1xcXFxuICAgICAgICBwYXJhbTEgPSBwYXJhbTEgPT0gdW5kZWZpbmVkID8ge30gOiBwYXJhbTE7XFxcXG4gICAgICAgIGlmKGlzTmFOKHBhcmFtMS50aW1lb3V0KSkge1xcXFxuICAgICAgICAgICAgcGFyYW0xLnRpbWVvdXQgPSAzMDAwO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEU7XFxcXG4gICAgICAgIHZhciByZXRTdHIgPSBtZXRob2RfcmVxdWVzdC5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIpO1xcXFxuICAgICAgICByZXR1cm4gcmV0U3RyID09IG51bGwgPyByZXRTdHIgOiByZXRTdHIgKyBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIH07XFxcXG4gICAgdGhpcy5mZXRjaCA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIpIHtcXFxcbiAgICAgICAgcGFyYW0xID0gcGFyYW0xID09IHVuZGVmaW5lZCA/IHt9IDogcGFyYW0xO1xcXFxuICAgICAgICBwYXJhbTEuaGVhZGVycyA9IHBhcmFtMS5oZWFkZXJzID09IHVuZGVmaW5lZCA/IHt9IDogcGFyYW0xLmhlYWRlcnM7XFxcXG4gICAgICAgIHBhcmFtMS5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBQQ19VQTtcXFxcbiAgICAgICAgaWYoaXNOYU4ocGFyYW0xLnRpbWVvdXQpKSB7XFxcXG4gICAgICAgICAgICBwYXJhbTEudGltZW91dCA9IDMwMDA7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRTtcXFxcbiAgICAgICAgdmFyIHJldFN0ciA9IG1ldGhvZF9mZXRjaC5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIpO1xcXFxuICAgICAgICByZXR1cm4gcmV0U3RyID09IG51bGwgPyByZXRTdHIgOiByZXRTdHIgKyBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIH07XFxcXG4gICAgdmFyIGhvc3QgPSB2aXBVcmwubWF0Y2goL1xcXFxcXFxcLiguKj8pXFxcXFxcXFwvLyk7XFxcXG4gICAgaG9zdCA9IGhvc3QgPT0gbnVsbCA/IG51bGwgOiBob3N0WzFdO1xcXFxuICAgIHZhciBub1VybCA9IFxcXFxcXFwidG9hc3Q6Ly/mjqXmlLbliLDnmoTpk77mjqXkuLo6IFxcXFxcXFwiO1xcXFxuICAgIHN3aXRjaCAobXlTZXQucWp1KSB7XFxcXG4gICAgICAgIGNhc2UgXFxcXFxcXCLpu5jorqRcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgIHN3aXRjaCAoaG9zdCkge1xcXFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJxcS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQudHg7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJpcWl5aS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucXk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJ5b3VrdS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJtZ3R2LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5tZztcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImJpbGliaWxpLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5ibDtcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gaG9zdCA9PSBudWxsID8gbm9VcmwgOiBteVNldC5vdGg7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICAgICBzdHIgPSBob3N0ID09IG51bGwgPyBub1VybCA6IG15U2V0LnFqdTtcXFxcbiAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgIH1cXFxcbiAgICBpZiAocGFyc2VOYW1lKSB7XFxcXG4gICAgICAgIHN0ciA9IHBhcnNlTmFtZTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IG15Q2hvaWNlID0gc3RyLnNwbGl0KCcsJyk7XFxcXG4gICAgbGV0IGxlbiA9IG15Q2hvaWNlLmxlbmd0aDtcXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XFxcXG4gICAgICAgIGxldCBuYW1lID0gbXlDaG9pY2VbaV07XFxcXG4gICAgICAgIGlmICh0eXBlb2YgUGFyc2VTW25hbWVdID09ICdmdW5jdGlvbicpIHtcXFxcbiAgICAgICAgICAgIGxldCB1cmwgPSBQYXJzZVNbbmFtZV0odmlwVXJsKTtcXFxcbiAgICAgICAgICAgIGxldCBSZWcgPSBuZXcgUmVnRXhwKFxcXFxcXFwibTN1OHxtcDR8XFxcXFxcXCIgKyB2aXBVcmwgKyBcXFxcXFxcInxodHRwXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgaWYgKGkgIT0gbGVuIC0gMSAmJiAhUmVnLnRlc3QodXJsKSkge1xcXFxuICAgICAgICAgICAgICAgIGxvZyhuYW1lICsgJ+ino+aekOWksei0pScpO1xcXFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIHRvb2xzLmhhbmRsZVVybCh1cmwsIHZpcFVybCwgbmFtZSk7XFxcXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIFBhcnNlU1tuYW1lXSA9PSAnc3RyaW5nJykge1xcXFxuICAgICAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2UoUGFyc2VTW25hbWVdICsgdmlwVXJsLCB0b29scy5oYW5kbGVVcmwsIG5hbWUpO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDAsIDQpID09IFxcXFxcXFwiaHR0cFxcXFxcXFwiIHx8IGhvc3QgPT0gbnVsbCA/IG5hbWUgKyB2aXBVcmwgOiBcXFxcXFxcInRvYXN0Oi8vXFxcXFxcXCIgKyBuYW1lICsgXFxcXFxcXCIg5LiN5piv55u06ZO+5Lmf5LiN5piv5YWN5ZeFXFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG59O1xcXFxuXFxcXG52YXIgcGxheVBhcnNlID0ge1xcXFxuICAgIHBsYXllcl94eDogZnVuY3Rpb24oanVybCwgTGFiZWwpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoanVybCkubGF6eVJ1bGUoKExhYmVsKSA9PiB7XFxcXG4gICAgICAgICAgICByZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L1JvdXRlLmpzJyk7XFxcXG4gICAgICAgICAgICB2YXIgZmEgPSBbJ2xldHYnLCAncHB0dicsICdxcScsICd5b3VrdScsICdxaXlpJywgJ2lxaXlpJywgJ21ndHYnLCAnYmlsaWJpbGknLCAnc29odScsICdtaWd1JywgJ20xOTA1JywgJ3ZpcCddO1xcXFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBwYXJzZURvbShyZXF1ZXN0KGlucHV0KSwgTGFiZWwpO1xcXFxuICAgICAgICAgICAgZXZhbChodG1sLnJlcGxhY2UoL3BsYXllcl8uKj89ey8sICdwZGF0YT17JykpO1xcXFxuICAgICAgICAgICAgaWYgKHBkYXRhLnVybC5zdWJzdHIoMCwgOCkubWF0Y2goL0pULi5KVC4uLykpIHtcXFxcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSBiYXNlNjREZWNvZGUocGRhdGEudXJsKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC8lLi4lLi4vKSkge1xcXFxuICAgICAgICAgICAgICAgIHBkYXRhLnVybCA9IHVuZXNjYXBlKHBkYXRhLnVybCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAoZmEuaW5jbHVkZXMocGRhdGEuZnJvbSkgPT0gdHJ1ZSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UocGRhdGEudXJsKTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBkYXRhLnVybCArICcjaXNWaWRlbz10cnVlIyc7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIExhYmVsKVxcXFxuICAgIH1cXFxcbn07XFxcXG5cXFxcbmZ1bmN0aW9uIHNldFBhcnNlKCkge1xcXFxuICAgIHRoaXMuZCA9IFtdO1xcXFxuICAgIHJlcXVpcmUoJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvUm91dGUuanMnKTtcXFxcbiAgICBSb3V0ZS5zZXRQYXJzZSgpO1xcXFxuICAgIHNldFJlc3VsdChkKTtcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLosIPnlKjot6/nlLFcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUm91dGVcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5yZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L1JvdXRlLmpzJyk7XFxcXG5zd2l0Y2ggKGdldFBhcmFtKFxcXFxcXFwidHlwZVxcXFxcXFwiKSkge1xcXFxuICAgIGNhc2UgXFxcXFxcXCLorr7nva5cXFxcXFxcIjpcXFxcbiAgICB0aGlzLmQgPSBbXTtcXFxcbiAgICAgICAgUm91dGUuc2V0UGFyc2UoKTtcXFxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlIFxcXFxcXFwi57yW6L6RXFxcXFxcXCI6XFxcXG4gICAgdGhpcy5kID0gW107XFxcXG4gICByZXF1aXJlKGZMaW5rcy5qeEl0VXJsKTtcXFxcbiAgIGp4SXRlbS5qeExpc3QoKTtcXFxcbiAgIHNldFJlc3VsdChkKTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICQuZXhwb3J0cyA9IFJvdXRlO1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcblxcXCJ9XVwifSIsInRpdGxlIjoi566h55CG6Kej5p6QIn0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement