xiaomianao666

插件名:global_觅影

Nov 13th, 2024
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_觅影@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICDop4XlvbEKLy8gQHZlcnNpb24gICAgICAyMC4zLjMyCi8vIEBhdXRob3IgICAgICAgKG/LmOKXocuYbykKLy8gQGRlc2NyaXB0aW9uICDlubPlubPml6DlpYfnmoTljp/nvZHpobXop6PmnpBWSVDop4bpopEKLy8gQG5vdGUgICAgICAgICDmnIDov5Hmm7TmlrDvvJrkv67lpI3vvJpg5pCc54uQYCDpg6jliIbmkq3mlL7nvZHlnYDkuI3mmL7npLrop6PmnpAKLy8gQG5hbWVzcGFjZSAgICAob8uY4pehy5hvKQovLyBAc3VwcG9ydFVSTCAgIGh0dHBzOi8vZ2l0ZWUuY29tL2VjcnVvcy9vbwovLyBAaWNvbiAgICAgICAgIGh0dHBzOi8vcC5wc3RhdHAuY29tL29yaWdpbi9mZTY5MDAwMGM5MTQxOTU1YmJhYwovLyBAbGljZW5zZSAgICAgIEdQTCBMaWNlbnNlCi8vIEBpbmNsdWRlICAgICAgKgovLyBAZ3JhbnQgICAgICAgIEdNX3NldFZhbHVlCi8vIEBncmFudCAgICAgICAgR01fZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICBHTV9kZWxldGVWYWx1ZQovLyBAZ3JhbnQgICAgICAgIHVuc2FmZVdpbmRvdwovLyBAZG93bmxvYWRVUkwgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KCiFhc3luYyBmdW5jdGlvbigpIHsKICBmdW5jdGlvbiBJcyhuKSB7CiAgICBsZXQgbyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogSHJlZjsKICAgIHJldHVybiAic3RyaW5nIiA9PSB0eXBlb2YgbiA/IG8uaW5jbHVkZXMobikgOiBuLnRlc3Qobi5zb3VyY2UuaW5jbHVkZXMoIj1odHRwIikgPyBvIDogby5yZXBsYWNlKC89aHR0cFteJl0rLywgIiIpKTsKICB9CiAgZnVuY3Rpb24gSXNOb3QobiwgbykgewogICAgcmV0dXJuICFJcyhuLCBvKTsKICB9CiAgZnVuY3Rpb24gbWFnaWNTb3VyY2UobikgewogICAgcmV0dXJuIG4ubWF0Y2goL1x3Ky9nKS5mb3JFYWNoKChmdW5jdGlvbihvKSB7CiAgICAgIG4gPSBuLnJlcGxhY2UobywgbWFnaWNTdHJpbmcobykpOwogICAgfSkpLCBuOwogIH0KICBmdW5jdGlvbiBtVlUobikgewogICAgY29uc3QgbyA9IG1hZ2ljU291cmNlKG4pOwogICAgcmV0dXJuICJodHRwczovLyIgKyBvICsgKG8uaW5jbHVkZXMoIj8iKSA/ICIiIDogKG8uZW5kc1dpdGgoIi4iKSA/ICJwaHAiIDogby5pbmNsdWRlcygiLyIpID8gIiIgOiAiLyIpICsgIj91cmwiKSArICI9IjsKICB9CiAgZnVuY3Rpb24gZW5zdXJlQXJyYXkobikgewogICAgcmV0dXJuIEFycmF5LmlzQXJyYXkobikgPyBuIDogbi50cmltKCkuc3BsaXQoL1tcblxzXSpcbitbXG5cc10qLyk7CiAgfQogIGZ1bmN0aW9uIHRvVXJsUmVnZXgobikgewogICAgcmV0dXJuIG5ldyBSZWdFeHAobi5tYXAoKGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIG4ucmVwbGFjZSgvLitcL1wvfFwvLisvZywgIiIpLnJlcGxhY2UoL1wuL2csICJcXC4iKTsKICAgIH0pKS5qb2luKCJ8IikpOwogIH0KICBmdW5jdGlvbiBnZXRDZG5VcmwobikgewogICAgcmV0dXJuICJodHRwczovL2Nkbi5ib290Y3NzLmNvbSIgKyBuOwogIH0KICBhc3luYyBmdW5jdGlvbiBmZXRjaENkblVybChuLCBvKSB7CiAgICBsZXQgZSwgaTsKICAgIGNvbnN0IHQgPSAvXlwvXHcvLnRlc3Qobik7CiAgICBpZiAobiA9IHQgPyBnZXRDZG5VcmwobikgOiBuLCAhbyAmJiB0KSB7CiAgICAgIGNvbnN0IG8gPSBuLm1hdGNoKC9jZG4uYm9vdGNzcy5jb21cLyhbXlwvXSspXC8oW15cL10rKVwvLisoXC5cdyspJC8pOwogICAgICBlID0gb1sxXSArIG9bM10sIGkgPSBvWzJdOwogICAgfSBlbHNlIGUgPSBvLm5hbWUgfHwgbiwgaSA9IG8udmVyc2lvbiB8fCBWRVJTSU9OOwogICAgY29uc3QgYSA9IEdsb2JhbFN0b3JlLmdldChlKTsKICAgIGxldCByOwogICAgcmV0dXJuIHIgPSBhICYmIGEudmVyc2lvbiA9PT0gaSA/IGEuZGF0YSA6IGF3YWl0IHdpbmRvdy5mZXRjaChuKS50aGVuKChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBuLnRleHQoKTsKICAgIH0pKS50aGVuKChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBHbG9iYWxTdG9yZS5zZXQoZSwgewogICAgICAgIGRhdGE6IG4sCiAgICAgICAgdmVyc2lvbjogaQogICAgICB9KSwgbjsKICAgIH0pKSwgcjsKICB9CiAgYXN5bmMgZnVuY3Rpb24gYWRkSnModXJsLCBvcHRzKSB7CiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hDZG5VcmwodXJsLCBvcHRzKTsKICAgIHJldHVybiBldmFsKGRhdGEpOwogIH0KICBhc3luYyBmdW5jdGlvbiBhZGRDc3NVcmwobikgewogICAgYWRkQ3NzKGF3YWl0IGZldGNoQ2RuVXJsKG4pKTsKICB9CiAgZnVuY3Rpb24gYWRkQ3NzKG4pIHsKICAgIGxldCBvOwogICAgcmV0dXJuIC9eKGh0dHB8XC8pLy50ZXN0KG4pID8gYWRkQ3NzVXJsKG4pIDogKG4gPSBuLnJlcGxhY2UoL1xuK1xzKi9nLCAiICIpLCBvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSwKICAgIG8uc3R5bGVTaGVldCA/IG8uc3R5bGVTaGVldC5jc3NUZXh0ID0gbiA6IG8uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobikpLAogICAgby50eXBlID0gInRleHQvY3NzIiwgdm9pZCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKG8pKTsKICB9CiAgZnVuY3Rpb24gJCQobiwgbykgewogICAgbGV0IGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSA/IGFyZ3VtZW50c1syXSA6IDA7CiAgICByZXR1cm4gMCA9PT0gJChuKS5sZW5ndGggPyB2b2lkIChlID4gMTAwID8gbG9nKCLDlyB3YWl0VG9SdW46IiwgbiwgIndhcm4iKSA6IHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICB3YWl0VG9SdW4obiwgbywgZSArIDEpOwogICAgfSksIDEwMCkpIDogKGxvZygi4pyUIHdhaXRUb1J1bjoiLCBuKSwgdm9pZCAkKChmdW5jdGlvbigpIHsKICAgICAgbygpOwogICAgfSkpKTsKICB9CiAgZnVuY3Rpb24gdXVpZCgpIHsKICAgIGxldCBuID0gNDY2NTYgKiBNYXRoLnJhbmRvbSgpIHwgMCwgbyA9IDQ2NjU2ICogTWF0aC5yYW5kb20oKSB8IDA7CiAgICByZXR1cm4gbiA9ICgiMDAwIiArIG4udG9TdHJpbmcoMzYpKS5zbGljZSgtMiksIG8gPSAoIjAwMCIgKyBvLnRvU3RyaW5nKDM2KSkuc2xpY2UoLTMpLAogICAgIm8iICsgbiArIG87CiAgfQogIGZ1bmN0aW9uIGVtaXR0ZXIobikgewogICAgcmV0dXJuIG4gPSBuIHx8IE9iamVjdC5jcmVhdGUobnVsbCksIHsKICAgICAgb24obywgZSkgewogICAgICAgIChuW29dIHx8IChuW29dID0gW10pKS5wdXNoKGUpOwogICAgICB9LAogICAgICBvZmYobywgZSkgewogICAgICAgIG5bb10gJiYgbltvXS5zcGxpY2UobltvXS5pbmRleE9mKGUpID4+PiAwLCAxKTsKICAgICAgfSwKICAgICAgZW1pdChvLCBlKSB7CiAgICAgICAgKG5bb10gfHwgW10pLnNsaWNlKCkubWFwKChmdW5jdGlvbihuKSB7CiAgICAgICAgICBuKGUpOwogICAgICAgIH0pKSwgKG5bIioiXSB8fCBbXSkuc2xpY2UoKS5tYXAoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgIG4obywgZSk7CiAgICAgICAgfSkpOwogICAgICB9CiAgICB9OwogIH0KICBmdW5jdGlvbiBsb2coKSB7fQogIGZ1bmN0aW9uIGZpeFVybChuKSB7CiAgICByZXR1cm4gbi5yZXBsYWNlKC9bXD8jXS4rL2csICIiKTsKICB9CiAgZnVuY3Rpb24gZml4VmlwVXJsKG4pIHsKICAgIGNvbnN0IG8gPSBCRVRURVJfQURET05TLmZpbmQoKGZ1bmN0aW9uKG8pIHsKICAgICAgcmV0dXJuIG8uZml4VXJsICYmIG8ubWF0Y2gudGVzdChuKTsKICAgIH0pKTsKICAgIHJldHVybiBvID8gITAgPT09IG8uZml4VXJsID8gZml4VXJsKG4pIDogby5maXhVcmwobikgOiBuOwogIH0KICBmdW5jdGlvbiBnZXRWaXBUYXJnZXRVcmwoKSB7CiAgICBpZiAob29QbGF5VXJsKSByZXR1cm4gb29QbGF5VXJsOwogICAgbGV0IG4gPSBJcyhpc1ZpcFVybFJlZ2V4KSA/IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgvLis9aHR0cC8sICJodHRwIikgOiBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyY/XHcrPWh0dHBbXiZdKy8sICIiKS5yZXBsYWNlKC8uK2h0dHAvLCAiaHR0cCIpOwogICAgcmV0dXJuIG4gPSBkZWNvZGVVUkkoZml4VmlwVXJsKG4pIHx8IG4pLCBuOwogIH0KICBmdW5jdGlvbiBnZXRHbG9iYWwobikgewogICAgcmV0dXJuIChoYXNVbnNhZmVXaW5kb3cgPyB1bnNhZmVXaW5kb3cgOiB3aW5kb3cpW25dOwogIH0KICBmdW5jdGlvbiBzZXRHbG9iYWwobiwgbykgewogICAgd2luZG93W25dID0gbywgaGFzVW5zYWZlV2luZG93ICYmICh1bnNhZmVXaW5kb3dbbl0gPSBvKTsKICB9CiAgZnVuY3Rpb24gcGF1c2VQbGF5KCkgewogICAgbG9nKCJwYXVzZVBsYXkiKTsKICAgIHRyeSB7CiAgICAgICQoInZpZGVvOm5vdCguby0tdmlkZW8pLCBhdWRpbyIpLmVhY2goKGZ1bmN0aW9uKG4sIG8pIHsKICAgICAgICBvLnBhdXNlKCksIG8ubXV0ZWQgPSAhMCwgJCgidmlkZW86bm90KC5vLS12aWRlbyksIGF1ZGlvIikucmVtb3ZlKCk7CiAgICAgIH0pKTsKICAgICAgY29uc3QgbiA9IERhdGUubm93KCksIG8gPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgY29uc3QgZSA9IERhdGUubm93KCkgLSBuLCBpID0gZ2V0R2xvYmFsKCJwbGF5ZXJPYmplY3QiKSB8fCBnZXRHbG9iYWwoIk1HVFZQbGF5ZXIiKSAmJiBnZXRHbG9iYWwoIk1HVFZQbGF5ZXIiKS5wbGF5ZXIgfHwgZ2V0R2xvYmFsKCJ2aWRlb1BsYXllciIpIHx8IGdldEdsb2JhbCgiUExBWUVSIik7CiAgICAgICAgaSAmJiBpLnBhdXNlIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgaS5wYXVzZSgpLCAoIWkgfHwgZSA+IDZlNCkgJiYgY2xlYXJJbnRlcnZhbChvKTsKICAgICAgfSksIDYwKTsKICAgIH0gY2F0Y2ggKG4pIHsKICAgICAgY29uc29sZS5lcnJvcihQTFVHSU5fTkFNRSArICIgcGxheTogIiArIG4pOwogICAgfQogIH0KICBmdW5jdGlvbiBjYW5QbGF5SW5QYWdlKG4pIHsKICAgIHJldHVybiAhaXNPbmx5RG93bmxvYWRWaWRlb1VybFJlZ2V4LnRlc3QobikgJiYgKCEvXC9cL3Z3ZWNhbS50Yy5xcS5jb20vLnRlc3QobikgfHwgSXMoInYucXEuY29tIikpOwogIH0KICBmdW5jdGlvbiBpc1ZhbGlkVmlkZW9VcmwobikgewogICAgcmV0dXJuIGlzVmFsaWRVcmxSZWdleC50ZXN0KG4pICYmIGlzVmlkZW9VcmxSZWdleC50ZXN0KG4pICYmICFpc0ludmFsaWRTbmlmZlVybFJlZ2V4LnRlc3Qobik7CiAgfQogIGZ1bmN0aW9uIHRvU2hvcnRWaWRlb1VybChuKSB7CiAgICBjb25zdCBvID0gbi5tYXRjaChzaG9ydFZpZGVvVXJsUmVnZXgpIHx8IG4ubWF0Y2goc2hvcnRWaWRlb1VybExvc2VSZWdleCk7CiAgICByZXR1cm4gbyA/IG9bMV0uc3BsaXQoIi4iKS5zbGljZSgtMikuam9pbigiLiIpICsgIiAuLi4gIiArIG9bby5sZW5ndGggLSAyXS5zbGljZSgtMTApICsgIjxzcGFuPiAuICIgKyBvW28ubGVuZ3RoIC0gMV0gKyAiPC9zcGFuPiIgOiBuOwogIH0KICBhc3luYyBmdW5jdGlvbiBwbGF5QmVmb3JlKCkgewogICAgJCgiLm8tLXZpcC1wbGF5IikucmVtb3ZlQ2xhc3MoImlzLWhpZGUiKSwgIWlzTG9hZFBsYXllciAmJiAoYWRkQ3NzKCIvcGx5ci8zLjUuMTAvcGx5ci5jc3MiKSwKICAgIGF3YWl0IGFkZEpzKCIvaGxzLmpzLzAuMTMuMi9obHMubWluLmpzIiksIGF3YWl0IGFkZEpzKCIvcGx5ci8zLjUuMTAvcGx5ci5taW4uanMiKSwKICAgIGlzTG9hZFBsYXllciA9ICEwKTsKICB9CiAgZnVuY3Rpb24gZm9ybWF0UGFzc2VkVGltZShuKSB7CiAgICByZXR1cm4gKChEYXRlLm5vdygpIC0gbikgLyAxZTMpLnRvRml4ZWQoMikgKyAicyI7CiAgfQogIGZ1bmN0aW9uIGdldFNuaWZmVGltZShuKSB7CiAgICBjb25zdCBvID0gc25pZmZUaW1lc1tmaXhJZnJhbWVVcmwobildOwogICAgcmV0dXJuIG8gPyBmb3JtYXRQYXNzZWRUaW1lKG8pIDogIjBzIjsKICB9CiAgZnVuY3Rpb24gc25pZmZTdGFydCgpIHsKICAgIGlzU25pZmZpbmcgPSAhMCwgc25pZmZUaW1lc3RhbXAgPSBEYXRlLm5vdygpLCBzbmlmZlVybHMgPSBbXSwgc25pZmZVcmxzS2V5ID0gW10sCiAgICAkKCJodG1sIikuYWRkQ2xhc3MoIm8tLW9uIiksICQoIi5vLS12aXAiKS5yZW1vdmVDbGFzcygiaXMtcGxheS1pbi1wYWdlIik7CiAgfQogIGZ1bmN0aW9uIHNuaWZmRG9uZSgpIHsKICAgIGNvbnN0IG4gPSBmb3JtYXRQYXNzZWRUaW1lKHNuaWZmU3RhcnRUaW1lKTsKICAgIGxvZygiU25pZmYgZG9uZSDinJQgLSB1c2VkVGltZSAiLmNvbmNhdChuKSksIGlzU25pZmZpbmcgPSAhMSwgZW1wdHlJZnJhbWVzKCksICQoIi5vLS1zbmlmZi1wcm9ncmVzcyIpLmNzcyh7CiAgICAgIHdpZHRoOiAiMTAwJSIKICAgIH0pLCAkKCIuby0tdmlwIikucmVtb3ZlQ2xhc3MoImlzLXNuaWZmaW5nIikuYWRkQ2xhc3MoImlzLXNuaWZmLWRvbmUiKSwgc25pZmZVcmxzLmxlbmd0aCA+IDAgJiYgMCA9PT0gJCgiLm8tLXNuaWZmLWRvbmUiKS5sZW5ndGggJiYgJCgiLm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIikubGVuZ3RoICYmICQoIi5vLS12aXAtcGxheSAuby0tc291cmNlcyIpLmFwcGVuZCgnPHNwYW4gY2xhc3M9Im8tLXNuaWZmLWRvbmUiPuKclDwvc3Bhbj4nKTsKICB9CiAgZnVuY3Rpb24gc25pZmZTdWNjZXNzKG4sIG8pIHsKICAgIGNvbnN0IGUgPSAobiA9IGRlY29kZVVSSUNvbXBvbmVudChuKS5yZXBsYWNlKC9eKGh0dHA6KT9cL1wvLywgImh0dHBzOi8vIikpLnJlcGxhY2UoL1w/LisvLCAiIik7CiAgICBpZiAoc25pZmZVcmxzS2V5LmluY2x1ZGVzKGUpKSByZXR1cm4gdm9pZCAoaXNBbGxvd0lmcmFtZVNuaWZmICYmIGxvZygiU2tpcCBkdXBsaWNhdGUgc25pZmYgdXJsOiIsIG4pKTsKICAgIHNuaWZmVXJsc0tleS5wdXNoKGUpLCBzbmlmZlVybHMucHVzaChuKSwgbG9nKCLinJQgc25pZmZTdWNjZXNzOiIsIG4pOwogICAgY29uc3QgaSA9IHNuaWZmVXJscy5sZW5ndGgsIHQgPSBfRCA/ICcgX2Zyb209IicuY29uY2F0KG8sICciJykgOiAiIiwgYSA9IG4ubWF0Y2goaXNWaWRlb1VybFJlZ2V4KVsxXTsKICAgICQoIi5vLS12aXAtcGxheSAuby0tc291cmNlcyIpLmFwcGVuZCgnPGEgX2hyZWY9IicuY29uY2F0KG4sICciIGNsYXNzPSJpcy0nKS5jb25jYXQoYSwgJyInKS5jb25jYXQodCwgIj7nur/ot68iKS5jb25jYXQoaSwgIjwvYT4iKSksCiAgICAkKCIuby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMgYSIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLCAoZnVuY3Rpb24oKSB7CiAgICAgIGNvbnN0IG4gPSAkKHRoaXMpLmF0dHIoIl9ocmVmIik7CiAgICAgIGxvZygi4oaSIHBsYXlpbmc6IiwgbiksIHVwZGF0ZVFyY29kZShuKTsKICAgICAgbGV0IG8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuby0tcGxheWVyIHZpZGVvIik7CiAgICAgICFvICYmICgkKCIuby0tcGxheWVyIikucHJlcGVuZCgnPHZpZGVvIGNsYXNzPSJvLS12aWRlbyIgcG9zdGVyPSInLmNvbmNhdChQbGF5ZXJDb3ZlciwgJyIgY29udHJvbHMgcGxheXNpbmxpbmU+PC92aWRlbz4nKSksCiAgICAgIG8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuby0tcGxheWVyIHZpZGVvIikpOwogICAgICBjb25zdCBlID0gZ2V0R2xvYmFsKCJQbHlyIiksIGkgPSBnZXRHbG9iYWwoIkhscyIpOwogICAgICBpZiAoIXBsYXllciAmJiBlID8gKHBsYXllciA9IG5ldyBlKG8sIHsKICAgICAgICBkZWJ1ZzogX0QsCiAgICAgICAgaW52ZXJ0VGltZTogITEsCiAgICAgICAgYXV0b3BsYXk6ICEwLAogICAgICAgIHZvbHVtZTogLjc1LAogICAgICAgIHNwZWVkOiB7CiAgICAgICAgICBzZWxlY3RlZDogMSwKICAgICAgICAgIG9wdGlvbnM6IFsgLjUsIC43NSwgMSwgMS4yNSwgMS41LCAyIF0KICAgICAgICB9LAogICAgICAgIHN0b3JhZ2U6IHsKICAgICAgICAgIGVuYWJsZWQ6ICEwLAogICAgICAgICAga2V5OiBzdG9yZVByZWZpeCArICJwbHlyIgogICAgICAgIH0KICAgICAgfSksIHBsYXllci5vbigiZW50ZXJmdWxsc2NyZWVuIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICQoImh0bWwiKS5hZGRDbGFzcygiby0tZnVsbHNjcmVlbiIpOwogICAgICB9KSksIHBsYXllci5vbigiZXhpdGZ1bGxzY3JlZSIsIChmdW5jdGlvbigpIHsKICAgICAgICAkKCJodG1sIikucmVtb3ZlQ2xhc3MoIm8tLWZ1bGxzY3JlZW4iKTsKICAgICAgfSkpKSA6ICFlICYmIGNvbnNvbGUud2FybigiTk8gUGx5ci4iKSwgJCgiLm8tLXBsYXllci1iZyIpLnJlbW92ZSgpLCAvXC5tM3U4Ly50ZXN0KG4pICYmIGkgJiYgaS5pc1N1cHBvcnRlZCgpKSB7CiAgICAgICAgY29uc3QgZSA9IG5ldyBpOwogICAgICAgIGUubG9hZFNvdXJjZShuKSwgZS5hdHRhY2hNZWRpYShvKSwgZS5vbihpLkV2ZW50cy5NQU5JRkVTVF9QQVJTRUQsIChmdW5jdGlvbigpIHsKICAgICAgICAgIG8ucGxheSgpOwogICAgICAgIH0pKTsKICAgICAgfSBlbHNlIG8uc3JjID0gbiwgby5hZGRFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsIChmdW5jdGlvbigpIHsKICAgICAgICBvLnBsYXkoKTsKICAgICAgfSkpOwogICAgICAkKCIuby0tcGxheS11cmwiKS5odG1sKCfmnaXmupDvvJo8YSBfaHJlZj0iJy5jb25jYXQobiwgJyI+JykuY29uY2F0KHRvU2hvcnRWaWRlb1VybChuKSwgIjwvYT4iKS5jb25jYXQoY2FuUGxheUluUGFnZShuKSA/ICc8c3BhbiBjbGFzcz0iby0tc3BhbiI+5aaC5p6c5YWo6YOo57q/6Lev6YO95peg5rOV5pKt5pS+77yM5Y+v5Lul54K55Ye75p2l5rqQ6ZO+5o6l5LiL6L295p2l5pKt5pS+77yM5oiW5L2/55So5Y2V5Liq6Kej5p6Q5pKt5pS+44CCPC9zcGFuPicgOiAnPHNwYW4gY2xhc3M9Im8tLXNwYW4gaXMtd2FybmluZyI+PHNwYW4+6K+l6ZO+5o6l5peg5rOV5Zyo5b2T5YmN56uZ54K55pKt5pS+77yM6K+354K55Ye75p2l5rqQ5LiL6L295pKt5pS+PC9zcGFuPjwvc3Bhbj4nKSksCiAgICAgICQoIi5vLS1wbGF5LXVybCBhIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsIChmdW5jdGlvbigpIHsKICAgICAgICBjb25zdCBuID0gJCh0aGlzKS5hdHRyKCJfaHJlZiIpOwogICAgICAgIGxvZygiY2xpY2sgcGxheSB1cmw6IiwgbiksIGlzSGlrZXIgJiYgd2luZG93LmZ5X2JyaWRnZV9hcHAucGxheVZpZGVvID8gd2luZG93LmZ5X2JyaWRnZV9hcHAucGxheVZpZGVvKG4pIDogaXNNaXhpYSAmJiB3aW5kb3cubXhfYnJvd3Nlcl9vYmoucGxheXZpZGVvID8gd2luZG93Lm14X2Jyb3dzZXJfb2JqLnBsYXl2aWRlbyhuLCBuKSA6IHdpbmRvdy5vcGVuKG4sICJfYmxhbmsiLCAibm9vcGVuZXIiKTsKICAgICAgfSkpLCAkKCIuby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMgYSIpLnJlbW92ZUNsYXNzKCJpcy1hY3RpdmUiKSwgJCh0aGlzKS5hZGRDbGFzcygiaXMtYWN0aXZlIik7CiAgICB9KSksIDEgPT09IGkgPyAoJCgiLm8tLXZpcC1wbGF5IGEiKS5lcSgwKS5jbGljaygpLCAkKCIuby0tdmlwIikuYWRkQ2xhc3MoImlzLXNuaWZmLXN1Y2Nlc3MiKSwKICAgICQoIi5vLS12aXAtcGxheSIpLnJlbW92ZUNsYXNzKCJpcy1oaWRlIikpIDogc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgIHBsYXllciAmJiBwbGF5ZXIucmVhZHkgJiYgMCA9PT0gcGxheWVyLmR1cmF0aW9uICYmICQoIi5vLS12aXAtcGxheSBhIikuZXEoaSAtIDEpLmNsaWNrKCk7CiAgICB9KSwgaXNNb2JpbGUgPyAzMjAwIDogMjgwMCk7CiAgfQogIGZ1bmN0aW9uIHNuaWZmRmFpbCgpIHsKICAgIGxvZygiw5cgc25pZmZGYWlsIiksIHNuaWZmRG9uZSgpLCAkKCIuby0tcGxheWVyLWJnIikuYWRkQ2xhc3MoImlzLWZhaWwiKSwgJCgiLm8tLXZpcCIpLmFkZENsYXNzKCJpcy1zbmlmZi1mYWlsIik7CiAgfQogIGZ1bmN0aW9uIF9TbmlmZigpIHt9CiAgZnVuY3Rpb24gaGlrZXJTbmlmZihzbmlmZlRpY2tJZCkgewogICAgaWYgKHNuaWZmVGlja0lkICE9PSBzbmlmZlRpY2spIHJldHVybjsKICAgIGxldCByZXNvdXJjZSA9IGV2YWwod2luZG93LmZ5X2JyaWRnZV9hcHAuZ2V0TmV0d29ya1JlY29yZHMoKSk7CiAgICByZXNvdXJjZSA9IHJlc291cmNlLmZpbHRlcigoZnVuY3Rpb24obikgewogICAgICByZXR1cm4gbi50aW1lc3RhbXAgPiBzbmlmZlRpbWVzdGFtcCAmJiAvdmlkZW8vaS50ZXN0KG4ubWVkaWFUeXBlLm5hbWUpICYmIGlzVmFsaWRWaWRlb1VybChuLnVybCk7CiAgICB9KSksIGlzU25pZmZpbmcgJiYgKHJlc291cmNlLmZvckVhY2goKGZ1bmN0aW9uKG4pIHsKICAgICAgc25pZmZTdWNjZXNzKG4udXJsKTsKICAgIH0pKSwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgIGhpa2VyU25pZmYoc25pZmZUaWNrSWQpOwogICAgfSksIDEwMCkpOwogIH0KICBmdW5jdGlvbiBtaXhpYVNuaWZmKG4pIHsKICAgIGlmIChuICE9PSBzbmlmZlRpY2spIHJldHVybjsKICAgIGxldCBvID0gW10sIGUgPSB3aW5kb3cubXhfYnJvd3Nlcl9vYmouZ2V0d2VibG9ncygiaHR0cCIpOwogICAgImVycm9yIiAhPT0gZSAmJiAobyA9IGUudHJpbSgpLnNwbGl0KC9ccypcbltcblxzXSovKSwgbyA9IG8uZmlsdGVyKChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBpc1ZhbGlkVmlkZW9Vcmwobik7CiAgICB9KSkpLCBpc1NuaWZmaW5nICYmIChvLmZvckVhY2goKGZ1bmN0aW9uKG4pIHsKICAgICAgc25pZmZTdWNjZXNzKG4pOwogICAgfSkpLCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgbWl4aWFTbmlmZihuKTsKICAgIH0pLCAxMDApKTsKICB9CiAgZnVuY3Rpb24gaW5zZXJ0UGxheWVySHRtbCgpIHsKICAgIGxldCBuID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMF0gPyBhcmd1bWVudHNbMF0gOiAiIjsKICAgIGNvbnN0IG8gPSAnPGRpdiBjbGFzcz0iby0tcGxheWVyLWJnIj48ZGl2IGNsYXNzPSJvLS1zbmlmZi1wcm9ncmVzcyI+PC9kaXY+PGRpdiBjbGFzcz0iby0tbG9hZGVyIj4nLmNvbmNhdChJY29uLmxvYWRlciwgJzwvZGl2PjxkaXYgY2xhc3M9Im8tLXNpZ24iPihvy5jil6HLmG8pPHNwYW4gY2xhc3M9Im8tLXZlcnNpb24iPnYgJykuY29uY2F0KFZFUlNJT04sICc8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iby0tc2xvZ2FuIj48c3Ryb25nPuinhTwvc3Ryb25nPuWNs+efpeWQm+S4jeWPr+inge+8jOaMpeavq+eCueafk+a5luWxsTxzdHJvbmc+5b2xPC9zdHJvbmc+PC9kaXY+PGRpdiBjbGFzcz0iby0tZXJyb3ItdGV4dCI+6Kej5p6Q5aSx6LSl77yM5Y+v5Lul5bCd6K+V5L2/55So5Y2V5Liq6Kej5p6Q5pKt5pS+77yM5oiW6ICF5Yiw5YW25a6D5q2j54mI572R56uZ5LiK6Kej5p6QPC9kaXY+PC9kaXY+JyksIGUgPSAnPGRpdiBjbGFzcz0iby0tcGxheWVyIj4nLmNvbmNhdChvKS5jb25jYXQobiwgIjwvZGl2PiIpLCBpID0gZ2V0VmlwUGxheWVyKCk7CiAgICBpLmxlbmd0aCA+IDAgJiYgKGkuZW1wdHkoKS5hcHBlbmQoZSksICQoIi5vLS1wbGF5ZXIiKS5wYXJlbnQoKS5hZGRDbGFzcygiby0tcGxheWVyLWJveCIpKTsKICB9CiAgZnVuY3Rpb24gc25pZmYobikgewogICAgaWYgKGxvZygic25pZmYgLyBpc0FsbG93U25pZmYgIi5jb25jYXQoaXNBbGxvd1NuaWZmID8gIuKclCIgOiAiw5ciKSksIHNuaWZmU3RhcnQoKSwKICAgIGlzQWxsb3dJZnJhbWVTbmlmZikgbG9nKCJfU25pZmYiKSwgX1NuaWZmKCk7IGVsc2UgaWYgKGlzQWxsb3dIaWtlclNuaWZmKSBsb2coImhpa2VyU25pZmYiKSwKICAgIGhpa2VyU25pZmYobik7IGVsc2UgewogICAgICBpZiAoIWlzQWxsb3dNaXhpYVNuaWZmKSByZXR1cm4gdm9pZCBzbmlmZkRvbmUoKTsKICAgICAgbG9nKCJtaXhpYVNuaWZmIiksIG1peGlhU25pZmYobik7CiAgICB9CiAgICBjb25zdCBvID0gJzxkaXYgY2xhc3M9Im8tLXZpcC1wbGF5IGlzLWhpZGUiPjxkaXYgY2xhc3M9Im8tLXNvdXJjZXMiPjwvZGl2PjxkaXYgY2xhc3M9Im8tLXBsYXktdXJsIj48L2Rpdj48L2Rpdj4nOwogICAgaW5zZXJ0UGxheWVySHRtbChpc01vYmlsZSA/ICIiIDogbyksIGlzTW9iaWxlICYmICgkKCIuby0tdmlwLXBsYXkiKS5yZW1vdmUoKSwgJCgiLm8tLXZpcC1wYW5lbCIpLmFmdGVyKG8pKSwKICAgIHBhdXNlUGxheSgpLCBzbmlmZlVybHMgPSBbXSwgc25pZmZUaW1lcyA9IHt9LCBnb1NuaWZmKCk7CiAgfQogIGZ1bmN0aW9uIGdvU25pZmYoKSB7CiAgICBmdW5jdGlvbiBuKCkgewogICAgICBjb25zdCBlID0gJCgib28taWZyYW1lcyA+IGlmcmFtZSIpLmxlbmd0aDsKICAgICAgaWYgKGUgPiBwIC0gMSkgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgbigpOwogICAgICB9KSwgMTAwKTsgZWxzZSB7CiAgICAgICAgY29uc3QgbiA9IHBsYXllciAmJiBwbGF5ZXIucmVhZHkgJiYgcGxheWVyLmR1cmF0aW9uID4gMCA/IDIwMCAqIGUgOiAwLCBpID0gZSA8IHAgLSAyID8gaXNNb2JpbGUgPyBNYXRoLm1pbigxNTAgKiBzbmlmZlVybHMubGVuZ3RoICsgMTUwICogZSArIDgwMCwgMTIwMCkgOiBNYXRoLm1pbigxNTAgKiBzbmlmZlVybHMubGVuZ3RoICsgMjAwICogZSArIDFlMywgMTUwMCkgOiAxNTA7CiAgICAgICAgbG9nKCJbIi5jb25jYXQobyArIDEsICJdIG5leHRTbmlmZlRpbWU6ICIpLmNvbmNhdChpKSksIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgZ29TbmlmZihvICsgMSk7CiAgICAgICAgfSksIGkgKyBuKTsKICAgICAgfQogICAgfQogICAgbGV0IG8gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSA/IGFyZ3VtZW50c1swXSA6IDA7CiAgICBpZiAoIWlzU25pZmZpbmcpIHJldHVybjsKICAgIGNvbnN0IGUgPSBWVVtvXSwgaSA9IChvICsgMSkgLyAoVlUubGVuZ3RoICsgMSksIHQgPSAoc25pZmZVcmxzLmxlbmd0aCArIDEpIC8gTUFYX1NOSUZGX1BMQVlfQ09VTlQsIGEgPSBNYXRoLm1pbigxMCAqICgyLjUgKiBpICsgMi41ICogdCArIDUgKiBNYXRoLm1heChpLCB0KSArIC41KSwgOTkpLnRvRml4ZWQoNCkgKyAiJSI7CiAgICBpZiAobG9nKCLjgJAiLmNvbmNhdChvLCAiIC0gIikuY29uY2F0KGEsICIgKHRocmVhZCAiKS5jb25jYXQoJCgib28taWZyYW1lcyA+IGlmcmFtZSIpLmxlbmd0aCwgIinjgJFnb1NuaWZmOiIpLCBlKSwKICAgICQoIi5vLS1zbmlmZi1wcm9ncmVzcyIpLmNzcyh7CiAgICAgIHdpZHRoOiBhCiAgICB9KSwgIWUpIHsKICAgICAgY29uc3QgbiA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAwID09PSAkKCJvby1pZnJhbWVzID4gaWZyYW1lIikubGVuZ3RoICYmIChjbGVhckludGVydmFsKG4pLCAwID09PSBzbmlmZlVybHMubGVuZ3RoID8gc25pZmZGYWlsKCkgOiBzbmlmZkRvbmUoKSk7CiAgICAgIH0pLCAxZTMpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoc25pZmZVcmxzLmxlbmd0aCA+PSBNQVhfU05JRkZfUExBWV9DT1VOVCArIChwbGF5ZXIgJiYgcGxheWVyLnJlYWR5ICYmIHBsYXllci5kdXJhdGlvbiA+IDAgPyAtMSA6IDIpKSByZXR1cm4gdm9pZCBzbmlmZkRvbmUoKTsKICAgIGNvbnN0IHIgPSBnZXRWaXBUYXJnZXRVcmwoKSwgbCA9IG1WVShlKSArIHI7CiAgICBsb2coInNuaWZmOiAiICsgbCksIHNuaWZmVGltZXNbZml4SWZyYW1lVXJsKGwpXSA9IERhdGUubm93KCk7CiAgICBjb25zdCBzID0gYWRkSWZyYW1lKGwpLCBjID0gMTJlMywgcCA9IGlzTW9iaWxlID8gNyA6IDU7CiAgICBzLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICByZW1vdmVJZnJhbWUocywgIlRJTUVPVVQiKTsKICAgICAgfSksIGMpOwogICAgfSwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgIHJlbW92ZUlmcmFtZShzLCAiTUFYIFRJTUVPVVQiKTsKICAgIH0pLCBjICsgM2UzKSwgbigpOwogIH0KICBhc3luYyBmdW5jdGlvbiBhdXRvU25pZmZQbGF5KCkgewogICAgbG9nKCJhdXRvU25pZmZQbGF5IiksIGF3YWl0IHBsYXlCZWZvcmUoKSwgc25pZmZUaWNrID4gMCAmJiBzbmlmZkRvbmUoKSwgc25pZmZTdGFydFRpbWUgPSBEYXRlLm5vdygpLAogICAgc25pZmYoKytzbmlmZlRpY2spLCAkKCIuby0tdmlwIikucmVtb3ZlQ2xhc3MoImlzLXNuaWZmLXN1Y2Nlc3MgaXMtc25pZmYtZG9uZSIpLmFkZENsYXNzKCJpcy1zbmlmZmluZyIpOwogIH0KICBmdW5jdGlvbiBnZXRWaXBQbGF5ZXIoKSB7CiAgICBsZXQgbiA9ICQoUGxheWVyU2VsZWN0b3IpLmVxKDApOwogICAgcmV0dXJuIDAgPT09IG4ubGVuZ3RoICYmIChuID0gJCgiI3BsYXllciwgLnBsYXllciIpLmVxKDApKSwgbjsKICB9CiAgZnVuY3Rpb24gcGxheUluUGFnZShuKSB7CiAgICAkKCIuby0tcGxheWVyIikucmVtb3ZlQ2xhc3MoImlzLWxvYWRlZCIpLCAwID09PSBnZXRWaXBQbGF5ZXIoKS5sZW5ndGggPyBsb2NhdGlvbi5ocmVmID0gbiA6IChwYXVzZVBsYXkoKSwKICAgIGluc2VydFBsYXllckh0bWwoJzxpZnJhbWUgaWQ9Im8tLXBsYXllci1pZnJhbWUiIHN0eWxlPSInLmNvbmNhdCgid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgYm9yZGVyOiBub25lOyBvdXRsaW5lOiBub25lOyIsICciICcpLmNvbmNhdCgnIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGFsbG93ZnVsbHNjcmVlbj0idHJ1ZSIgYWxsb3d0cmFuc3BhcmVuY3k9InRydWUiIGZyYW1lYm9yZGVyPSIwIiBzY3JvbGxpbmc9Im5vIiBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luIGFsbG93LWZvcm1zIicsICcgc3JjPSInKS5jb25jYXQobiwgJyI+PC9pZnJhbWU+JykpKSwKICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAkKCIuby0tcGxheWVyIikuYWRkQ2xhc3MoImlzLWxvYWRlZCIpOwogICAgfSksIDE1MDApOwogIH0KICBmdW5jdGlvbiBwbGF5VmlwVXJsKG4pIHsKICAgIGlmICghbikgcmV0dXJuIHZvaWQgbG9nKCJbcGxheVZpcFVybF0gTm8gdmlwVXJsOiIsIG4pOwogICAgY29uc3QgbyA9IG4gKyBnZXRWaXBUYXJnZXRVcmwoKTsKICAgIGxvZygicGxheVZpcFVybDogIiArIG8pLCAkKCIuby0tdmlwIikucmVtb3ZlQ2xhc3MoImlzLXNuaWZmLXN1Y2Nlc3MgaXMtc25pZmYtZG9uZSBpcy1zbmlmZmluZyIpLmFkZENsYXNzKCJpcy1wbGF5LWluLXBhZ2UiKSwKICAgIHVwZGF0ZVFyY29kZShvKSwgaXNQbGF5aW5nSW5QYWdlICYmICEvaHR0cDovLnRlc3QobikgPyBwbGF5SW5QYWdlKG8pIDogKHBhdXNlUGxheSgpLAogICAgJCgiI28tLXBsYXllci1pZnJhbWUiKS5yZW1vdmUoKSwgJCgiLm8tLXBsYXllciIpLnJlbW92ZUNsYXNzKCJpcy1sb2FkZWQiKSwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgIHdpbmRvdy5vcGVuKG8sICJfYmxhbmsiKTsKICAgIH0pLCAxMDApKTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUXJjb2RlKCkgewogICAgbGV0IHVybCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdID8gYXJndW1lbnRzWzBdIDogSHJlZjsKICAgIGlzTW9iaWxlIHx8IChsb2coInVwZGF0ZVFyY29kZToiLCB1cmwpLCAhcXJjb2RlQ29kZSAmJiAocXJjb2RlQ29kZSA9IGF3YWl0IGZldGNoQ2RuVXJsKCIvcXJjb2RlLWdlbmVyYXRvci8xLjQuNC9xcmNvZGUubWluLmpzIikpLAogICAgZXZhbChxcmNvZGVDb2RlKSwgUVIgPSBxcmNvZGUoMCwgIkwiKSwgUVIuYWRkRGF0YSh1cmwpLCBRUi5tYWtlKCksIGxvZygidXBkYXRlUXJjb2RlIHN1Y2Nlc3MiKSwKICAgICQoIi5vLS1xcmNvZGUtYm94IikucmVtb3ZlQ2xhc3MoIm8tLWhpZGUiKSwgJCgiLm8tLXFyY29kZSIpLmh0bWwoUVIuY3JlYXRlSW1nVGFnKCkpKTsKICB9CiAgZnVuY3Rpb24gcGxheVZpcEl0ZW0obikgewogICAgY29uc3QgbyA9ICQobikubGVuZ3RoID4gMDsKICAgIGxldCBlID0gbyA/ICQobikuaGFzQ2xhc3MoIm8tLXZpcC1zbmlmZiIpID8gImF1dG8iIDogJChuKS5hdHRyKCJfaHJlZiIpIDogU3RvcmUuZ2V0KCJsYXN0UGxheUNob2ljZSIsICIiKTsKICAgIGxvZyhvID8gIuKclCIgOiAiw5cgcGxheVZpcEl0ZW0gLSBsYXN0UGxheUNob2ljZTogIiArIChlIHx8ICJhdXRvIikpLCAkKCIuby0tdmlwLWl0ZW0iKS5yZW1vdmVDbGFzcygiaXMtYWN0aXZlIiksCiAgICBvID8gJChuKS5hZGRDbGFzcygiaXMtYWN0aXZlIikgOiBlLnN0YXJ0c1dpdGgoImh0dHAiKSA/ICgkKCIuby0tdmlwLWl0ZW06bm90KC5vLS12aXAtc25pZmYpIikuZWFjaCgoZnVuY3Rpb24oKSB7CiAgICAgICQodGhpcykuYXR0cigiX2hyZWYiKSA9PT0gZSAmJiAkKHRoaXMpLmFkZENsYXNzKCJpcy1hY3RpdmUiKTsKICAgIH0pKSwgcGxheVZpcFVybChlKSkgOiAkKCIuby0tdmlwLWl0ZW0uby0tdmlwLXNuaWZmIikuYWRkQ2xhc3MoImlzLWFjdGl2ZSIpLCBpc1NuaWZmaW5nICYmIHNuaWZmRG9uZSgpLAogICAgZS5zdGFydHNXaXRoKCJodHRwIikgPyBwbGF5VmlwVXJsKGUpIDogYXV0b1NuaWZmUGxheSgpLCBTdG9yZS5zZXQoImxhc3RQbGF5Q2hvaWNlIiwgZSk7CiAgfQogIGZ1bmN0aW9uIGluc2VydFZpcFNvdXJjZShuKSB7CiAgICBmdW5jdGlvbiBvKCkgewogICAgICAkKCIuby0tc2V0dGluZy1idXR0b24iKS5vZmYoImNsaWNrIikub24oImNsaWNrIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICQoIi5vLS12aXAiKS50b2dnbGVDbGFzcygiaXMtc2V0dGluZy1vbiIpOwogICAgICB9KSksICQoIi5vLS10b2dnbGUiKS5vZmYoImNsaWNrIikub24oImNsaWNrIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoImlzLW4iKSwgJCh0aGlzKS5oYXNDbGFzcygiby0tYWN0aW9uLXBpcCIpICYmIChpc1BsYXlpbmdJblBhZ2UgPSAhaXNQbGF5aW5nSW5QYWdlLAogICAgICAgIEdsb2JhbFN0b3JlLnNldCgiaXNQbGF5aW5nSW5QYWdlIiwgaXNQbGF5aW5nSW5QYWdlKSk7CiAgICAgIH0pKSwgJCgiLm8tLWVkaXQtdmlwLXNvdXJjZS1wYW5lbCB0ZXh0YXJlYSIpLm9mZigiaW5wdXQiKS5vbigiaW5wdXQiLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgR2xvYmFsU3RvcmUuc2V0KCJWaXBVcmxzIiwgJCh0aGlzKS52YWwoKSk7CiAgICAgIH0pKSwgJCgiLm8tLXZpcC1pdGVtIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsIChmdW5jdGlvbigpIHsKICAgICAgICBwbGF5VmlwSXRlbSh0aGlzKTsKICAgICAgfSkpLCAkKCIuby0tbG9nLWJ1dHRvbiIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgJCgib28tbG9ncyIpLnRvZ2dsZUNsYXNzKCJpcy1hY3RpdmUiKTsKICAgICAgfSkpOwogICAgfQogICAgbGV0IGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6ICJhZnRlciIsIGkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSA/IGFyZ3VtZW50c1syXSA6IDA7CiAgICBpZiAoJCgiLm8tLXZpcCIpLmxlbmd0aCA+IDAgfHwgaSA+IDIwKSByZXR1cm47CiAgICBjb25zdCB0ID0gJChuKTsKICAgIGlmICgwID09PSB0Lmxlbmd0aCkgcmV0dXJuIHZvaWQgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgIGluc2VydFZpcFNvdXJjZShuLCBlLCBpICsgMSk7CiAgICB9KSwgMjUwKTsKICAgIGxvZygiaW5zZXJ0VmlwU291cmNlIiksIHQuZXEoMClbZV0oJzxkaXYgY2xhc3M9Im8tLXZpcCcuY29uY2F0KGlzQWxsb3dTbmlmZiA/ICIgaXMtYWxsb3ctc25pZmYiIDogIiIsICciPjxkaXYgY2xhc3M9Im8tLXNuaWZmLXByb2dyZXNzIj48L2Rpdj48ZGl2IGNsYXNzPSJvLS12aXAtcGFuZWwiPjxkaXYgY2xhc3M9Im8tLXZpcC10aXRsZSI+PHNwYW4gY2xhc3M9Im8tLXZpcC10aXRsZS10ZXh0Ij4nKS5jb25jYXQoUExVR0lOX05BTUUsICc8c3BhbiBjbGFzcz0iby0tdmlwLXNtYWxsIj52JykuY29uY2F0KFZFUlNJT04sICI8L3NwYW4+PC9zcGFuPiIpLmNvbmNhdChfRCA/ICc8c3BhbiBjbGFzcz0iby0tbG9nLWJ1dHRvbiI+TE9HPC9zcGFuPicgOiAiIiwgJzwvZGl2PjxkaXYgY2xhc3M9Im8tLW1lbnVzIj48ZGl2IGNsYXNzPSJvLS1xcmNvZGUtYm94IG8tLWhpZGUiPicpLmNvbmNhdChJY29uLnFyY29kZSwgJzxkaXYgY2xhc3M9Im8tLXFyY29kZS10ZXh0Ij7miYvmnLrmiavnoIHnnIs8L2Rpdj48ZGl2IGNsYXNzPSJvLS1xcmNvZGUiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im8tLXNldHRpbmctYnV0dG9uIj4nKS5jb25jYXQoSWNvbi5zZXR0aW5ncywgJzwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im8tLXNldHRpbmctcGFuZWwiPjxkaXYgY2xhc3M9Im8tLWFjdGlvbnMiPjxkaXYgY2xhc3M9Im8tLWFjdGlvbiBvLS10b2dnbGUgby0tYWN0aW9uLXBpcCcpLmNvbmNhdChpc1BsYXlpbmdJblBhZ2UgPyAiIiA6ICIgaXMtbiIsICciPjxzcGFuIGNsYXNzPSJvLS15Ij7mmK88L3NwYW4+PHNwYW4gY2xhc3M9Im8tLW4iPuWQpjwvc3Bhbj7lvIDlkK/ljp/nvZHpobXop6PmnpDmkq3mlL48L2Rpdj48ZGl2IGNsYXNzPSJvLS1hY3Rpb24iPjxhIGhyZWY9Imh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvc2NyaXB0cy8zOTMyODQiIHRhcmdldD0iX2JsYW5rIj7msrnnjLTlnLDlnYA8L2E+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iby0tZWRpdC12aXAtc291cmNlLXBhbmVsIj48ZGl2IGNsYXNzPSJvLS1lZGl0LWhpbnQiPue8lui+keWQju+8jOWIt+aWsOmhtemdoueUn+aViO+8jOa4heepuuS8muaBouWkjeS4uum7mOiupO+8iOWOn+e9kemhteino+aekOWPquaUr+aMgSBodHRwcyDlvIDlpLTnmoTop6PmnpDvvIk8L2Rpdj48dGV4dGFyZWE+JykuY29uY2F0KGN1c3RvbVZpcFVybHMudHJpbSgpLCAnPC90ZXh0YXJlYT48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJvLS12aXAtbGlzdCI+PHNwYW4gY2xhc3M9Im8tLXZpcC1pdGVtIG8tLXZpcC1zbmlmZiI+JykuY29uY2F0KEljb24udmlwLCAiPC9zcGFuPiIpLmNvbmNhdCh2aXBVcmxzLm1hcCgoZnVuY3Rpb24obikgewogICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJvLS12aXAtaXRlbScgKyAobi51cmwuc3RhcnRzV2l0aCgiaHR0cHMiKSA/ICIgaXMtcGxheS1pbi1wYWdlIiA6ICIiKSArICciIF9ocmVmPSInICsgbi51cmwgKyAnIj4nICsgbi5uYW1lICsgIjwvc3Bhbj4iOwogICAgfSkpLmpvaW4oIiIpLCAiPC9kaXY+PC9kaXY+IikpOwogICAgbGV0IGEgPSAwLCByID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICBvKCksIGErKyA+IDEwMCAmJiBjbGVhckludGVydmFsKHIpOwogICAgfSksIE1hdGgubWluKDIwMCArIDUwICogYSwgMWUzKSk7CiAgfQogIGZ1bmN0aW9uIGV4ZWNRdWlja0FkZG9ucyhuKSB7CiAgICBsb2coImV4ZWNRdWlja0FkZG9uczoiLCBuLm5hbWUgfHwgbi5tYXRjaCk7CiAgICBsZXQgbyA9IFNUWUxFUzsKICAgIG4uaGlkZSAmJiAobyArPSAiIi5jb25jYXQobi5oaWRlLCAiIHsiKS5jb25jYXQoUHVyaWZ5U3R5bGUsICJ9IikpLCBuLmNzcyAmJiAobyArPSBuLmNzcyksCiAgICBhZGRDc3MobyksICQoKGZ1bmN0aW9uKCkgewogICAgICBpZiAobi5zaWduICYmICQobi5zaWduKS5odG1sKE9PX1NJR04pLCBuLnZpcCAmJiAoYWRkSWZyYW1lKFBsYXllckNvdmVyKSwgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCAoZnVuY3Rpb24obikgewogICAgICAgIGNvbnN0IG8gPSBuLmRhdGE7CiAgICAgICAgIW8gfHwgby5faWQgIT09IE1FU1NBR0VfSUQgfHwgKGxvZygibWVzc2FnZToiLCBNRVNTQUdFX0lELCBvKSwgby5hY3Rpb24gJiYgRS5lbWl0KG8uYWN0aW9uLCBvKSk7CiAgICAgIH0pKSwgImJvb2xlYW4iICE9IHR5cGVvZiBuLnZpcCkpIHsKICAgICAgICAoQXJyYXkuaXNBcnJheShuLnZpcCkgPyBuLnZpcCA6IFsgbi52aXAgXSkuZm9yRWFjaCgoZnVuY3Rpb24obikgewogICAgICAgICAgaW5zZXJ0VmlwU291cmNlKChuID0gbi5zcGxpdCgvXHMqXHxccyovKSlbMF0sIG5bMV0pOwogICAgICAgIH0pKTsKICAgICAgfQogICAgICBuLmpzIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgbi5qcygpOwogICAgfSkpOwogIH0KICBmdW5jdGlvbiBmaXhJZnJhbWVVcmwobikgewogICAgcmV0dXJuIG4ucmVwbGFjZSgvXC8/XD8uKy8sICIiKTsKICB9CiAgZnVuY3Rpb24gZ2V0SWZyYW1lSWQobikgewogICAgcmV0dXJuIGlmcmFtZXNbZml4SWZyYW1lVXJsKG4pXTsKICB9CiAgZnVuY3Rpb24gZ2V0SWZyYW1lKG4pIHsKICAgIHJldHVybiBmcmFtZXNbZml4SWZyYW1lVXJsKG4pXTsKICB9CiAgZnVuY3Rpb24gc2V0SWZyYW1lKG4sIG8pIHsKICAgIGlmcmFtZXNbZml4SWZyYW1lVXJsKG4pXSA9IG87CiAgfQogIGZ1bmN0aW9uIGFkZElmcmFtZShuKSB7CiAgICBsZXQgbyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogIm9vLWlmcmFtZXMiOwogICAgbG9nKCJhZGRJZnJhbWU6IiwgbiwgInwiLCBvKTsKICAgIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKICAgIHJldHVybiBlLmlkID0gdXVpZCgpLCBlLmZyYW1lYm9yZGVyID0gIjAiLCBlLnNjcm9sbGluZyA9ICJubyIsIGUuc2VhbWxlc3MgPSAhMCwKICAgIGUuc2FuZGJveCA9ICJhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luIGFsbG93LWZvcm1zIiwgbiAmJiAoZS5zcmMgPSBuLCBzZXRJZnJhbWUobiwgZS5pZCkpLAogICAgJChvKS5hcHBlbmQoZSksIGU7CiAgfQogIGZ1bmN0aW9uIHJlbW92ZUlmcmFtZSgpIHsKICAgIGxldCBuID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMF0gPyBhcmd1bWVudHNbMF0gOiAib28taWZyYW1lcyA+IGlmcmFtZSIsIG8gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHZvaWQgMDsKICAgIGNvbnN0IGUgPSAkKCJzdHJpbmciID09IHR5cGVvZiBuID8gbi5zdGFydHNXaXRoKCJvby1pZnJhbWVzIikgPyBuIDogIiMiICsgbiA6IG4uaWQgPyAiIyIgKyBuLmlkIDogbikuZ2V0KDApOwogICAgZSAmJiAobG9nKCJSZW1vdmUgaWZyYW1lICMiLmNvbmNhdChlLmlkLCAiICgiKS5jb25jYXQoZS5zcmMsICIpIikgKyAobyA/ICLjgJAiLmNvbmNhdChvLCAi44CRIikgOiAiIikpLAogICAgZS5zcmMgPSAiYWJvdXQ6YmxhbmsiLCAkKGUpLnJlbW92ZSgpKTsKICB9CiAgZnVuY3Rpb24gZW1wdHlJZnJhbWVzKCkgewogICAgJCgib28taWZyYW1lcyA+IGlmcmFtZSIpLmVhY2goKGZ1bmN0aW9uKG4sIG8pIHsKICAgICAgcmVtb3ZlSWZyYW1lKG8pOwogICAgfSkpLCAkKCJvby1pZnJhbWVzIikuZW1wdHkoKTsKICB9CiAgZnVuY3Rpb24gdXJsRGV0ZWN0b3IoKSB7CiAgICBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICFmdW5jdGlvbigpIHsKICAgICAgICBpZiAoSHJlZiAhPT0gd2luZG93LmxvY2F0aW9uLmhyZWYpIHsKICAgICAgICAgIGNvbnN0IG4gPSBIcmVmOwogICAgICAgICAgSHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLCBFLmVtaXQoInVybC5jaGFuZ2UiLCB7CiAgICAgICAgICAgIG5ld1VybDogSHJlZiwKICAgICAgICAgICAgb2xkVXJsOiBuCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0oKTsKICAgIH0pLCAyNTApOwogIH0KICBmdW5jdGlvbiBmaXhNM3U4UGxheWluZygpIHsKICAgIGxvZygiZml4TTN1OFBsYXlpbmciKTsKICAgIGNvbnN0IG4gPSBEYXRlLm5vdygpOwogICAgbGV0IG87CiAgICBjb25zdCBlID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICBjb25zdCBpID0gRGF0ZS5ub3coKSAtIG47CiAgICAgIChvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidmlkZW9bc3JjXSIpKSAmJiBvLnNyYy5lbmRzV2l0aCgiLm0zdTgiKSA/IChjbGVhckludGVydmFsKGUpLAogICAgICBzZXRUaW1lb3V0KChhc3luYyBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoMCA9PT0gby5yZWFkeVN0YXRlKSB7CiAgICAgICAgICBjb25zdCBuID0gZ2V0R2xvYmFsKCJIbHMiKTsKICAgICAgICAgIGlmICghbiAmJiBhd2FpdCBhZGRKcygiL2hscy5qcy8wLjEzLjIvaGxzLm1pbi5qcyIpLCBuLmlzU3VwcG9ydGVkKCkpIHsKICAgICAgICAgICAgby5wYXVzZSgpOwogICAgICAgICAgICBjb25zdCBlID0gbmV3IG47CiAgICAgICAgICAgIGUubG9hZFNvdXJjZShvLnNyYyksIGUuYXR0YWNoTWVkaWEobyksIGUub24obi5FdmVudHMuTUFOSUZFU1RfUEFSU0VELCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgby5wbGF5KCk7CiAgICAgICAgICAgIH0pKSwgaXNOb3RUb3AgPyB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgICBfaWQ6IE1FU1NBR0VfSUQsCiAgICAgICAgICAgICAgYWN0aW9uOiAibG9nIiwKICAgICAgICAgICAgICBmcm9tOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgICAgIG9yaWdpbjogbG9jYXRpb24uaHJlZiwKICAgICAgICAgICAgICB1cmw6IG8uc3JjLAogICAgICAgICAgICAgIHBhcmVudDogITAsCiAgICAgICAgICAgICAgdGV4dDogIkZpeCBtM3U4IHBsYXkiCiAgICAgICAgICAgIH0sICIqIikgOiBsb2coewogICAgICAgICAgICAgIGZyb206IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgICAgICAgb3JpZ2luOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgICAgIHVybDogby5zcmMsCiAgICAgICAgICAgICAgdGV4dDogIkZpeCBtM3U4IHBsYXkiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSksIDFlMykpIDogaSA+PSAxNWUzICYmIGNsZWFySW50ZXJ2YWwoZSk7CiAgICB9KSwgMTAwKTsKICB9CiAgZnVuY3Rpb24gc25pZmZJbklmcmFtZShuKSB7CiAgICBsb2coInNuaWZmSW5JZnJhbWUiKSwgbG9jYXRpb24uaHJlZiA9PT0gUGxheWVyQ292ZXIgJiYgd2luZG93LnRvcC5wb3N0TWVzc2FnZSh7CiAgICAgIHBhZ2VJbmZvOiBuLAogICAgICBfaWQ6IE1FU1NBR0VfSUQsCiAgICAgIGFjdGlvbjogImVuYWJsZS5zbmlmZiIsCiAgICAgIGZyb206IGxvY2F0aW9uLmhyZWYKICAgIH0sICIqIiksIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgY29uc3QgbyA9IG4uZGF0YTsKICAgICAgIW8gfHwgby5faWQgIT09IE1FU1NBR0VfSUQgfHwgKGxvZygiaWZyYW1lIG1lc3NhZ2U6IiwgTUVTU0FHRV9JRCwgbyksIG8ucGFyZW50ICYmIChvLmZyb20gPSBsb2NhdGlvbi5ocmVmLAogICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKG8sICIqIikpKTsKICAgIH0pKTsKICAgIGNvbnN0IG8gPSBEYXRlLm5vdygpLCBlID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICBjb25zdCBpID0gRGF0ZS5ub3coKSAtIG87CiAgICAgIGlmICgkKCJ2aWRlbyBzb3VyY2Vbc3JjXSwgdmlkZW9bc3JjXSIpLmxlbmd0aCA+IDApIHsKICAgICAgICBjbGVhckludGVydmFsKGUpLCAkKCJ2aWRlbywgYXVkaW8iKS5lYWNoKChmdW5jdGlvbihuLCBvKSB7CiAgICAgICAgICBjb25zdCBlID0gby5tdXRlZDsKICAgICAgICAgIG8ubXV0ZWQgPSAhMDsKICAgICAgICAgIGNvbnN0IGkgPSBEYXRlLm5vdygpLCB0ID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBjb25zdCBuID0gRGF0ZS5ub3coKSAtIGk7CiAgICAgICAgICAgIG8ubXV0ZWQgPSAhMCwgby5wYXVzZSgpLCBuID4gNGUzID8gKGNsZWFySW50ZXJ2YWwodCksIG8ubXV0ZWQgPSBlKSA6IG8ubXV0ZWQgPSAhMDsKICAgICAgICAgIH0pLCA2MCk7CiAgICAgICAgfSkpOwogICAgICAgIGNvbnN0IG8gPSAkKCJ2aWRlbyBzb3VyY2Vbc3JjXSIpLmVxKDApLmF0dHIoInNyYyIpIHx8ICQoInZpZGVvW3NyY10iKS5lcSgwKS5hdHRyKCJzcmMiKSB8fCAiIjsKICAgICAgICByZXR1cm4gL15cL1teXC9dLy50ZXN0KG8pICYmIChvID0gbG9jYXRpb24ub3JpZ2luICsgbyksIHZvaWQgKGlzVmFsaWRWaWRlb1VybChvKSA/IHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoewogICAgICAgICAgcGFnZUluZm86IG4sCiAgICAgICAgICB1c2VkVGltZTogaSwKICAgICAgICAgIF9pZDogTUVTU0FHRV9JRCwKICAgICAgICAgIGFjdGlvbjogInBsYXkudmlkZW8iLAogICAgICAgICAgZnJvbTogbG9jYXRpb24uaHJlZiwKICAgICAgICAgIG9yaWdpbjogbG9jYXRpb24uaHJlZiwKICAgICAgICAgIHVybDogbywKICAgICAgICAgIHBhcmVudDogITAKICAgICAgICB9LCAiKiIpIDogd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7CiAgICAgICAgICBwYWdlSW5mbzogbiwKICAgICAgICAgIHVzZWRUaW1lOiBpLAogICAgICAgICAgdGV4dDogIk5PVCBNQVRDSCBWSURFTyBVUkwiLAogICAgICAgICAgX2lkOiBNRVNTQUdFX0lELAogICAgICAgICAgYWN0aW9uOiAibG9nIiwKICAgICAgICAgIGZyb206IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgICBvcmlnaW46IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgICB1cmw6IG8sCiAgICAgICAgICBwYXJlbnQ6ICEwCiAgICAgICAgfSwgIioiKSk7CiAgICAgIH0KICAgICAgY29uc3QgdCA9ICQoImlmcmFtZVtzcmNdIikubGVuZ3RoID4gMDsKICAgICAgaWYgKGkgPj0gNGUzICYmIHQpIHJldHVybiB2b2lkIGNsZWFySW50ZXJ2YWwoZSk7CiAgICAgIGNvbnN0IGEgPSAkKCJ2aWRlbyIpLmxlbmd0aCA+IDA7CiAgICAgIChpID49IDFlNCB8fCBpID49IDJlMyAmJiBhKSAmJiAoY2xlYXJJbnRlcnZhbChlKSwgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7CiAgICAgICAgcGFnZUluZm86IG4sCiAgICAgICAgdXNlZFRpbWU6IGksCiAgICAgICAgaGFzVmlkZW86IGEsCiAgICAgICAgaGFzSWZyYW1lOiB0LAogICAgICAgIF9pZDogTUVTU0FHRV9JRCwKICAgICAgICBhY3Rpb246ICJzbmlmZi5mYWlsIiwKICAgICAgICBmcm9tOiBsb2NhdGlvbi5ocmVmLAogICAgICAgIG9yaWdpbjogbG9jYXRpb24uaHJlZiwKICAgICAgICBwYXJlbnQ6ICEwCiAgICAgIH0sICIqIikpOwogICAgfSksIDEwMCk7CiAgfQogIGZ1bmN0aW9uIGFkZG9uR28oKSB7CiAgICBCRVRURVJfQURET05TLmZvckVhY2goKGZ1bmN0aW9uKG4pIHsKICAgICAgSXMobi5tYXRjaCkgJiYgZXhlY1F1aWNrQWRkb25zKG4pOwogICAgfSkpOwogIH0KICBjb25zdCBpc1RvcCA9IHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmLCBpc05vdFRvcCA9ICFpc1RvcCwgX0QgPSAhMSwgT09fU0lHTiA9ICIob8uY4pehy5hvKSIsIFBMVUdJTl9JRCA9ICIob8uY4pehy5hvKSDop4XlvbEiLCBQTFVHSU5fQVRUUiA9ICJtaXlpbmciLCBQTFVHSU5fTkFNRSA9ICLop4XlvbEiLCBWRVJTSU9OID0gIjIwLjMuMzIiLCBpc0dNID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIEdNICYmICJ1bmRlZmluZWQiICE9IHR5cGVvZiB1bnNhZmVXaW5kb3c7CiAgaWYgKGlzVG9wICYmIC92d2VjYW0udGMucXEuY29tfFwudGl0YW4ubWd0di5jb20vLnRlc3QobG9jYXRpb24uaHJlZikgJiYgIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInZpZGVvIikpIHJldHVybiBsb2NhdGlvbi5yZWxvYWQoKTsKICBjb25zdCBIVE1MID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImh0bWwiKVswXTsKICBpZiAoSFRNTC5nZXRBdHRyaWJ1dGUoUExVR0lOX0FUVFIpID09PSBQTFVHSU5fSUQpIHJldHVybjsKICBIVE1MLnNldEF0dHJpYnV0ZShQTFVHSU5fQVRUUiwgUExVR0lOX0lEKTsKICBjb25zdCBNQVhfWl9JTkRFWCA9IDIxNDc0ODM2NDcsIEJFVFRFUl9BRERPTlMgPSBbIHsKICAgIG5hbWU6ICLohb7orq/Ct+aSreaUvumhtSIsCiAgICBtYXRjaDogL3ZcLnFxXC5jb21cLyhjb3ZlcnxwbGF5fHhcL2NvdmVyfHhcL3BhZ2V8eFwvcGxheXx4XC9tXC9jb3Zlcnx4XC9tXC9wYWdlfHhcL21cL3BsYXkpLywKICAgIHZpcDogIiN2aXBfdGl0bGUsIC5VX2JveF9iZ19hLCAucGxheWVyX2hlYWRsaW5lLCAubW9kX3ZpZGVvX2luZm8iLAogICAgdGl0bGU6ICIubW9kX3ZpZGVvX2luZm8gLnZpZGVvX3RpdGxlLCAuX21haW5fdGl0bGUsIC5wbGF5ZXJfdGl0bGUiLAogICAgZml4VXJsKG4pIHsKICAgICAgaWYgKG4uaW5jbHVkZXMoImNpZD0iKSkgewogICAgICAgIGNvbnN0IG8gPSBuLm1hdGNoKC9jaWQ9KFx3KykvKVsxXTsKICAgICAgICBsZXQgZSA9IG4ubWF0Y2goL3ZpZD0oXHcrKS8pOwogICAgICAgIHJldHVybiBlID0gZSA/ICIvIiArIGVbMV0gOiAiIiwgImh0dHBzOi8vdi5xcS5jb20veC9jb3Zlci8iLmNvbmNhdChvKS5jb25jYXQoZSwgIi5odG1sIik7CiAgICAgIH0KICAgICAgcmV0dXJuIG4uaW5jbHVkZXMoIi94L2NvdmVyIikgPyBuLnJlcGxhY2UoL1wuaHRtbC4qLywgIi5odG1sIikgOiBuOwogICAgfSwKICAgIGhpZGU6ICcubW9kX3NvdXJjZSwgLnZpZGVvX2Z1bmN0aW9uLCAubW9kX3Byb21vdGlvbiwgI3ZpcF9wcml2aWxlZ2UsICN2aXBfYWN0aXZpdHksIC5VX2JnX2IsIC5idG5fb3Blbl92LCAuYnRuX29wZW5hcHAsICN2aXBfaGVhZGVyLCAuYnRuX3VzZXJfaGQsIC5tb2Rfc2lkZXNsaXBfcHJpdmlsZWdlcywgLm1vZF9nYW1lX3JlYywgLm1vZF9zb3VyY2UsIC5tb2RfcHJvbW90aW9uLCAubW9kX3NpZGVzbGlwX2gsIC5idG5fb3BlbiwgLmJ0bl9wYXksIC5tb2RfYm94X2xhc3R2aWV3LCAubW9kX3ZpcF9wb3B1cCwgLm1vZF92aXBfcG9wdXAgKyAubWFza19sYXllciwgdHhwZGl2W2RhdGEtcm9sZT0iaGQtYWQtYWRhcHRlci1pbnRlcmFjdGl2ZWxheWVyIl0sIC5tb2RfYWQnLAogICAgY3NzOiAiYm9keSwgI3ZpcF90aXRsZSB7cGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDt9Lm1vZF9lcGlzb2Rlc19udW1iZXJzLmlzLXZpcCAuaXRlbSB7d2lkdGg6IGF1dG87cGFkZGluZzogMCAxZW07fS5VX2h0bWxfYmcgLmNvbnRhaW5lciB7cGFkZGluZy1ib3R0b206IDMwcHg7fS5tb2RfcGxheSAubW9kX3BsYXllcl92aXB0aXBzIC5idG5fdHJ5IHtsZWZ0OiAzMCU7fSIKICB9LCB7CiAgICBuYW1lOiAi54ix5aWH6Im6wrfmkq3mlL7pobUiLAogICAgbWF0Y2g6IC9cLmlxaXlpXC5jb21cL3ZfLywKICAgIHZpcDogJ2RpdltuYW1lPSJtLXZpZGVvSW5mbyJdLCAjYmxvY2stQycsCiAgICB0aXRsZTogIiN3aWRnZXQtdmlkZW90aXRsZSwgLnZpZGVvLXRpdGxlLCAuYy10aXRsZS1saW5rLCAucGxheWVyLXRpdGxlIGEiLAogICAgZml4VXJsOiAhMCwKICAgIHNpZ246ICIubS1mb290ZXIiLAogICAgaGlkZTogJy5tLWlxeURvd24sIC5oZWFkZXItbG9naW4gKyBkaXYsIC5tLXZpZGVvLWFjdGlvbiwgZGl2W25hbWU9Im0tdmlwUmlnaHRzIl0sIGRpdltuYW1lPSJtLWV4dGVuZEJhciJdLCAubS1pcXlsaW5rLWRpdmVyc2lvbiwgLm0taXF5bGluay1ndWlkZSwgLmMtb3BlblZpcCwgLmMtc2NvcmUtYnRuLCAubS12aWRlb1VzZXItc3BhY2luZywgLm0tcHAtZW50cmFuY2UsIC5tLWhvdFdvcmRzLWJvdHRvbSwgZGl2W3RlbXBsYXRlLXR5cGU9IkFMQlVNIl0gLm0tcGxheWVyLXRpcCwgLmlxcC1ib3gtaW50ZWdyYWwsIGJvZHkgPiBkaXZbc3R5bGVdJywKICAgIGNzczogJ1xuLnBhZ2VfcGxheSB7cGFkZGluZy1ib3R0b206IDA7fWRpdltuYW1lPSJtLXZpZGVvSW5mbyJdIHtwYWRkaW5nLXRvcDogMWVtO30ubS1ib3gtaXRlbXMgLm8tLWFsYnVtLWl0ZW0ge2JvcmRlci1yYWRpdXM6IDAuMDVlbTtiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO2NvbG9yOiAjNDk1MDU3O3BhZGRpbmc6IDAuNWVtIDFlbTtkaXNwbGF5OiBpbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjthbGlnbi1pdGVtczogY2VudGVyO21hcmdpbjogMC4yNWVtO2ZvbnQtd2VpZ2h0OiBib2xkO30ubS12aWRlby1wbGF5ZXIgI28tLXBsYXllci1pZnJhbWUge3BhZGRpbmctdG9wOiA1Ni4yNSU7dG9wOiA1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO30ucXktaGVhZGVyIC5oZWFkZXItd3JhcCB7ei1pbmRleDogJy5jb25jYXQoTUFYX1pfSU5ERVgsICI7fSIpLAogICAganMoKSB7CiAgICAgIGxvZygi5L+u5aSN54ix5aWH6Im66YCJ6ZuGIik7CiAgICAgIGxldCBuID0gW10sIG8gPSAoJCgnW25hbWU9ImFwcGxlLWl0dW5lcy1hcHAiXScpLmF0dHIoImNvbnRlbnQiKSB8fCAiIikubWF0Y2goL2FpZD1cZHsyLH0vKTsKICAgICAgaWYgKG8pIHsKICAgICAgICBmZXRjaCgiaHR0cHM6Ly9wY3ctYXBpLmlxaXlpLmNvbS9hbGJ1bXMvYWxidW0vYXZsaXN0aW5mbz9wYWdlPTEmc2l6ZT05OTk5JiIgKyBvWzBdKS50aGVuKChmdW5jdGlvbihuKSB7CiAgICAgICAgICByZXR1cm4gbi5qc29uKCk7CiAgICAgICAgfSkpLnRoZW4oKGZ1bmN0aW9uKG8pIHsKICAgICAgICAgIG4gPSBvLmRhdGEuZXBzb2RlbGlzdDsKICAgICAgICB9KSk7CiAgICAgICAgbGV0IGUgPSAwOwogICAgICAgIHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgIGxldCBvID0gTnVtYmVyKCQoIi5xeS1lcGlzb2RlLW51bSAuc2VsZWN0LWl0ZW0uc2VsZWN0ZWQgLnNlbGVjdC1saW5rIikudGV4dCgpIHx8IDApOwogICAgICAgICAgaWYgKG8gJiYgbyAhPT0gZSkgewogICAgICAgICAgICBsb2coImNoYW5nZSBlcGlzb2RlIG51bTogIi5jb25jYXQoZSwgIiDihpIgIikuY29uY2F0KG8pKSwgZSA9IG87CiAgICAgICAgICAgIGxldCBpID0gbltlIC0gMV07CiAgICAgICAgICAgIGlmIChpKSB7CiAgICAgICAgICAgICAgbGV0IG4gPSBpLnBsYXlVcmwucmVwbGFjZSgvaHR0cHM/Oi8sIGxvY2F0aW9uLnByb3RvY29sKTsKICAgICAgICAgICAgICBpZiAobiAhPT0gb29QbGF5VXJsKSB7CiAgICAgICAgICAgICAgICBjb25zdCBvID0gb29QbGF5VXJsIHx8IGxvY2F0aW9uLmhyZWY7CiAgICAgICAgICAgICAgICBvb1BsYXlVcmwgPSBuLCBsb2coImNoYW5nZSBlcGlzb2RlIHRvOiIsIG4pLCBFLmVtaXQoInVybC5jaGFuZ2UiLCB7CiAgICAgICAgICAgICAgICAgIG9sZFVybDogbywKICAgICAgICAgICAgICAgICAgbmV3VXJsOiBuLAogICAgICAgICAgICAgICAgICBhdXRvUGxheTogITAKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pLCAxMDApOwogICAgICB9CiAgICB9CiAgfSwgewogICAgbmFtZTogIuS8mOmFt8K35pKt5pS+6aG1IiwKICAgIG1hdGNoOiAvbVwueW91a3VcLmNvbVwvYXxtXC55b3VrdVwuY29tXC92fHZcLnlvdWt1XC5jb21cL3ZfLywKICAgIHZpcDogIi5oNS1kZXRhaWwtaW5mbywgLnBsYXllci10aXRsZSIsCiAgICB0aXRsZTogIi5wbGF5ZXItdGl0bGUgLnN1YnRpdGxlIGEsIC5tb2R1bGUtbmFtZSwgLmFudGhvbG9neS10aXRsZS13cmFwIC50aXRsZSwgLnRpdGxlLWxpbmsiLAogICAgZml4VXJsOiAhMCwKICAgIHNpZ246ICIuY29weXJpZ2h0IiwKICAgIGhpZGU6ICIuaDUtZGV0YWlsLWd1aWRlLCAuaDUtZGV0YWlsLWFkLCAuYnJpZWYtYnRtLCAuc21hcnRCYW5uZXJCdG4sIC5jbXQtdXNlci1hY3Rpb24sICNyaWdodC10aXRsZS1hZC1iYW5uZXIsIC5Db3JuZXItY29udGFpbmVyIiwKICAgIGNzczogIiNicG1vZHVsZS1wbGF5cGFnZS1sZWZ0dGl0bGUge2hlaWdodDogYXV0byAhaW1wb3J0YW50O30iCiAgfSwgewogICAgbmFtZTogIuWcn+ixhsK35pKt5pS+6aG1IiwKICAgIG1hdGNoOiAvXC50dWRvdS5jb21cL3ZcLy8sCiAgICB2aXA6ICIucGxheS12aWRlby1kZXNjLCAudGQtcGxheV9fYmFzZWluZm8iLAogICAgdGl0bGU6ICIudGQtbGlzdGJveF9fdGl0bGUsIC52aWRlby1kZXNjLXRpdGxlIiwKICAgIGZpeFVybDogITAsCiAgICBoaWRlOiAiLnZpZGVvLXBsYXllci10b3BiYXIsIC50ZC1oNV9fcGxheWVyX19hcHBndWlkZSwgI3R1ZG91LWZvb3RlciwgLmRyb3Bkb3duX19wYW5lbF9fY29uIgogIH0sIHsKICAgIG5hbWU6ICLoipLmnpzCt+aSreaUvumhtSIsCiAgICBtYXRjaDogL1wubWd0dlwuY29tXC8oYnxsKVwvLywKICAgIHZpcDogWyAiLnh1YW5qaSB8IGJlZm9yZSIsICIudi1wYW5lbC1ib3giIF0sCiAgICB0aXRsZTogIi52LXBhbmVsLXRpdGxlLCAudnQtdHh0IiwKICAgIGZpeFVybDogITAsCiAgICBzaWduOiAiLm1nLWZvb3Rlci1jb3B5cmlnaHQiLAogICAgaGlkZTogIi5hZC1iYW5uZXIsIC52aWRlby1hcmVhLWJhciwgLnZpZGVvLWVycm9yIC5idG4sIC5tLXZpcC1saXN0LCAubS12aXAtbGlzdCArIGRpdjpub3QoW2NsYXNzXSksIC50b2FwcCwgLnZpZGVvLWNvbW1lbnQgLmZ0LCAubWctYXBwLXN3aXAiCiAgfSwgewogICAgbmFtZTogIuaQnOeLkMK35pKt5pS+6aG1IiwKICAgIG1hdGNoOiAvZmlsbVwuc29odVwuY29tXC9hbGJ1bVwvfHR2XC5zb2h1XC5jb21cLyh2fHBob25lX3BsYXlfZmlsbXxcZCtcL25cZCsuc2h0bWwpLywKICAgIHZpcDogIi50aXRsZS13cmFwLCAudmlkZW9JbmZvLCAudHctaW5mbywgLnBsYXllci1kZXRhaWwsIC5tb3ZpZS1pbmZvLWNvbnRlbnQiLAogICAgdGl0bGU6ICIjdmluZm9ib3ggaDIsIC50LWluZm8sIC5tb3ZpZS10IGgzIiwKICAgIGZpeFVybChuKSB7CiAgICAgIGlmICgvcGhvbmVfcGxheV9maWxtLitjaGFubmVsZWQ9Ly50ZXN0KG4pKSB7CiAgICAgICAgY29uc3QgbyA9IG4ubWF0Y2goL2NoYW5uZWxlZD0oXHcrKS8pWzFdLCBlID0gbi5tYXRjaCgvYWlkPShcdyspLylbMV07CiAgICAgICAgcmV0dXJuICJodHRwczovL2ZpbG0uc29odS5jb20vYWxidW0vIi5jb25jYXQoZSwgIi5odG1sP2NoYW5uZWxlZD0iKS5jb25jYXQobyk7CiAgICAgIH0KICAgICAgcmV0dXJuIG47CiAgICB9LAogICAgc2lnbjogIi5saW5rcyIsCiAgICBoaWRlOiAiLmFjdHYtYmFubmVyLCAuYnRuLXh6LWFwcCwgLnR3aW5mb19pY29ud3JhcCwgLmJ0bi1jb21tZW50LWFwcCwgI2FkX2Jhbm5lciwgLmFkdmVydGlzZSwgLm1haW4tYWQtdmlldy1ib3gsIC5mb290LnNvaHUtc3dpcGVyLCAuYXBwLXN0YXItdmJveCwgLmFwcC1ndWVzcy12Ym94LCAubWFpbi1yZWMtdmlldy1ib3gsIC5hcHAtcWlhbmZhbi1ib3gsIC5jb21tZW50LWVtcHR5LWJnLCAuY29weWluZm8sIC5waC12Ym94LCAuYnRuX21fYWN0aW9uLCAuYnRuLXh6LWFwcCwgI2ZpbG1fdG9wX2Jhbm5lciwgLmJ0bi1jb21tZW50LWFwcCIsCiAgICBjc3M6ICIuY29tbWVudC1lbXB0eS10eHQge21hcmdpbi1ib3R0b206IDA7fS5hcHAtdmlldy1ib3ggKyBmb290ZXIge3BhZGRpbmc6IDA7b3BhY2l0eTogMC41O30jc29odXBsYXllciAjbWVudSB7ei1pbmRleDogIi5jb25jYXQoTUFYX1pfSU5ERVgsICI7fSIpCiAgfSwgewogICAgbmFtZTogIuS5kOinhsK35pKt5pS+6aG1IiwKICAgIG1hdGNoOiAvXC5sZVwuY29tXC8ocHR2XC92cGxheVwvfHZwbGF5XykvLAogICAgdmlwOiAiLmludHJvZHVjdGlvbl9ib3gsIC5icmllZkludHJvX2xlZnQgLmluZm9fbGlzdCIsCiAgICB0aXRsZTogIi5icmllZkludHJvX2luZm8gLmluZm9fdGl0LCAjai1pbnRyb2R1Y3Rpb24gaDIiLAogICAgZml4VXJsOiAhMCwKICAgIGhpZGU6ICIuZ2FtZVByb21vdGlvbiwgLmdhbWVQcm9tb3Rpb25UeHQsICNqLWxlYXBwTW9yZSwgLmxiekRhb2xpdSwgLmFya0JveCIKICB9LCB7CiAgICBuYW1lOiAi5ZKq5ZKVwrfmkq3mlL7pobUiLAogICAgbWF0Y2g6IC9taWd1dmlkZW9cLmNvbVwvLitcL2RldGFpbFwuaHRtbC8sCiAgICB2aXA6ICIucGxheWVyRm9vdGVyLCAucHJvZ3JhbWdyb3VwIiwKICAgIHRpdGxlOiAiLmxlZnQtYm94IC50aXRsZSwgLmVwaXNvZGVUaXRsZSwgLnZpZGVvX3RpdGxlIiwKICAgIGhpZGU6ICcuZ3JvdXAtaXRlbVtuYW1lKj0i5bm/5ZGKIl0sIC5vcGVuQ2xpZW50JwogIH0sIHsKICAgIG5hbWU6ICJQUFRWwrfmkq3mlL7pobUiLAogICAgbWF0Y2g6IC8odnxtKVwucHB0dlwuY29tXC9zaG93XC8vLAogICAgdmlwOiAiLm0gLmNmLCAudm9kLXRpdCwgLnZvZC1pbnRvciIsCiAgICB0aXRsZTogIiN2aWRlby1pbmZvIGgxLCAudm9kLXRpdC1pbiBzcGFuLCAudGl0IiwKICAgIGZpeFVybDogITAsCiAgICBoaWRlOiAnLnctdmlkZW8tdmFzdGFkLCAjdmlkZW8tZG93bmxvYWQtZ2FtZSwgZGl2W2NsYXNzKj0ib3BlbmFwcCJdLCBkaXZbY2xhc3MqPSJzaWRlLWFkdiJdLCBkaXZbaWQqPSJhZnBfIl0sIGRpdltpZCo9Ii1hZnAiXSwgaWZyYW1lW3NyYyo9Ii9nYW1lLyJdLCAuYWZwUG9zaXRpb24sIC5kb3dubG9hZC1pY29uYmFyJwogIH0sIHsKICAgIG5hbWU6ICLljY7mlbDCt+aSreaUvumhtSIsCiAgICBtYXRjaDogL3dhc3VcLmNuXC8uKltwUF1sYXlcL3Nob3dcLy8sCiAgICB2aXA6ICIubW92aWVfdGl0bGUiLAogICAgdGl0bGU6ICIubW92aWVfdGl0bGUgaDIiLAogICAgZml4VXJsOiAhMCwKICAgIGhpZGU6ICdkaXZbaWQqPSJCQUlEVSJdLCAucGxheWVyX21lbnVfY29uLCBib2R5ID4gZGl2W3N0eWxlKj0iZml4ZWQiXScKICB9LCB7CiAgICBuYW1lOiAiMTkwNcK35pKt5pS+6aG1IiwKICAgIG1hdGNoOiAvMTkwNS5jb21cL3BsYXkvLAogICAgdmlwOiAiLnBsYXllckJveC1pbmZvLCAjbW92aWVfaW5mbywgLnBsYXllci1uYXYiLAogICAgdGl0bGU6ICIjbW92aWVfaW5mbyAuaW5mb0lubmVyIC50aXRsZSwgLm1vdmllLXRpdGxlLCAudHZfdGl0bGUiLAogICAgZml4VXJsOiAhMCwKICAgIGhpZGU6ICIjYXBwX3N0b3JlLCAub3Blbk1lbWJlcnNoaXBCdG4sIGJvZHkgPiBkaXZbaWRdID4gaWZyYW1lLCAucHYyLWFkdmVydGlzZW1lbnQsIC5vcGVuLWFwcCIsCiAgICBjc3M6ICIjbW92aWVfaW5mbyB7bWFyZ2luLXRvcDogMWVtO30iCiAgfSBdLCBQdXJpZnlTdHlsZSA9ICJkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7dmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7d2lkdGg6IDAgIWltcG9ydGFudDtoZWlnaHQ6IDAgIWltcG9ydGFudDttYXgtd2lkdGg6IDAgIWltcG9ydGFudDttYXgtaGVpZ2h0OiAwICFpbXBvcnRhbnQ7b3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O3Bvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O2xlZnQ6IC05OTk5OXB4ICFpbXBvcnRhbnQ7b3BhY2l0eTogMCAhaW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7IiwgREVGQVVMVF9WVSA9ICJqb2Iud2lhOS5tZCx4eHgub3lmb2wubWTCt2p3ZmppLHdpLmRzeGtmLm5wZMK3b2p1LHdpLmZqY21ibGoubWTCt2p3ZmppLGU4M2p6Lm1kwrdvanXCt29qdS4sd2kudXNqenVwei5ucGQsd2kuZmdkYmsuZm7Ct2RkLGpvYi56dDk2Lm1kLHh4eC51a2V3bS5ucGQsd2kuMjJhYi5vcHPCt29qdSx3aS5wYmFobWJqd2htanoubWTCt29qdS4sandmamkubDE5Mi5ucGQsandmamkuaGo3bmEubWQseHh4LmgxODE5Lm1kwrdqd2ZqaSx3aWxwLmRkLHdpLjE5MDExMS5vcHPCt3dpLHh4eC5qd2ZqaXVobWJvLmRkwrdqd2ZqaS4sb2p1Lm11enBiaS5ucGTCt3dmY21qLixqb2IuMTM4dXMubnBkwrd3aSx3aS4wZWUwLm1kLGpvYi43dS5zYmdkLHpia28uNjhwZS5tZCxqb2IuMTM0MjQ3Lm9wc8K3b2p1LGp3ZmppLjAwOTA2MS5kZMK3d2kuLGpvYi5qd2ZqaS5iayx4eHgubXZ6NjA2MC5ucGTCt3dpwrd6cy4sd2kuaWxrcXYubnBkLHdpLnh6ejg4Lm5wZCx2LmZqaXBiYW5tLm5wZMK3anFobWpuwrdqcWhtam4uLHdpLjk0bmwub3Bzwrd3aSx3aS5oOTA3Lm5wZCxmMTc3Lm5wZCx6by4zMGJnLnl6d8K3dHB0wrd3ZmNtai4sam9iLndpMi5vcHPCt29qdSx4eHguanRwYmpjdy5ucGTCt29qdSx2LmhtcHRqZ3ltYmQubWTCt3YuLHh4eC45djJuemJrby5tZMK3andmamkuLHpvLjMwYmcueXp3wrd0cHTCt3dmY21qLix3aS5jemQ2Lm5wZCx4eHgudWJuencubnBkLGJiYnJpLm5wZMK3d2kuLGpvYi53aWhtYmprZnZ6Lm5wZCIsIFBsYXllclNlbGVjdG9yID0gIiNpZnJhbWFXcmFwcGVyLCAjbWd0di1wbGF5ZXItd3JhcCwgI3NvaHVwbGF5ZXIgLngtcGxheWVyLCAjd1BsYXllciwgI3ZpZGVvLWJveCwgI3BsYXllcmJveCwgLnRkLWg1X19wbGF5ZXIsIC50ZC1wbGF5Ym94LCAuaXFwLXBsYXllciwgLmctcGxheSAudmlkZW8tYXJlYSwgI21vZF9wbGF5ZXIsICNwbGF5Qm94LCAjai1wbGF5ZXIsICN2aWRlbywgLm0tdmlkZW8tcGxheWVyLCAuc2l0ZV9wbGF5ZXIiLCBWaXBVcmxzID0gIuWuieatjCBodHRwczovL3oxLm0xOTA3LmNuLz9qeD1cbuiDnOiTnSBodHRwczovLzEyM2Rhbi50b3AvamllL3hpP3VybD1cbuW3p+minCBodHRwczovL2p4LmZ1eGluZzU2LmNvbS9qaWV4aS8/dXJsPVxu5pmv5LqRIGh0dHBzOi8vd3d3LjE3MTd5dW4uY29tL2JlaXlvbmcvP3VybD1cbue/vOmBpSBodHRwczovL3ZpcC5tcG9zLnJlbi92Lz91cmw9XG7ljZrooY0gaHR0cHM6Ly9qeC5md3dteTEuY24vbWluZ3JpL21pbmdfdi5waHA/dXJsPVxu5LmQ5bq3IGh0dHBzOi8vanguc2luYmluY2hpbmEuY29tLz92PVxu5pav5bm0IGh0dHBzOi8vYXBpLml6dHl5LmNvbS9qaWV4aS8/dXJsPVxu5Y2X5LmUIGh0dHBzOi8vYnkuZHliaG4uY29tLz91cmw9XG7mnJvoiJIgaHR0cHM6Ly92LmR5YmhuLmNvbS9pbmRleC5waHA/dXJsPVxu5YWw6YeHIGh0dHBzOi8vd3d3LmNrbW92LnZpcC9hcGkucGhwP3VybD1cbuS/oeefsyBodHRwOi8vYXQ1MjAuY24vangvP3VybD1cbuWHjOaziSBodHRwOi8vYmVpaml4cy5jbi8/dXJsPVxu56eL5qGRIGh0dHA6Ly9wbGF5eC50b3AvP3VybD1cbumjjuiXpCBodHRwOi8vYm9mYW5nLm9ubGluZS8/dXJsPVxu6JC96JG1IGh0dHA6Ly9hcGkuNnV6aS5jb20vP3VybD1cbuWkqeWGrCBodHRwOi8vbml0aWFuOS5jb20vP3VybD1cbuaWh+eruSBodHRwOi8vYXBpLm9vcHcudG9wL2ppZXhpLz91cmw9XG7ntKvoipkgaHR0cDovL21pbWlqaWV4aS50b3AvP3VybD0iLCBQbGF5ZXJDb3ZlciA9ICJodHRwczovL3AucHN0YXRwLmNvbS9vcmlnaW4vZmY0NjAwMDBmNTMwNjgzMDlkNzciOwogIGxldCBIcmVmID0gbG9jYXRpb24uaHJlZiwgb29Mb2dzRG9tOwogIGlmIChJcygvY29va2llLmh0bWwvKSB8fCBJcygvbVwubGVcLmNvbS8pICYmIElzTm90KC9tLmxlLmNvbVwvc2VhcmNofHNvLmxlLmNvbVwvc3xcLmxlXC5jb21cLyhwdHZcL3ZwbGF5XC98dnBsYXlfKS8pKSByZXR1cm47CiAgY29uc3QgY2hhclRvTnVtID0gZnVuY3Rpb24obikgewogICAgcmV0dXJuIG4uY2hhckNvZGVBdCgwKSAtIDk3OwogIH0sIG51bVRvQ2hhciA9IGZ1bmN0aW9uKG4pIHsKICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3ICsgbik7CiAgfSwgbWFnaWNOdW1iZXIgPSBmdW5jdGlvbihuKSB7CiAgICByZXR1cm4gTnVtYmVyKG4pICsgKG4gJSAyID09IDEgPyAtMSA6IDEpOwogIH0sIG1hZ2ljTGV0dGVyID0gZnVuY3Rpb24obikgewogICAgcmV0dXJuIG51bVRvQ2hhcihtYWdpY051bWJlcihjaGFyVG9OdW0obikpKTsKICB9LCBtYWdpY0NoYXIgPSBmdW5jdGlvbihuKSB7CiAgICByZXR1cm4gL1thLXpdLy50ZXN0KG4pID8gbWFnaWNMZXR0ZXIobikgOiAvXGQvLnRlc3QobikgPyBtYWdpY051bWJlcihuKSA6ICIiOwogIH0sIG1hZ2ljU3RyaW5nID0gZnVuY3Rpb24obikgewogICAgcmV0dXJuIG4uc3BsaXQoIiIpLnJldmVyc2UoKS5tYXAoKGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIG1hZ2ljQ2hhcihuKTsKICAgIH0pKS5qb2luKCIiKTsKICB9LCBzY3JlZW5XaWR0aCA9IHdpbmRvdy5zY3JlZW4ud2lkdGgsIGlzTW9iaWxlID0gc2NyZWVuV2lkdGggPD0gNjAwIHx8IC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAhMSwgc3RvcmVQcmVmaXggPSAi6KeF5b2xLiIsIFN0b3JlID0gewogICAgZ2V0KG4pIHsKICAgICAgbGV0IG8gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IG51bGwsIGUgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmVQcmVmaXggKyBuKTsKICAgICAgdHJ5IHsKICAgICAgICBlID0gSlNPTi5wYXJzZShlKTsKICAgICAgfSBjYXRjaCAobikge30KICAgICAgcmV0dXJuIG51bGwgPT09IGUgPyBvIDogZTsKICAgIH0sCiAgICBzZXQobikgewogICAgICBsZXQgbyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogbnVsbDsKICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHN0b3JlUHJlZml4ICsgbiwgSlNPTi5zdHJpbmdpZnkobykpOwogICAgfSwKICAgIHJlbW92ZShuKSB7CiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShzdG9yZVByZWZpeCArIG4pOwogICAgfQogIH0sIEdsb2JhbFN0b3JlID0gewogICAgZ2V0KG4pIHsKICAgICAgbGV0IG8gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IG51bGwsIGUgPSBTdG9yZS5nZXQobik7CiAgICAgIGlmICghaXNHTSkgcmV0dXJuIGUgfHwgbzsKICAgICAgbnVsbCA9PT0gZSA/IGUgPSBHTV9nZXRWYWx1ZShzdG9yZVByZWZpeCArIG4sIG8pIDogKEdsb2JhbFN0b3JlLnNldChuLCBlKSwgU3RvcmUucmVtb3ZlKG4pKTsKICAgICAgdHJ5IHsKICAgICAgICBlID0gSlNPTi5wYXJzZShlKTsKICAgICAgfSBjYXRjaCAobikge30KICAgICAgcmV0dXJuIG51bGwgPT09IGUgPyBvIDogZTsKICAgIH0sCiAgICBzZXQobikgewogICAgICBsZXQgbyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogbnVsbDsKICAgICAgaXNHTSA/IEdNX3NldFZhbHVlKHN0b3JlUHJlZml4ICsgbiwgSlNPTi5zdHJpbmdpZnkobykpIDogU3RvcmUuc2V0KG4sIG8pOwogICAgfSwKICAgIHJlbW92ZShuKSB7CiAgICAgIGlzR00gPyBHTV9kZWxldGVWYWx1ZShuKSA6IFN0b3JlLnJlbW92ZShuKTsKICAgIH0KICB9LCBWVSA9IERFRkFVTFRfVlUucmVwbGFjZSgvwrcvZywgIi8iKS5zcGxpdCgiLCIpLCBOb01vYmlsZVZpcFVybFJlZ2V4ID0gL2p4XC53c2xtZlwuY29tfGJlaWppeHNcLmNuLywgY3VzdG9tVmlwVXJscyA9IChHbG9iYWxTdG9yZS5nZXQoIlZpcFVybHMiKSB8fCAiIikudHJpbSgpIHx8IFZpcFVybHMsIHZpcFVybHMgPSBlbnN1cmVBcnJheShjdXN0b21WaXBVcmxzKS5tYXAoKGZ1bmN0aW9uKG4pIHsKICAgIGxldCBvID0gbi5zcGxpdCgvXHMrLyk7CiAgICBpZiAoIShuID0gby5wb3AoKSkuaW5jbHVkZXMoImh0dHAiKSkgcmV0dXJuIHt9OwogICAgbGV0IGUgPSBvLmxlbmd0aCA+IDAgPyBvLmpvaW4oIiAiKSA6IG4ubWF0Y2goL1wvXC8oLitcLik/KFteXC9dKylcLlx3K1wvLylbMl0ucmVwbGFjZSgvXihcdykvLCAoZnVuY3Rpb24obikgewogICAgICByZXR1cm4gbi50b1VwcGVyQ2FzZSgpOwogICAgfSkpOwogICAgcmV0dXJuIHsKICAgICAgdXJsOiBuLAogICAgICBuYW1lOiBlCiAgICB9OwogIH0pKS5maWx0ZXIoKGZ1bmN0aW9uKG4pIHsKICAgIHJldHVybiBuLnVybCAmJiAoIWlzTW9iaWxlIHx8ICFOb01vYmlsZVZpcFVybFJlZ2V4LnRlc3Qobi51cmwpKTsKICB9KSksIGlzVmlwVXJsUmVnZXggPSB0b1VybFJlZ2V4KHZpcFVybHMubWFwKChmdW5jdGlvbihuKSB7CiAgICByZXR1cm4gbi51cmw7CiAgfSkpKTsKICBhd2FpdCBhZGRKcygiL2pxdWVyeS8zLjQuMS9qcXVlcnkubWluLmpzIik7CiAgY29uc3QgJCA9IGpRdWVyeS5ub0NvbmZsaWN0KCEwKSwgRSA9IGVtaXR0ZXIoKTsKICBsb2coIuKclCBMb2FkZWQgIiArIFBMVUdJTl9OQU1FICsgIiB2IiArIFZFUlNJT04sIHsKICAgIGlzTW9iaWxlOiBpc01vYmlsZSwKICAgIGlzR006IGlzR00sCiAgICB1cmw6IEhyZWYKICB9KTsKICBsZXQgdG9wQ2xhc3MgPSBpc01vYmlsZSA/ICJvLS1tIiA6ICJvLS1wYyI7CiAgJCgiaHRtbCIpLmFkZENsYXNzKHRvcENsYXNzKTsKICBsZXQgb29QbGF5VXJsID0gIiI7CiAgY29uc3QgaGFzVW5zYWZlV2luZG93ID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIHVuc2FmZVdpbmRvdywgTUFYX1NOSUZGX1BMQVlfQ09VTlQgPSAxMDsKICBsZXQgaXNBbGxvd0lmcmFtZVNuaWZmID0gR2xvYmFsU3RvcmUuZ2V0KCJpc0FsbG93SWZyYW1lU25pZmYiKSB8fCAhMTsKICBjb25zdCBpc0hpa2VyID0gISF3aW5kb3cuZnlfYnJpZGdlX2FwcCwgaXNNaXhpYSA9ICEhd2luZG93Lm14X2Jyb3dzZXJfb2JqLCBpc0FsbG93SGlrZXJTbmlmZiA9IGlzSGlrZXIgJiYgISF3aW5kb3cuZnlfYnJpZGdlX2FwcC5nZXROZXR3b3JrUmVjb3JkcywgaXNBbGxvd01peGlhU25pZmYgPSBpc01peGlhICYmICEhd2luZG93Lm14X2Jyb3dzZXJfb2JqLmdldHdlYmxvZzsKICBsZXQgaXNBbGxvd1NuaWZmID0gaXNBbGxvd0hpa2VyU25pZmYgfHwgaXNBbGxvd01peGlhU25pZmYgfHwgaXNBbGxvd0lmcmFtZVNuaWZmLCBzbmlmZlRpbWVzdGFtcCA9IERhdGUubm93KCksIGlzU25pZmZpbmcgPSAhMSwgc25pZmZUaWNrID0gMCwgc25pZmZVcmxzID0gW10sIHNuaWZmVXJsc0tleSA9IFtdLCBpc1BsYXlpbmdJblBhZ2UgPSBHbG9iYWxTdG9yZS5nZXQoImlzUGxheWluZ0luUGFnZSIpIHx8ICFpc01vYmlsZTsKICBjb25zdCBpc0ludmFsaWRTbmlmZlVybFJlZ2V4ID0gL2J0cmFjZS52aWRlby5xcS5jb218cXpvbmVzdHlsZS5ndGltZy5jbnxpbWcuYmFpZHUuY29tfGRwbGF5ZXJcL1x3Ky5tcDR8dmlwLmZ3d215MS5jbnx2d2VjYW0uZ3RpbWcuY29tfGNvbS10LWlxaXlpLmNvbXxoejE4OWNsb3VkLm9vcy1oei5jdHl1bmFwaS5jbnwodGl0YW4ubWd0di5jb20pLisubTN1OHxcL1wvXC8vLCBpc1ZhbGlkVXJsUmVnZXggPSAvXihodHRwfFwvXC8pLywgaXNPbmx5RG93bmxvYWRWaWRlb1VybFJlZ2V4ID0gLy50aXRhbi5tZ3R2LmNvbS8sIGlzVmlkZW9VcmxSZWdleCA9IC9cLihtcDR8bTN1OHwzZ3B8d212fGZsdnxhdml8cm12YnxtNHZ8dHMpfG0zdThwbGF5LnBocC8sIHNob3J0VmlkZW9VcmxSZWdleCA9IC9cL1wvKFteXC9dKylcLyguKlwvKT8oW15cL10rKVwuKG1wNHxtM3U4fDNncHx3bXZ8Zmx2fGF2aXxybXZifG00dnx0cykvLCBzaG9ydFZpZGVvVXJsTG9zZVJlZ2V4ID0gL1wvXC8oW15cL10rKVwvKC4qW15cL10pXC8/KG1wNHxtM3U4fDNncHx3bXZ8Zmx2fGF2aXxybXZifG00dnx0cykvLCBNRVNTQUdFX0lEID0gT09fU0lHTjsKICBsZXQgaXNMb2FkUGxheWVyID0gITEsIHBsYXllciwgc25pZmZUaW1lcyA9IHt9LCBzbmlmZlN0YXJ0VGltZSA9IERhdGUubm93KCksIFFSID0gIiIsIHFyY29kZUNvZGUgPSAiIjsKICBjb25zdCBpZnJhbWVzID0ge307CiAgaWYgKEUub24oInVybC5jaGFuZ2UiLCAoZnVuY3Rpb24obikgewogICAgbGV0IHtvbGRVcmw6IG8sIG5ld1VybDogZSwgYXV0b1BsYXk6IGl9ID0gbjsKICAgIGxvZygidXJsRGV0ZWN0b3I6ICIuY29uY2F0KG8sICIg4oaSICIpLmNvbmNhdChlKSk7CiAgICBjb25zdCB0ID0gQkVUVEVSX0FERE9OUy5maW5kKChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBuLnZpcCAmJiBJcyhuLm1hdGNoLCBvKTsKICAgIH0pKSwgYSA9IEJFVFRFUl9BRERPTlMuZmluZCgoZnVuY3Rpb24obikgewogICAgICByZXR1cm4gbi52aXAgJiYgSXMobi5tYXRjaCwgZSk7CiAgICB9KSk7CiAgICBsb2coInJlbG9hZCBleGVjUXVpY2tBZGRvbnMiKSwgYWRkb25HbygpLCB0ICYmIGEgJiYgKGkgPyAobG9nKCJhdXRvIHBsYXkiKSwgcGxheVZpcEl0ZW0oJCgiLm8tLXZpcC1pdGVtLmlzLWFjdGl2ZSIpKSkgOiAoc25pZmZEb25lKCksCiAgICAkKCIuby0tdmlwLWl0ZW0iKS5yZW1vdmVDbGFzcygiaXMtYWN0aXZlIikpKTsKICB9KSksIEUub24oImVuYWJsZS5zbmlmZiIsIChmdW5jdGlvbihuKSB7CiAgICBuLmZyb20gPT09IFBsYXllckNvdmVyICYmIHJlbW92ZUlmcmFtZSgpLCAhaXNBbGxvd0lmcmFtZVNuaWZmICYmIChpc0FsbG93SWZyYW1lU25pZmYgPSAhMCwKICAgIGlzQWxsb3dTbmlmZiA9ICEwLCBHbG9iYWxTdG9yZS5zZXQoImlzQWxsb3dJZnJhbWVTbmlmZiIsICEwKSwgJCgiLm8tLXZpcCIpLmFkZENsYXNzKCJpcy1hbGxvdy1zbmlmZiIpKTsKICB9KSksIEUub24oInBsYXkudmlkZW8iLCAoZnVuY3Rpb24obikgewogICAgY29uc3QgbyA9IGdldElmcmFtZUlkKG4uZnJvbSk7CiAgICBsb2coIuKclCBTbmlmZiB1cmw6ICIuY29uY2F0KG4udXJsLCAiICgiKS5jb25jYXQobi5mcm9tLCAiKSAjIikuY29uY2F0KG8sICIgLSAiKS5jb25jYXQoZ2V0U25pZmZUaW1lKG4uZnJvbSkpKSwKICAgIHJlbW92ZUlmcmFtZShvKSwgc25pZmZTdWNjZXNzKG4udXJsLCBuLmZyb20pOwogIH0pKSwgRS5vbigic25pZmYuZmFpbCIsIChmdW5jdGlvbihuKSB7CiAgICBpZiAoaXNBbGxvd1NuaWZmKSB7CiAgICAgIGNvbnN0IG8gPSBnZXRJZnJhbWVJZChuLmZyb20pOwogICAgICBsb2coIsOXIFNuaWZmIGZhaWwgdXJsOiAiLmNvbmNhdChuLm9yaWdpbiwgIiAoIikuY29uY2F0KG4uZnJvbSwgIikgIyIpLmNvbmNhdChvLCAiIC0gIikuY29uY2F0KGdldFNuaWZmVGltZShuLmZyb20pKSksCiAgICAgIHJlbW92ZUlmcmFtZShvKTsKICAgIH0KICB9KSksIEUub24oImxvZyIsIChmdW5jdGlvbihuKSB7CiAgICBsb2coIkdFVCBMT0c6Iiwgbik7CiAgfSkpLCBJcyhpc1ZpcFVybFJlZ2V4KSAmJiAobG9nKCJpc1ZpcFVybFJlZ2V4IiksIElzKC89aHR0cC8pICYmICgkKCJ0aXRsZSIpLmh0bWwoUExVR0lOX0lEKSwKICAkKChmdW5jdGlvbigpIHsKICAgIGlmICgkKCJ0aXRsZSIpLmh0bWwoUExVR0lOX0lEKSwgZml4TTN1OFBsYXlpbmcoKSwgSXMoL2JlaWppeHNcLmNuXC8vKSkgaWYgKGxvZygiYmVpaml4cy5jbiBtYXRjaCIpLAogICAgLyVcZC8udGVzdChsb2NhdGlvbi5ocmVmKSkgewogICAgICBhZGRDc3MoImJvZHkgPiBmb3JtIHtwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtsZWZ0OiAwICFpbXBvcnRhbnQ7cmlnaHQ6IDAgIWltcG9ydGFudDt0b3A6IDAgIWltcG9ydGFudDtib3R0b206IDAgIWltcG9ydGFudDtiYWNrZ3JvdW5kOiAjZWVlOGQzICFpbXBvcnRhbnQ7ei1pbmRleDogMjE0NzQ4MzY0NyAhaW1wb3J0YW50O31mb3JtICNkaXZjc3M1IHtoZWlnaHQ6IGF1dG87bWluLWhlaWdodDogOTB2aDt9Lm8tLWZhaWwge2hlaWdodDogYXV0byAhaW1wb3J0YW50O30uby0tZmFpbCA+IGRpdiB7dGV4dC1hbGlnbjogY2VudGVyO2JvcmRlci10b3A6IDFweCBzb2xpZCAjNDk1MDU3O2JvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNDk1MDU3O3BhZGRpbmc6IDFlbTtjb2xvcjogI2Q5NDgwZjtmb250LXdlaWdodDogYm9sZDtmb250LXNpemU6IDE2cHg7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjRlNjt9Lm8tLWZhaWwgPiBkaXYgPiBkaXYgKyBkaXYge21hcmdpbi10b3A6IDFlbTt9Iik7CiAgICAgIGxldCBuID0gMDsKICAgICAgY29uc3QgbyA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICBjb25zdCBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidmlkZW8iKTsKICAgICAgICBpZiAoZS5kdXJhdGlvbiA8IDM5MCkgewogICAgICAgICAgZS5wYXVzZSgpOwogICAgICAgICAgY29uc3QgbiA9ICQoIiNUZXh0Qm94MiIpLmF0dHIoInZhbHVlIikgfHwgIiI7CiAgICAgICAgICAkKCIudmlkZW8tanMiKS5hZGRDbGFzcygiby0tZmFpbCIpLmh0bWwoIjxkaXY+PGRpdj7op6PmnpDlpLHotKU8L2Rpdj4iLmNvbmNhdChuID8gIjxkaXY+IiArIG4gKyAiPC9kaXY+IiA6ICIiLCAiPC9kaXY+IikpLAogICAgICAgICAgY2xlYXJJbnRlcnZhbChvKTsKICAgICAgICB9CiAgICAgICAgbisrID4gMTAwICYmIGNsZWFySW50ZXJ2YWwobyk7CiAgICAgIH0pLCAxMDApOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgbiA9IEhyZWYuc3BsaXQoInVybD0iKVsxXTsKICAgICAgaWYgKG4pIHsKICAgICAgICAkKCIjVGV4dEJveDEiKS52YWwoZGVjb2RlVVJJKG4pKSwgbG9nKCJ2aXBVcmw6IiwgZGVjb2RlVVJJKG4pKTsKICAgICAgICBjb25zdCBvID0gJCgiI0J1dHRvbjEiKTsKICAgICAgICBvLmxlbmd0aCA+IDAgJiYgKCQoIi52aWRlby1qcyIpLmNzcygiZGlzcGxheSIsICJub25lICFpbXBvcnRhbnQiKSwgby5jbGljaygpKTsKICAgICAgfQogICAgICBsZXQgbyA9IDA7CiAgICAgIGNvbnN0IGUgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgY29uc3QgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInZpZGVvIik7CiAgICAgICAgbiAmJiBuLmR1cmF0aW9uIDwgMzYwID8gbi5wYXVzZSgpIDogbi5wbGF5KCksIG8rKyA+IDEwMCAmJiBjbGVhckludGVydmFsKGUpOwogICAgICB9KSwgMTAwKTsKICAgIH0gZWxzZSBpZiAoSXMoL20xOTA3XC5jbi8pKSB7CiAgICAgIGxvZygibTE5MDcuY24gbWF0Y2giKSwgYWRkQ3NzKCIjcy1wbGF5ZXIgKyAuc2hvdyA+IGRpdlt0aXRsZV0sI3MtY29udHJvbHMgKyBkaXYgPiBkaXY6bnRoLWNoaWxkKG4rNSk6bm90KDpsYXN0LWNoaWxkKVxueyIuY29uY2F0KFB1cmlmeVN0eWxlLCAifSIpKTsKICAgICAgbGV0IG4gPSAwOwogICAgICBjb25zdCBvID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgICgkKCIjcy1wbGF5ZXIgKyAuc2hvdyIpLmxlbmd0aCA+IDAgfHwgbisrID4gMzApICYmIChjbGVhckludGVydmFsKG8pLCAkKCIjcy1jb250cm9scyA+IGRpdiBpbWcgKyBzcGFuIikuY2xpY2soKSk7CiAgICAgIH0pLCAxMDApOwogICAgICB3aW5kb3cuYWxlcnQgPSBmdW5jdGlvbigpIHt9OwogICAgfQogIH0pKSkpLCBpc05vdFRvcCkgewogICAgaWYgKGxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIm0xOTA3IikpIHsKICAgICAgY29uc3QgbiA9IHdpbmRvdy5hbGVydDsKICAgICAgd2luZG93LmFsZXJ0ID0gZnVuY3Rpb24oKSB7fSwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgd2luZG93LmFsZXJ0ID0gbjsKICAgICAgfSksIDFlMyk7CiAgICB9CiAgICBjb25zdCBuID0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCwgbyA9IG4gPCAxMDAsIGUgPSBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCwgaSA9IHsKICAgICAgaXNTbmlmZklmcmFtZTogbywKICAgICAgZG9jVzogbiwKICAgICAgZG9jSDogZQogICAgfTsKICAgIHJldHVybiB2b2lkIChvID8gc25pZmZJbklmcmFtZShpKSA6IGZpeE0zdThQbGF5aW5nKGkpKTsKICB9CiAgbG9nKCLjgJDll4XmjqLjgJFpc0FsbG93U25pZmY6IiwgaXNBbGxvd1NuaWZmID8gIuKclCIgOiAiw5ciKSwgdXJsRGV0ZWN0b3IoKSwgJCgoZnVuY3Rpb24oKSB7CiAgICAkKCJodG1sIikuYXBwZW5kKChfRCA/ICc8b28tbG9ncyBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjwvb28tbG9ncz4nIDogIiIpICsgJzxvby1pZnJhbWVzIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW47IHBvc2l0aW9uOiBmaXhlZDsgYm90dG9tOiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTsiPjwvb28taWZyYW1lcz4nKTsKICB9KSk7CiAgY29uc3QgSWNvbiA9IHsKICAgIHZpcDogJzxzdmcgZmlsbD0iY3VycmVudENvbG9yIiB2aWV3Qm94PSIwIDAgMTggMTgiIHJvbGU9ImltZyIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xNy43MzEsNi4yN2wtMi43NzEtNC40NjRjLTAuMzMyLTAuNTM0LTAuOTA2LTAuODUyLTEuNTM4LTAuODUyaC0yLjM2NGMtMC41NTMsMC0xLDAuNDQ4LTEsMXMwLjQ0NywxLDEsMWgyLjI2MWwyLjYyOCw0LjIzMmwtNi45NTUsNy41OEwyLjA1Myw3LjE4N2wyLjYyOC00LjIzM2gyLjMzYzAuNTUyLDAsMS0wLjQ0OCwxLTFzLTAuNDQ4LTEtMS0xSDQuNTc3Yy0wLjYyMywwLTEuMjEyLDAuMzI3LTEuNTM3LDAuODUzTDAuMjY3LDYuMjcyYy0wLjQxNiwwLjY3MS0wLjM0NiwxLjUyMSwwLjE4OSwyLjEzM2w3LjQ3NSw4LjE2N2MwLjI3NSwwLjMxMywwLjY2MywwLjQ3NSwxLjA1NiwwLjQ3NWMwLjMyNCwwLDAuNjUxLTAuMTEsMC45Mi0wLjMzNmw3LjY0OC04LjMyMUMxOC4wNzcsNy43OTQsMTguMTQ4LDYuOTQzLDE3LjczMSw2LjI3eiI+PC9wYXRoPjxwYXRoIGQ9Ik00LjUxNyw2LjE2N0M0LjEwOCw2LjUzOCw0LjA3OCw3LjE3MSw0LjQ1LDcuNThsMy44MSw0LjE5YzAuMTg5LDAuMjA4LDAuNDU4LDAuMzI3LDAuNzM5LDAuMzI3YzAsMCwwLDAsMCwwYzAuMjgxLDAsMC41NS0wLjExOCwwLjczOS0wLjMyN2wzLjgxLTQuMTg0YzAuMzcyLTAuNDA5LDAuMzQzLTEuMDQxLTAuMDY2LTEuNDEzYy0wLjQwNy0wLjM3Mi0xLjAzOS0wLjM0Mi0xLjQxMiwwLjA2Nkw5LDkuNjEyTDUuOTI5LDYuMjM0QzUuNTU4LDUuODI2LDQuOTI2LDUuNzk2LDQuNTE3LDYuMTY3eiI+PC9wYXRoPjwvc3ZnPicsCiAgICBsb2FkZXI6ICc8c3ZnPjxkZWZzPjxmaWx0ZXIgaWQ9Im8tLWwtZiI+PGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VHcmFwaGljIiBzdGREZXZpYXRpb249IjIiIHJlc3VsdD0iYmx1ciIgLz48ZmVDb2xvck1hdHJpeCBpbj0iYmx1ciIgbW9kZT0ibWF0cml4IiB2YWx1ZXM9IjEgMCAwIDAgMCAgMCAxIDAgMCAwICAwIDAgMSAwIDAgIDAgMCAwIDUgLTIiIHJlc3VsdD0iZ29vZXkiIC8+PGZlQ29tcG9zaXRlIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9Imdvb2V5IiBvcGVyYXRvcj0iYXRvcCIvPjwvZmlsdGVyPjwvZGVmcz48L3N2Zz4nLAogICAgc2V0dGluZ3M6ICc8c3ZnIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Y29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIj48cGF0aCBkPSJNMTMgMiBMMTMgNiAxMSA3IDggNCA0IDggNyAxMSA2IDEzIDIgMTMgMiAxOSA2IDE5IDcgMjEgNCAyNCA4IDI4IDExIDI1IDEzIDI2IDEzIDMwIDE5IDMwIDE5IDI2IDIxIDI1IDI0IDI4IDI4IDI0IDI1IDIxIDI2IDE5IDMwIDE5IDMwIDEzIDI2IDEzIDI1IDExIDI4IDggMjQgNCAyMSA3IDE5IDYgMTkgMiBaIiAvPjxjaXJjbGUgY3g9IjE2IiBjeT0iMTYiIHI9IjQiIC8+PC9zdmc+JywKICAgIHFyY29kZTogJzxzdmcgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGQ9Ik0xNjAgMEgwdjE2MGgxNjBWMHptLTMyIDEyOEgzMlYzMmg5NnY5NnoiLz48cGF0aCBkPSJNNjQgNjRoMzJ2MzJINjR6TTM1MiAwdjE2MGgxNjBWMEgzNTJ6bTEyOCAxMjhoLTk2VjMyaDk2djk2eiIvPjxwYXRoIGQ9Ik00MTYgNjRoMzJ2MzJoLTMyek0wIDUxMmgxNjBWMzUySDB2MTYwem0zMi0xMjhoOTZ2OTZIMzJ2LTk2eiIvPjxwYXRoIGQ9Ik02NCA0MTZoMzJ2MzJINjR6TTI1NiAwaDY0djMyaC02NHpNMjU2IDEyOGgzMlY5NmgzMlY2NGgtOTZWMzJoLTMydjY0aDY0ek0xOTIgMTI4aDMydjMyaC0zMnpNMzIwIDE2MGgtMzJ2MzJoLTk2djMyaDEyOHpNMzIgMjg4aDMydi0zMkgzMnYtNjRIMHYxMjhoMzJ6TTY0IDE5MmgzMnYzMkg2NHoiLz48cGF0aCBkPSJNMTkyIDMyMGg2NHYtMzJoLTMydi0zMmgtNjR2LTY0aC0zMnY2NEg5NnY2NGgzMnYtMzJoNjR6TTI4OCAyNTZoMzJ2NjRoLTMyek0yODggMzUyaC05NnYzMmg2NHY5NmgtNjR2MzJoOTZ2LTMyaDY0di0zMmgtNjR6Ii8+PHBhdGggZD0iTTE5MiA0MTZoMzJ2MzJoLTMyek0zMjAgMzUyaDMydjY0aC0zMnpNNDgwIDQxNmgtOTZ2OTZoMzJ2LTY0aDY0eiIvPjxwYXRoIGQ9Ik00NDggNDgwaDY0djMyaC02NHpNNDgwIDM1MmgzMnYzMmgtMzJ6TTM4NCAzODRoMzJ2LTk2aC02NHYzMmgzMnpNNDQ4IDIyNGgtMzJ2LTMyaC0zMnYzMmgtMzJ2MzJoMTI4di0zMmgzMnYtMzJoLTY0ek00NDggMjg4aDY0djMyaC02NHoiLz48L3N2Zz4nCiAgfSwgX0RfU1RZTEVTID0gIm9vLWxvZ3Mge3Bvc2l0aW9uOiBmaXhlZDtib3R0b206IDA7cmlnaHQ6IDA7bWF4LWhlaWdodDogMzAwcHg7b3ZlcmZsb3cteTogc2Nyb2xsO3RleHQtYWxpZ246IHJpZ2h0O3otaW5kZXg6ICIuY29uY2F0KE1BWF9aX0lOREVYIC0gMTAsICI7ZGlzcGxheTogbm9uZTt9b28tbG9ncy5pcy1hY3RpdmUge2Rpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7fS5vLS1sb2ctbWVzc2FnZSB7ZGlzcGxheTogaW5saW5lLWJsb2NrO2JhY2tncm91bmQtY29sb3I6ICM0Q0FGNTA7Y29sb3I6ICNmZmY7cGFkZGluZzogLjI1ZW0gLjVlbTttYXJnaW4tYm90dG9tOiAuMjVlbTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O21heC13aWR0aDogODAwcHg7d29yZC1icmVhazogYnJlYWstYWxsO30uby0tbS5vLS1kZWJ1ZyB7bWF4LXdpZHRoOiA0MDBweCAhaW1wb3J0YW50O21hcmdpbjogMCBhdXRvICFpbXBvcnRhbnQ7fS5vLS1tLm8tLWRlYnVnIC5tb2RfcGxheWVyID4gLnBsYXllcl9jb250YWluZXIge21heC1oZWlnaHQ6IDIwM3B4O30iKSwgS0VZRlJBTUVTX1NUWUxFUyA9ICJAa2V5ZnJhbWVzIG8tLXR2ZmxpY2tlciB7MCUgICB7Ym94LXNoYWRvdzogMCAwIDEwMHB4IDAgcmdiYSgyMjUsMjM1LDI1NSwwLjQpO30xMDAlIHtib3gtc2hhZG93OiAwIDAgNjBweCAwIHJnYmEoMjAwLDIyMCwyNTUsMC42KTt9fUBrZXlmcmFtZXMgby0tYmxpbmsgezIwJSwyNCUsNTUlIHtjb2xvcjogIzExMTt0ZXh0LXNoYWRvdzogbm9uZTt9ICAwJSwxOSUsMjElLDIzJSwyNSUsNTQlLDU2JSwxMDAlIHtjb2xvcjogI2ZmZjZhOTt0ZXh0LXNoYWRvdzogMCAwIDVweCAjZmZhNTAwLCAwIDAgNXB4ICNmZmE1MDAsIDAgMCAxNXB4ICNmZmE1MDAsIDAgMCAyMHB4ICNmZmE1MDAsIDAgMCA2cHggI2ZmMDAwMCwgMCAwIDEwcHggI2ZmOGQwMCwgMCAwIDlweCAjZmYwMDAwO319QGtleWZyYW1lcyBvLS1ib3BBIHswJSB7dHJhbnNmb3JtOiBzY2FsZSgwLjkpO301MCUsMTAwJSB7dHJhbnNmb3JtOiBzY2FsZSgxKTt9fUBrZXlmcmFtZXMgby0tYm9wQiB7MCUge3RyYW5zZm9ybTogc2NhbGUoMC45KTt9ODAlLDEwMCUge3RyYW5zZm9ybTogc2NhbGUoMSkgcm90YXRlWigtM2RlZyk7fX1Aa2V5ZnJhbWVzIG8tLWJlYXQge3RvIHt0cmFuc2Zvcm06IHNjYWxlKDEuNCk7fX1Aa2V5ZnJhbWVzIG8tLWxvYWRlci1zcGluIHswJSB7dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7fTEwMCUge3RyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7fX1Aa2V5ZnJhbWVzIG8tLWNvbG9yLWNoYW5nZS1vcGFjaXR5IHswJSAgIHsgb3BhY2l0eTogMC42NTsgfTUwJSB7IG9wYWNpdHk6IDAuOTU7IH0xMDAlIHsgb3BhY2l0eTogMC42NTsgfX0iLCBWSVBfU1RZTEVTID0gIlxuLm8tLXZpcCB7cG9zaXRpb246IHJlbGF0aXZlO3BhZGRpbmctYm90dG9tOiAwLjVlbTtiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpO2JvcmRlci1yYWRpdXM6IDVweDt3aWR0aDogMTAwJTt9Lm8tLXZpcCArIC5vLS12aXAgeyIuY29uY2F0KFB1cmlmeVN0eWxlLCAnfS5vLS12aXAtcGFuZWwge2Rpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOiBjZW50ZXI7cGFkZGluZzogMTBweCAxMHB4IDA7Zm9udC1zaXplOiAxNXB4O3dpZHRoOiAxMDAlO30uby0tdmlwLXRpdGxlIHtmb250LXdlaWdodDogYm9sZDtjb2xvcjogIzI1Nzk0Mjt3aWR0aDogMTAwJTt9Lm8tLXZpcC1zbWFsbCB7Zm9udC1zaXplOiAwLjc1ZW07bWFyZ2luOiAwIDEwcHg7Y29sb3I6ICNjZWQ0ZGE7fS5vLS12aXAtcGFuZWwsIC5vLS12aXAtbGlzdCB7aGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7fS5vLS1tZW51cyB7ZGlzcGxheTogZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjthbGlnbi1pdGVtczogY2VudGVyO30uby0tbWVudXMgPiBkaXYge2Rpc3BsYXk6IGlubGluZS1mbGV4O21hcmdpbi1yaWdodDogMS41ZW07Y3Vyc29yOiBwb2ludGVyO3Bvc2l0aW9uOiByZWxhdGl2ZTt9Lm8tLXFyY29kZS1ib3gge2JhY2tncm91bmQtY29sb3I6IHdoaXRlO3BhZGRpbmc6IDFweCAycHggMXB4IDFweDtib3JkZXItcmFkaXVzOiAycHg7b3BhY2l0eTogLjY1O30uby0tbSAuby0tcXJjb2RlLWJveCB7ZGlzcGxheTogbm9uZTt9Lm8tLXFyY29kZS1ib3g6aG92ZXIge29wYWNpdHk6IDE7fS5vLS1xcmNvZGUtYm94IHN2ZyB7d2lkdGg6IDIwcHg7aGVpZ2h0OiAyMHB4O30uby0tcXJjb2RlLWJveCAuby0tcXJjb2RlIHtvdmVyZmxvdzogaGlkZGVuO2Rpc3BsYXk6IG5vbmU7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiAtMzVweDtsZWZ0OiAtMTEwcHg7ei1pbmRleDogMTtib3gtc2hhZG93OiAwIDRweCA4cHggMCByZ2JhKDAsMCwwLDAuMzUpO2JvcmRlci1yYWRpdXM6IDNweDt9Lm8tLXFyY29kZSBpbWcge3dpZHRoOiAxMDBweDtoZWlnaHQ6IDEwMHB4O30uby0tcXJjb2RlLXRleHQge3Bvc2l0aW9uOiBhYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO3RleHQtYWxpZ246IGNlbnRlcjt6LWluZGV4OiAyO3RvcDogLTQ5cHg7bGVmdDogLTExMHB4O3dpZHRoOiAxMDBweDtib3JkZXItcmFkaXVzOiAzcHg7Y29sb3I6ICNGNTdDMDA7bGV0dGVyLXNwYWNpbmc6IDFweDtmb250LXNpemU6IDEycHg7ZGlzcGxheTogbm9uZTt9Lm8tLXFyY29kZS1ib3g6aG92ZXIgLm8tLXFyY29kZSwuby0tcXJjb2RlLWJveDpob3ZlciAuby0tcXJjb2RlLXRleHQge2Rpc3BsYXk6IGJsb2NrO30uby0tc2V0dGluZy1idXR0b24ge2FuaW1hdGlvbjogby0tY29sb3ItY2hhbmdlLW9wYWNpdHkgNXMgbm9ybWFsIGluZmluaXRlIGVhc2UtaW4tb3V0O30uby0tc2V0dGluZy1idXR0b24gc3ZnIHt3aWR0aDogMjRweDtoZWlnaHQ6IDI0cHg7fS5vLS1zZXR0aW5nLWJ1dHRvbjpob3ZlciB7Y29sb3I6ICM2NkJCNkE7Y3Vyc29yOiBwb2ludGVyO30uby0tdmlwLWxpc3Qge3BhZGRpbmc6IDAuNWVtO2xldHRlci1zcGFjaW5nOiAxcHg7fS5vLS12aXAtbGlzdCAuby0tdmlwLWl0ZW0ge2JvcmRlci1yYWRpdXM6IDRweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6IG5vd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOiAjZWVmNmZjO2NvbG9yOiAjMWQ3MmFhO21hcmdpbjogNHB4O3BhZGRpbmc6IDAuNWVtIDAuNWVtIDAuMzVlbTtjdXJzb3I6IHBvaW50ZXI7Zm9udC1zaXplOiAxNHB4O2xpbmUtaGVpZ2h0OiAxLjI7Zm9udC13ZWlnaHQ6IDYwMDt0ZXh0LWRlY29yYXRpb246IG5vbmU7cG9zaXRpb246IHJlbGF0aXZlO292ZXJmbG93OiBoaWRkZW47dHJhbnNpdGlvbjogYWxsIDAuMjVzO30uby0tdmlwLWl0ZW0uaXMtcGxheS1pbi1wYWdlOjphZnRlciB7Y29udGVudDogIiI7cG9zaXRpb246IGFic29sdXRlO2JvdHRvbTogMDtsZWZ0OiAwO3dpZHRoOiAxMDAlO2hlaWdodDogMnB4O2JhY2tncm91bmQtY29sb3I6ICMyRTdEMzI7fS5vLS12aXAtbGlzdCAuby0tdmlwLXNuaWZmIHt3aWR0aDogMS4xNWVtO30uby0tdmlwOm5vdCguaXMtYWxsb3ctc25pZmYpIC5vLS12aXAtc25pZmYge2Rpc3BsYXk6IG5vbmU7fS5vLS12aXAtc25pZmYgc3ZnIHtkaXNwbGF5OiBibG9jazt9Lm8tLXZpcC1saXN0IC5vLS12aXAtaXRlbTpob3ZlciwgLm8tLXZpcC1saXN0IC5vLS12aXAtaXRlbTphY3RpdmUge2JhY2tncm91bmQtY29sb3I6ICMxZDcyYWE7Y29sb3I6ICNlZWY2ZmMgIWltcG9ydGFudDt9Lm8tLXZpcC1saXN0IC5vLS12aXAtaXRlbS5pcy1hY3RpdmUge2JhY2tncm91bmQtY29sb3I6ICMyYjhhM2U7Y29sb3I6ICNlZWY2ZmM7fS5vLS12aXAuaXMtc25pZmYtc3VjY2VzcyAuby0tdmlwLXNuaWZmIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMmY5ZTQ0O2NvbG9yOiAjZWVmNmZjO30uby0tdmlwLmlzLXNuaWZmaW5nIC5vLS12aXAtc25pZmYsLm8tLXZpcC5pcy1zbmlmZi1zdWNjZXNzIC5vLS12aXAtc25pZmYsLm8tLXZpcC5pcy1zbmlmZmluZzpub3QoLmlzLXNuaWZmLXN1Y2Nlc3MpIC5vLS12aXAtaXRlbSwuby0tdmlwLWxpc3QgLm8tLXZpcC1pdGVtLmlzLWFjdGl2ZSB7Y3Vyc29yOiBub3QtYWxsb3dlZDtwb2ludGVyLWV2ZW50czogbm9uZTtvcGFjaXR5OiAwLjUgIWltcG9ydGFudDt9Lm8tLXZpcC5pcy1zbmlmZi1kb25lIC5vLS12aXAtc25pZmYge29wYWNpdHk6IC43NSAhaW1wb3J0YW50O30uby0tdmlwLmlzLXNuaWZmaW5nOm5vdCguaXMtc25pZmYtc3VjY2VzcykgLm8tLXZpcC1zbmlmZiB7YW5pbWF0aW9uOiBvLS1iZWF0IDAuMjVzIGluZmluaXRlIGFsdGVybmF0ZTt9Lm8tLXZpcCAuby0tc25pZmYtcHJvZ3Jlc3Mge2Rpc3BsYXk6IG5vbmU7Ym90dG9tOiBhdXRvO3RvcDogMDt9Lm8tLXZpcC5pcy1zbmlmZmluZyAuby0tc25pZmYtcHJvZ3Jlc3Mge2Rpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7fS5vLS1zZXR0aW5nLXBhbmVsIHtib3JkZXItdG9wOiAxcHggc29saWQgIzYxNjE2MTtwYWRkaW5nOiAxZW0gLjVlbTtkaXNwbGF5OiBub25lO21hcmdpbjogLjVlbSAwO3RyYW5zaXRpb246IGFsbCAwLjVzO30uby0tdmlwLmlzLXNldHRpbmctb24gLm8tLXNldHRpbmctcGFuZWwge2Rpc3BsYXk6IGJsb2NrO30uby0tdmlwLmlzLXNldHRpbmctb24gLm8tLXZpcC1saXN0IHtkaXNwbGF5OiBub25lO30uby0tZWRpdC12aXAtc291cmNlLXBhbmVsIHt0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luOiAxZW0gMWVtIC41ZW07fS5vLS1lZGl0LXZpcC1zb3VyY2UtcGFuZWwgdGV4dGFyZWEge3BhZGRpbmc6IC43NWVtO2ZvbnQtc2l6ZTogMTRweDtsZXR0ZXItc3BhY2luZzogMXB4O2JvcmRlci1yYWRpdXM6IDVweDt3aWR0aDogY2FsYygxMDAlIC0gMS41ZW0pO21pbi1oZWlnaHQ6IDE4ZW07Ym94LXNoYWRvdzogMCA0cHggOHB4IDAgcmdiYSgwLDAsMCwwLjIpO2JvcmRlcjogMXB4IHNvbGlkICNlZWU7b3ZlcmZsb3cteTogc2Nyb2xsO30uby0tZWRpdC1oaW50IHt0ZXh0LWFsaWduOiBsZWZ0O21hcmdpbjogLjVlbTtjb2xvcjogIzRDQUY1MDt0ZXh0LXNoYWRvdzogMHB4IDBweCAxcHggIzhCQzM0QTt9Lm8tLWFjdGlvbnMge3RleHQtYWxpZ246IHJpZ2h0O30uby0tYWN0aW9uIHtjb2xvcjogd2hlYXQ7bGV0dGVyLXNwYWNpbmc6IDFweDtib3JkZXI6IDFweCBzb2xpZDtkaXNwbGF5OiBpbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjthbGlnbi1pdGVtczogY2VudGVyO3BhZGRpbmc6IC4xNWVtIC41ZW07Ym9yZGVyLXJhZGl1czogM3B4O21hcmdpbi1yaWdodDogMWVtO2N1cnNvcjogcG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiAjMWIxYjI5O30uby0tYWN0aW9uIGEge2NvbG9yOiAjRkY5ODAwICFpbXBvcnRhbnQ7fS5vLS1tIC5vLS1hY3Rpb24ge2ZvbnQtc2l6ZTogMTJweDt9Lm8tLWFjdGlvbjpob3ZlciB7Y29sb3I6ICNGRkI3NEQ7fS5vLS10b2dnbGUgLm8tLXksIC5vLS10b2dnbGUgLm8tLW4ge2ZvbnQtd2VpZ2h0OiBib2xkO2ZvbnQtc2l6ZTogMS4yZW07bWFyZ2luLXJpZ2h0OiAuMTVlbTt9Lm8tLXRvZ2dsZS5pcy1uIC5vLS15IHtjb2xvcjogaW5oZXJpdDt9Lm8tLXRvZ2dsZTpub3QoLmlzLW4pIC5vLS15IHtjb2xvcjogZ3JlZW47Zm9udC1zaXplOiAxLjVlbTt9Lm8tLXRvZ2dsZS5pcy1uIC5vLS1uIHtjb2xvcjogcmVkO2ZvbnQtc2l6ZTogMS41ZW07fS5vLS1sb2ctYnV0dG9uIHtjdXJzb3I6IHBvaW50ZXI7cGFkZGluZzogMCAuMzVlbTtiYWNrZ3JvdW5kLWNvbG9yOiBoc2xhKDAsMCUsMTAwJSwuOSk7Ym94LXNoYWRvdzogMCA0cHggOHB4IDAgcmdiYSgwLDAsMCwwLjIpO2NvbG9yOiAjOWU3NzRhO2JvcmRlci1yYWRpdXM6IDNweDtkaXNwbGF5OiBpbmxpbmUtZmxleDt9Lm8tLWxvZy1idXR0b246aG92ZXIge2JhY2tncm91bmQtY29sb3I6ICM5ZTc3NGE7Y29sb3I6IGhzbGEoMCwwJSwxMDAlLC45KTt9JyksIEJBU0VfU1RZTEVTID0gIm9vLWlmcmFtZXMge3Zpc2liaWxpdHk6IGhpZGRlbjtwb2ludGVyLWV2ZW50czogbm9uZTtwb3NpdGlvbjogZml4ZWQ7Ym90dG9tOiAwO2xlZnQ6IC05OTk5cHg7bWF4LXdpZHRoOiAzMjBweDttYXgtaGVpZ2h0OiAxMDBweDtkaXNwbGF5OiBibG9jazt9b28taWZyYW1lcyA+IGlmcmFtZSB7bWF4LXdpZHRoOiAyNSU7ZGlzcGxheTogaW5saW5lLWJsb2NrO30uby0taGlkZSB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30uby0tdmlwLXBsYXkge3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDA7bGVmdDogMDt6LWluZGV4OiAxO21hcmdpbjogMWVtO2ZvbnQtc2l6ZTogMTRweDt9Lm8tLXZpcCAuby0tdmlwLXBsYXkge3Bvc2l0aW9uOiByZWxhdGl2ZTtmb250LXNpemU6IDEycHg7YmFja2dyb3VuZC1jb2xvcjogIzJkMmQyZTttYXJnaW46IC41ZW0gMCAwO3BhZGRpbmc6IC44ZW0gLjVlbSAuNWVtO30uaXMtcGxheS1pbi1wYWdlIC5vLS12aXAtcGxheSB7ZGlzcGxheTogbm9uZTt9LnBseXItLWhpZGUtY29udHJvbHMgfiAuby0tdmlwLXBsYXkge2Rpc3BsYXk6IG5vbmU7fS5wbHlyLS1wYXVzZWQgKyAuby0tdmlwLXBsYXksLm8tLXBsYXllcjpob3ZlciAuby0tdmlwLXBsYXkge2Rpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7fS5vLS12aXAtcGxheS5pcy1oaWRlIHtkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7fS5vLS12aXAtcGxheSBhIHtwb3NpdGlvbjogcmVsYXRpdmU7bWFyZ2luLXJpZ2h0OiA4cHg7fS5vLS12aXAtcGxheSAuby0tc291cmNlcyBhIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMGRiMmZiO3BhZGRpbmc6IC4zZW0gLjc1ZW0gLjI1ZW0gLjc1ZW07Ym9yZGVyLXJhZGl1czogM3B4O2NvbG9yOiAjZmZmZmZmO2N1cnNvcjogcG9pbnRlcjtvcGFjaXR5OiAuODU7ZGlzcGxheTogaW5saW5lLWZsZXg7bWFyZ2luOiAuMjVlbTt9Lm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIGEuaXMtYWN0aXZlIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMWM3ZWQ2O30uby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMgYS5pcy1hY3RpdmUsLm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIGE6aG92ZXIge29wYWNpdHk6IDE7Zm9udC13ZWlnaHQ6IGJvbGQ7fS5vLS12aXAtcGxheSAuby0tc291cmNlcyBhLmlzLW1wNCB7Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7fS5vLS1zbmlmZi1kb25lIHtjb2xvcjogIzRDQUY1MDt9Lm8tLXBsYXktdXJsIHtjb2xvcjogI2ZmZmZmZjtwYWRkaW5nOiAxZW0gMWVtIC41ZW07dGV4dC1zaGFkb3c6IDFweCAxcHggMnB4ICMwMDAwMDA7fS5vLS1wbGF5LXVybCBhIHtjb2xvcjogIzBkYjJmYiAhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO2N1cnNvcjogcG9pbnRlcjtmb250LXdlaWdodDogYm9sZDt9Lm8tLXBsYXktdXJsIC5vLS1zcGFuIHtmb250LXNpemU6IC45ZW07Y29sb3I6ICNFRUVFRUU7ZGlzcGxheTogYmxvY2s7b3BhY2l0eTogLjk7bWFyZ2luLXRvcDogLjVlbTt9Lm8tLXBsYXktdXJsIC5vLS1zcGFuLmlzLXdhcm5pbmcgc3BhbiB7Zm9udC13ZWlnaHQ6IGJvbGQ7Y29sb3I6IHdoaXRlO2JhY2tncm91bmQtY29sb3I6ICNGRjU3MjI7cGFkZGluZzogLjI1ZW0gLjVlbTtib3JkZXItcmFkaXVzOiAycHg7fS5vLS1wbGF5LXVybCBhIHNwYW4ge2NvbG9yOiAjRkY5ODAwO30uby0tcGxheS11cmwgYTpob3ZlciB7Y29sb3I6ICNlNjc3MDAgIWltcG9ydGFudDt9Lm8tLXBsYXllci1ib3g6OmJlZm9yZSwuby0tcGxheWVyLWJveDo6YWZ0ZXIge2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDt9Lm8tLXBsYXllciB7cG9zaXRpb246IHJlbGF0aXZlO2hlaWdodDogMTAwJTttYXgtaGVpZ2h0OiAxMDAlO2JhY2tncm91bmQtY29sb3I6ICMyZDJkMmU7b3ZlcmZsb3c6IGhpZGRlbjt6LWluZGV4OiAiLmNvbmNhdChNQVhfWl9JTkRFWCwgJzt9Lm8tLXBsYXllcjpub3QoLmlzLWxvYWRlZCkgI28tLXBsYXllci1pZnJhbWUge2Rpc3BsYXk6IG5vbmU7fS5vLS1wbGF5ZXIuaXMtbG9hZGVkIC5vLS1wbGF5ZXItYmcge3Zpc2liaWxpdHk6IGhpZGRlbjt9Lm8tLXBsYXllci1iZyB7cG9zaXRpb246IGFic29sdXRlO3RvcDogMDtib3R0b206IDA7bGVmdDogMDtyaWdodDogMDtkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogY2VudGVyO2FsaWduLWl0ZW1zOiBjZW50ZXI7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtmb250LXNpemU6IDE2cHg7Y29sb3I6ICNmMWYzZjU7YmFja2dyb3VuZC1jb2xvcjogIzI5MjkyOTtib3gtc2hhZG93OiAwIDAgNXB4IDAgIzIzMjMyNTtvdmVyZmxvdzogaGlkZGVuO2JvcmRlcjogMTBweCBzb2xpZCAjMWIxYjFiO2JvcmRlci1ib3R0b20td2lkdGg6IDE1cHg7Ym9yZGVyLXJhZGl1czogMTBweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1MCUgMSU7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDUwJSAxJTt0cmFuc2l0aW9uOiBtYXJnaW4tcmlnaHQgMXM7bWFyZ2luOiAuNWVtO3BhZGRpbmctYm90dG9tOiAxZW07YW5pbWF0aW9uOiBvLS10dmZsaWNrZXIgLjVzIGluZmluaXRlIGFsdGVybmF0ZTt9Lm8tLW0gLm8tLXBsYXllci1iZyB7Zm9udC1zaXplOiAxMnB4O2JvcmRlci13aWR0aDogMWVtO30uby0tc2lnbiB7b3BhY2l0eTogLjE7bWFyZ2luLXRvcDogMWVtO30uby0tdmVyc2lvbiB7bWFyZ2luLWxlZnQ6IDFlbTtmb250LXNpemU6IC44ZW07b3BhY2l0eTogLjk7fS5vLS1zbG9nYW4ge2xldHRlci1zcGFjaW5nOiAycHg7Y29sb3I6ICNmODk2NGM7fS5vLS1zbG9nYW4gc3Ryb25nIHtmb250LXNpemU6IDIuNWVtO3RleHQtc2hhZG93OiAwIDAgNXB4ICNmZmE1MDAsIDAgMCA1cHggI2ZmYTUwMCwgMCAwIDE1cHggI2ZmYTUwMCwgMCAwIDIwcHggI2ZmYTUwMCwgMCAwIDZweCAjZmYwMDAwLCAwIDAgMTBweCAjZmY4ZDAwLCAwIDAgOXB4ICNmZjAwMDA7Y29sb3I6ICNmZmY2YTk7b3BhY2l0eTogLjg7dHJhbnNmb3JtOiBzY2FsZSgwLjkpO2Rpc3BsYXk6IGlubGluZS1ibG9jazttYXJnaW46IDAgNXB4O30uby0tc2xvZ2FuIHN0cm9uZzpmaXJzdC1jaGlsZCB7YW5pbWF0aW9uOiBvLS1ib3BBIDFzIGN1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIsIDEuMjc1KSBmb3J3YXJkcyBpbmZpbml0ZSBhbHRlcm5hdGUsIG8tLWJsaW5rIDEycyBpbmZpbml0ZTt9Lm8tLXNsb2dhbiBzdHJvbmc6bGFzdC1jaGlsZCB7YW5pbWF0aW9uOiBvLS1ib3BCIDFzIDAuMnMgY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4yNzUpIGZvcndhcmRzIGluZmluaXRlIGFsdGVybmF0ZSwgby0tYmxpbmsgMTJzIDNzIGluZmluaXRlO30uby0tZXJyb3ItdGV4dCB7ZGlzcGxheTogbm9uZTtwYWRkaW5nLXRvcDogMWVtO2xldHRlci1zcGFjaW5nOiAxcHg7Y29sb3I6ICNGNDQzMzY7fS5vLS1wbGF5ZXItYmcuaXMtZmFpbCAuby0tc2xvZ2FuIHtjb2xvcjogI2Y3NjcwNzt9Lm8tLXBsYXllci1iZy5pcy1mYWlsIC5vLS1zbG9nYW4gc3Ryb25nIHtjb2xvcjogI2Q5NDgwZjt9Lm8tLXBsYXllci1iZy5pcy1mYWlsIC5vLS1sb2FkZXIsLm8tLXBsYXllci1iZy5pcy1mYWlsICsgLm8tLXZpcC1wbGF5IHtkaXNwbGF5OiBub25lO30uby0tcGxheWVyLWJnLmlzLWZhaWwgLm8tLWVycm9yLXRleHQge2Rpc3BsYXk6IGJsb2NrO30uby0tc25pZmYtcHJvZ3Jlc3Mge3Bvc2l0aW9uOiBhYnNvbHV0ZTtsZWZ0OiAwO2JvdHRvbTogMDtoZWlnaHQ6IDFweDt3aWR0aDogMDtiYWNrZ3JvdW5kLWNvbG9yOiAjZmFiMTMyO2JvcmRlcjogMXB4IHNvbGlkICNiZDc2NDE7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDJweDt0cmFuc2l0aW9uOiBhbGwgNXMgZWFzZTt9Lm8tLXBsYXllci5pcy1sb2FkZWQgLm8tLXNuaWZmLXByb2dyZXNzLC5vLS1wbGF5ZXItYmcuaXMtZmFpbCAuby0tc25pZmYtcHJvZ3Jlc3Mge2Rpc3BsYXk6IG5vbmU7fS5vLS1sb2FkZXIge2JvcmRlcjogMy42cHggc29saWQgI2ZmOTc0ZDtib3gtc2l6aW5nOiBib3JkZXItYm94O292ZXJmbG93OiBoaWRkZW47d2lkdGg6IDJlbTtoZWlnaHQ6IDJlbTtsZWZ0OiA1MCU7dG9wOiA1MCU7YW5pbWF0aW9uOiBvLS1sb2FkZXItc3BpbiAycyBsaW5lYXIgaW5maW5pdGUgcmV2ZXJzZTstd2Via2l0LWZpbHRlcjogdXJsKCNvLS1sLWYpO2ZpbHRlcjogdXJsKCNvLS1sLWYpO2JveC1zaGFkb3c6IDAgMCAwIDFweCAjZmY5NzRkIGluc2V0O30uby0tbG9hZGVyOmJlZm9yZSB7Y29udGVudDogIiI7cG9zaXRpb246IGFic29sdXRlO2FuaW1hdGlvbjogby0tbG9hZGVyLXNwaW4gMnMgY3ViaWMtYmV6aWVyKDAuNTksIDAuMjUsIDAuNCwgMC42OSkgaW5maW5pdGU7YmFja2dyb3VuZDogI2ZmOTc0ZDstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHRvcCBjZW50ZXI7dHJhbnNmb3JtLW9yaWdpbjogdG9wIGNlbnRlcjtib3JkZXItcmFkaXVzOiA1MCU7d2lkdGg6IDE1MCU7aGVpZ2h0OiAxNTAlO3RvcDogNTAlO2xlZnQ6IC0xMi41JTt9Lm8tLXBsYXllciAucGx5cl9fcHJvZ3Jlc3MgaW5wdXRbdHlwZT1yYW5nZV0ge2N1cnNvcjogcG9pbnRlcjt9Lm8tLXZpZGVvIHtoZWlnaHQ6IDEwMCU7d2lkdGg6IDEwMCU7YmFja2dyb3VuZC1jb2xvcjogYmxhY2s7fScpLCBTVFlMRVMgPSBLRVlGUkFNRVNfU1RZTEVTICsgX0RfU1RZTEVTICsgQkFTRV9TVFlMRVMgKyBWSVBfU1RZTEVTOwogIGFkZG9uR28oKSwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICBIVE1MLnJlbW92ZUF0dHJpYnV0ZShQTFVHSU5fQVRUUik7CiAgfSksIDE1MDApOwp9KCk7
Add Comment
Please, Sign In to add comment