Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥夸克网盘@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjEyM3BhblwiLFwicGF0aFwiOlwiMTIzcGFuXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnRyeSB7XFxuICAgIGNvbnN0IHtcXG4gICAgICAgIGZpbGVMaXN0LFxcbiAgICAgICAgZ2V0SWNvblxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvY29kZVxcXCIpXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKame+4j+iuvue9rlxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2Uvc2V0dGluZ3NcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KVxcbiAgICBpZiAoZ2V0SXRlbShcXFwidG9rZW5cXFwiLCBcXFwiXFxcIikgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHZhciBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJwYXRoczEyM1xcXCIsIFt7XFxuICAgICAgICAgICAgbmFtZTogXFxcIuagueebruW9lVxcXCIsXFxuICAgICAgICAgICAgaWQ6IFxcXCIwXFxcIlxcbiAgICAgICAgfV0pXFxuICAgICAgICBpZiAocGF0aHMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiPFxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucG9wKClcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJwYXRoczEyM1xcXCIsIHBhdGhzKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBwYXRocylcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaXRlbSwgcGF0aHMsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaWRcXFwiLCBpdGVtLmlkKVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzMTIzXFxcIiwgcGF0aHMuc2xpY2UoMCwgaW5kZXggKyAxKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSwgaXRlbSwgcGF0aHMsIGluZGV4KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgZmlsZUxpc3QocGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0uaWQpLmRhdGEuSW5mb0xpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICB2YXIgaW1nID0gZ2V0SWNvbihpdGVtKVxcbiAgICAgICAgICAgIGlmIChpdGVtLlR5cGUgPT0gMSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gJCgpLmxhenlSdWxlKChpZCwgbmFtZSwgcGF0aHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzMTIzXFxcIiwgcGF0aHMpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIGl0ZW0uRmlsZUlkLCBpdGVtLkZpbGVOYW1lLCBwYXRocylcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gaXRlbS5Eb3dubG9hZFVybFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5GaWxlTmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmnKrnmbvlvZVcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9zZXR0aW5nc1xcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxuICAgICAgICB9KVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJjb2RlXCIsXCJwYXRoXCI6XCJjb2RlXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMuZmlsZUxpc3QgPSBmdW5jdGlvbihpZCkge1xcbiAgICBsZXQgbGlzdCA9IHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHBzOi8vd3d3LjEyM3Bhbi5jb20vYXBpL2ZpbGUvbGlzdC9uZXdcXFwiLCB7XFxuICAgICAgICBcXFwiZHJpdmVJZFxcXCI6IDAsXFxuICAgICAgICBcXFwibGltaXRcXFwiOiAxMDAsXFxuICAgICAgICBcXFwib3JkZXJCeVxcXCI6IFxcXCJmaWxlSWRcXFwiLFxcbiAgICAgICAgXFxcIk9yZGVyRGlyZWN0aW9uXFxcIjogXFxcImFzY1xcXCIsXFxuICAgICAgICBcXFwiUGFyZW50RmlsZUlkXFxcIjogaWQsXFxuICAgICAgICBcXFwidHJhc2hlZFxcXCI6IGZhbHNlXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkF1dGhvcml6YXRpb25cXFwiOiBcXFwiQmVhcmVyIFxcXCIgKyBnZXRJdGVtKFxcXCJ0b2tlblxcXCIpXFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIHJldHVybiBKU09OLnBhcnNlKGxpc3QpXFxufVxcbiQuZXhwb3J0cy5nZXRJY29uID0gZnVuY3Rpb24oY29udGVudCkge1xcbiAgICBsZXQge1xcbiAgICAgICAgZ2V0SHptXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlXFxcIilcXG4gICAgbGV0IHJvb3QgPSBcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvaW1nL+aWh+S7tuexu+WeizIvXFxcIjtcXG4gICAgaWYgKGNvbnRlbnQuVHlwZSA9PSAxKSB7XFxuICAgICAgICBpbWcgPSByb290ICsgXFxcIuaWh+S7tuWkuS5zdmdcXFwiXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBsZXQgZmlsZXMgPSAnYWl8YXBrfGF2aXxjc3N8ZG1nfGV4ZXxmbHZ8Z2lmfGhpa2VyfGh0bWx8aXNvfGpwZ3xqc3xqc29ufGxvZ3xtb3Z8bXAzfG1wNHxvdGZ8cGhwfHBuZ3xwcHR8cHNkfHRhYmxlfHR4dHx3YXZ8eGxzfHppcHxjc3N8ZG9jfGVwdWJ8ZXhjfGh0bXx4bHN4Jy5zcGxpdCgnfCcpO1xcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gY29udGVudC5GaWxlTmFtZVxcbiAgICAgICAgbGV0IGh6bSA9IGdldEh6bShmaWxlTmFtZSlcXG4gICAgICAgIGlmIChmaWxlcy5pbmNsdWRlcyhoem0pKSB7XFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIGh6bSArICcuc3ZnJztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIFxcXCLmlofku7Yuc3ZnXFxcIlxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBpbWdcXG59XFxuJC5leHBvcnRzLmdldEh6bSA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxuICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHIoZmlsZU5hbWUubGFzdEluZGV4T2YoXFxcIi5cXFwiKSArIDEpXFxufVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF8yXCIsXCJuYW1lXCI6XCJzZXR0aW5nc1wiLFwicGF0aFwiOlwic2V0dGluZ3NcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLotKblj7co5omL5py65Y+3KVxcXCIsXFxuICAgIHVybDogJChnZXRJdGVtKFxcXCJ1c2VybmFtZVxcXCIsIFxcXCJcXFwiKSkuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbShcXFwidXNlcm5hbWVcXFwiLCBpbnB1dClcXG4gICAgfSlcXG59KVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5a+G56CBXFxcIixcXG4gICAgdXJsOiAkKGdldEl0ZW0oXFxcInBhc3N3ZFxcXCIsIFxcXCJcXFwiKSkuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbShcXFwicGFzc3dkXFxcIiwgaW5wdXQpXFxuICAgIH0pXFxufSlcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHBvc3QoXFxcImh0dHBzOi8vd3d3LjEyM3Bhbi5jb20vYXBpL3VzZXIvc2lnbl9pblxcXCIsIHtcXG4gICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgIFxcXCJwYXNzcG9ydFxcXCI6IGdldEl0ZW0oXFxcInVzZXJuYW1lXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICBcXFwicGFzc3dvcmRcXFwiOiBnZXRJdGVtKFxcXCJwYXNzd2RcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSlcXG4gICAgICAgIGlmIChyZXMubWVzc2FnZSA9PSBcXFwic3VjY2Vzc1xcXCIpIHtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJ0b2tlblxcXCIsIHJlcy5kYXRhLnRva2VuKVxcbiAgICAgICAgICAgIGJhY2soKVxcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nmbvpmYbmiJDlip9cXFwiXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgcmVzLm1lc3NhZ2VcXG4gICAgICAgIH1cXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCJcXG59KVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi55m+5bqm572R55uYXCIsXCJwYXRoXCI6XCLnmb7luqbnvZHnm5hcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLorr7nva5cXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvbG9naW4xXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxufSlcXG5pZiAoZ2V0SXRlbShcXFwiYWNjZXNzX3Rva2VuXFxcIiwgXFxcIlxcXCIpICE9IFxcXCJcXFwiKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBjb25zdCB7XFxuICAgICAgICAgICAgZ2V0SWNvbixcXG4gICAgICAgICAgICBnZXRIem0sXFxuICAgICAgICAgICAgZ2V0TGlua1xcbiAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvZGUxXFxcIilcXG4gICAgICAgIGxldCBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJwYXRoc2JhaWR1XFxcIiwgW3tcXG4gICAgICAgICAgICBwYXRoOiBcXFwiL1xcXCIsXFxuICAgICAgICAgICAgbmFtZTogXFxcIuWutlxcXCJcXG4gICAgICAgIH1dKVxcbiAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzYmFpZHVcXFwiLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3Jlc3QvMi4wL3hwYW4vZmlsZVxcXCIsIHtcXG4gICAgICAgICAgICBcXFwiYWNjZXNzX3Rva2VuXFxcIjogZ2V0SXRlbShcXFwiYWNjZXNzX3Rva2VuYmFpZHVcXFwiKSxcXG4gICAgICAgICAgICBcXFwibWV0aG9kXFxcIjogXFxcImxpc3RcXFwiLFxcbiAgICAgICAgICAgIFxcXCJkaXJcXFwiOiBwYXRoc1twYXRocy5sZW5ndGggLSAxXS5wYXRoLFxcbiAgICAgICAgICAgIFxcXCJ3ZWJcXFwiOiBcXFwid2ViXFxcIixcXG4gICAgICAgICAgICBcXFwibGltaXRcXFwiOiAwLFxcbiAgICAgICAgICAgIFxcXCJsaW1pdFxcXCI6IDIwMFxcbiAgICAgICAgfSkpKVxcbiAgICAgICAgcmVzLmxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBpZiAoaXRlbS5pc2RpciA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSAkKCkubGF6eVJ1bGUoKGl0ZW0sIHBhdGhzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBpdGVtLnBhdGgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5zZXJ2ZXJfZmlsZW5hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwicGF0aHNiYWlkdVxcXCIsIHBhdGhzKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBpdGVtLCBwYXRocylcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQubW92aWUuaW5jbHVkZXMoZ2V0SHptKGl0ZW0uc2VydmVyX2ZpbGVuYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoXFxcIm1vdmllXFxcIiwgaXRlbS5mc19pZCwgaXRlbS5wYXRoKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0oaXRlbS5zZXJ2ZXJfZmlsZW5hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhcXFwiYXVkaW9cXFwiLCBpdGVtLmZzX2lkLCBpdGVtLnBhdGgpXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLmltZy5pbmNsdWRlcyhnZXRIem0oaXRlbS5zZXJ2ZXJfZmlsZW5hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhcXFwiaW1nXFxcIiwgaXRlbS5mc19pZCwgaXRlbS5wYXRoKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKFxcXCJcXFwiLCBpdGVtLmZzX2lkLCBpdGVtLnBhdGgpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnNlcnZlcl9maWxlbmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBnZXRJY29uKGl0ZW0pLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICAgICB0b2FzdChcXFwi5Ye6546w6ZSZ6K+v77yM6K+35p+l55yL5pel5b+XXFxcIikgICAgICAgIFxcbiAgICB9XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcImNvZGUxXCIsXCJwYXRoXCI6XCJjb2RlMVwiLFwicnVsZVwiOlwiJC5leHBvcnRzLmdldEljb24gPSBmdW5jdGlvbihjb250ZW50KSB7XFxuICAgIGxldCB7XFxuICAgICAgICBnZXRIem1cXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvZGVcXFwiKVxcbiAgICBsZXQgcm9vdCA9IFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9pbWcv5paH5Lu257G75Z6LMi9cXFwiO1xcbiAgICBpZiAoY29udGVudC5pc2RpciA9PSAxKSB7XFxuICAgICAgICBpbWcgPSByb290ICsgXFxcIuaWh+S7tuWkuS5zdmdcXFwiXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBsZXQgZmlsZXMgPSAnYWl8YXBrfGF2aXxjc3N8ZG1nfGV4ZXxmbHZ8Z2lmfGhpa2VyfGh0bWx8aXNvfGpwZ3xqc3xqc29ufGxvZ3xtb3Z8bXAzfG1wNHxvdGZ8cGhwfHBuZ3xwcHR8cHNkfHRhYmxlfHR4dHx3YXZ8eGxzfHppcHxjc3N8ZG9jfGVwdWJ8ZXhjfGh0bXx4bHN4Jy5zcGxpdCgnfCcpO1xcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gY29udGVudC5zZXJ2ZXJfZmlsZW5hbWVcXG4gICAgICAgIGxldCBoem0gPSBnZXRIem0oZmlsZU5hbWUpXFxuICAgICAgICBpZiAoZmlsZXMuaW5jbHVkZXMoaHptKSkge1xcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBoem0gKyAnLnN2Zyc7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBcXFwi5paH5Lu2LnN2Z1xcXCJcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gaW1nXFxufVxcbiQuZXhwb3J0cy5nZXRIem0gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcbiAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKFxcXCIuXFxcIikgKyAxKVxcbn1cXG4kLmV4cG9ydHMuZ2V0TGluayA9IGZ1bmN0aW9uKGV4dCwgaWQsIHBhdGgpIHtcXG4gICAgcmV0dXJuICQoKS5sYXp5UnVsZSgoZXh0LCBpZCwgcGF0aCkgPT4ge1xcbiAgICAgICAgaWYgKGdldEl0ZW0oXFxcImprXFxcIiwgXFxcIjBcXFwiKSA9PSBcXFwiMVxcXCIpIHtcXG4gICAgICAgICAgICB2YXIgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXCJodHRwczovL3Bhbi5iYWlkdS5jb20vYXBpL2ZpbGVtZXRhc1xcXCIsIHtcXG4gICAgICAgICAgICAgICAgXFxcImFjY2Vzc190b2tlblxcXCI6IGdldEl0ZW0oXFxcImFjY2Vzc190b2tlblxcXCIpLFxcbiAgICAgICAgICAgICAgICBcXFwiZGxpbmtcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJ3ZWJcXFwiOiBcXFwiNVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJvcmlnaW5cXFwiOiBcXFwiZGxuYVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJ0YXJnZXRcXFwiOiBgW1xcXFxcXFwiJHtwYXRofVxcXFxcXFwiXWBcXG4gICAgICAgICAgICB9KSkpLmluZm9bMF0uZGxpbmtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3Jlc3QvMi4wL3hwYW4vbXVsdGltZWRpYVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgXFxcImFjY2Vzc190b2tlblxcXCI6IGdldEl0ZW0oXFxcImFjY2Vzc190b2tlblxcXCIpLFxcbiAgICAgICAgICAgICAgICBcXFwibWV0aG9kXFxcIjogXFxcImZpbGVtZXRhc1xcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJmc2lkc1xcXCI6IGBbJHtpZH1dYCxcXG4gICAgICAgICAgICAgICAgXFxcImRsaW5rXFxcIjogXFxcIjFcXFwiXFxuICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwicGFuLmJhaWR1LmNvbVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pKS5saXN0WzBdLmRsaW5rICsgXFxcIiZhY2Nlc3NfdG9rZW49XFxcIiArIGdldEl0ZW0oXFxcImFjY2Vzc190b2tlblxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZXh0ID09IFxcXCJtb3ZpZVxcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICB1cmxzOiBbcmVzICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIl0sXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcInBhbi5iYWlkdS5jb21cXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT0gXFxcImF1ZGlvXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgIHVybHM6IFtyZXMgKyBcXFwiI2lzTXVzaWM9dHJ1ZSNcXFwiXSxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwicGFuLmJhaWR1LmNvbVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9IGVsc2UgaWYgKGV4dCA9PSBcXFwiaW1nXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiByZXMgKyBgIy5qcGc7e1VzZXItQWdlbnRAcGFuLmJhaWR1LmNvbX1gXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiZG93bmxvYWQ6Ly9cXFwiICsgcmVzICsgYDt7VXNlci1BZ2VudEBwYW4uYmFpZHUuY29tfWBcXG4gICAgICAgIH1cXG4gICAgfSwgZXh0LCBpZCwgcGF0aClcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzJcIixcIm5hbWVcIjpcImxvZ2luMVwiLFwicGF0aFwiOlwibG9naW4xXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi6I635Y+WdG9rZW5cXFwiLFxcbiAgICB1cmw6IFxcXCJodHRwczovL29wZW5hcGkuYmFpZHUuY29tL29hdXRoLzIuMC9hdXRob3JpemU/cmVzcG9uc2VfdHlwZT1jb2RlJmNsaWVudF9pZD1pWUNlQzlnMDhoNXZ1UDlVcXZQSEtLU1ZyS0ZYR2ExdiZyZWRpcmVjdF91cmk9aHR0cHM6Ly90b29sLm5uLmNpL2JhaWR1L2NhbGxiYWNrJnNjb3BlPWJhc2ljLG5ldGRpc2smcXJjb2RlPTFcXFwiXFxufSlcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgIHVybDogJChcXFwiXFxcIiwgXFxcIuWhq+WGmeiOt+WPluWIsOeahHRva2VuXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cHM6Ly9vcGVuYXBpLmJhaWR1LmNvbS9vYXV0aC8yLjAvdG9rZW5cXFwiLCB7XFxuICAgICAgICAgICAgXFxcImdyYW50X3R5cGVcXFwiOiBcXFwicmVmcmVzaF90b2tlblxcXCIsXFxuICAgICAgICAgICAgXFxcInJlZnJlc2hfdG9rZW5cXFwiOiBpbnB1dCxcXG4gICAgICAgICAgICBcXFwiY2xpZW50X2lkXFxcIjogXFxcImlZQ2VDOWcwOGg1dnVQOVVxdlBIS0tTVnJLRlhHYTF2XFxcIixcXG4gICAgICAgICAgICBcXFwiY2xpZW50X3NlY3JldFxcXCI6IFxcXCJqWGlGTU9QVlBDV2xPMk01Q3dXUXpmZnBOUGFHVFJCR1xcXCJcXG4gICAgICAgIH0pKSlcXG4gICAgICAgIGlmICghcmVzLmFjY2Vzc190b2tlbikge1xcbiAgICAgICAgICAgIGxvZyhyZXMpXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mUmeivr++8ge+8ge+8gVxcXCJcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwiYWNjZXNzX3Rva2VuYmFpZHVcXFwiLCByZXMuYWNjZXNzX3Rva2VuKVxcbiAgICAgICAgICAgLy8gc2V0SXRlbShcXFwicmVmcmVzaF90b2tlblxcXCIsIHJlcy5yZWZyZXNoX3Rva2VuKVxcbiAgICAgICAgICAgIGJhY2soKVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn0pXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IGdldEl0ZW0oXFxcImprXFxcIiwgXFxcIjBcXFwiKSA9PSBcXFwiMFxcXCIgPyBcXFwi5a6Y5pa55o6l5Y+j77ya5LiN5pivdmlw5Lya6ZmQ6YCf77yM56iz5a6aXFxcIiA6IFxcXCLpnZ7lrpjmlrnmjqXlj6PvvJrlj6/og73kuI3pmZDpgJ/vvIzkuI3nqLPlrppcXFwiLFxcbiAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICBzZXRJdGVtKFxcXCJqa1xcXCIsIGdldEl0ZW0oXFxcImprXFxcIiwgXFxcIjBcXFwiKSA9PSBcXFwiMFxcXCIgPyBcXFwiMVxcXCIgOiBcXFwiMFxcXCIpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxufSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJQaWtwYWtcIixcInBhdGhcIjpcIlBpa3Bha1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdzMlxcXCJcXG59KVxcbmlmIChnZXRJdGVtKFxcXCJhY2Nlc3NfdG9rZW5cXFwiLCBcXFwiXFxcIikgIT0gXFxcIlxcXCIpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGNvbnN0IHtcXG4gICAgICAgICAgICBnZXRIem1cXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlMlxcXCIpXFxuICAgICAgICBsZXQgcGF0aHMgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwicGF0aHNwaWtwYWtcXFwiLCBbe1xcbiAgICAgICAgICAgIFxcXCJpZFxcXCI6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIuWutlxcXCJcXG4gICAgICAgIH1dKVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIua3u+WKoOejgemTvlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbiAgICAgICAgICAgIHVybDogJChcXFwiXFxcIiwgXFxcIui+k+WFpeejgeWKm+mTvuaOpVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJwaWtwYWthcHA6Ly9teXBpa3Bhay5jb20veHBhbi9tYWluX3RhYj90YWI9MSZhZGRfdXJsPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgICAgICBwYXRocy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwicGF0aHNwaWtwYWtcXFwiLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHBzOi8vYXBpLWRyaXZlLm15cGlrcGFrLmNvbS9kcml2ZS92MS9maWxlc1xcXCIsIHtcXG4gICAgICAgICAgICBcXFwicGFyZW50X2lkXFxcIjogcGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0uaWQsXFxuICAgICAgICAgICAgXFxcInRodW1ibmFpbF9zaXplXFxcIjogXFxcIlNJWkVfTEFSR0VcXFwiLFxcbiAgICAgICAgICAgIFxcXCJ3aXRoX2F1ZGl0XFxcIjogXFxcInRydWVcXFwiLFxcbiAgICAgICAgICAgIFxcXCJsaW1pdFxcXCI6IFxcXCIxMDAwXFxcIixcXG4gICAgICAgICAgICBcXFwiZmlsdGVyc1xcXCI6ICd7XFxcInBoYXNlXFxcIjp7XFxcImVxXFxcIjpcXFwiUEhBU0VfVFlQRV9DT01QTEVURVxcXCJ9LFxcXCJ0cmFzaGVkXFxcIjp7XFxcImVxXFxcIjpmYWxzZX19JyxcXG4gICAgICAgICAgICBcXFwicGFnZV90b2tlblxcXCI6IFxcXCJcXFwiXFxuICAgICAgICB9KSwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIkF1dGhvcml6YXRpb25cXFwiOiBcXFwiQmVhcmVyIFxcXCIgKyBnZXRJdGVtKFxcXCJhY2Nlc3NfdG9rZW5cXFwiKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pKVxcbiAgICAgICAgbGlzdC5maWxlcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGlmIChpdGVtLmtpbmQgPT0gXFxcImRyaXZlI2ZvbGRlclxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybGwgPSAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwicGF0aHNwaWtwYWtcXFwiLCBwYXRocylcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSwgcGF0aHMsIGl0ZW0pXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLm1vdmllLmluY2x1ZGVzKGdldEh6bShpdGVtLm5hbWUpKSkge1xcblxcbiAgICAgICAgICAgICAgICB2YXIgZXh0ID0gXFxcIiNpc1ZpZGVvPXRydWUjXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0oaXRlbS5uYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGV4dCA9IFxcXCIjaXNNdXNpYz10cnVlI1xcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQuaW1nLmluY2x1ZGVzKGdldEh6bShpdGVtLm5hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgZXh0ID0gXFxcIiMuanBnXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBleHQgPSBcXFwiXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgdXJsID0gJCgpLmxhenlSdWxlKChpdGVtLCBleHQpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBgaHR0cHM6Ly9hcGktZHJpdmUubXlwaWtwYWsuY29tL2RyaXZlL3YxL2ZpbGVzLyR7aXRlbS5pZH0/X21hZ2ljPTIwMjEmdGh1bWJuYWlsX3NpemU9U0laRV9MQVJHRWBcXG4gICAgICAgICAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdCh1LCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkF1dGhvcml6YXRpb25cXFwiOiBcXFwiQmVhcmVyIFxcXCIgKyBnZXRJdGVtKFxcXCJhY2Nlc3NfdG9rZW5cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KSlcXG4gICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIHJlcy5tZWRpYXMpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRtcCA9IGl0ZW0ubGlua1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAudXJsKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXAudXJsICsgZXh0XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIGl0ZW0sIGV4dClcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uaWNvbl9saW5rLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogaXRlbS5raW5kID09IFxcXCJkcml2ZSNmb2xkZXJcXFwiID8gdXJsbCA6IHVybFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICB0b2FzdChcXFwi5qOA5rWL5Yiw6ZSZ6K+vXFxcIilcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIH1cXG59XFxuXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiY29kZTJcIixcInBhdGhcIjpcImNvZGUyXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMubG9naW4gPSBmdW5jdGlvbih1c2VybmFtZSwgcGFzc3dvcmQpIHtcXG4gICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocG9zdChcXFwiaHR0cHM6Ly91c2VyLm15cGlrcGFrLmNvbS92MS9hdXRoL3NpZ25pblxcXCIsIHtcXG4gICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICBcXFwiY2FwdGNoYV90b2tlblxcXCI6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIFxcXCJjbGllbnRfaWRcXFwiOiBcXFwiWU54VDl3N0dNZFd2RU9LYVxcXCIsXFxuICAgICAgICAgICAgXFxcImNsaWVudF9zZWNyZXRcXFwiOiBcXFwiZGJ3Mk90bVZFZXVVdklwdGIxQ295Z1xcXCIsXFxuICAgICAgICAgICAgXFxcInVzZXJuYW1lXFxcIjogdXNlcm5hbWUsXFxuICAgICAgICAgICAgXFxcInBhc3N3b3JkXFxcIjogcGFzc3dvcmRcXG4gICAgICAgIH1cXG4gICAgfSkpXFxuICAgIGlmIChyZXMuYWNjZXNzX3Rva2VuKSB7XFxuICAgICAgICBzZXRJdGVtKFxcXCJhY2Nlc3NfdG9rZW5cXFwiLCByZXMuYWNjZXNzX3Rva2VuKVxcbiAgICAgICAgc2V0SXRlbShcXFwicmVmcmVzaF90b2tlblxcXCIsIHJlcy5yZWZyZXNoX3Rva2VuKVxcbiAgICAgICAgcmV0dXJuIHRydWVcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGxvZyhyZXMpXFxuICAgICAgICByZXR1cm4gZmFsc2VcXG4gICAgfVxcbn1cXG4kLmV4cG9ydHMuZ2V0SHptID0gZnVuY3Rpb24oZmlsZU5hbWUpIHtcXG4gICAgcmV0dXJuIGZpbGVOYW1lLnN1YnN0cihmaWxlTmFtZS5sYXN0SW5kZXhPZihcXFwiLlxcXCIpICsgMSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzJcIixcIm5hbWVcIjpcInNldHRpbmdzMlwiLFwicGF0aFwiOlwic2V0dGluZ3MyXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi6LSm5Y+3KOmCrueusSlcXFwiLFxcbiAgICB1cmw6ICQoZ2V0SXRlbShcXFwidXNlcm5hbWVcXFwiLCBcXFwiXFxcIikpLmlucHV0KCgpID0+IHtcXG4gICAgICAgIHNldEl0ZW0oXFxcInVzZXJuYW1lXFxcIiwgaW5wdXQpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgIH0pXFxufSlcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuWvhueggVxcXCIsXFxuICAgIHVybDogJChnZXRJdGVtKFxcXCJwYXNzd2RcXFwiLCBcXFwiXFxcIikpLmlucHV0KCgpID0+IHtcXG4gICAgICAgIHNldEl0ZW0oXFxcInBhc3N3ZFxcXCIsIGlucHV0KVxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICB9KVxcbn0pXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLnmbvpmYZcXFwiLFxcbiAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICBjb25zdCB7XFxuICAgICAgICAgICAgbG9naW5cXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlMlxcXCIpXFxuICAgICAgICBsb2coZ2V0SXRlbShcXFwidXNlcm5hbWVcXFwiKSlcXG4gICAgICAgIGlmIChsb2dpbihnZXRJdGVtKFxcXCJ1c2VybmFtZVxcXCIpLCBnZXRJdGVtKFxcXCJwYXNzd2RcXFwiKSkpIHtcXG4gICAgICAgICAgICBiYWNrKClcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v55m76ZmG5oiQ5YqfXFxcIlxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v55m76ZmG5aSx6LSlXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbn0pXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlpKnnv7zkupHnm5hcIixcInBhdGhcIjpcIuWkqee/vOS6keebmFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG50cnkge1xcbiAgICBpZiAoZmlsZUV4aXN0KFxcXCIxODkudHh0XFxcIikpIHtcXG4gICAgICAgIGNvbnN0IHtcXG4gICAgICAgICAgICBnZXRGaWxlcyxcXG4gICAgICAgICAgICBnZXRJY29uXFxuICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvY29kZTNcXFwiKVxcbiAgICAgICAgdmFyIHBhdGhzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcInBhdGhzdHlcXFwiLCBbe1xcbiAgICAgICAgICAgIFxcXCJpZFxcXCI6IC0xMSxcXG4gICAgICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCLlrrZcXFwiXFxuICAgICAgICB9XSlcXG4gICAgICAgIHBhdGhzLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgocGF0aHMsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJwYXRoc3R5XFxcIiwgcGF0aHMuc2xpY2UoMCwgaSArIDEpKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBwYXRocywgaSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgICAgIGxldCBsaXN0ID0gZ2V0RmlsZXMocGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0uaWQpXFxuICAgICAgICBsaXN0LmZpbGVMaXN0QU8uZm9sZGVyTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgaW1nOiBcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvaW1nL+aWh+S7tuexu+WeizIv5paH5Lu25aS5LnN2Z1xcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaWQsIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzdHlcXFwiLCBwYXRocylcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSwgcGF0aHMsIGl0ZW0uaWQsIGl0ZW0ubmFtZSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgICAgIGxpc3QuZmlsZUxpc3RBTy5maWxlTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIHZhciBpbWcgPSBnZXRJY29uKGl0ZW0ubmFtZSlcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaWQsIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRIem1cXG4gICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb29raWUgPSByZWFkRmlsZShcXFwiMTg5LnR4dFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IFxcXCJodHRwczovL2Nsb3VkLjE4OS5jbi9hcGkvcG9ydGFsL2dldEZpbGVJbmZvLmFjdGlvblxcXCJcXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwodSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJmaWxlSWRcXFwiOiBpZFxcbiAgICAgICAgICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJBY2NlcHRcXFwiOiBcXFwiYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pKVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQubW92aWUuaW5jbHVkZXMoZ2V0SHptKG5hbWUpKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFtcXFwiaHR0cHM6XFxcIiArIHJlcy5kb3dubG9hZFVybCArIFxcXCIjaXNWaWRlbz10cnVlI1xcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0obmFtZSkpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW1xcXCJodHRwczpcXFwiICsgcmVzLmRvd25sb2FkVXJsICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIl0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWUucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkLmltZy5pbmNsdWRlcyhnZXRIem0obmFtZSkpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczpcXFwiICsgcmVzLmRvd25sb2FkVXJsICsgYCMuanBnQFVzZXItQWdlbnQ9JHtQQ19VQX1AQ29va2llPSR7Y29va2llfWBcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJkb3dubG9hZDovL2h0dHBzOlxcXCIgKyByZXMuZG93bmxvYWRVcmwgKyBgQFVzZXItQWdlbnQ9JHtQQ19VQX1AQ29va2llPSR7Y29va2llfWBcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwgaXRlbS5pZCwgaXRlbS5uYW1lKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZC51bnNoaWZ0KHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2xvZ2luM1xcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbiAgICAgICAgfSlcXG4gICAgfVxcbn0gY2F0Y2ggKGUpIHtcXG4gICAgZC51bnNoaWZ0KHtcXG4gICAgICAgIHRpdGxlOiBcXFwi55m76ZmGXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9sb2dpbjNcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbiAgICB9KVxcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB0b2FzdChcXFwi56iL5bqP5Y+v6IO95Ye66ZSZ5LqG77yM6K+35p+l55yL5pel5b+XXFxcIilcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiY29kZTNcIixcInBhdGhcIjpcImNvZGUzXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMuZ2V0RmlsZXMgPSBmdW5jdGlvbihpZCkge1xcbiAgICBsZXQgdSA9IFxcXCJodHRwczovL2Nsb3VkLjE4OS5jbi9hcGkvb3Blbi9maWxlL2xpc3RGaWxlcy5hY3Rpb25cXFwiXFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXG4gICAgICAgIFxcXCJwYWdlU2l6ZVxcXCI6IDEwMDAsXFxuICAgICAgICBcXFwicGFnZU51bVxcXCI6IDEsXFxuICAgICAgICBcXFwibWVkaWFUeXBlXFxcIjogMCxcXG4gICAgICAgIFxcXCJmb2xkZXJJZFxcXCI6IGlkLFxcbiAgICAgICAgXFxcImljb25PcHRpb25cXFwiOiA1LFxcbiAgICAgICAgXFxcIm9yZGVyQnlcXFwiOiBcXFwibGFzdE9wVGltZVxcXCIsXFxuICAgICAgICBcXFwiZGVzY2VuZGluZ1xcXCI6IFxcXCJ0cnVlXFxcIixcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogcmVhZEZpbGUoXFxcIjE4OS50eHRcXFwiKSxcXG4gICAgICAgICAgICBcXFwiQWNjZXB0XFxcIjogXFxcImFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOFxcXCIsXFxuICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQVxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICB2YXIganNvbiA9IHJlcy5yZXBsYWNlKC9cXFxcXFxcImlkXFxcXFxcXCI6KFxcXFxkKykvZywgJ1xcXCJpZFxcXCI6XFxcIiQxXFxcIicpIC8v6Kej5YazanPnmoTnsr7luqbpl67pophcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbilcXG59XFxuJC5leHBvcnRzLmdldEljb24gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcbiAgICBsZXQge1xcbiAgICAgICAgZ2V0SHptXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlXFxcIilcXG4gICAgbGV0IHJvb3QgPSBcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvaW1nL+aWh+S7tuexu+WeizIvXFxcIjtcXG4gICAgbGV0IGZpbGVzID0gJ2FpfGFwa3xhdml8Y3NzfGRtZ3xleGV8Zmx2fGdpZnxoaWtlcnxodG1sfGlzb3xqcGd8anN8anNvbnxsb2d8bW92fG1wM3xtcDR8b3RmfHBocHxwbmd8cHB0fHBzZHx0YWJsZXx0eHR8d2F2fHhsc3x6aXB8Y3NzfGRvY3xlcHVifGV4Y3xodG18eGxzeCcuc3BsaXQoJ3wnKTtcXG4gICAgbGV0IGh6bSA9IGdldEh6bShmaWxlTmFtZSlcXG4gICAgaWYgKGZpbGVzLmluY2x1ZGVzKGh6bSkpIHtcXG4gICAgICAgIGltZyA9IHJvb3QgKyBoem0gKyAnLnN2Zyc7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBpbWcgPSByb290ICsgXFxcIuaWh+S7ti5zdmdcXFwiXFxuICAgIH1cXG4gICAgcmV0dXJuIGltZ1xcbn1cXG4kLmV4cG9ydHMuZ2V0SHptID0gZnVuY3Rpb24oZmlsZU5hbWUpIHtcXG4gICAgcmV0dXJuIGZpbGVOYW1lLnN1YnN0cihmaWxlTmFtZS5sYXN0SW5kZXhPZihcXFwiLlxcXCIpICsgMSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJsb2dpbjNcIixcInBhdGhcIjpcImxvZ2luM1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICgpID0+IHtcXG4gICAgbGV0IGMgPSBnZXRWYXIoXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL3dlYi9tYWluXFxcIik7XFxuICAgIGxvZyhjKTtcXG4gICAgc2F2ZUZpbGUoXFxcIjE4OS50eHRcXFwiLCBjKTtcXG4gICAgY2xlYXJWYXIoXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL3dlYi9tYWluXFxcIik7XFxufSlcXG5kLnB1c2goe1xcbiAgICB1cmw6IFxcXCJodHRwczovL2Nsb3VkLjE4OS5jbi93ZWIvbG9naW4uaHRtbFxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICBkZXNjOiBcXFwiMTAwJSYmZmxvYXRcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBsb2NhdGlvbi5ocmVmXFxuICAgICAgICAgICAgaWYgKHVybC5pbmNsdWRlcyhcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vd2ViL21haW5cXFwiKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgY29va2llID0gZmJhLmdldENvb2tpZSh1cmwpO1xcbiAgICAgICAgICAgICAgICBpZiAoY29va2llICE9IG51bGwgJiYgY29va2llLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5wdXRWYXIoXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL3dlYi9tYWluXFxcIiwgY29va2llKTtcXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFxcXCLlt7Lojrflj5bliLBjb29raWVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5iYWNrKCk7ICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSxcXG4gICAgICAgIHVhOiBQQ19VQSxcXG4gICAgICAgIGNhbkJhY2s6IHRydWVcXG4gICAgfVxcbn0pXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5aS45YWL572R55uYXCIsXCJwYXRoXCI6XCLlpLjlhYvnvZHnm5hcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxudHJ5IHtcXG4gICAgaWYgKGZpbGVFeGlzdChcXFwicXVhcmsudHh0XFxcIikpIHtcXG4gICAgICAgIGNvbnN0IHtcXG4gICAgICAgICAgICBnZXRJY29uLFxcbiAgICAgICAgICAgIGdldEh6bSxcXG4gICAgICAgICAgICBnZXRMaW5rXFxuICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvY29kZTRcXFwiKVxcbiAgICAgICAgdmFyIGNvb2tpZSA9IHJlYWRGaWxlKFxcXCJxdWFyay50eHRcXFwiKVxcbiAgICAgICAgbGV0IHVzZXJpbmZvID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9hY2NvdW50L2luZm9cXFwiLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSkpXFxuICAgICAgICBsZXQgcGF0aHMgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwicGF0aHNcXFwiLCBbe1xcbiAgICAgICAgICAgIFxcXCJpZFxcXCI6IFxcXCIwXFxcIixcXG4gICAgICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCLmoLnnm67lvZVcXFwiXFxuICAgICAgICB9XSlcXG4gICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdXNlcmluZm8uZGF0YS5uaWNrbmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiB1c2VyaW5mby5kYXRhLmF2YXRhclVyaSxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdzNFxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgocGF0aHMsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwicGF0aHNcXFwiLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpKVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXCJodHRwczovL2RyaXZlLnF1YXJrLmNuLzEvY2xvdWRkcml2ZS9maWxlL3NvcnRcXFwiLCB7XFxuICAgICAgICAgICAgXFxcInBkaXJfZmlkXFxcIjogcGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0uaWQsXFxuICAgICAgICAgICAgXFxcImZyXFxcIjogXFxcInBjXFxcIixcXG4gICAgICAgICAgICBcXFwicHJcXFwiOiBcXFwidWNwcm9cXFwiLFxcbiAgICAgICAgICAgIFxcXCJfc2l6ZVxcXCI6IDEwLFxcbiAgICAgICAgICAgIFxcXCJfZmV0Y2hfdG90YWxcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgXFxcIl9zb3J0XFxcIjogXFxcImZpbGVfdHlwZTphc2MsZmlsZV9uYW1lOmFzY1xcXCIsXFxuICAgICAgICAgICAgXFxcIl9wYWdlXFxcIjogZ2V0UGFyYW0oXFxcInBhZ2VcXFwiKVxcbiAgICAgICAgfSksIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWUsXFxuICAgICAgICAgICAgICAgIFxcXCJBY2NlcHRcXFwiOiBcXFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pKVxcbiAgICAgICAgcmVzLmRhdGEubGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGlmICghaXRlbS5maWxlKSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSAkKCkubGF6eVJ1bGUoKGl0ZW0sIHBhdGhzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5maWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5maWxlX25hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwicGF0aHNcXFwiLCBwYXRocylcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSwgaXRlbSwgcGF0aHMpXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLm1vdmllLmluY2x1ZGVzKGdldEh6bShpdGVtLmZpbGVfbmFtZSkpKSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKGl0ZW0sIGNvb2tpZSwgXFxcIm1vdmllXFxcIilcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQuYXVkaW8uaW5jbHVkZXMoZ2V0SHptKGl0ZW0uZmlsZV9uYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoaXRlbSwgY29va2llLCBcXFwiYXVkaW9cXFwiKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5pbWcuaW5jbHVkZXMoZ2V0SHptKGl0ZW0uZmlsZV9uYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoaXRlbSwgY29va2llLCBcXFwiaW1nXFxcIilcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhpdGVtLCBjb29raWUpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLmZpbGVfbmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBnZXRJY29uKGl0ZW0pLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLnmbvpmYZcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9zZXR0aW5nczRcXFwiXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfVxcbn0gY2F0Y2ggKGUpIHtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiY29kZTRcIixcInBhdGhcIjpcImNvZGU0XCIsXCJydWxlXCI6XCIkLmV4cG9ydHMuZ2V0SWNvbiA9IGZ1bmN0aW9uKGNvbnRlbnQpIHtcXG4gICAgbGV0IHtcXG4gICAgICAgIGdldEh6bVxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvY29kZVxcXCIpXFxuICAgIGxldCByb290ID0gXFxcImh0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfMzIzOTQzNTEvZHIvLS9yYXcvbWFzdGVyL2ltZy/mlofku7bnsbvlnosyL1xcXCI7XFxuICAgIGlmICghY29udGVudC5maWxlKSB7XFxuICAgICAgICBpbWcgPSByb290ICsgXFxcIuaWh+S7tuWkuS5zdmdcXFwiXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBsZXQgZmlsZXMgPSAnYWl8YXBrfGF2aXxjc3N8ZG1nfGV4ZXxmbHZ8Z2lmfGhpa2VyfGh0bWx8aXNvfGpwZ3xqc3xqc29ufGxvZ3xtb3Z8bXAzfG1wNHxvdGZ8cGhwfHBuZ3xwcHR8cHNkfHRhYmxlfHR4dHx3YXZ8eGxzfHppcHxjc3N8ZG9jfGVwdWJ8ZXhjfGh0bXx4bHN4Jy5zcGxpdCgnfCcpO1xcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gY29udGVudC5maWxlX25hbWVcXG4gICAgICAgIGxldCBoem0gPSBnZXRIem0oZmlsZU5hbWUpXFxuICAgICAgICBpZiAoZmlsZXMuaW5jbHVkZXMoaHptKSkge1xcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBoem0gKyAnLnN2Zyc7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBcXFwi5paH5Lu2LnN2Z1xcXCJcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gaW1nXFxufVxcbiQuZXhwb3J0cy5nZXRIem0gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcbiAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKFxcXCIuXFxcIikgKyAxKVxcbn1cXG4kLmV4cG9ydHMuZ2V0TGluayA9IGZ1bmN0aW9uKGl0ZW0sIGNvb2tpZSwgZXh0KSB7XFxuICAgIHZhciB1cmwgPSAkKCkubGF6eVJ1bGUoKGZpZCwgY29va2llLCBleHQpID0+IHtcXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHBvc3QoXFxcImh0dHBzOi8vZHJpdmUucXVhcmsuY24vMS9jbG91ZGRyaXZlL2ZpbGUvZG93bmxvYWQ/cHI9dWNwcm8mZnI9cGNcXFwiLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llLFxcbiAgICAgICAgICAgICAgICBcXFwiQWNjZXB0XFxcIjogXFxcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKlxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL1xcXCJcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgXFxcImZpZHNcXFwiOiBbZmlkXVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KSlcXG4gICAgICAgIGlmIChleHQgPT0gXFxcIm1vdmllXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgIHVybHM6IFtyZXMuZGF0YVswXS5kb3dubG9hZF91cmwgKyBcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiXSxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL1xcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9IGVsc2UgaWYgKGV4dCA9PSBcXFwiYXVkaW9cXFwiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgdXJsczogW3Jlcy5kYXRhWzBdLmRvd25sb2FkX3VybCArIFxcXCIjaXNNdXNpYz10cnVlI1xcXCJdLFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0gZWxzZSBpZiAoZXh0ID09IFxcXCJpbWdcXFwiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhWzBdLmRvd25sb2FkX3VybCArIGBAUmVmZXJlcj1odHRwczovL3Bhbi5xdWFyay5jbi9AQ29va2llPSR7Y29va2llfWBcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJkb3dubG9hZDovL1xcXCIgKyByZXMuZGF0YVswXS5kb3dubG9hZF91cmwgKyBgQFJlZmVyZXI9aHR0cHM6Ly9wYW4ucXVhcmsuY24vQENvb2tpZT0ke2Nvb2tpZX1gXFxuICAgICAgICB9XFxuICAgIH0sIGl0ZW0uZmlkLCBjb29raWUsIGV4dClcXG4gICAgcmV0dXJuIHVybFxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcInNldHRpbmdzNFwiLFwicGF0aFwiOlwic2V0dGluZ3M0XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgKCkgPT4ge1xcbiAgICBzYXZlRmlsZShcXFwicXVhcmsudHh0XFxcIiwgZ2V0VmFyKFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9saXN0Iy9saXN0L2FsbFxcXCIpKVxcbiAgICBjbGVhclZhcihcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vbGlzdCMvbGlzdC9hbGxcXFwiKTtcXG59KVxcbmQucHVzaCh7XFxuICAgIHVybDogXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL1xcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICBkZXNjOiBcXFwiMTAwJSYmZmxvYXRcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBsb2NhdGlvbi5ocmVmXFxuICAgICAgICAgICAgaWYgKHVybCA9PSBcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vbGlzdCMvbGlzdC9hbGxcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGxldCBjb29raWUgPSBmYmEuZ2V0Q29va2llKHVybCk7XFxuICAgICAgICAgICAgICAgIGlmIChjb29raWUgIT0gbnVsbCAmJiBjb29raWUubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLnB1dFZhcih1cmwsIGNvb2tpZSk7XFxuICAgICAgICAgICAgICAgICAgICBhbGVydChcXFwi5bey6I635Y+W5YiwY29va2llXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBmYmEuYmFjaygpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSksXFxuICAgICAgICB1YTogUENfVUEsXFxuICAgICAgICBjYW5CYWNrOiB0cnVlXFxuICAgIH1cXG59KVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWFs+S6jlwiLFwicGF0aFwiOlwiYWJvdXRcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgY2xlYXJNeVZhcihcXFwiY1xcXCIpO1xcbn0pKTtcXG5kLnB1c2goJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWJvdXQyXFxcIikpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIGxldCBjID0gcGFyc2VJbnQoZ2V0TXlWYXIoXFxcImNcXFwiLCBcXFwiMVxcXCIpKVxcbiAgICAgICAgaWYgKGMgPj0gNSkge1xcbiAgICAgICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4qemmqOaPkOekulxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFxcXCLnoa7lrpropoHlvIDlkK/lvIDlj5HogIXmqKHlvI/lkJfvvJ/ms6jmhI/lvIDlkK/or6XmqKHlvI/liJnooajnpLrlkI7nu63mgqjnmoTmiYDmnInmk43kvZzlnYfkuLrkuLvop4Log73liqjmk43kvZzvvIzmiYDkuqfnlJ/nmoTkuIDliIfpl67popjkuI7otKPku7vlnYfnlLHmgqjoh6rlt7Hmib/mi4VcXFwiLFxcbiAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcImRldlxcXCIsIFxcXCIxXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5byA5ZCv5byA5Y+R6ICF5qih5byPXFxcIlxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcImNcXFwiLCBjICsgMSArIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgZGVzYzogXFxcIlxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgIH1cXG59KTtcXG5cXG5cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlhbPkuo4yXCIsXCJwYXRoXCI6XCJhYm91dDJcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IHtcXG4gICAgdGl0bGU6IFxcXCLmnKzop4TliJnln7rkuo7lvIDmupDpobnnm67vvJo8YSBocmVmPVxcXFxcXFwiaHR0cHM6Ly9naXRodWIuY29tL2FsaXN0LW9yZy9hbGlzdFxcXFxcXFwiPkFsaXN0PC9hPu+8jOaOoue0ouS4jeS9v+eUqOacjeWKoeWZqOWunueOsEFsaXN06YC76L6R77yM5pys6KeE5YiZ5omA5pyJ5Luj56CB5YWo6YOo5byA5rqQ77yM5LuF6ZmQ5Liq5Lq65L2/55So77yM5LuF5L6b56CU56m244CB5a2m5Lmg5ZKM5rWL6K+V77yM56aB5q2i6L2s6L295YiG5Lqr5Yiw56ys5LiJ5pa55bmz5Y+wXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgZGVzYzogXFxcIlxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJcXFwiXFxufVwifV0sXCJwYXJhbXNcIjpcIntcXFwibmV3V2luZG93XFxcIjp0cnVlfVwiLFwic2F2ZWRcIjpmYWxzZSxcInRpdGxlXCI6XCLnvZHnm5jlkIjpm4ZcIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJoaWtlcjovL3BhZ2Uv5aS45YWL572R55uYP3BhZ2U9ZnlwYWdlXCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnRyeSB7XFxuICAgIGlmIChmaWxlRXhpc3QoXFxcInF1YXJrLnR4dFxcXCIpKSB7XFxuICAgICAgICBjb25zdCB7XFxuICAgICAgICAgICAgZ2V0SWNvbixcXG4gICAgICAgICAgICBnZXRIem0sXFxuICAgICAgICAgICAgZ2V0TGlua1xcbiAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvZGU0XFxcIilcXG4gICAgICAgIHZhciBjb29raWUgPSByZWFkRmlsZShcXFwicXVhcmsudHh0XFxcIilcXG4gICAgICAgIGxldCB1c2VyaW5mbyA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vYWNjb3VudC9pbmZvXFxcIiwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pKVxcbiAgICAgICAgbGV0IHBhdGhzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcInBhdGhzXFxcIiwgW3tcXG4gICAgICAgICAgICBcXFwiaWRcXFwiOiBcXFwiMFxcXCIsXFxuICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwi5qC555uu5b2VXFxcIlxcbiAgICAgICAgfV0pXFxuICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHVzZXJpbmZvLmRhdGEubmlja25hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogdXNlcmluZm8uZGF0YS5hdmF0YXJVcmksXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9zZXR0aW5nczRcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHBhdGhzLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzXFxcIiwgcGF0aHMuc2xpY2UoMCwgaSArIDEpKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LCBwYXRocywgaSlcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvZmlsZS9zb3J0XFxcIiwge1xcbiAgICAgICAgICAgIFxcXCJwZGlyX2ZpZFxcXCI6IHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLmlkLFxcbiAgICAgICAgICAgIFxcXCJmclxcXCI6IFxcXCJwY1xcXCIsXFxuICAgICAgICAgICAgXFxcInByXFxcIjogXFxcInVjcHJvXFxcIixcXG4gICAgICAgICAgICBcXFwiX3NpemVcXFwiOiAxMCxcXG4gICAgICAgICAgICBcXFwiX2ZldGNoX3RvdGFsXFxcIjogXFxcIjFcXFwiLFxcbiAgICAgICAgICAgIFxcXCJfc29ydFxcXCI6IFxcXCJmaWxlX3R5cGU6YXNjLGZpbGVfbmFtZTphc2NcXFwiLFxcbiAgICAgICAgICAgIFxcXCJfcGFnZVxcXCI6IGdldFBhcmFtKFxcXCJwYWdlXFxcIilcXG4gICAgICAgIH0pLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llLFxcbiAgICAgICAgICAgICAgICBcXFwiQWNjZXB0XFxcIjogXFxcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKlxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL1xcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSlcXG4gICAgICAgIHJlcy5kYXRhLmxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBpZiAoIWl0ZW0uZmlsZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gJCgpLmxhenlSdWxlKChpdGVtLCBwYXRocykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uZmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uZmlsZV9uYW1lXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzXFxcIiwgcGF0aHMpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIGl0ZW0sIHBhdGhzKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5tb3ZpZS5pbmNsdWRlcyhnZXRIem0oaXRlbS5maWxlX25hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhpdGVtLCBjb29raWUsIFxcXCJtb3ZpZVxcXCIpXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLmF1ZGlvLmluY2x1ZGVzKGdldEh6bShpdGVtLmZpbGVfbmFtZSkpKSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKGl0ZW0sIGNvb2tpZSwgXFxcImF1ZGlvXFxcIilcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQuaW1nLmluY2x1ZGVzKGdldEh6bShpdGVtLmZpbGVfbmFtZSkpKSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKGl0ZW0sIGNvb2tpZSwgXFxcImltZ1xcXCIpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoaXRlbSwgY29va2llKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5maWxlX25hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogZ2V0SWNvbihpdGVtKSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi55m76ZmGXFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2Uvc2V0dGluZ3M0XFxcIlxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH1cXG59IGNhdGNoIChlKSB7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxufVxcbnNldFJlc3VsdChkKTtcIixcImdyb3VwXCI6XCLnvZHnm5hcIixcInVhXCI6XCJtb2JpbGVcIixcInByZVJ1bGVcIjpcIiQuZXh0ZW5kKHtcXG4gICAgYXVkaW86IFtcXFwibXAzXFxcIiwgXFxcImZsYWNcXFwiLCBcXFwib2dnXFxcIiwgXFxcIm00YVxcXCIsIFxcXCJ3YXZcXFwiLCBcXFwib3B1c1xcXCJdLFxcbiAgICBtb3ZpZTogW1xcXCJtcDRcXFwiLCBcXFwibWt2XFxcIiwgXFxcImF2aVxcXCIsIFxcXCJtb3ZcXFwiLCBcXFwicm12YlxcXCIsIFxcXCJ3ZWJtXFxcIiwgXFxcImZsdlxcXCIsIFxcXCJtNHZcXFwiLCBcXFwibTN1OFxcXCIsIFxcXCJ0c1xcXCJdLFxcbiAgICBpbWc6IFtcXFwianBnXFxcIiwgXFxcInBuZ1xcXCIsIFxcXCJqcGVnXFxcIiwgXFxcImdpZlxcXCIsIFxcXCJzdmdcXFwiLCBcXFwicmF3XFxcIl1cXG59KVwiLFwicGFnZXNcIjpcIlt7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCIxMjNwYW5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiMTIzcGFuXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbnRyeSB7XFxcXG4gICAgY29uc3Qge1xcXFxuICAgICAgICBmaWxlTGlzdCxcXFxcbiAgICAgICAgZ2V0SWNvblxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29kZVxcXFxcXFwiKVxcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuKame+4j+iuvue9rlxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdzXFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIlxcXFxuICAgIH0pXFxcXG4gICAgaWYgKGdldEl0ZW0oXFxcXFxcXCJ0b2tlblxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgIHZhciBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXFxcXFwicGF0aHMxMjNcXFxcXFxcIiwgW3tcXFxcbiAgICAgICAgICAgIG5hbWU6IFxcXFxcXFwi5qC555uu5b2VXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXCIwXFxcXFxcXCJcXFxcbiAgICAgICAgfV0pXFxcXG4gICAgICAgIGlmIChwYXRocy5sZW5ndGggPiAxKSB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIjxcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHBhdGhzKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnBvcCgpXFxcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXFxcXFwicGF0aHMxMjNcXFxcXFxcIiwgcGF0aHMpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSwgcGF0aHMpXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHBhdGhzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChpdGVtLCBwYXRocywgaW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJpZFxcXFxcXFwiLCBpdGVtLmlkKVxcXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcInBhdGhzMTIzXFxcXFxcXCIsIHBhdGhzLnNsaWNlKDAsIGluZGV4ICsgMSkpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSwgaXRlbSwgcGF0aHMsIGluZGV4KVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgZmlsZUxpc3QocGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0uaWQpLmRhdGEuSW5mb0xpc3QuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBpbWcgPSBnZXRJY29uKGl0ZW0pXFxcXG4gICAgICAgICAgICBpZiAoaXRlbS5UeXBlID09IDEpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gJCgpLmxhenlSdWxlKChpZCwgbmFtZSwgcGF0aHMpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXFxcXFwicGF0aHMxMjNcXFxcXFxcIiwgcGF0aHMpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSwgaXRlbS5GaWxlSWQsIGl0ZW0uRmlsZU5hbWUsIHBhdGhzKVxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gaXRlbS5Eb3dubG9hZFVybFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5GaWxlTmFtZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgICAgICAgICBpbWc6IGltZyxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJhdmF0YXJcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5pyq55m75b2VXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdzXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIlxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBsb2coZS5tZXNzYWdlKVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcImNvZGVcXFwiLFxcXCJwYXRoXFxcIjpcXFwiY29kZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMuZmlsZUxpc3QgPSBmdW5jdGlvbihpZCkge1xcXFxuICAgIGxldCBsaXN0ID0gcmVxdWVzdChidWlsZFVybChcXFxcXFxcImh0dHBzOi8vd3d3LjEyM3Bhbi5jb20vYXBpL2ZpbGUvbGlzdC9uZXdcXFxcXFxcIiwge1xcXFxuICAgICAgICBcXFxcXFxcImRyaXZlSWRcXFxcXFxcIjogMCxcXFxcbiAgICAgICAgXFxcXFxcXCJsaW1pdFxcXFxcXFwiOiAxMDAsXFxcXG4gICAgICAgIFxcXFxcXFwib3JkZXJCeVxcXFxcXFwiOiBcXFxcXFxcImZpbGVJZFxcXFxcXFwiLFxcXFxuICAgICAgICBcXFxcXFxcIk9yZGVyRGlyZWN0aW9uXFxcXFxcXCI6IFxcXFxcXFwiYXNjXFxcXFxcXCIsXFxcXG4gICAgICAgIFxcXFxcXFwiUGFyZW50RmlsZUlkXFxcXFxcXCI6IGlkLFxcXFxuICAgICAgICBcXFxcXFxcInRyYXNoZWRcXFxcXFxcIjogZmFsc2VcXFxcbiAgICB9KSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkF1dGhvcml6YXRpb25cXFxcXFxcIjogXFxcXFxcXCJCZWFyZXIgXFxcXFxcXCIgKyBnZXRJdGVtKFxcXFxcXFwidG9rZW5cXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UobGlzdClcXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRJY29uID0gZnVuY3Rpb24oY29udGVudCkge1xcXFxuICAgIGxldCB7XFxcXG4gICAgICAgIGdldEh6bVxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29kZVxcXFxcXFwiKVxcXFxuICAgIGxldCByb290ID0gXFxcXFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9pbWcv5paH5Lu257G75Z6LMi9cXFxcXFxcIjtcXFxcbiAgICBpZiAoY29udGVudC5UeXBlID09IDEpIHtcXFxcbiAgICAgICAgaW1nID0gcm9vdCArIFxcXFxcXFwi5paH5Lu25aS5LnN2Z1xcXFxcXFwiXFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgbGV0IGZpbGVzID0gJ2FpfGFwa3xhdml8Y3NzfGRtZ3xleGV8Zmx2fGdpZnxoaWtlcnxodG1sfGlzb3xqcGd8anN8anNvbnxsb2d8bW92fG1wM3xtcDR8b3RmfHBocHxwbmd8cHB0fHBzZHx0YWJsZXx0eHR8d2F2fHhsc3x6aXB8Y3NzfGRvY3xlcHVifGV4Y3xodG18eGxzeCcuc3BsaXQoJ3wnKTtcXFxcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gY29udGVudC5GaWxlTmFtZVxcXFxuICAgICAgICBsZXQgaHptID0gZ2V0SHptKGZpbGVOYW1lKVxcXFxuICAgICAgICBpZiAoZmlsZXMuaW5jbHVkZXMoaHptKSkge1xcXFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIGh6bSArICcuc3ZnJztcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBcXFxcXFxcIuaWh+S7ti5zdmdcXFxcXFxcIlxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBpbWdcXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRIem0gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcXFxuICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHIoZmlsZU5hbWUubGFzdEluZGV4T2YoXFxcXFxcXCIuXFxcXFxcXCIpICsgMSlcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF8yXFxcIixcXFwibmFtZVxcXCI6XFxcInNldHRpbmdzXFxcIixcXFwicGF0aFxcXCI6XFxcInNldHRpbmdzXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi6LSm5Y+3KOaJi+acuuWPtylcXFxcXFxcIixcXFxcbiAgICB1cmw6ICQoZ2V0SXRlbShcXFxcXFxcInVzZXJuYW1lXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgIHNldEl0ZW0oXFxcXFxcXCJ1c2VybmFtZVxcXFxcXFwiLCBpbnB1dClcXFxcbiAgICB9KVxcXFxufSlcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi5a+G56CBXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkKGdldEl0ZW0oXFxcXFxcXCJwYXNzd2RcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikpLmlucHV0KCgpID0+IHtcXFxcbiAgICAgICAgc2V0SXRlbShcXFxcXFxcInBhc3N3ZFxcXFxcXFwiLCBpbnB1dClcXFxcbiAgICB9KVxcXFxufSlcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi55m76ZmGXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkKCkubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShwb3N0KFxcXFxcXFwiaHR0cHM6Ly93d3cuMTIzcGFuLmNvbS9hcGkvdXNlci9zaWduX2luXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInBhc3Nwb3J0XFxcXFxcXCI6IGdldEl0ZW0oXFxcXFxcXCJ1c2VybmFtZVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInBhc3N3b3JkXFxcXFxcXCI6IGdldEl0ZW0oXFxcXFxcXCJwYXNzd2RcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIilcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSkpXFxcXG4gICAgICAgIGlmIChyZXMubWVzc2FnZSA9PSBcXFxcXFxcInN1Y2Nlc3NcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInRva2VuXFxcXFxcXCIsIHJlcy5kYXRhLnRva2VuKVxcXFxuICAgICAgICAgICAgYmFjaygpXFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+eZu+mZhuaIkOWKn1xcXFxcXFwiXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL1xcXFxcXFwiICsgcmVzLm1lc3NhZ2VcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIlxcXFxufSlcXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIueZvuW6pue9keebmFxcXCIsXFxcInBhdGhcXFwiOlxcXCLnmb7luqbnvZHnm5hcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLorr7nva5cXFxcXFxcIixcXFxcbiAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2xvZ2luMVxcXFxcXFwiLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiXFxcXG59KVxcXFxuaWYgKGdldEl0ZW0oXFxcXFxcXCJhY2Nlc3NfdG9rZW5cXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikgIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGNvbnN0IHtcXFxcbiAgICAgICAgICAgIGdldEljb24sXFxcXG4gICAgICAgICAgICBnZXRIem0sXFxcXG4gICAgICAgICAgICBnZXRMaW5rXFxcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29kZTFcXFxcXFxcIilcXFxcbiAgICAgICAgbGV0IHBhdGhzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcXFxcXCJwYXRoc2JhaWR1XFxcXFxcXCIsIFt7XFxcXG4gICAgICAgICAgICBwYXRoOiBcXFxcXFxcIi9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIG5hbWU6IFxcXFxcXFwi5a62XFxcXFxcXCJcXFxcbiAgICAgICAgfV0pXFxcXG4gICAgICAgIHBhdGhzLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgocGF0aHMsIGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcXFxcXCJwYXRoc2JhaWR1XFxcXFxcXCIsIHBhdGhzLnNsaWNlKDAsIGkgKyAxKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9LCBwYXRocywgaSksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3Jlc3QvMi4wL3hwYW4vZmlsZVxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcImFjY2Vzc190b2tlblxcXFxcXFwiOiBnZXRJdGVtKFxcXFxcXFwiYWNjZXNzX3Rva2VuYmFpZHVcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICBcXFxcXFxcIm1ldGhvZFxcXFxcXFwiOiBcXFxcXFxcImxpc3RcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiZGlyXFxcXFxcXCI6IHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLnBhdGgsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIndlYlxcXFxcXFwiOiBcXFxcXFxcIndlYlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJsaW1pdFxcXFxcXFwiOiAwLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJsaW1pdFxcXFxcXFwiOiAyMDBcXFxcbiAgICAgICAgfSkpKVxcXFxuICAgICAgICByZXMubGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGl0ZW0uaXNkaXIgPT0gMSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSAkKCkubGF6eVJ1bGUoKGl0ZW0sIHBhdGhzKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogaXRlbS5wYXRoLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5zZXJ2ZXJfZmlsZW5hbWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcXFxcXCJwYXRoc2JhaWR1XFxcXFxcXCIsIHBhdGhzKVxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0sIGl0ZW0sIHBhdGhzKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLm1vdmllLmluY2x1ZGVzKGdldEh6bShpdGVtLnNlcnZlcl9maWxlbmFtZSkpKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoXFxcXFxcXCJtb3ZpZVxcXFxcXFwiLCBpdGVtLmZzX2lkLCBpdGVtLnBhdGgpXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQuYXVkaW8uaW5jbHVkZXMoZ2V0SHptKGl0ZW0uc2VydmVyX2ZpbGVuYW1lKSkpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhcXFxcXFxcImF1ZGlvXFxcXFxcXCIsIGl0ZW0uZnNfaWQsIGl0ZW0ucGF0aClcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5pbWcuaW5jbHVkZXMoZ2V0SHptKGl0ZW0uc2VydmVyX2ZpbGVuYW1lKSkpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhcXFxcXFxcImltZ1xcXFxcXFwiLCBpdGVtLmZzX2lkLCBpdGVtLnBhdGgpXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKFxcXFxcXFwiXFxcXFxcXCIsIGl0ZW0uZnNfaWQsIGl0ZW0ucGF0aClcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uc2VydmVyX2ZpbGVuYW1lLFxcXFxuICAgICAgICAgICAgICAgIGltZzogZ2V0SWNvbihpdGVtKSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJhdmF0YXJcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgICAgIHRvYXN0KFxcXFxcXFwi5Ye6546w6ZSZ6K+v77yM6K+35p+l55yL5pel5b+XXFxcXFxcXCIpICAgICAgICBcXFxcbiAgICB9XFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiY29kZTFcXFwiLFxcXCJwYXRoXFxcIjpcXFwiY29kZTFcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzLmdldEljb24gPSBmdW5jdGlvbihjb250ZW50KSB7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgZ2V0SHptXFxcXG4gICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9jb2RlXFxcXFxcXCIpXFxcXG4gICAgbGV0IHJvb3QgPSBcXFxcXFxcImh0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfMzIzOTQzNTEvZHIvLS9yYXcvbWFzdGVyL2ltZy/mlofku7bnsbvlnosyL1xcXFxcXFwiO1xcXFxuICAgIGlmIChjb250ZW50LmlzZGlyID09IDEpIHtcXFxcbiAgICAgICAgaW1nID0gcm9vdCArIFxcXFxcXFwi5paH5Lu25aS5LnN2Z1xcXFxcXFwiXFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgbGV0IGZpbGVzID0gJ2FpfGFwa3xhdml8Y3NzfGRtZ3xleGV8Zmx2fGdpZnxoaWtlcnxodG1sfGlzb3xqcGd8anN8anNvbnxsb2d8bW92fG1wM3xtcDR8b3RmfHBocHxwbmd8cHB0fHBzZHx0YWJsZXx0eHR8d2F2fHhsc3x6aXB8Y3NzfGRvY3xlcHVifGV4Y3xodG18eGxzeCcuc3BsaXQoJ3wnKTtcXFxcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gY29udGVudC5zZXJ2ZXJfZmlsZW5hbWVcXFxcbiAgICAgICAgbGV0IGh6bSA9IGdldEh6bShmaWxlTmFtZSlcXFxcbiAgICAgICAgaWYgKGZpbGVzLmluY2x1ZGVzKGh6bSkpIHtcXFxcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBoem0gKyAnLnN2Zyc7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBpbWcgPSByb290ICsgXFxcXFxcXCLmlofku7Yuc3ZnXFxcXFxcXCJcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gaW1nXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0SHptID0gZnVuY3Rpb24oZmlsZU5hbWUpIHtcXFxcbiAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKFxcXFxcXFwiLlxcXFxcXFwiKSArIDEpXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0TGluayA9IGZ1bmN0aW9uKGV4dCwgaWQsIHBhdGgpIHtcXFxcbiAgICByZXR1cm4gJCgpLmxhenlSdWxlKChleHQsIGlkLCBwYXRoKSA9PiB7XFxcXG4gICAgICAgIGlmIChnZXRJdGVtKFxcXFxcXFwiamtcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpID09IFxcXFxcXFwiMVxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICB2YXIgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cHM6Ly9wYW4uYmFpZHUuY29tL2FwaS9maWxlbWV0YXNcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiYWNjZXNzX3Rva2VuXFxcXFxcXCI6IGdldEl0ZW0oXFxcXFxcXCJhY2Nlc3NfdG9rZW5cXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJkbGlua1xcXFxcXFwiOiBcXFxcXFxcIjFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIndlYlxcXFxcXFwiOiBcXFxcXFxcIjVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIm9yaWdpblxcXFxcXFwiOiBcXFxcXFxcImRsbmFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInRhcmdldFxcXFxcXFwiOiBgW1xcXFxcXFxcXFxcXFxcXCIke3BhdGh9XFxcXFxcXFxcXFxcXFxcIl1gXFxcXG4gICAgICAgICAgICB9KSkpLmluZm9bMF0uZGxpbmtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHZhciByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcXFxcXCJodHRwczovL3Bhbi5iYWlkdS5jb20vcmVzdC8yLjAveHBhbi9tdWx0aW1lZGlhXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImFjY2Vzc190b2tlblxcXFxcXFwiOiBnZXRJdGVtKFxcXFxcXFwiYWNjZXNzX3Rva2VuXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwibWV0aG9kXFxcXFxcXCI6IFxcXFxcXFwiZmlsZW1ldGFzXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJmc2lkc1xcXFxcXFwiOiBgWyR7aWR9XWAsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJkbGlua1xcXFxcXFwiOiBcXFxcXFxcIjFcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSksIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBcXFxcXFxcInBhbi5iYWlkdS5jb21cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pKS5saXN0WzBdLmRsaW5rICsgXFxcXFxcXCImYWNjZXNzX3Rva2VuPVxcXFxcXFwiICsgZ2V0SXRlbShcXFxcXFxcImFjY2Vzc190b2tlblxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmIChleHQgPT0gXFxcXFxcXCJtb3ZpZVxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgIHVybHM6IFtyZXMgKyBcXFxcXFxcIiNpc1ZpZGVvPXRydWUjXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFxcXFxcXFwicGFuLmJhaWR1LmNvbVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT0gXFxcXFxcXCJhdWRpb1xcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgIHVybHM6IFtyZXMgKyBcXFxcXFxcIiNpc011c2ljPXRydWUjXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFxcXFxcXFwicGFuLmJhaWR1LmNvbVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT0gXFxcXFxcXCJpbWdcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHJlcyArIGAjLmpwZzt7VXNlci1BZ2VudEBwYW4uYmFpZHUuY29tfWBcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImRvd25sb2FkOi8vXFxcXFxcXCIgKyByZXMgKyBgO3tVc2VyLUFnZW50QHBhbi5iYWlkdS5jb219YFxcXFxuICAgICAgICB9XFxcXG4gICAgfSwgZXh0LCBpZCwgcGF0aClcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF8yXFxcIixcXFwibmFtZVxcXCI6XFxcImxvZ2luMVxcXCIsXFxcInBhdGhcXFwiOlxcXCJsb2dpbjFcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLojrflj5Z0b2tlblxcXFxcXFwiLFxcXFxuICAgIHVybDogXFxcXFxcXCJodHRwczovL29wZW5hcGkuYmFpZHUuY29tL29hdXRoLzIuMC9hdXRob3JpemU/cmVzcG9uc2VfdHlwZT1jb2RlJmNsaWVudF9pZD1pWUNlQzlnMDhoNXZ1UDlVcXZQSEtLU1ZyS0ZYR2ExdiZyZWRpcmVjdF91cmk9aHR0cHM6Ly90b29sLm5uLmNpL2JhaWR1L2NhbGxiYWNrJnNjb3BlPWJhc2ljLG5ldGRpc2smcXJjb2RlPTFcXFxcXFxcIlxcXFxufSlcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi55m76ZmGXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkKFxcXFxcXFwiXFxcXFxcXCIsIFxcXFxcXFwi5aGr5YaZ6I635Y+W5Yiw55qEdG9rZW5cXFxcXFxcIikuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cHM6Ly9vcGVuYXBpLmJhaWR1LmNvbS9vYXV0aC8yLjAvdG9rZW5cXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJncmFudF90eXBlXFxcXFxcXCI6IFxcXFxcXFwicmVmcmVzaF90b2tlblxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJyZWZyZXNoX3Rva2VuXFxcXFxcXCI6IGlucHV0LFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJjbGllbnRfaWRcXFxcXFxcIjogXFxcXFxcXCJpWUNlQzlnMDhoNXZ1UDlVcXZQSEtLU1ZyS0ZYR2ExdlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJjbGllbnRfc2VjcmV0XFxcXFxcXCI6IFxcXFxcXFwialhpRk1PUFZQQ1dsTzJNNUN3V1F6ZmZwTlBhR1RSQkdcXFxcXFxcIlxcXFxuICAgICAgICB9KSkpXFxcXG4gICAgICAgIGlmICghcmVzLmFjY2Vzc190b2tlbikge1xcXFxuICAgICAgICAgICAgbG9nKHJlcylcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6ZSZ6K+v77yB77yB77yBXFxcXFxcXCJcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJhY2Nlc3NfdG9rZW5iYWlkdVxcXFxcXFwiLCByZXMuYWNjZXNzX3Rva2VuKVxcXFxuICAgICAgICAgICAvLyBzZXRJdGVtKFxcXFxcXFwicmVmcmVzaF90b2tlblxcXFxcXFwiLCByZXMucmVmcmVzaF90b2tlbilcXFxcbiAgICAgICAgICAgIGJhY2soKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbn0pXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBnZXRJdGVtKFxcXFxcXFwiamtcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpID09IFxcXFxcXFwiMFxcXFxcXFwiID8gXFxcXFxcXCLlrpjmlrnmjqXlj6PvvJrkuI3mmK92aXDkvJrpmZDpgJ/vvIznqLPlrppcXFxcXFxcIiA6IFxcXFxcXFwi6Z2e5a6Y5pa55o6l5Y+j77ya5Y+v6IO95LiN6ZmQ6YCf77yM5LiN56iz5a6aXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkKCkubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICBzZXRJdGVtKFxcXFxcXFwiamtcXFxcXFxcIiwgZ2V0SXRlbShcXFxcXFxcImprXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKSA9PSBcXFxcXFxcIjBcXFxcXFxcIiA/IFxcXFxcXFwiMVxcXFxcXFwiIDogXFxcXFxcXCIwXFxcXFxcXCIpXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiXFxcXG59KVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIlBpa3Bha1xcXCIsXFxcInBhdGhcXFwiOlxcXCJQaWtwYWtcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLnmbvpmYZcXFxcXFxcIixcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzJcXFxcXFxcIixcXFxcbiAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdzMlxcXFxcXFwiXFxcXG59KVxcXFxuaWYgKGdldEl0ZW0oXFxcXFxcXCJhY2Nlc3NfdG9rZW5cXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikgIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGNvbnN0IHtcXFxcbiAgICAgICAgICAgIGdldEh6bVxcXFxuICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvZGUyXFxcXFxcXCIpXFxcXG4gICAgICAgIGxldCBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXFxcXFwicGF0aHNwaWtwYWtcXFxcXFxcIiwgW3tcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiaWRcXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwibmFtZVxcXFxcXFwiOiBcXFxcXFxcIuWutlxcXFxcXFwiXFxcXG4gICAgICAgIH1dKVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5re75Yqg56OB6ZO+XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogJChcXFxcXFxcIlxcXFxcXFwiLCBcXFxcXFxcIui+k+WFpeejgeWKm+mTvuaOpVxcXFxcXFwiKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwicGlrcGFrYXBwOi8vbXlwaWtwYWsuY29tL3hwYW4vbWFpbl90YWI/dGFiPTEmYWRkX3VybD1cXFxcXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dClcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIHBhdGhzLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXFxcXFwicGF0aHNwaWtwYWtcXFxcXFxcIiwgcGF0aHMuc2xpY2UoMCwgaSArIDEpKVxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpKVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcXFxcXCJodHRwczovL2FwaS1kcml2ZS5teXBpa3Bhay5jb20vZHJpdmUvdjEvZmlsZXNcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJwYXJlbnRfaWRcXFxcXFxcIjogcGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0uaWQsXFxcXG4gICAgICAgICAgICBcXFxcXFxcInRodW1ibmFpbF9zaXplXFxcXFxcXCI6IFxcXFxcXFwiU0laRV9MQVJHRVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJ3aXRoX2F1ZGl0XFxcXFxcXCI6IFxcXFxcXFwidHJ1ZVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJsaW1pdFxcXFxcXFwiOiBcXFxcXFxcIjEwMDBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiZmlsdGVyc1xcXFxcXFwiOiAne1xcXFxcXFwicGhhc2VcXFxcXFxcIjp7XFxcXFxcXCJlcVxcXFxcXFwiOlxcXFxcXFwiUEhBU0VfVFlQRV9DT01QTEVURVxcXFxcXFwifSxcXFxcXFxcInRyYXNoZWRcXFxcXFxcIjp7XFxcXFxcXCJlcVxcXFxcXFwiOmZhbHNlfX0nLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJwYWdlX3Rva2VuXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCJcXFxcbiAgICAgICAgfSksIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIkF1dGhvcml6YXRpb25cXFxcXFxcIjogXFxcXFxcXCJCZWFyZXIgXFxcXFxcXCIgKyBnZXRJdGVtKFxcXFxcXFwiYWNjZXNzX3Rva2VuXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pKVxcXFxuICAgICAgICBsaXN0LmZpbGVzLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoaXRlbS5raW5kID09IFxcXFxcXFwiZHJpdmUjZm9sZGVyXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdXJsbCA9ICQoKS5sYXp5UnVsZSgocGF0aHMsIGl0ZW0pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcInBhdGhzcGlrcGFrXFxcXFxcXCIsIHBhdGhzKVxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpdGVtKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLm1vdmllLmluY2x1ZGVzKGdldEh6bShpdGVtLm5hbWUpKSkge1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgdmFyIGV4dCA9IFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLmF1ZGlvLmluY2x1ZGVzKGdldEh6bShpdGVtLm5hbWUpKSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciBleHQgPSBcXFxcXFxcIiNpc011c2ljPXRydWUjXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5pbWcuaW5jbHVkZXMoZ2V0SHptKGl0ZW0ubmFtZSkpKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGV4dCA9IFxcXFxcXFwiIy5qcGdcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgZXh0ID0gXFxcXFxcXCJcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdmFyIHVybCA9ICQoKS5sYXp5UnVsZSgoaXRlbSwgZXh0KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBgaHR0cHM6Ly9hcGktZHJpdmUubXlwaWtwYWsuY29tL2RyaXZlL3YxL2ZpbGVzLyR7aXRlbS5pZH0/X21hZ2ljPTIwMjEmdGh1bWJuYWlsX3NpemU9U0laRV9MQVJHRWBcXFxcbiAgICAgICAgICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KHUsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJBdXRob3JpemF0aW9uXFxcXFxcXCI6IFxcXFxcXFwiQmVhcmVyIFxcXFxcXFwiICsgZ2V0SXRlbShcXFxcXFxcImFjY2Vzc190b2tlblxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSkpXFxcXG4gICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIHJlcy5tZWRpYXMpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0bXAgPSBpdGVtLmxpbmtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAudXJsKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRtcC51cmwgKyBleHRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sIGl0ZW0sIGV4dClcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXFxcbiAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uaWNvbl9saW5rLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybDogaXRlbS5raW5kID09IFxcXFxcXFwiZHJpdmUjZm9sZGVyXFxcXFxcXCIgPyB1cmxsIDogdXJsXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgdG9hc3QoXFxcXFxcXCLmo4DmtYvliLDplJnor69cXFxcXFxcIilcXFxcbiAgICAgICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJjb2RlMlxcXCIsXFxcInBhdGhcXFwiOlxcXCJjb2RlMlxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMubG9naW4gPSBmdW5jdGlvbih1c2VybmFtZSwgcGFzc3dvcmQpIHtcXFxcbiAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShwb3N0KFxcXFxcXFwiaHR0cHM6Ly91c2VyLm15cGlrcGFrLmNvbS92MS9hdXRoL3NpZ25pblxcXFxcXFwiLCB7XFxcXG4gICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiY2FwdGNoYV90b2tlblxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJjbGllbnRfaWRcXFxcXFxcIjogXFxcXFxcXCJZTnhUOXc3R01kV3ZFT0thXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImNsaWVudF9zZWNyZXRcXFxcXFxcIjogXFxcXFxcXCJkYncyT3RtVkVldVV2SXB0YjFDb3lnXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcInVzZXJuYW1lXFxcXFxcXCI6IHVzZXJuYW1lLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJwYXNzd29yZFxcXFxcXFwiOiBwYXNzd29yZFxcXFxuICAgICAgICB9XFxcXG4gICAgfSkpXFxcXG4gICAgaWYgKHJlcy5hY2Nlc3NfdG9rZW4pIHtcXFxcbiAgICAgICAgc2V0SXRlbShcXFxcXFxcImFjY2Vzc190b2tlblxcXFxcXFwiLCByZXMuYWNjZXNzX3Rva2VuKVxcXFxuICAgICAgICBzZXRJdGVtKFxcXFxcXFwicmVmcmVzaF90b2tlblxcXFxcXFwiLCByZXMucmVmcmVzaF90b2tlbilcXFxcbiAgICAgICAgcmV0dXJuIHRydWVcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBsb2cocmVzKVxcXFxuICAgICAgICByZXR1cm4gZmFsc2VcXFxcbiAgICB9XFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0SHptID0gZnVuY3Rpb24oZmlsZU5hbWUpIHtcXFxcbiAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKFxcXFxcXFwiLlxcXFxcXFwiKSArIDEpXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCJzZXR0aW5nczJcXFwiLFxcXCJwYXRoXFxcIjpcXFwic2V0dGluZ3MyXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi6LSm5Y+3KOmCrueusSlcXFxcXFxcIixcXFxcbiAgICB1cmw6ICQoZ2V0SXRlbShcXFxcXFxcInVzZXJuYW1lXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgIHNldEl0ZW0oXFxcXFxcXCJ1c2VybmFtZVxcXFxcXFwiLCBpbnB1dClcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgIH0pXFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLlr4bnoIFcXFxcXFxcIixcXFxcbiAgICB1cmw6ICQoZ2V0SXRlbShcXFxcXFxcInBhc3N3ZFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSkuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICBzZXRJdGVtKFxcXFxcXFwicGFzc3dkXFxcXFxcXCIsIGlucHV0KVxcXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgfSlcXFxcbn0pXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIueZu+mZhlxcXFxcXFwiLFxcXFxuICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgY29uc3Qge1xcXFxuICAgICAgICAgICAgbG9naW5cXFxcbiAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9jb2RlMlxcXFxcXFwiKVxcXFxuICAgICAgICBsb2coZ2V0SXRlbShcXFxcXFxcInVzZXJuYW1lXFxcXFxcXCIpKVxcXFxuICAgICAgICBpZiAobG9naW4oZ2V0SXRlbShcXFxcXFxcInVzZXJuYW1lXFxcXFxcXCIpLCBnZXRJdGVtKFxcXFxcXFwicGFzc3dkXFxcXFxcXCIpKSkge1xcXFxuICAgICAgICAgICAgYmFjaygpXFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+eZu+mZhuaIkOWKn1xcXFxcXFwiXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+eZu+mZhuWksei0pVxcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCJcXFxcbn0pXFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlpKnnv7zkupHnm5hcXFwiLFxcXCJwYXRoXFxcIjpcXFwi5aSp57+85LqR55uYXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbnRyeSB7XFxcXG4gICAgaWYgKGZpbGVFeGlzdChcXFxcXFxcIjE4OS50eHRcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgY29uc3Qge1xcXFxuICAgICAgICAgICAgZ2V0RmlsZXMsXFxcXG4gICAgICAgICAgICBnZXRJY29uXFxcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29kZTNcXFxcXFxcIilcXFxcbiAgICAgICAgdmFyIHBhdGhzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcXFxcXCJwYXRoc3R5XFxcXFxcXCIsIFt7XFxcXG4gICAgICAgICAgICBcXFxcXFxcImlkXFxcXFxcXCI6IC0xMSxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwibmFtZVxcXFxcXFwiOiBcXFxcXFxcIuWutlxcXFxcXFwiXFxcXG4gICAgICAgIH1dKVxcXFxuICAgICAgICBwYXRocy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcInBhdGhzdHlcXFxcXFxcIiwgcGF0aHMuc2xpY2UoMCwgaSArIDEpKVxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpKVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgbGV0IGxpc3QgPSBnZXRGaWxlcyhwYXRoc1twYXRocy5sZW5ndGggLSAxXS5pZClcXFxcbiAgICAgICAgbGlzdC5maWxlTGlzdEFPLmZvbGRlckxpc3QuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJhdmF0YXJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBpbWc6IFxcXFxcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvaW1nL+aWh+S7tuexu+WeizIv5paH5Lu25aS5LnN2Z1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaWQsIG5hbWUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXFxcXFwicGF0aHN0eVxcXFxcXFwiLCBwYXRocylcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9LCBwYXRocywgaXRlbS5pZCwgaXRlbS5uYW1lKVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgbGlzdC5maWxlTGlzdEFPLmZpbGVMaXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgaW1nID0gZ2V0SWNvbihpdGVtLm5hbWUpXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGlkLCBuYW1lKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEh6bVxcXFxuICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvZGVcXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvb2tpZSA9IHJlYWRGaWxlKFxcXFxcXFwiMTg5LnR4dFxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IFxcXFxcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vYXBpL3BvcnRhbC9nZXRGaWxlSW5mby5hY3Rpb25cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiZmlsZUlkXFxcXFxcXCI6IGlkXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQWNjZXB0XFxcXFxcXCI6IFxcXFxcXFwiYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pKVxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoJC5tb3ZpZS5pbmNsdWRlcyhnZXRIem0obmFtZSkpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFtcXFxcXFxcImh0dHBzOlxcXFxcXFwiICsgcmVzLmRvd25sb2FkVXJsICsgXFxcXFxcXCIjaXNWaWRlbz10cnVlI1xcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogUENfVUEucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0obmFtZSkpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IFtcXFxcXFxcImh0dHBzOlxcXFxcXFwiICsgcmVzLmRvd25sb2FkVXJsICsgXFxcXFxcXCIjaXNWaWRlbz10cnVlI1xcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogUENfVUEucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5pbWcuaW5jbHVkZXMoZ2V0SHptKG5hbWUpKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaHR0cHM6XFxcXFxcXCIgKyByZXMuZG93bmxvYWRVcmwgKyBgIy5qcGdAVXNlci1BZ2VudD0ke1BDX1VBfUBDb29raWU9JHtjb29raWV9YFxcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiZG93bmxvYWQ6Ly9odHRwczpcXFxcXFxcIiArIHJlcy5kb3dubG9hZFVybCArIGBAVXNlci1BZ2VudD0ke1BDX1VBfUBDb29raWU9JHtjb29raWV9YFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSwgaXRlbS5pZCwgaXRlbS5uYW1lKVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBkLnVuc2hpZnQoe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi55m76ZmGXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2xvZ2luM1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxufSBjYXRjaCAoZSkge1xcXFxuICAgIGQudW5zaGlmdCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIueZu+mZhlxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2xvZ2luM1xcXFxcXFwiLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCJcXFxcbiAgICB9KVxcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgdG9hc3QoXFxcXFxcXCLnqIvluo/lj6/og73lh7rplJnkuobvvIzor7fmn6XnnIvml6Xlv5dcXFxcXFxcIilcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJjb2RlM1xcXCIsXFxcInBhdGhcXFwiOlxcXCJjb2RlM1xcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMuZ2V0RmlsZXMgPSBmdW5jdGlvbihpZCkge1xcXFxuICAgIGxldCB1ID0gXFxcXFxcXCJodHRwczovL2Nsb3VkLjE4OS5jbi9hcGkvb3Blbi9maWxlL2xpc3RGaWxlcy5hY3Rpb25cXFxcXFxcIlxcXFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJwYWdlU2l6ZVxcXFxcXFwiOiAxMDAwLFxcXFxuICAgICAgICBcXFxcXFxcInBhZ2VOdW1cXFxcXFxcIjogMSxcXFxcbiAgICAgICAgXFxcXFxcXCJtZWRpYVR5cGVcXFxcXFxcIjogMCxcXFxcbiAgICAgICAgXFxcXFxcXCJmb2xkZXJJZFxcXFxcXFwiOiBpZCxcXFxcbiAgICAgICAgXFxcXFxcXCJpY29uT3B0aW9uXFxcXFxcXCI6IDUsXFxcXG4gICAgICAgIFxcXFxcXFwib3JkZXJCeVxcXFxcXFwiOiBcXFxcXFxcImxhc3RPcFRpbWVcXFxcXFxcIixcXFxcbiAgICAgICAgXFxcXFxcXCJkZXNjZW5kaW5nXFxcXFxcXCI6IFxcXFxcXFwidHJ1ZVxcXFxcXFwiLFxcXFxuICAgIH0pLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IHJlYWRGaWxlKFxcXFxcXFwiMTg5LnR4dFxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQWNjZXB0XFxcXFxcXCI6IFxcXFxcXFwiYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogUENfVUFcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgdmFyIGpzb24gPSByZXMucmVwbGFjZSgvXFxcXFxcXFxcXFxcXFxcImlkXFxcXFxcXFxcXFxcXFxcIjooXFxcXFxcXFxkKykvZywgJ1xcXFxcXFwiaWRcXFxcXFxcIjpcXFxcXFxcIiQxXFxcXFxcXCInKSAvL+ino+WGs2pz55qE57K+5bqm6Zeu6aKYXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbilcXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRJY29uID0gZnVuY3Rpb24oZmlsZU5hbWUpIHtcXFxcbiAgICBsZXQge1xcXFxuICAgICAgICBnZXRIem1cXFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvZGVcXFxcXFxcIilcXFxcbiAgICBsZXQgcm9vdCA9IFxcXFxcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvaW1nL+aWh+S7tuexu+WeizIvXFxcXFxcXCI7XFxcXG4gICAgbGV0IGZpbGVzID0gJ2FpfGFwa3xhdml8Y3NzfGRtZ3xleGV8Zmx2fGdpZnxoaWtlcnxodG1sfGlzb3xqcGd8anN8anNvbnxsb2d8bW92fG1wM3xtcDR8b3RmfHBocHxwbmd8cHB0fHBzZHx0YWJsZXx0eHR8d2F2fHhsc3x6aXB8Y3NzfGRvY3xlcHVifGV4Y3xodG18eGxzeCcuc3BsaXQoJ3wnKTtcXFxcbiAgICBsZXQgaHptID0gZ2V0SHptKGZpbGVOYW1lKVxcXFxuICAgIGlmIChmaWxlcy5pbmNsdWRlcyhoem0pKSB7XFxcXG4gICAgICAgIGltZyA9IHJvb3QgKyBoem0gKyAnLnN2Zyc7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgaW1nID0gcm9vdCArIFxcXFxcXFwi5paH5Lu2LnN2Z1xcXFxcXFwiXFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBpbWdcXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRIem0gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcXFxuICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHIoZmlsZU5hbWUubGFzdEluZGV4T2YoXFxcXFxcXCIuXFxcXFxcXCIpICsgMSlcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJsb2dpbjNcXFwiLFxcXCJwYXRoXFxcIjpcXFwibG9naW4zXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgKCkgPT4ge1xcXFxuICAgIGxldCBjID0gZ2V0VmFyKFxcXFxcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vd2ViL21haW5cXFxcXFxcIik7XFxcXG4gICAgbG9nKGMpO1xcXFxuICAgIHNhdmVGaWxlKFxcXFxcXFwiMTg5LnR4dFxcXFxcXFwiLCBjKTtcXFxcbiAgICBjbGVhclZhcihcXFxcXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL3dlYi9tYWluXFxcXFxcXCIpO1xcXFxufSlcXFxcbmQucHVzaCh7XFxcXG4gICAgdXJsOiBcXFxcXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL3dlYi9sb2dpbi5odG1sXFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwieDVfd2Vidmlld19zaW5nbGVcXFxcXFxcIixcXFxcbiAgICBkZXNjOiBcXFxcXFxcIjEwMCUmJmZsb2F0XFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIHVybCA9IGxvY2F0aW9uLmhyZWZcXFxcbiAgICAgICAgICAgIGlmICh1cmwuaW5jbHVkZXMoXFxcXFxcXCJodHRwczovL2Nsb3VkLjE4OS5jbi93ZWIvbWFpblxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgIGxldCBjb29raWUgPSBmYmEuZ2V0Q29va2llKHVybCk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGNvb2tpZSAhPSBudWxsICYmIGNvb2tpZS5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5wdXRWYXIoXFxcXFxcXCJodHRwczovL2Nsb3VkLjE4OS5jbi93ZWIvbWFpblxcXFxcXFwiLCBjb29raWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICBhbGVydChcXFxcXFxcIuW3suiOt+WPluWIsGNvb2tpZVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZmJhLmJhY2soKTsgICAgICAgICAgICAgICAgICBcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICB1YTogUENfVUEsXFxcXG4gICAgICAgIGNhbkJhY2s6IHRydWVcXFxcbiAgICB9XFxcXG59KVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWkuOWFi+e9keebmFxcXCIsXFxcInBhdGhcXFwiOlxcXCLlpLjlhYvnvZHnm5hcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxudHJ5IHtcXFxcbiAgICBpZiAoZmlsZUV4aXN0KFxcXFxcXFwicXVhcmsudHh0XFxcXFxcXCIpKSB7XFxcXG4gICAgICAgIGNvbnN0IHtcXFxcbiAgICAgICAgICAgIGdldEljb24sXFxcXG4gICAgICAgICAgICBnZXRIem0sXFxcXG4gICAgICAgICAgICBnZXRMaW5rXFxcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29kZTRcXFxcXFxcIilcXFxcbiAgICAgICAgdmFyIGNvb2tpZSA9IHJlYWRGaWxlKFxcXFxcXFwicXVhcmsudHh0XFxcXFxcXCIpXFxcXG4gICAgICAgIGxldCB1c2VyaW5mbyA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL2FjY291bnQvaW5mb1xcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pKVxcXFxuICAgICAgICBsZXQgcGF0aHMgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFxcXFxcInBhdGhzXFxcXFxcXCIsIFt7XFxcXG4gICAgICAgICAgICBcXFxcXFxcImlkXFxcXFxcXCI6IFxcXFxcXFwiMFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJuYW1lXFxcXFxcXCI6IFxcXFxcXFwi5qC555uu5b2VXFxcXFxcXCJcXFxcbiAgICAgICAgfV0pXFxcXG4gICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHVzZXJpbmZvLmRhdGEubmlja25hbWUsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiB1c2VyaW5mby5kYXRhLmF2YXRhclVyaSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdzNFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcInBhdGhzXFxcXFxcXCIsIHBhdGhzLnNsaWNlKDAsIGkgKyAxKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9LCBwYXRocywgaSlcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvZmlsZS9zb3J0XFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwicGRpcl9maWRcXFxcXFxcIjogcGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0uaWQsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImZyXFxcXFxcXCI6IFxcXFxcXFwicGNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwicHJcXFxcXFxcIjogXFxcXFxcXCJ1Y3Byb1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJfc2l6ZVxcXFxcXFwiOiAxMCxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiX2ZldGNoX3RvdGFsXFxcXFxcXCI6IFxcXFxcXFwiMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJfc29ydFxcXFxcXFwiOiBcXFxcXFxcImZpbGVfdHlwZTphc2MsZmlsZV9uYW1lOmFzY1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJfcGFnZVxcXFxcXFwiOiBnZXRQYXJhbShcXFxcXFxcInBhZ2VcXFxcXFxcIilcXFxcbiAgICAgICAgfSksIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWUsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJBY2NlcHRcXFxcXFxcIjogXFxcXFxcXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLypcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KSlcXFxcbiAgICAgICAgcmVzLmRhdGEubGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgaWYgKCFpdGVtLmZpbGUpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gJCgpLmxhenlSdWxlKChpdGVtLCBwYXRocykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmZpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uZmlsZV9uYW1lXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXFxcXFwicGF0aHNcXFxcXFxcIiwgcGF0aHMpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSwgaXRlbSwgcGF0aHMpXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQubW92aWUuaW5jbHVkZXMoZ2V0SHptKGl0ZW0uZmlsZV9uYW1lKSkpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhpdGVtLCBjb29raWUsIFxcXFxcXFwibW92aWVcXFxcXFxcIilcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0oaXRlbS5maWxlX25hbWUpKSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKGl0ZW0sIGNvb2tpZSwgXFxcXFxcXCJhdWRpb1xcXFxcXFwiKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLmltZy5pbmNsdWRlcyhnZXRIem0oaXRlbS5maWxlX25hbWUpKSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKGl0ZW0sIGNvb2tpZSwgXFxcXFxcXCJpbWdcXFxcXFxcIilcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoaXRlbSwgY29va2llKVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5maWxlX25hbWUsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBnZXRJY29uKGl0ZW0pLFxcXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi55m76ZmGXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9zZXR0aW5nczRcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBsb2coZS5tZXNzYWdlKVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcImNvZGU0XFxcIixcXFwicGF0aFxcXCI6XFxcImNvZGU0XFxcIixcXFwicnVsZVxcXCI6XFxcIiQuZXhwb3J0cy5nZXRJY29uID0gZnVuY3Rpb24oY29udGVudCkge1xcXFxuICAgIGxldCB7XFxcXG4gICAgICAgIGdldEh6bVxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29kZVxcXFxcXFwiKVxcXFxuICAgIGxldCByb290ID0gXFxcXFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9pbWcv5paH5Lu257G75Z6LMi9cXFxcXFxcIjtcXFxcbiAgICBpZiAoIWNvbnRlbnQuZmlsZSkge1xcXFxuICAgICAgICBpbWcgPSByb290ICsgXFxcXFxcXCLmlofku7blpLkuc3ZnXFxcXFxcXCJcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBsZXQgZmlsZXMgPSAnYWl8YXBrfGF2aXxjc3N8ZG1nfGV4ZXxmbHZ8Z2lmfGhpa2VyfGh0bWx8aXNvfGpwZ3xqc3xqc29ufGxvZ3xtb3Z8bXAzfG1wNHxvdGZ8cGhwfHBuZ3xwcHR8cHNkfHRhYmxlfHR4dHx3YXZ8eGxzfHppcHxjc3N8ZG9jfGVwdWJ8ZXhjfGh0bXx4bHN4Jy5zcGxpdCgnfCcpO1xcXFxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBjb250ZW50LmZpbGVfbmFtZVxcXFxuICAgICAgICBsZXQgaHptID0gZ2V0SHptKGZpbGVOYW1lKVxcXFxuICAgICAgICBpZiAoZmlsZXMuaW5jbHVkZXMoaHptKSkge1xcXFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIGh6bSArICcuc3ZnJztcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBcXFxcXFxcIuaWh+S7ti5zdmdcXFxcXFxcIlxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBpbWdcXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRIem0gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcXFxuICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHIoZmlsZU5hbWUubGFzdEluZGV4T2YoXFxcXFxcXCIuXFxcXFxcXCIpICsgMSlcXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRMaW5rID0gZnVuY3Rpb24oaXRlbSwgY29va2llLCBleHQpIHtcXFxcbiAgICB2YXIgdXJsID0gJCgpLmxhenlSdWxlKChmaWQsIGNvb2tpZSwgZXh0KSA9PiB7XFxcXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHBvc3QoXFxcXFxcXCJodHRwczovL2RyaXZlLnF1YXJrLmNuLzEvY2xvdWRkcml2ZS9maWxlL2Rvd25sb2FkP3ByPXVjcHJvJmZyPXBjXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWUsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJBY2NlcHRcXFxcXFxcIjogXFxcXFxcXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLypcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImZpZHNcXFxcXFxcIjogW2ZpZF1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pKVxcXFxuICAgICAgICBpZiAoZXh0ID09IFxcXFxcXFwibW92aWVcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgICAgICB1cmxzOiBbcmVzLmRhdGFbMF0uZG93bmxvYWRfdXJsICsgXFxcXFxcXCIjaXNWaWRlbz10cnVlI1xcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0gZWxzZSBpZiAoZXh0ID09IFxcXFxcXFwiYXVkaW9cXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgICAgICB1cmxzOiBbcmVzLmRhdGFbMF0uZG93bmxvYWRfdXJsICsgXFxcXFxcXCIjaXNNdXNpYz10cnVlI1xcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0gZWxzZSBpZiAoZXh0ID09IFxcXFxcXFwiaW1nXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiByZXMuZGF0YVswXS5kb3dubG9hZF91cmwgKyBgQFJlZmVyZXI9aHR0cHM6Ly9wYW4ucXVhcmsuY24vQENvb2tpZT0ke2Nvb2tpZX1gXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJkb3dubG9hZDovL1xcXFxcXFwiICsgcmVzLmRhdGFbMF0uZG93bmxvYWRfdXJsICsgYEBSZWZlcmVyPWh0dHBzOi8vcGFuLnF1YXJrLmNuL0BDb29raWU9JHtjb29raWV9YFxcXFxuICAgICAgICB9XFxcXG4gICAgfSwgaXRlbS5maWQsIGNvb2tpZSwgZXh0KVxcXFxuICAgIHJldHVybiB1cmxcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJzZXR0aW5nczRcXFwiLFxcXCJwYXRoXFxcIjpcXFwic2V0dGluZ3M0XFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgKCkgPT4ge1xcXFxuICAgIHNhdmVGaWxlKFxcXFxcXFwicXVhcmsudHh0XFxcXFxcXCIsIGdldFZhcihcXFxcXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL2xpc3QjL2xpc3QvYWxsXFxcXFxcXCIpKVxcXFxuICAgIGNsZWFyVmFyKFxcXFxcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vbGlzdCMvbGlzdC9hbGxcXFxcXFxcIik7XFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICB1cmw6IFxcXFxcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vXFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwieDVfd2Vidmlld19zaW5nbGVcXFxcXFxcIixcXFxcbiAgICBkZXNjOiBcXFxcXFxcIjEwMCUmJmZsb2F0XFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIHVybCA9IGxvY2F0aW9uLmhyZWZcXFxcbiAgICAgICAgICAgIGlmICh1cmwgPT0gXFxcXFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9saXN0Iy9saXN0L2FsbFxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGNvb2tpZSA9IGZiYS5nZXRDb29raWUodXJsKTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoY29va2llICE9IG51bGwgJiYgY29va2llLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZmJhLnB1dFZhcih1cmwsIGNvb2tpZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFxcXFxcXFwi5bey6I635Y+W5YiwY29va2llXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICBmYmEuYmFjaygpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIHVhOiBQQ19VQSxcXFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZVxcXFxuICAgIH1cXFxcbn0pXFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5YWz5LqOXFxcIixcXFwicGF0aFxcXCI6XFxcImFib3V0XFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmFkZExpc3RlbmVyKFxcXFxcXFwib25DbG9zZVxcXFxcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICBjbGVhck15VmFyKFxcXFxcXFwiY1xcXFxcXFwiKTtcXFxcbn0pKTtcXFxcbmQucHVzaCgkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYWJvdXQyXFxcXFxcXCIpKTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICBsZXQgYyA9IHBhcnNlSW50KGdldE15VmFyKFxcXFxcXFwiY1xcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIikpXFxcXG4gICAgICAgIGlmIChjID49IDUpIHtcXFxcbiAgICAgICAgICAgIGNvbmZpcm0oe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIua4qemmqOaPkOekulxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFxcXFxcXFwi56Gu5a6a6KaB5byA5ZCv5byA5Y+R6ICF5qih5byP5ZCX77yf5rOo5oSP5byA5ZCv6K+l5qih5byP5YiZ6KGo56S65ZCO57ut5oKo55qE5omA5pyJ5pON5L2c5Z2H5Li65Li76KeC6IO95Yqo5pON5L2c77yM5omA5Lqn55Sf55qE5LiA5YiH6Zeu6aKY5LiO6LSj5Lu75Z2H55Sx5oKo6Ieq5bex5om/5ouFXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJkZXZcXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+W3suW8gOWQr+W8gOWPkeiAheaooeW8j1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcImNcXFxcXFxcIiwgYyArIDEgKyBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxcXG4gICAgfVxcXFxufSk7XFxcXG5cXFxcblxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWFs+S6jjJcXFwiLFxcXCJwYXRoXFxcIjpcXFwiYWJvdXQyXFxcIixcXFwicnVsZVxcXCI6XFxcIiQuZXhwb3J0cyA9IHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLmnKzop4TliJnln7rkuo7lvIDmupDpobnnm67vvJo8YSBocmVmPVxcXFxcXFxcXFxcXFxcXCJodHRwczovL2dpdGh1Yi5jb20vYWxpc3Qtb3JnL2FsaXN0XFxcXFxcXFxcXFxcXFxcIj5BbGlzdDwvYT7vvIzmjqLntKLkuI3kvb/nlKjmnI3liqHlmajlrp7njrBBbGlzdOmAu+i+ke+8jOacrOinhOWImeaJgOacieS7o+eggeWFqOmDqOW8gOa6kO+8jOS7hemZkOS4quS6uuS9v+eUqO+8jOS7heS+m+eglOeptuOAgeWtpuS5oOWSjOa1i+ivle+8jOemgeatoui9rOi9veWIhuS6q+WIsOesrOS4ieaWueW5s+WPsFxcXFxcXFwiLFxcXFxuICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwicmljaF90ZXh0XFxcXFxcXCIsXFxcXG4gICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiXFxcXG59XFxcIn1dXCIsXCJwcm94eVwiOlwiXCJ9IiwicGljVXJsIjoiaHR0cDovL2FsaXN0LmpvZWd1LnRrL2QvcnVsZXMvJUU1JUE0JUI4JUU1JTg1JThCXzUuOC42LjIyMy5wbmciLCJ0aXRsZSI6IuWkuOWFi+e9keebmCJ9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement