Advertisement
xiaomianao666

邀您一起看:精排经.济.学.通.识.(第二版) 薛兆丰.epu...

Feb 17th, 2023
518
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥精排经.济.学.通.识.(第二版) 薛兆丰.epu...@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p+ino+aekFwiLFwicGF0aFwiOlwicFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5sZXQgdXJsID0gYmFzZTY0RGVjb2RlKGdldFBhcmFtKFxcXCJ1XFxcIikpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgdXJsOiB1cmwsXFxuICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICBkZXNjOiBcXFwiZmxvYXQmJjEwMCVcXFwiLFxcbiAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGNhbkJhY2s6IHRydWVcXG4gICAgfVxcbn0pO1xcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwi5pCc57Si5rWL6K+VXCIsXCJwYXRoXCI6XCJzXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgdXJsID0gYmFzZTY0RGVjb2RlKGdldFBhcmFtKFxcXCJ1XFxcIikpO1xcbmxvZyh1cmwpO1xcbmxldCBrZXkgPSBnZXRQYXJhbShcXFwia2V5XFxcIik7XFxubGV0IHNwID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3BcXFwiKTtcXG5zZXRSZXN1bHQoc3AodXJsLCBrZXksIFxcXCLmkJzntKLmtYvor5VcXFwiKSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLogZrlkIjmkJzntKJcIixcInBhdGhcIjpcInByb1wiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl5YWz6ZSu6K+N77yM5bC96YeP5bCR5a2X5LiN6KaB5aSa5a2XXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJzb3VcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic291XFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic291XFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJzb1xcXCIpO1xcbiAgICB9KSk7XFxufVxcblxcbmxldCBzID0gZ2V0TXlWYXIoXFxcInNvdVxcXCIsIFxcXCJcXFwiKTtcXG5sZXQgciA9IFxcXCJcXFwiO1xcbmlmIChzICE9IFxcXCJcXFwiKSB7XFxuICAgIGxldCBwID0gTVlfUEFHRTtcXG4gICAgbGV0IHtcXG4gICAgICAgIGxvYWRcXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgbGV0IHtcXG4gICAgICAgIHdyYXBcXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2xcXFwiKTtcXG4gICAgbGV0IGRhdGEgPSBsb2FkKHAsIHIgIT0gXFxcIlxcXCIgPyByIDogbnVsbCk7XFxuXFxuICAgIGxldCBwYWdlaWQgPSBNWV9SVUxFLnRpdGxlICsgXFxcIi1wYWdlXFxcIiArIHA7XFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLliqDovb3nrKxcXFwiICsgcCArIFxcXCLpobXkuK3vvIzov5vluqbvvJoxL1xcXCIgKyBkYXRhLmxlbmd0aCxcXG4gICAgICAgICAgICB1cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKTtcXG4gICAgbG9nKGRhdGEubGVuZ3RoKTtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICAgICAgLy/lpJrnur/nqIvliqDovb0gICAgICAgIFxcbiAgICAgICAgbGV0IHJlYWxQYWdlID0gXFxcIlxcXCIgPT0gciA/IDEgOiBwO1xcbiAgICAgICAgbGV0IHRhc2tzID0gZGF0YS5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHJ1bGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLmZpbmQocywgcmVhbFBhZ2UpO1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBwYXJhbTogaXQsXFxuICAgICAgICAgICAgICAgIGlkOiBcXFwicnVsZUBcXFwiICsgaXQubmFtZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgYmF0Y2hFeGVjdXRlKHRhc2tzLCB7XFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocGFyYW0sIGlkLCBlcnJvciwgcmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgIC8vbG9nKFxcXCJsaXN0ZW5lcjogXFxcIiArIChyZXN1bHQgfHwgW10pLmxlbmd0aClcXG4gICAgICAgICAgICAgICAgcGFyYW0uaSA9IHBhcmFtLmkgKyAxO1xcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5qID0gcGFyYW0uaiArIDE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1CZWZvcmUocGFnZWlkLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogd3JhcChpdC50aXRsZSwgcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBpdC5kZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC5waWNfdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGl0LnBpY191cmwgPyAnbW92aWVfMV92ZXJ0aWNhbF9waWMnIDogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogaXQuZXh0cmFcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcblxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbS5pID49IHBhcmFtLmFsbCkge1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShwYWdlaWQpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWKoOi9veesrFxcXCIgKyBNWV9QQUdFICsgXFxcIumhteS4re+8jOi/m+W6pu+8mlxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcIi9cXFwiICsgcGFyYW0uYWxsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgcGFyYW06IHtcXG4gICAgICAgICAgICAgICAgYWxsOiBkYXRhLmxlbmd0aCxcXG4gICAgICAgICAgICAgICAgaTogMCxcXG4gICAgICAgICAgICAgICAgajogLTFcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9XFxufSBlbHNlIHtcXG4gICAgbGV0IHtcXG4gICAgICAgIGxvYWRcXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgbGV0IGRhdGEgPSBsb2FkKC0xLCBudWxsKTtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkgeyAgICAgICBcXG4gICAgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL21hbmFnZVxcXCIpKGQsIGRhdGEubWFwKGl0ID0+IGl0Lm5hbWUpKTtcXG4gICAgICAgIGZvciAobGV0IGl0IG9mIGRhdGEpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXQubmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwic2VsZWN0Oi8vXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi6K+36YCJ5oup5pON5L2cXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbDogMSxcXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IFtcXFwi6K6/6Zeu6aaW6aG1XFxcIiwgXFxcIuaQnOe0ouatpOermVxcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi6K6/6Zeu6aaW6aG1XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWV9VUkwgPSB1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwieDU6Ly9cXFwiICsgZ2V0SG9tZSh1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2Uvc2luZ2xlc1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9LCBpdC51cmwpXFxuICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgUlVMRToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0Lm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLnpoHnlKhcXFwiICsgaXQubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5rip6aao5o+Q56S6XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFxcXCLnoa7orqTliKDpmaTnpoHnlKhcXFwiICsgbmFtZSArIFxcXCLlkJfvvJ9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygobmFtZSwgcnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YT9ydWxlPVxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSdWxlKG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL09LXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG5hbWUsIE1ZX1JVTEUudGl0bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaXQubmFtZSlcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuiuv+mXrummlumhtVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6IFxcXCIneDU6Ly9cXFwiICsgZ2V0SG9tZShpdC51cmwpICsgXFxcIidcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmkJzntKLmraTmupBcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiBcXFwiJ2hpa2VyOi8vcGFnZS9zaW5nbGVzJ1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gICAgICAgXFxuICAgIH1cXG59XFxuXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pWw5o2uXCIsXCJwYXRoXCI6XCJkYXRhXCIsXCJydWxlXCI6XCIvL+W5tuWPkeinhOWImeaVsFxcbmxldCBzaXplMCA9IDEwO1xcbmxldCBydWxlc1RleHQwID0gYPCflKXnn6XmkJzwn5SlQGh0dHBzOi8vemhpc28udG9wL3NlYXJjaC8/cT0qKiZyZWNvbW1lbmQ9Tm9uZSZmaWxldHlwZT1Ob25lJnBhZ2U9MlxcbvCflKVZb3VHaXTwn5SlQGh0dHBzOi8veW91Z2l0Lm5ldC9zZWFyY2gvP3E9KiomVGltZV9OYW1lPU5vbmUmQ2xvdWREcml2ZV9OYW1lPU5vbmUmRmlsZVR5cGVfTmFtZT1Ob25lJnBhZ2U9MlxcbvCflKXmt5jlrqLpk77wn5SlQGh0dHBzOi8vd3d3LnRvcGxpbmtzLmNjL3MvP2tleXdvcmQ9KipcXG7wn5Sl5pCc5Lmm572R8J+UpUBodHRwczovL3d3dy5zb3VzaHUudmlwLz9vcGVyYXRlLXNlYXJjaC1fRThfQTVfQkZfRTZfQjhfQjhfRThfQUVfQjAtMS5odG1sXFxu8J+UpUZyZWVNYm9va/CflKVAaHR0cHM6Ly9mcmVlbWJvb2suY29tL1xcbvCflKV2NOaQnOe0ovCflKVAaHR0cHM6Ly9ub2RlMi52NC56aGVscGVyLm5ldC9zZWFyY2gvKiovXFxu8J+UpUxpYnJhcnkgR2VuZXNpc+KRoPCflKVAaHR0cHM6Ly9saWJnZW4uZ3MvaW5kZXgucGhwP3JlcT0qKiZjb2x1bW5zW109dCZjb2x1bW5zW109YSZjb2x1bW5zW109cyZjb2x1bW5zW109eSZjb2x1bW5zW109cCZjb2x1bW5zW109aSZvYmplY3RzW109ZiZvYmplY3RzW109ZSZvYmplY3RzW109cyZvYmplY3RzW109YSZvYmplY3RzW109cCZvYmplY3RzW109dyZ0b3BpY3NbXT1sJnRvcGljc1tdPWMmdG9waWNzW109ZiZ0b3BpY3NbXT1hJnRvcGljc1tdPW0mdG9waWNzW109ciZ0b3BpY3NbXT1zJnJlcz0yNSZmaWxlc3Vucz1hbGxcXG7wn5SlTGlicmFyeSBHZW5lc2lz4pGh8J+UpUBodHRwczovL2xpYmdlbi5yb2Nrcy9pbmRleC5waHA/cmVxPSoqJmNvbHVtbnNbXT10JmNvbHVtbnNbXT1hJmNvbHVtbnNbXT1zJmNvbHVtbnNbXT15JmNvbHVtbnNbXT1wJmNvbHVtbnNbXT1pJm9iamVjdHNbXT1mJm9iamVjdHNbXT1lJm9iamVjdHNbXT1zJm9iamVjdHNbXT1hJm9iamVjdHNbXT1wJm9iamVjdHNbXT13JnRvcGljc1tdPWwmdG9waWNzW109YyZ0b3BpY3NbXT1mJnRvcGljc1tdPWEmdG9waWNzW109bSZ0b3BpY3NbXT1yJnRvcGljc1tdPXMmcmVzPTI1JmZpbGVzdW5zPWFsbFxcbvCflKXljrvkuK3lv4PljJbwn5SlQGh0dHBzOi8vZWJvb2syLmxvcmVmcmVlLmNvbS9zaXRlL2luZGV4P3M9KipcXG7wn5Sl6big5pGp5pCc5Lmm8J+UpUBodHRwczovL3d3dy5qaXVtb2RpYXJ5LmNvbS9cXG7wn5SlVGhlRnV0dXJl8J+UpUBodHRwczovL2Jrcy50aGVmdXR1cmUudG9wL3Jlc3VsdC5waHA/cT0qKiZmcm9tPWZyb21zZWFyY2hib3hcXG7wn5Sl5q+P5pel5Lmm5Y2V8J+UpUBodHRwczovL3d3dy5zaHVkYW4udmlwL3NlYXJjaC5waHA/a2V5d29yZD0qKlxcbvCflKXpmIXor7vpk77wn5Sl77yI5aW95YOP5peg55So5LqG77yJQGh0dHBzOi8vY2xvdWQueXVlZHUucHJvLyMvc2VhcmNoUmVzdWx0XFxu8J+UpeWBtuS5pvCflKXvvIjpnIDopoHms6jlhoznmbvlvZXvvIlAaHR0cHM6Ly9vYm9vay5jYy9pbmRleC5waHA/YXBwPXNlYXJjaCZhYz1zJmt3PSoqXFxu8J+UpeefpeivhuW6k/CflKVAaHR0cHM6Ly93d3cuemhpc2hpa29vLmNvbS8/cz0qKlxcbvCflKXkuInnp4vkuablsYvwn5SlQGh0dHBzOi8vd3d3LnNhbnFpdS5tb2JpLz9zPSoqXFxu8J+UpemjjumZtea4oeS5puWxi/CflKXvvIjpnIDlhbPms6jlhazkvJflj7fvvIlAaHR0cDovL3d3dy5leWJvb2suY29tL2luZGV4LnBocD9zPWJvb2smYz1zZWFyY2gma2V5d29yZD0qKlxcbvCflKXkuabkuZDph4zwn5SlQGh0dHBzOi8vd3d3LnN1bGVyeS5jb20vP3M9Kiomc3VibWl0PSoqXFxu8J+UpeeIseaCpuivu/CflKVAaHR0cHM6Ly93d3cuaXlkLndhbmcvP3M9KipcXG7wn5SlRXB1Ym9va3Pwn5SlQGh0dHBzOi8vd3d3LmVwdWJvb2tzLnRvcC9zZWFyY2g/cT0qKiZtPTFcXG7wn5Sl5Lmm5Y2V8J+UpUBodHRwczovL2Vib29rbGlzdC5tb2JpLz9zPSoqXFxu8J+UpeWkmuivu/CflKVAaHR0cDovL3d3dy5kdW9kdS5jYy9wbHVzL3NlYXJjaC5waHA/cGFnZXNpemU9MjAmcT0qKlxcbvCflKVyZWpvaWNl8J+UpUBodHRwOi8vd3d3LnJlam9pY2VibG9nLmNvbS9hcnRpY2xlL3NlYXJjaC9wYWdlLzEvP3R5cGU9JmtleXdvcmQ9KipcXG7wn5Sl6K+75Lmm5bCP56uZ8J+UpUBodHRwczovL2lib29rcy5vcmcuY24vP3M9KipcXG7wn5Sl6ZuF5Lmm8J+UpUBodHRwczovL3lhYm9vay5ibG9nL2Uvc2VhcmNoL3Jlc3VsdC8/c2VhcmNoaWQ9NjNcXG7wn5Sl5Lmm6KGM5aSp5LiL8J+UpUBodHRwczovL3d3dy5zeHBkZi5jb20vP3M9KipcXG7wn5Sl5Lmm6KGM5LiH6YeM8J+UpUBodHRwczovL3d3dy5ncGRmLm5ldC8/cz0qKlxcbvCflKXkuabloIbpmIXor7vwn5SlQGh0dHBzOi8vd3d3LndlcmVib29rLmNvbS8/cz0qKiZzdWJtaXQ9KipcXG7wn5Sl6LWE5rqQ5Lmm5ZCn8J+UpUBodHRwOi8vd3d3Lm56aXl1YW4uY29tL2Uvc2VhcmNoL3Jlc3VsdC8/c2VhcmNoaWQ9MjI0XFxu8J+UpeWFqOe0ouW8lfCflKVAaHR0cDovL3d3dy5jdGZpbGUuY24vP3M9KipcXG7wn5Sl5pWP5a2m572R8J+UpUBodHRwOi8vd3d3Lm1pbnh1ZS5uZXQvYmF0Y2guc2VhcmNoLnBocFxcbvCflKXlj6TkuL3nlLXlrZDkuabwn5SlQGh0dHBzOi8vd3d3Lmd1bGlnaXJsLmNvbS8/cz0qKlxcbvCflKXkuaboiJ/mkJzntKLwn5SlQGh0dHBzOi8vd3d3LnNodXpob3UuY2MvP3M9KipcXG7wn5Sl5Lmm5pif572R8J+UpUBodHRwOi8vc2VhcmNoLnNodXhpbmcuY2Mvc2VhcmNoLnBocD93b3JkPSoqJlN1Ym1pdD0qKiZzZWFyY2hieT1ib29rXFxu8J+UpW93b29r8J+UpUBodHRwczovL3d3dy5vd2xvb2suY29tLmNuL3NlYXJjaD93ZD0qKlxcbvCflKXmi6jkupHmkJzkuabwn5SlQGh0dHBzOi8vd3d3LmJveXVuc28uY29tL3NlYXJjaC8/a3c9KipcXG7wn5Sl5p+l5Lmm572R8J+UpUBodHRwOi8vd3d3LmNoYXNodS5jYy9YaWFvU2h1by9zZWFyY2guYXNweFxcbvCflKXkupHmkJzlsI/or7Twn5SlQGh0dHA6Ly93d3cud295YW9zby5jbi9pbmRleC9pbmRleC9zZWFyY2guaHRtbD9uYW1lPSoqXFxu8J+UpeeyvuagoeWFqOacrPCflKVAaHR0cHM6Ly9ub3ZlbGVzcy5jb20vP3M9KipcXG7wn5Sl6buR5Zu+572R8J+UpUBodHRwczovL3d3dy5odHM4ODYuY29tL2Uvc2VhcmNoL3Jlc3VsdC8/c2VhcmNoaWQ9MTNcXG7wn5Sl5pCs5Lmm5Yyg8J+UpUBodHRwOi8vd3d3LmJhbnNodWppYW5nLmNuL2VfYm9va3Mvc2VhcmNoL3BhZ2UvMT9zZWFyY2hXb3Jkcz0qKlxcbvCflKXoi6bnk5zkuabnm5jwn5SlQGh0dHBzOi8va2dib29rLmNvbS9lL3NlYXJjaC9pbmRleC5waHBcXG7wn5SlU29Cb29rc/CflKVAaHR0cHM6Ly9zb2Jvb2tzLm5ldC9zZWFyY2gvKipcXG7wn5Sl5Lmm6I2S572R8J+UpUBodHRwczovL3d3dy4xNWh1YW5nLmNvbS9lL3NlYXJjaC9yZXN1bHQvP3NlYXJjaGlkPTE5OTYyOVxcbvCflKXopb/ovrnkupHwn5SlQGh0dHA6Ly93d3cueGliaWFueXVuLmNvbS9ib29rL3NlYXJjaD9rdz0qKlxcbvCflKXpobbngrnlsI/or7Twn5SlQGh0dHBzOi8vbS4yMzBib29rLm5ldC9zLnBocFxcbvCflKXlhavkuIDkuK3mlofwn5SlQGh0dHA6Ly9tLnp3ZHV4cy5jb20vcy5waHBcXG7wn5Sl55S15a2Q5Lmm5pCc57Si8J+Upe+8iOWPquiDveeCueWHu+i/m+WOu+eUqO+8iUBodHRwczovL3d3dy5naWZmb3guY29tXFxu8J+UpeWwj+myuOmxvOaQnOS5pvCflKXvvIjlj6rog73ngrnlh7vov5vljrvnlKjvvIlAaHR0cDovL3d3dy45ODcxLm9yZy8/cmVmPWFkemhwLnZpcFxcbvCflKXotYTmupDluJ3wn5Sl77yI5Y+q6IO954K56L+b5Y6755So77yJQGh0dHA6Ly9zaHUueml5dWFuZGkuY24vXFxu8J+UpeeGiueMq+aQnOS5pvCflKXvvIjlj6rog73ngrnov5vljrvnlKjvvIlAaHR0cHM6Ly94bXNvdXNodS5jb20vI2A7XFxubGV0IHJ1bGVzVGV4dCA9IGdldEl0ZW0oXFxcInJ1bGVzXFxcIiwgcnVsZXNUZXh0MCk7XFxubGV0IHNwID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3BcXFwiKTtcXG5ydWxlcyA9IHJ1bGVzVGV4dC5zcGxpdChcXFwiXFxcXG5cXFwiKVxcbiAgICAuZmlsdGVyKGl0ID0+IGl0LmluY2x1ZGVzKFxcXCJAXFxcIikpXFxuICAgIC5tYXAocnVsZSA9PiB7XFxuICAgICAgICBsZXQgcyA9IHJ1bGUuc3BsaXQoXFxcIkBcXFwiKTtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgbmFtZTogc1swXSxcXG4gICAgICAgICAgICBmaW5kOiBmdW5jdGlvbihrZXksIHBhZ2UpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNwKHNbMV0sIGtleSwgc1swXSk7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB1cmw6IHNbMV1cXG4gICAgICAgIH07XFxuICAgIH0pO1xcblxcbmZ1bmN0aW9uIGxvYWQocGFnZSwgcnVsZSkge1xcbiAgICBsZXQgc2l6ZSA9IHBhZ2UgPD0gMCA/IHJ1bGVzLmxlbmd0aCA6IHNpemUwO1xcbiAgICBwYWdlID0gcGFnZSA8PSAwID8gMSA6IHBhZ2U7XFxuICAgIGlmICghcGFnZSAmJiAhcnVsZSkge1xcbiAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChpdCA9PiBpdC5uYW1lKTtcXG4gICAgfVxcbiAgICBpZiAocnVsZSAhPSBudWxsKSB7XFxuICAgICAgICBpZiAocGFnZSAhPSBudWxsICYmIHBhZ2UgPiAxKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlICYmIGkucGFnZSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUpO1xcbiAgICB9XFxuICAgIGxldCBzdGFydCA9IChwYWdlIC0gMSkgKiBzaXplO1xcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgc3RhcnQgKyAxKSB7XFxuICAgICAgICByZXR1cm4gW107XFxuICAgIH1cXG4gICAgbGV0IGxlbiA9IHNpemU7XFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBwYWdlICogc2l6ZSkge1xcbiAgICAgICAgbGVuID0gcnVsZXMubGVuZ3RoIC0gc3RhcnRcXG4gICAgfVxcbiAgICByZXR1cm4gcnVsZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcXG59XFxuXFxuZnVuY3Rpb24gYWRkUnVsZShuYW1lLCBzdXJsKSB7XFxuICAgIHNldEl0ZW0oXFxcInJ1bGVzXFxcIiwgcnVsZXNUZXh0ICsgXFxcIlxcXFxuXFxcIiArIG5hbWUgKyBcXFwiQFxcXCIgKyBzdXJsKTtcXG59XFxuXFxuZnVuY3Rpb24gcmVtb3ZlUnVsZShuYW1lKSB7XFxuICAgIGxldCBuZXdUID0gcnVsZXNUZXh0LnNwbGl0KFxcXCJcXFxcblxcXCIpXFxuICAgICAgICAuZmlsdGVyKGl0ID0+IGl0LmluZGV4T2YobmFtZSArIFxcXCJAXFxcIikgPCAwKVxcbiAgICAgICAgLmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgIHNldEl0ZW0oXFxcInJ1bGVzXFxcIiwgbmV3VCk7XFxufVxcblxcbiQuZXhwb3J0cyA9IHtcXG4gICAgbG9hZDogbG9hZCxcXG4gICAgYWRkUnVsZTogYWRkUnVsZSxcXG4gICAgcmVtb3ZlUnVsZTogcmVtb3ZlUnVsZVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0ouino+aekFwiLFwicGF0aFwiOlwic3BcIixcInJ1bGVcIjpcImZ1bmN0aW9uIHNlYXJjaCh1cmwsIGtleSwgcnVsZSkge1xcbiAgICBsZXQgZCA9IFtdO1xcbiAgICBsZXQgaHRtbCA9IFxcXCJcXFwiO1xcbiAgICBpZiAodXJsLmluY2x1ZGVzKFxcXCIqKlxcXCIpKSB7XFxuICAgICAgICAvL2dldOivt+axglxcbiAgICAgICAgbGV0IG9sZCA9IHVybDtcXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKFxcXCIqKlxcXCIsIGtleSk7XFxuICAgICAgICBodG1sID0gcmVxdWVzdCh1cmwpO1xcbiAgICAgICAgLy/oh6rliqjov4fpqozor4HnoIHlkozpopHnuYHorr/pl67pmZDliLZcXG4gICAgICAgIGxldCB7XFxuICAgICAgICAgICAgY2hlY2ssIHRlc3RcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95em1cXFwiKTtcXG4gICAgICAgIGlmIChjaGVjayh1cmwsIGh0bWwsIGQpKSB7XFxuICAgICAgICAgICAgbG9nKFxcXCLph43or5XkuoZcXFwiKTtcXG4gICAgICAgICAgICBodG1sID0gcmVxdWVzdCh1cmwsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiB1cmxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pOyAgICAgICAgICAgXFxuICAgICAgICB9ICAgICAgICAgXFxuICAgICAgICB0ZXN0KHVybCwgaHRtbCwgZCwgb2xkLCBrZXksIHJ1bGUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgLy/oh6rliqjor4bliKtwb3N06K+35rGCXFxuICAgICAgICBodG1sID0gcmVxdWVzdCh1cmwpO1xcbiAgICAgICAgbGV0IGZvcm0gPSBwZGZoKGh0bWwsIFxcXCJib2R5JiZmb3JtJiZIdG1sXFxcIik7XFxuICAgICAgICBsZXQgYWN0aW9uID0gcGQoaHRtbCwgXFxcImZvcm0mJmFjdGlvblxcXCIsIHVybCk7XFxuICAgICAgICBsZXQgaW5wdXRzID0gcGRmYShodG1sLCBcXFwiYm9keSYmZm9ybSYmaW5wdXRcXFwiKTtcXG4gICAgICAgIGxldCBib2R5ID0ge307XFxuICAgICAgICBmb3IgKGxldCBpdCBvZiBpbnB1dHMpIHtcXG4gICAgICAgICAgICBsZXQgbmFtZSA9IHBkZmgoaXQsIFxcXCJpbnB1dCYmbmFtZVxcXCIpO1xcbiAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcGRmaChpdCwgXFxcImlucHV0JiZ2YWx1ZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBib2R5W25hbWVdID0gdmFsdWUgfHwga2V5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGh0bWwgPSBwb3N0KGFjdGlvbiwge1xcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuXFxuICAgIGxldCBhbGlzdCA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmFcXFwiKTtcXG4gICAgbGV0IGFyciA9IGFsaXN0Lm1hcChpdCA9PiB7XFxuICAgICAgICBsZXQgdCA9IHBkZmgoaXQsIFxcXCJhJiZUZXh0XFxcIik7XFxuICAgICAgICBsZXQgdDIgPSBwZGZoKGl0LCBcXFwiYSYmdGl0bGVcXFwiKTtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgLy9odG1sOiBpdCxcXG4gICAgICAgICAgICB0ZXh0OiB0MiAmJiB0Mi5pbmNsdWRlcyhrZXkpID8gdDIgOiB0LFxcbiAgICAgICAgICAgIGhyZWY6IHBkKGl0LCBcXFwiYSYmaHJlZlxcXCIsIHVybClcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgIGZ1bmN0aW9uIGlzUmVzdWx0KGl0KSB7XFxuICAgICAgICBpdCA9IGl0LnRleHQgfHwgXFxcIlxcXCI7XFxuICAgICAgICBpZiAoaXQgPT0gXFxcIlxcXCIgfHwgaXQubWF0Y2goL+aQnOe0onznu5PmnpwvKSkge1xcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGl0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa2V5KTtcXG4gICAgfVxcbiAgICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgIGxldCB0ID0gaXQudGV4dDtcXG4gICAgICAgIGlmICghaXQuaHJlZiB8fCBpdC5ocmVmID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaXNSZXN1bHQoaXQpKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHQsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9wP3U9XFxcIiArIGJhc2U2NEVuY29kZShpdC5ocmVmKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+XFxcIiArIHJ1bGUgKyBcXFwiPC9mb250PlxcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZDtcXG59XFxuJC5leHBvcnRzID0gc2VhcmNoO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5aKe5YigXCIsXCJwYXRoXCI6XCJtYW5hZ2VcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IGZ1bmN0aW9uKGQsIG5hbWVzKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIkFJ5oqA5pyvXFxcIixcXG4gICAgICAgIHVybDogXFxcImNvbmZpcm06Ly/ln7rkuo5BSeivhueJh+iHquWKqOWIhuaekOa6kOeggeaKgOacr++8jOS7o+eggeWujOWFqOW8gOa6kO+8jOaVsOaNruadpea6kOS6juWOn+e9keerme+8jOi9r+S7tuWSjOinhOWImeS4jeaPkOS+m+S7u+S9leWGheWuuS5qczonJ1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIlxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiICsgXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocnIpID0+IHtcXG4gICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoXFxcImFpYWRkXFxcIik7XFxuICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHJyICsgXFxcImFpc2RlbFxcXCIsIFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl572R56uZ5ZCN56ewXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ25hbWUnLCBpbnB1dClcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogXFxcImFpYWRkXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl572R56uZ5pCc57Si5Zyw5Z2AXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ3N1cmwnLCBpbnB1dClcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogXFxcImFpYWRkXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuaPkOS6pOS/neWtmFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3VybCA9IGdldE15VmFyKFxcXCJzdXJsXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZ2V0TXlWYXIoXFxcIm5hbWVcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1cmwgPT0gXFxcIlxcXCIgfHwgbmFtZSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+36L6T5YWl5a6M5pW05YaF5a65XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgciA9IGRlY29kZVVSSUNvbXBvbmVudChzdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByID0gci5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIltcXFxcdTRlMDAtXFxcXHU5ZmE1XStcXFwiLCBcXFwiZ1xcXCIpLCBcXFwiKipcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSdWxlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRSdWxlKG5hbWUsIHIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suS/neWtmFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwiYWlhZGRcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBdKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiLFxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiIC0gXFxcIixcXG4gICAgICAgIHVybDogXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgb3B0aW9uczogbmFtZXMsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLor7fpgInmi6nopoHliKDpmaTnmoTnq5nngrlcXFwiLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGVcXG4gICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVtb3ZlUnVsZShpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9PS1xcXCI7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBNWV9SVUxFLnRpdGxlICsgXFxcImFpc2RlbFxcXCJcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICB9KTtcXG5cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpqozor4HnoIFcIixcInBhdGhcIjpcInl6bVwiLFwicnVsZVwiOlwiZnVuY3Rpb24gY2hlY2sodXJsLCBodG1sLCBkKSB7XFxuICAgIGxldCByZWxvYWQgPSBmYWxzZTtcXG4gICAgcmV0dXJuIHJlbG9hZDtcXG59XFxuXFxuZnVuY3Rpb24gdGVzdCh1cmwsIGh0bWwsIGQsIG9sZCwga2V5LCBydWxlKSB7XFxuICAgIGlmICgvNeenknzpopHnuYEvLnRlc3QoaHRtbCkpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfmkJzntKLpnIDpl7TpmpQ156eS77yM54K55Ye76YeN5paw5Yqg6L29JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlxcXCIgKyBydWxlICsgXFxcIjwvZm9udD5cXFwiLFxcbiAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKCh1cmwsIG9sZCwga2V5LCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBzcCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBkID0gc3Aob2xkLCBrZXksIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgd3JhcFxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBkKSB7XFxuICAgICAgICAgICAgICAgICAgICBpdC50aXRsZSA9IHdyYXAoaXQudGl0bGUsIGtleSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHVybCwgZCk7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0odXJsKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL09LXFxcIjtcXG4gICAgICAgICAgICB9LCB1cmwsIG9sZCwga2V5LCBydWxlKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogdXJsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuXFxuJC5leHBvcnRzID0ge1xcbiAgICBjaGVjazogY2hlY2ssXFxuICAgIHRlc3Q6IHRlc3RcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlt6XlhbdcIixcInBhdGhcIjpcInRvb2xcIixcInJ1bGVcIjpcImZ1bmN0aW9uIHdyYXAodGV4dCwgcykge1xcbiAgICByZXR1cm4gdGV4dC5pbmNsdWRlcyhcXFwi4oCc4oCc4oCd4oCdXFxcIikgPyB0ZXh0IDogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyB0ZXh0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiPGVtPnw8L2VtPlxcXCIsIFxcXCJnXFxcIiksIFxcXCJcXFwiKS5yZXBsYWNlKG5ldyBSZWdFeHAocywgXFxcImdcXFwiKSwgXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogIzFFOTBGRlxcXFxcXFwiPlxcXCIgKyBzICsgXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFwiKVxcbn1cXG4kLmV4cG9ydHMgPSB7XFxuICAgIHdyYXA6IHdyYXBcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLljZXmkJxcIixcInBhdGhcIjpcInNpbmdsZXNcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInNvXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICBkZXNjOiBcXFwi6K+36L6T5YWl5YWz6ZSu6K+N77yM5bC96YeP5bCR5a2X5LiN6KaB5aSa5a2XXFxcIixcXG4gICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJzb1xcXCIsIFxcXCJcXFwiKVxcbiAgICB9XFxufSk7XFxubGV0IHMgPSBnZXRNeVZhcihcXFwic29cXFwiLCBcXFwiXFxcIik7XFxubGV0IHIgPSBcXFwiXFxcIjtcXG5pZiAocyAhPSBcXFwiXFxcIikge1xcbiAgICBsZXQgcCA9IE1ZX1BBR0U7XFxuICAgIGxldCB7XFxuICAgICAgICBsb2FkXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIik7XFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuICAgIGxldCBkYXRhID0gbG9hZChwLCBNWV9QQVJBTVMuUlVMRS5uYW1lKTtcXG4gICAgbGV0IGFyciA9IGRhdGFbMF0uZmluZChzLCBwKTtcXG4gICAgZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxuICAgICAgICBpdC50aXRsZSA9IHdyYXAoaXQudGl0bGUsIHMpXFxuICAgICAgICBkLnB1c2goaXQpO1xcbiAgICB9XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0oumhtemdolwiLFwicGF0aFwiOlwic291cFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5pZiAoTVlfUEFSQU1TLmtleSAmJiBnZXRNeVZhcihcXFwidXNlXFxcIiwgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBNWV9QQVJBTVMua2V5KTtcXG4gICAgcHV0TXlWYXIoXFxcInVzZVxcXCIsIFxcXCIxXFxcIik7XFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ1c2VcXFwiKTtcXG4gICAgfSkpO1xcbn1cXG4kLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9wcm8nKVwifV0sXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIkFJ5pCc5LmmXCIsXCJ2ZXJzaW9uXCI6MCxcInVybFwiOlwiaGlrZXI6Ly9wYWdlL3A/dT1hSFIwY0hNNkx5OTNkM2N1YzI5MWMyaDFMblpwY0M4L2NtVmhaQzAxT0Rjek55NW9kRzFzXCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmxldCB1cmwgPSBiYXNlNjREZWNvZGUoZ2V0UGFyYW0oXFxcInVcXFwiKSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICB1cmw6IHVybCxcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCJmbG9hdCYmMTAwJVxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgY2FuQmFjazogdHJ1ZVxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wiLFwiZ3JvdXBcIjpcIuKRoOi9u+WQiOmbhlwiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuS6jOe6p+ino+aekFxcXCIsXFxcInBhdGhcXFwiOlxcXCJwXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmxldCB1cmwgPSBiYXNlNjREZWNvZGUoZ2V0UGFyYW0oXFxcXFxcXCJ1XFxcXFxcXCIpKTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgdXJsOiB1cmwsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwieDVfd2Vidmlld19zaW5nbGVcXFxcXFxcIixcXFxcbiAgICBkZXNjOiBcXFxcXFxcImZsb2F0JiYxMDAlXFxcXFxcXCIsXFxcXG4gICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBjYW5CYWNrOiB0cnVlXFxcXG4gICAgfVxcXFxufSk7XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfMVxcXCIsXFxcIm5hbWVcXFwiOlxcXCLmkJzntKLmtYvor5VcXFwiLFxcXCJwYXRoXFxcIjpcXFwic1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmxldCB1cmwgPSBiYXNlNjREZWNvZGUoZ2V0UGFyYW0oXFxcXFxcXCJ1XFxcXFxcXCIpKTtcXFxcbmxvZyh1cmwpO1xcXFxubGV0IGtleSA9IGdldFBhcmFtKFxcXFxcXFwia2V5XFxcXFxcXCIpO1xcXFxubGV0IHNwID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcXFxcXCIpO1xcXFxuc2V0UmVzdWx0KHNwKHVybCwga2V5LCBcXFxcXFxcIuaQnOe0oua1i+ivlVxcXFxcXFwiKSk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6IGa5ZCI5pCc57SiXFxcIixcXFwicGF0aFxcXCI6XFxcInByb1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgZCA9IFtdO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuaQnOe0olxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgICAgIGRlc2M6IFxcXFxcXFwi6K+36L6T5YWl5YWz6ZSu6K+N77yM5bC96YeP5bCR5a2X5LiN6KaB5aSa5a2XXFxcXFxcXCIsXFxcXG4gICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXFxcXFwic291XFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwic291XFxcXFxcXCIsIGlucHV0KTtcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbiAgICBhZGRMaXN0ZW5lcihcXFxcXFxcIm9uQ2xvc2VcXFxcXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcXFxcXCJzb3VcXFxcXFxcIik7XFxcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcXFxcXCJzb1xcXFxcXFwiKTtcXFxcbiAgICB9KSk7XFxcXG59XFxcXG5cXFxcbmxldCBzID0gZ2V0TXlWYXIoXFxcXFxcXCJzb3VcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG5sZXQgciA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG5pZiAocyAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgbGV0IHAgPSBNWV9QQUdFO1xcXFxuICAgIGxldCB7XFxcXG4gICAgICAgIGxvYWRcXFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFxcXFxcIik7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgd3JhcFxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXFxcXFwiKTtcXFxcbiAgICBsZXQgZGF0YSA9IGxvYWQocCwgciAhPSBcXFxcXFxcIlxcXFxcXFwiID8gciA6IG51bGwpO1xcXFxuXFxcXG4gICAgbGV0IHBhZ2VpZCA9IE1ZX1JVTEUudGl0bGUgKyBcXFxcXFxcIi1wYWdlXFxcXFxcXCIgKyBwO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWKoOi9veesrFxcXFxcXFwiICsgcCArIFxcXFxcXFwi6aG15Lit77yM6L+b5bqm77yaMS9cXFxcXFxcIiArIGRhdGEubGVuZ3RoLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICBsb2coZGF0YS5sZW5ndGgpO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgLy/lpJrnur/nqIvliqDovb0gICAgICAgIFxcXFxuICAgICAgICBsZXQgcmVhbFBhZ2UgPSBcXFxcXFxcIlxcXFxcXFwiID09IHIgPyAxIDogcDtcXFxcbiAgICAgICAgbGV0IHRhc2tzID0gZGF0YS5tYXAoaXQgPT4ge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihydWxlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLmZpbmQocywgcmVhbFBhZ2UpO1xcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgcGFyYW06IGl0LFxcXFxuICAgICAgICAgICAgICAgIGlkOiBcXFxcXFxcInJ1bGVAXFxcXFxcXCIgKyBpdC5uYW1lXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGJhdGNoRXhlY3V0ZSh0YXNrcywge1xcXFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocGFyYW0sIGlkLCBlcnJvciwgcmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgLy9sb2coXFxcXFxcXCJsaXN0ZW5lcjogXFxcXFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxcXG4gICAgICAgICAgICAgICAgcGFyYW0uaSA9IHBhcmFtLmkgKyAxO1xcXFxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIHJlc3VsdCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmogPSBwYXJhbS5qICsgMTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogd3JhcChpdC50aXRsZSwgcyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0LmRlc2MsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXQudXJsLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC5waWNfdXJsLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogaXQucGljX3VybCA/ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycgOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogaXQuZXh0cmFcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbS5pID49IHBhcmFtLmFsbCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZClcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWKoOi9veesrFxcXFxcXFwiICsgTVlfUEFHRSArIFxcXFxcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcXFxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcXFxcXCIvXFxcXFxcXCIgKyBwYXJhbS5hbGwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBwYXJhbToge1xcXFxuICAgICAgICAgICAgICAgIGFsbDogZGF0YS5sZW5ndGgsXFxcXG4gICAgICAgICAgICAgICAgaTogMCxcXFxcbiAgICAgICAgICAgICAgICBqOiAtMVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn0gZWxzZSB7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgbG9hZFxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICBsZXQgZGF0YSA9IGxvYWQoLTEsIG51bGwpO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHsgICAgICAgXFxcXG4gICAgICAgICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9tYW5hZ2VcXFxcXFxcIikoZCwgZGF0YS5tYXAoaXQgPT4gaXQubmFtZSkpO1xcXFxuICAgICAgICBmb3IgKGxldCBpdCBvZiBkYXRhKSB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdC5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJzZWxlY3Q6Ly9cXFxcXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6K+36YCJ5oup5pON5L2cXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbDogMSxcXFxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogW1xcXFxcXFwi6K6/6Zeu6aaW6aG1XFxcXFxcXCIsIFxcXFxcXFwi5pCc57Si5q2k56uZXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodXJsKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcXFxcXCLorr/pl67pppbpobVcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1VSTCA9IHVybDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ4NTovL1xcXFxcXFwiICsgZ2V0SG9tZSh1cmwpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vcGFnZS9zaW5nbGVzXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgaXQudXJsKVxcXFxuICAgICAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImZsZXhfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFJVTEU6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0Lm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LnVybFxcXFxuICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLnpoHnlKhcXFxcXFxcIiArIGl0Lm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygobmFtZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm0oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmuKnppqjmj5DnpLpcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXFxcXFxcXCLnoa7orqTliKDpmaTnpoHnlKhcXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIuWQl++8n1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKChuYW1lLCBydWxlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YT9ydWxlPVxcXFxcXFwiICsgcnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSdWxlKG5hbWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vT0tcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbmFtZSwgTVlfUlVMRS50aXRsZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGl0Lm5hbWUpXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuiuv+mXrummlumhtVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6IFxcXFxcXFwiJ3g1Oi8vXFxcXFxcXCIgKyBnZXRIb21lKGl0LnVybCkgKyBcXFxcXFxcIidcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmkJzntKLmraTmupBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiBcXFxcXFxcIidoaWtlcjovL3BhZ2Uvc2luZ2xlcydcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9XVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9ICAgICAgIFxcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuaVsOaNrlxcXCIsXFxcInBhdGhcXFwiOlxcXCJkYXRhXFxcIixcXFwicnVsZVxcXCI6XFxcIi8v5bm25Y+R6KeE5YiZ5pWwXFxcXG5sZXQgc2l6ZTAgPSAxMDtcXFxcbmxldCBydWxlc1RleHQwID0gYPCflKXnn6XmkJzwn5SlQGh0dHBzOi8vemhpc28udG9wL3NlYXJjaC8/cT0qKiZyZWNvbW1lbmQ9Tm9uZSZmaWxldHlwZT1Ob25lJnBhZ2U9MlxcXFxu8J+UpVlvdUdpdPCflKVAaHR0cHM6Ly95b3VnaXQubmV0L3NlYXJjaC8/cT0qKiZUaW1lX05hbWU9Tm9uZSZDbG91ZERyaXZlX05hbWU9Tm9uZSZGaWxlVHlwZV9OYW1lPU5vbmUmcGFnZT0yXFxcXG7wn5Sl5reY5a6i6ZO+8J+UpUBodHRwczovL3d3dy50b3BsaW5rcy5jYy9zLz9rZXl3b3JkPSoqXFxcXG7wn5Sl5pCc5Lmm572R8J+UpUBodHRwczovL3d3dy5zb3VzaHUudmlwLz9vcGVyYXRlLXNlYXJjaC1fRThfQTVfQkZfRTZfQjhfQjhfRThfQUVfQjAtMS5odG1sXFxcXG7wn5SlRnJlZU1ib29r8J+UpUBodHRwczovL2ZyZWVtYm9vay5jb20vXFxcXG7wn5SldjTmkJzntKLwn5SlQGh0dHBzOi8vbm9kZTIudjQuemhlbHBlci5uZXQvc2VhcmNoLyoqL1xcXFxu8J+UpUxpYnJhcnkgR2VuZXNpc+KRoPCflKVAaHR0cHM6Ly9saWJnZW4uZ3MvaW5kZXgucGhwP3JlcT0qKiZjb2x1bW5zW109dCZjb2x1bW5zW109YSZjb2x1bW5zW109cyZjb2x1bW5zW109eSZjb2x1bW5zW109cCZjb2x1bW5zW109aSZvYmplY3RzW109ZiZvYmplY3RzW109ZSZvYmplY3RzW109cyZvYmplY3RzW109YSZvYmplY3RzW109cCZvYmplY3RzW109dyZ0b3BpY3NbXT1sJnRvcGljc1tdPWMmdG9waWNzW109ZiZ0b3BpY3NbXT1hJnRvcGljc1tdPW0mdG9waWNzW109ciZ0b3BpY3NbXT1zJnJlcz0yNSZmaWxlc3Vucz1hbGxcXFxcbvCflKVMaWJyYXJ5IEdlbmVzaXPikaHwn5SlQGh0dHBzOi8vbGliZ2VuLnJvY2tzL2luZGV4LnBocD9yZXE9KiomY29sdW1uc1tdPXQmY29sdW1uc1tdPWEmY29sdW1uc1tdPXMmY29sdW1uc1tdPXkmY29sdW1uc1tdPXAmY29sdW1uc1tdPWkmb2JqZWN0c1tdPWYmb2JqZWN0c1tdPWUmb2JqZWN0c1tdPXMmb2JqZWN0c1tdPWEmb2JqZWN0c1tdPXAmb2JqZWN0c1tdPXcmdG9waWNzW109bCZ0b3BpY3NbXT1jJnRvcGljc1tdPWYmdG9waWNzW109YSZ0b3BpY3NbXT1tJnRvcGljc1tdPXImdG9waWNzW109cyZyZXM9MjUmZmlsZXN1bnM9YWxsXFxcXG7wn5Sl5Y675Lit5b+D5YyW8J+UpUBodHRwczovL2Vib29rMi5sb3JlZnJlZS5jb20vc2l0ZS9pbmRleD9zPSoqXFxcXG7wn5Sl6big5pGp5pCc5Lmm8J+UpUBodHRwczovL3d3dy5qaXVtb2RpYXJ5LmNvbS9cXFxcbvCflKVUaGVGdXR1cmXwn5SlQGh0dHBzOi8vYmtzLnRoZWZ1dHVyZS50b3AvcmVzdWx0LnBocD9xPSoqJmZyb209ZnJvbXNlYXJjaGJveFxcXFxu8J+Upeavj+aXpeS5puWNlfCflKVAaHR0cHM6Ly93d3cuc2h1ZGFuLnZpcC9zZWFyY2gucGhwP2tleXdvcmQ9KipcXFxcbvCflKXpmIXor7vpk77wn5Sl77yI5aW95YOP5peg55So5LqG77yJQGh0dHBzOi8vY2xvdWQueXVlZHUucHJvLyMvc2VhcmNoUmVzdWx0XFxcXG7wn5Sl5YG25Lmm8J+Upe+8iOmcgOimgeazqOWGjOeZu+W9le+8iUBodHRwczovL29ib29rLmNjL2luZGV4LnBocD9hcHA9c2VhcmNoJmFjPXMma3c9KipcXFxcbvCflKXnn6Xor4blupPwn5SlQGh0dHBzOi8vd3d3LnpoaXNoaWtvby5jb20vP3M9KipcXFxcbvCflKXkuInnp4vkuablsYvwn5SlQGh0dHBzOi8vd3d3LnNhbnFpdS5tb2JpLz9zPSoqXFxcXG7wn5Sl6aOO6Zm15rih5Lmm5bGL8J+Upe+8iOmcgOWFs+azqOWFrOS8l+WPt++8iUBodHRwOi8vd3d3LmV5Ym9vay5jb20vaW5kZXgucGhwP3M9Ym9vayZjPXNlYXJjaCZrZXl3b3JkPSoqXFxcXG7wn5Sl5Lmm5LmQ6YeM8J+UpUBodHRwczovL3d3dy5zdWxlcnkuY29tLz9zPSoqJnN1Ym1pdD0qKlxcXFxu8J+UpeeIseaCpuivu/CflKVAaHR0cHM6Ly93d3cuaXlkLndhbmcvP3M9KipcXFxcbvCflKVFcHVib29rc/CflKVAaHR0cHM6Ly93d3cuZXB1Ym9va3MudG9wL3NlYXJjaD9xPSoqJm09MVxcXFxu8J+UpeS5puWNlfCflKVAaHR0cHM6Ly9lYm9va2xpc3QubW9iaS8/cz0qKlxcXFxu8J+UpeWkmuivu/CflKVAaHR0cDovL3d3dy5kdW9kdS5jYy9wbHVzL3NlYXJjaC5waHA/cGFnZXNpemU9MjAmcT0qKlxcXFxu8J+UpXJlam9pY2Xwn5SlQGh0dHA6Ly93d3cucmVqb2ljZWJsb2cuY29tL2FydGljbGUvc2VhcmNoL3BhZ2UvMS8/dHlwZT0ma2V5d29yZD0qKlxcXFxu8J+Upeivu+S5puWwj+ermfCflKVAaHR0cHM6Ly9pYm9va3Mub3JnLmNuLz9zPSoqXFxcXG7wn5Sl6ZuF5Lmm8J+UpUBodHRwczovL3lhYm9vay5ibG9nL2Uvc2VhcmNoL3Jlc3VsdC8/c2VhcmNoaWQ9NjNcXFxcbvCflKXkuabooYzlpKnkuIvwn5SlQGh0dHBzOi8vd3d3LnN4cGRmLmNvbS8/cz0qKlxcXFxu8J+UpeS5puihjOS4h+mHjPCflKVAaHR0cHM6Ly93d3cuZ3BkZi5uZXQvP3M9KipcXFxcbvCflKXkuabloIbpmIXor7vwn5SlQGh0dHBzOi8vd3d3LndlcmVib29rLmNvbS8/cz0qKiZzdWJtaXQ9KipcXFxcbvCflKXotYTmupDkuablkKfwn5SlQGh0dHA6Ly93d3cubnppeXVhbi5jb20vZS9zZWFyY2gvcmVzdWx0Lz9zZWFyY2hpZD0yMjRcXFxcbvCflKXlhajntKLlvJXwn5SlQGh0dHA6Ly93d3cuY3RmaWxlLmNuLz9zPSoqXFxcXG7wn5Sl5pWP5a2m572R8J+UpUBodHRwOi8vd3d3Lm1pbnh1ZS5uZXQvYmF0Y2guc2VhcmNoLnBocFxcXFxu8J+UpeWPpOS4veeUteWtkOS5pvCflKVAaHR0cHM6Ly93d3cuZ3VsaWdpcmwuY29tLz9zPSoqXFxcXG7wn5Sl5Lmm6Iif5pCc57Si8J+UpUBodHRwczovL3d3dy5zaHV6aG91LmNjLz9zPSoqXFxcXG7wn5Sl5Lmm5pif572R8J+UpUBodHRwOi8vc2VhcmNoLnNodXhpbmcuY2Mvc2VhcmNoLnBocD93b3JkPSoqJlN1Ym1pdD0qKiZzZWFyY2hieT1ib29rXFxcXG7wn5Slb3dvb2vwn5SlQGh0dHBzOi8vd3d3Lm93bG9vay5jb20uY24vc2VhcmNoP3dkPSoqXFxcXG7wn5Sl5ouo5LqR5pCc5Lmm8J+UpUBodHRwczovL3d3dy5ib3l1bnNvLmNvbS9zZWFyY2gvP2t3PSoqXFxcXG7wn5Sl5p+l5Lmm572R8J+UpUBodHRwOi8vd3d3LmNoYXNodS5jYy9YaWFvU2h1by9zZWFyY2guYXNweFxcXFxu8J+UpeS6keaQnOWwj+ivtPCflKVAaHR0cDovL3d3dy53b3lhb3NvLmNuL2luZGV4L2luZGV4L3NlYXJjaC5odG1sP25hbWU9KipcXFxcbvCflKXnsr7moKHlhajmnKzwn5SlQGh0dHBzOi8vbm92ZWxlc3MuY29tLz9zPSoqXFxcXG7wn5Sl6buR5Zu+572R8J+UpUBodHRwczovL3d3dy5odHM4ODYuY29tL2Uvc2VhcmNoL3Jlc3VsdC8/c2VhcmNoaWQ9MTNcXFxcbvCflKXmkKzkuabljKDwn5SlQGh0dHA6Ly93d3cuYmFuc2h1amlhbmcuY24vZV9ib29rcy9zZWFyY2gvcGFnZS8xP3NlYXJjaFdvcmRzPSoqXFxcXG7wn5Sl6Ium55Oc5Lmm55uY8J+UpUBodHRwczovL2tnYm9vay5jb20vZS9zZWFyY2gvaW5kZXgucGhwXFxcXG7wn5SlU29Cb29rc/CflKVAaHR0cHM6Ly9zb2Jvb2tzLm5ldC9zZWFyY2gvKipcXFxcbvCflKXkuabojZLnvZHwn5SlQGh0dHBzOi8vd3d3LjE1aHVhbmcuY29tL2Uvc2VhcmNoL3Jlc3VsdC8/c2VhcmNoaWQ9MTk5NjI5XFxcXG7wn5Sl6KW/6L655LqR8J+UpUBodHRwOi8vd3d3LnhpYmlhbnl1bi5jb20vYm9vay9zZWFyY2g/a3c9KipcXFxcbvCflKXpobbngrnlsI/or7Twn5SlQGh0dHBzOi8vbS4yMzBib29rLm5ldC9zLnBocFxcXFxu8J+UpeWFq+S4gOS4reaWh/CflKVAaHR0cDovL20uendkdXhzLmNvbS9zLnBocFxcXFxu8J+UpeeUteWtkOS5puaQnOe0ovCflKXvvIjlj6rog73ngrnlh7vov5vljrvnlKjvvIlAaHR0cHM6Ly93d3cuZ2lmZm94LmNvbVxcXFxu8J+UpeWwj+myuOmxvOaQnOS5pvCflKXvvIjlj6rog73ngrnlh7vov5vljrvnlKjvvIlAaHR0cDovL3d3dy45ODcxLm9yZy8/cmVmPWFkemhwLnZpcFxcXFxu8J+Upei1hOa6kOW4nfCflKXvvIjlj6rog73ngrnov5vljrvnlKjvvIlAaHR0cDovL3NodS56aXl1YW5kaS5jbi9cXFxcbvCflKXnhornjKvmkJzkuabwn5Sl77yI5Y+q6IO954K56L+b5Y6755So77yJQGh0dHBzOi8veG1zb3VzaHUuY29tLyNgO1xcXFxubGV0IHJ1bGVzVGV4dCA9IGdldEl0ZW0oXFxcXFxcXCJydWxlc1xcXFxcXFwiLCBydWxlc1RleHQwKTtcXFxcbmxldCBzcCA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9zcFxcXFxcXFwiKTtcXFxcbnJ1bGVzID0gcnVsZXNUZXh0LnNwbGl0KFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIpXFxcXG4gICAgLmZpbHRlcihpdCA9PiBpdC5pbmNsdWRlcyhcXFxcXFxcIkBcXFxcXFxcIikpXFxcXG4gICAgLm1hcChydWxlID0+IHtcXFxcbiAgICAgICAgbGV0IHMgPSBydWxlLnNwbGl0KFxcXFxcXFwiQFxcXFxcXFwiKTtcXFxcbiAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgIG5hbWU6IHNbMF0sXFxcXG4gICAgICAgICAgICBmaW5kOiBmdW5jdGlvbihrZXksIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gc3Aoc1sxXSwga2V5LCBzWzBdKTtcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICB1cmw6IHNbMV1cXFxcbiAgICAgICAgfTtcXFxcbiAgICB9KTtcXFxcblxcXFxuZnVuY3Rpb24gbG9hZChwYWdlLCBydWxlKSB7XFxcXG4gICAgbGV0IHNpemUgPSBwYWdlIDw9IDAgPyBydWxlcy5sZW5ndGggOiBzaXplMDtcXFxcbiAgICBwYWdlID0gcGFnZSA8PSAwID8gMSA6IHBhZ2U7XFxcXG4gICAgaWYgKCFwYWdlICYmICFydWxlKSB7XFxcXG4gICAgICAgIHJldHVybiBydWxlcy5tYXAoaXQgPT4gaXQubmFtZSk7XFxcXG4gICAgfVxcXFxuICAgIGlmIChydWxlICE9IG51bGwpIHtcXFxcbiAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCAmJiBwYWdlID4gMSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlICYmIGkucGFnZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlKTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHNpemU7XFxcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHN0YXJ0ICsgMSkge1xcXFxuICAgICAgICByZXR1cm4gW107XFxcXG4gICAgfVxcXFxuICAgIGxldCBsZW4gPSBzaXplO1xcXFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBwYWdlICogc2l6ZSkge1xcXFxuICAgICAgICBsZW4gPSBydWxlcy5sZW5ndGggLSBzdGFydFxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gcnVsZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gYWRkUnVsZShuYW1lLCBzdXJsKSB7XFxcXG4gICAgc2V0SXRlbShcXFxcXFxcInJ1bGVzXFxcXFxcXCIsIHJ1bGVzVGV4dCArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyBuYW1lICsgXFxcXFxcXCJAXFxcXFxcXCIgKyBzdXJsKTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gcmVtb3ZlUnVsZShuYW1lKSB7XFxcXG4gICAgbGV0IG5ld1QgPSBydWxlc1RleHQuc3BsaXQoXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIilcXFxcbiAgICAgICAgLmZpbHRlcihpdCA9PiBpdC5pbmRleE9mKG5hbWUgKyBcXFxcXFxcIkBcXFxcXFxcIikgPCAwKVxcXFxuICAgICAgICAuam9pbihcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiKTtcXFxcbiAgICBzZXRJdGVtKFxcXFxcXFwicnVsZXNcXFxcXFxcIiwgbmV3VCk7XFxcXG59XFxcXG5cXFxcbiQuZXhwb3J0cyA9IHtcXFxcbiAgICBsb2FkOiBsb2FkLFxcXFxuICAgIGFkZFJ1bGU6IGFkZFJ1bGUsXFxcXG4gICAgcmVtb3ZlUnVsZTogcmVtb3ZlUnVsZVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuaQnOe0ouino+aekFxcXCIsXFxcInBhdGhcXFwiOlxcXCJzcFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJmdW5jdGlvbiBzZWFyY2godXJsLCBrZXksIHJ1bGUpIHtcXFxcbiAgICBsZXQgZCA9IFtdO1xcXFxuICAgIGxldCBodG1sID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBpZiAodXJsLmluY2x1ZGVzKFxcXFxcXFwiKipcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgLy9nZXTor7fmsYJcXFxcbiAgICAgICAgbGV0IG9sZCA9IHVybDtcXFxcbiAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoXFxcXFxcXCIqKlxcXFxcXFwiLCBrZXkpO1xcXFxuICAgICAgICBodG1sID0gcmVxdWVzdCh1cmwpO1xcXFxuICAgICAgICAvL+iHquWKqOi/h+mqjOivgeeggeWSjOmikee5geiuv+mXrumZkOWItlxcXFxuICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgY2hlY2ssIHRlc3RcXFxcbiAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS95em1cXFxcXFxcIik7XFxcXG4gICAgICAgIGlmIChjaGVjayh1cmwsIGh0bWwsIGQpKSB7XFxcXG4gICAgICAgICAgICBsb2coXFxcXFxcXCLph43or5XkuoZcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBodG1sID0gcmVxdWVzdCh1cmwsIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiB1cmxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTsgICAgICAgICAgIFxcXFxuICAgICAgICB9ICAgICAgICAgXFxcXG4gICAgICAgIHRlc3QodXJsLCBodG1sLCBkLCBvbGQsIGtleSwgcnVsZSk7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgLy/oh6rliqjor4bliKtwb3N06K+35rGCXFxcXG4gICAgICAgIGh0bWwgPSByZXF1ZXN0KHVybCk7XFxcXG4gICAgICAgIGxldCBmb3JtID0gcGRmaChodG1sLCBcXFxcXFxcImJvZHkmJmZvcm0mJkh0bWxcXFxcXFxcIik7XFxcXG4gICAgICAgIGxldCBhY3Rpb24gPSBwZChodG1sLCBcXFxcXFxcImZvcm0mJmFjdGlvblxcXFxcXFwiLCB1cmwpO1xcXFxuICAgICAgICBsZXQgaW5wdXRzID0gcGRmYShodG1sLCBcXFxcXFxcImJvZHkmJmZvcm0mJmlucHV0XFxcXFxcXCIpO1xcXFxuICAgICAgICBsZXQgYm9keSA9IHt9O1xcXFxuICAgICAgICBmb3IgKGxldCBpdCBvZiBpbnB1dHMpIHtcXFxcbiAgICAgICAgICAgIGxldCBuYW1lID0gcGRmaChpdCwgXFxcXFxcXCJpbnB1dCYmbmFtZVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHBkZmgoaXQsIFxcXFxcXFwiaW5wdXQmJnZhbHVlXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIGJvZHlbbmFtZV0gPSB2YWx1ZSB8fCBrZXk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaHRtbCA9IHBvc3QoYWN0aW9uLCB7XFxcXG4gICAgICAgICAgICBib2R5OiBib2R5XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcblxcXFxuICAgIGxldCBhbGlzdCA9IHBkZmEoaHRtbCwgXFxcXFxcXCJib2R5JiZhXFxcXFxcXCIpO1xcXFxuICAgIGxldCBhcnIgPSBhbGlzdC5tYXAoaXQgPT4ge1xcXFxuICAgICAgICBsZXQgdCA9IHBkZmgoaXQsIFxcXFxcXFwiYSYmVGV4dFxcXFxcXFwiKTtcXFxcbiAgICAgICAgbGV0IHQyID0gcGRmaChpdCwgXFxcXFxcXCJhJiZ0aXRsZVxcXFxcXFwiKTtcXFxcbiAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgIC8vaHRtbDogaXQsXFxcXG4gICAgICAgICAgICB0ZXh0OiB0MiAmJiB0Mi5pbmNsdWRlcyhrZXkpID8gdDIgOiB0LFxcXFxuICAgICAgICAgICAgaHJlZjogcGQoaXQsIFxcXFxcXFwiYSYmaHJlZlxcXFxcXFwiLCB1cmwpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcblxcXFxuICAgIGZ1bmN0aW9uIGlzUmVzdWx0KGl0KSB7XFxcXG4gICAgICAgIGl0ID0gaXQudGV4dCB8fCBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICBpZiAoaXQgPT0gXFxcXFxcXCJcXFxcXFxcIiB8fCBpdC5tYXRjaCgv5pCc57SifOe7k+aenC8pKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gaXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhrZXkpO1xcXFxuICAgIH1cXFxcbiAgICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxcXG4gICAgICAgIGxldCB0ID0gaXQudGV4dDtcXFxcbiAgICAgICAgaWYgKCFpdC5ocmVmIHx8IGl0LmhyZWYgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKGlzUmVzdWx0KGl0KSkge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogdCxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3A/dT1cXFxcXFxcIiArIGJhc2U2NEVuY29kZShpdC5ocmVmKSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlxcXFxcXFwiICsgcnVsZSArIFxcXFxcXFwiPC9mb250PlxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gZDtcXFxcbn1cXFxcbiQuZXhwb3J0cyA9IHNlYXJjaDtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlop7liKBcXFwiLFxcXCJwYXRoXFxcIjpcXFwibWFuYWdlXFxcIixcXFwicnVsZVxcXCI6XFxcIiQuZXhwb3J0cyA9IGZ1bmN0aW9uKGQsIG5hbWVzKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwiQUnmioDmnK9cXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcImNvbmZpcm06Ly/ln7rkuo5BSeivhueJh+iHquWKqOWIhuaekOa6kOeggeaKgOacr++8jOS7o+eggeWujOWFqOW8gOa6kO+8jOaVsOaNruadpea6kOS6juWOn+e9keerme+8jOi9r+S7tuWSjOinhOWImeS4jeaPkOS+m+S7u+S9leWGheWuuS5qczonJ1xcXFxcXFwiLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJmbGV4X2J1dHRvblxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwiICsgXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKChycikgPT4ge1xcXFxuICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKFxcXFxcXFwiYWlhZGRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBhZGRJdGVtQWZ0ZXIocnIgKyBcXFxcXFxcImFpc2RlbFxcXFxcXFwiLCBbe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLor7fovpPlhaXnvZHnq5nlkI3np7BcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcXFxcXCJwdXRNeVZhcignbmFtZScsIGlucHV0KVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFxcXFxcImFpYWRkXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLor7fovpPlhaXnvZHnq5nmkJzntKLlnLDlnYBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcXFxcXCJwdXRNeVZhcignc3VybCcsIGlucHV0KVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFxcXFxcImFpYWRkXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmj5DkuqTkv53lrZhcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3VybCA9IGdldE15VmFyKFxcXFxcXFwic3VybFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZ2V0TXlWYXIoXFxcXFxcXCJuYW1lXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1cmwgPT0gXFxcXFxcXCJcXFxcXFxcIiB8fCBuYW1lID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+ivt+i+k+WFpeWujOaVtOWGheWuuVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgciA9IGRlY29kZVVSSUNvbXBvbmVudChzdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSByLnJlcGxhY2UobmV3IFJlZ0V4cChcXFxcXFxcIltcXFxcXFxcXHU0ZTAwLVxcXFxcXFxcdTlmYTVdK1xcXFxcXFwiLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiKipcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJ1bGVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJ1bGUobmFtZSwgcik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lt7Lkv53lrZhcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXFxcXFwiYWlhZGRcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgXSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImZsZXhfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgfSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwiIC0gXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJzZWxlY3Q6Ly9cXFxcXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgIG9wdGlvbnM6IG5hbWVzLFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6K+36YCJ5oup6KaB5Yig6Zmk55qE56uZ54K5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUnVsZVxcXFxuICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICByZW1vdmVSdWxlKGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vT0tcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJmbGV4X2J1dHRvblxcXFxcXFwiLFxcXFxuICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgaWQ6IE1ZX1JVTEUudGl0bGUgKyBcXFxcXFxcImFpc2RlbFxcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJibGFua19ibG9ja1xcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG5cXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLpqozor4HnoIFcXFwiLFxcXCJwYXRoXFxcIjpcXFwieXptXFxcIixcXFwicnVsZVxcXCI6XFxcImZ1bmN0aW9uIGNoZWNrKHVybCwgaHRtbCwgZCkge1xcXFxuICAgIGxldCByZWxvYWQgPSBmYWxzZTtcXFxcbiAgICByZXR1cm4gcmVsb2FkO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiB0ZXN0KHVybCwgaHRtbCwgZCwgb2xkLCBrZXksIHJ1bGUpIHtcXFxcbiAgICBpZiAoLzXnp5J86aKR57mBLy50ZXN0KGh0bWwpKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+aQnOe0oumcgOmXtOmalDXnp5LvvIzngrnlh7vph43mlrDliqDovb0nLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlxcXFxcXFwiICsgcnVsZSArIFxcXFxcXFwiPC9mb250PlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHVybCwgb2xkLCBrZXksIHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgc3AgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc3BcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBzcChvbGQsIGtleSwgcnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgd3JhcFxcXFxuICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBkKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGl0LnRpdGxlID0gd3JhcChpdC50aXRsZSwga2V5KTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHVybCwgZCk7XFxcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbSh1cmwpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vT0tcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0sIHVybCwgb2xkLCBrZXksIHJ1bGUpLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBpZDogdXJsXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIGNoZWNrOiBjaGVjayxcXFxcbiAgICB0ZXN0OiB0ZXN0XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5bel5YW3XFxcIixcXFwicGF0aFxcXCI6XFxcInRvb2xcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gd3JhcCh0ZXh0LCBzKSB7XFxcXG4gICAgcmV0dXJuIHRleHQuaW5jbHVkZXMoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPyB0ZXh0IDogXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIHRleHQucmVwbGFjZShuZXcgUmVnRXhwKFxcXFxcXFwiPGVtPnw8L2VtPlxcXFxcXFwiLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiXFxcXFxcXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChzLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcXFxcXFxcXFwiPlxcXFxcXFwiICsgcyArIFxcXFxcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXFxcXFwiKVxcXFxufVxcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIHdyYXA6IHdyYXBcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLljZXmkJxcXFwiLFxcXCJwYXRoXFxcIjpcXFwic2luZ2xlc1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIuaQnOe0olxcXFxcXFwiLFxcXFxuICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgIHB1dE15VmFyKFxcXFxcXFwic29cXFxcXFxcIiwgaW5wdXQpO1xcXFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgZGVzYzogXFxcXFxcXCLor7fovpPlhaXlhbPplK7or43vvIzlsL3ph4/lsJHlrZfkuI3opoHlpJrlrZdcXFxcXFxcIixcXFxcbiAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcXFxcXCJzb1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgIH1cXFxcbn0pO1xcXFxubGV0IHMgPSBnZXRNeVZhcihcXFxcXFxcInNvXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxubGV0IHIgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuaWYgKHMgIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgIGxldCBwID0gTVlfUEFHRTtcXFxcbiAgICBsZXQge1xcXFxuICAgICAgICBsb2FkXFxcXG4gICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpO1xcXFxuICAgIGxldCB7XFxcXG4gICAgICAgIHdyYXBcXFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3Rvb2xcXFxcXFxcIik7XFxcXG4gICAgbGV0IGRhdGEgPSBsb2FkKHAsIE1ZX1BBUkFNUy5SVUxFLm5hbWUpO1xcXFxuICAgIGxldCBhcnIgPSBkYXRhWzBdLmZpbmQocywgcCk7XFxcXG4gICAgZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxcXG4gICAgICAgIGl0LnRpdGxlID0gd3JhcChpdC50aXRsZSwgcylcXFxcbiAgICAgICAgZC5wdXNoKGl0KTtcXFxcbiAgICB9XFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57Si6aG16Z2iXFxcIixcXFwicGF0aFxcXCI6XFxcInNvdXBcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuaWYgKE1ZX1BBUkFNUy5rZXkgJiYgZ2V0TXlWYXIoXFxcXFxcXCJ1c2VcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgIHB1dE15VmFyKFxcXFxcXFwic291XFxcXFxcXCIsIE1ZX1BBUkFNUy5rZXkpO1xcXFxuICAgIHB1dE15VmFyKFxcXFxcXFwidXNlXFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKTtcXFxcbiAgICBhZGRMaXN0ZW5lcihcXFxcXFxcIm9uQ2xvc2VcXFxcXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcXFxcXCJ1c2VcXFxcXFxcIik7XFxcXG4gICAgfSkpO1xcXFxufVxcXFxuJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvcHJvJylcXFwifV1cIixcInByb3h5XCI6XCJcIn0iLCJ0aXRsZSI6IueyvuaOkue7jy7mtY4u5a2mLumAmi7or4Yu77yI56ys5LqM54mI77yJIOiWm+WFhuS4sC5lcHUuLi4ifQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement