\\n
\\u8FD4\\u56DE \\n
\\u7EDF\\u8BA1 \\n
\\n
\\n
\\u6210\\u5C31 \\n
\\n ");\n achievementPage.find(\'#specialthanks\').click(function () {\n return _this2.switch(\'index\');\n }); // Talent\n\n var talentPage = $("\\n
\\n
\\u5929\\u8D4B\\u62BD\\u5361
\\n
10\\u8FDE\\u62BD\\uFF01 \\n
\\n
\\u8BF7\\u9009\\u62E93\\u4E2A \\n
\\n ");\n\n var createTalent = function createTalent(_ref) {\n var grade = _ref.grade,\n name = _ref.name,\n description = _ref.description;\n return $("
").concat(name, "\\uFF08").concat(description, "\\uFF09 "));\n };\n\n talentPage.find(\'#random\').click(function () {\n talentPage.find(\'#random\').hide();\n var ul = talentPage.find(\'#talents\');\n\n app_classPrivateFieldGet(_this2, _life).talentRandom().forEach(function (talent) {\n var li = createTalent(talent);\n ul.append(li);\n li.click(function () {\n if (li.hasClass(\'selected\')) {\n li.removeClass(\'selected\');\n\n app_classPrivateFieldGet(_this2, _talentSelected).delete(talent);\n\n if (app_classPrivateFieldGet(_this2, _talentSelected).size < 3) {\n talentPage.find(\'#next\').text(\'请选择3个\');\n }\n } else {\n if (app_classPrivateFieldGet(_this2, _talentSelected).size == 3) {\n _this2.hint(\'只能选3个天赋\');\n\n return;\n }\n\n var exclusive = app_classPrivateFieldGet(_this2, _life).exclusive(Array.from(app_classPrivateFieldGet(_this2, _talentSelected)).map(function (_ref2) {\n var id = _ref2.id;\n return id;\n }), talent.id);\n\n if (exclusive != null) {\n var _iterator = app_createForOfIteratorHelper(app_classPrivateFieldGet(_this2, _talentSelected)),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = _step.value,\n name = _step$value.name,\n id = _step$value.id;\n\n if (id == exclusive) {\n _this2.hint("\\u4E0E\\u5DF2\\u9009\\u62E9\\u7684\\u5929\\u8D4B\\u3010".concat(name, "\\u3011\\u51B2\\u7A81"));\n\n return;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return;\n }\n\n li.addClass(\'selected\');\n\n app_classPrivateFieldGet(_this2, _talentSelected).add(talent);\n\n if (app_classPrivateFieldGet(_this2, _talentSelected).size == 3) {\n talentPage.find(\'#next\').text(\'开始新人生\');\n }\n }\n });\n });\n\n talentPage.find(\'#next\').show();\n });\n talentPage.find(\'#next\').click(function () {\n if (app_classPrivateFieldGet(_this2, _talentSelected).size != 3) {\n _this2.hint(\'请选择3个天赋\');\n\n return;\n }\n\n talentPage.find(\'#next\').hide();\n\n app_classPrivateFieldSet(_this2, _totalMax, 20 + app_classPrivateFieldGet(_this2, _life).getTalentAllocationAddition(Array.from(app_classPrivateFieldGet(_this2, _talentSelected)).map(function (_ref3) {\n var id = _ref3.id;\n return id;\n })));\n\n _this2.switch(\'property\');\n }); // Property\n // hint of extension tobermory.es6-string-html\n\n var propertyPage = $(\n /*html*/\n "\\n
\\n
\\n
\\u8C03\\u6574\\u521D\\u59CB\\u5C5E\\u6027
\\n
\\u53EF\\u7528\\u5C5E\\u6027\\u70B9\\uFF1A0
\\n
\\n
\\n
\\n
\\n \\u968F\\u673A\\u5206\\u914D \\n \\u5F00\\u59CB\\u65B0\\u4EBA\\u751F \\n
\\n
\\n ");\n\n propertyPage.mounted = function () {\n propertyPage.find(\'#talentSelectedView\').append("
\\u5DF2\\u9009\\u5929\\u8D4B " + Array.from(app_classPrivateFieldGet(_this2, _talentSelected)).map(function (_ref4) {\n var name = _ref4.name,\n description = _ref4.description;\n return "
".concat(name, "(").concat(description, ") ");\n }).join(\'\'));\n };\n\n var groups = {};\n\n var total = function total() {\n var t = 0;\n\n for (var type in groups) {\n t += groups[type].get();\n }\n\n return t;\n };\n\n var freshTotal = function freshTotal() {\n propertyPage.find(\'#total\').text("\\u53EF\\u7528\\u5C5E\\u6027\\u70B9\\uFF1A".concat(app_classPrivateFieldGet(_this2, _totalMax) - total()));\n };\n\n var getBtnGroups = function getBtnGroups(name, min, max) {\n var group = $("
".concat(name, " "));\n var btnSub = $("
");\n var inputBox = $("
");\n var btnAdd = $("
");\n group.append(btnSub);\n group.append(inputBox);\n group.append(btnAdd);\n\n var limit = function limit(v) {\n v = Number(v) || 0;\n v = Math.round(v);\n return v < min ? min : v > max ? max : v;\n };\n\n var get = function get() {\n return Number(inputBox.val());\n };\n\n var set = function set(v) {\n inputBox.val(limit(v));\n freshTotal();\n };\n\n btnAdd.click(function () {\n if (total() >= app_classPrivateFieldGet(_this2, _totalMax)) {\n _this2.hint(\'没有可分配的点数了\');\n\n return;\n }\n\n set(get() + 1);\n });\n btnSub.click(function () {\n return set(get() - 1);\n });\n inputBox.on(\'input\', function () {\n var t = total();\n var val = get();\n\n if (t > app_classPrivateFieldGet(_this2, _totalMax)) {\n val -= t - app_classPrivateFieldGet(_this2, _totalMax);\n }\n\n val = limit(val);\n\n if (val != inputBox.val()) {\n set(val);\n }\n\n freshTotal();\n });\n return {\n group: group,\n get: get,\n set: set\n };\n };\n\n groups.CHR = getBtnGroups("颜值", 0, 10); // 颜值 charm CHR\n\n groups.INT = getBtnGroups("智力", 0, 10); // 智力 intelligence INT\n\n groups.STR = getBtnGroups("体质", 0, 10); // 体质 strength STR\n\n groups.MNY = getBtnGroups("家境", 0, 10); // 家境 money MNY\n\n var ul = propertyPage.find(\'#propertyAllocation\');\n\n for (var type in groups) {\n ul.append(groups[type].group);\n }\n\n propertyPage.find(\'#random\').click(function () {\n var t = app_classPrivateFieldGet(_this2, _totalMax);\n\n var arr = [10, 10, 10, 10];\n\n while (t > 0) {\n var sub = Math.round(Math.random() * (Math.min(t, 10) - 1)) + 1;\n\n while (true) {\n var select = Math.floor(Math.random() * 4) % 4;\n if (arr[select] - sub < 0) continue;\n arr[select] -= sub;\n t -= sub;\n break;\n }\n }\n\n groups.CHR.set(10 - arr[0]);\n groups.INT.set(10 - arr[1]);\n groups.STR.set(10 - arr[2]);\n groups.MNY.set(10 - arr[3]);\n });\n propertyPage.find(\'#start\').click(function () {\n if (total() < app_classPrivateFieldGet(_this2, _totalMax)) {\n _this2.hint("\\u4F60\\u8FD8\\u6709".concat(app_classPrivateFieldGet(_this2, _totalMax) - total(), "\\u5C5E\\u6027\\u70B9\\u6CA1\\u6709\\u5206\\u914D\\u5B8C"));\n\n return;\n } else if (total() > app_classPrivateFieldGet(_this2, _totalMax)) {\n _this2.hint("\\u4F60\\u591A\\u4F7F\\u7528\\u4E86".concat(total() - app_classPrivateFieldGet(_this2, _totalMax), "\\u5C5E\\u6027\\u70B9"));\n\n return;\n }\n\n app_classPrivateFieldGet(_this2, _life).restart({\n CHR: groups.CHR.get(),\n INT: groups.INT.get(),\n STR: groups.STR.get(),\n MNY: groups.MNY.get(),\n SPR: 5,\n TLT: Array.from(app_classPrivateFieldGet(_this2, _talentSelected)).map(function (_ref5) {\n var id = _ref5.id;\n return id;\n })\n });\n\n _this2.switch(\'trajectory\');\n\n app_classPrivateFieldGet(_this2, _pages).trajectory.born(); // $(document).keydown(function(event){\n // if(event.which == 32 || event.which == 13){\n // $(\'#lifeTrajectory\').click();\n // }\n // })\n\n }); // Trajectory\n\n var trajectoryPage = $("\\n
\\n
\\n
\\n
\\n \\u4EBA\\u751F\\u603B\\u7ED3 \\n \\u4EBA\\u751F\\u56DE\\u653E \\n
\\n
\\n
\\n
\\n
\\n ");\n trajectoryPage.find(\'#lifeTrajectory\').click(function () {\n if (app_classPrivateFieldGet(_this2, _isEnd)) return;\n\n var trajectory = app_classPrivateFieldGet(_this2, _life).next();\n\n var age = trajectory.age,\n content = trajectory.content,\n isEnd = trajectory.isEnd;\n var li = $("
".concat(age, "\\u5C81\\uFF1A ").concat(content.map(function (_ref6) {\n var type = _ref6.type,\n description = _ref6.description,\n grade = _ref6.grade,\n name = _ref6.name,\n postEvent = _ref6.postEvent;\n\n switch (type) {\n case \'TLT\':\n return "\\u5929\\u8D4B\\u3010".concat(name, "\\u3011\\u53D1\\u52A8\\uFF1A").concat(description);\n\n case \'EVT\':\n return description + (postEvent ? " ".concat(postEvent) : \'\');\n }\n }).join(\' \'), " "));\n li.appendTo(\'#lifeTrajectory\');\n $("#lifeTrajectory").scrollTop($("#lifeTrajectory")[0].scrollHeight);\n\n if (isEnd) {\n $(document).unbind("keydown");\n\n app_classPrivateFieldSet(_this2, _isEnd, true);\n\n trajectoryPage.find(\'#summary\').show(); // trajectoryPage.find(\'#domToImage\').show();\n } else {\n // 如未死亡,更新数值\n // Update properties if not die yet\n var property = app_classPrivateFieldGet(_this2, _life).getLastRecord();\n\n $("#lifeProperty").html("\\n
\\u989C\\u503C ".concat(property.CHR, " \\n
\\u667A\\u529B ").concat(property.INT, " \\n
\\u4F53\\u8D28 ").concat(property.STR, " \\n
\\u5BB6\\u5883 ").concat(property.MNY, " \\n
\\u5FEB\\u4E50 ").concat(property.SPR, " \\n "));\n }\n }); // html2canvas\n\n trajectoryPage.find(\'#domToImage\').click(function () {\n $("#lifeTrajectory").addClass("deleteFixed");\n var ua = navigator.userAgent.toLowerCase();\n domtoimage.toJpeg(document.getElementById(\'lifeTrajectory\')).then(function (dataUrl) {\n var link = document.createElement(\'a\');\n link.download = \'我的人生回放.jpeg\';\n link.href = dataUrl;\n link.click();\n $("#lifeTrajectory").removeClass("deleteFixed"); // 微信内置浏览器,显示图片,需要用户单独保存\n\n if (ua.match(/MicroMessenger/i) == "micromessenger") {\n $(\'#endImage\').attr(\'src\', dataUrl);\n }\n });\n }).hide();\n trajectoryPage.find(\'#summary\').click(function () {\n _this2.switch(\'summary\');\n }); // Summary\n\n var summaryPage = $("\\n
\\n
\\u4EBA\\u751F\\u603B\\u7ED3
\\n
\\n \\u989C\\u503C\\uFF1A 9\\u7EA7 \\u7F8E\\u82E5\\u5929\\u4ED9 \\n \\u667A\\u529B\\uFF1A 4\\u7EA7 \\u667A\\u529B\\u4E00\\u822C \\n \\u4F53\\u8D28\\uFF1A 1\\u7EA7 \\u6781\\u5EA6\\u865A\\u5F31 \\n \\u5BB6\\u5883\\uFF1A 6\\u7EA7 \\u5C0F\\u5EB7\\u4E4B\\u5BB6 \\n \\u4EAB\\u5E74\\uFF1A 3\\u5C81 \\u65E9\\u592D \\n \\u5FEB\\u4E50\\uFF1A 3\\u7EA7 \\u4E0D\\u592A\\u5E78\\u798F\\u7684\\u4EBA\\u751F \\n \\n
\\u5929\\u8D4B\\uFF0C\\u4F60\\u53EF\\u4EE5\\u9009\\u4E00\\u4E2A\\uFF0C\\u4E0B\\u8F88\\u5B50\\u8FD8\\u80FD\\u62BD\\u5230
\\n
\\n \\u9ED1\\u5E55\\uFF08\\u9762\\u8BD5\\u4E00\\u5B9A\\u6210\\u529F\\uFF09 \\n \\n
\\u518D\\u6B21\\u91CD\\u5F00\\n
\\n ");\n summaryPage.find(\'#again\').click(function () {\n _this2.times++;\n\n app_classPrivateFieldGet(_this2, _life).talentExtend(app_classPrivateFieldGet(_this2, _selectedExtendTalent));\n\n app_classPrivateFieldSet(_this2, _selectedExtendTalent, null);\n\n app_classPrivateFieldGet(_this2, _talentSelected).clear();\n\n app_classPrivateFieldSet(_this2, _totalMax, 20);\n\n app_classPrivateFieldSet(_this2, _isEnd, false);\n\n _this2.switch(\'index\');\n });\n\n app_classPrivateFieldSet(this, _pages, {\n loading: {\n page: loadingPage,\n clear: function clear() {\n app_classPrivateFieldSet(_this2, _currentPage, \'loading\');\n }\n },\n index: {\n page: indexPage,\n btnAchievement: indexPage.find(\'#achievement\'),\n btnRestart: indexPage.find(\'#restart\'),\n hint: indexPage.find(\'.hint\'),\n pressEnter: function pressEnter() {\n app_classPrivateFieldGet(_this2, _pages).index.btnRestart.click();\n },\n clear: function clear() {\n app_classPrivateFieldSet(_this2, _currentPage, \'index\');\n\n indexPage.find(\'.hint\').hide();\n var times = _this2.times;\n var achievement = indexPage.find(\'#achievement\');\n var discord = indexPage.find(\'#discord\');\n var specialthanks = indexPage.find(\'#specialthanks\');\n\n if (times > 0) {\n achievement.show();\n discord.show();\n specialthanks.show();\n return;\n }\n\n achievement.hide();\n discord.hide();\n specialthanks.hide();\n }\n },\n specialthanks: {\n page: specialThanksPage,\n clear: function clear() {\n var groups = [specialThanksPage.find(\'#spthx > ul.g1\'), specialThanksPage.find(\'#spthx > ul.g2\')];\n groups.forEach(function (g) {\n return g.empty();\n });\n\n app_classPrivateFieldGet(_this2, _specialthanks).sort(function () {\n return 0.5 - Math.random();\n }).forEach(function (_ref7) {\n var group = _ref7.group,\n name = _ref7.name,\n comment = _ref7.comment,\n color = _ref7.color;\n return groups[--group].append("\\n
\\n ").concat(name, " \\n \\n \\n "));\n });\n }\n },\n achievement: {\n page: achievementPage,\n clear: function clear() {\n var total = achievementPage.find("ul#total");\n var achievements = achievementPage.find("ul#achievements");\n total.empty();\n achievements.empty();\n "
\\u91CD\\u5F00\\u6B21\\u6570 \\u7D2B\\u8272\\u51E0\\u7387\\u7FFB\\u500D";\n\n var _classPrivateFieldGet3 = app_classPrivateFieldGet(_this2, _life).getTotal(),\n times = _classPrivateFieldGet3.times,\n achievement = _classPrivateFieldGet3.achievement,\n talentRate = _classPrivateFieldGet3.talentRate,\n eventRate = _classPrivateFieldGet3.eventRate;\n\n total.append("\\n
\\u5DF2\\u91CD\\u5F00").concat(times, "\\u6B21 \\u62BD\\u5230\\u7D2B\\u8272\\u51E0\\u7387\\u4E0D\\u53D8\\n
\\u6210\\u5C31\\u8FBE\\u6210").concat(achievement, "\\u4E2A \\u62BD\\u5230\\u6A59\\u8272\\u51E0\\u7387\\u7FFB\\u500D\\n
\\u4E8B\\u4EF6\\u6536\\u96C6\\u7387 ").concat(Math.floor(talentRate * 100), "%\\n
\\u5929\\u8D4B\\u9009\\u62E9\\u7387 ").concat(Math.floor(eventRate * 100), "%\\n "));\n\n var achievementsData = app_classPrivateFieldGet(_this2, _life).getAchievements();\n\n achievementsData.forEach(function (_ref8) {\n var name = _ref8.name,\n description = _ref8.description,\n hide = _ref8.hide,\n grade = _ref8.grade,\n isAchieved = _ref8.isAchieved;\n if (hide && !isAchieved) name = description = \'???\';\n achievements.append("
").concat(name, " ").concat(description, ""));\n });\n }\n },\n talent: {\n page: talentPage,\n talentList: talentPage.find(\'#talents\'),\n btnRandom: talentPage.find(\'#random\'),\n btnNext: talentPage.find(\'#next\'),\n pressEnter: function pressEnter() {\n var talentList = app_classPrivateFieldGet(_this2, _pages).talent.talentList;\n\n var btnRandom = app_classPrivateFieldGet(_this2, _pages).talent.btnRandom;\n\n var btnNext = app_classPrivateFieldGet(_this2, _pages).talent.btnNext;\n\n if (talentList.children().length) {\n btnNext.click();\n } else {\n btnRandom.click();\n }\n },\n clear: function clear() {\n app_classPrivateFieldSet(_this2, _currentPage, \'talent\');\n\n talentPage.find(\'ul.selectlist\').empty();\n talentPage.find(\'#random\').show();\n\n app_classPrivateFieldSet(_this2, _totalMax, 20);\n }\n },\n property: {\n page: propertyPage,\n btnStart: propertyPage.find(\'#start\'),\n pressEnter: function pressEnter() {\n app_classPrivateFieldGet(_this2, _pages).property.btnStart.click();\n },\n clear: function clear() {\n app_classPrivateFieldSet(_this2, _currentPage, \'property\');\n\n freshTotal();\n propertyPage.find(\'#talentSelectedView\').empty();\n }\n },\n trajectory: {\n page: trajectoryPage,\n lifeTrajectory: trajectoryPage.find(\'#lifeTrajectory\'),\n pressEnter: function pressEnter() {\n app_classPrivateFieldGet(_this2, _pages).trajectory.lifeTrajectory.click();\n },\n clear: function clear() {\n app_classPrivateFieldSet(_this2, _currentPage, \'trajectory\');\n\n trajectoryPage.find(\'#lifeTrajectory\').empty();\n trajectoryPage.find(\'#summary\').hide();\n\n app_classPrivateFieldSet(_this2, _isEnd, false);\n },\n born: function born() {\n trajectoryPage.find(\'#lifeTrajectory\').trigger("click");\n }\n },\n summary: {\n page: summaryPage,\n clear: function clear() {\n app_classPrivateFieldSet(_this2, _currentPage, \'summary\');\n\n var judge = summaryPage.find(\'#judge\');\n var talents = summaryPage.find(\'#talents\');\n judge.empty();\n talents.empty();\n\n app_classPrivateFieldGet(_this2, _talentSelected).forEach(function (talent) {\n var li = createTalent(talent);\n talents.append(li);\n li.click(function () {\n if (li.hasClass(\'selected\')) {\n app_classPrivateFieldSet(_this2, _selectedExtendTalent, null);\n\n li.removeClass(\'selected\');\n } else if (app_classPrivateFieldGet(_this2, _selectedExtendTalent) != null) {\n _this2.hint(\'只能继承一个天赋\');\n\n return;\n } else {\n app_classPrivateFieldSet(_this2, _selectedExtendTalent, talent.id);\n\n li.addClass(\'selected\');\n }\n });\n });\n\n var summaryData = app_classPrivateFieldGet(_this2, _life).getSummary();\n\n var format = function format(discription, type) {\n var value = summaryData[type];\n\n var _summary = summary(type, value),\n judge = _summary.judge,\n grade = _summary.grade;\n\n return "
").concat(discription, "\\uFF1A ").concat(value, " ").concat(judge, " ");\n };\n\n judge.append("\\n ".concat(format(\'颜值\', \'CHR\'), "\\n ").concat(format(\'智力\', \'INT\'), "\\n ").concat(format(\'体质\', \'STR\'), "\\n ").concat(format(\'家境\', \'MNY\'), "\\n ").concat(format(\'快乐\', \'SPR\'), "\\n ").concat(format(\'享年\', \'AGE\'), "\\n ").concat(format(\'总评\', \'SUM\'), "\\n "));\n }\n }\n });\n\n $$on(\'achievement\', function (_ref9) {\n var name = _ref9.name;\n\n _this2.hint("\\u89E3\\u9501\\u6210\\u5C31\\u3010".concat(name, "\\u3011"), \'success\');\n });\n }\n }, {\n key: "switch",\n value: function _switch(page) {\n var p = app_classPrivateFieldGet(this, _pages)[page];\n\n if (!p) return;\n $(\'#main\').detach();\n p.clear();\n p.page.appendTo(\'body\');\n\n if (typeof p.page.mounted === \'function\') {\n p.page.mounted();\n }\n }\n }, {\n key: "hint",\n value: function hint(message) {\n var _this3 = this;\n\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \'info\';\n\n if (app_classPrivateFieldGet(this, _hintTimeout)) {\n clearTimeout(app_classPrivateFieldGet(this, _hintTimeout));\n\n app_classPrivateFieldSet(this, _hintTimeout, null);\n }\n\n hideBanners();\n requestAnimationFrame(function () {\n var banner = $(".banner.".concat(type));\n banner.addClass(\'visible\');\n banner.find(\'.banner-message\').text(message);\n\n if (type != \'error\') {\n app_classPrivateFieldSet(_this3, _hintTimeout, setTimeout(hideBanners, 3000));\n }\n });\n }\n }, {\n key: "setTheme",\n value: function setTheme(theme) {\n var themeLink = $(document).find(\'#themeLink\');\n\n if (theme == \'light\') {\n themeLink.attr(\'href\', \'light.css\');\n } else {\n themeLink.attr(\'href\', \'dark.css\');\n }\n }\n }, {\n key: "times",\n get: function get() {\n var _classPrivateFieldGet4;\n\n return ((_classPrivateFieldGet4 = app_classPrivateFieldGet(this, _life)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.times) || 0;\n },\n set: function set(v) {\n if (app_classPrivateFieldGet(this, _life)) app_classPrivateFieldGet(this, _life).times = v;\n }\n }]);\n\n return App;\n}();\n\n/* harmony default export */ const app = (App);\n;// CONCATENATED MODULE: ./src/index.js\n\n\nfunction src_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction src_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { src_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { src_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }\n\n\n\n\n\n\n\n\n\n\n\nglobalThis.$$eventMap = new Map();\n\nglobalThis.$$event = function (tag, data) {\n var listener = $$eventMap.get(tag);\n if (listener) listener.forEach(function (fn) {\n return fn(data);\n });\n};\n\nglobalThis.$$on = function (tag, fn) {\n var listener = $$eventMap.get(tag);\n\n if (!listener) {\n listener = new Set();\n $$eventMap.set(tag, listener);\n }\n\n listener.add(fn);\n};\n\nglobalThis.$$off = function (tag, fn) {\n var listener = $$eventMap.get(tag);\n if (listener) listener.delete(fn);\n};\n\nglobalThis.json = /*#__PURE__*/function () {\n var _ref = src_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(fileName) {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return fetch("../data/".concat(fileName, ".json"));\n\n case 2:\n _context.next = 4;\n return _context.sent.json();\n\n case 4:\n return _context.abrupt("return", _context.sent);\n\n case 5:\n case "end":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n}(); // Pssst, I\'ve created a github package - https://github.com/brookesb91/dismissible\n\n\nglobalThis.hideBanners = function (e) {\n document.querySelectorAll(".banner.visible").forEach(function (b) {\n return b.classList.remove("visible");\n });\n};\n\nvar src_app = new app();\nsrc_app.initial();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc4NS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUE1RUE7O0FBZ0ZBO0FBQ0E7O0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTs7OztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFIQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFBQTtBQWpCQTtBQW1CQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTs7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQ0E7QUFBQTtBQU5BO0FBUUE7O0FBRUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFDQTs7QUFFQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBREE7QUFBQTtBQUFBOztBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7O0FBRUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNUJBOzs7Ozs7QUFFQTtBQUNBO0FBQUE7O0FBQUE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7O0FBdkNBOztBQUZBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7QUFnREE7QUFBQTs7QUFFQTs7QUFDQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTs7QUFDQTs7QUE0QkE7QUFDQTtBQURBO0FBRUE7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUFBO0FBckRBO0FBdURBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBOztBQUNBO0FBQ0E7QUFBQTs7QUFDQTtBQUNBO0FBQUE7O0FBQ0E7QUFDQTtBQUFBOztBQUNBO0FBQ0E7QUFBQTs7QUFDQTtBQUNBO0FBQUE7O0FBQ0E7QUFBQTs7QUFDQTtBQUFBOztBQUNBO0FBQUE7O0FBQ0E7QUFBQTtBQWhCQTtBQWtCQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQUE7QUFuQkE7QUFxQkE7OztBQUVBO0FBQUE7O0FBQ0E7QUFRQTs7O0FBRUE7QUFDQTtBQUFBO0FBQUE7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBR0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBSUE7O0FBQ0E7QUFBQTtBQTFCQTtBQTRCQTs7O0FBRUE7QUFDQTtBQUNBO0FBREE7QUFFQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBOztBQUNBO0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQVBBOztBQVNBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFJQTs7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFWQTs7QUFZQTtBQUNBO0FBVUE7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFJQTs7Ozs7O0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN1ZBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUFBO0FBdEJBO0FBd0JBOztBQUVBO0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFBQTtBQVJBO0FBVUE7O0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFBQTs7QUFDQTtBQUFBOztBQUNBO0FBQUE7O0FBQ0E7QUFBQTs7QUFDQTtBQUNBO0FBRUE7O0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFBQTtBQUFBOztBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUdBO0FBQ0E7O0FBQ0E7O0FBQ0E7QUFDQTtBQUFBO0FBQUE7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBR0E7QUFDQTs7QUFDQTs7QUFFQTtBQUFBO0FBNUJBO0FBOEJBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlIQTtBQUNBOzs7O0FBRUE7QUFDQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7QUFJQTtBQUFBOztBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFDQTs7O0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTs7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFGQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7Ozs7OztBQUlBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZEQTtBQUNBOzs7O0FBRUE7QUFDQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7QUFJQTtBQUFBOztBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTs7QUFDQTtBQUNBOzs7QUFFQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTs7QUFDQTs7QUFGQTtBQUFBOztBQUFBO0FBR0E7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFQQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQVFBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUtBO0FBQUE7QUFBQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7O0FBREE7QUFBQTs7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQURBO0FBRkE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFJQTtBQUNBOztBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7Ozs7OztBQUdBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuR0E7QUFDQTs7OztBQUVBO0FBQ0E7QUFBQTs7QUFBQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBOztBQUpBOztBQUhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7O0FBWUE7QUFBQTs7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7O0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBSEE7QUFIQTtBQVFBOzs7QUFFQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUFBOztBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTs7QUFBQTtBQUNBO0FBQUE7QUFBQTs7QUFDQTtBQURBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFHQTtBQUNBOzs7QUFFQTtBQUFBOztBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTtBQUNBOzs7OztBQVFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBOztBQU1BO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTs7QUFWQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7OztBQWFBO0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7QUFJQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7OztBQUVBO0FBQUE7O0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTs7QUFMQTtBQUFBOztBQUFBO0FBTUE7QUFBQTs7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTs7QUFDQTtBQUNBO0FBbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBb0JBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBOzs7QUFFQTtBQUFBOztBQUNBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBRUE7O0FBSEE7QUFBQTs7QUFBQTtBQUlBO0FBQUE7QUFBQTs7QUFDQTtBQURBO0FBSkE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFPQTs7QUFQQTtBQUFBOztBQUFBO0FBUUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFEQTtBQVJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBV0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7O0FBQ0E7QUFFQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7OztBQUVBO0FBQUE7O0FBQUE7QUFBQTtBQUNBO0FBQUE7O0FBQ0E7O0FBQ0E7QUFJQTs7Ozs7O0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlNQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQ0E7Ozs7O0FBWUE7QUFBQTs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUdBOztBQUlBOztBQUNBOztBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFuQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7QUFzQkE7QUFBQTs7QUFFQTtBQUNBOztBQVVBOztBQWVBO0FBRUE7QUFFQTtBQUFBO0FBRUE7QUFFQTtBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUFBO0FBRUE7QUFZQTtBQUVBO0FBQUE7QUFFQTtBQVVBO0FBRUE7QUFBQTs7QUFHQTs7QUFTQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7O0FBRUE7QUFHQTtBQUNBOztBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQUE7QUFBQTs7QUFHQTtBQUFBO0FBQUE7O0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBT0E7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBOztBQUNBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQ0E7QUFHQTs7QUFDQTtBQUFBO0FBQUE7O0FBY0E7QUFDQTtBQUlBO0FBQUE7QUFBQTtBQUFBO0FBR0E7O0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBREE7O0FBRUE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOztBQUNBO0FBQUE7QUFBQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTs7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFHQTs7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQU5BOztBQVFBOztBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7O0FBR0E7QUFjQTtBQUdBOztBQUNBOztBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFHQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7O0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQU9BO0FBQ0E7O0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7O0FBR0E7QUFtQkE7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUEzQkE7QUE2QkE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUFBO0FBQUE7O0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFoQkE7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQU9BOztBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBN0JBO0FBK0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBOztBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBcEJBO0FBc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUdBO0FBWkE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUNBO0FBQ0E7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQ0E7O0FBRUE7QUFTQTtBQXpDQTtBQXpJQTs7QUFzTEE7QUFBQTs7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7O0FBQUE7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7O0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTs7Ozs7O0FBSUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN3FCQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FBR0E7QUFDQTtBQUVBO0FBQUE7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbGlmZV9yZXN0YXJ0Ly4vc3JjL2Z1bmN0aW9ucy9zdW1tYXJ5LmpzPzRkYWUiLCJ3ZWJwYWNrOi8vbGlmZV9yZXN0YXJ0Ly4vc3JjL2Z1bmN0aW9ucy9hZGRpdGlvbi5qcz84MDNkIiwid2VicGFjazovL2xpZmVfcmVzdGFydC8uL3NyYy9mdW5jdGlvbnMvdXRpbC5qcz9hZWRjIiwid2VicGFjazovL2xpZmVfcmVzdGFydC8uL3NyYy9wcm9wZXJ0eS5qcz8yOWE2Iiwid2VicGFjazovL2xpZmVfcmVzdGFydC8uL3NyYy9mdW5jdGlvbnMvY29uZGl0aW9uLmpzPzZkMDgiLCJ3ZWJwYWNrOi8vbGlmZV9yZXN0YXJ0Ly4vc3JjL2V2ZW50LmpzPzQwMmEiLCJ3ZWJwYWNrOi8vbGlmZV9yZXN0YXJ0Ly4vc3JjL3RhbGVudC5qcz9jNTZmIiwid2VicGFjazovL2xpZmVfcmVzdGFydC8uL3NyYy9hY2hpZXZlbWVudC5qcz9lNDIyIiwid2VicGFjazovL2xpZmVfcmVzdGFydC8uL3NyYy9saWZlLmpzPzkxMDciLCJ3ZWJwYWNrOi8vbGlmZV9yZXN0YXJ0Ly4vc3JjL2FwcC5qcz8xMTEyIiwid2VicGFjazovL2xpZmVfcmVzdGFydC8uL3NyYy9pbmRleC5qcz9iNjM1Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGRhdGEgPSB7XG4gICAgXCJDSFJcIjogW1xuICAgICAgICB7XCJqdWRnZVwiOiBcIuWcsOeLsVwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjoxLCBcImp1ZGdlXCI6IFwi5oqY56OoXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjIsIFwianVkZ2VcIjogXCLkuI3kvbNcIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6NCwgXCJqdWRnZVwiOiBcIuaZrumAmlwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjo3LCBcImp1ZGdlXCI6IFwi5LyY56eAXCIsIFwiZ3JhZGVcIjogMX0sXG4gICAgICAgIHtcIm1pblwiOjksIFwianVkZ2VcIjogXCLnvZXop4FcIiwgXCJncmFkZVwiOiAyfSxcbiAgICAgICAge1wibWluXCI6MTEsIFwianVkZ2VcIjogXCLpgIblpKlcIiwgXCJncmFkZVwiOiAzfSxcbiAgICBdLFxuICAgIFwiTU5ZXCI6IFtcbiAgICAgICAge1wianVkZ2VcIjogXCLlnLDni7FcIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6MSwgXCJqdWRnZVwiOiBcIuaKmOejqFwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjoyLCBcImp1ZGdlXCI6IFwi5LiN5L2zXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjQsIFwianVkZ2VcIjogXCLmma7pgJpcIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6NywgXCJqdWRnZVwiOiBcIuS8mOengFwiLCBcImdyYWRlXCI6IDF9LFxuICAgICAgICB7XCJtaW5cIjo5LCBcImp1ZGdlXCI6IFwi572V6KeBXCIsIFwiZ3JhZGVcIjogMn0sXG4gICAgICAgIHtcIm1pblwiOjExLCBcImp1ZGdlXCI6IFwi6YCG5aSpXCIsIFwiZ3JhZGVcIjogM30sXG4gICAgXSxcbiAgICBcIlNQUlwiOiBbXG4gICAgICAgIHtcImp1ZGdlXCI6IFwi5Zyw54uxXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjEsIFwianVkZ2VcIjogXCLmipjno6hcIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6MiwgXCJqdWRnZVwiOiBcIuS4jeW5uFwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjo0LCBcImp1ZGdlXCI6IFwi5pmu6YCaXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjcsIFwianVkZ2VcIjogXCLlubjnpo9cIiwgXCJncmFkZVwiOiAxfSxcbiAgICAgICAge1wibWluXCI6OSwgXCJqdWRnZVwiOiBcIuaegeS5kFwiLCBcImdyYWRlXCI6IDJ9LFxuICAgICAgICB7XCJtaW5cIjoxMSwgXCJqdWRnZVwiOiBcIuWkqeWRvVwiLCBcImdyYWRlXCI6IDN9LFxuICAgIF0sXG4gICAgXCJJTlRcIjogW1xuICAgICAgICB7XCJqdWRnZVwiOiBcIuWcsOeLsVwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjoxLCBcImp1ZGdlXCI6IFwi5oqY56OoXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjIsIFwianVkZ2VcIjogXCLkuI3kvbNcIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6NCwgXCJqdWRnZVwiOiBcIuaZrumAmlwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjo3LCBcImp1ZGdlXCI6IFwi5LyY56eAXCIsIFwiZ3JhZGVcIjogMX0sXG4gICAgICAgIHtcIm1pblwiOjksIFwianVkZ2VcIjogXCLnvZXop4FcIiwgXCJncmFkZVwiOiAyfSxcbiAgICAgICAge1wibWluXCI6MTEsIFwianVkZ2VcIjogXCLpgIblpKlcIiwgXCJncmFkZVwiOiAzfSxcbiAgICAgICAge1wibWluXCI6MjEsIFwianVkZ2VcIjogXCLor4bmtbdcIiwgXCJncmFkZVwiOiAzfSxcbiAgICAgICAge1wibWluXCI6MTMxLCBcImp1ZGdlXCI6IFwi5YWD56WeXCIsIFwiZ3JhZGVcIjogM30sXG4gICAgICAgIHtcIm1pblwiOjUwMSwgXCJqdWRnZVwiOiBcIuS7memtglwiLCBcImdyYWRlXCI6IDN9LFxuICAgIF0sXG4gICAgXCJTVFJcIjogW1xuICAgICAgICB7XCJqdWRnZVwiOiBcIuWcsOeLsVwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjoxLCBcImp1ZGdlXCI6IFwi5oqY56OoXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjIsIFwianVkZ2VcIjogXCLkuI3kvbNcIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6NCwgXCJqdWRnZVwiOiBcIuaZrumAmlwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjo3LCBcImp1ZGdlXCI6IFwi5LyY56eAXCIsIFwiZ3JhZGVcIjogMX0sXG4gICAgICAgIHtcIm1pblwiOjksIFwianVkZ2VcIjogXCLnvZXop4FcIiwgXCJncmFkZVwiOiAyfSxcbiAgICAgICAge1wibWluXCI6MTEsIFwianVkZ2VcIjogXCLpgIblpKlcIiwgXCJncmFkZVwiOiAzfSxcbiAgICAgICAge1wibWluXCI6MjEsIFwianVkZ2VcIjogXCLlh53msJRcIiwgXCJncmFkZVwiOiAzfSxcbiAgICAgICAge1wibWluXCI6MTAxLCBcImp1ZGdlXCI6IFwi562R5Z+6XCIsIFwiZ3JhZGVcIjogM30sXG4gICAgICAgIHtcIm1pblwiOjQwMSwgXCJqdWRnZVwiOiBcIumHkeS4uVwiLCBcImdyYWRlXCI6IDN9LFxuICAgICAgICB7XCJtaW5cIjoxMDAxLCBcImp1ZGdlXCI6IFwi5YWD5am0XCIsIFwiZ3JhZGVcIjogM30sXG4gICAgICAgIHtcIm1pblwiOjIwMDEsIFwianVkZ2VcIjogXCLku5nkvZNcIiwgXCJncmFkZVwiOiAzfSxcbiAgICBdLFxuICAgIFwiQUdFXCI6IFtcbiAgICAgICAge1wianVkZ2VcIjogXCLog47mrbvohbnkuK1cIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6MSwgXCJqdWRnZVwiOiBcIuaXqeWkrVwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjoxMCwgXCJqdWRnZVwiOiBcIuWwkeW5tFwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjoxOCwgXCJqdWRnZVwiOiBcIuebm+W5tFwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjo0MCwgXCJqdWRnZVwiOiBcIuS4reW5tFwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjo2MCwgXCJqdWRnZVwiOiBcIuiKseeUslwiLCBcImdyYWRlXCI6IDF9LFxuICAgICAgICB7XCJtaW5cIjo3MCwgXCJqdWRnZVwiOiBcIuWPpOeogFwiLCBcImdyYWRlXCI6IDF9LFxuICAgICAgICB7XCJtaW5cIjo4MCwgXCJqdWRnZVwiOiBcIuadluacnVwiLCBcImdyYWRlXCI6IDJ9LFxuICAgICAgICB7XCJtaW5cIjo5MCwgXCJqdWRnZVwiOiBcIuWNl+WxsVwiLCBcImdyYWRlXCI6IDJ9LFxuICAgICAgICB7XCJtaW5cIjo5NSwgXCJqdWRnZVwiOiBcIuS4jeiAgVwiLCBcImdyYWRlXCI6IDN9LFxuICAgICAgICB7XCJtaW5cIjoxMDAsIFwianVkZ2VcIjogXCLkv67ku5lcIiwgXCJncmFkZVwiOiAzfSxcbiAgICAgICAge1wibWluXCI6NTAwLCBcImp1ZGdlXCI6IFwi5LuZ5a+/XCIsIFwiZ3JhZGVcIjogM30sXG4gICAgXSxcbiAgICBcIlNVTVwiOiBbXG4gICAgICAgIHtcImp1ZGdlXCI6IFwi5Zyw54uxXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjQxLCBcImp1ZGdlXCI6IFwi5oqY56OoXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjUwLCBcImp1ZGdlXCI6IFwi5LiN5L2zXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjYwLCBcImp1ZGdlXCI6IFwi5pmu6YCaXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjgwLCBcImp1ZGdlXCI6IFwi5LyY56eAXCIsIFwiZ3JhZGVcIjogMX0sXG4gICAgICAgIHtcIm1pblwiOjEwMCwgXCJqdWRnZVwiOiBcIue9leingVwiLCBcImdyYWRlXCI6IDJ9LFxuICAgICAgICB7XCJtaW5cIjoxMTAsIFwianVkZ2VcIjogXCLpgIblpKlcIiwgXCJncmFkZVwiOiAzfSxcbiAgICAgICAge1wibWluXCI6MTIwLCBcImp1ZGdlXCI6IFwi5Lyg6K+0XCIsIFwiZ3JhZGVcIjogM30sXG4gICAgXVxufVxuXG5mdW5jdGlvbiBzdW1tYXJ5KHR5cGUsIHZhbHVlKSB7XG4gICAgbGV0IGxlbmd0aCA9IGRhdGFbdHlwZV0ubGVuZ3RoO1xuICAgIHdoaWxlKGxlbmd0aC0tKSB7XG4gICAgICAgIGNvbnN0IHttaW4sIGp1ZGdlLCBncmFkZX0gPSBkYXRhW3R5cGVdW2xlbmd0aF07XG4gICAgICAgIGlmKG1pbj09dm9pZCAwIHx8IHZhbHVlID49IG1pbikgcmV0dXJuIHtqdWRnZSwgZ3JhZGV9O1xuICAgIH1cbn1cblxuZXhwb3J0IHsgc3VtbWFyeSB9OyIsImV4cG9ydCBmdW5jdGlvbiBnZXRSYXRlKHR5cGUsIHZhbHVlKSB7XHJcbiAgICBzd2l0Y2godHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ3RpbWVzJzpcclxuICAgICAgICBjYXNlICdhY2hpZXZlbWVudCc6XHJcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuIDA7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRHcmFkZSh0eXBlLCB2YWx1ZSkge1xyXG4gICAgc3dpdGNoKHR5cGUpIHtcclxuICAgICAgICBjYXNlICd0aW1lcyc6XHJcbiAgICAgICAgY2FzZSAnYWNoaWV2ZW1lbnQnOlxyXG4gICAgICAgICAgICBpZih2YWx1ZSA+PSAxMDApIHJldHVybiAzO1xyXG4gICAgICAgICAgICBpZih2YWx1ZSA+PSA1MCkgcmV0dXJuIDI7XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID49IDEwKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgY2FzZSAndGFsZW50UmF0ZSc6XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID49IDAuOSkgcmV0dXJuIDM7XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID49IDAuNSkgcmV0dXJuIDI7XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID49IDAuMSkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIGNhc2UgJ2V2ZW50UmF0ZSc6XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID49IDAuNSkgcmV0dXJuIDM7XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID49IDAuMykgcmV0dXJuIDI7XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID49IDAuMSkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiAwO1xyXG4gICAgfVxyXG59IiwiZnVuY3Rpb24gY2xvbmUodmFsdWUpIHtcbiAgICBzd2l0Y2godHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLm1hcCh2PT5jbG9uZSh2KSk7XG4gICAgICAgICAgICBjb25zdCBuZXdPYmogPSB7fTtcbiAgICAgICAgICAgIGZvcihjb25zdCBrZXkgaW4gdmFsdWUpIG5ld09ialtrZXldID0gY2xvbmUodmFsdWVba2V5XSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgICBkZWZhdWx0OiByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBtYXgoLi4uYXJyKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLmFyci5mbGF0KCkpO1xufVxuXG5mdW5jdGlvbiBtaW4oLi4uYXJyKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKC4uLmFyci5mbGF0KCkpO1xufVxuXG5mdW5jdGlvbiBzdW0oLi4uYXJyKSB7XG4gICAgbGV0IHMgPSAwO1xuICAgIGFyci5mbGF0KCkuZm9yRWFjaCh2PT5zKz12KTtcbiAgICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gYXZlcmFnZSguLi5hcnIpIHtcbiAgICBjb25zdCBzID0gc3VtKC4uLmFycik7XG4gICAgcmV0dXJuIHMgLyBhcnIuZmxhdCgpLmxlbmd0aDtcbn1cblxuZXhwb3J0IHsgY2xvbmUsIG1heCwgbWluLCBzdW0sIGF2ZXJhZ2UgfTsiLCJpbXBvcnQgeyBtYXgsIG1pbiwgc3VtLCBjbG9uZSB9IGZyb20gJy4vZnVuY3Rpb25zL3V0aWwuanMnO1xyXG5cclxuY2xhc3MgUHJvcGVydHkge1xyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAgIFRZUEVTID0ge1xyXG4gICAgICAgIC8vIOacrOWxgFxyXG4gICAgICAgIEFHRTogXCJBR0VcIiwgLy8g5bm06b6EIGFnZSBBR0VcclxuICAgICAgICBDSFI6IFwiQ0hSXCIsIC8vIOminOWAvCBjaGFybSBDSFJcclxuICAgICAgICBJTlQ6IFwiSU5UXCIsIC8vIOaZuuWKmyBpbnRlbGxpZ2VuY2UgSU5UXHJcbiAgICAgICAgU1RSOiBcIlNUUlwiLCAvLyDkvZPotKggc3RyZW5ndGggU1RSXHJcbiAgICAgICAgTU5ZOiBcIk1OWVwiLCAvLyDlrrblooMgbW9uZXkgTU5ZXHJcbiAgICAgICAgU1BSOiBcIlNQUlwiLCAvLyDlv6vkuZAgc3Bpcml0IFNQUlxyXG4gICAgICAgIExJRjogXCJMSUZcIiwgLy8g55Sf5ZG9IGxpZmUgTElGRVxyXG4gICAgICAgIFRMVDogXCJUTFRcIiwgLy8g5aSp6LWLIHRhbGVudCBUTFRcclxuICAgICAgICBFVlQ6IFwiRVZUXCIsIC8vIOS6i+S7tiBldmVudCBFVlRcclxuICAgICAgICBUTVM6IFwiVE1TXCIsIC8vIOasoeaVsCB0aW1lcyBUTVNcclxuXHJcbiAgICAgICAgLy8gQXV0byBjYWxjXHJcbiAgICAgICAgTEFHRTogXCJMQUdFXCIsIC8vIOacgOS9juW5tOm+hCBMb3cgQWdlXHJcbiAgICAgICAgSEFHRTogXCJIQUdFXCIsIC8vIOacgOmrmOW5tOm+hCBIaWdoIEFnZVxyXG4gICAgICAgIExDSFI6IFwiTENIUlwiLCAvLyDmnIDkvY7popzlgLwgTG93IENoYXJtXHJcbiAgICAgICAgSENIUjogXCJIQ0hSXCIsIC8vIOacgOmrmOminOWAvCBIaWdoIENoYXJtXHJcbiAgICAgICAgTElOVDogXCJMSU5UXCIsIC8vIOacgOS9juaZuuWKmyBMb3cgSW50ZWxsaWdlbmNlXHJcbiAgICAgICAgSElOVDogXCJISU5UXCIsIC8vIOacgOmrmOaZuuWKmyBIaWdoIEludGVsbGlnZW5jZVxyXG4gICAgICAgIExTVFI6IFwiTFNUUlwiLCAvLyDmnIDkvY7kvZPotKggTG93IFN0cmVuZ3RoXHJcbiAgICAgICAgSFNUUjogXCJIU1RSXCIsIC8vIOacgOmrmOS9k+i0qCBIaWdoIFN0cmVuZ3RoXHJcbiAgICAgICAgTE1OWTogXCJMTU5ZXCIsIC8vIOacgOS9juWutuWigyBMb3cgTW9uZXlcclxuICAgICAgICBITU5ZOiBcIkhNTllcIiwgLy8g5pyA6auY5a625aKDIEhpZ2ggTW9uZXlcclxuICAgICAgICBMU1BSOiBcIkxTUFJcIiwgLy8g5pyA5L2O5b+r5LmQIExvdyBTcGlyaXRcclxuICAgICAgICBIU1BSOiBcIkhTUFJcIiwgLy8g5pyA6auY5b+r5LmQIEhpZ2ggU3Bpcml0XHJcblxyXG4gICAgICAgIFNVTTogXCJTVU1cIiwgLy8g5oC76K+EIHN1bW1hcnkgU1VNXHJcblxyXG4gICAgICAgIEVYVDogXCJFWFRcIiwgLy8g57un5om/5aSp6LWLXHJcblxyXG4gICAgICAgIC8vIOaAu+iuoVxyXG4gICAgICAgIC8vIEFjaGlldmVtZW50IFRvdGFsXHJcbiAgICAgICAgQVRMVDogXCJBVExUXCIsIC8vIOaLpeaciei/h+eahOWkqei1iyBBY2hpZXZlIFRhbGVudFxyXG4gICAgICAgIEFFVlQ6IFwiQUVWVFwiLCAvLyDop6blj5Hov4fnmoTkuovku7YgQWNoaWV2ZSBFdmVudFxyXG4gICAgICAgIEFDSFY6IFwiQUNIVlwiLCAvLyDovr7miJDnmoTmiJDlsLEgQWNoaWV2ZW1lbnRcclxuXHJcbiAgICAgICAgQ1RMVDogXCJSVExUXCIsIC8vIOWkqei1i+mAieaLqeaVsCBDb3VudCBUYWxlbnRcclxuICAgICAgICBDRVZUOiBcIlJFVlRcIiwgLy8g5LqL5Lu25pS26ZuG5pWwIENvdW50IEV2ZW50XHJcbiAgICAgICAgQ0FDSFY6IFwiQ0FDSFZcIiwgLy8g5oiQ5bCx6L6+5oiQ5pWwIENvdW50IEFjaGlldmVtZW50XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICAjYWdlRGF0YTtcclxuICAgICNkYXRhID0ge307XHJcblxyXG4gICAgaW5pdGlhbCh7YWdlfSkge1xyXG5cclxuICAgICAgICB0aGlzLiNhZ2VEYXRhID0gYWdlO1xyXG4gICAgICAgIGZvcihjb25zdCBhIGluIGFnZSkge1xyXG4gICAgICAgICAgICBsZXQgeyBldmVudCwgdGFsZW50IH0gPSBhZ2VbYV07XHJcbiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGV2ZW50KSlcclxuICAgICAgICAgICAgICAgIGV2ZW50ID0gZXZlbnQ/LnNwbGl0KCcsJykgfHwgW107XHJcblxyXG4gICAgICAgICAgICBldmVudCA9IGV2ZW50Lm1hcCh2PT57XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGAke3Z9YC5zcGxpdCgnKicpLm1hcChuPT5OdW1iZXIobikpO1xyXG4gICAgICAgICAgICAgICAgaWYodmFsdWUubGVuZ3RoPT0xKSB2YWx1ZS5wdXNoKDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KHRhbGVudCkpXHJcbiAgICAgICAgICAgICAgICB0YWxlbnQgPSB0YWxlbnQ/LnNwbGl0KCcsJykgfHwgW107XHJcblxyXG4gICAgICAgICAgICB0YWxlbnQgPSB0YWxlbnQubWFwKHY9Pk51bWJlcih2KSk7XHJcblxyXG4gICAgICAgICAgICBhZ2VbYV0gPSB7IGV2ZW50LCB0YWxlbnQgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVzdGFydChkYXRhKSB7XHJcbiAgICAgICAgdGhpcy4jZGF0YSA9IHtcclxuICAgICAgICAgICAgW3RoaXMuVFlQRVMuQUdFXTogLTEsXHJcblxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5DSFJdOiAwLFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5JTlRdOiAwLFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5TVFJdOiAwLFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5NTlldOiAwLFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5TUFJdOiAwLFxyXG5cclxuICAgICAgICAgICAgW3RoaXMuVFlQRVMuTElGXTogMSxcclxuXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLlRMVF06IFtdLFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5FVlRdOiBbXSxcclxuXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLkxBR0VdOiBJbmZpbml0eSxcclxuICAgICAgICAgICAgW3RoaXMuVFlQRVMuTENIUl06IEluZmluaXR5LFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5MSU5UXTogSW5maW5pdHksXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLkxTVFJdOiBJbmZpbml0eSxcclxuICAgICAgICAgICAgW3RoaXMuVFlQRVMuTFNQUl06IEluZmluaXR5LFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5MTU5ZXTogSW5maW5pdHksXHJcblxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5IQUdFXTogLUluZmluaXR5LFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5IQ0hSXTogLUluZmluaXR5LFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5ISU5UXTogLUluZmluaXR5LFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5IU1RSXTogLUluZmluaXR5LFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5ITU5ZXTogLUluZmluaXR5LFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5IU1BSXTogLUluZmluaXR5LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yKGNvbnN0IGtleSBpbiBkYXRhKVxyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZShrZXksIGRhdGFba2V5XSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzdGFydExhc3RTdGVwKCkge1xyXG4gICAgICAgIHRoaXMuI2RhdGFbdGhpcy5UWVBFUy5MQUdFXSA9IHRoaXMuZ2V0KHRoaXMuVFlQRVMuQUdFKTtcclxuICAgICAgICB0aGlzLiNkYXRhW3RoaXMuVFlQRVMuTENIUl0gPSB0aGlzLmdldCh0aGlzLlRZUEVTLkNIUik7XHJcbiAgICAgICAgdGhpcy4jZGF0YVt0aGlzLlRZUEVTLkxJTlRdID0gdGhpcy5nZXQodGhpcy5UWVBFUy5JTlQpO1xyXG4gICAgICAgIHRoaXMuI2RhdGFbdGhpcy5UWVBFUy5MU1RSXSA9IHRoaXMuZ2V0KHRoaXMuVFlQRVMuU1RSKTtcclxuICAgICAgICB0aGlzLiNkYXRhW3RoaXMuVFlQRVMuTFNQUl0gPSB0aGlzLmdldCh0aGlzLlRZUEVTLlNQUik7XHJcbiAgICAgICAgdGhpcy4jZGF0YVt0aGlzLlRZUEVTLkxNTlldID0gdGhpcy5nZXQodGhpcy5UWVBFUy5NTlkpO1xyXG4gICAgICAgIHRoaXMuI2RhdGFbdGhpcy5UWVBFUy5IQUdFXSA9IHRoaXMuZ2V0KHRoaXMuVFlQRVMuQUdFKTtcclxuICAgICAgICB0aGlzLiNkYXRhW3RoaXMuVFlQRVMuSENIUl0gPSB0aGlzLmdldCh0aGlzLlRZUEVTLkNIUik7XHJcbiAgICAgICAgdGhpcy4jZGF0YVt0aGlzLlRZUEVTLkhJTlRdID0gdGhpcy5nZXQodGhpcy5UWVBFUy5JTlQpO1xyXG4gICAgICAgIHRoaXMuI2RhdGFbdGhpcy5UWVBFUy5IU1RSXSA9IHRoaXMuZ2V0KHRoaXMuVFlQRVMuU1RSKTtcclxuICAgICAgICB0aGlzLiNkYXRhW3RoaXMuVFlQRVMuSE1OWV0gPSB0aGlzLmdldCh0aGlzLlRZUEVTLk1OWSk7XHJcbiAgICAgICAgdGhpcy4jZGF0YVt0aGlzLlRZUEVTLkhTUFJdID0gdGhpcy5nZXQodGhpcy5UWVBFUy5TUFIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChwcm9wKSB7XHJcbiAgICAgICAgc3dpdGNoKHByb3ApIHtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkFHRTpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkNIUjpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLklOVDpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLlNUUjpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLk1OWTpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLlNQUjpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkxJRjpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLlRMVDpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkVWVDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZSh0aGlzLiNkYXRhW3Byb3BdKTtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkxBR0U6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5MQ0hSOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTElOVDpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkxTVFI6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5MTU5ZOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTFNQUjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaW4oXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGF0YVtwcm9wXSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCh0aGlzLmZhbGxiYWNrKHByb3ApKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkhBR0U6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5IQ0hSOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuSElOVDpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkhTVFI6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5ITU5ZOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuSFNQUjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXgoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZGF0YVtwcm9wXSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCh0aGlzLmZhbGxiYWNrKHByb3ApKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLlNVTTpcclxuICAgICAgICAgICAgICAgIGNvbnN0IEhBR0UgPSB0aGlzLmdldCh0aGlzLlRZUEVTLkhBR0UpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgSENIUiA9IHRoaXMuZ2V0KHRoaXMuVFlQRVMuSENIUik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBISU5UID0gdGhpcy5nZXQodGhpcy5UWVBFUy5ISU5UKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IEhTVFIgPSB0aGlzLmdldCh0aGlzLlRZUEVTLkhTVFIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgSE1OWSA9IHRoaXMuZ2V0KHRoaXMuVFlQRVMuSE1OWSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBIU1BSID0gdGhpcy5nZXQodGhpcy5UWVBFUy5IU1BSKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHN1bShIQ0hSLCBISU5ULCBIU1RSLCBITU5ZLCBIU1BSKSoyICsgSEFHRS8yKTtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLlRNUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxzZ2V0KCd0aW1lcycpIHx8IDA7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5FWFQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sc2dldCgnZXh0ZW5kVGFsZW50JykgfHwgbnVsbDtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkFUTFQ6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5BRVZUOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuQUNIVjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxzZ2V0KHByb3ApIHx8IFtdO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuQ1RMVDpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkNFVlQ6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5DQUNIVjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhbGxiYWNrKHByb3ApXHJcbiAgICAgICAgICAgICAgICApLmxlbmd0aDtcclxuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZhbGxiYWNrKHByb3ApIHtcclxuICAgICAgICBzd2l0Y2gocHJvcCkge1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTEFHRTpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkhBR0U6IHJldHVybiB0aGlzLlRZUEVTLkFHRTtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkxDSFI6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5IQ0hSOiByZXR1cm4gdGhpcy5UWVBFUy5DSFI7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5MSU5UOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuSElOVDogcmV0dXJuIHRoaXMuVFlQRVMuSU5UO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTFNUUjpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkhTVFI6IHJldHVybiB0aGlzLlRZUEVTLlNUUjtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkxNTlk6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5ITU5ZOiByZXR1cm4gdGhpcy5UWVBFUy5NTlk7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5MU1BSOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuSFNQUjogcmV0dXJuIHRoaXMuVFlQRVMuU1BSO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuQ1RMVDogcmV0dXJuIHRoaXMuVFlQRVMuQVRMVDtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkNFVlQ6IHJldHVybiB0aGlzLlRZUEVTLkFFVlQ7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5DQUNIVjogcmV0dXJuIHRoaXMuVFlQRVMuQUNIVjtcclxuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXQocHJvcCwgdmFsdWUpIHtcclxuICAgICAgICBzd2l0Y2gocHJvcCkge1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuQUdFOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuQ0hSOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuSU5UOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuU1RSOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTU5ZOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuU1BSOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTElGOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuVExUOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuRVZUOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5obChwcm9wLCB0aGlzLiNkYXRhW3Byb3BdID0gY2xvbmUodmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWNoaWV2ZShwcm9wLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5UTVM6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxzc2V0KCd0aW1lcycsIHBhcnNlSW50KHZhbHVlKSB8fCAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkVYVDpcclxuICAgICAgICAgICAgICAgIHRoaXMubHNzZXQoJ2V4dGVuZFRhbGVudCcsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3RSZWNvcmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsb25lKHtcclxuICAgICAgICAgICAgW3RoaXMuVFlQRVMuQUdFXTogdGhpcy5nZXQodGhpcy5UWVBFUy5BR0UpLFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5DSFJdOiB0aGlzLmdldCh0aGlzLlRZUEVTLkNIUiksXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLklOVF06IHRoaXMuZ2V0KHRoaXMuVFlQRVMuSU5UKSxcclxuICAgICAgICAgICAgW3RoaXMuVFlQRVMuU1RSXTogdGhpcy5nZXQodGhpcy5UWVBFUy5TVFIpLFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5NTlldOiB0aGlzLmdldCh0aGlzLlRZUEVTLk1OWSksXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLlNQUl06IHRoaXMuZ2V0KHRoaXMuVFlQRVMuU1BSKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2UocHJvcCwgdmFsdWUpIHtcclxuICAgICAgICBpZihBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBmb3IoY29uc3QgdiBvZiB2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlKHByb3AsIE51bWJlcih2KSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoKHByb3ApIHtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkFHRTpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkNIUjpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLklOVDpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLlNUUjpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLk1OWTpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLlNQUjpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkxJRjpcclxuICAgICAgICAgICAgICAgIHRoaXMuaGwocHJvcCwgdGhpcy4jZGF0YVtwcm9wXSArPSBOdW1iZXIodmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLlRMVDpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkVWVDpcclxuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLiNkYXRhW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgaWYodmFsdWU8MCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdi5pbmRleE9mKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihpbmRleCE9LTEpIHYuc3BsaWNlKGluZGV4LDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoIXYuaW5jbHVkZXModmFsdWUpKSB2LnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY2hpZXZlKHByb3AsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLlRNUzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0KFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXQocHJvcCkgKyBwYXJzZUludCh2YWx1ZSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWZmZWN0KGVmZmVjdHMpIHtcclxuICAgICAgICBmb3IoY29uc3QgcHJvcCBpbiBlZmZlY3RzKVxyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZShwcm9wLCBOdW1iZXIoZWZmZWN0c1twcm9wXSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRW5kKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldCh0aGlzLlRZUEVTLkxJRikgPCAxO1xyXG4gICAgfVxyXG5cclxuICAgIGFnZU5leHQoKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2UodGhpcy5UWVBFUy5BR0UsIDEpO1xyXG4gICAgICAgIGNvbnN0IGFnZSA9IHRoaXMuZ2V0KHRoaXMuVFlQRVMuQUdFKTtcclxuICAgICAgICBjb25zdCB7ZXZlbnQsIHRhbGVudH0gPSB0aGlzLmdldEFnZURhdGEoYWdlKTtcclxuICAgICAgICByZXR1cm4ge2FnZSwgZXZlbnQsIHRhbGVudH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWdlRGF0YShhZ2UpIHtcclxuICAgICAgICByZXR1cm4gY2xvbmUodGhpcy4jYWdlRGF0YVthZ2VdKTtcclxuICAgIH1cclxuXHJcbiAgICBobChwcm9wLCB2YWx1ZSkge1xyXG4gICAgICAgIGxldCBrZXlzO1xyXG4gICAgICAgIHN3aXRjaChwcm9wKSB7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5BR0U6IGtleXMgPSBbdGhpcy5UWVBFUy5MQUdFLCB0aGlzLlRZUEVTLkhBR0VdOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkNIUjoga2V5cyA9IFt0aGlzLlRZUEVTLkxDSFIsIHRoaXMuVFlQRVMuSENIUl07IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuSU5UOiBrZXlzID0gW3RoaXMuVFlQRVMuTElOVCwgdGhpcy5UWVBFUy5ISU5UXTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5TVFI6IGtleXMgPSBbdGhpcy5UWVBFUy5MU1RSLCB0aGlzLlRZUEVTLkhTVFJdOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLk1OWToga2V5cyA9IFt0aGlzLlRZUEVTLkxNTlksIHRoaXMuVFlQRVMuSE1OWV07IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuU1BSOiBrZXlzID0gW3RoaXMuVFlQRVMuTFNQUiwgdGhpcy5UWVBFUy5IU1BSXTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgW2wsIGhdID0ga2V5cztcclxuICAgICAgICB0aGlzLiNkYXRhW2xdID0gbWluKHRoaXMuI2RhdGFbbF0sIHZhbHVlKTtcclxuICAgICAgICB0aGlzLiNkYXRhW2hdID0gbWF4KHRoaXMuI2RhdGFbaF0sIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBhY2hpZXZlKHByb3AsIG5ld0RhdGEpIHtcclxuICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgIHN3aXRjaChwcm9wKSB7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5BQ0hWOlxyXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdERhdGEgPSB0aGlzLmxzZ2V0KHByb3ApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sc3NldChcclxuICAgICAgICAgICAgICAgICAgICBwcm9wLFxyXG4gICAgICAgICAgICAgICAgICAgIChsYXN0RGF0YSB8fCBbXSkuY29uY2F0KFtbbmV3RGF0YSwgRGF0ZS5ub3coKV1dKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLlRMVDoga2V5ID0gdGhpcy5UWVBFUy5BVExUOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkVWVDoga2V5ID0gdGhpcy5UWVBFUy5BRVZUOyBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsYXN0RGF0YSA9IHRoaXMubHNnZXQoa2V5KSB8fCBbXTtcclxuICAgICAgICB0aGlzLmxzc2V0KFxyXG4gICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgIEFycmF5LmZyb20oXHJcbiAgICAgICAgICAgICAgICBuZXcgU2V0KFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3REYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQobmV3RGF0YXx8W10pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mbGF0KClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBsc2dldChrZXkpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICBpZihkYXRhID09PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgbHNzZXQoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFByb3BlcnR5OyIsImZ1bmN0aW9uIHBhcnNlQ29uZGl0aW9uKGNvbmRpdGlvbikge1xyXG5cclxuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbXTtcclxuICAgIGNvbnN0IGxlbmd0aCA9IGNvbmRpdGlvbi5sZW5ndGg7XHJcbiAgICBjb25zdCBzdGFjayA9IFtdO1xyXG4gICAgc3RhY2sudW5zaGlmdChjb25kaXRpb25zKTtcclxuICAgIGxldCBjdXJzb3IgPSAwO1xyXG4gICAgY29uc3QgY2F0Y2hTdHJpbmcgPSBpID0+IHtcclxuICAgICAgICBjb25zdCBzdHIgPSBjb25kaXRpb24uc3Vic3RyaW5nKGN1cnNvciwgaSkudHJpbSgpO1xyXG4gICAgICAgIGN1cnNvciA9IGk7XHJcbiAgICAgICAgaWYoc3RyKSBzdGFja1swXS5wdXNoKHN0cik7XHJcbiAgICB9O1xyXG5cclxuICAgIGZvcihsZXQgaT0wOyBpPGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgc3dpdGNoKGNvbmRpdGlvbltpXSkge1xyXG4gICAgICAgICAgICBjYXNlICcgJzogY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBjYXNlICcoJzpcclxuICAgICAgICAgICAgICAgIGNhdGNoU3RyaW5nKGkpO1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yICsrO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViID0gW107XHJcbiAgICAgICAgICAgICAgICBzdGFja1swXS5wdXNoKHN1Yik7XHJcbiAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHN1Yik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJyknOlxyXG4gICAgICAgICAgICAgICAgY2F0Y2hTdHJpbmcoaSk7XHJcbiAgICAgICAgICAgICAgICBjdXJzb3IgKys7XHJcbiAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICd8JzpcclxuICAgICAgICAgICAgY2FzZSAnJic6XHJcbiAgICAgICAgICAgICAgICBjYXRjaFN0cmluZyhpKTtcclxuICAgICAgICAgICAgICAgIGNhdGNoU3RyaW5nKGkrMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDogY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNhdGNoU3RyaW5nKGxlbmd0aCk7XHJcblxyXG4gICAgcmV0dXJuIGNvbmRpdGlvbnM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoZWNrQ29uZGl0aW9uKHByb3BlcnR5LCBjb25kaXRpb24pIHtcclxuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBwYXJzZUNvbmRpdGlvbihjb25kaXRpb24pO1xyXG4gICAgcmV0dXJuIGNoZWNrUGFyc2VkQ29uZGl0aW9ucyhwcm9wZXJ0eSwgY29uZGl0aW9ucyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoZWNrUGFyc2VkQ29uZGl0aW9ucyhwcm9wZXJ0eSwgY29uZGl0aW9ucykge1xyXG4gICAgaWYoIUFycmF5LmlzQXJyYXkoY29uZGl0aW9ucykpIHJldHVybiBjaGVja1Byb3AocHJvcGVydHksIGNvbmRpdGlvbnMpO1xyXG4gICAgaWYoY29uZGl0aW9ucy5sZW5ndGggPT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICBpZihjb25kaXRpb25zLmxlbmd0aCA9PSAxKSByZXR1cm4gY2hlY2tQYXJzZWRDb25kaXRpb25zKHByb3BlcnR5LCBjb25kaXRpb25zWzBdKTtcclxuXHJcbiAgICBsZXQgcmV0ID0gY2hlY2tQYXJzZWRDb25kaXRpb25zKHByb3BlcnR5LCBjb25kaXRpb25zWzBdKTtcclxuICAgIGZvcihsZXQgaT0xOyBpPGNvbmRpdGlvbnMubGVuZ3RoOyBpKz0yKSB7XHJcbiAgICAgICAgc3dpdGNoKGNvbmRpdGlvbnNbaV0pIHtcclxuICAgICAgICAgICAgY2FzZSAnJic6XHJcbiAgICAgICAgICAgICAgICBpZihyZXQpIHJldCA9IGNoZWNrUGFyc2VkQ29uZGl0aW9ucyhwcm9wZXJ0eSwgY29uZGl0aW9uc1tpKzFdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd8JzpcclxuICAgICAgICAgICAgICAgIGlmKHJldCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXQgPSBjaGVja1BhcnNlZENvbmRpdGlvbnMocHJvcGVydHksIGNvbmRpdGlvbnNbaSsxXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoZWNrUHJvcChwcm9wZXJ0eSwgY29uZGl0aW9uKSB7XHJcblxyXG4gICAgY29uc3QgbGVuZ3RoID0gY29uZGl0aW9uLmxlbmd0aDtcclxuICAgIGxldCBpID0gY29uZGl0aW9uLnNlYXJjaCgvWz48XFwhXFw/PV0vKTtcclxuXHJcbiAgICBjb25zdCBwcm9wID0gY29uZGl0aW9uLnN1YnN0cmluZygwLGkpO1xyXG4gICAgY29uc3Qgc3ltYm9sID0gY29uZGl0aW9uLnN1YnN0cmluZyhpLCBpKz0oY29uZGl0aW9uW2krMV09PSc9Jz8yOjEpKTtcclxuICAgIGNvbnN0IGQgPSBjb25kaXRpb24uc3Vic3RyaW5nKGksIGxlbmd0aCk7XHJcblxyXG4gICAgY29uc3QgcHJvcERhdGEgPSBwcm9wZXJ0eS5nZXQocHJvcCk7XHJcbiAgICBjb25zdCBjb25kaXRpb25EYXRhID0gZFswXT09J1snPyBKU09OLnBhcnNlKGQpOiBOdW1iZXIoZCk7XHJcblxyXG4gICAgc3dpdGNoKHN5bWJvbCkge1xyXG4gICAgICAgIGNhc2UgJz4nOiAgcmV0dXJuIHByb3BEYXRhID4gIGNvbmRpdGlvbkRhdGE7XHJcbiAgICAgICAgY2FzZSAnPCc6ICByZXR1cm4gcHJvcERhdGEgPCAgY29uZGl0aW9uRGF0YTtcclxuICAgICAgICBjYXNlICc+PSc6IHJldHVybiBwcm9wRGF0YSA+PSBjb25kaXRpb25EYXRhO1xyXG4gICAgICAgIGNhc2UgJzw9JzogcmV0dXJuIHByb3BEYXRhIDw9IGNvbmRpdGlvbkRhdGE7XHJcbiAgICAgICAgY2FzZSAnPSc6XHJcbiAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocHJvcERhdGEpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BEYXRhLmluY2x1ZGVzKGNvbmRpdGlvbkRhdGEpO1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvcERhdGEgPT0gY29uZGl0aW9uRGF0YTtcclxuICAgICAgICBjYXNlICchPSc6XHJcbiAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocHJvcERhdGEpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcm9wRGF0YS5pbmNsdWRlcyhjb25kaXRpb25EYXRhKTtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BEYXRhID09IGNvbmRpdGlvbkRhdGE7XHJcbiAgICAgICAgY2FzZSAnPyc6XHJcbiAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocHJvcERhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgcCBvZiBwcm9wRGF0YSlcclxuICAgICAgICAgICAgICAgICAgICBpZihjb25kaXRpb25EYXRhLmluY2x1ZGVzKHApKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uRGF0YS5pbmNsdWRlcyhwcm9wRGF0YSk7XHJcbiAgICAgICAgY2FzZSAnISc6XHJcbiAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocHJvcERhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgcCBvZiBwcm9wRGF0YSlcclxuICAgICAgICAgICAgICAgICAgICBpZihjb25kaXRpb25EYXRhLmluY2x1ZGVzKHApKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gIWNvbmRpdGlvbkRhdGEuaW5jbHVkZXMocHJvcERhdGEpO1xyXG5cclxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3RNYXhUcmlnZ2Vycyhjb25kaXRpb24pIHtcclxuICAgIC8vIEFzc3VtaW5nIG9ubHkgYWdlIHJlbGF0ZWQgdGFsZW50cyBjYW4gYmUgdHJpZ2dlcmVkIG11bHRpcGxlIHRpbWVzLlxyXG4gICAgY29uc3QgUkVfQUdFX0NPTkRJVElPTiA9IC9BR0VcXD9cXFsoWzAtOVxcLF0rKVxcXS87XHJcbiAgICBjb25zdCBtYXRjaF9vYmplY3QgPSBSRV9BR0VfQ09ORElUSU9OLmV4ZWMoY29uZGl0aW9uKTtcclxuICAgIGlmIChtYXRjaF9vYmplY3QgPT0gbnVsbCkge1xyXG4gICAgICAgIC8vIE5vdCBhZ2UgcmVsYXRlZCwgc2luZ2xlIHRyaWdnZXIuXHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IGFnZV9saXN0ID0gbWF0Y2hfb2JqZWN0WzFdLnNwbGl0KFwiLFwiKTtcclxuICAgIHJldHVybiBhZ2VfbGlzdC5sZW5ndGg7XHJcbn1cclxuXHJcbmV4cG9ydCB7IGNoZWNrQ29uZGl0aW9uLCBleHRyYWN0TWF4VHJpZ2dlcnMgfTsiLCJpbXBvcnQgeyBjbG9uZSB9IGZyb20gJy4vZnVuY3Rpb25zL3V0aWwuanMnO1xuaW1wb3J0IHsgY2hlY2tDb25kaXRpb24gfSBmcm9tICcuL2Z1bmN0aW9ucy9jb25kaXRpb24uanMnO1xuXG5jbGFzcyBFdmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgI2V2ZW50cztcblxuICAgIGluaXRpYWwoe2V2ZW50c30pIHtcbiAgICAgICAgdGhpcy4jZXZlbnRzID0gZXZlbnRzO1xuICAgICAgICBmb3IoY29uc3QgaWQgaW4gZXZlbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50c1tpZF07XG4gICAgICAgICAgICBpZighZXZlbnQuYnJhbmNoKSBjb250aW51ZTtcbiAgICAgICAgICAgIGV2ZW50LmJyYW5jaCA9IGV2ZW50LmJyYW5jaC5tYXAoYj0+e1xuICAgICAgICAgICAgICAgIGIgPSBiLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgYlsxXSA9IE51bWJlcihiWzFdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY291bnQoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLiNldmVudHMpLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjaGVjayhldmVudElkLCBwcm9wZXJ0eSkge1xuICAgICAgICBjb25zdCB7IGluY2x1ZGUsIGV4Y2x1ZGUsIE5vUmFuZG9tIH0gPSB0aGlzLmdldChldmVudElkKTtcbiAgICAgICAgaWYoTm9SYW5kb20pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYoZXhjbHVkZSAmJiBjaGVja0NvbmRpdGlvbihwcm9wZXJ0eSwgZXhjbHVkZSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYoaW5jbHVkZSkgcmV0dXJuIGNoZWNrQ29uZGl0aW9uKHByb3BlcnR5LCBpbmNsdWRlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0KGV2ZW50SWQpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB0aGlzLiNldmVudHNbZXZlbnRJZF07XG4gICAgICAgIGlmKCFldmVudCkgdGhyb3cgbmV3IEVycm9yKGBbRVJST1JdIE5vIEV2ZW50WyR7ZXZlbnRJZH1dYCk7XG4gICAgICAgIHJldHVybiBjbG9uZShldmVudCk7XG4gICAgfVxuXG4gICAgaW5mb3JtYXRpb24oZXZlbnRJZCkge1xuICAgICAgICBjb25zdCB7IGV2ZW50OiBkZXNjcmlwdGlvbiB9ID0gdGhpcy5nZXQoZXZlbnRJZClcbiAgICAgICAgcmV0dXJuIHsgZGVzY3JpcHRpb24gfTtcbiAgICB9XG5cbiAgICBkbyhldmVudElkLCBwcm9wZXJ0eSkge1xuICAgICAgICBjb25zdCB7IGVmZmVjdCwgYnJhbmNoLCBldmVudDogZGVzY3JpcHRpb24sIHBvc3RFdmVudCB9ID0gdGhpcy5nZXQoZXZlbnRJZCk7XG4gICAgICAgIGlmKGJyYW5jaClcbiAgICAgICAgICAgIGZvcihjb25zdCBbY29uZCwgbmV4dF0gb2YgYnJhbmNoKVxuICAgICAgICAgICAgICAgIGlmKGNoZWNrQ29uZGl0aW9uKHByb3BlcnR5LCBjb25kKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZWZmZWN0LCBuZXh0LCBkZXNjcmlwdGlvbiB9O1xuICAgICAgICByZXR1cm4geyBlZmZlY3QsIHBvc3RFdmVudCwgZGVzY3JpcHRpb24gfTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRXZlbnQ7IiwiaW1wb3J0IHsgY2xvbmUgfSBmcm9tICcuL2Z1bmN0aW9ucy91dGlsLmpzJztcclxuaW1wb3J0IHsgY2hlY2tDb25kaXRpb24sIGV4dHJhY3RNYXhUcmlnZ2VycyB9IGZyb20gJy4vZnVuY3Rpb25zL2NvbmRpdGlvbi5qcyc7XHJcblxyXG5jbGFzcyBUYWxlbnQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAgICN0YWxlbnRzO1xyXG5cclxuICAgIGluaXRpYWwoe3RhbGVudHN9KSB7XHJcbiAgICAgICAgdGhpcy4jdGFsZW50cyA9IHRhbGVudHM7XHJcbiAgICAgICAgZm9yKGNvbnN0IGlkIGluIHRhbGVudHMpIHtcclxuICAgICAgICAgICAgY29uc3QgdGFsZW50ID0gdGFsZW50c1tpZF07XHJcbiAgICAgICAgICAgIHRhbGVudC5pZD0gTnVtYmVyKGlkKTtcclxuICAgICAgICAgICAgdGFsZW50LmdyYWRlID0gTnVtYmVyKHRhbGVudC5ncmFkZSk7XHJcbiAgICAgICAgICAgIHRhbGVudC5tYXhfdHJpZ2dlcnMgPSBleHRyYWN0TWF4VHJpZ2dlcnModGFsZW50LmNvbmRpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvdW50KCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLiN0YWxlbnRzKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2sodGFsZW50SWQsIHByb3BlcnR5KSB7XHJcbiAgICAgICAgY29uc3QgeyBjb25kaXRpb24gfSA9IHRoaXMuZ2V0KHRhbGVudElkKTtcclxuICAgICAgICByZXR1cm4gY2hlY2tDb25kaXRpb24ocHJvcGVydHksIGNvbmRpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KHRhbGVudElkKSB7XHJcbiAgICAgICAgY29uc3QgdGFsZW50ID0gdGhpcy4jdGFsZW50c1t0YWxlbnRJZF07XHJcbiAgICAgICAgaWYoIXRhbGVudCkgdGhyb3cgbmV3IEVycm9yKGBbRVJST1JdIE5vIFRhbGVudFske3RhbGVudElkfV1gKTtcclxuICAgICAgICByZXR1cm4gY2xvbmUodGFsZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpbmZvcm1hdGlvbih0YWxlbnRJZCkge1xyXG4gICAgICAgIGNvbnN0IHsgZ3JhZGUsIG5hbWUsIGRlc2NyaXB0aW9uIH0gPSB0aGlzLmdldCh0YWxlbnRJZClcclxuICAgICAgICByZXR1cm4geyBncmFkZSwgbmFtZSwgZGVzY3JpcHRpb24gfTtcclxuICAgIH1cclxuXHJcbiAgICBleGNsdXNpdmUodGFsZW5kcywgZXhjbHVzaXZlSWQpIHtcclxuICAgICAgICBjb25zdCB7IGV4Y2x1c2l2ZSB9ID0gdGhpcy5nZXQoZXhjbHVzaXZlSWQpO1xyXG4gICAgICAgIGlmKCFleGNsdXNpdmUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGZvcihjb25zdCB0YWxlbnQgb2YgdGFsZW5kcykge1xyXG4gICAgICAgICAgICBmb3IoY29uc3QgZSBvZiBleGNsdXNpdmUpIHtcclxuICAgICAgICAgICAgICAgIGlmKHRhbGVudCA9PSBlKSByZXR1cm4gdGFsZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRhbGVudFJhbmRvbShpbmNsdWRlKSB7XHJcbiAgICAgICAgLy8gMTAwMCwgMTAwLCAxMCwgMVxyXG4gICAgICAgIGNvbnN0IHRhbGVudExpc3QgPSB7fTtcclxuICAgICAgICBmb3IoY29uc3QgdGFsZW50SWQgaW4gdGhpcy4jdGFsZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCB7IGlkLCBncmFkZSwgbmFtZSwgZGVzY3JpcHRpb24gfSA9IHRoaXMuI3RhbGVudHNbdGFsZW50SWRdO1xyXG4gICAgICAgICAgICBpZihpZCA9PSBpbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgICBpbmNsdWRlID0geyBncmFkZSwgbmFtZSwgZGVzY3JpcHRpb24sIGlkIH07XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighdGFsZW50TGlzdFtncmFkZV0pIHRhbGVudExpc3RbZ3JhZGVdID0gW3sgZ3JhZGUsIG5hbWUsIGRlc2NyaXB0aW9uLCBpZCB9XTtcclxuICAgICAgICAgICAgZWxzZSB0YWxlbnRMaXN0W2dyYWRlXS5wdXNoKHsgZ3JhZGUsIG5hbWUsIGRlc2NyaXB0aW9uLCBpZCB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgQXJyYXkoMTApXHJcbiAgICAgICAgICAgIC5maWxsKDEpLm1hcCgodiwgaSk9PntcclxuICAgICAgICAgICAgICAgIGlmKCFpICYmIGluY2x1ZGUpIHJldHVybiBpbmNsdWRlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JhZGVSYW5kb20gPSBNYXRoLnJhbmRvbSgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGdyYWRlO1xyXG4gICAgICAgICAgICAgICAgaWYoZ3JhZGVSYW5kb20+PTAuMTExKSBncmFkZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKGdyYWRlUmFuZG9tPj0wLjAxMSkgZ3JhZGUgPSAxO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihncmFkZVJhbmRvbT49MC4wMDEpIGdyYWRlID0gMjtcclxuICAgICAgICAgICAgICAgIGVsc2UgZ3JhZGUgPSAzO1xyXG5cclxuICAgICAgICAgICAgICAgIHdoaWxlKHRhbGVudExpc3RbZ3JhZGVdLmxlbmd0aCA9PSAwKSBncmFkZS0tO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRhbGVudExpc3RbZ3JhZGVdLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGVuZ3RoKSAlIGxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0YWxlbnRMaXN0W2dyYWRlXS5zcGxpY2UocmFuZG9tLDEpWzBdO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhbGxvY2F0aW9uQWRkaXRpb24odGFsZW50cykge1xyXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkodGFsZW50cykpIHtcclxuICAgICAgICAgICAgbGV0IGFkZGl0aW9uID0gMDtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHRhbGVudCBvZiB0YWxlbnRzKVxyXG4gICAgICAgICAgICAgICAgYWRkaXRpb24gKz0gdGhpcy5hbGxvY2F0aW9uQWRkaXRpb24odGFsZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFkZGl0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMuZ2V0KHRhbGVudHMpLnN0YXR1cykgfHwgMDtcclxuICAgIH1cclxuXHJcbiAgICBkbyh0YWxlbnRJZCwgcHJvcGVydHkpIHtcclxuICAgICAgICBjb25zdCB7IGVmZmVjdCwgY29uZGl0aW9uLCBncmFkZSwgbmFtZSwgZGVzY3JpcHRpb24gfSA9IHRoaXMuZ2V0KHRhbGVudElkKTtcclxuICAgICAgICBpZihjb25kaXRpb24gJiYgIWNoZWNrQ29uZGl0aW9uKHByb3BlcnR5LCBjb25kaXRpb24pKVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4geyBlZmZlY3QsIGdyYWRlLCBuYW1lLCBkZXNjcmlwdGlvbiB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUYWxlbnQ7IiwiaW1wb3J0IHsgY2xvbmUgfSBmcm9tICcuL2Z1bmN0aW9ucy91dGlsLmpzJztcclxuaW1wb3J0IHsgY2hlY2tDb25kaXRpb24gfSBmcm9tICcuL2Z1bmN0aW9ucy9jb25kaXRpb24uanMnO1xyXG5cclxuY2xhc3MgQWNoaWV2ZW1lbnQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAgIC8vIOaXtuaculxyXG4gICAgT3Bwb3J0dW5pdHkgPSB7XHJcbiAgICAgICAgU1RBUlQ6IFwiU1RBUlRcIiwgICAgICAgICAgICAgLy8g5YiG6YWN5a6M5oiQ54K55pWw77yM54K55Ye75byA5aeL5paw5Lq655Sf5ZCOXHJcbiAgICAgICAgVFJBSkVDVE9SWTogXCJUUkFKRUNUT1JZXCIsICAgLy8g5q+P5LiA5bm055qE5Lq655Sf57uP5Y6G5LitXHJcbiAgICAgICAgU1VNTUFSWTogXCJTVU1NQVJZXCIsICAgICAgICAgLy8g5Lq655Sf57uT5p2f77yM54K55Ye75Lq655Sf5oC757uT5ZCOXHJcbiAgICAgICAgRU5EOiBcIkVORFwiLCAgICAgICAgICAgICAgICAgLy8g5ri45oiP5a6M5oiQ77yM54K55Ye76YeN5byAIOmHjeW8gOasoeaVsOWcqOi/meS5i+WQjuaJjeS8misxXHJcbiAgICB9O1xyXG5cclxuICAgICNhY2hpZXZlbWVudHM7XHJcblxyXG4gICAgaW5pdGlhbCh7YWNoaWV2ZW1lbnRzfSkge1xyXG4gICAgICAgIHRoaXMuI2FjaGlldmVtZW50cyA9IGFjaGlldmVtZW50cztcclxuICAgIH1cclxuXHJcbiAgICBjb3VudCgpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy4jYWNoaWV2ZW1lbnRzKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgbGlzdChwcm9wZXJ0eSkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RcclxuICAgICAgICAgICAgLnZhbHVlcyh0aGlzLiNhY2hpZXZlbWVudHMpXHJcbiAgICAgICAgICAgIC5tYXAoKHtcclxuICAgICAgICAgICAgICAgIGlkLCBuYW1lLCBvcHBvcnR1bml0eSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLCBoaWRlLCBncmFkZSxcclxuICAgICAgICAgICAgfSk9Pih7XHJcbiAgICAgICAgICAgICAgICBpZCwgbmFtZSwgb3Bwb3J0dW5pdHksXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwgaGlkZSwgZ3JhZGUsXHJcbiAgICAgICAgICAgICAgICBpc0FjaGlldmVkOiB0aGlzLmlzQWNoaWV2ZWQoaWQsIHByb3BlcnR5KSxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChhY2hpZXZlbWVudElkKSB7XHJcbiAgICAgICAgY29uc3QgYWNoaWV2ZW1lbnQgPSB0aGlzLiNhY2hpZXZlbWVudHNbYWNoaWV2ZW1lbnRJZF07XHJcbiAgICAgICAgaWYoIWFjaGlldmVtZW50KSB0aHJvdyBuZXcgRXJyb3IoYFtFUlJPUl0gTm8gQWNoaWV2ZW1lbnRbJHthY2hpZXZlbWVudElkfV1gKTtcclxuICAgICAgICByZXR1cm4gY2xvbmUoYWNoaWV2ZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrKGFjaGlldmVtZW50SWQsIHByb3BlcnR5KSB7XHJcbiAgICAgICAgY29uc3QgeyBjb25kaXRpb24gfSA9IHRoaXMuZ2V0KGFjaGlldmVtZW50SWQpO1xyXG4gICAgICAgIHJldHVybiBjaGVja0NvbmRpdGlvbihwcm9wZXJ0eSwgY29uZGl0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0FjaGlldmVkKGFjaGlldmVtZW50SWQsIHByb3BlcnR5KSB7XHJcbiAgICAgICAgZm9yKGNvbnN0IFthY2hpZXZlZF0gb2YgKHByb3BlcnR5LmdldChwcm9wZXJ0eS5UWVBFUy5BQ0hWKXx8W10pKVxyXG4gICAgICAgICAgICBpZihhY2hpZXZlZCA9PSBhY2hpZXZlbWVudElkKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYWNoaWV2ZShvcHBvcnR1bml0eSwgcHJvcGVydHkpIHtcclxuICAgICAgICB0aGlzLmxpc3QocHJvcGVydHkpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHtpc0FjaGlldmVkfSk9PiFpc0FjaGlldmVkKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh7b3Bwb3J0dW5pdHk6IG99KT0+bz09b3Bwb3J0dW5pdHkpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHtpZH0pPT50aGlzLmNoZWNrKGlkLCBwcm9wZXJ0eSkpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKCh7aWR9KT0+e1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydHkuYWNoaWV2ZShwcm9wZXJ0eS5UWVBFUy5BQ0hWLCBpZClcclxuICAgICAgICAgICAgICAgICQkZXZlbnQoJ2FjaGlldmVtZW50JywgdGhpcy5nZXQoaWQpKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQWNoaWV2ZW1lbnQ7IiwiaW1wb3J0IFByb3BlcnR5IGZyb20gJy4vcHJvcGVydHkuanMnO1xyXG5pbXBvcnQgRXZlbnQgZnJvbSAnLi9ldmVudC5qcyc7XHJcbmltcG9ydCBUYWxlbnQgZnJvbSAnLi90YWxlbnQuanMnO1xyXG5pbXBvcnQgQWNoaWV2ZW1lbnQgZnJvbSAnLi9hY2hpZXZlbWVudC5qcyc7XHJcblxyXG5jbGFzcyBMaWZlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuI3Byb3BlcnR5ID0gbmV3IFByb3BlcnR5KCk7XHJcbiAgICAgICAgdGhpcy4jZXZlbnQgPSBuZXcgRXZlbnQoKTtcclxuICAgICAgICB0aGlzLiN0YWxlbnQgPSBuZXcgVGFsZW50KCk7XHJcbiAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQgPSBuZXcgQWNoaWV2ZW1lbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICAjcHJvcGVydHk7XHJcbiAgICAjZXZlbnQ7XHJcbiAgICAjdGFsZW50O1xyXG4gICAgI2FjaGlldmVtZW50O1xyXG4gICAgI3RyaWdnZXJUYWxlbnRzO1xyXG5cclxuICAgIGFzeW5jIGluaXRpYWwoKSB7XHJcbiAgICAgICAgY29uc3QgW2FnZSwgdGFsZW50cywgZXZlbnRzLCBhY2hpZXZlbWVudHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAganNvbignYWdlJyksXHJcbiAgICAgICAgICBqc29uKCd0YWxlbnRzJyksXHJcbiAgICAgICAgICBqc29uKCdldmVudHMnKSxcclxuICAgICAgICAgIGpzb24oJ2FjaGlldmVtZW50JyksXHJcbiAgICAgICAgXSlcclxuICAgICAgICB0aGlzLiNwcm9wZXJ0eS5pbml0aWFsKHthZ2V9KTtcclxuICAgICAgICB0aGlzLiN0YWxlbnQuaW5pdGlhbCh7dGFsZW50c30pO1xyXG4gICAgICAgIHRoaXMuI2V2ZW50LmluaXRpYWwoe2V2ZW50c30pO1xyXG4gICAgICAgIHRoaXMuI2FjaGlldmVtZW50LmluaXRpYWwoe2FjaGlldmVtZW50c30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc3RhcnQoYWxsb2NhdGlvbikge1xyXG4gICAgICAgIHRoaXMuI3RyaWdnZXJUYWxlbnRzID0ge307XHJcbiAgICAgICAgdGhpcy4jcHJvcGVydHkucmVzdGFydChhbGxvY2F0aW9uKTtcclxuICAgICAgICB0aGlzLmRvVGFsZW50KCk7XHJcbiAgICAgICAgdGhpcy4jcHJvcGVydHkucmVzdGFydExhc3RTdGVwKCk7XHJcbiAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQuYWNoaWV2ZShcclxuICAgICAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQuT3Bwb3J0dW5pdHkuU1RBUlQsXHJcbiAgICAgICAgICAgIHRoaXMuI3Byb3BlcnR5XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGdldFRhbGVudEFsbG9jYXRpb25BZGRpdGlvbih0YWxlbnRzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RhbGVudC5hbGxvY2F0aW9uQWRkaXRpb24odGFsZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFsZW50Q3VycmVudFRyaWdnZXJDb3VudCh0YWxlbnRJZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiN0cmlnZ2VyVGFsZW50c1t0YWxlbnRJZF0gfHwgMDtcclxuICAgIH1cclxuXHJcbiAgICBuZXh0KCkge1xyXG4gICAgICAgIGNvbnN0IHthZ2UsIGV2ZW50LCB0YWxlbnR9ID0gdGhpcy4jcHJvcGVydHkuYWdlTmV4dCgpO1xyXG5cclxuICAgICAgICBjb25zdCB0YWxlbnRDb250ZW50ID0gdGhpcy5kb1RhbGVudCh0YWxlbnQpO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50Q29udGVudCA9IHRoaXMuZG9FdmVudCh0aGlzLnJhbmRvbShldmVudCkpO1xyXG5cclxuICAgICAgICBjb25zdCBpc0VuZCA9IHRoaXMuI3Byb3BlcnR5LmlzRW5kKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBbdGFsZW50Q29udGVudCwgZXZlbnRDb250ZW50XS5mbGF0KCk7XHJcbiAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQuYWNoaWV2ZShcclxuICAgICAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQuT3Bwb3J0dW5pdHkuVFJBSkVDVE9SWSxcclxuICAgICAgICAgICAgdGhpcy4jcHJvcGVydHlcclxuICAgICAgICApXHJcbiAgICAgICAgcmV0dXJuIHsgYWdlLCBjb250ZW50LCBpc0VuZCB9O1xyXG4gICAgfVxyXG5cclxuICAgIGRvVGFsZW50KHRhbGVudHMpIHtcclxuICAgICAgICBpZih0YWxlbnRzKSB0aGlzLiNwcm9wZXJ0eS5jaGFuZ2UodGhpcy4jcHJvcGVydHkuVFlQRVMuVExULCB0YWxlbnRzKTtcclxuICAgICAgICB0YWxlbnRzID0gdGhpcy4jcHJvcGVydHkuZ2V0KHRoaXMuI3Byb3BlcnR5LlRZUEVTLlRMVClcclxuICAgICAgICAgICAgLmZpbHRlcih0YWxlbnRJZCA9PiB0aGlzLmdldFRhbGVudEN1cnJlbnRUcmlnZ2VyQ291bnQodGFsZW50SWQpIDwgdGhpcy4jdGFsZW50LmdldCh0YWxlbnRJZCkubWF4X3RyaWdnZXJzKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGVudHMgPSBbXTtcclxuICAgICAgICBmb3IoY29uc3QgdGFsZW50SWQgb2YgdGFsZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLiN0YWxlbnQuZG8odGFsZW50SWQsIHRoaXMuI3Byb3BlcnR5KTtcclxuICAgICAgICAgICAgaWYoIXJlc3VsdCkgY29udGludWU7XHJcbiAgICAgICAgICAgIHRoaXMuI3RyaWdnZXJUYWxlbnRzW3RhbGVudElkXSA9IHRoaXMuZ2V0VGFsZW50Q3VycmVudFRyaWdnZXJDb3VudCh0YWxlbnRJZCkgKyAxO1xyXG4gICAgICAgICAgICBjb25zdCB7IGVmZmVjdCwgbmFtZSwgZGVzY3JpcHRpb24sIGdyYWRlIH0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIGNvbnRlbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy4jcHJvcGVydHkuVFlQRVMuVExULFxyXG4gICAgICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgICAgIGdyYWRlLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGlmKCFlZmZlY3QpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB0aGlzLiNwcm9wZXJ0eS5lZmZlY3QoZWZmZWN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIGRvRXZlbnQoZXZlbnRJZCkge1xyXG4gICAgICAgIGNvbnN0IHsgZWZmZWN0LCBuZXh0LCBkZXNjcmlwdGlvbiwgcG9zdEV2ZW50IH0gPSB0aGlzLiNldmVudC5kbyhldmVudElkLCB0aGlzLiNwcm9wZXJ0eSk7XHJcbiAgICAgICAgdGhpcy4jcHJvcGVydHkuY2hhbmdlKHRoaXMuI3Byb3BlcnR5LlRZUEVTLkVWVCwgZXZlbnRJZCk7XHJcbiAgICAgICAgdGhpcy4jcHJvcGVydHkuZWZmZWN0KGVmZmVjdCk7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHtcclxuICAgICAgICAgICAgdHlwZTogdGhpcy4jcHJvcGVydHkuVFlQRVMuRVZULFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgcG9zdEV2ZW50LFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihuZXh0KSByZXR1cm4gW2NvbnRlbnQsIHRoaXMuZG9FdmVudChuZXh0KV0uZmxhdCgpO1xyXG4gICAgICAgIHJldHVybiBbY29udGVudF07XHJcbiAgICB9XHJcblxyXG4gICAgcmFuZG9tKGV2ZW50cykge1xyXG4gICAgICAgIGV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKFtldmVudElkXSk9PnRoaXMuI2V2ZW50LmNoZWNrKGV2ZW50SWQsIHRoaXMuI3Byb3BlcnR5KSk7XHJcblxyXG4gICAgICAgIGxldCB0b3RhbFdlaWdodHMgPSAwO1xyXG4gICAgICAgIGZvcihjb25zdCBbLCB3ZWlnaHRdIG9mIGV2ZW50cylcclxuICAgICAgICAgICAgdG90YWxXZWlnaHRzICs9IHdlaWdodDtcclxuXHJcbiAgICAgICAgbGV0IHJhbmRvbSA9IE1hdGgucmFuZG9tKCkgKiB0b3RhbFdlaWdodHM7XHJcbiAgICAgICAgZm9yKGNvbnN0IFtldmVudElkLCB3ZWlnaHRdIG9mIGV2ZW50cylcclxuICAgICAgICAgICAgaWYoKHJhbmRvbS09d2VpZ2h0KTwwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50SWQ7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50c1tldmVudHMubGVuZ3RoLTFdO1xyXG4gICAgfVxyXG5cclxuICAgIHRhbGVudFJhbmRvbSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4jdGFsZW50LnRhbGVudFJhbmRvbSh0aGlzLmdldExhc3RFeHRlbmRUYWxlbnQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGFsZW50RXh0ZW5kKHRhbGVudElkKSB7XHJcbiAgICAgICAgdGhpcy4jcHJvcGVydHkuc2V0KHRoaXMuI3Byb3BlcnR5LlRZUEVTLkVYVCwgdGFsZW50SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3RFeHRlbmRUYWxlbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BlcnR5LmdldCh0aGlzLiNwcm9wZXJ0eS5UWVBFUy5FWFQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN1bW1hcnkoKSB7XHJcbiAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQuYWNoaWV2ZShcclxuICAgICAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQuT3Bwb3J0dW5pdHkuU1VNTUFSWSxcclxuICAgICAgICAgICAgdGhpcy4jcHJvcGVydHlcclxuICAgICAgICApXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgQUdFOiB0aGlzLiNwcm9wZXJ0eS5nZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuSEFHRSksXHJcbiAgICAgICAgICAgIENIUjogdGhpcy4jcHJvcGVydHkuZ2V0KHRoaXMuI3Byb3BlcnR5LlRZUEVTLkhDSFIpLFxyXG4gICAgICAgICAgICBJTlQ6IHRoaXMuI3Byb3BlcnR5LmdldCh0aGlzLiNwcm9wZXJ0eS5UWVBFUy5ISU5UKSxcclxuICAgICAgICAgICAgU1RSOiB0aGlzLiNwcm9wZXJ0eS5nZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuSFNUUiksXHJcbiAgICAgICAgICAgIE1OWTogdGhpcy4jcHJvcGVydHkuZ2V0KHRoaXMuI3Byb3BlcnR5LlRZUEVTLkhNTlkpLFxyXG4gICAgICAgICAgICBTUFI6IHRoaXMuI3Byb3BlcnR5LmdldCh0aGlzLiNwcm9wZXJ0eS5UWVBFUy5IU1BSKSxcclxuICAgICAgICAgICAgU1VNOiB0aGlzLiNwcm9wZXJ0eS5nZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuU1VNKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3RSZWNvcmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BlcnR5LmdldExhc3RSZWNvcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBleGNsdXNpdmUodGFsZW50cywgZXhjbHVzaXZlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RhbGVudC5leGNsdXNpdmUodGFsZW50cywgZXhjbHVzaXZlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBY2hpZXZlbWVudHMoKSB7XHJcbiAgICAgICAgY29uc3QgdGlja3MgPSB7fTtcclxuICAgICAgICB0aGlzLiNwcm9wZXJ0eVxyXG4gICAgICAgICAgICAuZ2V0KHRoaXMuI3Byb3BlcnR5LlRZUEVTLkFDSFYpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChbaWQsIHRpY2tdKSA9PiB0aWNrc1tpZF0gPSB0aWNrKTtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAuI2FjaGlldmVtZW50XHJcbiAgICAgICAgICAgIC5saXN0KHRoaXMuI3Byb3BlcnR5KVxyXG4gICAgICAgICAgICAuc29ydCgoXHJcbiAgICAgICAgICAgICAgICB7aWQ6IGEsIGdyYWRlOiBhZywgaGlkZTogYWh9LFxyXG4gICAgICAgICAgICAgICAge2lkOiBiLCBncmFkZTogYmcsIGhpZGU6IGJofVxyXG4gICAgICAgICAgICApPT57XHJcbiAgICAgICAgICAgICAgICBhID0gdGlja3NbYV07XHJcbiAgICAgICAgICAgICAgICBiID0gdGlja3NbYl07XHJcbiAgICAgICAgICAgICAgICBpZihhJiZiKSByZXR1cm4gYSAtIGI7XHJcbiAgICAgICAgICAgICAgICBpZighYSYmIWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZihhaCYmYmgpIHJldHVybiBiZyAtIGFnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGFoKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgICAgICAgICBpZihiaCkgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiZyAtIGFnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoIWEpIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICAgaWYoIWIpIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VG90YWwoKSB7XHJcbiAgICAgICAgY29uc3QgVE1TID0gdGhpcy4jcHJvcGVydHkuZ2V0KHRoaXMuI3Byb3BlcnR5LlRZUEVTLlRNUyk7XHJcbiAgICAgICAgY29uc3QgQ0FDSFYgPSB0aGlzLiNwcm9wZXJ0eS5nZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuQ0FDSFYpO1xyXG4gICAgICAgIGNvbnN0IENUTFQgPSB0aGlzLiNwcm9wZXJ0eS5nZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuQ1RMVCk7XHJcbiAgICAgICAgY29uc3QgQ0VWVCA9IHRoaXMuI3Byb3BlcnR5LmdldCh0aGlzLiNwcm9wZXJ0eS5UWVBFUy5DRVZUKTtcclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxUYWxlbnQgPSB0aGlzLiN0YWxlbnQuY291bnQoKTtcclxuICAgICAgICBjb25zdCB0b3RhbEV2ZW50ID0gdGhpcy4jZXZlbnQuY291bnQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZXM6IFRNUyxcclxuICAgICAgICAgICAgYWNoaWV2ZW1lbnQ6IENBQ0hWLFxyXG4gICAgICAgICAgICB0YWxlbnRSYXRlOiBDVExUIC8gdG90YWxUYWxlbnQsXHJcbiAgICAgICAgICAgIGV2ZW50UmF0ZTogQ0VWVCAvIHRvdGFsRXZlbnQsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCB0aW1lcygpIHsgcmV0dXJuIHRoaXMuI3Byb3BlcnR5Py5nZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuVE1TKSB8fCAwOyB9XHJcbiAgICBzZXQgdGltZXModikge1xyXG4gICAgICAgIHRoaXMuI3Byb3BlcnR5Py5zZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuVE1TLCB2KSB8fCAwO1xyXG4gICAgICAgIHRoaXMuI2FjaGlldmVtZW50LmFjaGlldmUoXHJcbiAgICAgICAgICAgIHRoaXMuI2FjaGlldmVtZW50Lk9wcG9ydHVuaXR5LkVORCxcclxuICAgICAgICAgICAgdGhpcy4jcHJvcGVydHlcclxuICAgICAgICApXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpZmU7XHJcblxyXG4iLCJpbXBvcnQgeyBzdW1tYXJ5IH0gZnJvbSAnLi9mdW5jdGlvbnMvc3VtbWFyeS5qcyc7XHJcbmltcG9ydCB7IGdldEdyYWRlIH0gZnJvbSAnLi9mdW5jdGlvbnMvYWRkaXRpb24uanMnO1xyXG5pbXBvcnQgTGlmZSBmcm9tICcuL2xpZmUuanMnO1xyXG5cclxuY2xhc3MgQXBwe1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLiNsaWZlID0gbmV3IExpZmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAjbGlmZTtcclxuICAgICNwYWdlcztcclxuICAgICNjdXJyZW50UGFnZTtcclxuICAgICN0YWxlbnRTZWxlY3RlZCA9IG5ldyBTZXQoKTtcclxuICAgICN0b3RhbE1heD0yMDtcclxuICAgICNpc0VuZCA9IGZhbHNlO1xyXG4gICAgI3NlbGVjdGVkRXh0ZW5kVGFsZW50ID0gbnVsbDtcclxuICAgICNoaW50VGltZW91dDtcclxuICAgICNzcGVjaWFsdGhhbmtzO1xyXG5cclxuICAgIGFzeW5jIGluaXRpYWwoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0UGFnZXMoKTtcclxuICAgICAgICB0aGlzLnN3aXRjaCgnbG9hZGluZycpO1xyXG4gICAgICAgIGNvbnN0IFssc3BlY2lhbHRoYW5rc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgICAgIHRoaXMuI2xpZmUuaW5pdGlhbCgpLFxyXG4gICAgICAgICAgICBqc29uKCdzcGVjaWFsdGhhbmtzJylcclxuICAgICAgICBdKTtcclxuICAgICAgICB0aGlzLiNzcGVjaWFsdGhhbmtzID0gc3BlY2lhbHRoYW5rcztcclxuICAgICAgICB0aGlzLnN3aXRjaCgnaW5kZXgnKTtcclxuICAgICAgICBnbG9iYWxUaGlzLm9uZXJyb3IgPSAoZXZlbnQsIHNvdXJjZSwgbGluZW5vLCBjb2xubywgZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oaW50KGBbRVJST1JdIGF0ICgke3NvdXJjZX06JHtsaW5lbm99OiR7Y29sbm99KVxcblxcbiR7ZXJyb3I/LnN0YWNrfHxlcnJvcnx8J3Vua25vdyBFcnJvcid9YCwgJ2Vycm9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGtleURvd25DYWxsYmFjayA9IChrZXlib2FyZEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LndoaWNoID09PSAxMyB8fCBrZXlib2FyZEV2ZW50LmtleUNvZGUgPT09IDEzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVzc0VudGVyRnVuYyA9IHRoaXMuI3BhZ2VzW3RoaXMuI2N1cnJlbnRQYWdlXT8ucHJlc3NFbnRlcjtcclxuICAgICAgICAgICAgICAgIHByZXNzRW50ZXJGdW5jICYmIHR5cGVvZiBwcmVzc0VudGVyRnVuYyA9PT0gJ2Z1bmN0aW9uJyAmJiBwcmVzc0VudGVyRnVuYygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdsb2JhbFRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleURvd25DYWxsYmFjayk7XHJcbiAgICAgICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5RG93bkNhbGxiYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0UGFnZXMoKSB7XHJcblxyXG4gICAgICAgIC8vIExvYWRpbmdcclxuICAgICAgICBjb25zdCBsb2FkaW5nUGFnZSA9ICQoYFxyXG4gICAgICAgIDxkaXYgaWQ9XCJtYWluXCI+XHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAg5Lq655Sf6YeN5byA5qih5ouf5ZmoPGJyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZToxLjVyZW07IGZvbnQtd2VpZ2h0Om5vcm1hbDtcIj7liqDovb3kuK0uLi48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCk7XHJcblxyXG4gICAgICAgIC8vIEluZGV4XHJcbiAgICAgICAgY29uc3QgaW5kZXhQYWdlID0gJChgXHJcbiAgICAgICAgPGRpdiBpZD1cIm1haW5cIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImFjaGlldmVtZW50XCI+5oiQ5bCxPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJzcGVjaWFsdGhhbmtzXCI+54m55Yir5oSf6LCiPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJ0aGVtZVRvZ2dsZUJ0blwiPum7kTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2IGlkPVwidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgIOS6uueUn+mHjeW8gOaooeaLn+WZqDxicj5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MS41cmVtOyBmb250LXdlaWdodDpub3JtYWw7XCI+6L+Z5Z6D5Zy+5Lq655Sf5LiA56eS5Lmf5LiN5oOz5ZGG5LqGPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwicmVzdGFydFwiIGNsYXNzPVwibWFpbmJ0blwiPjxzcGFuIGNsYXNzPVwiaWNvbmZvbnRcIj4mI3hlNmE3Ozwvc3Bhbj7nq4vljbPph43lvIA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGEgaWQ9XCJkaXNjb3JkXCIgaHJlZj1cImh0dHBzOi8vZGlzY29yZC5nZy9VM3FyZjQ5Tk1RXCIgc3R5bGU9XCJ6LWluZGV4OiA5OTk5O1wiIGFyaWEtbGFiZWw9XCJDaGF0IG9uIERpc2NvcmRcIj48YnV0dG9uIGNsYXNzPVwiZGlzY29yZC1idG5cIj48c3ZnIHdpZHRoPVwiNTAlXCIgaGVpZ2h0PVwiNTVcIiB2aWV3Qm94PVwiMCAwIDcxIDU1XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMClcIj48cGF0aCBkPVwiTTYwLjEwNDUgNC44OTc4QzU1LjU3OTIgMi44MjE0IDUwLjcyNjUgMS4yOTE2IDQ1LjY1MjcgMC40MTU0MkM0NS41NjAzIDAuMzk4NTEgNDUuNDY4IDAuNDQwNzY5IDQ1LjQyMDQgMC41MjUyODlDNDQuNzk2MyAxLjYzNTMgNDQuMTA1IDMuMDgzNCA0My42MjA5IDQuMjIxNkMzOC4xNjM3IDMuNDA0NiAzMi43MzQ1IDMuNDA0NiAyNy4zODkyIDQuMjIxNkMyNi45MDUgMy4wNTgxIDI2LjE4ODYgMS42MzUzIDI1LjU2MTcgMC41MjUyODlDMjUuNTE0MSAwLjQ0MzU4OSAyNS40MjE4IDAuNDAxMzMgMjUuMzI5NCAwLjQxNTQyQzIwLjI1ODQgMS4yODg4IDE1LjQwNTcgMi44MTg2IDEwLjg3NzYgNC44OTc4QzEwLjgzODQgNC45MTQ3IDEwLjgwNDggNC45NDI5IDEwLjc4MjUgNC45Nzk1QzEuNTc3OTUgMTguNzMwOSAtMC45NDM1NjEgMzIuMTQ0MyAwLjI5MzQwOCA0NS4zOTE0QzAuMjk5MDA1IDQ1LjQ1NjIgMC4zMzUzODYgNDUuNTE4MiAwLjM4NTc2MSA0NS41NTc2QzYuNDU4NjYgNTAuMDE3NCAxMi4zNDEzIDUyLjcyNDkgMTguMTE0NyA1NC41MTk1QzE4LjIwNzEgNTQuNTQ3NyAxOC4zMDUgNTQuNTEzOSAxOC4zNjM4IDU0LjQzNzhDMTkuNzI5NSA1Mi41NzI4IDIwLjk0NjkgNTAuNjA2MyAyMS45OTA3IDQ4LjUzODNDMjIuMDUyMyA0OC40MTcyIDIxLjk5MzUgNDguMjczNSAyMS44Njc2IDQ4LjIyNTZDMTkuOTM2NiA0Ny40OTMxIDE4LjA5NzkgNDYuNiAxNi4zMjkyIDQ1LjU4NThDMTYuMTg5MyA0NS41MDQxIDE2LjE3ODEgNDUuMzA0IDE2LjMwNjggNDUuMjA4MkMxNi42NzkgNDQuOTI5MyAxNy4wNTEzIDQ0LjYzOTEgMTcuNDA2NyA0NC4zNDYxQzE3LjQ3MSA0NC4yOTI2IDE3LjU2MDYgNDQuMjgxMyAxNy42MzYyIDQ0LjMxNTFDMjkuMjU1OCA0OS42MjAyIDQxLjgzNTQgNDkuNjIwMiA1My4zMTc5IDQ0LjMxNTFDNTMuMzkzNSA0NC4yNzg1IDUzLjQ4MzEgNDQuMjg5OCA1My41NTAyIDQ0LjM0MzNDNTMuOTA1NyA0NC42MzYzIDU0LjI3NzkgNDQuOTI5MyA1NC42NTI5IDQ1LjIwODJDNTQuNzgxNiA0NS4zMDQgNTQuNzczMiA0NS41MDQxIDU0LjYzMzMgNDUuNTg1OEM1Mi44NjQ2IDQ2LjYxOTcgNTEuMDI1OSA0Ny40OTMxIDQ5LjA5MjEgNDguMjIyOEM0OC45NjYyIDQ4LjI3MDcgNDguOTEwMiA0OC40MTcyIDQ4Ljk3MTggNDguNTM4M0M1MC4wMzggNTAuNjAzNCA1MS4yNTU0IDUyLjU2OTkgNTIuNTk1OSA1NC40MzVDNTIuNjUxOSA1NC41MTM5IDUyLjc1MjYgNTQuNTQ3NyA1Mi44NDUgNTQuNTE5NUM1OC42NDY0IDUyLjcyNDkgNjQuNTI5IDUwLjAxNzQgNzAuNjAxOSA0NS41NTc2QzcwLjY1NTEgNDUuNTE4MiA3MC42ODg3IDQ1LjQ1OSA3MC42OTQzIDQ1LjM5NDJDNzIuMTc0NyAzMC4wNzkxIDY4LjIxNDcgMTYuNzc1NyA2MC4xOTY4IDQuOTgyM0M2MC4xNzcyIDQuOTQyOSA2MC4xNDM3IDQuOTE0NyA2MC4xMDQ1IDQuODk3OFpNMjMuNzI1OSAzNy4zMjUzQzIwLjIyNzYgMzcuMzI1MyAxNy4zNDUxIDM0LjExMzYgMTcuMzQ1MSAzMC4xNjkzQzE3LjM0NTEgMjYuMjI1IDIwLjE3MTcgMjMuMDEzMyAyMy43MjU5IDIzLjAxMzNDMjcuMzA4IDIzLjAxMzMgMzAuMTYyNiAyNi4yNTMyIDMwLjEwNjYgMzAuMTY5M0MzMC4xMDY2IDM0LjExMzYgMjcuMjggMzcuMzI1MyAyMy43MjU5IDM3LjMyNTNaTTQ3LjMxNzggMzcuMzI1M0M0My44MTk2IDM3LjMyNTMgNDAuOTM3MSAzNC4xMTM2IDQwLjkzNzEgMzAuMTY5M0M0MC45MzcxIDI2LjIyNSA0My43NjM2IDIzLjAxMzMgNDcuMzE3OCAyMy4wMTMzQzUwLjkgMjMuMDEzMyA1My43NTQ1IDI2LjI1MzIgNTMuNjk4NiAzMC4xNjkzQzUzLjY5ODYgMzQuMTEzNiA1MC45IDM3LjMyNTMgNDcuMzE3OCAzNy4zMjUzWlwiIGZpbGw9XCIjZmZmZmZmXCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9XCJjbGlwMFwiPjxyZWN0IHdpZHRoPVwiNzFcIiBoZWlnaHQ9XCI1NVwiIGZpbGw9XCJ3aGl0ZVwiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz5DSEFUPC9idXR0b24+PHN0eWxlPi5kaXNjb3JkLWJ0biB7cG9zaXRpb246IGZpeGVkO2JvdHRvbTogMC41cmVtO2xlZnQ6IDAuNXJlbTtiYWNrZ3JvdW5kLWNvbG9yOiAjNTg2NUYyO3BhZGRpbmc6IDAuN3JlbTtoZWlnaHQ6IGF1dG87Y29sb3I6IHdoaXRlO3RleHQtYWxpZ246IHJpZ2h0O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyOiBub25lO3dpZHRoOiA2LjVyZW07Zm9udC1zaXplOiAxcmVtO2JvcmRlci1yYWRpdXM6IDRweDt9LmRpc2NvcmQtYnRuIHN2ZyB7aGVpZ2h0OiAxLjVyZW07cG9zaXRpb246IGFic29sdXRlO3RvcDogNTAlO2xlZnQ6IDA7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO30uZGlzY29yZC1idG46aG92ZXIgc3Zne2FuaW1hdGlvbjpkaXNjb3JkLXdhdmUgNTYwbXMgZWFzZS1pbi1vdXQ7fUBrZXlmcmFtZXMgZGlzY29yZC13YXZlezAlLDEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgcm90YXRlKDApfTIwJSw2MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgcm90YXRlKC0yNWRlZyl9NDAlLDgwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoMTBkZWcpfX1AbWVkaWEgKG1heC13aWR0aDo1MDBweCl7LmRpc2NvcmQtYnRuOmhvdmVyIHN2Z3thbmltYXRpb246bm9uZX0uZGlzY29yZC1idG4gc3Zne2FuaW1hdGlvbjpkaXNjb3JkLXdhdmUgNTYwbXMgZWFzZS1pbi1vdXR9fTwvc3R5bGU+PC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGApO1xyXG5cclxuICAgICAgICAvLyBJbml0IHRoZW1lXHJcbiAgICAgICAgdGhpcy5zZXRUaGVtZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGhlbWUnKSlcclxuXHJcbiAgICAgICAgaW5kZXhQYWdlXHJcbiAgICAgICAgICAgIC5maW5kKCcjcmVzdGFydCcpXHJcbiAgICAgICAgICAgIC5jbGljaygoKT0+dGhpcy5zd2l0Y2goJ3RhbGVudCcpKTtcclxuXHJcbiAgICAgICAgaW5kZXhQYWdlXHJcbiAgICAgICAgICAgIC5maW5kKCcjYWNoaWV2ZW1lbnQnKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PnRoaXMuc3dpdGNoKCdhY2hpZXZlbWVudCcpKTtcclxuXHJcbiAgICAgICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RoZW1lJykgPT0gJ2xpZ2h0Jykge1xyXG4gICAgICAgICAgICBpbmRleFBhZ2UuZmluZCgnI3RoZW1lVG9nZ2xlQnRuJykudGV4dCgn6buRJylcclxuICAgICAgICB9IGVsc2V7XHJcbiAgICAgICAgICAgIGluZGV4UGFnZS5maW5kKCcjdGhlbWVUb2dnbGVCdG4nKS50ZXh0KCfnmb0nKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5kZXhQYWdlXHJcbiAgICAgICAgICAgIC5maW5kKFwiI3RoZW1lVG9nZ2xlQnRuXCIpXHJcbiAgICAgICAgICAgIC5jbGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGhlbWUnKSA9PSAnbGlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RoZW1lJywgJ2RhcmsnKTtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleFBhZ2UuZmluZCgnI3RoZW1lVG9nZ2xlQnRuJykudGV4dCgn55m9JylcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RoZW1lJywgJ2xpZ2h0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhQYWdlLmZpbmQoJyN0aGVtZVRvZ2dsZUJ0bicpLnRleHQoJ+m7kScpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUaGVtZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGhlbWUnKSlcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGluZGV4UGFnZVxyXG4gICAgICAgICAgICAuZmluZCgnI3NwZWNpYWx0aGFua3MnKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PnRoaXMuc3dpdGNoKCdzcGVjaWFsdGhhbmtzJykpO1xyXG5cclxuICAgICAgICBjb25zdCBzcGVjaWFsVGhhbmtzUGFnZSA9ICQoYFxyXG4gICAgICAgIDxkaXYgaWQ9XCJtYWluXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJzcGVjaWFsdGhhbmtzXCI+6L+U5ZuePC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJzcHRoeFwiPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZzFcIj48L3VsPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZzJcIj48L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNwb25zb3JcIiBvbmNsaWNrPVwiZ2xvYmFsVGhpcy5vcGVuKCdodHRwczovL2FmZGlhbi5uZXQvQExpZmVSZXN0YXJ0JylcIiBzdHlsZT1cImJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywjOTQ2Y2U2LCM3ZTVmZDkpOyBsZWZ0OmF1dG87IHJpZ2h0OjUwJTsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTJyZW0sLTUwJSk7XCI+5omT6LWP562W5YiSKOeIseWPkeeUtSk8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNwb25zb3JcIiBvbmNsaWNrPVwiZ2xvYmFsVGhpcy5vcGVuKCdodHRwczovL2R1bi5taWFuYmFvZHVvLmNvbS9Admlja3NjYXJsZXQnKVwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjojYzY5OyBsZWZ0OjUwJTsgcmlnaHQ6YXV0bzsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMnJlbSwtNTAlKTtcIj7miZPotY/nqIvluo8o6aG/6aG/6aWtKTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGApO1xyXG5cclxuICAgICAgICBzcGVjaWFsVGhhbmtzUGFnZVxyXG4gICAgICAgICAgICAuZmluZCgnI3NwZWNpYWx0aGFua3MnKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PnRoaXMuc3dpdGNoKCdpbmRleCcpKTtcclxuXHJcbiAgICAgICAgY29uc3QgYWNoaWV2ZW1lbnRQYWdlID0gJChgXHJcbiAgICAgICAgPGRpdiBpZD1cIm1haW5cIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInNwZWNpYWx0aGFua3NcIj7ov5Tlm548L2J1dHRvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPue7n+iuoTwvc3Bhbj5cclxuICAgICAgICAgICAgPHVsIGlkPVwidG90YWxcIj48L3VsPlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cInBhZGRpbmc6MC4yNXJlbTsgbWFyZ2luOiAwLjVyZW0gMDsgYm9yZGVyOiBub25lOyBiYWNrZ3JvdW5kOiAjY2NjO1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPuaIkOWwsTwvc3Bhbj5cclxuICAgICAgICAgICAgPHVsIGlkPVwiYWNoaWV2ZW1lbnRzXCI+PC91bD5cclxuICAgICAgICBgKVxyXG5cclxuICAgICAgICBhY2hpZXZlbWVudFBhZ2VcclxuICAgICAgICAgICAgLmZpbmQoJyNzcGVjaWFsdGhhbmtzJylcclxuICAgICAgICAgICAgLmNsaWNrKCgpPT50aGlzLnN3aXRjaCgnaW5kZXgnKSk7XHJcblxyXG4gICAgICAgIC8vIFRhbGVudFxyXG4gICAgICAgIGNvbnN0IHRhbGVudFBhZ2UgPSAkKGBcclxuICAgICAgICA8ZGl2IGlkPVwibWFpblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjZyZW1cIj7lpKnotYvmir3ljaE8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInJhbmRvbVwiIGNsYXNzPVwibWFpbmJ0blwiIHN0eWxlPVwicG9zaXRpb246IGZpeGVkOyB0b3A6IDUwJTsgbGVmdDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcIlwiPjEw6L+e5oq977yBPC9idXR0b24+XHJcbiAgICAgICAgICAgIDx1bCBpZD1cInRhbGVudHNcIiBjbGFzcz1cInNlbGVjdGxpc3RcIj48L3VsPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwibmV4dFwiIGNsYXNzPVwibWFpbmJ0blwiPuivt+mAieaLqTPkuKo8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBgKTtcclxuXHJcbiAgICAgICAgY29uc3QgY3JlYXRlVGFsZW50ID0gKHsgZ3JhZGUsIG5hbWUsIGRlc2NyaXB0aW9uIH0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICQoYDxsaSBjbGFzcz1cImdyYWRlJHtncmFkZX1iXCI+JHtuYW1lfe+8iCR7ZGVzY3JpcHRpb25977yJPC9saT5gKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRhbGVudFBhZ2VcclxuICAgICAgICAgICAgLmZpbmQoJyNyYW5kb20nKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PntcclxuICAgICAgICAgICAgICAgIHRhbGVudFBhZ2UuZmluZCgnI3JhbmRvbScpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVsID0gdGFsZW50UGFnZS5maW5kKCcjdGFsZW50cycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jbGlmZS50YWxlbnRSYW5kb20oKVxyXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKHRhbGVudD0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaSA9IGNyZWF0ZVRhbGVudCh0YWxlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bC5hcHBlbmQobGkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaS5jbGljaygoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGkuaGFzQ2xhc3MoJ3NlbGVjdGVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI3RhbGVudFNlbGVjdGVkLmRlbGV0ZSh0YWxlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuI3RhbGVudFNlbGVjdGVkLnNpemU8Mykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWxlbnRQYWdlLmZpbmQoJyNuZXh0JykudGV4dCgn6K+36YCJ5oupM+S4qicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLiN0YWxlbnRTZWxlY3RlZC5zaXplPT0zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGludCgn5Y+q6IO96YCJM+S4quWkqei1iycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGNsdXNpdmUgPSB0aGlzLiNsaWZlLmV4Y2x1c2l2ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLiN0YWxlbnRTZWxlY3RlZCkubWFwKCh7aWR9KT0+aWQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWxlbnQuaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGV4Y2x1c2l2ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCB7IG5hbWUsIGlkIH0gb2YgdGhpcy4jdGFsZW50U2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlkID09IGV4Y2x1c2l2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGludChg5LiO5bey6YCJ5oup55qE5aSp6LWL44CQJHtuYW1lfeOAkeWGsueqgWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI3RhbGVudFNlbGVjdGVkLmFkZCh0YWxlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuI3RhbGVudFNlbGVjdGVkLnNpemU9PTMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFsZW50UGFnZS5maW5kKCcjbmV4dCcpLnRleHQoJ+W8gOWni+aWsOS6uueUnycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRhbGVudFBhZ2UuZmluZCgnI25leHQnKS5zaG93KClcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRhbGVudFBhZ2VcclxuICAgICAgICAgICAgLmZpbmQoJyNuZXh0JylcclxuICAgICAgICAgICAgLmNsaWNrKCgpPT57XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiN0YWxlbnRTZWxlY3RlZC5zaXplIT0zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaW50KCfor7fpgInmi6kz5Liq5aSp6LWLJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGFsZW50UGFnZS5maW5kKCcjbmV4dCcpLmhpZGUoKVxyXG4gICAgICAgICAgICAgICAgdGhpcy4jdG90YWxNYXggPSAyMCArIHRoaXMuI2xpZmUuZ2V0VGFsZW50QWxsb2NhdGlvbkFkZGl0aW9uKEFycmF5LmZyb20odGhpcy4jdGFsZW50U2VsZWN0ZWQpLm1hcCgoe2lkfSk9PmlkKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN3aXRjaCgncHJvcGVydHknKTtcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgLy8gUHJvcGVydHlcclxuICAgICAgICAvLyBoaW50IG9mIGV4dGVuc2lvbiB0b2Jlcm1vcnkuZXM2LXN0cmluZy1odG1sXHJcbiAgICAgICAgY29uc3QgcHJvcGVydHlQYWdlID0gJCgvKmh0bWwqL2BcclxuICAgICAgICA8ZGl2IGlkPVwibWFpblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjZyZW1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+6LCD5pW05Yid5aeL5bGe5oCnPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidG90YWxcIiBzdHlsZT1cImZvbnQtc2l6ZToxcmVtOyBmb250LXdlaWdodDpub3JtYWw7XCI+5Y+v55So5bGe5oCn54K577yaMDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHVsIGlkPVwicHJvcGVydHlBbGxvY2F0aW9uXCIgY2xhc3M9XCJwcm9waW5pdGlhbFwiPjwvdWw+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cInNlbGVjdGxpc3RcIiBpZD1cInRhbGVudFNlbGVjdGVkVmlld1wiPjwvdWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tYXJlYVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInJhbmRvbVwiIGNsYXNzPVwibWFpbmJ0blwiPumaj+acuuWIhumFjTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInN0YXJ0XCIgY2xhc3M9XCJtYWluYnRuXCI+5byA5aeL5paw5Lq655SfPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGApO1xyXG4gICAgICAgIHByb3BlcnR5UGFnZS5tb3VudGVkID0gKCk9PntcclxuICAgICAgICAgICAgcHJvcGVydHlQYWdlXHJcbiAgICAgICAgICAgIC5maW5kKCcjdGFsZW50U2VsZWN0ZWRWaWV3JykuYXBwZW5kKFxyXG4gICAgICAgICAgICAgICAgYDxsaT7lt7LpgInlpKnotYs8L2xpPmAgK1xyXG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLiN0YWxlbnRTZWxlY3RlZClcclxuICAgICAgICAgICAgICAgIC5tYXAoKHtuYW1lLGRlc2NyaXB0aW9ufSk9PmA8bGkgY2xhc3M9XCJncmFkZTBiXCI+JHtuYW1lfSgke2Rlc2NyaXB0aW9ufSk8L2xpPmApXHJcbiAgICAgICAgICAgICAgICAuam9pbignJylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBncm91cHMgPSB7fTtcclxuICAgICAgICBjb25zdCB0b3RhbCA9ICgpPT57XHJcbiAgICAgICAgICAgIGxldCB0ID0gMDtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHR5cGUgaW4gZ3JvdXBzKVxyXG4gICAgICAgICAgICAgICAgdCArPSBncm91cHNbdHlwZV0uZ2V0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmcmVzaFRvdGFsID0gKCk9PntcclxuICAgICAgICAgICAgcHJvcGVydHlQYWdlLmZpbmQoJyN0b3RhbCcpLnRleHQoYOWPr+eUqOWxnuaAp+eCue+8miR7dGhpcy4jdG90YWxNYXggLSB0b3RhbCgpfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBnZXRCdG5Hcm91cHMgPSAobmFtZSwgbWluLCBtYXgpPT57XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gJChgPGxpPiR7bmFtZX0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L2xpPmApO1xyXG4gICAgICAgICAgICBjb25zdCBidG5TdWIgPSAkKGA8c3BhbiBjbGFzcz1cImljb25mb250IHByb3BidG5cIj4mI3hlNmE1Ozwvc3Bhbj5gKTtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXRCb3ggPSAkKGA8aW5wdXQgdmFsdWU9XCIwXCI+YCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ0bkFkZCA9ICQoYDxzcGFuIGNsYXNzPVwiaWNvbmZvbnQgcHJvcGJ0blwiPiYjeGU2YTY7PC9zcGFuPmApO1xyXG4gICAgICAgICAgICBncm91cC5hcHBlbmQoYnRuU3ViKTtcclxuICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKGlucHV0Qm94KTtcclxuICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKGJ0bkFkZCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBsaW1pdCA9IHY9PntcclxuICAgICAgICAgICAgICAgIHYgPSBOdW1iZXIodil8fDA7XHJcbiAgICAgICAgICAgICAgICB2ID0gTWF0aC5yb3VuZCh2KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2IDwgbWluID8gbWluIDogKFxyXG4gICAgICAgICAgICAgICAgICAgIHYgPiBtYXggPyBtYXggOiB2XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZ2V0ID0gKCk9Pk51bWJlcihpbnB1dEJveC52YWwoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldCA9IHY9PntcclxuICAgICAgICAgICAgICAgIGlucHV0Qm94LnZhbChsaW1pdCh2KSk7XHJcbiAgICAgICAgICAgICAgICBmcmVzaFRvdGFsKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnRuQWRkLmNsaWNrKCgpPT57XHJcbiAgICAgICAgICAgICAgICBpZih0b3RhbCgpID49IHRoaXMuI3RvdGFsTWF4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaW50KCfmsqHmnInlj6/liIbphY3nmoTngrnmlbDkuoYnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzZXQoZ2V0KCkrMSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBidG5TdWIuY2xpY2soKCk9PnNldChnZXQoKS0xKSk7XHJcbiAgICAgICAgICAgIGlucHV0Qm94Lm9uKCdpbnB1dCcsICgpPT57XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gdG90YWwoKTtcclxuICAgICAgICAgICAgICAgIGxldCB2YWwgPSBnZXQoKTtcclxuICAgICAgICAgICAgICAgIGlmKHQgPiB0aGlzLiN0b3RhbE1heCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbCAtPSB0IC0gdGhpcy4jdG90YWxNYXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YWwgPSBsaW1pdCh2YWwpO1xyXG4gICAgICAgICAgICAgICAgaWYodmFsICE9IGlucHV0Qm94LnZhbCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0KHZhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmcmVzaFRvdGFsKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4ge2dyb3VwLCBnZXQsIHNldH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBncm91cHMuQ0hSID0gZ2V0QnRuR3JvdXBzKFwi6aKc5YC8XCIsIDAsIDEwKTsgLy8g6aKc5YC8IGNoYXJtIENIUlxyXG4gICAgICAgIGdyb3Vwcy5JTlQgPSBnZXRCdG5Hcm91cHMoXCLmmbrliptcIiwgMCwgMTApOyAvLyDmmbrlipsgaW50ZWxsaWdlbmNlIElOVFxyXG4gICAgICAgIGdyb3Vwcy5TVFIgPSBnZXRCdG5Hcm91cHMoXCLkvZPotKhcIiwgMCwgMTApOyAvLyDkvZPotKggc3RyZW5ndGggU1RSXHJcbiAgICAgICAgZ3JvdXBzLk1OWSA9IGdldEJ0bkdyb3VwcyhcIuWutuWig1wiLCAwLCAxMCk7IC8vIOWutuWigyBtb25leSBNTllcclxuXHJcbiAgICAgICAgY29uc3QgdWwgPSBwcm9wZXJ0eVBhZ2UuZmluZCgnI3Byb3BlcnR5QWxsb2NhdGlvbicpO1xyXG5cclxuICAgICAgICBmb3IoY29uc3QgdHlwZSBpbiBncm91cHMpIHtcclxuICAgICAgICAgICAgdWwuYXBwZW5kKGdyb3Vwc1t0eXBlXS5ncm91cCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcm9wZXJ0eVBhZ2VcclxuICAgICAgICAgICAgLmZpbmQoJyNyYW5kb20nKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PntcclxuICAgICAgICAgICAgICAgIGxldCB0ID0gdGhpcy4jdG90YWxNYXg7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBbMTAsIDEwLCAxMCwgMTBdO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUodD4wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViID0gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogKE1hdGgubWluKHQsIDEwKSAtIDEpKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUodHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KSAlIDQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFycltzZWxlY3RdIC0gc3ViIDwwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyW3NlbGVjdF0gLT0gc3ViO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0IC09IHN1YjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZ3JvdXBzLkNIUi5zZXQoMTAgLSBhcnJbMF0pO1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBzLklOVC5zZXQoMTAgLSBhcnJbMV0pO1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBzLlNUUi5zZXQoMTAgLSBhcnJbMl0pO1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBzLk1OWS5zZXQoMTAgLSBhcnJbM10pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcHJvcGVydHlQYWdlXHJcbiAgICAgICAgICAgIC5maW5kKCcjc3RhcnQnKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PntcclxuICAgICAgICAgICAgICAgIGlmKHRvdGFsKCkgPCB0aGlzLiN0b3RhbE1heCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGludChg5L2g6L+Y5pyJJHt0aGlzLiN0b3RhbE1heC10b3RhbCgpfeWxnuaAp+eCueayoeacieWIhumFjeWujGApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG90YWwoKSA+IHRoaXMuI3RvdGFsTWF4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaW50KGDkvaDlpJrkvb/nlKjkuoYke3RvdGFsKCkgLSB0aGlzLiN0b3RhbE1heH3lsZ7mgKfngrlgKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNsaWZlLnJlc3RhcnQoe1xyXG4gICAgICAgICAgICAgICAgICAgIENIUjogZ3JvdXBzLkNIUi5nZXQoKSxcclxuICAgICAgICAgICAgICAgICAgICBJTlQ6IGdyb3Vwcy5JTlQuZ2V0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgU1RSOiBncm91cHMuU1RSLmdldCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIE1OWTogZ3JvdXBzLk1OWS5nZXQoKSxcclxuICAgICAgICAgICAgICAgICAgICBTUFI6IDUsXHJcbiAgICAgICAgICAgICAgICAgICAgVExUOiBBcnJheS5mcm9tKHRoaXMuI3RhbGVudFNlbGVjdGVkKS5tYXAoKHtpZH0pPT5pZCksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3dpdGNoKCd0cmFqZWN0b3J5Jyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNwYWdlcy50cmFqZWN0b3J5LmJvcm4oKTtcclxuICAgICAgICAgICAgICAgIC8vICQoZG9jdW1lbnQpLmtleWRvd24oZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGlmKGV2ZW50LndoaWNoID09IDMyIHx8IGV2ZW50LndoaWNoID09IDEzKXtcclxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgJCgnI2xpZmVUcmFqZWN0b3J5JykuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyB9KVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gVHJhamVjdG9yeVxyXG4gICAgICAgIGNvbnN0IHRyYWplY3RvcnlQYWdlID0gJChgXHJcbiAgICAgICAgPGRpdiBpZD1cIm1haW5cIj5cclxuICAgICAgICAgICAgPHVsIGlkPVwibGlmZVByb3BlcnR5XCIgY2xhc3M9XCJsaWZlUHJvcGVydHlcIj48L3VsPlxyXG4gICAgICAgICAgICA8dWwgaWQ9XCJsaWZlVHJhamVjdG9yeVwiIGNsYXNzPVwibGlmZVRyYWplY3RvcnlcIj48L3VsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWFyZWFcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJzdW1tYXJ5XCIgY2xhc3M9XCJtYWluYnRuXCI+5Lq655Sf5oC757uTPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiZG9tVG9JbWFnZVwiIGNsYXNzPVwibWFpbmJ0blwiPuS6uueUn+WbnuaUvjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvbVRvSW1hZ2Uyd3hcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiXCIgaWQ9XCJlbmRJbWFnZVwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGApO1xyXG5cclxuICAgICAgICB0cmFqZWN0b3J5UGFnZVxyXG4gICAgICAgICAgICAuZmluZCgnI2xpZmVUcmFqZWN0b3J5JylcclxuICAgICAgICAgICAgLmNsaWNrKCgpPT57XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLiNpc0VuZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhamVjdG9yeSA9IHRoaXMuI2xpZmUubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBhZ2UsIGNvbnRlbnQsIGlzRW5kIH0gPSB0cmFqZWN0b3J5O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGkgPSAkKGA8bGk+PHNwYW4+JHthZ2V95bKB77yaPC9zcGFuPjxzcGFuPiR7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudC5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh7dHlwZSwgZGVzY3JpcHRpb24sIGdyYWRlLCBuYW1lLCBwb3N0RXZlbnR9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2godHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RMVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBg5aSp6LWL44CQJHtuYW1lfeOAkeWPkeWKqO+8miR7ZGVzY3JpcHRpb259YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdFVlQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb24gKyAocG9zdEV2ZW50P2A8YnI+JHtwb3N0RXZlbnR9YDonJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApLmpvaW4oJzxicj4nKVxyXG4gICAgICAgICAgICAgICAgfTwvc3Bhbj48L2xpPmApO1xyXG4gICAgICAgICAgICAgICAgbGkuYXBwZW5kVG8oJyNsaWZlVHJhamVjdG9yeScpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNsaWZlVHJhamVjdG9yeVwiKS5zY3JvbGxUb3AoJChcIiNsaWZlVHJhamVjdG9yeVwiKVswXS5zY3JvbGxIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgaWYoaXNFbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS51bmJpbmQoXCJrZXlkb3duXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2lzRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFqZWN0b3J5UGFnZS5maW5kKCcjc3VtbWFyeScpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0cmFqZWN0b3J5UGFnZS5maW5kKCcjZG9tVG9JbWFnZScpLnNob3coKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5aaC5pyq5q275Lqh77yM5pu05paw5pWw5YC8XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXMgaWYgbm90IGRpZSB5ZXRcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuI2xpZmUuZ2V0TGFzdFJlY29yZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjbGlmZVByb3BlcnR5XCIpLmh0bWwoYFxyXG4gICAgICAgICAgICAgICAgICAgIDxsaT48c3Bhbj7popzlgLw8L3NwYW4+PHNwYW4+JHtwcm9wZXJ0eS5DSFJ9PC9zcGFuPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuPuaZuuWKmzwvc3Bhbj48c3Bhbj4ke3Byb3BlcnR5LklOVH08L3NwYW4+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4+5L2T6LSoPC9zcGFuPjxzcGFuPiR7cHJvcGVydHkuU1RSfTwvc3Bhbj48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaT48c3Bhbj7lrrblooM8L3NwYW4+PHNwYW4+JHtwcm9wZXJ0eS5NTll9PC9zcGFuPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuPuW/q+S5kDwvc3Bhbj48c3Bhbj4ke3Byb3BlcnR5LlNQUn08L3NwYW4+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICBgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gaHRtbDJjYW52YXNcclxuICAgICAgICB0cmFqZWN0b3J5UGFnZVxyXG4gICAgICAgICAgICAuZmluZCgnI2RvbVRvSW1hZ2UnKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PntcclxuICAgICAgICAgICAgICAgICQoXCIjbGlmZVRyYWplY3RvcnlcIikuYWRkQ2xhc3MoXCJkZWxldGVGaXhlZFwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgZG9tdG9pbWFnZS50b0pwZWcoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpZmVUcmFqZWN0b3J5JykpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRhdGFVcmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsuZG93bmxvYWQgPSAn5oiR55qE5Lq655Sf5Zue5pS+LmpwZWcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSBkYXRhVXJsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjbGlmZVRyYWplY3RvcnlcIikucmVtb3ZlQ2xhc3MoXCJkZWxldGVGaXhlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5b6u5L+h5YaF572u5rWP6KeI5Zmo77yM5pi+56S65Zu+54mH77yM6ZyA6KaB55So5oi35Y2V54us5L+d5a2YXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHVhLm1hdGNoKC9NaWNyb01lc3Nlbmdlci9pKT09XCJtaWNyb21lc3NlbmdlclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZW5kSW1hZ2UnKS5hdHRyKCdzcmMnLCBkYXRhVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmhpZGUoKTtcclxuXHJcbiAgICAgICAgdHJhamVjdG9yeVBhZ2VcclxuICAgICAgICAgICAgLmZpbmQoJyNzdW1tYXJ5JylcclxuICAgICAgICAgICAgLmNsaWNrKCgpPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN3aXRjaCgnc3VtbWFyeScpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gU3VtbWFyeVxyXG4gICAgICAgIGNvbnN0IHN1bW1hcnlQYWdlID0gJChgXHJcbiAgICAgICAgPGRpdiBpZD1cIm1haW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRcIj7kurrnlJ/mgLvnu5M8L2Rpdj5cclxuICAgICAgICAgICAgPHVsIGlkPVwianVkZ2VcIiBjbGFzcz1cImp1ZGdlXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJncmFkZTJcIj48c3Bhbj7popzlgLzvvJo8L3NwYW4+PHNwYW4+Oee6pyDnvo7oi6XlpKnku5k8L3NwYW4+PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImdyYWRlMFwiPjxzcGFuPuaZuuWKm++8mjwvc3Bhbj48c3Bhbj4057qnIOaZuuWKm+S4gOiIrDwvc3Bhbj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZ3JhZGUwXCI+PHNwYW4+5L2T6LSo77yaPC9zcGFuPjxzcGFuPjHnuqcg5p6B5bqm6Jma5byxPC9zcGFuPjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJncmFkZTBcIj48c3Bhbj7lrrblooPvvJo8L3NwYW4+PHNwYW4+Nue6pyDlsI/lurfkuYvlrrY8L3NwYW4+PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImdyYWRlMFwiPjxzcGFuPuS6q+W5tO+8mjwvc3Bhbj48c3Bhbj4z5bKBIOaXqeWkrTwvc3Bhbj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZ3JhZGUwXCI+PHNwYW4+5b+r5LmQ77yaPC9zcGFuPjxzcGFuPjwvc3Bhbj4z57qnIOS4jeWkquW5uOemj+eahOS6uueUnzwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkXCIgc3R5bGU9XCJoZWlnaHQ6YXV0bztcIj7lpKnotYvvvIzkvaDlj6/ku6XpgInkuIDkuKrvvIzkuIvovojlrZDov5jog73mir3liLA8L2Rpdj5cclxuICAgICAgICAgICAgPHVsIGlkPVwidGFsZW50c1wiIGNsYXNzPVwic2VsZWN0bGlzdFwiIHN0eWxlPVwiZmxleDogMCAxIGF1dG87XCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJncmFkZTJiXCI+6buR5bmV77yI6Z2i6K+V5LiA5a6a5oiQ5Yqf77yJPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImFnYWluXCIgY2xhc3M9XCJtYWluYnRuXCI+PHNwYW4gY2xhc3M9XCJpY29uZm9udFwiPiYjeGU2YTc7PC9zcGFuPuWGjeasoemHjeW8gDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGApO1xyXG5cclxuICAgICAgICBzdW1tYXJ5UGFnZVxyXG4gICAgICAgICAgICAuZmluZCgnI2FnYWluJylcclxuICAgICAgICAgICAgLmNsaWNrKCgpPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVzICsrO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jbGlmZS50YWxlbnRFeHRlbmQodGhpcy4jc2VsZWN0ZWRFeHRlbmRUYWxlbnQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jc2VsZWN0ZWRFeHRlbmRUYWxlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jdGFsZW50U2VsZWN0ZWQuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuI3RvdGFsTWF4ID0gMjA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNpc0VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zd2l0Y2goJ2luZGV4Jyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLiNwYWdlcyA9IHtcclxuICAgICAgICAgICAgbG9hZGluZzoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogbG9hZGluZ1BhZ2UsXHJcbiAgICAgICAgICAgICAgICBjbGVhcjogKCk9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNjdXJyZW50UGFnZSA9ICdsb2FkaW5nJztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGluZGV4OiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiBpbmRleFBhZ2UsXHJcbiAgICAgICAgICAgICAgICBidG5BY2hpZXZlbWVudDogaW5kZXhQYWdlLmZpbmQoJyNhY2hpZXZlbWVudCcpLFxyXG4gICAgICAgICAgICAgICAgYnRuUmVzdGFydDogaW5kZXhQYWdlLmZpbmQoJyNyZXN0YXJ0JyksXHJcbiAgICAgICAgICAgICAgICBoaW50OiBpbmRleFBhZ2UuZmluZCgnLmhpbnQnKSxcclxuICAgICAgICAgICAgICAgIHByZXNzRW50ZXI6ICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcGFnZXMuaW5kZXguYnRuUmVzdGFydC5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNsZWFyOiAoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2N1cnJlbnRQYWdlID0gJ2luZGV4JztcclxuICAgICAgICAgICAgICAgICAgICBpbmRleFBhZ2UuZmluZCgnLmhpbnQnKS5oaWRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVzID0gdGhpcy50aW1lcztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY2hpZXZlbWVudCA9IGluZGV4UGFnZS5maW5kKCcjYWNoaWV2ZW1lbnQnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXNjb3JkID0gaW5kZXhQYWdlLmZpbmQoJyNkaXNjb3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BlY2lhbHRoYW5rcyA9IGluZGV4UGFnZS5maW5kKCcjc3BlY2lhbHRoYW5rcycpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZih0aW1lcyA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNoaWV2ZW1lbnQuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNjb3JkLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbHRoYW5rcy5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGFjaGlldmVtZW50LmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICBkaXNjb3JkLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICBzcGVjaWFsdGhhbmtzLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNwZWNpYWx0aGFua3M6IHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IHNwZWNpYWxUaGFua3NQYWdlLFxyXG4gICAgICAgICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxUaGFua3NQYWdlLmZpbmQoJyNzcHRoeCA+IHVsLmcxJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxUaGFua3NQYWdlLmZpbmQoJyNzcHRoeCA+IHVsLmcyJyksXHJcbiAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICBncm91cHMuZm9yRWFjaChnPT5nLmVtcHR5KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3NwZWNpYWx0aGFua3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKCk9PjAuNS1NYXRoLnJhbmRvbSgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoe2dyb3VwLCBuYW1lLCBjb21tZW50LCBjb2xvcn0pPT5ncm91cHNbLS1ncm91cF0uYXBwZW5kKGBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWVcIiAke2NvbG9yPygnc3R5bGU9XCJjb2xvcjonK2NvbG9yKydcIicpOicnfT4ke25hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tbWVudFwiPiR7Y29tbWVudHx8Jyd9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYCkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFjaGlldmVtZW50OiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiBhY2hpZXZlbWVudFBhZ2UsXHJcbiAgICAgICAgICAgICAgICBjbGVhcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gYWNoaWV2ZW1lbnRQYWdlLmZpbmQoXCJ1bCN0b3RhbFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY2hpZXZlbWVudHMgPSBhY2hpZXZlbWVudFBhZ2UuZmluZChcInVsI2FjaGlldmVtZW50c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbC5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFjaGlldmVtZW50cy5lbXB0eSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBgPGxpPjxzcGFuIGNsYXNzPVwiYWNoaWV2ZW1lbnR0aXRsZVwiPumHjeW8gOasoeaVsDwvc3Bhbj7ntKvoibLlh6Dnjofnv7vlgI08L2xpPmBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB0aW1lcywgYWNoaWV2ZW1lbnQsIHRhbGVudFJhdGUsIGV2ZW50UmF0ZSB9ID0gdGhpcy4jbGlmZS5nZXRUb3RhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsLmFwcGVuZChgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImFjaHZnJHtnZXRHcmFkZSgndGltZXMnLCB0aW1lcyl9XCI+PHNwYW4gY2xhc3M9XCJhY2hpZXZlbWVudHRpdGxlXCI+5bey6YeN5byAJHt0aW1lc33mrKE8L3NwYW4+5oq95Yiw57Sr6Imy5Yeg546H5LiN5Y+YPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiYWNodmcke2dldEdyYWRlKCdhY2hpZXZlbWVudCcsIGFjaGlldmVtZW50KX1cIj48c3BhbiBjbGFzcz1cImFjaGlldmVtZW50dGl0bGVcIj7miJDlsLHovr7miJAke2FjaGlldmVtZW50feS4qjwvc3Bhbj7mir3liLDmqZnoibLlh6Dnjofnv7vlgI08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJhY2h2ZyR7Z2V0R3JhZGUoJ3RhbGVudFJhdGUnLCB0YWxlbnRSYXRlKX1cIj48c3BhbiBjbGFzcz1cImFjaGlldmVtZW50dGl0bGVcIj7kuovku7bmlLbpm4bnjoc8L3NwYW4+JHtNYXRoLmZsb29yKHRhbGVudFJhdGUgKiAxMDApfSU8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJhY2h2ZyR7Z2V0R3JhZGUoJ2V2ZW50UmF0ZScsIGV2ZW50UmF0ZSl9XCI+PHNwYW4gY2xhc3M9XCJhY2hpZXZlbWVudHRpdGxlXCI+5aSp6LWL6YCJ5oup546HPC9zcGFuPiR7TWF0aC5mbG9vcihldmVudFJhdGUgKiAxMDApfSU8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIGApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY2hpZXZlbWVudHNEYXRhID0gdGhpcy4jbGlmZS5nZXRBY2hpZXZlbWVudHMoKTtcclxuICAgICAgICAgICAgICAgICAgICBhY2hpZXZlbWVudHNEYXRhLmZvckVhY2goKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sIGhpZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyYWRlLCBpc0FjaGlldmVkXHJcbiAgICAgICAgICAgICAgICAgICAgfSk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaGlkZSAmJiAhaXNBY2hpZXZlZCkgbmFtZSA9IGRlc2NyaXB0aW9uID0gJz8/Pyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjaGlldmVtZW50cy5hcHBlbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgPGxpIGNsYXNzPVwiYWNodmcke2dyYWRlfSAke2lzQWNoaWV2ZWQ/Jyc6J21hc2snfVwiPjxzcGFuIGNsYXNzPVwiYWNoaWV2ZW1lbnR0aXRsZVwiPiR7bmFtZX08L3NwYW4+JHtkZXNjcmlwdGlvbn08L2xpPmBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGFsZW50OiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0YWxlbnRQYWdlLFxyXG4gICAgICAgICAgICAgICAgdGFsZW50TGlzdDogdGFsZW50UGFnZS5maW5kKCcjdGFsZW50cycpLFxyXG4gICAgICAgICAgICAgICAgYnRuUmFuZG9tOiB0YWxlbnRQYWdlLmZpbmQoJyNyYW5kb20nKSxcclxuICAgICAgICAgICAgICAgIGJ0bk5leHQ6IHRhbGVudFBhZ2UuZmluZCgnI25leHQnKSxcclxuICAgICAgICAgICAgICAgIHByZXNzRW50ZXI6ICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFsZW50TGlzdCA9IHRoaXMuI3BhZ2VzLnRhbGVudC50YWxlbnRMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ0blJhbmRvbSA9IHRoaXMuI3BhZ2VzLnRhbGVudC5idG5SYW5kb207XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnRuTmV4dCA9IHRoaXMuI3BhZ2VzLnRhbGVudC5idG5OZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YWxlbnRMaXN0LmNoaWxkcmVuKCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ0bk5leHQuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidG5SYW5kb20uY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY2xlYXI6ICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jY3VycmVudFBhZ2UgPSAndGFsZW50JztcclxuICAgICAgICAgICAgICAgICAgICB0YWxlbnRQYWdlLmZpbmQoJ3VsLnNlbGVjdGxpc3QnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRhbGVudFBhZ2UuZmluZCgnI3JhbmRvbScpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiN0b3RhbE1heCA9IDIwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcHJvcGVydHk6IHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IHByb3BlcnR5UGFnZSxcclxuICAgICAgICAgICAgICAgIGJ0blN0YXJ0OiBwcm9wZXJ0eVBhZ2UuZmluZCgnI3N0YXJ0JyksXHJcbiAgICAgICAgICAgICAgICBwcmVzc0VudGVyOiAoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3BhZ2VzLnByb3BlcnR5LmJ0blN0YXJ0LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY2xlYXI6ICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jY3VycmVudFBhZ2UgPSAncHJvcGVydHknO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyZXNoVG90YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVBhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoJyN0YWxlbnRTZWxlY3RlZFZpZXcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRyYWplY3Rvcnk6IHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IHRyYWplY3RvcnlQYWdlLFxyXG4gICAgICAgICAgICAgICAgbGlmZVRyYWplY3Rvcnk6IHRyYWplY3RvcnlQYWdlLmZpbmQoJyNsaWZlVHJhamVjdG9yeScpLFxyXG4gICAgICAgICAgICAgICAgcHJlc3NFbnRlcjogKCk9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNwYWdlcy50cmFqZWN0b3J5LmxpZmVUcmFqZWN0b3J5LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY2xlYXI6ICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jY3VycmVudFBhZ2UgPSAndHJhamVjdG9yeSc7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhamVjdG9yeVBhZ2UuZmluZCgnI2xpZmVUcmFqZWN0b3J5JykuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFqZWN0b3J5UGFnZS5maW5kKCcjc3VtbWFyeScpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNpc0VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGJvcm46ICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhamVjdG9yeVBhZ2UuZmluZCgnI2xpZmVUcmFqZWN0b3J5JykudHJpZ2dlcihcImNsaWNrXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdW1tYXJ5OiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiBzdW1tYXJ5UGFnZSxcclxuICAgICAgICAgICAgICAgIGNsZWFyOiAoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2N1cnJlbnRQYWdlID0gJ3N1bW1hcnknO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGp1ZGdlID0gc3VtbWFyeVBhZ2UuZmluZCgnI2p1ZGdlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFsZW50cyA9IHN1bW1hcnlQYWdlLmZpbmQoJyN0YWxlbnRzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAganVkZ2UuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB0YWxlbnRzLmVtcHR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdGFsZW50U2VsZWN0ZWQuZm9yRWFjaCh0YWxlbnQ9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGkgPSBjcmVhdGVUYWxlbnQodGFsZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFsZW50cy5hcHBlbmQobGkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaS5jbGljaygoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGkuaGFzQ2xhc3MoJ3NlbGVjdGVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNzZWxlY3RlZEV4dGVuZFRhbGVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYodGhpcy4jc2VsZWN0ZWRFeHRlbmRUYWxlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGludCgn5Y+q6IO957un5om/5LiA5Liq5aSp6LWLJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNzZWxlY3RlZEV4dGVuZFRhbGVudCA9IHRhbGVudC5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcnlEYXRhID0gdGhpcy4jbGlmZS5nZXRTdW1tYXJ5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gKGRpc2NyaXB0aW9uLCB0eXBlKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHN1bW1hcnlEYXRhW3R5cGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGp1ZGdlLCBncmFkZSB9ID0gc3VtbWFyeSh0eXBlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGxpIGNsYXNzPVwiZ3JhZGUke2dyYWRlfVwiPjxzcGFuPiR7ZGlzY3JpcHRpb25977yaPC9zcGFuPjxzcGFuPiR7dmFsdWV9ICR7anVkZ2V9PC9zcGFuPjwvbGk+YDtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBqdWRnZS5hcHBlbmQoYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAke2Zvcm1hdCgn6aKc5YC8JywgJ0NIUicpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAke2Zvcm1hdCgn5pm65YqbJywgJ0lOVCcpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAke2Zvcm1hdCgn5L2T6LSoJywgJ1NUUicpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAke2Zvcm1hdCgn5a625aKDJywgJ01OWScpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAke2Zvcm1hdCgn5b+r5LmQJywgJ1NQUicpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAke2Zvcm1hdCgn5Lqr5bm0JywgJ0FHRScpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAke2Zvcm1hdCgn5oC76K+EJywgJ1NVTScpfVxyXG4gICAgICAgICAgICAgICAgICAgIGApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJCRvbignYWNoaWV2ZW1lbnQnLCAoe25hbWV9KT0+e1xyXG4gICAgICAgICAgICB0aGlzLmhpbnQoYOino+mUgeaIkOWwseOAkCR7bmFtZX3jgJFgLCAnc3VjY2VzcycpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoKHBhZ2UpIHtcclxuICAgICAgICBjb25zdCBwID0gdGhpcy4jcGFnZXNbcGFnZV07XHJcbiAgICAgICAgaWYoIXApIHJldHVybjtcclxuICAgICAgICAkKCcjbWFpbicpLmRldGFjaCgpO1xyXG4gICAgICAgIHAuY2xlYXIoKTtcclxuICAgICAgICBwLnBhZ2UuYXBwZW5kVG8oJ2JvZHknKTtcclxuICAgICAgICBpZih0eXBlb2YgcC5wYWdlLm1vdW50ZWQgPT09ICdmdW5jdGlvbicpe1xyXG4gICAgICAgICAgICBwLnBhZ2UubW91bnRlZCgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhpbnQobWVzc2FnZSwgdHlwZT0naW5mbycpIHtcclxuICAgICAgICBpZih0aGlzLiNoaW50VGltZW91dCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy4jaGludFRpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aGlzLiNoaW50VGltZW91dCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhpZGVCYW5uZXJzKCk7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYmFubmVyID0gJChgLmJhbm5lci4ke3R5cGV9YCk7XHJcbiAgICAgICAgICAgIGJhbm5lci5hZGRDbGFzcygndmlzaWJsZScpO1xyXG4gICAgICAgICAgICBiYW5uZXIuZmluZCgnLmJhbm5lci1tZXNzYWdlJykudGV4dChtZXNzYWdlKTtcclxuICAgICAgICAgICAgaWYodHlwZSAhPSAnZXJyb3InKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNoaW50VGltZW91dCA9IHNldFRpbWVvdXQoaGlkZUJhbm5lcnMsIDMwMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGhlbWUodGhlbWUpIHtcclxuICAgICAgICBjb25zdCB0aGVtZUxpbmsgPSAkKGRvY3VtZW50KS5maW5kKCcjdGhlbWVMaW5rJyk7XHJcblxyXG4gICAgICAgIGlmKHRoZW1lID09ICdsaWdodCcpIHtcclxuICAgICAgICAgICAgdGhlbWVMaW5rLmF0dHIoJ2hyZWYnLCAnbGlnaHQuY3NzJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhlbWVMaW5rLmF0dHIoJ2hyZWYnLCAnZGFyay5jc3MnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHRpbWVzKCkge3JldHVybiB0aGlzLiNsaWZlPy50aW1lcyB8fCAwO31cclxuICAgIHNldCB0aW1lcyh2KSB7IGlmKHRoaXMuI2xpZmUpIHRoaXMuI2xpZmUudGltZXMgPSB2IH07XHJcblxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBcHA7XHJcbiIsImltcG9ydCBBcHAgZnJvbSAnLi4vc3JjL2FwcC5qcyc7XHJcblxyXG5nbG9iYWxUaGlzLiQkZXZlbnRNYXAgPSBuZXcgTWFwKCk7XHJcbmdsb2JhbFRoaXMuJCRldmVudCA9ICh0YWcsIGRhdGEpID0+IHtcclxuICAgIGNvbnN0IGxpc3RlbmVyID0gJCRldmVudE1hcC5nZXQodGFnKTtcclxuICAgIGlmKGxpc3RlbmVyKSBsaXN0ZW5lci5mb3JFYWNoKGZuPT5mbihkYXRhKSk7XHJcbn1cclxuZ2xvYmFsVGhpcy4kJG9uID0gKHRhZywgZm4pID0+IHtcclxuICAgIGxldCBsaXN0ZW5lciA9ICQkZXZlbnRNYXAuZ2V0KHRhZyk7XHJcbiAgICBpZighbGlzdGVuZXIpIHtcclxuICAgICAgICBsaXN0ZW5lciA9IG5ldyBTZXQoKTtcclxuICAgICAgICAkJGV2ZW50TWFwLnNldCh0YWcsIGxpc3RlbmVyKTtcclxuICAgIH1cclxuICAgIGxpc3RlbmVyLmFkZChmbik7XHJcbn1cclxuZ2xvYmFsVGhpcy4kJG9mZiA9ICh0YWcsIGZuKSA9PiB7XHJcbiAgICBjb25zdCBsaXN0ZW5lciA9ICQkZXZlbnRNYXAuZ2V0KHRhZyk7XHJcbiAgICBpZihsaXN0ZW5lcikgbGlzdGVuZXIuZGVsZXRlKGZuKTtcclxufVxyXG5cclxuZ2xvYmFsVGhpcy5qc29uID0gYXN5bmMgZmlsZU5hbWUgPT4gYXdhaXQgKGF3YWl0IGZldGNoKGAuLi9kYXRhLyR7ZmlsZU5hbWV9Lmpzb25gKSkuanNvbigpO1xyXG5cclxuLy8gUHNzc3QsIEkndmUgY3JlYXRlZCBhIGdpdGh1YiBwYWNrYWdlIC0gaHR0cHM6Ly9naXRodWIuY29tL2Jyb29rZXNiOTEvZGlzbWlzc2libGVcclxuZ2xvYmFsVGhpcy5oaWRlQmFubmVycyA9IChlKSA9PiB7XHJcbiAgICBkb2N1bWVudFxyXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJhbm5lci52aXNpYmxlXCIpXHJcbiAgICAgICAgLmZvckVhY2goKGIpID0+IGIuY2xhc3NMaXN0LnJlbW92ZShcInZpc2libGVcIikpO1xyXG59O1xyXG5cclxuY29uc3QgYXBwID0gbmV3IEFwcCgpO1xyXG5hcHAuaW5pdGlhbCgpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3785\n')}},__webpack_module_cache__={};function __webpack_require__(e){var n=__webpack_module_cache__[e];if(void 0!==n)return n.exports;var t=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](t,t.exports,__webpack_require__),t.exports}__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();var __webpack_exports__=__webpack_require__(3785)})();