Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_觅影@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICDop4XlvbEKLy8gQHZlcnNpb24gICAgICAyMC42LjEzCi8vIEBhdXRob3IgICAgICAgKG/LmOKXocuYbykKLy8gQGRlc2NyaXB0aW9uICDoh6rliqjliqDpgJ/ot7Pov4fop4bpopHlub/lkYrvvJvljp/nvZHpobXop6PmnpAgVklQIOinhumike+8m+aUr+aMgeS4gOmUruWkmue6v+i3r+iHquWKqOino+aekO+8m+makOiXj+inhumikeawtOWNsO+8m+W/q+aNt+aQnOe0oui3s+i9rOWcqOe6v+ingueci++8m+ixhueTo8K36YCJ5b2x6KeGIOWHgOWMlu+8m+iHquWumuS5ieino+aekO+8m+aJi+acuuaJq+eggeeciwovLyBAbm90ZSAgICAgICAgIOacgOi/keabtOaWsO+8muabtOaWsOino+aekO+8jOenu+mZpOS9jui0qOmHj+ino+aekO+8jOaPkOWNh+ino+aekOaViOeOh++8m+WinuWKoOaVsOW8oOWKoOi9veWbvu+8m+S8mOWMluiHquWKqOWIh+aNoue6v+i3r++8m+abtOaWsCBobHMg5bqT77yb5pu05paw5byV55So5paH5Lu255qEIGNkbiDln5/lkI0KLy8gQG5hbWVzcGFjZSAgICAob8uY4pehy5hvKQovLyBAaWNvbiAgICAgICAgIGh0dHBzOi8vcC5wc3RhdHAuY29tL29yaWdpbi9mZTY5MDAwMGM5MTQxOTU1YmJhYwovLyBAbGljZW5zZSAgICAgIEdQTCBMaWNlbnNlCi8vIEBpbmNsdWRlICAgICAgKgovLyBAZ3JhbnQgICAgICAgIEdNX3NldFZhbHVlCi8vIEBncmFudCAgICAgICAgR01fZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICBHTV9kZWxldGVWYWx1ZQovLyBAZ3JhbnQgICAgICAgIHVuc2FmZVdpbmRvdwovLyA9PS9Vc2VyU2NyaXB0PT0KCiFhc3luYyBmdW5jdGlvbigpIHsKICBsZXQgX01hdGhmbG9vciA9IE1hdGguZmxvb3IsIF9NYXRobWF4ID0gTWF0aC5tYXg7CiAgZnVuY3Rpb24gSXMobikgewogICAgbGV0IGUgPSAxIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IEhyZWY7CiAgICByZXR1cm4gbiBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gbihlKSA6IChlID0gKG4uc291cmNlIHx8IG4pLmluY2x1ZGVzKCI9aHR0cCIpID8gZSA6IGUucmVwbGFjZSgvPWh0dHBbXiZdKy8sICIiKSwKICAgICJzdHJpbmciID09IHR5cGVvZiBuID8gZS5pbmNsdWRlcyhuKSA6IG4udGVzdChlKSk7CiAgfQogIGZ1bmN0aW9uIElzTm90KG4sIGUpIHsKICAgIHJldHVybiAhSXMobiwgZSk7CiAgfQogIGZ1bmN0aW9uIEFyZ3VtZW50cyhuKSB7CiAgICBjb25zdCBlID0gbi5sZW5ndGgsIHQgPSBBcnJheShlKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZTsgaSsrKSB0W2ldID0gbltpXTsKICAgIHJldHVybiB0OwogIH0KICBmdW5jdGlvbiBnZXRHbG9iYWwobikgewogICAgcmV0dXJuIChoYXNVbnNhZmVXaW5kb3cgPyB1bnNhZmVXaW5kb3cgOiB3aW5kb3cpW25dOwogIH0KICBmdW5jdGlvbiBzZXRHbG9iYWwobiwgZSkgewogICAgd2luZG93W25dID0gZSwgaGFzVW5zYWZlV2luZG93ICYmICh1bnNhZmVXaW5kb3dbbl0gPSBlKTsKICB9CiAgZnVuY3Rpb24gcGFyc2VTdG9yZURhdGEobikgewogICAgbGV0IGUgPSAxIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IG51bGw7CiAgICBpZiAoInN0cmluZyIgPT0gdHlwZW9mIG4pIHRyeSB7CiAgICAgIG4gPSBKU09OLnBhcnNlKG4pOwogICAgfSBjYXRjaCAobikge30KICAgIHJldHVybiBudWxsID09PSBuID8gZSA6IG47CiAgfQogIGZ1bmN0aW9uIGdldENkblVybChuKSB7CiAgICByZXR1cm4gImh0dHBzOi8vY2RuLmJvb3RjZG4ubmV0L2FqYXgvbGlicyIgKyBuOwogIH0KICBhc3luYyBmdW5jdGlvbiBmZXRjaENkblVybChuLCBlKSB7CiAgICBsZXQgdDsKICAgIGNvbnN0IGkgPSAvXlwvXHcvLnRlc3Qobik7CiAgICBpZiAobiA9IGkgPyBnZXRDZG5VcmwobikgOiBuLCAhZSAmJiBpKSB7CiAgICAgIGNvbnN0IGUgPSBuLm1hdGNoKC8uKlwvKFteXC9dKylcLyhbXlwvXSspJC8pOwogICAgICB0ID0gZVsyXTsKICAgIH0gZWxzZSB0ID0gZSAmJiBlLm5hbWUgfHwgbjsKICAgIGNvbnN0IG8gPSBHbG9iYWxTdG9yZS5nZXQodCk7CiAgICBsZXQgYTsKICAgIHJldHVybiBhID0gbyAmJiAiMjAuNi4xMyIgPT09IG8udmVyc2lvbiA/IG8uZGF0YSA6IGF3YWl0IHdpbmRvdy5mZXRjaChuKS50aGVuKChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBuLnRleHQoKTsKICAgIH0pKS50aGVuKChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBHbG9iYWxTdG9yZS5zZXQodCwgewogICAgICAgIGRhdGE6IG4sCiAgICAgICAgdmVyc2lvbjogVkVSU0lPTgogICAgICB9KSwgbjsKICAgIH0pKSwgYTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gYWRkSnModXJsLCBvcHRzKSB7CiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hDZG5VcmwodXJsLCBvcHRzKTsKICAgIHJldHVybiBldmFsKGRhdGEpOwogIH0KICBhc3luYyBmdW5jdGlvbiBhZGRDc3NVcmwobikgewogICAgYWRkQ3NzKGF3YWl0IGZldGNoQ2RuVXJsKG4pKTsKICB9CiAgZnVuY3Rpb24gYWRkQ3NzKG4pIHsKICAgIGxldCBlOwogICAgcmV0dXJuIC9eKGh0dHB8XC8pLy50ZXN0KG4pID8gYWRkQ3NzVXJsKG4pIDogKG4gPSBuLnJlcGxhY2UoL1xuK1xzKi9nLCAiICIpLCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSwKICAgIGUuc3R5bGVTaGVldCA/IGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gbiA6IGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobikpLAogICAgZS50eXBlID0gInRleHQvY3NzIiwgdm9pZCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGUpKTsKICB9CiAgZnVuY3Rpb24gcHJlZml4Q3NzKG4sIGUpIHsKICAgIGxldCB0LCBpLCBvLCBhLCByID0gZS5sZW5ndGg7CiAgICBlICs9ICIgIiwgbiA9IChuID0gKG4gPSBuLnJlcGxhY2UoL1wvXCooPzooPyFcKlwvKVtcc1xTXSkqXCpcL3xbXHJcblx0XSsvZywgIiIpKS5yZXBsYWNlKC99KFxzKilAL2csICJ9QCIpKS5yZXBsYWNlKC99KFxzKil9L2csICJ9fSIpOwogICAgZm9yIChsZXQgcyA9IDA7IHMgPCBuLmxlbmd0aCAtIDI7IHMrKykgdCA9IG5bc10sIGkgPSBuW3MgKyAxXSwgIkAiID09PSB0ICYmIChvID0gITApLAogICAgbyB8fCAieyIgIT09IHQgfHwgKGEgPSAhMCksIGEgJiYgIn0iID09PSB0ICYmIChhID0gITEpLCAhYSAmJiAiQCIgIT09IGkgJiYgIn0iICE9PSBpICYmICgifSIgPT09IHQgfHwgIiwiID09PSB0IHx8ICgieyIgPT09IHQgfHwgIjsiID09PSB0KSAmJiBvKSAmJiAobiA9IG4uc2xpY2UoMCwgcyArIDEpICsgZSArIG4uc2xpY2UocyArIDEpLAogICAgcyArPSByLCBvID0gITEpOwogICAgcmV0dXJuIDAgIT09IG4uaW5kZXhPZihlKSAmJiAwICE9PSBuLmluZGV4T2YoIkAiKSAmJiAobiA9IGUgKyBuKSwgbjsKICB9CiAgZnVuY3Rpb24gZ2V0JCgpIHsKICAgIGZ1bmN0aW9uIG4obiwgZSkgewogICAgICB0cnkgewogICAgICAgIHJldHVybiBuKGUpOwogICAgICB9IGNhdGNoIChuKSB7CiAgICAgICAgcmV0dXJuIGU7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGUobiwgZSkgewogICAgICByZXR1cm4gbiAmJiAobChlKSB8fCBjKGUpKSA/IHJuLnRlc3QobikgPyBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUobi5zbGljZSgxKSkgOiBzbi50ZXN0KG4pID8gZS5nZXRFbGVtZW50c0J5VGFnTmFtZShuKSA6IGUucXVlcnlTZWxlY3RvckFsbChuKSA6IFtdOwogICAgfQogICAgZnVuY3Rpb24gdChuKSB7CiAgICAgIHJldHVybiBuLnJlcGxhY2UocG4sIChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgcmV0dXJuIGUudG9VcHBlckNhc2UoKTsKICAgICAgfSkpOwogICAgfQogICAgZnVuY3Rpb24gaShuLCBlLCB0KSB7CiAgICAgIGlmICh0KSB7CiAgICAgICAgZm9yIChsZXQgdCA9IG4ubGVuZ3RoOyB0LS07ICkgaWYgKCExID09PSBlLmNhbGwoblt0XSwgdCwgblt0XSkpIHJldHVybiBuOwogICAgICB9IGVsc2UgZm9yIChsZXQgdCA9IDAsIGkgPSBuLmxlbmd0aDsgdCA8IGk7IHQrKykgaWYgKCExID09PSBlLmNhbGwoblt0XSwgdCwgblt0XSkpIHJldHVybiBuOwogICAgICByZXR1cm4gbjsKICAgIH0KICAgIGZ1bmN0aW9uIG8obikgewogICAgICBsZXQgZSA9IFtdOwogICAgICBmb3IgKGxldCBuID0gMTsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKykgZVtuIC0gMV0gPSBhcmd1bWVudHNbbl07CiAgICAgIGxldCB0ID0gYXJndW1lbnRzLmxlbmd0aDsKICAgICAgaWYgKCF0KSByZXR1cm4ge307CiAgICAgIGlmICgxID09PSB0KSByZXR1cm4gbyhkbiwgbik7CiAgICAgIGZvciAobGV0IGUgPSAxOyBlIDwgdDsgZSsrKSBmb3IgKGxldCB0IGluIGFyZ3VtZW50c1tlXSkgblt0XSA9IGFyZ3VtZW50c1tlXVt0XTsKICAgICAgcmV0dXJuIG47CiAgICB9CiAgICBmdW5jdGlvbiBhKG4sIGUpIHsKICAgICAgbGV0IHQgPSBuICYmIChuLm1hdGNoZXMgfHwgbi53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgbi5tc01hdGNoZXNTZWxlY3Rvcik7CiAgICAgIHJldHVybiAhIXQgJiYgISFlICYmIHQuY2FsbChuLCBlKTsKICAgIH0KICAgIGZ1bmN0aW9uIHIobikgewogICAgICByZXR1cm4gbiBpbnN0YW5jZW9mIGxuOwogICAgfQogICAgZnVuY3Rpb24gcyhuKSB7CiAgICAgIHJldHVybiAhIW4gJiYgbiA9PT0gbi53aW5kb3c7CiAgICB9CiAgICBmdW5jdGlvbiBsKG4pIHsKICAgICAgcmV0dXJuICEhbiAmJiA5ID09PSBuLm5vZGVUeXBlOwogICAgfQogICAgZnVuY3Rpb24gYyhuKSB7CiAgICAgIHJldHVybiAhIW4gJiYgMSA9PT0gbi5ub2RlVHlwZTsKICAgIH0KICAgIGZ1bmN0aW9uIGQobikgewogICAgICByZXR1cm4gImZ1bmN0aW9uIiA9PSB0eXBlb2YgbjsKICAgIH0KICAgIGZ1bmN0aW9uIHAobikgewogICAgICByZXR1cm4gInN0cmluZyIgPT0gdHlwZW9mIG47CiAgICB9CiAgICBmdW5jdGlvbiBmKG4pIHsKICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gbjsKICAgIH0KICAgIGZ1bmN0aW9uIHUobikgewogICAgICByZXR1cm4gbnVsbCA9PT0gbjsKICAgIH0KICAgIGZ1bmN0aW9uIG0obikgewogICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pOwogICAgfQogICAgZnVuY3Rpb24gaChuKSB7CiAgICAgIHJldHVybiBwKG4pID8gZnVuY3Rpb24oZSwgdCkgewogICAgICAgIHJldHVybiBhKHQsIG4pOwogICAgICB9IDogZChuKSA/IG4gOiByKG4pID8gZnVuY3Rpb24oZSwgdCkgewogICAgICAgIHJldHVybiBuLmlzKHQpOwogICAgICB9IDogbiA/IGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICByZXR1cm4gdCA9PT0gbjsKICAgICAgfSA6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAhMTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIGcobiwgZSkgewogICAgICByZXR1cm4gZSA/IG4uZmlsdGVyKGUpIDogbjsKICAgIH0KICAgIGZ1bmN0aW9uIGIobikgewogICAgICByZXR1cm4gcChuKSAmJiBuLm1hdGNoKGZuKSB8fCBbXTsKICAgIH0KICAgIGZ1bmN0aW9uIHYobiwgZSwgdCwgaSkgewogICAgICBsZXQgbyA9IFtdLCBhID0gZChlKSwgciA9IGkgJiYgaChpKTsKICAgICAgZm9yIChsZXQgcyA9IDAsIGwgPSBuLmxlbmd0aDsgcyA8IGw7IHMrKykgaWYgKGEpIHsKICAgICAgICBsZXQgdCA9IGUobltzXSk7CiAgICAgICAgdC5sZW5ndGggJiYgZW4uYXBwbHkobywgdCk7CiAgICAgIH0gZWxzZSBmb3IgKGxldCBhID0gbltzXVtlXTsgIShudWxsID09IGEgfHwgaSAmJiByKC0xLCBhKSk7ICkgby5wdXNoKGEpLCBhID0gdCA/IGFbZV0gOiBudWxsOwogICAgICByZXR1cm4gbzsKICAgIH0KICAgIGZ1bmN0aW9uIHkobikgewogICAgICByZXR1cm4gMSA8IG4ubGVuZ3RoID8gWi5jYWxsKG4sIChmdW5jdGlvbihuLCBlLCB0KSB7CiAgICAgICAgcmV0dXJuIFkuY2FsbCh0LCBuKSA9PT0gZTsKICAgICAgfSkpIDogbjsKICAgIH0KICAgIGZ1bmN0aW9uIHgobiwgZSwgdCkgewogICAgICBpZiAoYyhuKSkgewogICAgICAgIGxldCBpID0gTC5nZXRDb21wdXRlZFN0eWxlKG4sIG51bGwpOwogICAgICAgIHJldHVybiB0ID8gaS5nZXRQcm9wZXJ0eVZhbHVlKGUpIHx8IHZvaWQgMCA6IGlbZV07CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHcobiwgZSkgewogICAgICByZXR1cm4gcGFyc2VJbnQoeChuLCBlKSwgMTApIHx8IDA7CiAgICB9CiAgICBmdW5jdGlvbiBfKG4pIHsKICAgICAgcmV0dXJuIHVuLnRlc3Qobik7CiAgICB9CiAgICBmdW5jdGlvbiBrKG4sIGUpIHsKICAgICAgaWYgKHZvaWQgMCA9PT0gZSAmJiAoZSA9IF8obikpLCBlKSByZXR1cm4gbjsKICAgICAgaWYgKCFtbltuXSkgewogICAgICAgIGxldCBlID0gdChuKSwgbyA9ICIiICsgZVswXS50b1VwcGVyQ2FzZSgpICsgZS5zbGljZSgxKTsKICAgICAgICBpKChlICsgIiAiICsgZ24uam9pbihvICsgIiAiKSArIG8pLnNwbGl0KCIgIiksIChmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgICBpZiAodCBpbiBobikgcmV0dXJuIG1uW25dID0gdCwgITE7CiAgICAgICAgfSkpOwogICAgICB9CiAgICAgIHJldHVybiBtbltuXTsKICAgIH0KICAgIGZ1bmN0aW9uIFMobiwgZSwgdCkgewogICAgICByZXR1cm4gdm9pZCAwID09PSB0ICYmICh0ID0gXyhuKSksIHQgfHwgYm5bbl0gfHwgIW0oZSkgPyBlIDogZSArICJweCI7CiAgICB9CiAgICBmdW5jdGlvbiBqKGUsIGkpIHsKICAgICAgbGV0IG8gPSBlLmRhdGFzZXRbaV0gfHwgZS5kYXRhc2V0W3QoaSldOwogICAgICByZXR1cm4gdm4udGVzdChvKSA/IG8gOiBuKEpTT04ucGFyc2UsIG8pOwogICAgfQogICAgZnVuY3Rpb24gSShlLCBpLCBvKSB7CiAgICAgIG8gPSBuKEpTT04uc3RyaW5naWZ5LCBvKSwgZS5kYXRhc2V0W3QoaSldID0gbzsKICAgIH0KICAgIGZ1bmN0aW9uICQobiwgZSkgewogICAgICBsZXQgdCA9IG4uZG9jdW1lbnRFbGVtZW50OwogICAgICByZXR1cm4gX01hdGhtYXgobi5ib2R5WyJzY3JvbGwiICsgZV0sIHRbInNjcm9sbCIgKyBlXSwgbi5ib2R5WyJvZmZzZXQiICsgZV0sIHRbIm9mZnNldCIgKyBlXSwgdFsiY2xpZW50IiArIGVdKTsKICAgIH0KICAgIGZ1bmN0aW9uIEMobiwgZSkgewogICAgICByZXR1cm4gdyhuLCAiYm9yZGVyIiArIChlID8gIkxlZnQiIDogIlRvcCIpICsgIldpZHRoIikgKyB3KG4sICJwYWRkaW5nIiArIChlID8gIkxlZnQiIDogIlRvcCIpKSArIHcobiwgInBhZGRpbmciICsgKGUgPyAiUmlnaHQiIDogIkJvdHRvbSIpKSArIHcobiwgImJvcmRlciIgKyAoZSA/ICJSaWdodCIgOiAiQm90dG9tIikgKyAiV2lkdGgiKTsKICAgIH0KICAgIGZ1bmN0aW9uIEEobikgewogICAgICByZXR1cm4gIm5vbmUiID09PSB4KG4sICJkaXNwbGF5Iik7CiAgICB9CiAgICBmdW5jdGlvbiBVKG4sIGUpIHsKICAgICAgcmV0dXJuICFlIHx8ICFvbi5jYWxsKGUsIChmdW5jdGlvbihlKSB7CiAgICAgICAgcmV0dXJuIDAgPiBuLmluZGV4T2YoZSk7CiAgICAgIH0pKTsKICAgIH0KICAgIGZ1bmN0aW9uIFQobikgewogICAgICByZXR1cm4ga25bbl0gfHwgX25bbl0gfHwgbjsKICAgIH0KICAgIGZ1bmN0aW9uIHEobikgewogICAgICByZXR1cm4gblt4bl0gPSBuW3huXSB8fCB7fTsKICAgIH0KICAgIGZ1bmN0aW9uIHoobiwgZSwgdCwgaSwgbykgewogICAgICBsZXQgYSA9IHEobik7CiAgICAgIGFbZV0gPSBhW2VdIHx8IFtdLCBhW2VdLnB1c2goWyB0LCBpLCBvIF0pLCBuLmFkZEV2ZW50TGlzdGVuZXIoZSwgbyk7CiAgICB9CiAgICBmdW5jdGlvbiBNKG4pIHsKICAgICAgbGV0IGUgPSBuLnNwbGl0KHduKTsKICAgICAgcmV0dXJuIFsgZVswXSwgZS5zbGljZSgxKS5zb3J0KCkgXTsKICAgIH0KICAgIGZ1bmN0aW9uIFAobiwgZSwgdCwgaSwgbykgewogICAgICBsZXQgYSA9IHEobik7CiAgICAgIGlmIChlKSBhW2VdICYmIChhW2VdID0gYVtlXS5maWx0ZXIoKGZ1bmN0aW9uKGEpIHsKICAgICAgICBsZXQgciA9IGFbMF0sIHMgPSBhWzFdLCBsID0gYVsyXTsKICAgICAgICByZXR1cm4gISEobyAmJiBsLmd1aWQgIT09IG8uZ3VpZCB8fCAhVShyLCB0KSB8fCBpICYmIGkgIT09IHMpIHx8IHZvaWQgbi5yZW1vdmVFdmVudExpc3RlbmVyKGUsIGwpOwogICAgICB9KSkpOyBlbHNlIGZvciAoZSBpbiBhKSBQKG4sIGUsIHQsIGksIG8pOwogICAgfQogICAgZnVuY3Rpb24gRShuKSB7CiAgICAgIHJldHVybiBuLm11bHRpcGxlICYmIG4ub3B0aW9ucyA/IHYoWi5jYWxsKG4ub3B0aW9ucywgKGZ1bmN0aW9uKG4pIHsKICAgICAgICByZXR1cm4gbi5zZWxlY3RlZCAmJiAhbi5kaXNhYmxlZCAmJiAhbi5wYXJlbnROb2RlLmRpc2FibGVkOwogICAgICB9KSksICJ2YWx1ZSIpIDogbi52YWx1ZSB8fCAiIjsKICAgIH0KICAgIGZ1bmN0aW9uIFYobikgewogICAgICBpZiAoIXAobikpIHJldHVybiBbXTsKICAgICAgaWYgKENuLnRlc3QobikpIHJldHVybiBbIEgoUmVnRXhwLiQxKSBdOwogICAgICBsZXQgZSA9ICRuLnRlc3QobikgJiYgUmVnRXhwLiQxLCB0ID0gQW5bZV0gfHwgQW5bIioiXTsKICAgICAgcmV0dXJuIHQuaW5uZXJIVE1MID0gbiwgZG4odC5jaGlsZE5vZGVzKS5kZXRhY2goKS5nZXQoKTsKICAgIH0KICAgIGZ1bmN0aW9uIE4obiwgZSwgdCwgbywgYSkgewogICAgICBvID8gbi5pbnNlcnRCZWZvcmUoZSwgdCA/IG4uZmlyc3RDaGlsZCA6IG51bGwpIDogbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLCB0ID8gbiA6IG4ubmV4dFNpYmxpbmcpLAogICAgICBhICYmIGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICBsZXQgdCA9IGRuKG4pOwogICAgICAgIHQuZmlsdGVyKCJzY3JpcHQiKS5hZGQodC5maW5kKCJzY3JpcHQiKSkuZWFjaCgoZnVuY3Rpb24obiwgdCkgewogICAgICAgICAgaWYgKFRuLnRlc3QodC50eXBlKSAmJiBHLmNvbnRhaW5zKHQpKSB7CiAgICAgICAgICAgIGxldCBuID0gSCgic2NyaXB0Iik7CiAgICAgICAgICAgIG4udGV4dCA9IHQudGV4dENvbnRlbnQucmVwbGFjZShVbiwgIiIpLCBpKHFuLCAoZnVuY3Rpb24oZSwgaSkgewogICAgICAgICAgICAgIHRbaV0gJiYgKG5baV0gPSB0W2ldKTsKICAgICAgICAgICAgfSkpLCBlLmhlYWQuaW5zZXJ0QmVmb3JlKG4sIG51bGwpLCBlLmhlYWQucmVtb3ZlQ2hpbGQobik7CiAgICAgICAgICB9CiAgICAgICAgfSkpOwogICAgICB9KGUsIG4ub3duZXJEb2N1bWVudCk7CiAgICB9CiAgICBmdW5jdGlvbiBSKG4sIGUsIHQsIG8sIGEsIHIsIHMsIGwpIHsKICAgICAgcmV0dXJuIGkobiwgKGZ1bmN0aW9uKG4sIHIpIHsKICAgICAgICBpKGRuKHIpLCAoZnVuY3Rpb24obiwgcikgewogICAgICAgICAgaShkbihlKSwgKGZ1bmN0aW9uKGUsIGkpIHsKICAgICAgICAgICAgbGV0IHMgPSB0ID8gaSA6IHIsIGwgPSB0ID8gbiA6IGU7CiAgICAgICAgICAgIE4odCA/IHIgOiBpLCBsID8gcy5jbG9uZU5vZGUoITApIDogcywgbywgYSwgIWwpOwogICAgICAgICAgfSksIGwpOwogICAgICAgIH0pLCBzKTsKICAgICAgfSksIHIpLCBlOwogICAgfQogICAgbGV0IEQgPSB7CiAgICAgIGNsYXNzOiAiY2xhc3NOYW1lIiwKICAgICAgY29udGVudGVkaXRhYmxlOiAiY29udGVudEVkaXRhYmxlIiwKICAgICAgZm9yOiAiaHRtbEZvciIsCiAgICAgIHJlYWRvbmx5OiAicmVhZE9ubHkiLAogICAgICBtYXhsZW5ndGg6ICJtYXhMZW5ndGgiLAogICAgICB0YWJpbmRleDogInRhYkluZGV4IiwKICAgICAgY29sc3BhbjogImNvbFNwYW4iLAogICAgICByb3dzcGFuOiAicm93U3BhbiIsCiAgICAgIHVzZW1hcDogInVzZU1hcCIKICAgIH0sIEYgPSBkb2N1bWVudCwgTCA9IHdpbmRvdywgRyA9IEYuZG9jdW1lbnRFbGVtZW50LCBIID0gRi5jcmVhdGVFbGVtZW50LmJpbmQoRiksIE8gPSBIKCJkaXYiKSwgQiA9IEgoInRhYmxlIiksIFcgPSBIKCJ0Ym9keSIpLCBYID0gSCgidHIiKSwgSiA9IEFycmF5LmlzQXJyYXksIEsgPSBBcnJheS5wcm90b3R5cGUsIFEgPSBLLmNvbmNhdCwgWiA9IEsuZmlsdGVyLCBZID0gSy5pbmRleE9mLCBubiA9IEsubWFwLCBlbiA9IEsucHVzaCwgdG4gPSBLLnNsaWNlLCBvbiA9IEsuc29tZSwgYW4gPSBLLnNwbGljZSwgcm4gPSAvXlwuW1x3LV0qJC8sIHNuID0gL15cdyskLywgbG4gPSBmdW5jdGlvbigpIHsKICAgICAgZnVuY3Rpb24gbihuLCB0KSB7CiAgICAgICAgaWYgKCFuKSByZXR1cm47CiAgICAgICAgaWYgKHIobikpIHJldHVybiBuOwogICAgICAgIGxldCBpID0gbjsKICAgICAgICBpZiAocChuKSkgewogICAgICAgICAgbGV0IG8gPSAocih0KSA/IHRbMF0gOiB0KSB8fCBGOwogICAgICAgICAgaWYgKGkgPSAvXiNbXHctXSokLy50ZXN0KG4pID8gby5nZXRFbGVtZW50QnlJZChuLnNsaWNlKDEpKSA6IC88Lis+Ly50ZXN0KG4pID8gVihuKSA6IGUobiwgbyksCiAgICAgICAgICAhaSkgcmV0dXJuOwogICAgICAgIH0gZWxzZSBpZiAoZChuKSkgcmV0dXJuIHRoaXMucmVhZHkobik7CiAgICAgICAgKGkubm9kZVR5cGUgfHwgaSA9PT0gTCkgJiYgKGkgPSBbIGkgXSksIHRoaXMubGVuZ3RoID0gaS5sZW5ndGg7CiAgICAgICAgZm9yIChsZXQgbiA9IDAsIGUgPSB0aGlzLmxlbmd0aDsgbiA8IGU7IG4rKykgdGhpc1tuXSA9IGlbbl07CiAgICAgIH0KICAgICAgcmV0dXJuIG4ucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgcmV0dXJuIG5ldyBuKGUsIHQpOwogICAgICB9LCBuOwogICAgfSgpLCBjbiA9IGxuLnByb3RvdHlwZSwgZG4gPSBjbi5pbml0OwogICAgZG4uZm4gPSBkbi5wcm90b3R5cGUgPSBjbiwgY24ubGVuZ3RoID0gMCwgY24uc3BsaWNlID0gYW4sICJmdW5jdGlvbiIgPT0gdHlwZW9mIFN5bWJvbCAmJiAoY25bU3ltYm9sLml0ZXJhdG9yXSA9IEtbU3ltYm9sLml0ZXJhdG9yXSksCiAgICBjbi5tYXAgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBkbihRLmFwcGx5KFtdLCBubi5jYWxsKHRoaXMsIChmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgcmV0dXJuIG4uY2FsbChlLCB0LCBlKTsKICAgICAgfSkpKSk7CiAgICB9LCBjbi5zbGljZSA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgcmV0dXJuIGRuKHRuLmNhbGwodGhpcywgbiwgZSkpOwogICAgfTsKICAgIGxldCBwbiA9IC8tKFthLXpdKS9nOwogICAgZG4uZWFjaCA9IGksIGNuLmVhY2ggPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBpKHRoaXMsIG4pOwogICAgfSwgY24ucmVtb3ZlUHJvcCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSwgdCkgewogICAgICAgIGRlbGV0ZSB0W0Rbbl0gfHwgbl07CiAgICAgIH0pKTsKICAgIH0sIGRuLmV4dGVuZCA9IG8sIGNuLmV4dGVuZCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIG8oY24sIG4pOwogICAgfSwgZG4uZ3VpZCA9IDEsIGRuLmlzV2luZG93ID0gcywgZG4uaXNGdW5jdGlvbiA9IGQsIGRuLmlzTnVtZXJpYyA9IG0sIGRuLmlzQXJyYXkgPSBKLAogICAgY24ucHJvcCA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgaWYgKG4pIHsKICAgICAgICBpZiAocChuKSkgcmV0dXJuIG4gPSBEW25dIHx8IG4sIDIgPiBhcmd1bWVudHMubGVuZ3RoID8gdGhpc1swXSAmJiB0aGlzWzBdW25dIDogdGhpcy5lYWNoKChmdW5jdGlvbih0LCBpKSB7CiAgICAgICAgICBpW25dID0gZTsKICAgICAgICB9KSk7CiAgICAgICAgZm9yIChsZXQgZSBpbiBuKSB0aGlzLnByb3AoZSwgbltlXSk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH0sIGNuLmdldCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGYobikgPyB0bi5jYWxsKHRoaXMpIDogdGhpc1swID4gKG4gPSArbikgPyBuICsgdGhpcy5sZW5ndGggOiBuXTsKICAgIH0sIGNuLmVxID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gZG4odGhpcy5nZXQobikpOwogICAgfSwgY24uZmlyc3QgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuZXEoMCk7CiAgICB9LCBjbi5sYXN0ID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLmVxKC0xKTsKICAgIH0sIGNuLmZpbHRlciA9IGZ1bmN0aW9uKG4pIHsKICAgICAgbGV0IGUgPSBoKG4pOwogICAgICByZXR1cm4gZG4oWi5jYWxsKHRoaXMsIChmdW5jdGlvbihuLCB0KSB7CiAgICAgICAgcmV0dXJuIGUuY2FsbChuLCB0LCBuKTsKICAgICAgfSkpKTsKICAgIH07CiAgICBsZXQgZm4gPSAvXFMrL2c7CiAgICBjbi5oYXNDbGFzcyA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuICEhbiAmJiBvbi5jYWxsKHRoaXMsIChmdW5jdGlvbihlKSB7CiAgICAgICAgcmV0dXJuIGMoZSkgJiYgZS5jbGFzc0xpc3QuY29udGFpbnMobik7CiAgICAgIH0pKTsKICAgIH0sIGNuLnJlbW92ZUF0dHIgPSBmdW5jdGlvbihuKSB7CiAgICAgIGxldCBlID0gYihuKTsKICAgICAgcmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24obiwgdCkgewogICAgICAgIGModCkgJiYgaShlLCAoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgdC5yZW1vdmVBdHRyaWJ1dGUoZSk7CiAgICAgICAgfSkpOwogICAgICB9KSk7CiAgICB9LCBjbi5hdHRyID0gZnVuY3Rpb24obiwgZSkgewogICAgICBpZiAobikgewogICAgICAgIGlmIChwKG4pKSB7CiAgICAgICAgICBpZiAoMiA+IGFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgICAgICAgaWYgKCF0aGlzWzBdIHx8ICFjKHRoaXNbMF0pKSByZXR1cm47CiAgICAgICAgICAgIGxldCBlID0gdGhpc1swXS5nZXRBdHRyaWJ1dGUobik7CiAgICAgICAgICAgIHJldHVybiB1KGUpID8gdm9pZCAwIDogZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBmKGUpID8gdGhpcyA6IHUoZSkgPyB0aGlzLnJlbW92ZUF0dHIobikgOiB0aGlzLmVhY2goKGZ1bmN0aW9uKHQsIGkpIHsKICAgICAgICAgICAgYyhpKSAmJiBpLnNldEF0dHJpYnV0ZShuLCBlKTsKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgZSBpbiBuKSB0aGlzLmF0dHIoZSwgbltlXSk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH0sIGNuLnRvZ2dsZUNsYXNzID0gZnVuY3Rpb24obiwgZSkgewogICAgICBsZXQgdCA9IGIobiksIG8gPSAhZihlKTsKICAgICAgcmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24obiwgYSkgewogICAgICAgIGMoYSkgJiYgaSh0LCAoZnVuY3Rpb24obiwgdCkgewogICAgICAgICAgbyA/IGUgPyBhLmNsYXNzTGlzdC5hZGQodCkgOiBhLmNsYXNzTGlzdC5yZW1vdmUodCkgOiBhLmNsYXNzTGlzdC50b2dnbGUodCk7CiAgICAgICAgfSkpOwogICAgICB9KSk7CiAgICB9LCBjbi5hZGRDbGFzcyA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MobiwgITApOwogICAgfSwgY24ucmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdGhpcy50b2dnbGVDbGFzcyhuLCAhMSkgOiB0aGlzLmF0dHIoImNsYXNzIiwgIiIpOwogICAgfSwgZG4udW5pcXVlID0geSwgY24uYWRkID0gZnVuY3Rpb24obiwgZSkgewogICAgICByZXR1cm4gZG4oeSh0aGlzLmdldCgpLmNvbmNhdChkbihuLCBlKS5nZXQoKSkpKTsKICAgIH07CiAgICBsZXQgdW4gPSAvXi0tLywgbW4gPSB7fSwgaG4gPSBPLnN0eWxlLCBnbiA9IFsgIndlYmtpdCIsICJtb3oiLCAibXMiIF0sIGJuID0gewogICAgICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogITAsCiAgICAgIGNvbHVtbkNvdW50OiAhMCwKICAgICAgZmxleEdyb3c6ICEwLAogICAgICBmbGV4U2hyaW5rOiAhMCwKICAgICAgZm9udFdlaWdodDogITAsCiAgICAgIGdyaWRBcmVhOiAhMCwKICAgICAgZ3JpZENvbHVtbjogITAsCiAgICAgIGdyaWRDb2x1bW5FbmQ6ICEwLAogICAgICBncmlkQ29sdW1uU3RhcnQ6ICEwLAogICAgICBncmlkUm93OiAhMCwKICAgICAgZ3JpZFJvd0VuZDogITAsCiAgICAgIGdyaWRSb3dTdGFydDogITAsCiAgICAgIGxpbmVIZWlnaHQ6ICEwLAogICAgICBvcGFjaXR5OiAhMCwKICAgICAgb3JkZXI6ICEwLAogICAgICBvcnBoYW5zOiAhMCwKICAgICAgd2lkb3dzOiAhMCwKICAgICAgekluZGV4OiAhMAogICAgfTsKICAgIGNuLmNzcyA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgaWYgKHAobikpIHsKICAgICAgICBsZXQgdCA9IF8obik7CiAgICAgICAgcmV0dXJuIG4gPSBrKG4sIHQpLCAyID4gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXNbMF0gJiYgeCh0aGlzWzBdLCBuLCB0KSA6IG4gPyAoZSA9IFMobiwgZSwgdCksCiAgICAgICAgdGhpcy5lYWNoKChmdW5jdGlvbihpLCBvKSB7CiAgICAgICAgICBjKG8pICYmICh0ID8gby5zdHlsZS5zZXRQcm9wZXJ0eShuLCBlKSA6IG8uc3R5bGVbbl0gPSBlKTsKICAgICAgICB9KSkpIDogdGhpczsKICAgICAgfQogICAgICBmb3IgKGxldCBlIGluIG4pIHRoaXMuY3NzKGUsIG5bZV0pOwogICAgICByZXR1cm4gdGhpczsKICAgIH07CiAgICBsZXQgdm4gPSAvXlxzK3xccyskLzsKICAgIGNuLmRhdGEgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgIGlmICghbikgewogICAgICAgIGlmICghdGhpc1swXSkgcmV0dXJuOwogICAgICAgIGxldCBuID0ge307CiAgICAgICAgZm9yIChsZXQgZSBpbiB0aGlzWzBdLmRhdGFzZXQpIG5bZV0gPSBqKHRoaXNbMF0sIGUpOwogICAgICAgIHJldHVybiBuOwogICAgICB9CiAgICAgIGlmIChwKG4pKSByZXR1cm4gMiA+IGFyZ3VtZW50cy5sZW5ndGggPyB0aGlzWzBdICYmIGoodGhpc1swXSwgbikgOiBmKGUpID8gdGhpcyA6IHRoaXMuZWFjaCgoZnVuY3Rpb24odCwgaSkgewogICAgICAgIEkoaSwgbiwgZSk7CiAgICAgIH0pKTsKICAgICAgZm9yIChsZXQgZSBpbiBuKSB0aGlzLmRhdGEoZSwgbltlXSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSwgaShbICEwLCAhMSBdLCAoZnVuY3Rpb24obiwgZSkgewogICAgICBpKFsgIldpZHRoIiwgIkhlaWdodCIgXSwgKGZ1bmN0aW9uKG4sIHQpIHsKICAgICAgICBjblsoZSA/ICJvdXRlciIgOiAiaW5uZXIiKSArIHRdID0gZnVuY3Rpb24oaSkgewogICAgICAgICAgcmV0dXJuIHRoaXNbMF0gPyBzKHRoaXNbMF0pID8gZSA/IHRoaXNbMF1bImlubmVyIiArIHRdIDogdGhpc1swXS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIgKyB0XSA6IGwodGhpc1swXSkgPyAkKHRoaXNbMF0sIHQpIDogdGhpc1swXVsoZSA/ICJvZmZzZXQiIDogImNsaWVudCIpICsgdF0gKyAoaSAmJiBlID8gdyh0aGlzWzBdLCAibWFyZ2luIiArIChuID8gIlRvcCIgOiAiTGVmdCIpKSArIHcodGhpc1swXSwgIm1hcmdpbiIgKyAobiA/ICJCb3R0b20iIDogIlJpZ2h0IikpIDogMCkgOiB2b2lkIDA7CiAgICAgICAgfTsKICAgICAgfSkpOwogICAgfSkpLCBpKFsgIldpZHRoIiwgIkhlaWdodCIgXSwgKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgbGV0IHQgPSBlLnRvTG93ZXJDYXNlKCk7CiAgICAgIGNuW3RdID0gZnVuY3Rpb24oaSkgewogICAgICAgIGlmICghdGhpc1swXSkgcmV0dXJuIGYoaSkgPyB2b2lkIDAgOiB0aGlzOwogICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHModGhpc1swXSkgPyB0aGlzWzBdLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IiArIGVdIDogbCh0aGlzWzBdKSA/ICQodGhpc1swXSwgZSkgOiB0aGlzWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RdIC0gQyh0aGlzWzBdLCAhbik7CiAgICAgICAgbGV0IG8gPSBwYXJzZUludChpLCAxMCk7CiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSwgaSkgewogICAgICAgICAgaWYgKGMoaSkpIHsKICAgICAgICAgICAgbGV0IGUgPSB4KGksICJib3hTaXppbmciKTsKICAgICAgICAgICAgaS5zdHlsZVt0XSA9IFModCwgbyArICgiYm9yZGVyLWJveCIgPT09IGUgPyBDKGksICFuKSA6IDApKTsKICAgICAgICAgIH0KICAgICAgICB9KSk7CiAgICAgIH07CiAgICB9KSk7CiAgICBsZXQgeW4gPSB7fTsKICAgIGNuLnRvZ2dsZSA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSwgdCkgewogICAgICAgIGlmIChjKHQpKSB7CiAgICAgICAgICAoZihuKSA/IEEodCkgOiBuKSA/ICh0LnN0eWxlLmRpc3BsYXkgPSB0Ll9fX2NkIHx8ICIiLCBBKHQpICYmICh0LnN0eWxlLmRpc3BsYXkgPSBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgIGlmICh5bltuXSkgcmV0dXJuIHluW25dOwogICAgICAgICAgICBsZXQgZSA9IEgobik7CiAgICAgICAgICAgIEYuYm9keS5pbnNlcnRCZWZvcmUoZSwgbnVsbCk7CiAgICAgICAgICAgIGxldCB0ID0geChlLCAiZGlzcGxheSIpOwogICAgICAgICAgICByZXR1cm4gRi5ib2R5LnJlbW92ZUNoaWxkKGUpLCB5bltuXSA9ICJub25lIiA9PT0gdCA/ICJibG9jayIgOiB0OwogICAgICAgICAgfSh0LnRhZ05hbWUpKSkgOiAodC5fX19jZCA9IHgodCwgImRpc3BsYXkiKSwgdC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiKTsKICAgICAgICB9CiAgICAgIH0pKTsKICAgIH0sIGNuLmhpZGUgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlKCExKTsKICAgIH0sIGNuLnNob3cgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlKCEwKTsKICAgIH07CiAgICBsZXQgeG4gPSAiX19fY2UiLCB3biA9ICIuIiwgX24gPSB7CiAgICAgIGZvY3VzOiAiZm9jdXNpbiIsCiAgICAgIGJsdXI6ICJmb2N1c291dCIKICAgIH0sIGtuID0gewogICAgICBtb3VzZWVudGVyOiAibW91c2VvdmVyIiwKICAgICAgbW91c2VsZWF2ZTogIm1vdXNlb3V0IgogICAgfTsKICAgIGNuLm9mZiA9IGZ1bmN0aW9uKG4sIGUsIHQpIHsKICAgICAgbGV0IG8gPSB0aGlzOwogICAgICBpZiAoZihuKSkgdGhpcy5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgKGMoZSkgfHwgbChlKSB8fCBzKGUpKSAmJiBQKGUpOwogICAgICB9KSk7IGVsc2UgaWYgKHAobikpIGQoZSkgJiYgKHQgPSBlLCBlID0gIiIpLCBpKGIobiksIChmdW5jdGlvbihuLCBpKSB7CiAgICAgICAgbGV0IGEgPSBNKGkpLCByID0gYVswXSwgZCA9IGFbMV0sIHAgPSBUKHIpOwogICAgICAgIG8uZWFjaCgoZnVuY3Rpb24obiwgaSkgewogICAgICAgICAgKGMoaSkgfHwgbChpKSB8fCBzKGkpKSAmJiAoUChpLCBwLCBkLCBlLCB0KSwgciAhPT0gcCAmJiBQKGksIHIsIGQsIGUsIHQpKTsKICAgICAgICB9KSk7CiAgICAgIH0pKTsgZWxzZSBmb3IgKGxldCBlIGluIG4pIHRoaXMub2ZmKGUsIG5bZV0pOwogICAgICByZXR1cm4gdGhpczsKICAgIH0sIGNuLm9uID0gZnVuY3Rpb24obiwgZSwgdCwgbywgcikgewogICAgICBsZXQgbSA9IHRoaXM7CiAgICAgIGlmICghcChuKSkgewogICAgICAgIGZvciAobGV0IGkgaW4gbikgdGhpcy5vbihpLCBlLCB0LCBuW2ldLCByKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgICByZXR1cm4gcChlKSB8fCAoZihlKSB8fCB1KGUpID8gZSA9ICIiIDogZih0KSA/ICh0ID0gZSwgZSA9ICIiKSA6IChvID0gdCwgdCA9IGUsCiAgICAgIGUgPSAiIikpLCBkKG8pIHx8IChvID0gdCwgdCA9IHZvaWQgMCksIG8gPyAoaShiKG4pLCAoZnVuY3Rpb24obiwgaSkgewogICAgICAgIGxldCBkID0gTShpKSwgcCA9IGRbMF0sIGYgPSBkWzFdLCB1ID0gVChwKSwgaCA9IHAgIT09IHUsIGcgPSBwIGluIF9uOwogICAgICAgIHUgJiYgbS5lYWNoKChmdW5jdGlvbihuLCBpKSB7CiAgICAgICAgICBpZiAoYyhpKSB8fCBsKGkpIHx8IHMoaSkpIHsKICAgICAgICAgICAgbGV0IG4gPSBmdW5jdGlvbiBuKHMpIHsKICAgICAgICAgICAgICBpZiAoaCAmJiAocy5fX19vdCA/IHMuX19fb3QgIT09IHAgOiBzLnR5cGUgIT09IHAgfHwgcy50YXJnZXRbIl9fX2kiICsgcF0gJiYgKGRlbGV0ZSBzLnRhcmdldFsiX19faSIgKyBwXSwKICAgICAgICAgICAgICBzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLCAxKSkpIHJldHVybjsKICAgICAgICAgICAgICBpZiAocy5uYW1lc3BhY2UgJiYgIVUoZiwgcy5uYW1lc3BhY2Uuc3BsaXQod24pKSkgcmV0dXJuOwogICAgICAgICAgICAgIGxldCBsID0gaTsKICAgICAgICAgICAgICBpZiAoZSkgewogICAgICAgICAgICAgICAgbGV0IG4gPSBzLnRhcmdldDsKICAgICAgICAgICAgICAgIGZvciAoOyFhKG4sIGUpOyApIHsKICAgICAgICAgICAgICAgICAgaWYgKG4gPT09IGkpIHJldHVybjsKICAgICAgICAgICAgICAgICAgaWYgKG4gPSBuLnBhcmVudE5vZGUsICFuKSByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsID0gbiwgcy5fX19jZCA9ICEwOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoZyAmJiBzLl9fX290ID09PSBwICYmIGkgIT09IHMudGFyZ2V0ICYmIGkuY29udGFpbnMocy50YXJnZXQpKSByZXR1cm47CiAgICAgICAgICAgICAgcy5fX19jZCAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgImN1cnJlbnRUYXJnZXQiLCB7CiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICEwLAogICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAiZGF0YSIsIHsKICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITAsCiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBsZXQgYyA9IG8uY2FsbChsLCBzLCBzLl9fX3RkKTsKICAgICAgICAgICAgICByICYmIFAoaSwgdSwgZiwgZSwgbiksICExID09PSBjICYmIChzLnByZXZlbnREZWZhdWx0KCksIHMuc3RvcFByb3BhZ2F0aW9uKCkpOwogICAgICAgICAgICB9OwogICAgICAgICAgICBuLmd1aWQgPSBvLmd1aWQgPSBvLmd1aWQgfHwgZG4uZ3VpZCsrLCB6KGksIHUsIGYsIGUsIG4pLCBoICYmIHooaSwgcCwgZiwgZSwgbik7CiAgICAgICAgICB9CiAgICAgICAgfSkpOwogICAgICB9KSksIHRoaXMpIDogdGhpczsKICAgIH0sIGNuLm9uZSA9IGZ1bmN0aW9uKG4sIGUsIHQsIGkpIHsKICAgICAgcmV0dXJuIHRoaXMub24obiwgZSwgdCwgaSwgITApOwogICAgfSwgY24ucmVhZHkgPSBmdW5jdGlvbihuKSB7CiAgICAgIGxldCBlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQobiwgMCwgZG4pOwogICAgICB9OwogICAgICByZXR1cm4gImxvYWRpbmciID09PSBGLnJlYWR5U3RhdGUgPyBGLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBlKSA6IGUoKSwKICAgICAgdGhpczsKICAgIH0sIGNuLnRyaWdnZXIgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgIGlmIChwKG4pKSB7CiAgICAgICAgbGV0IGUgPSBNKG4pLCB0ID0gZVswXSwgaSA9IGVbMV0sIG8gPSBUKHQpOwogICAgICAgIGlmICghbykgcmV0dXJuIHRoaXM7CiAgICAgICAgbGV0IGEgPSAvXihtb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcHxjbGlja3xkYmxjbGljaykvaS50ZXN0KG8pID8gIk1vdXNlRXZlbnRzIiA6ICJIVE1MRXZlbnRzIjsKICAgICAgICAobiA9IEYuY3JlYXRlRXZlbnQoYSkpLmluaXRFdmVudChvLCAhMCwgITApLCBuLm5hbWVzcGFjZSA9IGkuam9pbih3biksIG4uX19fb3QgPSB0OwogICAgICB9CiAgICAgIG4uX19fdGQgPSBlOwogICAgICBsZXQgdCA9IG4uX19fb3QgaW4gX247CiAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUsIGkpIHsKICAgICAgICB0ICYmIGQoaVtuLl9fX290XSkgJiYgKGlbIl9fX2kiICsgbi5fX19vdF0gPSAhMCwgaVtuLl9fX290XSgpKSwgaS5kaXNwYXRjaEV2ZW50KG4pOwogICAgICB9KSk7CiAgICB9OwogICAgbGV0IFNuID0gLyUyMC9nLCBqbiA9IC9ccj9cbi9nLCBJbiA9IC9yYWRpb3xjaGVja2JveC9pOwogICAgY24uc2VyaWFsaXplID0gZnVuY3Rpb24oKSB7CiAgICAgIGxldCBuID0gIiI7CiAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICBpKHQuZWxlbWVudHMgfHwgWyB0IF0sIChmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgICBpZiAoISh0LmRpc2FibGVkIHx8ICF0Lm5hbWUgfHwgIkZJRUxEU0VUIiA9PT0gdC50YWdOYW1lIHx8IC9maWxlfHJlc2V0fHN1Ym1pdHxidXR0b258aW1hZ2UvaS50ZXN0KHQudHlwZSkgfHwgSW4udGVzdCh0LnR5cGUpICYmICF0LmNoZWNrZWQpKSB7CiAgICAgICAgICAgIGxldCBlID0gRSh0KTsKICAgICAgICAgICAgaWYgKCFmKGUpKSB7CiAgICAgICAgICAgICAgaShKKGUpID8gZSA6IFsgZSBdLCAoZnVuY3Rpb24oZSwgaSkgewogICAgICAgICAgICAgICAgbiArPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiAiJiIgKyBlbmNvZGVVUklDb21wb25lbnQobikgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQoZS5yZXBsYWNlKGpuLCAiXHJcbiIpKS5yZXBsYWNlKFNuLCAiKyIpOwogICAgICAgICAgICAgICAgfSh0Lm5hbWUsIGkpOwogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pKTsKICAgICAgfSkpLCBuLnNsaWNlKDEpOwogICAgfSwgY24udmFsID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXMuZWFjaCgoZnVuY3Rpb24oZSwgdCkgewogICAgICAgIGxldCBvID0gdC5tdWx0aXBsZSAmJiB0Lm9wdGlvbnM7CiAgICAgICAgaWYgKG8gfHwgSW4udGVzdCh0LnR5cGUpKSB7CiAgICAgICAgICBsZXQgZSA9IEoobikgPyBubi5jYWxsKG4sIFN0cmluZykgOiB1KG4pID8gW10gOiBbIG4gKyAiIiBdOwogICAgICAgICAgbyA/IGkodC5vcHRpb25zLCAoZnVuY3Rpb24obiwgdCkgewogICAgICAgICAgICB0LnNlbGVjdGVkID0gMCA8PSBlLmluZGV4T2YodC52YWx1ZSk7CiAgICAgICAgICB9KSwgITApIDogdC5jaGVja2VkID0gMCA8PSBlLmluZGV4T2YodC52YWx1ZSk7CiAgICAgICAgfSBlbHNlIHQudmFsdWUgPSBmKG4pIHx8IHUobikgPyAiIiA6IG47CiAgICAgIH0pKSA6IHRoaXNbMF0gJiYgRSh0aGlzWzBdKTsKICAgIH0sIGNuLmNsb25lID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgIHJldHVybiBlLmNsb25lTm9kZSghMCk7CiAgICAgIH0pKTsKICAgIH0sIGNuLmRldGFjaCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGcodGhpcywgbikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgIGUucGFyZW50Tm9kZSAmJiBlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSk7CiAgICAgIH0pKSwgdGhpczsKICAgIH07CiAgICBsZXQgJG4gPSAvXlxzKjwoXHcrKVtePl0qPi8sIENuID0gL148KFx3KylccypcLz8+KD86PFwvXDE+KT8kLywgQW4gPSB7CiAgICAgICIqIjogTywKICAgICAgdHI6IFcsCiAgICAgIHRkOiBYLAogICAgICB0aDogWCwKICAgICAgdGhlYWQ6IEIsCiAgICAgIHRib2R5OiBCLAogICAgICB0Zm9vdDogQgogICAgfTsKICAgIGRuLnBhcnNlSFRNTCA9IFYsIGNuLmVtcHR5ID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICBmb3IgKDtlLmZpcnN0Q2hpbGQ7ICkgZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpOwogICAgICB9KSk7CiAgICB9LCBjbi5odG1sID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGYobikgPyB0aGlzIDogdGhpcy5lYWNoKChmdW5jdGlvbihlLCB0KSB7CiAgICAgICAgYyh0KSAmJiAodC5pbm5lckhUTUwgPSBuKTsKICAgICAgfSkpIDogdGhpc1swXSAmJiB0aGlzWzBdLmlubmVySFRNTDsKICAgIH0sIGNuLnJlbW92ZSA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGcodGhpcywgbikuZGV0YWNoKCkub2ZmKCksIHRoaXM7CiAgICB9LCBjbi50ZXh0ID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gZihuKSA/IHRoaXNbMF0gPyB0aGlzWzBdLnRleHRDb250ZW50IDogIiIgOiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUsIHQpIHsKICAgICAgICBjKHQpICYmICh0LnRleHRDb250ZW50ID0gbik7CiAgICAgIH0pKTsKICAgIH0sIGNuLnVud3JhcCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgaWYgKCJCT0RZIiAhPT0gZS50YWdOYW1lKSB7CiAgICAgICAgICBsZXQgbiA9IGRuKGUpOwogICAgICAgICAgbi5yZXBsYWNlV2l0aChuLmNoaWxkcmVuKCkpOwogICAgICAgIH0KICAgICAgfSkpLCB0aGlzOwogICAgfSwgY24ub2Zmc2V0ID0gZnVuY3Rpb24oKSB7CiAgICAgIGxldCBuID0gdGhpc1swXTsKICAgICAgaWYgKG4pIHsKICAgICAgICBsZXQgZSA9IG4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHRvcDogZS50b3AgKyBMLnBhZ2VZT2Zmc2V0LAogICAgICAgICAgbGVmdDogZS5sZWZ0ICsgTC5wYWdlWE9mZnNldAogICAgICAgIH07CiAgICAgIH0KICAgIH0sIGNuLm9mZnNldFBhcmVudCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5tYXAoKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICBsZXQgdCA9IGUub2Zmc2V0UGFyZW50OwogICAgICAgIGZvciAoO3QgJiYgInN0YXRpYyIgPT09IHgodCwgInBvc2l0aW9uIik7ICkgdCA9IHQub2Zmc2V0UGFyZW50OwogICAgICAgIHJldHVybiB0IHx8IEc7CiAgICAgIH0pKTsKICAgIH0sIGNuLnBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgIGxldCBuID0gdGhpc1swXTsKICAgICAgaWYgKG4pIHsKICAgICAgICBsZXQgZSA9ICJmaXhlZCIgPT09IHgobiwgInBvc2l0aW9uIiksIHQgPSBlID8gbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IHRoaXMub2Zmc2V0KCk7CiAgICAgICAgaWYgKCFlKSB7CiAgICAgICAgICBsZXQgZSA9IG4ub3duZXJEb2N1bWVudCwgaSA9IG4ub2Zmc2V0UGFyZW50IHx8IGUuZG9jdW1lbnRFbGVtZW50OwogICAgICAgICAgZm9yICg7KGkgPT09IGUuYm9keSB8fCBpID09PSBlLmRvY3VtZW50RWxlbWVudCkgJiYgInN0YXRpYyIgPT09IHgoaSwgInBvc2l0aW9uIik7ICkgaSA9IGkucGFyZW50Tm9kZTsKICAgICAgICAgIGlmIChpICE9PSBuICYmIGMoaSkpIHsKICAgICAgICAgICAgbGV0IG4gPSBkbihpKS5vZmZzZXQoKTsKICAgICAgICAgICAgdC50b3AgLT0gbi50b3AgKyB3KGksICJib3JkZXJUb3BXaWR0aCIpLCB0LmxlZnQgLT0gbi5sZWZ0ICsgdyhpLCAiYm9yZGVyTGVmdFdpZHRoIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0b3A6IHQudG9wIC0gdyhuLCAibWFyZ2luVG9wIiksCiAgICAgICAgICBsZWZ0OiB0LmxlZnQgLSB3KG4sICJtYXJnaW5MZWZ0IikKICAgICAgICB9OwogICAgICB9CiAgICB9LCBjbi5jaGlsZHJlbiA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIGcoZG4oeSh2KHRoaXMsIChmdW5jdGlvbihuKSB7CiAgICAgICAgcmV0dXJuIG4uY2hpbGRyZW47CiAgICAgIH0pKSkpLCBuKTsKICAgIH0sIGNuLmNvbnRlbnRzID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBkbih5KHYodGhpcywgKGZ1bmN0aW9uKG4pIHsKICAgICAgICByZXR1cm4gIklGUkFNRSIgPT09IG4udGFnTmFtZSA/IFsgbi5jb250ZW50RG9jdW1lbnQgXSA6ICJURU1QTEFURSIgPT09IG4udGFnTmFtZSA/IG4uY29udGVudC5jaGlsZE5vZGVzIDogbi5jaGlsZE5vZGVzOwogICAgICB9KSkpKTsKICAgIH0sIGNuLmZpbmQgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBkbih5KHYodGhpcywgKGZ1bmN0aW9uKHQpIHsKICAgICAgICByZXR1cm4gZShuLCB0KTsKICAgICAgfSkpKSk7CiAgICB9OwogICAgbGV0IFVuID0gL15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLCBUbiA9IC9eJHxebW9kdWxlJHxcLyhqYXZhfGVjbWEpc2NyaXB0L2ksIHFuID0gWyAidHlwZSIsICJzcmMiLCAibm9uY2UiLCAibm9Nb2R1bGUiIF07CiAgICByZXR1cm4gY24uYWZ0ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIFIoYXJndW1lbnRzLCB0aGlzLCAhMSwgITEsICExLCAhMCwgITApOwogICAgfSwgY24uYXBwZW5kID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBSKGFyZ3VtZW50cywgdGhpcywgITEsICExLCAhMCk7CiAgICB9LCBjbi5hcHBlbmRUbyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gUihhcmd1bWVudHMsIHRoaXMsICEwLCAhMSwgITApOwogICAgfSwgY24uYmVmb3JlID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBSKGFyZ3VtZW50cywgdGhpcywgITEsICEwKTsKICAgIH0sIGNuLmluc2VydEFmdGVyID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBSKGFyZ3VtZW50cywgdGhpcywgITAsICExLCAhMSwgITEsICExLCAhMCk7CiAgICB9LCBjbi5pbnNlcnRCZWZvcmUgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIFIoYXJndW1lbnRzLCB0aGlzLCAhMCwgITApOwogICAgfSwgY24ucHJlcGVuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gUihhcmd1bWVudHMsIHRoaXMsICExLCAhMCwgITAsICEwLCAhMCk7CiAgICB9LCBjbi5wcmVwZW5kVG8gPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIFIoYXJndW1lbnRzLCB0aGlzLCAhMCwgITAsICEwLCAhMSwgITEsICEwKTsKICAgIH0sIGNuLnJlcGxhY2VXaXRoID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gdGhpcy5iZWZvcmUobikucmVtb3ZlKCk7CiAgICB9LCBjbi5yZXBsYWNlQWxsID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gZG4obikucmVwbGFjZVdpdGgodGhpcyksIHRoaXM7CiAgICB9LCBjbi53cmFwQWxsID0gZnVuY3Rpb24obikgewogICAgICBsZXQgZSA9IGRuKG4pLCB0ID0gZVswXTsKICAgICAgZm9yICg7dC5jaGlsZHJlbi5sZW5ndGg7ICkgdCA9IHQuZmlyc3RFbGVtZW50Q2hpbGQ7CiAgICAgIHJldHVybiB0aGlzLmZpcnN0KCkuYmVmb3JlKGUpLCB0aGlzLmFwcGVuZFRvKHQpOwogICAgfSwgY24ud3JhcCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSwgdCkgewogICAgICAgIGxldCBpID0gZG4obilbMF07CiAgICAgICAgZG4odCkud3JhcEFsbChlID8gaS5jbG9uZU5vZGUoITApIDogaSk7CiAgICAgIH0pKTsKICAgIH0sIGNuLndyYXBJbm5lciA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSwgdCkgewogICAgICAgIGxldCBpID0gZG4odCksIG8gPSBpLmNvbnRlbnRzKCk7CiAgICAgICAgby5sZW5ndGggPyBvLndyYXBBbGwobikgOiBpLmFwcGVuZChuKTsKICAgICAgfSkpOwogICAgfSwgY24uaGFzID0gZnVuY3Rpb24obikgewogICAgICBsZXQgdCA9IHAobikgPyBmdW5jdGlvbih0LCBpKSB7CiAgICAgICAgcmV0dXJuIGUobiwgaSkubGVuZ3RoOwogICAgICB9IDogZnVuY3Rpb24oZSwgdCkgewogICAgICAgIHJldHVybiB0LmNvbnRhaW5zKG4pOwogICAgICB9OwogICAgICByZXR1cm4gdGhpcy5maWx0ZXIodCk7CiAgICB9LCBjbi5pcyA9IGZ1bmN0aW9uKG4pIHsKICAgICAgbGV0IGUgPSBoKG4pOwogICAgICByZXR1cm4gb24uY2FsbCh0aGlzLCAoZnVuY3Rpb24obiwgdCkgewogICAgICAgIHJldHVybiBlLmNhbGwobiwgdCwgbik7CiAgICAgIH0pKTsKICAgIH0sIGNuLm5leHQgPSBmdW5jdGlvbihuLCBlLCB0KSB7CiAgICAgIHJldHVybiBnKGRuKHkodih0aGlzLCAibmV4dEVsZW1lbnRTaWJsaW5nIiwgZSwgdCkpKSwgbik7CiAgICB9LCBjbi5uZXh0QWxsID0gZnVuY3Rpb24obikgewogICAgICByZXR1cm4gdGhpcy5uZXh0KG4sICEwKTsKICAgIH0sIGNuLm5leHRVbnRpbCA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgcmV0dXJuIHRoaXMubmV4dChlLCAhMCwgbik7CiAgICB9LCBjbi5ub3QgPSBmdW5jdGlvbihuKSB7CiAgICAgIGxldCBlID0gaChuKTsKICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKChmdW5jdGlvbih0LCBpKSB7CiAgICAgICAgcmV0dXJuICghcChuKSB8fCBjKGkpKSAmJiAhZS5jYWxsKGksIHQsIGkpOwogICAgICB9KSk7CiAgICB9LCBjbi5wYXJlbnQgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBnKGRuKHkodih0aGlzLCAicGFyZW50Tm9kZSIpKSksIG4pOwogICAgfSwgY24uaW5kZXggPSBmdW5jdGlvbihuKSB7CiAgICAgIGxldCBlID0gbiA/IGRuKG4pWzBdIDogdGhpc1swXSwgdCA9IG4gPyB0aGlzIDogZG4oZSkucGFyZW50KCkuY2hpbGRyZW4oKTsKICAgICAgcmV0dXJuIFkuY2FsbCh0LCBlKTsKICAgIH0sIGNuLmNsb3Nlc3QgPSBmdW5jdGlvbihuKSB7CiAgICAgIGxldCBlID0gdGhpcy5maWx0ZXIobik7CiAgICAgIGlmIChlLmxlbmd0aCkgcmV0dXJuIGU7CiAgICAgIGxldCB0ID0gdGhpcy5wYXJlbnQoKTsKICAgICAgcmV0dXJuIHQubGVuZ3RoID8gdC5jbG9zZXN0KG4pIDogZTsKICAgIH0sIGNuLnBhcmVudHMgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgIHJldHVybiBnKGRuKHkodih0aGlzLCAicGFyZW50RWxlbWVudCIsICEwLCBlKSkpLCBuKTsKICAgIH0sIGNuLnBhcmVudHNVbnRpbCA9IGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgcmV0dXJuIHRoaXMucGFyZW50cyhlLCBuKTsKICAgIH0sIGNuLnByZXYgPSBmdW5jdGlvbihuLCBlLCB0KSB7CiAgICAgIHJldHVybiBnKGRuKHkodih0aGlzLCAicHJldmlvdXNFbGVtZW50U2libGluZyIsIGUsIHQpKSksIG4pOwogICAgfSwgY24ucHJldkFsbCA9IGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIHRoaXMucHJldihuLCAhMCk7CiAgICB9LCBjbi5wcmV2VW50aWwgPSBmdW5jdGlvbihuLCBlKSB7CiAgICAgIHJldHVybiB0aGlzLnByZXYoZSwgITAsIG4pOwogICAgfSwgY24uc2libGluZ3MgPSBmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBnKGRuKHkodih0aGlzLCAoZnVuY3Rpb24obikgewogICAgICAgIHJldHVybiBkbihuKS5wYXJlbnQoKS5jaGlsZHJlbigpLm5vdChuKTsKICAgICAgfSkpKSksIG4pOwogICAgfSwgZG47CiAgfQogIGZ1bmN0aW9uIHdhaXRUb1J1bihuLCBlKSB7CiAgICBsZXQgdCA9IDIgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzJdID8gYXJndW1lbnRzWzJdIDogMDsKICAgIGNvbnN0IGkgPSBuIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBuKCkgOiAwIDwgJChuKS5sZW5ndGg7CiAgICByZXR1cm4gaSA/IHZvaWQgKGUgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBlKGkpKSA6IHZvaWQgKDEwMCA8IHQgfHwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgIHdhaXRUb1J1bihuLCBlLCB0ICsgMSk7CiAgICB9KSwgMTAwKSk7CiAgfQogIGZ1bmN0aW9uICQkKG4sIGUpIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCkgewogICAgICB3YWl0VG9SdW4obiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgICBlIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgZShuKSwgdChuKTsKICAgICAgfSkpOwogICAgfSkpOwogIH0KICBmdW5jdGlvbiBlbWl0dGVyKG4pIHsKICAgIHJldHVybiBuID0gbiB8fCBPYmplY3QuY3JlYXRlKG51bGwpLCB7CiAgICAgIG9uKGUsIHQpIHsKICAgICAgICAobltlXSB8fCAobltlXSA9IFtdKSkucHVzaCh0KTsKICAgICAgfSwKICAgICAgb2ZmKGUsIHQpIHsKICAgICAgICBuW2VdICYmIG5bZV0uc3BsaWNlKG5bZV0uaW5kZXhPZih0KSA+Pj4gMCwgMSk7CiAgICAgIH0sCiAgICAgIGVtaXQoZSwgdCkgewogICAgICAgIChuW2VdIHx8IFtdKS5zbGljZSgpLm1hcCgoZnVuY3Rpb24obikgewogICAgICAgICAgbih0KTsKICAgICAgICB9KSksIChuWyIqIl0gfHwgW10pLnNsaWNlKCkubWFwKChmdW5jdGlvbihuKSB7CiAgICAgICAgICBuKGUsIHQpOwogICAgICAgIH0pKTsKICAgICAgfQogICAgfTsKICB9CiAgZnVuY3Rpb24gZ2V0Q2RuSW1hZ2VVcmwobikgewogICAgcmV0dXJuICJodHRwczovL3AucHN0YXRwLmNvbS9vcmlnaW4vIiArIG47CiAgfQogIGZ1bmN0aW9uIHV1aWQoKSB7CiAgICBsZXQgbiA9IDAgfCA0NjY1NiAqIE1hdGgucmFuZG9tKCksIGUgPSAwIHwgNDY2NTYgKiBNYXRoLnJhbmRvbSgpOwogICAgcmV0dXJuIG4gPSAoIjAwMCIgKyBuLnRvU3RyaW5nKDM2KSkuc2xpY2UoLTIpLCBlID0gKCIwMDAiICsgZS50b1N0cmluZygzNikpLnNsaWNlKC0zKSwKICAgICJvIiArIG4gKyBlOwogIH0KICBmdW5jdGlvbiBkZWxheShuKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpIHsKICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgZSgpOwogICAgICB9KSwgbik7CiAgICB9KSk7CiAgfQogIGZ1bmN0aW9uIGdldEtleXdvcmRGcm9tVXJsKG4sIGUpIHsKICAgIGNvbnN0IHQgPSAoZSB8fCBsb2NhdGlvbi5ocmVmKS5tYXRjaChuIHx8IENvbW1vblNlYXJjaEtleXdvcmRSZWdleCk7CiAgICByZXR1cm4gdCA/IGRlY29kZVVSSUNvbXBvbmVudCgobiA/IHRbMV0gfHwgdFsyXSA6IHRbMl0gfHwgdFs0XSkgfHwgIiIpIDogIiI7CiAgfQogIGZ1bmN0aW9uIHB1cmlmeUtleXdvcmQobikgewogICAgcmV0dXJuIChQdXJpZnlLZXl3b3JkUmVnZXggPyBuLnJlcGxhY2UoUHVyaWZ5S2V5d29yZFJlZ2V4LCAiIikgfHwgKG4uc3RhcnRzV2l0aCgi56ysIikgPyAiIiA6IG4pIDogbikucmVwbGFjZSgvXHMqOlxzKiQvLCAiIikucmVwbGFjZSgvXHMqKFvnsqToi7Hml6Vd6K+tfFxbLuivrVxdKVxzKiQvLCAiIikucmVwbGFjZSgvKC4qXFMuKilcKC4qXClccyokLywgIiQxIikucmVwbGFjZSgvLirjgIooLisp44CLLiovLCAiJDEiKS5yZXBsYWNlKC9ccysoYmR8aGR8XGQrcClccyokL2ksICIiKS5yZXBsYWNlKC9bOu+8ml1ccyokLywgIiIpLnRyaW0oKTsKICB9CiAgZnVuY3Rpb24gZ2V0VmlkZW9JbmZvKG4pIHsKICAgIHJldHVybiB7CiAgICAgIHNyYzogbi5zcmMsCiAgICAgIGR1cmF0aW9uOiBuLmR1cmF0aW9uLAogICAgICBwYXVzZWQ6IG4ucGF1c2VkLAogICAgICBjdXJyZW50VGltZTogbi5jdXJyZW50VGltZSwKICAgICAgcGxheWJhY2tSYXRlOiBuLnBsYXliYWNrUmF0ZQogICAgfTsKICB9CiAgZnVuY3Rpb24gc2tpcEFkVmlkZW8obikgewogICAgbGV0IGUgPSAhISgxIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSkgJiYgYXJndW1lbnRzWzFdOwogICAgInN0cmluZyIgPT0gdHlwZW9mIG4gJiYgKG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pKSwgbiAmJiAwICE9PSBuLmR1cmF0aW9uICYmIChuLmN1cnJlbnRUaW1lLAogICAgOTEgPiBuLmR1cmF0aW9uID8gKG4ucGxheWJhY2tSYXRlID0gMTYsIG4uc2tpcEFkID0gITAsIDAgPCBuLmN1cnJlbnRUaW1lICYmIG4uY3VycmVudFRpbWUgPCBuLmR1cmF0aW9uIC0gMSAmJiAobi5jdXJyZW50VGltZSA9IG4uZHVyYXRpb24pKSA6IGUgJiYgbi5za2lwQWQgJiYgKG4ubXV0ZWQgPSAhMSwKICAgIG4ucGxheWJhY2tSYXRlID0gMSwgLjAxID49IG4udm9sdW1lICYmIChuLnZvbHVtZSA9IC40KSkpOwogIH0KICBmdW5jdGlvbiBza2lwQWRWaWRlb1dyYXBwZXIobikgewogICAgaWYgKCFpc1NraXBBZFZpZGVvKSByZXR1cm47CiAgICBsZXQgZSA9ICExLCB0ID0gMDsKICAgIGNvbnN0IGkgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuby0tcGxheWVyIikgfHwgNjAwIDwgdCkgewogICAgICAgICQoIi5vLS1za2lwLWFkIikuYWRkQ2xhc3MoIm8tLWhpZGUiKTsKICAgICAgICBjb25zdCBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidmlkZW8iKTsKICAgICAgICByZXR1cm4gbiAmJiAobi5tdXRlZCA9ICExLCBuLnBsYXliYWNrUmF0ZSA9IDEsIC4wMSA+PSBuLnZvbHVtZSAmJiAobi52b2x1bWUgPSAuNCkpLAogICAgICAgIGNsZWFySW50ZXJ2YWwoaSk7CiAgICAgIH0KICAgICAgZSA9ICExLCAkKCJ2aWRlb1tzcmNdIikuZWFjaCgoZnVuY3Rpb24obiwgdCkgewogICAgICAgIDAgPCB0LmR1cmF0aW9uICYmIDkxID4gdC5kdXJhdGlvbiAmJiAhdC5wYXVzZWQgJiYgKGUgPSAhMCk7CiAgICAgIH0pKSwgZSA/ICh0ID0gMCwgbigpKSA6ICh0ICs9IDEsICQoIi5vLS1za2lwLWFkIikuYWRkQ2xhc3MoIm8tLWhpZGUiKSk7CiAgICB9KSwgMjAwKTsKICB9CiAgZnVuY3Rpb24gdG9nZ2xlU2tpcEFkVGlwKG4pIHsKICAgIGxldCBlID0gMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiAiYXBwZW5kIjsKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5vLS1za2lwLWFkIikgPyAkKCIuby0tc2tpcC1hZCIpLnJlbW92ZUNsYXNzKCJvLS1oaWRlIikgOiAkKG4pW2VdKFNraXBfQWRfSHRtbCk7CiAgfQogIGZ1bmN0aW9uIHNtYXJ0Q29sbGFwc2UobikgewogICAgbGV0IGUgPSAwLCB0ID0gITE7CiAgICAkKG4pLmVhY2goKGZ1bmN0aW9uKG4sIGkpIHsKICAgICAgbiA8IGNvbGxhcHNlTnVtID8gbiA+PSBjb2xsYXBzZU51bSAtIDEgJiYgKGUgPSAkKGkpLnBvc2l0aW9uKCkudG9wKSA6IHQgfHwgZSAhPT0gJChpKS5wb3NpdGlvbigpLnRvcCA/ICh0ID0gITAsCiAgICAgICQoaSkucHJldigiIikuYWRkQ2xhc3MoImlzLWNvbGxhcHNlIikpIDogIXQgJiYgJChpKS5oYXNDbGFzcygiby0tY29sbGFwc2UiKSAmJiAkKGkpLmFkZENsYXNzKCJpcy1jb2xsYXBzZSIpOwogICAgfSkpLCAkKG4pLnBhcmVudCgpLmFkZENsYXNzKCJvLS1jb2xsYXBzZS1ib3giKSwgJCgiLm8tLWNvbGxhcHNlIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsIChmdW5jdGlvbigpIHsKICAgICAgJCh0aGlzKS5wYXJlbnQoKS50b2dnbGVDbGFzcygiaXMtb3BlbiIpOwogICAgfSkpOwogIH0KICBmdW5jdGlvbiBmaXhNM3U4UGxheWluZygpIHsKICAgIGZ1bmN0aW9uIG4obikgewogICAgICBuLmZyb20gPSBIcmVmLCBuLm9yaWdpbiA9IEhyZWYsIG4udXJsID0gaSwgaXNOb3RUb3AgJiYgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHt9LCBuLCB7CiAgICAgICAgX2lkOiBNRVNTQUdFX0lELAogICAgICAgIGFjdGlvbjogImxvZyIsCiAgICAgICAgcGFyZW50OiAhMAogICAgICB9KSwgIioiKTsKICAgIH0KICAgIGNvbnN0IGUgPSBEYXRlLm5vdygpOwogICAgbGV0IHQsIGk7CiAgICBjb25zdCBvID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICBjb25zdCBhID0gRGF0ZS5ub3coKSAtIGU7CiAgICAgIGkgPSAiIiwgdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInZpZGVvW3NyY10iKSwgdCAmJiAoaSA9IHQuc3JjKSwgLyhcLm0zdTh8XC9tM3U4cGxheSlbXlwvXSokLy50ZXN0KGkpID8gKGNsZWFySW50ZXJ2YWwobyksCiAgICAgIHNldFRpbWVvdXQoKGFzeW5jIGZ1bmN0aW9uKCkgewogICAgICAgIGlmICgwID09PSB0LnJlYWR5U3RhdGUpIHsKICAgICAgICAgIGxldCBlID0gZ2V0R2xvYmFsKCJIbHMiKTsKICAgICAgICAgIGlmIChlIHx8IChhd2FpdCBhZGRKcygiL2hscy5qcy8wLjEzLjIvaGxzLm1pbi5qcyIpLCBlID0gZ2V0R2xvYmFsKCJIbHMiKSksIGUuaXNTdXBwb3J0ZWQoKSkgewogICAgICAgICAgICB0LnBhdXNlKCk7CiAgICAgICAgICAgIGNvbnN0IG8gPSBuZXcgZTsKICAgICAgICAgICAgby5sb2FkU291cmNlKGkpLCBvLmF0dGFjaE1lZGlhKHQpLCBvLm9uKGUuRXZlbnRzLk1BTklGRVNUX1BBUlNFRCwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHQucGxheSgpOwogICAgICAgICAgICB9KSksIG4oewogICAgICAgICAgICAgIHRleHQ6ICLinJQgRml4IG0zdTggcGxheSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KSwgMWUzKSkgOiBhID49IDE1ZTMgJiYgKGNsZWFySW50ZXJ2YWwobyksIG4oewogICAgICAgIHRleHQ6ICLDlyBGaXggbTN1OCBwbGF5IGZhaWxlZCIKICAgICAgfSkpOwogICAgfSksIDEwMCk7CiAgfQogIGZ1bmN0aW9uIGlzVmFsaWRWaWRlb1VybChuKSB7CiAgICByZXR1cm4gaXNWYWxpZFVybFJlZ2V4LnRlc3QobikgJiYgaXNWaWRlb1VybFJlZ2V4LnRlc3QobikgJiYgIWlzSW52YWxpZFNuaWZmVXJsUmVnZXgudGVzdChuKTsKICB9CiAgZnVuY3Rpb24gdG9TZWFyY2hVcmwobiwgZSkgewogICAgcmV0dXJuIG4uaW5jbHVkZXMoIioqIikgPyBuLnJlcGxhY2UoIioqIiwgZSkgOiAvbW92aWVcLmRvdWJhblwuY29tXC90YWcvLnRlc3QobikgPyBuIDogbiArIGU7CiAgfQogIGZ1bmN0aW9uIHBhcnNlVXJsKG4sIGUpIHsKICAgIGxldCB0LCBpLCBvID0gbi50cmltKCkuc3BsaXQoL1tcc0BdKy8pOwogICAgY29uc3QgYSA9IG8uZmlsdGVyKChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiAvaHR0cHM/OlwvXC8vLnRlc3Qobik7CiAgICB9KSk7CiAgICBvID0gby5maWx0ZXIoKGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuICEvaHR0cHM/OlwvXC8vLnRlc3Qobik7CiAgICB9KSksIGEuZm9yRWFjaCgoZnVuY3Rpb24obikgewogICAgICAvXC9cL21cLnxcL21cL3xcL1wvbXNvdS8udGVzdChuKSA/IHQgPSBuIDogaSA9IG47CiAgICB9KSk7CiAgICBsZXQgciA9IChpc01vYmlsZSA/IHQgOiBpKSB8fCBhWzBdOwogICAgZSAmJiAociA9IHRvU2VhcmNoVXJsKHIsIGUpKTsKICAgIGNvbnN0IHMgPSAwIDwgby5sZW5ndGggPyBvLmpvaW4oIiAiKSA6IHIubWF0Y2goL1wvXC8oLitcLik/KFteXC9dKylcLlx3K1wvLylbMl0ucmVwbGFjZSgvXihcdykvLCAoZnVuY3Rpb24obikgewogICAgICByZXR1cm4gbi50b1VwcGVyQ2FzZSgpOwogICAgfSkpOwogICAgcmV0dXJuIHsKICAgICAgdXJsOiByLAogICAgICBuYW1lOiBzCiAgICB9OwogIH0KICBmdW5jdGlvbiBnZXRTZWFyY2hTb3VyY2VzSHRtbChuKSB7CiAgICBsZXQgZSA9ICEoMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0pIHx8IGFyZ3VtZW50c1sxXTsKICAgIGNvbnN0IHQgPSBIcmVmLm1hdGNoKC9cL1wvLio/KFx3KylcLlx3K1wvLylbMV07CiAgICByZXR1cm4gU0VBUkNIX1VSTFMubWFwKChmdW5jdGlvbihlKSB7CiAgICAgIGNvbnN0IGkgPSBpc1ZpcFNpdGVSZWdleC50ZXN0KGUudXJsKSA/ICJpcy12aXAiIDogaXNBbmltZVNpdGVSZWdleC50ZXN0KGUudXJsKSA/ICJpcy1hbmltZSIgOiAiIiwgbyA9IGUudXJsLm1hdGNoKC9cL1wvLio/KFx3KylcLlx3K1wvLylbMV07CiAgICAgIHJldHVybiBlLnVybC5pbmNsdWRlcyh0KSB8fCBIcmVmLmluY2x1ZGVzKG8pID8gIiIgOiAnPGEgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSInICsgaSArICciICcgKyAoX0QgPyAnZGF0YS13ZWlnaHQ9IicgKyBlLndlaWdodCArICciICcgOiAiIikgKyAnaHJlZj0iJyArIHRvU2VhcmNoVXJsKGUudXJsLCBuKSArICciPicgKyBlLm5hbWUgKyAiPC9hPiI7CiAgICB9KSkuam9pbigiXG4iKSArIChlICYmIFNFQVJDSF9VUkxTLmxlbmd0aCA+IGNvbGxhcHNlTnVtID8gJzxhIGNsYXNzPSJvLS1jb2xsYXBzZSI+4p6iPC9hPicgOiAiIik7CiAgfQogIGZ1bmN0aW9uIHRvZ2dsZVZpZXdwb3J0KCkgewogICAgbGV0IG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJtZXRhW25hbWU9dmlld3BvcnRdIik7CiAgICBuIHx8IChuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibWV0YSIpLCBuLm5hbWUgPSAidmlld3BvcnQiLCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKG4pKTsKICAgIGNvbnN0IGUgPSBhbGxvd1NjYWxlID8gIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vIiA6ICJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPXllcyI7CiAgICBuLnNldEF0dHJpYnV0ZSgiY29udGVudCIsIGUpLCBhbGxvd1NjYWxlID0gIWFsbG93U2NhbGU7CiAgfQogIGZ1bmN0aW9uIGVuc3VyZUFycmF5KG4pIHsKICAgIHJldHVybiBBcnJheS5pc0FycmF5KG4pID8gbiA6IG4udHJpbSgpLnNwbGl0KC9bXG5cc10qXG4rW1xuXHNdKi8pOwogIH0KICBmdW5jdGlvbiB0b1VybFJlZ2V4KG4pIHsKICAgIHJldHVybiBuZXcgUmVnRXhwKG4ubWFwKChmdW5jdGlvbihuKSB7CiAgICAgIHJldHVybiBuLnJlcGxhY2UoLy4rXC9cL3xcLy4rL2csICIiKS5yZXBsYWNlKC9cLi9nLCAiXFwuIik7CiAgICB9KSkuam9pbigifCIpKTsKICB9CiAgZnVuY3Rpb24gaW5zZXJ0U2VhcmNoQWRkb24obiwgZSkgewogICAgbGV0IHQgPSAyIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSA/IGFyZ3VtZW50c1syXSA6ICJhZnRlciIsIGkgPSAzIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1szXSA/IGFyZ3VtZW50c1szXSA6IDA7CiAgICBjb25zdCBvID0gSHJlZi5pbmNsdWRlcygibS5kb3ViYW4uY29tL3NlYXJjaCIpOwogICAgaWYgKCFuIHx8ICFvICYmIDAgPCAkKCIuby0tanVtcCIpLmxlbmd0aCB8fCAyMCA8IGkpIHJldHVybjsKICAgIGxldCBhLCByID0gITE7CiAgICByZXR1cm4gInN0cmluZyIgPT0gdHlwZW9mIGUgJiYgKHIgPSBlLnN0YXJ0c1dpdGgoIi0iKSwgciAmJiAoZSA9IGUuc2xpY2UoMSkpKSwgYSA9ICQoZSksCiAgICAwID09PSBhLmxlbmd0aCA/IHZvaWQgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgIGluc2VydFNlYXJjaEFkZG9uKG4sIGUsIHQsIGkgKyAxKTsKICAgIH0pLCA1MDApIDogKHBsYXllclRpdGxlID0gcHVyaWZ5S2V5d29yZChuKSwgdm9pZCAocGxheWVyVGl0bGUgJiYgKGFbciA/ICJsYXN0IiA6ICJmaXJzdCJdKClbdF0oJzxkaXYgY2xhc3M9Im8tLWp1bXAiPicgKyBnZXRTZWFyY2hTb3VyY2VzSHRtbChwbGF5ZXJUaXRsZSwgIW8pICsgIjwvZGl2PiIpLAogICAgIW8gJiYgc21hcnRDb2xsYXBzZSgiLm8tLWp1bXAgYSIpKSkpOwogIH0KICBmdW5jdGlvbiBzbmlmZkluSWZyYW1lKCkgewogICAgbG9jYXRpb24uaHJlZiA9PT0gU25pZmZDaGVja1VybCAmJiB3aW5kb3cudG9wLnBvc3RNZXNzYWdlKHsKICAgICAgcGFnZUluZm86IHBhZ2VJbmZvLAogICAgICBfaWQ6IE1FU1NBR0VfSUQsCiAgICAgIGFjdGlvbjogImVuYWJsZS5zbmlmZiIsCiAgICAgIGZyb206IGxvY2F0aW9uLmhyZWYKICAgIH0sICIqIik7CiAgICBjb25zdCBuID0gRGF0ZS5ub3coKSwgZSA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgY29uc3QgdCA9IERhdGUubm93KCkgLSBuOwogICAgICBpZiAoMCA8ICQoInZpZGVvIHNvdXJjZVtzcmNdLCB2aWRlb1tzcmNdIikubGVuZ3RoKSB7CiAgICAgICAgY2xlYXJJbnRlcnZhbChlKSwgJCgidmlkZW8sIGF1ZGlvIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgZS5tdXRlZCA9ICEwLCBlLnZvbHVtZSA9IDAsIGUucGF1c2UoKTsKICAgICAgICAgIGNvbnN0IHQgPSBEYXRlLm5vdygpLCBpID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBjb25zdCBuID0gRGF0ZS5ub3coKSAtIHQ7CiAgICAgICAgICAgIGUubXV0ZWQgPSAhMCwgZS52b2x1bWUgPSAwLCBlLnBhdXNlKCksIG4gPiA0ZTMgJiYgY2xlYXJJbnRlcnZhbChpKTsKICAgICAgICAgIH0pLCA2MCk7CiAgICAgICAgfSkpOwogICAgICAgIGNvbnN0IG4gPSAkKCJ2aWRlbyBzb3VyY2Vbc3JjXSIpLmVxKDApLmF0dHIoInNyYyIpIHx8ICQoInZpZGVvW3NyY10iKS5lcSgwKS5hdHRyKCJzcmMiKSB8fCAiIjsKICAgICAgICByZXR1cm4gbiAmJiAkKCJ2aWRlbywgYXVkaW8iKS5yZW1vdmUoKSwgL15cL1teXC9dLy50ZXN0KG4pICYmIChuID0gbG9jYXRpb24ub3JpZ2luICsgbiksCiAgICAgICAgdm9pZCAoaXNWYWxpZFZpZGVvVXJsKG4pID8gd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7CiAgICAgICAgICBwYWdlSW5mbzogcGFnZUluZm8sCiAgICAgICAgICB1c2VkVGltZTogdCwKICAgICAgICAgIF9pZDogTUVTU0FHRV9JRCwKICAgICAgICAgIGFjdGlvbjogInBsYXkudmlkZW8iLAogICAgICAgICAgZnJvbTogbG9jYXRpb24uaHJlZiwKICAgICAgICAgIG9yaWdpbjogbG9jYXRpb24uaHJlZiwKICAgICAgICAgIHVybDogbi50cmltKCksCiAgICAgICAgICBwYXJlbnQ6ICEwCiAgICAgICAgfSwgIioiKSA6IC9eYmxvYjovLnRlc3QobikgPyB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHsKICAgICAgICAgIHBhZ2VJbmZvOiBwYWdlSW5mbywKICAgICAgICAgIHVzZWRUaW1lOiB0LAogICAgICAgICAgX2lkOiBNRVNTQUdFX0lELAogICAgICAgICAgYWN0aW9uOiAic25pZmYuYmxvYiIsCiAgICAgICAgICBmcm9tOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgb3JpZ2luOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgdXJsOiBuLAogICAgICAgICAgcGFyZW50OiAhMAogICAgICAgIH0sICIqIikgOiB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHsKICAgICAgICAgIHBhZ2VJbmZvOiBwYWdlSW5mbywKICAgICAgICAgIHVzZWRUaW1lOiB0LAogICAgICAgICAgdGV4dDogIk5PVCBNQVRDSCBWSURFTyBVUkwiLAogICAgICAgICAgX2lkOiBNRVNTQUdFX0lELAogICAgICAgICAgYWN0aW9uOiAibG9nIiwKICAgICAgICAgIGZyb206IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgICBvcmlnaW46IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgICB1cmw6IG4sCiAgICAgICAgICBwYXJlbnQ6ICEwCiAgICAgICAgfSwgIioiKSk7CiAgICAgIH0KICAgICAgY29uc3QgaSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImlmcmFtZVtzcmNdIik7CiAgICAgIGlmIChpKSB7CiAgICAgICAgY29uc3QgbiA9IGkuc2NyLCBlID0gZGVjb2RlVVJJQ29tcG9uZW50KG4pLm1hdGNoKC89KGh0dHBbXiY9XStcLihtM3U4fG1wNCkpLyk7CiAgICAgICAgKC9kcGxheWVyLy50ZXN0KG4pIHx8IGlzVmlkZW9VcmxSZWdleC50ZXN0KG4pKSAmJiB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHsKICAgICAgICAgIHBhZ2VJbmZvOiBwYWdlSW5mbywKICAgICAgICAgIHVzZWRUaW1lOiB0LAogICAgICAgICAgdGV4dDogImlmcmFtZSBwbGF5ZXIgdXJsIiwKICAgICAgICAgIF9pZDogTUVTU0FHRV9JRCwKICAgICAgICAgIGFjdGlvbjogImxvZyIsCiAgICAgICAgICBmcm9tOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgb3JpZ2luOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgdXJsOiBlID8gZVsxXSA6IG4sCiAgICAgICAgICBpc01hdGNoOiBlICYmIGlzVmFsaWRWaWRlb1VybChlWzFdKSwKICAgICAgICAgIHBhcmVudDogITAKICAgICAgICB9LCAiKiIpLCBlICYmIGlzVmFsaWRWaWRlb1VybChlWzFdKSAmJiAoJCgiaWZyYW1lIikucmVtb3ZlKCksIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoewogICAgICAgICAgcGFnZUluZm86IHBhZ2VJbmZvLAogICAgICAgICAgdXNlZFRpbWU6IHQsCiAgICAgICAgICBfaWQ6IE1FU1NBR0VfSUQsCiAgICAgICAgICBhY3Rpb246ICJwbGF5LnZpZGVvIiwKICAgICAgICAgIGZyb206IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgICBvcmlnaW46IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgICB1cmw6IGVbMV0udHJpbSgpLAogICAgICAgICAgcGFyZW50OiAhMAogICAgICAgIH0sICIqIikpOwogICAgICB9CiAgICAgIGlmICg0ZTMgPD0gdCAmJiBpKSByZXR1cm4gdm9pZCBjbGVhckludGVydmFsKGUpOwogICAgICBjb25zdCBvID0gMCA8ICQoInZpZGVvIikubGVuZ3RoOwogICAgICAodCA+PSAzZTQgfHwgMmUzIDw9IHQgJiYgbykgJiYgKGNsZWFySW50ZXJ2YWwoZSksIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoewogICAgICAgIHBhZ2VJbmZvOiBwYWdlSW5mbywKICAgICAgICB1c2VkVGltZTogdCwKICAgICAgICBoYXNWaWRlbzogbywKICAgICAgICBoYXNJZnJhbWU6ICEhaSwKICAgICAgICBfaWQ6IE1FU1NBR0VfSUQsCiAgICAgICAgYWN0aW9uOiAic25pZmYuZmFpbCIsCiAgICAgICAgZnJvbTogbG9jYXRpb24uaHJlZiwKICAgICAgICBvcmlnaW46IGxvY2F0aW9uLmhyZWYsCiAgICAgICAgcGFyZW50OiAhMAogICAgICB9LCAiKiIpKTsKICAgIH0pLCAxMDApOwogIH0KICBsZXQgSHJlZiA9IGxvY2F0aW9uLmhyZWY7CiAgaWYgKElzKC9jb29raWUuaHRtbC8pIHx8IElzKC9tXC5sZVwuY29tLykgJiYgSXNOb3QoL20ubGUuY29tXC9zZWFyY2h8c28ubGUuY29tXC9zfFwubGVcLmNvbVwvKHB0dlwvdnBsYXlcL3x2cGxheV8pLykpIHJldHVybjsKICBjb25zdCBpc1RvcCA9IHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmLCBpc05vdFRvcCA9ICFpc1RvcDsKICBpZiAoaXNUb3AgJiYgSXMoL3Z3ZWNhbS50Yy5xcS5jb218XC50aXRhbi5tZ3R2LmNvbS8pICYmICFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ2aWRlbyIpKSByZXR1cm4gdm9pZCAoSXNOb3QoL21peWluZy8pICYmIChsb2NhdGlvbi5ocmVmID0gSHJlZiArIChIcmVmLmluY2x1ZGVzKCI/IikgPyAiJiIgOiAiPyIpICsgIm1peWluZz0iICsgKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKSk7CiAgY29uc3QgUExVR0lOX0FUVFIgPSAibWl5aW5nIiwgUExVR0lOX05BTUUgPSAi6KeF5b2xIiwgT09fU0lHTiA9ICIob8uY4pehy5hvKSIsICRodG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImh0bWwiKVswXTsKICBpZiAoJGh0bWwuZ2V0QXR0cmlidXRlKCJtaXlpbmciKSA9PT0gUExVR0lOX05BTUUpIHJldHVybjsKICAkaHRtbC5zZXRBdHRyaWJ1dGUoIm1peWluZyIsIFBMVUdJTl9OQU1FKTsKICBjb25zdCBfRCA9ICExLCBWRVJTSU9OID0gIjIwLjYuMTMiLCBoYXNVbnNhZmVXaW5kb3cgPSAidW5kZWZpbmVkIiAhPSB0eXBlb2YgdW5zYWZlV2luZG93LCBpc0dNID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIEdNICYmIGhhc1Vuc2FmZVdpbmRvdzsKICBsZXQgbG9nc0RvbTsKICBjb25zdCBzY3JlZW5XaWR0aCA9IHdpbmRvdy5zY3JlZW4ud2lkdGgsIGlzTW9iaWxlID0gNjAwID49IHNjcmVlbldpZHRoIHx8IC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAhMSwgc3RvcmVQcmVmaXggPSAi6KeF5b2xLiIsIFN0b3JlID0gewogICAgZ2V0KG4pIHsKICAgICAgbGV0IGUgPSAxIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IG51bGw7CiAgICAgIHJldHVybiBwYXJzZVN0b3JlRGF0YSh3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmVQcmVmaXggKyBuKSwgZSk7CiAgICB9LAogICAgc2V0KG4pIHsKICAgICAgbGV0IGUgPSAxIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IG51bGw7CiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShzdG9yZVByZWZpeCArIG4sIEpTT04uc3RyaW5naWZ5KGUpKTsKICAgIH0sCiAgICByZW1vdmUobikgewogICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oc3RvcmVQcmVmaXggKyBuKTsKICAgIH0KICB9LCBHbG9iYWxTdG9yZSA9IHsKICAgIGdldChuKSB7CiAgICAgIGxldCBlID0gMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBudWxsOwogICAgICByZXR1cm4gaXNHTSA/IHBhcnNlU3RvcmVEYXRhKEdNX2dldFZhbHVlKHN0b3JlUHJlZml4ICsgbiwgZSksIGUpIDogU3RvcmUuZ2V0KG4sIGUpOwogICAgfSwKICAgIHNldChuKSB7CiAgICAgIGxldCBlID0gMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBudWxsOwogICAgICBpc0dNID8gR01fc2V0VmFsdWUoc3RvcmVQcmVmaXggKyBuLCBKU09OLnN0cmluZ2lmeShlKSkgOiBTdG9yZS5zZXQobiwgZSk7CiAgICB9LAogICAgcmVtb3ZlKG4pIHsKICAgICAgaXNHTSA/IEdNX2RlbGV0ZVZhbHVlKG4pIDogU3RvcmUucmVtb3ZlKG4pOwogICAgfQogIH0sICQgPSBnZXQkKCksIE1BWF9aX0lOREVYID0gMjE0NzQ4MzY0NywgTUVTU0FHRV9JRCA9IFBMVUdJTl9OQU1FLCBQdXJpZnlTdHlsZSA9ICJcbmRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDt2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDt3aWR0aDogMCAhaW1wb3J0YW50O2hlaWdodDogMCAhaW1wb3J0YW50O21heC13aWR0aDogMCAhaW1wb3J0YW50O21heC1oZWlnaHQ6IDAgIWltcG9ydGFudDtvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7cG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7bGVmdDogLTk5OTk5cHggIWltcG9ydGFudDtvcGFjaXR5OiAwICFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDsiLCBkYXkgPSBuZXcgRGF0ZSwgU25pZmZDaGVja1VybCA9IGdldENkbkltYWdlVXJsKCJmZTIzMDAwMTM5YTAyM2NlZGM0YyIpLCBQbGF5ZXJQbGF5aW5nQ292ZXJzID0gImZlOGQwMDAxZTcxYjQyMWFmNDcwO2ZlOWQwMDAxYTIzZmE0YmExMmU2O2ZlYmMwMDAxZjdkY2E2MDFhY2FhO2ZlZDgwMDAxNDNjMWM5OTc3ZjBhO2ZlZGQwMDAxZjhkYmYxMTNhOWU0O2ZmMTUwMDAxNzNlN2E5MWIyYmRmO2ZmMTgwMDAxNTgyN2JkNWE3MGZjO2ZmMTkwMDAxNDkzMzZiMGVkYWRjO2ZmMzQwMDAyMWFkNWRjOTliY2JhO2ZmODEwMDAxMDE5ZDdiOTg2Y2QzO2ZmOTgwMDAwYTBiZGQwZmZhYzcxO2ZmYTAwMDAyYzdiMDg3MDNhNzljIi50cmltKCkuc3BsaXQoLzsvKSwgUGxheWVyUGxheWluZ0NvdmVyID0gZ2V0Q2RuSW1hZ2VVcmwoUGxheWVyUGxheWluZ0NvdmVyc1soZGF5LmdldERheSgpICsgZGF5LmdldEhvdXJzKCkpICUgUGxheWVyUGxheWluZ0NvdmVycy5sZW5ndGhdKSwgUGxheWVyTG9hZGluZ0NvdmVycyA9ICIxMDAwMDAwMDA4YzAwYzZmOTA5NmY7MTAwMDMwMDAwOTM5NDExMTZkODFhO2RjMGUwMDA2MmIyYzVlYjQ5M2JkO2RjMGYwMDA1NDA2NGY4YzM4MGY1O2RjMTAwMDA0NWMwNzVkZDMwNjU2O2RjMTEwMDA1ZThiNzJhMWNlNTgzO2ZlMjMwMDAxM2JhYTRjZGUyODkwO2ZlMmYwMDAxMjlkMDA2YzJhMTM5O2ZlMzQwMDAxMzVhNDIxMjU0NDg2O2ZlMzYwMDAxZWMzMzZhOTZkMGJjO2ZlM2IwMDAwZWI1M2Y4NDQ5MDM4O2ZlM2MwMDAxNTA0M2QzN2Q3YmU1O2ZlNDIwMDAyMThiOWY3ZjVhNTViO2ZlNDIwMDAyMThjNWYxMWMyZWQ5O2ZlNDMwMDAxMDQzNDQ4OTk0ODQ2O2ZlNDYwMDAwYjNmYWU2YWExYmIxO2ZlNGQwMDAxMGNmNWM0OGM5YjZiO2ZlNTEwMDAwZjFmYjE5ODAxZTM4O2ZlNWYwMDAxNTRhNzk0MjYxMTM4O2ZlNjMwMDAxYjIyMmQ4YTZlYjdlO2ZlNmQwMDAyMjY0NTJmYWFmNjQwO2ZlNzIwMDAxZjI0ZjllOTMwNDZmO2ZlN2EwMDAxNTcwNjkyOWUxZDM3O2ZlN2QwMDAyNTQ4Y2ZkMTE1MmJiO2ZlOGIwMDAxYzI3MDZiZmUzZTc3O2ZlOGYwMDAyN2ZkZDc5ZGRhN2ZkO2ZlOTYwMDAxYjFlYTBhYTdlNDYzO2ZlYTQwMDAyYmZhYTU3ZDBlZGU0O2ZlYTYwMDAxMjc0MjZiNGQzYmRhO2ZlYTcwMDAwODgxYzUzNjk0NzI0O2ZlYTgwMDAyYjBmZDE2MmU3OWZhO2ZlYTkwMDAxMmNhNmM0OWQ2NThlO2ZlYWEwMDAyYzU5ZWQ4YTlkZWRmO2ZlYWQwMDAxMTdjYTlmZDI1MDU0O2ZlYjAwMDAxNGI5OGZhZTc3N2FmO2ZlYjAwMDAxNGUyYzg0MjI4ZWY5O2ZlYjEwMDAxNDE5OGNhODA0Yzk2O2ZlYjMwMDAxNTUwMjg2MTlkYjkyO2ZlYjkwMDAwZmFiMGM5MzRjN2NjO2ZlYmMwMDAxNjQxNzRhNTc5YjEyO2ZlYzUwMDAxM2NiM2YyNDkyMDg3O2ZlYzYwMDAxNDY3OTlkYjgyZGRjO2ZlYzgwMDAxMDdmMDRkZDliZWExO2ZlY2UwMDAxNDVjN2U4YWIzOGFjO2ZlY2YwMDAxZjFjMzdiYTYyZTBhO2ZlZDIwMDAxZDc0YjdlNmVmMTdjO2ZlZGIwMDAwYjJmYjA2MzBkNmVjO2ZlZTEwMDAwZmNmOWUwZjhhMGVhO2ZlZTIwMDAwY2JmZTFkOTQwMzVhO2ZlZTIwMDAwY2JmZjE4YjBmYTc4O2ZlZTkwMDAxNjY0MTE3MDc4MDg0O2ZlZjUwMDAyMmZhOGI1ZTU0ODg0O2ZlZjkwMDAxMWVkNjVkZTFiZjcyO2ZlZmEwMDAwYzhmMjVmYmY4ODliO2ZlZmQwMDAyNTViNjkyOGY0YTMyO2ZmMDAwMDAxMDgwMzgwYzEyN2FiO2ZmMDAwMDAxNTc2ZDZkMTY0ZGQ1O2ZmMDgwMDAxNzE4ODRlMmU0NmMwO2ZmMDgwMDAxNzE4Y2ViYmU4NTAxO2ZmMDgwMDAxNzE4ZWI5NDhiMWI0O2ZmMTMwMDAxMGYzZGExNzI5MGQ1O2ZmMTYwMDAxY2IzZmNjOTUyZTY4O2ZmMTcwMDAwOWRiMTFlMmQzNTU1O2ZmMWMwMDAxMTY3NWE0NDRhOWFmO2ZmMjQwMDAxNzI0OWQxNWIxYjgzO2ZmMjUwMDAxYThkYzBjNGIxZTM3O2ZmMjYwMDAyMDg1NDA3OTAzOGVjO2ZmMjcwMDAxZWMyMDQ4ZTk1NjY5O2ZmMjgwMDAxYjQxZjM3YzRmNWFjO2ZmMmQwMDAwYzIxN2Y3NzZjZDBmO2ZmMmYwMDAzYTE3NjA1NzQxMjIyO2ZmMzIwMDAxMjBmZmJmYTM3OWQ3O2ZmMzMwMDAwOThiYzNlNWM3NjRlO2ZmMzYwMDAwYjIzMmM3Nzk0N2M1O2ZmNDQwMDAyOTJiYmY4MTY0YWYyO2ZmNTUwMDAxMDVjMmM1ZjAwYjZhO2ZmNWUwMDAxN2Y0OWEzNmIyNzM2O2ZmNWUwMDAxODMxMGViNTgyOWNhO2ZmNjQwMDAwZTJiZDU1YjI2ZTI3O2ZmNjUwMDAxMzQzMDY2YjdhNDA3O2ZmNmEwMDAxZjNiYjE4NGQ2YjAwO2ZmNzMwMDAwOWQ1ZGJlZjdmNWViO2ZmNzMwMDAwOWQ1ZmIxYzBhN2VhO2ZmNzcwMDAxODhjOGMxMjQyOTdkO2ZmOGQwMDAxOGU4N2Y1OGZjYmVjO2ZmOTQwMDAxYzc0NzYzNTIxZDVlO2ZmOTYwMDAwYzFlMTgxYTRkZTBlO2ZmOTgwMDAwYzBhMjAzZWIzNGJiO2ZmOWEwMDAxYzc5NDgwNDQzNzk4O2ZmYTAwMDAxYzUwYWRhNTY1MDViO2ZmYTQwMDAwZTc1NzQyZTcyZDdjO2ZmYTQwMDAwZTkzMTA2NmFmYzQ3O2ZmYTkwMDAwZTdkNmY5YzgzMTllO2ZmYWQwMDAxMjQ2ZWNjOGRjMWM2O2ZmYmEwMDAxN2JlZDkxNDhhNzQ0O2ZmY2EwMDAwYmI5ZmI1ZTU5ZjFmO2ZmY2MwMDAwZGUxYzE4ODg2MjIzO2ZmY2QwMDAxN2VkMGJkNDc2YWFmO2ZmZDEwMDAwODYwNTBjNDUyMDE1O2ZmZDIwMDAwOTBiMzk1NjdmZWQ1O2ZmZDQwMDAxMzNhOTkyZDZmZWFhO2ZmZDUwMDAwYTZhM2MwOGYyZjY1O2ZmZDcwMDAwZWYxOTljMzJkYzdiO2ZmZGIwMDAwODQ4YTZhYzExM2Y1O2ZmZTIwMDAxMjE4YjNjZTZjY2ZmO2ZmZTMwMDAwYTNmYzRlODQyMTBjO2ZmZTkwMDAwZGFmMWI3YmY3MjZkO2ZmZWMwMDAxNzAyMWMwMjhiM2ZkO2ZmZjQwMDAwZTRmOGYyNzdhNmJkO2ZmZjkwMDAxYTdkNzMzNzQ0N2NmIi50cmltKCkuc3BsaXQoLzsvKSwgaXNWYWxpZFVybFJlZ2V4ID0gL14oaHR0cHxcL1wvKS8sIGlzVmlkZW9VcmxSZWdleCA9IC9cLihtcDR8bTN1OHwzZ3B8d212fGZsdnxhdml8cm12YnxtNHYpfG0zdThwbGF5LnBocC8sIHZpZGVvRXh0UmVnZXggPSAvKG1wNHxtM3U4fDNncHx3bXZ8Zmx2fGF2aXxybXZifG00dikvLCBzaG9ydFZpZGVvVXJsUmVnZXggPSAvXC9cLyhbXlwvXSspXC8oLipcLyk/KFteXC9dKylcLihtcDR8bTN1OHwzZ3B8d212fGZsdnxhdml8cm12YnxtNHYpLywgc2hvcnRWaWRlb1VybExvc2VSZWdleCA9IC9cL1wvKFteXC9dKylcLyguKlteXC9dKVwvPyhtcDR8bTN1OHwzZ3B8d212fGZsdnxhdml8cm12YnxtNHYpLywgaXNPbmx5RG93bmxvYWRWaWRlb1VybFJlZ2V4ID0gLy50aXRhbi5tZ3R2LmNvbS8sIGlzSW52YWxpZFNuaWZmVXJsUmVnZXggPSAvYnRyYWNlLnZpZGVvLnFxLmNvbXxsbXNqeS5xcS5jb218dmxpdmUucXF2aWRlby50Yy5xcS5jb218cXpvbmVzdHlsZS5ndGltZy5jbnxpbWcuYmFpZHUuY29tfGRwbGF5ZXJcL1x3Ky5tcDR8dmlwLmZ3d215MS5jbnxjb20tdC1pcWl5aS5jb218aHoxODljbG91ZC5vb3MtaHouY3R5dW5hcGkuY258dmlkZW8uZGEubWd0di5jb218KHRpdGFuLm1ndHYuY29tfGNkbi5vc3MtY24uYWxpeXVuY3MuY29tLmdtcy1saWdodGluZy5jb20pLittM3U4fGppZXNodW8tb2t6eS5jb218bWFuaG9vLmNufFwvezN9fFwuKGpzfGNzcykvLCBQdXJpZnlLZXl3b3JkUmVnZXggPSAvLirjgIp844CLLip8Wy1cc10q56ysLnsxLDN9W+Wto+mbhuivnemDqF0uKnxccytcZHsyLDN9XHMqJC9nLCBDb21tb25TZWFyY2hLZXl3b3JkUmVnZXggPSAvKHdkfGtleXxrZXl3b3JkfHNlYXJjaHdvcmR8cXVlcnl8a3d8cXxzZWFyY2hzdHIpPShbXiZcP1wvXC4tXSspfChzZWFyY2hcL3xzZWFjaGVyLXxxXykoW14mXD9cL1wuLV0rKS9pLCBjb2xsYXBzZU51bSA9IGlzTW9iaWxlID8gOCA6IDEyOwogIGxldCBvb1BsYXlVcmwgPSAiIiwgaXNTa2lwQWRWaWRlbyA9IFN0b3JlLmdldCgiaXNTa2lwQWRWaWRlbyIsICEwKSwgU0VBUkNIX1VSTFMgPSAi6LGG55OjICBodHRwczovL3NlYXJjaC5kb3ViYW4uY29tL21vdmllL3N1YmplY3Rfc2VhcmNoP3NlYXJjaF90ZXh0PSoqICBodHRwczovL20uZG91YmFuLmNvbS9zZWFyY2gvP3R5cGU9bW92aWUmcXVlcnk9Kipcblxu6IW+6K6vICBodHRwczovL20udi5xcS5jb20vc2VhcmNoLmh0bWw/YWN0PTAma2V5V29yZD0qKiAgIGh0dHBzOi8vdi5xcS5jb20veC9zZWFyY2gvP3E9Kipcblxu54ix5aWH6Im6ICBodHRwczovL20uaXFpeWkuY29tL3NlYXJjaC5odG1sP3NvdXJjZT1kZWZhdWx0JmtleT0qKiAgaHR0cHM6Ly9zby5pcWl5aS5jb20vc28vcV8qKlxuXG7kvJjphbcgIGh0dHBzOi8vc2VhcmNoLnlvdWt1LmNvbS9zZWFyY2hfdmlkZW8/a2V5d29yZD0qKiAgaHR0cHM6Ly9zby55b3VrdS5jb20vc2VhcmNoX3ZpZGVvL3FfKipcblxu6IqS5p6cICBodHRwczovL20ubWd0di5jb20vc28/az0qKiAgaHR0cHM6Ly9zby5tZ3R2LmNvbS9zbz9rPSoqXG5cbjE5MDUgIGh0dHBzOi8vdmlwLjE5MDUuY29tL1NlYXJjaD9xPSoqXG5cbuaQnOeLkCAgaHR0cHM6Ly9tLnR2LnNvaHUuY29tL3VwbG9hZC9oNS9tL21zby5odG1sP2tleT0qKiAgaHR0cHM6Ly9zby50di5zb2h1LmNvbS9tdHM/d2Q9KipcblxuMTA4MCAgaHR0cHM6Ly93d3cuazEwODAubmV0L3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcblxuMTA5MCAgaHR0cHM6Ly8xMDkweXMuY29tLz9jPXNlYXJjaCZzb3J0PWFkZHRpbWUmb3JkZXI9ZGVzYyZwYWdlPTEmd2Q9Kipcblxu5a6M576OICBodHRwczovL3d3dy53YW5tZWlray5tZS9zby8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kipcblxu5Zyo57q/ICBodHRwczovL3d3dy56eHpqLm1lL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kipcblxu56We6amsICBodHRwczovL3d3dy5zaGVubWE0NDgwLmNvbS9zZWFyY2gvLS0tLS0tLS0tLS0tLS8/d2Q9Kipcblxu6aOe5p6B6YCfICBodHRwOi8vbS5mZWlqaXN1OC5jb20vc2VhcmNoLyoqICBodHRwOi8vZmVpamlzdTguY29tL3NlYXJjaC8qKlxuXG7nnJ/kuI3ljaEgIGh0dHBzOi8vd3d3LnpoZW5idWthLmNvbS92b2Qvc2VhcmNoL3BhZ2UvMS93ZC8qKi9cblxu56Kf5b2xICBodHRwczovL2R2ZGhkLm1lL3NlYXJjaC5waHA/c2VhcmNod29yZD0qKlxuXG7nvo7liacgIGh0dHBzOi8vOTFtancuY29tLz9zPSoqXG5cblRWQiAgaHR0cHM6Ly93d3cuaGt0dnliLmNvbS92b2Qvc2VhcmNoLmh0bWw/d2Q9Kipcblxu6Iy25p2v54uQICBodHRwczovL3d3dy5jdXBmb3guY29tL3NlYXJjaD9rZXk9Kipcblxu5ZOU5ZOp5ZOU5ZOpICBodHRwczovL20uYmlsaWJpbGkuY29tL3NlYXJjaD9rZXl3b3JkPSoqICBodHRwczovL3NlYXJjaC5iaWxpYmlsaS5jb20vYWxsP2tleXdvcmQ9Kipcblxu6L+F5pKtICBodHRwczovL3d3dy54YmRtLm9yZy9zZWFyY2gucGhwP3NlYXJjaHdvcmQ9KipcblxuWnp6RnVuICBodHRwOi8vd3d3Lnp6emZ1bi5jb20vdm9kLXNlYXJjaC5odG1sP3dkPSoqXG5cbuWmruWPryAgaHR0cDovL3d3dy5uaWNvdHYubWUvdmlkZW8vc2VhcmNoLyoqLmh0bWxcblxuQUdFICBodHRwczovL3d3dy5hZ2VmYW5zLnR2L3NlYXJjaD9wYWdlPTEmcXVlcnk9KipcblxuUWlubWVpICBodHRwczovL3Fpbm1laS52aWRlby9zZWFyY2gvP3R5cGU9cXVlcnlBbmltYXRlJmtleXdvcmQ9KiogIGh0dHBzOi8vbS5xaW5tZWkudmlkZW8vc2VhcmNoP3R5cGU9cXVlcnlBbmltYXRlJmtleXdvcmQ9Kipcblxu5ZOG5ZKqICBodHRwOi8vd3d3LmR1b21pbWguY29tL2RvbmdtYW5zZWFyY2guaHRtbD93ZD0qKlxuXG7mrKHlhYMgIGh0dHBzOi8vY3lsb2xpLmNvbS92b2RzZWFyY2gvKiotLS0tLS0tLS0tMS0tLS9cblxu5ZOU5ZKqICBodHRwOi8vYmltaWJpbWkubWUvdm9kL3NlYXJjaC93ZC8qKi9wYWdlLzEvXG5cbk1pa2FuICBodHRwczovL21pa2FuYW5pLm1lL0hvbWUvU2VhcmNoP3NlYXJjaHN0cj0qKiI7CiAgY29uc3QgQURET05TID0gWyB7CiAgICBuYW1lOiAi5ZOU5ZOp5ZOU5ZOpIiwKICAgIG1hdGNoOiAiLmJpbGliaWxpLmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaHxzZWFyY2hcLi8sCiAgICAgIGp1bXA6ICIjYWxsLWxpc3QgfCBhcHBlbmQsIC5pbmRleF9fYm9hcmRfX3NyYy1zZWFyY2gtYm9hcmQtIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL2Jhbmd1bWlcL3BsYXlcLy8sCiAgICAgIHRpdGxlOiAiLm1lZGlhLXRpdGxlLCAuZXAtaW5mby10aXRsZSIsCiAgICAgIGp1bXAoKSB7CiAgICAgICAgJCQoIi5lcC1pbmZvLWltYWdlIGltZywgLm1lZGlhLWNvdmVyIGltZyIsIChmdW5jdGlvbigpIHsKICAgICAgICAgIGNvbnN0IG4gPSAkKCIubWVkaWEtdGl0bGUsIC5lcC1pbmZvLXRpdGxlIikuZXEoMCkudGV4dCgpOwogICAgICAgICAgbiAmJiBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgaW5zZXJ0U2VhcmNoQWRkb24obiwgIi5tZWRpYS13cmFwcGVyLCAuZXAtbGlzdC1wcmUtd3JhcHBlciIpOwogICAgICAgICAgfSksIDUwMCk7CiAgICAgICAgfSkpOwogICAgICB9CiAgICB9LAogICAgaGlkZTogIi5pbmRleF9fb3BlbkFwcEJ0bl9fc3JjLWNvbW1vbkNvbXBvbmVudC10b3BBcmVhLSwgLmluZGV4X19jb250YWluZXJfX3NyYy1jb21tb25Db21wb25lbnQtYm90dG9tT3BlbkFwcC0sIC5iaWxpLWFwcCwgLnJlY29tLXdyYXBwZXIsIC5iLWZvb3RlciwgLm9wZW4tYXBwLWJhciwgLm9wZW4tYXBwLWZsb2F0LCAubW9yZS1yZXZpZXctd3JhcHBlciwgI2Jhbm5lckFkLCAuYmFubmVyLWNhcmQsICNzbGlkZV9hZCIKICB9LCB7CiAgICBuYW1lOiAi6IW+6K6v6KeG6aKRIiwKICAgIG1hdGNoOiAidi5xcS5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2gvLAogICAgICBqdW1wOiAiI3Jlc3VsdCwgLndyYXBwZXJfbWFpbiA+IC5tb2RfcGFnZXMiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvKGNvdmVyfHBsYXl8eFwvY292ZXJ8eFwvcGFnZXx4XC9wbGF5fHhcL21cL2NvdmVyfHhcL21cL3BhZ2V8eFwvbVwvcGxheSkvLAogICAgICB2aXA6ICIjdmlwX3RpdGxlLCAuVV9ib3hfYmdfYSwgLnBsYXllcl9oZWFkbGluZSwgLm1vZF92aWRlb19pbmZvIiwKICAgICAgdGl0bGU6ICIubW9kX3ZpZGVvX2luZm8gLnZpZGVvX3RpdGxlLCAuX21haW5fdGl0bGUsIC5wbGF5ZXJfdGl0bGUiLAogICAgICBmaXhVcmwobikgewogICAgICAgIGlmIChuLmluY2x1ZGVzKCJjaWQ9IikpIHsKICAgICAgICAgIGNvbnN0IGUgPSBuLm1hdGNoKC9jaWQ9KFx3KykvKVsxXTsKICAgICAgICAgIGxldCB0ID0gbi5tYXRjaCgvdmlkPShcdyspLyk7CiAgICAgICAgICByZXR1cm4gdCA9IHQgPyAiLyIgKyB0WzFdIDogIiIsICJodHRwczovL3YucXEuY29tL3gvY292ZXIvIiArIGUgKyB0ICsgIi5odG1sIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG4uaW5jbHVkZXMoIi94L2NvdmVyIikgPyBuLnJlcGxhY2UoL1wuaHRtbC4qLywgIi5odG1sIikgOiBuOwogICAgICB9LAogICAgICBhc3luYyBqcygpIHsKICAgICAgICBpZiAoc2tpcEFkVmlkZW9XcmFwcGVyKChmdW5jdGlvbigpIHsKICAgICAgICAgIGlzTW9iaWxlID8gc2tpcEFkVmlkZW8oIi50eHBfdmlkZW9fY29udGFpbmVyIHZpZGVvW3NyY10iLCAhL3ZsaXZlLnFxdmlkZW8udGMucXEuY29tLy50ZXN0KHZpZGVvLnNyYykpIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnR4cF9hZCB2aWRlb1tzcmNdIikgJiYgKCQoIi50eHBfYWQgdmlkZW9bc3JjXSIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgICAgc2tpcEFkVmlkZW8oZSk7CiAgICAgICAgICB9KSksIHRvZ2dsZVNraXBBZFRpcCgiLnR4cF9hZCIpKTsKICAgICAgICB9KSksIGlzTW9iaWxlKSB7CiAgICAgICAgICBsZXQgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNwbGF5X3N5bmMiKSwgZSA9IG4gJiYgbi52YWx1ZTsKICAgICAgICAgIGlmICghZSkgewogICAgICAgICAgICBjb25zdCBuID0gKGF3YWl0IGZldGNoKGxvY2F0aW9uLmhyZWYpLnRoZW4oKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICByZXR1cm4gbi50ZXh0KCk7CiAgICAgICAgICAgIH0pKSkubWF0Y2goL2lkPVsnIl1wbGF5X3N5bmMuKz92YWx1ZT1bJyJdKFteJyJdKykvKTsKICAgICAgICAgICAgbiAmJiAoZSA9IG5bMV0pOwogICAgICAgICAgfQogICAgICAgICAgZSAmJiAoZSA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGUpKSwgY29uc29sZS5jb25zb2xlLmxvZyhlKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgaGlkZTogJy5tb2Rfc291cmNlLCAudmlkZW9fZnVuY3Rpb24sIC5tb2RfcHJvbW90aW9uLCAjdmlwX3ByaXZpbGVnZSwgI3ZpcF9hY3Rpdml0eSwgLlVfYmdfYiwgLmJ0bl9vcGVuX3YsIC5idG5fb3BlbmFwcCwgI3ZpcF9oZWFkZXIsIC5idG5fdXNlcl9oZCwgLm1vZF9zaWRlc2xpcF9wcml2aWxlZ2VzLCAubW9kX2dhbWVfcmVjLCAubW9kX3NvdXJjZSwgLm1vZF9wcm9tb3Rpb24sIC5tb2Rfc2lkZXNsaXBfaCwgLmJ0bl9vcGVuLCAuYnRuX3BheSwgLm1vZF9ib3hfbGFzdHZpZXcsIC5tb2RfdmlwX3BvcHVwLCAubW9kX3ZpcF9wb3B1cCArIC5tYXNrX2xheWVyLCB0eHBkaXZbZGF0YS1yb2xlPSJoZC1hZC1hZGFwdGVyLWludGVyYWN0aXZlbGF5ZXIiXSwgLm1vZF9hZCwgLnR2cF9hcHBfYmFyLCAudHhwLXdhdGVybWFyaywgLm1vZF9yZWNvbW1lbmQnLAogICAgY3NzOiAiXG5ib2R5LCAjdmlwX3RpdGxlIHtwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O30ubW9kX2VwaXNvZGVzX251bWJlcnMuaXMtdmlwIC5pdGVtIHt3aWR0aDogYXV0bztwYWRkaW5nOiAwIDFlbTt9LlVfaHRtbF9iZyAuY29udGFpbmVyIHtwYWRkaW5nLWJvdHRvbTogMzBweDt9Lm1vZF9wbGF5IC5tb2RfcGxheWVyX3ZpcHRpcHMgLmJ0bl90cnkge2xlZnQ6IDMwJTt9Lm1vZF9ib3ggLm1vZF92aWRlb19pbmZvIHttYXJnaW4tdG9wOiAxZW07fSIKICB9LCB7CiAgICBuYW1lOiAi54ix5aWH6Im6IiwKICAgIG1hdGNoOiAiLmlxaXlpLmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaHxzb1wuaXFpeWkvLAogICAgICBqdW1wOiAiLS5tLWJveCwgLmxheW91dC1tYWluLCAuc2VhcmNoLWNvbi1wYWdlIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3ZfLywKICAgICAgdmlwOiAnZGl2W25hbWU9Im0tdmlkZW9JbmZvIl0sICNibG9jay1DLCAuby0tcGMgLnR3LXBsYXktaW5mby13cmFwIC50dy1wbGF5LWluZm8sIC5vLS1tIC50dy1tLXBsYXktaW5mbyAubS1wbGF5LWludHJvJywKICAgICAgdGl0bGU6ICIjd2lkZ2V0LXZpZGVvdGl0bGUsIC52aWRlby10aXRsZSwgLmMtdGl0bGUtbGluaywgLnBsYXllci10aXRsZSBhLCAudHctcGxheS10aXRsZSAuZHJhbWEtbmFtZSwgLnR3LXBsYXktdGl0bGUiLAogICAgICBmaXhVcmw6IG4gPT4gbi5yZXBsYWNlKC9cLmh0bWwuKi8sICIuaHRtbCIpLnJlcGxhY2UoInR3LiIsICJ3d3cuIiksCiAgICAgIGpzKCkgewogICAgICAgIGxldCBuID0gW10sIGUgPSAoJCgnW25hbWU9ImFwcGxlLWl0dW5lcy1hcHAiXScpLmF0dHIoImNvbnRlbnQiKSB8fCAiIikubWF0Y2goL2FpZD1cZHsyLH0vKTsKICAgICAgICBpZiAoZSkgewogICAgICAgICAgZmV0Y2goImh0dHBzOi8vcGN3LWFwaS5pcWl5aS5jb20vYWxidW1zL2FsYnVtL2F2bGlzdGluZm8/cGFnZT0xJnNpemU9OTk5OSYiICsgZVswXSkudGhlbigoZnVuY3Rpb24obikgewogICAgICAgICAgICByZXR1cm4gbi5qc29uKCk7CiAgICAgICAgICB9KSkudGhlbigoZnVuY3Rpb24oZSkgewogICAgICAgICAgICBuID0gZS5kYXRhLmVwc29kZWxpc3Q7CiAgICAgICAgICB9KSk7CiAgICAgICAgICBsZXQgdCA9IDA7CiAgICAgICAgICBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGxldCBlID0gKygkKCIucXktZXBpc29kZS1udW0gLnNlbGVjdC1pdGVtLnNlbGVjdGVkIC5zZWxlY3QtbGluayIpLnRleHQoKSB8fCAwKTsKICAgICAgICAgICAgaWYgKGUgJiYgZSAhPT0gdCkgewogICAgICAgICAgICAgIHQgPSBlOwogICAgICAgICAgICAgIGxldCBpID0gblt0IC0gMV07CiAgICAgICAgICAgICAgaWYgKGkpIHsKICAgICAgICAgICAgICAgIGxldCBuID0gaS5wbGF5VXJsLnJlcGxhY2UoL2h0dHBzPzovLCBsb2NhdGlvbi5wcm90b2NvbCk7CiAgICAgICAgICAgICAgICBpZiAobiAhPT0gb29QbGF5VXJsKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBvb1BsYXlVcmwgfHwgbG9jYXRpb24uaHJlZjsKICAgICAgICAgICAgICAgICAgb29QbGF5VXJsID0gbjsKICAgICAgICAgICAgICAgICAgY29uc3QgdCA9ICgkKCIucXktZXBpc29kZS1udW0gLnNlbGVjdC1pdGVtLnNlbGVjdGVkIC5pY29uLXRyIGltZyIpLmF0dHIoInNyYyIpIHx8ICIiKS5pbmNsdWRlcygiLXByZS0iKTsKICAgICAgICAgICAgICAgICAgRS5lbWl0KCJ1cmwuY2hhbmdlIiwgewogICAgICAgICAgICAgICAgICAgIG9sZFVybDogZSwKICAgICAgICAgICAgICAgICAgICBuZXdVcmw6IG4sCiAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXk6ICF0CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSksIDIwMCk7CiAgICAgICAgfQogICAgICAgIGlmIChpc01vYmlsZSkgcmV0dXJuOwogICAgICAgIGxldCB0ID0gMDsKICAgICAgICBza2lwQWRWaWRlb1dyYXBwZXIoKGZ1bmN0aW9uKCkgewogICAgICAgICAgaWYgKDAgPT09IHQgJiYgMCA8ICQoIi5jdXBpZC1wdWJsaWMtdGltZSIpLmxlbmd0aCAmJiAibm9uZSIgIT09ICQoIi5jdXBpZC1wdWJsaWMtdGltZSIpLmNzcygiZGlzcGxheSIpKSB7CiAgICAgICAgICAgIGdldEdsb2JhbCgiRGF0ZSIpLm5vdyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHJldHVybiAobmV3IHdpbmRvdy5EYXRlKS5nZXRUaW1lKCkgKyAodCArPSAxZTQpOwogICAgICAgICAgICB9LCBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgdCA9IDA7CiAgICAgICAgICAgIH0pLCA2ZTUpOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5pcXAtcGxheWVyIHZpZGVvIik7CiAgICAgICAgICBpZiAobiAmJiAhbi5pc1NraXAgJiYgMSA8IG4ucmVhZHlTdGF0ZSAmJiAwIDwgJCgiLmJvdHRvbS1wdWJsaWMiKS5sZW5ndGggJiYgIm5vbmUiICE9PSAkKCIuYm90dG9tLXB1YmxpYyIpLmNzcygiZGlzcGxheSIpKSB7CiAgICAgICAgICAgIGNvbnN0IG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuc2tpcHBhYmxlLWFmdGVyIik7CiAgICAgICAgICAgIG4gJiYgIW4uaXNTa2lwQ2xpY2sgJiYgKGlzU2tpcENsaWNrID0gITAsIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIG4uY2xpY2soKSwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBuLmlzU2tpcENsaWNrID0gITE7CiAgICAgICAgICAgICAgfSksIDFlMyk7CiAgICAgICAgICAgIH0pLCAxZTMpKTsKICAgICAgICAgIH0KICAgICAgICB9KSk7CiAgICAgIH0KICAgIH0sCiAgICBoaWRlOiAnLm0taXF5RG93biwgLmhlYWRlci1sb2dpbiArIGRpdiwgLm0tdmlkZW8tYWN0aW9uLCBkaXZbbmFtZT0ibS12aXBSaWdodHMiXSwgZGl2W25hbWU9Im0tZXh0ZW5kQmFyIl0sIC5tLWlxeWxpbmstZGl2ZXJzaW9uLCAubS1pcXlsaW5rLWd1aWRlLCAuYy1vcGVuVmlwLCAuYy1zY29yZS1idG4sIC5tLXZpZGVvVXNlci1zcGFjaW5nLCAubS1wcC1lbnRyYW5jZSwgLm0taG90V29yZHMtYm90dG9tLCBkaXZbdGVtcGxhdGUtdHlwZT0iQUxCVU0iXSAubS1wbGF5ZXItdGlwLCAuaXFwLWJveC1pbnRlZ3JhbCwgLmJ0bi10aWNrZXQsIC5idG4teXV5dWUsIC5idG4tZG93bmxvYWQsIC5tLWlxeURvd24sIC5pcXAtcGxheWVyIGRpdlthZGlkXSwgLmRldGFpbC1zZCwgLnNjcm9sbC1hbmNob3IgPiAqOm5vdCg6bGFzdC1jaGlsZCksICNpUHJvZ3Jlc3MgfiBkaXZbc3R5bGVdJywKICAgIGNzczogJy5wYWdlX3BsYXkge3BhZGRpbmctYm90dG9tOiAwO31kaXZbbmFtZT0ibS12aWRlb0luZm8iXSB7cGFkZGluZy10b3A6IDFlbTt9Lm0tYm94LWl0ZW1zIC5vLS1hbGJ1bS1pdGVtIHtib3JkZXItcmFkaXVzOiAwLjA1ZW07YmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtjb2xvcjogIzQ5NTA1NztwYWRkaW5nOiAwLjVlbSAxZW07ZGlzcGxheTogaW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7YWxpZ24taXRlbXM6IGNlbnRlcjttYXJnaW46IDAuMjVlbTtmb250LXdlaWdodDogYm9sZDt9Lm0tdmlkZW8tcGxheWVyICNvLS1wbGF5ZXItaWZyYW1lIHtwYWRkaW5nLXRvcDogNTYuMjUlO3RvcDogNTAlO3RyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTt9LnF5LWhlYWRlciAuaGVhZGVyLXdyYXAge3otaW5kZXg6ICcgKyBNQVhfWl9JTkRFWCArICI7fSIKICB9LCB7CiAgICBuYW1lOiAi5LyY6YW3IiwKICAgIG1hdGNoOiAveW91a3UuY29tfHNva3UuY29tLywKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL3Nva3UuY29tXC9tLitxPXx5b3VrdS5jb21cL3NlYXJjaF92aWRlby8sCiAgICAgIGp1bXA6ICcjYnBtb2R1bGUtbWFpbiwgLnlrX3Jlc3VsdCwgZGl2W2NsYXNzXj0icGFnaW5hdGlvbi1ib3giXSwgLnlrLWZvb3RlciB8IGJlZm9yZScKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAveW91a3VcLmNvbVwvW2F2XS8sCiAgICAgIHZpcDogIi5oNS1kZXRhaWwtaW5mbywgLnBsYXllci10aXRsZSIsCiAgICAgIHRpdGxlOiAiLnBsYXllci10aXRsZSAuc3VidGl0bGUgYSwgLm1vZHVsZS1uYW1lIGgxLCAuYW50aG9sb2d5LXRpdGxlLXdyYXAgLnRpdGxlLCAudGl0bGUtbGluayIsCiAgICAgIGZpeFVybDogITAsCiAgICAgIGpzKCkgewogICAgICAgIGlzTW9iaWxlIHx8IChza2lwQWRWaWRlb1dyYXBwZXIoKGZ1bmN0aW9uKCkgewogICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmg1LWV4dC1sYXllciB2aWRlb1tzcmNdIikgJiYgKCQoIi5oNS1leHQtbGF5ZXIgdmlkZW9bc3JjXSIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgICAgZS5tdXRlZCA9ICEwLCBlLnZvbHVtZSA9IDAsIHNraXBBZFZpZGVvKGUpOwogICAgICAgICAgfSkpLCB0b2dnbGVTa2lwQWRUaXAoIi5oNS1leHQtbGF5ZXIiKSk7CiAgICAgICAgfSkpLCAkJCgiLmg1LWV4dC1sYXllciB2aWRlb1tzcmNdIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICQoIi5oNS1leHQtbGF5ZXIsIC55ay10cmlnZ2VyLWxheWVyIikuYWRkQ2xhc3MoIm8tLWhpZGUiKTsKICAgICAgICAgICAgbGV0IG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIueW91a3UtcGxheWVyIHZpZGVvIik7CiAgICAgICAgICAgIGlmICghbikgcmV0dXJuOwogICAgICAgICAgICBuLm11dGVkID0gITEsIC4wMSA+PSBuLnZvbHVtZSAmJiAobi52b2x1bWUgPSAuNCksIG4ucGF1c2VkICYmIG4ucGxheSgpOwogICAgICAgICAgICBsZXQgZSA9ICExOwogICAgICAgICAgICAkKCIuaDUtbGF5ZXItY29uYXRpbmVyIikuY3NzKCJjdXJzb3IiLCAicG9pbnRlciIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLCAoZnVuY3Rpb24odCkgewogICAgICAgICAgICAgICQodC50YXJnZXQpLmhhc0NsYXNzKCJoNS1sYXllci1jb25hdGluZXIiKSAmJiAodC5wcmV2ZW50RGVmYXVsdCgpLCB0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLAogICAgICAgICAgICAgIGUgPSAhbi5wYXVzZWQsIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgbi5wYXVzZWQgPT09IGUgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmg1cGxheWVyLWRhc2hib2FyZCAuY29udHJvbC1wbGF5LWljb24iKS5jbGljaygpOwogICAgICAgICAgICAgIH0pLCAxMDApKTsKICAgICAgICAgICAgfSkpOwogICAgICAgICAgfSksIDFlMyk7CiAgICAgICAgfSkpLCAkJCgiLnF1YWxpdHktZGFzaGJvYXJkIC55b3VrdV92aXBfcGF5X2J0biwgLnF1YWxpdHktZGFzaGJvYXJkIC5sb2dpbi1jYW51c2UiLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAkKCIucXVhbGl0eS1kYXNoYm9hcmQgLnlvdWt1X3ZpcF9wYXlfYnRuLCAucXVhbGl0eS1kYXNoYm9hcmQgLmxvZ2luLWNhbnVzZSIpLnJlbW92ZUNsYXNzKCJ5b3VrdV92aXBfcGF5X2J0biBkaXNhYmxlIGxvZ2luLWNhbnVzZSIpLAogICAgICAgICAgJCgiLnF1YWxpdHktaXRlbSIpLm9uKCJjbGljayIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgJCgiLmg1cGxheWVyLWRhc2hib2FyZCAuY29udHJvbC1wbGF5LWljb24iKS5oYXNDbGFzcygiY29udHJvbC1wYXVzZS1pY29uIikgfHwgJCgiLmg1LWxheWVyLWNvbmF0aW5lciIpLmdldCgwKS5jbGljaygpLAogICAgICAgICAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgJCgiLmg1cGxheWVyLWRhc2hib2FyZCAuY29udHJvbC1wbGF5LWljb24iKS5oYXNDbGFzcygiY29udHJvbC1wYXVzZS1pY29uIikgfHwgJCgiLmg1LWxheWVyLWNvbmF0aW5lciIpLmdldCgwKS5jbGljaygpOwogICAgICAgICAgICAgIH0pLCAxNTAwKTsKICAgICAgICAgICAgfSksIDE1MDApOwogICAgICAgICAgfSkpOwogICAgICAgIH0pKSk7CiAgICAgIH0KICAgIH0sCiAgICBoaWRlOiAnLmg1LWRldGFpbC1ndWlkZSwgLmg1LWRldGFpbC1hZCwgLmJyaWVmLWJ0bSwgLnNtYXJ0QmFubmVyQnRuLCAuY210LXVzZXItYWN0aW9uLCAjcmlnaHQtdGl0bGUtYWQtYmFubmVyLCAuQ29ybmVyLWNvbnRhaW5lciwgLnlvdWt1LWxheWVyLXd1bGlhbywgLnFyLXdyYXAsIC5xdWFsaXR5LWl0ZW1bY2xhc3MqPSJwIl0gLnZpcC1sYWJlbCwgLmF3YXJkLXBhc3MsIC5pY29uc2hvdWNhbmcgfiBkaXYgLm1vZGFsLXBvc2l0aW9uLWNvbnRhaW5lciwgLmpzLXRvcC1pY29uJywKICAgIGNzczogIlxuI2JwbW9kdWxlLXBsYXlwYWdlLWxlZnR0aXRsZSB7aGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7fS5sZWZ0LXRpdGxlIC5sZWZ0LXRpdGxlLWNvbnRlbnQtd3JhcCB7d2lkdGg6IDEwMCU7fS5zZWFyY2gtYnV0dG9uLWJveCB7ZGlzcGxheTogaW5saW5lLWJsb2NrO30iCiAgfSwgewogICAgbmFtZTogIuWcn+ixhiIsCiAgICBtYXRjaDogIi50dWRvdS5jb20iLAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvdlwvLywKICAgICAgdmlwOiAiLnBsYXktdmlkZW8tZGVzYywgLnRkLXBsYXlfX2Jhc2VpbmZvIiwKICAgICAgdGl0bGU6ICIudGQtbGlzdGJveF9fdGl0bGUsIC52aWRlby1kZXNjLXRpdGxlIiwKICAgICAgZml4VXJsOiAhMAogICAgfSwKICAgIGhpZGU6ICIudmlkZW8tcGxheWVyLXRvcGJhciwgLnRkLWg1X19wbGF5ZXJfX2FwcGd1aWRlLCAjdHVkb3UtZm9vdGVyLCAuZHJvcGRvd25fX3BhbmVsX19jb24iCiAgfSwgewogICAgbmFtZTogIuiKkuaenCIsCiAgICBtYXRjaDogIi5tZ3R2LmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NvLywKICAgICAganVtcDogIiNwYWdpbmF0b3IsIC5oaXR2X3BhZ2UsIC0ucmVzdWx0LWJveCAubWVkaWEiLAogICAgICBrZXl3b3JkOiAva1stPV0oW14mXD9cL1wuXSspLwogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL1tibF1cLy8sCiAgICAgIHZpcDogWyAiLnh1YW5qaSB8IGJlZm9yZSIsICIudi1wYW5lbC1ib3gsIC5jb250cm9sLWxlZnQiIF0sCiAgICAgIHRpdGxlOiAiLnYtcGFuZWwtdGl0bGUsIC52dC10eHQsIC5tLXBsYXllci1vcGVuIC5jb250cm9sLWxlZnQgLnRpdGxlIiwKICAgICAgZml4VXJsOiAhMCwKICAgICAganMoKSB7CiAgICAgICAgbGV0IG47CiAgICAgICAgc2tpcEFkVmlkZW9XcmFwcGVyKChmdW5jdGlvbigpIHsKICAgICAgICAgIGlzTW9iaWxlIHx8IChuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnZpZGVvIHZpZGVvW3NyY10iKSkgJiYgL3ZpZGVvLmRhLm1ndHYuY29tLy50ZXN0KG4uc3JjKSAmJiAoc2tpcEFkVmlkZW8obiksCiAgICAgICAgICB0b2dnbGVTa2lwQWRUaXAoIi52aWRlbyBjb250YWluZXIiKSk7CiAgICAgICAgfSkpOwogICAgICB9CiAgICB9LAogICAgaGlkZTogIi5hZC1iYW5uZXIsIC52aWRlby1hcmVhLWJhciwgLnZpZGVvLWVycm9yIC5idG4sIC5tLXZpcC1saXN0LCAubS12aXAtbGlzdCArIGRpdjpub3QoW2NsYXNzXSksIC50b2FwcCwgLnZpZGVvLWNvbW1lbnQgLmZ0LCAubWctYXBwLXN3aXAsIG1hbmdvLXBsdWdpbi1hZCwgbWFuZ28tY29udHJvbC10aXAiLAogICAgY3NzOiAiLm0tcGxheWVyLW9wZW4gLmNvbnRyb2wtbGVmdCB7ZmxvYXQ6IHVuc2V0ICFpbXBvcnRhbnQ7fSIKICB9LCB7CiAgICBuYW1lOiAi5pCc54uQIiwKICAgIG1hdGNoOiAvKGZpbG18dHYpXC5zb2h1XC5jb20vLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvKGtleXx3ZCk9LywKICAgICAganVtcDogIi5zc01vcmUgfCBiZWZvcmUsIC5zZWxlY3QtY29udGFpbmVyIHwgYmVmb3JlIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cLyh2fGFsYnVtXC98cGhvbmVfcGxheV9maWxtfFxkK1wvblxkKy5zaHRtbCkvLAogICAgICB2aXA6ICIudGl0bGUtd3JhcCwgLnZpZGVvSW5mbywgLnR3LWluZm8sIC5wbGF5ZXItZGV0YWlsLCAubW92aWUtaW5mby1jb250ZW50IiwKICAgICAgdGl0bGU6ICIjdmluZm9ib3ggaDIsIC50LWluZm8sIC5tb3ZpZS10IGgzIiwKICAgICAgZml4VXJsKG4pIHsKICAgICAgICBpZiAoL3Bob25lX3BsYXlfZmlsbS4rY2hhbm5lbGVkPS8udGVzdChuKSkgewogICAgICAgICAgY29uc3QgZSA9IG4ubWF0Y2goL2NoYW5uZWxlZD0oXHcrKS8pWzFdOwogICAgICAgICAgcmV0dXJuICJodHRwczovL2ZpbG0uc29odS5jb20vYWxidW0vIiArIG4ubWF0Y2goL2FpZD0oXHcrKS8pWzFdICsgIi5odG1sP2NoYW5uZWxlZD0iICsgZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG47CiAgICAgIH0sCiAgICAgIGpzKCkgewogICAgICAgIGxldCBuOwogICAgICAgIHNraXBBZFZpZGVvV3JhcHBlcigoZnVuY3Rpb24oKSB7CiAgICAgICAgICBpc01vYmlsZSB8fCAobiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi54LXZpZGVvLWFkdiB2aWRlb1tzcmNdIikpICYmIChza2lwQWRWaWRlbyhuKSwKICAgICAgICAgIHRvZ2dsZVNraXBBZFRpcCgiLngtdmlkZW8tYWR2IikpOwogICAgICAgIH0pKTsKICAgICAgfQogICAgfSwKICAgIGhpZGU6ICIuYWN0di1iYW5uZXIsIC5idG4teHotYXBwLCAudHdpbmZvX2ljb253cmFwLCAuYnRuLWNvbW1lbnQtYXBwLCAjYWRfYmFubmVyLCAuYWR2ZXJ0aXNlLCAubWFpbi1hZC12aWV3LWJveCwgLmZvb3Quc29odS1zd2lwZXIsIC5hcHAtc3Rhci12Ym94LCAuYXBwLWd1ZXNzLXZib3gsIC5tYWluLXJlYy12aWV3LWJveCwgLmFwcC1xaWFuZmFuLWJveCwgLmNvbW1lbnQtZW1wdHktYmcsIC5jb3B5aW5mbywgLnBoLXZib3gsIC5idG5fbV9hY3Rpb24sIC5idG4teHotYXBwLCAjZmlsbV90b3BfYmFubmVyLCAuYnRuLWNvbW1lbnQtYXBwLCAuYWR2LCAueC1hZHYtcGF1c2Utbm9ubGluZWFyLXBhbmVsIiwKICAgIGNzczogIi5jb21tZW50LWVtcHR5LXR4dCB7bWFyZ2luLWJvdHRvbTogMDt9LmFwcC12aWV3LWJveCArIGZvb3RlciB7cGFkZGluZzogMDtvcGFjaXR5OiAwLjU7fSNzb2h1cGxheWVyICNtZW51IHt6LWluZGV4OiAiICsgTUFYX1pfSU5ERVggKyAiO30iCiAgfSwgewogICAgbmFtZTogIuS5kOinhiIsCiAgICBtYXRjaDogIi5sZS5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2h8c28ubGUuY29tXC9zLywKICAgICAganVtcDogIi5jb2x1bW5fdGl0IHwgYmVmb3JlLCAuUmVsYXRlIHwgYmVmb3JlIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cLyhwdHZcL3ZwbGF5XC98dnBsYXlfKS8sCiAgICAgIHZpcDogIi5pbnRyb2R1Y3Rpb25fYm94LCAuYnJpZWZJbnRyb19sZWZ0IC5pbmZvX2xpc3QiLAogICAgICB0aXRsZTogIi5icmllZkludHJvX2luZm8gLmluZm9fdGl0LCAjai1pbnRyb2R1Y3Rpb24gaDIiLAogICAgICBmaXhVcmw6ICEwCiAgICB9LAogICAgaGlkZTogIi5nYW1lUHJvbW90aW9uLCAuZ2FtZVByb21vdGlvblR4dCwgI2otbGVhcHBNb3JlLCAubGJ6RGFvbGl1LCAuYXJrQm94IgogIH0sIHsKICAgIG5hbWU6ICLlkqrlkpUiLAogICAgbWF0Y2g6ICJtaWd1dmlkZW8uY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL3NlYXJjaC5odG1sLywKICAgICAganVtcDogIi5zZWFyY2gtcGFnaW5hdGlvbiwgLnNlYXJjaC1tYWluIiwKICAgICAga2V5d29yZDogL2tleXdvcmRzPShbXiZcP1wvXC5dKyl8XD8uKiMoW14mXD9cL1wuXSspLwogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9kZXRhaWwuaHRtbC8sCiAgICAgIHZpcDogIi5wbGF5ZXJGb290ZXIsIC5wcm9ncmFtZ3JvdXAiLAogICAgICB0aXRsZTogIi5sZWZ0LWJveCAudGl0bGUsIC5lcGlzb2RlVGl0bGUsIC52aWRlb190aXRsZSIKICAgIH0sCiAgICBoaWRlOiAnLmdyb3VwLWl0ZW1bbmFtZSo9IuW5v+WRiiJdLCAub3BlbkNsaWVudCcKICB9LCB7CiAgICBuYW1lOiAiUFBUViIsCiAgICBtYXRjaDogIi5wcHR2LmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9zb3UuKyhrd3xrZXl3b3JkKT0vLAogICAgICBqdW1wOiAiLnBhZ2luYXRpb24sIC56aGVuZ3BpYW4tYm94IHwgYXBwZW5kIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3Nob3dcLy8sCiAgICAgIHZpcDogIi5tIC5jZiwgLnZvZC10aXQsIC52b2QtaW50b3IiLAogICAgICB0aXRsZTogIiN2aWRlby1pbmZvIGgxLCAudm9kLXRpdC1pbiBzcGFuLCAudGl0IiwKICAgICAgZml4VXJsOiAhMAogICAgfSwKICAgIGhpZGU6ICcudy12aWRlby12YXN0YWQsICN2aWRlby1kb3dubG9hZC1nYW1lLCBkaXZbY2xhc3MqPSJvcGVuYXBwIl0sIGRpdltjbGFzcyo9InNpZGUtYWR2Il0sIGRpdltpZCo9ImFmcF8iXSwgZGl2W2lkKj0iLWFmcCJdLCBpZnJhbWVbc3JjKj0iL2dhbWUvIl0sIC5hZnBQb3NpdGlvbiwgLmRvd25sb2FkLWljb25iYXInCiAgfSwgewogICAgbmFtZTogIuWNjuaVsCIsCiAgICBtYXRjaDogIndhc3UuY24iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvU2VhcmNoXC8uK2s9LywKICAgICAganVtcDogIiN0b3BWb2QiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1twUF1sYXlcL3Nob3dcLy8sCiAgICAgIHZpcDogIi5tb3ZpZV90aXRsZSIsCiAgICAgIHRpdGxlOiAiLm1vdmllX3RpdGxlIGgyIiwKICAgICAgZml4VXJsOiAhMAogICAgfSwKICAgIGhpZGU6ICdkaXZbaWQqPSJCQUlEVSJdLCAucGxheWVyX21lbnVfY29uLCBib2R5ID4gZGl2W3N0eWxlKj0iZml4ZWQiXScKICB9LCB7CiAgICBuYW1lOiAiMTkwNSIsCiAgICBtYXRjaDogIjE5MDUuY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNoL2ksCiAgICAgIGp1bXA6ICIucGFnaW5hdGlvbiwgI25ld19wYWdlIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3BsYXkvLAogICAgICB2aXA6ICIucGxheWVyQm94LWluZm8sICNtb3ZpZV9pbmZvLCAucGxheWVyLW5hdiIsCiAgICAgIHRpdGxlOiAiI21vdmllX2luZm8gLmluZm9Jbm5lciAudGl0bGUsIC5tb3ZpZS10aXRsZSwgLnR2X3RpdGxlIiwKICAgICAgZml4VXJsOiAhMAogICAgfSwKICAgIGhpZGU6ICIjYXBwX3N0b3JlLCAub3Blbk1lbWJlcnNoaXBCdG4sIGJvZHkgPiBkaXZbaWRdOm5vdChbY2xhc3NdKSA+IGlmcmFtZSwgLnB2Mi1hZHZlcnRpc2VtZW50LCAub3Blbi1hcHAiLAogICAgY3NzOiAiXG4jbW92aWVfaW5mbyB7bWFyZ2luLXRvcDogMWVtO30iCiAgfSwgewogICAgbmFtZTogIjEwODDlvbHop4YiLAogICAgbWF0Y2g6ICJrMTA4MC5uZXQiLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvd2Q9LywKICAgICAganVtcDogIi5teXVpLXBhZ2UsIC5teXVpLXBhbmVsLWJveCB8IGFwcGVuZCIsCiAgICAgIHJlc3VsdDogIi5zZWFyY2hrZXkiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvdm9kcGxheS8sCiAgICAgIHRpdGxlOiAiLm15dWktcGxheWVyX19kYXRhIGgzIGEsIC5jb2wtcGQgPiAubXl1aS1wYW5lbF9faGVhZCBoMyIsCiAgICAgIGp1bXA6ICIubXl1aS1wbGF5ZXJfX2RhdGEiCiAgICB9LAogICAgaGlkZTogImJvZHkgPiAqOm5vdChzY3JpcHQpICsgc2NyaXB0IH4gKltpZF0iLAogICAgY3NzOiAiXG4jcGxheWVyLXNpZGViYXIge2hlaWdodDogYXV0byAhaW1wb3J0YW50O30iCiAgfSwgewogICAgbmFtZTogIjEwOTDlvbHop4YiLAogICAgbWF0Y2g6IC8xMDkweXNcZD8uY29tLywKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL2M9c2VhcmNoLywKICAgICAganVtcDogIi5zdHVpLXBhZ2UsIC5zdHVpLXBhbm5lbCIsCiAgICAgIGp1bXBUbzogWyAiLnN0dWktdm9kbGlzdF9fbWVkaWEgYSIsIC8uKnNob3dcLyhcZCspLiovLCAiL3BsYXkvJDF+MH4wLmh0bWwiIF0sCiAgICAgIGtleXdvcmQoKSB7CiAgICAgICAgY29uc3QgbiA9IGxvY2F0aW9uLmhyZWYubWF0Y2goL3dkPShbXi0mXSspLyk7CiAgICAgICAgcmV0dXJuIG4gPyBuWzFdIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm1vcmUgKyAudGl0bGUiKS50ZXh0Q29udGVudDsKICAgICAgfSwKICAgICAgcmVzdWx0OiAiaDMudGl0bGUgYSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC9wbGF5LywKICAgICAgdGl0bGU6ICJoNCBmb250IiwKICAgICAganVtcDogIi50YWItY29udGVudC5zdHVpLXBhbm5lbF9iZCIKICAgIH0sCiAgICBoaWRlOiAiLmNvbnRhaW5lciB+ICpbaWRdLCBib2R5ID4gLmNvbnRhaW5lciA+IHBbc3R5bGVdIiwKICAgIGNzczogIlxuYm9keSB7cGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDt9IgogIH0sIHsKICAgIG5hbWU6ICLlroznvo7nnIvnnIsiLAogICAgbWF0Y2g6ICJ3YW5tZWlray5tZSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NvXC8vLAogICAgICBqdW1wOiAiLnN0dWktcGFnZSwgLnN0dWktcGFubmVsIiwKICAgICAganVtcFRvOiBbICIuc3R1aS12b2RsaXN0X19tZWRpYSBhIiwgLy4qcHJvamVjdFwvKFxkKykuKi8sICIvcGxheS8kMS0xLTEuaHRtbCIgXSwKICAgICAgcmVzdWx0OiAiaDMudGl0bGUgYSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC9wbGF5LywKICAgICAgdGl0bGU6ICJoMSBhIiwKICAgICAganVtcDogIi0ucGxheWxpc3QiCiAgICB9LAogICAgaGlkZTogIi5jb250YWluZXIgfiAqW2lkXSIKICB9LCB7CiAgICBuYW1lOiAi5Zyo57q/5LmL5a62IiwKICAgIG1hdGNoOiAienh6ai5tZSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC93ZD0vLAogICAgICBqdW1wOiAiLnN0dWktcGFubmVsX19mdCIsCiAgICAgIGp1bXBUbzogWyAiLnN0dWktdm9kbGlzdCBhIiwgLy4qZGV0YWlsXC8oXGQrKS4qLywgIi92aWRlby8kMS0xLTEuaHRtbCIgXSwKICAgICAgcmVzdWx0OiAiLnN0dWktdm9kbGlzdCAudGl0bGUgYSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC92aWRlby8sCiAgICAgIHRpdGxlOiAiaDEiLAogICAgICBqdW1wOiAiLnN0dWktcGxheWVyIgogICAgfSwKICAgIGhpZGU6ICdib2R5ID4gZGl2W2NsYXNzXj0iQUQiXSwgYm9keSA+ICo6bm90KHNjcmlwdCkgKyBzY3JpcHQgfiAqW2lkXScKICB9LCB7CiAgICBuYW1lOiAiOTHnvo7liaciLAogICAgbWF0Y2g6ICI5MW1qdy5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvcz0vLAogICAgICBrZXl3b3JkOiAvcz0oLispLywKICAgICAganVtcDogIi5saXN0LWNvbnRlbnQgfCBhcHBlbmQiLAogICAgICByZXN1bHQ6IHsKICAgICAgICB0aXRsZTogIi5tLW1vdmllcyAudS1tb3ZpZSBoMiIsCiAgICAgICAgdXJsOiAiLm0tbW92aWVzIC51LW1vdmllIGEiCiAgICAgIH0KICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC92cGxheS8sCiAgICAgIHRpdGxlOiAiLnZ0aXRsZSBhIiwKICAgICAganVtcDogIi5tZ3BsYXlsaXN0IgogICAgfSwKICAgIGhpZGU6ICJib2R5ID4gKjpub3Qoc2NyaXB0KSArIHNjcmlwdCB+ICpbaWRdLCBkaXY6bm90KFtpZF0pID4gaWZyYW1lLCBhID4gaWZyYW1lLCAuYWRzIgogIH0sIHsKICAgIG5hbWU6ICLlk5Tmu7QiLAogICAgbWF0Y2g6ICJiZGU0LmNvbSIsCiAgICBkaXNhYmxlOiAhMCwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNoLywKICAgICAganVtcDogIi5zZWFyY2gtbGlzdCIsCiAgICAgIHJlc3VsdDogImEuaGVhZGVyIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3BsYXkvLAogICAgICB0aXRsZTogIi5wbGF5ZXItd3JhcHBlciArIC5jb250YWluZXIgYSArIGEiLAogICAgICBqdW1wOiAiLnBsYXllci13cmFwcGVyICsgLmNvbnRhaW5lciIKICAgIH0sCiAgICBoaWRlOiAiYm9keTo6YWZ0ZXIsIGJvZHkgPiAqOm5vdChzY3JpcHQpICsgc2NyaXB0IH4gKltpZF0iCiAgfSwgewogICAgbmFtZTogIuelnumprCIsCiAgICBtYXRjaDogInNoZW5tYTQ0ODAuY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNoLywKICAgICAganVtcDogIi5zdHVpLXBhZ2UsIC5zdHVpLXBhbm5lbCIsCiAgICAgIGp1bXBUbzogWyAiLnN0dWktdm9kbGlzdCBhIiwgLy4qZGV0YWlsXC8oXGQrKS4qLywgIi9wbGF5LyQxLTEtMS8iIF0sCiAgICAgIHJlc3VsdDogIi5zdHVpLXZvZGxpc3RfX3RpdGxlIGEiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvcGxheS8sCiAgICAgIHRpdGxlOiAiaDEgYSIsCiAgICAgIGp1bXA6ICItLnN0dWktcGFubmVsIHwgYmVmb3JlIgogICAgfQogIH0sIHsKICAgIG5hbWU6ICJUVkIiLAogICAgbWF0Y2g6ICJoa3R2eWIuY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvc2VhcmNoLywKICAgICAganVtcDogIi5teXVpLXBhZ2UsIC5teXVpLXBhbm5lbF9iZCB8IGJlZm9yZSwgLm15dWktcGFuZWwgfCBhcHBlbmQiLAogICAgICBqdW1wVG86IFsgIiNzZWFyY2hMaXN0IGEiLCAvLipkZXRhaWxcL2lkXC8oXGQrKS4qLywgIi92b2QvcGxheS9pZC8kMS9zaWQvMS9uaWQvMS5odG1sIiBdLAogICAgICByZXN1bHQ6ICIuc2VhcmNoa2V5IgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3ZvZFwvcGxheS8sCiAgICAgIHRpdGxlOiAiaDMgYSIsCiAgICAgIGp1bXA6ICIubXl1aS1wYW5lbC1ib3giCiAgICB9LAogICAgaGlkZTogImJvZHkgPiBpZnJhbWUsIGJvZHkgPiBkaXZbc3R5bGVdOm5vdChbY2xhc3NdKSwgYm9keSA+IGRpdltpZF06bm90KFtjbGFzc10pLCAubXl1aS1wYW5lbCB+IGRpdltpZF0sIC5uYXYtbWVudSA+IC5oaWRkZW4tbWQsIHNjcmlwdCArIGFbaWRdLCBhW2lkXSArIGRpdltzdHlsZV06bm90KFtjbGFzc10pIiwKICAgIGNzczogIlxuYm9keSB7cGFkZGluZy10b3A6IDYwcHggIWltcG9ydGFudDt9IgogIH0sIHsKICAgIG5hbWU6ICLpo57mnoHpgJ8iLAogICAgbWF0Y2g6ICJmZWlqaXN1OC5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC9zZWFyY2gvLAogICAgICBqdW1wOiAiI3Jlc3VsdCIsCiAgICAgIGp1bXBUbzogWyAiI3Jlc3VsdCBhIiwgL1wvJC8sICIvMS5odG1sIiBdLAogICAgICByZXN1bHQ6ICIjcmVzdWx0IGgyIGEiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL2FjZ1wvXGQrXC9cZCsvLAogICAgICB0aXRsZTogImgxIGEiLAogICAgICBqdW1wOiAiLm1pZGJhciwgLmZvb3RlciB8IGJlZm9yZSIKICAgIH0sCiAgICBoaWRlOiAiLmluZGV4LXRvcCB+IGRpdiwgLnYtdG9wIH4gZGl2LCAuZm9vdGVyIH4gZGl2LCAuZm9vdGVyIH4gYnJkZSwgYm9keSA+IGRpdjpub3QoW2NsYXNzXSkiCiAgfSwgewogICAgbmFtZTogIuecn+S4jeWNoSIsCiAgICBtYXRjaDogInpoZW5idWthLmNvbSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaC8sCiAgICAgIGp1bXA6ICIuc3R1aS1wYWdlLCAuc3R1aS1wYW5uZWwiLAogICAgICBqdW1wVG86IFsgIi5zdHVpLXZvZGxpc3RfX21lZGlhIGEiLCAvLip2b2RkZXRhaWxcLyhcZCspLiovLCAiL3ZvZHBsYXkvJDEtMS0xLyIgXSwKICAgICAga2V5d29yZCgpIHsKICAgICAgICBjb25zdCBuID0gbG9jYXRpb24uaHJlZi5tYXRjaCgvd2RcLyhbXlwvXSspLyk7CiAgICAgICAgcmV0dXJuIG4gPyBuWzFdIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaDMiKS50ZXh0Q29udGVudDsKICAgICAgfSwKICAgICAgcmVzdWx0OiAiLnN0dWktdm9kbGlzdF9fbWVkaWEgaDMudGl0bGUgYSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC92b2RwbGF5LywKICAgICAgdGl0bGU6ICIuZGV0YWlsIGgxIiwKICAgICAganVtcDogIi0ucGxheWxpc3QiCiAgICB9LAogICAgaGlkZTogImJvZHkgPiBkaXZbaWRdOm5vdChbY2xhc3NdKSwgLnN0dWktcGxheWVyX19pdGVtIH4gZGl2W3N0eWxlXSIKICB9LCB7CiAgICBuYW1lOiAi56Kf5b2xIiwKICAgIG1hdGNoOiAvZHZkaGQubWV8OTUyNzgwLmNvbS8sCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaC8sCiAgICAgIGp1bXA6ICIubGlzdC1jb250ZW50IiwKICAgICAganVtcFRvOiBbICIubGlzdC1jb250ZW50IGEiLCAvLippbmRleChcZCspXC5odG1sLywgIi92aWRlby8kMS0wLTAuaHRtbCIgXSwKICAgICAgcmVzdWx0OiB7CiAgICAgICAgdGl0bGU6ICIubS1tb3ZpZXMgLnUtbW92aWUgaDIiLAogICAgICAgIHVybDogIi5tLW1vdmllcyAudS1tb3ZpZSBhIgogICAgICB9CiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvdmlkZW8vLAogICAgICB0aXRsZTogIi52dGl0bGUgYSIsCiAgICAgIGp1bXA6ICIudmlkZW90aXRsZSIKICAgIH0sCiAgICBoaWRlOiAnYm9keSA+IGJyZGUsIGJvZHkgPiBkaXZbaWRdOm5vdChbY2xhc3NdKSwgYm9keSA+IGEsIC5oZWFkZXIgfiBkaXZbY2xhc3MqPSJhZCJdLCAud2lkZ2V0X2FkcycKICB9LCB7CiAgICBuYW1lOiAiWnp6RnVuIiwKICAgIG1hdGNoOiAvd3d3Lnp6emZ1bi5jb20vLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvXC92b2Qtc2VhcmNoLywKICAgICAganVtcDogIiNsaXN0LWZvY3VzIHwgYXBwZW5kLCAubGVvLWZvb3QtdHh0IHwgYmVmb3JlIiwKICAgICAganVtcFRvOiBbICIuc2hvdy1saXN0IGEsIC5sZW8tZGV0YWlsLXdyYXAgYSIsIC8uKmRldGFpbC1pZC0oXGQrKS4qLywgIi92b2QtcGxheS1pZC0kMS1zaWQtMS1uaWQtMS5odG1sIiBdLAogICAgICByZXN1bHQ6ICIuc2hvdy1saXN0IGgyIGEiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvdm9kLXBsYXkvLAogICAgICB0aXRsZSgpIHsKICAgICAgICBjb25zdCBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmJyZWFkLWNydW1iLW5hdiwgLmxlby1iZy1hIGgxIik7CiAgICAgICAgcmV0dXJuIG4gPyBuLnRleHRDb250ZW50LnJlcGxhY2UoLy4q5b2T5YmN5pKt5pS+77yaKC4rPykgLS4qLywgIiQxIikgOiAiIjsKICAgICAgfSwKICAgICAganVtcDogIi5lcGlzb2RlLXdyYXAsIC0ubGVvLW1vZC5sZW8tbGVmdCIKICAgIH0sCiAgICBoaWRlOiAiI25hdmJhciArIGRpdltzdHlsZV0iLAogICAganMoKSB7CiAgICAgICQoImlucHV0W29uY2xpY2tdIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICQoZSkudmFsKCkuaW5jbHVkZXMoIue7p+e7reiuv+mXriIpICYmIGUuY2xpY2soKTsKICAgICAgfSkpOwogICAgfQogIH0sIHsKICAgIG5hbWU6ICLov4Xmkq0iLAogICAgbWF0Y2g6ICJ4YmRtLm9yZyIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaC8sCiAgICAgIGp1bXA6ICIubXl1aS1wYWdlIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3ZpZGVvLywKICAgICAgdGl0bGU6ICIubXl1aS1wYW5lbF9faGVhZCBoMyBhIiwKICAgICAganVtcDogIi5teXVpLXBhbmVsLWJnIgogICAgfSwKICAgIGhpZGU6ICJib2R5ID4gZGl2IgogIH0sIHsKICAgIG5hbWU6ICLlk5Tlkqrlk5TlkqoiLAogICAgbWF0Y2g6ICJiaW1pYmltaS5tZSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaC8sCiAgICAgIGp1bXA6ICIudl9tb2QsIC5sZW8tZm9vdC10eHQgfCBiZWZvcmUiLAogICAgICByZXN1bHQ6IHsKICAgICAgICB0aXRsZTogIi5pbmZvIGEsIC5sZW8tZGV0YWlsLW1lZGlhIGgxIiwKICAgICAgICB1cmw6ICIuaW5mbyBhLCAubGVvLWRldGFpbC1tZWRpYSAubGVvLXBvLWFiIGEiCiAgICAgIH0sCiAgICAgIGtleXdvcmQoKSB7CiAgICAgICAgY29uc3QgbiA9IGxvY2F0aW9uLmhyZWYubWF0Y2goL3dkXC8oW15cL10rKS8pOwogICAgICAgIHJldHVybiBuID8gblsxXSA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5wX3RhYiBzdHJvbmcsIC5sZW8tc2VhcmNoLXdkIikudGV4dENvbnRlbnQ7CiAgICAgIH0KICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC9wbGF5XC8vLAogICAgICB0aXRsZTogIi52X3BhdGggLmN1cnJlbnQsIGhlYWRlciBhICsgZm9udCwgaDEubGVvLWZzLWwiLAogICAgICBqdW1wOiAiLS5wbGF5X2JveCwgLS5sZW8tbW9kLmxlby1sZWZ0IHwgYmVmb3JlIgogICAgfSwKICAgIGhpZGU6ICJib2R5ID4gZGl2W2lkXTpub3QoW2NsYXNzXSksIGJvZHkgPiBkaXZbc3R5bGVdOm5vdChbY2xhc3NdKSwgLnR1aWd1YW5nLCBib2R5ID4gLmxlby1jb250YWluZXIgfiBbaWRdLCAuc3NyMSwgLnNzcjEgKyBkaXY6bm90KFtjbGFzc10pLCBpbnNbaWRdLCBzZWN0aW9uICsgZGl2W2lkXSIsCiAgICBjc3M6ICIubGVvLWRldGFpbC13cmFwIHtiYWNrZ3JvdW5kLWNvbG9yOiAjNmVhN2I4O21hcmdpbi1ib3R0b206IDEwcHg7Ym9yZGVyLXJhZGl1czogNXB4O2JveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsMC4yKTt9IgogIH0sIHsKICAgIG5hbWU6ICLlpq7lj68iLAogICAgbWF0Y2g6IC9uaWNvdHZcLihtZXxjbHViKS8sCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaC8sCiAgICAgIGp1bXA6ICIucGFnZXIsIC5uYXZiYXIgfiAuY29udGFpbmVyIiwKICAgICAganVtcFRvOiBbICIuZmYtYmcgYSIsIC8uKlwvKFxkKykuKi8sICIvdmlkZW8vcGxheS8kMS0xLTEuaHRtbCIgXSwKICAgICAgcmVzdWx0OiAiaDIgYSIKICAgIH0sCiAgICBwbGF5OiB7CiAgICAgIG1hdGNoOiAvXC9wbGF5XC8vLAogICAgICB0aXRsZTogImEuZmYtdGV4dCIsCiAgICAgIGp1bXA6ICItLnRhYi1jb250ZW50LmZmLXBsYXl1cmwtZHJvcGRvd24iCiAgICB9LAogICAgaGlkZTogImJvZHkgPiBicmRlLCBib2R5ID4gZGl2W2lkXTpub3QoW2NsYXNzXSksIGJvZHkgPiBkaXZbc3R5bGVdOm5vdChbY2xhc3NdKSwgYm9keSA+IGEsIC5mZi1hZHMsIGJvZHkgPiBkaXZbY2xhc3NuYW1lXSwgI2ZmLXRvdG9wIH4gZGl2W2lkXSIKICB9LCB7CiAgICBuYW1lOiAiQUdFIiwKICAgIG1hdGNoOiAiYWdlZmFucy50diIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaC8sCiAgICAgIGp1bXA6ICIjY29udGFpbmVyIiwKICAgICAgcmVzdWx0OiAiLmNlbGxfaW1mb3JtX25hbWUiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvcGxheVwvLitwbGF5aWQ9LywKICAgICAgdGl0bGU6ICIjZGV0YWlsbmFtZSBhIiwKICAgICAganVtcDogIi5iYXNlYmxvY2sgKyAuc3BhY2VibG9jazEgKyAuYmFzZWJsb2NrIHwgYmVmb3JlIgogICAgfSwKICAgIGhpZGU6ICJkaXZbc3R5bGVdOm5vdChbY2xhc3NdKSA+IGEiCiAgfSwgewogICAgbmFtZTogIlFpbm1laSIsCiAgICBtYXRjaDogInFpbm1laS52aWRlbyIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL3NlYXJjaC8sCiAgICAgIGp1bXA6ICIubGF5b3V0IHwgYXBwZW5kIgogICAgfSwKICAgIHBsYXk6IHsKICAgICAgbWF0Y2g6IC9cL3ZpZGVvLywKICAgICAgdGl0bGU6ICIuaW5mbyAudGl0bGUiLAogICAgICBqdW1wOiAiLnBsYXllciB8IGFwcGVuZCIKICAgIH0KICB9LCB7CiAgICBuYW1lOiAi5ZOG5ZKqIiwKICAgIG1hdGNoOiAiZHVvbWltaC5jb20iLAogICAgc2VhcmNoOiB7CiAgICAgIG1hdGNoOiAvd2Q9LywKICAgICAganVtcDogIi5teXVpLXBhZ2UsIC5teXVpLXBhbm5lbF9iZCB8IGJlZm9yZSIsCiAgICAgIGp1bXBUbzogWyAiI3NlYXJjaExpc3QgYSIsIC8uKmRldGFpbFwvKFxkKykuKi8sICIvZG9uZ21hbnBsYXkvJDEtMS0xLmh0bWwiIF0sCiAgICAgIHJlc3VsdDogIi5zZWFyY2hrZXkiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvZG9uZ21hbnBsYXkvLAogICAgICB0aXRsZTogIiNwbGF5ZXItc2lkZWJhciAudGl0bGUiLAogICAgICBqdW1wOiAiI3BsYXllci1zaWRlYmFyIC5teXVpLXBhbmVsX2JkIHwgYmVmb3JlIgogICAgfQogIH0sIHsKICAgIG5hbWU6ICLmrKHlhYMiLAogICAgbWF0Y2g6ICJjeWxvbGkuY29tIiwKICAgIHNlYXJjaDogewogICAgICBtYXRjaDogL1wvdm9kc2VhcmNoLywKICAgICAganVtcDogIi50eXBlYm94IHwgYXBwZW5kLCAjY29udGVudCB8IGFwcGVuZCwgLnBhZ2Vib3giLAogICAgICBqdW1wVG86IFsgIi5zZWFyY2ggYSIsIC8uKlwvY3koXGQrKS4qLywgIi95diQxLTEtMS8iIF0sCiAgICAgIGtleXdvcmQoKSB7CiAgICAgICAgY29uc3QgbiA9IGxvY2F0aW9uLmhyZWYubWF0Y2goL3ZvZHNlYXJjaFwvKFteLV0rKS8pOwogICAgICAgIHJldHVybiBuID8gblsxXSA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5tYWluLWhlYWQgLnRpdGxlIGIsIC5yZS1pbmZvIGIiKS50ZXh0Q29udGVudDsKICAgICAgfSwKICAgICAgcmVzdWx0OiAiLnNlYXJjaCAudGl0bGUiCiAgICB9LAogICAgcGxheTogewogICAgICBtYXRjaDogL1wvY3lcZCsvLAogICAgICB0aXRsZTogIi51LXRpdGxlIGEsIC50aXRsZSBhIiwKICAgICAganVtcDogIi5wbGF5bGlzdGFsbCAucGxheWJveCwgLnBsYXktaW5mbyArIC5tYWluIgogICAgfSwKICAgIGhpZGU6ICIuY29sdW1uLXJndCAjcGxheSIKICB9LCB7CiAgICBuYW1lOiAiTWlrYW4iLAogICAgbWF0Y2g6ICJtaWthbmFuaS5tZSIsCiAgICBzZWFyY2g6IHsKICAgICAgbWF0Y2g6IC9cL1NlYXJjaC8sCiAgICAgIGp1bXA6ICIuZm9vdGVyIHwgYmVmb3JlIgogICAgfQogIH0gXSwgSWNvbiA9IHsKICAgIHZpcDogJzxzdmcgZmlsbD0iY3VycmVudENvbG9yIiB2aWV3Qm94PSIwIDAgMTggMTgiIHJvbGU9ImltZyIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xNy43MzEsNi4yN2wtMi43NzEtNC40NjRjLTAuMzMyLTAuNTM0LTAuOTA2LTAuODUyLTEuNTM4LTAuODUyaC0yLjM2NGMtMC41NTMsMC0xLDAuNDQ4LTEsMXMwLjQ0NywxLDEsMWgyLjI2MWwyLjYyOCw0LjIzMmwtNi45NTUsNy41OEwyLjA1Myw3LjE4N2wyLjYyOC00LjIzM2gyLjMzYzAuNTUyLDAsMS0wLjQ0OCwxLTFzLTAuNDQ4LTEtMS0xSDQuNTc3Yy0wLjYyMywwLTEuMjEyLDAuMzI3LTEuNTM3LDAuODUzTDAuMjY3LDYuMjcyYy0wLjQxNiwwLjY3MS0wLjM0NiwxLjUyMSwwLjE4OSwyLjEzM2w3LjQ3NSw4LjE2N2MwLjI3NSwwLjMxMywwLjY2MywwLjQ3NSwxLjA1NiwwLjQ3NWMwLjMyNCwwLDAuNjUxLTAuMTEsMC45Mi0wLjMzNmw3LjY0OC04LjMyMUMxOC4wNzcsNy43OTQsMTguMTQ4LDYuOTQzLDE3LjczMSw2LjI3eiI+PC9wYXRoPjxwYXRoIGQ9Ik00LjUxNyw2LjE2N0M0LjEwOCw2LjUzOCw0LjA3OCw3LjE3MSw0LjQ1LDcuNThsMy44MSw0LjE5YzAuMTg5LDAuMjA4LDAuNDU4LDAuMzI3LDAuNzM5LDAuMzI3YzAsMCwwLDAsMCwwYzAuMjgxLDAsMC41NS0wLjExOCwwLjczOS0wLjMyN2wzLjgxLTQuMTg0YzAuMzcyLTAuNDA5LDAuMzQzLTEuMDQxLTAuMDY2LTEuNDEzYy0wLjQwNy0wLjM3Mi0xLjAzOS0wLjM0Mi0xLjQxMiwwLjA2Nkw5LDkuNjEyTDUuOTI5LDYuMjM0QzUuNTU4LDUuODI2LDQuOTI2LDUuNzk2LDQuNTE3LDYuMTY3eiI+PC9wYXRoPjwvc3ZnPicsCiAgICBsb2FkZXI6ICc8c3ZnPjxkZWZzPjxmaWx0ZXIgaWQ9Im8tLWwtZiI+PGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VHcmFwaGljIiBzdGREZXZpYXRpb249IjIiIHJlc3VsdD0iYmx1ciIgLz48ZmVDb2xvck1hdHJpeCBpbj0iYmx1ciIgbW9kZT0ibWF0cml4IiB2YWx1ZXM9IjEgMCAwIDAgMCAgMCAxIDAgMCAwICAwIDAgMSAwIDAgIDAgMCAwIDUgLTIiIHJlc3VsdD0iZ29vZXkiIC8+PGZlQ29tcG9zaXRlIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9Imdvb2V5IiBvcGVyYXRvcj0iYXRvcCIvPjwvZmlsdGVyPjwvZGVmcz48L3N2Zz4nLAogICAgcXJjb2RlOiAnPHN2ZyB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHBhdGggZD0iTTE2MCAwSDB2MTYwaDE2MFYwem0tMzIgMTI4SDMyVjMyaDk2djk2eiIvPjxwYXRoIGQ9Ik02NCA2NGgzMnYzMkg2NHpNMzUyIDB2MTYwaDE2MFYwSDM1MnptMTI4IDEyOGgtOTZWMzJoOTZ2OTZ6Ii8+PHBhdGggZD0iTTQxNiA2NGgzMnYzMmgtMzJ6TTAgNTEyaDE2MFYzNTJIMHYxNjB6bTMyLTEyOGg5NnY5NkgzMnYtOTZ6Ii8+PHBhdGggZD0iTTY0IDQxNmgzMnYzMkg2NHpNMjU2IDBoNjR2MzJoLTY0ek0yNTYgMTI4aDMyVjk2aDMyVjY0aC05NlYzMmgtMzJ2NjRoNjR6TTE5MiAxMjhoMzJ2MzJoLTMyek0zMjAgMTYwaC0zMnYzMmgtOTZ2MzJoMTI4ek0zMiAyODhoMzJ2LTMySDMydi02NEgwdjEyOGgzMnpNNjQgMTkyaDMydjMySDY0eiIvPjxwYXRoIGQ9Ik0xOTIgMzIwaDY0di0zMmgtMzJ2LTMyaC02NHYtNjRoLTMydjY0SDk2djY0aDMydi0zMmg2NHpNMjg4IDI1NmgzMnY2NGgtMzJ6TTI4OCAzNTJoLTk2djMyaDY0djk2aC02NHYzMmg5NnYtMzJoNjR2LTMyaC02NHoiLz48cGF0aCBkPSJNMTkyIDQxNmgzMnYzMmgtMzJ6TTMyMCAzNTJoMzJ2NjRoLTMyek00ODAgNDE2aC05NnY5NmgzMnYtNjRoNjR6Ii8+PHBhdGggZD0iTTQ0OCA0ODBoNjR2MzJoLTY0ek00ODAgMzUyaDMydjMyaC0zMnpNMzg0IDM4NGgzMnYtOTZoLTY0djMyaDMyek00NDggMjI0aC0zMnYtMzJoLTMydjMyaC0zMnYzMmgxMjh2LTMyaDMydi0zMmgtNjR6TTQ0OCAyODhoNjR2MzJoLTY0eiIvPjwvc3ZnPicsCiAgICBwYW5kYTogJzxzdmcgdmlld0JveD0iMCAwIDU4IDU4Ij48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxnIGZpbGwtcnVsZT0ibm9uemVybyI+PHBhdGggZD0ibTQ1IDUzYy0uMDU0Njg4MSAyLjc5MzE1NjQtMi4zNDYzOTg0IDUuMDIyNDQ2Ni01LjE0IDVoLTEzLjI3Yy0uNTA4MzcxOC0uMDAxMDA3Ni0xLjAwNTM4MzEtLjE1MDQ1ODYtMS40My0uNDMtLjE0MjA2NzgtLjA5ODk2MjctLjI3NTg0My0uMjA5MzI3Mi0uNC0uMzMtLjY5OTY2OTctLjcwMjI3NjItLjkzNzEwMjItMS43NDIzMTcyLS42MTE1MTM0LTIuNjc4NjUxMi4zMjU1ODg5LS45MzYzMzQgMS4xNTcwNzUyLTEuNjA0NjgyOSAyLjE0MTUxMzQtMS43MjEzNDg4IDIuMzIzOTM3Mi0uMjMzMTc4OCA0LjU5MjE3ODctLjg1NTE3MDUgNi43MS0xLjg0IDQtMiA0LTMgOC0zaC4wOWMxLjk2IDAgMy45MSAxLjA1IDMuOTEgNXoiIGZpbGw9IiM1NjU5NWUiLz48cGF0aCBkPSJtMTYuNjQgNTcuOTNjLS4yNTcwODQ1LjA0ODc5MDMtLjUxODMzNjIuMDcyMjM2LS43OC4wN2gtMTMuMjdjLTEuMzY0MDQwNTctLjAxMDg0NTMtMi40ODU4NjgyMS0xLjA3NzgwNjUtMi41NjUwNDE3LTIuNDM5NTkwNnMuOTExNDQ4MzctMi41NTE1NjIyIDIuMjY1MDQxNy0yLjcyMDQwOTRjLjM5LS4wNS44Mi0uMSAxLjI3LS4xOCAxLjg1IDIuNDEgNS42NyA0LjgzIDEzLjA4IDUuMjd6IiBmaWxsPSIjMzkzZjRhIi8+PHBhdGggZD0ibTQxLjU4IDM3LjgyYy0uMjEyMDA3My0xLjM2ODk1MDItLjU3NDE5MjItMi43MTAzNzU5LTEuMDgtNC0xLjUzMjEzMDItMy43OTk4MDIxLTQuNjMwODEzMi02Ljc1MjY2NDctOC41LTguMS0xLjc3MjM4MTEtLjY2MDQ1ODYtMy42MTQyNjk5LTEuMTE2NzM3LTUuNDktMS4zNi0xLjQ1OTQxNy0xLjY0NTcxLTMuMzc4NzAzOS0yLjgxNjA5MTgtNS41MS0zLjM2djJzLTEtMS00LTFjLjU1NjQxNzEuNjM3MzY5NC45MDUyNjIyIDEuNDI5MjQ3NyAxIDIuMjctLjk4ODExMDIuMTYyNjk2Mi0xLjk1NDM4My40Mzc4MTU2LTIuODguODItMy4xNDA1MjM3IDEuMzM5ODUxNy01LjU3NzI2MDQ4IDMuOTMyNTEwNi02LjcyIDcuMTUtLjMwMDIwMzY2Ljc0MjI0OTYtLjU2MDU3NDA1IDEuNDk5OTk0Mi0uNzggMi4yNy43NDk2MjQ0OS0uMzMyNDYxOSAxLjU1OTk2NzkyLS41MDYxMDY5IDIuMzgtLjUxIDIuOTg0MDU2NS4wMDA1MzI5IDUuNTE0MjEzNyAyLjE5MzkyMjkgNS45MzgwODg0IDUuMTQ3NzIxMXMtMS4zODczNzE1IDUuNzcwMTg2NC00LjI1MDg1ODMgNi42MDk4NTFjLTIuODYzNDg2NzguODM5NjY0Ni01LjkwODg0NjU5LS41NTI2MTM2LTcuMTQ3MjMwMS0zLjI2NzU3MjEtMS4yNiAxLjI1LTIuNTQgMi4yMy0yLjU0IDYuMDcuMDYyMzEyODUgMS40OTk1MzQ4LjYwOTc1MDgxIDIuOTM4MzE0MSAxLjU2IDQuMSAxLjg1IDIuNDEgNS42NyA0LjgzIDEzLjA4IDUuMjcuNzkgMCAxLjYyLjA3IDIuNDkuMDcgMi4wMDc4Ny4wMDQ5IDQuMDEzMzQ4Ny0uMTM4ODI1OSA2LS40My0uMTQyMDY3OC0uMDk4OTYyNy0uMjc1ODQzLS4yMDkzMjcyLS40LS4zMy0uNjk5NjY5Ny0uNzAyMjc2Mi0uOTM3MTAyMi0xLjc0MjMxNzItLjYxMTUxMzQtMi42Nzg2NTEyLjMyNTU4ODktLjkzNjMzNCAxLjE1NzA3NTItMS42MDQ2ODI5IDIuMTQxNTEzNC0xLjcyMTM0ODggMi4zMzQxNjczLS4yMjk4Njk0IDQuNjEyODE4MS0uODUxOTM0MyA2Ljc0LTEuODQgNC0yIDQtMyA4LTNoLjA5Yy41OTc4MDYzLTEuMzA5MDEwNy45MDgxMDg2LTIuNzMwOTQ1NS45MS00LjE3LjAyODg3ODEtMi4wMTE1NjkyLS4xMTE2MTc5LTQuMDIxOTk5Ny0uNDItNi4wMXptLTE0LjU4IDEwLjE4Yy0zLjMxMzcwODUgMC02LTIuNjg2MjkxNS02LTZzMi42ODYyOTE1LTYgNi02IDYgMi42ODYyOTE1IDYgNi0yLjY4NjI5MTUgNi02IDZ6IiBmaWxsPSIjZWNmMGYxIi8+PHBhdGggZD0ibTE2IDQwYy4wMDExMDY3IDIuODIzNjc3Mi0xLjk2Njc2MjkgNS4yNjYwMTUzLTQuNzI2MDU4OSA1Ljg2NTU0ODItMi43NTkyOTU5Ny41OTk1MzI5LTUuNTYzMjIxNjQtLjgwNjAwMTYtNi43MzM5NDExLTMuMzc1NTQ4MiAxLjIzNjE5MjcyLTEuMTI1NTkwNyAyLjAyNDUwNjA0LTIuNjU5NjA1OCAyLjIyLTQuMzIuMjAwNDM0MzgtMS4yMzQzNjE5LjQ3MDg3MDU3LTIuNDU2MzMyOS44MS0zLjY2Ljc2NTAyODc3LS4zMzkyODM2IDEuNTkzMTE3MTYtLjUxMzA3OTkgMi40My0uNTEgMy4zMTM3MDg1IDAgNiAyLjY4NjI5MTUgNiA2eiIgZmlsbD0iIzM5M2Y0YSIvPjxwYXRoIGNsYXNzPSJvLS1zdmctcGFuZGEtZWFyIiBkPSJtMTUuMDcgMjUuMDljLTMuMTQwNTIzNyAxLjMzOTg1MTctNS41NzcyNjA0OCAzLjkzMjUxMDYtNi43MiA3LjE1LTEuNzEwNzAwNS0xLjA3MzMzNDMtMi42MDc3Mzk1NS0zLjA3MDQxMDQtMi4yNzM3OTcxLTUuMDYyMTQ5Ni4zMzM5NDI0NC0xLjk5MTczOTIgMS44MzMyOTA4Mi0zLjU4NzAyODEgMy44MDA1MTkwNy00LjA0MzcwNzEgMS45NjcyMjgyMy0uNDU2Njc5IDQuMDE2MDM2MDMuMzE0OTI4OSA1LjE5MzI3ODAzIDEuOTU1ODU2N3oiIGZpbGw9ImN1cnJlbnRDb2xvciIvPjxwYXRoIGNsYXNzPSJvLS1zdmctcGFuZGEtZWFyIiBkPSJtNDMgMjljLS4wMDEwOTM2IDEuOTMxMDUyMy0uOTMxNTM1NCAzLjc0MzU1MjktMi41IDQuODctMS41MjAyNTY1LTMuODE4ODI4OS00LjYyMDY1ODEtNi43OTE1NjY5LTguNS04LjE1IDEuNDU5MTcwMS0yLjE5OTk0MTMgNC4xODQ4MDQ0LTMuMTg3NzA5NyA2LjcxNDYwNDYtMi40MzMzNjkyIDIuNTI5ODAwMy43NTQzNDA0IDQuMjY5MzU0OCAzLjA3MzU0NjkgNC4yODUzOTU0IDUuNzEzMzY5MnoiIGZpbGw9ImN1cnJlbnRDb2xvciIvPjxwYXRoIGQ9Im01NyA1MS4yNmMtLjMwNDgwNTgtLjE3Mjc2MDktLjY0OTY0NzItLjI2MjQxOTctMS0uMjZoLTJjLTEuNzIgMC0zLjQ1IDEtMy45MyA0LjgtLjA1NTc0NTQuNTUyMTU5LjEyMDQ0MTUgMS4xMDI2NTYuNDg2NDI1OCAxLjUxOTg0MDEuMzY1OTg0My40MTcxODQyLjg4ODg1NzEuNjYzNTQzIDEuNDQzNTc0Mi42ODAxNTk5bC0xMi4xNC4wMDAxNjhjMi43OTM2MDE2LjAyMjI3ODYgNS4wODUzMTE5LTIuMjA3MDExNiA1LjE0LTUuMDAwMTY4IDAtMy45MS0yLTQuOTMtMy45MS01IC41OTc4MDYzLTEuMzA5MDEwNy45MDgxMDg2LTIuNzMwOTQ1NS45MS00LjE3LjAyODMxNjktMi4wMDgyMzQtLjExMjE3NzQtNC4wMTUyOTU4LS40Mi02IDIuMTg1ODUxMy4xMzc3NjE5IDQuMzQ0MjI2LjU2MTM2ODIgNi40MiAxLjI2IDIuMzA5ODQ5MS43NTEzMzM5IDQuMzc5ODU5IDIuMTAwMjkwNCA2IDMuOTEuMjEwNDQ3OS4yMzYyODM4LjQwNDI0NjcuNDg2ODg1Ny41OC43NSAxLjU1MzQ4MDUgMi4xOTgwNTQyIDIuMzk3ODgwMyA0LjgxODQ4NDcgMi40MiA3LjUxeiIgZmlsbD0iI2QxZDRkMSIvPjxwYXRoIGQ9Im01OCAzOWMuMDAyNjczMiAyLjE1NDg3NzEtMS4zNzU1Mzg0IDQuMDY5MDYtMy40MiA0Ljc1LS4xNzU3NTMzLS4yNjMxMTQzLS4zNjk1NTIxLS41MTM3MTYyLS41OC0uNzUtMS42MjAxNDEtMS44MDk3MDk2LTMuNjkwMTUwOS0zLjE1ODY2NjEtNi0zLjkxLS4wMDQ4NTMtLjAyOTgwMzctLjAwNDg1My0uMDYwMTk2MyAwLS4wOSAwLTIuNzYxNDIzNyAyLjIzODU3NjMtNSA1LTVzNSAyLjIzODU3NjMgNSA1eiIgZmlsbD0iIzU2NTk1ZSIvPjxwYXRoIGQ9Im01OCA1M3YzYzAgMS4xMDQ1Njk1LS44OTU0MzA1IDItMiAyaC00Yy0uNTY2OTc1Ni4wMDI4NDI4LTEuMTA4NTE0LS4yMzUwOTYxLTEuNDg5OTA3OC0uNjU0NjI5M3MtLjU2Njc5NzYtLjk4MTIzMDgtLjUxMDA5MjItMS41NDUzNzA3Yy40OS0zLjggMi4yMi00LjggMy45NC00LjhoMmMxLjEwNDU2OTUgMCAyIC44OTU0MzA1IDIgMnoiIGZpbGw9IiM1NjU5NWUiLz48Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMjciIGN5PSI0MiIgZmlsbD0iIzM5M2Y0YSIgcj0iNiIvPjxnIGZpbGw9IiMyYzJmMzgiPjxwYXRoIGQ9Im0xMiA0MmgtMmMtLjU1MjI4NDc1IDAtMS0uNDQ3NzE1My0xLTFzLjQ0NzcxNTI1LTEgMS0xaDJjLjU1MjI4NDcgMCAxIC40NDc3MTUzIDEgMXMtLjQ0NzcxNTMgMS0xIDF6Ii8+PHBhdGggZD0ibTI3IDQzaC0yYy0uNTUyMjg0NyAwLTEtLjQ0NzcxNTMtMS0xcy40NDc3MTUzLTEgMS0xaDJjLjU1MjI4NDcgMCAxIC40NDc3MTUzIDEgMXMtLjQ0NzcxNTMgMS0xIDF6Ii8+PHBhdGggZD0ibTE2IDQ5Yy0uMjY1ODAzLjAwMTUzNjgtLjUyMTI4MTItLjEwMjgxMzUtLjcxLS4yOWwtMS0xYy0uMzkyMTIyMi0uMzkyMTIyMi0uMzkyMTIyMi0xLjAyNzg3NzggMC0xLjQyczEuMDI3ODc3OC0uMzkyMTIyMiAxLjQyIDBsLjQ5LjQ5IDEuMzUtLjY3Yy4zMjExODA4LS4xOTMyNjA3LjcyMzQ3MDUtLjE5MDY3MjggMS4wNDIxMzgzLjAwNjcwNDEuMzE4NjY3OC4xOTczNzY4LjUwMDE5MjguNTU2MzkyOC40NzAyNDM0LjkzMDAzNjhzLS4yNjYzNDMxLjY5OTE2MTctLjYxMjM4MTcuODQzMjU5MWwtMiAxYy0uMTM3OTk5My4wNzQ4NzE5LS4yOTMwMjI0LjExMjc2NjQtLjQ1LjExeiIvPjwvZz48cGF0aCBjbGFzcz0iby0tc3ZnLXBhbmRhLXoiIGQ9Im0zOCAxOGgtMTBjLS44NDg1ODA1LS4wMDA2NjEyLTEuNjA0MzY2MS0uNTM2NzUwOS0xLjg4NTQ5NjQtMS4zMzc0MXMtLjAyNjM5NjgtMS42OTE1NjU5LjYzNTQ5NjQtMi4yMjI1OWw1LjU1LTQuNDRoLTQuM2MtMS4xMDQ1Njk1IDAtMi0uODk1NDMwNS0yLTJzLjg5NTQzMDUtMiAyLTJoMTBjLjg0ODU4MDUuMDAwNjYxMTYgMS42MDQzNjYxLjUzNjc1MDg1IDEuODg1NDk2NCAxLjMzNzQwOTk4LjI4MTEzMDMuODAwNjU5MTIuMDI2Mzk2OCAxLjY5MTU2NTg5LS42MzU0OTY0IDIuMjIyNTkwMDJsLTUuNTUgNC40NGg0LjNjMS4xMDQ1Njk1IDAgMiAuODk1NDMwNSAyIDJzLS44OTU0MzA1IDItMiAyeiIgZmlsbD0iIzNiOTdkMyIvPjxwYXRoIGNsYXNzPSJvLS1zdmctcGFuZGEtejIiIGQ9Im01NiAxMmgtMTBjLS44NDg1ODA1LS4wMDA2NjEyLTEuNjA0MzY2MS0uNTM2NzUwOS0xLjg4NTQ5NjQtMS4zMzc0MXMtLjAyNjM5NjgtMS42OTE1NjU4Ny42MzU0OTY0LTIuMjIyNTlsNS41NS00LjQ0aC00LjNjLTEuMTA0NTY5NSAwLTItLjg5NTQzMDUtMi0ycy44OTU0MzA1LTIgMi0yaDEwYy44NDg1ODA1LjAwMDY2MTE2IDEuNjA0MzY2MS41MzY3NTA4NSAxLjg4NTQ5NjQgMS4zMzc0MDk5OC4yODExMzAzLjgwMDY1OTEyLjAyNjM5NjggMS42OTE1NjU4OS0uNjM1NDk2NCAyLjIyMjU5MDAybC01LjU1IDQuNDRoNC4zYzEuMTA0NTY5NSAwIDIgLjg5NTQzMDUgMiAycy0uODk1NDMwNSAyLTIgMnoiIGZpbGw9IiMzYjk3ZDMiLz48L2c+PC9nPjwvc3ZnPicKICB9LCBTa2lwX0FkX0h0bWwgPSAnPGRpdiBjbGFzcz0iby0tc2tpcC1hZCI+PGRpdiBjbGFzcz0iby0tc2xvZ2FuIj48c3Ryb25nPuWKoOmAn+WQpzwvc3Ryb25nPjxkaXYgY2xhc3M9Im8tLWxvYWRlciI+JyArIEljb24ubG9hZGVyICsgIjwvZGl2PjxzdHJvbmc+5bm/5ZGKPC9zdHJvbmc+PC9kaXY+PC9kaXY+IiwgaXNWaXBTaXRlUmVnZXggPSAvKHZcLnFxfHR2XC5zb2h1fGlxaXlpfHlvdWt1fG1ndHZ8MTkwNXxwcHR2fGxlKVwuKGNvbXxjbikvLCBpc0FuaW1lU2l0ZVJlZ2V4ID0gLyhiaWxpYmlsaXxjeWxvbGl8bmljb3R2fGR1b21pbWh8enp6ZnVufG1pa2FuYW5pfHhiZG18YWdlZmFuc3xxaW5tZWl8YmltaWJpbWkpXC4oY29tfG1lfG9yZ3x0dnx2aWRlbykvLCBFID0gZW1pdHRlcigpOwogIGxldCBwYWdlSW5mbyA9IHt9OwogIGNvbnN0IEFyciA9IHsKICAgIHNodWZmbGUobikgewogICAgICBmb3IgKGxldCBlID0gbi5sZW5ndGg7IDAgPCBlOyApIHsKICAgICAgICBjb25zdCB0ID0gX01hdGhmbG9vcihNYXRoLnJhbmRvbSgpICogZSk7CiAgICAgICAgZS0tOwogICAgICAgIGNvbnN0IGkgPSBuW2VdOwogICAgICAgIG5bZV0gPSBuW3RdLCBuW3RdID0gaTsKICAgICAgfQogICAgICByZXR1cm4gbjsKICAgIH0sCiAgICByYW5kb206IG4gPT4gbltfTWF0aGZsb29yKE1hdGgucmFuZG9tKCkgKiBuLmxlbmd0aCldCiAgfTsKICBsZXQgYWxsb3dTY2FsZSA9ICEwOwogIEUub24oImxvZyIsIChmdW5jdGlvbigpIHt9KSksIEUub24oInVybC5jaGFuZ2UiLCAoZnVuY3Rpb24obikgewogICAgbGV0IHtvbGRVcmw6IGUsIG5ld1VybDogdCwgYXV0b1BsYXk6IGl9ID0gbjsKICAgIHRyeSB7CiAgICAgIGFkZG9uR28oKTsKICAgIH0gY2F0Y2ggKG4pIHt9CiAgICBjb25zdCBvID0gQURET05TLmZpbmQoKGZ1bmN0aW9uKG4pIHsKICAgICAgcmV0dXJuIG4ucGxheSAmJiBuLnBsYXkudmlwICYmIElzKG4ucGxheS5tYXRjaCwgZSk7CiAgICB9KSksIGEgPSBBRERPTlMuZmluZCgoZnVuY3Rpb24obikgewogICAgICByZXR1cm4gbi5wbGF5ICYmIG4ucGxheS52aXAgJiYgSXMobi5wbGF5Lm1hdGNoLCB0KTsKICAgIH0pKTsKICAgIG8gJiYgYSAmJiBFLmVtaXQoInBsYXl1cmwuY2hhbmdlIik7CiAgfSkpLCBTRUFSQ0hfVVJMUyAmJiBJc05vdCgvZG91YmFuXC5jb20vKSAmJiAoU0VBUkNIX1VSTFMgPSAi6KeF5b2xICBodHRwczovL21vdmllLmRvdWJhbi5jb20vdGFnL1xuXG4iICsgU0VBUkNIX1VSTFMpLAogIFNFQVJDSF9VUkxTID0gZW5zdXJlQXJyYXkoU0VBUkNIX1VSTFMpLm1hcCgoZnVuY3Rpb24obikgewogICAgY29uc3Qge3VybDogZSwgbmFtZTogdH0gPSBwYXJzZVVybChuKSwgaSA9IElzKGlzQW5pbWVTaXRlUmVnZXgsIGUpLCBvID0gSXMoaXNWaXBTaXRlUmVnZXgsIGUpOwogICAgcmV0dXJuIHsKICAgICAgdXJsOiBlLAogICAgICBuYW1lOiB0LAogICAgICB3ZWlnaHQ6IC9kb3ViYW4uY29tLy50ZXN0KGUpID8gMTAgOiAoSXMoL2JpbGliaWxpLmNvbS8pIHx8IElzKGlzQW5pbWVTaXRlUmVnZXgpKSAmJiBpID8gNSA6IChJcyhpc1ZpcFNpdGVSZWdleCkgfHwgSXMoL2RvdWJhbi5jb20vKSkgJiYgbyA/IDMgOiBpID8gMSA6IG8gPyAwIDogMgogICAgfTsKICB9KSksIFNFQVJDSF9VUkxTLnNvcnQoKGZ1bmN0aW9uKG4sIGUpIHsKICAgIHJldHVybiBlLndlaWdodCAtIG4ud2VpZ2h0OwogIH0pKSwgJCgiaHRtbCIpLmFkZENsYXNzKCJvLS1taXlpbmciICsgKGlzTW9iaWxlID8gIiBvLS1tIiA6ICIgby0tcGMiKSk7CiAgbGV0IHdpblcgPSB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwOwogIGZvciAoY29uc3QgbiA9IERhdGUubm93KCk7IDNlMyA+IERhdGUubm93KCkgLSBuICYmIDAgPT09ICh3aW5XID0gd2luZG93LmlubmVyV2lkdGggfHwgMCk7ICkgYXdhaXQgZGVsYXkoMTAwKTsKICBjb25zdCBidXR0b25Cb3hTaGFkb3cgPSAiYm94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgwLDAsMCwwLjIpOyIsIG1heFNuaWZmSWZyYW1lV2lkdGggPSAxMDUsIGlzU25pZmZJZnJhbWUgPSAwIDwgd2luVyAmJiB3aW5XIDw9IG1heFNuaWZmSWZyYW1lV2lkdGggKyA1OwogIHBhZ2VJbmZvID0gewogICAgaXNTbmlmZklmcmFtZTogaXNTbmlmZklmcmFtZSwKICAgIHdpblc6IHdpblcsCiAgICBzY3JlZW5XaWR0aDogc2NyZWVuV2lkdGgKICB9OwogIGNvbnN0IGlzSmlleGlSZWdleCA9IC8oanh8dXJsfHYpPWh0dHAvaTsKICBsZXQgbTN1OFZpZGVvOwogIGlmICghaXNTbmlmZklmcmFtZSAmJiAoSXMoaXNKaWV4aVJlZ2V4KSAmJiBJcyhpc1ZpcFNpdGVSZWdleCwgSHJlZi5yZXBsYWNlKC8uKz1odHRwLywgImh0dHAiKSkgfHwgaXNOb3RUb3AgJiYgKElzKC89aHR0cC4rXC5tM3U4LykgfHwgKG0zdThWaWRlbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInZpZGVvW3NyY10iKSkgJiYgL1wubTN1OC8udGVzdChtM3U4VmlkZW8uc3JjKSkpICYmIChhZGRDc3MoIlxuYm9keSA+ICo6bm90KHNjcmlwdCkgKyBzY3JpcHQgfiAqW2lkXTpub3QoW2NsYXNzXSkgeyIgKyBQdXJpZnlTdHlsZSArICJ9IiksCiAgZml4TTN1OFBsYXlpbmcoKSksIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGZ1bmN0aW9uKG4pIHsKICAgIGNvbnN0IGUgPSBuLmRhdGE7CiAgICBlICYmIGUuX2lkID09PSBNRVNTQUdFX0lEICYmIChpc05vdFRvcCAmJiBlLnBhcmVudCA/IChlLmZyb20gPSBsb2NhdGlvbi5ocmVmLCB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKGUsICIqIikpIDogaXNUb3AgJiYgZS5hY3Rpb24gJiYgRS5lbWl0KGUuYWN0aW9uLCBlKSk7CiAgfSkpLCBpc05vdFRvcCkgewogICAgaWYgKElzKC9tMTkwNy5jbi8pKSB7CiAgICAgIGFkZENzcygiXG4jcy1wbGF5ZXIgKyAuc2hvdyA+IGRpdlt0aXRsZV0sI3MtY29udHJvbHMgKyBkaXYgPiBkaXY6bnRoLWNoaWxkKG4rNSk6bm90KDpsYXN0LWNoaWxkKXsiICsgUHVyaWZ5U3R5bGUgKyAifSIpOwogICAgICBsZXQgbiA9IDA7CiAgICAgIGNvbnN0IGUgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNzLXBsYXllciArIC5zaG93IikgfHwgMzAgPCBuKyspICYmIChjbGVhckludGVydmFsKGUpLAogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNzLWNvbnRyb2xzID4gZGl2IGltZyArIHNwYW4iKS5jbGljaygpKTsKICAgICAgfSksIDEwMCk7CiAgICAgIHJldHVybiB2b2lkICh3aW5kb3cuYWxlcnQgPSBmdW5jdGlvbigpIHt9KTsKICAgIH0KICAgIHJldHVybiBJcygvanguamlhc2hlc2hhbmdtYW8uY29tLykgPyBhZGRDc3MoIlxuI2xpbmVzIHsiICsgUHVyaWZ5U3R5bGUgKyAifSIpIDogSXMoL29ranguY2MvKSAmJiBhZGRDc3MoIi5XQU5HLVdBTkcge3Zpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O30iKSwKICAgIHZvaWQgKGlzU25pZmZJZnJhbWUgJiYgc25pZmZJbklmcmFtZSgpKTsKICB9CiAgaWYgKElzKC9iZWlqaXhzXC5jbi4qdXJsPWh0dHAvKSkgaWYgKGFkZENzcygiXG5ib2R5ID4gZm9ybSB7cG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7bGVmdDogMCAhaW1wb3J0YW50O3JpZ2h0OiAwICFpbXBvcnRhbnQ7dG9wOiAwICFpbXBvcnRhbnQ7Ym90dG9tOiAwICFpbXBvcnRhbnQ7YmFja2dyb3VuZDogI2VlZThkMyAhaW1wb3J0YW50O3otaW5kZXg6ICIgKyBNQVhfWl9JTkRFWCArICcgIWltcG9ydGFudDt9ZGl2LGlucHV0LGZvcm0ge21heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O31mb3JtICNkaXZjc3M1IHtoZWlnaHQ6IGF1dG87cGFkZGluZzogMCAxZW07Ym9yZGVyOiBub25lO3dpZHRoOiBhdXRvO30uby0tcGMgZm9ybSAjZGl2Y3NzNSB7bWF4LXdpZHRoOiA1NzBweCAhaW1wb3J0YW50O30uby0tbSBoNSBpbnB1dFt0eXBlPSJ0ZXh0Il0ge3dpZHRoOiA5MCUgIWltcG9ydGFudDttYXJnaW46IC41ZW0gMCAhaW1wb3J0YW50O3BhZGRpbmc6IDAgLjVlbSAhaW1wb3J0YW50O30uby0tZmFpbCB7aGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7fS5vLS1mYWlsID4gZGl2IHt0ZXh0LWFsaWduOiBjZW50ZXI7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICM0OTUwNTc7Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM0OTUwNTc7cGFkZGluZzogMWVtO2NvbG9yOiAjZDk0ODBmO2ZvbnQtd2VpZ2h0OiBib2xkO2ZvbnQtc2l6ZTogMTZweDtiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmNGU2O30uby0tZmFpbCA+IGRpdiA+IGRpdiArIGRpdiB7bWFyZ2luLXRvcDogMWVtO30uby0tbSAudmlkZW8tanMge3dpZHRoOiAxMDAlICFpbXBvcnRhbnQ7aGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50O30nKSwKICBpc01vYmlsZSAmJiB0b2dnbGVWaWV3cG9ydCgpLCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjVGV4dEJveDEiKS52YWx1ZSkgewogICAgJCgiI2Zvcm0xIikucHJlcGVuZCgkKCIudmlkZW8tanMiKS5wYXJlbnQoKSk7CiAgICBsZXQgbiA9IDA7CiAgICBjb25zdCBlID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICBjb25zdCB0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidmlkZW8iKTsKICAgICAgaWYgKHQgJiYgMzkwID4gdC5kdXJhdGlvbikgewogICAgICAgIHQucGF1c2UoKTsKICAgICAgICBjb25zdCBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI1RleHRCb3gyIikudmFsdWUgfHwgIiIsIGkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ2aWRlbyIpOwogICAgICAgIGkuY2xhc3NMaXN0LmFkZCgiby0tZmFpbCIpLCBpLmlubmVySFRNTCA9ICI8ZGl2PjxkaXY+6Kej5p6Q5aSx6LSlPC9kaXY+IiArIChuID8gIjxkaXY+IiArIG4gKyAiPC9kaXY+IiA6ICIiKSArICI8L2Rpdj4iLAogICAgICAgIGNsZWFySW50ZXJ2YWwoZSk7CiAgICAgIH0KICAgICAgMTAwIDwgbisrICYmIGNsZWFySW50ZXJ2YWwoZSk7CiAgICB9KSwgMTAwKTsKICB9IGVsc2UgewogICAgbGV0IG4gPSBIcmVmLnNwbGl0KCJ1cmw9IilbMV07CiAgICBpZiAobikgewogICAgICBuID0gZGVjb2RlVVJJKG4pLCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjVGV4dEJveDEiKS52YWx1ZSA9IG47CiAgICAgIGNvbnN0IGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjQnV0dG9uMSIpOwogICAgICBpZiAoZSkgewogICAgICAgIGNvbnN0IG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIudmlkZW8tanMiKTsKICAgICAgICBuLnN0eWxlLmRpc3BsYXkgPSAibm9uZSAhaW1wb3J0YW50IiwgZS5jbGljaygpOwogICAgICB9CiAgICB9CiAgICBsZXQgZSA9IDA7CiAgICBjb25zdCB0ID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICBjb25zdCBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidmlkZW8iKTsKICAgICAgbiAmJiAzNjAgPiBuLmR1cmF0aW9uID8gbi5wYXVzZSgpIDogbi5wbGF5KCksIDEwMCA8IGUrKyAmJiBjbGVhckludGVydmFsKHQpOwogICAgfSksIDEwMCk7CiAgfSBlbHNlIHsKICAgIGlmIChJcygvbVwudHZcLnNvaHVcLmNvbVwvcGhvbmVfcGxheV9maWxtLit2aWQ9LykpIHJldHVybiBsb2NhdGlvbi5ocmVmID0gSHJlZi5yZXBsYWNlKCJwaG9uZV9wbGF5X2ZpbG0iLCAidiIgKyBIcmVmLm1hdGNoKC92aWQ9KFxkKykvKVsxXSArICIuc2h0bWwiKTsKICAgIGlmIChJcygvc2VhcmNoXC5kb3ViYW5cLmNvbVwvbW92aWVcLy8pKSBhZGRDc3MoIlxuI2RhbGVfbW92aWVfc3ViamVjdF9zZWFyY2hfYm90dG9tLCNkYWxlX21vdmllX3N1YmplY3Rfc2VhcmNoX3RvcF9yaWdodCwjZGFsZV9tb3ZpZV9zdWJqZWN0X3RvcF9yaWdodCwjZGFsZV9tb3ZpZV9zdWJqZWN0X2JvdHRvbV9zdXBlcl9iYW5uZXIsI2RhbGVfbW92aWVfc3ViamVjdF9taWRkbGVfcmlnaHQgeyIgKyBQdXJpZnlTdHlsZSArICJ9Lm8tLWp1bXAge3BhZGRpbmctbGVmdDogMWVtO30uby0tanVtcCBhIHtkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50O2FsaWduLWl0ZW1zOiBjZW50ZXI7Ym9yZGVyLXJhZGl1czogNHB4O2ZvbnQtc2l6ZTogMC43NWVtO2hlaWdodDogMmVtO2p1c3RpZnktY29udGVudDogY2VudGVyO2xpbmUtaGVpZ2h0OiAxLjU7cGFkZGluZy1sZWZ0OiAwLjc1ZW07cGFkZGluZy1yaWdodDogMC43NWVtO3doaXRlLXNwYWNlOiBub3dyYXA7YmFja2dyb3VuZC1jb2xvcjogI2VmZmFmMztjb2xvcjogIzI1Nzk0MjttYXJnaW4tdG9wOiAwLjVlbTttYXJnaW4tcmlnaHQ6IDAuNWVtO2N1cnNvcjogcG9pbnRlcjt9IiksCiAgICAkKChmdW5jdGlvbigpIHsKICAgICAgJCgiI2ljcCIpLmh0bWwoT09fU0lHTiksICQoIi5nZW16Y3AiKS5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgY29uc3QgdCA9ICQoIi50aXRsZSIsIGUpLnRleHQoKTsKICAgICAgICAkKGUpLmFwcGVuZCgnPHAgY2xhc3M9Im8tLWp1bXAiPicgKyBnZXRTZWFyY2hTb3VyY2VzSHRtbCh0KSArICI8L3A+Iik7CiAgICAgIH0pKTsKICAgIH0pKTsgZWxzZSBpZiAoSXMoL21cLmRvdWJhblwuY29tXC9zZWFyY2hcL1w/Lip0eXBlPW1vdmllLykpIGFkZENzcygiXG4jVGFsaW9uTmF2LC5zZWFyY2gtcmVzdWx0cy1tb2R1bGVzLW5hbWUgeyIgKyBQdXJpZnlTdHlsZSArICJ9LnNlYXJjaC1tb2R1bGUge21hcmdpbi10b3A6IDA7fS5zZWFyY2gtcmVzdWx0cyBpbWcge3dpZHRoOiA4MHB4O30uc2VhcmNoLXJlc3VsdHMge3BhZGRpbmctYm90dG9tOiAxMHB4O30uc2VhcmNoLXJlc3VsdHMgbGkgYSB7ZGlzcGxheTogZmxleDthbGlnbi1pdGVtczogY2VudGVyO30uc2VhcmNoLXJlc3VsdHMgaW1nIHtoZWlnaHQ6IDEwMCU7cGFkZGluZzogMDttYXJnaW46IDVweCAwO2JvcmRlcjogMnB4IHNvbGlkO2JvcmRlci1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzJiNjhjNCAwJSwjY2YyZDZlIDEwMCUpMTt9IiksCiAgICAkKChmdW5jdGlvbigpIHsKICAgICAgJCgiI21vcmUtc2VhcmNoIikuYXBwZW5kKCIgICAgIiArIE9PX1NJR04pLCAkKCIuc3ViamVjdC1pbmZvIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgIGluc2VydFNlYXJjaEFkZG9uKCQoIi5zdWJqZWN0LXRpdGxlIiwgZSkudGV4dCgpLCBlLCAiYXBwZW5kIik7CiAgICAgIH0pKSwgJCgiLnNlYXJjaC1oZCBpbnB1dCIpLm9uKCJrZXl1cCIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgMTMgPT09IG4ua2V5Q29kZSAmJiAobi5wcmV2ZW50RGVmYXVsdCgpLCBsb2NhdGlvbi5ocmVmID0gIi9zZWFyY2gvP3F1ZXJ5PSIgKyBuLnRhcmdldC52YWx1ZSArICImdHlwZT1tb3ZpZSIpOwogICAgICB9KSksICQoIi5zZWFyY2gtaGQgLmJ1dHRvbi1zZWFyY2giKS5hdHRyKCJpZCIsIE9PX1NJR04pLCAkKCIuc2VhcmNoLWhkIC5idXR0b24tc2VhcmNoIikub24oImNsaWNrIiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgICBuLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3QgZSA9ICQoIi5zZWFyY2gtaGQgaW5wdXQiKS52YWwoKTsKICAgICAgICBsb2NhdGlvbi5ocmVmID0gIi9zZWFyY2gvP3F1ZXJ5PSIgKyBlICsgIiZ0eXBlPW1vdmllIjsKICAgICAgfSkpOwogICAgfSkpOyBlbHNlIGlmIChJcygvbW92aWUuZG91YmFuLmNvbVwvc3ViamVjdFwvLykpIGFkZENzcygiXG4jZGFsZV9tb3ZpZV9zdWJqZWN0X3NlYXJjaF9ib3R0b20sI2RhbGVfbW92aWVfc3ViamVjdF9zZWFyY2hfdG9wX3JpZ2h0LCNkYWxlX21vdmllX3N1YmplY3RfdG9wX3JpZ2h0LCNkYWxlX21vdmllX3N1YmplY3RfYm90dG9tX3N1cGVyX2Jhbm5lciwjZGFsZV9tb3ZpZV9zdWJqZWN0X21pZGRsZV9yaWdodCB7IiArIFB1cmlmeVN0eWxlICsgIn0uby0tZG91YmFuLXNvdXJjZSBhIHtjb2xvcjogIzI1Nzk0Mjt9Lm8tLWRvdWJhbi1zb3VyY2UgYTpob3ZlciB7Y29sb3I6ICNGRkZGRkY7YmFja2dyb3VuZDogIzI1Nzk0Mjt9Lm8tLWRvdWJhbi1zb3VyY2UgYS5pcy12aXAge2NvbG9yOiAjZTg1OTBjO30uby0tZG91YmFuLXNvdXJjZSBhLmlzLXZpcDpob3ZlciB7Y29sb3I6ICNGRkZGRkY7YmFja2dyb3VuZDogI2U4NTkwYzt9Lm8tLWRvdWJhbi1zb3VyY2UgYS5pcy1hbmltZSB7Y29sb3I6ICNlNjQ5ODA7fS5vLS1kb3ViYW4tc291cmNlIGEuaXMtYW5pbWU6aG92ZXIge2NvbG9yOiAjRkZGRkZGO2JhY2tncm91bmQ6ICNlNjQ5ODA7fSIpLAogICAgJCgoZnVuY3Rpb24oKSB7CiAgICAgICQoIiNpY3AiKS5odG1sKE9PX1NJR04pOwogICAgICBjb25zdCBuID0gcHVyaWZ5S2V5d29yZCgkKCJ0aXRsZSIpLnRleHQoKS5yZXBsYWNlKCIo6LGG55OjKSIsICIiKS50cmltKCkpOwogICAgICAkKCIjaW5mbyIpLmFwcGVuZCgnPGRpdiBjbGFzcz0iby0tZG91YmFuLXNvdXJjZSI+PHNwYW4gY2xhc3M9InBsIj7lnKjnur/op4LnnIs6PC9zcGFuPjxzcGFuPjxzcGFuPiA8L3NwYW4+JyArIFNFQVJDSF9VUkxTLmZpbHRlcigoZnVuY3Rpb24obikgewogICAgICAgIHJldHVybiAhL2RvdWJhblwuY29tLy50ZXN0KG4udXJsKTsKICAgICAgfSkpLm1hcCgoZnVuY3Rpb24oZSkgewogICAgICAgIHJldHVybiAnPHNwYW4+PGEgY2xhc3M9IicgKyAoaXNWaXBTaXRlUmVnZXgudGVzdChlLnVybCkgPyAiaXMtdmlwIiA6IGlzQW5pbWVTaXRlUmVnZXgudGVzdChlLnVybCkgPyAiaXMtYW5pbWUiIDogIiIpICsgJyIgJyArIChpc01vYmlsZSA/ICIiIDogJ3RhcmdldD0iX2JsYW5rIiAnKSArIChfRCA/ICdkYXRhLXdlaWdodD0iJyArIGUud2VpZ2h0ICsgJyIgJyA6ICIiKSArICdocmVmPSInICsgdG9TZWFyY2hVcmwoZS51cmwsIG4pICsgJyI+JyArIGUubmFtZSArICI8L2E+IjsKICAgICAgfSkpLmpvaW4oIiAvIDwvc3Bhbj4iKSArICI8L3NwYW4+PC9zcGFuPjwvZGl2PiIpOwogICAgfSkpOyBlbHNlIGlmIChJcygvbVwuZG91YmFuXC5jb21cL21vdmllXC9zdWJqZWN0XC8vKSkgYWRkQ3NzKCIuc2NvcmUtd3JpdGUsYVtocmVmKj0ndG9fYXBwJ106bm90KC5zdWItaG9ub3IpOm5vdCguc3ViLWNvdmVyKSxhW2hyZWYqPSdkb3ViYW5hcHAnXSxkaXZbaWQqPSdCQUlEVSddLGRpdltpZCo9J2dvb2dsZSddLHNlY3Rpb24gKyAuY2VudGVyLC5ib3R0b21fYWRfZG93bmxvYWQsLnN1Yi12ZW5kb3IsLnRvX3BjLC5UYWxpb25OYXYtc3RhdGljLC5zdWItZGV0YWlsIC5tYXJrLW1vdmllLC5zdWItZGV0YWlsIC5tYXJrLXR2LC5zdWJqZWN0LWJhbm5lciwuYm90dG9tX2FkX2Rvd25sb2FkLC5jb3Zlci1jb3VudCwjZ29vZ2xlX2VzZiwuYWRzYnlnb29nbGUsLkFkdmVydGlzZW1lbnQsLlRhbGlvbk5hdi1wcmltYXJ5IC5uYXYtYnRucy5jYW5jZWwgeyIgKyBQdXJpZnlTdHlsZSArICd9LnN1Yi1pbmZvIC5zdWItY292ZXIge2Rpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7fS5UYWxpb25OYXYtcHJpbWFyeSB7cG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7fS5zdWJqZWN0LWhlYWRlci13cmFwIC5zdWItaG9ub3Ige2ZvbnQtc2l6ZTogMTJweDt9LnN1YmplY3QtaW50cm8ge21hcmdpbi10b3A6IC41ZW07fS5zdWJqZWN0LWNvbW1lbnRzLC5zdWJqZWN0LXJldmlld3Mge21hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDt9LlRhbGlvbk5hdiAuVGFsaW9uTmF2LXByaW1hcnkgLnNlYXJjaC1ib3gge3dpZHRoOiAyMDBweDtmbGV4OiAyMDBweCAwIDA7YW5pbWF0aW9uOiBub25lO31hLm5hdi1idG4taXRlbVtocmVmKj1cJ2xvZ291dFwnXSB7d2lkdGg6IDVlbTttYXJnaW4tbGVmdDogLS41ZW07Zm9udC1zaXplOiAuOGVtO30uc3ViLW9yaWdpbmFsLXRpdGxlIHtwYWRkaW5nOiAwLjI1ZW0gMDt9Ll9WX3NpZ24ge2ZvbnQtc2l6ZTogMC44NWVtO29wYWNpdHk6IDAuMjU7dGV4dC1hbGlnbjogY2VudGVyO3BhZGRpbmctYm90dG9tOiAxZW07fS5fVl9zb3VyY2UsIC5zdWItc2NvcmUgKyAuc3ViLXNjb3JlIHttYXJnaW4tdG9wOiAxLjVlbSAhaW1wb3J0YW50O2NvbG9yOiAjZmZmO30uX1Zfc291cmNlIC5zdWItc2NvcmUgLnN1Yi1jb250ZW50IHtkaXNwbGF5OiBibG9jazt9Ll9WX3NvdXJjZSAuc3ViLXNjb3JlIGEge3BhZGRpbmc6IDAuM2VtIDAuNWVtIDAuMmVtO2xpbmUtaGVpZ2h0OiAxLjQ7bWFyZ2luOiAwIDAuMTVlbTtib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMik7Zm9udC1zaXplOiAxLjA1ZW07Zm9udC13ZWlnaHQ6IGJvbGQ7bGV0dGVyLXNwYWNpbmc6IDFweDttYXJnaW4tdG9wOiAwLjVlbTtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Y29sb3I6ICNmZmU4Y2M7YmFja2dyb3VuZDogcmdiYSgyMzksIDIzOCwgMjM4LCAwLjA1KTtib3JkZXItcmFkaXVzOiA0cHg7Ym94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgwLDAsMCwwLjIpO30jVGFsaW9uTmF2IHtkaXNwbGF5OiBub25lO30jVGFsaW9uTmF2IC5sb2dvIHtiYWNrZ3JvdW5kOiBub25lO2ZvbnQtc2l6ZTogMWVtO2Rpc3BsYXk6IGlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDogY2VudGVyO2FsaWduLWl0ZW1zOiBjZW50ZXI7Y29sb3I6ICNkZWUyZTY7bWFyZ2luLXJpZ2h0OiA1cHg7fS5zZWFyY2gtYm94Om5vdCgub24tc2VhcmNoKSB7b3BhY2l0eTogMC43O30jY2hhbm5lbF90YWdzIHttYXJnaW4tYm90dG9tOiAxMHB4O30uc3ViamVjdC1oZWFkZXItd3JhcCAuc3ViLWRldGFpbCB7ZGlzcGxheTogZmxleDtmbGV4LWRpcmVjdGlvbjogY29sdW1uO2p1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO30jY2hhbm5lbF90YWdzIHttYXJnaW4tdG9wOiAxMHB4O31pbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbixpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24saW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtZGVjb3JhdGlvbiB7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7fS5vLS1kb3ViYW4tc291cmNlIGEge2NvbG9yOiAjZTlmYWM4ICFpbXBvcnRhbnQ7fS5vLS1kb3ViYW4tc291cmNlIGEuaXMtdmlwIHtjb2xvcjogI2ZmYzA3OCAhaW1wb3J0YW50O30uby0tZG91YmFuLXNvdXJjZSBhLmlzLWFuaW1lIHtjb2xvcjogI2ZmZGVlYiAhaW1wb3J0YW50O30nKSwKICAgICQoKGZ1bmN0aW9uKCkgewogICAgICAkKCIubW92aWUtcmV2aWV3cyAuc2hvdy1hbGwiKS5hZnRlcignPGRpdiBjbGFzcz0iX1Zfc2lnbiI+PGEgaHJlZj0iaHR0cHM6Ly9naXRlZS5jb20vZWNydW9zL29vIj7osYbnk6PCt+WHgOWMliAnICsgT09fU0lHTiArICI8L2E+PC9kaXY+IiksCiAgICAgICQoInNlY3Rpb24gKyAuY2VudGVyIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICQoZSkucmVtb3ZlKCk7CiAgICAgIH0pKSwgJCgiLnN1YmplY3QtaGVhZGVyLXdyYXAiKS5hZnRlcigkKCIjVGFsaW9uTmF2IikpLCAkKCIjVGFsaW9uTmF2IikuY3NzKCJkaXNwbGF5IiwgImJsb2NrIiksCiAgICAgICQoIiNUYWxpb25OYXYgLmxvZ28iKS5odG1sKE9PX1NJR04pLmF0dHIoImhyZWYiLCAiaHR0cHM6Ly9tb3ZpZS5kb3ViYW4uY29tL3RhZy8jLyIpLAogICAgICAkKCIuc2VhcmNoLWJveCIpLnJlbW92ZSgpLCAkKCIuVGFsaW9uTmF2LXByaW1hcnkgLmxvZ28iKS5hZnRlcignPGRpdiBjbGFzcz0ic2VhcmNoLWJveCI+PGlucHV0IGNsYXNzPSJzZWFyY2gtaW5wdXQiIHR5cGU9InNlYXJjaCIgcGxhY2Vob2xkZXI9IuaQnOe0oiI+PC9kaXY+JyksCiAgICAgICQoIi5zZWFyY2gtaW5wdXQiKS5vbigiZm9jdXMiLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygib24tc2VhcmNoIik7CiAgICAgIH0pKS5vbigiYmx1ciIsIChmdW5jdGlvbigpIHsKICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCJvbi1zZWFyY2giKTsKICAgICAgfSkpLCAkKCIuc2VhcmNoLWlucHV0Iikub24oImtleXVwIiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgICAxMyA9PT0gbi5rZXlDb2RlICYmIChuLnByZXZlbnREZWZhdWx0KCksIGxvY2F0aW9uLmhyZWYgPSAiL3NlYXJjaC8/cXVlcnk9IiArIG4udGFyZ2V0LnZhbHVlICsgIiZ0eXBlPW1vdmllIik7CiAgICAgIH0pKTsKICAgICAgY29uc3QgbiA9IHB1cmlmeUtleXdvcmQoJCgiLnN1Yi10aXRsZSIpLnRleHQoKS50cmltKCkpOwogICAgICAwID09PSAkKCIuX1Zfc291cmNlIikubGVuZ3RoICYmICQoIi5zdWJqZWN0LWhlYWRlci13cmFwIikuYXBwZW5kKCc8ZGl2IGNsYXNzPSJfVl9zb3VyY2Ugc3ViamVjdC1tYXJrIj48ZGl2IGNsYXNzPSJzdWItc2NvcmUiPjxkaXYgY2xhc3M9InN1Yi10cmFkZW1hcmsiPuWcqOe6v+inguecizwvZGl2PjxkaXYgY2xhc3M9InN1Yi1jb250ZW50IG8tLWRvdWJhbi1zb3VyY2UiPicgKyBnZXRTZWFyY2hTb3VyY2VzSHRtbChuLCAhMSkgKyAiPC9kaXY+PC9kaXY+PC9kaXY+IiksCiAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICQoIi5zdWJqZWN0LWludHJvIC5iZCBwIikuZ2V0KDApLmNsaWNrKCksICQoIi5zdWItY292ZXIiKS5hdHRyKCJocmVmIiwgIiMiKSwgJCgiI3N1YmplY3QtaG9ub3Itcm9vdCBhIikuYXR0cigiaHJlZiIsICIjIik7CiAgICAgIH0pLCAxZTMpOwogICAgICBsZXQgZSA9IDA7CiAgICAgIGNvbnN0IHQgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgJCgiYm9keSA+IGlucywgYm9keSA+IGlmcmFtZSwgLmFkc2J5Z29vZ2xlIikucmVtb3ZlKCksIDUgPCBlKysgJiYgY2xlYXJJbnRlcnZhbCh0KTsKICAgICAgfSksIDUwMCk7CiAgICAgICFmdW5jdGlvbiBuKCkgewogICAgICAgIGNvbnN0IGUgPSAkKCIjc3ViamVjdC1oZWFkZXItY29udGFpbmVyIikuYXR0cigic3R5bGUiKTsKICAgICAgICBpZiAoZSkgewogICAgICAgICAgY29uc3QgbiA9IGUubWF0Y2goLzpccyooW147XSspOz8vKVsxXSwgdCA9IG4ucmVwbGFjZSgiKSIsICIsIDApIik7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBhZGRDc3MoIi5zdWItY292ZXI6OmJlZm9yZSB7YmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoYm90dG9tLCAiICsgbiArICIgMCUsICIgKyB0ICsgIiA1JSksIC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHJpZ2h0LCAiICsgbiArICIgMCUsICIgKyB0ICsgIiA1JSksLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAiICsgbiArICIgMCUsICIgKyB0ICsgIiA1JSksIC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsICIgKyBuICsgIiAwJSwgIiArIHQgKyAnIDUlKTtjb250ZW50OiAiIjtib3R0b206IDA7cG9zaXRpb246IGFic29sdXRlO2xlZnQ6IDA7cmlnaHQ6IDA7dG9wOiAwO3dpZHRoOiAxMDJweDtoZWlnaHQ6IDE0MnB4O2JvcmRlci1yYWRpdXM6IDRweDt9Jyk7CiAgICAgICAgICB9IGNhdGNoIChuKSB7fQogICAgICAgIH0gZWxzZSBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgIG4oKTsKICAgICAgICB9KSwgMTAwKTsKICAgICAgfSgpOwogICAgfSkpOyBlbHNlIGlmIChJcygvbW92aWVcLmRvdWJhblwuY29tXC90YWdcLy8pKSBhZGRDc3MoIi5hc2lkZSwgLmV4dHJhLC5kYWxlX21vdmllX3RhZ19ib3R0b21fYmFubmVyIHsiICsgUHVyaWZ5U3R5bGUgKyAifSIgKyBwcmVmaXhDc3MoIi5ncmlkLTE2LTggLmFydGljbGUge3dpZHRoOiBhdXRvO2Zsb2F0OiB1bnNldDt9aDEge2Rpc3BsYXk6IG5vbmU7fSNkYi1uYXYtbW92aWUge21hcmdpbi1ib3R0b206IDIwcHg7fSNkYi1uYXYtbW92aWUgLm8tLW5hdi1pdGVtLWEge2JhY2tncm91bmQtY29sb3I6ICMyN2E7Y29sb3I6ICNmYWZhZmE7cGFkZGluZzogM3B4IDVweDtib3JkZXItcmFkaXVzOiAzcHg7fS5saXN0LXdwIHtkaXNwbGF5OiBmbGV4O2ZsZXgtd3JhcDogd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47bWFyZ2luLXRvcDogMjVweDt9YS5pdGVtIHt3aWR0aDogMTE4cHg7bWFyZ2luOiAwIDhweDt9ZGl2Lml0ZW0ge3dpZHRoOiAxMDAlO21hcmdpbi1sZWZ0OiA4cHg7bWFyZ2luLXJpZ2h0OiA4cHg7bWFyZ2luLWJvdHRvbTogMTZweDt9YS5pdGVtIHAge3BhZGRpbmctcmlnaHQ6IDA7dGV4dC1hbGlnbjogY2VudGVyO31hLml0ZW0gLmNvdmVyLXdwLCBkaXYuaXRlbSAucG9zdGVyIHtvdmVyZmxvdzogaGlkZGVuO2JvcmRlci1yYWRpdXM6IDNweDtib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAwLjM5KTtib3JkZXI6IDNweCBzb2xpZCAjZjFlZGVkO2hlaWdodDogYXV0bzt9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMjBweCkge2EuaXRlbSAuY292ZXItd3Age2JvcmRlci13aWR0aDogMDt9fWEuaXRlbSAuY292ZXItd3A6aG92ZXIsIGRpdi5pdGVtIC5wb3N0ZXI6aG92ZXIge2JveC1zaGFkb3c6IDAgNXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjUpO31hLml0ZW0gLnBpYyBpbWcge3dpZHRoOiAxMDAlO2hlaWdodDogMTYzcHg7b2JqZWN0LWZpdDogY292ZXI7fWEuaXRlbSAuY292ZXItd3A6YWZ0ZXIge2Rpc3BsYXk6IG5vbmU7fS50YWctbmF2IHttYXJnaW4tcmlnaHQ6IDA7fS5vLS1pdGVtLWRpdmlkZXIge3dpZHRoOiAxMDAlO30uby0taXRlbS1kaXZpZGVyICsgLm8tLWl0ZW0tZGl2aWRlciB7ZGlzcGxheTogbm9uZTt9IiwgIi5vLS1taXlpbmciKSArIHByZWZpeENzcygiLmNhdGVnb3J5IHt3aWR0aDogMTAwJTt3aGl0ZS1zcGFjZTogbm93cmFwO292ZXJmbG93LXg6IGF1dG87fS50YWdzIHttYXJnaW4tYm90dG9tOiAxZW0gIWltcG9ydGFudDt9LnRhZ3MsIC5vLS1kb3ViYW4tc2VhcmNoIHtwYWRkaW5nLWxlZnQ6IDZweDtwYWRkaW5nLXJpZ2h0OiA2cHg7fS5jaGVja2JveF9faW5wdXQge3ZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDt9LnRhZy1uYXYge21hcmdpbjogMCBhdXRvO2ZvbnQtc2l6ZTogMTJweDt3aWR0aDogMTAwJTt9LnRhZy1uYXYgLnRhYnMsIC50YWctbmF2IC5jaGVjayB7ZGlzcGxheTogZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDt3aWR0aDogMTAwJTt9LnRhZy1uYXYgLnRhYnMgYSB7cGFkZGluZzogNy41cHggNXB4IDVweDt9LnRhYnMgYTpub3QoLnRhYi1jaGVja2VkKSB7Ym9yZGVyOiAxcHggc29saWQgI2RmZGZkZjt9LnRhYnMgLnRhYi1jaGVja2VkIHtib3JkZXI6IDFweCBzb2xpZCAjMjU4ZGNkIWltcG9ydGFudDt9LnRhYi1jaGVja2VkOmFmdGVyIHtkaXNwbGF5OiBub25lO30uY2hlY2tib3gsIC5yYW5nZSB7bWFyZ2luLXJpZ2h0OiA1cHg7fS5jaGVjayB7ZmxvYXQ6IG5vbmU7bWFyZ2luLXRvcDogNXB4O30ubGlzdC13cCB7bWFyZ2luLXRvcDogNDBweDtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTt9Lmxpc3Qtd3AsIC5pdGVtIC5jb3Zlci13cCB7b3ZlcmZsb3c6IHVuc2V0O31hLml0ZW0ge3dpZHRoOiBjYWxjKCgxMDAlIC0gMTVweCkgLyAzKTt0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luOiAwIDJweDt9YS5pdGVtIHAge3BhZGRpbmctcmlnaHQ6IDA7fWEuaXRlbSAuY292ZXItd3A6YWZ0ZXIsIC5wb3N0ZXI6YWZ0ZXIge2Rpc3BsYXk6IG5vbmU7fS50YWctbmF2IC5yYW5nZS1kcm9wZG93biB7bGVmdDogMCAhaW1wb3J0YW50O3dpZHRoOiBhdXRvICFpbXBvcnRhbnQ7cmlnaHQ6IDAgIWltcG9ydGFudDt0b3A6IC00ZW0gIWltcG9ydGFudDt9Lm1vcmUge21hcmdpbjogMCAxZW0gMC41ZW0gIWltcG9ydGFudDt9IiwgIi5vbyIpICsgcHJlZml4Q3NzKCJcbmJvZHkgPiAqOm5vdCgub28pIHsiICsgUHVyaWZ5U3R5bGUgKyAifSNhcHAgLmFydGljbGUsIC5hcnRpY2xlLm9vIHtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiAwO2xlZnQ6IDA7cmlnaHQ6IDA7cGFkZGluZzogMTBweCAwO3RyYW5zaXRpb246IGFsbCAwLjhzO30uY2F0ZWdvcnk6Oi13ZWJraXQtc2Nyb2xsYmFyIHt3aWR0aDogMXB4O2hlaWdodDogMXB4O2JhY2tncm91bmQtY29sb3I6IHJnYmEoMjIzLCAyMjMsIDIyMywgMC4yNSk7fS5jYXRlZ29yeTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge2JhY2tncm91bmQ6IHRyYW5zcGFyZW50O2JvcmRlcjogMHB4IG5vbmUgI2ZmZmZmZjtib3JkZXItcmFkaXVzOiA1MHB4O30uY2F0ZWdvcnk6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHstd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCAyLjVweCByZ2JhKDAsIDAsIDAsIDAuMSk7Ym94LXNoYWRvdzogaW5zZXQgMCAwIDIuNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtib3JkZXItcmFkaXVzOiAyLjVweDtiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIyMywgMjIzLCAyMjMsIDAuMjUpO29wYWNpdHk6IDAuNzt0cmFuc2l0aW9uOiBvcGFjaXR5IGVhc2UtaW4tb3V0IDIwMG1zO30uY2F0ZWdvcnk6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtvcGFjaXR5OiAxO2JhY2tncm91bmQtY29sb3I6IHJnYmEoMjIzLCAyMjMsIDIyMywgMC4yNSk7fS5vLS1kb3ViYW4tc2VhcmNoIHtwb3NpdGlvbjogcmVsYXRpdmU7ZGlzcGxheTogZmxleDttYXJnaW4tYm90dG9tOiA1cHg7fS5vLS1kb3ViYW4tc2VhcmNoIC5pbnAge2hlaWdodDogMzRweDt0ZXh0LWFsaWduOiBjZW50ZXI7Y3Vyc29yOiB0ZXh0O3dpZHRoOiA5MCU7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNkZWRlZGU7Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGVkZWRlO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1cHg7fS5vLS1kb3ViYW4tc2VhcmNoIC5pbnAgaW5wdXQge2JhY2tncm91bmQ6ICNmZmY7d2lkdGg6IDk2JTttYXJnaW46IDA7dGV4dC1hbGlnbjogbGVmdDtoZWlnaHQ6IDMwcHg7cGFkZGluZy1sZWZ0OiAxMHB4O291dGxpbmU6IG5vbmU7fS5vLS1kb3ViYW4tc2VhcmNoIGlucHV0IHstd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ym9yZGVyOiBub25lO2JhY2tncm91bmQ6IHRyYW5zcGFyZW50O30uby0tZG91YmFuLXNlYXJjaCAuaW5wLWJ0biB7cG9zaXRpb246IHJlbGF0aXZlO3dpZHRoOiAzN3B4O2hlaWdodDogMzRweDt9Lm8tLWRvdWJhbi1zZWFyY2ggLmlucC1idG4gaW5wdXQge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTtmb250LXNpemU6IDA7cGFkZGluZzogMzVweCAwIDAgMDtvdmVyZmxvdzogaGlkZGVuO2NvbG9yOiB0cmFuc3BhcmVudDtjdXJzb3I6IHBvaW50ZXI7fS5vLS1kb3ViYW4tc2VhcmNoIC5pbnAtYnRuIGlucHV0OmZvY3VzIHtvdXRsaW5lOiBub25lO30uby0tZG91YmFuLXNlYXJjaCAuaW5wIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLy9pbWczLmRvdWJhbmlvLmNvbS9kYWUvYWNjb3VudHMvcmVzb3VyY2VzL2E0YTM4YTUvbW92aWUvYXNzZXRzL25hdl9tdl9iZy5wbmc/cz0xKTt9Lm8tLWRvdWJhbi1zZWFyY2ggLmlucC1idG4gaW5wdXQge2JhY2tncm91bmQ6IHVybCgvL2ltZzMuZG91YmFuaW8uY29tL2RhZS9hY2NvdW50cy9yZXNvdXJjZXMvYTRhMzhhNS9tb3ZpZS9hc3NldHMvbmF2X212X2JnLnBuZz9zPTEpIG5vLXJlcGVhdCAwIC00MHB4O30uby0taXRlbS1iYWxhbmNlciB7bWFyZ2luLWxlZnQ6IDExJTttYXJnaW4tcmlnaHQ6IDExJTt9IiwgIi5vLS1tIikpLAogICAgJCgoZnVuY3Rpb24oKSB7CiAgICAgIGNvbnN0IG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubGlzdC13cCIpOwogICAgICBsZXQgZSA9ICExLCB0ID0gITE7CiAgICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKChmdW5jdGlvbihuKSB7CiAgICAgICAgaWYgKHQpIHQgPSAhMTsgZWxzZSB7CiAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgbikgImNoaWxkTGlzdCIgPT0gdC50eXBlICYmIChlID0gITApOwogICAgICAgICAgZSAmJiAodCA9ICEwLCAkKCIubGlzdC13cCIpLmFwcGVuZCgnPGRpdiBjbGFzcz0iby0taXRlbS1kaXZpZGVyIj48L2Rpdj4nKSk7CiAgICAgICAgfQogICAgICB9KSkub2JzZXJ2ZShuLCB7CiAgICAgICAgYXR0cmlidXRlczogITAsCiAgICAgICAgY2hpbGRMaXN0OiAhMAogICAgICB9KSwgJCgiLm5hdi1pdGVtcyBsaSBhIikuZXEoNSkuYWRkQ2xhc3MoIm8tLW5hdi1pdGVtLWEiKS5odG1sKCLop4XlvbEiKSwgJCgidGl0bGUiKS5odG1sKCLop4XlvbEiKSwKICAgICAgaXNNb2JpbGUgJiYgKCQoIiNhcHAgLmFydGljbGUgLnRhZ3MiKS5iZWZvcmUoJzxkaXYgY2xhc3M9Im8tLWRvdWJhbi1zZWFyY2giPjxkaXYgY2xhc3M9ImlucCI+PGlucHV0IG5hbWU9IicgKyBPT19TSUdOICsgJyIgc2l6ZT0iMjIiIG1heGxlbmd0aD0iNjAiIHBsYWNlaG9sZGVyPSLmkJzntKLnlLXlvbHjgIHnlLXop4bliafjgIHnu7zoibrjgIHlvbHkuroiIHZhbHVlPSIiIGF1dG9jb21wbGV0ZT0ib2ZmIj48L2Rpdj48ZGl2IGNsYXNzPSJpbnAtYnRuIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0i5pCc57SiIj48L2Rpdj48L2Rpdj4nKSwKICAgICAgJCgiYm9keSIpLnByZXBlbmQoJCgiI2FwcCAuYXJ0aWNsZSIpLmFkZENsYXNzKCJvbyIpKSwgJCgiLm8tLWRvdWJhbi1zZWFyY2ggaW5wdXQiKS5vbigia2V5dXAiLCAoZnVuY3Rpb24obikgewogICAgICAgIDEzID09PSBuLmtleUNvZGUgJiYgKG4ucHJldmVudERlZmF1bHQoKSwgbG9jYXRpb24uaHJlZiA9ICJodHRwczovL20uZG91YmFuLmNvbS9zZWFyY2gvP3F1ZXJ5PSIgKyBuLnRhcmdldC52YWx1ZSArICImdHlwZT1tb3ZpZSIpOwogICAgICB9KSksICQoIi5vLS1kb3ViYW4tc2VhcmNoIC5pbnAtYnRuIGlucHV0Iikub24oImNsaWNrIiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgICBuLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3QgZSA9ICQoIi5vLS1kb3ViYW4tc2VhcmNoIGlucHV0IikudmFsKCk7CiAgICAgICAgbG9jYXRpb24uaHJlZiA9ICJodHRwczovL20uZG91YmFuLmNvbS9zZWFyY2gvP3F1ZXJ5PSIgKyBlICsgIiZ0eXBlPW1vdmllIjsKICAgICAgfSkpLCBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgJCgiLmxpc3Qtd3AgW2hyZWZdIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgY29uc3QgdCA9ICQoZSkuYXR0cigiaHJlZiIpOwogICAgICAgICAgdC5pbmNsdWRlcygibW92aWUuZG91YmFuLmNvbSIpICYmICQoZSkuYXR0cigiaHJlZiIsIHQucmVwbGFjZSgibW92aWUuZG91YmFuLmNvbSIsICJtLmRvdWJhbi5jb20vbW92aWUiKSkuYXR0cigidGFyZ2V0IiwgIl9ibGFuayIpOwogICAgICAgIH0pKTsKICAgICAgfSksIDUwMCkpOwogICAgfSkpOyBlbHNlIHsKICAgICAgZnVuY3Rpb24gZ2V0QmFzZVN0eWxlKCkgewogICAgICAgIHJldHVybiAiXG5Aa2V5ZnJhbWVzIG8tLWJyZWF0aCB7MCUge2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjk2NDcsIDAuMjQxMywgLTAuMDcwNSwgMC43OTExKTt0cmFuc2Zvcm06IHNjYWxlKDAuOSk7fTUxJSB7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOTIyNiwgMC4yNjMxLCAtMC4wMzA4LCAwLjc2MjgpO3RyYW5zZm9ybTogc2NhbGUoMS4wMik7fTEwMCUge3RyYW5zZm9ybTogc2NhbGUoMC45KTt9fUBrZXlmcmFtZXMgby0tYmxpbmsgezIwJSwyNCUsNTUlIHtjb2xvcjogI0ZGRTA4MlxudGV4dC1zaGFkb3c6IG5vbmU7fTAlLDE5JSwyMSUsMjMlLDI1JSw1NCUsNTYlLDEwMCUge2NvbG9yOiAjZmZmNmE5O3RleHQtc2hhZG93OiAwIDAgNXB4ICNmZmE1MDAsIDAgMCA1cHggI2ZmYTUwMCwgMCAwIDE1cHggI2ZmYTUwMCwgMCAwIDIwcHggI2ZmYTUwMCwgMCAwIDZweCAjZmYwMDAwLCAwIDAgMTBweCAjZmY4ZDAwLCAwIDAgOXB4ICNmZjAwMDA7fX1Aa2V5ZnJhbWVzIG8tLWJvcEEgezAlIHt0cmFuc2Zvcm06IHNjYWxlKDAuOSk7b3BhY2l0eTogLjg7fTUwJSwxMDAlIHt0cmFuc2Zvcm06IHNjYWxlKDEpO29wYWNpdHk6IDE7fX1Aa2V5ZnJhbWVzIG8tLWJvcEIgezAlIHt0cmFuc2Zvcm06IHNjYWxlKDAuOSk7b3BhY2l0eTogLjg7fTgwJSwxMDAlIHt0cmFuc2Zvcm06IHNjYWxlKDEpIHJvdGF0ZVooLTNkZWcpO29wYWNpdHk6IDE7fX1Aa2V5ZnJhbWVzIG8tLWJlYXQge3RvIHt0cmFuc2Zvcm06IHNjYWxlKDEuNCk7fX1Aa2V5ZnJhbWVzIG8tLWxvYWRlci1zcGluIHswJSB7dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7fTEwMCUge3RyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7fX1Aa2V5ZnJhbWVzIG8tLWNvbG9yLWNoYW5nZS1vcGFjaXR5IHswJSAgIHsgb3BhY2l0eTogMC45OyB9NTAlIHsgb3BhY2l0eTogMTsgfTEwMCUgeyBvcGFjaXR5OiAwLjk7IH19QGtleWZyYW1lcyBvLS1wYW5kYS1lYXItY29sb3ItY2hhbmdlIHswJSAgIHsgY29sb3I6ICNmZjk4MDA7IH0yNSUgeyBjb2xvcjogI2ZiN2I3NjsgfTUwJSB7IG9wYWNpdHk6ICM5QzI3QjA7IH03NSUgeyBjb2xvcjogI2ZiN2I3NjsgfTEwMCUgeyBvcGFjaXR5OiAjZmY5ODAwOyB9fUBrZXlmcmFtZXMgby0tY29tbWVudC1idWJibGUxIHs0MCUge3RyYW5zZm9ybTogdHJhbnNsYXRlKDJweCwycHgpIHNjYWxlKC43OSk7b3BhY2l0eTogLjg7fXRvIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSg2cHgsLTRweCkgc2NhbGUoLjU3KTtvcGFjaXR5OiAwO319QGtleWZyYW1lcyBvLS1jb21tZW50LWJ1YmJsZTIgezAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSg0cHgsM3B4KTt9MTYlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSg0cHgsM3B4KTtvcGFjaXR5OiAwO30yOCUge3RyYW5zZm9ybTogdHJhbnNsYXRlKDdweCk7b3BhY2l0eTogLjg7fTYwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMTFweCwtMnB4KTt9NzIlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNHB4LC0zcHgpIHNjYWxlKC41Nyk7b3BhY2l0eTogMDt9fUBrZXlmcmFtZXMgby0tY29tbWVudC1idWJibGUzIHswJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMTBweCwtNHB4KSBzY2FsZSguNzEpXG59MTYlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMHB4LC00cHgpIHNjYWxlKC43MSk7b3BhY2l0eTogMDt9MjglIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMHB4LC00cHgpIHNjYWxlKC43MSk7b3BhY2l0eTogLjU7fTcyJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMTRweCwtOXB4KSBzY2FsZSguNTcpO29wYWNpdHk6IDA7fX1vby1sb2dzIHtwb3NpdGlvbjogZml4ZWQ7Ym90dG9tOiAwO3JpZ2h0OiAwO21heC1oZWlnaHQ6IDMwMHB4O292ZXJmbG93LXk6IHNjcm9sbDt0ZXh0LWFsaWduOiByaWdodDt6LWluZGV4OiAiICsgKE1BWF9aX0lOREVYIC0gMTApICsgIjtkaXNwbGF5OiBub25lO31vby1sb2dzLmlzLWFjdGl2ZSB7ZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDt9Lm8tLWxvZy1tZXNzYWdlIHtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1jb2xvcjogIzRDQUY1MDtjb2xvcjogI2ZmZjtwYWRkaW5nOiAuMjVlbSAuNWVtO21hcmdpbi1ib3R0b206IC4yNWVtO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7bWF4LXdpZHRoOiA4MDBweDt3b3JkLWJyZWFrOiBicmVhay1hbGw7fS5vLS1tLm8tLWRlYnVnIHttYXgtd2lkdGg6IDQwMHB4ICFpbXBvcnRhbnQ7bWFyZ2luOiAwIGF1dG8gIWltcG9ydGFudDt9Lm8tLW0uby0tZGVidWcgLm1vZF9wbGF5ZXIgPiAucGxheWVyX2NvbnRhaW5lciB7bWF4LWhlaWdodDogMjAzcHg7fVxub28taWZyYW1lcyB7dmlzaWJpbGl0eTogaGlkZGVuO3BvaW50ZXItZXZlbnRzOiBub25lO3Bvc2l0aW9uOiBmaXhlZDtib3R0b206IDA7bGVmdDogMDttYXgtd2lkdGg6IDMyMHB4O2Rpc3BsYXk6IGJsb2NrO31vby1pZnJhbWVzID4gaWZyYW1lIHttYXgtd2lkdGg6ICIgKyBtYXhTbmlmZklmcmFtZVdpZHRoICsgInB4O21heC1oZWlnaHQ6IDYwcHg7ZGlzcGxheTogaW5saW5lLWJsb2NrO30uby0taGlkZSB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30uby0tdmlwLXBsYXkge3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDA7bGVmdDogMDt6LWluZGV4OiAxO21hcmdpbjogMWVtO2ZvbnQtc2l6ZTogMTRweDt9Lm8tLXZpcCAuby0tdmlwLXBsYXkge3Bvc2l0aW9uOiByZWxhdGl2ZTtmb250LXNpemU6IDEycHg7YmFja2dyb3VuZC1jb2xvcjogIzJkMmQyZTttYXJnaW46IC41ZW0gMCAwO3BhZGRpbmc6IC44ZW0gLjVlbSAuNWVtO30uaXMtcGxheS1pbi1wYWdlIC5vLS12aXAtcGxheSB7ZGlzcGxheTogbm9uZTt9LnBseXItLWhpZGUtY29udHJvbHMgfiAuby0tdmlwLXBsYXkge2Rpc3BsYXk6IG5vbmU7fS5wbHlyLS1wYXVzZWQgKyAuby0tdmlwLXBsYXksLm8tLXBsYXllcjpob3ZlciAuby0tdmlwLXBsYXkge2Rpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7fS5vLS12aXAtcGxheS5pcy1oaWRlIHtkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7fS5vLS12aXAtcGxheSBhIHtwb3NpdGlvbjogcmVsYXRpdmU7bWFyZ2luLXJpZ2h0OiA4cHg7fS5vLS12aXAtcGxheSAuby0tc291cmNlcyBhIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMGRiMmZiO3BhZGRpbmc6IC4zZW0gLjc1ZW0gLjI1ZW0gLjc1ZW07Ym9yZGVyLXJhZGl1czogM3B4O2NvbG9yOiAjZmZmZmZmO2N1cnNvcjogcG9pbnRlcjtvcGFjaXR5OiAuODU7ZGlzcGxheTogaW5saW5lLWZsZXg7bWFyZ2luOiAuMjVlbTt9Lm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIGEuaXMtYWN0aXZlIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMWM3ZWQ2O30uby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMgYS5pcy1hY3RpdmUsLm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIGE6aG92ZXIge29wYWNpdHk6IDE7Zm9udC13ZWlnaHQ6IGJvbGQ7fS5vLS12aXAtcGxheSAuby0tc291cmNlcyBhLmlzLW1wNCB7Ym9yZGVyLWJvdHRvbTogMS41cHggc29saWQgI0ZGRUIzQjt9Lm8tLXNuaWZmLWRvbmUge2NvbG9yOiAjNENBRjUwO30uby0tcGxheS11cmwge2NvbG9yOiAjZmZmZmZmO3BhZGRpbmc6IDFlbSAxZW0gLjVlbTt0ZXh0LXNoYWRvdzogMXB4IDFweCAycHggIzAwMDAwMDt9Lm8tLXBsYXktdXJsIGEge2NvbG9yOiAjMGRiMmZiICFpbXBvcnRhbnQ7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Y3Vyc29yOiBwb2ludGVyO2ZvbnQtd2VpZ2h0OiBib2xkO30uby0tcGxheS11cmwgLm8tLXNwYW4ge2ZvbnQtc2l6ZTogLjllbTtjb2xvcjogI0VFRUVFRTtkaXNwbGF5OiBibG9jaztvcGFjaXR5OiAuOTttYXJnaW4tdG9wOiAuNWVtO30uby0tcGxheS11cmwgLm8tLXNwYW4uaXMtd2FybmluZyBzcGFuIHtmb250LXdlaWdodDogYm9sZDtjb2xvcjogd2hpdGU7YmFja2dyb3VuZC1jb2xvcjogI0ZGNTcyMjtwYWRkaW5nOiAuMjVlbSAuNWVtO2JvcmRlci1yYWRpdXM6IDJweDt9Lm8tLXBsYXktdXJsIGEgc3BhbiB7Y29sb3I6ICNGRjk4MDA7fS5vLS1wbGF5LXVybCBhOmhvdmVyIHtjb2xvcjogI2U2NzcwMCAhaW1wb3J0YW50O30uby0tcGxheWVyLWJveCA+ICo6bm90KC5vLS1wbGF5ZXIpLC5vLS1wbGF5ZXItYm94OjpiZWZvcmUsLm8tLXBsYXllci1ib3g6OmFmdGVyIHtkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7fS5vLS1wbGF5ZXIge3Bvc2l0aW9uOiByZWxhdGl2ZTtoZWlnaHQ6IDEwMCU7bWF4LWhlaWdodDogMTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiAjMDEwODFhO292ZXJmbG93OiBoaWRkZW47ei1pbmRleDogIiArIE1BWF9aX0lOREVYICsgJzt9Lm8tLXBsYXllcjpub3QoLmlzLWxvYWRlZCkgI28tLXBsYXllci1pZnJhbWUge2Rpc3BsYXk6IG5vbmU7fS5vLS1wbGF5ZXItYmcge3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDA7Ym90dG9tOiAwO2xlZnQ6IDA7cmlnaHQ6IDA7ZGlzcGxheTogZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjthbGlnbi1pdGVtczogY2VudGVyO2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Zm9udC1zaXplOiAxNnB4O2NvbG9yOiAjZjFmM2Y1O292ZXJmbG93OiBoaWRkZW47YmFja2dyb3VuZC1jb2xvcjogIzAxMDgxYTtiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7YmFja2dyb3VuZC1zaXplOiBjb3ZlcjtiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O3RyYW5zaXRpb246IGFsbCAzLjVzO30uby0tcGxheWVyLmlzLWxvYWRlZCAuby0tcGxheWVyLWJnIHt2aXNpYmlsaXR5OiBoaWRkZW47b3BhY2l0eTogMDt9Lm8tLW0gLm8tLXBsYXllci1iZyB7Zm9udC1zaXplOiAxMnB4O30uby0tcGxheWVyLW1hc2sge2JhY2tncm91bmQtY29sb3I6ICMyODI4Mjg7cG9zaXRpb246IGFic29sdXRlO3RvcDogMDtyaWdodDogMDtib3R0b206IDA7bGVmdDogMDtvcGFjaXR5OiAwLjM1O3RyYW5zaXRpb246IGFsbCAyLjVzO30uby0tcGxheWVyLWJnLmlzLWZhaWwgLm8tLXBsYXllci1tYXNrIHtvcGFjaXR5OiAwLjk7fS5vLS1zaWduIHtvcGFjaXR5OiAuMjU7dGV4dC1zaGFkb3c6IDFweCAxcHggMnB4ICMwMDAwMDA7d2lkdGg6IDk2JTtkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtwb3NpdGlvbjogYWJzb2x1dGU7Ym90dG9tOiAxZW07Zm9udC1zaXplOiAuOGVtO30uby0tdmVyc2lvbiB7bWFyZ2luLWxlZnQ6IDFlbTtmb250LXNpemU6IC44ZW07b3BhY2l0eTogLjk7fS5vLS1zbG9nYW4ge2xldHRlci1zcGFjaW5nOiAycHg7Y29sb3I6ICNmODk2NGM7ZGlzcGxheTogZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTthbGlnbi1pdGVtczogY2VudGVyO3dpZHRoOiAxMDAlO21heC13aWR0aDogNDgwcHg7fS5vLS1zbG9nYW4gc3Ryb25nIHtmb250LXNpemU6IDIuNWVtO3RleHQtc2hhZG93OiAwIDAgNXB4ICNmZmE1MDAsIDAgMCA1cHggI2ZmYTUwMCwgMCAwIDE1cHggI2ZmYTUwMCwgMCAwIDIwcHggI2ZmYTUwMCwgMCAwIDZweCAjZmYwMDAwLCAwIDAgMTBweCAjZmY4ZDAwLCAwIDAgOXB4ICNmZjAwMDA7Y29sb3I6ICNmZmY2YTk7b3BhY2l0eTogLjg7dHJhbnNmb3JtOiBzY2FsZSgwLjkpO2Rpc3BsYXk6IGlubGluZS1ibG9jazttYXJnaW46IDAgNXB4O30uby0tc2xvZ2FuIHN0cm9uZzpmaXJzdC1jaGlsZCB7YW5pbWF0aW9uOiBvLS1ib3BBIDFzIGN1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIsIDEuMjc1KSBmb3J3YXJkcyBpbmZpbml0ZSBhbHRlcm5hdGUsIG8tLWJsaW5rIDEycyBpbmZpbml0ZTt9Lm8tLXNsb2dhbiBzdHJvbmc6bGFzdC1jaGlsZCB7YW5pbWF0aW9uOiBvLS1ib3BCIDFzIDAuMnMgY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4yNzUpIGZvcndhcmRzIGluZmluaXRlIGFsdGVybmF0ZSwgby0tYmxpbmsgMTJzIDNzIGluZmluaXRlO30uby0tZXJyb3ItdGV4dCB7ZGlzcGxheTogbm9uZTtwYWRkaW5nLXRvcDogMWVtO2xldHRlci1zcGFjaW5nOiAxcHg7Ym94LXNoYWRvdzogMCAtMTBweCA4cHggMCAjZmZmNGU2O3BhZGRpbmc6IC4yNWVtIC41ZW0gLjRlbTtwb3NpdGlvbjogYWJzb2x1dGU7Ym90dG9tOiAwO2xlZnQ6IC01JTtyaWdodDogLTUlO3dpZHRoOiAxMTAlO3RleHQtYWxpZ246IGNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmNGU2O2NvbG9yOiAjRkY1NzIyO30uby0tcGxheWVyLWJnLmlzLWZhaWwgLm8tLXNsb2dhbiB7Y29sb3I6ICNmNzY3MDc7fS5vLS1wbGF5ZXItYmcuaXMtZmFpbCAuby0tc2xvZ2FuIHN0cm9uZyB7Y29sb3I6ICNkOTQ4MGY7fS5vLS1wbGF5ZXItYmcuaXMtZmFpbCAuby0tbG9hZGVyLC5vLS1wbGF5ZXItYmcuaXMtZmFpbCArIC5vLS12aXAtcGxheSB7ZGlzcGxheTogbm9uZTt9Lm8tLXBsYXllci1iZy5pcy1mYWlsIC5vLS1lcnJvci10ZXh0IHtkaXNwbGF5OiBibG9jazt9Lm8tLXNuaWZmLXByb2dyZXNzIHtkaXNwbGF5OiBub25lO3Bvc2l0aW9uOiBhYnNvbHV0ZTtsZWZ0OiAwO2JvdHRvbTogMDtoZWlnaHQ6IDFweDt3aWR0aDogMDtiYWNrZ3JvdW5kLWNvbG9yOiAjMmI4YTNlO2JvcmRlcjogMXB4IHNvbGlkICMyYjhhM2U7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDJweDt0cmFuc2l0aW9uOiBhbGwgNXMgZWFzZTttYXgtd2lkdGg6IDk5JSAhaW1wb3J0YW50O30uby0tc25pZmZpbmcgLm8tLXNuaWZmLXByb2dyZXNzIHtkaXNwbGF5OiBibG9jazt9Lm8tLXBsYXllci5pcy1sb2FkZWQgLm8tLXNuaWZmLXByb2dyZXNzLC5vLS1wbGF5ZXItYmcuaXMtZmFpbCAuby0tc25pZmYtcHJvZ3Jlc3Mge2Rpc3BsYXk6IG5vbmU7fS5vLS1sb2FkZXIge2JvcmRlcjogMy42cHggc29saWQgI2ZmOTc0ZDtib3gtc2l6aW5nOiBib3JkZXItYm94O292ZXJmbG93OiBoaWRkZW47d2lkdGg6IDJlbTtoZWlnaHQ6IDJlbTtsZWZ0OiA1MCU7dG9wOiA1MCU7YW5pbWF0aW9uOiBvLS1sb2FkZXItc3BpbiAycyBsaW5lYXIgaW5maW5pdGUgcmV2ZXJzZTstd2Via2l0LWZpbHRlcjogdXJsKCNvLS1sLWYpO2ZpbHRlcjogdXJsKCNvLS1sLWYpO2JveC1zaGFkb3c6IDAgMCAwIDFweCAjZmY5NzRkIGluc2V0O30uby0tbG9hZGVyOmJlZm9yZSB7Y29udGVudDogIiI7cG9zaXRpb246IGFic29sdXRlO2FuaW1hdGlvbjogby0tbG9hZGVyLXNwaW4gMnMgY3ViaWMtYmV6aWVyKDAuNTksIDAuMjUsIDAuNCwgMC42OSkgaW5maW5pdGU7YmFja2dyb3VuZDogI2ZmOTc0ZDstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHRvcCBjZW50ZXI7dHJhbnNmb3JtLW9yaWdpbjogdG9wIGNlbnRlcjtib3JkZXItcmFkaXVzOiA1MCU7d2lkdGg6IDE1MCU7aGVpZ2h0OiAxNTAlO3RvcDogNTAlO2xlZnQ6IC0xMi41JTt9Lm8tLXBsYXllciAucGx5cl9fcHJvZ3Jlc3MgaW5wdXRbdHlwZT1yYW5nZV0ge2N1cnNvcjogcG9pbnRlcjt9Lm8tLXZpZGVvIHtoZWlnaHQ6IDEwMCU7d2lkdGg6IDEwMCU7YmFja2dyb3VuZC1jb2xvcjogYmxhY2s7fS5vLS1jb2xsYXBzZS1ib3guaXMtb3BlbiAuby0tY29sbGFwc2Uge3RyYW5zZm9ybTpzY2FsZVgoLTEpO30uby0tY29sbGFwc2UtYm94Om5vdCguaXMtb3BlbikgLmlzLWNvbGxhcHNlIHtkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7fS5vLS1za2lwLWFkIHtwb3NpdGlvbjogYWJzb2x1dGU7Ym90dG9tOiAwO2xlZnQ6IDA7cmlnaHQ6IDA7cGFkZGluZzogMS41ZW0gMDt0ZXh0LWFsaWduOiBjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjRlNjtjb2xvcjogI0ZGNTcyMjt6LWluZGV4OiAnICsgTUFYX1pfSU5ERVggKyAiO2Rpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7YWxpZ24taXRlbXM6IGNlbnRlcjtib3gtc2hhZG93OiAwIC0xMHB4IDhweCAwICNmZmY0ZTY7fS5vLS1za2lwLWFkIC5vLS1zbG9nYW4ge2xldHRlci1zcGFjaW5nOiAxZW07anVzdGlmeS1jb250ZW50OiBjZW50ZXI7fS5vLS1za2lwLWFkIC5vLS1sb2FkZXIge3dpZHRoOiAxLjVlbTtoZWlnaHQ6IDEuNWVtO2JvcmRlci13aWR0aDogMi42cHg7bWFyZ2luOiAwIDIuNWVtIDAgMmVtO30uby0tc2tpcC1hZCAuby0tc2xvZ2FuIHN0cm9uZyB7Zm9udC1zaXplOiAyZW07fS5vLS12aXAge3Bvc2l0aW9uOiByZWxhdGl2ZTtwYWRkaW5nLWJvdHRvbTogMC41ZW07YmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTttYXJnaW46IC41ZW0gLjI1ZW07d2lkdGg6IGNhbGMoMTAwJSAtIC41ZW0pO2JvcmRlci1yYWRpdXM6IDVweDtib3gtc2hhZG93OiAwIDFweCA4cHggMCByZ2JhKDAsMCwwLDAuMik7Zm9udC1zaXplOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjY7fS5vLS12aXAgKyAuby0tdmlwIHsiICsgUHVyaWZ5U3R5bGUgKyAnfS5vLS12aXAtcGFuZWwge2Rpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOiBjZW50ZXI7cGFkZGluZzogLjc1ZW0gMWVtIC4yNWVtO2ZvbnQtc2l6ZTogMTVweDt9Lm8tLXZpcC10aXRsZSB7Zm9udC13ZWlnaHQ6IGJvbGQ7Y29sb3I6ICMyNTc5NDI7d2lkdGg6IDEwMCU7fS5vLS12aXAtc21hbGwge2ZvbnQtc2l6ZTogMC43NWVtO21hcmdpbjogMCAxMHB4O2NvbG9yOiAjY2VkNGRhO30uby0tdmlwLXBhbmVsLCAuby0tdmlwLWxpc3Qge2hlaWdodDogYXV0byAhaW1wb3J0YW50O30uby0tbWVudXMge2Rpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7YWxpZ24taXRlbXM6IGNlbnRlcjt9Lm8tLW1lbnVzID4gZGl2IHtkaXNwbGF5OiBpbmxpbmUtZmxleDttYXJnaW4tbGVmdDogMS41ZW07Y3Vyc29yOiBwb2ludGVyO3Bvc2l0aW9uOiByZWxhdGl2ZTt9Lm8tLXFyY29kZS1ib3gge2JhY2tncm91bmQtY29sb3I6IHdoaXRlO3BhZGRpbmc6IDFweCAycHggMXB4IDFweDtib3JkZXItcmFkaXVzOiAycHg7b3BhY2l0eTogLjY1O30uby0tbSAuby0tcXJjb2RlLWJveCB7ZGlzcGxheTogbm9uZTt9Lm8tLXFyY29kZS1ib3g6aG92ZXIge29wYWNpdHk6IDE7fS5vLS1xcmNvZGUtYm94IHN2ZyB7d2lkdGg6IDIwcHg7aGVpZ2h0OiAyMHB4O30uby0tcXJjb2RlLWJveCAuby0tcXJjb2RlIHtvdmVyZmxvdzogaGlkZGVuO2Rpc3BsYXk6IG5vbmU7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiAtMzVweDtsZWZ0OiAtMTEwcHg7ei1pbmRleDogMTtib3gtc2hhZG93OiAwIDRweCA4cHggMCByZ2JhKDAsMCwwLDAuMzUpO2JvcmRlci1yYWRpdXM6IDNweDt9Lm8tLXFyY29kZSBpbWcge3dpZHRoOiAxMDBweDtoZWlnaHQ6IDEwMHB4O30uby0tcXJjb2RlLXRleHQge3Bvc2l0aW9uOiBhYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO3RleHQtYWxpZ246IGNlbnRlcjt6LWluZGV4OiAyO3RvcDogLTQ5cHg7bGVmdDogLTExMHB4O3dpZHRoOiAxMDBweDtib3JkZXItcmFkaXVzOiAzcHg7Y29sb3I6ICNGNTdDMDA7bGV0dGVyLXNwYWNpbmc6IDFweDtmb250LXNpemU6IDEycHg7ZGlzcGxheTogbm9uZTt9Lm8tLXFyY29kZS1ib3g6aG92ZXIgLm8tLXFyY29kZSwuby0tcXJjb2RlLWJveDpob3ZlciAuby0tcXJjb2RlLXRleHQge2Rpc3BsYXk6IGJsb2NrO30uby0tc2V0dGluZy1idXR0b24ge3RyYW5zaXRpb246IGFsbCAuNXM7YW5pbWF0aW9uOiBvLS1jb2xvci1jaGFuZ2Utb3BhY2l0eSA4cyBub3JtYWwgaW5maW5pdGUgZWFzZS1pbi1vdXQsIDdzIGxpbmVhciAwcyBpbmZpbml0ZSBub3JtYWwgZm9yd2FyZHMgcnVubmluZyBvLS1icmVhdGg7fS5vLS1zZXR0aW5nLWJ1dHRvbjpob3ZlciB7Y3Vyc29yOiBwb2ludGVyO30uby0tc2V0dGluZy1idXR0b24gc3ZnIHt3aWR0aDogMS43NWVtO2hlaWdodDogMS43NWVtO30uby0tc3ZnLXBhbmRhLXoge2FuaW1hdGlvbjogMy41cyBsaW5lYXIgMHMgaW5maW5pdGUgbm9ybWFsIGZvcndhcmRzIHJ1bm5pbmcgby0tYnJlYXRoO30uby0tc3ZnLXBhbmRhLXoyIHthbmltYXRpb246IDRzIGxpbmVhciAwcyBpbmZpbml0ZSBub3JtYWwgZm9yd2FyZHMgcnVubmluZyBvLS1icmVhdGg7fS5vLS1zdmctcGFuZGEtZWFyIHtjb2xvcjogI2ZmOTgwMDthbmltYXRpb246IG8tLXBhbmRhLWVhci1jb2xvci1jaGFuZ2UgOXMgbm9ybWFsIGluZmluaXRlIGVhc2UtaW4tb3V0O30uby0tdmlwLWxpc3Qge3BhZGRpbmc6IDAuNWVtO2xldHRlci1zcGFjaW5nOiAxcHg7fS5vLS12aXAtbGlzdCAuby0tdmlwLWl0ZW0ge2JvcmRlci1yYWRpdXM6IDRweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6IG5vd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOiAjZWVmNmZjO2NvbG9yOiAjMWQ3MmFhO21hcmdpbjogNHB4O3BhZGRpbmc6IDAuNWVtIDAuNWVtIDAuMzVlbTtjdXJzb3I6IHBvaW50ZXI7Zm9udC1zaXplOiAxNHB4O2xpbmUtaGVpZ2h0OiAxLjI7Zm9udC13ZWlnaHQ6IDYwMDt0ZXh0LWRlY29yYXRpb246IG5vbmU7cG9zaXRpb246IHJlbGF0aXZlO292ZXJmbG93OiBoaWRkZW47dHJhbnNpdGlvbjogYWxsIDAuMjVzO3RleHQtYWxpZ246IGNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjogdG9wO2JveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsMC4yKTt9Lm8tLXZpcC1saXN0IH4gLm8tLXRpcCB7bWFyZ2luOiAuMjVlbSAxZW07Zm9udC1zaXplOiAuOWVtO2JvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDIyNCwgMjI0LCAyMjQsIDAuMjUpO3BhZGRpbmctdG9wOiAxZW07Y29sb3I6ICM1YjViNjc7bGV0dGVyLXNwYWNpbmc6IDFweDt9Lm8tLXRpcCBzdHJvbmcge2NvbG9yOiAjRkY3MDQzO30uby0tdmlwLWl0ZW0uaXMtcGxheS1pbi1wYWdlOjphZnRlciB7Y29udGVudDogIiI7cG9zaXRpb246IGFic29sdXRlO2JvdHRvbTogMDtsZWZ0OiAwO3dpZHRoOiAxMDAlO2hlaWdodDogMnB4O2JhY2tncm91bmQtY29sb3I6ICMyRTdEMzI7fS5vLS12aXAtaXRlbS5pcy1ibG9iOjphZnRlciB7YmFja2dyb3VuZC1jb2xvcjogIzIxOTZGMzt9Lm8tLXZpcC1pdGVtLmlzLXJhbmRvbSB7cGFkZGluZzogMC41ZW0gMWVtIDAuMzVlbTt9Lm8tLXZpcC1pdGVtLmlzLXJhbmRvbTo6YWZ0ZXIge2JhY2tncm91bmQtY29sb3I6ICMxOTcxYzI7fS5vLS12aXAtbGlzdCAuby0tdmlwLXNuaWZmIHt3aWR0aDogMS4xNWVtO3Bvc2l0aW9uOiByZWxhdGl2ZTt9Lm8tLXZpcDpub3QoLmlzLWFsbG93LXNuaWZmKSAuby0tdmlwLXNuaWZmIHtkaXNwbGF5OiBub25lO30uby0tdmlwLXNuaWZmIHN2ZyB7ZGlzcGxheTogYmxvY2s7fS5vLS12aXAtc25pZmYgLm8tLWJ1YmJsZSB7cG9zaXRpb246IGFic29sdXRlO3RvcDogNSU7bGVmdDogMjUlO3dpZHRoOiA0cHg7aGVpZ2h0OiA0cHg7Ym9yZGVyLXJhZGl1czogNTAlO2JhY2tncm91bmQtY29sb3I6ICNlZWY2ZmM7b3BhY2l0eTogMDt2aXNpYmlsaXR5OiBoaWRkZW47fS5vLS12aXAtc25pZmYuaXMtYWN0aXZlIHtvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O30uaXMtc25pZmZpbmcgLm8tLXZpcC1zbmlmZi5pcy1hY3RpdmUgLm8tLWJ1YmJsZSB7dmlzaWJpbGl0eTogdmlzaWJsZTt9Lm8tLXZpcC1zbmlmZiAuby0tYnViYmxlLm8tLWIxIHthbmltYXRpb246IG8tLWNvbW1lbnQtYnViYmxlMSAxLjJzIGxpbmVhciBpbmZpbml0ZTt9Lm8tLXZpcC1zbmlmZiAuby0tYnViYmxlLm8tLWIyIHthbmltYXRpb246IG8tLWNvbW1lbnQtYnViYmxlMiAxLjJzIGxpbmVhciBpbmZpbml0ZTt9Lm8tLXZpcC1zbmlmZiAuby0tYnViYmxlLm8tLWIzIHthbmltYXRpb246IG8tLWNvbW1lbnQtYnViYmxlMyAxLjJzIGxpbmVhciBpbmZpbml0ZTt9Lm8tLXZpcC1saXN0IC5vLS12aXAtaXRlbTpob3ZlciwgLm8tLXZpcC1saXN0IC5vLS12aXAtaXRlbTphY3RpdmUsLm8tLXZpcC1saXN0IC5vLS12aXAtaXRlbTpob3Zlcjo6YWZ0ZXIsIC5vLS12aXAtbGlzdCAuby0tdmlwLWl0ZW06YWN0aXZlOjphZnRlciB7YmFja2dyb3VuZC1jb2xvcjogIzFkNzJhYTtjb2xvcjogI2VlZjZmYyAhaW1wb3J0YW50O30uby0tdmlwLWxpc3QgLm8tLXZpcC1pdGVtLmlzLWFjdGl2ZSB7YmFja2dyb3VuZC1jb2xvcjogIzJiOGEzZTtjb2xvcjogI2VlZjZmYzt9Lm8tLXZpcC1saXN0IC5vLS12aXAtaXRlbS5pcy1hY3RpdmU6OmFmdGVyIHtkaXNwbGF5OiBub25lO30uby0tdmlwLmlzLXNuaWZmLXN1Y2Nlc3MgLm8tLXZpcC1zbmlmZi5pcy1hY3RpdmUge2JhY2tncm91bmQtY29sb3I6ICMyZjllNDQ7Y29sb3I6ICNlZWY2ZmM7fS5vLS12aXAuaXMtc25pZmZpbmcgLm8tLXZpcC1zbmlmZi5pcy1hY3RpdmUsLm8tLXZpcC5pcy1zbmlmZi1zdWNjZXNzIC5vLS12aXAtc25pZmYuaXMtYWN0aXZlLC5vLS12aXAuaXMtc25pZmZpbmc6bm90KC5pcy1zbmlmZi1zdWNjZXNzKSAuby0tdmlwLWl0ZW0sLm8tLXZpcC1saXN0IC5vLS12aXAtaXRlbS5pcy1hY3RpdmUge2N1cnNvcjogbm90LWFsbG93ZWQ7cG9pbnRlci1ldmVudHM6IG5vbmU7b3BhY2l0eTogMC41ICFpbXBvcnRhbnQ7fS5vLS12aXAuaXMtc25pZmYtZG9uZSAuby0tdmlwLXNuaWZmIHtvcGFjaXR5OiAuOTUgIWltcG9ydGFudDt9Lm8tLXZpcC5pcy1zbmlmZmluZzpub3QoLmlzLXNuaWZmLXN1Y2Nlc3MpIC5vLS12aXAtc25pZmYge2FuaW1hdGlvbjogby0tYmVhdCAwLjI1cyBpbmZpbml0ZSBhbHRlcm5hdGU7fS5vLS12aXAgLm8tLXNuaWZmLXByb2dyZXNzIHtib3R0b206IGF1dG87dG9wOiAwO30uby0tc2V0dGluZy1wYW5lbCB7Ym9yZGVyLXRvcDogMnB4IHNvbGlkIHJnYmEoMjI0LCAyMjQsIDIyNCwgMC4yNSk7cGFkZGluZzogMWVtIC41ZW07ZGlzcGxheTogbm9uZTttYXJnaW4tdG9wOiAuNWVtO3RyYW5zaXRpb246IGFsbCAwLjVzO30uby0tdmlwLmlzLXNldHRpbmctb24gLm8tLXNldHRpbmctcGFuZWwge2Rpc3BsYXk6IGJsb2NrO30uby0tdmlwLmlzLXNldHRpbmctb24gLm8tLXZpcC1saXN0IHtkaXNwbGF5OiBub25lO30uby0tZWRpdC12aXAtc291cmNlLXBhbmVsIHt0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luOiAxZW0gMWVtIC41ZW07fS5vLS1lZGl0LXZpcC1zb3VyY2UtcGFuZWwgdGV4dGFyZWEge3BhZGRpbmc6IC43NWVtO2ZvbnQtc2l6ZTogMTRweDtsZXR0ZXItc3BhY2luZzogMXB4O2JvcmRlci1yYWRpdXM6IDVweDt3aWR0aDogY2FsYygxMDAlIC0gMS41ZW0pO21pbi1oZWlnaHQ6IDE4ZW07Ym94LXNoYWRvdzogMCA0cHggOHB4IDAgcmdiYSgwLDAsMCwwLjIpO2JvcmRlcjogMXB4IHNvbGlkICNlZWU7b3ZlcmZsb3cteTogc2Nyb2xsO30uby0tZWRpdC1oaW50IHt0ZXh0LWFsaWduOiBsZWZ0O21hcmdpbjogLjVlbTtjb2xvcjogIzRDQUY1MDt0ZXh0LXNoYWRvdzogMHB4IDBweCAxcHggIzhCQzM0QTt9Lm8tLXNsb2dhbi10ZXh0IHttYXJnaW4tdG9wOiAuNWVtO2xldHRlci1zcGFjaW5nOiAxcHg7Y29sb3I6ICNhZGI1YmQ7Zm9udC1zaXplOiAxMnB4O30uby0tc2xvZ2FuLXRleHQgc3Ryb25nIHtmb250LXNpemU6IDEuMjVlbTttYXJnaW46IDAgLjI1ZW07fS5vLS1hY3Rpb25zIHt0ZXh0LWFsaWduOiByaWdodDt9Lm8tLWFjdGlvbiB7Y29sb3I6IHdoZWF0O2xldHRlci1zcGFjaW5nOiAxcHg7Ym9yZGVyOiAxcHggc29saWQ7ZGlzcGxheTogaW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7YWxpZ24taXRlbXM6IGNlbnRlcjtwYWRkaW5nOiAuMTVlbSAuNWVtO2JvcmRlci1yYWRpdXM6IDNweDttYXJnaW4tcmlnaHQ6IDFlbTtjdXJzb3I6IHBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjogIzFiMWIyOTt9Lm8tLWFjdGlvbiBhIHtjb2xvcjogI0ZGOTgwMCAhaW1wb3J0YW50O30uby0tbSAuby0tYWN0aW9uIHtmb250LXNpemU6IDEycHg7fS5vLS1hY3Rpb246aG92ZXIge2NvbG9yOiAjRkZCNzREO30uby0tdG9nZ2xlIC5vLS15LCAuby0tdG9nZ2xlIC5vLS1uIHtmb250LXdlaWdodDogYm9sZDtmb250LXNpemU6IDEuMmVtO21hcmdpbi1yaWdodDogLjE1ZW07fS5vLS10b2dnbGUuaXMtbiAuby0teSB7Y29sb3I6IGluaGVyaXQ7fS5vLS10b2dnbGU6bm90KC5pcy1uKSAuby0teSB7Y29sb3I6IGdyZWVuO2ZvbnQtc2l6ZTogMS41ZW07fS5vLS10b2dnbGUuaXMtbiAuby0tbiB7Y29sb3I6IHJlZDtmb250LXNpemU6IDEuNWVtO30uby0tbG9nLWJ1dHRvbiB7Y3Vyc29yOiBwb2ludGVyO3BhZGRpbmc6IDAgLjM1ZW07YmFja2dyb3VuZC1jb2xvcjogaHNsYSgwLDAlLDEwMCUsLjkpO2JveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsMC4yKTtjb2xvcjogIzllNzc0YTtib3JkZXItcmFkaXVzOiAzcHg7ZGlzcGxheTogaW5saW5lLWZsZXg7fS5vLS1sb2ctYnV0dG9uOmhvdmVyIHtiYWNrZ3JvdW5kLWNvbG9yOiAjOWU3NzRhO2NvbG9yOiBoc2xhKDAsMCUsMTAwJSwuOSk7fS5vLS1qdW1wIHttYXgtd2lkdGg6IDEwMDBweDtmb250LXNpemU6IDEycHg7bWFyZ2luOiAwIGF1dG87cGFkZGluZzogLjVlbSAxZW07fS5vLS12aXAgLm8tLWp1bXAge21heC13aWR0aDogdW5zZXQ7bWFyZ2luLXRvcDogNXB4O30uby0tanVtcCArIC5vLS1qdW1wIHsnICsgUHVyaWZ5U3R5bGUgKyAifS5vLS1qdW1wIGEge2Rpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O2JvcmRlci1yYWRpdXM6IDRweDtmb250LXNpemU6IDEycHggIWltcG9ydGFudDtsaW5lLWhlaWdodDogMTt0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luLXRvcDogMTBweDttYXJnaW4tcmlnaHQ6IDhweDt3aGl0ZS1zcGFjZTogbm93cmFwO2N1cnNvcjogcG9pbnRlcjt0ZXh0LWRlY29yYXRpb246IG5vbmU7dHJhbnNpdGlvbjogYWxsIDAuMjVzO2NvbG9yOiAjMjU3OTQyICFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYSAhaW1wb3J0YW50O2JvcmRlcjogMXB4IHNvbGlkICNmMWYzZjU7cGFkZGluZzogNnB4O2JveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsMC4yKTt9Lm8tLXBjIC5vLS1qdW1wIGEge1xucGFkZGluZzogNXB4IDZweCA0cHg7fS5vLS1qdW1wIGE6aG92ZXIsLm8tLWp1bXAgYS5pcy1hY3RpdmUge2JvcmRlcjogMXB4IHNvbGlkICMwOTkyNjg7YmFja2dyb3VuZC1jb2xvcjogIzI1Nzk0MiAhaW1wb3J0YW50O2NvbG9yOiAjZWZmYWYzICFpbXBvcnRhbnQ7fS5vLS1qdW1wIGEuaXMtYW5pbWUge2NvbG9yOiAjZTY0OTgwICFpbXBvcnRhbnQ7fS5vLS1qdW1wIGEuaXMtYW5pbWU6aG92ZXIsLm8tLWp1bXAgYS5pcy1hbmltZS5pcy1hY3RpdmUge2JvcmRlcjogMXB4IHNvbGlkICNmNzgzYWM7YmFja2dyb3VuZC1jb2xvcjogI2U2NDk4MCAhaW1wb3J0YW50O2NvbG9yOiAjZmZkZWViICFpbXBvcnRhbnQ7fS5vLS1qdW1wIGEuaXMtdmlwIHtjb2xvcjogI2U4NTkwYyAhaW1wb3J0YW50O30uby0tanVtcCBhLmlzLXZpcDpob3Zlciwuby0tanVtcCBhLmlzLXZpcC5pcy1hY3RpdmUge2JvcmRlcjogMXB4IHNvbGlkICNlODU5MGM7YmFja2dyb3VuZC1jb2xvcjogI2U4NTkwYyAhaW1wb3J0YW50O2NvbG9yOiAjZmZmNGU2ICFpbXBvcnRhbnQ7fS5vLS12aXAtbGlzdCB+IC5vLS1qdW1wIHtib3JkZXItdG9wOiAycHggc29saWQgcmdiYSgyMjQsIDIyNCwgMjI0LCAwLjI1KTt9Lm8tLXZpcC1saXN0IH4gLm8tLWp1bXAgLm8tLWNvbGxhcHNlOm5vdCguaXMtY29sbGFwc2UpIHtkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDt9Lm8tLWNvbGxhcHNlIHttaW4td2lkdGg6IDJlbTt9IjsKICAgICAgfQogICAgICBhc3luYyBmdW5jdGlvbiBnZXRLZXl3b3JkKG4pIHsKICAgICAgICByZXR1cm4gInN0cmluZyIgPT0gdHlwZW9mIG4gPyBhd2FpdCAkJCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gJChuKS5lcSgwKS50ZXh0KCk7CiAgICAgICAgfSkpIDogImZ1bmN0aW9uIiA9PSB0eXBlb2YgbiA/IG4oJCkgOiBnZXRLZXl3b3JkRnJvbVVybChuKTsKICAgICAgfQogICAgICBhc3luYyBmdW5jdGlvbiBnb0p1bXAobiwgZSkgewogICAgICAgIGlmIChuIGluc3RhbmNlb2YgRnVuY3Rpb24pIG4oZSk7IGVsc2UgewogICAgICAgICAgY29uc3QgdCA9IGF3YWl0IGdldEtleXdvcmQoZSk7CiAgICAgICAgICBpZiAoIXQpIHJldHVybjsKICAgICAgICAgIChBcnJheS5pc0FycmF5KG4pID8gbiA6IG4uc3BsaXQoL1xzKixccyovKSkuZm9yRWFjaCgoZnVuY3Rpb24obikgewogICAgICAgICAgICBuID0gbi5zcGxpdCgvXHMqXHxccyovKSwgaW5zZXJ0U2VhcmNoQWRkb24odCwgblswXSwgblsxXSB8fCAiYWZ0ZXIiKTsKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZXhlY0FkZG9uSnMobikgewogICAgICAgIG4gJiYgbi5qcyBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG4uanMoKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBhZGRvbkdvKCkgewogICAgICAgIGNvbnN0IGFkZG9uID0gQURET05TLmZpbmQoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgIHJldHVybiAhbi5kaXNhYmxlICYmIElzKG4ubWF0Y2gpOwogICAgICAgIH0pKTsKICAgICAgICBpZiAoYWRkb24pIHsKICAgICAgICAgIGlmIChpc0ZpcnN0UnVuQWRkb24pIHsKICAgICAgICAgICAgbGV0IG4gPSBnZXRCYXNlU3R5bGUoKTsKICAgICAgICAgICAgYWRkb24uaGlkZSAmJiAobiArPSAiXG4iICsgYWRkb24uaGlkZSArICIgeyIgKyBQdXJpZnlTdHlsZSArICJ9IiksIGFkZG9uLmNzcyAmJiAobiArPSBhZGRvbi5jc3MpLAogICAgICAgICAgICBhZGRDc3Mobik7CiAgICAgICAgICB9CiAgICAgICAgICBfRCAmJiAkKCJvby1sb2dzIikubGVuZ3RoLCBfRCAmJiAkKCJvby1sb2dzIikubGVuZ3RoLCAkKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgbGV0IF9NYXRobWluID0gTWF0aC5taW47CiAgICAgICAgICAgIGNvbnN0IHBsYXlBZGRvbiA9IGFkZG9uLnBsYXk7CiAgICAgICAgICAgIGlmIChwbGF5QWRkb24gJiYgSXMocGxheUFkZG9uLm1hdGNoKSkgewogICAgICAgICAgICAgIGlmIChwbGF5QWRkb24udmlwICYmICFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuby0tdmlwIikpIHsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZvcm1hdFBhc3NlZFRpbWUobikgewogICAgICAgICAgICAgICAgICByZXR1cm4gKChEYXRlLm5vdygpIC0gbikgLyAxZTMpLnRvRml4ZWQoMikgKyAicyI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVRcmNvZGUoKSB7CiAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSAwIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSA/IGFyZ3VtZW50c1swXSA6IEhyZWY7CiAgICAgICAgICAgICAgICAgIGlzTW9iaWxlIHx8ICghcXJjb2RlQ29kZSAmJiAocXJjb2RlQ29kZSA9IGF3YWl0IGZldGNoQ2RuVXJsKCIvcXJjb2RlLWdlbmVyYXRvci8xLjQuNC9xcmNvZGUubWluLmpzIikpLAogICAgICAgICAgICAgICAgICBldmFsKHFyY29kZUNvZGUpLCBxcmNvZGUgJiYgKFFSID0gcXJjb2RlKDAsICJMIiksIFFSLmFkZERhdGEodXJsKSwgUVIubWFrZSgpLCAkKCIuby0tcXJjb2RlLWJveCIpLnJlbW92ZUNsYXNzKCJvLS1oaWRlIiksCiAgICAgICAgICAgICAgICAgICQoIi5vLS1xcmNvZGUiKS5odG1sKFFSLmNyZWF0ZUltZ1RhZygpKSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZml4VXJsKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG4ucmVwbGFjZSgvW1w/I10uKy9nLCAiIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmaXhWaXBVcmwobikgewogICAgICAgICAgICAgICAgICBjb25zdCBlID0gQURET05TLmZpbmQoKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXMoZS5tYXRjaCwgbikgJiYgZS5wbGF5ICYmIGUucGxheS5maXhVcmw7CiAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGUgPyAhMCA9PT0gZS5wbGF5LmZpeFVybCA/IGZpeFVybChuKSA6IGUucGxheS5maXhVcmwobikgOiBuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VmlwVGFyZ2V0VXJsKCkgewogICAgICAgICAgICAgICAgICBpZiAob29QbGF5VXJsKSByZXR1cm4gb29QbGF5VXJsOwogICAgICAgICAgICAgICAgICBsZXQgbiA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgvJj9cdys9aHR0cFteJl0rLywgIiIpLnJlcGxhY2UoLy4raHR0cC8sICJodHRwIik7CiAgICAgICAgICAgICAgICAgIHJldHVybiBuID0gZGVjb2RlVVJJKGZpeFZpcFVybChuKSB8fCBuKSwgbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhblBsYXlJblBhZ2UobikgewogICAgICAgICAgICAgICAgICByZXR1cm4gIWlzT25seURvd25sb2FkVmlkZW9VcmxSZWdleC50ZXN0KG4pICYmICghL1wvXC92d2VjYW0udGMucXEuY29tLy50ZXN0KG4pIHx8IElzKCJ2LnFxLmNvbSIpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRvU2hvcnRWaWRlb1VybChuKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBuLm1hdGNoKHNob3J0VmlkZW9VcmxSZWdleCkgfHwgbi5tYXRjaChzaG9ydFZpZGVvVXJsTG9zZVJlZ2V4KTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGUgPyBlWzFdLnNwbGl0KCIuIikuc2xpY2UoLTIpLmpvaW4oIi4iKSArICIgLi4uICIgKyBlW2UubGVuZ3RoIC0gMl0uc2xpY2UoLTEwKSArICI8c3Bhbj4gLiAiICsgZVtlLmxlbmd0aCAtIDFdICsgIjwvc3Bhbj4iIDogbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpeElmcmFtZVVybChuKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBuLnJlcGxhY2UoL1wvP1w/LisvLCAiIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRJZnJhbWVJZChuKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBpZnJhbWVzW2ZpeElmcmFtZVVybChuKV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRJZnJhbWUobikgewogICAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWVzW2dldElmcmFtZUlkKG4pXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldElmcmFtZShuLCBlKSB7CiAgICAgICAgICAgICAgICAgIGlmcmFtZXNbZml4SWZyYW1lVXJsKG4pXSA9IGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhZGRJZnJhbWUobikgewogICAgICAgICAgICAgICAgICBsZXQgZSA9IDEgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogIm9vLWlmcmFtZXMiOwogICAgICAgICAgICAgICAgICBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CiAgICAgICAgICAgICAgICAgIHJldHVybiB0LmlkID0gdXVpZCgpLCB0LmZyYW1lYm9yZGVyID0gIjAiLCB0LnNjcm9sbGluZyA9ICJubyIsIHQuc2VhbWxlc3MgPSAhMCwKICAgICAgICAgICAgICAgICAgdC5zYW5kYm94ID0gImFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctZm9ybXMiLCBuICYmICh0LnNyYyA9IG4sIHNldElmcmFtZShuLCB0LmlkKSksCiAgICAgICAgICAgICAgICAgICQoZSkuYXBwZW5kKHQpLCB0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlSWZyYW1lKCkgewogICAgICAgICAgICAgICAgICBsZXQgbiA9IDAgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdID8gYXJndW1lbnRzWzBdIDogIm9vLWlmcmFtZXMgPiBpZnJhbWUiOwogICAgICAgICAgICAgICAgICBjb25zdCBlID0gJCgic3RyaW5nIiA9PSB0eXBlb2YgbiA/IG4uc3RhcnRzV2l0aCgib28taWZyYW1lcyIpID8gbiA6ICIjIiArIG4gOiBuLmlkID8gIiMiICsgbi5pZCA6IG4pLmdldCgwKTsKICAgICAgICAgICAgICAgICAgZSAmJiAoZS5zcmMgPSAiYWJvdXQ6YmxhbmsiLCAkKGUpLnJlbW92ZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVtcHR5SWZyYW1lcygpIHsKICAgICAgICAgICAgICAgICAgJCgib28taWZyYW1lcyA+IGlmcmFtZSIpLmVhY2goKGZ1bmN0aW9uKG4sIGUpIHsKICAgICAgICAgICAgICAgICAgICByZW1vdmVJZnJhbWUoZSk7CiAgICAgICAgICAgICAgICAgIH0pKSwgJCgib28taWZyYW1lcyIpLmVtcHR5KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRTbmlmZlRpbWUobikgewogICAgICAgICAgICAgICAgICBjb25zdCBlID0gc25pZmZUaW1lc1tmaXhJZnJhbWVVcmwobildOwogICAgICAgICAgICAgICAgICByZXR1cm4gZSA/IGZvcm1hdFBhc3NlZFRpbWUoZSkgOiAiMHMiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gc25pZmZTdGFydCgpIHsKICAgICAgICAgICAgICAgICAgaXNTbmlmZmluZyA9ICEwLCBpc0Vuc3VyZVBsYXlpbmdDaGVjayA9ICExLCBzbmlmZlRpbWVzdGFtcCA9IERhdGUubm93KCksIHNuaWZmVXJscyA9IFtdLAogICAgICAgICAgICAgICAgICBzbmlmZlVybHNLZXkgPSBbXSwgJCgiLm8tLXBsYXllciIpLmVtcHR5KCksICQoImh0bWwiKS5hZGRDbGFzcygiby0tc25pZmZpbmciKSwgJCgiLm8tLXZpcCIpLnJlbW92ZUNsYXNzKCJpcy1wbGF5LWluLXBhZ2UiKSwKICAgICAgICAgICAgICAgICAgYmxvYkNvdW50ID0gMCwgJCgiLm8tLXZpcC1pdGVtLmlzLWJsb2IiKS5yZW1vdmUoKSwgcHJvZ3Jlc3NJbnRlcnZhbCA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAkKCIuby0tc25pZmYtcHJvZ3Jlc3MiKS5jc3MoewogICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICskKCIuby0tc25pZmYtcHJvZ3Jlc3MiKS5jc3MoIndpZHRoIikucmVwbGFjZSgiJSIsICIiKSArIC4xICsgIiUiCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIH0pLCAyMDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gc25pZmZEb25lKCkgewogICAgICAgICAgICAgICAgICBmb3JtYXRQYXNzZWRUaW1lKHNuaWZmU3RhcnRUaW1lKSwgaXNTbmlmZmluZyA9ICExLCBlbXB0eUlmcmFtZXMoKSwgJCgiLm8tLXNuaWZmLXByb2dyZXNzIikuY3NzKHsKICAgICAgICAgICAgICAgICAgICB3aWR0aDogIjEwMCUiCiAgICAgICAgICAgICAgICAgIH0pLCBjbGVhckludGVydmFsKHByb2dyZXNzSW50ZXJ2YWwpLCAkKCIuby0tdmlwIikucmVtb3ZlQ2xhc3MoImlzLXNuaWZmaW5nIikuYWRkQ2xhc3MoImlzLXNuaWZmLWRvbmUiKSwKICAgICAgICAgICAgICAgICAgJCgiaHRtbCIpLnJlbW92ZUNsYXNzKCJvLS1zbmlmZmluZyIpLCAwIDwgc25pZmZVcmxzLmxlbmd0aCAmJiAwID09PSAkKCIuby0tc25pZmYtZG9uZSIpLmxlbmd0aCAmJiAkKCIuby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMiKS5sZW5ndGggJiYgJCgiLm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIikuYXBwZW5kKCc8c3BhbiBjbGFzcz0iby0tc25pZmYtZG9uZSI+4pyUPC9zcGFuPicpLAogICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAkKCIuby0tc25pZmYtcHJvZ3Jlc3MiKS5jc3MoewogICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIwIgogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICB9KSwgMWUzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNuaWZmU3VjY2VzcyhuLCBlKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSAobiA9IGRlY29kZVVSSUNvbXBvbmVudChuLnRyaW0oKSkucmVwbGFjZSgvXihodHRwOik/XC9cLy8sICJodHRwczovLyIpKS5yZXBsYWNlKC9cPy4rLywgIiIpOwogICAgICAgICAgICAgICAgICBpZiAoc25pZmZVcmxzS2V5LmluY2x1ZGVzKHQpKSByZXR1cm47CiAgICAgICAgICAgICAgICAgIHNuaWZmVXJsc0tleS5wdXNoKHQpLCBzbmlmZlVybHMucHVzaChuKTsKICAgICAgICAgICAgICAgICAgY29uc3QgaSA9IHNuaWZmVXJscy5sZW5ndGgsIG8gPSBuLm1hdGNoKHZpZGVvRXh0UmVnZXgpLCBhID0gbyA/IG9bMV0gOiAidW5rbm93IjsKICAgICAgICAgICAgICAgICAgaWYgKCQoIi5vLS12aXAtcGxheSAuby0tc291cmNlcyIpLmFwcGVuZCgnPGEgX2hyZWY9IicgKyAoImJsb2IiID09PSBhID8gZSA6IG4pICsgJyIgY2xhc3M9ImlzLScgKyBhICsgJyI+57q/6LevJyArIGkgKyAiPC9hPiIpLAogICAgICAgICAgICAgICAgICAkKCIuby0tdmlwLXBsYXkgLm8tLXNvdXJjZXMgYSIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9ICQodGhpcykuYXR0cigiX2hyZWYiKTsKICAgICAgICAgICAgICAgICAgICB1cGRhdGVRcmNvZGUobik7CiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuby0tcGxheWVyIHZpZGVvIik7CiAgICAgICAgICAgICAgICAgICAgZSB8fCAoJCgiLm8tLXBsYXllciIpLnByZXBlbmQoJzx2aWRlbyBjbGFzcz0iby0tdmlkZW8iIHBvc3Rlcj0iJyArIFBsYXllclBsYXlpbmdDb3ZlciArICciIGNvbnRyb2xzIHBsYXlzaW5saW5lPjwvdmlkZW8+JyksCiAgICAgICAgICAgICAgICAgICAgZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5vLS1wbGF5ZXIgdmlkZW8iKSk7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdCA9IGdldEdsb2JhbCgiUGx5ciIpLCBpID0gZ2V0R2xvYmFsKCJIbHMiKSB8fCBnZXRHbG9iYWwoImhscyIpOwogICAgICAgICAgICAgICAgICAgIGlmICghcGxheWVyICYmIHQgJiYgKHBsYXllciA9IG5ldyB0KGUsIHsKICAgICAgICAgICAgICAgICAgICAgIGRlYnVnOiBfRCwKICAgICAgICAgICAgICAgICAgICAgIGludmVydFRpbWU6ICExLAogICAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXk6ICEwLAogICAgICAgICAgICAgICAgICAgICAgdm9sdW1lOiAuNzUsCiAgICAgICAgICAgICAgICAgICAgICBzcGVlZDogewogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogWyAuNSwgLjc1LCAxLCAxLjI1LCAxLjUsIDIgXQogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2U6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogITAsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogc3RvcmVQcmVmaXggKyAicGx5ciIKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KSwgcGxheWVyLm9uKCJlbnRlcmZ1bGxzY3JlZW4iLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAkKCJodG1sIikuYWRkQ2xhc3MoIm8tLWZ1bGxzY3JlZW4iKTsKICAgICAgICAgICAgICAgICAgICB9KSksIHBsYXllci5vbigiZXhpdGZ1bGxzY3JlZSIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICQoImh0bWwiKS5yZW1vdmVDbGFzcygiby0tZnVsbHNjcmVlbiIpOwogICAgICAgICAgICAgICAgICAgIH0pKSksICQoIi5vLS1wbGF5ZXItYmciKS5yZW1vdmUoKSwgL1wubTN1OC8udGVzdChuKSAmJiBpICYmIGkuaXNTdXBwb3J0ZWQoKSkgewogICAgICAgICAgICAgICAgICAgICAgY29uc3QgdCA9IG5ldyBpOwogICAgICAgICAgICAgICAgICAgICAgdC5sb2FkU291cmNlKG4pLCB0LmF0dGFjaE1lZGlhKGUpLCB0Lm9uKGkuRXZlbnRzLk1BTklGRVNUX1BBUlNFRCwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBlLnBsYXkoKTsKICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgZS5zcmMgPSBuLCBlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgZS5wbGF5KCk7CiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgICQoIi5vLS1wbGF5LXVybCIpLmh0bWwoJ+adpea6kO+8mjxhIF9ocmVmPSInICsgbiArICciPicgKyB0b1Nob3J0VmlkZW9VcmwobikgKyAiPC9hPiIgKyAoY2FuUGxheUluUGFnZShuKSA/ICc8c3BhbiBjbGFzcz0iby0tc3BhbiI+5aaC5p6c5YWo6YOo57q/6Lev6YO95peg5rOV5pKt5pS+77yM5Y+v5Lul54K55Ye75p2l5rqQ6ZO+5o6l5LiL6L295p2l5pKt5pS+77yM5oiW5L2/55So5Y2V5Liq6Kej5p6Q5pKt5pS+44CCPC9zcGFuPicgOiAnPHNwYW4gY2xhc3M9Im8tLXNwYW4gaXMtd2FybmluZyI+PHNwYW4+6K+l6ZO+5o6l5peg5rOV5Zyo5b2T5YmN56uZ54K55pKt5pS+77yM6K+354K55Ye75p2l5rqQ5LiL6L295pKt5pS+PC9zcGFuPjwvc3Bhbj4nKSksCiAgICAgICAgICAgICAgICAgICAgJCgiLm8tLXBsYXktdXJsIGEiKS5vZmYoImNsaWNrIikub24oImNsaWNrIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9ICQodGhpcykuYXR0cigiX2hyZWYiKTsKICAgICAgICAgICAgICAgICAgICAgIGlzSGlrZXIgJiYgd2luZG93LmZ5X2JyaWRnZV9hcHAucGxheVZpZGVvID8gd2luZG93LmZ5X2JyaWRnZV9hcHAucGxheVZpZGVvKG4pIDogaXNNaXhpYSAmJiB3aW5kb3cubXhfYnJvd3Nlcl9vYmoucGxheXZpZGVvID8gd2luZG93Lm14X2Jyb3dzZXJfb2JqLnBsYXl2aWRlbyhuLCBuKSA6IHdpbmRvdy5vcGVuKG4sICJfYmxhbmsiLCAibm9vcGVuZXIiKTsKICAgICAgICAgICAgICAgICAgICB9KSksICQoIi5vLS12aXAtcGxheSAuby0tc291cmNlcyBhIikucmVtb3ZlQ2xhc3MoImlzLWFjdGl2ZSIpLCAkKHRoaXMpLmFkZENsYXNzKCJpcy1hY3RpdmUiKTsKICAgICAgICAgICAgICAgICAgfSkpLCAxID09PSBpKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IG47CiAgICAgICAgICAgICAgICAgICAgJCgiLm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIGEiKS5nZXQoMCkuY2xpY2soKSwgJCgiLm8tLXZpcCIpLmFkZENsYXNzKCJpcy1zbmlmZi1zdWNjZXNzIiksCiAgICAgICAgICAgICAgICAgICAgJCgiLm8tLXZpcC1wbGF5IikucmVtb3ZlQ2xhc3MoImlzLWhpZGUiKSwgaXNFbnN1cmVQbGF5aW5nQ2hlY2sgPSAhMCwgc2V0VGltZW91dCgoZnVuY3Rpb24gZSgpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Vuc3VyZVBsYXlpbmdDaGVjaykgcmV0dXJuIHBsYXllciAmJiBwbGF5ZXIucmVhZHkgJiYgMCA8IHBsYXllci5kdXJhdGlvbiA/IHZvaWQgKGlzRW5zdXJlUGxheWluZ0NoZWNrID0gITEpIDogKChuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIGEuaXMtYWN0aXZlICsgYSIpKSA/IG4uY2xpY2soKSA6IDEgPCBpICYmIChuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm8tLXZpcC1wbGF5IC5vLS1zb3VyY2VzIGEiKSwKICAgICAgICAgICAgICAgICAgICAgIG4gJiYgbi5jbGljaygpKSwgdm9pZCBzZXRUaW1lb3V0KGUsIDQ1MDApKTsKICAgICAgICAgICAgICAgICAgICB9KSwgNGUzKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gc25pZmZGYWlsKCkgewogICAgICAgICAgICAgICAgICBzbmlmZkRvbmUoKSwgJCgiLm8tLXBsYXllci1iZyIpLmFkZENsYXNzKCJpcy1mYWlsIiksICQoIi5vLS12aXAiKS5hZGRDbGFzcygiaXMtc25pZmYtZmFpbCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gaVNuaWZmKCkge30KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhpa2VyU25pZmYoc25pZmZUaWNrSWQpIHsKICAgICAgICAgICAgICAgICAgaWYgKHNuaWZmVGlja0lkICE9PSBzbmlmZlRpY2spIHJldHVybjsKICAgICAgICAgICAgICAgICAgbGV0IHJlc291cmNlID0gZXZhbCh3aW5kb3cuZnlfYnJpZGdlX2FwcC5nZXROZXR3b3JrUmVjb3JkcygpKTsKICAgICAgICAgICAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZS5maWx0ZXIoKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbi50aW1lc3RhbXAgPiBzbmlmZlRpbWVzdGFtcCAmJiBpc1ZhbGlkVmlkZW9Vcmwobi51cmwpOwogICAgICAgICAgICAgICAgICB9KSksIGlzU25pZmZpbmcgJiYgKHJlc291cmNlLmZvckVhY2goKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgICBzbmlmZlN1Y2Nlc3Mobi51cmwpOwogICAgICAgICAgICAgICAgICB9KSksIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGhpa2VyU25pZmYoc25pZmZUaWNrSWQpOwogICAgICAgICAgICAgICAgICB9KSwgMTAwKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBtaXhpYVNuaWZmKG4pIHsKICAgICAgICAgICAgICAgICAgaWYgKG4gIT09IHNuaWZmVGljaykgcmV0dXJuOwogICAgICAgICAgICAgICAgICBsZXQgZSA9IFtdLCB0ID0gd2luZG93Lm14X2Jyb3dzZXJfb2JqLmdldHdlYmxvZ3MoImh0dHAiKTsKICAgICAgICAgICAgICAgICAgImVycm9yIiAhPT0gdCAmJiAoZSA9IHQudHJpbSgpLnNwbGl0KC9ccypcbltcblxzXSovKSwgZSA9IGUuZmlsdGVyKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRWaWRlb1VybChuKTsKICAgICAgICAgICAgICAgICAgfSkpKSwgaXNTbmlmZmluZyAmJiAoZS5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgc25pZmZTdWNjZXNzKG4pOwogICAgICAgICAgICAgICAgICB9KSksIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIG1peGlhU25pZmYobik7CiAgICAgICAgICAgICAgICAgIH0pLCAxMDApKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGluc2VydFBsYXllckh0bWwoKSB7CiAgICAgICAgICAgICAgICAgIGxldCBuID0gMCA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMF0gPyBhcmd1bWVudHNbMF0gOiAiIjsKICAgICAgICAgICAgICAgICAgY29uc3QgZSA9IGdldFZpcFBsYXllcigpOwogICAgICAgICAgICAgICAgICBpZiAoZSkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSAnPGRpdiBjbGFzcz0iby0tcGxheWVyLWJnIiBzdHlsZT0iYmFja2dyb3VuZC1pbWFnZTogdXJsKCcgKyBnZXRDZG5JbWFnZVVybChQbGF5ZXJMb2FkaW5nQ292ZXJzW3BhcnNlSW50KERhdGUubm93KCkgLyAxZTMpICUgUGxheWVyTG9hZGluZ0NvdmVycy5sZW5ndGhdKSArICcpOyI+PGRpdiBjbGFzcz0iby0tcGxheWVyLW1hc2siPjwvZGl2PjxkaXYgY2xhc3M9Im8tLXNuaWZmLXByb2dyZXNzIj48L2Rpdj48ZGl2IGNsYXNzPSJvLS1zaWduIj4ob8uY4pehy5hvKTxzcGFuIGNsYXNzPSJvLS12ZXJzaW9uIj52ICcgKyBWRVJTSU9OICsgJzwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJvLS1zbG9nYW4iPjxzdHJvbmc+6KeFPC9zdHJvbmc+PGRpdiBjbGFzcz0iby0tbG9hZGVyIj4nICsgSWNvbi5sb2FkZXIgKyAnPC9kaXY+PHN0cm9uZz7lvbE8L3N0cm9uZz48L2Rpdj48ZGl2IGNsYXNzPSJvLS1lcnJvci10ZXh0Ij7op6PmnpDlpLHotKXvvIzlj6/ku6XlsJ3or5Xkvb/nlKjljZXkuKrop6PmnpDmkq3mlL7vvIzmiJbogIXliLDlhbblroPmraPniYjnvZHnq5nkuIrop6PmnpA8L2Rpdj48L2Rpdj4nOwogICAgICAgICAgICAgICAgICAgICQoZSkuZW1wdHkoKS5hcHBlbmQoJzxkaXYgY2xhc3M9Im8tLXBsYXllciI+JyArIHQgKyBuICsgIjwvZGl2PiIpLCAkKCIuby0tcGxheWVyIikucGFyZW50KCkuYWRkQ2xhc3MoIm8tLXBsYXllci1ib3giKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBpID0gRGF0ZS5ub3coKSwgbyA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIERhdGUubm93KCkgLSBpID4gOWU0ICYmIGNsZWFySW50ZXJ2YWwobyksICQoIi5vLS1wbGF5ZXItYm94ID4gKjpub3QoLm8tLXBsYXllcikiKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICAgICB9KSwgMWUzKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gc25pZmYobikgewogICAgICAgICAgICAgICAgICBpZiAoaXNTbmlmZmluZyAmJiBzbmlmZkRvbmUoKSwgc25pZmZTdGFydCgpLCBpc0FsbG93SWZyYW1lU25pZmYpIGlTbmlmZigpOyBlbHNlIGlmIChpc0FsbG93SGlrZXJTbmlmZikgaGlrZXJTbmlmZihuKTsgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FsbG93TWl4aWFTbmlmZikgcmV0dXJuIHZvaWQgc25pZmZEb25lKCk7CiAgICAgICAgICAgICAgICAgICAgbWl4aWFTbmlmZihuKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpbnNlcnRQbGF5ZXJIdG1sKGlzTW9iaWxlID8gIiIgOiAnPGRpdiBjbGFzcz0iby0tdmlwLXBsYXkgaXMtaGlkZSI+PGRpdiBjbGFzcz0iby0tc291cmNlcyI+PC9kaXY+PGRpdiBjbGFzcz0iby0tcGxheS11cmwiPjwvZGl2PjwvZGl2PicpLAogICAgICAgICAgICAgICAgICBpc01vYmlsZSAmJiAoJCgiLm8tLXZpcC1wbGF5IikucmVtb3ZlKCksICQoIi5vLS12aXAtcGFuZWwiKS5hZnRlcignPGRpdiBjbGFzcz0iby0tdmlwLXBsYXkgaXMtaGlkZSI+PGRpdiBjbGFzcz0iby0tc291cmNlcyI+PC9kaXY+PGRpdiBjbGFzcz0iby0tcGxheS11cmwiPjwvZGl2PjwvZGl2PicpKSwKICAgICAgICAgICAgICAgICAgcGF1c2VQbGF5KCksIHNuaWZmVXJscyA9IFtdLCBzbmlmZlRpbWVzID0ge30sIHNuaWZmSW5kZXggPSAtMSwgZ29TbmlmZigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ29TbmlmZigpIHsKICAgICAgICAgICAgICAgICAgaWYgKCFpc1NuaWZmaW5nKSByZXR1cm47CiAgICAgICAgICAgICAgICAgIHNuaWZmSW5kZXggKz0gMTsKICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IFZfVVtzbmlmZkluZGV4XSwgZSA9IChzbmlmZkluZGV4ICsgMSkgLyAoVl9VLmxlbmd0aCArIDEpLCB0ID0gKHNuaWZmVXJscy5sZW5ndGggKyAxKSAvIE1BWF9TTklGRl9QTEFZX0NPVU5ULCBpID0gX01hdGhtaW4oMTAgKiAoMi41ICogZSArIDIuNSAqIHQgKyA1ICogX01hdGhtYXgoZSwgdCkgKyAuNSksIDk5KS50b0ZpeGVkKDQpICsgIiUiOwogICAgICAgICAgICAgICAgICBpZiAoJCgiLm8tLXNuaWZmLXByb2dyZXNzIikuY3NzKHsKICAgICAgICAgICAgICAgICAgICB3aWR0aDogaQogICAgICAgICAgICAgICAgICB9KSwgIW4pIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gc2V0SW50ZXJ2YWwoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09ICQoIm9vLWlmcmFtZXMgPiBpZnJhbWUiKS5sZW5ndGggJiYgKGNsZWFySW50ZXJ2YWwobiksIHNuaWZmRG9uZSgpLCAwID09PSBzbmlmZlVybHMubGVuZ3RoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm8tLXZpcC1pdGVtLmlzLWJsb2IiKTsKICAgICAgICAgICAgICAgICAgICAgICAgbiA/IG4uY2xpY2soKSA6IHNuaWZmRmFpbCgpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pLCAxZTMpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoc25pZmZVcmxzLmxlbmd0aCA+PSBNQVhfU05JRkZfUExBWV9DT1VOVCArIChwbGF5ZXIgJiYgcGxheWVyLnJlYWR5ICYmIDAgPCBwbGF5ZXIuZHVyYXRpb24gPyAtMSA6IDIpIHx8IHNuaWZmVXJscy5sZW5ndGggPj0gTUFYX1NOSUZGX1BMQVlfQ09VTlQgLyAyICYmIERhdGUubm93KCkgLSBzbmlmZlRpbWVzdGFtcCA+IDFlMyAqIF9NYXRobWF4KDI1MCAtIDEwICogc25pZmZVcmxzLmxlbmd0aCwgMTUwKSkgcmV0dXJuIHZvaWQgc25pZmZEb25lKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG8gPSBnZXRWaXBUYXJnZXRVcmwoKSwgYSA9IE1fVmlwVXJsKG4pICsgbzsKICAgICAgICAgICAgICAgICAgc25pZmZUaW1lc1tmaXhJZnJhbWVVcmwoYSldID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgICAgICAgY29uc3QgciA9IGFkZElmcmFtZShhKSwgcyA9IGlzTW9iaWxlID8gNyA6IDU7CiAgICAgICAgICAgICAgICAgIHIub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICByZW1vdmVJZnJhbWUociwgIlRJTUVPVVQiKTsKICAgICAgICAgICAgICAgICAgICB9KSwgMTJlMyk7CiAgICAgICAgICAgICAgICAgIH0sIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJlbW92ZUlmcmFtZShyLCAiTUFYIFRJTUVPVVQiKSwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICBpc1NuaWZmaW5nICYmIDAgPT09ICQoIm9vLWlmcmFtZXMgPiBpZnJhbWUiKS5sZW5ndGggJiYgc25pZmZJbmRleCA+PSBWX1UubGVuZ3RoIC0gMSAmJiBzbmlmZkRvbmUoKTsKICAgICAgICAgICAgICAgICAgICB9KSwgMTUwMCk7CiAgICAgICAgICAgICAgICAgIH0pLCAxNWUzKSwgZnVuY3Rpb24gbigpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBlID0gJCgib28taWZyYW1lcyA+IGlmcmFtZSIpLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoZSA+IHMgLSAxKSBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIG4oKTsKICAgICAgICAgICAgICAgICAgICB9KSwgMTAwKTsgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gcGxheWVyICYmIHBsYXllci5yZWFkeSAmJiAwIDwgcGxheWVyLmR1cmF0aW9uLCB0ID0gX01hdGhtaW4oc25pZmZVcmxzLmxlbmd0aCAqIChuID8gMjAwIDogMTUwKSArIDEwMCAqIChzIC0gZSkgKyBfTWF0aG1pbig1MCAqIHNuaWZmSW5kZXgsIDFlMyksIDNlMykgKiAoaXNNb2JpbGUgPyAuNyA6IDEpOwogICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdvU25pZmYoKTsKICAgICAgICAgICAgICAgICAgICAgIH0pLCB0KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGF1dG9TbmlmZlBsYXkoKSB7CiAgICAgICAgICAgICAgICAgIGF3YWl0IHBsYXlCZWZvcmUoKSwgMCA8IHNuaWZmVGljayAmJiBzbmlmZkRvbmUoKSwgc25pZmZTdGFydFRpbWUgPSBEYXRlLm5vdygpLCBzbmlmZigrK3NuaWZmVGljayksCiAgICAgICAgICAgICAgICAgICQoIi5vLS12aXAiKS5yZW1vdmVDbGFzcygiaXMtc25pZmYtc3VjY2VzcyBpcy1zbmlmZi1kb25lIikuYWRkQ2xhc3MoImlzLXNuaWZmaW5nIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXVzZVBsYXkoKSB7CiAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgJCgidmlkZW86bm90KC5vLS12aWRlbyksIGF1ZGlvIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICAgICAgICAgICAgZS5wYXVzZSgpLCBlLnZvbHVtZSA9IDAsIGUubXV0ZWQgPSAhMCwgJCgidmlkZW86bm90KC5vLS12aWRlbyksIGF1ZGlvIikuZWFjaCgoZnVuY3Rpb24obiwgZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkKGUpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gRGF0ZS5ub3coKSwgZSA9IHNldEludGVydmFsKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBEYXRlLm5vdygpIC0gbiwgaSA9IGdldEdsb2JhbCgicGxheWVyT2JqZWN0IikgfHwgZ2V0R2xvYmFsKCJNR1RWUGxheWVyIikgJiYgZ2V0R2xvYmFsKCJNR1RWUGxheWVyIikucGxheWVyIHx8IGdldEdsb2JhbCgidmlkZW9QbGF5ZXIiKSB8fCBnZXRHbG9iYWwoIlBMQVlFUiIpOwogICAgICAgICAgICAgICAgICAgICAgaSAmJiAoaS5wYXVzZSBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIGkucGF1c2UoKSwgaS5tdXRlIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgaS5tdXRlKCkpLAogICAgICAgICAgICAgICAgICAgICAgKCFpIHx8IHQgPiA5ZTQpICYmIGNsZWFySW50ZXJ2YWwoZSk7CiAgICAgICAgICAgICAgICAgICAgfSksIDYwKTsKICAgICAgICAgICAgICAgICAgfSBjYXRjaCAobikge30KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIHBsYXlCZWZvcmUoKSB7CiAgICAgICAgICAgICAgICAgICQoIi5vLS12aXAtcGxheSIpLnJlbW92ZUNsYXNzKCJpcy1oaWRlIiksIGlzTG9hZFBsYXllciB8fCAoYWRkQ3NzKCIvcGx5ci8zLjYuMi9wbHlyLmNzcyIpLAogICAgICAgICAgICAgICAgICBhd2FpdCBhZGRKcygiL2hscy5qcy8wLjEzLjIvaGxzLm1pbi5qcyIpLCBhd2FpdCBhZGRKcygiL3BseXIvMy42LjIvcGx5ci5taW4uanMiKSwKICAgICAgICAgICAgICAgICAgaXNMb2FkUGxheWVyID0gITApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VmlwUGxheWVyKCkgewogICAgICAgICAgICAgICAgICByZXR1cm4gJChQbGF5ZXJTZWxlY3RvcikuZ2V0KDApIHx8ICQoIiNwbGF5ZXIsIC5wbGF5ZXIiKS5nZXQoMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBwbGF5SW5QYWdlKG4pIHsKICAgICAgICAgICAgICAgICAgJCgiLm8tLXBsYXllciIpLnJlbW92ZUNsYXNzKCJpcy1sb2FkZWQiKTsKICAgICAgICAgICAgICAgICAgZ2V0VmlwUGxheWVyKCkgPyAocGF1c2VQbGF5KCksIGluc2VydFBsYXllckh0bWwoJzxpZnJhbWUgaWQ9Im8tLXBsYXllci1pZnJhbWUiIHN0eWxlPSJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBib3JkZXI6IG5vbmU7IG91dGxpbmU6IG5vbmU7IiAgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgYWxsb3dmdWxsc2NyZWVuPSJ0cnVlIiBhbGxvd3RyYW5zcGFyZW5jeT0idHJ1ZSIgZnJhbWVib3JkZXI9IjAiIHNjcm9sbGluZz0ibm8iIHNhbmRib3g9ImFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctZm9ybXMiIHNyYz0iJyArIG4gKyAnIj48L2lmcmFtZT4nKSkgOiBsb2NhdGlvbi5ocmVmID0gbiwKICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgJCgiLm8tLXBsYXllciIpLmFkZENsYXNzKCJpcy1sb2FkZWQiKTsKICAgICAgICAgICAgICAgICAgfSksIDI1MDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gcGxheVZpcFVybChuKSB7CiAgICAgICAgICAgICAgICAgIGlmICghbikgcmV0dXJuOwogICAgICAgICAgICAgICAgICBjb25zdCBlID0gbiArIGdldFZpcFRhcmdldFVybCgpOwogICAgICAgICAgICAgICAgICAkKCIuby0tdmlwIikucmVtb3ZlQ2xhc3MoImlzLXNuaWZmLXN1Y2Nlc3MgaXMtc25pZmYtZG9uZSBpcy1zbmlmZmluZyIpLmFkZENsYXNzKCJpcy1wbGF5LWluLXBhZ2UiKSwKICAgICAgICAgICAgICAgICAgdXBkYXRlUXJjb2RlKGUpLCBpc1BsYXlpbmdJblBhZ2UgJiYgIS9odHRwOi8udGVzdChuKSA/IHBsYXlJblBhZ2UoZSkgOiAocGF1c2VQbGF5KCksCiAgICAgICAgICAgICAgICAgICQoIiNvLS1wbGF5ZXItaWZyYW1lIikucmVtb3ZlKCksICQoIi5vLS1wbGF5ZXIiKS5yZW1vdmVDbGFzcygiaXMtbG9hZGVkIiksIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKGUsICJfYmxhbmsiKTsKICAgICAgICAgICAgICAgICAgfSksIDEwMCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY3Rpb24gcGxheVZpcEl0ZW0obikgewogICAgICAgICAgICAgICAgICBjb25zdCBlID0gMCA8ICQobikubGVuZ3RoOwogICAgICAgICAgICAgICAgICBsZXQgdCA9IGUgPyAkKG4pLmhhc0NsYXNzKCJvLS12aXAtc25pZmYiKSA/ICJhdXRvIiA6ICQobikuYXR0cigiX2hyZWYiKSA6IFN0b3JlLmdldCgibGFzdFBsYXlDaG9pY2UiLCAiIik7CiAgICAgICAgICAgICAgICAgICQoIi5vLS12aXAtaXRlbSIpLnJlbW92ZUNsYXNzKCJpcy1hY3RpdmUiKSwgJCgiLm8tLXZpcC1saXN0IH4gLm8tLXRpcCIpLnJlbW92ZUNsYXNzKCJvLS1oaWRlIiksCiAgICAgICAgICAgICAgICAgIGUgPyAkKG4pLmFkZENsYXNzKCJpcy1hY3RpdmUiKSA6IHQuc3RhcnRzV2l0aCgiaHR0cCIpID8gKCQoIi5vLS12aXAtaXRlbTpub3QoLm8tLXZpcC1zbmlmZikiKS5lYWNoKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoIl9ocmVmIikgPT09IHQgJiYgJCh0aGlzKS5hZGRDbGFzcygiaXMtYWN0aXZlIik7CiAgICAgICAgICAgICAgICAgIH0pKSwgcGxheVZpcFVybCh0KSkgOiAkKCIuby0tdmlwLWl0ZW0uby0tdmlwLXNuaWZmIikuYWRkQ2xhc3MoImlzLWFjdGl2ZSIpLCBpc1NuaWZmaW5nICYmIHNuaWZmRG9uZSgpLAogICAgICAgICAgICAgICAgICB0LnN0YXJ0c1dpdGgoImh0dHAiKSA/IHBsYXlWaXBVcmwodCkgOiBhdXRvU25pZmZQbGF5KCksIFN0b3JlLnNldCgibGFzdFBsYXlDaG9pY2UiLCB0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1fU291cmNlKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gPyBuLnJlcGxhY2UoLyhcdyspL2csIChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1fU3RyaW5nKGUpOwogICAgICAgICAgICAgICAgICB9KSkgOiAiIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1fVmlwVXJsKG4pIHsKICAgICAgICAgICAgICAgICAgaWYgKCFuKSByZXR1cm4gIiI7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBNX1NvdXJjZShuKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuICJodHRwczovLyIgKyBlICsgKGUuaW5jbHVkZXMoIj8iKSA/ICIiIDogKGUuZW5kc1dpdGgoIi4iKSA/ICJwaHAiIDogL1wvJC8udGVzdChlKSA/ICIiIDogIi8iKSArICI/dXJsIikgKyAiPSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbnNlcnRWaXBTb3VyY2UobikgewogICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlKCkgewogICAgICAgICAgICAgICAgICAgICQoIi5vLS1zZXR0aW5nLWJ1dHRvbiIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAkKCIuby0tdmlwIikudG9nZ2xlQ2xhc3MoImlzLXNldHRpbmctb24iKTsKICAgICAgICAgICAgICAgICAgICB9KSksICQoIi5vLS10b2dnbGUiKS5vZmYoImNsaWNrIikub24oImNsaWNrIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygiaXMtbiIpLCAkKHRoaXMpLmhhc0NsYXNzKCJvLS1hY3Rpb24tcGlwIikgPyAoaXNQbGF5aW5nSW5QYWdlID0gIWlzUGxheWluZ0luUGFnZSwKICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbFN0b3JlLnNldCgiaXNQbGF5aW5nSW5QYWdlIiwgaXNQbGF5aW5nSW5QYWdlKSkgOiAkKHRoaXMpLmhhc0NsYXNzKCJvLS1hY3Rpb24tc2tpcC1hZCIpICYmIChpc1NraXBBZFZpZGVvID0gIWlzU2tpcEFkVmlkZW8sCiAgICAgICAgICAgICAgICAgICAgICBTdG9yZS5zZXQoImlzU2tpcEFkVmlkZW8iLCBpc1NraXBBZFZpZGVvKSk7CiAgICAgICAgICAgICAgICAgICAgfSkpLCAkKCIuby0tZWRpdC12aXAtc291cmNlLXBhbmVsIHRleHRhcmVhIikub2ZmKCJpbnB1dCIpLm9uKCJpbnB1dCIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbFN0b3JlLnNldCgiVmlwVXJscyIsICQodGhpcykudmFsKCkpOwogICAgICAgICAgICAgICAgICAgIH0pKSwgJCgiLm8tLXZpcC1pdGVtOm5vdCguby0tbm9ybWFsKSIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICBwbGF5VmlwSXRlbSh0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9KSksICQoIi5vLS1sb2ctYnV0dG9uIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICQoIm9vLWxvZ3MiKS50b2dnbGVDbGFzcygiaXMtYWN0aXZlIik7CiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGxldCB0ID0gMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiAiYWZ0ZXIiLCBpID0gMiA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gPyBhcmd1bWVudHNbMl0gOiAwOwogICAgICAgICAgICAgICAgICBpZiAoMCA8ICQoIi5vLS12aXAiKS5sZW5ndGggfHwgMjAgPCBpKSByZXR1cm47CiAgICAgICAgICAgICAgICAgIGNvbnN0IG8gPSAkKG4pOwogICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gby5sZW5ndGgpIHJldHVybiB2b2lkIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGluc2VydFZpcFNvdXJjZShuLCB0LCBpICsgMSk7CiAgICAgICAgICAgICAgICAgIH0pLCAyNTApOwogICAgICAgICAgICAgICAgICBjb25zdCBhID0gdmlwVXJscy5sZW5ndGggPiBjb2xsYXBzZU51bTsKICAgICAgICAgICAgICAgICAgbGV0IHIgPSAoaXNNb2JpbGUgPyAiIiA6ICc8ZGl2IGNsYXNzPSJvLS1hY3Rpb24gby0tdG9nZ2xlIG8tLWFjdGlvbi1za2lwLWFkJyArIChpc1NraXBBZFZpZGVvID8gIiIgOiAiIGlzLW4iKSArICciPjxzcGFuIGNsYXNzPSJvLS15Ij7mmK88L3NwYW4+PHNwYW4gY2xhc3M9Im8tLW4iPuWQpjwvc3Bhbj7liqDpgJ/ot7Plub/lkYo8L2Rpdj4nKSArICc8ZGl2IGNsYXNzPSJvLS1hY3Rpb24gby0tdG9nZ2xlIG8tLWFjdGlvbi1waXAnICsgKGlzUGxheWluZ0luUGFnZSA/ICIiIDogIiBpcy1uIikgKyAnIj48c3BhbiBjbGFzcz0iby0teSI+5pivPC9zcGFuPjxzcGFuIGNsYXNzPSJvLS1uIj7lkKY8L3NwYW4+5byA5ZCv5Y6f572R6aG16Kej5p6Q5pKt5pS+PC9kaXY+PGRpdiBjbGFzcz0iby0tYWN0aW9uIj48YSBocmVmPSJodHRwczovL2dyZWFzeWZvcmsub3JnL3poLUNOL3NjcmlwdHMvMzkzMjg0IiB0YXJnZXQ9Il9ibGFuayI+5rK554y05Zyw5Z2APC9hPjwvZGl2Pic7CiAgICAgICAgICAgICAgICAgIG8uZXEoMClbdF0oJzxkaXYgY2xhc3M9Im8tLXZpcCcgKyAoaXNBbGxvd1NuaWZmID8gIiBpcy1hbGxvdy1zbmlmZiIgOiAiIikgKyAnIj48ZGl2IGNsYXNzPSJvLS1zbmlmZi1wcm9ncmVzcyI+PC9kaXY+PGRpdiBjbGFzcz0iby0tdmlwLXBhbmVsIj48ZGl2IGNsYXNzPSJvLS12aXAtdGl0bGUiPjxzcGFuIGNsYXNzPSJvLS12aXAtdGl0bGUtdGV4dCI+JyArIFBMVUdJTl9OQU1FICsgJzxzcGFuIGNsYXNzPSJvLS12aXAtc21hbGwiPnYnICsgVkVSU0lPTiArICI8L3NwYW4+PC9zcGFuPiIgKyAoX0QgPyAnPHNwYW4gY2xhc3M9Im8tLWxvZy1idXR0b24iPkxPRzwvc3Bhbj4nIDogIiIpICsgJzwvZGl2PjxkaXYgY2xhc3M9Im8tLW1lbnVzIj48ZGl2IGNsYXNzPSJvLS1xcmNvZGUtYm94IG8tLWhpZGUiPicgKyBJY29uLnFyY29kZSArICc8ZGl2IGNsYXNzPSJvLS1xcmNvZGUtdGV4dCI+5omL5py65omr56CB55yLPC9kaXY+PGRpdiBjbGFzcz0iby0tcXJjb2RlIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJvLS1zZXR0aW5nLWJ1dHRvbiI+JyArIEljb24ucGFuZGEgKyAnPC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iby0tc2V0dGluZy1wYW5lbCI+PGRpdiBjbGFzcz0iby0tYWN0aW9ucyI+JyArIHIgKyAnPC9kaXY+PGRpdiBjbGFzcz0iby0tZWRpdC12aXAtc291cmNlLXBhbmVsIj48ZGl2IGNsYXNzPSJvLS1lZGl0LWhpbnQiPuWIt+aWsOeUn+aViO+8jOa4heepuuaBouWkjem7mOiupO+8iOWOn+e9kemhteino+aekOWPquaUr+aMgSBodHRwcyAg6Kej5p6Q77yJPC9kaXY+PHRleHRhcmVhIHBsYWNlaG9sZGVyPSLmuIXnqbrkvJrkvb/nlKjpu5jorqTlgLwiPicgKyBjdXN0b21WaXBVcmxzLnRyaW0oKSArICc8L3RleHRhcmVhPjxkaXYgY2xhc3M9Im8tLXNsb2dhbi10ZXh0Ij48c3Ryb25nPuinhTwvc3Ryb25nPuWNs+efpeWQm+S4jeWPr+inge+8jOaMpeavq+eCueafk+a5luWxsTxzdHJvbmc+5b2xPC9zdHJvbmc+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iby0tdmlwLWxpc3QiPjxzcGFuIGNsYXNzPSJvLS12aXAtaXRlbSBvLS12aXAtc25pZmYiPicgKyBJY29uLnZpcCArICc8aSBjbGFzcz0iby0tYnViYmxlIG8tLWIxIj48L2k+PGkgY2xhc3M9Im8tLWJ1YmJsZSBvLS1iMiI+PC9pPjxpIGNsYXNzPSJvLS1idWJibGUgby0tYjMiPjwvaT48L3NwYW4+JyArIHZpcFVybHMubWFwKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSAiby0tdmlwLWl0ZW0iOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBuLnVybC5zdGFydHNXaXRoKCJodHRwcyIpICYmIChlICs9ICIgaXMtcGxheS1pbi1wYWdlIiksIG4uaXNSYW5kb20gJiYgKGUgKz0gIiBpcy1yYW5kb20iKSwKICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9IicgKyBlICsgJyIgX2hyZWY9IicgKyBuLnVybCArICciPicgKyBuLm5hbWUgKyAiPC9zcGFuPiI7CiAgICAgICAgICAgICAgICAgIH0pKS5qb2luKCJcbiIpICsgKGEgPyAnPHNwYW4gY2xhc3M9Im8tLXZpcC1pdGVtIG8tLW5vcm1hbCBvLS1jb2xsYXBzZSI+4p6iPC9zcGFuPicgOiAiIikgKyAiPC9kaXY+IiArIChpc01vYmlsZSA/ICc8ZGl2IGNsYXNzPSJvLS10aXAgby0taGlkZSI+5aSa5pWw6Kej5p6Q5Lya5Zyo56e75Yqo56uv5pi+56S6PHN0cm9uZz7lm77niYflub/lkYo8L3N0cm9uZz7vvIzpnIDmiYvliqjmi6bmiKrjgII8YnI+6YWN5ZCI5rWP6KeI5Zmo55qEPHN0cm9uZz7ll4XmjqLlip/og708L3N0cm9uZz7kvb/nlKjvvIzkvZPpqozmm7TkvbPjgII8L2Rpdj4nIDogIiIpICsgIjwvZGl2PiIpLAogICAgICAgICAgICAgICAgICBhICYmIHNtYXJ0Q29sbGFwc2UoIi5vLS12aXAtaXRlbSIpOwogICAgICAgICAgICAgICAgICBsZXQgcyA9IDAsIGwgPSBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgZSgpLCAxMDAgPCBzKysgJiYgY2xlYXJJbnRlcnZhbChsKTsKICAgICAgICAgICAgICAgICAgfSksIF9NYXRobWluKDIwMCArIDUwICogcywgMWUzKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb25zdCBWaXBVcmxzID0gImh0dHBzOi8vejEubTE5MDcuY24vP2p4PVxu5YyX5p6BIGh0dHA6Ly9iZWlqaXhzLmNuLz91cmw9IiwgUGxheWVyU2VsZWN0b3IgPSAiI2lmcmFtYVdyYXBwZXIsICNtZ3R2LXBsYXllci13cmFwLCAjc29odXBsYXllciAueC1wbGF5ZXIsICN3UGxheWVyLCAjdmlkZW8tYm94LCAjcGxheWVyYm94LCAudGQtaDVfX3BsYXllciwgLnRkLXBsYXlib3gsIC5pcXAtcGxheWVyLCAuZy1wbGF5IC52aWRlby1hcmVhLCAjbW9kX3BsYXllciwgI3BsYXlCb3gsICNqLXBsYXllciwgI3ZpZGVvLCAubS12aWRlby1wbGF5ZXIsIC5zaXRlX3BsYXllciIsIERfVl9VID0gIndpLjgxMXVzZy5ucGQsb2p1Lmp3ZmppMzQub3BzLGpvYi4xMzh1cy5ucGTCt3dpLGp3ZmppLmhqN25hLm1kLHdpLnh6ejg4Lm5wZCx1LmN6ZDYubnBkwrdvanUsd2lscC5kZCxiYmJyaS5ucGTCt3dpLixqd2ZqaS5sMTkyLm5wZCx3aS51c2p6dnB6Lm5wZCx1LmZqaXBiYW5tLm5wZMK3anFobWpuwrdqcWhtam4uLHh4eC51cG5sZC55enfCt3dpwrdqb2IsbWQubWJndG1iYWlhLm1kwrd3aS4seHh4Lmp0cGJqY3cubnBkwrdvanUsd2kuaWxrcXYubnBkLHh4eC51a2V3bS5ucGQsd2kuYjk4Lmxtaix4eHgud2k5Zy5ucGTCt2p3ZmppLix6YmtvLjY4cGUubWQseHh4Lmp3ZmppdmhtYm8uZGTCt2p3ZmppLix4eHguaDE4MTkubWTCt2p3ZmppLHdpLmRzeGtmLm5wZMK3b2p1LGpvYi5qd2ZqaS5iayx4eHguOXYybnpia28ubWTCt2p3ZmppLixqb2Iud2l2aGp0Lm5wZCx4eHgubXZ6NjA2MC5ucGTCt3dpwrd6cy4sam9iLndpNjM4Lm5wZMK3b2p1LGYxNzcubnBkLHdpLmZnZGJrLmZuwrdkZCx3aS5oOTA3Lm5wZCxvanUudHBvbi5tZnHCt3UsbWNkLnZpaG1iei5vanXCt2wsd2kuMTkwMTExLm9wc8K3d2ksam9iLjEzNDI0Ny5vcHPCt29qdSx3aS4yMmFiLm9wc8K3b2p1LHdpLjk0bmwub3Bzwrd3aSxvNjE3Lm5wZCIsIFZfTiA9ICLmm77nu4/msqfmtbfpmr7kuLrmsLTvvIzlsbHlvaLkvp3ml6fmnpXlr5LmtYHjgILkurrnlJ/oi6Xlj6rlpoLliJ3op4HvvIzoh6rlnKjpo57oirHovbvkvLzmoqbjgILpn7bljY7kuI3kuLrlsJHlubTnlZnvvIzmoYPoirHkvp3ml6fnrJHmmKXpo47jgILlsbHpm6jmrLLmnaXpo47mu6HmpbzvvIzliKvmnInkurrpl7TooYzot6/pmr7jgILmu6HoiLnmuIXmoqbljovmmJ/msrPvvIzkuIDok5Hng5/pm6jku7vlubPnlJ/jgILkurrpl7TmnInlkbPmmK/muIXmrKLvvIzmraTlv4PlronlpITmmK/lkL7kuaHjgIIiLCBNQVhfU05JRkZfUExBWV9DT1VOVCA9IGlzTW9iaWxlID8gMTUgOiAxMjsKICAgICAgICAgICAgICAgIGxldCBpc0FsbG93SWZyYW1lU25pZmYgPSBHbG9iYWxTdG9yZS5nZXQoImlzQWxsb3dJZnJhbWVTbmlmZiIpIHx8ICExOwogICAgICAgICAgICAgICAgY29uc3QgaXNIaWtlciA9ICEhd2luZG93LmZ5X2JyaWRnZV9hcHAsIGlzTWl4aWEgPSAhIXdpbmRvdy5teF9icm93c2VyX29iaiwgaXNBbGxvd0hpa2VyU25pZmYgPSBpc0hpa2VyICYmICEhd2luZG93LmZ5X2JyaWRnZV9hcHAuZ2V0TmV0d29ya1JlY29yZHMsIGlzQWxsb3dNaXhpYVNuaWZmID0gaXNNaXhpYSAmJiAhIXdpbmRvdy5teF9icm93c2VyX29iai5nZXR3ZWJsb2c7CiAgICAgICAgICAgICAgICBsZXQgcGxheWVyLCBpc0FsbG93U25pZmYgPSBpc0FsbG93SGlrZXJTbmlmZiB8fCBpc0FsbG93TWl4aWFTbmlmZiB8fCBpc0FsbG93SWZyYW1lU25pZmYsIHNuaWZmVGltZXN0YW1wID0gRGF0ZS5ub3coKSwgaXNTbmlmZmluZyA9ICExLCBzbmlmZlRpY2sgPSAwLCBzbmlmZlVybHMgPSBbXSwgc25pZmZVcmxzS2V5ID0gW10sIGlzUGxheWluZ0luUGFnZSA9IEdsb2JhbFN0b3JlLmdldCgiaXNQbGF5aW5nSW5QYWdlIiwgIWlzTW9iaWxlKSwgaXNMb2FkUGxheWVyID0gITEsIHNuaWZmVGltZXMgPSB7fSwgc25pZmZTdGFydFRpbWUgPSBEYXRlLm5vdygpLCBRUiA9ICIiLCBxcmNvZGVDb2RlID0gIiIsIGJsb2JDb3VudCA9IDA7CiAgICAgICAgICAgICAgICBjb25zdCBibG9iTmFtZXMgPSAi4pGg4pGh4pGi4pGj4pGk4pGl4pGm4pGn4pGo4pGp4pGq4pGr4pGs4pGt4pGu4pGv4pGw4pGx4pGy4pGzIiwgaWZyYW1lcyA9IHt9OwogICAgICAgICAgICAgICAgbGV0IHByb2dyZXNzSW50ZXJ2YWwgPSBudWxsLCBpc0Vuc3VyZVBsYXlpbmdDaGVjayA9ICExOwogICAgICAgICAgICAgICAgRS5vbigicGxheXVybC5jaGFuZ2UiLCAoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICBuID8gcGxheVZpcEl0ZW0oJCgiLm8tLXZpcC1pdGVtLmlzLWFjdGl2ZSIpKSA6IChzbmlmZkRvbmUoKSwgJCgiLm8tLXZpcC1pdGVtIikucmVtb3ZlQ2xhc3MoImlzLWFjdGl2ZSIpKTsKICAgICAgICAgICAgICAgIH0pKSwgRS5vbigiZW5hYmxlLnNuaWZmIiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgbi5mcm9tID09PSBTbmlmZkNoZWNrVXJsICYmICQoIm9vLWlmcmFtZXMgPiBpZnJhbWUiKS5lYWNoKChmdW5jdGlvbihuLCBlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5zcmMgPT09IFNuaWZmQ2hlY2tVcmwgJiYgcmVtb3ZlSWZyYW1lKGUpOwogICAgICAgICAgICAgICAgICB9KSksIGlzQWxsb3dJZnJhbWVTbmlmZiB8fCAoaXNBbGxvd0lmcmFtZVNuaWZmID0gITAsIGlzQWxsb3dTbmlmZiA9ICEwLCBHbG9iYWxTdG9yZS5zZXQoImlzQWxsb3dJZnJhbWVTbmlmZiIsICEwKSwKICAgICAgICAgICAgICAgICAgJCgiLm8tLXZpcCIpLmFkZENsYXNzKCJpcy1hbGxvdy1zbmlmZiIpLCAkKCIuby0tdmlwLWl0ZW0uaXMtcmFuZG9tIikucmVtb3ZlKCksIHNtYXJ0Q29sbGFwc2UoIi5vLS12aXAtaXRlbSIpKTsKICAgICAgICAgICAgICAgIH0pKSwgRS5vbigic25pZmYuZmFpbCIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIGlmIChpc0FsbG93U25pZmYpIHsKICAgICAgICAgICAgICAgICAgICByZW1vdmVJZnJhbWUoZ2V0SWZyYW1lSWQobi5mcm9tKSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pKSwgRS5vbigicGxheS52aWRlbyIsIChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIHJlbW92ZUlmcmFtZShnZXRJZnJhbWVJZChuLmZyb20pKSwgc25pZmZTdWNjZXNzKG4udXJsLCBuLmZyb20pOwogICAgICAgICAgICAgICAgfSkpLCBFLm9uKCJzbmlmZi5ibG9iIiwgKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgcmVtb3ZlSWZyYW1lKGdldElmcmFtZUlkKG4uZnJvbSkpOwogICAgICAgICAgICAgICAgICBjb25zdCBlID0gbi5mcm9tLnJlcGxhY2UoLz1odHRwLisvLCAiPSIpOwogICAgICAgICAgICAgICAgICBsZXQgdCA9ICExOwogICAgICAgICAgICAgICAgICBpZiAoJCgiLm8tLXZpcC1pdGVtLmlzLXBsYXktaW4tcGFnZSIpLmVhY2goKGZ1bmN0aW9uKG4sIGkpIHsKICAgICAgICAgICAgICAgICAgICAkKGkpLmF0dHIoIl9ocmVmIikgPT09IGUgJiYgKHQgPSAhMCk7CiAgICAgICAgICAgICAgICAgIH0pKSwgIXQpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gYmxvYk5hbWVzW2Jsb2JDb3VudCsrXSB8fCAi6Kej5p6QIiArIGJsb2JDb3VudDsKICAgICAgICAgICAgICAgICAgICAkKCIuby0tdmlwLWl0ZW0uaXMtcGxheS1pbi1wYWdlOm5vdCguaXMtYmxvYikiKS5lcSgwKS5iZWZvcmUoJzxzcGFuIGNsYXNzPSJvLS12aXAtaXRlbSBpcy1wbGF5LWluLXBhZ2UgaXMtYmxvYiIgX2hyZWY9IicgKyBlICsgJyI+JyArIG4gKyAiPC9zcGFuPiIpLAogICAgICAgICAgICAgICAgICAgICQoIi5vLS12aXAtaXRlbTpub3QoLm8tLW5vcm1hbCkiKS5vZmYoImNsaWNrIikub24oImNsaWNrIiwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgcGxheVZpcEl0ZW0odGhpcyk7CiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyVG9OdW0gPSBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBuLmNoYXJDb2RlQXQoMCkgLSA5NzsKICAgICAgICAgICAgICAgIH0sIG51bVRvQ2hhciA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBTdHJpbmcuZnJvbUNoYXJDb2RlKSg5NyArIG4pOwogICAgICAgICAgICAgICAgfSwgTV9OdW1iZXIgPSBmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiArbiArICgxID09IG4gJSAyID8gLTEgOiAxKTsKICAgICAgICAgICAgICAgIH0sIE1fTGV0dGVyID0gZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICByZXR1cm4gbnVtVG9DaGFyKE1fTnVtYmVyKGNoYXJUb051bShuKSkpOwogICAgICAgICAgICAgICAgfSwgTV9DaGFyID0gZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICByZXR1cm4gL1thLXpdL2kudGVzdChuKSA/IE1fTGV0dGVyKG4pIDogL1xkLy50ZXN0KG4pID8gTV9OdW1iZXIobikgOiAiIjsKICAgICAgICAgICAgICAgIH0sIE1fU3RyaW5nID0gZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICByZXR1cm4gbi5zcGxpdCgiIikucmV2ZXJzZSgpLm1hcCgoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBNX0NoYXIobik7CiAgICAgICAgICAgICAgICAgIH0pKS5qb2luKCIiKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICBsZXQgVl9VID0gIndpLjgxMXVzZy5ucGQsb2p1Lmp3ZmppMzQub3BzLGpvYi4xMzh1cy5ucGTCt3dpLGp3ZmppLmhqN25hLm1kLHdpLnh6ejg4Lm5wZCx1LmN6ZDYubnBkwrdvanUsd2lscC5kZCxiYmJyaS5ucGTCt3dpLixqd2ZqaS5sMTkyLm5wZCx3aS51c2p6dnB6Lm5wZCx1LmZqaXBiYW5tLm5wZMK3anFobWpuwrdqcWhtam4uLHh4eC51cG5sZC55enfCt3dpwrdqb2IsbWQubWJndG1iYWlhLm1kwrd3aS4seHh4Lmp0cGJqY3cubnBkwrdvanUsd2kuaWxrcXYubnBkLHh4eC51a2V3bS5ucGQsd2kuYjk4Lmxtaix4eHgud2k5Zy5ucGTCt2p3ZmppLix6YmtvLjY4cGUubWQseHh4Lmp3ZmppdmhtYm8uZGTCt2p3ZmppLix4eHguaDE4MTkubWTCt2p3ZmppLHdpLmRzeGtmLm5wZMK3b2p1LGpvYi5qd2ZqaS5iayx4eHguOXYybnpia28ubWTCt2p3ZmppLixqb2Iud2l2aGp0Lm5wZCx4eHgubXZ6NjA2MC5ucGTCt3dpwrd6cy4sam9iLndpNjM4Lm5wZMK3b2p1LGYxNzcubnBkLHdpLmZnZGJrLmZuwrdkZCx3aS5oOTA3Lm5wZCxvanUudHBvbi5tZnHCt3UsbWNkLnZpaG1iei5vanXCt2wsd2kuMTkwMTExLm9wc8K3d2ksam9iLjEzNDI0Ny5vcHPCt29qdSx3aS4yMmFiLm9wc8K3b2p1LHdpLjk0bmwub3Bzwrd3aSxvNjE3Lm5wZCI7CiAgICAgICAgICAgICAgICBjb25zdCBOb01vYmlsZVZpcFVybFJlZ2V4ID0gL2p4XC53c2xtZlwuY29tLywgc3RvcmVWaXBVcmxzID0gKEdsb2JhbFN0b3JlLmdldCgiVmlwVXJscyIpIHx8ICIiKS50cmltKCksIGN1c3RvbVZpcFVybHMgPSBzdG9yZVZpcFVybHMgfHwgImh0dHBzOi8vejEubTE5MDcuY24vP2p4PVxu5YyX5p6BIGh0dHA6Ly9iZWlqaXhzLmNuLz91cmw9IiwgdmlwVXJscyA9IGVuc3VyZUFycmF5KGN1c3RvbVZpcFVybHMpLm1hcCgoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICBsZXQgZSA9IG4uc3BsaXQoL1xzKy8pOwogICAgICAgICAgICAgICAgICBpZiAobiA9IGUucG9wKCksICEvXmh0dHAuKz0vLnRlc3QobikpIHJldHVybiB7fTsKICAgICAgICAgICAgICAgICAgbGV0IHQgPSAwIDwgZS5sZW5ndGggPyBlLmpvaW4oIiAiKSA6IG4ubWF0Y2goL1wvXC8oLitcLik/KFteXC9dKylcLlx3K1wvLylbMl0ucmVwbGFjZSgvXihcdykvLCAoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBuLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB1cmw6IG4sCiAgICAgICAgICAgICAgICAgICAgbmFtZTogdAogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfSkpLmZpbHRlcigoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgICByZXR1cm4gbi51cmwgJiYgKCFpc01vYmlsZSB8fCAhTm9Nb2JpbGVWaXBVcmxSZWdleC50ZXN0KG4udXJsKSk7CiAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICBpZiAoVl9VID0gVl9VLnJlcGxhY2UoL8K3L2csICIvIikuc3BsaXQoIiwiKSwgIXN0b3JlVmlwVXJscyB8fCBzdG9yZVZpcFVybHMgPT09ICJodHRwczovL3oxLm0xOTA3LmNuLz9qeD1cbuWMl+aegSBodHRwOi8vYmVpaml4cy5jbi8/dXJsPSIudHJpbSgpKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG4gPSBWX04uc3BsaXQoL1vvvIzjgILvvJtdLykubWFwKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4udHJpbSgpOwogICAgICAgICAgICAgICAgICB9KSkuZmlsdGVyKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICAgICAgIH0pKSwgZSA9IG5bcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDFlMyAvIDYwICUgbi5sZW5ndGgpXS5zcGxpdCgiIik7CiAgICAgICAgICAgICAgICAgIFZfVS5zbGljZSgwLCA3KS5tYXAoKGZ1bmN0aW9uKG4sIHQpIHsKICAgICAgICAgICAgICAgICAgICB2aXBVcmxzLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgbmFtZTogZVt0XSwKICAgICAgICAgICAgICAgICAgICAgIHVybDogTV9WaXBVcmwobiksCiAgICAgICAgICAgICAgICAgICAgICBpc1JhbmRvbTogITAKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFpc0NoZWNrSWZyYW1lU25pZmYpIHsKICAgICAgICAgICAgICAgICAgJCgiaHRtbCIpLmFwcGVuZCgnPG9vLWlmcmFtZXMgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGZpeGVkOyBib3R0b206IDA7IHBvaW50ZXItZXZlbnRzOiBub25lOyI+PC9vby1pZnJhbWVzPicpOwogICAgICAgICAgICAgICAgICBjb25zdCBuID0gYWRkSWZyYW1lKFNuaWZmQ2hlY2tVcmwpOwogICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZW1vdmVJZnJhbWUobik7CiAgICAgICAgICAgICAgICAgIH0pLCA1ZTMpLCBpc0NoZWNrSWZyYW1lU25pZmYgPSAhMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnN0IHZpcHMgPSBBcnJheS5pc0FycmF5KHBsYXlBZGRvbi52aXApID8gcGxheUFkZG9uLnZpcCA6IFsgcGxheUFkZG9uLnZpcCBdOwogICAgICAgICAgICAgICAgdmlwcy5mb3JFYWNoKChmdW5jdGlvbihuKSB7CiAgICAgICAgICAgICAgICAgIGluc2VydFZpcFNvdXJjZSgobiA9IG4uc3BsaXQoL1xzKlx8XHMqLykpWzBdLCBuWzFdKTsKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcGxheUFkZG9uLnRpdGxlICYmICFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuby0tanVtcCIpICYmIChwbGF5QWRkb24udmlwICYmICQkKChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkKHBsYXlBZGRvbi50aXRsZSkuZXEoMCkudGV4dCgpOwogICAgICAgICAgICAgIH0pLCAoZnVuY3Rpb24obikgewogICAgICAgICAgICAgICAgcGxheUFkZG9uLmZpeFRpdGxlICYmIChuID0gcGxheUFkZG9uLmZpeFRpdGxlKG4pKSwgaW5zZXJ0U2VhcmNoQWRkb24obiwgIi5vLS12aXAtbGlzdCIsICJhZnRlciIpOwogICAgICAgICAgICAgIH0pKSwgcGxheUFkZG9uLmp1bXAgJiYgZ29KdW1wKHBsYXlBZGRvbi5qdW1wLCBwbGF5QWRkb24udGl0bGUpKSwgZXhlY0FkZG9uSnMocGxheUFkZG9uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBzZWFyY2hBZGRvbiA9IGFkZG9uLnNlYXJjaDsKICAgICAgICAgICAgaWYgKHNlYXJjaEFkZG9uICYmIElzKHNlYXJjaEFkZG9uLm1hdGNoKSkgewogICAgICAgICAgICAgIGlmIChzZWFyY2hBZGRvbi5qdW1wICYmIGdvSnVtcChzZWFyY2hBZGRvbi5qdW1wLCBzZWFyY2hBZGRvbi5rZXl3b3JkKSwgc2VhcmNoQWRkb24uanVtcFRvICYmICQkKHNlYXJjaEFkZG9uLmp1bXBUb1swXSwgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgJChzZWFyY2hBZGRvbi5qdW1wVG9bMF0pLmVhY2goKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICBsZXQgbiA9ICQodGhpcykuYXR0cigiaHJlZiIpOwogICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoImhyZWYiLCBuLnJlcGxhY2Uoc2VhcmNoQWRkb24uanVtcFRvWzFdLCBzZWFyY2hBZGRvbi5qdW1wVG9bMl0pKTsKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICB9KSksIHNlYXJjaEFkZG9uLnJlc3VsdCkgewogICAgICAgICAgICAgICAgY29uc3QgbiA9ICJzdHJpbmciID09IHR5cGVvZiBzZWFyY2hBZGRvbi5yZXN1bHQgPyB7CiAgICAgICAgICAgICAgICAgIHRpdGxlOiBzZWFyY2hBZGRvbi5yZXN1bHQsCiAgICAgICAgICAgICAgICAgIHVybDogc2VhcmNoQWRkb24ucmVzdWx0CiAgICAgICAgICAgICAgICB9IDogc2VhcmNoQWRkb24ucmVzdWx0OwogICAgICAgICAgICAgICAgaWYgKDEgPT09ICQobi50aXRsZSkubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSAkKG4udGl0bGUpLnRleHQoKTsKICAgICAgICAgICAgICAgICAgaWYgKCEv56ysLnsxLDN9W+Wto+mbhuivnemDqF0uKiQvLnRlc3QoZSkpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBlID0gJChuLnVybCkuZXEoMCkuYXR0cigiaHJlZiIpOwogICAgICAgICAgICAgICAgICAgIGUgJiYgKGxvY2F0aW9uLmhyZWYgPSBlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBleGVjQWRkb25KcyhzZWFyY2hBZGRvbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXhlY0FkZG9uSnMoYWRkb24pOwogICAgICAgICAgfSkpLCBpc0ZpcnN0UnVuQWRkb24gPSAhMTsKICAgICAgICB9IGVsc2UgaXNGaXJzdFJ1bkFkZG9uICYmICgkKCJodG1sIikucmVtb3ZlQ2xhc3MoIm8tLW1peWluZyBvLS1tIG8tLXBjIG8tLWRlYnVnIiksCiAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAkaHRtbC5yZW1vdmVBdHRyaWJ1dGUoUExVR0lOX0FUVFIpOwogICAgICAgIH0pLCAxZTMpKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB1cmxEZXRlY3RvcigpIHsKICAgICAgICBzZXRJbnRlcnZhbCgoZnVuY3Rpb24oKSB7CiAgICAgICAgICAhZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChIcmVmICE9PSB3aW5kb3cubG9jYXRpb24uaHJlZikgewogICAgICAgICAgICAgIGNvbnN0IG4gPSBIcmVmOwogICAgICAgICAgICAgIEhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZiwgRS5lbWl0KCJ1cmwuY2hhbmdlIiwgewogICAgICAgICAgICAgICAgbmV3VXJsOiBIcmVmLAogICAgICAgICAgICAgICAgb2xkVXJsOiBuCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0oKTsKICAgICAgICB9KSwgMjUwKTsKICAgICAgfQogICAgICBsZXQgaXNGaXJzdFJ1bkFkZG9uID0gITAsIGlzQ2hlY2tJZnJhbWVTbmlmZiA9ICExOwogICAgICB0cnkgewogICAgICAgIGFkZG9uR28oKTsKICAgICAgfSBjYXRjaCAobikge30KICAgICAgdXJsRGV0ZWN0b3IoKTsKICAgIH0KICB9Cn0oKTs=
Add Comment
Please, Sign In to add comment