xiaomianao666

小程序:磁力君.简

May 28th, 2024
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@磁力君.简@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi56OB5Yqb5ZCbLueugCIsImF1dGhvciI6IuWwj+ajieiihPCfjJ4mQExveURnSWsiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IyNmeXBhZ2UiLCJ2ZXJzaW9uIjoyMjMsImNvbF90eXBlIjoibW92aWVfMyIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoiYWxsIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6JC5yZXF1aXJlKFwiTWFpblwiKTsiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eT9zZWFyY2hUZXJtcz0qKiIsImdyb3VwIjoi4pGgUiIsInNlYXJjaEZpbmQiOiJqczpcbmNsZWFyUHVibGljSXRlbShcIuejgeWKm+WQmy7nroDot7PovaxcIik7XG5sZXQga2V5ID0gZ2V0UGFyYW0oXCJzZWFyY2hUZXJtc1wiKTtcbnNldFJlc3VsdChbe1xuICAgIHRpdGxlOiBcIueCueaIkeW8gOWni+iBmuWQiOaQnOe0olwiICsga2V5LFxuICAgIHVybDogXCJoaWtlcjovL3BhZ2Uvc291I25vSGlzdG9yeSM/cD1meXBhZ2VcIixcbiAgICBleHRyYToge1xuICAgICAgICBwYWdlVGl0bGU6IFwi5pCc57SiXCIgKyBrZXksXG4gICAgICAgIHNlYXJjaFRlcm1zOiBrZXksXG4gICAgICAgIGhpZGVTZXR0aW5nOiB0cnVlXG4gICAgfVxufV0pOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6IiIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop4TliJnlpITnkIZcIixcInBhdGhcIjpcImRhdGFcIixcInJ1bGVcIjpcImpzOlxcbmZ1bmN0aW9uIGRvdWJsZVRyZWF0aW5nKGNvbmZpZywgZ2V0TW9kZVVybCkge1xcbiAgICBsZXQge1xcbiAgICAgICAgb3Blbk1vZGUsXFxuICAgICAgICBmaW5kQWxpVXJsLFxcbiAgICAgICAgYmFzaWNVcmwsXFxuICAgICAgICBuYW1lXFxuICAgIH0gPSBjb25maWc7XFxuICAgIGxldCBjaWxpVXJsID0gaW5wdXQ7XFxuICAgIGxldCBzaGFyZVB3ZDtcXG4gICAgaWYgKGZpbmRBbGlVcmwpIHtcXG4gICAgICAgIGxldCByZXN1bHQ7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRBbGlVcmwoY2lsaVVybCwgYmFzaWNVcmwpO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAkKFxcXCLmkJzntKLlvJXmk47jgIxcXFwiICsgbmFtZSArIFxcXCLjgI3lpLHmlYjor7fogZTns7vmkJzntKLlvJXmk47kvZzogIXkv67lpI3miJbliKDpmaRcXFxcblxcXFxu5byV5pOO5L2c6ICF5Y+v5Lul5Y675a6Y5pa56aKR6YGT6K+i6ZeuXFxcXG7ngrnlh7vnoa7lrprlv6vpgJ/liKDpmaRcXFwiKS5jb25maXJtKChuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmuKnppqjmj5DnpLpcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogXFxcIuehruWumuimgeWIoOmZpFxcXCIgKyBuYW1lICsgXFxcIuWQl++8n+azqOaEj+WIoOmZpOWQjuaXoOazleaBouWkjVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKChuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBhcnIuZmluZEluZGV4KHYgPT4gdi5uYW1lID09PSBuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5zYXZlSnNvbihhcnIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbShcXFwicnVsZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liKDpmaTmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgbmFtZSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSwgbmFtZSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpICYmIHJlc3VsdC5sZW5ndGggPT09IDEpIHtcXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbMF07XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXFxcInN0cmluZ1xcXCIpIHtcXG4gICAgICAgICAgICBjaWxpVXJsID0gcmVzdWx0O1xcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkgJiYgcmVzdWx0Lmxlbmd0aCkge1xcbiAgICAgICAgICAgIGxldCBpc1N0ciA9IHR5cGVvZihyZXN1bHRbMF0pID09PSBcXFwic3RyaW5nXFxcIjtcXG4gICAgICAgICAgICBsZXQgc2VsZWN0ID0gcmVzdWx0O1xcbiAgICAgICAgICAgIGlmICghaXNTdHIpIHtcXG4gICAgICAgICAgICAgICAgc2VsZWN0ID0gcmVzdWx0Lm1hcCh2ID0+IHYuY2lsaVVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC5tYXAodiA9PiB2LnJlcGxhY2UoL2h0dHAuKj9cXFxcL3NcXFxcLy8sIFxcXCJcXFwiKSk7XFxuICAgICAgICAgICAgcmV0dXJuICQoc2VsZWN0KS5zZWxlY3QoKGNvbmZpZywgZ2V0TW9kZVVybCwgaXNTdHIsIHJlc3VsdCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgY2lsaVVybDtcXG4gICAgICAgICAgICAgICAgbGV0IHNoYXJlUHdkO1xcbiAgICAgICAgICAgICAgICBpZiAoIWlzU3RyKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgciA9IHJlc3VsdC5maW5kKHYgPT4gdi5jaWxpVXJsLmluY2x1ZGVzKGlucHV0KSk7XFxuICAgICAgICAgICAgICAgICAgICBjaWxpVXJsID0gci5jaWxpVXJsO1xcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVQd2QgPSByLnNoYXJlUHdkO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgY2lsaVVybCA9IHJlc3VsdC5maW5kKHYgPT4gdi5pbmNsdWRlcyhpbnB1dCkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRNb2RlVXJsKGNpbGlVcmwsIHNoYXJlUHdkLCBjb25maWcub3Blbk1vZGUpO1xcbiAgICAgICAgICAgIH0sIGNvbmZpZywgZ2V0TW9kZVVybCwgaXNTdHIsIHJlc3VsdCk7XFxuICAgICAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkgJiYgdHlwZW9mKHJlc3VsdCkgPT09IFxcXCJvYmplY3RcXFwiKSB7XFxuICAgICAgICAgICAgY2lsaVVybCA9IHJlc3VsdC5jaWxpVXJsLCBzaGFyZVB3ZCA9IHJlc3VsdC5zaGFyZVB3ZDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZ2V0TW9kZVVybChjaWxpVXJsLCBzaGFyZVB3ZCwgb3Blbk1vZGUpO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRNb2RlVXJsKGNpbGlVcmwsIHNoYXJlUHdkLCBvcGVuTW9kZSkge1xcbiAgICBpZiAoY2lsaVVybC5zdGFydHNXaXRoKFxcXCJtYWduZXRcXFwiKSkge1xcbiAgICAgICAgaWYgKG9wZW5Nb2RlID09PSBcXFwi5rW36ZiU6KeG55WMXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiBjaWxpVXJsO1xcbiAgICAgICAgfSBlbHNlIGlmIChvcGVuTW9kZSA9PT0gXFxcIui/hembt+S4i+i9vVxcXCIpIHsgICAgICAgICBcXG5vcGVuQXBwSW50ZW50KCdjb20ueHVubGVpLmRvd25sb2FkcHJvdmlkZXInLCAnY29tLnh1bmxlaS5kb3dubG9hZHByb3ZpZGVyLmxhdW5jaC5MYXVuY2hBY3Rpdml0eTInLCB7aW50ZW50RGF0YTogY2lsaVVybH0pXFxuICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/jgJDov4Xpm7fkuIvovb3jgJEnXFxuICAgICAgICB9IGVsc2UgaWYgKG9wZW5Nb2RlID09PSBcXFwiUElLUEFLXFxcIikgeyAgICAgICAgIFxcbiAgICAgICAgICByZXR1cm4gJ3Bpa3Bha2FwcDovL215cGlrcGFrLmNvbS94cGFuL21haW5fdGFiP3RhYj0xJmFkZF91cmw9JyArIGNpbGlVcmxcXG4gICAgICAgIH0gZWxzZSBpZiAob3Blbk1vZGUgPT09IFxcXCLlubvlvbHkuIvovb1cXFwiKSB7XFxuIG9wZW5BcHBJbnRlbnQoJ2NvbS54aW5nc3UuZG93bmxvYWRlcicsICdjb20uZTRhLnJ1bnRpbWUuYW5kcm9pZC5tYWluQWN0aXZpdHknLCB7aW50ZW50RGF0YTogY2lsaVVybH0pXFxuICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/jgJDlubvlvbHkuIvovb3jgJEnXFxuICAgICAgICB9ZWxzZSBpZiAob3Blbk1vZGUgPT09IFxcXCLkuozpqbTkuIvovb1cXFwiKSB7XFxuICAgICAgICAgIG9wZW5BcHBJbnRlbnQoJ2NvbS5xaWtjbG91ZC5xaWsnLCAnY29tLmU0YS5ydW50aW1lLmFuZHJvaWQubWFpbkFjdGl2aXR5Jywge2ludGVudERhdGE6IGNpbGlVcmx9KVxcbiAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v44CQ5LqM6am05LiL6L2944CRJ1xcbiAgICAgICAgfWVsc2UgaWYgKG9wZW5Nb2RlID09PSBcXFwi5bCP55m95LiL6L29XFxcIikge1xcbiAgICAgICAgICBvcGVuQXBwSW50ZW50KCd4Yi5kb3dubG9hZC5jb20nLCAnaW8uZGNsb3VkLlBhbmRvcmFFbnRyeScsIHtpbnRlbnREYXRhOiBjaWxpVXJsfSlcXG4gICAgICAgICAgcmV0dXJuICd0b2FzdDovL+OAkOWwj+eZveS4i+i9veOAkSdcXG4gICAgICAgIH1lbHNlIGlmIChvcGVuTW9kZSA9PT0gXFxcIuaCn+epuuS4i+i9vVxcXCIpIHtcXG5vcGVuQXBwSW50ZW50KCdjb20ueWZvby53a0Rvd25sb2FkZXInLCAnY29tLnlmb28ud2tEb3dubG9hZGVyLk1haW5BY3Rpdml0eScsIHtpbnRlbnREYXRhOiBjaWxpVXJsfSlcXG4gICAgICAgICAgcmV0dXJuICd0b2FzdDovL+OAkOaCn+epuuS4i+i9veOAkSdcXG4gICAgICAgIH0gIGVsc2Uge3JldHVybiBjaWxpVXJsO31cXG4gICAgfSBlbHNlIGlmIChjaWxpVXJsLmluY2x1ZGVzKFxcXCJwYW4ucXVhcmsuY24vcy9cXFwiKSkge1xcbiAgICAgICAgbGV0IGhhcyA9IGZldGNoKFxcXCJoaWtlcjovL2hvbWVAUXVhcmsu566AXFxcIikhPVxcXCJudWxsXFxcIjtcXG4gICAgICAgIGlmIChoYXMpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9xdWFya0xpc3Q/cnVsZT1RdWFyay7nroAmcmVhbHVybD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGNpbGlVcmwpICsgXFxcIiZzaGFyZVB3ZD1cXFwiICsgKHNoYXJlUHdkIHx8IFxcXCJcXFwiKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIGNpbGlVcmw7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSBpZiAoL2FsaShwYW58eXVuZHJpdmUpXFxcXC5jb20vLnRlc3QoY2lsaVVybCkpe1xcbiAgICAgICAgbGV0IGhhcyA9IGZldGNoKFxcXCJoaWtlcjovL2hvbWVA5LqR55uY5ZCbLueugFxcXCIpIT1cXFwibnVsbFxcXCI7XFxuICAgICAgICBpZiAoaGFzKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvYWxpeXVuP3J1bGU95LqR55uY5ZCbLueugCZwYWdlPWZ5cGFnZSZyZWFsdXJsPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpICsgXFxcIiZzaGFyZVB3ZD1cXFwiO1xcbiAgICAgICAgIH1cXG4gICAgfWVsc2UgaWYgKGNpbGlVcmwuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICByZXR1cm4gXFxcIndlYjovL1xcXCIgKyBjaWxpVXJsO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIGNpbGlVcmw7XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gZ2V0Q29tcGxldGVSdWxlKHJ1bGUpIHtcXG4gICAgbGV0IGZpbmQgPSBuZXcgRnVuY3Rpb24oXFxcInNcXFwiLCBcXFwicGFnZVxcXCIsIFxcXCJ1c2VyXFxcIiwgXFxcImJhc2ljVXJsXFxcIiwgcnVsZS5maW5kKTtcXG4gICAgcnVsZS5maW5kID0gKHMsIHBhZ2UpID0+IGZpbmQocywgcGFnZSwgcnVsZS51c2VyIHx8IHt9LCBydWxlLmJhc2ljVXJsIHx8IFxcXCJcXFwiKTtcXG4gICAgaWYgKHJ1bGUuZmluZEFsaVVybCkge1xcbiAgICAgICAgcnVsZS5maW5kQWxpVXJsID0gbmV3IEZ1bmN0aW9uKFxcXCJpbnB1dFxcXCIsIFxcXCJiYXNpY1VybFxcXCIsIHJ1bGUuZmluZEFsaVVybCk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJ1bGU7XFxufVxcbiQuZXhwb3J0cy5jYXJyeVJ1bGUgPSBmdW5jdGlvbihydWxlLCBzLCBwYWdlLCBzZWFyY2hNb2RlLCBvcGVuTW9kZSkge1xcbiAgICBydWxlID0gZ2V0Q29tcGxldGVSdWxlKHJ1bGUpO1xcbiAgICBsZXQgbGlzdCA9IHJ1bGUuZmluZChzLCBwYWdlKTtcXG4gICAgaWYgKCFsaXN0KSByZXR1cm4gW107XFxuICAgIGxldCB1cmxMYXp5ID0gJChcXFwiXFxcIikubGF6eVJ1bGUoZG91YmxlVHJlYXRpbmcsIHtcXG4gICAgICAgIG9wZW5Nb2RlOiBvcGVuTW9kZSxcXG4gICAgICAgIGZpbmRBbGlVcmw6IHJ1bGUuZmluZEFsaVVybCxcXG4gICAgICAgIGJhc2ljVXJsOiBydWxlLmJhc2ljVXJsLFxcbiAgICAgICAgbmFtZTogcnVsZS5uYW1lXFxuICAgIH0sIGdldE1vZGVVcmwpO1xcbiAgICBsZXQgZGVzY1RpcHMgPSBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIHJ1bGUubmFtZS5mb250Y29sb3IoXFxcIiNmMTNiNjZhXFxcIikgKyBcXFwiJm5ic3A7XFxcIjtcXG4gICAgbGV0IHJlc0xpc3QgPSBbXTtcXG5cXG4vL+WFs+mUruivjemrmOS6rlxcbmZ1bmN0aW9uIGhpZ2hsaWdodEtleXdvcmRzKHRleHQsIGtleXdvcmRzKSB7XFxuICBrZXl3b3JkcyA9IGtleXdvcmRzLnNwbGl0KFxcXCJcXFwiKTtcXG4gIGtleXdvcmRzLmZvckVhY2goZnVuY3Rpb24oa2V5d29yZCkge1xcbiAgICAvLyDlr7nlhbPplK7lrZfov5vooYzovazkuYnku6Xpgb/lhY3nibnmrorlrZfnrKblnKjmraPliJnkuK3nmoTpl67popjvvIznhLblkI7lu7rnq4vnlKjkuo7ljLnphY3nmoTmraPliJnooajovr7lvI9cXG4gICAgdmFyIGVzY2FwZWRLZXl3b3JkID0ga2V5d29yZC5yZXBsYWNlKC9bLVxcXFwvXFxcXFxcXFxeJCorPy4oKXxbXFxcXF17fV0vZywgJ1xcXFxcXFxcJCYnKTtcXG4gICAgLy8g6auY5Lqu5YWz6ZSu6K+N77yM5o6S6ZmkSFRNTOagh+etvuWGheeahOWMuemFjVxcbiAgICB2YXIgcGF0dGVybiA9IG5ldyBSZWdFeHAoJyg/ITxbXjw+XSopKCcgKyBlc2NhcGVkS2V5d29yZCArICcpKD8hW148Pl0qPiknLCAnZ2knKTtcXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZShwYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCkge1xcbiAgICAgIHJldHVybiAn4oCc4oCc4oCd4oCdJyArIG1hdGNoLmZvbnRjb2xvcignI0ZGMDBGRicpO1xcbiAgICB9KTtcXG4gIH0pO1xcbiAgcmV0dXJuIHRleHQ7XFxufVxcbiAgICBmb3IgKGxldCBpdCBvZiBsaXN0KSB7XFxuICAgICAgICBpZiAoaXQuc2tpcCkge1xcbiAgICAgICAgICAgIHJlc0xpc3QucHVzaChpdCk7XFxuICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoc2VhcmNoTW9kZSAmJiAhc2VhcmNoQ29udGFpbnMoaXQudGl0bGUsIHMsIHRydWUpKSBjb250aW51ZTtcXG4gICAgICAgIGl0LnVybCA9IHJ1bGUuZmluZEFsaVVybCA/IGl0LnVybCArIHVybExhenkgOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKGdldE1vZGVVcmwsIGl0LnVybCwgaXQuc2hhcmVQd2QgfHwgXFxcIlxcXCIsIG9wZW5Nb2RlKTtcXG4gICAgICAgIHJlc0xpc3QucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0LnRpdGxlLmluY2x1ZGVzKFxcXCLigJzigJzigJ3igJ1cXFwiKSA/IGl0LnRpdGxlIDogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBoaWdobGlnaHRLZXl3b3JkcyhpdC50aXRsZSwgcyksXFxuICAgICAgICAgICAgZGVzYzogZGVzY1RpcHMgKyAoaXQuZGVzYyB8fCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgdXJsOiBpdC51cmwsXFxuICAgICAgICAgICAgcGljX3VybDogaXQucGljX3VybCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogaXQucGljX3VybCA/ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycgOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICBleHRyYTogT2JqZWN0LmFzc2lnbih7XFxuICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgIG5vUGljOiB0cnVlXFxuICAgICAgICAgICAgfSwgaXQuZXh0cmEpXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzTGlzdDtcXG59XFxubGV0IHNpemUgPSAxMDtcXG5cXG5sZXQgcnVsZXMgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRVc2VmdWxKc29uKCk7XFxuXFxuJC5leHBvcnRzLmdldERhdGEgPSBmdW5jdGlvbihwYWdlLCBydWxlKSB7XFxuICAgIGlmICghcGFnZSAmJiAhcnVsZSkge1xcbiAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChpdCA9PiBpdC5uYW1lKTtcXG4gICAgfVxcbiAgICBpZiAocGFnZSA9PT0gLTEpIHtcXG4gICAgICAgIHJldHVybiBydWxlcy5tYXAoaXQgPT4gW2l0Lm5hbWUsIGl0LmJhc2ljVXJsXSk7XFxuICAgIH1cXG4gICAgaWYgKHJ1bGUgIT0gbnVsbCkge1xcbiAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCAmJiBwYWdlID4gMSkge1xcbiAgICAgICAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoaSA9PiBpLm5hbWUgPT0gcnVsZSAmJiBpLnBhZ2UpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlKTtcXG4gICAgfVxcbiAgICBsZXQgc3RhcnQgPSAocGFnZSAtIDEpICogc2l6ZTtcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHN0YXJ0ICsgMSkge1xcbiAgICAgICAgcmV0dXJuIFtdO1xcbiAgICB9XFxuICAgIGxldCBsZW4gPSBzaXplO1xcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgcGFnZSAqIHNpemUpIHtcXG4gICAgICAgIGxlbiA9IHJ1bGVzLmxlbmd0aCAtIHN0YXJ0O1xcbiAgICB9XFxuICAgIHJldHVybiBydWxlcy5zbGljZShzdGFydCwgc3RhcnQgKyBsZW4pO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0oumhtemdolwiLFwicGF0aFwiOlwic291XCIsXCJydWxlXCI6XCJqczpcXG5jb25zdCBjb2RldGVzdCA9ICQucmVxdWlyZShcXFwiY29kZXRlc3RcXFwiKTtcXG5cXG5mdW5jdGlvbiBzZXRDbGlwKCkge1xcbiAgICBmdW5jdGlvbiBnZXRDb3B5KCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBjb25zdCBDb250ZXh0ID0gYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7XFxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IGNvbS5leGFtcGxlLmhpa2Vydmlldy51aS5BcHBsaWNhdGlvbigpLmdldENvbnRleHQoKTtcXG4gICAgICAgICAgICAvLyDojrflj5bns7vnu5/liarotLTmnb9cXG4gICAgICAgICAgICBsZXQgY2xpcGJvYXJkID0gY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQ0xJUEJPQVJEX1NFUlZJQ0UpO1xcbiAgICAgICAgICAgIC8vIOi/lOWbnuaVsOaNrlxcbiAgICAgICAgICAgIGxldCBjbGlwRGF0YSA9IGNsaXBib2FyZC5nZXRQcmltYXJ5Q2xpcCgpO1xcbiAgICAgICAgICAgIGlmIChjbGlwRGF0YSAhPSBudWxsICYmIGNsaXBEYXRhLmdldEl0ZW1Db3VudCgpID4gMCkge1xcbiAgICAgICAgICAgICAgICAvLyDku47mlbDmja7pm4bkuK3ojrflj5bvvIjnspjotLTvvInnrKzkuIDmnaHmlofmnKzmlbDmja5cXG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSBjbGlwRGF0YS5nZXRJdGVtQXQoMCkuZ2V0VGV4dCgpO1xcbiAgICAgICAgICAgICAgICBpZiAodGV4dCAhPSBudWxsKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHQudG9TdHJpbmcoKSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgbGV0IHRleHQgPSBnZXRDb3B5KCkgfHwgXFxcIlxcXCI7XFxuICAgIGxldCB1cmwgPSBjb2RldGVzdC5tYXRjaENvZGUodGV4dCk7XFxuICAgIGlmICh1cmwpIHtcXG4gICAgICAgIGxldCBjYWNoZSA9IGdldEl0ZW0oXFxcImNsaXBib2FyZENhY2hlXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgaWYgKHVybCAhPT0gY2FjaGUpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXCIjMTNCNjFCXFxcIj7ilpAgPC9mb250PjxiPua4qemmqOaPkOekujxiPicsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmo4DmtYvliLDliarotLTmnb/lkKvmnInnlarlj7fmmK/lkKbmiZPlvIA/XFxcXG5cXFwiICsgdXJsLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGlucHV0LCBpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShpZCArIFxcXCJjbGlwYm9hcmRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NvdT9wPWZ5cGFnZSZzZWFyY2hUZXJtcz1cXFwiICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgIH0sIHVybCwgaWQpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogaWQgKyBcXFwiY2xpcGJvYXJkXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogXFxcIuaJk+W8gOmTvuaOpVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcImNsaXBib2FyZENhY2hlXFxcIiwgdXJsKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBzZXRIZWFkKCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmkJzntKLvvJpcXFwiICsgW1xcXCLpu5jorqRcXFwiLCBcXFwi57K+5YeGXFxcIl1bc2VhcmNoTW9kZV0sXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHNldFNlYXJjaE1vZGUoZ2V0U2VhcmNoTW9kZSgpID8gMCA6IDEpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl8yX3JvdW5kXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fc2VhcmNoNlxcXCJcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuaooeW8j++8mlxcXCIgKyBvcGVuTW9kZSxcXG4gICAgICAgIHVybDogXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLno4HlipvlkJsu566A6K6+572uXFxcIixcXG4gICAgICAgICAgICBvcHRpb25zOiBbXFxcIuaooeW8j++8mua1t+mYlOinhueVjFxcXCIsIFxcXCLmqKHlvI/vvJrov4Xpm7fkuIvovb1cXFwiLFxcXCLmqKHlvI/vvJpQSUtQQUtcXFwiLCBcXFwi5qih5byP77ya5LqM6am05LiL6L29XFxcIiwgXFxcIuaooeW8j++8muWwj+eZveS4i+i9vVxcXCIsXFxcIuaooeW8j++8muW5u+W9seS4i+i9vVxcXCIsIFxcXCLmqKHlvI/vvJrmgp/nqbrkuIvovb1cXFwiLFxcXCLmqKHlvI/vvJrlhbbku5bkuIvovb1cXFwiLCBcXFwi6KeE5YiZ566h55CGXFxcIiwgXFxcIuaUr+aMgeS9nOiAhVxcXCJdLFxcbiAgICAgICAgICAgIGNvbDogMixcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChcXFwi6KeE5YiZ566h55CGXFxcIiA9PSBpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcnVsZU1hbmFnZSNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChcXFwi5pSv5oyB5L2c6ICFXFxcIiA9PSBpbnB1dCkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvRG9uYXRlLnYjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoXFxcIuaooeW8j++8mlxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwib3Blbk1vZGVcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi6L+F6Zu35LiL6L29XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdOS/ruaUueaIkOWKn1xcXFxu6K+356Gu5L+d5pyJ5a6J6KOF44CQ6L+F6Zu35LiL6L2944CRXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIlBJS1BBS1xcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHTkv67mlLnmiJDlip9cXFxcbuivt+ehruS/neacieWuieijheOAkFBJS1BBS+OAkVxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXCLkuozpqbTkuIvovb1cXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx05L+u5pS55oiQ5YqfXFxcXG7or7fnoa7kv53mnInlronoo4XjgJDkuozpqbTkuIvovb3jgJFcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi5bm75b2x5LiL6L29XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdOS/ruaUueaIkOWKn1xcXFxu6K+356Gu5L+d5pyJ5a6J6KOF44CQ5bm75b2x5LiL6L2944CRXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuWwj+eZveS4i+i9vVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHTkv67mlLnmiJDlip9cXFxcbuivt+ehruS/neacieWuieijheOAkOWwj+eZveS4i+i9veOAkVxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXCLmgp/nqbrkuIvovb1cXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx05L+u5pS55oiQ5YqfXFxcXG7or7fnoa7kv53mnInlronoo4XjgJDmgp/nqbrkuIvovb3jgJFcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi5YW25LuW5LiL6L29XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mVv+aMiemAieaLqeOAkOS4i+i9vei1hOa6kOOAkVxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fMl9yb3VuZFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX21lbnU2XFxcIlxcbiAgICB9KTtcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn8J+UjicsXFxuICAgICAgICBkZXNjOiAn6K+36L6T5YWl5YWz6ZSu6K+NL+mTvuaOpScsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC50cmltKCk7XFxuICAgICAgICAgICAgaWYgKC9hbGkocGFufHl1bmRyaXZlKVxcXFwuY29tLy50ZXN0KGlucHV0KSkge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJzXFxcIik7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL2FsaXl1bj9ydWxlPeS6keebmOWQmy7nroAmcGFnZT1meXBhZ2UmcmVhbHVybD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KSArIFxcXCImc2hhcmVQd2Q9XFxcIjtcXG4gICAgICAgICAgICB9ZWxzZSBpZihpbnB1dC5zdGFydHNXaXRoKFxcXCJtYWduZXQ6P1xcXCIpKXtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwic1xcXCIpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3MnLCBpbnB1dCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICB9KSxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRNeVZhcigncmVmcycsaW5wdXQpXFxcIixcXG4gICAgICAgICAgICBpZDogaWQgKyBcXFwic3NcXFwiLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogcyxcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IFxcXCLmiZPlvIDpk77mjqVcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn1cXG5cXG5mdW5jdGlvbiBzZXRSdWxlSXRlbSgpIHtcXG4gICAgbGV0IHJ1bGVzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXCIpLmdldERhdGEoLTEpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLwn4yfXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vY29sbGVjdGlvbj9ydWxlPVxcXCIgKyBNWV9SVUxFLnRpdGxlLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFxcXCJcXFwiID09IHIgPyBcXFwi4oCc4oCc5YWo6YOo4oCd4oCdXFxcIiA6IFxcXCLlhajpg6hcXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChzLCBpZCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBxciA9IGdldEl0ZW0oXFxcInJ1bGVcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJydWxlXFxcIik7XFxuICAgICAgICAgICAgaWYgKHMpIHtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKFxcXCLlhajpg6hcXFwiICsgaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc5YWo6YOo4oCd4oCdXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaWYgKHFyKSB7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGlkICsgcXIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcXJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0sIHMsIGlkKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBcXFwi5YWo6YOoXFxcIiArIGlkXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBmb3IgKGxldCBbaXQsIGJhc2ljVXJsXSBvZiBydWxlcykge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogaXQgPT0gciA/IFxcXCLigJzigJxcXFwiICsgaXQgKyBcXFwi4oCd4oCdXFxcIiA6IGl0LFxcbiAgICAgICAgICAgIHVybDogJCgoYmFzaWNVcmwgfHwgXFxcIlxcXCIpICsgXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHIsIHMsIGlkKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBxciA9IGdldEl0ZW0oXFxcInJ1bGVcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInJ1bGVcXFwiLCByKTtcXG4gICAgICAgICAgICAgICAgaWYgKHMpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHFyID8gKGlkICsgcXIpIDogKFxcXCLlhajpg6hcXFwiICsgaWQpLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHFyIHx8IFxcXCLlhajpg6hcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oaWQgKyByLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJxcXFwiICsgciArIFxcXCLigJ3igJ1cXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgfSwgaXQsIHMsIGlkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBpZCArIGl0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG5cXG59XFxuXFxuZnVuY3Rpb24gcmVjb3JkKCkge1xcbiAgICBsZXQgaGlzdG9yeSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiLCBbXSk7XFxuICAgIGxldCBpaSA9IGhpc3RvcnkuaW5kZXhPZihzKTtcXG4gICAgaWYgKGlpID4gLTEpIHtcXG4gICAgICAgIGhpc3Rvcnkuc3BsaWNlKGlpLCAxKTtcXG4gICAgfVxcbiAgICBpZiAoaGlzdG9yeS5sZW5ndGggPiAyMCkge1xcbiAgICAgICAgaGlzdG9yeS5zcGxpY2UoaGlzdG9yeS5sZW5ndGggLSAxLCAxKTtcXG4gICAgfVxcbiAgICBoaXN0b3J5LnVuc2hpZnQocyk7XFxuICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiLCBoaXN0b3J5KTtcXG59XFxuXFxuZnVuY3Rpb24gc2VhcmNoRW5kKCkge1xcbiAgICBsZXQgcCA9IE1ZX1BBR0U7XFxuICAgIGxldCBkYXRhID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXCIpLmdldERhdGEocCwgciAhPSBcXFwiXFxcIiA/IHIgOiBudWxsKTtcXG4gICAgbGV0IHBhZ2VpZCA9IGlkICsgXFxcInlwai1wYWdlXFxcIiArIHA7XFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLliqDovb3nrKxcXFwiICsgcCArIFxcXCLpobXkuK3vvIzov5vluqbvvJoxL1xcXCIgKyBkYXRhLmxlbmd0aCxcXG4gICAgICAgICAgICB1cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKTtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICAgICAgLy/lpJrnur/nqIvliqDovb0gICAgICAgIFxcbiAgICAgICAgbGV0IHJlYWxQYWdlID0gXFxcIlxcXCIgPT0gciA/IDEgOiBwO1xcbiAgICAgICAgbGV0IHRhc2tzID0gZGF0YS5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHJ1bGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiZGF0YVxcXCIpLmNhcnJ5UnVsZShydWxlLCBzLCByZWFsUGFnZSwgc2VhcmNoTW9kZSwgb3Blbk1vZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhydWxlLm5hbWUgKyBcXFwiOlxcXCIgKyBlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qaWYoZGF0YS5sZW5ndGg9PT0xJiZwPT09MSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6XFxcIuKAnOKAnFxcXCIrcnVsZS5uYW1lK1xcXCIgRVJST1LigJ3igJ1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogZS50b1N0cmluZygpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6XFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOlxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAvL3JldHVybiBydWxlLmZpbmQocywgcmVhbFBhZ2UpO1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBwYXJhbTogaXQsXFxuICAgICAgICAgICAgICAgIGlkOiBcXFwicnVsZUBcXFwiICsgaXQubmFtZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgYmF0Y2hFeGVjdXRlKHRhc2tzLCB7XFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocGFyYW0sIGlkLCBlcnJvciwgcmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgIHBhcmFtLmkgKz0gMTtcXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFwiX25vdGhhdmVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1CZWZvcmUocGFnZWlkLCByZXN1bHQpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbS5pID09PSBwYXJhbS5hbGwpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQubGVuZ3RoKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFwiX25vdGhhdmVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIn5+fuS7gOS5iOi1hOa6kOmDveayoeacieWTpn5+flxcXCIuZm9udGNvbG9yKFxcXCJHcmF5XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcIl9ub3RoYXZlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHBhZ2VpZCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIE1ZX1BBR0UgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcIiArIChwYXJhbS5pICsgMSkgKyBcXFwiL1xcXCIgKyBwYXJhbS5hbGwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHBhcmFtOiB7XFxuICAgICAgICAgICAgICAgIGFsbDogZGF0YS5sZW5ndGgsXFxuICAgICAgICAgICAgICAgIGk6IDAsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBzZXRIaXN0b3J5KCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6I2ZmNjYwMVxcXCI+PGI+5Y6G5Y+y6K6w5b2VPC9iPjwvc3Bhbj4nLFxcbiAgICAgICAgcGljX3VybDogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fY2xvY2tcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgdXJsOiAkKFtcXFwi5riF6Zmk5pCc57Si6K6w5b2VXFxcIiwgXFxcIuaJk+W8gOingueci+iusOW9lVxcXCJdKS5zZWxlY3QoKGlkKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSBcXFwi5riF6Zmk5pCc57Si6K6w5b2VXFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwi56Gu5a6a5riF6Zmk5YWo6YOo5pCc57Si6K6w5b2V77yfXFxcIikuY29uZmlybSgoaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKGlkICsgXFxcIjprZXlcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcihpZCArIFxcXCI6c2VhcmNoSGlzdG9yeVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCJ+fn7ku4DkuYjpg73msqHmnInlk6Z+fn5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogaWQgKyBcXFwiOmtleVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9LCBpZCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2hpc3Rvcnk/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBpZCksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBpZCArIFxcXCI6c2VhcmNoSGlzdG9yeVxcXCIsXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbiAgICBsZXQgaGlzdG9yeSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiLCBbXSk7XFxuICAgIGxldCBpID0gMDtcXG4gICAgZm9yIChsZXQga2V5IG9mIGhpc3RvcnkpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGtleSxcXG4gICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGlkLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IGV4dHJhID0gZmluZEl0ZW0oaWQgKyBcXFwic3NcXFwiKS5leHRyYTtcXG4gICAgICAgICAgICAgICAgZXh0cmEuZGVmYXVsdFZhbHVlID0ga2V5O1xcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiBleHRyYVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICB9LCBpZCwga2V5KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogaWQgKyBcXFwiOmtleTpcXFwiICsga2V5LFxcbiAgICAgICAgICAgICAgICBjbHM6IGlkICsgXFxcIjprZXlcXFwiLFxcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWIoOmZpOWFs+mUruivjTpcXFwiICsga2V5LFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGlkLCBrZXksIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGlzdG9yeSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiLCBbXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5zcGxpY2UoaSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIsIGhpc3RvcnkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oaWQgKyBcXFwiOmtleTpcXFwiICsga2V5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RvYXN0KCk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBpZCwga2V5LCBpKVxcbiAgICAgICAgICAgICAgICB9XVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgaSsrO1xcbiAgICB9XFxuICAgIGlmIChoaXN0b3J5Lmxlbmd0aCA9PT0gMCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCJ+fn7ku4DkuYjpg73msqHmnInlk6Z+fn5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGNsczogaWQgKyBcXFwiOmtleVxcXCIsXFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIHNldFRyZW5kaW5nVGFiRW5kKCkge1xcbiAgICBsZXQgaG90Q2xhc3MgPSB7XFxuICAgICAgICBcXFwi55m+5bqmXFxcIjoge1xcbiAgICAgICAgICAgIFxcXCLnlLXop4bliadcXFwiOiBcXFwidGVsZXBsYXlcXFwiLFxcbiAgICAgICAgICAgIFxcXCLnlLXlvbFcXFwiOiBcXFwibW92aWVcXFwiXFxuICAgICAgICB9LFxcbiAgICAgICAgXFxcIuWkuOWFi1xcXCI6IHtcXG4gICAgICAgICAgICBcXFwi55S16KeG5YmnXFxcIjogXFxcIueUteinhuWJp1xcXCIsXFxuICAgICAgICAgICAgXFxcIueUteW9sVxcXCI6IFxcXCLnlLXlvbFcXFwiLFxcbiAgICAgICAgICAgIFxcXCLliqjmvKtcXFwiOiBcXFwi5Yqo5ryrXFxcIixcXG4gICAgICAgICAgICBcXFwi57u86Im6XFxcIjogXFxcIue7vOiJulxcXCJcXG4gICAgICAgIH1cXG4gICAgfTtcXG4gICAgbGV0IGRhdGFTb3VyY2UgPSBPYmplY3Qua2V5cyhob3RDbGFzcyk7XFxuICAgIGxldCBzZWxlY3Rzb3VyY2UgPSBnZXRJdGVtKFxcXCJkYXRhU291cmNlXFxcIiwgZGF0YVNvdXJjZVswXSk7XFxuICAgIGxldCBob3RrZXlzID0gT2JqZWN0LmtleXMoaG90Q2xhc3Nbc2VsZWN0c291cmNlXSk7XFxuICAgIGxldCBzZWxlY3RrZXkgPSBnZXRJdGVtKFxcXCJob3RrZXlcXFwiLCBob3RrZXlzWzBdKTtcXG4gICAgbGV0IHRhYmtleSA9IGhvdENsYXNzW3NlbGVjdHNvdXJjZV1bc2VsZWN0a2V5XTtcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNmZjY2MDFcXFwiPjxiPicgKyBzZWxlY3Rzb3VyY2UgKyBzZWxlY3RrZXkgKyAn54Ot5pCcPC9iPjwvc3Bhbj4nLFxcbiAgICAgICAgdXJsOiAkKGhvdGtleXMsIDEsIFxcXCLliIfmjaLng63mkJxcXFwiKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcImhvdGtleVxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suWIh+aNouS4ulxcXCIgKyBpbnB1dDtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fZmlyZVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliIfmjaLmlbDmja7mupBcXFwiLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoZGF0YVNvdXJjZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoZGF0YVNvdXJjZSwgMSwgXFxcIuWIh+aNouaVsOaNrua6kFxcXCIpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwiZGF0YVNvdXJjZVxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckl0ZW0oXFxcImhvdGtleVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5YiH5o2i5Li6XFxcIiArIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0sIGRhdGFTb3VyY2UpXFxuICAgICAgICAgICAgfV1cXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuato+WcqOWKoOi9vS4uLlxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBpZCArIFxcXCI6aG90a2V5XFxcIixcXG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIHNldFJlc3VsdChkKTtcXG4gICAgbGV0IHNkID0gW107XFxuICAgIGxldCBzZXRTZWFyY2hLZXkgPSBuYW1lID0+IHtcXG4gICAgICAgIHB1dE15VmFyKCdzJywgbmFtZSk7XFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICB9O1xcblxcbiAgICBsZXQgZ2V0VGl0bGUgPSAoaSwgbmFtZSkgPT4ge1xcbiAgICAgICAgbGV0IGNvbG9yO1xcbiAgICAgICAgc3dpdGNoIChpKSB7XFxuICAgICAgICAgICAgY2FzZSAwOlxcbiAgICAgICAgICAgICAgICBjb2xvciA9IFxcXCIjZmYzMzAwXFxcIjtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAxOlxcbiAgICAgICAgICAgICAgICBjb2xvciA9IFxcXCIjZmY2NjAwXFxcIjtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSAyOlxcbiAgICAgICAgICAgICAgICBjb2xvciA9IFxcXCIjZmY5OTAwXFxcIlxcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICBjb2xvciA9IFxcXCJibGFja1xcXCI7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBTdHJpbmcoaSArIDEpLmZvbnRjb2xvcihjb2xvcikgKyBcXFwiXFxcXHRcXFxcdFxcXFx0XFxcIiArIG5hbWU7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIHN3aXRjaCAoc2VsZWN0c291cmNlKSB7XFxuICAgICAgICAgICAgY2FzZSBcXFwi55m+5bqmXFxcIjpcXG4gICAgICAgICAgICAgICAgdmFyIGpzb24gPSByZXF1ZXN0KCdodHRwczovL3RvcC5iYWlkdS5jb20vYXBpL2JvYXJkP3BsYXRmb3JtPXdpc2UmdGFiPScgKyB0YWJrZXkgKyAnJnRhZz0lN0IlMjJjYXRlZ29yeSUyMjolMjIlRTUlODUlQTglRTklODMlQTglRTclQjElQkIlRTUlOUUlOEIlMjIlN0QnLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDYuMDsgTmV4dXMgNSBCdWlsZC9NUkE1OE4pIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS85OS4wLjQ4NDQuNTEgTW9iaWxlIFNhZmFyaS81MzcuMzYnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdIb3N0JzogJ3RvcC5iYWlkdS5jb20nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogJ3poLUNOLHpoO3E9MC45LGVuLVVTO3E9MC44LGVuO3E9MC43JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAsIGRlZmxhdGUsIGJyJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3RvcC5iYWlkdS5jb20vYm9hcmQ/dGFiPW5vdmVsJyxcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIC8vdmFyIHMgPSBEYXRlLm5vdygpO1xcbiAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IEpTT04ucGFyc2UoanNvbikuZGF0YS5jYXJkc1swXS5jb250ZW50O1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtID0gbGlzdFtpXTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gaXRlbS53b3JkICsgJyAoJyArIGl0ZW0uc2hvd1syXSArICcpJztcXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZXMgPSBpdGVtLmRlc2M7XFxuICAgICAgICAgICAgICAgICAgICBzZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0VGl0bGUoaSwgbmFtZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKHNldFNlYXJjaEtleSwgaXRlbS53b3JkKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBkZXMsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpdGVtLmltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzFfdmVydGljYWxfcGljXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgY2FzZSBcXFwi5aS45YWLXFxcIjpcXG4gICAgICAgICAgICAgICAgdmFyIGpzb24gPSByZXF1ZXN0KFxcXCJodHRwczovL25ld3MubXlxdWFyay5jbi92Mi90b3BsaXN0L21vdmllPyZjaGFubmVsPVxcXCIgKyB0YWJrZXkgKyBcXFwiJnJhbmtfdHlwZT0lRTYlOUMlODAlRTclODMlQURcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIHhtbERhdGEgPSAoSlNPTi5wYXJzZShqc29uKS5kYXRhIHx8IFxcXCJcXFwiKS5yZXBsYWNlKC90aXRsZT4vZywgXFxcImhfdGl0bGU+XFxcIikucmVwbGFjZSgvc3JjPi9nLCBcXFwiaF9zcmM+XFxcIikucmVwbGFjZSgvYXJlYT4vZywgXFxcImhfYXJlYVxcXCIpO1xcbiAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoeG1sRGF0YSwgXFxcImJvZHkmJml0ZW1cXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIGdldFRleHQgPSB0ID0+IHQ7XFxuICAgICAgICAgICAgICAgIHZhciB0cmVuZCA9IFtcXFwi44SnXFxcIiwgXFxcIuKGkVxcXCIsIFxcXCLihpNcXFwiXTtcXG4gICAgICAgICAgICAgICAgLy92YXIgcyA9IERhdGUubm93KCk7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBsaXN0W2ldO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBwZGZoKGl0ZW0sIFxcXCJoX3RpdGxlJiZUZXh0XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVzID0gXFxcIueDreW6pu+8mlxcXCIgKyBwZGZoKGl0ZW0sIFxcXCJob3Rfc2NvcmUmJlRleHRcXFwiKSArIFxcXCIgXFxcIiArIHRyZW5kLmF0KHBkZmgoaXRlbSwgXFxcImhvdF90cmVuZCYmVGV4dFxcXCIpKSArXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlxcXFxu6K+E5YiG77yaXFxcIiArIHBkZmgoaXRlbSwgXFxcInNjb3JlX2F2ZyYmVGV4dFxcXCIpLnJlcGxhY2UoL14wJC8sIFxcXCLmmoLml6Dor4TliIZcXFwiKSArXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlxcXFxuXFxcIiArIHBkZmgoaXRlbSwgXFxcInllYXImJlRleHRcXFwiKSArIFxcXCLCt1xcXCIgKyBwZGZoKGl0ZW0sIFxcXCJoX2FyZWEmJlRleHRcXFwiKSArIFxcXCLCt1xcXCIgKyBwZGZoKGl0ZW0sIFxcXCJjYXRlZ29yeSYmVGV4dFxcXCIpLnJlcGxhY2UoXFxcIixcXFwiLCBcXFwiwrdcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHNkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRUaXRsZShpLCBuYW1lKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoc2V0U2VhcmNoS2V5LCBuYW1lKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBkZXMsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBwZGZoKGl0ZW0sIFxcXCJoX3NyYyYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgICAgIGFkZEl0ZW1BZnRlcihpZCArIFxcXCI6aG90a2V5XFxcIiwgc2QpO1xcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgfSBmaW5hbGx5IHtcXG4gICAgICAgIGRlbGV0ZUl0ZW0oaWQgKyBcXFwiOmhvdGtleVxcXCIpO1xcbiAgICB9XFxufVxcbmxldCByID0gZ2V0SXRlbShcXFwicnVsZVxcXCIsIFxcXCJcXFwiKTtcXG5sZXQgaGlkZVNldHRpbmcgPSBNWV9QQVJBTVMuaGlkZVNldHRpbmcgfHwgZ2V0UGFyYW0oXFxcInNlYXJjaFRlcm1zXFxcIiwgXFxcIlxcXCIpID09PSBcXFwidHJ1ZVxcXCI7XFxubGV0IHMgPSBnZXRNeVZhcigncycsICcnKSB8fCBNWV9QQVJBTVMuc2VhcmNoVGVybXMgfHwgZGVjb2RlVVJJQ29tcG9uZW50KGdldFBhcmFtKFxcXCJzZWFyY2hUZXJtc1xcXCIsIFxcXCJcXFwiKSk7XFxubGV0IHNlYXJjaE1vZGUgPSBnZXRTZWFyY2hNb2RlKCk7XFxubGV0IG9wZW5Nb2RlID0gZ2V0SXRlbShcXFwib3Blbk1vZGVcXFwiLCBcXFwi5rW36ZiU6KeG55WMXFxcIik7XFxubGV0IGlkID0gRGF0ZS5ub3coKSArIE1ZX1JVTEUudGl0bGU7XFxubGV0IGQgPSBbXTtcXG5pZiAoTVlfUEFHRSA9PT0gMSkge1xcbiAgIC8vIHNldFByZXBvc2UoKTtcXG4gICAgaWYgKCFoaWRlU2V0dGluZykge1xcbiAgICAgICAgc2V0Q2xpcCgpO1xcbiAgICAgICAgc2V0SGVhZCgpO1xcbiAgICB9XFxuICAgIHNldFJ1bGVJdGVtKCk7XFxuICAgIGlmICghcykge1xcbiAgICAgICAgc2V0SGlzdG9yeSgpO1xcbiAgICB9XFxufVxcbmlmIChzKSB7XFxuICAgIHJlY29yZCgpO1xcbiAgICBzZWFyY2hFbmQoKTtcXG59IGVsc2UgaWYgKE1ZX1BBR0UgPT09IDEpIHtcXG4gICAgc2V0VHJlbmRpbmdUYWJFbmQoKTtcXG59IGVsc2Uge1xcbiAgICBzZXRSZXN1bHQoW10pO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIue9kemhtea1j+iniFwiLFwicGF0aFwiOlwieXNmeFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5cXG5sZXQgb3Blbk1vZGUgPSBnZXRJdGVtKFxcXCJvcGVuTW9kZVxcXCIpO1xcbmxldCBydWxlID0gTVlfUlVMRS50aXRsZTtcXG5sZXQgdXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KGdldFBhcmFtKFxcXCJ3ZWJVcmxcXFwiLFxcXCJcXFwiKSk7XFxuXFxuZnVuY3Rpb24gaW50ZXJjZXB0KHJ1bGUsIG9yaWdpbiwgb3Blbk1vZGUpIHtcXG4gICAgbGV0IGhvc3QgPSBvcmlnaW4ucmVwbGFjZShuZXcgUmVnRXhwKFxcXCJodHRwOi8vfGh0dHBzOi8vXFxcIiksIFxcXCJcXFwiKS5zcGxpdChcXFwiL1xcXCIpWzBdO1xcbiAgICBsZXQgaG9zdHMgPSBob3N0LnNwbGl0KFxcXCIuXFxcIik7XFxuICAgIGlmIChob3N0cy5sZW5ndGggPiAyKSB7XFxuICAgICAgICBob3N0ID0gaG9zdHNbaG9zdHMubGVuZ3RoIC0gMl0gKyBcXFwiLlxcXCIgKyBob3N0c1tob3N0cy5sZW5ndGggLSAxXTtcXG4gICAgfVxcbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwibWFnbmV0XFxcIikpIHtcXG4gICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5rip6aao5o+Q56S6XFxcIixcXG4gICAgICAgICAgICBjb250ZW50OiBcXFwi5qOA5rWL5Yiw5paw55qE56OB6ZO+5Zyw5Z2A77yM54K55Ye756Gu5a6a5oyJ6ZKu5Y2z5Y+v5pKt5pS+77yM54K55Ye75Y+W5raI5oyJ6ZKu5Y+v5Lul5aSN5Yi26ZO+5o6lXFxcIixcXG4gICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKChtYWcpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hZztcXG4gICAgICAgICAgICB9LCBpbnB1dCksXFxuICAgICAgICAgICAgY2FuY2VsOiAkLnRvU3RyaW5nKChtYWcpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIG1hZ1xcbiAgICAgICAgICAgIH0sIGlucHV0KVxcbiAgICAgICAgfSk7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfSAgZWxzZSBpZiAoL1xcXFwuKG1wM3xmbGFjfG00YSkkLy50ZXN0KGlucHV0KSkge1xcbiAgICAgICAgbG9nKGlucHV0KTtcXG4gICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUpID0+IHtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnBsYXlWaWRlbyh1cmwpO1xcbiAgICAgICAgfSwgaW5wdXQsIHJ1bGUpO1xcbiAgICB9IGVsc2UgaWYgKCFpbnB1dC5pbmNsdWRlcyhob3N0KSAmJiBpbnB1dC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikpIHtcXG4gICAgICAgIGxvZyhpbnB1dCk7XFxuICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLor6bmg4VcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UveXNmeD93ZWJVcmw9XFxcIitlbmNvZGVVUklDb21wb25lbnQodXJsKStcXFwiJnJ1bGU9XFxcIitydWxlLFxcbiAgICAgICAgICAgIH0pKVxcbiAgICAgICAgfSwgaW5wdXQsIHJ1bGUpO1xcbiAgICB9IGVsc2UgaWYgKCFpbnB1dC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikpIHtcXG4gICAgICAgIGxvZyhpbnB1dCk7XFxuICAgICAgICAvL+iDveWUpOi1t0FQUOeahOeZveWQjeWNlVxcbiAgICAgICAgbGV0IHdoaXRlID0gW1xcbiAgICAgICAgICAgIFxcXCJxa2xpbmtcXFwiLFxcbiAgICAgICAgICAgIFxcXCJiZG5ldGRpc2tcXFwiLFxcbiAgICAgICAgICAgIFxcXCJ4dW5sZWlhcHBcXFwiLFxcbiAgICAgICAgICAgIFxcXCJzbWFydGRyaXZlXFxcIlxcbiAgICAgICAgXTtcXG4gICAgICAgIGxldCBpbldoaXRlID0gd2hpdGUuZmlsdGVyKGl0ID0+IGlucHV0LnN0YXJ0c1dpdGgoaXQpKS5sZW5ndGggPiAwO1xcbiAgICAgICAgaWYgKCFpbldoaXRlKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSkgPT4ge1xcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlblRoaXJkQXBwICYmIGZ5X2JyaWRnZV9hcHAub3BlblRoaXJkQXBwKHVybCk7XFxuICAgICAgICB9LCBpbnB1dCwgcnVsZSk7XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gbG9hZEpzKCkge1xcbiAgICB0cnkge1xcbiAgICAgICAgaWYgKGRvY3VtZW50LnRpdGxlICYmIGRvY3VtZW50LnRpdGxlLmxlbmd0aCkge1xcbiAgICAgICAgICAgIGxldCByID0gJCQkKCkubGF6eVJ1bGUoKHQpID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKHQpO1xcbiAgICAgICAgICAgIH0sIGRvY3VtZW50LnRpdGxlKTtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnBhcnNlTGF6eVJ1bGUocik7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGZ5X2JyaWRnZV9hcHAubG9nKGUudG9TdHJpbmcoKSk7XFxuICAgIH1cXG59XFxuXFxuZC5wdXNoKHtcXG4gICAgdXJsOiB1cmwsXFxuICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICBkZXNjOiBcXFwiMTAwJSYmZmxvYXRcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdXJsSW50ZXJjZXB0b3I6ICQudG9TdHJpbmcoaW50ZXJjZXB0LCBydWxlLCBnZXRIb21lKHVybCksIG9wZW5Nb2RlKSxcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKGxvYWRKcyksXFxuICAgICAgICBjYW5CYWNrOiB0cnVlLFxcbiAgICAgICAganNMb2FkaW5nSW5qZWN0OiB0cnVlLFxcbiAgICAgICAgZmxvYXRWaWRlbzogdHJ1ZVxcbiAgICB9XFxufSk7XFxuXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Li76aG15aSE55CGXCIsXCJwYXRoXCI6XCJNYWluXCIsXCJydWxlXCI6XCJpZiAoZ2V0SXRlbShcXFwiZmlyc3RcXFwiKSA9PSBNWV9SVUxFLnZlcnNpb24pIHtcXG4gICAgJC5yZXF1aXJlKFxcXCJzb3VcXFwiKTtcXG59IGVsc2UgaWYgKE1ZX1BBR0UgPT09IDEpIHtcXG4gICAgbGV0IGQgPSBbXVxcbiAgICBsZXQgdGltZSA9IGdldEl0ZW0oXFxcImZpcnN0XFxcIiwgXFxcIlxcXCIpID8gNiA6IDIwO1xcbiAgICBsZXQgaWQgPSBEYXRlLm5vdygpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ08c3Ryb25nPuS9v+eUqOWJjemhu+efpTwvc3Ryb25nPlxcXCIuYmlnKCksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiMS4g5pys5bCP56iL5bqP5omA5pyJ5Luj56CB5YWo6YOo5byA5rqQ77yM5LiU5pys6KeE5YiZ5Li65a2m5Lmg55uu55qE77yM6K+35LqO5a+85YWlMjTlsI/ml7blhoXliKDpmaTvvIHvvIHvvIE8YnI+Mi4g5pys5bCP56iL5bqPPGI+5a6M5YWo5YWN6LS5PC9iPu+8jOWmguaenOS9oOaYr+S7mOi0uei0reS5sOeahOaBreWWnOS9oOiiq+mql+S6huOAgjxicj7lvZPnhLblpoLmnpzmnInog73lipvmg7PpvJPlirHkvZzogIXnmoTlj6/ku6U8YSBocmVmPSdoaWtlcjovL3BhZ2UvRG9uYXRlLnYjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjJz7mlK/mjIHkuIDkuIs8L2E+KDxzbWFsbD7ngrnlh7vlj6/ov5vlhaXmjZDotaDvvIzlj6/lnKjkuLvpobXoj5zljZXov5vlhaU8L3NtYWxsPinjgII8YnI+My4g5pys5bCP56iL5bqP5piv5Zyo5Y6f54mI44CM5LqR55uY5ZCbLueugOOAjeeahOWfuuehgOi/m+ihjOeahOS6jOasoeS/ruaUue+8jOivt+aUr+aMgeWOn+eJiOOAgjxicj40LiDor7fjgIzno4HlipvlkJsu566A44CN55qE5LqM5qyh5L+u5pS55bCK6YeN5LiA5LiL5Y6f54mI77yM6LCi6LCi44CCPGJyPjxicj48Yj7lvIDlp4vkvb/nlKjmnKzop4TliJnljbPku6PooajpgbXlrojop4TliJnmnaHkvos8L2I+PGJyPuW9k+WJjeeJiOacrO+8mlxcXCIgKyBNWV9SVUxFLnZlcnNpb24sXFxuICAgICAgICBcXFwiY29sX3R5cGVcXFwiOiBcXFwicmljaF90ZXh0XFxcIlxcbiAgICB9LCB7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiB0aW1lICsgXFxcIuenkuWQjue7p+e7rVxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJ0b2FzdDovL+ivt+iupOecn+mYheivu+S7peS4iuWGheWuuVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogaWQgKyBcXFwidGltZXJcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBzZXRSZXN1bHQoZCk7XFxuICAgIHdoaWxlICh0aW1lICE9IDApIHtcXG4gICAgICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAoMTAwMCk7XFxuICAgICAgICB0aW1lIC09IDE7XFxuICAgICAgICB1cGRhdGVJdGVtKGlkICsgXFxcInRpbWVyXFxcIiwge1xcbiAgICAgICAgICAgIHRpdGxlOiB0aW1lICsgXFxcIuenkuWQjue7p+e7rVxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHVwZGF0ZUl0ZW0oaWQgKyBcXFwidGltZXJcXFwiLCB7XFxuICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOaIkeWQjOaEj+S7peS4iuimgeaxguKAneKAnVxcXCIsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHYpID0+IHtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJmaXJzdFxcXCIsIFN0cmluZyh2KSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oSf6LCi5oKo55qE55CG6KejXFxcIjtcXG4gICAgICAgIH0sIE1ZX1JVTEUudmVyc2lvbiksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxuICAgIH0pO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaNkOi1oFwiLFwicGF0aFwiOlwiRG9uYXRlLnZcIixcInJ1bGVcIjpcImpzOlxcbmxldCBkID0gW107XFxuc2V0UGFnZVRpdGxlKFxcXCLmjZDotaAv5pSv5oyBXFxcIik7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLmjZDotaAv5pSv5oyBXFxcIixcXG4gICAgZGVzYzogXFxcIui/meS4quaNkOi1oOS4jeiDveS4uuS9oOW4puadpeeJueadg++8jOS9huaCqOeahOaUr+aMgeaYr+aIkeabtOaWsOWIm+S9nOeahOWKqOWKm+OAglxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIHVybDogXFxcInRvYXN0Oi8v5oSf6LCi5oKo55qE5pSv5oyBXFxcIlxcbn0pO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwicGljXzFfZnVsbFxcXCIsXFxuICAgIHVybDogXFxcImh0dHBzOi8vZ2l0ZWUuY29tL0xveURnSWsvTG95RGdJa19SdWxlL3Jhdy9tYXN0ZXIvNjdkOGYwMTg3ZjAxODZjMS5wbmdcXFwiLFxcbiAgICBwaWNfdXJsOiBcXFwiaHR0cHM6Ly9naXRlZS5jb20vTG95RGdJay9Mb3lEZ0lrX1J1bGUvcmF3L21hc3Rlci82N2Q4ZjAxODdmMDE4NmMxLnBuZ1xcXCJcXG59KTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwi5Zu+54mH5Yqg6L2957yT5oWi6K+356iN562JXFxcIi5zbWFsbCgpLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6KeE5YiZ5paH5Lu2XCIsXCJwYXRoXCI6XCJjb25maWdzXCIsXCJydWxlXCI6XCJjb25zdCBwYXRoID0gXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvTG95RGdJay9jaWxpU2ltcGxlUnVsZXMuanNvblxcXCI7XFxuXFxuXFxuZnVuY3Rpb24gZ2V0SnNvbigpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlYWRGaWxlKHBhdGgpIHx8IFxcXCJbXVxcXCIpO1xcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBkZWxldGVGaWxlKHBhdGgpO1xcbiAgICAgICAgcmV0dXJuIFtdO1xcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIHNhdmVKc29uKGpzb24pIHtcXG4gICAgc2F2ZUZpbGUocGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbikpO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRVc2VmdWxKc29uKCkge1xcbiAgICByZXR1cm4gZ2V0SnNvbigpLmZpbHRlcih2ID0+ICF2LmZvcmJpZGRlbik7XFxufVxcbmZ1bmN0aW9uIGdldEZvcmJpZGRlbkpzb24oKXtcXG4gICAgcmV0dXJuIGdldEpzb24oKS5maWx0ZXIodiA9PiB2LmZvcmJpZGRlbik7XFxufVxcblxcbmlmKCFmaWxlRXhpc3QocGF0aCkmJk1ZX1JVTEUpe1xcbiAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoXFxcInJ1bGVzXFxcIik7XFxuICAgICQuaGlrZXIud2luZG93ID0ge307XFxuICAgIGV2YWwuY2FsbChudWxsLCBmZXRjaCgnaGlrZXI6Ly9hc3NldHMvYmVhdXRpZnkuanMnKSk7XFxuICAgIHJ1bGVzID0gcnVsZXMubWFwKCh2KT0+e1xcbiAgICAgICAgdi5maW5kID0gd2luZG93LmpzX2JlYXV0aWZ5KHYuZmluZC50b1N0cmluZygpLnJlcGxhY2UoL2Z1bmN0aW9uLio/XFxcXChzLio/cGFnZVxcXFwpLio/XFxcXHsvLCBcXFwiXFxcIikucmVwbGFjZSgvKFxcXFx9W1xcXFxzXFxcXFNdLio/KSQvLFxcXCJcXFwiKSk7XFxuICAgICAgICBpZih2LmZpbmRBbGlVcmwpe1xcbiAgICAgICAgICAgIHYuZmluZEFsaVVybCA9IHdpbmRvdy5qc19iZWF1dGlmeSh2LmZpbmRBbGlVcmwudG9TdHJpbmcoKS5yZXBsYWNlKC9mdW5jdGlvbi4qP1xcXFwoaW5wdXRcXFxcKS4qP1xcXFx7LywgXFxcIlxcXCIpLnJlcGxhY2UoLyhcXFxcfVtcXFxcc1xcXFxTXS4qPykkLyxcXFwiXFxcIikpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHY7XFxuICAgIH0pO1xcbiAgICBzYXZlSnNvbihydWxlcyk7XFxuICAgIHRvYXN0KFxcXCLlt7LliJ3lp4vljJZcXFwiKTtcXG59XFxuJC5leHBvcnRzID0ge1xcbiAgICBnZXRKc29uOiBnZXRKc29uLFxcbiAgICBzYXZlSnNvbjogc2F2ZUpzb24sXFxuICAgIGdldFVzZWZ1bEpzb246IGdldFVzZWZ1bEpzb24sXFxuICAgIGdldEZvcmJpZGRlbkpzb246IGdldEZvcmJpZGRlbkpzb24sXFxuICAgIHBhdGg6IHBhdGhcXG59O1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6KeE5YiZ566h55CGXCIsXCJwYXRoXCI6XCJydWxlTWFuYWdlXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnNldFBhZ2VUaXRsZShcXFwi6KeE5YiZ566h55CGXFxcIik7XFxubGV0IGFyciA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKTtcXG5sZXQgbGVuZ3RoID0gYXJyLmxlbmd0aDtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuaWsOWinlxcXCIsXFxuICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9ydWxlRWRpdCNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImljb25fcm91bmRfc21hbGxfNFxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2RvbWFpbl9jb25maWdcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgcGFnZVRpdGxlOiBcXFwi5paw5aKe6KeE5YiZXFxcIlxcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLliIbkuqtcXFwiLFxcbiAgICB1cmw6ICQoXFxcIi0xXFxcIiwgXFxcIui+k+WFpeS9oOimgeWIhuS6q+inhOWImeeahOW6j+WPt1xcXFxuLTHlhajpg6jvvIwtMuW3suWQr+eUqOeahO+8jC0z5bey56aB55So55qE77yM5aSa5Liq55SoJ++8jCfpmpTlvIBcXFwiKS5pbnB1dCgobGVuZ3RoKSA9PiB7XFxuICAgICAgICBsZXQgaW5kZXhjID0gaW5wdXQuc3BsaXQoLyx877yMLyk7XFxuICAgICAgICBsZXQgaW5kZXhzID0gW107XFxuICAgICAgICBsZXQgbW8gPSBwYXJzZUludChpbmRleGNbMF0pO1xcbiAgICAgICAgaWYgKCEoaW5kZXhjLmxlbmd0aCA9PT0gMSAmJiBtbyA8IDAgJiYgbW8gPiAtNCkpIHtcXG4gICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBpbmRleGMpIHtcXG4gICAgICAgICAgICAgICAgbGV0IG51bSA9IHBhcnNlSW50KGl0KTtcXG4gICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihudW0pIHx8IG51bSA+PSBsZW5ndGggfHwgbnVtIDwgMCkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aVsOWtl+S4jeWQiOazlVxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaW5kZXhzLnB1c2gobnVtKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gJChbXFxcIkhJS0VSXFxcIiwgXFxcIlRYVFxcXCJdLmNvbmNhdChnZXRQYXN0ZXMoKSksIDIsIFxcXCLliIbkuqvmlrnlvI9cXFwiKS5zZWxlY3QoKG1vLCBpbmRleHMpID0+IHtcXG4gICAgICAgICAgICBmdW5jdGlvbiB1cChydWxlcykge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZWI2NCA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShydWxlcykpO1xcbiAgICAgICAgICAgICAgICBsZXQgZ2V0UGFzcyA9IChsZW5ndGgsIHJ1bGUsIHR5cGUpID0+IFxcXCLmtbfpmJTop4bnlYzno4HlipvlkJsu566A5pCc57Si5byV5pOO77yM5YWx44CMXFxcIiArIGxlbmd0aCArIFxcXCLjgI3mnaHvvIzlpI3liLbmlbTmnaHlj6Pku6TmiZPlvIDova/ku7blsLHkvJroh6rliqjlr7zlhaUkXFxcIiArIHJ1bGUgKyBcXFwiJFxcXCIgKyB0eXBlICsgXFxcIkBpbXBvcnQ9anM6JC5yZXF1aXJlKCdpbXBvcnQ/cnVsZT0nK1xcXCIgKyBKU09OLnN0cmluZ2lmeShNWV9SVUxFLnRpdGxlKSArIFxcXCIpKGlucHV0KVxcXCI7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRQYXN0ZXMoKS5pbmNsdWRlcyhpbnB1dCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gc2hhcmVQYXN0ZShydWxlYjY0LCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgZ2V0UGFzcyhydWxlcy5sZW5ndGgsIHUsIFxcXCJiXFxcIik7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0xveURnSWsvc2hhcmUv5LqR566A5pCc57Si5byV5pOO6KeE5YiZ44CMXFxcIiArIHJ1bGVzLmxlbmd0aCArIFxcXCLjgI3mnaEuXFxcIiArIChpbnB1dCA9PT0gXFxcIkhJS0VSXFxcIiA/IFxcXCJoaWtlclxcXCIgOiBcXFwidHh0XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGF0aCwgZ2V0UGFzcyhydWxlcy5sZW5ndGgsIHJ1bGViNjQsIFxcXCJhXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJzaGFyZTovL1xcXCIgKyBwYXRoO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBydWxlcztcXG4gICAgICAgICAgICBpZiAobW8gPT09IC0xKSB7XFxuICAgICAgICAgICAgICAgIHJ1bGVzID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0SnNvbigpO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobW8gPT09IC0yKSB7XFxuICAgICAgICAgICAgICAgIHJ1bGVzID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0VXNlZnVsSnNvbigpO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobW8gPT09IC0zKSB7XFxuICAgICAgICAgICAgICAgIHJ1bGVzID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0Rm9yYmlkZGVuSnNvbigpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJ1bGVzID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0SnNvbigpLmZpbHRlcigodiwgaSkgPT4gaW5kZXhzLmluY2x1ZGVzKGkpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcnVsZXMgPSBydWxlcy5tYXAoKHYpID0+IHtcXG4gICAgICAgICAgICAgICAgdi51c2VyID0gdW5kZWZpbmVkO1xcbiAgICAgICAgICAgICAgICB2LmZvcmJpZGRlbiA9IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHVwKHJ1bGVzKTtcXG4gICAgICAgIH0sIG1vLCBpbmRleHMpO1xcblxcbiAgICB9LCBsZW5ndGgpLFxcbiAgICBjb2xfdHlwZTogXFxcImljb25fcm91bmRfc21hbGxfNFxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX3NoYXJlX2dyZWVuXFxcIlxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi6YeN572uXFxcIixcXG4gICAgdXJsOiAkKFxcXCLkvaDnoa7lrprph43nva7vvJ9cXFxcbuivpeaTjeS9nOS8muWIoOmZpOeOsOacieinhOWIme+8jOaBouWkjeiHquW4puinhOWImeOAglxcXCIpLmNvbmZpcm0oKHBhdGgpID0+IHtcXG4gICAgICAgIGRlbGV0ZUZpbGUocGF0aCk7XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICB9LCAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5wYXRoKSxcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uX3JvdW5kX3NtYWxsXzRcXFwiLFxcbiAgICBwaWNfdXJsOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9yZWZyZXNoXFxcIlxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5riF56m6XFxcIixcXG4gICAgdXJsOiAkKFxcXCLkvaDnoa7lrprlhajpg6jliKDpmaTvvJ9cXFxcbuivpeaTjeS9nOS8muWIoOmZpOeOsOacieinhOWImeOAglxcXCIpLmNvbmZpcm0oKHBhdGgpID0+IHtcXG4gICAgICAgIHdyaXRlRmlsZShwYXRoLCBcXFwiW11cXFwiKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgIH0sICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLnBhdGgpLFxcbiAgICBjb2xfdHlwZTogXFxcImljb25fcm91bmRfc21hbGxfNFxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2NvZGVfdmlld1xcXCJcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXCIjMTNCNjFCXFxcIj7ilpAgPC9mb250PjxiPuinhOWImeWIl+ihqDxiPiAoJyArIFN0cmluZyhsZW5ndGgpLmZvbnRjb2xvcihcXFwiI2ZmNjYwMVxcXCIpICsgXFxcIilcXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsXFxufSk7XFxuXFxuZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xcbiAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgIGxldCB1c2VyID0gaXQudXNlciB8fCB7fTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdWycgKyBpICsgJ108Yj4gICcgKyBpdC5uYW1lICsgJzxiPicgKyAoaXQuZm9yYmlkZGVuID8gXFxcIiAj4oCc4oCc56aB55So4oCd4oCdXFxcIi5zbWFsbCgpIDogXFxcIlxcXCIpICsgKGl0LnJlZ2lzdGVyVXJsICYmICEodXNlci5wYXNzd29yZCB8fCB1c2VyLmFjY291bnQgfHwgdXNlci5leHRyYSkgPyBcXFwiICPpnIDopoHnmbvlvZVcXFwiLnNtYWxsKCkgOiBcXFwiXFxcIiksXFxuICAgICAgICB1cmw6ICQoW1xcXCLnvJbovpFcXFwiLCBcXFwi6LSm5Y+3XFxcIiwgXFxcIuWIhuS6q1xcXCIsIFxcXCLnpoHnlKgv5ZCv55SoXFxcIiwgXFxcIuenu+WKqFxcXCIsIFxcXCLnva7pobZcXFwiXSwgMSwgXFxcIuaTjeS9nO+8mlxcXCIgKyBpdC5uYW1lKS5zZWxlY3QoKGluZGV4LCBsZW5ndGgpID0+IHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09IFxcXCLnvJbovpFcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVFZGl0I25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1xcXCI7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXFxcIui0puWPt1xcXCIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcGFzc3dvcmQjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjXFxcIjtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwi5YiG5LqrXFxcIikge1xcbiAgICAgICAgICAgICAgICBsZXQgb3BzID0gZ2V0UGFzdGVzKCk7XFxuICAgICAgICAgICAgICAgIG9wcy51bnNoaWZ0KFxcXCLlrozmlbTlj6Pku6RcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQob3BzLCAyLCBcXFwi5YiG5Lqr5pa55byPXFxcIikuc2VsZWN0KChpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGUgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRKc29uKClbaW5kZXhdO1xcbiAgICAgICAgICAgICAgICAgICAgcnVsZS51c2VyID0gdW5kZWZpbmVkO1xcbiAgICAgICAgICAgICAgICAgICAgcnVsZS5mb3JiaWRkZW4gPSB1bmRlZmluZWQ7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZWI2NCA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShydWxlKSk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgZ2V0UGFzcyA9IChuYW1lLCBydWxlLCB0eXBlKSA9PiBcXFwi5rW36ZiU6KeG55WM77yM44CMXFxcIiArIG5hbWUgKyBcXFwi44CN56OB5Yqb5ZCbLueugOaQnOe0ouW8leaTju+8jOWkjeWItuaVtOadoeWPo+S7pOaJk+W8gOi9r+S7tuWwseS8muiHquWKqOWvvOWFpSRcXFwiICsgcnVsZSArIFxcXCIkXFxcIiArIHR5cGUgKyBcXFwiQGltcG9ydD1qczokLnJlcXVpcmUoJ2ltcG9ydD9ydWxlPScrXFxcIiArIEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUudGl0bGUpICsgXFxcIikoaW5wdXQpXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi5a6M5pW05Y+j5LukXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBnZXRQYXNzKHJ1bGUubmFtZSwgcnVsZWI2NCwgXFxcImFcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBzaGFyZVBhc3RlKHJ1bGViNjQsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgZ2V0UGFzcyhydWxlLm5hbWUsIHUsIFxcXCJiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIGluZGV4KTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwi56e75YqoXFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChpbmRleCArIFxcXCJcXFwiLCBcXFwi6L6T5YWl5L2N572uXFxcIikuaW5wdXQoKGluZGV4LCBsZW5ndGgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXdJbmRleCA9IE51bWJlcihpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG5ld0luZGV4KSB8fCBuZXdJbmRleCA+PSBsZW5ndGgpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5LiN5ZKM6KeE55qE5L2N572uXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlcyA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlID0gcnVsZXMuc3BsaWNlKGluZGV4LCAxKVswXTtcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5zYXZlSnNvbihydWxlcyk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIH0sIGluZGV4LCBsZW5ndGgpO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLnva7pobZcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGxldCBuZXdJbmRleCA9IDA7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlcyA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKTtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGUgPSBydWxlcy5zcGxpY2UoaW5kZXgsIDEpWzBdO1xcbiAgICAgICAgICAgICAgICBydWxlcy5zcGxpY2UobmV3SW5kZXgsIDAsIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5zYXZlSnNvbihydWxlcyk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0SnNvbigpO1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IGFycltpbmRleF07XFxuICAgICAgICAgICAgICAgIHJ1bGUuZm9yYmlkZGVuID0gIXJ1bGUuZm9yYmlkZGVuO1xcbiAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5zYXZlSnNvbihhcnIpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIC8vcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyAocnVsZS5mb3JiaWRkZW4gPyBcXFwi56aB55SoXFxcIiA6IFxcXCLlkK/nlKhcXFwiKSArIHJ1bGUubmFtZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBpLCBsZW5ndGgpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpOiBpLFxcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogaXQubmFtZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6KeE5YiZ57yW6L6RXCIsXCJwYXRoXCI6XCJydWxlRWRpdFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5cXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhck15VmFyKFxcXCJwc19uYW1lXFxcIik7XFxuICAgIGNsZWFyTXlWYXIoXFxcInBzX2ZpbmRcXFwiKTtcXG4gICAgY2xlYXJNeVZhcihcXFwicHNfZmluZEFsaVVybFxcXCIpO1xcbiAgICBjbGVhck15VmFyKFxcXCJwc19wYWdlXFxcIik7XFxuICAgIGNsZWFyTXlWYXIoXFxcInBzX3JlZ2lzdGVyVXJsXFxcIik7XFxuICAgIGNsZWFyTXlWYXIoXFxcInBzX2Jhc2ljVXJsXFxcIik7XFxufSkpO1xcbmxldCB1cmxJbmRleCA9IHBhcnNlSW50KGdldFBhcmFtKFxcXCJpbmRleFxcXCIsIFxcXCJcXFwiKSk7XFxudXJsSW5kZXggPSBOdW1iZXIuaXNOYU4odXJsSW5kZXgpID8gdm9pZCgwKSA6IHVybEluZGV4O1xcbmxldCBpbmRleCA9IHZvaWQoMCkgPT09IHVybEluZGV4ID8gTVlfUEFSQU1TLmkgOiB1cmxJbmRleDtcXG5cXG5sZXQgYXJyID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0SnNvbigpO1xcbmxldCBvYmo7XFxuaWYgKGdldFBhcmFtKFxcXCJpc0ltcG9ydFxcXCIsIFxcXCJcXFwiKSkge1xcbiAgICB0cnkge1xcbiAgICAgICAgb2JqID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL2ZpbGVzL19jYWNoZS9jaWxpU2ltcGxlSW1wb3J0Lmpzb25cXFwiKTtcXG4gICAgICAgIGxldCB0aXAgPSBpbmRleCAhPT0gdm9pZCgwKSA/IFxcXCLmm7TmlrDop4TliJlcXFwiIDogXFxcIuWvvOWFpeinhOWImVxcXCI7XFxuICAgICAgICBzZXRQYWdlVGl0bGUodGlwICsgXFxcIjpcXFwiICsgb2JqLm5hbWUpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuKAmOKAmFxcXCIgKyB0aXAgKyBcXFwi4oCZ4oCZXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBvYmogPSB7fTtcXG4gICAgICAgIGJhY2soKTtcXG4gICAgICAgIHRvYXN0KFxcXCLlr7zlhaXplJnor69cXFwiKTtcXG4gICAgfVxcbn0gZWxzZSBpZiAoaW5kZXggIT09IHZvaWQoMCkpIHtcXG4gICAgb2JqID0gYXJyW2luZGV4XTtcXG4gICAgc2V0UGFnZVRpdGxlKFxcXCLnvJbovpHop4TliJk6XFxcIiArIG9iai5uYW1lKTtcXG4gICAgaWYgKG9iai5sYXN0TW9kaWZ5KSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5LiK5qyh5L+u5pS577yaXFxcIiArICQuZGF0ZUZvcm1hdChvYmoubGFzdE1vZGlmeSwgXFxcInl5eXktTU0tZGTCoEhIOm1tOnNzXFxcIiksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn0gZWxzZSB7XFxuICAgIG9iaiA9IHtcXG4gICAgICAgIHBhZ2U6IHRydWVcXG4gICAgfTtcXG4gICAgc2V0UGFnZVRpdGxlKFxcXCLmlrDlu7rop4TliJlcXFwiKTtcXG59XFxuXFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIGRlc2M6IFxcXCLlkI3lrZco5b+F5aGrKVxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBzX25hbWVcXFwiLCBpbnB1dCk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogb2JqLm5hbWUsXFxuICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlXFxuICAgIH1cXG59KTtcXG5cXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgZGVzYzogXFxcIuaQnOe0ouinhOWImSjlv4XloaspXFxcXG7lhoXnva7lj5jph4/vvJpz5pCc57Si5YWz6ZSu6K+N77yMcGFnZemhteaVsO+8jGJhc2ljVXJs5Z+65pys6ZO+5o6l77yMdXNlcueUqOaIt+i0puWPt+S/oeaBryh1c2VyLmFjY291bnQsdXNlci5wYXNzd29yZClcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgIGhlaWdodDogMyxcXG4gICAgICAgIGhpZ2hsaWdodDogdHJ1ZSxcXG4gICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwicHNfZmluZFxcXCIsIGlucHV0KTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBvYmouZmluZCxcXG4gICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgZGVzYzogXFxcIlVSTOinhOWImSjpgInloaspXFxcXG7lhoXnva7lj5jph4/vvJppbnB1dOmTvuaOpe+8jGJhc2ljVXJs5Z+65pys6ZO+5o6lXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICBoZWlnaHQ6IDMsXFxuICAgICAgICBoaWdobGlnaHQ6IHRydWUsXFxuICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBzX2ZpbmRBbGlVcmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogb2JqLmZpbmRBbGlVcmwsXFxuICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIGRlc2M6IFxcXCLln7rmnKzpk77mjqUo6YCJ5aGrKSDku6PnoIHkuK3nlKhiYXNpY1VybOW8leeUqFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBzX2Jhc2ljVXJsXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBkZWZhdWx0VmFsdWU6IG9iai5iYXNpY1VybCxcXG4gICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgZGVzYzogXFxcIuazqOWGjOWcsOWdgCjpgInloaspXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwicHNfcmVnaXN0ZXJVcmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogb2JqLnJlZ2lzdGVyVXJsLFxcbiAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgfVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5piv5ZCm5Y+v5Lul57+76aG177yaXFxcIiArIG9iai5wYWdlLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFnZSkgPT4ge1xcbiAgICAgICAgbGV0IGlzUGFnZSA9ICEhZ2V0TXlWYXIoXFxcInBzX3BhZ2VcXFwiLCBwYWdlID8gXFxcIjFcXFwiIDogXFxcIlxcXCIpO1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInBzX3BhZ2VcXFwiLCBpc1BhZ2UgPyBcXFwiXFxcIiA6IFxcXCIxXFxcIik7XFxuICAgICAgICB1cGRhdGVJdGVtKFxcXCJydWxlZWRwc19wYWdlXFxcIiwge1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5piv5ZCm5Y+v5Lul57+76aG177yaXFxcIiArICFpc1BhZ2VcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgfSwgb2JqLnBhZ2UpLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IFxcXCJydWxlZWRwc19wYWdlXFxcIlxcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLliKDpmaRcXFwiLFxcbiAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGluZGV4LCB1cmxJbmRleCkgPT4ge1xcbiAgICAgICAgaWYgKGluZGV4ID09PSB2b2lkKDApKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+atpOmhueaXoOazleWIoOmZpFxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodXJsSW5kZXggIT09IHZvaWQoMCkpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5q2j5Zyo5pu05paw6KeE5YiZ77yM5Yig6Zmk6K+35LuO6KeE5YiZ566h55CG6L+b5YWlXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5rip6aao5o+Q56S6XFxcIixcXG4gICAgICAgICAgICBjb250ZW50OiBcXFwi56Gu5a6a6KaB5Yig6Zmk5q2k6KeE5YiZ5ZCX77yf5rOo5oSP5Yig6Zmk5ZCO5peg5rOV5oGi5aSNXFxcIixcXG4gICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKChpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0SnNvbigpO1xcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuc2F2ZUpzb24oYXJyKTtcXG4gICAgICAgICAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIoOmZpOaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgfSwgaW5kZXgpXFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgfSwgaW5kZXgsIHVybEluZGV4KSxcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbn0pO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5L+d5a2YXFxcIixcXG4gICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpbmRleCwgcGFnZSkgPT4ge1xcbiAgICAgICAgbGV0IG5hbWUgPSBnZXRNeVZhcihcXFwicHNfbmFtZVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgIGlmIChuYW1lID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WQjeWtl+W+l+acieS4gOS4quWQp1xcXCJcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBmaW5kID0gZ2V0TXlWYXIoXFxcInBzX2ZpbmRcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICBpZiAoZmluZCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mkJzntKLop4TliJnkuI3og73kuLrnqbpcXFwiXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgYXJyID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0SnNvbigpO1xcbiAgICAgICAgbGV0IG9iajEgPSB7XFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcXG4gICAgICAgICAgICBmaW5kOiBmaW5kLFxcbiAgICAgICAgICAgIGJhc2ljVXJsOiBnZXRNeVZhcihcXFwicHNfYmFzaWNVcmxcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgZmluZEFsaVVybDogZ2V0TXlWYXIoXFxcInBzX2ZpbmRBbGlVcmxcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgcGFnZTogISFnZXRNeVZhcihcXFwicHNfcGFnZVxcXCIsIHBhZ2UgPyBcXFwiMVxcXCIgOiBcXFwiXFxcIiksXFxuICAgICAgICAgICAgcmVnaXN0ZXJVcmw6IGdldE15VmFyKFxcXCJwc19yZWdpc3RlclVybFxcXCIsIFxcXCJcXFwiKSB8fCB1bmRlZmluZWQsXFxuICAgICAgICAgICAgbGFzdE1vZGlmeTogRGF0ZS5ub3coKVxcbiAgICAgICAgfTtcXG4gICAgICAgIGlmIChpbmRleCA9PT0gdm9pZCgwKSkge1xcbiAgICAgICAgICAgIGlmIChhcnIuc29tZSh2ID0+IHYubmFtZSA9PT0gbmFtZSkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+WtmOWcqOivpeinhOWImVxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGFyci51bnNoaWZ0KG9iajEpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBsZXQgbmFtZXkgPSBhcnJbaW5kZXhdLm5hbWU7XFxuICAgICAgICAgICAgaWYgKG5hbWUgIT09IG5hbWV5KSB7XFxuICAgICAgICAgICAgICAgIGlmIChhcnIuc29tZSh2ID0+IHYubmFtZSA9PT0gbmFtZSkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/lrZjlnKjor6Xop4TliJlcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIG9iajEgPSBPYmplY3QuYXNzaWduKGFycltpbmRleF0sIG9iajEpO1xcbiAgICAgICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEsIG9iajEpO1xcbiAgICAgICAgfVxcbiAgICAgICAgJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuc2F2ZUpzb24oYXJyKTtcXG4gICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+d5a2Y5oiQ5YqfXFxcIjtcXG4gICAgfSwgaW5kZXgsIG9iai5wYWdlKSxcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbn0pO1xcblxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuinhOWImei0puWPt1wiLFwicGF0aFwiOlwicGFzc3dvcmRcIixcInJ1bGVcIjpcImpzOlxcbihmdW5jdGlvbigpIHtcXG4gICAgdmFyIGQgPSBbXTtcXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInBzX2FjY291bnRcXFwiKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInBzX3Bhc3N3b3JkXFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJwc19leHRyYVxcXCIpO1xcbiAgICB9KSk7XFxuICAgIGxldCBpbmRleCA9IE1ZX1BBUkFNUy5pO1xcbiAgICBsZXQgYXJyID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0SnNvbigpO1xcbiAgICBsZXQgb2JqID0gYXJyW2luZGV4XSB8fCB7fTtcXG4gICAgc2V0UGFnZVRpdGxlKFxcXCLorr7nva7otKblj7c6XFxcIiArIG9iai5uYW1lKTtcXG4gICAgbGV0IHJlZ2lzdGVyVXJsID0gb2JqLnJlZ2lzdGVyVXJsO1xcbiAgICBpZiAocmVnaXN0ZXJVcmwpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWJjeW+gOazqOWGjFxcXCIsXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1xcXCIpLnJ1bGUoKHJlZ2lzdGVyVXJsKT0+e1xcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoW3tcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOlxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6cmVnaXN0ZXJVcmwsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOlxcXCJmbG9hdCYmMTAwJVxcXCJcXG4gICAgICAgICAgICAgICAgfV0pO1xcbiAgICAgICAgICAgIH0sIHJlZ2lzdGVyVXJsKSxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogXFxcIuazqOWGjOi0puWPtzpcXFwiICsgb2JqLm5hbWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBvYmogPSBvYmoudXNlciB8fCB7fTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIueUqOaIt+WQjVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBzX2FjY291bnRcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBvYmouYWNjb3VudCxcXG4gICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi5a+G56CBXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgdHlwZTogXFxcInBhc3N3b3JkXFxcIixcXG4gICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwc19wYXNzd29yZFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IG9iai5wYXNzd29yZCxcXG4gICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIumineWkllxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwicHNfZXh0cmFcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBvYmouZXh0cmEsXFxuICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICBoZWlnaHQ6IC0xXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLkv53lrZhcXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpbmRleCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0gZ2V0TXlWYXIoXFxcInBzX2FjY291bnRcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgbGV0IHBhc3N3b3JkID0gZ2V0TXlWYXIoXFxcInBzX3Bhc3N3b3JkXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIGxldCBleHRyYSA9IGdldE15VmFyKFxcXCJwc19leHRyYVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAvKmlmICghKGFjY291bnR8fHBhc3N3b3JkfHxleHRyYSkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4jeiDveWFqOmDqOS4uuepulxcXCI7XFxuICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgbGV0IGFyciA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKTtcXG4gICAgICAgICAgICBsZXQgaXRlbSA9IGFycltpbmRleF07XFxuICAgICAgICAgICAgaXRlbS51c2VyID0ge307XFxuICAgICAgICAgICAgaXRlbS51c2VyLmFjY291bnQgPSBhY2NvdW50XFxuICAgICAgICAgICAgaXRlbS51c2VyLnBhc3N3b3JkID0gcGFzc3dvcmQ7XFxuICAgICAgICAgICAgaXRlbS51c2VyLmV4dHJhID0gZXh0cmE7XFxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSB2b2lkKDApKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9pZOmUmeivr1xcXCI7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpbmRleCwgMSwgaXRlbSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLnNhdmVKc29uKGFycik7XFxuICAgICAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+d5a2Y5oiQ5YqfXFxcIjtcXG4gICAgICAgIH0sIGluZGV4KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIH0pO1xcbiAgICBzZXRSZXN1bHQoZCk7XFxufSkoKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6KeE5YiZ5a+85YWlXCIsXCJwYXRoXCI6XCJpbXBvcnRcIixcInJ1bGVcIjpcImpzOlxcbmZ1bmN0aW9uIHNhdmVDYWNoZShqc29uKSB7XFxuICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9fY2FjaGUvY2lsaVNpbXBsZUltcG9ydC5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkoanNvbikpO1xcbn1cXG4kLmV4cG9ydHMgPSBmdW5jdGlvbihwYXNzKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgW18sIHJ1bGUsIHR5cGVdID0gcGFzcy5zcGxpdChcXFwiJFxcXCIpO1xcbiAgICAgICAgaWYgKHR5cGUgPT09IFxcXCJiXFxcIikge1xcbiAgICAgICAgICAgIHJ1bGUgPSBwYXJzZVBhc3RlKHJ1bGUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShiYXNlNjREZWNvZGUocnVsZSkpO1xcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJ1bGVzKSkge1xcbiAgICAgICAgICAgIHJ1bGVzID0gW3J1bGVzXTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJ1bGVzLnJldmVyc2UoKTtcXG4gICAgICAgIE1ZX1VSTCA9IG1vZHVsZS5pZDtcXG4gICAgICAgIGxldCBydWxlVGl0bGUgPSBnZXRQYXJhbShcXFwicnVsZVxcXCIpO1xcbiAgICAgICAgbGV0IGFyciA9ICQucmVxdWlyZShcXFwiY29uZmlncz9ydWxlPVxcXCIgKyBydWxlVGl0bGUpLmdldEpzb24oKTtcXG4gICAgICAgIGxldCBuZXdJID0gMDtcXG4gICAgICAgIGZvciAobGV0IHJ1bGUgb2YgcnVsZXMpIHtcXG4gICAgICAgICAgICBsZXQgaW5kZXggPSBhcnIuZmluZEluZGV4KHYgPT4gdi5uYW1lID09PSBydWxlLm5hbWUpO1xcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XFxuICAgICAgICAgICAgICAgIHJ1bGUgPSBPYmplY3QuYXNzaWduKGFycltpbmRleF0sIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGVzLmxlbmd0aCA9PT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUNhY2hlKHJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcnVsZUVkaXQjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP2lzSW1wb3J0PXRydWUmaW5kZXg9XFxcIiArIGluZGV4ICsgXFxcIiZydWxlPVxcXCIgKyBydWxlVGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAvL3RvYXN0KFxcXCLlt7Lmm7TmlrDop4TliJnvvJpcXFwiICsgcnVsZS5uYW1lKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhcXFwi5bey5pu05paw6KeE5YiZ77yaXFxcIiArIHJ1bGUubmFtZSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIG5ld0krKztcXG4gICAgICAgICAgICAgICAgYXJyLnVuc2hpZnQocnVsZSk7XFxuICAgICAgICAgICAgICAgIGlmIChydWxlcy5sZW5ndGggPT09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHNhdmVDYWNoZShydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVFZGl0I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9pc0ltcG9ydD10cnVlJnJ1bGU9XFxcIiArIHJ1bGVUaXRsZTtcXG4gICAgICAgICAgICAgICAgICAgIC8vdG9hc3QoXFxcIuW3suWvvOWFpeinhOWIme+8mlxcXCIgKyBydWxlLm5hbWUpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCLlt7Llr7zlhaXop4TliJnvvJpcXFwiICsgcnVsZS5uYW1lKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHJ1bGVzLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICAkLnJlcXVpcmUoXFxcImNvbmZpZ3M/cnVsZT1cXFwiICsgcnVsZVRpdGxlKS5zYXZlSnNvbihhcnIpO1xcbiAgICAgICAgICAgIHRvYXN0KFxcXCLmlrDlop7vvJpcXFwiICsgbmV3SSArIFxcXCIg6KaG55uW5pu05paw77yaXFxcIiArIChydWxlcy5sZW5ndGggLSBuZXdJKSk7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgdG9hc3QoXFxcIuWvvOWFpeWksei0pVxcXCIpO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6KeE5YiZ5YiX6KGoXCIsXCJwYXRoXCI6XCJydWxlc1wiLFwicnVsZVwiOlwianM6XFxuJC5leHBvcnRzID0gW3tcXG4gICAgICAgIG5hbWU6IFxcXCJCVFNPV1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2J0c293Lm1vdG9yY3ljbGVzXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2gvXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCIvcGFnZS9cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCIuZGF0YS1saXN0JiYucm93Om5vdCguaGlkZGVuLXhzKVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgXFxuICAgICAgICAgICAgIHZhciB1cmxsID0gcGRmaChhcnJbaV0sIFxcXCJhJiZocmVmXFxcIik7ICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmdGl0bGVcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIi5zaXplLWRhdGUmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmxsLnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKT91cmxsOiBcXFwiaHR0cHM6XFxcIiArIHVybGwsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgICAgICBmaW5kQWxpVXJsKGlucHV0KSB7XFxuICAgICAgICAgICB2YXIgaHRtbCA9IHBkZmgocmVxdWVzdChpbnB1dCwge30pLCAnI21hZ25ldE9wZW4mJmEmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwiQlTlkIPliptcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly8yMjMuc29razIzLmJ1enpcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NlYXJjaC9cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIi9wYWdlLVxcXCIgKyBwYWdlICsgXFxcIi5odG1sXFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCIubGlzdC12aWV3JiYuaXRlbTpub3QoOm1hdGNoZXMo5Zyo57q/5pKt5pS+KSlcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcImg0LS0ubGFiZWwmJlRleHRcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcInAmJlRleHRcXFwiKS5tYXRjaCgvKOaWh+S7tuWkp+Wwjy4qPynmlofku7bmlbDph48vKVsxXS5zbGljZSgwLC05KSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTsgICAgICAgICBcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQpLCAnLmxpc3QtdW5zdHlsZWQmJmEmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwi56OB5pCcLmNvbVxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL+ejgeaQnC5jb21cXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NlYXJjaC5waHA/a2V5PVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiJnA9XFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYuc3Nib3hcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcImEmJlRleHRcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIi5zYmFyJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0LCB7fSksICdzcGFuJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgbmFtZTogXFxcIuejgeWKm+aQnOe0olxcXCIsXFxuICAgICAgICBwYWdlOiBmYWxzZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9jaWxpc291c3VvLmNvbVxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoP3E9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCIubGlzdCYmLml0ZW1cXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcIi5maWxlbmFtZSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLnNpemUmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQsIHt9KSwgJ2JvZHkmJi5tYWduZXQtYm94JiZpbnB1dCYmdmFsdWUnKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwi5Y+j6KKL56OB5YqbXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8va2QuY2xrZC54eXpcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NlYXJjaC9cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIi9cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJ0Ym9keSYmdHJcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCJUZXh0XFxcIikubWF0Y2goL1xcXFxkK1xcXFwtXFxcXGQrXFxcXC1cXFxcZCsuKi8pWzBdLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkZmgoYXJyW2ldLCBcXFwiYSwxJiZocmVmXFxcIiksICAgICAgICBcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgfSx7XFxuICAgICAgICAvL+awuOS5heWcsOWdgO+8mmh0dHA6Ly9kZGNsLm1lL1xcbiAgICAgICAgbmFtZTogXFxcIua7tOa7tOejgeWKm1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2EycmI0NThjZXg3OWltc3cueHl6XFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2gvXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCJfY3RpbWVfXFxcIiArIHBhZ2UgKyBcXFwiLmh0bWxcXFwiO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJi5wYW5lbFxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwidGJvZHkmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQpLCBcXFwiLmRvd25idXR0b24mJmEmJmhyZWZcXFwiKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICAvL+awuOS5heWcsOWdgO+8mmh0dHA6Ly9qajkxNS50b3AvXFxuICAgICAgICBuYW1lOiBcXFwi6IiF6IiF56OB5YqbXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHA6Ly9qajM0ODgudG9wXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2g/c29ydD1yZWxlJndvcmQ9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCImcGFnZT1cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYubGlzdC1ncm91cC1pdGVtXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIuYWxpZ24tc2VsZi1jZW50ZXImJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTsgICAgICAgICBcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQpLCAnLmJ0LWJveCYmYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgICAgfVxcbiAgICB9LHtcXG4gICAgICAgIC8v5rC45LmF5Zyw5Z2A77yaaHR0cHM6Ly9zb2Zhbi5jbHViL1xcbiAgICAgICAgbmFtZTogXFxcIuaQnOeVqlxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2Nkbi5zb2Zhbi5vbmU6NjU1MzNcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3M/d29yZD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIiZwYWdlPVxcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSx7XFxuICAgICAgICAgICAgaGVhZGVyczp7XFxuICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgUmVmZXJlcjogXFxcImh0dHBzOi8vY2RuLnNvZmFuLm9uZS9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJi5saXN0LXVuc3R5bGVkXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIucmVzdWx0LXJlc291cmNlLW1ldGEtaW5mby0tLmNvbW1vbi1saW5rJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0LHtcXG4gICAgICAgICAgICBoZWFkZXJzOnsgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgUmVmZXJlcjogXFxcImh0dHBzOi8vY2RuLnNvZmFuLm9uZS9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgfSksICcjbWFnbmV0LWxpbmsmJmEmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICAvL+awuOS5heWcsOWdgO+8mnpob25nemliYS5jYyAgc2VlZDgub3JnXFxuICAgICAgICBuYW1lOiBcXFwi56eN5a2Q5ZCnXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHA6Ly96emIwMC50b3BcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NlYXJjaD93ZD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIiZzb3J0PXJlbCZwYWdlPVxcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgIGxldCBodGwgPSBwZGZoKHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpLFxcXCJzY3JpcHQmJkh0bWxcXFwiKS5yZXBsYWNlKC9kb2N1bWVudC53cml0ZVxcXFwoKC4qPylcXFxcKVxcXFw7LyxcXFwiJDFcXFwiKS5yZXBsYWNlKFxcXCJ3aW5kb3dcXFwiLFxcXCJ3aW5kb3cwXFxcIik7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSBldmFsKGh0bClcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiLm1lZGlhLWxpc3QmJi5tZWRpYS1ib2R5XFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIuc2VhcmNoLWluZm8mJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgIGxldCBodGwgPSBwZGZoKHJlcXVlc3QoaW5wdXQpLCBcXFwic2NyaXB0JiZIdG1sXFxcIikucmVwbGFjZSgvZG9jdW1lbnQud3JpdGVcXFxcKCguKj8pXFxcXClcXFxcOy8sIFxcXCIkMVxcXCIpLnJlcGxhY2UoXFxcIndpbmRvd1xcXCIsIFxcXCJ3aW5kb3cwXFxcIik7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSBwZGZoKGV2YWwoaHRsKSwgXFxcIi5idC1vcHQmJmEmJmhyZWZcXFwiKTtcXG4gICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwi6Zuo6Iqx6ZiBXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vd3d3Lml5dWh1YWdlLm9ubGluZVxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoL1xcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiLVxcXCIgKyBwYWdlICsgXFxcIi5odG1sXFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCIjY29udGVudCYmLnNlYXJjaC1pdGVtXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIuaXRlbS1iYXImJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTsgICAgICAgICBcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQpLCAnI2NvbnRlbnQmJmlucHV0JiZ2YWx1ZScpO1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgICAgfVxcbiAgICB9LHtcXG4gICAgICAgIC8v5rC45LmF5Zyw5Z2A77yaaHR0cHM6Ly93d3cuemhhb2NpbGkueHl6L1xcbiAgICAgICAgbmFtZTogXFxcIuaJvuejgeWKm1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovLzEwMWJ0c293LnZpcC9cXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwicy5waHA/cT1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpO1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBKU09OLnBhcnNlKHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkse29ubHlIZWFkZXJzOnRydWV9KSkudXJsO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwucmVwbGFjZSgnLmh0bWwnLCdfJytwYWdlKycuaHRtbCcpKVxcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJ0Ym9keSYmdHI6aGFzKGFbdGl0bGVdKVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgXFxuICAgICAgICAgICAgIHZhciB1cmxsID0gcGRmaChhcnJbaV0sIFxcXCJhJiZocmVmXFxcIik7ICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmdGl0bGVcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIlRleHRcXFwiKS5tYXRjaCgvXFxcXGQrKD86XFxcXC5cXFxcZCspPyg/OlxcXFxzKyk/W2dta2JdKy4qPyg/OlxcXFwtXFxcXGQrKS9pKVswXSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmxsLnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKT91cmxsOiBcXFwiaHR0cHM6XFxcIiArIHVybGwsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgICAgICBmaW5kQWxpVXJsKGlucHV0KSB7XFxuICAgICAgICAgICBsZXQgaHRtbCA9IHBkZmgoZmV0Y2goaW5wdXQpLFxcXCIjaW5wdXQtbWFnbmV0JiZ2YWx1ZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgLy/msLjkuYXlnLDlnYDvvJpodHRwczovL+ejgeWKm+aQnC54eXovIGh0dHBzOi8v56OB5Yqb5pCcLmNvbS8gICBodHRwczovL2Nsc2Nscy50b3AvXFxuICAgICAgICBuYW1lOiBcXFwi56OB5Yqb5pCcXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vY2xzMDcxLmJ1enpcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NlYXJjaC1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIi0wLTAtXFxcIiArIHBhZ2UgKyBcXFwiLmh0bWxcXFwiO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJi5zc2JveFxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiLnRpdGxlJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIuc2JhciYmVGV4dFxcXCIpLm1hdGNoKC8o5re75Yqg5pe26Ze0Lio/KeacgOi/kS8pWzFdLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkZmgoYXJyW2ldLCBcXFwiLnNiYXImJmEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwi56OB5Yqb54mHXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vbS5idGFwcC5jY1xcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc28ucGhwP3BhZ2U9XFxcIiArIHBhZ2UgKyBcXFwiJndvcmQ9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJ0Ym9keSYmLmRlZmF1bHQ6aGFzKGFbaHJlZl49L10pXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCJUZXh0XFxcIikubWF0Y2goL1xcXFxkKyg/OlxcXFwuXFxcXGQrKT8oPzpcXFxccyspP1tnbWtiXSsuKj8oPzpcXFxcLVxcXFxkK1xcXFxzKS9pKVswXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQsIHt9KSwgJyNtYWduZXQmJnRpdGxlJyk7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAvL+awuOS5heWcsOWdgO+8mmh0dHBzOi8vY2lsaWR1by5vcmcvXFxuICAgICAgICBuYW1lOiBcXFwi56OB5Yqb5aSaXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vZG9jLmh0bWNkbi5jb206Mzk5ODhcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NlYXJjaD93b3JkPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiJnNvcnQ9JnBhZ2U9XFxcIiArcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkse1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVyOiBcXFwiaHR0cHM6Ly9kb2MuaHRtY2RuLmNvbTozOTk4OFxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYuc3Nib3g6aGFzKGEpXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJoMyYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiVGV4dFxcXCIpLm1hdGNoKC/mt7vliqDml7bpl7QuKi8pWzBdLnNwbGl0KFxcXCLmlofku7bmlbBcXFwiKVswXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZGZoKGFycltpXSwgXFxcImE6bWF0Y2hlcyjno4Hlipvpk77mjqUpJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICAvL+awuOS5heWcsOWdgO+8mmh0dHBzOi8vaGFpdHV0dS52aXAvXFxuICAgICAgICBuYW1lOiBcXFwi56OB5Yqb5rW3XFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vYzBuNGhqaHEudG9wXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2gtXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCItMC0wLVxcXCIgKyBwYWdlICsgXFxcIi5odG1sXFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCIuc2VhcmNoX2xpc3QmJmRsXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIuaW5mbyYmVGV4dFxcXCIpLm1hdGNoKC8o5pS25b2V5pe26Ze0Lio/KeejgeWKmy8pWzFdLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkZmgoYXJyW2ldLCBcXFwiLmluZm8mJmEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwi56OB5Yqb6YW3XFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcImh0dHBzOi8vY2lsaWt1Lm5ldC90b1NlYXJjaFxcXCI7XFxuICAgICAgICAgICAgbGV0IGpzb24gPSBwb3N0KHVybCwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW46IFxcXCJodHRwczovL2NpbGlrdS5uZXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgUmVmZXJlcjogXFxcImh0dHBzOi8vY2lsaWt1Lm5ldC9cXFwiLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwia2V5d29yZFxcXCI6IHMsXFxuICAgICAgICAgICAgICAgICAgICBcXFwicGFnZVxcXCI6IHBhZ2UtMSxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJzaXplXFxcIjogMTVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGpzb24pO1xcbiAgICAgICAgICAgIGxldCBsaXN0ID0ganNvbi5kYXRhLmNvbnRlbnQ7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XFxuICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPT09IDApIHJldHVybiAnMCBCeXRlcyc7XFxuICAgICAgICAgICAgICAgICAgdmFyIHVuaXRzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQicsICdUQiddO1xcbiAgICAgICAgICAgICAgICAgIHZhciBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzaXplKSAvIE1hdGgubG9nKDEwMjQpKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYCR7KHNpemUgLyBNYXRoLnBvdygxMDI0LCBpKSkudG9GaXhlZCgyKX0gJHt1bml0c1tpXX1gO1xcbn1cXG4gICAgICAgICAgIGZvciAobGV0IGl0IG9mIGxpc3QpIHtcXG4gICAgIHZhciBkYXRlID0gbmV3IERhdGUoaXQudGltZXN0YW1wKTtcXG4gICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xcbiAgICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTtcXG4gICAgIHZhciBkYXkgPSBkYXRlLmdldERhdGUoKTtcXG4gICAgIHZhciBmb3JtYXR0ZWREYXRlID0gYCR7eWVhcn0tJHttb250aCA8IDEwID8gJzAnICsgbW9udGggOiBtb250aH0tJHtkYXkgPCAxMCA/ICcwJyArIGRheSA6IGRheX1gO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0Lm5hbWUuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcIm1hZ25ldDo/eHQ9dXJuOmJ0aWg6XFxcIiArIGl0LmJ0aWgsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5paH5Lu25aSn5bCP77yaXFxcIiArIGZvcm1hdEZpbGVTaXplKGl0LnNpemUpICsgXFxcIlxcXFx0XFxcXHTmlLblvZXml7bpl7TvvJpcXFwiICsgZm9ybWF0dGVkRGF0ZSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICAvL+awuOS5heWcsOWdgO+8mmh0dHBzOi8vYnRmb3gub25lL1xcbiAgICAgICAgbmFtZTogXFxcIuejgeWKm+eLkFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2NhY2hlLmZveHMudG9wXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2g/d29yZD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIiZwYWdlPVxcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSx7XFxuICAgICAgICAgICAgaGVhZGVyczp7XFxuICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgUmVmZXJlcjogXFxcImh0dHBzOi8vY2FjaGUuZm94cy50b3BcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJi5zZWFyY2gtYm94XFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIubGF5dWktc2hvdyYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICB1cmw6IGJhc2ljVXJsICsgcGRmaChhcnJbaV0sIFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgICAgICBmaW5kQWxpVXJsKGlucHV0KSB7XFxuICAgICAgICAgICB2YXIgaHRtbCA9IHBkZmgocmVxdWVzdChpbnB1dCx7XFxuICAgICAgICAgICAgaGVhZGVyczp7ICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgIFJlZmVyZXI6IFxcXCJodHRwczovL2NhY2hlLmZveHMudG9wXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgIH0pLCAnI2xpbmstdXJsJiZhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgLy/msLjkuYXlnLDlnYDvvJpodHRwczovL2NsZ291LmN5b3UvIGh0dHBzOi8v6a2U5rOV54yr5ZKqLmxvbC9cXG4gICAgICAgIG5hbWU6IFxcXCLno4Hlipvni5fnjKtcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9jbGcxNjIuYnV6elxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoLVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiLTAtMC1cXFwiICsgcGFnZSArIFxcXCIuaHRtbFxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiYm9keSYmLnNzYm94XFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCIudGl0bGUmJlRleHRcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIi5zYmFyJiZUZXh0XFxcIikubWF0Y2goLyjmt7vliqDml7bpl7QuKj8p5pyA6L+RLylbMV0sXFxuICAgICAgICAgICAgICAgIHVybDogcGRmaChhcnJbaV0sIFxcXCIuc2JhciYmYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICB9LHtcXG4gICAgICAgIC8v5Y+R5biD5Zyw5Z2A77yaaHR0cDovL2ZiLmNpbGlnb3VmYWJ1eWUxLnh5ejoxMjM0L1xcbiAgICAgICAgbmFtZTogXFxcIuejgeWKm+eMq+eLl1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcblxcdCAgICAgICAgICAgdmFyIHdvcmQxMTE9IHNcXHJcXG5cXHQgICAgICAgICAgIHZhciBlbmNvZGViZWZvcmUgPSBiYXNlNjRFbmNvZGUod29yZDExMSk7IFxcclxcbiAgICAgICAgICAgIFxcdGVuY29kZWJlZm9yZT0gJ1ZqZHd3VzI5JytlbmNvZGViZWZvcmUrJ05qZHd3VzI0JzsgXFxyXFxuXFx0XFx0ICAgICAgICAgIHZhciBlbmNvZGViZWZvcmUxMTExID1lbmNvZGViZWZvcmUucmVwbGFjZSgvXFxcXCsvZywgXFxcImpHWVhXZ3gxM1xcXCIpOyBcXHJcXG4gICAgICAgICAgICBtZDVwd2QgPSBlbmNvZGViZWZvcmUxMTExO1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2NsbTEuY2xtYXBwMS54eXpcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL2NsbGoucGhwP25hbWU9XFxcIiArIG1kNXB3ZCArIFxcXCImc29ydD0mcGFnZT1cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCIjU2VhcmNoX2xpc3Rfd3JhcHBlciYmbGk6aGFzKC5TZWFyY2hfbGlzdF9pbmZvKVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLlNlYXJjaF9saXN0X2luZm8mJlRleHRcXFwiKS5tYXRjaCgvKOWkp+Wwjy4qPynng63luqYvKVsxXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9ICAgICAgICAgICAgXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQpLCAnI0luZm9ybWF0aW9uX2NvcHlfdGV4dCYmdmFsdWUnKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwi56OB5Yqb6JyY6JubXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHA6Ly93d3cuYnRtb3ZpLnZpblxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc28vXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCJfcmVsX1xcXCIgKyBwYWdlICsgXFxcIi5odG1sXFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYuc2VhcmNoLWl0ZW1cXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcImEmJlRleHRcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIi5pdGVtLWJhciYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICB1cmw6IGJhc2ljVXJsICsgcGRmaChhcnJbaV0sIFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pOyAgICAgICAgIFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgICAgICBmaW5kQWxpVXJsKGlucHV0KSB7XFxuICAgICAgICAgICB2YXIgaHRtbCA9IHBkZmgocmVxdWVzdChpbnB1dCksICcjbV9saW5rJiZ2YWx1ZScpO1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgICAgfVxcbiAgICB9LHtcXG4gICAgICAgIG5hbWU6IFxcXCLml6DmnoHno4Hpk75cXFwiLFxcbiAgICAgICAgcGFnZTogZmFsc2UsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vMGNpbGkudG9wXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2g/cT1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcInRhYmxlJiZ0clxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwicCYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiVGV4dFxcXCIpLm1hdGNoKC9cXFxcZCsoXFxcXC4/XFxcXGQrKT9bZ21rYl0rL2kpWzBdLFxcbiAgICAgICAgICAgICAgICB1cmw6IGJhc2ljVXJsICsgcGRmaChhcnJbaV0sIFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgICAgICBmaW5kQWxpVXJsKGlucHV0KSB7XFxuICAgICAgICAgICB2YXIgaHRtbCA9IHBkZmgocmVxdWVzdChpbnB1dCksICcubWFnbmV0LWJveCYmaW5wdXQmJnZhbHVlJyk7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgbmFtZTogXFxcIlUzQzNcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9hLnUzYzMubGlmZVxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvP3A9XFxcIiArIHBhZ2UgKyBcXFwiJnNlYXJjaDI9ZWVsamEzbGZlYSZzZWFyY2g9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJ0Ym9keSYmLmRlZmF1bHRcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcImEsMSYmdGl0bGVcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIlRleHRcXFwiKS5tYXRjaCgvKFxcXFxkKyg/OlxcXFwuXFxcXGQrKT9bZ21rYl0rLio/Keaal+e9kS9pKVsxXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZGZoKGFycltpXSwgXFxcImEsMyYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICB9LHtcXG4gICAgICAgIG5hbWU6IFxcXCJVOUE5XFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vdTlhOS5vbmVcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiLz90eXBlPTImc2VhcmNoPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiJnA9XFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwidGFibGUmJi5kZWZhdWx0XFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZ0aXRsZVxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiVGV4dFxcXCIpLm1hdGNoKC9cXFxcZCsoXFxcXC4/XFxcXGQrKT9cXFxcc1tnbWtiXSsuKi9pKVswXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZGZoKGFycltpXSwgXFxcImEsMiYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICB9LHtcXG4gICAgICAgIG5hbWU6IFxcXCJUb3JyZW50IEtpdHR5XFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vY24udG9ycmVudGtpdHR5Lmlua1xcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoL1xcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiL1xcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIiNhcmNoaXZlUmVzdWx0JiZ0cjpoYXMoYSlcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcIlRleHRcXFwiKS5tYXRjaCgvKC4qPylcXFxcZCsoPzpcXFxcLlxcXFxkKyk/XFxcXHMrP1tnbWtiXSsvaSlbMV0uc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCJUZXh0XFxcIikubWF0Y2goLyhcXFxcZCsoPzpcXFxcLlxcXFxkKyk/XFxcXHMrP1tnbWtiXSsuKj8p6K+m5oOFL2kpWzFdLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkZmgoYXJyW2ldLCBcXFwiYSwxJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgIH1cXG5dO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi55Wq5Y+35Yy56YWNXCIsXCJwYXRoXCI6XCJjb2RldGVzdFwiLFwicnVsZVwiOlwianM6XFxubGV0IG1hdGNoUmVnID0gL1thLXpBLVowLTldKyhcXFxcLXxcXFxcX3xcXFxccylcXFxcZCsvO1xcbmxldCBtYXRjaFJlZ0cgPSAvW2EtekEtWjAtOV0rKFxcXFwtfFxcXFxffFxcXFxzKVxcXFxkKy9nO1xcbmxldCB0ZXN0UmVnID0gL1xcXFwtfFxcXFxffFxcXFxzLztcXG4kLmV4cG9ydHMgPSB7XFxuICAgIG1hdGNoQ29kZSh0ZXh0LCBpc0cpIHtcXG4gICAgICAgIGlmIChpc0cpIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gdGV4dC5tYXRjaChtYXRjaFJlZ0cpO1xcbiAgICAgICAgICAgIGlmICh1cmwpIHJldHVybiB1cmw7XFxuICAgICAgICAgICAgZWxzZSByZXR1cm4gW107XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSB0ZXh0Lm1hdGNoKG1hdGNoUmVnKTtcXG4gICAgICAgICAgICByZXR1cm4gdXJsID0gdXJsICYmIHVybFswXSB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgdGVzdCh0ZXh0KXtcXG4gICAgICAgIHJldHVybiB0ZXN0UmVnLnRlc3QodGV4dCk7XFxuICAgIH1cXG59XFxuXCJ9XSIsImljb24iOiJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUlBQUFBQ0FDQVlBQUFERFBtSExBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBVlFFbEVRVlI0bk8yZEMxeFRWNTdIcmRWTzE5ckg3azdiYlQrem4vYXorNWx4dDkwSmtBUklBRTBnRWQ4b0kzbndFRzFWSkFGbHRBOC8yNTJkT3Uzc2pHMW5aOGUxenRiV2lnUWZVMThkVVNzQzhsRFJBZ1o1aGZBVUJBd2h2QVFNK0lLNzUwU2lOemMzeWIzSnZaZDdiZTdIL3dmSTQzZitPZC9mUGZlY2M4K0owK1J5NlZNZ1pvS1k1czBCM3pmNS9xZFE0ZGZqaWg2bmsvZnIrYTdINmVUOWVyVHBNVnFZWDQ5ZGVvd1c1dGRqbHg2amhmbjEyS1hIYUdGK1BYYnBNVnFZWDQ5ZGVvd1c1dGRqbHg2amhmbjEyS2ZIYUdGK1BmYnBjVHA1djU3dmVweE8zcS9udXg2bmsvZnIrYTdINmVUOWVyN3JjVHA1dng0RmVweE9udUNCSU1qRDNpNGI4NXRTUFU0bjcrR0E0QzJXdm95ZW50NUI4Rk4zL2ZyMWw5bVVIeXYwT0oyOG04TnM3cE1EOEFZQUhvRUJma2RNcHU2Ujl2YU9qM2ZzK0o5bnB6by8xdWh4T25tY282ZW41MmNBL2lrNytFZnd6Y2lORzkzMmFHNXJ1NjUrSEQ2dnozcWNUaDUxQVBDekFlaHRBUGh0RC9CdGY4UEhlM3I2em9IM0JYRHg4MUtteCtua3A5bXU4MDhBa01rQXRoa04zaE44MUd2R1lmL0FiRGEveklYUFM3a2VsNVB2N2UwTnRsaDZMMlBCRTRXUGlSSFlnalEyTnY2SXJaK1hTVDFHQ3lPckI4Qy9DczlhQUd5Q0l2aW85L1kxV1N6OUNqWjlYcWIxR0MyTWpCNW83cDk2TUt6ckczWU4wSHY0R0NPY001c0hlR3lIOVlPQjM2SjRPNk85VE4vbEhobzE4TzFoTmx2dWQzYmUrT0xjdVV1dnNCSFdEd0wrbUV6MXMxR1o2dlNZWElVTUxFeVlxTjc2bTVidUc5MzM2WWFQMXV2cU1nMjJ0M2Q4c0d2WDU3UFpBdXV4aHo4b1dmN0NtRXk1SGNDL0ErR2pvMnQ1OGxqOWdTT3RUTUMzUjJkbmw5NW9OTDdMbGZxajdHQTZlV1RhdENkR1pjcmtNYm5TakFXUGpTYkZ1c0hXMHZKdU91R0RzNyt0b2FIeGNrMU5EUUxpdDJ5dlAwb1BwcE8zeXRWQzBPUmY5Z1RlSHFOeUpUSXdYNDNvTmUrMWR6UmRHNlc0MmIvVjNOeGFVbGxaZVJ2Q3I2MnRKVzBBdHNOMyt6NG1rNysxSVBFVkFITTNPUFBIeWNBZlJvVnBVY0o5L1VlZk5YV2J6TGhEUTZMd0Fmang5dmJycGRYVlZaYXJWNjhpZHZoa0RjQUYrUEQ5VTVwOFIvQ2FtYmZscWd5clREbEVGRHdlZkh2QXg5dGkzeHBwUEozYjdoMzhMa05OVGEwQmdzZkNKMk1BcnNDSE9sT1cvQzJaUW02VnF3eGt3SHVDLytnMUtzU1lvT201WG0zb0p3Sy9xNnZiMU5qWVdBcWErd2xYOElrYWdFdnduUXpBUlBKdGNzVy9XdVdLazJUQkU0V1Bqb0VGQ1JNMVczN1ZhdTR5M1hFQjM5clNjcTJrcXFwcTFBN2VGWHdpQnVBYWZBY0QwRjNZV1huczN3N0tGQitCNXY0MkUvRFJZVnFhZE5md1JXWWpDdnpFalJ1bVM5WFZOVjFvOE83Z2V6SUFGK0UvN0FQUVdWaFNXT2lQTExLVmE0ZGxDaE1SV0ZURGR4ZzJLdGNOdEZ5NHJBZkR1bG9zZUUvdzNSbUFxL0J0ZW5RVzFoYTFNblJJcnJqa0RTeXE0UTh1VEVDdUxvMUhDdExlYS9JR3Zpc0RjQnIrNUFzb0wreWliTWsvRE1nVk80ZGt5dnRURGQ4Nlg0M1V4aVFoZFVJNVVoOGdSYzVvdGpSN0F4L1BBSnlIUC9raXlncjdNaUoyVnI5Y3NXVklycnpwN1psS0pmeHJNYXVRcW5uTEVDTUFEK0hYNGhpQUtIeXNBUjRMK0pNdnBLUXdzMXdaZlZPdU1QalNURk1GdjNjeGFPNFhxV3pnMGZDeEJpQURIMjJBeHdiKzVJdDlLbXc0VXZuUE4yV0tIRit2MFZUQUg0Nk9SeXFYcjBJTUFqa3VmTFFCeU1LM0crQ3hnai81QnE4S1F5U1NHUUJLeHBCTWNZc044SnRCYzE4ZHZ2Z2hlRHo0ZGdONEF4OUdkWFgxYng4citQWTNrVDN1UkNzRFJtV0tDaXA2NTc3Q055MUpRaXJueHptQWR3VWZScDcybldadjRFUFRWRlJVL082eGd1L05NU3BUYmJIS2xmZW1HajRjMWxVdVMwVHFneUlKdzRlUDU2ZTlTOW9BRUQ2OGJBQUQvSjZOc0JpQmowaFdQdzBxZmg5VjQzSnY0ZHZtK1VGelh4TzZ3QW04Si9oR0x3eGdoNDh4QUd0Z01RSi9lS0hpeFRHWjZ1cFV3NysrYkJXaWoxeUJDNTRJZkxJR1FNTkhHV0RLWVBYMjlqNUxwUjZoWTJSKzBrdmdyS3VaVXZneVZYOTdaR3h6ZlJBK2VLTHd5UmdBQzMvU0FMK2JDdmh3a3l1QW4yS3g5UGFDK0w2N3V5K1VtVE4vWHZ5UDRTM2JxWUlQL3I1N2M5Nktvb1lBNlpBcjhHVGdFelVBSG53WWNCVGdUVDM2QWd0dWNnWFFhekdybGNlN3VrejdMMXc0L3hQNnJ2a2ZmamdkZFBoeXB3citTSlRpYXF0QTN1d09QRm40UkF6Z0NqN1Rhd0xoSnRlZW5yNlRkSzlXZG5tTXlaV2ZUZzE4cGNra1huTFJFM2h2NEhzeWdEdjRlUGNDUEIzZXdCOGNISHdCZ041dXdXeHlkYmY2Mld6dWJiUllMRXZJTW5hWng2aGNJUUZEdlFrbTRZUFd4dG8vZDNsZVkwRGtDRjN3M1JuQUUzd1E1dzBHdzV0a0twY01mSENkbno2NXliV0g2RkoxNXdXd3ZmbWdyL0FHbWZ5Y0U1RklabGhseWxvbTRZOUV4VlUwOFdXRXpucGY0THN5Z0lkbXZ4TzhKaG51UXFZTFBvQW1CZkNxeU94VGNMWDZHVHgyRjdRSU93WUdCcDRua3AvVGsxYVpZaU5UOE9HbWoyN3gwdk0ycUR4cEdkM3c4UXpnQnI0VlBMKzlycTV1TmxId1pPSDM5L2YvSTRDbUk3dEpoZGpTZDBzZitKY0JqUHVrdS93Y0VycVlualo5U0s1b1pRYSswdG9ldktEbUlWZ0NCdkFWUHRZQWVQRGh3bER3K0dIUTNMOUdCandaK04zZDNjOU1mcG5GR0QzdzBScDkrcDZlZ1FoWCtUa2tiNUhIeFRBQ1g2NjZCK0RYTzhEMVlBQXE0S01OZ0gvbVYrckJVQytDTEhpaThDVWZGczJJZWUvMFoxWDFyZDFrZHlqNXN1a0Zyb0VFbDRYOWxaWDYxN0g1T1NSL1U2NDh5TVExM3h5K3JNSUpzQnNEVUFYZmJnQXNmRkF4cHZMeWNzM0ZpeGVtMHdVL1RGTWNLZGFXMUlqVFNwQ29UZDlOZkx3cnA3YTd1K2NlM2ZBeGVsYjRKVm03ZC8vZmN3L3pReWNQbXY5T3V1SGZraW5iRy9BZ3V6QUFsZkJod0x1QnFPYit6cFVyVjNZZU8zYjA3K21hNFF0SkwvcUpLSzFFQjhGalk5bm1iNjNmbmltdFp3aStiZGRUUTBQakJiMWVuL2J3ODlxVGI1SXA1akF4emplRkxEYmlnc1l4QU5YdzBXc0NBZmhUK2ZsNWMzeVpRWE1IWDVCeVpSYUF2RTJzTFI3RmcyK1BzTFFpUlBuK1VYTmxUVk1YbmZEYjJ0b053UEQyWFUrYjBSL0NsbmkzTEc0aDNmRGgzcitHb01oeElnYWdBNzV0UGNENmpBdWxwYVh6ZlowK2RRZGZwQ2xlQnVDMnVRT1BEVW42MlFudFIzOXBhbWx0SDZFUy92WHJuYWJxNnBxSHU1N2c1US8wYzV3TllKR3ZqS2Q5YmwrbXVPRVNFTW9BTk1FZnFPUkp0L3g2VWZUZjBBVmZuRmJ3TDZGcHhXZkpnTGVGdGhoRUlZaHppRHc5NSs2ZjlwNnBBYzMxaEMvdzRmVytyczVRQXFDUFlpZTE4QXd3MHhxbDJFQW5mTnYxUHpLdTFaTUJxSVp2Q0pDTVZ3ZEk5MzhuakhpVnpGdzhHZmp6Vm1lOUpOSVc3eEJwUys3NUFoOGRNWnVQRCtVV1hXa2dDOTlzdGt3ME43ZGNCbWQ4RjNaU0M3VzB6Y0VBdHNvWWtzU3RveE0rREdDeWJuY0dvQncrVDFwK09WQWFUblJHaml4OFlXejYwNktVM0xkRW1pSUxhZkF1NFJjK2VCdzhINUZXaUNSL2NMU2pzYm5kUWdSK1oyZFgvZFdyVlU2N25yQnJJTEVHc1Azc203dHNEWjN3N1gyQXhrRG5KVnlUc01vb2c4K1RtdXA0MHVUVllTRlAwUVZmdlA2MFRKUmFVRzJIUlRWOGRFUnR6QjNmK29makJqQnNkTHBCQk1Oa3NwaU5SdU41Y05hUEU5bjA0bUFBKzlFVUlrOGZsYXNtNklKdmo0NlFoYmpYNkdwd3R2b01ueWU5V3g4ZzJWRVZzdUE1YkROTkZmeXdOZG12aXpUNSt3R3dDU2JnbzJOUlJzNVk1dUhDS3RTMS9nNzhGaE1BZEpqTWRqZGNBNENLMjN3clN0bE1KM3dZUTVLVmlESFF1WGVPTllBWDhQUHJBcVBlSURvZFN4YiszT1QvZmw2Y21yZE5yQ213RW9GRk5YejBzREgrL1NQZGw4dXJ6dGZWMVhVUXVJdEozQUQ5a2hYbjZZUnZqeHVoaTV4NisyZ0RrSUVQOG01cENKUW9zR2NxbGZCRkthZGp4YWtGMThqQ29ocStyUlhZZEFLSlhwK0ovT3F6dzQzZXdIZHJnQlpCOURXNjRVLzJCWkFXZ2R5aHViY2JnREI4bnNScURKQnNhM3ROOGpSZDhNUFg1cndKenZoY2IyRlJDVisyTVJlSjBXWWl3UWxaaUNCZWgvekhwOTgwZXJ2TDJhVUJZTVhlaWxMVTBnbmZyamNVcFVBYWhUSUhBNUE0ODA4YWdpSmZROE9pRXI0a1BmY0ZVV3IrcHdEK25hbUdEMGNDTVpzT0llS2tUQnQ0VzZpemtBOCtPZVJrQUtJN250d2FvRE4wNFZXNjRkczFic29VU0d0SXRNMEFCaUszZzNsU1kzM2d2UG5ZTTVVeStCOGkwMFdwaGNraWJVR1BMODAwTmZDTGtTVVp4eEhaV2hUNFNmZ0NkU2J5d2ZhRGpkN0E5MmdBR01QU09EM2Q4TkZoaVloQmFvTVhWYnVCUDJEOHVUU2pTQ0taUVJkOFVmcjVjTEdtU08vck5ab0srTkdiVGlITHRIc1JJUm84Q2o3V0FHVDNPdG9ONEZCUGFBTzBCTW02ckhMbEtCUHdXeGVzUmpZbjdVYWtxWG5qMjVkdFEvU0NSZWdPSHJ4dm9Hc0tESDhSQzR3cStPSHBGd0pFYVVWL3BhS0Q1aXQ4eWNZQ0pHWmpOaEthdU04UlBBWSsyZ0RlYkhTRkJyRFhINjRCNExXNFRiUllUeWY4WG5rQzhxZTQzeU5TVFlGakpZQy90OGI5RVRra1RXa29GeTRPdzRQbUszeEJTdjd6SW0xUnZFaGJmSTZxM3JsdjhJdVJtSXh2RU1sYm1jN2djZURiREFENkFON3Vjb1ozQSszMTUyUUE5TkRNUEc5NUtSM3dqOFc4aHl4Wm4rT3hJa1ZweFFOaVRjbUIwUFFTVmVpR290ZW5UVU9lOEFhK0lPWEt6SER0aFRkRjJwSjBzYllrSDFUNFhhcDY1NzdDWDVpUmd5emU4RFUrZUJmd1ljQlJnRGZ3b1duS3k4dmV0ZGVkZ3dHd2MvRjFQT205L3NpVmxWVEJMMXVjT3JCNlRaYlhsUXZPMm1IUU15OFRwK1o5Ylp1VVNjM2RJazQ5czA2c0tZNEwwNVJFaTlPTEZXSGFvdlZBL3gwQStqY2lUZkVoMnlvY2JmRWRhanRvdnNPUDNKaUhyRWpQd20vdVBjQ0hqOE41QUcvZ3c4dEdXUm1PQWVxQUFWek14ZDhmam95cjhBVis1L3prb2EySk8vdkRZWE0vaFpNb3JORFRGbzh2elRpTVJLeHkwZHdUZ0ErZkoyc0E5S1FSeWdDUDFnUldCa3JlZFRVWDN4QVFlUmVZb0p3cy9BRzUrdDZ1dUkvYlpCdE9UWEFTRnNWNm9NOVJHcjdtUUpkYjhBVGdrelVBZHNadzBnQ09hd0t4QnNCT3lvQy9KM3JDWTRvOWZhTzNIZjUzTWUrMHJsaDc1QjVYWVZHcEIvb3lyY0xWM3g0UnhHZmRvUUkrR1FQZ1RSZFA5Z0VlOXFodEhTcTBBZHpOeUhXRUxDb2ZsYXR1dW9MZkZQMjJSWnYwNVNCWFlWR3BCenFkdDBKVHpuNEx3UGQ0QkU4Q1BsRUR1THBYZ0xzbTBHNEFJdE94elh5WmVTUnFwY09NWWI4ODN2cXgrbzlkY3pWbk9RbUxXcjNpaVZCTlliNHc2YUNlRUhpUzhJa1l3TjJOSXR3MWdkQUFaRy9CZG9vV1g3TEtWUDJIWXYremVjRzZFK1BjaEVXeG5xYW9SckQ2eUJHQldqZE9GM3hQQm5Eei9RWVQ0UGtEUnFQeFZhd0JadGFoSm9MSXhFbEp3cFhZNUN3a1FwUEhQVmdVNm9FaDZ2V1F0M09PQTJoWENZUDNFcjQ3QTdnNTg2L1UxZFU1NzNxeTl3YnJ2VEFBYkRGT2g4ZFd3SVRGOFpsSWJMSU8rZUVOOWM3MWl0YWRPUWFnbUNHWW9QaXNXcnJodXpLQWk3Mk9wcXFxcXBURGh3OC82UVRmUGdSRXp3U1NnVitMTW9BOXd1UDNJWEdnUlpDbG5tVWhMQXIxTmhRMGg2NDljWkt2MWprTTZ3Z2J3QWY0ZUFiQWdYOVhyOWZ2QlBDZmN6bEZpajdxQTZWYXN2Q2REZkFvK2VDRWJHUkY0bDVrK2RwalNGaWFoMHJuQ254TndhZ29KYmNvT1BtYkFvRjY3eDA4V0lRTTRDTjhyQUd3OE9HdXA4TEN3am1rYm93WmVGSVZXZmlPQm5DZGZBUnNGVlpsQWpNY2RUWUR5K0dMdE1YM1JSdnlMd2V2UG5ZYURPZE1ubUI1TkFBRjhORUdRTU1IelgzRDk5OWZYdXJWTGZFR1htUVVXZmlQREVBOGVVbGlGaEtYdUFkUnJ0bVB5RGFjWVNkOGJYR0xLQ1V2TDNqTjhYT08wRDNEY21zQWl1RGJEV0NIRDhEM1YxU1ViOW15NVplenZGNE1BKys1dzlrK012Qmg1SWJIbHBOTkhsMFo4OVZmQWtQc1JtUnJqeG5GRy9McVJacmkyMHpDQjJmNFRWRnFZVVhvdXR4OEFMeUluM1N3QVVDZjhCYVdTd05RQ0IvRzVKcEFjSjIvOHRYSmt6bXZFTGtyNnZFdzh1WVp5TUNIajU4Ti93VjVBN2lwREg2ODdqNkEwQkc4K3JnK2VPMnBDNklOdVJkRXFRVVZZazJoQWNEc0JHRWxBOThHT0syb0ZmeGRMZElXbElhdXp5MElYcHRUR0x6NmFKa3c4ZUExZm56V1BTcGg0UnFBWXZqd2ZlLy8xNEVUaFlYbmZrN0ZHc2lIQjl4VVFRYSswUnNEVUZFWkNkbTNoZXI5ZzhLRUF5WkJ3djRPUWRMK2F3Q21VWmk0djBXUW9Pc0FyK2tVcXJNSCtlcnNNU3JOU2VUOVRnYWdHcjVxWDVOUS9aV2FxZ1d3RG9jaElQSk45R1dBeUY0OVVnYWc0VXhnbTU2REFTak5MMnRFb042M2pSK2RQcHZLcGU5T0I0QjZuaWg4VWdaZ0lTdzY5QjRhZ0tyODFMcHhjRm5VaGFwMEw5T3g2Y1hwaVFhZVpDR1pYYnFFRE1CU1dIVG8yUXhBa1I1ZnJTc1RxSFNVZnpFMFdnLzN5UnFlOUs5RU4ycDZOQUNMWWRHaHgxZnZxNlZBRDg0dUpudTdCcElvZkNjRDJKOHM1RXQrQ3FDUEVGa2Y0TllBTElkRmh4NWZ2UmZIQUlUMXJIeDExdlkzRklkbjQ4R2lHcjZEQWJCUFZnVE9VOVNBRHFHblc4UXVEY0FCV0hUb0FRUFVlYVduMXAwTVVHVys3ZzRXMWZBZDFnVGlQVm5QazN6aWFYWVExd0FjZ1VXSG5xTUJpT2hsNmZtcTdMbEVZRkVOMzJGTklONlRpRUx4SkdnQkRwRXlBSWRnMGFIM3lBRHU5VUFIcjQ4Zm41MmhVQngyKzEyK3RNS2ZmSUhid3FBSmpMeDUrd2daZ0dPdzZOQjcwQWR3bzZmVzNRVm4vUTZCNHJEVHQza3pEbi95UlI0TFE2Wk5tdzR1QjErNE5RQUhZZEdoWnhzRnVEN3I4d01UczNHL3ozOUs0R01NNExHd2VsNWtjajFQT3Vwa0FJN0Nva01QNzE0QVAxN1hLRkJudS93ZlBhWU1Qc29BaEFzekJrbUV3QVJ0ZGdQWTdnWnlGQllkZXBpcDRFRkJnbTRyR05ZNVQ3aXdBZjdrRzBnWGRrV3dkSmFSSjlsdTRFbnVZNWVFY1FrV0hYb1BaZ0lmVE4veWtuUXZVUXJMdytHVm5pK0ZmYytYaUU2RUsvN0NWVmgwNkFXcHNySURsYm9BV21BeHFFZTRzSWhmcER3alVPMzV0VUNWT2NnMVdGVHE4ZU96UnNIUFA0Uzl2ZWRaTXZYSGFmam93c0xXL1BsWmVMM2pxN09HMkE2TFVqMHdySVBOUFhvV2owbFlySUNQTGt3UWYrREgwQWlnZ3RwWkI0dENQUUM5SDV6MW53UWw3Q2Y4ZndzOTl2RFJCNXpoQW1QaVdIQ0c1SUtLdXY4WXdhOEFyZHg2d2RMZHMraXNQNmIxYUMxTXBQanE3MENsSnNNYkhyWTFlRnlEcjlwYkwxRHYrVWlZc0cvT1ZOUWYzWHFNRmdaWHRvQk9ZN0pBOVhVV3FOd3VOc0xucS9ZT2dUZ2hVTzdaSkZEc2VvTk5zRGdOSDA4dldQbS8vd1phaFRXZ1dkMEpXb2hMazcxcHh1RER5eE80bnRlQjMvY0pWUHMyQ3RTN0k2S2liT3ZyV1FlTERqMUdDeU9pSjVFVXpSQW1acytCVTZmQUZMOFV4R2Q5emxmclRnTklsZUR2VHZEN0dCbjREd0JubVcyUTFicEM4UHhlb1BIdm9LT3FFS3F6Z25oSnVtZW04dk5PdFI0bms0ZERUcEY2NTA5RGxKL1BDVm01SzBpbzJpVVNxUDRjeW8vZks0QlFoUWtIL2dsR29PTHJGK0d5S3FiejQ1SWVwNVAzNi9tdXgrbmsvWHErNjNFNmViK2U3M3FjVHQ2dlI0RWVwNVAzNi9tdXgrbmsvWHErNjNFNmViK2U3M3FjVHQ2djU3c2VwNVAzNi9tdXgrbmsvWHErNjNFNmViOGViWHFNRnViWFk1Y2VvNFg1OWRpbHgyaGhmajEyNlRGYW1GK1BYWHFNRnViWFk0L2Uvd01TakxYZW10Y2lKZ0FBQUFCSlJVNUVya0pnZ2c9PSIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment