diff --git a/js/main.js b/js/main.js index 5e88d26a..4a6b31bd 100644 --- a/js/main.js +++ b/js/main.js @@ -119,7 +119,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _emo /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\nconst normalizedPrefix = \"da\";\nconst randClass = new RegExp(`^(?!${normalizedPrefix}-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$`);\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ClassNormalizer extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get id() {\n return \"classNormalizer\";\n }\n\n get category() {\n return \"general\";\n }\n\n get name() {\n return \"ClassNormalizer\";\n }\n\n enabled() {\n if (this.hasPatched) return;\n this.patchClassModules(modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModules(this.moduleFilter.bind(this)));\n this.normalizeElement(document.querySelector(\"#app-mount\"));\n this.hasPatched = true;\n this.patchDOMMethods();\n }\n\n disabled() {\n if (!this.hasPatched) return;\n this.unpatchClassModules(modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModules(this.moduleFilter.bind(this)));\n this.revertElement(document.querySelector(\"#app-mount\"));\n this.hasPatched = false;\n }\n\n patchClassModules(modules) {\n for (const module of modules) {\n this.patchClassModule(normalizedPrefix, module);\n }\n }\n\n unpatchClassModules(modules) {\n for (const module of modules) {\n this.unpatchClassModule(normalizedPrefix, module);\n }\n }\n\n shouldIgnore(value) {\n if (!isNaN(value)) return true;\n if (value.endsWith(\"px\") || value.endsWith(\"ch\") || value.endsWith(\"em\") || value.endsWith(\"ms\")) return true;\n if (value.startsWith(\"layerContainer-\")) return true;\n if (value.startsWith(\"#\") && (value.length == 7 || value.length == 4)) return true;\n if (value.includes(\"calc(\") || value.includes(\"rgba\")) return true;\n return false;\n }\n\n moduleFilter(module) {\n if (typeof module !== \"object\" || Array.isArray(module)) return false;\n if (module.__esModule) return false;\n if (!Object.keys(module).length) return false;\n\n for (const baseClassName in module) {\n const value = module[baseClassName];\n if (typeof value !== \"string\") return false;\n if (this.shouldIgnore(value)) continue;\n if (value.split(\"-\").length === 1) return false;\n if (!randClass.test(value.split(\" \")[0])) return false;\n }\n\n return true;\n }\n\n patchClassModule(componentName, classNames) {\n for (const baseClassName in classNames) {\n const value = classNames[baseClassName];\n if (this.shouldIgnore(value)) continue;\n const classList = value.split(\" \");\n\n for (const normalClass of classList) {\n const match = normalClass.match(randClass)[1];\n if (!match) continue; // Shouldn't ever happen since they passed the moduleFilter, but you never know\n\n const camelCase = match.split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\n classNames[baseClassName] += ` ${componentName}-${camelCase}`;\n }\n }\n }\n\n unpatchClassModule(componentName, classNames) {\n for (const baseClassName in classNames) {\n const value = classNames[baseClassName];\n if (this.shouldIgnore(value)) continue;\n let newString = \"\";\n const classList = value.split(\" \");\n\n for (const normalClass of classList) {\n if (normalClass.startsWith(`${componentName}-`)) continue;\n newString += ` ${normalClass}`;\n }\n\n classNames[baseClassName] = newString.trim();\n }\n }\n\n normalizeElement(element) {\n if (!(element instanceof Element)) return;\n const classes = element.classList;\n\n for (let c = 0, clen = classes.length; c < clen; c++) {\n if (!randClass.test(classes[c])) continue;\n const match = classes[c].match(randClass)[1];\n const newClass = match.split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\n element.classList.add(`${normalizedPrefix}-${newClass}`);\n }\n\n for (const child of element.children) this.normalizeElement(child);\n }\n\n revertElement(element) {\n if (!(element instanceof Element)) return;\n if (element.children && element.children.length) this.revertElement(element.children[0]);\n if (element.nextElementSibling) this.revertElement(element.nextElementSibling);\n const classes = element.classList;\n const toRemove = [];\n\n for (let c = 0; c < classes.length; c++) {\n if (classes[c].startsWith(`${normalizedPrefix}-`)) toRemove.push(classes[c]);\n }\n\n element.classList.remove(...toRemove);\n }\n\n patchDOMMethods() {\n const contains = DOMTokenList.prototype.contains;\n\n DOMTokenList.prototype.contains = function (token) {\n const tokens = token.split(\" \");\n return tokens.every(t => contains.call(this, t));\n };\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2NsYXNzbm9ybWFsaXplci5qcz9kZDc4Il0sIm5hbWVzIjpbIm5vcm1hbGl6ZWRQcmVmaXgiLCJyYW5kQ2xhc3MiLCJSZWdFeHAiLCJDbGFzc05vcm1hbGl6ZXIiLCJCdWlsdGluIiwiaWQiLCJjYXRlZ29yeSIsIm5hbWUiLCJlbmFibGVkIiwiaGFzUGF0Y2hlZCIsInBhdGNoQ2xhc3NNb2R1bGVzIiwiV2VicGFja01vZHVsZXMiLCJnZXRNb2R1bGVzIiwibW9kdWxlRmlsdGVyIiwiYmluZCIsIm5vcm1hbGl6ZUVsZW1lbnQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJwYXRjaERPTU1ldGhvZHMiLCJkaXNhYmxlZCIsInVucGF0Y2hDbGFzc01vZHVsZXMiLCJyZXZlcnRFbGVtZW50IiwibW9kdWxlcyIsIm1vZHVsZSIsInBhdGNoQ2xhc3NNb2R1bGUiLCJ1bnBhdGNoQ2xhc3NNb2R1bGUiLCJzaG91bGRJZ25vcmUiLCJ2YWx1ZSIsImlzTmFOIiwiZW5kc1dpdGgiLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJBcnJheSIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIiwiT2JqZWN0Iiwia2V5cyIsImJhc2VDbGFzc05hbWUiLCJzcGxpdCIsInRlc3QiLCJjb21wb25lbnROYW1lIiwiY2xhc3NOYW1lcyIsImNsYXNzTGlzdCIsIm5vcm1hbENsYXNzIiwibWF0Y2giLCJjYW1lbENhc2UiLCJtYXAiLCJzIiwiaSIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJqb2luIiwibmV3U3RyaW5nIiwidHJpbSIsImVsZW1lbnQiLCJFbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsImNoaWxkcmVuIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwidG9SZW1vdmUiLCJwdXNoIiwicmVtb3ZlIiwiY29udGFpbnMiLCJET01Ub2tlbkxpc3QiLCJwcm90b3R5cGUi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TyxDQUFDWixTQUF4QjtBQUNBLFVBQU1zQixRQUFRLEdBQUcsRUFBakI7O0FBQ0EsU0FBSyxJQUFJUCxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRCxPQUFPLENBQUMxQixNQUE1QixFQUFvQzJCLENBQUMsRUFBckMsRUFBeUM7QUFDckMsVUFBSUQsT0FBTyxDQUFDQyxDQUFELENBQVAsQ0FBVzVCLFVBQVgsQ0FBdUIsR0FBRTlCLGdCQUFpQixHQUExQyxDQUFKLEVBQW1EaUUsUUFBUSxDQUFDQyxJQUFULENBQWNULE9BQU8sQ0FBQ0MsQ0FBRCxDQUFyQjtBQUN0RDs7QUFDREgsV0FBTyxDQUFDWixTQUFSLENBQWtCd0IsTUFBbEIsQ0FBeUIsR0FBR0YsUUFBNUI7QUFDSDs7QUFFRC9DLGlCQUFlLEdBQUc7QUFDZCxVQUFNa0QsUUFBUSxHQUFHQyxZQUFZLENBQUNDLFNBQWIsQ0FBdUJGLFFBQXhDOztBQUNBQyxnQkFBWSxDQUFDQyxTQUFiLENBQXVCRixRQUF2QixHQUFrQyxVQUFTRyxLQUFULEVBQWdCO0FBQzlDLFlBQU1DLE1BQU0sR0FBR0QsS0FBSyxDQUFDaEMsS0FBTixDQUFZLEdBQVosQ0FBZjtBQUNBLGFBQU9pQyxNQUFNLENBQUNDLEtBQVAsQ0FBYUMsQ0FBQyxJQUFJTixRQUFRLENBQUNPLElBQVQsQ0FBYyxJQUFkLEVBQW9CRCxDQUFwQixDQUFsQixDQUFQO0FBQ0gsS0FIRDtBQUlIOztBQWxIb0QsQ0FBMUMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9jbGFzc25vcm1hbGl6ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcbmltcG9ydCB7V2VicGFja01vZHVsZXN9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5jb25zdCBub3JtYWxpemVkUHJlZml4ID0gXCJkYVwiO1xyXG5jb25zdCByYW5kQ2xhc3MgPSBuZXcgUmVnRXhwKGBeKD8hJHtub3JtYWxpemVkUHJlZml4fS0pKCg/OltBLVphLXpdfFswLTldfC0pKyktKD86W0EtWmEtel18WzAtOV18LXxfKXs2fSRgKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDbGFzc05vcm1hbGl6ZXIgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJjbGFzc05vcm1hbGl6ZXJcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkNsYXNzTm9ybWFsaXplclwiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGVzKFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZXModGhpcy5tb2R1bGVGaWx0ZXIuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMubm9ybWFsaXplRWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XHJcbiAgICAgICAgdGhpcy5oYXNQYXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBhdGNoRE9NTWV0aG9kcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy51bnBhdGNoQ2xhc3NNb2R1bGVzKFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZXModGhpcy5tb2R1bGVGaWx0ZXIuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMucmV2ZXJ0RWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XHJcbiAgICAgICAgdGhpcy5oYXNQYXRjaGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hDbGFzc01vZHVsZXMobW9kdWxlcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXRjaENsYXNzTW9kdWxlKG5vcm1hbGl6ZWRQcmVmaXgsIG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVucGF0Y2hDbGFzc01vZHVsZXMobW9kdWxlcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy51bnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2hvdWxkSWdub3JlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5lbmRzV2l0aChcInB4XCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwiY2hcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJlbVwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcIm1zXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcImxheWVyQ29udGFpbmVyLVwiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCIjXCIpICYmICh2YWx1ZS5sZW5ndGggPT0gNyB8fCB2YWx1ZS5sZW5ndGggPT0gNCkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhcImNhbGMoXCIpIHx8IHZhbHVlLmluY2x1ZGVzKFwicmdiYVwiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZUZpbHRlcihtb2R1bGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KG1vZHVsZSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAobW9kdWxlLl9fZXNNb2R1bGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKG1vZHVsZSkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIG1vZHVsZSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1vZHVsZVtiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLnNwbGl0KFwiLVwiKS5sZW5ndGggPT09IDEpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdCh2YWx1ZS5zcGxpdChcIiBcIilbMF0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaENsYXNzTW9kdWxlKGNvbXBvbmVudE5hbWUsIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gY2xhc3NOYW1lcykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IG5vcm1hbENsYXNzLm1hdGNoKHJhbmRDbGFzcylbMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKSBjb250aW51ZTsgLy8gU2hvdWxkbid0IGV2ZXIgaGFwcGVuIHNpbmNlIHRoZXkgcGFzc2VkIHRoZSBtb2R1bGVGaWx0ZXIsIGJ1dCB5b3UgbmV2ZXIga25vd1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FtZWxDYXNlID0gbWF0Y2guc3BsaXQoXCItXCIpLm1hcCgocywgaSkgPT4gaSA/IHNbMF0udG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgOiBzKS5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSArPSBgICR7Y29tcG9uZW50TmFtZX0tJHtjYW1lbENhc2V9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsQ2xhc3Muc3RhcnRzV2l0aChgJHtjb21wb25lbnROYW1lfS1gKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBuZXdTdHJpbmcgKz0gYCAke25vcm1hbENsYXNzfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSA9IG5ld1N0cmluZy50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5vcm1hbGl6ZUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBlbGVtZW50LmNsYXNzTGlzdDtcclxuICAgICAgICBmb3IgKGxldCBjID0gMCwgY2xlbiA9IGNsYXNzZXMubGVuZ3RoOyBjIDwgY2xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QoY2xhc3Nlc1tjXSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsYXNzZXNbY10ubWF0Y2gocmFuZENsYXNzKVsxXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3MgPSBtYXRjaC5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChgJHtub3JtYWxpemVkUHJlZml4fS0ke25ld0NsYXNzfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsZW1lbnQuY2hpbGRyZW4pIHRoaXMubm9ybWFsaXplRWxlbWVudChjaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJ0RWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4gJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50LmNoaWxkcmVuWzBdKTtcclxuICAgICAgICBpZiAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmIChjbGFzc2VzW2NdLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZFByZWZpeH0tYCkpIHRvUmVtb3ZlLnB1c2goY2xhc3Nlc1tjXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi50b1JlbW92ZSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHBhdGNoRE9NTWV0aG9kcygpIHtcclxuICAgICAgICBjb25zdCBjb250YWlucyA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUuY29udGFpbnM7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKHRva2VuKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRva2VucyA9IHRva2VuLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRva2Vucy5ldmVyeSh0ID0+IGNvbnRhaW5zLmNhbGwodGhpcywgdCkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/classnormalizer.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\nconst normalizedPrefix = \"da\";\nconst randClass = new RegExp(`^(?!${normalizedPrefix}-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$`);\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ClassNormalizer extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get id() {\n return \"classNormalizer\";\n }\n\n get category() {\n return \"general\";\n }\n\n get name() {\n return \"ClassNormalizer\";\n }\n\n enabled() {\n if (this.hasPatched) return;\n this.patchClassModules(modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModules(this.moduleFilter.bind(this)));\n this.normalizeElement(document.querySelector(\"#app-mount\"));\n this.hasPatched = true;\n this.patchDOMMethods();\n }\n\n disabled() {\n if (!this.hasPatched) return;\n this.unpatchClassModules(modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModules(this.moduleFilter.bind(this)));\n this.revertElement(document.querySelector(\"#app-mount\"));\n this.hasPatched = false;\n }\n\n patchClassModules(modules) {\n for (const module of modules) {\n this.patchClassModule(normalizedPrefix, module);\n }\n }\n\n unpatchClassModules(modules) {\n for (const module of modules) {\n this.unpatchClassModule(normalizedPrefix, module);\n }\n }\n\n shouldIgnore(value) {\n if (!isNaN(value)) return true;\n if (value.endsWith(\"px\") || value.endsWith(\"ch\") || value.endsWith(\"em\") || value.endsWith(\"ms\")) return true;\n if (value.startsWith(\"layerContainer-\")) return true;\n if (value.startsWith(\"#\") && (value.length == 7 || value.length == 4)) return true;\n if (value.includes(\"calc(\") || value.includes(\"rgba\")) return true;\n return false;\n }\n\n moduleFilter(module) {\n if (typeof module !== \"object\" || Array.isArray(module)) return false;\n if (module.__esModule) return false;\n if (!Object.keys(module).length) return false;\n\n for (const baseClassName in module) {\n const value = module[baseClassName];\n if (typeof value !== \"string\") return false;\n if (this.shouldIgnore(value)) continue;\n if (value.split(\"-\").length === 1) return false;\n if (!randClass.test(value.split(\" \")[0])) return false;\n }\n\n return true;\n }\n\n patchClassModule(componentName, classNames) {\n for (const baseClassName in classNames) {\n const value = classNames[baseClassName];\n if (this.shouldIgnore(value)) continue;\n const classList = value.split(\" \");\n\n for (const normalClass of classList) {\n const match = normalClass.match(randClass);\n if (!match || !match.length || match.length < 2) continue; // Shouldn't ever happen since they passed the moduleFilter, but you never know\n\n const camelCase = match[1].split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\n classNames[baseClassName] += ` ${componentName}-${camelCase}`;\n }\n }\n }\n\n unpatchClassModule(componentName, classNames) {\n for (const baseClassName in classNames) {\n const value = classNames[baseClassName];\n if (this.shouldIgnore(value)) continue;\n let newString = \"\";\n const classList = value.split(\" \");\n\n for (const normalClass of classList) {\n if (normalClass.startsWith(`${componentName}-`)) continue;\n newString += ` ${normalClass}`;\n }\n\n classNames[baseClassName] = newString.trim();\n }\n }\n\n normalizeElement(element) {\n if (!(element instanceof Element)) return;\n const classes = element.classList;\n\n for (let c = 0, clen = classes.length; c < clen; c++) {\n if (!randClass.test(classes[c])) continue;\n const match = classes[c].match(randClass)[1];\n const newClass = match.split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\n element.classList.add(`${normalizedPrefix}-${newClass}`);\n }\n\n for (const child of element.children) this.normalizeElement(child);\n }\n\n revertElement(element) {\n if (!(element instanceof Element)) return;\n if (element.children && element.children.length) this.revertElement(element.children[0]);\n if (element.nextElementSibling) this.revertElement(element.nextElementSibling);\n const classes = element.classList;\n const toRemove = [];\n\n for (let c = 0; c < classes.length; c++) {\n if (classes[c].startsWith(`${normalizedPrefix}-`)) toRemove.push(classes[c]);\n }\n\n element.classList.remove(...toRemove);\n }\n\n patchDOMMethods() {\n const contains = DOMTokenList.prototype.contains;\n\n DOMTokenList.prototype.contains = function (token) {\n const tokens = token.split(\" \");\n return tokens.every(t => contains.call(this, t));\n };\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2NsYXNzbm9ybWFsaXplci5qcz9kZDc4Il0sIm5hbWVzIjpbIm5vcm1hbGl6ZWRQcmVmaXgiLCJyYW5kQ2xhc3MiLCJSZWdFeHAiLCJDbGFzc05vcm1hbGl6ZXIiLCJCdWlsdGluIiwiaWQiLCJjYXRlZ29yeSIsIm5hbWUiLCJlbmFibGVkIiwiaGFzUGF0Y2hlZCIsInBhdGNoQ2xhc3NNb2R1bGVzIiwiV2VicGFja01vZHVsZXMiLCJnZXRNb2R1bGVzIiwibW9kdWxlRmlsdGVyIiwiYmluZCIsIm5vcm1hbGl6ZUVsZW1lbnQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJwYXRjaERPTU1ldGhvZHMiLCJkaXNhYmxlZCIsInVucGF0Y2hDbGFzc01vZHVsZXMiLCJyZXZlcnRFbGVtZW50IiwibW9kdWxlcyIsIm1vZHVsZSIsInBhdGNoQ2xhc3NNb2R1bGUiLCJ1bnBhdGNoQ2xhc3NNb2R1bGUiLCJzaG91bGRJZ25vcmUiLCJ2YWx1ZSIsImlzTmFOIiwiZW5kc1dpdGgiLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJBcnJheSIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIiwiT2JqZWN0Iiwia2V5cyIsImJhc2VDbGFzc05hbWUiLCJzcGxpdCIsInRlc3QiLCJjb21wb25lbnROYW1lIiwiY2xhc3NOYW1lcyIsImNsYXNzTGlzdCIsIm5vcm1hbENsYXNzIiwibWF0Y2giLCJjYW1lbENhc2UiLCJtYXAiLCJzIiwiaSIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJqb2luIiwibmV3U3RyaW5nIiwidHJpbSIsImVsZW1lbnQiLCJFbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsImNoaWxkcmVuIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwidG9SZW1vdmUiLCJwdXNoIiwicmVtb3ZlIiwiY29udGFpbnMiLCJET01Ub2tlbkxpc3QiLCJwcm90b3R5cGUi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Z0MsS0FBSzNDLGFBQUwsQ0FBbUJrQyxPQUFPLENBQUNTLGtCQUEzQjtBQUNoQyxVQUFNUCxPQUFPLEdBQUdGLE9BQU8sQ0FBQ1osU0FBeEI7QUFDQSxVQUFNc0IsUUFBUSxHQUFHLEVBQWpCOztBQUNBLFNBQUssSUFBSVAsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0QsT0FBTyxDQUFDMUIsTUFBNUIsRUFBb0MyQixDQUFDLEVBQXJDLEVBQXlDO0FBQ3JDLFVBQUlELE9BQU8sQ0FBQ0MsQ0FBRCxDQUFQLENBQVc1QixVQUFYLENBQXVCLEdBQUU5QixnQkFBaUIsR0FBMUMsQ0FBSixFQUFtRGlFLFFBQVEsQ0FBQ0MsSUFBVCxDQUFjVCxPQUFPLENBQUNDLENBQUQsQ0FBckI7QUFDdEQ7O0FBQ0RILFdBQU8sQ0FBQ1osU0FBUixDQUFrQndCLE1BQWxCLENBQXlCLEdBQUdGLFFBQTVCO0FBQ0g7O0FBRUQvQyxpQkFBZSxHQUFHO0FBQ2QsVUFBTWtELFFBQVEsR0FBR0MsWUFBWSxDQUFDQyxTQUFiLENBQXVCRixRQUF4Qzs7QUFDQUMsZ0JBQVksQ0FBQ0MsU0FBYixDQUF1QkYsUUFBdkIsR0FBa0MsVUFBU0csS0FBVCxFQUFnQjtBQUM5QyxZQUFNQyxNQUFNLEdBQUdELEtBQUssQ0FBQ2hDLEtBQU4sQ0FBWSxHQUFaLENBQWY7QUFDQSxhQUFPaUMsTUFBTSxDQUFDQyxLQUFQLENBQWFDLENBQUMsSUFBSU4sUUFBUSxDQUFDTyxJQUFULENBQWMsSUFBZCxFQUFvQkQsQ0FBcEIsQ0FBbEIsQ0FBUDtBQUNILEtBSEQ7QUFJSDs7QUFsSG9ELENBQTFDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvY2xhc3Nub3JtYWxpemVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge1dlYnBhY2tNb2R1bGVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuY29uc3Qgbm9ybWFsaXplZFByZWZpeCA9IFwiZGFcIjtcclxuY29uc3QgcmFuZENsYXNzID0gbmV3IFJlZ0V4cChgXig/ISR7bm9ybWFsaXplZFByZWZpeH0tKSgoPzpbQS1aYS16XXxbMC05XXwtKSspLSg/OltBLVphLXpdfFswLTldfC18Xyl7Nn0kYCk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ2xhc3NOb3JtYWxpemVyIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiY2xhc3NOb3JtYWxpemVyXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJDbGFzc05vcm1hbGl6ZXJcIjt9XHJcblxyXG4gICAgZW5hYmxlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGVzKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZUVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xyXG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYXRjaERPTU1ldGhvZHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzUGF0Y2hlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGVzKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLnJldmVydEVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xyXG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlKG5vcm1hbGl6ZWRQcmVmaXgsIG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3VsZElnbm9yZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghaXNOYU4odmFsdWUpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuZW5kc1dpdGgoXCJweFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImNoXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwiZW1cIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJtc1wiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJsYXllckNvbnRhaW5lci1cIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiI1wiKSAmJiAodmFsdWUubGVuZ3RoID09IDcgfHwgdmFsdWUubGVuZ3RoID09IDQpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoXCJjYWxjKFwiKSB8fCB2YWx1ZS5pbmNsdWRlcyhcInJnYmFcIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2R1bGVGaWx0ZXIobW9kdWxlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShtb2R1bGUpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKG1vZHVsZS5fX2VzTW9kdWxlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhtb2R1bGUpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBtb2R1bGUpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2R1bGVbYmFzZUNsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zcGxpdChcIi1cIikubGVuZ3RoID09PSAxKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QodmFsdWUuc3BsaXQoXCIgXCIpWzBdKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdmFsdWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vcm1hbENsYXNzIG9mIGNsYXNzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBub3JtYWxDbGFzcy5tYXRjaChyYW5kQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCB8fCAhbWF0Y2gubGVuZ3RoIHx8IG1hdGNoLmxlbmd0aCA8IDIpIGNvbnRpbnVlOyAvLyBTaG91bGRuJ3QgZXZlciBoYXBwZW4gc2luY2UgdGhleSBwYXNzZWQgdGhlIG1vZHVsZUZpbHRlciwgYnV0IHlvdSBuZXZlciBrbm93XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYW1lbENhc2UgPSBtYXRjaFsxXS5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdICs9IGAgJHtjb21wb25lbnROYW1lfS0ke2NhbWVsQ2FzZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVucGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IG5ld1N0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub3JtYWxDbGFzcy5zdGFydHNXaXRoKGAke2NvbXBvbmVudE5hbWV9LWApKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIG5ld1N0cmluZyArPSBgICR7bm9ybWFsQ2xhc3N9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdID0gbmV3U3RyaW5nLnRyaW0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbm9ybWFsaXplRWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwLCBjbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGMgPCBjbGVuOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdChjbGFzc2VzW2NdKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gY2xhc3Nlc1tjXS5tYXRjaChyYW5kQ2xhc3MpWzFdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDbGFzcyA9IG1hdGNoLnNwbGl0KFwiLVwiKS5tYXAoKHMsIGkpID0+IGkgPyBzWzBdLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpIDogcykuam9pbihcIlwiKTtcclxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGAke25vcm1hbGl6ZWRQcmVmaXh9LSR7bmV3Q2xhc3N9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWxlbWVudC5jaGlsZHJlbikgdGhpcy5ub3JtYWxpemVFbGVtZW50KGNoaWxkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnRFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcclxuICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbiAmJiBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQuY2hpbGRyZW5bMF0pO1xyXG4gICAgICAgIGlmIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICBjb25zdCBjbGFzc2VzID0gZWxlbWVudC5jbGFzc0xpc3Q7XHJcbiAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKGNsYXNzZXNbY10uc3RhcnRzV2l0aChgJHtub3JtYWxpemVkUHJlZml4fS1gKSkgdG9SZW1vdmUucHVzaChjbGFzc2VzW2NdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLnRvUmVtb3ZlKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcGF0Y2hET01NZXRob2RzKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5zID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucztcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24odG9rZW4pIHtcclxuICAgICAgICAgICAgY29uc3QgdG9rZW5zID0gdG9rZW4uc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdG9rZW5zLmV2ZXJ5KHQgPT4gY29udGFpbnMuY2FsbCh0aGlzLCB0KSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/classnormalizer.js\n"); /***/ }), @@ -131,7 +131,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\nconst MessageContent = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty(\"disableButtons\"));\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ColoredText extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"ColoredText\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"coloredText\";\n }\n\n enabled() {\n this.injectColoredText();\n }\n\n disabled() {\n this.unpatchAll();\n }\n\n injectColoredText() {\n this.after(MessageContent.prototype, \"render\", (thisObject, args, retVal) => {\n this.after(retVal.props, \"children\", {\n silent: true,\n after: ({\n returnValue\n }) => {\n const markup = returnValue.props.children[1];\n const roleColor = thisObject.props.message.colorString;\n if (markup && roleColor) markup.props.style = {\n color: roleColor\n };\n }\n });\n });\n }\n\n removeColoredText() {\n document.querySelectorAll(\".markup-2BOw-j\").forEach(elem => {\n elem.style.setProperty(\"color\", \"\");\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2NvbG9yZWR0ZXh0LmpzP2RlMDkiXSwibmFtZXMiOlsiTWVzc2FnZUNvbnRlbnQiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0UHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsIkNvbG9yZWRUZXh0IiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwiZW5hYmxlZCIsImluamVjdENvbG9yZWRUZXh0IiwiZGlzYWJsZWQiLCJ1bnBhdGNoQWxsIiwiYWZ0ZXIiLCJwcm90b3R5cGUiLCJ0aGlzT2JqZWN0IiwiYXJncyIsInJldFZhbCIsInByb3BzIiwic2lsZW50IiwicmV0dXJuVmFsdWUiLCJtYXJrdXAiLCJjaGlsZHJlbiIsInJvbGVDb2xvciIsIm1lc3NhZ2UiLCJjb2xvclN0cmluZyIsInN0eWxlIiwiY29sb3IiLCJyZW1vdmVDb2xvcmVkVGV4dCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJlbGVtIiwic2V0UHJvcGVydHkiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQSxNQUFNQSxjQUFjLEdBQUdDLHNEQUFjLENBQUNDLFNBQWYsQ0FBeUJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxZQUFGLElBQWtCRCxDQUFDLENBQUNDLFlBQUYsQ0FBZUMsY0FBZixDQUE4QixnQkFBOUIsQ0FBaEQsQ0FBdkI7QUFFZSxtRUFBSSxNQUFNQyxXQUFOLFNBQTBCQyx3REFBMUIsQ0FBa0M7QUFDakQsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxhQUFQO0FBQXNCOztBQUNsQyxNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFlBQVA7QUFBcUI7O0FBQ3JDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8sYUFBUDtBQUFzQjs7QUFFaENDLFNBQU8sR0FBRztBQUNOLFNBQUtDLGlCQUFMO0FBQ0g7O0FBRURDLFVBQVEsR0FBRztBQUNQLFNBQUtDLFVBQUw7QUFDSDs7QUFFREYsbUJBQWlCLEdBQUc7QUFDaEIsU0FBS0csS0FBTCxDQUFXZixjQUFjLENBQUNnQixTQUExQixFQUFxQyxRQUFyQyxFQUErQyxDQUFDQyxVQUFELEVBQWFDLElBQWIsRUFBbUJDLE1BQW5CLEtBQThCO0FBQ3pFLFdBQUtKLEtBQUwsQ0FBV0ksTUFBTSxDQUFDQyxLQUFsQixFQUF5QixVQUF6QixFQUFxQztBQUFDQyxjQUFNLEVBQUUsSUFBVDtBQUFlTixhQUFLLEVBQUUsQ0FBQztBQUFDTztBQUFELFNBQUQsS0FBbUI7QUFDMUUsZ0JBQU1DLE1BQU0sR0FBR0QsV0FBVyxDQUFDRixLQUFaLENBQWtCSSxRQUFsQixDQUEyQixDQUEzQixDQUFmO0FBQ0EsZ0JBQU1DLFNBQVMsR0FBR1IsVUFBVSxDQUFDRyxLQUFYLENBQWlCTSxPQUFqQixDQUF5QkMsV0FBM0M7QUFDQSxjQUFJSixNQUFNLElBQUlFLFNBQWQsRUFBeUJGLE1BQU0sQ0FBQ0gsS0FBUCxDQUFhUSxLQUFiLEdBQXFCO0FBQUNDLGlCQUFLLEVBQUVKO0FBQVIsV0FBckI7QUFDNUI7QUFKb0MsT0FBckM7QUFLSCxLQU5EO0FBT0g7O0FBRURLLG1CQUFpQixHQUFHO0FBQ2hCQyxZQUFRLENBQUNDLGdCQUFULENBQTBCLGdCQUExQixFQUE0Q0MsT0FBNUMsQ0FBb0RDLElBQUksSUFBSTtBQUN4REEsVUFBSSxDQUFDTixLQUFMLENBQVdPLFdBQVgsQ0FBdUIsT0FBdkIsRUFBZ0MsRUFBaEM7QUFDSCxLQUZEO0FBR0g7O0FBM0JnRCxDQUF0QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2NvbG9yZWR0ZXh0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge1dlYnBhY2tNb2R1bGVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuY29uc3QgTWVzc2FnZUNvbnRlbnQgPSBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb2xvcmVkVGV4dCBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiQ29sb3JlZFRleHRcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiYXBwZWFyYW5jZVwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJjb2xvcmVkVGV4dFwiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIHRoaXMuaW5qZWN0Q29sb3JlZFRleHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICB0aGlzLnVucGF0Y2hBbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3RDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICB0aGlzLmFmdGVyKE1lc3NhZ2VDb250ZW50LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmplY3QsIGFyZ3MsIHJldFZhbCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFmdGVyKHJldFZhbC5wcm9wcywgXCJjaGlsZHJlblwiLCB7c2lsZW50OiB0cnVlLCBhZnRlcjogKHtyZXR1cm5WYWx1ZX0pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmt1cCA9IHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm9sZUNvbG9yID0gdGhpc09iamVjdC5wcm9wcy5tZXNzYWdlLmNvbG9yU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hcmt1cCAmJiByb2xlQ29sb3IpIG1hcmt1cC5wcm9wcy5zdHlsZSA9IHtjb2xvcjogcm9sZUNvbG9yfTtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIubWFya3VwLTJCT3ctalwiKS5mb3JFYWNoKGVsZW0gPT4ge1xyXG4gICAgICAgICAgICBlbGVtLnN0eWxlLnNldFByb3BlcnR5KFwiY29sb3JcIiwgXCJcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/coloredtext.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\nconst MessageContent = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.default && m.default.displayName && m.default.displayName == \"Message\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ColoredText extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"ColoredText\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"coloredText\";\n }\n\n enabled() {\n this.injectColoredText();\n }\n\n disabled() {\n this.unpatchAll();\n }\n\n injectColoredText() {\n this.after(MessageContent.prototype, \"render\", (thisObject, args, retVal) => {\n this.after(retVal.props, \"children\", {\n silent: true,\n after: ({\n returnValue\n }) => {\n const markup = returnValue.props.children[1];\n const roleColor = thisObject.props.message.colorString;\n if (markup && roleColor) markup.props.style = {\n color: roleColor\n };\n }\n });\n });\n }\n\n removeColoredText() {\n document.querySelectorAll(\".markup-2BOw-j\").forEach(elem => {\n elem.style.setProperty(\"color\", \"\");\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2NvbG9yZWR0ZXh0LmpzP2RlMDkiXSwibmFtZXMiOlsiTWVzc2FnZUNvbnRlbnQiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0IiwiZGlzcGxheU5hbWUiLCJDb2xvcmVkVGV4dCIsIkJ1aWx0aW4iLCJuYW1lIiwiY2F0ZWdvcnkiLCJpZCIsImVuYWJsZWQiLCJpbmplY3RDb2xvcmVkVGV4dCIsImRpc2FibGVkIiwidW5wYXRjaEFsbCIsImFmdGVyIiwicHJvdG90eXBlIiwidGhpc09iamVjdCIsImFyZ3MiLCJyZXRWYWwiLCJwcm9wcyIsInNpbGVudCIsInJldHVyblZhbHVlIiwibWFya3VwIiwiY2hpbGRyZW4iLCJyb2xlQ29sb3IiLCJtZXNzYWdlIiwiY29sb3JTdHJpbmciLCJzdHlsZSIsImNvbG9yIiwicmVtb3ZlQ29sb3JlZFRleHQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiZWxlbSIsInNldFByb3BlcnR5Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUEsTUFBTUEsY0FBYyxHQUFHQyxzREFBYyxDQUFDQyxTQUFmLENBQXlCQyxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVUMsV0FBdkIsSUFBc0NGLENBQUMsQ0FBQ0MsT0FBRixDQUFVQyxXQUFWLElBQXlCLFNBQTdGLENBQXZCO0FBRWUsbUVBQUksTUFBTUMsV0FBTixTQUEwQkMsd0RBQTFCLENBQWtDO0FBQ2pELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sYUFBUDtBQUFzQjs7QUFDbEMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxZQUFQO0FBQXFCOztBQUNyQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLGFBQVA7QUFBc0I7O0FBRWhDQyxTQUFPLEdBQUc7QUFDTixTQUFLQyxpQkFBTDtBQUNIOztBQUVEQyxVQUFRLEdBQUc7QUFDUCxTQUFLQyxVQUFMO0FBQ0g7O0FBRURGLG1CQUFpQixHQUFHO0FBQ2hCLFNBQUtHLEtBQUwsQ0FBV2YsY0FBYyxDQUFDZ0IsU0FBMUIsRUFBcUMsUUFBckMsRUFBK0MsQ0FBQ0MsVUFBRCxFQUFhQyxJQUFiLEVBQW1CQyxNQUFuQixLQUE4QjtBQUN6RSxXQUFLSixLQUFMLENBQVdJLE1BQU0sQ0FBQ0MsS0FBbEIsRUFBeUIsVUFBekIsRUFBcUM7QUFBQ0MsY0FBTSxFQUFFLElBQVQ7QUFBZU4sYUFBSyxFQUFFLENBQUM7QUFBQ087QUFBRCxTQUFELEtBQW1CO0FBQzFFLGdCQUFNQyxNQUFNLEdBQUdELFdBQVcsQ0FBQ0YsS0FBWixDQUFrQkksUUFBbEIsQ0FBMkIsQ0FBM0IsQ0FBZjtBQUNBLGdCQUFNQyxTQUFTLEdBQUdSLFVBQVUsQ0FBQ0csS0FBWCxDQUFpQk0sT0FBakIsQ0FBeUJDLFdBQTNDO0FBQ0EsY0FBSUosTUFBTSxJQUFJRSxTQUFkLEVBQXlCRixNQUFNLENBQUNILEtBQVAsQ0FBYVEsS0FBYixHQUFxQjtBQUFDQyxpQkFBSyxFQUFFSjtBQUFSLFdBQXJCO0FBQzVCO0FBSm9DLE9BQXJDO0FBS0gsS0FORDtBQU9IOztBQUVESyxtQkFBaUIsR0FBRztBQUNoQkMsWUFBUSxDQUFDQyxnQkFBVCxDQUEwQixnQkFBMUIsRUFBNENDLE9BQTVDLENBQW9EQyxJQUFJLElBQUk7QUFDeERBLFVBQUksQ0FBQ04sS0FBTCxDQUFXTyxXQUFYLENBQXVCLE9BQXZCLEVBQWdDLEVBQWhDO0FBQ0gsS0FGRDtBQUdIOztBQTNCZ0QsQ0FBdEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9jb2xvcmVkdGV4dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtXZWJwYWNrTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmNvbnN0IE1lc3NhZ2VDb250ZW50ID0gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5kZWZhdWx0ICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJNZXNzYWdlXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENvbG9yZWRUZXh0IGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJDb2xvcmVkVGV4dFwiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJhcHBlYXJhbmNlXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcImNvbG9yZWRUZXh0XCI7fVxyXG5cclxuICAgIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgdGhpcy5pbmplY3RDb2xvcmVkVGV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIHRoaXMudW5wYXRjaEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdENvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIHRoaXMuYWZ0ZXIoTWVzc2FnZUNvbnRlbnQucHJvdG90eXBlLCBcInJlbmRlclwiLCAodGhpc09iamVjdCwgYXJncywgcmV0VmFsKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWZ0ZXIocmV0VmFsLnByb3BzLCBcImNoaWxkcmVuXCIsIHtzaWxlbnQ6IHRydWUsIGFmdGVyOiAoe3JldHVyblZhbHVlfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFya3VwID0gcmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb2xlQ29sb3IgPSB0aGlzT2JqZWN0LnByb3BzLm1lc3NhZ2UuY29sb3JTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFya3VwICYmIHJvbGVDb2xvcikgbWFya3VwLnByb3BzLnN0eWxlID0ge2NvbG9yOiByb2xlQ29sb3J9O1xyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ29sb3JlZFRleHQoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5tYXJrdXAtMkJPdy1qXCIpLmZvckVhY2goZWxlbSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW0uc3R5bGUuc2V0UHJvcGVydHkoXCJjb2xvclwiLCBcIlwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/coloredtext.js\n"); /***/ }), @@ -167,7 +167,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class DeveloperMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"DeveloperMode\";\n }\n\n get category() {\n return \"developer\";\n }\n\n get id() {\n return \"developerMode\";\n }\n\n get selectorModeID() {\n return \"copySelector\";\n }\n\n get selectorMode() {\n return this.get(this.selectorModeID);\n }\n\n constructor() {\n super();\n this.enableSelectors = this.enableSelectors.bind(this);\n this.disableSelectors = this.disableSelectors.bind(this);\n }\n\n enabled() {\n $(window).on(\"keydown.bdDevmode\", e => {\n if (e.which === 119 || e.which == 118) {\n //F8\n this.log(\"Debugger Activated\");\n debugger; // eslint-disable-line no-debugger\n }\n });\n if (this.selectorMode) this.enableSelectors();\n this.selectorCancel = this.registerSetting(this.selectorModeID, this.enableSelectors, this.disableSelectors);\n }\n\n disabled() {\n $(window).off(\"keydown.bdDevmode\");\n if (this.selectorMode) this.disableSelectors();\n if (this.selectorCancel) this.selectorCancel();\n }\n\n enableSelectors() {\n $(document).on(\"contextmenu.bdDevmode\", e => {\n this.lastSelector = this.getSelector(e.toElement);\n\n const attach = () => {\n let cm = $(\".contextMenu-HLZMGh\");\n\n if (cm.length <= 0) {\n cm = $(\"
\");\n cm.addClass($(\".app, .app-2rEoOp\").hasClass(\"theme-dark\") ? \"theme-dark\" : \"theme-light\");\n cm.appendTo(\".app, .app-2rEoOp\");\n cm.css(\"top\", e.clientY);\n cm.css(\"left\", e.clientX);\n $(document).on(\"click.bdDevModeCtx\", () => {\n cm.remove();\n $(document).off(\".bdDevModeCtx\");\n });\n $(document).on(\"contextmenu.bdDevModeCtx\", () => {\n cm.remove();\n $(document).off(\".bdDevModeCtx\");\n });\n $(document).on(\"keyup.bdDevModeCtx\", event => {\n if (event.keyCode === 27) {\n cm.remove();\n $(document).off(\".bdDevModeCtx\");\n }\n });\n }\n\n const cmo = $(\"
\", {\n \"class\": \"itemGroup-1tL0uz\"\n });\n const cmi = $(\"
\", {\n \"class\": \"item-1Yvehc\",\n \"click\": () => {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].ElectronModule.copy(this.lastSelector);\n cm.hide();\n }\n }).append($(\"\", {\n text: modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Collections.settings.developer.copySelector.name\n }));\n cmo.append(cmi);\n cm.append(cmo);\n if (cm.hasClass(\"undefined\")) cm.css(\"top\", \"-=\" + cmo.outerHeight());\n };\n\n setImmediate(attach);\n e.stopPropagation();\n });\n }\n\n disableSelectors() {\n $(document).off(\"contextmenu.bdDevmode\");\n $(document).off(\"contextmenu.bdDevModeCtx\");\n }\n\n getRules(element, css = element.ownerDocument.styleSheets) {\n // return [].concat(...[...css].map(s => [...s.cssRules || []])).filter(r => r && r.selectorText && element.matches(r.selectorText) && r.style.length && r.selectorText.split(\", \").length < 8);\n const sheets = [...css].filter(s => !s.href || !s.href.includes(\"BetterDiscordApp\"));\n const rules = sheets.map(s => [...(s.cssRules || [])]).flat();\n const elementRules = rules.filter(r => r && r.selectorText && element.matches(r.selectorText) && r.style.length && r.selectorText.split(\", \").length < 8 && !r.selectorText.split(\", \").includes(\"*\"));\n return elementRules;\n }\n\n getSelector(element) {\n if (element.id) return `#${element.id}`;\n const rules = this.getRules(element);\n const latestRule = rules[rules.length - 1];\n if (latestRule) return latestRule.selectorText;else if (element.classList.length) return `.${Array.from(element.classList).join(\".\")}`;\n return `.${Array.from(element.parentElement.classList).join(\".\")}`;\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2RldmVsb3Blcm1vZGUuanM/NjY2OSJdLCJuYW1lcyI6WyJEZXZlbG9wZXJNb2RlIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwic2VsZWN0b3JNb2RlSUQiLCJzZWxlY3Rvck1vZGUiLCJnZXQiLCJjb25zdHJ1Y3RvciIsImVuYWJsZVNlbGVjdG9ycyIsImJpbmQiLCJkaXNhYmxlU2VsZWN0b3JzIiwiZW5hYmxlZCIsIiQiLCJ3aW5kb3ciLCJvbiIsImUiLCJ3aGljaCIsImxvZyIsInNlbGVjdG9yQ2FuY2VsIiwicmVnaXN0ZXJTZXR0aW5nIiwiZGlzYWJsZWQiLCJvZmYiLCJkb2N1bWVudCIsImxhc3RTZWxlY3RvciIsImdldFNlbGVjdG9yIiwidG9FbGVtZW50IiwiYXR0YWNoIiwiY20iLCJsZW5ndGgiLCJhZGRDbGFzcyIsImhhc0NsYXNzIiwiYXBwZW5kVG8iLCJjc3MiLCJjbGllbnRZIiwiY2xpZW50WCIsInJlbW92ZSIsImV2ZW50Iiwia2V5Q29kZSIsImNtbyIsImNtaSIsIkRpc2NvcmRNb2R1bGVzIiwiRWxlY3Ryb25Nb2R1bGUiLCJjb3B5IiwiaGlkZSIsImFwcGVuZCIsInRleHQiLCJTdHJpbmdzIiwiQ29sbGVjdGlvbnMiLCJzZXR0aW5ncyIsImRldmVsb3BlciIsImNvcHlTZWxlY3RvciIsIm91dGVySGVpZ2h0Iiwic2V0SW1tZWRpYXRlIiwic3RvcFByb3BhZ2F0aW9uIiwiZ2V0UnVsZXMiLCJlbGVtZW50Iiwib3duZXJEb2N1bWVudCIsInN0eWxlU2hlZXRzIiwic2hlZXRzIiwiZmlsdGVyIiwicyIsImhyZWYiLCJpbmNsdWRlcyIsInJ1bGVzIiwibWFwIiwiY3NzUnVsZXMiLCJmbGF0IiwiZWxlbWVudFJ1bGVzIiwiciIsInNlbGVjdG9yVGV4dCIsIm1hdGNoZXMiLCJzdHlsZSIsInNwbGl0IiwibGF0ZXN0UnVsZSIsImNsYXNzTGlzdCIsIkFycmF5IiwiZnJvbSIs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QSxPQUFPLENBQUNwRCxFQUFaLEVBQWdCLE9BQVEsSUFBR29ELE9BQU8sQ0FBQ3BELEVBQUcsRUFBdEI7QUFDaEIsVUFBTTRELEtBQUssR0FBRyxLQUFLVCxRQUFMLENBQWNDLE9BQWQsQ0FBZDtBQUNBLFVBQU1rQixVQUFVLEdBQUdWLEtBQUssQ0FBQ0EsS0FBSyxDQUFDbkMsTUFBTixHQUFlLENBQWhCLENBQXhCO0FBQ0EsUUFBSTZDLFVBQUosRUFBZ0IsT0FBT0EsVUFBVSxDQUFDSixZQUFsQixDQUFoQixLQUNLLElBQUlkLE9BQU8sQ0FBQ21CLFNBQVIsQ0FBa0I5QyxNQUF0QixFQUE4QixPQUFRLElBQUcrQyxLQUFLLENBQUNDLElBQU4sQ0FBV3JCLE9BQU8sQ0FBQ21CLFNBQW5CLEVBQThCRyxJQUE5QixDQUFtQyxHQUFuQyxDQUF3QyxFQUFuRDtBQUNuQyxXQUFRLElBQUdGLEtBQUssQ0FBQ0MsSUFBTixDQUFXckIsT0FBTyxDQUFDdUIsYUFBUixDQUFzQkosU0FBakMsRUFBNENHLElBQTVDLENBQWlELEdBQWpELENBQXNELEVBQWpFO0FBQ0g7O0FBbEdrRCxDQUF4QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2RldmVsb3Blcm1vZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcbmltcG9ydCB7RGlzY29yZE1vZHVsZXMsIFN0cmluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGV2ZWxvcGVyTW9kZSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiRGV2ZWxvcGVyTW9kZVwiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJkZXZlbG9wZXJcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiZGV2ZWxvcGVyTW9kZVwiO31cclxuICAgIGdldCBzZWxlY3Rvck1vZGVJRCgpIHtyZXR1cm4gXCJjb3B5U2VsZWN0b3JcIjt9XHJcbiAgICBnZXQgc2VsZWN0b3JNb2RlKCkge3JldHVybiB0aGlzLmdldCh0aGlzLnNlbGVjdG9yTW9kZUlEKTt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmVuYWJsZVNlbGVjdG9ycyA9IHRoaXMuZW5hYmxlU2VsZWN0b3JzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0b3JzID0gdGhpcy5kaXNhYmxlU2VsZWN0b3JzLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlZCgpIHtcclxuICAgICAgICAkKHdpbmRvdykub24oXCJrZXlkb3duLmJkRGV2bW9kZVwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZS53aGljaCA9PT0gMTE5IHx8IGUud2hpY2ggPT0gMTE4KSB7Ly9GOFxyXG4gICAgICAgICAgICAgICB0aGlzLmxvZyhcIkRlYnVnZ2VyIEFjdGl2YXRlZFwiKTtcclxuICAgICAgICAgICAgICAgZGVidWdnZXI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZGVidWdnZXJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdG9yTW9kZSkgdGhpcy5lbmFibGVTZWxlY3RvcnMoKTtcclxuICAgICAgICB0aGlzLnNlbGVjdG9yQ2FuY2VsID0gdGhpcy5yZWdpc3RlclNldHRpbmcodGhpcy5zZWxlY3Rvck1vZGVJRCwgdGhpcy5lbmFibGVTZWxlY3RvcnMsIHRoaXMuZGlzYWJsZVNlbGVjdG9ycyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgJCh3aW5kb3cpLm9mZihcImtleWRvd24uYmREZXZtb2RlXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdG9yTW9kZSkgdGhpcy5kaXNhYmxlU2VsZWN0b3JzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0b3JDYW5jZWwpIHRoaXMuc2VsZWN0b3JDYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVTZWxlY3RvcnMoKSB7XHJcbiAgICAgICAgJChkb2N1bWVudCkub24oXCJjb250ZXh0bWVudS5iZERldm1vZGVcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKGUudG9FbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgbGV0IGNtID0gJChcIi5jb250ZXh0TWVudS1ITFpNR2hcIik7XHJcbiAgICAgICAgICAgICAgIGlmIChjbS5sZW5ndGggPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgY20gPSAkKFwiPGRpdiBjbGFzcz1cXFwiY29udGV4dE1lbnUtSExaTUdoIGJkLWNvbnRleHQtbWVudVxcXCI+PC9kaXY+XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgY20uYWRkQ2xhc3MoJChcIi5hcHAsIC5hcHAtMnJFb09wXCIpLmhhc0NsYXNzKFwidGhlbWUtZGFya1wiKSA/IFwidGhlbWUtZGFya1wiIDogXCJ0aGVtZS1saWdodFwiKTtcclxuICAgICAgICAgICAgICAgICAgIGNtLmFwcGVuZFRvKFwiLmFwcCwgLmFwcC0yckVvT3BcIik7XHJcbiAgICAgICAgICAgICAgICAgICBjbS5jc3MoXCJ0b3BcIiwgZS5jbGllbnRZKTtcclxuICAgICAgICAgICAgICAgICAgIGNtLmNzcyhcImxlZnRcIiwgZS5jbGllbnRYKTtcclxuICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2suYmREZXZNb2RlQ3R4XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICBjbS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCIuYmREZXZNb2RlQ3R4XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vbihcImNvbnRleHRtZW51LmJkRGV2TW9kZUN0eFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgY20ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKFwiLmJkRGV2TW9kZUN0eFwiKTtcclxuICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkub24oXCJrZXl1cC5iZERldk1vZGVDdHhcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCIuYmREZXZNb2RlQ3R4XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICBjb25zdCBjbW8gPSAkKFwiPGRpdi8+XCIsIHtcclxuICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogXCJpdGVtR3JvdXAtMXRMMHV6XCJcclxuICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgIGNvbnN0IGNtaSA9ICQoXCI8ZGl2Lz5cIiwge1xyXG4gICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIml0ZW0tMVl2ZWhjXCIsXHJcbiAgICAgICAgICAgICAgICAgICBcImNsaWNrXCI6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTW9kdWxlcy5FbGVjdHJvbk1vZHVsZS5jb3B5KHRoaXMubGFzdFNlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICBjbS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIH0pLmFwcGVuZCgkKFwiPHNwYW4vPlwiLCB7dGV4dDogU3RyaW5ncy5Db2xsZWN0aW9ucy5zZXR0aW5ncy5kZXZlbG9wZXIuY29weVNlbGVjdG9yLm5hbWV9KSk7XHJcbiAgICAgICAgICAgICAgIGNtby5hcHBlbmQoY21pKTtcclxuICAgICAgICAgICAgICAgY20uYXBwZW5kKGNtbyk7XHJcbiAgICAgICAgICAgICAgIGlmIChjbS5oYXNDbGFzcyhcInVuZGVmaW5lZFwiKSkgY20uY3NzKFwidG9wXCIsICBcIi09XCIgKyBjbW8ub3V0ZXJIZWlnaHQoKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoYXR0YWNoKTtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlU2VsZWN0b3JzKCkge1xyXG4gICAgICAgICQoZG9jdW1lbnQpLm9mZihcImNvbnRleHRtZW51LmJkRGV2bW9kZVwiKTtcclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCJjb250ZXh0bWVudS5iZERldk1vZGVDdHhcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UnVsZXMoZWxlbWVudCwgY3NzID0gZWxlbWVudC5vd25lckRvY3VtZW50LnN0eWxlU2hlZXRzKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIFtdLmNvbmNhdCguLi5bLi4uY3NzXS5tYXAocyA9PiBbLi4ucy5jc3NSdWxlcyB8fCBbXV0pKS5maWx0ZXIociA9PiByICYmIHIuc2VsZWN0b3JUZXh0ICYmIGVsZW1lbnQubWF0Y2hlcyhyLnNlbGVjdG9yVGV4dCkgJiYgci5zdHlsZS5sZW5ndGggJiYgci5zZWxlY3RvclRleHQuc3BsaXQoXCIsIFwiKS5sZW5ndGggPCA4KTtcclxuICAgICAgICBjb25zdCBzaGVldHMgPSBbLi4uY3NzXS5maWx0ZXIocyA9PiAhcy5ocmVmIHx8ICFzLmhyZWYuaW5jbHVkZXMoXCJCZXR0ZXJEaXNjb3JkQXBwXCIpKTtcclxuICAgICAgICBjb25zdCBydWxlcyA9IHNoZWV0cy5tYXAocyA9PiBbLi4uKHMuY3NzUnVsZXMgfHwgW10pXSkuZmxhdCgpO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRSdWxlcyA9IHJ1bGVzLmZpbHRlcihyID0+IHIgJiYgci5zZWxlY3RvclRleHQgJiYgZWxlbWVudC5tYXRjaGVzKHIuc2VsZWN0b3JUZXh0KSAmJiByLnN0eWxlLmxlbmd0aCAmJiByLnNlbGVjdG9yVGV4dC5zcGxpdChcIiwgXCIpLmxlbmd0aCA8IDggJiYgIXIuc2VsZWN0b3JUZXh0LnNwbGl0KFwiLCBcIikuaW5jbHVkZXMoXCIqXCIpKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudFJ1bGVzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdG9yKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZCkgcmV0dXJuIGAjJHtlbGVtZW50LmlkfWA7XHJcbiAgICAgICAgY29uc3QgcnVsZXMgPSB0aGlzLmdldFJ1bGVzKGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdFJ1bGUgPSBydWxlc1tydWxlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAobGF0ZXN0UnVsZSkgcmV0dXJuIGxhdGVzdFJ1bGUuc2VsZWN0b3JUZXh0O1xyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCkgcmV0dXJuIGAuJHtBcnJheS5mcm9tKGVsZW1lbnQuY2xhc3NMaXN0KS5qb2luKFwiLlwiKX1gO1xyXG4gICAgICAgIHJldHVybiBgLiR7QXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0KS5qb2luKFwiLlwiKX1gO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/developermode.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class DeveloperMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"DeveloperMode\";\n }\n\n get category() {\n return \"developer\";\n }\n\n get id() {\n return \"developerMode\";\n }\n\n get selectorModeID() {\n return \"copySelector\";\n }\n\n get selectorMode() {\n return this.get(this.selectorModeID);\n }\n\n constructor() {\n super();\n this.enableSelectors = this.enableSelectors.bind(this);\n this.disableSelectors = this.disableSelectors.bind(this);\n }\n\n enabled() {\n $(document).on(\"keydown.bdDevmode\", e => {\n if (e.which === 119 || e.which == 118) {\n //F8\n this.log(\"Debugger Activated\");\n debugger; // eslint-disable-line no-debugger\n }\n });\n if (this.selectorMode) this.enableSelectors();\n this.selectorCancel = this.registerSetting(this.selectorModeID, this.enableSelectors, this.disableSelectors);\n }\n\n disabled() {\n $(document).off(\"keydown.bdDevmode\");\n if (this.selectorMode) this.disableSelectors();\n if (this.selectorCancel) this.selectorCancel();\n }\n\n enableSelectors() {\n $(document).on(\"contextmenu.bdDevmode\", e => {\n this.lastSelector = this.getSelector(e.toElement);\n\n const attach = () => {\n let cm = $(\".contextMenu-HLZMGh\");\n\n if (cm.length <= 0) {\n cm = $(\"
\");\n cm.addClass($(\".app, .app-2rEoOp\").hasClass(\"theme-dark\") ? \"theme-dark\" : \"theme-light\");\n cm.appendTo(\".app, .app-2rEoOp\");\n cm.css(\"top\", e.clientY);\n cm.css(\"left\", e.clientX);\n $(document).on(\"click.bdDevModeCtx\", () => {\n cm.remove();\n $(document).off(\".bdDevModeCtx\");\n });\n $(document).on(\"contextmenu.bdDevModeCtx\", () => {\n cm.remove();\n $(document).off(\".bdDevModeCtx\");\n });\n $(document).on(\"keyup.bdDevModeCtx\", event => {\n if (event.keyCode === 27) {\n cm.remove();\n $(document).off(\".bdDevModeCtx\");\n }\n });\n }\n\n const cmo = $(\"
\", {\n \"class\": \"itemGroup-1tL0uz\"\n });\n const cmi = $(\"
\", {\n \"class\": \"item-1Yvehc\",\n \"click\": () => {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].ElectronModule.copy(this.lastSelector);\n cm.hide();\n }\n }).append($(\"\", {\n text: modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Collections.settings.developer.copySelector.name\n }));\n cmo.append(cmi);\n cm.append(cmo);\n if (cm.hasClass(\"undefined\")) cm.css(\"top\", \"-=\" + cmo.outerHeight());\n };\n\n setImmediate(attach);\n e.stopPropagation();\n });\n }\n\n disableSelectors() {\n $(document).off(\"contextmenu.bdDevmode\");\n $(document).off(\"contextmenu.bdDevModeCtx\");\n }\n\n getRules(element, css = element.ownerDocument.styleSheets) {\n // return [].concat(...[...css].map(s => [...s.cssRules || []])).filter(r => r && r.selectorText && element.matches(r.selectorText) && r.style.length && r.selectorText.split(\", \").length < 8);\n const sheets = [...css].filter(s => !s.href || !s.href.includes(\"BetterDiscordApp\"));\n const rules = sheets.map(s => [...(s.cssRules || [])]).flat();\n const elementRules = rules.filter(r => r && r.selectorText && element.matches(r.selectorText) && r.style.length && r.selectorText.split(\", \").length < 8 && !r.selectorText.split(\", \").includes(\"*\"));\n return elementRules;\n }\n\n getSelector(element) {\n if (element.id) return `#${element.id}`;\n const rules = this.getRules(element);\n const latestRule = rules[rules.length - 1];\n if (latestRule) return latestRule.selectorText;else if (element.classList.length) return `.${Array.from(element.classList).join(\".\")}`;\n return `.${Array.from(element.parentElement.classList).join(\".\")}`;\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2RldmVsb3Blcm1vZGUuanM/NjY2OSJdLCJuYW1lcyI6WyJEZXZlbG9wZXJNb2RlIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwic2VsZWN0b3JNb2RlSUQiLCJzZWxlY3Rvck1vZGUiLCJnZXQiLCJjb25zdHJ1Y3RvciIsImVuYWJsZVNlbGVjdG9ycyIsImJpbmQiLCJkaXNhYmxlU2VsZWN0b3JzIiwiZW5hYmxlZCIsIiQiLCJkb2N1bWVudCIsIm9uIiwiZSIsIndoaWNoIiwibG9nIiwic2VsZWN0b3JDYW5jZWwiLCJyZWdpc3RlclNldHRpbmciLCJkaXNhYmxlZCIsIm9mZiIsImxhc3RTZWxlY3RvciIsImdldFNlbGVjdG9yIiwidG9FbGVtZW50IiwiYXR0YWNoIiwiY20iLCJsZW5ndGgiLCJhZGRDbGFzcyIsImhhc0NsYXNzIiwiYXBwZW5kVG8iLCJjc3MiLCJjbGllbnRZIiwiY2xpZW50WCIsInJlbW92ZSIsImV2ZW50Iiwia2V5Q29kZSIsImNtbyIsImNtaSIsIkRpc2NvcmRNb2R1bGVzIiwiRWxlY3Ryb25Nb2R1bGUiLCJjb3B5IiwiaGlkZSIsImFwcGVuZCIsInRleHQiLCJTdHJpbmdzIiwiQ29sbGVjdGlvbnMiLCJzZXR0aW5ncyIsImRldmVsb3BlciIsImNvcHlTZWxlY3RvciIsIm91dGVySGVpZ2h0Iiwic2V0SW1tZWRpYXRlIiwic3RvcFByb3BhZ2F0aW9uIiwiZ2V0UnVsZXMiLCJlbGVtZW50Iiwib3duZXJEb2N1bWVudCIsInN0eWxlU2hlZXRzIiwic2hlZXRzIiwiZmlsdGVyIiwicyIsImhyZWYiLCJpbmNsdWRlcyIsInJ1bGVzIiwibWFwIiwiY3NzUnVsZXMiLCJmbGF0IiwiZWxlbWVudFJ1bGVzIiwiciIsInNlbGVjdG9yVGV4dCIsIm1hdGNoZXMiLCJzdHlsZSIsInNwbGl0IiwibGF0ZXN0UnVsZSIsImNsYXNzTGlzdCIsIkFycmF5IiwiZnJvbSIsImpvaW4iLCJw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Q0FBQ25ELEVBQVosRUFBZ0IsT0FBUSxJQUFHbUQsT0FBTyxDQUFDbkQsRUFBRyxFQUF0QjtBQUNoQixVQUFNMkQsS0FBSyxHQUFHLEtBQUtULFFBQUwsQ0FBY0MsT0FBZCxDQUFkO0FBQ0EsVUFBTWtCLFVBQVUsR0FBR1YsS0FBSyxDQUFDQSxLQUFLLENBQUNuQyxNQUFOLEdBQWUsQ0FBaEIsQ0FBeEI7QUFDQSxRQUFJNkMsVUFBSixFQUFnQixPQUFPQSxVQUFVLENBQUNKLFlBQWxCLENBQWhCLEtBQ0ssSUFBSWQsT0FBTyxDQUFDbUIsU0FBUixDQUFrQjlDLE1BQXRCLEVBQThCLE9BQVEsSUFBRytDLEtBQUssQ0FBQ0MsSUFBTixDQUFXckIsT0FBTyxDQUFDbUIsU0FBbkIsRUFBOEJHLElBQTlCLENBQW1DLEdBQW5DLENBQXdDLEVBQW5EO0FBQ25DLFdBQVEsSUFBR0YsS0FBSyxDQUFDQyxJQUFOLENBQVdyQixPQUFPLENBQUN1QixhQUFSLENBQXNCSixTQUFqQyxFQUE0Q0csSUFBNUMsQ0FBaUQsR0FBakQsQ0FBc0QsRUFBakU7QUFDSDs7QUFsR2tELENBQXhDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvZGV2ZWxvcGVybW9kZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtEaXNjb3JkTW9kdWxlcywgU3RyaW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEZXZlbG9wZXJNb2RlIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJEZXZlbG9wZXJNb2RlXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImRldmVsb3BlclwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJkZXZlbG9wZXJNb2RlXCI7fVxyXG4gICAgZ2V0IHNlbGVjdG9yTW9kZUlEKCkge3JldHVybiBcImNvcHlTZWxlY3RvclwiO31cclxuICAgIGdldCBzZWxlY3Rvck1vZGUoKSB7cmV0dXJuIHRoaXMuZ2V0KHRoaXMuc2VsZWN0b3JNb2RlSUQpO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlU2VsZWN0b3JzID0gdGhpcy5lbmFibGVTZWxlY3RvcnMuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVTZWxlY3RvcnMgPSB0aGlzLmRpc2FibGVTZWxlY3RvcnMuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgICQoZG9jdW1lbnQpLm9uKFwia2V5ZG93bi5iZERldm1vZGVcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IDExOSB8fCBlLndoaWNoID09IDExOCkgey8vRjhcclxuICAgICAgICAgICAgICAgdGhpcy5sb2coXCJEZWJ1Z2dlciBBY3RpdmF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgIGRlYnVnZ2VyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWRlYnVnZ2VyXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rvck1vZGUpIHRoaXMuZW5hYmxlU2VsZWN0b3JzKCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RvckNhbmNlbCA9IHRoaXMucmVnaXN0ZXJTZXR0aW5nKHRoaXMuc2VsZWN0b3JNb2RlSUQsIHRoaXMuZW5hYmxlU2VsZWN0b3JzLCB0aGlzLmRpc2FibGVTZWxlY3RvcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgICQoZG9jdW1lbnQpLm9mZihcImtleWRvd24uYmREZXZtb2RlXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdG9yTW9kZSkgdGhpcy5kaXNhYmxlU2VsZWN0b3JzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0b3JDYW5jZWwpIHRoaXMuc2VsZWN0b3JDYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVTZWxlY3RvcnMoKSB7XHJcbiAgICAgICAgJChkb2N1bWVudCkub24oXCJjb250ZXh0bWVudS5iZERldm1vZGVcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKGUudG9FbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgbGV0IGNtID0gJChcIi5jb250ZXh0TWVudS1ITFpNR2hcIik7XHJcbiAgICAgICAgICAgICAgIGlmIChjbS5sZW5ndGggPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgY20gPSAkKFwiPGRpdiBjbGFzcz1cXFwiY29udGV4dE1lbnUtSExaTUdoIGJkLWNvbnRleHQtbWVudVxcXCI+PC9kaXY+XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgY20uYWRkQ2xhc3MoJChcIi5hcHAsIC5hcHAtMnJFb09wXCIpLmhhc0NsYXNzKFwidGhlbWUtZGFya1wiKSA/IFwidGhlbWUtZGFya1wiIDogXCJ0aGVtZS1saWdodFwiKTtcclxuICAgICAgICAgICAgICAgICAgIGNtLmFwcGVuZFRvKFwiLmFwcCwgLmFwcC0yckVvT3BcIik7XHJcbiAgICAgICAgICAgICAgICAgICBjbS5jc3MoXCJ0b3BcIiwgZS5jbGllbnRZKTtcclxuICAgICAgICAgICAgICAgICAgIGNtLmNzcyhcImxlZnRcIiwgZS5jbGllbnRYKTtcclxuICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2suYmREZXZNb2RlQ3R4XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICBjbS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCIuYmREZXZNb2RlQ3R4XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vbihcImNvbnRleHRtZW51LmJkRGV2TW9kZUN0eFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgY20ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKFwiLmJkRGV2TW9kZUN0eFwiKTtcclxuICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkub24oXCJrZXl1cC5iZERldk1vZGVDdHhcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCIuYmREZXZNb2RlQ3R4XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICBjb25zdCBjbW8gPSAkKFwiPGRpdi8+XCIsIHtcclxuICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogXCJpdGVtR3JvdXAtMXRMMHV6XCJcclxuICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgIGNvbnN0IGNtaSA9ICQoXCI8ZGl2Lz5cIiwge1xyXG4gICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIml0ZW0tMVl2ZWhjXCIsXHJcbiAgICAgICAgICAgICAgICAgICBcImNsaWNrXCI6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTW9kdWxlcy5FbGVjdHJvbk1vZHVsZS5jb3B5KHRoaXMubGFzdFNlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICBjbS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIH0pLmFwcGVuZCgkKFwiPHNwYW4vPlwiLCB7dGV4dDogU3RyaW5ncy5Db2xsZWN0aW9ucy5zZXR0aW5ncy5kZXZlbG9wZXIuY29weVNlbGVjdG9yLm5hbWV9KSk7XHJcbiAgICAgICAgICAgICAgIGNtby5hcHBlbmQoY21pKTtcclxuICAgICAgICAgICAgICAgY20uYXBwZW5kKGNtbyk7XHJcbiAgICAgICAgICAgICAgIGlmIChjbS5oYXNDbGFzcyhcInVuZGVmaW5lZFwiKSkgY20uY3NzKFwidG9wXCIsICBcIi09XCIgKyBjbW8ub3V0ZXJIZWlnaHQoKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoYXR0YWNoKTtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlU2VsZWN0b3JzKCkge1xyXG4gICAgICAgICQoZG9jdW1lbnQpLm9mZihcImNvbnRleHRtZW51LmJkRGV2bW9kZVwiKTtcclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCJjb250ZXh0bWVudS5iZERldk1vZGVDdHhcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UnVsZXMoZWxlbWVudCwgY3NzID0gZWxlbWVudC5vd25lckRvY3VtZW50LnN0eWxlU2hlZXRzKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIFtdLmNvbmNhdCguLi5bLi4uY3NzXS5tYXAocyA9PiBbLi4ucy5jc3NSdWxlcyB8fCBbXV0pKS5maWx0ZXIociA9PiByICYmIHIuc2VsZWN0b3JUZXh0ICYmIGVsZW1lbnQubWF0Y2hlcyhyLnNlbGVjdG9yVGV4dCkgJiYgci5zdHlsZS5sZW5ndGggJiYgci5zZWxlY3RvclRleHQuc3BsaXQoXCIsIFwiKS5sZW5ndGggPCA4KTtcclxuICAgICAgICBjb25zdCBzaGVldHMgPSBbLi4uY3NzXS5maWx0ZXIocyA9PiAhcy5ocmVmIHx8ICFzLmhyZWYuaW5jbHVkZXMoXCJCZXR0ZXJEaXNjb3JkQXBwXCIpKTtcclxuICAgICAgICBjb25zdCBydWxlcyA9IHNoZWV0cy5tYXAocyA9PiBbLi4uKHMuY3NzUnVsZXMgfHwgW10pXSkuZmxhdCgpO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRSdWxlcyA9IHJ1bGVzLmZpbHRlcihyID0+IHIgJiYgci5zZWxlY3RvclRleHQgJiYgZWxlbWVudC5tYXRjaGVzKHIuc2VsZWN0b3JUZXh0KSAmJiByLnN0eWxlLmxlbmd0aCAmJiByLnNlbGVjdG9yVGV4dC5zcGxpdChcIiwgXCIpLmxlbmd0aCA8IDggJiYgIXIuc2VsZWN0b3JUZXh0LnNwbGl0KFwiLCBcIikuaW5jbHVkZXMoXCIqXCIpKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudFJ1bGVzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdG9yKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZCkgcmV0dXJuIGAjJHtlbGVtZW50LmlkfWA7XHJcbiAgICAgICAgY29uc3QgcnVsZXMgPSB0aGlzLmdldFJ1bGVzKGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdFJ1bGUgPSBydWxlc1tydWxlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAobGF0ZXN0UnVsZSkgcmV0dXJuIGxhdGVzdFJ1bGUuc2VsZWN0b3JUZXh0O1xyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCkgcmV0dXJuIGAuJHtBcnJheS5mcm9tKGVsZW1lbnQuY2xhc3NMaXN0KS5qb2luKFwiLlwiKX1gO1xyXG4gICAgICAgIHJldHVybiBgLiR7QXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0KS5qb2luKFwiLlwiKX1gO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/developermode.js\n"); /***/ }), @@ -191,7 +191,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _emotes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./emotes */ \"./src/builtins/emotes.js\");\n\n\n\nconst headerHTML = `
\n \n \n
`;\nconst twitchEmoteHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\nconst favoritesHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\n\nconst makeEmote = (emote, url, options = {}) => {\n const {\n onContextMenu,\n onClick\n } = options;\n const emoteContainer = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(`
\n \"${emote}\"\n
`);\n if (onContextMenu) emoteContainer.addEventListener(\"contextmenu\", onContextMenu);\n emoteContainer.addEventListener(\"click\", onClick);\n return emoteContainer;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteMenu extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"EmoteMenu\";\n }\n\n get collection() {\n return \"emotes\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emoteMenu\";\n }\n\n get hideEmojisID() {\n return \"hideEmojiMenu\";\n }\n\n get hideEmojis() {\n return this.get(this.hideEmojisID);\n }\n\n constructor() {\n super();\n this.lastTab = \"bd-qem-emojis\";\n this.qmeHeader = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(headerHTML);\n\n for (const button of this.qmeHeader.getElementsByTagName(\"button\")) button.addEventListener(\"click\", this.switchMenu.bind(this));\n\n this.teContainer = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(twitchEmoteHTML);\n this.teContainerInner = this.teContainer.querySelector(\".emote-menu-inner\");\n this.faContainer = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(favoritesHTML);\n this.faContainerInner = this.faContainer.querySelector(\".emote-menu-inner\");\n this.observer = new MutationObserver(mutations => {\n for (const mutation of mutations) this.observe(mutation);\n });\n this.enableHideEmojis = this.enableHideEmojis.bind(this);\n this.disableHideEmojis = this.disableHideEmojis.bind(this);\n this.updateTwitchEmotes = this.updateTwitchEmotes.bind(this);\n }\n\n async enabled() {\n this.log(\"Starting to observe\");\n this.observer.observe(document.getElementById(\"app-mount\"), {\n childList: true,\n subtree: true\n });\n this.hideEmojiCancel = this.registerSetting(this.hideEmojisID, this.enableHideEmojis, this.disableHideEmojis);\n if (this.hideEmojis) this.enableHideEmojis();\n if (_emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].emotesLoaded) this.updateTwitchEmotes();\n this.updateFavorites();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Events\"].on(\"emotes-loaded\", this.updateTwitchEmotes);\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Events\"].off(\"emotes-loaded\", this.updateTwitchEmotes);\n this.observer.disconnect();\n this.disableHideEmojis();\n if (this.hideEmojiCancel) this.hideEmojiCancel();\n }\n\n enableHideEmojis() {\n const picker = document.querySelector(\".emojiPicker-3m1S-j\");\n if (picker) picker.classList.add(\"bd-qme-hidden\");\n }\n\n disableHideEmojis() {\n const picker = document.querySelector(\".emojiPicker-3m1S-j\");\n if (picker) picker.classList.remove(\"bd-qme-hidden\");\n }\n\n insertEmote(emote) {\n const ta = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].getTextArea();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].insertText(ta[0], ta.val().slice(-1) == \" \" ? ta.val() + emote : ta.val() + \" \" + emote);\n }\n\n favContext(e) {\n e.stopPropagation();\n const em = e.target.closest(\".emote-container\").children[0];\n const menu = $(`
Remove
`);\n menu.css({\n top: e.pageY - $(\"#bd-qem-favourite-container\").offset().top,\n left: e.pageX - $(\"#bd-qem-favourite-container\").offset().left\n });\n $(em).parent().append(menu);\n menu.on(\"click\", event => {\n event.preventDefault();\n event.stopPropagation();\n $(em).remove();\n _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].removeFavorite($(em).attr(\"title\"));\n this.updateFavorites();\n $(document).off(\"mousedown.emotemenu\");\n });\n $(document).on(\"mousedown.emotemenu\", function (event) {\n if (event.target.id == \"removemenu\") return;\n $(\"#removemenu\").remove();\n $(document).off(\"mousedown.emotemenu\");\n });\n }\n\n switchMenu(e) {\n let id = typeof e == \"string\" ? e : e.target.id;\n if (id == \"bd-qem-emojis\" && this.hideEmojis) id = \"bd-qem-favourite\";\n const twitch = $(\"#bd-qem-twitch\");\n const fav = $(\"#bd-qem-favourite\");\n const emojis = $(\"#bd-qem-emojis\");\n twitch.removeClass(\"active\");\n fav.removeClass(\"active\");\n emojis.removeClass(\"active\");\n $(\".emojiPicker-3m1S-j\").hide();\n $(\"#bd-qem-favourite-container\").hide();\n $(\"#bd-qem-twitch-container\").hide();\n\n switch (id) {\n case \"bd-qem-twitch\":\n twitch.addClass(\"active\");\n $(\"#bd-qem-twitch-container\").show();\n break;\n\n case \"bd-qem-favourite\":\n fav.addClass(\"active\");\n $(\"#bd-qem-favourite-container\").show();\n break;\n\n case \"bd-qem-emojis\":\n emojis.addClass(\"active\");\n $(\".emojiPicker-3m1S-j\").show();\n $(\".emojiPicker-3m1S-j input\").focus();\n break;\n }\n\n if (id) this.lastTab = id;\n }\n\n observe(mutation) {\n if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) return;\n const node = mutation.addedNodes[0];\n if (!node.classList.contains(\"popout-3sVMXz\") || node.classList.contains(\"popoutLeft-30WmrD\") || !node.getElementsByClassName(\"emojiPicker-3m1S-j\").length) return;\n const e = $(node);\n if (this.hideEmojis) e.addClass(\"bd-qme-hidden\");else e.removeClass(\"bd-qme-hidden\");\n e.prepend(this.qmeHeader);\n e.append(this.teContainer);\n e.append(this.faContainer);\n this.switchMenu(this.lastTab);\n }\n\n updateTwitchEmotes() {\n while (this.teContainerInner.firstChild) this.teContainerInner.firstChild.remove();\n\n for (const emote in _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\")) {\n if (!_emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\").hasOwnProperty(emote)) continue;\n const url = _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getUrl(\"TwitchGlobal\", emote);\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote)\n });\n this.teContainerInner.append(emoteElement);\n }\n }\n\n updateFavorites() {\n while (this.faContainerInner.firstChild) this.faContainerInner.firstChild.remove();\n\n for (const emote in _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].favorites) {\n const url = _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].favorites[emote];\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote),\n onContextMenu: this.favContext.bind(this)\n });\n this.faContainerInner.append(emoteElement);\n }\n\n _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].saveFavorites();\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3RlbWVudS5qcz8yYWNlIl0sIm5hbWVzIjpbImhlYWRlckhUTUwiLCJ0d2l0Y2hFbW90ZUhUTUwiLCJmYXZvcml0ZXNIVE1MIiwibWFrZUVtb3RlIiwiZW1vdGUiLCJ1cmwiLCJvcHRpb25zIiwib25Db250ZXh0TWVudSIsIm9uQ2xpY2siLCJlbW90ZUNvbnRhaW5lciIsIlV0aWxpdGllcyIsInBhcnNlSFRNTCIsImFkZEV2ZW50TGlzdGVuZXIiLCJFbW90ZU1lbnUiLCJCdWlsdGluIiwibmFtZSIsImNvbGxlY3Rpb24iLCJjYXRlZ29yeSIsImlkIiwiaGlkZUVtb2ppc0lEIiwiaGlkZUVtb2ppcyIsImdldCIsImNvbnN0cnVjdG9yIiwibGFzdFRhYiIsInFtZUhlYWRlciIsImJ1dHRvbiIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3dpdGNoTWVudSIsImJpbmQiLCJ0ZUNvbnRhaW5lciIsInRlQ29udGFpbmVySW5uZXIiLCJxdWVyeVNlbGVjdG9yIiwiZmFDb250YWluZXIiLCJmYUNvbnRhaW5lcklubmVyIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwibXV0YXRpb24iLCJvYnNlcnZlIiwiZW5hYmxlSGlkZUVtb2ppcyIsImRpc2FibGVIaWRlRW1vamlzIiwidXBkYXRlVHdpdGNoRW1vdGVzIiwiZW5hYmxlZCIsImxvZyIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwiaGlkZUVtb2ppQ2FuY2VsIiwicmVnaXN0ZXJTZXR0aW5nIiwiRW1vdGVNb2R1bGUiLCJlbW90ZXNMb2FkZWQiLCJ1cGRhdGVGYXZvcml0ZXMiLCJFdmVudHMiLCJvbiIsImRpc2FibGVkIiwib2ZmIiwiZGlzY29ubmVjdCIsInBpY2tlciIsImNsYXNzTGlzdCIsImFkZCIsInJlbW92ZSIsImluc2VydEVtb3RlIiwidGEiLCJnZXRUZXh0QXJlYSIsImluc2VydFRleHQiLCJ2YWwiLCJzbGljZSIsImZhdkNvbnRleHQiLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwiZW0iLCJ0YXJnZXQiLCJjbG9zZXN0IiwiY2hpbGRyZW4iLCJtZW51IiwiJCIsImNzcyIsInRvcCIsInBhZ2VZIiwib2Zmc2V0IiwibGVmdCIsInBhZ2VYIiwicGFyZW50IiwiYXBwZW5kIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInJlbW92ZUZhdm9yaXRlIiwiYXR0ciIsInR3aXRjaCIsImZhdiIsImVtb2ppcyIsInJlbW92ZUNsYXNzIiwiaGlkZSIsImFkZENsYXNzIiwic2hvdyIsImZvY3VzIiwiYWRkZWROb2RlcyIsImxlbmd0aCIsIkVsZW1lbnQiLCJub2RlIiwiY29udGFpbnMiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwicHJlcGVuZCIsImZpcnN0Q2hpbGQiLCJnZXRDYXRlZ29yeSIsImhhc093blByb3BlcnR5IiwiZ2V0VXJsIiwiZW1vdGVFbGVtZW50IiwiZmF2b3JpdGVzIiwic2F2ZUZhdm9yaXRlcyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFFQSxNQUFNQSxVQUFVLEdBQUk7Ozs7T0FBcEI7QUFNQSxNQUFNQyxlQUFlLEdBQUk7Ozs7Ozs7O09BQXpCO0FBVUEsTUFBTUMsYUFBYSxHQUFJOzs7Ozs7OztPQUF2Qjs7QUFVQSxNQUFNQyxTQUFTLEdBQUcsQ0FBQ0MsS0FBRCxFQUFRQyxHQUFSLEVBQWFDLE9BQU8sR0FBRyxFQUF2QixLQUE4QjtBQUM1QyxRQUFNO0FBQUNDLGlCQUFEO0FBQWdCQztBQUFoQixNQUEyQkYsT0FBakM7QUFDQSxRQUFNRyxjQUFjLEdBQUdDLGlEQUFTLENBQUNDLFNBQVYsQ0FBcUI7dUNBQ1RQLEtBQU0sVUFBU0MsR0FBSSxZQUFXRCxLQUFNO1dBRGhELENBQXZCO0FBR0EsTUFBSUcsYUFBSixFQUFtQkUsY0FBYyxDQUFDRyxnQkFBZixDQUFnQyxhQUFoQyxFQUErQ0wsYUFBL0M7QUFDbkJF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QVksR0FBR3pHLFNBQVMsQ0FBQ0MsS0FBRCxFQUFRQyxHQUFSLEVBQWE7QUFBQ0csZUFBTyxFQUFFLEtBQUtzRCxXQUFMLENBQWlCbEMsSUFBakIsQ0FBc0IsSUFBdEIsRUFBNEJ4QixLQUE1QjtBQUFWLE9BQWIsQ0FBOUI7QUFDQSxXQUFLMEIsZ0JBQUwsQ0FBc0JzRCxNQUF0QixDQUE2QndCLFlBQTdCO0FBQ0g7QUFDSjs7QUFFRHhELGlCQUFlLEdBQUc7QUFDZCxXQUFPLEtBQUtuQixnQkFBTCxDQUFzQnVFLFVBQTdCLEVBQXlDLEtBQUt2RSxnQkFBTCxDQUFzQnVFLFVBQXRCLENBQWlDM0MsTUFBakM7O0FBQ3pDLFNBQUssTUFBTXpELEtBQVgsSUFBb0I4QywrQ0FBVyxDQUFDMkQsU0FBaEMsRUFBMkM7QUFDdkMsWUFBTXhHLEdBQUcsR0FBRzZDLCtDQUFXLENBQUMyRCxTQUFaLENBQXNCekcsS0FBdEIsQ0FBWjtBQUNBLFlBQU13RyxZQUFZLEdBQUd6RyxTQUFTLENBQUNDLEtBQUQsRUFBUUMsR0FBUixFQUFhO0FBQUNHLGVBQU8sRUFBRSxLQUFLc0QsV0FBTCxDQUFpQmxDLElBQWpCLENBQXNCLElBQXRCLEVBQTRCeEIsS0FBNUIsQ0FBVjtBQUE4Q0cscUJBQWEsRUFBRSxLQUFLNkQsVUFBTCxDQUFnQnhDLElBQWhCLENBQXFCLElBQXJCO0FBQTdELE9BQWIsQ0FBOUI7QUFDQSxXQUFLSyxnQkFBTCxDQUFzQm1ELE1BQXRCLENBQTZCd0IsWUFBN0I7QUFDSDs7QUFDRDFELG1EQUFXLENBQUM0RCxhQUFaO0FBQ0g7O0FBeEo4QyxDQUFwQyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2Vtb3RlbWVudS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtVdGlsaXRpZXMsIEV2ZW50c30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBFbW90ZU1vZHVsZSBmcm9tIFwiLi9lbW90ZXNcIjtcclxuXHJcbmNvbnN0IGhlYWRlckhUTUwgPSBgPGRpdiBpZD1cImJkLXFlbVwiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImFjdGl2ZVwiIGlkPVwiYmQtcWVtLXR3aXRjaFwiPlR3aXRjaDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImJkLXFlbS1mYXZvdXJpdGVcIj5GYXZvdXJpdGU8L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJiZC1xZW0tZW1vamlzXCI+RW1vamlzPC9idXR0b25kPlxyXG48L2Rpdj5gO1xyXG5cclxuY29uc3QgdHdpdGNoRW1vdGVIVE1MID0gYDxkaXYgaWQ9XCJiZC1xZW0tdHdpdGNoLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgc2Nyb2xsZXJXcmFwLTJsSkVrZCBmYWRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyIHNjcm9sbGVyLTJGS0ZQR1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vdGUtbWVudS1pbm5lclwiPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+YDtcclxuXHJcbmNvbnN0IGZhdm9yaXRlc0hUTUwgPSBgPGRpdiBpZD1cImJkLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBzY3JvbGxlcldyYXAtMmxKRWtkIGZhZGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXIgc2Nyb2xsZXItMkZLRlBHXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbW90ZS1tZW51LWlubmVyXCI+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5gO1xyXG5cclxuY29uc3QgbWFrZUVtb3RlID0gKGVtb3RlLCB1cmwsIG9wdGlvbnMgPSB7fSkgPT4ge1xyXG4gICAgY29uc3Qge29uQ29udGV4dE1lbnUsIG9uQ2xpY2t9ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IGVtb3RlQ29udGFpbmVyID0gVXRpbGl0aWVzLnBhcnNlSFRNTChgPGRpdiBjbGFzcz1cImVtb3RlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxpbWcgY2xhc3M9XCJlbW90ZS1pY29uXCIgYWx0PVwiJHtlbW90ZX1cIiBzcmM9XCIke3VybH1cIiB0aXRsZT1cIiR7ZW1vdGV9XCI+XHJcbiAgICA8L2Rpdj5gKTtcclxuICAgIGlmIChvbkNvbnRleHRNZW51KSBlbW90ZUNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgb25Db250ZXh0TWVudSk7XHJcbiAgICBlbW90ZUNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljayk7XHJcbiAgICByZXR1cm4gZW1vdGVDb250YWluZXI7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vdGVNZW51IGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJFbW90ZU1lbnVcIjt9XHJcbiAgICBnZXQgY29sbGVjdGlvbigpIHtyZXR1cm4gXCJlbW90ZXNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJlbW90ZU1lbnVcIjt9XHJcbiAgICBnZXQgaGlkZUVtb2ppc0lEKCkge3JldHVybiBcImhpZGVFbW9qaU1lbnVcIjt9XHJcbiAgICBnZXQgaGlkZUVtb2ppcygpIHtyZXR1cm4gdGhpcy5nZXQodGhpcy5oaWRlRW1vamlzSUQpO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubGFzdFRhYiA9IFwiYmQtcWVtLWVtb2ppc1wiO1xyXG5cclxuICAgICAgICB0aGlzLnFtZUhlYWRlciA9IFV0aWxpdGllcy5wYXJzZUhUTUwoaGVhZGVySFRNTCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgdGhpcy5xbWVIZWFkZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJidXR0b25cIikpIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5zd2l0Y2hNZW51LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICB0aGlzLnRlQ29udGFpbmVyID0gVXRpbGl0aWVzLnBhcnNlSFRNTCh0d2l0Y2hFbW90ZUhUTUwpO1xyXG4gICAgICAgIHRoaXMudGVDb250YWluZXJJbm5lciA9IHRoaXMudGVDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5lbW90ZS1tZW51LWlubmVyXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmZhQ29udGFpbmVyID0gVXRpbGl0aWVzLnBhcnNlSFRNTChmYXZvcml0ZXNIVE1MKTtcclxuICAgICAgICB0aGlzLmZhQ29udGFpbmVySW5uZXIgPSB0aGlzLmZhQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZW1vdGUtbWVudS1pbm5lclwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG11dGF0aW9ucyA9PiB7Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHRoaXMub2JzZXJ2ZShtdXRhdGlvbik7fSk7XHJcbiAgICAgICAgdGhpcy5lbmFibGVIaWRlRW1vamlzID0gdGhpcy5lbmFibGVIaWRlRW1vamlzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlSGlkZUVtb2ppcyA9IHRoaXMuZGlzYWJsZUhpZGVFbW9qaXMuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVR3aXRjaEVtb3RlcyA9IHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHtcclxuICAgICAgICB0aGlzLmxvZyhcIlN0YXJ0aW5nIHRvIG9ic2VydmVcIik7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBwLW1vdW50XCIpLCB7XHJcbiAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaGlkZUVtb2ppQ2FuY2VsID0gdGhpcy5yZWdpc3RlclNldHRpbmcodGhpcy5oaWRlRW1vamlzSUQsIHRoaXMuZW5hYmxlSGlkZUVtb2ppcywgdGhpcy5kaXNhYmxlSGlkZUVtb2ppcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUVtb2ppcykgdGhpcy5lbmFibGVIaWRlRW1vamlzKCk7XHJcbiAgICAgICAgaWYgKEVtb3RlTW9kdWxlLmVtb3Rlc0xvYWRlZCkgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZhdm9yaXRlcygpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcImVtb3Rlcy1sb2FkZWRcIiwgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIEV2ZW50cy5vZmYoXCJlbW90ZXMtbG9hZGVkXCIsIHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzKTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVIaWRlRW1vamlzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUVtb2ppQ2FuY2VsKSB0aGlzLmhpZGVFbW9qaUNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZUhpZGVFbW9qaXMoKSB7XHJcbiAgICAgICAgY29uc3QgcGlja2VyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5lbW9qaVBpY2tlci0zbTFTLWpcIik7XHJcbiAgICAgICAgaWYgKHBpY2tlcikgcGlja2VyLmNsYXNzTGlzdC5hZGQoXCJiZC1xbWUtaGlkZGVuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVIaWRlRW1vamlzKCkge1xyXG4gICAgICAgIGNvbnN0IHBpY2tlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpO1xyXG4gICAgICAgIGlmIChwaWNrZXIpIHBpY2tlci5jbGFzc0xpc3QucmVtb3ZlKFwiYmQtcW1lLWhpZGRlblwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcnRFbW90ZShlbW90ZSkge1xyXG4gICAgICAgIGNvbnN0IHRhID0gVXRpbGl0aWVzLmdldFRleHRBcmVhKCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLmluc2VydFRleHQodGFbMF0sIHRhLnZhbCgpLnNsaWNlKC0xKSA9PSBcIiBcIiA/IHRhLnZhbCgpICsgZW1vdGUgOiB0YS52YWwoKSArIFwiIFwiICsgZW1vdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGZhdkNvbnRleHQoZSkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgZW0gPSBlLnRhcmdldC5jbG9zZXN0KFwiLmVtb3RlLWNvbnRhaW5lclwiKS5jaGlsZHJlblswXTtcclxuICAgICAgICBjb25zdCBtZW51ID0gJChgPGRpdiBpZD1cInJlbW92ZW1lbnVcIiBjbGFzcz1cImJkLWNvbnRleHQtbWVudSBjb250ZXh0LW1lbnUgdGhlbWUtZGFya1wiPlJlbW92ZTwvZGl2PmApO1xyXG4gICAgICAgIG1lbnUuY3NzKHtcclxuICAgICAgICAgICAgdG9wOiBlLnBhZ2VZIC0gJChcIiNiZC1xZW0tZmF2b3VyaXRlLWNvbnRhaW5lclwiKS5vZmZzZXQoKS50b3AsXHJcbiAgICAgICAgICAgIGxlZnQ6IGUucGFnZVggLSAkKFwiI2JkLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLm9mZnNldCgpLmxlZnRcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKGVtKS5wYXJlbnQoKS5hcHBlbmQobWVudSk7XHJcbiAgICAgICAgbWVudS5vbihcImNsaWNrXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgJChlbSkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIEVtb3RlTW9kdWxlLnJlbW92ZUZhdm9yaXRlKCQoZW0pLmF0dHIoXCJ0aXRsZVwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmF2b3JpdGVzKCk7XHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZihcIm1vdXNlZG93bi5lbW90ZW1lbnVcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChkb2N1bWVudCkub24oXCJtb3VzZWRvd24uZW1vdGVtZW51XCIsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQuaWQgPT0gXCJyZW1vdmVtZW51XCIpIHJldHVybjtcclxuICAgICAgICAgICAgJChcIiNyZW1vdmVtZW51XCIpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCJtb3VzZWRvd24uZW1vdGVtZW51XCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaE1lbnUoZSkge1xyXG4gICAgICAgIGxldCBpZCA9IHR5cGVvZihlKSA9PSBcInN0cmluZ1wiID8gZSA6IGUudGFyZ2V0LmlkO1xyXG4gICAgICAgIGlmIChpZCA9PSBcImJkLXFlbS1lbW9qaXNcIiAmJiB0aGlzLmhpZGVFbW9qaXMpIGlkID0gXCJiZC1xZW0tZmF2b3VyaXRlXCI7XHJcbiAgICAgICAgY29uc3QgdHdpdGNoID0gJChcIiNiZC1xZW0tdHdpdGNoXCIpO1xyXG4gICAgICAgIGNvbnN0IGZhdiA9ICQoXCIjYmQtcWVtLWZhdm91cml0ZVwiKTtcclxuICAgICAgICBjb25zdCBlbW9qaXMgPSAkKFwiI2JkLXFlbS1lbW9qaXNcIik7XHJcbiAgICAgICAgdHdpdGNoLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGZhdi5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICBlbW9qaXMucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgICAgICQoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLmhpZGUoKTtcclxuICAgICAgICAkKFwiI2JkLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLmhpZGUoKTtcclxuICAgICAgICAkKFwiI2JkLXFlbS10d2l0Y2gtY29udGFpbmVyXCIpLmhpZGUoKTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYmQtcWVtLXR3aXRjaFwiOlxyXG4gICAgICAgICAgICAgICAgdHdpdGNoLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNiZC1xZW0tdHdpdGNoLWNvbnRhaW5lclwiKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImJkLXFlbS1mYXZvdXJpdGVcIjpcclxuICAgICAgICAgICAgICAgIGZhdi5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICQoXCIjYmQtcWVtLWZhdm91cml0ZS1jb250YWluZXJcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJiZC1xZW0tZW1vamlzXCI6XHJcbiAgICAgICAgICAgICAgICBlbW9qaXMuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAkKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAkKFwiLmVtb2ppUGlja2VyLTNtMVMtaiBpbnB1dFwiKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCkgdGhpcy5sYXN0VGFiID0gaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgb2JzZXJ2ZShtdXRhdGlvbikge1xyXG4gICAgICAgIGlmICghbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggfHwgIShtdXRhdGlvbi5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gbXV0YXRpb24uYWRkZWROb2Rlc1swXTtcclxuICAgICAgICBpZiAoIW5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwicG9wb3V0LTNzVk1YelwiKSB8fCBub2RlLmNsYXNzTGlzdC5jb250YWlucyhcInBvcG91dExlZnQtMzBXbXJEXCIpIHx8ICFub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJlbW9qaVBpY2tlci0zbTFTLWpcIikubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGUgPSAkKG5vZGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVFbW9qaXMpIGUuYWRkQ2xhc3MoXCJiZC1xbWUtaGlkZGVuXCIpO1xyXG4gICAgICAgIGVsc2UgZS5yZW1vdmVDbGFzcyhcImJkLXFtZS1oaWRkZW5cIik7XHJcblxyXG4gICAgICAgIGUucHJlcGVuZCh0aGlzLnFtZUhlYWRlcik7XHJcbiAgICAgICAgZS5hcHBlbmQodGhpcy50ZUNvbnRhaW5lcik7XHJcbiAgICAgICAgZS5hcHBlbmQodGhpcy5mYUNvbnRhaW5lcik7XHJcblxyXG4gICAgICAgIHRoaXMuc3dpdGNoTWVudSh0aGlzLmxhc3RUYWIpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVR3aXRjaEVtb3RlcygpIHtcclxuICAgICAgICB3aGlsZSAodGhpcy50ZUNvbnRhaW5lcklubmVyLmZpcnN0Q2hpbGQpIHRoaXMudGVDb250YWluZXJJbm5lci5maXJzdENoaWxkLnJlbW92ZSgpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gRW1vdGVNb2R1bGUuZ2V0Q2F0ZWdvcnkoXCJUd2l0Y2hHbG9iYWxcIikpIHtcclxuICAgICAgICAgICAgaWYgKCFFbW90ZU1vZHVsZS5nZXRDYXRlZ29yeShcIlR3aXRjaEdsb2JhbFwiKS5oYXNPd25Qcm9wZXJ0eShlbW90ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBFbW90ZU1vZHVsZS5nZXRVcmwoXCJUd2l0Y2hHbG9iYWxcIiwgZW1vdGUpO1xyXG4gICAgICAgICAgICBjb25zdCBlbW90ZUVsZW1lbnQgPSBtYWtlRW1vdGUoZW1vdGUsIHVybCwge29uQ2xpY2s6IHRoaXMuaW5zZXJ0RW1vdGUuYmluZCh0aGlzLCBlbW90ZSl9KTtcclxuICAgICAgICAgICAgdGhpcy50ZUNvbnRhaW5lcklubmVyLmFwcGVuZChlbW90ZUVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVGYXZvcml0ZXMoKSB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuZmFDb250YWluZXJJbm5lci5maXJzdENoaWxkKSB0aGlzLmZhQ29udGFpbmVySW5uZXIuZmlyc3RDaGlsZC5yZW1vdmUoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGVtb3RlIGluIEVtb3RlTW9kdWxlLmZhdm9yaXRlcykge1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBFbW90ZU1vZHVsZS5mYXZvcml0ZXNbZW1vdGVdO1xyXG4gICAgICAgICAgICBjb25zdCBlbW90ZUVsZW1lbnQgPSBtYWtlRW1vdGUoZW1vdGUsIHVybCwge29uQ2xpY2s6IHRoaXMuaW5zZXJ0RW1vdGUuYmluZCh0aGlzLCBlbW90ZSksIG9uQ29udGV4dE1lbnU6IHRoaXMuZmF2Q29udGV4dC5iaW5kKHRoaXMpfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmFDb250YWluZXJJbm5lci5hcHBlbmQoZW1vdGVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgRW1vdGVNb2R1bGUuc2F2ZUZhdm9yaXRlcygpO1xyXG4gICAgfVxyXG5cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/emotemenu.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _emotes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./emotes */ \"./src/builtins/emotes.js\");\n\n\n\nconst headerHTML = `
\n \n \n
`;\nconst twitchEmoteHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\nconst favoritesHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\n\nconst makeEmote = (emote, url, options = {}) => {\n const {\n onContextMenu,\n onClick\n } = options;\n const emoteContainer = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(`
\n \"${emote}\"\n
`);\n if (onContextMenu) emoteContainer.addEventListener(\"contextmenu\", onContextMenu);\n emoteContainer.addEventListener(\"click\", onClick);\n return emoteContainer;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteMenu extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"EmoteMenu\";\n }\n\n get collection() {\n return \"emotes\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emoteMenu\";\n }\n\n get hideEmojisID() {\n return \"hideEmojiMenu\";\n }\n\n get hideEmojis() {\n return this.get(this.hideEmojisID);\n }\n\n constructor() {\n super();\n this.lastTab = \"bd-qem-emojis\";\n this.qmeHeader = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(headerHTML);\n\n for (const button of this.qmeHeader.getElementsByTagName(\"button\")) button.addEventListener(\"click\", this.switchMenu.bind(this));\n\n this.teContainer = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(twitchEmoteHTML);\n this.teContainerInner = this.teContainer.querySelector(\".emote-menu-inner\");\n this.faContainer = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(favoritesHTML);\n this.faContainerInner = this.faContainer.querySelector(\".emote-menu-inner\");\n this.observer = new MutationObserver(mutations => {\n for (const mutation of mutations) this.observe(mutation);\n });\n this.enableHideEmojis = this.enableHideEmojis.bind(this);\n this.disableHideEmojis = this.disableHideEmojis.bind(this);\n this.updateTwitchEmotes = this.updateTwitchEmotes.bind(this);\n }\n\n async enabled() {\n this.log(\"Starting to observe\");\n this.observer.observe(document.getElementById(\"app-mount\"), {\n childList: true,\n subtree: true\n });\n this.hideEmojiCancel = this.registerSetting(this.hideEmojisID, this.enableHideEmojis, this.disableHideEmojis);\n if (this.hideEmojis) this.enableHideEmojis();\n if (_emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].emotesLoaded) this.updateTwitchEmotes();\n this.updateFavorites();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Events\"].on(\"emotes-loaded\", this.updateTwitchEmotes);\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Events\"].off(\"emotes-loaded\", this.updateTwitchEmotes);\n this.observer.disconnect();\n this.disableHideEmojis();\n if (this.hideEmojiCancel) this.hideEmojiCancel();\n }\n\n enableHideEmojis() {\n const picker = document.querySelector(\".emojiPicker-3m1S-j\");\n if (picker) picker.classList.add(\"bd-qme-hidden\");\n }\n\n disableHideEmojis() {\n const picker = document.querySelector(\".emojiPicker-3m1S-j\");\n if (picker) picker.classList.remove(\"bd-qme-hidden\");\n }\n\n insertEmote(emote) {\n const ta = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].getTextArea();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].insertText(ta[0], ta.val().slice(-1) == \" \" ? ta.val() + emote : ta.val() + \" \" + emote);\n }\n\n favContext(e) {\n e.stopPropagation();\n const em = e.target.closest(\".emote-container\").children[0];\n const menu = $(`
Remove
`);\n menu.css({\n top: e.pageY - $(\"#bd-qem-favourite-container\").offset().top,\n left: e.pageX - $(\"#bd-qem-favourite-container\").offset().left\n });\n $(em).parent().append(menu);\n menu.on(\"click\", event => {\n event.preventDefault();\n event.stopPropagation();\n $(em).remove();\n _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].removeFavorite($(em).attr(\"title\"));\n this.updateFavorites();\n $(document).off(\"mousedown.emotemenu\");\n });\n $(document).on(\"mousedown.emotemenu\", function (event) {\n if (event.target.id == \"removemenu\") return;\n $(\"#removemenu\").remove();\n $(document).off(\"mousedown.emotemenu\");\n });\n }\n\n switchMenu(e) {\n let id = typeof e == \"string\" ? e : e.target.id;\n if (id == \"bd-qem-emojis\" && this.hideEmojis) id = \"bd-qem-favourite\";\n const twitch = $(\"#bd-qem-twitch\");\n const fav = $(\"#bd-qem-favourite\");\n const emojis = $(\"#bd-qem-emojis\");\n twitch.removeClass(\"active\");\n fav.removeClass(\"active\");\n emojis.removeClass(\"active\");\n $(\".emojiPicker-3m1S-j\").hide();\n $(\"#bd-qem-favourite-container\").hide();\n $(\"#bd-qem-twitch-container\").hide();\n\n switch (id) {\n case \"bd-qem-twitch\":\n twitch.addClass(\"active\");\n $(\"#bd-qem-twitch-container\").show();\n break;\n\n case \"bd-qem-favourite\":\n fav.addClass(\"active\");\n $(\"#bd-qem-favourite-container\").show();\n break;\n\n case \"bd-qem-emojis\":\n emojis.addClass(\"active\");\n $(\".emojiPicker-3m1S-j\").show();\n $(\".emojiPicker-3m1S-j input\").focus();\n break;\n }\n\n if (id) this.lastTab = id;\n }\n\n observe(mutation) {\n if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) return;\n const node = mutation.addedNodes[0]; // if (!node.classList.contains(\"popout-2iWAc-\") || node.classList.contains(\"popoutLeft-30WmrD\") || !node.getElementsByClassName(\"emojiPicker-3m1S-j\").length) return;\n\n if (!node.classList.contains(\"layer-v9HyYc\") || !node.getElementsByClassName(\"emojiPicker-3m1S-j\").length || node.querySelector(\".emojiPicker-3m1S-j\").parentElement.classList.contains(\"animatorLeft-1EQxU0\")) return;\n const e = $(node);\n if (this.hideEmojis) e.addClass(\"bd-qme-hidden\");else e.removeClass(\"bd-qme-hidden\");\n e.prepend(this.qmeHeader);\n e.append(this.teContainer);\n e.append(this.faContainer);\n this.switchMenu(this.lastTab);\n }\n\n updateTwitchEmotes() {\n while (this.teContainerInner.firstChild) this.teContainerInner.firstChild.remove();\n\n for (const emote in _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\")) {\n if (!_emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\").hasOwnProperty(emote)) continue;\n const url = _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getUrl(\"TwitchGlobal\", emote);\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote)\n });\n this.teContainerInner.append(emoteElement);\n }\n }\n\n updateFavorites() {\n while (this.faContainerInner.firstChild) this.faContainerInner.firstChild.remove();\n\n for (const emote in _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].favorites) {\n const url = _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].favorites[emote];\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote),\n onContextMenu: this.favContext.bind(this)\n });\n this.faContainerInner.append(emoteElement);\n }\n\n _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].saveFavorites();\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3RlbWVudS5qcz8yYWNlIl0sIm5hbWVzIjpbImhlYWRlckhUTUwiLCJ0d2l0Y2hFbW90ZUhUTUwiLCJmYXZvcml0ZXNIVE1MIiwibWFrZUVtb3RlIiwiZW1vdGUiLCJ1cmwiLCJvcHRpb25zIiwib25Db250ZXh0TWVudSIsIm9uQ2xpY2siLCJlbW90ZUNvbnRhaW5lciIsIlV0aWxpdGllcyIsInBhcnNlSFRNTCIsImFkZEV2ZW50TGlzdGVuZXIiLCJFbW90ZU1lbnUiLCJCdWlsdGluIiwibmFtZSIsImNvbGxlY3Rpb24iLCJjYXRlZ29yeSIsImlkIiwiaGlkZUVtb2ppc0lEIiwiaGlkZUVtb2ppcyIsImdldCIsImNvbnN0cnVjdG9yIiwibGFzdFRhYiIsInFtZUhlYWRlciIsImJ1dHRvbiIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3dpdGNoTWVudSIsImJpbmQiLCJ0ZUNvbnRhaW5lciIsInRlQ29udGFpbmVySW5uZXIiLCJxdWVyeVNlbGVjdG9yIiwiZmFDb250YWluZXIiLCJmYUNvbnRhaW5lcklubmVyIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwibXV0YXRpb24iLCJvYnNlcnZlIiwiZW5hYmxlSGlkZUVtb2ppcyIsImRpc2FibGVIaWRlRW1vamlzIiwidXBkYXRlVHdpdGNoRW1vdGVzIiwiZW5hYmxlZCIsImxvZyIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwiaGlkZUVtb2ppQ2FuY2VsIiwicmVnaXN0ZXJTZXR0aW5nIiwiRW1vdGVNb2R1bGUiLCJlbW90ZXNMb2FkZWQiLCJ1cGRhdGVGYXZvcml0ZXMiLCJFdmVudHMiLCJvbiIsImRpc2FibGVkIiwib2ZmIiwiZGlzY29ubmVjdCIsInBpY2tlciIsImNsYXNzTGlzdCIsImFkZCIsInJlbW92ZSIsImluc2VydEVtb3RlIiwidGEiLCJnZXRUZXh0QXJlYSIsImluc2VydFRleHQiLCJ2YWwiLCJzbGljZSIsImZhdkNvbnRleHQiLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwiZW0iLCJ0YXJnZXQiLCJjbG9zZXN0IiwiY2hpbGRyZW4iLCJtZW51IiwiJCIsImNzcyIsInRvcCIsInBhZ2VZIiwib2Zmc2V0IiwibGVmdCIsInBhZ2VYIiwicGFyZW50IiwiYXBwZW5kIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInJlbW92ZUZhdm9yaXRlIiwiYXR0ciIsInR3aXRjaCIsImZhdiIsImVtb2ppcyIsInJlbW92ZUNsYXNzIiwiaGlkZSIsImFkZENsYXNzIiwic2hvdyIsImZvY3VzIiwiYWRkZWROb2RlcyIsImxlbmd0aCIsIkVsZW1lbnQiLCJub2RlIiwiY29udGFpbnMiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwicGFyZW50RWxlbWVudCIsInByZXBlbmQiLCJmaXJzdENoaWxkIiwiZ2V0Q2F0ZWdvcnkiLCJoYXNPd25Qcm9wZXJ0eSIsImdldFVybCIsImVtb3RlRWxlbWVudCIsImZhdm9yaXRlcyIsInNhdmVGYXZvcml0ZXMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBRUEsTUFBTUEsVUFBVSxHQUFJOzs7O09BQXBCO0FBTUEsTUFBTUMsZUFBZSxHQUFJOzs7Ozs7OztPQUF6QjtBQVVBLE1BQU1DLGFBQWEsR0FBSTs7Ozs7Ozs7T0FBdkI7O0FBVUEsTUFBTUMsU0FBUyxHQUFHLENBQUNDLEtBQUQsRUFBUUMsR0FBUixFQUFhQyxPQUFPLEdBQUcsRUFBdkIsS0FBOEI7QUFDNUMsUUFBTTtBQUFDQyxpQkFBRDtBQUFnQkM7QUFBaEIsTUFBMkJGLE9BQWpDO0FBQ0EsUUFBTUcsY0FBYyxHQUFHQyxpREFBUyxDQUFDQyxTQUFWLENBQXFCO3VDQUNUUCxLQUFNLFVBQVNDLEdBQUksWUFBV0QsS0FBTTtXQURoRCxDQUF2QjtBQUdBLE1BQUlHLGFBQUosRUFBbUJFLGNBQWMsQ0FBQ0csZ0JBQWYsQ0FBZ0MsYUFBaEMsRUFB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R0FBRzZDLCtDQUFXLENBQUMwRCxNQUFaLENBQW1CLGNBQW5CLEVBQW1DeEcsS0FBbkMsQ0FBWjtBQUNBLFlBQU15RyxZQUFZLEdBQUcxRyxTQUFTLENBQUNDLEtBQUQsRUFBUUMsR0FBUixFQUFhO0FBQUNHLGVBQU8sRUFBRSxLQUFLc0QsV0FBTCxDQUFpQmxDLElBQWpCLENBQXNCLElBQXRCLEVBQTRCeEIsS0FBNUI7QUFBVixPQUFiLENBQTlCO0FBQ0EsV0FBSzBCLGdCQUFMLENBQXNCc0QsTUFBdEIsQ0FBNkJ5QixZQUE3QjtBQUNIO0FBQ0o7O0FBRUR6RCxpQkFBZSxHQUFHO0FBQ2QsV0FBTyxLQUFLbkIsZ0JBQUwsQ0FBc0J3RSxVQUE3QixFQUF5QyxLQUFLeEUsZ0JBQUwsQ0FBc0J3RSxVQUF0QixDQUFpQzVDLE1BQWpDOztBQUN6QyxTQUFLLE1BQU16RCxLQUFYLElBQW9COEMsK0NBQVcsQ0FBQzRELFNBQWhDLEVBQTJDO0FBQ3ZDLFlBQU16RyxHQUFHLEdBQUc2QywrQ0FBVyxDQUFDNEQsU0FBWixDQUFzQjFHLEtBQXRCLENBQVo7QUFDQSxZQUFNeUcsWUFBWSxHQUFHMUcsU0FBUyxDQUFDQyxLQUFELEVBQVFDLEdBQVIsRUFBYTtBQUFDRyxlQUFPLEVBQUUsS0FBS3NELFdBQUwsQ0FBaUJsQyxJQUFqQixDQUFzQixJQUF0QixFQUE0QnhCLEtBQTVCLENBQVY7QUFBOENHLHFCQUFhLEVBQUUsS0FBSzZELFVBQUwsQ0FBZ0J4QyxJQUFoQixDQUFxQixJQUFyQjtBQUE3RCxPQUFiLENBQTlCO0FBQ0EsV0FBS0ssZ0JBQUwsQ0FBc0JtRCxNQUF0QixDQUE2QnlCLFlBQTdCO0FBQ0g7O0FBQ0QzRCxtREFBVyxDQUFDNkQsYUFBWjtBQUNIOztBQXpKOEMsQ0FBcEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9lbW90ZW1lbnUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcbmltcG9ydCB7VXRpbGl0aWVzLCBFdmVudHN9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQgRW1vdGVNb2R1bGUgZnJvbSBcIi4vZW1vdGVzXCI7XHJcblxyXG5jb25zdCBoZWFkZXJIVE1MID0gYDxkaXYgaWQ9XCJiZC1xZW1cIj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJhY3RpdmVcIiBpZD1cImJkLXFlbS10d2l0Y2hcIj5Ud2l0Y2g8L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJiZC1xZW0tZmF2b3VyaXRlXCI+RmF2b3VyaXRlPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiYmQtcWVtLWVtb2ppc1wiPkVtb2ppczwvYnV0dG9uZD5cclxuPC9kaXY+YDtcclxuXHJcbmNvbnN0IHR3aXRjaEVtb3RlSFRNTCA9IGA8ZGl2IGlkPVwiYmQtcWVtLXR3aXRjaC1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIHNjcm9sbGVyV3JhcC0ybEpFa2QgZmFkZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlciBzY3JvbGxlci0yRktGUEdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtb3RlLW1lbnUtaW5uZXJcIj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PmA7XHJcblxyXG5jb25zdCBmYXZvcml0ZXNIVE1MID0gYDxkaXYgaWQ9XCJiZC1xZW0tZmF2b3VyaXRlLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgc2Nyb2xsZXJXcmFwLTJsSkVrZCBmYWRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyIHNjcm9sbGVyLTJGS0ZQR1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vdGUtbWVudS1pbm5lclwiPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+YDtcclxuXHJcbmNvbnN0IG1ha2VFbW90ZSA9IChlbW90ZSwgdXJsLCBvcHRpb25zID0ge30pID0+IHtcclxuICAgIGNvbnN0IHtvbkNvbnRleHRNZW51LCBvbkNsaWNrfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCBlbW90ZUNvbnRhaW5lciA9IFV0aWxpdGllcy5wYXJzZUhUTUwoYDxkaXYgY2xhc3M9XCJlbW90ZS1jb250YWluZXJcIj5cclxuICAgICAgICA8aW1nIGNsYXNzPVwiZW1vdGUtaWNvblwiIGFsdD1cIiR7ZW1vdGV9XCIgc3JjPVwiJHt1cmx9XCIgdGl0bGU9XCIke2Vtb3RlfVwiPlxyXG4gICAgPC9kaXY+YCk7XHJcbiAgICBpZiAob25Db250ZXh0TWVudSkgZW1vdGVDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIG9uQ29udGV4dE1lbnUpO1xyXG4gICAgZW1vdGVDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2spO1xyXG4gICAgcmV0dXJuIGVtb3RlQ29udGFpbmVyO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb3RlTWVudSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiRW1vdGVNZW51XCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwiZW1vdGVzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiZW1vdGVNZW51XCI7fVxyXG4gICAgZ2V0IGhpZGVFbW9qaXNJRCgpIHtyZXR1cm4gXCJoaWRlRW1vamlNZW51XCI7fVxyXG4gICAgZ2V0IGhpZGVFbW9qaXMoKSB7cmV0dXJuIHRoaXMuZ2V0KHRoaXMuaGlkZUVtb2ppc0lEKTt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmxhc3RUYWIgPSBcImJkLXFlbS1lbW9qaXNcIjtcclxuXHJcbiAgICAgICAgdGhpcy5xbWVIZWFkZXIgPSBVdGlsaXRpZXMucGFyc2VIVE1MKGhlYWRlckhUTUwpO1xyXG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIHRoaXMucW1lSGVhZGVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYnV0dG9uXCIpKSBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuc3dpdGNoTWVudS5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZUNvbnRhaW5lciA9IFV0aWxpdGllcy5wYXJzZUhUTUwodHdpdGNoRW1vdGVIVE1MKTtcclxuICAgICAgICB0aGlzLnRlQ29udGFpbmVySW5uZXIgPSB0aGlzLnRlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZW1vdGUtbWVudS1pbm5lclwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5mYUNvbnRhaW5lciA9IFV0aWxpdGllcy5wYXJzZUhUTUwoZmF2b3JpdGVzSFRNTCk7XHJcbiAgICAgICAgdGhpcy5mYUNvbnRhaW5lcklubmVyID0gdGhpcy5mYUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmVtb3RlLW1lbnUtaW5uZXJcIik7XHJcblxyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihtdXRhdGlvbnMgPT4ge2ZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB0aGlzLm9ic2VydmUobXV0YXRpb24pO30pO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlSGlkZUVtb2ppcyA9IHRoaXMuZW5hYmxlSGlkZUVtb2ppcy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUhpZGVFbW9qaXMgPSB0aGlzLmRpc2FibGVIaWRlRW1vamlzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMgPSB0aGlzLnVwZGF0ZVR3aXRjaEVtb3Rlcy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgdGhpcy5sb2coXCJTdGFydGluZyB0byBvYnNlcnZlXCIpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcC1tb3VudFwiKSwge1xyXG4gICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmhpZGVFbW9qaUNhbmNlbCA9IHRoaXMucmVnaXN0ZXJTZXR0aW5nKHRoaXMuaGlkZUVtb2ppc0lELCB0aGlzLmVuYWJsZUhpZGVFbW9qaXMsIHRoaXMuZGlzYWJsZUhpZGVFbW9qaXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVFbW9qaXMpIHRoaXMuZW5hYmxlSGlkZUVtb2ppcygpO1xyXG4gICAgICAgIGlmIChFbW90ZU1vZHVsZS5lbW90ZXNMb2FkZWQpIHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGYXZvcml0ZXMoKTtcclxuICAgICAgICBFdmVudHMub24oXCJlbW90ZXMtbG9hZGVkXCIsIHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICBFdmVudHMub2ZmKFwiZW1vdGVzLWxvYWRlZFwiLCB0aGlzLnVwZGF0ZVR3aXRjaEVtb3Rlcyk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlSGlkZUVtb2ppcygpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVFbW9qaUNhbmNlbCkgdGhpcy5oaWRlRW1vamlDYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVIaWRlRW1vamlzKCkge1xyXG4gICAgICAgIGNvbnN0IHBpY2tlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpO1xyXG4gICAgICAgIGlmIChwaWNrZXIpIHBpY2tlci5jbGFzc0xpc3QuYWRkKFwiYmQtcW1lLWhpZGRlblwiKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlSGlkZUVtb2ppcygpIHtcclxuICAgICAgICBjb25zdCBwaWNrZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKTtcclxuICAgICAgICBpZiAocGlja2VyKSBwaWNrZXIuY2xhc3NMaXN0LnJlbW92ZShcImJkLXFtZS1oaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zZXJ0RW1vdGUoZW1vdGUpIHtcclxuICAgICAgICBjb25zdCB0YSA9IFV0aWxpdGllcy5nZXRUZXh0QXJlYSgpO1xyXG4gICAgICAgIFV0aWxpdGllcy5pbnNlcnRUZXh0KHRhWzBdLCB0YS52YWwoKS5zbGljZSgtMSkgPT0gXCIgXCIgPyB0YS52YWwoKSArIGVtb3RlIDogdGEudmFsKCkgKyBcIiBcIiArIGVtb3RlKTtcclxuICAgIH1cclxuXHJcbiAgICBmYXZDb250ZXh0KGUpIHtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGNvbnN0IGVtID0gZS50YXJnZXQuY2xvc2VzdChcIi5lbW90ZS1jb250YWluZXJcIikuY2hpbGRyZW5bMF07XHJcbiAgICAgICAgY29uc3QgbWVudSA9ICQoYDxkaXYgaWQ9XCJyZW1vdmVtZW51XCIgY2xhc3M9XCJiZC1jb250ZXh0LW1lbnUgY29udGV4dC1tZW51IHRoZW1lLWRhcmtcIj5SZW1vdmU8L2Rpdj5gKTtcclxuICAgICAgICBtZW51LmNzcyh7XHJcbiAgICAgICAgICAgIHRvcDogZS5wYWdlWSAtICQoXCIjYmQtcWVtLWZhdm91cml0ZS1jb250YWluZXJcIikub2Zmc2V0KCkudG9wLFxyXG4gICAgICAgICAgICBsZWZ0OiBlLnBhZ2VYIC0gJChcIiNiZC1xZW0tZmF2b3VyaXRlLWNvbnRhaW5lclwiKS5vZmZzZXQoKS5sZWZ0XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChlbSkucGFyZW50KCkuYXBwZW5kKG1lbnUpO1xyXG4gICAgICAgIG1lbnUub24oXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICQoZW0pLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICBFbW90ZU1vZHVsZS5yZW1vdmVGYXZvcml0ZSgkKGVtKS5hdHRyKFwidGl0bGVcIikpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZhdm9yaXRlcygpO1xyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCJtb3VzZWRvd24uZW1vdGVtZW51XCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoZG9jdW1lbnQpLm9uKFwibW91c2Vkb3duLmVtb3RlbWVudVwiLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmlkID09IFwicmVtb3ZlbWVudVwiKSByZXR1cm47XHJcbiAgICAgICAgICAgICQoXCIjcmVtb3ZlbWVudVwiKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKFwibW91c2Vkb3duLmVtb3RlbWVudVwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2hNZW51KGUpIHtcclxuICAgICAgICBsZXQgaWQgPSB0eXBlb2YoZSkgPT0gXCJzdHJpbmdcIiA/IGUgOiBlLnRhcmdldC5pZDtcclxuICAgICAgICBpZiAoaWQgPT0gXCJiZC1xZW0tZW1vamlzXCIgJiYgdGhpcy5oaWRlRW1vamlzKSBpZCA9IFwiYmQtcWVtLWZhdm91cml0ZVwiO1xyXG4gICAgICAgIGNvbnN0IHR3aXRjaCA9ICQoXCIjYmQtcWVtLXR3aXRjaFwiKTtcclxuICAgICAgICBjb25zdCBmYXYgPSAkKFwiI2JkLXFlbS1mYXZvdXJpdGVcIik7XHJcbiAgICAgICAgY29uc3QgZW1vamlzID0gJChcIiNiZC1xZW0tZW1vamlzXCIpO1xyXG4gICAgICAgIHR3aXRjaC5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICBmYXYucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgZW1vamlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAkKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5oaWRlKCk7XHJcbiAgICAgICAgJChcIiNiZC1xZW0tZmF2b3VyaXRlLWNvbnRhaW5lclwiKS5oaWRlKCk7XHJcbiAgICAgICAgJChcIiNiZC1xZW0tdHdpdGNoLWNvbnRhaW5lclwiKS5oaWRlKCk7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImJkLXFlbS10d2l0Y2hcIjpcclxuICAgICAgICAgICAgICAgIHR3aXRjaC5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICQoXCIjYmQtcWVtLXR3aXRjaC1jb250YWluZXJcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJiZC1xZW0tZmF2b3VyaXRlXCI6XHJcbiAgICAgICAgICAgICAgICBmYXYuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2JkLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLnNob3coKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYmQtcWVtLWVtb2ppc1wiOlxyXG4gICAgICAgICAgICAgICAgZW1vamlzLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIi5lbW9qaVBpY2tlci0zbTFTLWpcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgJChcIi5lbW9qaVBpY2tlci0zbTFTLWogaW5wdXRcIikuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQpIHRoaXMubGFzdFRhYiA9IGlkO1xyXG4gICAgfVxyXG5cclxuICAgIG9ic2VydmUobXV0YXRpb24pIHtcclxuICAgICAgICBpZiAoIW11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoIHx8ICEobXV0YXRpb24uYWRkZWROb2Rlc1swXSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbMF07XHJcbiAgICAgICAgLy8gaWYgKCFub2RlLmNsYXNzTGlzdC5jb250YWlucyhcInBvcG91dC0yaVdBYy1cIikgfHwgbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoXCJwb3BvdXRMZWZ0LTMwV21yRFwiKSB8fCAhbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoXCJsYXllci12OUh5WWNcIikgfHwgIW5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImVtb2ppUGlja2VyLTNtMVMtalwiKS5sZW5ndGggfHwgbm9kZS5xdWVyeVNlbGVjdG9yKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImFuaW1hdG9yTGVmdC0xRVF4VTBcIikpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZSA9ICQobm9kZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUVtb2ppcykgZS5hZGRDbGFzcyhcImJkLXFtZS1oaWRkZW5cIik7XHJcbiAgICAgICAgZWxzZSBlLnJlbW92ZUNsYXNzKFwiYmQtcW1lLWhpZGRlblwiKTtcclxuXHJcbiAgICAgICAgZS5wcmVwZW5kKHRoaXMucW1lSGVhZGVyKTtcclxuICAgICAgICBlLmFwcGVuZCh0aGlzLnRlQ29udGFpbmVyKTtcclxuICAgICAgICBlLmFwcGVuZCh0aGlzLmZhQ29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5zd2l0Y2hNZW51KHRoaXMubGFzdFRhYik7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVHdpdGNoRW1vdGVzKCkge1xyXG4gICAgICAgIHdoaWxlICh0aGlzLnRlQ29udGFpbmVySW5uZXIuZmlyc3RDaGlsZCkgdGhpcy50ZUNvbnRhaW5lcklubmVyLmZpcnN0Q2hpbGQucmVtb3ZlKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBlbW90ZSBpbiBFbW90ZU1vZHVsZS5nZXRDYXRlZ29yeShcIlR3aXRjaEdsb2JhbFwiKSkge1xyXG4gICAgICAgICAgICBpZiAoIUVtb3RlTW9kdWxlLmdldENhdGVnb3J5KFwiVHdpdGNoR2xvYmFsXCIpLmhhc093blByb3BlcnR5KGVtb3RlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IEVtb3RlTW9kdWxlLmdldFVybChcIlR3aXRjaEdsb2JhbFwiLCBlbW90ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVtb3RlRWxlbWVudCA9IG1ha2VFbW90ZShlbW90ZSwgdXJsLCB7b25DbGljazogdGhpcy5pbnNlcnRFbW90ZS5iaW5kKHRoaXMsIGVtb3RlKX0pO1xyXG4gICAgICAgICAgICB0aGlzLnRlQ29udGFpbmVySW5uZXIuYXBwZW5kKGVtb3RlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUZhdm9yaXRlcygpIHtcclxuICAgICAgICB3aGlsZSAodGhpcy5mYUNvbnRhaW5lcklubmVyLmZpcnN0Q2hpbGQpIHRoaXMuZmFDb250YWluZXJJbm5lci5maXJzdENoaWxkLnJlbW92ZSgpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gRW1vdGVNb2R1bGUuZmF2b3JpdGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IEVtb3RlTW9kdWxlLmZhdm9yaXRlc1tlbW90ZV07XHJcbiAgICAgICAgICAgIGNvbnN0IGVtb3RlRWxlbWVudCA9IG1ha2VFbW90ZShlbW90ZSwgdXJsLCB7b25DbGljazogdGhpcy5pbnNlcnRFbW90ZS5iaW5kKHRoaXMsIGVtb3RlKSwgb25Db250ZXh0TWVudTogdGhpcy5mYXZDb250ZXh0LmJpbmQodGhpcyl9KTtcclxuICAgICAgICAgICAgdGhpcy5mYUNvbnRhaW5lcklubmVyLmFwcGVuZChlbW90ZUVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBFbW90ZU1vZHVsZS5zYXZlRmF2b3JpdGVzKCk7XHJcbiAgICB9XHJcblxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/emotemenu.js\n"); /***/ }), @@ -203,7 +203,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _ui_emote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/emote */ \"./src/ui/emote.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _structs_string__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../structs/string */ \"./src/structs/string.js\");\n\n\n\n\n\n\n\nconst request = __webpack_require__(/*! request */ \"request\");\n\nconst EmoteURLs = {\n TwitchGlobal: new _structs_string__WEBPACK_IMPORTED_MODULE_5__[\"default\"](`https://static-cdn.jtvnw.net/emoticons/v1/{{id}}/1.0`),\n TwitchSubscriber: new _structs_string__WEBPACK_IMPORTED_MODULE_5__[\"default\"](`https://static-cdn.jtvnw.net/emoticons/v1/{{id}}/1.0`),\n FrankerFaceZ: new _structs_string__WEBPACK_IMPORTED_MODULE_5__[\"default\"](`https://cdn.frankerfacez.com/emoticon/{{id}}/1`),\n BTTV: new _structs_string__WEBPACK_IMPORTED_MODULE_5__[\"default\"](`https://cdn.betterttv.net/emote/{{id}}/1x`)\n};\nconst Emotes = {\n TwitchGlobal: {},\n TwitchSubscriber: {},\n BTTV: {},\n FrankerFaceZ: {}\n};\nconst blacklist = [];\nconst overrides = [\"twitch\", \"subscriber\", \"bttv\", \"ffz\"];\nconst modifiers = [\"flip\", \"spin\", \"pulse\", \"spin2\", \"spin3\", \"1spin\", \"2spin\", \"3spin\", \"tr\", \"bl\", \"br\", \"shake\", \"shake2\", \"shake3\", \"flap\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteModule extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"Emotes\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emotes\";\n }\n\n get categories() {\n return Object.keys(Emotes).filter(k => this.isCategoryEnabled(k));\n }\n\n get shouldDownload() {\n return modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(\"emotes\", this.category, \"download\");\n }\n\n isCategoryEnabled(id) {\n return super.get(\"emotes\", \"categories\", id.toLowerCase());\n }\n\n get(id) {\n return super.get(\"emotes\", \"general\", id);\n }\n\n get MessageContentComponent() {\n return modules__WEBPACK_IMPORTED_MODULE_2__[\"WebpackModules\"].getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty(\"disableButtons\"));\n }\n\n get Emotes() {\n return Emotes;\n }\n\n get TwitchGlobal() {\n return Emotes.TwitchGlobal;\n }\n\n get TwitchSubscriber() {\n return Emotes.TwitchSubscriber;\n }\n\n get BTTV() {\n return Emotes.BTTV;\n }\n\n get FrankerFaceZ() {\n return Emotes.FrankerFaceZ;\n }\n\n get blacklist() {\n return blacklist;\n }\n\n get favorites() {\n return this.favoriteEmotes;\n }\n\n getUrl(category, name) {\n return EmoteURLs[category].format({\n id: Emotes[category][name]\n });\n }\n\n getCategory(category) {\n return Emotes[category];\n }\n\n getRemoteFile(category) {\n return modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].repoUrl(`data/emotes/${category.toLowerCase()}.json`);\n }\n\n initialize() {\n super.initialize();\n window.emoteModule = this;\n const storedFavorites = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"favoriteEmotes\");\n this.favoriteEmotes = storedFavorites || {};\n this.addFavorite = this.addFavorite.bind(this);\n this.removeFavorite = this.removeFavorite.bind(this);\n this.onCategoryToggle = this.onCategoryToggle.bind(this);\n this.resetEmotes = this.resetEmotes.bind(this);\n }\n\n async enabled() {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].registerCollection(\"emotes\", \"Emotes\", data__WEBPACK_IMPORTED_MODULE_1__[\"EmoteConfig\"], {\n title: modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Emotes.clearEmotes,\n onClick: this.resetEmotes\n });\n await this.getBlacklist();\n await this.loadEmoteData();\n\n while (!this.MessageContentComponent) await new Promise(resolve => setTimeout(resolve, 100));\n\n this.patchMessageContent();\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].on(\"emotes-favorite-added\", this.addFavorite);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].on(\"emotes-favorite-removed\", this.removeFavorite);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].on(\"setting-updated\", this.onCategoryToggle);\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].off(\"setting-updated\", this.onCategoryToggle);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].off(\"emotes-favorite-added\", this.addFavorite);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].off(\"emotes-favorite-removed\", this.removeFavorite);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].removeCollection(\"emotes\");\n this.emptyEmotes();\n if (!this.cancelEmoteRender) return;\n this.cancelEmoteRender();\n delete this.cancelEmoteRender;\n }\n\n onCategoryToggle(collection, cat, category, enabled) {\n if (collection != \"emotes\" || cat != \"categories\") return;\n if (enabled) return this.loadEmoteData(category);\n return this.unloadEmoteData(category);\n }\n\n addFavorite(name, url) {\n if (!this.favoriteEmotes.hasOwnProperty(name)) this.favoriteEmotes[name] = url;\n this.saveFavorites();\n }\n\n removeFavorite(name) {\n if (!this.favoriteEmotes.hasOwnProperty(name)) return;\n delete this.favoriteEmotes[name];\n this.saveFavorites();\n }\n\n isFavorite(name) {\n return this.favoriteEmotes.hasOwnProperty(name);\n }\n\n saveFavorites() {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"favoriteEmotes\", this.favoriteEmotes);\n }\n\n emptyEmotes() {\n for (const cat in Emotes) Object.assign(Emotes, {\n [cat]: {}\n });\n }\n\n patchMessageContent() {\n if (this.cancelEmoteRender) return;\n this.cancelEmoteRender = this.after(this.MessageContentComponent.prototype, \"render\", (thisObj, args, retVal) => {\n this.after(retVal.props, \"children\", (t, a, returnValue) => {\n if (this.categories.length == 0) return;\n const markup = returnValue.props.children[1];\n if (!markup.props.children) return;\n const nodes = markup.props.children[1];\n if (!nodes || !nodes.length) return;\n\n for (let n = 0; n < nodes.length; n++) {\n const node = nodes[n];\n if (typeof node !== \"string\") continue;\n const words = node.split(/([^\\s]+)([\\s]|$)/g);\n\n for (let c = 0, clen = this.categories.length; c < clen; c++) {\n for (let w = 0, wlen = words.length; w < wlen; w++) {\n const emote = words[w];\n const emoteSplit = emote.split(\":\");\n const emoteName = emoteSplit[0];\n let emoteModifier = emoteSplit[1] ? emoteSplit[1] : \"\";\n let emoteOverride = emoteModifier.slice(0);\n if (emoteName.length < 4 || blacklist.includes(emoteName)) continue;\n if (!modifiers.includes(emoteModifier) || !modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(\"emotes\", \"general\", \"modifiers\")) emoteModifier = \"\";\n if (!overrides.includes(emoteOverride)) emoteOverride = \"\";else emoteModifier = emoteOverride;\n let current = this.categories[c];\n\n if (emoteOverride === \"twitch\") {\n if (Emotes.TwitchGlobal[emoteName]) current = \"TwitchGlobal\";else if (Emotes.TwitchSubscriber[emoteName]) current = \"TwitchSubscriber\";\n } else if (emoteOverride === \"subscriber\") {\n if (Emotes.TwitchSubscriber[emoteName]) current = \"TwitchSubscriber\";\n } else if (emoteOverride === \"bttv\") {\n if (Emotes.BTTV[emoteName]) current = \"BTTV\";\n } else if (emoteOverride === \"ffz\") {\n if (Emotes.FrankerFaceZ[emoteName]) current = \"FrankerFaceZ\";\n }\n\n if (!Emotes[current][emoteName]) continue;\n const results = nodes[n].match(new RegExp(`([\\\\s]|^)${modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].escape(emoteModifier ? emoteName + \":\" + emoteModifier : emoteName)}([\\\\s]|$)`));\n if (!results) continue;\n const pre = nodes[n].substring(0, results.index + results[1].length);\n const post = nodes[n].substring(results.index + results[0].length - results[2].length);\n nodes[n] = pre;\n const emoteComponent = modules__WEBPACK_IMPORTED_MODULE_2__[\"DiscordModules\"].React.createElement(_ui_emote__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n name: emoteName,\n url: EmoteURLs[current].format({\n id: Emotes[current][emoteName]\n }),\n modifier: emoteModifier,\n isFavorite: this.isFavorite(emoteName)\n });\n nodes.splice(n + 1, 0, post);\n nodes.splice(n + 1, 0, emoteComponent);\n }\n }\n }\n\n const onlyEmotes = nodes.every(r => {\n if (typeof r == \"string\" && r.replace(/\\s*/, \"\") == \"\") return true;else if (r.type && r.type.name == \"BDEmote\") return true;else if (r.props && r.props.children && r.props.children.props && r.props.children.props.emojiName) return true;\n return false;\n });\n if (!onlyEmotes) return;\n\n for (const node of nodes) {\n if (typeof node != \"object\") continue;\n if (node.type.name == \"BDEmote\") node.props.jumboable = true;else if (node.props && node.props.children && node.props.children.props && node.props.children.props.emojiName) node.props.children.props.jumboable = true;\n }\n });\n });\n }\n\n async getBlacklist() {\n const category = \"Blacklist\";\n const exists = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].emotesExist(category);\n const valid = await this.isCacheValid(category);\n const useCache = valid || !valid && exists && !this.shouldDownload;\n const list = useCache ? modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getEmoteData(category) : await this.downloadEmotes(category);\n blacklist.push(...list);\n }\n\n isCacheValid(category) {\n return new Promise(resolve => {\n const etag = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getCacheHash(\"emotes\", category);\n if (!etag) return resolve(false);\n request.head({\n url: this.getRemoteFile(category),\n headers: {\n \"If-None-Match\": etag\n }\n }, (err, resp) => {\n resolve(resp.statusCode == 304);\n });\n });\n }\n\n async loadEmoteData(categories) {\n if (!categories) categories = this.categories;\n if (!Array.isArray(categories)) categories = [categories];\n const all = Object.keys(Emotes);\n categories = categories.map(k => all.find(c => c.toLowerCase() == k.toLowerCase()));\n _ui_toasts__WEBPACK_IMPORTED_MODULE_4__[\"default\"].show(modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Emotes.loading, {\n type: \"info\"\n });\n this.emotesLoaded = false;\n\n for (const category of categories) {\n const exists = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].emotesExist(category);\n const valid = await this.isCacheValid(category);\n const useCache = valid || !valid && exists && !this.shouldDownload;\n let data = null;\n\n if (useCache) {\n this.log(`Loading ${category} emotes from local cache.`);\n const cachedData = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getEmoteData(category);\n const hasData = Object.keys(cachedData).length > 0;\n if (hasData) data = cachedData;\n }\n\n if (!data) data = await this.downloadEmotes(category);\n Object.assign(Emotes[category], data);\n await new Promise(r => setTimeout(r, 1000));\n }\n\n this.emotesLoaded = true;\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].dispatch(\"emotes-loaded\");\n _ui_toasts__WEBPACK_IMPORTED_MODULE_4__[\"default\"].show(modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Emotes.loaded, {\n type: \"success\"\n });\n }\n\n unloadEmoteData(categories) {\n if (!categories) categories = this.categories;\n if (!Array.isArray(categories)) categories = [categories];\n const all = Object.keys(Emotes);\n categories = categories.map(k => all.find(c => c.toLowerCase() == k.toLowerCase()));\n\n for (const category of categories) {\n delete Emotes[category];\n Emotes[category] = {};\n }\n }\n\n downloadEmotes(category) {\n const url = this.getRemoteFile(category);\n this.log(`Downloading ${category} from ${url}`);\n const options = {\n url: url,\n timeout: 10000,\n json: true\n };\n return new Promise(resolve => {\n request.get(options, (error, response, parsedData) => {\n if (error || response.statusCode != 200) {\n this.stacktrace(`Could not download ${category} emotes.`, error);\n return resolve({});\n }\n\n for (const emote in parsedData) {\n if (emote.length < 4 || blacklist.includes(emote) || !parsedData[emote]) {\n delete parsedData[emote];\n continue;\n } // parsedData[emote] = EmoteURLs[category].format({id: parsedData[emote]});\n\n }\n\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].saveEmoteData(category, parsedData);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setCacheHash(\"emotes\", category, response.headers.etag);\n resolve(parsedData);\n this.log(`Downloaded ${category}`);\n });\n });\n }\n\n resetEmotes() {\n const categories = Object.keys(Emotes);\n this.unloadEmoteData(categories);\n\n for (const cat of categories) modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].invalidateCache(\"emotes\", cat);\n\n this.loadEmoteData();\n }\n\n}()); // (async () => {\n// const emoteData = await new Promise(resolve => {\n// const req = require(\"request\");\n// req.get({url: \"https://twitchemotes.com/api_cache/v3/global.json\", json: true}, (err, resp, parsedData) => {\n// for (const emote in parsedData) {\n// if (emote.length < 4 || window.bemotes.includes(emote)) {\n// delete parsedData[emote];\n// continue;\n// }\n// parsedData[emote] = parsedData[emote].id;\n// }\n// resolve(parsedData);\n// });\n// });\n// const fs = require(\"fs\");\n// fs.writeFileSync(\"Z:\\\\Programming\\\\BetterDiscordStuff\\\\BetterDiscordApp\\\\data\\\\emotes\\\\global.json\", JSON.stringify(emoteData));\n// return emoteData;\n// })();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy5qcz82YTA0Il0sIm5hbWVzIjpbInJlcXVlc3QiLCJyZXF1aXJlIiwiRW1vdGVVUkxzIiwiVHdpdGNoR2xvYmFsIiwiRm9ybWF0dGFibGVTdHJpbmciLCJUd2l0Y2hTdWJzY3JpYmVyIiwiRnJhbmtlckZhY2VaIiwiQlRUViIsIkVtb3RlcyIsImJsYWNrbGlzdCIsIm92ZXJyaWRlcyIsIm1vZGlmaWVycyIsIkVtb3RlTW9kdWxlIiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImNhdGVnb3JpZXMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiayIsImlzQ2F0ZWdvcnlFbmFibGVkIiwic2hvdWxkRG93bmxvYWQiLCJTZXR0aW5ncyIsImdldCIsInRvTG93ZXJDYXNlIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0UHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsImZhdm9yaXRlcyIsImZhdm9yaXRlRW1vdGVzIiwiZ2V0VXJsIiwiZm9ybWF0IiwiZ2V0Q2F0ZWdvcnkiLCJnZXRSZW1vdGVGaWxlIiwiVXRpbGl0aWVzIiwicmVwb1VybCIsImluaXRpYWxpemUiLCJ3aW5kb3ciLCJlbW90ZU1vZHVsZSIsInN0b3JlZEZhdm9yaXRlcyIsIkRhdGFTdG9yZSIsImdldEJERGF0YSIsImFkZEZhdm9yaXRlIiwiYmluZCIsInJlbW92ZUZhdm9yaXRlIiwib25DYXRlZ29yeVRvZ2dsZSIsInJlc2V0RW1vdGVzIiwiZW5hYmxlZCIsInJlZ2lzdGVyQ29sbGVjdGlvbiIsIkVtb3RlQ29uZmlnIiwidGl0bGUiLCJTdHJpbmdzIiwiY2xlYXJFbW90ZXMiLCJvbkNsaWNrIiwiZ2V0QmxhY2tsaXN0IiwibG9hZEVtb3RlRGF0YSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsInBhdGNoTWVzc2FnZUNvbnRlbnQiLCJFdmVudHMiLCJvbiIsImRpc2FibGVkIiwib2ZmIiwicmVtb3ZlQ29sbGVjdGlvbiIsImVtcHR5RW1vdGVzIiwiY2FuY2VsRW1vdGVSZW5kZXIiLCJjYXQiLCJ1bmxvYWRFbW90ZURhdGEiLCJ1cmwiLCJzYXZlRmF2b3JpdGVzIiwiaXNGYXZvcml0ZSIsInNldEJERGF0YSIsImFzc2lnbiIsImFmdGVyIiwicHJvdG90eXBlIiwidGhpc09iaiIsImFyZ3MiLCJyZXRWYWwiLCJwcm9wcyIsInQiLCJhIiwicmV0dXJuVmFsdWUiLCJsZW5ndGgiLCJtYXJrdXAiLCJjaGlsZHJlbiIsIm5vZGVzIiwibiIsIm5vZGUiLCJ3b3JkcyIsInNwbGl0IiwiYyIsImNsZW4iLCJ3Iiwid2xlbiIsImVtb3RlIiwiZW1vdGVTcGxpdCIsImVtb3RlTmFtZSIsImVtb3RlTW9kaWZpZXIiLCJlbW90ZU92ZXJyaWRlIiwic2xpY2UiLCJpbmNsdWRlcyIsImN1cnJlbnQiLCJyZXN1bHRzIiwibWF0Y2giLCJSZWdFeHAiLCJlc2NhcGUiLCJwcmUiLCJzdWJzdHJpbmciLCJpbmRleCIsInBvc3QiLCJlbW90ZUNvbXBvbmVudCIsIkRpc2NvcmRNb2R1bGVzIiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50IiwiQkRFbW90ZSIsIm1vZGlmaWVyIiwic3BsaWNlIiwib25seUVtb3RlcyIsImV2ZXJ5IiwiciIsInJlcGxhY2UiLCJ0eXBlIiwiZW1vamlOYW1lIiwianVtYm9hYmxlIiwiZXhpc3RzIiwiZW1vdGVzRXhpc3QiLCJ2YWxpZCIsImlzQ2FjaGVWYWxpZCIsInVzZUNhY2hlIiwibGlzdCIsImdldEVtb3RlRGF0YSIsImRvd25sb2FkRW1vdGVzIiwicHVzaCIsImV0YWciLCJnZXRDYWNoZUhhc2giLCJoZWFkIiwiaGVhZGVycyIsImVyciIsInJlc3AiLCJzdGF0dXNDb2RlIiwiQXJyYXkiLCJpc0FycmF5IiwiYWxsIiwibWFwIiwiZmluZCIsIlRvYXN0cyIsInNob3ciLCJsb2FkaW5nIiwiZW1vdGVzTG9hZGVkIiwiZGF0YSIsImxvZyIsImNhY2hlZERhdGEiLCJoYXNEYXRhIiwiZGlzcGF0Y2giLCJsb2FkZWQiLCJvcHRpb25zIiwidGltZW91dCIsImpzb24iLCJlcnJvciIsInJlc3BvbnNlIiwicGFyc2VkRGF0YSIsInN0YWNrdHJhY2UiLCJzYXZlRW1vdGVEYXRhIiwic2V0Q2FjaGVIYXNoIiwiaW52YWxpZGF0ZUNhY2hlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxNQUFNQSxPQUFPLEdBQUdDLG1CQUFPLENBQUMsd0JBQUQsQ0FBdkI7O0FBRUEsTUFBTUMsU0FBUyxHQUFHO0FBQ2RDLGNBQVksRUFBRSxJQUFJQyx1REFBSixDQUF1QixzREFBdkIsQ0FEQTtBQUVkQyxrQkFBZ0IsRUFBRSxJQUFJRCx1REFBSixDQUF1QixzREFBdkIsQ0FGSjtBQUdkRSxjQUFZLEVBQUUsSUFBSUYsdURBQUosQ0FBdUIsZ0RBQXZCLENBSEE7QUFJZEcsTUFBSSxFQUFFLElBQUlILHVEQUFKLENBQXVCLDJDQUF2QjtBQUpRLENBQWxCO0FBT0EsTUFBTUksTUFBTSxHQUFHO0FBQ1hMLGNBQVksRUFBRSxFQURIO0FBRVhFLGtCQUFnQixFQUFFLEVBRlA7QUFHWEUsTUFBSSxFQUFFLEVBSEs7QUFJWEQsY0FBWSxFQUFFO0FBSkgsQ0FBZjtBQU9BLE1BQU1HLFNBQVMsR0FBRyxFQUFsQjtBQUNBLE1BQU1DLFNBQVMsR0FBRyxDQUFDLFFBQUQsRUFBVyxZQUFYLEVBQXlCLE1BQXpCLEVBQWlDLEtBQWpDLENBQWxCO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLENBQUMsTUFBRCxFQUFTLE1BQVQsRUFBaUIsT0FBakIsRUFBMEIsT0FBMUIsRUFBbUMsT0FBbkMsRUFBNEMsT0FBNUMsRUFBcUQsT0FBckQsRUFBOEQsT0FBOUQsRUFBdUUsSUFBdkUsRUFBNkUsSUFBN0UsRUFBbUYsSUFBbkYsRUFBeUYsT0FBekYsRUFBa0csUUFB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QUQsQ0FBUDtBQUNBLGFBQUtWLEdBQUwsQ0FBVSxjQUFhN0ksUUFBUyxFQUFoQztBQUNILE9BakJEO0FBa0JILEtBbkJNLENBQVA7QUFvQkg7O0FBRURvQyxhQUFXLEdBQUc7QUFDVixVQUFNbEMsVUFBVSxHQUFHQyxNQUFNLENBQUNDLElBQVAsQ0FBWVosTUFBWixDQUFuQjtBQUNBLFNBQUtrRSxlQUFMLENBQXFCeEQsVUFBckI7O0FBQ0EsU0FBSyxNQUFNdUQsR0FBWCxJQUFrQnZELFVBQWxCLEVBQThCNEIsaURBQVMsQ0FBQzZILGVBQVYsQ0FBMEIsUUFBMUIsRUFBb0NsRyxHQUFwQzs7QUFDOUIsU0FBS1osYUFBTDtBQUNIOztBQXpQZ0QsQ0FBdEMsRUFBZixFLENBNlBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9lbW90ZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcblxyXG5pbXBvcnQge0Vtb3RlQ29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQge1V0aWxpdGllcywgV2VicGFja01vZHVsZXMsIERhdGFTdG9yZSwgRGlzY29yZE1vZHVsZXMsIEV2ZW50cywgU2V0dGluZ3MsIFN0cmluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBCREVtb3RlIGZyb20gXCIuLi91aS9lbW90ZVwiO1xyXG5pbXBvcnQgVG9hc3RzIGZyb20gXCIuLi91aS90b2FzdHNcIjtcclxuaW1wb3J0IEZvcm1hdHRhYmxlU3RyaW5nIGZyb20gXCIuLi9zdHJ1Y3RzL3N0cmluZ1wiO1xyXG5jb25zdCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7XHJcblxyXG5jb25zdCBFbW90ZVVSTHMgPSB7XHJcbiAgICBUd2l0Y2hHbG9iYWw6IG5ldyBGb3JtYXR0YWJsZVN0cmluZyhgaHR0cHM6Ly9zdGF0aWMtY2RuLmp0dm53Lm5ldC9lbW90aWNvbnMvdjEve3tpZH19LzEuMGApLFxyXG4gICAgVHdpdGNoU3Vic2NyaWJlcjogbmV3IEZvcm1hdHRhYmxlU3RyaW5nKGBodHRwczovL3N0YXRpYy1jZG4uanR2bncubmV0L2Vtb3RpY29ucy92MS97e2lkfX0vMS4wYCksXHJcbiAgICBGcmFua2VyRmFjZVo6IG5ldyBGb3JtYXR0YWJsZVN0cmluZyhgaHR0cHM6Ly9jZG4uZnJhbmtlcmZhY2V6LmNvbS9lbW90aWNvbi97e2lkfX0vMWApLFxyXG4gICAgQlRUVjogbmV3IEZvcm1hdHRhYmxlU3RyaW5nKGBodHRwczovL2Nkbi5iZXR0ZXJ0dHYubmV0L2Vtb3RlL3t7aWR9fS8xeGApLFxyXG59O1xyXG5cclxuY29uc3QgRW1vdGVzID0ge1xyXG4gICAgVHdpdGNoR2xvYmFsOiB7fSxcclxuICAgIFR3aXRjaFN1YnNjcmliZXI6IHt9LFxyXG4gICAgQlRUVjoge30sXHJcbiAgICBGcmFua2VyRmFjZVo6IHt9XHJcbn07XHJcblxyXG5jb25zdCBibGFja2xpc3QgPSBbXTtcclxuY29uc3Qgb3ZlcnJpZGVzID0gW1widHdpdGNoXCIsIFwic3Vic2NyaWJlclwiLCBcImJ0dHZcIiwgXCJmZnpcIl07XHJcbmNvbnN0IG1vZGlmaWVycyA9IFtcImZsaXBcIiwgXCJzcGluXCIsIFwicHVsc2VcIiwgXCJzcGluMlwiLCBcInNwaW4zXCIsIFwiMXNwaW5cIiwgXCIyc3BpblwiLCBcIjNzcGluXCIsIFwidHJcIiwgXCJibFwiLCBcImJyXCIsIFwic2hha2VcIiwgXCJzaGFrZTJcIiwgXCJzaGFrZTNcIiwgXCJmbGFwXCJdO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb3RlTW9kdWxlIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJFbW90ZXNcIjt9XHJcbiAgICBnZXQgY29sbGVjdGlvbigpIHtyZXR1cm4gXCJzZXR0aW5nc1wiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJnZW5lcmFsXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcImVtb3Rlc1wiO31cclxuICAgIGdldCBjYXRlZ29yaWVzKCkge3JldHVybiBPYmplY3Qua2V5cyhFbW90ZXMpLmZpbHRlcihrID0+IHRoaXMuaXNDYXRlZ29yeUVuYWJsZWQoaykpO31cclxuICAgIGdldCBzaG91bGREb3dubG9hZCgpIHtyZXR1cm4gU2V0dGluZ3MuZ2V0KFwiZW1vdGVzXCIsIHRoaXMuY2F0ZWdvcnksIFwiZG93bmxvYWRcIik7fVxyXG5cclxuICAgIGlzQ2F0ZWdvcnlFbmFibGVkKGlkKSB7cmV0dXJuIHN1cGVyLmdldChcImVtb3Rlc1wiLCBcImNhdGVnb3JpZXNcIiwgaWQudG9Mb3dlckNhc2UoKSk7fVxyXG5cclxuICAgIGdldChpZCkge3JldHVybiBzdXBlci5nZXQoXCJlbW90ZXNcIiwgXCJnZW5lcmFsXCIsIGlkKTt9XHJcblxyXG4gICAgZ2V0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTt9XHJcblxyXG4gICAgZ2V0IEVtb3RlcygpIHtyZXR1cm4gRW1vdGVzO31cclxuICAgIGdldCBUd2l0Y2hHbG9iYWwoKSB7cmV0dXJuIEVtb3Rlcy5Ud2l0Y2hHbG9iYWw7fVxyXG4gICAgZ2V0IFR3aXRjaFN1YnNjcmliZXIoKSB7cmV0dXJuIEVtb3Rlcy5Ud2l0Y2hTdWJzY3JpYmVyO31cclxuICAgIGdldCBCVFRWKCkge3JldHVybiBFbW90ZXMuQlRUVjt9XHJcbiAgICBnZXQgRnJhbmtlckZhY2VaKCkge3JldHVybiBFbW90ZXMuRnJhbmtlckZhY2VaO31cclxuICAgIGdldCBibGFja2xpc3QoKSB7cmV0dXJuIGJsYWNrbGlzdDt9XHJcbiAgICBnZXQgZmF2b3JpdGVzKCkge3JldHVybiB0aGlzLmZhdm9yaXRlRW1vdGVzO31cclxuICAgIGdldFVybChjYXRlZ29yeSwgbmFtZSkge3JldHVybiBFbW90ZVVSTHNbY2F0ZWdvcnldLmZvcm1hdCh7aWQ6IEVtb3Rlc1tjYXRlZ29yeV1bbmFtZV19KTt9XHJcblxyXG4gICAgZ2V0Q2F0ZWdvcnkoY2F0ZWdvcnkpIHtyZXR1cm4gRW1vdGVzW2NhdGVnb3J5XTt9XHJcbiAgICBnZXRSZW1vdGVGaWxlKGNhdGVnb3J5KSB7cmV0dXJuIFV0aWxpdGllcy5yZXBvVXJsKGBkYXRhL2Vtb3Rlcy8ke2NhdGVnb3J5LnRvTG93ZXJDYXNlKCl9Lmpzb25gKTt9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XHJcbiAgICAgICAgd2luZG93LmVtb3RlTW9kdWxlID0gdGhpcztcclxuICAgICAgICBjb25zdCBzdG9yZWRGYXZvcml0ZXMgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiZmF2b3JpdGVFbW90ZXNcIik7XHJcbiAgICAgICAgdGhpcy5mYXZvcml0ZUVtb3RlcyA9IHN0b3JlZEZhdm9yaXRlcyB8fCB7fTtcclxuICAgICAgICB0aGlzLmFkZEZhdm9yaXRlID0gdGhpcy5hZGRGYXZvcml0ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRmF2b3JpdGUgPSB0aGlzLnJlbW92ZUZhdm9yaXRlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkNhdGVnb3J5VG9nZ2xlID0gdGhpcy5vbkNhdGVnb3J5VG9nZ2xlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZXNldEVtb3RlcyA9IHRoaXMucmVzZXRFbW90ZXMuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbmFibGVkKCkge1xyXG4gICAgICAgIFNldHRpbmdzLnJlZ2lzdGVyQ29sbGVjdGlvbihcImVtb3Rlc1wiLCBcIkVtb3Rlc1wiLCBFbW90ZUNvbmZpZywge3RpdGxlOiBTdHJpbmdzLkVtb3Rlcy5jbGVhckVtb3Rlcywgb25DbGljazogdGhpcy5yZXNldEVtb3Rlc30pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0QmxhY2tsaXN0KCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkRW1vdGVEYXRhKCk7XHJcblxyXG4gICAgICAgIHdoaWxlICghdGhpcy5NZXNzYWdlQ29udGVudENvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xyXG4gICAgICAgIHRoaXMucGF0Y2hNZXNzYWdlQ29udGVudCgpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcImVtb3Rlcy1mYXZvcml0ZS1hZGRlZFwiLCB0aGlzLmFkZEZhdm9yaXRlKTtcclxuICAgICAgICBFdmVudHMub24oXCJlbW90ZXMtZmF2b3JpdGUtcmVtb3ZlZFwiLCB0aGlzLnJlbW92ZUZhdm9yaXRlKTtcclxuICAgICAgICBFdmVudHMub24oXCJzZXR0aW5nLXVwZGF0ZWRcIiwgdGhpcy5vbkNhdGVnb3J5VG9nZ2xlKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICBFdmVudHMub2ZmKFwic2V0dGluZy11cGRhdGVkXCIsIHRoaXMub25DYXRlZ29yeVRvZ2dsZSk7XHJcbiAgICAgICAgRXZlbnRzLm9mZihcImVtb3Rlcy1mYXZvcml0ZS1hZGRlZFwiLCB0aGlzLmFkZEZhdm9yaXRlKTtcclxuICAgICAgICBFdmVudHMub2ZmKFwiZW1vdGVzLWZhdm9yaXRlLXJlbW92ZWRcIiwgdGhpcy5yZW1vdmVGYXZvcml0ZSk7XHJcbiAgICAgICAgU2V0dGluZ3MucmVtb3ZlQ29sbGVjdGlvbihcImVtb3Rlc1wiKTtcclxuICAgICAgICB0aGlzLmVtcHR5RW1vdGVzKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcigpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2F0ZWdvcnlUb2dnbGUoY29sbGVjdGlvbiwgY2F0LCBjYXRlZ29yeSwgZW5hYmxlZCkge1xyXG4gICAgICAgIGlmIChjb2xsZWN0aW9uICE9IFwiZW1vdGVzXCIgfHwgY2F0ICE9IFwiY2F0ZWdvcmllc1wiKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGVuYWJsZWQpIHJldHVybiB0aGlzLmxvYWRFbW90ZURhdGEoY2F0ZWdvcnkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVubG9hZEVtb3RlRGF0YShjYXRlZ29yeSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRmF2b3JpdGUobmFtZSwgdXJsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZhdm9yaXRlRW1vdGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB0aGlzLmZhdm9yaXRlRW1vdGVzW25hbWVdID0gdXJsO1xyXG4gICAgICAgIHRoaXMuc2F2ZUZhdm9yaXRlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUZhdm9yaXRlKG5hbWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmF2b3JpdGVFbW90ZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHJldHVybjtcclxuICAgICAgICBkZWxldGUgdGhpcy5mYXZvcml0ZUVtb3Rlc1tuYW1lXTtcclxuICAgICAgICB0aGlzLnNhdmVGYXZvcml0ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0Zhdm9yaXRlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mYXZvcml0ZUVtb3Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlRmF2b3JpdGVzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJmYXZvcml0ZUVtb3Rlc1wiLCB0aGlzLmZhdm9yaXRlRW1vdGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBlbXB0eUVtb3RlcygpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdCBpbiBFbW90ZXMpIE9iamVjdC5hc3NpZ24oRW1vdGVzLCB7W2NhdF06IHt9fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hNZXNzYWdlQ29udGVudCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSB0aGlzLmFmdGVyKHRoaXMuTWVzc2FnZUNvbnRlbnRDb21wb25lbnQucHJvdG90eXBlLCBcInJlbmRlclwiLCAodGhpc09iaiwgYXJncywgcmV0VmFsKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWZ0ZXIocmV0VmFsLnByb3BzLCBcImNoaWxkcmVuXCIsICh0LCBhLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllcy5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFya3VwID0gcmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hcmt1cC5wcm9wcy5jaGlsZHJlbikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBtYXJrdXAucHJvcHMuY2hpbGRyZW5bMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGVzIHx8ICFub2Rlcy5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgbm9kZXMubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbbl07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihub2RlKSAhPT0gXCJzdHJpbmdcIikgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29yZHMgPSBub2RlLnNwbGl0KC8oW15cXHNdKykoW1xcc118JCkvZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNsZW4gPSB0aGlzLmNhdGVnb3JpZXMubGVuZ3RoOyBjIDwgY2xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHcgPSAwLCB3bGVuID0gd29yZHMubGVuZ3RoOyB3IDwgd2xlbjsgdysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZSA9IHdvcmRzW3ddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vdGVTcGxpdCA9IGVtb3RlLnNwbGl0KFwiOlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlTmFtZSA9IGVtb3RlU3BsaXRbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW1vdGVNb2RpZmllciA9IGVtb3RlU3BsaXRbMV0gPyBlbW90ZVNwbGl0WzFdIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbW90ZU92ZXJyaWRlID0gZW1vdGVNb2RpZmllci5zbGljZSgwKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVOYW1lLmxlbmd0aCA8IDQgfHwgYmxhY2tsaXN0LmluY2x1ZGVzKGVtb3RlTmFtZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2RpZmllcnMuaW5jbHVkZXMoZW1vdGVNb2RpZmllcikgfHwgIVNldHRpbmdzLmdldChcImVtb3Rlc1wiLCBcImdlbmVyYWxcIiwgXCJtb2RpZmllcnNcIikpIGVtb3RlTW9kaWZpZXIgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvdmVycmlkZXMuaW5jbHVkZXMoZW1vdGVPdmVycmlkZSkpIGVtb3RlT3ZlcnJpZGUgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBlbW90ZU1vZGlmaWVyID0gZW1vdGVPdmVycmlkZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IHRoaXMuY2F0ZWdvcmllc1tjXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZU92ZXJyaWRlID09PSBcInR3aXRjaFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVtb3Rlcy5Ud2l0Y2hHbG9iYWxbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiVHdpdGNoR2xvYmFsXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoRW1vdGVzLlR3aXRjaFN1YnNjcmliZXJbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiVHdpdGNoU3Vic2NyaWJlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW1vdGVPdmVycmlkZSA9PT0gXCJzdWJzY3JpYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRW1vdGVzLlR3aXRjaFN1YnNjcmliZXJbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiVHdpdGNoU3Vic2NyaWJlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW1vdGVPdmVycmlkZSA9PT0gXCJidHR2XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRW1vdGVzLkJUVFZbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiQlRUVlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW1vdGVPdmVycmlkZSA9PT0gXCJmZnpcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFbW90ZXMuRnJhbmtlckZhY2VaW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIkZyYW5rZXJGYWNlWlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRW1vdGVzW2N1cnJlbnRdW2Vtb3RlTmFtZV0pIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5vZGVzW25dLm1hdGNoKG5ldyBSZWdFeHAoYChbXFxcXHNdfF4pJHtVdGlsaXRpZXMuZXNjYXBlKGVtb3RlTW9kaWZpZXIgPyBlbW90ZU5hbWUgKyBcIjpcIiArIGVtb3RlTW9kaWZpZXIgOiBlbW90ZU5hbWUpfShbXFxcXHNdfCQpYCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRzKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZSA9IG5vZGVzW25dLnN1YnN0cmluZygwLCByZXN1bHRzLmluZGV4ICsgcmVzdWx0c1sxXS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zdCA9IG5vZGVzW25dLnN1YnN0cmluZyhyZXN1bHRzLmluZGV4ICsgcmVzdWx0c1swXS5sZW5ndGggLSByZXN1bHRzWzJdLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1tuXSA9IHByZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlQ29tcG9uZW50ID0gRGlzY29yZE1vZHVsZXMuUmVhY3QuY3JlYXRlRWxlbWVudChCREVtb3RlLCB7bmFtZTogZW1vdGVOYW1lLCB1cmw6IEVtb3RlVVJMc1tjdXJyZW50XS5mb3JtYXQoe2lkOiBFbW90ZXNbY3VycmVudF1bZW1vdGVOYW1lXX0pLCBtb2RpZmllcjogZW1vdGVNb2RpZmllciwgaXNGYXZvcml0ZTogdGhpcy5pc0Zhdm9yaXRlKGVtb3RlTmFtZSl9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShuICsgMSwgMCwgcG9zdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UobiArIDEsIDAsIGVtb3RlQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubHlFbW90ZXMgPSBub2Rlcy5ldmVyeShyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKHIpID09IFwic3RyaW5nXCIgJiYgci5yZXBsYWNlKC9cXHMqLywgXCJcIikgPT0gXCJcIikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoci50eXBlICYmIHIudHlwZS5uYW1lID09IFwiQkRFbW90ZVwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyLnByb3BzICYmIHIucHJvcHMuY2hpbGRyZW4gJiYgci5wcm9wcy5jaGlsZHJlbi5wcm9wcyAmJiByLnByb3BzLmNoaWxkcmVuLnByb3BzLmVtb2ppTmFtZSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9ubHlFbW90ZXMpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnR5cGUubmFtZSA9PSBcIkJERW1vdGVcIikgbm9kZS5wcm9wcy5qdW1ib2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUucHJvcHMgJiYgbm9kZS5wcm9wcy5jaGlsZHJlbiAmJiBub2RlLnByb3BzLmNoaWxkcmVuLnByb3BzICYmIG5vZGUucHJvcHMuY2hpbGRyZW4ucHJvcHMuZW1vamlOYW1lKSBub2RlLnByb3BzLmNoaWxkcmVuLnByb3BzLmp1bWJvYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEJsYWNrbGlzdCgpIHtcclxuICAgICAgICBjb25zdCBjYXRlZ29yeSA9IFwiQmxhY2tsaXN0XCI7XHJcbiAgICAgICAgY29uc3QgZXhpc3RzID0gRGF0YVN0b3JlLmVtb3Rlc0V4aXN0KGNhdGVnb3J5KTtcclxuICAgICAgICBjb25zdCB2YWxpZCA9IGF3YWl0IHRoaXMuaXNDYWNoZVZhbGlkKGNhdGVnb3J5KTtcclxuICAgICAgICBjb25zdCB1c2VDYWNoZSA9ICh2YWxpZCkgfHwgKCF2YWxpZCAmJiBleGlzdHMgJiYgIXRoaXMuc2hvdWxkRG93bmxvYWQpO1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSB1c2VDYWNoZSA/IERhdGFTdG9yZS5nZXRFbW90ZURhdGEoY2F0ZWdvcnkpIDogYXdhaXQgdGhpcy5kb3dubG9hZEVtb3RlcyhjYXRlZ29yeSk7XHJcbiAgICAgICAgYmxhY2tsaXN0LnB1c2goLi4ubGlzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNDYWNoZVZhbGlkKGNhdGVnb3J5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBldGFnID0gRGF0YVN0b3JlLmdldENhY2hlSGFzaChcImVtb3Rlc1wiLCBjYXRlZ29yeSk7XHJcbiAgICAgICAgICAgIGlmICghZXRhZykgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICByZXF1ZXN0LmhlYWQoe3VybDogdGhpcy5nZXRSZW1vdGVGaWxlKGNhdGVnb3J5KSwgaGVhZGVyczoge1wiSWYtTm9uZS1NYXRjaFwiOiBldGFnfX0sIChlcnIsIHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcC5zdGF0dXNDb2RlID09IDMwNCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRFbW90ZURhdGEoY2F0ZWdvcmllcykge1xyXG4gICAgICAgIGlmICghY2F0ZWdvcmllcykgY2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcmllcztcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2F0ZWdvcmllcykpIGNhdGVnb3JpZXMgPSBbY2F0ZWdvcmllc107XHJcbiAgICAgICAgY29uc3QgYWxsID0gT2JqZWN0LmtleXMoRW1vdGVzKTtcclxuICAgICAgICBjYXRlZ29yaWVzID0gY2F0ZWdvcmllcy5tYXAoayA9PiBhbGwuZmluZChjID0+IGMudG9Mb3dlckNhc2UoKSA9PSBrLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBUb2FzdHMuc2hvdyhTdHJpbmdzLkVtb3Rlcy5sb2FkaW5nLCB7dHlwZTogXCJpbmZvXCJ9KTtcclxuICAgICAgICB0aGlzLmVtb3Rlc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RzID0gRGF0YVN0b3JlLmVtb3Rlc0V4aXN0KGNhdGVnb3J5KTtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBhd2FpdCB0aGlzLmlzQ2FjaGVWYWxpZChjYXRlZ29yeSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZUNhY2hlID0gKHZhbGlkKSB8fCAoIXZhbGlkICYmIGV4aXN0cyAmJiAhdGhpcy5zaG91bGREb3dubG9hZCk7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHVzZUNhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhgTG9hZGluZyAke2NhdGVnb3J5fSBlbW90ZXMgZnJvbSBsb2NhbCBjYWNoZS5gKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlZERhdGEgPSBEYXRhU3RvcmUuZ2V0RW1vdGVEYXRhKGNhdGVnb3J5KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0RhdGEgPSBPYmplY3Qua2V5cyhjYWNoZWREYXRhKS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhc0RhdGEpIGRhdGEgPSBjYWNoZWREYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZGF0YSkgZGF0YSA9IGF3YWl0IHRoaXMuZG93bmxvYWRFbW90ZXMoY2F0ZWdvcnkpO1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKEVtb3Rlc1tjYXRlZ29yeV0sIGRhdGEpO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTAwMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbW90ZXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIEV2ZW50cy5kaXNwYXRjaChcImVtb3Rlcy1sb2FkZWRcIik7XHJcbiAgICAgICAgVG9hc3RzLnNob3coU3RyaW5ncy5FbW90ZXMubG9hZGVkLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bmxvYWRFbW90ZURhdGEoY2F0ZWdvcmllcykge1xyXG4gICAgICAgIGlmICghY2F0ZWdvcmllcykgY2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcmllcztcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2F0ZWdvcmllcykpIGNhdGVnb3JpZXMgPSBbY2F0ZWdvcmllc107XHJcbiAgICAgICAgY29uc3QgYWxsID0gT2JqZWN0LmtleXMoRW1vdGVzKTtcclxuICAgICAgICBjYXRlZ29yaWVzID0gY2F0ZWdvcmllcy5tYXAoayA9PiBhbGwuZmluZChjID0+IGMudG9Mb3dlckNhc2UoKSA9PSBrLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcclxuICAgICAgICAgICAgZGVsZXRlIEVtb3Rlc1tjYXRlZ29yeV07XHJcbiAgICAgICAgICAgIEVtb3Rlc1tjYXRlZ29yeV0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRFbW90ZXMoY2F0ZWdvcnkpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlbW90ZUZpbGUoY2F0ZWdvcnkpO1xyXG4gICAgICAgIHRoaXMubG9nKGBEb3dubG9hZGluZyAke2NhdGVnb3J5fSBmcm9tICR7dXJsfWApO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7dXJsOiB1cmwsIHRpbWVvdXQ6IDEwMDAwLCBqc29uOiB0cnVlfTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHJlcXVlc3QuZ2V0KG9wdGlvbnMsIChlcnJvciwgcmVzcG9uc2UsIHBhcnNlZERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvciB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2t0cmFjZShgQ291bGQgbm90IGRvd25sb2FkICR7Y2F0ZWdvcnl9IGVtb3Rlcy5gLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gcGFyc2VkRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZS5sZW5ndGggPCA0IHx8IGJsYWNrbGlzdC5pbmNsdWRlcyhlbW90ZSkgfHwgIXBhcnNlZERhdGFbZW1vdGVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJzZWREYXRhW2Vtb3RlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlZERhdGFbZW1vdGVdID0gRW1vdGVVUkxzW2NhdGVnb3J5XS5mb3JtYXQoe2lkOiBwYXJzZWREYXRhW2Vtb3RlXX0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgRGF0YVN0b3JlLnNhdmVFbW90ZURhdGEoY2F0ZWdvcnksIHBhcnNlZERhdGEpO1xyXG4gICAgICAgICAgICAgICAgRGF0YVN0b3JlLnNldENhY2hlSGFzaChcImVtb3Rlc1wiLCBjYXRlZ29yeSwgcmVzcG9uc2UuaGVhZGVycy5ldGFnKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocGFyc2VkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhgRG93bmxvYWRlZCAke2NhdGVnb3J5fWApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldEVtb3RlcygpIHtcclxuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gT2JqZWN0LmtleXMoRW1vdGVzKTtcclxuICAgICAgICB0aGlzLnVubG9hZEVtb3RlRGF0YShjYXRlZ29yaWVzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdCBvZiBjYXRlZ29yaWVzKSBEYXRhU3RvcmUuaW52YWxpZGF0ZUNhY2hlKFwiZW1vdGVzXCIsIGNhdCk7XHJcbiAgICAgICAgdGhpcy5sb2FkRW1vdGVEYXRhKCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8gKGFzeW5jICgpID0+IHtcclxuLy8gICAgIGNvbnN0IGVtb3RlRGF0YSA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4vLyAgICAgICAgIGNvbnN0IHJlcSA9IHJlcXVpcmUoXCJyZXF1ZXN0XCIpO1xyXG4vLyAgICAgICAgIHJlcS5nZXQoe3VybDogXCJodHRwczovL3R3aXRjaGVtb3Rlcy5jb20vYXBpX2NhY2hlL3YzL2dsb2JhbC5qc29uXCIsIGpzb246IHRydWV9LCAoZXJyLCByZXNwLCBwYXJzZWREYXRhKSA9PiB7XHJcbi8vICAgICAgICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gcGFyc2VkRGF0YSkge1xyXG4vLyAgICAgICAgICAgICAgICAgaWYgKGVtb3RlLmxlbmd0aCA8IDQgfHwgd2luZG93LmJlbW90ZXMuaW5jbHVkZXMoZW1vdGUpKSB7XHJcbi8vICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnNlZERhdGFbZW1vdGVdO1xyXG4vLyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4vLyAgICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICAgICAgcGFyc2VkRGF0YVtlbW90ZV0gPSBwYXJzZWREYXRhW2Vtb3RlXS5pZDtcclxuLy8gICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICByZXNvbHZlKHBhcnNlZERhdGEpO1xyXG4vLyAgICAgICAgIH0pO1xyXG4vLyAgICAgfSk7XHJcbi8vICAgICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuLy8gICAgIGZzLndyaXRlRmlsZVN5bmMoXCJaOlxcXFxQcm9ncmFtbWluZ1xcXFxCZXR0ZXJEaXNjb3JkU3R1ZmZcXFxcQmV0dGVyRGlzY29yZEFwcFxcXFxkYXRhXFxcXGVtb3Rlc1xcXFxnbG9iYWwuanNvblwiLCBKU09OLnN0cmluZ2lmeShlbW90ZURhdGEpKTtcclxuLy8gICAgIHJldHVybiBlbW90ZURhdGE7XHJcbi8vIH0pKCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/emotes.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _ui_emote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/emote */ \"./src/ui/emote.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _structs_string__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../structs/string */ \"./src/structs/string.js\");\n\n\n\n\n\n\n\nconst request = __webpack_require__(/*! request */ \"request\");\n\nconst EmoteURLs = {\n TwitchGlobal: new _structs_string__WEBPACK_IMPORTED_MODULE_5__[\"default\"](`https://static-cdn.jtvnw.net/emoticons/v1/{{id}}/1.0`),\n TwitchSubscriber: new _structs_string__WEBPACK_IMPORTED_MODULE_5__[\"default\"](`https://static-cdn.jtvnw.net/emoticons/v1/{{id}}/1.0`),\n FrankerFaceZ: new _structs_string__WEBPACK_IMPORTED_MODULE_5__[\"default\"](`https://cdn.frankerfacez.com/emoticon/{{id}}/1`),\n BTTV: new _structs_string__WEBPACK_IMPORTED_MODULE_5__[\"default\"](`https://cdn.betterttv.net/emote/{{id}}/1x`)\n};\nconst Emotes = {\n TwitchGlobal: {},\n TwitchSubscriber: {},\n BTTV: {},\n FrankerFaceZ: {}\n};\nconst blacklist = [];\nconst overrides = [\"twitch\", \"subscriber\", \"bttv\", \"ffz\"];\nconst modifiers = [\"flip\", \"spin\", \"pulse\", \"spin2\", \"spin3\", \"1spin\", \"2spin\", \"3spin\", \"tr\", \"bl\", \"br\", \"shake\", \"shake2\", \"shake3\", \"flap\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteModule extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"Emotes\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emotes\";\n }\n\n get categories() {\n return Object.keys(Emotes).filter(k => this.isCategoryEnabled(k));\n }\n\n get shouldDownload() {\n return modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(\"emotes\", this.category, \"download\");\n }\n\n isCategoryEnabled(id) {\n return super.get(\"emotes\", \"categories\", id.toLowerCase());\n }\n\n get(id) {\n return super.get(\"emotes\", \"general\", id);\n }\n\n get MessageContentComponent() {\n return modules__WEBPACK_IMPORTED_MODULE_2__[\"WebpackModules\"].getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty(\"disableButtons\"));\n }\n\n get Emotes() {\n return Emotes;\n }\n\n get TwitchGlobal() {\n return Emotes.TwitchGlobal;\n }\n\n get TwitchSubscriber() {\n return Emotes.TwitchSubscriber;\n }\n\n get BTTV() {\n return Emotes.BTTV;\n }\n\n get FrankerFaceZ() {\n return Emotes.FrankerFaceZ;\n }\n\n get blacklist() {\n return blacklist;\n }\n\n get favorites() {\n return this.favoriteEmotes;\n }\n\n getUrl(category, name) {\n return EmoteURLs[category].format({\n id: Emotes[category][name]\n });\n }\n\n getCategory(category) {\n return Emotes[category];\n }\n\n getRemoteFile(category) {\n return modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].repoUrl(`data/emotes/${category.toLowerCase()}.json`);\n }\n\n initialize() {\n super.initialize();\n window.emoteModule = this;\n const storedFavorites = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"favoriteEmotes\");\n this.favoriteEmotes = storedFavorites || {};\n this.addFavorite = this.addFavorite.bind(this);\n this.removeFavorite = this.removeFavorite.bind(this);\n this.onCategoryToggle = this.onCategoryToggle.bind(this);\n this.resetEmotes = this.resetEmotes.bind(this);\n }\n\n async enabled() {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].registerCollection(\"emotes\", \"Emotes\", data__WEBPACK_IMPORTED_MODULE_1__[\"EmoteConfig\"], {\n title: modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Emotes.clearEmotes,\n onClick: this.resetEmotes\n });\n await this.getBlacklist();\n await this.loadEmoteData(); // while (!this.MessageContentComponent) await new Promise(resolve => setTimeout(resolve, 100));\n // this.patchMessageContent();\n\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].on(\"emotes-favorite-added\", this.addFavorite);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].on(\"emotes-favorite-removed\", this.removeFavorite);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].on(\"setting-updated\", this.onCategoryToggle);\n }\n\n disabled() {\n console.log(\"DISABLED\");\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].off(\"setting-updated\", this.onCategoryToggle);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].off(\"emotes-favorite-added\", this.addFavorite);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].off(\"emotes-favorite-removed\", this.removeFavorite);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].removeCollection(\"emotes\");\n this.emptyEmotes();\n if (!this.cancelEmoteRender) return;\n this.cancelEmoteRender();\n delete this.cancelEmoteRender;\n }\n\n onCategoryToggle(collection, cat, category, enabled) {\n if (collection != \"emotes\" || cat != \"categories\") return;\n if (enabled) return this.loadEmoteData(category);\n return this.unloadEmoteData(category);\n }\n\n addFavorite(name, url) {\n if (!this.favoriteEmotes.hasOwnProperty(name)) this.favoriteEmotes[name] = url;\n this.saveFavorites();\n }\n\n removeFavorite(name) {\n if (!this.favoriteEmotes.hasOwnProperty(name)) return;\n delete this.favoriteEmotes[name];\n this.saveFavorites();\n }\n\n isFavorite(name) {\n return this.favoriteEmotes.hasOwnProperty(name);\n }\n\n saveFavorites() {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"favoriteEmotes\", this.favoriteEmotes);\n }\n\n emptyEmotes() {\n for (const cat in Emotes) Object.assign(Emotes, {\n [cat]: {}\n });\n }\n\n patchMessageContent() {\n if (this.cancelEmoteRender) return;\n this.cancelEmoteRender = this.after(this.MessageContentComponent.prototype, \"render\", (thisObj, args, retVal) => {\n this.after(retVal.props, \"children\", (t, a, returnValue) => {\n if (this.categories.length == 0) return;\n const markup = returnValue.props.children[1];\n if (!markup.props.children) return;\n const nodes = markup.props.children[1];\n if (!nodes || !nodes.length) return;\n\n for (let n = 0; n < nodes.length; n++) {\n const node = nodes[n];\n if (typeof node !== \"string\") continue;\n const words = node.split(/([^\\s]+)([\\s]|$)/g);\n\n for (let c = 0, clen = this.categories.length; c < clen; c++) {\n for (let w = 0, wlen = words.length; w < wlen; w++) {\n const emote = words[w];\n const emoteSplit = emote.split(\":\");\n const emoteName = emoteSplit[0];\n let emoteModifier = emoteSplit[1] ? emoteSplit[1] : \"\";\n let emoteOverride = emoteModifier.slice(0);\n if (emoteName.length < 4 || blacklist.includes(emoteName)) continue;\n if (!modifiers.includes(emoteModifier) || !modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(\"emotes\", \"general\", \"modifiers\")) emoteModifier = \"\";\n if (!overrides.includes(emoteOverride)) emoteOverride = \"\";else emoteModifier = emoteOverride;\n let current = this.categories[c];\n\n if (emoteOverride === \"twitch\") {\n if (Emotes.TwitchGlobal[emoteName]) current = \"TwitchGlobal\";else if (Emotes.TwitchSubscriber[emoteName]) current = \"TwitchSubscriber\";\n } else if (emoteOverride === \"subscriber\") {\n if (Emotes.TwitchSubscriber[emoteName]) current = \"TwitchSubscriber\";\n } else if (emoteOverride === \"bttv\") {\n if (Emotes.BTTV[emoteName]) current = \"BTTV\";\n } else if (emoteOverride === \"ffz\") {\n if (Emotes.FrankerFaceZ[emoteName]) current = \"FrankerFaceZ\";\n }\n\n if (!Emotes[current][emoteName]) continue;\n const results = nodes[n].match(new RegExp(`([\\\\s]|^)${modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].escape(emoteModifier ? emoteName + \":\" + emoteModifier : emoteName)}([\\\\s]|$)`));\n if (!results) continue;\n const pre = nodes[n].substring(0, results.index + results[1].length);\n const post = nodes[n].substring(results.index + results[0].length - results[2].length);\n nodes[n] = pre;\n const emoteComponent = modules__WEBPACK_IMPORTED_MODULE_2__[\"DiscordModules\"].React.createElement(_ui_emote__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n name: emoteName,\n url: EmoteURLs[current].format({\n id: Emotes[current][emoteName]\n }),\n modifier: emoteModifier,\n isFavorite: this.isFavorite(emoteName)\n });\n nodes.splice(n + 1, 0, post);\n nodes.splice(n + 1, 0, emoteComponent);\n }\n }\n }\n\n const onlyEmotes = nodes.every(r => {\n if (typeof r == \"string\" && r.replace(/\\s*/, \"\") == \"\") return true;else if (r.type && r.type.name == \"BDEmote\") return true;else if (r.props && r.props.children && r.props.children.props && r.props.children.props.emojiName) return true;\n return false;\n });\n if (!onlyEmotes) return;\n\n for (const node of nodes) {\n if (typeof node != \"object\") continue;\n if (node.type.name == \"BDEmote\") node.props.jumboable = true;else if (node.props && node.props.children && node.props.children.props && node.props.children.props.emojiName) node.props.children.props.jumboable = true;\n }\n });\n });\n }\n\n async getBlacklist() {\n try {\n const category = \"Blacklist\";\n const exists = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].emotesExist(category);\n const valid = await this.isCacheValid(category);\n const useCache = valid || !valid && exists && !this.shouldDownload;\n const list = useCache ? modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getEmoteData(category) : await this.downloadEmotes(category);\n blacklist.push(...list);\n } catch (err) {// TODO: Log this\n }\n }\n\n isCacheValid(category) {\n return new Promise(resolve => {\n const etag = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getCacheHash(\"emotes\", category);\n if (!etag) return resolve(false);\n request.head({\n url: this.getRemoteFile(category),\n headers: {\n \"If-None-Match\": etag\n }\n }, (err, resp) => {\n resolve(resp.statusCode == 304);\n });\n });\n }\n\n async loadEmoteData(categories) {\n if (!categories) categories = this.categories;\n if (!Array.isArray(categories)) categories = [categories];\n const all = Object.keys(Emotes);\n categories = categories.map(k => all.find(c => c.toLowerCase() == k.toLowerCase()));\n _ui_toasts__WEBPACK_IMPORTED_MODULE_4__[\"default\"].show(modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Emotes.loading, {\n type: \"info\"\n });\n this.emotesLoaded = false;\n\n for (const category of categories) {\n const exists = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].emotesExist(category);\n const valid = await this.isCacheValid(category);\n const useCache = valid || !valid && exists && !this.shouldDownload;\n let data = null;\n\n if (useCache) {\n this.log(`Loading ${category} emotes from local cache.`);\n const cachedData = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getEmoteData(category);\n const hasData = Object.keys(cachedData).length > 0;\n if (hasData) data = cachedData;\n }\n\n if (!data) data = await this.downloadEmotes(category);\n Object.assign(Emotes[category], data);\n await new Promise(r => setTimeout(r, 1000));\n }\n\n this.emotesLoaded = true;\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].dispatch(\"emotes-loaded\");\n _ui_toasts__WEBPACK_IMPORTED_MODULE_4__[\"default\"].show(modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Emotes.loaded, {\n type: \"success\"\n });\n }\n\n unloadEmoteData(categories) {\n if (!categories) categories = this.categories;\n if (!Array.isArray(categories)) categories = [categories];\n const all = Object.keys(Emotes);\n categories = categories.map(k => all.find(c => c.toLowerCase() == k.toLowerCase()));\n\n for (const category of categories) {\n delete Emotes[category];\n Emotes[category] = {};\n }\n }\n\n downloadEmotes(category) {\n const url = this.getRemoteFile(category);\n this.log(`Downloading ${category} from ${url}`);\n const options = {\n url: url,\n timeout: 10000,\n json: true\n };\n return new Promise(resolve => {\n request.get(options, (error, response, parsedData) => {\n if (error || response.statusCode != 200) {\n this.stacktrace(`Could not download ${category} emotes.`, error);\n return resolve({});\n }\n\n for (const emote in parsedData) {\n if (emote.length < 4 || blacklist.includes(emote) || !parsedData[emote]) {\n delete parsedData[emote];\n continue;\n } // parsedData[emote] = EmoteURLs[category].format({id: parsedData[emote]});\n\n }\n\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].saveEmoteData(category, parsedData);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setCacheHash(\"emotes\", category, response.headers.etag);\n resolve(parsedData);\n this.log(`Downloaded ${category}`);\n });\n });\n }\n\n resetEmotes() {\n const categories = Object.keys(Emotes);\n this.unloadEmoteData(categories);\n\n for (const cat of categories) modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].invalidateCache(\"emotes\", cat);\n\n this.loadEmoteData();\n }\n\n}()); // (async () => {\n// const emoteData = await new Promise(resolve => {\n// const req = require(\"request\");\n// req.get({url: \"https://twitchemotes.com/api_cache/v3/global.json\", json: true}, (err, resp, parsedData) => {\n// for (const emote in parsedData) {\n// if (emote.length < 4 || window.bemotes.includes(emote)) {\n// delete parsedData[emote];\n// continue;\n// }\n// parsedData[emote] = parsedData[emote].id;\n// }\n// resolve(parsedData);\n// });\n// });\n// const fs = require(\"fs\");\n// fs.writeFileSync(\"Z:\\\\Programming\\\\BetterDiscordStuff\\\\BetterDiscordApp\\\\data\\\\emotes\\\\global.json\", JSON.stringify(emoteData));\n// return emoteData;\n// })();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy5qcz82YTA0Il0sIm5hbWVzIjpbInJlcXVlc3QiLCJyZXF1aXJlIiwiRW1vdGVVUkxzIiwiVHdpdGNoR2xvYmFsIiwiRm9ybWF0dGFibGVTdHJpbmciLCJUd2l0Y2hTdWJzY3JpYmVyIiwiRnJhbmtlckZhY2VaIiwiQlRUViIsIkVtb3RlcyIsImJsYWNrbGlzdCIsIm92ZXJyaWRlcyIsIm1vZGlmaWVycyIsIkVtb3RlTW9kdWxlIiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImNhdGVnb3JpZXMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiayIsImlzQ2F0ZWdvcnlFbmFibGVkIiwic2hvdWxkRG93bmxvYWQiLCJTZXR0aW5ncyIsImdldCIsInRvTG93ZXJDYXNlIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0UHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsImZhdm9yaXRlcyIsImZhdm9yaXRlRW1vdGVzIiwiZ2V0VXJsIiwiZm9ybWF0IiwiZ2V0Q2F0ZWdvcnkiLCJnZXRSZW1vdGVGaWxlIiwiVXRpbGl0aWVzIiwicmVwb1VybCIsImluaXRpYWxpemUiLCJ3aW5kb3ciLCJlbW90ZU1vZHVsZSIsInN0b3JlZEZhdm9yaXRlcyIsIkRhdGFTdG9yZSIsImdldEJERGF0YSIsImFkZEZhdm9yaXRlIiwiYmluZCIsInJlbW92ZUZhdm9yaXRlIiwib25DYXRlZ29yeVRvZ2dsZSIsInJlc2V0RW1vdGVzIiwiZW5hYmxlZCIsInJlZ2lzdGVyQ29sbGVjdGlvbiIsIkVtb3RlQ29uZmlnIiwidGl0bGUiLCJTdHJpbmdzIiwiY2xlYXJFbW90ZXMiLCJvbkNsaWNrIiwiZ2V0QmxhY2tsaXN0IiwibG9hZEVtb3RlRGF0YSIsIkV2ZW50cyIsIm9uIiwiZGlzYWJsZWQiLCJjb25zb2xlIiwibG9nIiwib2ZmIiwicmVtb3ZlQ29sbGVjdGlvbiIsImVtcHR5RW1vdGVzIiwiY2FuY2VsRW1vdGVSZW5kZXIiLCJjYXQiLCJ1bmxvYWRFbW90ZURhdGEiLCJ1cmwiLCJzYXZlRmF2b3JpdGVzIiwiaXNGYXZvcml0ZSIsInNldEJERGF0YSIsImFzc2lnbiIsInBhdGNoTWVzc2FnZUNvbnRlbnQiLCJhZnRlciIsInByb3RvdHlwZSIsInRoaXNPYmoiLCJhcmdzIiwicmV0VmFsIiwicHJvcHMiLCJ0IiwiYSIsInJldHVyblZhbHVlIiwibGVuZ3RoIiwibWFya3VwIiwiY2hpbGRyZW4iLCJub2RlcyIsIm4iLCJub2RlIiwid29yZHMiLCJzcGxpdCIsImMiLCJjbGVuIiwidyIsIndsZW4iLCJlbW90ZSIsImVtb3RlU3BsaXQiLCJlbW90ZU5hbWUiLCJlbW90ZU1vZGlmaWVyIiwiZW1vdGVPdmVycmlkZSIsInNsaWNlIiwiaW5jbHVkZXMiLCJjdXJyZW50IiwicmVzdWx0cyIsIm1hdGNoIiwiUmVnRXhwIiwiZXNjYXBlIiwicHJlIiwic3Vic3RyaW5nIiwiaW5kZXgiLCJwb3N0IiwiZW1vdGVDb21wb25lbnQiLCJEaXNjb3JkTW9kdWxlcyIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsIkJERW1vdGUiLCJtb2RpZmllciIsInNwbGljZSIsIm9ubHlFbW90ZXMiLCJldmVyeSIsInIiLCJyZXBsYWNlIiwidHlwZSIsImVtb2ppTmFtZSIsImp1bWJvYWJsZSIsImV4aXN0cyIsImVtb3Rlc0V4aXN0IiwidmFsaWQiLCJpc0NhY2hlVmFsaWQiLCJ1c2VDYWNoZSIsImxpc3QiLCJnZXRFbW90ZURhdGEiLCJkb3dubG9hZEVtb3RlcyIsInB1c2giLCJlcnIiLCJQcm9taXNlIiwicmVzb2x2ZSIsImV0YWciLCJnZXRDYWNoZUhhc2giLCJoZWFkIiwiaGVhZGVycyIsInJlc3AiLCJzdGF0dXNDb2RlIiwiQXJyYXkiLCJpc0FycmF5IiwiYWxsIiwibWFwIiwiZmluZCIsIlRvYXN0cyIsInNob3ciLCJsb2FkaW5nIiwiZW1vdGVzTG9hZGVkIiwiZGF0YSIsImNhY2hlZERhdGEiLCJoYXNEYXRhIiwic2V0VGltZW91dCIsImRpc3BhdGNoIiwibG9hZGVkIiwib3B0aW9ucyIsInRpbWVvdXQiLCJqc29uIiwiZXJyb3IiLCJyZXNwb25zZSIsInBhcnNlZERhdGEiLCJzdGFja3RyYWNlIiwic2F2ZUVtb3RlRGF0YSIsInNldENhY2hlSGFzaCIsImludmFsaWRhdGVDYWNoZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsTUFBTUEsT0FBTyxHQUFHQyxtQkFBTyxDQUFDLHdCQUFELENBQXZCOztBQUVBLE1BQU1DLFNBQVMsR0FBRztBQUNkQyxjQUFZLEVBQUUsSUFBSUMsdURBQUosQ0FBdUIsc0RBQXZCLENBREE7QUFFZEMsa0JBQWdCLEVBQUUsSUFBSUQsdURBQUosQ0FBdUIsc0RBQXZCLENBRko7QUFHZEUsY0FBWSxFQUFFLElBQUlGLHVEQUFKLENBQXVCLGdEQUF2QixDQUhBO0FBSWRHLE1BQUksRUFBRSxJQUFJSCx1REFBSixDQUF1QiwyQ0FBdkI7QUFKUSxDQUFsQjtBQU9BLE1BQU1JLE1BQU0sR0FBRztBQUNYTCxjQUFZLEVBQUUsRUFESDtBQUVYRSxrQkFBZ0IsRUFBRSxFQUZQO0FBR1hFLE1BQUksRUFBRSxFQUhLO0FBSVhELGNBQVksRUFBRTtBQUpILENBQWY7QUFPQSxNQUFNRyxTQUFTLEdBQUcsRUFBbEI7QUFDQSxNQUFNQyxTQUFTLEdBQUcsQ0FBQyxRQUFELEVBQVcsWUFBWCxFQUF5QixNQUF6QixFQUFpQyxLQUFqQyxDQUFsQjtBQUNBLE1BQU1DLFNBQVMsR0FBRyxDQUFDLE1BQUQsRUFBUyxNQUFULEVBQWlCLE9BQWpCLEVBQTBCLE9BQTFCLEVBQW1DLE9BQW5DLEVBQTRDLE9BQTVDLEVBQXFELE9BQXJELEVBQThELE9BQTlELEVBQXVFLElBQXZFLEVBQTZFLElBQTdFLEVBQW1GLElBQW5GLEVBQXlGLE9BQXpG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LGNBQWFsRCxRQUFTLEVBQWhDO0FBQ0gsT0FqQkQ7QUFrQkgsS0FuQk0sQ0FBUDtBQW9CSDs7QUFFRG9DLGFBQVcsR0FBRztBQUNWLFVBQU1sQyxVQUFVLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZWixNQUFaLENBQW5CO0FBQ0EsU0FBS2dFLGVBQUwsQ0FBcUJ0RCxVQUFyQjs7QUFDQSxTQUFLLE1BQU1xRCxHQUFYLElBQWtCckQsVUFBbEIsRUFBOEI0QixpREFBUyxDQUFDOEgsZUFBVixDQUEwQixRQUExQixFQUFvQ3JHLEdBQXBDOztBQUM5QixTQUFLVixhQUFMO0FBQ0g7O0FBL1BnRCxDQUF0QyxFQUFmLEUsQ0FtUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuXHJcbmltcG9ydCB7RW1vdGVDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCB7VXRpbGl0aWVzLCBXZWJwYWNrTW9kdWxlcywgRGF0YVN0b3JlLCBEaXNjb3JkTW9kdWxlcywgRXZlbnRzLCBTZXR0aW5ncywgU3RyaW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IEJERW1vdGUgZnJvbSBcIi4uL3VpL2Vtb3RlXCI7XHJcbmltcG9ydCBUb2FzdHMgZnJvbSBcIi4uL3VpL3RvYXN0c1wiO1xyXG5pbXBvcnQgRm9ybWF0dGFibGVTdHJpbmcgZnJvbSBcIi4uL3N0cnVjdHMvc3RyaW5nXCI7XHJcbmNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKFwicmVxdWVzdFwiKTtcclxuXHJcbmNvbnN0IEVtb3RlVVJMcyA9IHtcclxuICAgIFR3aXRjaEdsb2JhbDogbmV3IEZvcm1hdHRhYmxlU3RyaW5nKGBodHRwczovL3N0YXRpYy1jZG4uanR2bncubmV0L2Vtb3RpY29ucy92MS97e2lkfX0vMS4wYCksXHJcbiAgICBUd2l0Y2hTdWJzY3JpYmVyOiBuZXcgRm9ybWF0dGFibGVTdHJpbmcoYGh0dHBzOi8vc3RhdGljLWNkbi5qdHZudy5uZXQvZW1vdGljb25zL3YxL3t7aWR9fS8xLjBgKSxcclxuICAgIEZyYW5rZXJGYWNlWjogbmV3IEZvcm1hdHRhYmxlU3RyaW5nKGBodHRwczovL2Nkbi5mcmFua2VyZmFjZXouY29tL2Vtb3RpY29uL3t7aWR9fS8xYCksXHJcbiAgICBCVFRWOiBuZXcgRm9ybWF0dGFibGVTdHJpbmcoYGh0dHBzOi8vY2RuLmJldHRlcnR0di5uZXQvZW1vdGUve3tpZH19LzF4YCksXHJcbn07XHJcblxyXG5jb25zdCBFbW90ZXMgPSB7XHJcbiAgICBUd2l0Y2hHbG9iYWw6IHt9LFxyXG4gICAgVHdpdGNoU3Vic2NyaWJlcjoge30sXHJcbiAgICBCVFRWOiB7fSxcclxuICAgIEZyYW5rZXJGYWNlWjoge31cclxufTtcclxuXHJcbmNvbnN0IGJsYWNrbGlzdCA9IFtdO1xyXG5jb25zdCBvdmVycmlkZXMgPSBbXCJ0d2l0Y2hcIiwgXCJzdWJzY3JpYmVyXCIsIFwiYnR0dlwiLCBcImZmelwiXTtcclxuY29uc3QgbW9kaWZpZXJzID0gW1wiZmxpcFwiLCBcInNwaW5cIiwgXCJwdWxzZVwiLCBcInNwaW4yXCIsIFwic3BpbjNcIiwgXCIxc3BpblwiLCBcIjJzcGluXCIsIFwiM3NwaW5cIiwgXCJ0clwiLCBcImJsXCIsIFwiYnJcIiwgXCJzaGFrZVwiLCBcInNoYWtlMlwiLCBcInNoYWtlM1wiLCBcImZsYXBcIl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vdGVNb2R1bGUgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkVtb3Rlc1wiO31cclxuICAgIGdldCBjb2xsZWN0aW9uKCkge3JldHVybiBcInNldHRpbmdzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiZW1vdGVzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3JpZXMoKSB7cmV0dXJuIE9iamVjdC5rZXlzKEVtb3RlcykuZmlsdGVyKGsgPT4gdGhpcy5pc0NhdGVnb3J5RW5hYmxlZChrKSk7fVxyXG4gICAgZ2V0IHNob3VsZERvd25sb2FkKCkge3JldHVybiBTZXR0aW5ncy5nZXQoXCJlbW90ZXNcIiwgdGhpcy5jYXRlZ29yeSwgXCJkb3dubG9hZFwiKTt9XHJcblxyXG4gICAgaXNDYXRlZ29yeUVuYWJsZWQoaWQpIHtyZXR1cm4gc3VwZXIuZ2V0KFwiZW1vdGVzXCIsIFwiY2F0ZWdvcmllc1wiLCBpZC50b0xvd2VyQ2FzZSgpKTt9XHJcblxyXG4gICAgZ2V0KGlkKSB7cmV0dXJuIHN1cGVyLmdldChcImVtb3Rlc1wiLCBcImdlbmVyYWxcIiwgaWQpO31cclxuXHJcbiAgICBnZXQgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZShtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLmhhc093blByb3BlcnR5KFwiZGlzYWJsZUJ1dHRvbnNcIikpO31cclxuXHJcbiAgICBnZXQgRW1vdGVzKCkge3JldHVybiBFbW90ZXM7fVxyXG4gICAgZ2V0IFR3aXRjaEdsb2JhbCgpIHtyZXR1cm4gRW1vdGVzLlR3aXRjaEdsb2JhbDt9XHJcbiAgICBnZXQgVHdpdGNoU3Vic2NyaWJlcigpIHtyZXR1cm4gRW1vdGVzLlR3aXRjaFN1YnNjcmliZXI7fVxyXG4gICAgZ2V0IEJUVFYoKSB7cmV0dXJuIEVtb3Rlcy5CVFRWO31cclxuICAgIGdldCBGcmFua2VyRmFjZVooKSB7cmV0dXJuIEVtb3Rlcy5GcmFua2VyRmFjZVo7fVxyXG4gICAgZ2V0IGJsYWNrbGlzdCgpIHtyZXR1cm4gYmxhY2tsaXN0O31cclxuICAgIGdldCBmYXZvcml0ZXMoKSB7cmV0dXJuIHRoaXMuZmF2b3JpdGVFbW90ZXM7fVxyXG4gICAgZ2V0VXJsKGNhdGVnb3J5LCBuYW1lKSB7cmV0dXJuIEVtb3RlVVJMc1tjYXRlZ29yeV0uZm9ybWF0KHtpZDogRW1vdGVzW2NhdGVnb3J5XVtuYW1lXX0pO31cclxuXHJcbiAgICBnZXRDYXRlZ29yeShjYXRlZ29yeSkge3JldHVybiBFbW90ZXNbY2F0ZWdvcnldO31cclxuICAgIGdldFJlbW90ZUZpbGUoY2F0ZWdvcnkpIHtyZXR1cm4gVXRpbGl0aWVzLnJlcG9VcmwoYGRhdGEvZW1vdGVzLyR7Y2F0ZWdvcnkudG9Mb3dlckNhc2UoKX0uanNvbmApO31cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcclxuICAgICAgICB3aW5kb3cuZW1vdGVNb2R1bGUgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHN0b3JlZEZhdm9yaXRlcyA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJmYXZvcml0ZUVtb3Rlc1wiKTtcclxuICAgICAgICB0aGlzLmZhdm9yaXRlRW1vdGVzID0gc3RvcmVkRmF2b3JpdGVzIHx8IHt9O1xyXG4gICAgICAgIHRoaXMuYWRkRmF2b3JpdGUgPSB0aGlzLmFkZEZhdm9yaXRlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVGYXZvcml0ZSA9IHRoaXMucmVtb3ZlRmF2b3JpdGUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9uQ2F0ZWdvcnlUb2dnbGUgPSB0aGlzLm9uQ2F0ZWdvcnlUb2dnbGUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlc2V0RW1vdGVzID0gdGhpcy5yZXNldEVtb3Rlcy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgU2V0dGluZ3MucmVnaXN0ZXJDb2xsZWN0aW9uKFwiZW1vdGVzXCIsIFwiRW1vdGVzXCIsIEVtb3RlQ29uZmlnLCB7dGl0bGU6IFN0cmluZ3MuRW1vdGVzLmNsZWFyRW1vdGVzLCBvbkNsaWNrOiB0aGlzLnJlc2V0RW1vdGVzfSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRCbGFja2xpc3QoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmxvYWRFbW90ZURhdGEoKTtcclxuXHJcbiAgICAgICAgLy8gd2hpbGUgKCF0aGlzLk1lc3NhZ2VDb250ZW50Q29tcG9uZW50KSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XHJcbiAgICAgICAgLy8gdGhpcy5wYXRjaE1lc3NhZ2VDb250ZW50KCk7XHJcbiAgICAgICAgRXZlbnRzLm9uKFwiZW1vdGVzLWZhdm9yaXRlLWFkZGVkXCIsIHRoaXMuYWRkRmF2b3JpdGUpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcImVtb3Rlcy1mYXZvcml0ZS1yZW1vdmVkXCIsIHRoaXMucmVtb3ZlRmF2b3JpdGUpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcInNldHRpbmctdXBkYXRlZFwiLCB0aGlzLm9uQ2F0ZWdvcnlUb2dnbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRElTQUJMRURcIik7XHJcbiAgICAgICAgRXZlbnRzLm9mZihcInNldHRpbmctdXBkYXRlZFwiLCB0aGlzLm9uQ2F0ZWdvcnlUb2dnbGUpO1xyXG4gICAgICAgIEV2ZW50cy5vZmYoXCJlbW90ZXMtZmF2b3JpdGUtYWRkZWRcIiwgdGhpcy5hZGRGYXZvcml0ZSk7XHJcbiAgICAgICAgRXZlbnRzLm9mZihcImVtb3Rlcy1mYXZvcml0ZS1yZW1vdmVkXCIsIHRoaXMucmVtb3ZlRmF2b3JpdGUpO1xyXG4gICAgICAgIFNldHRpbmdzLnJlbW92ZUNvbGxlY3Rpb24oXCJlbW90ZXNcIik7XHJcbiAgICAgICAgdGhpcy5lbXB0eUVtb3RlcygpO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcjtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhdGVnb3J5VG9nZ2xlKGNvbGxlY3Rpb24sIGNhdCwgY2F0ZWdvcnksIGVuYWJsZWQpIHtcclxuICAgICAgICBpZiAoY29sbGVjdGlvbiAhPSBcImVtb3Rlc1wiIHx8IGNhdCAhPSBcImNhdGVnb3JpZXNcIikgcmV0dXJuO1xyXG4gICAgICAgIGlmIChlbmFibGVkKSByZXR1cm4gdGhpcy5sb2FkRW1vdGVEYXRhKGNhdGVnb3J5KTtcclxuICAgICAgICByZXR1cm4gdGhpcy51bmxvYWRFbW90ZURhdGEoY2F0ZWdvcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEZhdm9yaXRlKG5hbWUsIHVybCkge1xyXG4gICAgICAgIGlmICghdGhpcy5mYXZvcml0ZUVtb3Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgdGhpcy5mYXZvcml0ZUVtb3Rlc1tuYW1lXSA9IHVybDtcclxuICAgICAgICB0aGlzLnNhdmVGYXZvcml0ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVGYXZvcml0ZShuYW1lKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZhdm9yaXRlRW1vdGVzLmhhc093blByb3BlcnR5KG5hbWUpKSByZXR1cm47XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZmF2b3JpdGVFbW90ZXNbbmFtZV07XHJcbiAgICAgICAgdGhpcy5zYXZlRmF2b3JpdGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNGYXZvcml0ZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmF2b3JpdGVFbW90ZXMuaGFzT3duUHJvcGVydHkobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUZhdm9yaXRlcygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiZmF2b3JpdGVFbW90ZXNcIiwgdGhpcy5mYXZvcml0ZUVtb3Rlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHlFbW90ZXMoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBjYXQgaW4gRW1vdGVzKSBPYmplY3QuYXNzaWduKEVtb3Rlcywge1tjYXRdOiB7fX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoTWVzc2FnZUNvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gdGhpcy5hZnRlcih0aGlzLk1lc3NhZ2VDb250ZW50Q29tcG9uZW50LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmosIGFyZ3MsIHJldFZhbCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFmdGVyKHJldFZhbC5wcm9wcywgXCJjaGlsZHJlblwiLCAodCwgYSwgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhdGVnb3JpZXMubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmt1cCA9IHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXJrdXAucHJvcHMuY2hpbGRyZW4pIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gbWFya3VwLnByb3BzLmNoaWxkcmVuWzFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub2RlcyB8fCAhbm9kZXMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IG5vZGVzLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yobm9kZSkgIT09IFwic3RyaW5nXCIpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS5zcGxpdCgvKFteXFxzXSspKFtcXHNdfCQpL2cpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjbGVuID0gdGhpcy5jYXRlZ29yaWVzLmxlbmd0aDsgYyA8IGNsZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB3ID0gMCwgd2xlbiA9IHdvcmRzLmxlbmd0aDsgdyA8IHdsZW47IHcrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vdGUgPSB3b3Jkc1t3XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlU3BsaXQgPSBlbW90ZS5zcGxpdChcIjpcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZU5hbWUgPSBlbW90ZVNwbGl0WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVtb3RlTW9kaWZpZXIgPSBlbW90ZVNwbGl0WzFdID8gZW1vdGVTcGxpdFsxXSA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW1vdGVPdmVycmlkZSA9IGVtb3RlTW9kaWZpZXIuc2xpY2UoMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlTmFtZS5sZW5ndGggPCA0IHx8IGJsYWNrbGlzdC5pbmNsdWRlcyhlbW90ZU5hbWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW9kaWZpZXJzLmluY2x1ZGVzKGVtb3RlTW9kaWZpZXIpIHx8ICFTZXR0aW5ncy5nZXQoXCJlbW90ZXNcIiwgXCJnZW5lcmFsXCIsIFwibW9kaWZpZXJzXCIpKSBlbW90ZU1vZGlmaWVyID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3ZlcnJpZGVzLmluY2x1ZGVzKGVtb3RlT3ZlcnJpZGUpKSBlbW90ZU92ZXJyaWRlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZW1vdGVNb2RpZmllciA9IGVtb3RlT3ZlcnJpZGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSB0aGlzLmNhdGVnb3JpZXNbY107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVPdmVycmlkZSA9PT0gXCJ0d2l0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFbW90ZXMuVHdpdGNoR2xvYmFsW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIlR3aXRjaEdsb2JhbFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEVtb3Rlcy5Ud2l0Y2hTdWJzY3JpYmVyW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIlR3aXRjaFN1YnNjcmliZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVtb3RlT3ZlcnJpZGUgPT09IFwic3Vic2NyaWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVtb3Rlcy5Ud2l0Y2hTdWJzY3JpYmVyW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIlR3aXRjaFN1YnNjcmliZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVtb3RlT3ZlcnJpZGUgPT09IFwiYnR0dlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVtb3Rlcy5CVFRWW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIkJUVFZcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVtb3RlT3ZlcnJpZGUgPT09IFwiZmZ6XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRW1vdGVzLkZyYW5rZXJGYWNlWltlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJGcmFua2VyRmFjZVpcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUVtb3Rlc1tjdXJyZW50XVtlbW90ZU5hbWVdKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBub2Rlc1tuXS5tYXRjaChuZXcgUmVnRXhwKGAoW1xcXFxzXXxeKSR7VXRpbGl0aWVzLmVzY2FwZShlbW90ZU1vZGlmaWVyID8gZW1vdGVOYW1lICsgXCI6XCIgKyBlbW90ZU1vZGlmaWVyIDogZW1vdGVOYW1lKX0oW1xcXFxzXXwkKWApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cykgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmUgPSBub2Rlc1tuXS5zdWJzdHJpbmcoMCwgcmVzdWx0cy5pbmRleCArIHJlc3VsdHNbMV0ubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc3QgPSBub2Rlc1tuXS5zdWJzdHJpbmcocmVzdWx0cy5pbmRleCArIHJlc3VsdHNbMF0ubGVuZ3RoIC0gcmVzdWx0c1syXS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXNbbl0gPSBwcmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZUNvbXBvbmVudCA9IERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRFbW90ZSwge25hbWU6IGVtb3RlTmFtZSwgdXJsOiBFbW90ZVVSTHNbY3VycmVudF0uZm9ybWF0KHtpZDogRW1vdGVzW2N1cnJlbnRdW2Vtb3RlTmFtZV19KSwgbW9kaWZpZXI6IGVtb3RlTW9kaWZpZXIsIGlzRmF2b3JpdGU6IHRoaXMuaXNGYXZvcml0ZShlbW90ZU5hbWUpfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UobiArIDEsIDAsIHBvc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKG4gKyAxLCAwLCBlbW90ZUNvbXBvbmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbmx5RW1vdGVzID0gbm9kZXMuZXZlcnkociA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihyKSA9PSBcInN0cmluZ1wiICYmIHIucmVwbGFjZSgvXFxzKi8sIFwiXCIpID09IFwiXCIpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHIudHlwZSAmJiByLnR5cGUubmFtZSA9PSBcIkJERW1vdGVcIikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoci5wcm9wcyAmJiByLnByb3BzLmNoaWxkcmVuICYmIHIucHJvcHMuY2hpbGRyZW4ucHJvcHMgJiYgci5wcm9wcy5jaGlsZHJlbi5wcm9wcy5lbW9qaU5hbWUpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvbmx5RW1vdGVzKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihub2RlKSAhPSBcIm9iamVjdFwiKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS50eXBlLm5hbWUgPT0gXCJCREVtb3RlXCIpIG5vZGUucHJvcHMuanVtYm9hYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLnByb3BzICYmIG5vZGUucHJvcHMuY2hpbGRyZW4gJiYgbm9kZS5wcm9wcy5jaGlsZHJlbi5wcm9wcyAmJiBub2RlLnByb3BzLmNoaWxkcmVuLnByb3BzLmVtb2ppTmFtZSkgbm9kZS5wcm9wcy5jaGlsZHJlbi5wcm9wcy5qdW1ib2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRCbGFja2xpc3QoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSBcIkJsYWNrbGlzdFwiO1xyXG4gICAgICAgICAgICBjb25zdCBleGlzdHMgPSBEYXRhU3RvcmUuZW1vdGVzRXhpc3QoY2F0ZWdvcnkpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9IGF3YWl0IHRoaXMuaXNDYWNoZVZhbGlkKGNhdGVnb3J5KTtcclxuICAgICAgICAgICAgY29uc3QgdXNlQ2FjaGUgPSAodmFsaWQpIHx8ICghdmFsaWQgJiYgZXhpc3RzICYmICF0aGlzLnNob3VsZERvd25sb2FkKTtcclxuICAgICAgICAgICAgY29uc3QgbGlzdCA9IHVzZUNhY2hlID8gRGF0YVN0b3JlLmdldEVtb3RlRGF0YShjYXRlZ29yeSkgOiBhd2FpdCB0aGlzLmRvd25sb2FkRW1vdGVzKGNhdGVnb3J5KTtcclxuICAgICAgICAgICAgYmxhY2tsaXN0LnB1c2goLi4ubGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgLy8gVE9ETzogTG9nIHRoaXNcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNDYWNoZVZhbGlkKGNhdGVnb3J5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBldGFnID0gRGF0YVN0b3JlLmdldENhY2hlSGFzaChcImVtb3Rlc1wiLCBjYXRlZ29yeSk7XHJcbiAgICAgICAgICAgIGlmICghZXRhZykgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICByZXF1ZXN0LmhlYWQoe3VybDogdGhpcy5nZXRSZW1vdGVGaWxlKGNhdGVnb3J5KSwgaGVhZGVyczoge1wiSWYtTm9uZS1NYXRjaFwiOiBldGFnfX0sIChlcnIsIHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcC5zdGF0dXNDb2RlID09IDMwNCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRFbW90ZURhdGEoY2F0ZWdvcmllcykge1xyXG4gICAgICAgIGlmICghY2F0ZWdvcmllcykgY2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcmllcztcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2F0ZWdvcmllcykpIGNhdGVnb3JpZXMgPSBbY2F0ZWdvcmllc107XHJcbiAgICAgICAgY29uc3QgYWxsID0gT2JqZWN0LmtleXMoRW1vdGVzKTtcclxuICAgICAgICBjYXRlZ29yaWVzID0gY2F0ZWdvcmllcy5tYXAoayA9PiBhbGwuZmluZChjID0+IGMudG9Mb3dlckNhc2UoKSA9PSBrLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBUb2FzdHMuc2hvdyhTdHJpbmdzLkVtb3Rlcy5sb2FkaW5nLCB7dHlwZTogXCJpbmZvXCJ9KTtcclxuICAgICAgICB0aGlzLmVtb3Rlc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RzID0gRGF0YVN0b3JlLmVtb3Rlc0V4aXN0KGNhdGVnb3J5KTtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBhd2FpdCB0aGlzLmlzQ2FjaGVWYWxpZChjYXRlZ29yeSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZUNhY2hlID0gKHZhbGlkKSB8fCAoIXZhbGlkICYmIGV4aXN0cyAmJiAhdGhpcy5zaG91bGREb3dubG9hZCk7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHVzZUNhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhgTG9hZGluZyAke2NhdGVnb3J5fSBlbW90ZXMgZnJvbSBsb2NhbCBjYWNoZS5gKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlZERhdGEgPSBEYXRhU3RvcmUuZ2V0RW1vdGVEYXRhKGNhdGVnb3J5KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0RhdGEgPSBPYmplY3Qua2V5cyhjYWNoZWREYXRhKS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhc0RhdGEpIGRhdGEgPSBjYWNoZWREYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZGF0YSkgZGF0YSA9IGF3YWl0IHRoaXMuZG93bmxvYWRFbW90ZXMoY2F0ZWdvcnkpO1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKEVtb3Rlc1tjYXRlZ29yeV0sIGRhdGEpO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTAwMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbW90ZXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIEV2ZW50cy5kaXNwYXRjaChcImVtb3Rlcy1sb2FkZWRcIik7XHJcbiAgICAgICAgVG9hc3RzLnNob3coU3RyaW5ncy5FbW90ZXMubG9hZGVkLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bmxvYWRFbW90ZURhdGEoY2F0ZWdvcmllcykge1xyXG4gICAgICAgIGlmICghY2F0ZWdvcmllcykgY2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcmllcztcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2F0ZWdvcmllcykpIGNhdGVnb3JpZXMgPSBbY2F0ZWdvcmllc107XHJcbiAgICAgICAgY29uc3QgYWxsID0gT2JqZWN0LmtleXMoRW1vdGVzKTtcclxuICAgICAgICBjYXRlZ29yaWVzID0gY2F0ZWdvcmllcy5tYXAoayA9PiBhbGwuZmluZChjID0+IGMudG9Mb3dlckNhc2UoKSA9PSBrLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcclxuICAgICAgICAgICAgZGVsZXRlIEVtb3Rlc1tjYXRlZ29yeV07XHJcbiAgICAgICAgICAgIEVtb3Rlc1tjYXRlZ29yeV0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRFbW90ZXMoY2F0ZWdvcnkpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlbW90ZUZpbGUoY2F0ZWdvcnkpO1xyXG4gICAgICAgIHRoaXMubG9nKGBEb3dubG9hZGluZyAke2NhdGVnb3J5fSBmcm9tICR7dXJsfWApO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7dXJsOiB1cmwsIHRpbWVvdXQ6IDEwMDAwLCBqc29uOiB0cnVlfTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHJlcXVlc3QuZ2V0KG9wdGlvbnMsIChlcnJvciwgcmVzcG9uc2UsIHBhcnNlZERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvciB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2t0cmFjZShgQ291bGQgbm90IGRvd25sb2FkICR7Y2F0ZWdvcnl9IGVtb3Rlcy5gLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gcGFyc2VkRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZS5sZW5ndGggPCA0IHx8IGJsYWNrbGlzdC5pbmNsdWRlcyhlbW90ZSkgfHwgIXBhcnNlZERhdGFbZW1vdGVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJzZWREYXRhW2Vtb3RlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlZERhdGFbZW1vdGVdID0gRW1vdGVVUkxzW2NhdGVnb3J5XS5mb3JtYXQoe2lkOiBwYXJzZWREYXRhW2Vtb3RlXX0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgRGF0YVN0b3JlLnNhdmVFbW90ZURhdGEoY2F0ZWdvcnksIHBhcnNlZERhdGEpO1xyXG4gICAgICAgICAgICAgICAgRGF0YVN0b3JlLnNldENhY2hlSGFzaChcImVtb3Rlc1wiLCBjYXRlZ29yeSwgcmVzcG9uc2UuaGVhZGVycy5ldGFnKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocGFyc2VkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhgRG93bmxvYWRlZCAke2NhdGVnb3J5fWApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldEVtb3RlcygpIHtcclxuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gT2JqZWN0LmtleXMoRW1vdGVzKTtcclxuICAgICAgICB0aGlzLnVubG9hZEVtb3RlRGF0YShjYXRlZ29yaWVzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdCBvZiBjYXRlZ29yaWVzKSBEYXRhU3RvcmUuaW52YWxpZGF0ZUNhY2hlKFwiZW1vdGVzXCIsIGNhdCk7XHJcbiAgICAgICAgdGhpcy5sb2FkRW1vdGVEYXRhKCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8gKGFzeW5jICgpID0+IHtcclxuLy8gICAgIGNvbnN0IGVtb3RlRGF0YSA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4vLyAgICAgICAgIGNvbnN0IHJlcSA9IHJlcXVpcmUoXCJyZXF1ZXN0XCIpO1xyXG4vLyAgICAgICAgIHJlcS5nZXQoe3VybDogXCJodHRwczovL3R3aXRjaGVtb3Rlcy5jb20vYXBpX2NhY2hlL3YzL2dsb2JhbC5qc29uXCIsIGpzb246IHRydWV9LCAoZXJyLCByZXNwLCBwYXJzZWREYXRhKSA9PiB7XHJcbi8vICAgICAgICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gcGFyc2VkRGF0YSkge1xyXG4vLyAgICAgICAgICAgICAgICAgaWYgKGVtb3RlLmxlbmd0aCA8IDQgfHwgd2luZG93LmJlbW90ZXMuaW5jbHVkZXMoZW1vdGUpKSB7XHJcbi8vICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnNlZERhdGFbZW1vdGVdO1xyXG4vLyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4vLyAgICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICAgICAgcGFyc2VkRGF0YVtlbW90ZV0gPSBwYXJzZWREYXRhW2Vtb3RlXS5pZDtcclxuLy8gICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICByZXNvbHZlKHBhcnNlZERhdGEpO1xyXG4vLyAgICAgICAgIH0pO1xyXG4vLyAgICAgfSk7XHJcbi8vICAgICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuLy8gICAgIGZzLndyaXRlRmlsZVN5bmMoXCJaOlxcXFxQcm9ncmFtbWluZ1xcXFxCZXR0ZXJEaXNjb3JkU3R1ZmZcXFxcQmV0dGVyRGlzY29yZEFwcFxcXFxkYXRhXFxcXGVtb3Rlc1xcXFxnbG9iYWwuanNvblwiLCBKU09OLnN0cmluZ2lmeShlbW90ZURhdGEpKTtcclxuLy8gICAgIHJldHVybiBlbW90ZURhdGE7XHJcbi8vIH0pKCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/emotes.js\n"); /***/ }), @@ -267,6 +267,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ }), +/***/ "./src/data/changelog.js": +/*!*******************************!*\ + !*** ./src/data/changelog.js ***! + \*******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n description: \"Don't be shocked, this modal is supposed to be here.\",\n changes: [{\n title: \"What's New?\",\n items: [\"**BandagedBD will now keep you updated with changelogs!** I will try to only show a changelog when there's more than a tiny or internal change.\", \"**Twitter (@BandagedBD)** I created a Twitter to try and provide support and such for those without access to the server. https://Twitter.com/BandagedBD\"]\n }, {\n title: \"Fixes\",\n type: \"fixed\",\n items: [\"**Colored Text** option should work again.\", \"**Emotes** should show up in chat.\", \"Fixed a bug where BBD attempted to patch the TabBar module incorrectly. (Thanks, DevilBro)\"]\n }, {\n title: \"Minor Stuff\",\n type: \"improved\",\n items: [\"**Colour->Color.** Swapped to using English-US spelling by default to be consistent, and to potentially be prepared for localization.\", \"**Versions simplified.** The BandagedBD version now integrates into Discord's at the bottom-left of settings instead of randomly being a part of the setting list.\"]\n }]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvY2hhbmdlbG9nLmpzP2Y4OWMiXSwibmFtZXMiOlsiZGVzY3JpcHRpb24iLCJjaGFuZ2VzIiwidGl0bGUiLCJpdGVtcyIsInR5cGUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQWU7QUFDWEEsYUFBVyxFQUFFLHNEQURGO0FBRVhDLFNBQU8sRUFBRSxDQUNMO0FBQ0lDLFNBQUssRUFBRSxhQURYO0FBRUlDLFNBQUssRUFBRSxDQUNILGlKQURHLEVBRUgsMEpBRkc7QUFGWCxHQURLLEVBUUw7QUFDSUQsU0FBSyxFQUFFLE9BRFg7QUFFSUUsUUFBSSxFQUFFLE9BRlY7QUFHSUQsU0FBSyxFQUFFLENBQ0gsNENBREcsRUFFSCxvQ0FGRyxFQUdILDRGQUhHO0FBSFgsR0FSSyxFQWlCTDtBQUNJRCxTQUFLLEVBQUUsYUFEWDtBQUVJRSxRQUFJLEVBQUUsVUFGVjtBQUdJRCxTQUFLLEVBQUUsQ0FDSCx1SUFERyxFQUVILG9LQUZHO0FBSFgsR0FqQks7QUFGRSxDQUFmIiwiZmlsZSI6Ii4vc3JjL2RhdGEvY2hhbmdlbG9nLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgZGVzY3JpcHRpb246IFwiRG9uJ3QgYmUgc2hvY2tlZCwgdGhpcyBtb2RhbCBpcyBzdXBwb3NlZCB0byBiZSBoZXJlLlwiLFxyXG4gICAgY2hhbmdlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiV2hhdCdzIE5ldz9cIixcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIFwiKipCYW5kYWdlZEJEIHdpbGwgbm93IGtlZXAgeW91IHVwZGF0ZWQgd2l0aCBjaGFuZ2Vsb2dzISoqIEkgd2lsbCB0cnkgdG8gb25seSBzaG93IGEgY2hhbmdlbG9nIHdoZW4gdGhlcmUncyBtb3JlIHRoYW4gYSB0aW55IG9yIGludGVybmFsIGNoYW5nZS5cIixcclxuICAgICAgICAgICAgICAgIFwiKipUd2l0dGVyIChAQmFuZGFnZWRCRCkqKiBJIGNyZWF0ZWQgYSBUd2l0dGVyIHRvIHRyeSBhbmQgcHJvdmlkZSBzdXBwb3J0IGFuZCBzdWNoIGZvciB0aG9zZSB3aXRob3V0IGFjY2VzcyB0byB0aGUgc2VydmVyLiBodHRwczovL1R3aXR0ZXIuY29tL0JhbmRhZ2VkQkRcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkZpeGVzXCIsXHJcbiAgICAgICAgICAgIHR5cGU6IFwiZml4ZWRcIixcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIFwiKipDb2xvcmVkIFRleHQqKiBvcHRpb24gc2hvdWxkIHdvcmsgYWdhaW4uXCIsXHJcbiAgICAgICAgICAgICAgICBcIioqRW1vdGVzKiogc2hvdWxkIHNob3cgdXAgaW4gY2hhdC5cIixcclxuICAgICAgICAgICAgICAgIFwiRml4ZWQgYSBidWcgd2hlcmUgQkJEIGF0dGVtcHRlZCB0byBwYXRjaCB0aGUgVGFiQmFyIG1vZHVsZSBpbmNvcnJlY3RseS4gKFRoYW5rcywgRGV2aWxCcm8pXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogXCJNaW5vciBTdHVmZlwiLFxyXG4gICAgICAgICAgICB0eXBlOiBcImltcHJvdmVkXCIsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICBcIioqQ29sb3VyLT5Db2xvci4qKiBTd2FwcGVkIHRvIHVzaW5nIEVuZ2xpc2gtVVMgc3BlbGxpbmcgYnkgZGVmYXVsdCB0byBiZSBjb25zaXN0ZW50LCBhbmQgdG8gcG90ZW50aWFsbHkgYmUgcHJlcGFyZWQgZm9yIGxvY2FsaXphdGlvbi5cIixcclxuICAgICAgICAgICAgICAgIFwiKipWZXJzaW9ucyBzaW1wbGlmaWVkLioqIFRoZSBCYW5kYWdlZEJEIHZlcnNpb24gbm93IGludGVncmF0ZXMgaW50byBEaXNjb3JkJ3MgYXQgdGhlIGJvdHRvbS1sZWZ0IG9mIHNldHRpbmdzIGluc3RlYWQgb2YgcmFuZG9tbHkgYmVpbmcgYSBwYXJ0IG9mIHRoZSBzZXR0aW5nIGxpc3QuXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/data/changelog.js\n"); + +/***/ }), + /***/ "./src/data/config.js": /*!****************************!*\ !*** ./src/data/config.js ***! @@ -283,11 +295,11 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ /*!**************************!*\ !*** ./src/data/data.js ***! \**************************/ -/*! exports provided: Config, EmoteConfig, SettingsConfig, Strings */ +/*! exports provided: Config, EmoteConfig, SettingsConfig, Strings, Changelog */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config */ \"./src/data/config.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Config\", function() { return _config__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _settings_emoteconfig__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./settings/emoteconfig */ \"./src/data/settings/emoteconfig.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteConfig\", function() { return _settings_emoteconfig__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _settings_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settings/config */ \"./src/data/settings/config.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SettingsConfig\", function() { return _settings_config__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./strings */ \"./src/data/strings.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Strings\", function() { return _strings__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvZGF0YS5qcz9kNWM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vc3JjL2RhdGEvZGF0YS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7ZGVmYXVsdCBhcyBDb25maWd9IGZyb20gXCIuL2NvbmZpZ1wiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRW1vdGVDb25maWd9IGZyb20gXCIuL3NldHRpbmdzL2Vtb3RlY29uZmlnXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBTZXR0aW5nc0NvbmZpZ30gZnJvbSBcIi4vc2V0dGluZ3MvY29uZmlnXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBTdHJpbmdzfSBmcm9tIFwiLi9zdHJpbmdzXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/data/data.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config */ \"./src/data/config.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Config\", function() { return _config__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _settings_emoteconfig__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./settings/emoteconfig */ \"./src/data/settings/emoteconfig.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteConfig\", function() { return _settings_emoteconfig__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _settings_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settings/config */ \"./src/data/settings/config.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SettingsConfig\", function() { return _settings_config__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./strings */ \"./src/data/strings.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Strings\", function() { return _strings__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _changelog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./changelog */ \"./src/data/changelog.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Changelog\", function() { return _changelog__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvZGF0YS5qcz9kNWM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9zcmMvZGF0YS9kYXRhLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtkZWZhdWx0IGFzIENvbmZpZ30gZnJvbSBcIi4vY29uZmlnXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBFbW90ZUNvbmZpZ30gZnJvbSBcIi4vc2V0dGluZ3MvZW1vdGVjb25maWdcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFNldHRpbmdzQ29uZmlnfSBmcm9tIFwiLi9zZXR0aW5ncy9jb25maWdcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFN0cmluZ3N9IGZyb20gXCIuL3N0cmluZ3NcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIENoYW5nZWxvZ30gZnJvbSBcIi4vY2hhbmdlbG9nXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/data/data.js\n"); /***/ }), @@ -347,7 +359,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonManager; });\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../structs/addonerror */ \"./src/structs/addonerror.js\");\n/* harmony import */ var _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../structs/metaerror */ \"./src/structs/metaerror.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./strings */ \"./src/modules/strings.js\");\n/* harmony import */ var _ui_misc_addoneditor__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../ui/misc/addoneditor */ \"./src/ui/misc/addoneditor.jsx\");\n/* harmony import */ var _ui_floating_container__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../ui/floating/container */ \"./src/ui/floating/container.jsx\");\n\n\n\n\n\n\n\n\n\n\n\n\nconst React = _discordmodules__WEBPACK_IMPORTED_MODULE_8__[\"default\"].React;\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\nconst fs = __webpack_require__(/*! fs */ \"fs\");\n\nconst Module = __webpack_require__(/*! module */ \"module\").Module;\n\nModule.globalPaths.push(path.resolve(__webpack_require__(/*! electron */ \"electron\").remote.app.getAppPath(), \"node_modules\"));\nconst splitRegex = /[^\\S\\r\\n]*?\\r?\\n[^\\S\\r\\n]*?\\*[^\\S\\r\\n]?/;\nconst escapedAtRegex = /^\\\\@/;\n\nconst stripBOM = function (fileContent) {\n if (fileContent.charCodeAt(0) === 0xFEFF) {\n fileContent = fileContent.slice(1);\n }\n\n return fileContent;\n};\n\nclass AddonManager {\n get name() {\n return \"\";\n }\n\n get moduleExtension() {\n return \"\";\n }\n\n get extension() {\n return \"\";\n }\n\n get addonFolder() {\n return \"\";\n }\n\n get language() {\n return \"\";\n }\n\n get prefix() {\n return \"addon\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"addons\";\n }\n\n get id() {\n return \"autoReload\";\n }\n\n emit(event, ...args) {\n return _emitter__WEBPACK_IMPORTED_MODULE_3__[\"default\"].emit(`${this.prefix}-${event}`, ...args);\n }\n\n constructor() {\n this.timeCache = {};\n this.addonList = [];\n this.state = {};\n }\n\n initialize() {\n this.originalRequire = Module._extensions[this.moduleExtension];\n Module._extensions[this.moduleExtension] = this.getAddonRequire();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].on(this.collection, this.category, this.id, enabled => {\n if (enabled) this.watchAddons();else this.unwatchAddons();\n });\n return this.loadAllAddons();\n } // Subclasses should overload this and modify the addon object as needed to fully load it\n\n\n initializeAddon() {\n return;\n } // Subclasses should overload this and modify the fileContent as needed to require() the file\n\n\n getFileModification(module, fileContent) {\n return fileContent;\n }\n\n startAddon() {\n return;\n }\n\n stopAddon() {\n return;\n }\n\n loadState() {\n const saved = _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getData(`${this.prefix}s`);\n if (!saved) return;\n Object.assign(this.state, saved);\n }\n\n saveState() {\n _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].setData(`${this.prefix}s`, this.state);\n }\n\n watchAddons() {\n if (this.watcher) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(this.name, `Already watching ${this.prefix} addons.`);\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(this.name, `Starting to watch ${this.prefix} addons.`);\n this.watcher = fs.watch(this.addonFolder, {\n persistent: false\n }, async (eventType, filename) => {\n if (!eventType || !filename || !filename.endsWith(this.extension)) return;\n await new Promise(r => setTimeout(r, 50));\n\n try {\n fs.statSync(path.resolve(this.addonFolder, filename));\n } catch (err) {\n if (err.code !== \"ENOENT\") return;\n delete this.timeCache[filename];\n this.unloadAddon(filename, true);\n }\n\n if (!fs.statSync(path.resolve(this.addonFolder, filename)).isFile()) return;\n const stats = fs.statSync(path.resolve(this.addonFolder, filename));\n if (!stats || !stats.mtime || !stats.mtime.getTime()) return;\n if (typeof stats.mtime.getTime() !== \"number\") return;\n if (this.timeCache[filename] == stats.mtime.getTime()) return;\n this.timeCache[filename] = stats.mtime.getTime();\n if (eventType == \"rename\") this.loadAddon(filename, true);\n if (eventType == \"change\") this.reloadAddon(filename, true);\n });\n }\n\n unwatchAddons() {\n if (!this.watcher) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(this.name, `Was not watching ${this.prefix} addons.`);\n this.watcher.close();\n delete this.watcher;\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(this.name, `No longer watching ${this.prefix} addons.`);\n }\n\n extractMeta(fileContent) {\n const firstLine = fileContent.split(\"\\n\")[0];\n const hasOldMeta = firstLine.includes(\"//META\");\n if (hasOldMeta) return this.parseOldMeta(fileContent);\n const hasNewMeta = firstLine.includes(\"/**\");\n if (hasNewMeta) return this.parseNewMeta(fileContent);\n throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META was not found.\");\n }\n\n parseOldMeta(fileContent) {\n const meta = fileContent.split(\"\\n\")[0];\n const metaData = meta.substring(meta.lastIndexOf(\"//META\") + 6, meta.lastIndexOf(\"*//\"));\n const parsed = _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testJSON(metaData);\n if (!parsed) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META could not be parsed.\");\n if (!parsed.name) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META missing name data.\");\n return parsed;\n }\n\n parseNewMeta(fileContent) {\n const block = fileContent.split(\"/**\", 2)[1].split(\"*/\", 1)[0];\n const out = {};\n let field = \"\";\n let accum = \"\";\n\n for (const line of block.split(splitRegex)) {\n if (line.length === 0) continue;\n\n if (line.charAt(0) === \"@\" && line.charAt(1) !== \" \") {\n out[field] = accum;\n const l = line.indexOf(\" \");\n field = line.substr(1, l - 1);\n accum = line.substr(l + 1);\n } else {\n accum += \" \" + line.replace(\"\\\\n\", \"\\n\").replace(escapedAtRegex, \"@\");\n }\n }\n\n out[field] = accum.trim();\n delete out[\"\"];\n return out;\n }\n\n getAddonRequire() {\n const self = this; // const baseFolder = this.addonFolder;\n\n const originalRequire = this.originalRequire;\n return function (module, filename) {\n const possiblePath = path.resolve(self.addonFolder, path.basename(filename));\n if (!fs.existsSync(possiblePath) || filename !== fs.realpathSync(possiblePath)) return Reflect.apply(originalRequire, this, arguments);\n let fileContent = fs.readFileSync(filename, \"utf8\");\n fileContent = stripBOM(fileContent);\n const stats = fs.statSync(filename);\n const meta = self.extractMeta(fileContent);\n meta.id = meta.name;\n meta.filename = path.basename(filename);\n meta.added = stats.atimeMs;\n meta.modified = stats.mtimeMs;\n meta.size = stats.size;\n fileContent = self.getFileModification(module, fileContent, meta);\n\n module._compile(fileContent, filename);\n };\n } // Subclasses should use the return (if not AddonError) and push to this.addonList\n\n\n loadAddon(filename, shouldToast = false) {\n if (typeof filename === \"undefined\") return;\n\n try {\n require(path.resolve(this.addonFolder, filename));\n } catch (error) {\n return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](filename, filename, \"Could not be compiled.\", {\n message: error.message,\n stack: error.stack\n });\n }\n\n const addon = require(path.resolve(this.addonFolder, filename));\n\n if (this.addonList.find(c => c.id == addon.id)) return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](addon.name, filename, `There is already a plugin with name ${addon.name}`);\n const error = this.initializeAddon(addon);\n if (error) return error;\n this.addonList.push(addon);\n if (shouldToast) _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].success(`${addon.name} v${addon.version} was loaded.`);\n this.emit(\"loaded\", addon.id);\n if (!this.state[addon.id]) return this.state[addon.id] = false;\n return this.startAddon(addon);\n }\n\n unloadAddon(idOrFileOrAddon, shouldToast = true, isReload = false) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n if (!addon) return false;\n if (this.state[addon.id]) isReload ? this.stopAddon(addon) : this.disableAddon(addon);\n delete require.cache[require.resolve(path.resolve(this.addonFolder, addon.filename))];\n this.addonList.splice(this.addonList.indexOf(addon), 1);\n this.emit(\"unloaded\", addon.id);\n if (shouldToast) _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].success(`${addon.name} was unloaded.`);\n return true;\n }\n\n reloadAddon(idOrFileOrAddon, shouldToast = true) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n const didUnload = this.unloadAddon(addon, shouldToast, true);\n if (!didUnload) return didUnload;\n return this.loadAddon(addon.filename, shouldToast);\n }\n\n isLoaded(idOrFile) {\n const addon = this.addonList.find(c => c.id == idOrFile || c.filename == idOrFile);\n if (!addon) return false;\n return true;\n }\n\n isEnabled(idOrFile) {\n const addon = this.addonList.find(c => c.id == idOrFile || c.filename == idOrFile);\n if (!addon) return false;\n return this.state[addon.id];\n }\n\n enableAddon(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n if (this.state[addon.id]) return;\n this.state[addon.id] = true;\n this.startAddon(addon);\n this.saveState();\n }\n\n disableAddon(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n if (!this.state[addon.id]) return;\n this.state[addon.id] = false;\n this.stopAddon(addon);\n this.saveState();\n }\n\n toggleAddon(id) {\n if (this.state[id]) this.disableAddon(id);else this.enableAddon(id);\n }\n\n loadNewAddons() {\n const files = fs.readdirSync(this.addonFolder);\n const removed = this.addonList.filter(t => !files.includes(t.filename)).map(c => c.id);\n const added = files.filter(f => !this.addonList.find(t => t.filename == f) && f.endsWith(this.extension) && fs.statSync(path.resolve(this.addonFolder, f)).isFile());\n return {\n added,\n removed\n };\n }\n\n updateList() {\n const results = this.loadNewAddons();\n\n for (const filename of results.added) this.loadAddon(filename);\n\n for (const name of results.removed) this.unloadAddon(name);\n }\n\n loadAllAddons() {\n this.loadState();\n const errors = [];\n const files = fs.readdirSync(this.addonFolder);\n\n for (const filename of files) {\n if (!fs.statSync(path.resolve(this.addonFolder, filename)).isFile() || !filename.endsWith(this.extension)) continue;\n const addon = this.loadAddon(filename, false);\n if (addon instanceof _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"]) errors.push(addon);\n }\n\n this.saveState();\n if (_settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get(this.collection, this.category, this.id)) this.watchAddons();\n return errors;\n }\n\n deleteAddon(idOrFileOrAddon) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n return fs.unlinkSync(path.resolve(this.addonFolder, addon.filename));\n }\n\n saveAddon(idOrFileOrAddon, content) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n return fs.writeFileSync(path.resolve(this.addonFolder, addon.filename), content);\n }\n\n editAddon(idOrFileOrAddon, system) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n const fullPath = path.resolve(this.addonFolder, addon.filename);\n if (typeof system == \"undefined\") system = _settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get(\"settings\", \"addons\", \"editAction\") == \"system\";\n if (system) return __webpack_require__(/*! electron */ \"electron\").shell.openItem(`${fullPath}`);\n return this.openDetached(addon);\n }\n\n openDetached(addon) {\n const fullPath = path.resolve(this.addonFolder, addon.filename);\n const content = fs.readFileSync(fullPath).toString();\n const editorRef = React.createRef();\n const editor = React.createElement(_ui_misc_addoneditor__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"bd-floating-editor-\" + addon.name,\n ref: editorRef,\n content: content,\n save: this.saveAddon.bind(this, addon),\n openNative: this.editAddon.bind(this, addon, true),\n language: this.language\n });\n _ui_floating_container__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open({\n onClose: () => {\n this.isDetached = false;\n },\n onResize: () => {\n if (!editorRef || !editorRef.current || !editorRef.current.resize) return;\n editorRef.current.resize();\n },\n title: addon.name,\n id: content.id,\n className: \"floating-addon-window\",\n height: 470,\n width: 410,\n center: true,\n resizable: true,\n children: editor,\n confirmClose: () => {\n if (!editorRef || !editorRef.current) return false;\n return editorRef.current.hasUnsavedChanges;\n },\n confirmationText: _strings__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Addons.confirmationText.format({\n name: addon.name\n })\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvYWRkb25tYW5hZ2VyLmpzP2NlYTkiXSwibmFtZXMiOlsiUmVhY3QiLCJEaXNjb3JkTW9kdWxlcyIsInBhdGgiLCJyZXF1aXJlIiwiZnMiLCJNb2R1bGUiLCJnbG9iYWxQYXRocyIsInB1c2giLCJyZXNvbHZlIiwicmVtb3RlIiwiYXBwIiwiZ2V0QXBwUGF0aCIsInNwbGl0UmVnZXgiLCJlc2NhcGVkQXRSZWdleCIsInN0cmlwQk9NIiwiZmlsZUNvbnRlbnQiLCJjaGFyQ29kZUF0Iiwic2xpY2UiLCJBZGRvbk1hbmFnZXIiLCJuYW1lIiwibW9kdWxlRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwiYWRkb25Gb2xkZXIiLCJsYW5ndWFnZSIsInByZWZpeCIsImNvbGxlY3Rpb24iLCJjYXRlZ29yeSIsImlkIiwiZW1pdCIsImV2ZW50IiwiYXJncyIsIkV2ZW50cyIsImNvbnN0cnVjdG9yIiwidGltZUNhY2hlIiwiYWRkb25MaXN0Iiwic3RhdGUiLCJpbml0aWFsaXplIiwib3JpZ2luYWxSZXF1aXJlIiwiX2V4dGVuc2lvbnMiLCJnZXRBZGRvblJlcXVpcmUiLCJTZXR0aW5ncyIsIm9uIiwiZW5hYmxlZCIsIndhdGNoQWRkb25zIiwidW53YXRjaEFkZG9ucyIsImxvYWRBbGxBZGRvbnMiLCJpbml0aWFsaXplQWRkb24iLCJnZXRGaWxlTW9kaWZpY2F0aW9uIiwibW9kdWxlIiwic3RhcnRBZGRvbiIsInN0b3BBZGRvbiIsImxvYWRTdGF0ZSIsInNhdmVkIiwiRGF0YVN0b3JlIiwiZ2V0RGF0YSIsIk9iamVjdCIsImFzc2lnbiIsInNhdmVTdGF0ZSIsInNldERhdGEiLCJ3YXRjaGVyIiwiTG9nZ2VyIiwiZXJyb3IiLCJsb2ciLCJ3YXRjaCIsInBlcnNpc3RlbnQiLCJldmVudFR5cGUiLCJmaWxlbmFtZSIsImVuZHNXaXRoIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwidW5sb2FkQWRkb24iLCJpc0ZpbGUiLCJzdGF0cyIsIm10aW1lIiwiZ2V0VGltZSIsImxvYWRBZGRvbiIsInJlbG9hZEFkZG9uIiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsInNwbGl0IiwiaGFzT2xkTWV0YSIsImluY2x1ZGVzIiwicGFyc2VPbGRNZXRhIiwiaGFzTmV3TWV0YSIsInBhcnNlTmV3TWV0YSIsIk1ldGFFcnJvciIsIm1ldGEiLCJtZXRhRGF0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicGFyc2VkIiwiVXRpbGl0aWVzIiwidGVzdEpTT04iLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwibGVuZ3RoIiwiY2hhckF0IiwibCIsImluZGV4T2YiLCJzdWJzdHIiLCJyZXBsYWNlIiwidHJpbSIsInNlbGYiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFscGF0aFN5bmMiLCJSZWZsZWN0IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJyZWFkRmlsZVN5bmMiLCJhZGRlZCIsImF0aW1lTXMiLCJtb2RpZmllZCIsIm10aW1lTXMiLCJzaXplIiwiX2NvbXBpbGUiLCJzaG91bGRUb2FzdCIsIl9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fIiwiQWRkb25FcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsImFkZG9uIiwiZmluZCIsImMiLCJUb2FzdHMiLCJzdWNjZXNzIiwidmVyc2lvbiIsImlkT3JGaWxlT3JBZGRvbiIsImlzUmVsb2FkIiwiZGlzYWJsZUFkZG9uIiwiY2FjaGUiLCJzcGxpY2UiLCJkaWRVbmxvYWQiLCJpc0xvYWRlZCIsImlkT3JGaWxlIiwiaXNFbmFibGVkIiwiZW5hYmxlQWRkb24iLCJpZE9yQWRkb24iLCJwIiwidG9nZ2xlQWRkb24iLCJsb2FkTmV3QWRkb25zIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsInJlbW92ZWQiLCJmaWx0ZXIiLCJ0IiwibWFwIiwiZiIsInVwZGF0ZUxpc3QiLCJyZXN1bHRzIiwiZXJyb3JzIiwiZ2V0IiwiZGVsZXRlQWRkb24iLCJ1bmxpbmtTeW5jIiwic2F2ZUFkZG9uIiwiY29udGVudCIsIndyaXRlRmlsZVN5bmMiLCJlZGl0QWRkb24iLCJzeXN0ZW0iLCJmdWxsUGF0aCIsInNoZWxsIiwib3Blbkl0ZW0iLCJvcGVuRGV0YWNoZWQiLCJ0b1N0cmluZyIsImVkaXRvclJlZiIsImNyZWF0ZVJlZiIsImVkaXRvciIsImNyZWF0ZUVsZW1lbnQiLCJBZGRvbkVkaXRvciIsInJlZiIsInNhdmUiLCJiaW5kIiwib3Blbk5hdGl2ZSIsIkZsb2F0aW5nV2luZG93Q29udGFpbmVyIiwib3BlbiIsIm9uQ2xvc2UiLCJpc0RldGFjaGVkIiwib25SZXNpemUiLCJjdXJyZW50IiwicmVzaXplIiwidGl0bGUiLCJjbGFzc05hbWUiLCJoZWlnaHQiLCJ3aWR0aCIsImNlbnRlciIsInJlc2l6YWJsZSIsImNoaWxkcmVuIiwiY29uZmlybUNsb3NlIiwiaGFzVW5zYXZlZENoYW5nZXMiLCJjb25maXJtYXRpb25UZXh0IiwiU3RyaW5ncyIsIkFkZG9ucyIsImZvcm1hdCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBLE1BQU1BLEtBQUssR0FBR0MsdURBQWMsQ0FBQ0QsS0FBN0I7O0FBRUEsTUFBTUUsSUFBSSxHQUFHQyxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUNBLE1BQU1DLEVBQUUsR0FBR0QsbUJBQU8sQ0FBQyxjQUFELENBQWxCOztBQUNBLE1BQU1FLE1BQU0sR0FBR0YsbUJBQU8sQ0FBQyxzQkFBRCxDQUFQLENBQWtCRSxNQUFqQzs7QUFDQUEsTUFBTSxDQUFDQyxXQUFQLENBQW1CQyxJQUFuQixDQUF3QkwsSUFBSSxDQUFDTSxPQUFMLENBQWFMLG1CQUFPLENBQUMsMEJBQUQsQ0FB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LE9BUHdCO0FBUXpCQyxXQUFLLEVBQUUzRCxLQUFLLENBQUMvRyxJQVJZO0FBU3pCUSxRQUFFLEVBQUV5SSxPQUFPLENBQUN6SSxFQVRhO0FBVXpCbUssZUFBUyxFQUFFLHVCQVZjO0FBV3pCQyxZQUFNLEVBQUUsR0FYaUI7QUFZekJDLFdBQUssRUFBRSxHQVprQjtBQWF6QkMsWUFBTSxFQUFFLElBYmlCO0FBY3pCQyxlQUFTLEVBQUUsSUFkYztBQWV6QkMsY0FBUSxFQUFFcEIsTUFmZTtBQWdCekJxQixrQkFBWSxFQUFFLE1BQU07QUFDaEIsWUFBSSxDQUFDdkIsU0FBRCxJQUFjLENBQUNBLFNBQVMsQ0FBQ2MsT0FBN0IsRUFBc0MsT0FBTyxLQUFQO0FBQ3RDLGVBQU9kLFNBQVMsQ0FBQ2MsT0FBVixDQUFrQlUsaUJBQXpCO0FBQ0gsT0FuQndCO0FBb0J6QkMsc0JBQWdCLEVBQUVDLGdEQUFPLENBQUNDLE1BQVIsQ0FBZUYsZ0JBQWYsQ0FBZ0NHLE1BQWhDLENBQXVDO0FBQUN0TCxZQUFJLEVBQUUrRyxLQUFLLENBQUMvRztBQUFiLE9BQXZDO0FBcEJPLEtBQTdCO0FBc0JIOztBQXBTNkIiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9hZGRvbm1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuL2xvZ2dlclwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3NtYW5hZ2VyXCI7XHJcbmltcG9ydCBFdmVudHMgZnJvbSBcIi4vZW1pdHRlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFzdG9yZVwiO1xyXG5pbXBvcnQgQWRkb25FcnJvciBmcm9tIFwiLi4vc3RydWN0cy9hZGRvbmVycm9yXCI7XHJcbmltcG9ydCBNZXRhRXJyb3IgZnJvbSBcIi4uL3N0cnVjdHMvbWV0YWVycm9yXCI7XHJcbmltcG9ydCBUb2FzdHMgZnJvbSBcIi4uL3VpL3RvYXN0c1wiO1xyXG5pbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIi4vZGlzY29yZG1vZHVsZXNcIjtcclxuaW1wb3J0IFN0cmluZ3MgZnJvbSBcIi4vc3RyaW5nc1wiO1xyXG5cclxuaW1wb3J0IEFkZG9uRWRpdG9yIGZyb20gXCIuLi91aS9taXNjL2FkZG9uZWRpdG9yXCI7XHJcbmltcG9ydCBGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciBmcm9tIFwiLi4vdWkvZmxvYXRpbmcvY29udGFpbmVyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IERpc2NvcmRNb2R1bGVzLlJlYWN0O1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgTW9kdWxlID0gcmVxdWlyZShcIm1vZHVsZVwiKS5Nb2R1bGU7XHJcbk1vZHVsZS5nbG9iYWxQYXRocy5wdXNoKHBhdGgucmVzb2x2ZShyZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcC5nZXRBcHBQYXRoKCksIFwibm9kZV9tb2R1bGVzXCIpKTtcclxuXHJcbmNvbnN0IHNwbGl0UmVnZXggPSAvW15cXFNcXHJcXG5dKj9cXHI/XFxuW15cXFNcXHJcXG5dKj9cXCpbXlxcU1xcclxcbl0/LztcclxuY29uc3QgZXNjYXBlZEF0UmVnZXggPSAvXlxcXFxALztcclxuXHJcbmNvbnN0IHN0cmlwQk9NID0gZnVuY3Rpb24oZmlsZUNvbnRlbnQpIHtcclxuICAgIGlmIChmaWxlQ29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcclxuICAgICAgICBmaWxlQ29udGVudCA9IGZpbGVDb250ZW50LnNsaWNlKDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVDb250ZW50O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWRkb25NYW5hZ2VyIHtcclxuXHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICBnZXQgbW9kdWxlRXh0ZW5zaW9uKCkge3JldHVybiBcIlwiO31cclxuICAgIGdldCBleHRlbnNpb24oKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgZ2V0IGFkZG9uRm9sZGVyKCkge3JldHVybiBcIlwiO31cclxuICAgIGdldCBsYW5ndWFnZSgpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICBnZXQgcHJlZml4KCkge3JldHVybiBcImFkZG9uXCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwic2V0dGluZ3NcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiYWRkb25zXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcImF1dG9SZWxvYWRcIjt9XHJcbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7cmV0dXJuIEV2ZW50cy5lbWl0KGAke3RoaXMucHJlZml4fS0ke2V2ZW50fWAsIC4uLmFyZ3MpO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnRpbWVDYWNoZSA9IHt9O1xyXG4gICAgICAgIHRoaXMuYWRkb25MaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbFJlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbdGhpcy5tb2R1bGVFeHRlbnNpb25dO1xyXG4gICAgICAgIE1vZHVsZS5fZXh0ZW5zaW9uc1t0aGlzLm1vZHVsZUV4dGVuc2lvbl0gPSB0aGlzLmdldEFkZG9uUmVxdWlyZSgpO1xyXG4gICAgICAgIFNldHRpbmdzLm9uKHRoaXMuY29sbGVjdGlvbiwgdGhpcy5jYXRlZ29yeSwgdGhpcy5pZCwgKGVuYWJsZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHRoaXMud2F0Y2hBZGRvbnMoKTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnVud2F0Y2hBZGRvbnMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQWxsQWRkb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3ViY2xhc3NlcyBzaG91bGQgb3ZlcmxvYWQgdGhpcyBhbmQgbW9kaWZ5IHRoZSBhZGRvbiBvYmplY3QgYXMgbmVlZGVkIHRvIGZ1bGx5IGxvYWQgaXRcclxuICAgIGluaXRpYWxpemVBZGRvbigpIHtyZXR1cm47fVxyXG5cclxuICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJsb2FkIHRoaXMgYW5kIG1vZGlmeSB0aGUgZmlsZUNvbnRlbnQgYXMgbmVlZGVkIHRvIHJlcXVpcmUoKSB0aGUgZmlsZVxyXG4gICAgZ2V0RmlsZU1vZGlmaWNhdGlvbihtb2R1bGUsIGZpbGVDb250ZW50KSB7cmV0dXJuIGZpbGVDb250ZW50O31cclxuXHJcbiAgICBzdGFydEFkZG9uKCkge3JldHVybjt9XHJcbiAgICBzdG9wQWRkb24oKSB7cmV0dXJuO31cclxuXHJcbiAgICBsb2FkU3RhdGUoKSB7XHJcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0RGF0YShgJHt0aGlzLnByZWZpeH1zYCk7XHJcbiAgICAgICAgaWYgKCFzYXZlZCkgcmV0dXJuO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5zdGF0ZSwgc2F2ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVTdGF0ZSgpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0RGF0YShgJHt0aGlzLnByZWZpeH1zYCwgdGhpcy5zdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgd2F0Y2hBZGRvbnMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlcikgcmV0dXJuIExvZ2dlci5lcnJvcih0aGlzLm5hbWUsIGBBbHJlYWR5IHdhdGNoaW5nICR7dGhpcy5wcmVmaXh9IGFkZG9ucy5gKTtcclxuICAgICAgICBMb2dnZXIubG9nKHRoaXMubmFtZSwgYFN0YXJ0aW5nIHRvIHdhdGNoICR7dGhpcy5wcmVmaXh9IGFkZG9ucy5gKTtcclxuICAgICAgICB0aGlzLndhdGNoZXIgPSBmcy53YXRjaCh0aGlzLmFkZG9uRm9sZGVyLCB7cGVyc2lzdGVudDogZmFsc2V9LCBhc3luYyAoZXZlbnRUeXBlLCBmaWxlbmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50VHlwZSB8fCAhZmlsZW5hbWUgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNTApKTtcclxuICAgICAgICAgICAgdHJ5IHtmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5hZGRvbkZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFTk9FTlRcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXTtcclxuICAgICAgICAgICAgICAgIHRoaXMudW5sb2FkQWRkb24oZmlsZW5hbWUsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5hZGRvbkZvbGRlciwgZmlsZW5hbWUpKTtcclxuICAgICAgICAgICAgaWYgKCFzdGF0cyB8fCAhc3RhdHMubXRpbWUgfHwgIXN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHN0YXRzLm10aW1lLmdldFRpbWUoKSkgIT09IFwibnVtYmVyXCIpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9PSBzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID0gc3RhdHMubXRpbWUuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwicmVuYW1lXCIpIHRoaXMubG9hZEFkZG9uKGZpbGVuYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcImNoYW5nZVwiKSB0aGlzLnJlbG9hZEFkZG9uKGZpbGVuYW1lLCB0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bndhdGNoQWRkb25zKCkge1xyXG4gICAgICAgIGlmICghdGhpcy53YXRjaGVyKSByZXR1cm4gTG9nZ2VyLmVycm9yKHRoaXMubmFtZSwgYFdhcyBub3Qgd2F0Y2hpbmcgJHt0aGlzLnByZWZpeH0gYWRkb25zLmApO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlci5jbG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLndhdGNoZXI7XHJcbiAgICAgICAgTG9nZ2VyLmxvZyh0aGlzLm5hbWUsIGBObyBsb25nZXIgd2F0Y2hpbmcgJHt0aGlzLnByZWZpeH0gYWRkb25zLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dHJhY3RNZXRhKGZpbGVDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gZmlsZUNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgaGFzT2xkTWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8vTUVUQVwiKTtcclxuICAgICAgICBpZiAoaGFzT2xkTWV0YSkgcmV0dXJuIHRoaXMucGFyc2VPbGRNZXRhKGZpbGVDb250ZW50KTtcclxuICAgICAgICBjb25zdCBoYXNOZXdNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLyoqXCIpO1xyXG4gICAgICAgIGlmIChoYXNOZXdNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU5ld01ldGEoZmlsZUNvbnRlbnQpO1xyXG4gICAgICAgIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIHdhcyBub3QgZm91bmQuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlT2xkTWV0YShmaWxlQ29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IG1ldGEgPSBmaWxlQ29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCBtZXRhRGF0YSA9IG1ldGEuc3Vic3RyaW5nKG1ldGEubGFzdEluZGV4T2YoXCIvL01FVEFcIikgKyA2LCBtZXRhLmxhc3RJbmRleE9mKFwiKi8vXCIpKTtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBVdGlsaXRpZXMudGVzdEpTT04obWV0YURhdGEpO1xyXG4gICAgICAgIGlmICghcGFyc2VkKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBjb3VsZCBub3QgYmUgcGFyc2VkLlwiKTtcclxuICAgICAgICBpZiAoIXBhcnNlZC5uYW1lKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBtaXNzaW5nIG5hbWUgZGF0YS5cIik7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU5ld01ldGEoZmlsZUNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBibG9jayA9IGZpbGVDb250ZW50LnNwbGl0KFwiLyoqXCIsIDIpWzFdLnNwbGl0KFwiKi9cIiwgMSlbMF07XHJcbiAgICAgICAgY29uc3Qgb3V0ID0ge307XHJcbiAgICAgICAgbGV0IGZpZWxkID0gXCJcIjtcclxuICAgICAgICBsZXQgYWNjdW0gPSBcIlwiO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBibG9jay5zcGxpdChzcGxpdFJlZ2V4KSkge1xyXG4gICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAobGluZS5jaGFyQXQoMCkgPT09IFwiQFwiICYmIGxpbmUuY2hhckF0KDEpICE9PSBcIiBcIikge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbCA9IGxpbmUuaW5kZXhPZihcIiBcIik7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUuc3Vic3RyKDEsIGwgLSAxKTtcclxuICAgICAgICAgICAgICAgIGFjY3VtID0gbGluZS5zdWJzdHIobCArIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWNjdW0gKz0gXCIgXCIgKyBsaW5lLnJlcGxhY2UoXCJcXFxcblwiLCBcIlxcblwiKS5yZXBsYWNlKGVzY2FwZWRBdFJlZ2V4LCBcIkBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtLnRyaW0oKTtcclxuICAgICAgICBkZWxldGUgb3V0W1wiXCJdO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWRkb25SZXF1aXJlKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIGNvbnN0IGJhc2VGb2xkZXIgPSB0aGlzLmFkZG9uRm9sZGVyO1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVxdWlyZSA9IHRoaXMub3JpZ2luYWxSZXF1aXJlO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtb2R1bGUsIGZpbGVuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlUGF0aCA9IHBhdGgucmVzb2x2ZShzZWxmLmFkZG9uRm9sZGVyLCBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwb3NzaWJsZVBhdGgpIHx8IGZpbGVuYW1lICE9PSBmcy5yZWFscGF0aFN5bmMocG9zc2libGVQYXRoKSkgcmV0dXJuIFJlZmxlY3QuYXBwbHkob3JpZ2luYWxSZXF1aXJlLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICBsZXQgZmlsZUNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsIFwidXRmOFwiKTtcclxuICAgICAgICAgICAgZmlsZUNvbnRlbnQgPSBzdHJpcEJPTShmaWxlQ29udGVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhID0gc2VsZi5leHRyYWN0TWV0YShmaWxlQ29udGVudCk7XHJcbiAgICAgICAgICAgIG1ldGEuaWQgPSBtZXRhLm5hbWU7XHJcbiAgICAgICAgICAgIG1ldGEuZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgbWV0YS5hZGRlZCA9IHN0YXRzLmF0aW1lTXM7XHJcbiAgICAgICAgICAgIG1ldGEubW9kaWZpZWQgPSBzdGF0cy5tdGltZU1zO1xyXG4gICAgICAgICAgICBtZXRhLnNpemUgPSBzdGF0cy5zaXplO1xyXG4gICAgICAgICAgICBmaWxlQ29udGVudCA9IHNlbGYuZ2V0RmlsZU1vZGlmaWNhdGlvbihtb2R1bGUsIGZpbGVDb250ZW50LCBtZXRhKTtcclxuICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGZpbGVDb250ZW50LCBmaWxlbmFtZSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdWJjbGFzc2VzIHNob3VsZCB1c2UgdGhlIHJldHVybiAoaWYgbm90IEFkZG9uRXJyb3IpIGFuZCBwdXNoIHRvIHRoaXMuYWRkb25MaXN0XHJcbiAgICBsb2FkQWRkb24oZmlsZW5hbWUsIHNob3VsZFRvYXN0ID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xyXG4gICAgICAgIHRyeSB7X19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGZpbGVuYW1lKSk7fVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiBuZXcgQWRkb25FcnJvcihmaWxlbmFtZSwgZmlsZW5hbWUsIFwiQ291bGQgbm90IGJlIGNvbXBpbGVkLlwiLCB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfSk7fVxyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gX19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGFkZG9uLmlkKSkgcmV0dXJuIG5ldyBBZGRvbkVycm9yKGFkZG9uLm5hbWUsIGZpbGVuYW1lLCBgVGhlcmUgaXMgYWxyZWFkeSBhIHBsdWdpbiB3aXRoIG5hbWUgJHthZGRvbi5uYW1lfWApO1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5pbml0aWFsaXplQWRkb24oYWRkb24pO1xyXG4gICAgICAgIGlmIChlcnJvcikgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgIHRoaXMuYWRkb25MaXN0LnB1c2goYWRkb24pO1xyXG4gICAgICAgIGlmIChzaG91bGRUb2FzdCkgVG9hc3RzLnN1Y2Nlc3MoYCR7YWRkb24ubmFtZX0gdiR7YWRkb24udmVyc2lvbn0gd2FzIGxvYWRlZC5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoXCJsb2FkZWRcIiwgYWRkb24uaWQpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGVbYWRkb24uaWRdKSByZXR1cm4gdGhpcy5zdGF0ZVthZGRvbi5pZF0gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydEFkZG9uKGFkZG9uKTtcclxuICAgIH1cclxuXHJcbiAgICB1bmxvYWRBZGRvbihpZE9yRmlsZU9yQWRkb24sIHNob3VsZFRvYXN0ID0gdHJ1ZSwgaXNSZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JGaWxlT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlT3JBZGRvbiB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JBZGRvbikgOiBpZE9yRmlsZU9yQWRkb247XHJcbiAgICAgICAgaWYgKCFhZGRvbikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlW2FkZG9uLmlkXSkgaXNSZWxvYWQgPyB0aGlzLnN0b3BBZGRvbihhZGRvbikgOiB0aGlzLmRpc2FibGVBZGRvbihhZGRvbik7XHJcbiAgICAgICAgZGVsZXRlIF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLmNhY2hlW19fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLnJlc29sdmUocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGFkZG9uLmZpbGVuYW1lKSldO1xyXG4gICAgICAgIHRoaXMuYWRkb25MaXN0LnNwbGljZSh0aGlzLmFkZG9uTGlzdC5pbmRleE9mKGFkZG9uKSwgMSk7XHJcbiAgICAgICAgdGhpcy5lbWl0KFwidW5sb2FkZWRcIiwgYWRkb24uaWQpO1xyXG4gICAgICAgIGlmIChzaG91bGRUb2FzdCkgVG9hc3RzLnN1Y2Nlc3MoYCR7YWRkb24ubmFtZX0gd2FzIHVubG9hZGVkLmApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZEFkZG9uKGlkT3JGaWxlT3JBZGRvbiwgc2hvdWxkVG9hc3QgPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0eXBlb2YoaWRPckZpbGVPckFkZG9uKSA9PSBcInN0cmluZ1wiID8gdGhpcy5hZGRvbkxpc3QuZmluZChjID0+IGMuaWQgPT0gaWRPckZpbGVPckFkZG9uIHx8IGMuZmlsZW5hbWUgPT0gaWRPckZpbGVPckFkZG9uKSA6IGlkT3JGaWxlT3JBZGRvbjtcclxuICAgICAgICBjb25zdCBkaWRVbmxvYWQgPSB0aGlzLnVubG9hZEFkZG9uKGFkZG9uLCBzaG91bGRUb2FzdCwgdHJ1ZSk7XHJcbiAgICAgICAgaWYgKCFkaWRVbmxvYWQpIHJldHVybiBkaWRVbmxvYWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFkZG9uKGFkZG9uLmZpbGVuYW1lLCBzaG91bGRUb2FzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNMb2FkZWQoaWRPckZpbGUpIHtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlIHx8IGMuZmlsZW5hbWUgPT0gaWRPckZpbGUpO1xyXG4gICAgICAgIGlmICghYWRkb24pIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc0VuYWJsZWQoaWRPckZpbGUpIHtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlIHx8IGMuZmlsZW5hbWUgPT0gaWRPckZpbGUpO1xyXG4gICAgICAgIGlmICghYWRkb24pIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZVthZGRvbi5pZF07XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlQWRkb24oaWRPckFkZG9uKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0eXBlb2YoaWRPckFkZG9uKSA9PSBcInN0cmluZ1wiID8gdGhpcy5hZGRvbkxpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckFkZG9uKSA6IGlkT3JBZGRvbjtcclxuICAgICAgICBpZiAoIWFkZG9uKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbYWRkb24uaWRdKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdGF0ZVthZGRvbi5pZF0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhcnRBZGRvbihhZGRvbik7XHJcbiAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlQWRkb24oaWRPckFkZG9uKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0eXBlb2YoaWRPckFkZG9uKSA9PSBcInN0cmluZ1wiID8gdGhpcy5hZGRvbkxpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckFkZG9uKSA6IGlkT3JBZGRvbjtcclxuICAgICAgICBpZiAoIWFkZG9uKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2FkZG9uLmlkXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc3RhdGVbYWRkb24uaWRdID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdG9wQWRkb24oYWRkb24pO1xyXG4gICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlQWRkb24oaWQpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZVtpZF0pIHRoaXMuZGlzYWJsZUFkZG9uKGlkKTtcclxuICAgICAgICBlbHNlIHRoaXMuZW5hYmxlQWRkb24oaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWROZXdBZGRvbnMoKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyh0aGlzLmFkZG9uRm9sZGVyKTtcclxuICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5hZGRvbkxpc3QuZmlsdGVyKHQgPT4gIWZpbGVzLmluY2x1ZGVzKHQuZmlsZW5hbWUpKS5tYXAoYyA9PiBjLmlkKTtcclxuICAgICAgICBjb25zdCBhZGRlZCA9IGZpbGVzLmZpbHRlcihmID0+ICF0aGlzLmFkZG9uTGlzdC5maW5kKHQgPT4gdC5maWxlbmFtZSA9PSBmKSAmJiBmLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSAmJiBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5hZGRvbkZvbGRlciwgZikpLmlzRmlsZSgpKTtcclxuICAgICAgICByZXR1cm4ge2FkZGVkLCByZW1vdmVkfTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVMaXN0KCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmxvYWROZXdBZGRvbnMoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZEFkZG9uKGZpbGVuYW1lKTtcclxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0cy5yZW1vdmVkKSB0aGlzLnVubG9hZEFkZG9uKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRBbGxBZGRvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkU3RhdGUoKTtcclxuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHRoaXMuYWRkb25Gb2xkZXIpO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZpbGVzKSB7XHJcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5sb2FkQWRkb24oZmlsZW5hbWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKGFkZG9uIGluc3RhbmNlb2YgQWRkb25FcnJvcikgZXJyb3JzLnB1c2goYWRkb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcclxuICAgICAgICBpZiAoU2V0dGluZ3MuZ2V0KHRoaXMuY29sbGVjdGlvbiwgdGhpcy5jYXRlZ29yeSwgdGhpcy5pZCkpIHRoaXMud2F0Y2hBZGRvbnMoKTtcclxuICAgICAgICByZXR1cm4gZXJyb3JzO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUFkZG9uKGlkT3JGaWxlT3JBZGRvbikge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JGaWxlT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlT3JBZGRvbiB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JBZGRvbikgOiBpZE9yRmlsZU9yQWRkb247XHJcbiAgICAgICAgcmV0dXJuIGZzLnVubGlua1N5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGFkZG9uLmZpbGVuYW1lKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUFkZG9uKGlkT3JGaWxlT3JBZGRvbiwgY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JGaWxlT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlT3JBZGRvbiB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JBZGRvbikgOiBpZE9yRmlsZU9yQWRkb247XHJcbiAgICAgICAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGFkZG9uLmZpbGVuYW1lKSwgY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdEFkZG9uKGlkT3JGaWxlT3JBZGRvbiwgc3lzdGVtKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0eXBlb2YoaWRPckZpbGVPckFkZG9uKSA9PSBcInN0cmluZ1wiID8gdGhpcy5hZGRvbkxpc3QuZmluZChjID0+IGMuaWQgPT0gaWRPckZpbGVPckFkZG9uIHx8IGMuZmlsZW5hbWUgPT0gaWRPckZpbGVPckFkZG9uKSA6IGlkT3JGaWxlT3JBZGRvbjtcclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBhZGRvbi5maWxlbmFtZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZihzeXN0ZW0pID09IFwidW5kZWZpbmVkXCIpIHN5c3RlbSA9IFNldHRpbmdzLmdldChcInNldHRpbmdzXCIsIFwiYWRkb25zXCIsIFwiZWRpdEFjdGlvblwiKSA9PSBcInN5c3RlbVwiO1xyXG4gICAgICAgIGlmIChzeXN0ZW0pIHJldHVybiByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oYCR7ZnVsbFBhdGh9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkRldGFjaGVkKGFkZG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRGV0YWNoZWQoYWRkb24pIHtcclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBhZGRvbi5maWxlbmFtZSk7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmdWxsUGF0aCkudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgY29uc3QgZWRpdG9yUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcbiAgICAgICAgY29uc3QgZWRpdG9yID0gUmVhY3QuY3JlYXRlRWxlbWVudChBZGRvbkVkaXRvciwge1xyXG4gICAgICAgICAgICBpZDogXCJiZC1mbG9hdGluZy1lZGl0b3ItXCIgKyBhZGRvbi5uYW1lLFxyXG4gICAgICAgICAgICByZWY6IGVkaXRvclJlZixcclxuICAgICAgICAgICAgY29udGVudDogY29udGVudCxcclxuICAgICAgICAgICAgc2F2ZTogdGhpcy5zYXZlQWRkb24uYmluZCh0aGlzLCBhZGRvbiksXHJcbiAgICAgICAgICAgIG9wZW5OYXRpdmU6IHRoaXMuZWRpdEFkZG9uLmJpbmQodGhpcywgYWRkb24sIHRydWUpLFxyXG4gICAgICAgICAgICBsYW5ndWFnZTogdGhpcy5sYW5ndWFnZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBGbG9hdGluZ1dpbmRvd0NvbnRhaW5lci5vcGVuKHtcclxuICAgICAgICAgICAgb25DbG9zZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RldGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uUmVzaXplOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVkaXRvclJlZiB8fCAhZWRpdG9yUmVmLmN1cnJlbnQgfHwgIWVkaXRvclJlZi5jdXJyZW50LnJlc2l6ZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQucmVzaXplKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRpdGxlOiBhZGRvbi5uYW1lLFxyXG4gICAgICAgICAgICBpZDogY29udGVudC5pZCxcclxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImZsb2F0aW5nLWFkZG9uLXdpbmRvd1wiLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDQ3MCxcclxuICAgICAgICAgICAgd2lkdGg6IDQxMCxcclxuICAgICAgICAgICAgY2VudGVyOiB0cnVlLFxyXG4gICAgICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBlZGl0b3IsXHJcbiAgICAgICAgICAgIGNvbmZpcm1DbG9zZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlZGl0b3JSZWYgfHwgIWVkaXRvclJlZi5jdXJyZW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWRpdG9yUmVmLmN1cnJlbnQuaGFzVW5zYXZlZENoYW5nZXM7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbmZpcm1hdGlvblRleHQ6IFN0cmluZ3MuQWRkb25zLmNvbmZpcm1hdGlvblRleHQuZm9ybWF0KHtuYW1lOiBhZGRvbi5uYW1lfSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/addonmanager.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonManager; });\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../structs/addonerror */ \"./src/structs/addonerror.js\");\n/* harmony import */ var _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../structs/metaerror */ \"./src/structs/metaerror.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./strings */ \"./src/modules/strings.js\");\n/* harmony import */ var _ui_misc_addoneditor__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../ui/misc/addoneditor */ \"./src/ui/misc/addoneditor.jsx\");\n/* harmony import */ var _ui_floating_container__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../ui/floating/container */ \"./src/ui/floating/container.jsx\");\n\n\n\n\n\n\n\n\n\n\n\n\nconst React = _discordmodules__WEBPACK_IMPORTED_MODULE_8__[\"default\"].React;\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\nconst fs = __webpack_require__(/*! fs */ \"fs\");\n\nconst Module = __webpack_require__(/*! module */ \"module\").Module;\n\nModule.globalPaths.push(path.resolve(__webpack_require__(/*! electron */ \"electron\").remote.app.getAppPath(), \"node_modules\"));\nconst splitRegex = /[^\\S\\r\\n]*?\\r?(?:\\r\\n|\\n)[^\\S\\r\\n]*?\\*[^\\S\\r\\n]?/;\nconst escapedAtRegex = /^\\\\@/;\n\nconst stripBOM = function (fileContent) {\n if (fileContent.charCodeAt(0) === 0xFEFF) {\n fileContent = fileContent.slice(1);\n }\n\n return fileContent;\n};\n\nclass AddonManager {\n get name() {\n return \"\";\n }\n\n get moduleExtension() {\n return \"\";\n }\n\n get extension() {\n return \"\";\n }\n\n get addonFolder() {\n return \"\";\n }\n\n get language() {\n return \"\";\n }\n\n get prefix() {\n return \"addon\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"addons\";\n }\n\n get id() {\n return \"autoReload\";\n }\n\n emit(event, ...args) {\n return _emitter__WEBPACK_IMPORTED_MODULE_3__[\"default\"].emit(`${this.prefix}-${event}`, ...args);\n }\n\n constructor() {\n this.timeCache = {};\n this.addonList = [];\n this.state = {};\n }\n\n initialize() {\n this.originalRequire = Module._extensions[this.moduleExtension];\n Module._extensions[this.moduleExtension] = this.getAddonRequire();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].on(this.collection, this.category, this.id, enabled => {\n if (enabled) this.watchAddons();else this.unwatchAddons();\n });\n return this.loadAllAddons();\n } // Subclasses should overload this and modify the addon object as needed to fully load it\n\n\n initializeAddon() {\n return;\n } // Subclasses should overload this and modify the fileContent as needed to require() the file\n\n\n getFileModification(module, fileContent) {\n return fileContent;\n }\n\n startAddon() {\n return;\n }\n\n stopAddon() {\n return;\n }\n\n loadState() {\n const saved = _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getData(`${this.prefix}s`);\n if (!saved) return;\n Object.assign(this.state, saved);\n }\n\n saveState() {\n _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].setData(`${this.prefix}s`, this.state);\n }\n\n watchAddons() {\n if (this.watcher) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(this.name, `Already watching ${this.prefix} addons.`);\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(this.name, `Starting to watch ${this.prefix} addons.`);\n this.watcher = fs.watch(this.addonFolder, {\n persistent: false\n }, async (eventType, filename) => {\n if (!eventType || !filename || !filename.endsWith(this.extension)) return;\n await new Promise(r => setTimeout(r, 50));\n\n try {\n fs.statSync(path.resolve(this.addonFolder, filename));\n } catch (err) {\n if (err.code !== \"ENOENT\") return;\n delete this.timeCache[filename];\n this.unloadAddon(filename, true);\n }\n\n if (!fs.statSync(path.resolve(this.addonFolder, filename)).isFile()) return;\n const stats = fs.statSync(path.resolve(this.addonFolder, filename));\n if (!stats || !stats.mtime || !stats.mtime.getTime()) return;\n if (typeof stats.mtime.getTime() !== \"number\") return;\n if (this.timeCache[filename] == stats.mtime.getTime()) return;\n this.timeCache[filename] = stats.mtime.getTime();\n if (eventType == \"rename\") this.loadAddon(filename, true);\n if (eventType == \"change\") this.reloadAddon(filename, true);\n });\n }\n\n unwatchAddons() {\n if (!this.watcher) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(this.name, `Was not watching ${this.prefix} addons.`);\n this.watcher.close();\n delete this.watcher;\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(this.name, `No longer watching ${this.prefix} addons.`);\n }\n\n extractMeta(fileContent) {\n const firstLine = fileContent.split(\"\\n\")[0];\n const hasOldMeta = firstLine.includes(\"//META\");\n if (hasOldMeta) return this.parseOldMeta(fileContent);\n const hasNewMeta = firstLine.includes(\"/**\");\n if (hasNewMeta) return this.parseNewMeta(fileContent);\n throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META was not found.\");\n }\n\n parseOldMeta(fileContent) {\n const meta = fileContent.split(\"\\n\")[0];\n const metaData = meta.substring(meta.lastIndexOf(\"//META\") + 6, meta.lastIndexOf(\"*//\"));\n const parsed = _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testJSON(metaData);\n if (!parsed) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META could not be parsed.\");\n if (!parsed.name) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META missing name data.\");\n parsed.format = \"json\";\n return parsed;\n }\n\n parseNewMeta(fileContent) {\n const block = fileContent.split(\"/**\", 2)[1].split(\"*/\", 1)[0];\n const out = {};\n let field = \"\";\n let accum = \"\";\n\n for (const line of block.split(splitRegex)) {\n if (line.length === 0) continue;\n\n if (line.charAt(0) === \"@\" && line.charAt(1) !== \" \") {\n out[field] = accum;\n const l = line.indexOf(\" \");\n field = line.substr(1, l - 1);\n accum = line.substr(l + 1);\n } else {\n accum += \" \" + line.replace(\"\\\\n\", \"\\n\").replace(escapedAtRegex, \"@\");\n }\n }\n\n out[field] = accum.trim();\n delete out[\"\"];\n out.format = \"jsdoc\";\n return out;\n }\n\n getAddonRequire() {\n const self = this; // const baseFolder = this.addonFolder;\n\n const originalRequire = this.originalRequire;\n return function (module, filename) {\n const possiblePath = path.resolve(self.addonFolder, path.basename(filename));\n if (!fs.existsSync(possiblePath) || filename !== fs.realpathSync(possiblePath)) return Reflect.apply(originalRequire, this, arguments);\n let fileContent = fs.readFileSync(filename, \"utf8\");\n fileContent = stripBOM(fileContent);\n const stats = fs.statSync(filename);\n const meta = self.extractMeta(fileContent);\n meta.id = meta.name;\n meta.filename = path.basename(filename);\n meta.added = stats.atimeMs;\n meta.modified = stats.mtimeMs;\n meta.size = stats.size;\n fileContent = self.getFileModification(module, fileContent, meta);\n\n module._compile(fileContent, filename);\n };\n } // Subclasses should use the return (if not AddonError) and push to this.addonList\n\n\n loadAddon(filename, shouldToast = false) {\n if (typeof filename === \"undefined\") return;\n\n try {\n require(path.resolve(this.addonFolder, filename));\n } catch (error) {\n return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](filename, filename, \"Could not be compiled.\", {\n message: error.message,\n stack: error.stack\n });\n }\n\n const addon = require(path.resolve(this.addonFolder, filename));\n\n if (this.addonList.find(c => c.id == addon.id)) return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](addon.name, filename, `There is already a plugin with name ${addon.name}`);\n const error = this.initializeAddon(addon);\n if (error) return error;\n this.addonList.push(addon);\n if (shouldToast) _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].success(`${addon.name} v${addon.version} was loaded.`);\n this.emit(\"loaded\", addon.id);\n if (!this.state[addon.id]) return this.state[addon.id] = false;\n return this.startAddon(addon);\n }\n\n unloadAddon(idOrFileOrAddon, shouldToast = true, isReload = false) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n if (!addon) return false;\n if (this.state[addon.id]) isReload ? this.stopAddon(addon) : this.disableAddon(addon);\n delete require.cache[require.resolve(path.resolve(this.addonFolder, addon.filename))];\n this.addonList.splice(this.addonList.indexOf(addon), 1);\n this.emit(\"unloaded\", addon.id);\n if (shouldToast) _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].success(`${addon.name} was unloaded.`);\n return true;\n }\n\n reloadAddon(idOrFileOrAddon, shouldToast = true) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n const didUnload = this.unloadAddon(addon, shouldToast, true);\n if (!didUnload) return didUnload;\n return this.loadAddon(addon.filename, shouldToast);\n }\n\n isLoaded(idOrFile) {\n const addon = this.addonList.find(c => c.id == idOrFile || c.filename == idOrFile);\n if (!addon) return false;\n return true;\n }\n\n isEnabled(idOrFile) {\n const addon = this.addonList.find(c => c.id == idOrFile || c.filename == idOrFile);\n if (!addon) return false;\n return this.state[addon.id];\n }\n\n enableAddon(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n if (this.state[addon.id]) return;\n this.state[addon.id] = true;\n this.startAddon(addon);\n this.saveState();\n }\n\n disableAddon(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n if (!this.state[addon.id]) return;\n this.state[addon.id] = false;\n this.stopAddon(addon);\n this.saveState();\n }\n\n toggleAddon(id) {\n if (this.state[id]) this.disableAddon(id);else this.enableAddon(id);\n }\n\n loadNewAddons() {\n const files = fs.readdirSync(this.addonFolder);\n const removed = this.addonList.filter(t => !files.includes(t.filename)).map(c => c.id);\n const added = files.filter(f => !this.addonList.find(t => t.filename == f) && f.endsWith(this.extension) && fs.statSync(path.resolve(this.addonFolder, f)).isFile());\n return {\n added,\n removed\n };\n }\n\n updateList() {\n const results = this.loadNewAddons();\n\n for (const filename of results.added) this.loadAddon(filename);\n\n for (const name of results.removed) this.unloadAddon(name);\n }\n\n loadAllAddons() {\n this.loadState();\n const errors = [];\n const files = fs.readdirSync(this.addonFolder);\n\n for (const filename of files) {\n if (!fs.statSync(path.resolve(this.addonFolder, filename)).isFile() || !filename.endsWith(this.extension)) continue;\n const addon = this.loadAddon(filename, false);\n if (addon instanceof _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"]) errors.push(addon);\n }\n\n this.saveState();\n if (_settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get(this.collection, this.category, this.id)) this.watchAddons();\n return errors;\n }\n\n deleteAddon(idOrFileOrAddon) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n return fs.unlinkSync(path.resolve(this.addonFolder, addon.filename));\n }\n\n saveAddon(idOrFileOrAddon, content) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n return fs.writeFileSync(path.resolve(this.addonFolder, addon.filename), content);\n }\n\n editAddon(idOrFileOrAddon, system) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n const fullPath = path.resolve(this.addonFolder, addon.filename);\n if (typeof system == \"undefined\") system = _settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get(\"settings\", \"addons\", \"editAction\") == \"system\";\n if (system) return __webpack_require__(/*! electron */ \"electron\").shell.openItem(`${fullPath}`);\n return this.openDetached(addon);\n }\n\n openDetached(addon) {\n const fullPath = path.resolve(this.addonFolder, addon.filename);\n const content = fs.readFileSync(fullPath).toString();\n const editorRef = React.createRef();\n const editor = React.createElement(_ui_misc_addoneditor__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"bd-floating-editor-\" + addon.name,\n ref: editorRef,\n content: content,\n save: this.saveAddon.bind(this, addon),\n openNative: this.editAddon.bind(this, addon, true),\n language: this.language\n });\n _ui_floating_container__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open({\n onClose: () => {\n this.isDetached = false;\n },\n onResize: () => {\n if (!editorRef || !editorRef.current || !editorRef.current.resize) return;\n editorRef.current.resize();\n },\n title: addon.name,\n id: content.id,\n className: \"floating-addon-window\",\n height: 470,\n width: 410,\n center: true,\n resizable: true,\n children: editor,\n confirmClose: () => {\n if (!editorRef || !editorRef.current) return false;\n return editorRef.current.hasUnsavedChanges;\n },\n confirmationText: _strings__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Addons.confirmationText.format({\n name: addon.name\n })\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvYWRkb25tYW5hZ2VyLmpzP2NlYTkiXSwibmFtZXMiOlsiUmVhY3QiLCJEaXNjb3JkTW9kdWxlcyIsInBhdGgiLCJyZXF1aXJlIiwiZnMiLCJNb2R1bGUiLCJnbG9iYWxQYXRocyIsInB1c2giLCJyZXNvbHZlIiwicmVtb3RlIiwiYXBwIiwiZ2V0QXBwUGF0aCIsInNwbGl0UmVnZXgiLCJlc2NhcGVkQXRSZWdleCIsInN0cmlwQk9NIiwiZmlsZUNvbnRlbnQiLCJjaGFyQ29kZUF0Iiwic2xpY2UiLCJBZGRvbk1hbmFnZXIiLCJuYW1lIiwibW9kdWxlRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwiYWRkb25Gb2xkZXIiLCJsYW5ndWFnZSIsInByZWZpeCIsImNvbGxlY3Rpb24iLCJjYXRlZ29yeSIsImlkIiwiZW1pdCIsImV2ZW50IiwiYXJncyIsIkV2ZW50cyIsImNvbnN0cnVjdG9yIiwidGltZUNhY2hlIiwiYWRkb25MaXN0Iiwic3RhdGUiLCJpbml0aWFsaXplIiwib3JpZ2luYWxSZXF1aXJlIiwiX2V4dGVuc2lvbnMiLCJnZXRBZGRvblJlcXVpcmUiLCJTZXR0aW5ncyIsIm9uIiwiZW5hYmxlZCIsIndhdGNoQWRkb25zIiwidW53YXRjaEFkZG9ucyIsImxvYWRBbGxBZGRvbnMiLCJpbml0aWFsaXplQWRkb24iLCJnZXRGaWxlTW9kaWZpY2F0aW9uIiwibW9kdWxlIiwic3RhcnRBZGRvbiIsInN0b3BBZGRvbiIsImxvYWRTdGF0ZSIsInNhdmVkIiwiRGF0YVN0b3JlIiwiZ2V0RGF0YSIsIk9iamVjdCIsImFzc2lnbiIsInNhdmVTdGF0ZSIsInNldERhdGEiLCJ3YXRjaGVyIiwiTG9nZ2VyIiwiZXJyb3IiLCJsb2ciLCJ3YXRjaCIsInBlcnNpc3RlbnQiLCJldmVudFR5cGUiLCJmaWxlbmFtZSIsImVuZHNXaXRoIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwidW5sb2FkQWRkb24iLCJpc0ZpbGUiLCJzdGF0cyIsIm10aW1lIiwiZ2V0VGltZSIsImxvYWRBZGRvbiIsInJlbG9hZEFkZG9uIiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsInNwbGl0IiwiaGFzT2xkTWV0YSIsImluY2x1ZGVzIiwicGFyc2VPbGRNZXRhIiwiaGFzTmV3TWV0YSIsInBhcnNlTmV3TWV0YSIsIk1ldGFFcnJvciIsIm1ldGEiLCJtZXRhRGF0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicGFyc2VkIiwiVXRpbGl0aWVzIiwidGVzdEpTT04iLCJmb3JtYXQiLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwibGVuZ3RoIiwiY2hhckF0IiwibCIsImluZGV4T2YiLCJzdWJzdHIiLCJyZXBsYWNlIiwidHJpbSIsInNlbGYiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFscGF0aFN5bmMiLCJSZWZsZWN0IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJyZWFkRmlsZVN5bmMiLCJhZGRlZCIsImF0aW1lTXMiLCJtb2RpZmllZCIsIm10aW1lTXMiLCJzaXplIiwiX2NvbXBpbGUiLCJzaG91bGRUb2FzdCIsIl9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fIiwiQWRkb25FcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsImFkZG9uIiwiZmluZCIsImMiLCJUb2FzdHMiLCJzdWNjZXNzIiwidmVyc2lvbiIsImlkT3JGaWxlT3JBZGRvbiIsImlzUmVsb2FkIiwiZGlzYWJsZUFkZG9uIiwiY2FjaGUiLCJzcGxpY2UiLCJkaWRVbmxvYWQiLCJpc0xvYWRlZCIsImlkT3JGaWxlIiwiaXNFbmFibGVkIiwiZW5hYmxlQWRkb24iLCJpZE9yQWRkb24iLCJwIiwidG9nZ2xlQWRkb24iLCJsb2FkTmV3QWRkb25zIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsInJlbW92ZWQiLCJmaWx0ZXIiLCJ0IiwibWFwIiwiZiIsInVwZGF0ZUxpc3QiLCJyZXN1bHRzIiwiZXJyb3JzIiwiZ2V0IiwiZGVsZXRlQWRkb24iLCJ1bmxpbmtTeW5jIiwic2F2ZUFkZG9uIiwiY29udGVudCIsIndyaXRlRmlsZVN5bmMiLCJlZGl0QWRkb24iLCJzeXN0ZW0iLCJmdWxsUGF0aCIsInNoZWxsIiwib3Blbkl0ZW0iLCJvcGVuRGV0YWNoZWQiLCJ0b1N0cmluZyIsImVkaXRvclJlZiIsImNyZWF0ZVJlZiIsImVkaXRvciIsImNyZWF0ZUVsZW1lbnQiLCJBZGRvbkVkaXRvciIsInJlZiIsInNhdmUiLCJiaW5kIiwib3Blbk5hdGl2ZSIsIkZsb2F0aW5nV2luZG93Q29udGFpbmVyIiwib3BlbiIsIm9uQ2xvc2UiLCJpc0RldGFjaGVkIiwib25SZXNpemUiLCJjdXJyZW50IiwicmVzaXplIiwidGl0bGUiLCJjbGFzc05hbWUiLCJoZWlnaHQiLCJ3aWR0aCIsImNlbnRlciIsInJlc2l6YWJsZSIsImNoaWxkcmVuIiwiY29uZmlybUNsb3NlIiwiaGFzVW5zYXZlZENoYW5nZXMiLCJjb25maXJtYXRpb25UZXh0IiwiU3RyaW5ncyIsIkFkZG9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBLE1BQU1BLEtBQUssR0FBR0MsdURBQWMsQ0FBQ0QsS0FBN0I7O0FBRUEsTUFBTUUsSUFBSSxHQUFHQyxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUNBLE1BQU1DLEVBQUUsR0FBR0QsbUJBQU8sQ0FBQyxjQUFELENBQWxCOztBQUNBLE1BQU1FLE1BQU0sR0FBR0YsbUJBQU8sQ0FBQyxzQkFBRCxDQUFQLENBQWtCRSxNQUFqQzs7QUFDQUEsTUFBTSxDQUFDQyxXQUFQLENBQW1CQyxJQUFuQixDQUF3QkwsSUFBSSxDQUFDTSxPQUFMLENBQWFMLG1CQUFPLENBQUMsMEJBQUQsQ0FB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YyxPQUFWLENBQWtCQyxNQUEzRCxFQUFtRTtBQUNuRWYsaUJBQVMsQ0FBQ2MsT0FBVixDQUFrQkMsTUFBbEI7QUFDSCxPQVB3QjtBQVF6QkMsV0FBSyxFQUFFM0QsS0FBSyxDQUFDaEgsSUFSWTtBQVN6QlEsUUFBRSxFQUFFMEksT0FBTyxDQUFDMUksRUFUYTtBQVV6Qm9LLGVBQVMsRUFBRSx1QkFWYztBQVd6QkMsWUFBTSxFQUFFLEdBWGlCO0FBWXpCQyxXQUFLLEVBQUUsR0Faa0I7QUFhekJDLFlBQU0sRUFBRSxJQWJpQjtBQWN6QkMsZUFBUyxFQUFFLElBZGM7QUFlekJDLGNBQVEsRUFBRXBCLE1BZmU7QUFnQnpCcUIsa0JBQVksRUFBRSxNQUFNO0FBQ2hCLFlBQUksQ0FBQ3ZCLFNBQUQsSUFBYyxDQUFDQSxTQUFTLENBQUNjLE9BQTdCLEVBQXNDLE9BQU8sS0FBUDtBQUN0QyxlQUFPZCxTQUFTLENBQUNjLE9BQVYsQ0FBa0JVLGlCQUF6QjtBQUNILE9BbkJ3QjtBQW9CekJDLHNCQUFnQixFQUFFQyxnREFBTyxDQUFDQyxNQUFSLENBQWVGLGdCQUFmLENBQWdDckcsTUFBaEMsQ0FBdUM7QUFBQy9FLFlBQUksRUFBRWdILEtBQUssQ0FBQ2hIO0FBQWIsT0FBdkM7QUFwQk8sS0FBN0I7QUFzQkg7O0FBdFM2QiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL2FkZG9ubWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4vbG9nZ2VyXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IEV2ZW50cyBmcm9tIFwiLi9lbWl0dGVyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbmltcG9ydCBBZGRvbkVycm9yIGZyb20gXCIuLi9zdHJ1Y3RzL2FkZG9uZXJyb3JcIjtcclxuaW1wb3J0IE1ldGFFcnJvciBmcm9tIFwiLi4vc3RydWN0cy9tZXRhZXJyb3JcIjtcclxuaW1wb3J0IFRvYXN0cyBmcm9tIFwiLi4vdWkvdG9hc3RzXCI7XHJcbmltcG9ydCBEaXNjb3JkTW9kdWxlcyBmcm9tIFwiLi9kaXNjb3JkbW9kdWxlc1wiO1xyXG5pbXBvcnQgU3RyaW5ncyBmcm9tIFwiLi9zdHJpbmdzXCI7XHJcblxyXG5pbXBvcnQgQWRkb25FZGl0b3IgZnJvbSBcIi4uL3VpL21pc2MvYWRkb25lZGl0b3JcIjtcclxuaW1wb3J0IEZsb2F0aW5nV2luZG93Q29udGFpbmVyIGZyb20gXCIuLi91aS9mbG9hdGluZy9jb250YWluZXJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gRGlzY29yZE1vZHVsZXMuUmVhY3Q7XHJcblxyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5jb25zdCBNb2R1bGUgPSByZXF1aXJlKFwibW9kdWxlXCIpLk1vZHVsZTtcclxuTW9kdWxlLmdsb2JhbFBhdGhzLnB1c2gocGF0aC5yZXNvbHZlKHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwLmdldEFwcFBhdGgoKSwgXCJub2RlX21vZHVsZXNcIikpO1xyXG5cclxuY29uc3Qgc3BsaXRSZWdleCA9IC9bXlxcU1xcclxcbl0qP1xccj8oPzpcXHJcXG58XFxuKVteXFxTXFxyXFxuXSo/XFwqW15cXFNcXHJcXG5dPy87XHJcbmNvbnN0IGVzY2FwZWRBdFJlZ2V4ID0gL15cXFxcQC87XHJcblxyXG5jb25zdCBzdHJpcEJPTSA9IGZ1bmN0aW9uKGZpbGVDb250ZW50KSB7XHJcbiAgICBpZiAoZmlsZUNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XHJcbiAgICAgICAgZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudC5zbGljZSgxKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmaWxlQ29udGVudDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFkZG9uTWFuYWdlciB7XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgZ2V0IG1vZHVsZUV4dGVuc2lvbigpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICBnZXQgZXh0ZW5zaW9uKCkge3JldHVybiBcIlwiO31cclxuICAgIGdldCBhZGRvbkZvbGRlcigpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICBnZXQgbGFuZ3VhZ2UoKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgZ2V0IHByZWZpeCgpIHtyZXR1cm4gXCJhZGRvblwiO31cclxuICAgIGdldCBjb2xsZWN0aW9uKCkge3JldHVybiBcInNldHRpbmdzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImFkZG9uc1wiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJhdXRvUmVsb2FkXCI7fVxyXG4gICAgZW1pdChldmVudCwgLi4uYXJncykge3JldHVybiBFdmVudHMuZW1pdChgJHt0aGlzLnByZWZpeH0tJHtldmVudH1gLCAuLi5hcmdzKTt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lQ2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLmFkZG9uTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW3RoaXMubW9kdWxlRXh0ZW5zaW9uXTtcclxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbdGhpcy5tb2R1bGVFeHRlbnNpb25dID0gdGhpcy5nZXRBZGRvblJlcXVpcmUoKTtcclxuICAgICAgICBTZXR0aW5ncy5vbih0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIHRoaXMuaWQsIChlbmFibGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB0aGlzLndhdGNoQWRkb25zKCk7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy51bndhdGNoQWRkb25zKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFsbEFkZG9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJsb2FkIHRoaXMgYW5kIG1vZGlmeSB0aGUgYWRkb24gb2JqZWN0IGFzIG5lZWRlZCB0byBmdWxseSBsb2FkIGl0XHJcbiAgICBpbml0aWFsaXplQWRkb24oKSB7cmV0dXJuO31cclxuXHJcbiAgICAvLyBTdWJjbGFzc2VzIHNob3VsZCBvdmVybG9hZCB0aGlzIGFuZCBtb2RpZnkgdGhlIGZpbGVDb250ZW50IGFzIG5lZWRlZCB0byByZXF1aXJlKCkgdGhlIGZpbGVcclxuICAgIGdldEZpbGVNb2RpZmljYXRpb24obW9kdWxlLCBmaWxlQ29udGVudCkge3JldHVybiBmaWxlQ29udGVudDt9XHJcblxyXG4gICAgc3RhcnRBZGRvbigpIHtyZXR1cm47fVxyXG4gICAgc3RvcEFkZG9uKCkge3JldHVybjt9XHJcblxyXG4gICAgbG9hZFN0YXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldERhdGEoYCR7dGhpcy5wcmVmaXh9c2ApO1xyXG4gICAgICAgIGlmICghc2F2ZWQpIHJldHVybjtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuc3RhdGUsIHNhdmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlU3RhdGUoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldERhdGEoYCR7dGhpcy5wcmVmaXh9c2AsIHRoaXMuc3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHdhdGNoQWRkb25zKCkge1xyXG4gICAgICAgIGlmICh0aGlzLndhdGNoZXIpIHJldHVybiBMb2dnZXIuZXJyb3IodGhpcy5uYW1lLCBgQWxyZWFkeSB3YXRjaGluZyAke3RoaXMucHJlZml4fSBhZGRvbnMuYCk7XHJcbiAgICAgICAgTG9nZ2VyLmxvZyh0aGlzLm5hbWUsIGBTdGFydGluZyB0byB3YXRjaCAke3RoaXMucHJlZml4fSBhZGRvbnMuYCk7XHJcbiAgICAgICAgdGhpcy53YXRjaGVyID0gZnMud2F0Y2godGhpcy5hZGRvbkZvbGRlciwge3BlcnNpc3RlbnQ6IGZhbHNlfSwgYXN5bmMgKGV2ZW50VHlwZSwgZmlsZW5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFldmVudFR5cGUgfHwgIWZpbGVuYW1lIHx8ICFmaWxlbmFtZS5lbmRzV2l0aCh0aGlzLmV4dGVuc2lvbikpIHJldHVybjtcclxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XHJcbiAgICAgICAgICAgIHRyeSB7ZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGZpbGVuYW1lKSk7fVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRU5PRU5UXCIpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVubG9hZEFkZG9uKGZpbGVuYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghc3RhdHMgfHwgIXN0YXRzLm10aW1lIHx8ICFzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihzdGF0cy5tdGltZS5nZXRUaW1lKCkpICE9PSBcIm51bWJlclwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPT0gc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9IHN0YXRzLm10aW1lLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcInJlbmFtZVwiKSB0aGlzLmxvYWRBZGRvbihmaWxlbmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJjaGFuZ2VcIikgdGhpcy5yZWxvYWRBZGRvbihmaWxlbmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW53YXRjaEFkZG9ucygpIHtcclxuICAgICAgICBpZiAoIXRoaXMud2F0Y2hlcikgcmV0dXJuIExvZ2dlci5lcnJvcih0aGlzLm5hbWUsIGBXYXMgbm90IHdhdGNoaW5nICR7dGhpcy5wcmVmaXh9IGFkZG9ucy5gKTtcclxuICAgICAgICB0aGlzLndhdGNoZXIuY2xvc2UoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy53YXRjaGVyO1xyXG4gICAgICAgIExvZ2dlci5sb2codGhpcy5uYW1lLCBgTm8gbG9uZ2VyIHdhdGNoaW5nICR7dGhpcy5wcmVmaXh9IGFkZG9ucy5gKTtcclxuICAgIH1cclxuXHJcbiAgICBleHRyYWN0TWV0YShmaWxlQ29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGZpbGVDb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGhhc09sZE1ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvL01FVEFcIik7XHJcbiAgICAgICAgaWYgKGhhc09sZE1ldGEpIHJldHVybiB0aGlzLnBhcnNlT2xkTWV0YShmaWxlQ29udGVudCk7XHJcbiAgICAgICAgY29uc3QgaGFzTmV3TWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8qKlwiKTtcclxuICAgICAgICBpZiAoaGFzTmV3TWV0YSkgcmV0dXJuIHRoaXMucGFyc2VOZXdNZXRhKGZpbGVDb250ZW50KTtcclxuICAgICAgICB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU9sZE1ldGEoZmlsZUNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBtZXRhID0gZmlsZUNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgbWV0YURhdGEgPSBtZXRhLnN1YnN0cmluZyhtZXRhLmxhc3RJbmRleE9mKFwiLy9NRVRBXCIpICsgNiwgbWV0YS5sYXN0SW5kZXhPZihcIiovL1wiKSk7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkID0gVXRpbGl0aWVzLnRlc3RKU09OKG1ldGFEYXRhKTtcclxuICAgICAgICBpZiAoIXBhcnNlZCkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgY291bGQgbm90IGJlIHBhcnNlZC5cIik7XHJcbiAgICAgICAgaWYgKCFwYXJzZWQubmFtZSkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgbWlzc2luZyBuYW1lIGRhdGEuXCIpO1xyXG4gICAgICAgIHBhcnNlZC5mb3JtYXQgPSBcImpzb25cIjtcclxuICAgICAgICByZXR1cm4gcGFyc2VkO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlTmV3TWV0YShmaWxlQ29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGJsb2NrID0gZmlsZUNvbnRlbnQuc3BsaXQoXCIvKipcIiwgMilbMV0uc3BsaXQoXCIqL1wiLCAxKVswXTtcclxuICAgICAgICBjb25zdCBvdXQgPSB7fTtcclxuICAgICAgICBsZXQgZmllbGQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBhY2N1bSA9IFwiXCI7XHJcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGJsb2NrLnNwbGl0KHNwbGl0UmVnZXgpKSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChsaW5lLmNoYXJBdCgwKSA9PT0gXCJAXCIgJiYgbGluZS5jaGFyQXQoMSkgIT09IFwiIFwiKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRbZmllbGRdID0gYWNjdW07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsID0gbGluZS5pbmRleE9mKFwiIFwiKTtcclxuICAgICAgICAgICAgICAgIGZpZWxkID0gbGluZS5zdWJzdHIoMSwgbCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgYWNjdW0gPSBsaW5lLnN1YnN0cihsICsgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSArPSBcIiBcIiArIGxpbmUucmVwbGFjZShcIlxcXFxuXCIsIFwiXFxuXCIpLnJlcGxhY2UoZXNjYXBlZEF0UmVnZXgsIFwiQFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBvdXRbZmllbGRdID0gYWNjdW0udHJpbSgpO1xyXG4gICAgICAgIGRlbGV0ZSBvdXRbXCJcIl07XHJcbiAgICAgICAgb3V0LmZvcm1hdCA9IFwianNkb2NcIjtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFkZG9uUmVxdWlyZSgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyBjb25zdCBiYXNlRm9sZGVyID0gdGhpcy5hZGRvbkZvbGRlcjtcclxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlcXVpcmUgPSB0aGlzLm9yaWdpbmFsUmVxdWlyZTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlLCBmaWxlbmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwb3NzaWJsZVBhdGggPSBwYXRoLnJlc29sdmUoc2VsZi5hZGRvbkZvbGRlciwgcGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocG9zc2libGVQYXRoKSB8fCBmaWxlbmFtZSAhPT0gZnMucmVhbHBhdGhTeW5jKHBvc3NpYmxlUGF0aCkpIHJldHVybiBSZWZsZWN0LmFwcGx5KG9yaWdpbmFsUmVxdWlyZSwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCBcInV0ZjhcIik7XHJcbiAgICAgICAgICAgIGZpbGVDb250ZW50ID0gc3RyaXBCT00oZmlsZUNvbnRlbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgbWV0YSA9IHNlbGYuZXh0cmFjdE1ldGEoZmlsZUNvbnRlbnQpO1xyXG4gICAgICAgICAgICBtZXRhLmlkID0gbWV0YS5uYW1lO1xyXG4gICAgICAgICAgICBtZXRhLmZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIG1ldGEuYWRkZWQgPSBzdGF0cy5hdGltZU1zO1xyXG4gICAgICAgICAgICBtZXRhLm1vZGlmaWVkID0gc3RhdHMubXRpbWVNcztcclxuICAgICAgICAgICAgbWV0YS5zaXplID0gc3RhdHMuc2l6ZTtcclxuICAgICAgICAgICAgZmlsZUNvbnRlbnQgPSBzZWxmLmdldEZpbGVNb2RpZmljYXRpb24obW9kdWxlLCBmaWxlQ29udGVudCwgbWV0YSk7XHJcbiAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShmaWxlQ29udGVudCwgZmlsZW5hbWUpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3ViY2xhc3NlcyBzaG91bGQgdXNlIHRoZSByZXR1cm4gKGlmIG5vdCBBZGRvbkVycm9yKSBhbmQgcHVzaCB0byB0aGlzLmFkZG9uTGlzdFxyXG4gICAgbG9hZEFkZG9uKGZpbGVuYW1lLCBzaG91bGRUb2FzdCA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcclxuICAgICAgICB0cnkge19fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBmaWxlbmFtZSkpO31cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4gbmV3IEFkZG9uRXJyb3IoZmlsZW5hbWUsIGZpbGVuYW1lLCBcIkNvdWxkIG5vdCBiZSBjb21waWxlZC5cIiwge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja30pO31cclxuICAgICAgICBjb25zdCBhZGRvbiA9IF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgIGlmICh0aGlzLmFkZG9uTGlzdC5maW5kKGMgPT4gYy5pZCA9PSBhZGRvbi5pZCkpIHJldHVybiBuZXcgQWRkb25FcnJvcihhZGRvbi5uYW1lLCBmaWxlbmFtZSwgYFRoZXJlIGlzIGFscmVhZHkgYSBwbHVnaW4gd2l0aCBuYW1lICR7YWRkb24ubmFtZX1gKTtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuaW5pdGlhbGl6ZUFkZG9uKGFkZG9uKTtcclxuICAgICAgICBpZiAoZXJyb3IpIHJldHVybiBlcnJvcjtcclxuICAgICAgICB0aGlzLmFkZG9uTGlzdC5wdXNoKGFkZG9uKTtcclxuICAgICAgICBpZiAoc2hvdWxkVG9hc3QpIFRvYXN0cy5zdWNjZXNzKGAke2FkZG9uLm5hbWV9IHYke2FkZG9uLnZlcnNpb259IHdhcyBsb2FkZWQuYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KFwibG9hZGVkXCIsIGFkZG9uLmlkKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2FkZG9uLmlkXSkgcmV0dXJuIHRoaXMuc3RhdGVbYWRkb24uaWRdID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRBZGRvbihhZGRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgdW5sb2FkQWRkb24oaWRPckZpbGVPckFkZG9uLCBzaG91bGRUb2FzdCA9IHRydWUsIGlzUmVsb2FkID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHR5cGVvZihpZE9yRmlsZU9yQWRkb24pID09IFwic3RyaW5nXCIgPyB0aGlzLmFkZG9uTGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZU9yQWRkb24gfHwgYy5maWxlbmFtZSA9PSBpZE9yRmlsZU9yQWRkb24pIDogaWRPckZpbGVPckFkZG9uO1xyXG4gICAgICAgIGlmICghYWRkb24pIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZVthZGRvbi5pZF0pIGlzUmVsb2FkID8gdGhpcy5zdG9wQWRkb24oYWRkb24pIDogdGhpcy5kaXNhYmxlQWRkb24oYWRkb24pO1xyXG4gICAgICAgIGRlbGV0ZSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5jYWNoZVtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5yZXNvbHZlKHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBhZGRvbi5maWxlbmFtZSkpXTtcclxuICAgICAgICB0aGlzLmFkZG9uTGlzdC5zcGxpY2UodGhpcy5hZGRvbkxpc3QuaW5kZXhPZihhZGRvbiksIDEpO1xyXG4gICAgICAgIHRoaXMuZW1pdChcInVubG9hZGVkXCIsIGFkZG9uLmlkKTtcclxuICAgICAgICBpZiAoc2hvdWxkVG9hc3QpIFRvYXN0cy5zdWNjZXNzKGAke2FkZG9uLm5hbWV9IHdhcyB1bmxvYWRlZC5gKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWRBZGRvbihpZE9yRmlsZU9yQWRkb24sIHNob3VsZFRvYXN0ID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JGaWxlT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlT3JBZGRvbiB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JBZGRvbikgOiBpZE9yRmlsZU9yQWRkb247XHJcbiAgICAgICAgY29uc3QgZGlkVW5sb2FkID0gdGhpcy51bmxvYWRBZGRvbihhZGRvbiwgc2hvdWxkVG9hc3QsIHRydWUpO1xyXG4gICAgICAgIGlmICghZGlkVW5sb2FkKSByZXR1cm4gZGlkVW5sb2FkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRBZGRvbihhZGRvbi5maWxlbmFtZSwgc2hvdWxkVG9hc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTG9hZGVkKGlkT3JGaWxlKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLmFkZG9uTGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZSB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlKTtcclxuICAgICAgICBpZiAoIWFkZG9uKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbmFibGVkKGlkT3JGaWxlKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLmFkZG9uTGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZSB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlKTtcclxuICAgICAgICBpZiAoIWFkZG9uKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVbYWRkb24uaWRdO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZUFkZG9uKGlkT3JBZGRvbikge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JBZGRvbikgOiBpZE9yQWRkb247XHJcbiAgICAgICAgaWYgKCFhZGRvbikgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlW2FkZG9uLmlkXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc3RhdGVbYWRkb24uaWRdID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXJ0QWRkb24oYWRkb24pO1xyXG4gICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZUFkZG9uKGlkT3JBZGRvbikge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JBZGRvbikgOiBpZE9yQWRkb247XHJcbiAgICAgICAgaWYgKCFhZGRvbikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZVthZGRvbi5pZF0pIHJldHVybjtcclxuICAgICAgICB0aGlzLnN0YXRlW2FkZG9uLmlkXSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RvcEFkZG9uKGFkZG9uKTtcclxuICAgICAgICB0aGlzLnNhdmVTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUFkZG9uKGlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbaWRdKSB0aGlzLmRpc2FibGVBZGRvbihpZCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmVuYWJsZUFkZG9uKGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkTmV3QWRkb25zKCkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGhpcy5hZGRvbkZvbGRlcik7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMuYWRkb25MaXN0LmZpbHRlcih0ID0+ICFmaWxlcy5pbmNsdWRlcyh0LmZpbGVuYW1lKSkubWFwKGMgPT4gYy5pZCk7XHJcbiAgICAgICAgY29uc3QgYWRkZWQgPSBmaWxlcy5maWx0ZXIoZiA9PiAhdGhpcy5hZGRvbkxpc3QuZmluZCh0ID0+IHQuZmlsZW5hbWUgPT0gZikgJiYgZi5lbmRzV2l0aCh0aGlzLmV4dGVuc2lvbikgJiYgZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGYpKS5pc0ZpbGUoKSk7XHJcbiAgICAgICAgcmV0dXJuIHthZGRlZCwgcmVtb3ZlZH07XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTGlzdCgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5sb2FkTmV3QWRkb25zKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRBZGRvbihmaWxlbmFtZSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRBZGRvbihuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQWxsQWRkb25zKCkge1xyXG4gICAgICAgIHRoaXMubG9hZFN0YXRlKCk7XHJcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyh0aGlzLmFkZG9uRm9sZGVyKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aCh0aGlzLmV4dGVuc2lvbikpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMubG9hZEFkZG9uKGZpbGVuYW1lLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmIChhZGRvbiBpbnN0YW5jZW9mIEFkZG9uRXJyb3IpIGVycm9ycy5wdXNoKGFkZG9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XHJcbiAgICAgICAgaWYgKFNldHRpbmdzLmdldCh0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIHRoaXMuaWQpKSB0aGlzLndhdGNoQWRkb25zKCk7XHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVBZGRvbihpZE9yRmlsZU9yQWRkb24pIHtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHR5cGVvZihpZE9yRmlsZU9yQWRkb24pID09IFwic3RyaW5nXCIgPyB0aGlzLmFkZG9uTGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZU9yQWRkb24gfHwgYy5maWxlbmFtZSA9PSBpZE9yRmlsZU9yQWRkb24pIDogaWRPckZpbGVPckFkZG9uO1xyXG4gICAgICAgIHJldHVybiBmcy51bmxpbmtTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBhZGRvbi5maWxlbmFtZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVBZGRvbihpZE9yRmlsZU9yQWRkb24sIGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHR5cGVvZihpZE9yRmlsZU9yQWRkb24pID09IFwic3RyaW5nXCIgPyB0aGlzLmFkZG9uTGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZU9yQWRkb24gfHwgYy5maWxlbmFtZSA9PSBpZE9yRmlsZU9yQWRkb24pIDogaWRPckZpbGVPckFkZG9uO1xyXG4gICAgICAgIHJldHVybiBmcy53cml0ZUZpbGVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBhZGRvbi5maWxlbmFtZSksIGNvbnRlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXRBZGRvbihpZE9yRmlsZU9yQWRkb24sIHN5c3RlbSkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JGaWxlT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlT3JBZGRvbiB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JBZGRvbikgOiBpZE9yRmlsZU9yQWRkb247XHJcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5hZGRvbkZvbGRlciwgYWRkb24uZmlsZW5hbWUpO1xyXG4gICAgICAgIGlmICh0eXBlb2Yoc3lzdGVtKSA9PSBcInVuZGVmaW5lZFwiKSBzeXN0ZW0gPSBTZXR0aW5ncy5nZXQoXCJzZXR0aW5nc1wiLCBcImFkZG9uc1wiLCBcImVkaXRBY3Rpb25cIikgPT0gXCJzeXN0ZW1cIjtcclxuICAgICAgICBpZiAoc3lzdGVtKSByZXR1cm4gcmVxdWlyZShcImVsZWN0cm9uXCIpLnNoZWxsLm9wZW5JdGVtKGAke2Z1bGxQYXRofWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5EZXRhY2hlZChhZGRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkRldGFjaGVkKGFkZG9uKSB7XHJcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5hZGRvbkZvbGRlciwgYWRkb24uZmlsZW5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZnVsbFBhdGgpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGVkaXRvclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gICAgICAgIGNvbnN0IGVkaXRvciA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkb25FZGl0b3IsIHtcclxuICAgICAgICAgICAgaWQ6IFwiYmQtZmxvYXRpbmctZWRpdG9yLVwiICsgYWRkb24ubmFtZSxcclxuICAgICAgICAgICAgcmVmOiBlZGl0b3JSZWYsXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXHJcbiAgICAgICAgICAgIHNhdmU6IHRoaXMuc2F2ZUFkZG9uLmJpbmQodGhpcywgYWRkb24pLFxyXG4gICAgICAgICAgICBvcGVuTmF0aXZlOiB0aGlzLmVkaXRBZGRvbi5iaW5kKHRoaXMsIGFkZG9uLCB0cnVlKSxcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6IHRoaXMubGFuZ3VhZ2VcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgRmxvYXRpbmdXaW5kb3dDb250YWluZXIub3Blbih7XHJcbiAgICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEZXRhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvblJlc2l6ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlZGl0b3JSZWYgfHwgIWVkaXRvclJlZi5jdXJyZW50IHx8ICFlZGl0b3JSZWYuY3VycmVudC5yZXNpemUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGVkaXRvclJlZi5jdXJyZW50LnJlc2l6ZSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aXRsZTogYWRkb24ubmFtZSxcclxuICAgICAgICAgICAgaWQ6IGNvbnRlbnQuaWQsXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJmbG9hdGluZy1hZGRvbi13aW5kb3dcIixcclxuICAgICAgICAgICAgaGVpZ2h0OiA0NzAsXHJcbiAgICAgICAgICAgIHdpZHRoOiA0MTAsXHJcbiAgICAgICAgICAgIGNlbnRlcjogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogZWRpdG9yLFxyXG4gICAgICAgICAgICBjb25maXJtQ2xvc2U6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghZWRpdG9yUmVmIHx8ICFlZGl0b3JSZWYuY3VycmVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVkaXRvclJlZi5jdXJyZW50Lmhhc1Vuc2F2ZWRDaGFuZ2VzO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb25maXJtYXRpb25UZXh0OiBTdHJpbmdzLkFkZG9ucy5jb25maXJtYXRpb25UZXh0LmZvcm1hdCh7bmFtZTogYWRkb24ubmFtZX0pXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/addonmanager.js\n"); /***/ }), @@ -359,7 +371,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _patcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./patcher */ \"./src/modules/patcher.js\");\n/* harmony import */ var _ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/icons/bdlogo */ \"./src/ui/icons/bdlogo.jsx\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ComponentPatcher {\n initialize() {\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].suppressErrors(this.patchSocial.bind(this), \"BD Social Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].suppressErrors(this.patchGuildPills.bind(this), \"BD Guild Pills Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].suppressErrors(this.patchGuildListItems.bind(this), \"BD Guild List Items Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].suppressErrors(this.patchGuildSeparator.bind(this), \"BD Guild Separator Patch\")();\n }\n\n patchSocial() {\n if (this.socialPatch) return;\n const TabBar = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByDisplayName(\"TabBar\");\n const Anchor = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByDisplayName(\"Anchor\");\n if (!TabBar || !Anchor) return;\n this.socialPatch = _patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(\"ThemeHelper\", TabBar.prototype, \"render\", (_, __, returnValue) => {\n const children = returnValue.props.children;\n if (!children || !children.length) return;\n if (children[children.length - 2].type.displayName !== \"Separator\") return;\n if (!children[children.length - 1].type.toString().includes(\"socialLinks\")) return;\n const original = children[children.length - 1].type;\n\n const newOne = function () {\n const returnVal = original(...arguments);\n returnVal.props.children.push(_discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].React.createElement(Anchor, {\n className: \"bd-social-link\",\n href: \"https://github.com/rauenzi/BetterDiscordApp\",\n rel: \"author\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].React.createElement(_ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n size: \"16px\",\n className: \"bd-social-logo\"\n })));\n return returnVal;\n };\n\n children[children.length - 1].type = newOne;\n });\n }\n\n patchGuildListItems() {\n if (this.guildListItemsPatch) return;\n const listItemClass = _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].GuildClasses.listItem.split(\" \")[0];\n const blobClass = _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].GuildClasses.blobContainer.split(\" \")[0];\n const reactInstance = _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getReactInstance(document.querySelector(`.${listItemClass} .${blobClass}`).parentElement);\n const GuildComponent = reactInstance.return.type;\n if (!GuildComponent) return;\n this.guildListItemsPatch = _patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(\"ThemeHelper\", GuildComponent.prototype, \"render\", (thisObject, _, returnValue) => {\n const guildData = thisObject.props;\n returnValue.props.className += \" bd-guild\";\n if (guildData.unread) returnValue.props.className += \" bd-unread\";\n if (guildData.selected) returnValue.props.className += \" bd-selected\";\n if (guildData.audio) returnValue.props.className += \" bd-audio\";\n if (guildData.video) returnValue.props.className += \" bd-video\";\n if (guildData.badge) returnValue.props.className += \" bd-badge\";\n if (guildData.animatable) returnValue.props.className += \" bd-animatable\";\n return returnValue;\n });\n }\n\n patchGuildPills() {\n if (this.guildPillPatch) return;\n const guildPill = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getModule(m => m.default && !m.default.displayName && m.default.toString && m.default.toString().includes(\"translate3d\"));\n if (!guildPill) return;\n this.guildPillPatch = _patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(\"ThemeHelper\", guildPill, \"default\", (_, args, returnValue) => {\n const props = args[0];\n if (props.unread) returnValue.props.className += \" bd-unread\";\n if (props.selected) returnValue.props.className += \" bd-selected\";\n if (props.hovered) returnValue.props.className += \" bd-hovered\";\n return returnValue;\n });\n }\n\n patchGuildSeparator() {\n if (this.guildSeparatorPatch) return;\n const Guilds = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByDisplayName(\"Guilds\");\n const guildComponents = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByProps(\"renderListItem\");\n if (!guildComponents || !Guilds) return;\n\n const GuildSeparator = function () {\n const returnValue = guildComponents.Separator(...arguments);\n returnValue.props.className += \" bd-guild-separator\";\n return returnValue;\n };\n\n this.guildSeparatorPatch = _patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(\"ThemeHelper\", Guilds.prototype, \"render\", (_, __, returnValue) => {\n const Separator = _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].findInReactTree(returnValue, m => m.type && !m.type.displayName && typeof m.type == \"function\" && _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isEmpty(m.props));\n if (!Separator) return;\n Separator.type = GuildSeparator;\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29tcG9uZW50cGF0Y2hlci5qcz8yZjAyIl0sIm5hbWVzIjpbIkNvbXBvbmVudFBhdGNoZXIiLCJpbml0aWFsaXplIiwiVXRpbGl0aWVzIiwic3VwcHJlc3NFcnJvcnMiLCJwYXRjaFNvY2lhbCIsImJpbmQiLCJwYXRjaEd1aWxkUGlsbHMiLCJwYXRjaEd1aWxkTGlzdEl0ZW1zIiwicGF0Y2hHdWlsZFNlcGFyYXRvciIsInNvY2lhbFBhdGNoIiwiVGFiQmFyIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeURpc3BsYXlOYW1lIiwiQW5jaG9yIiwiUGF0Y2hlciIsImFmdGVyIiwicHJvdG90eXBlIiwiXyIsIl9fIiwicmV0dXJuVmFsdWUiLCJjaGlsZHJlbiIsInByb3BzIiwibGVuZ3RoIiwidHlwZSIsImRpc3BsYXlOYW1lIiwidG9TdHJpbmciLCJpbmNsdWRlcyIsIm9yaWdpbmFsIiwibmV3T25lIiwicmV0dXJuVmFsIiwiYXJndW1lbnRzIiwicHVzaCIsIkRpc2NvcmRNb2R1bGVzIiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiaHJlZiIsInJlbCIsInRpdGxlIiwidGFyZ2V0IiwiQkRMb2dvIiwic2l6ZSIsImd1aWxkTGlzdEl0ZW1zUGF0Y2giLCJsaXN0SXRlbUNsYXNzIiwiR3VpbGRDbGFzc2VzIiwibGlzdEl0ZW0iLCJzcGxpdCIsImJsb2JDbGFzcyIsImJsb2JDb250YWluZXIiLCJyZWFjdEluc3RhbmNlIiwiZ2V0UmVhY3RJbnN0YW5jZSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsInBhcmVudEVsZW1lbnQiLCJHdWlsZENvbXBvbmVudCIsInJldHVybiIsInRoaXNPYmplY3QiLCJndWlsZERhdGEiLCJ1bnJlYWQiLCJzZWxlY3RlZCIsImF1ZGlvIiwidmlkZW8iLCJiYWRnZSIsImFuaW1hdGFibGUiLCJndWlsZFBpbGxQYXRjaCIsImd1aWxkUGlsbCIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0IiwiYXJncyIsImhvdmVyZWQiLCJndWlsZFNlcGFyYXRvclBhdGNoIiwiR3VpbGRzIiwiZ3VpbGRDb21wb25lbnRzIiwiZ2V0QnlQcm9wcyIsIkd1aWxkU2VwYXJhdG9yIiwiU2VwYXJhdG9yIiwiZmluZEluUmVhY3RUcmVlIiwiaXNFbXB0eSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLG1FQUFJLE1BQU1BLGdCQUFOLENBQXVCO0FBRXRDQyxZQUFVLEdBQUc7QUFDVEMsc0RBQVMsQ0FBQ0MsY0FBVixDQUF5QixLQUFLQyxXQUFMLENBQWlCQyxJQUFqQixDQUFzQixJQUF0QixDQUF6QixFQUFzRCxpQkFBdEQ7QUFDQUgsc0RBQVMsQ0FBQ0MsY0FBVixDQUF5QixLQUFLRyxlQUFMLENBQXFCRCxJQUFyQixDQUEwQixJQUExQixDQUF6QixFQUEwRCxzQkFBMUQ7QUFDQUgsc0RBQVMsQ0FBQ0MsY0FBVixDQUF5QixLQUFLSSxtQkFBTCxDQUF5QkYsSUFBekIsQ0FBOEIsSUFBOUIsQ0FBekIsRUFBOEQsMkJBQTlEO0FBQ0FILHNEQUFTLENBQUNDLGNBQVYsQ0FBeUIsS0FBS0ssbUJBQUwsQ0FBeUJILElBQXpCLENBQThCLElBQTlCLENBQXpCLEVBQThELDBCQUE5RDtBQUNIOztBQUVERCxhQUFXLEdBQUc7QUFDVixRQUFJLEtBQUtLLFdBQVQsRUFBc0I7QUFDdEIsVUFBTUMsTUFBTSxHQUFHQyx1REFBYyxDQUFDQyxnQkFBZixDQUFnQyxRQUFoQyxDQUFmO0FBQ0EsVUFBTUMsTUFBTSxHQUFHRix1REFBYyxDQUFDQyxnQkFBZixDQUFnQyxRQUFoQyxDQUFmO0FBQ0EsUUFBSSxDQUFDRixNQUFELElBQVcsQ0FBQ0csTUFBaEIsRUFBd0I7QUFDeEIsU0FBS0osV0FBTCxHQUFtQkssZ0RBQU8sQ0FBQ0MsS0FBUixDQUFjLGFBQWQsRUFBNkJMLE1BQU0sQ0FBQ00sU0FBcEMsRUFBK0MsUUFBL0Ms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QyxDQUFDNUMsSUFBVCxJQUFrQixVQUFuRCxJQUFpRXJCLGtEQUFTLENBQUM0RSxPQUFWLENBQWtCWCxDQUFDLENBQUM5QyxLQUFwQixDQUE3RyxDQUFsQjtBQUNBLFVBQUksQ0FBQ3VELFNBQUwsRUFBZ0I7QUFDaEJBLGVBQVMsQ0FBQ3JELElBQVYsR0FBaUJvRCxjQUFqQjtBQUNILEtBSjBCLENBQTNCO0FBS0g7O0FBL0VxQyxDQUEzQixFQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvY29tcG9uZW50cGF0Y2hlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrbW9kdWxlc1wiO1xyXG5pbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIi4vZGlzY29yZG1vZHVsZXNcIjtcclxuaW1wb3J0IFV0aWxpdGllcyBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuaW1wb3J0IFBhdGNoZXIgZnJvbSBcIi4vcGF0Y2hlclwiO1xyXG5pbXBvcnQgQkRMb2dvIGZyb20gXCIuLi91aS9pY29ucy9iZGxvZ29cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb21wb25lbnRQYXRjaGVyIHtcclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIFV0aWxpdGllcy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoU29jaWFsLmJpbmQodGhpcyksIFwiQkQgU29jaWFsIFBhdGNoXCIpKCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFBpbGxzLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgUGlsbHMgUGF0Y2hcIikoKTtcclxuICAgICAgICBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkTGlzdEl0ZW1zLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgTGlzdCBJdGVtcyBQYXRjaFwiKSgpO1xyXG4gICAgICAgIFV0aWxpdGllcy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRTZXBhcmF0b3IuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBTZXBhcmF0b3IgUGF0Y2hcIikoKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaFNvY2lhbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5zb2NpYWxQYXRjaCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IFRhYkJhciA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5RGlzcGxheU5hbWUoXCJUYWJCYXJcIik7XHJcbiAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIkFuY2hvclwiKTtcclxuICAgICAgICBpZiAoIVRhYkJhciB8fCAhQW5jaG9yKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zb2NpYWxQYXRjaCA9IFBhdGNoZXIuYWZ0ZXIoXCJUaGVtZUhlbHBlclwiLCBUYWJCYXIucHJvdG90eXBlLCBcInJlbmRlclwiLCAoXywgX18sIHJldHVyblZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW47XHJcbiAgICAgICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZS5kaXNwbGF5TmFtZSAhPT0gXCJTZXBhcmF0b3JcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoIWNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGUudG9TdHJpbmcoKS5pbmNsdWRlcyhcInNvY2lhbExpbmtzXCIpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZTtcclxuICAgICAgICAgICAgY29uc3QgbmV3T25lID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbCguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goRGlzY29yZE1vZHVsZXMuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxpbmtcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHJlbDogXCJhdXRob3JcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1zb2NpYWwtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZSA9IG5ld09uZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaEd1aWxkTGlzdEl0ZW1zKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2gpIHJldHVybjtcclxuICAgICAgICBjb25zdCBsaXN0SXRlbUNsYXNzID0gRGlzY29yZE1vZHVsZXMuR3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICBjb25zdCBibG9iQ2xhc3MgPSBEaXNjb3JkTW9kdWxlcy5HdWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgY29uc3QgcmVhY3RJbnN0YW5jZSA9IFV0aWxpdGllcy5nZXRSZWFjdEluc3RhbmNlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke2xpc3RJdGVtQ2xhc3N9IC4ke2Jsb2JDbGFzc31gKS5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICBjb25zdCBHdWlsZENvbXBvbmVudCA9IHJlYWN0SW5zdGFuY2UucmV0dXJuLnR5cGU7XHJcbiAgICAgICAgaWYgKCFHdWlsZENvbXBvbmVudCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRMaXN0SXRlbXNQYXRjaCA9IFBhdGNoZXIuYWZ0ZXIoXCJUaGVtZUhlbHBlclwiLCBHdWlsZENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsICh0aGlzT2JqZWN0LCBfLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZERhdGEgPSB0aGlzT2JqZWN0LnByb3BzO1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS51bnJlYWQpIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC11bnJlYWRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5zZWxlY3RlZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYXVkaW8pIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1hdWRpb1wiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnZpZGVvKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdmlkZW9cIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5iYWRnZSkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWJhZGdlXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYW5pbWF0YWJsZSkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWFuaW1hdGFibGVcIjtcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoR3VpbGRQaWxscygpIHtcclxuICAgICAgICBpZiAodGhpcy5ndWlsZFBpbGxQYXRjaCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkUGlsbCA9IFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZShtID0+IG0uZGVmYXVsdCAmJiAhbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC50b1N0cmluZyAmJiBtLmRlZmF1bHQudG9TdHJpbmcoKS5pbmNsdWRlcyhcInRyYW5zbGF0ZTNkXCIpKTtcclxuICAgICAgICBpZiAoIWd1aWxkUGlsbCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQaWxsUGF0Y2ggPSBQYXRjaGVyLmFmdGVyKFwiVGhlbWVIZWxwZXJcIiwgZ3VpbGRQaWxsLCBcImRlZmF1bHRcIiwgKF8sIGFyZ3MsIHJldHVyblZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gYXJnc1swXTtcclxuICAgICAgICAgICAgaWYgKHByb3BzLnVucmVhZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xyXG4gICAgICAgICAgICBpZiAocHJvcHMuc2VsZWN0ZWQpIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xyXG4gICAgICAgICAgICBpZiAocHJvcHMuaG92ZXJlZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWhvdmVyZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoR3VpbGRTZXBhcmF0b3IoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IEd1aWxkcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XHJcbiAgICAgICAgY29uc3QgZ3VpbGRDb21wb25lbnRzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInJlbmRlckxpc3RJdGVtXCIpO1xyXG4gICAgICAgIGlmICghZ3VpbGRDb21wb25lbnRzIHx8ICFHdWlsZHMpIHJldHVybjtcclxuICAgICAgICBjb25zdCBHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGd1aWxkQ29tcG9uZW50cy5TZXBhcmF0b3IoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWd1aWxkLXNlcGFyYXRvclwiO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2ggPSBQYXRjaGVyLmFmdGVyKFwiVGhlbWVIZWxwZXJcIiwgR3VpbGRzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKF8sIF9fLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBTZXBhcmF0b3IgPSBVdGlsaXRpZXMuZmluZEluUmVhY3RUcmVlKHJldHVyblZhbHVlLCBtID0+IG0udHlwZSAmJiAhbS50eXBlLmRpc3BsYXlOYW1lICYmIHR5cGVvZihtLnR5cGUpID09IFwiZnVuY3Rpb25cIiAmJiBVdGlsaXRpZXMuaXNFbXB0eShtLnByb3BzKSk7XHJcbiAgICAgICAgICAgIGlmICghU2VwYXJhdG9yKSByZXR1cm47XHJcbiAgICAgICAgICAgIFNlcGFyYXRvci50eXBlID0gR3VpbGRTZXBhcmF0b3I7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/componentpatcher.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _patcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./patcher */ \"./src/modules/patcher.js\");\n/* harmony import */ var _ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/icons/bdlogo */ \"./src/ui/icons/bdlogo.jsx\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ComponentPatcher {\n initialize() {\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].suppressErrors(this.patchSocial.bind(this), \"BD Social Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].suppressErrors(this.patchGuildPills.bind(this), \"BD Guild Pills Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].suppressErrors(this.patchGuildListItems.bind(this), \"BD Guild List Items Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].suppressErrors(this.patchGuildSeparator.bind(this), \"BD Guild Separator Patch\")();\n }\n\n patchSocial() {\n if (this.socialPatch) return;\n const TabBar = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByDisplayName(\"TabBar\");\n const Anchor = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByDisplayName(\"Anchor\");\n if (!TabBar || !Anchor) return;\n this.socialPatch = _patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(\"ThemeHelper\", TabBar.prototype, \"render\", (_, __, returnValue) => {\n const children = returnValue.props.children;\n if (!children || !children.length) return;\n if (children[children.length - 2].type.displayName !== \"Separator\") return;\n if (!children[children.length - 1].type.toString().includes(\"socialLinks\")) return;\n const original = children[children.length - 1].type;\n\n const newOne = function () {\n const returnVal = original(...arguments);\n returnVal.props.children.push(_discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].React.createElement(Anchor, {\n className: \"bd-social-link\",\n href: \"https://github.com/rauenzi/BetterDiscordApp\",\n rel: \"author\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].React.createElement(_ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n size: \"16px\",\n className: \"bd-social-logo\"\n })));\n return returnVal;\n };\n\n children[children.length - 1].type = newOne;\n });\n }\n\n patchGuildListItems() {\n if (this.guildListItemsPatch) return;\n const listItemClass = _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].GuildClasses.listItem.split(\" \")[0];\n const blobClass = _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].GuildClasses.blobContainer.split(\" \")[0];\n const reactInstance = _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getReactInstance(document.querySelector(`.${listItemClass} .${blobClass}`).parentElement);\n const GuildComponent = reactInstance.return.type;\n if (!GuildComponent) return;\n this.guildListItemsPatch = _patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(\"ThemeHelper\", GuildComponent.prototype, \"render\", (thisObject, _, returnValue) => {\n if (!returnValue || !thisObject) return;\n const guildData = thisObject.props;\n returnValue.props.className += \" bd-guild\";\n if (guildData.unread) returnValue.props.className += \" bd-unread\";\n if (guildData.selected) returnValue.props.className += \" bd-selected\";\n if (guildData.audio) returnValue.props.className += \" bd-audio\";\n if (guildData.video) returnValue.props.className += \" bd-video\";\n if (guildData.badge) returnValue.props.className += \" bd-badge\";\n if (guildData.animatable) returnValue.props.className += \" bd-animatable\";\n return returnValue;\n });\n }\n\n patchGuildPills() {\n if (this.guildPillPatch) return;\n const guildPill = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getModule(m => m.default && !m.default.displayName && m.default.toString && m.default.toString().includes(\"translate3d\"));\n if (!guildPill) return;\n this.guildPillPatch = _patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(\"ThemeHelper\", guildPill, \"default\", (_, args, returnValue) => {\n const props = args[0];\n if (props.unread) returnValue.props.className += \" bd-unread\";\n if (props.selected) returnValue.props.className += \" bd-selected\";\n if (props.hovered) returnValue.props.className += \" bd-hovered\";\n return returnValue;\n });\n }\n\n patchGuildSeparator() {\n if (this.guildSeparatorPatch) return;\n const Guilds = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByDisplayName(\"Guilds\");\n const guildComponents = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByProps(\"renderListItem\");\n if (!guildComponents || !Guilds) return;\n\n const GuildSeparator = function () {\n const returnValue = guildComponents.Separator(...arguments);\n returnValue.props.className += \" bd-guild-separator\";\n return returnValue;\n };\n\n this.guildSeparatorPatch = _patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(\"ThemeHelper\", Guilds.prototype, \"render\", (_, __, returnValue) => {\n const Separator = _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].findInReactTree(returnValue, m => m.type && !m.type.displayName && typeof m.type == \"function\" && _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isEmpty(m.props));\n if (!Separator) return;\n Separator.type = GuildSeparator;\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29tcG9uZW50cGF0Y2hlci5qcz8yZjAyIl0sIm5hbWVzIjpbIkNvbXBvbmVudFBhdGNoZXIiLCJpbml0aWFsaXplIiwiVXRpbGl0aWVzIiwic3VwcHJlc3NFcnJvcnMiLCJwYXRjaFNvY2lhbCIsImJpbmQiLCJwYXRjaEd1aWxkUGlsbHMiLCJwYXRjaEd1aWxkTGlzdEl0ZW1zIiwicGF0Y2hHdWlsZFNlcGFyYXRvciIsInNvY2lhbFBhdGNoIiwiVGFiQmFyIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeURpc3BsYXlOYW1lIiwiQW5jaG9yIiwiUGF0Y2hlciIsImFmdGVyIiwicHJvdG90eXBlIiwiXyIsIl9fIiwicmV0dXJuVmFsdWUiLCJjaGlsZHJlbiIsInByb3BzIiwibGVuZ3RoIiwidHlwZSIsImRpc3BsYXlOYW1lIiwidG9TdHJpbmciLCJpbmNsdWRlcyIsIm9yaWdpbmFsIiwibmV3T25lIiwicmV0dXJuVmFsIiwiYXJndW1lbnRzIiwicHVzaCIsIkRpc2NvcmRNb2R1bGVzIiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiaHJlZiIsInJlbCIsInRpdGxlIiwidGFyZ2V0IiwiQkRMb2dvIiwic2l6ZSIsImd1aWxkTGlzdEl0ZW1zUGF0Y2giLCJsaXN0SXRlbUNsYXNzIiwiR3VpbGRDbGFzc2VzIiwibGlzdEl0ZW0iLCJzcGxpdCIsImJsb2JDbGFzcyIsImJsb2JDb250YWluZXIiLCJyZWFjdEluc3RhbmNlIiwiZ2V0UmVhY3RJbnN0YW5jZSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsInBhcmVudEVsZW1lbnQiLCJHdWlsZENvbXBvbmVudCIsInJldHVybiIsInRoaXNPYmplY3QiLCJndWlsZERhdGEiLCJ1bnJlYWQiLCJzZWxlY3RlZCIsImF1ZGlvIiwidmlkZW8iLCJiYWRnZSIsImFuaW1hdGFibGUiLCJndWlsZFBpbGxQYXRjaCIsImd1aWxkUGlsbCIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0IiwiYXJncyIsImhvdmVyZWQiLCJndWlsZFNlcGFyYXRvclBhdGNoIiwiR3VpbGRzIiwiZ3VpbGRDb21wb25lbnRzIiwiZ2V0QnlQcm9wcyIsIkd1aWxkU2VwYXJhdG9yIiwiU2VwYXJhdG9yIiwiZmluZEluUmVhY3RUcmVlIiwiaXNFbXB0eSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLG1FQUFJLE1BQU1BLGdCQUFOLENBQXVCO0FBRXRDQyxZQUFVLEdBQUc7QUFDVEMsc0RBQVMsQ0FBQ0MsY0FBVixDQUF5QixLQUFLQyxXQUFMLENBQWlCQyxJQUFqQixDQUFzQixJQUF0QixDQUF6QixFQUFzRCxpQkFBdEQ7QUFDQUgsc0RBQVMsQ0FBQ0MsY0FBVixDQUF5QixLQUFLRyxlQUFMLENBQXFCRCxJQUFyQixDQUEwQixJQUExQixDQUF6QixFQUEwRCxzQkFBMUQ7QUFDQUgsc0RBQVMsQ0FBQ0MsY0FBVixDQUF5QixLQUFLSSxtQkFBTCxDQUF5QkYsSUFBekIsQ0FBOEIsSUFBOUIsQ0FBekIsRUFBOEQsMkJBQTlEO0FBQ0FILHNEQUFTLENBQUNDLGNBQVYsQ0FBeUIsS0FBS0ssbUJBQUwsQ0FBeUJILElBQXpCLENBQThCLElBQTlCLENBQXpCLEVBQThELDBCQUE5RDtBQUNIOztBQUVERCxhQUFXLEdBQUc7QUFDVixRQUFJLEtBQUtLLFdBQVQsRUFBc0I7QUFDdEIsVUFBTUMsTUFBTSxHQUFHQyx1REFBYyxDQUFDQyxnQkFBZixDQUFnQyxRQUFoQyxDQUFmO0FBQ0EsVUFBTUMsTUFBTSxHQUFHRix1REFBYyxDQUFDQyxnQkFBZixDQUFnQyxRQUFoQyxDQUFmO0FBQ0EsUUFBSSxDQUFDRixNQUFELElBQVcsQ0FBQ0csTUFBaEIsRUFBd0I7QUFDeEIsU0FBS0osV0FBTCxHQUFtQkssZ0RBQU8sQ0FBQ0MsS0FBUixDQUFjLGFBQWQsRUFBNkJMLE1BQU0sQ0FBQ00sU0FBcEMsRUFBK0MsUUFBL0Ms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LENBQUMsQ0FBQzVDLElBQUYsQ0FBT0MsV0FBbEIsSUFBaUMsT0FBTzJDLENBQUMsQ0FBQzVDLElBQVQsSUFBa0IsVUFBbkQsSUFBaUVyQixrREFBUyxDQUFDNEUsT0FBVixDQUFrQlgsQ0FBQyxDQUFDOUMsS0FBcEIsQ0FBN0csQ0FBbEI7QUFDQSxVQUFJLENBQUN1RCxTQUFMLEVBQWdCO0FBQ2hCQSxlQUFTLENBQUNyRCxJQUFWLEdBQWlCb0QsY0FBakI7QUFDSCxLQUowQixDQUEzQjtBQUtIOztBQWhGcUMsQ0FBM0IsRUFBZiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL2NvbXBvbmVudHBhdGNoZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja21vZHVsZXNcIjtcclxuaW1wb3J0IERpc2NvcmRNb2R1bGVzIGZyb20gXCIuL2Rpc2NvcmRtb2R1bGVzXCI7XHJcbmltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBQYXRjaGVyIGZyb20gXCIuL3BhdGNoZXJcIjtcclxuaW1wb3J0IEJETG9nbyBmcm9tIFwiLi4vdWkvaWNvbnMvYmRsb2dvXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ29tcG9uZW50UGF0Y2hlciB7XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaFNvY2lhbC5iaW5kKHRoaXMpLCBcIkJEIFNvY2lhbCBQYXRjaFwiKSgpO1xyXG4gICAgICAgIFV0aWxpdGllcy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRQaWxscy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFBpbGxzIFBhdGNoXCIpKCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZExpc3RJdGVtcy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIExpc3QgSXRlbXMgUGF0Y2hcIikoKTtcclxuICAgICAgICBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkU2VwYXJhdG9yLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgU2VwYXJhdG9yIFBhdGNoXCIpKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hTb2NpYWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc29jaWFsUGF0Y2gpIHJldHVybjtcclxuICAgICAgICBjb25zdCBUYWJCYXIgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeURpc3BsYXlOYW1lKFwiVGFiQmFyXCIpO1xyXG4gICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5RGlzcGxheU5hbWUoXCJBbmNob3JcIik7XHJcbiAgICAgICAgaWYgKCFUYWJCYXIgfHwgIUFuY2hvcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc29jaWFsUGF0Y2ggPSBQYXRjaGVyLmFmdGVyKFwiVGhlbWVIZWxwZXJcIiwgVGFiQmFyLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKF8sIF9fLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUuZGlzcGxheU5hbWUgIT09IFwiU2VwYXJhdG9yXCIpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJzb2NpYWxMaW5rc1wiKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGU7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld09uZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsID0gb3JpZ2luYWwoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5wdXNoKERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCByZWw6IFwiYXV0aG9yXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTW9kdWxlcy5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGUgPSBuZXdPbmU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hHdWlsZExpc3RJdGVtcygpIHtcclxuICAgICAgICBpZiAodGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbGlzdEl0ZW1DbGFzcyA9IERpc2NvcmRNb2R1bGVzLkd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgY29uc3QgYmxvYkNsYXNzID0gRGlzY29yZE1vZHVsZXMuR3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IHJlYWN0SW5zdGFuY2UgPSBVdGlsaXRpZXMuZ2V0UmVhY3RJbnN0YW5jZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtsaXN0SXRlbUNsYXNzfSAuJHtibG9iQ2xhc3N9YCkucGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgR3VpbGRDb21wb25lbnQgPSByZWFjdEluc3RhbmNlLnJldHVybi50eXBlO1xyXG4gICAgICAgIGlmICghR3VpbGRDb21wb25lbnQpIHJldHVybjtcclxuICAgICAgICB0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2ggPSBQYXRjaGVyLmFmdGVyKFwiVGhlbWVIZWxwZXJcIiwgR3VpbGRDb21wb25lbnQucHJvdG90eXBlLCBcInJlbmRlclwiLCAodGhpc09iamVjdCwgXywgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXR1cm5WYWx1ZSB8fCAhdGhpc09iamVjdCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZERhdGEgPSB0aGlzT2JqZWN0LnByb3BzO1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS51bnJlYWQpIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC11bnJlYWRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5zZWxlY3RlZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYXVkaW8pIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1hdWRpb1wiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnZpZGVvKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdmlkZW9cIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5iYWRnZSkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWJhZGdlXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYW5pbWF0YWJsZSkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWFuaW1hdGFibGVcIjtcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoR3VpbGRQaWxscygpIHtcclxuICAgICAgICBpZiAodGhpcy5ndWlsZFBpbGxQYXRjaCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkUGlsbCA9IFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZShtID0+IG0uZGVmYXVsdCAmJiAhbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC50b1N0cmluZyAmJiBtLmRlZmF1bHQudG9TdHJpbmcoKS5pbmNsdWRlcyhcInRyYW5zbGF0ZTNkXCIpKTtcclxuICAgICAgICBpZiAoIWd1aWxkUGlsbCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQaWxsUGF0Y2ggPSBQYXRjaGVyLmFmdGVyKFwiVGhlbWVIZWxwZXJcIiwgZ3VpbGRQaWxsLCBcImRlZmF1bHRcIiwgKF8sIGFyZ3MsIHJldHVyblZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gYXJnc1swXTtcclxuICAgICAgICAgICAgaWYgKHByb3BzLnVucmVhZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xyXG4gICAgICAgICAgICBpZiAocHJvcHMuc2VsZWN0ZWQpIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xyXG4gICAgICAgICAgICBpZiAocHJvcHMuaG92ZXJlZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWhvdmVyZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoR3VpbGRTZXBhcmF0b3IoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IEd1aWxkcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XHJcbiAgICAgICAgY29uc3QgZ3VpbGRDb21wb25lbnRzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInJlbmRlckxpc3RJdGVtXCIpO1xyXG4gICAgICAgIGlmICghZ3VpbGRDb21wb25lbnRzIHx8ICFHdWlsZHMpIHJldHVybjtcclxuICAgICAgICBjb25zdCBHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGd1aWxkQ29tcG9uZW50cy5TZXBhcmF0b3IoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWd1aWxkLXNlcGFyYXRvclwiO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2ggPSBQYXRjaGVyLmFmdGVyKFwiVGhlbWVIZWxwZXJcIiwgR3VpbGRzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKF8sIF9fLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBTZXBhcmF0b3IgPSBVdGlsaXRpZXMuZmluZEluUmVhY3RUcmVlKHJldHVyblZhbHVlLCBtID0+IG0udHlwZSAmJiAhbS50eXBlLmRpc3BsYXlOYW1lICYmIHR5cGVvZihtLnR5cGUpID09IFwiZnVuY3Rpb25cIiAmJiBVdGlsaXRpZXMuaXNFbXB0eShtLnByb3BzKSk7XHJcbiAgICAgICAgICAgIGlmICghU2VwYXJhdG9yKSByZXR1cm47XHJcbiAgICAgICAgICAgIFNlcGFyYXRvci50eXBlID0gR3VpbGRTZXBhcmF0b3I7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/componentpatcher.js\n"); /***/ }), @@ -371,7 +383,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _web /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _localemanager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localemanager */ \"./src/modules/localemanager.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var builtins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! builtins */ \"./src/builtins/builtins.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _reactcomponents__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactcomponents */ \"./src/modules/reactcomponents.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _componentpatcher__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./componentpatcher */ \"./src/modules/componentpatcher.js\");\n\n\n // import EmoteModule from \"./emotes\";\n// import QuickEmoteMenu from \"../builtins/emotemenu\";\n\n\n\n\n\n\n\n\n\n\n\nconst GuildClasses = _discordmodules__WEBPACK_IMPORTED_MODULE_11__[\"default\"].GuildClasses;\n\nfunction Core() {}\n\nCore.prototype.setConfig = function (config) {\n Object.assign(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"], config);\n};\n\nCore.prototype.init = async function () {\n if (data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version < data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].minSupportedVersion) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(\"Not Supported\", \"BetterDiscord v\" + data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version + \" (your version)\" + \" is not supported by the latest js (\" + data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].bbdVersion + \").

Please download the latest version from GitHub\");\n return;\n } // const latestLocalVersion = Config.updater ? Config.updater.LatestVersion : Config.latestVersion;\n // if (latestLocalVersion > Config.version) {\n // Modals.alert(\"Update Available\", `\n // An update for BandagedBD is available (${latestLocalVersion})! Please Reinstall!

\n // Download Installer\n // `);\n // }\n\n\n _datastore__WEBPACK_IMPORTED_MODULE_10__[\"default\"].initialize();\n await _localemanager__WEBPACK_IMPORTED_MODULE_0__[\"default\"].initialize();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing Settings\");\n _settingsmanager__WEBPACK_IMPORTED_MODULE_6__[\"default\"].initialize();\n _dommanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].initialize();\n await this.waitForGuilds();\n _reactcomponents__WEBPACK_IMPORTED_MODULE_9__[\"default\"].initialize();\n _componentpatcher__WEBPACK_IMPORTED_MODULE_12__[\"default\"].initialize();\n\n for (const module in builtins__WEBPACK_IMPORTED_MODULE_7__) builtins__WEBPACK_IMPORTED_MODULE_7__[module].initialize();\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Plugins\");\n const pluginErrors = _pluginmanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].initialize();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Themes\");\n const themeErrors = _thememanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].initialize();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Removing Loading Icon\");\n document.getElementsByClassName(\"bd-loaderv2\")[0].remove(); // Show loading errors\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Collecting Startup Errors\");\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].showAddonErrors({\n plugins: pluginErrors,\n themes: themeErrors\n });\n};\n\nCore.prototype.waitForGuilds = function () {\n return new Promise(resolve => {\n const checkForGuilds = function () {\n if (document.readyState != \"complete\") setTimeout(checkForGuilds, 100);\n const wrapper = GuildClasses.wrapper.split(\" \")[0];\n const guild = GuildClasses.listItem.split(\" \")[0];\n const blob = GuildClasses.blobContainer.split(\" \")[0];\n if (document.querySelectorAll(`.${wrapper} .${guild} .${blob}`).length > 0) return resolve(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].deferLoaded = true);\n setTimeout(checkForGuilds, 100);\n };\n\n checkForGuilds();\n });\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new Core());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29yZS5qcz9iNmRlIl0sIm5hbWVzIjpbIkd1aWxkQ2xhc3NlcyIsIkRpc2NvcmRNb2R1bGVzIiwiQ29yZSIsInByb3RvdHlwZSIsInNldENvbmZpZyIsImNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsIkNvbmZpZyIsImluaXQiLCJ2ZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsIk1vZGFscyIsImFsZXJ0IiwiYmJkVmVyc2lvbiIsIkRhdGFTdG9yZSIsImluaXRpYWxpemUiLCJMb2NhbGVNYW5hZ2VyIiwiTG9nZ2VyIiwibG9nIiwiU2V0dGluZ3MiLCJET01NYW5hZ2VyIiwid2FpdEZvckd1aWxkcyIsIlJlYWN0Q29tcG9uZW50cyIsIkNvbXBvbmVudFBhdGNoZXIiLCJtb2R1bGUiLCJCdWlsdGlucyIsInBsdWdpbkVycm9ycyIsIlBsdWdpbk1hbmFnZXIiLCJ0aGVtZUVycm9ycyIsIlRoZW1lTWFuYWdlciIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInJlbW92ZSIsInNob3dBZGRvbkVycm9ycyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNoZWNrRm9yR3VpbGRzIiwicmVhZHlTdGF0ZSIsInNldFRpbWVvdXQiLCJ3cmFwcGVyIiwic3BsaXQiLCJndWlsZCIsImxpc3RJdGVtIiwiYmxvYiIsImJsb2JDb250YWluZXIiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwiZGVmZXJMb2FkZWQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0NBRUE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBLE1BQU1BLFlBQVksR0FBR0Msd0RBQWMsQ0FBQ0QsWUFBcEM7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QUQsRUFBaUIsR0FBakIsQ0FBVjtBQUNILEtBUEQ7O0FBU0FBLGtCQUFjO0FBQ2pCLEdBWE0sQ0FBUDtBQVlILENBYkQ7O0FBZWUsbUVBQUlyQyxJQUFKLEVBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9jb3JlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvY2FsZU1hbmFnZXIgZnJvbSBcIi4vbG9jYWxlbWFuYWdlclwiO1xyXG5cclxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcclxuaW1wb3J0IHtDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbi8vIGltcG9ydCBFbW90ZU1vZHVsZSBmcm9tIFwiLi9lbW90ZXNcIjtcclxuLy8gaW1wb3J0IFF1aWNrRW1vdGVNZW51IGZyb20gXCIuLi9idWlsdGlucy9lbW90ZW1lbnVcIjtcclxuaW1wb3J0IERPTU1hbmFnZXIgZnJvbSBcIi4vZG9tbWFuYWdlclwiO1xyXG5pbXBvcnQgUGx1Z2luTWFuYWdlciBmcm9tIFwiLi9wbHVnaW5tYW5hZ2VyXCI7XHJcbmltcG9ydCBUaGVtZU1hbmFnZXIgZnJvbSBcIi4vdGhlbWVtYW5hZ2VyXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0ICogYXMgQnVpbHRpbnMgZnJvbSBcImJ1aWx0aW5zXCI7XHJcbmltcG9ydCBNb2RhbHMgZnJvbSBcIi4uL3VpL21vZGFsc1wiO1xyXG5pbXBvcnQgUmVhY3RDb21wb25lbnRzIGZyb20gXCIuL3JlYWN0Y29tcG9uZW50c1wiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFzdG9yZVwiO1xyXG5pbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIi4vZGlzY29yZG1vZHVsZXNcIjtcclxuaW1wb3J0IENvbXBvbmVudFBhdGNoZXIgZnJvbSBcIi4vY29tcG9uZW50cGF0Y2hlclwiO1xyXG5cclxuXHJcbmNvbnN0IEd1aWxkQ2xhc3NlcyA9IERpc2NvcmRNb2R1bGVzLkd1aWxkQ2xhc3NlcztcclxuXHJcbmZ1bmN0aW9uIENvcmUoKSB7XHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLnNldENvbmZpZyA9IGZ1bmN0aW9uKGNvbmZpZykge1xyXG4gICAgT2JqZWN0LmFzc2lnbihDb25maWcsIGNvbmZpZyk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0ID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoQ29uZmlnLnZlcnNpb24gPCBDb25maWcubWluU3VwcG9ydGVkVmVyc2lvbikge1xyXG4gICAgICAgIE1vZGFscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIENvbmZpZy52ZXJzaW9uICsgXCIgKHlvdXIgdmVyc2lvbilcIiArIFwiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGxhdGVzdCBqcyAoXCIgKyBDb25maWcuYmJkVmVyc2lvbiArIFwiKS48YnI+PGJyPiBQbGVhc2UgZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5HaXRIdWI8L2E+XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGNvbnN0IGxhdGVzdExvY2FsVmVyc2lvbiA9IENvbmZpZy51cGRhdGVyID8gQ29uZmlnLnVwZGF0ZXIuTGF0ZXN0VmVyc2lvbiA6IENvbmZpZy5sYXRlc3RWZXJzaW9uO1xyXG4gICAgLy8gaWYgKGxhdGVzdExvY2FsVmVyc2lvbiA+IENvbmZpZy52ZXJzaW9uKSB7XHJcbiAgICAvLyAgICAgTW9kYWxzLmFsZXJ0KFwiVXBkYXRlIEF2YWlsYWJsZVwiLCBgXHJcbiAgICAvLyAgICAgICAgIEFuIHVwZGF0ZSBmb3IgQmFuZGFnZWRCRCBpcyBhdmFpbGFibGUgKCR7bGF0ZXN0TG9jYWxWZXJzaW9ufSkhIFBsZWFzZSBSZWluc3RhbGwhPGJyIC8+PGJyIC8+XHJcbiAgICAvLyAgICAgICAgIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+RG93bmxvYWQgSW5zdGFsbGVyPC9hPlxyXG4gICAgLy8gICAgIGApO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIERhdGFTdG9yZS5pbml0aWFsaXplKCk7XHJcbiAgICBhd2FpdCBMb2NhbGVNYW5hZ2VyLmluaXRpYWxpemUoKTtcclxuXHJcblxyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgU2V0dGluZ3NcIik7XHJcbiAgICBTZXR0aW5ncy5pbml0aWFsaXplKCk7XHJcblxyXG4gICAgRE9NTWFuYWdlci5pbml0aWFsaXplKCk7XHJcbiAgICBhd2FpdCB0aGlzLndhaXRGb3JHdWlsZHMoKTtcclxuICAgIFJlYWN0Q29tcG9uZW50cy5pbml0aWFsaXplKCk7XHJcbiAgICBDb21wb25lbnRQYXRjaGVyLmluaXRpYWxpemUoKTtcclxuICAgIGZvciAoY29uc3QgbW9kdWxlIGluIEJ1aWx0aW5zKSBCdWlsdGluc1ttb2R1bGVdLmluaXRpYWxpemUoKTtcclxuXHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgUGx1Z2luc1wiKTtcclxuICAgIGNvbnN0IHBsdWdpbkVycm9ycyA9IFBsdWdpbk1hbmFnZXIuaW5pdGlhbGl6ZSgpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBUaGVtZXNcIik7XHJcbiAgICBjb25zdCB0aGVtZUVycm9ycyA9IFRoZW1lTWFuYWdlci5pbml0aWFsaXplKCk7XHJcblxyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJSZW1vdmluZyBMb2FkaW5nIEljb25cIik7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYmQtbG9hZGVydjJcIilbMF0ucmVtb3ZlKCk7XHJcblxyXG4gICAgLy8gU2hvdyBsb2FkaW5nIGVycm9yc1xyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJDb2xsZWN0aW5nIFN0YXJ0dXAgRXJyb3JzXCIpO1xyXG4gICAgTW9kYWxzLnNob3dBZGRvbkVycm9ycyh7cGx1Z2luczogcGx1Z2luRXJyb3JzLCB0aGVtZXM6IHRoZW1lRXJyb3JzfSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS53YWl0Rm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gXCJjb21wbGV0ZVwiKSBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xyXG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gR3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZCA9IEd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBHdWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfSAuJHtndWlsZH0gLiR7YmxvYn1gKS5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZShDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjaGVja0Zvckd1aWxkcygpO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/core.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _localemanager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localemanager */ \"./src/modules/localemanager.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var builtins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! builtins */ \"./src/builtins/builtins.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _reactcomponents__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactcomponents */ \"./src/modules/reactcomponents.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _componentpatcher__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./componentpatcher */ \"./src/modules/componentpatcher.js\");\n\n\n // import EmoteModule from \"./emotes\";\n// import QuickEmoteMenu from \"../builtins/emotemenu\";\n\n\n\n\n\n\n\n\n\n\n\nconst GuildClasses = _discordmodules__WEBPACK_IMPORTED_MODULE_11__[\"default\"].GuildClasses;\n\nfunction Core() {}\n\nCore.prototype.setConfig = function (config) {\n Object.assign(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"], config);\n};\n\nCore.prototype.init = async function () {\n if (data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version < data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].minSupportedVersion) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(\"Not Supported\", \"BetterDiscord v\" + data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version + \" (your version)\" + \" is not supported by the latest js (\" + data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].bbdVersion + \").

Please download the latest version from GitHub\");\n return;\n }\n\n if (window.ED) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(\"Not Supported\", \"BandagedBD does not work with EnhancedDiscord. Please uninstall one of them.\");\n return;\n }\n\n if (window.WebSocket && window.WebSocket.name && window.WebSocket.name.includes(\"Patched\")) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(\"Not Supported\", \"BandagedBD does not work with Powercord. Please uninstall one of them.\");\n return;\n } // const latestLocalVersion = Config.updater ? Config.updater.LatestVersion : Config.latestVersion;\n // if (latestLocalVersion > Config.version) {\n // Modals.alert(\"Update Available\", `\n // An update for BandagedBD is available (${latestLocalVersion})! Please Reinstall!

\n // Download Installer\n // `);\n // }\n\n\n _datastore__WEBPACK_IMPORTED_MODULE_10__[\"default\"].initialize();\n await _localemanager__WEBPACK_IMPORTED_MODULE_0__[\"default\"].initialize();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing Settings\");\n _settingsmanager__WEBPACK_IMPORTED_MODULE_6__[\"default\"].initialize();\n _dommanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].initialize();\n await this.waitForGuilds();\n _reactcomponents__WEBPACK_IMPORTED_MODULE_9__[\"default\"].initialize();\n _componentpatcher__WEBPACK_IMPORTED_MODULE_12__[\"default\"].initialize();\n\n for (const module in builtins__WEBPACK_IMPORTED_MODULE_7__) builtins__WEBPACK_IMPORTED_MODULE_7__[module].initialize();\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Plugins\");\n const pluginErrors = _pluginmanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].initialize();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Themes\");\n const themeErrors = _thememanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].initialize();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Removing Loading Icon\");\n document.getElementsByClassName(\"bd-loaderv2\")[0].remove(); // Show loading errors\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Collecting Startup Errors\");\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].showAddonErrors({\n plugins: pluginErrors,\n themes: themeErrors\n }); // const previousVersion = DataStore.getBDData(\"version\");\n // if (bbdVersion > previousVersion) {\n // if (bbdChangelog) this.showChangelogModal(bbdChangelog);\n // DataStore.setBDData(\"version\", bbdVersion);\n // }\n};\n\nCore.prototype.waitForGuilds = function () {\n let timesChecked = 0;\n return new Promise(resolve => {\n const checkForGuilds = function () {\n timesChecked++;\n if (document.readyState != \"complete\") setTimeout(checkForGuilds, 100);\n const wrapper = GuildClasses.wrapper.split(\" \")[0];\n const guild = GuildClasses.listItem.split(\" \")[0];\n const blob = GuildClasses.blobContainer.split(\" \")[0];\n if (document.querySelectorAll(`.${wrapper} .${guild} .${blob}`).length > 0) return resolve(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].deferLoaded = true);else if (timesChecked >= 50) return resolve(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].deferLoaded = true);\n setTimeout(checkForGuilds, 100);\n };\n\n checkForGuilds();\n });\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new Core());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29yZS5qcz9iNmRlIl0sIm5hbWVzIjpbIkd1aWxkQ2xhc3NlcyIsIkRpc2NvcmRNb2R1bGVzIiwiQ29yZSIsInByb3RvdHlwZSIsInNldENvbmZpZyIsImNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsIkNvbmZpZyIsImluaXQiLCJ2ZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsIk1vZGFscyIsImFsZXJ0IiwiYmJkVmVyc2lvbiIsIndpbmRvdyIsIkVEIiwiV2ViU29ja2V0IiwibmFtZSIsImluY2x1ZGVzIiwiRGF0YVN0b3JlIiwiaW5pdGlhbGl6ZSIsIkxvY2FsZU1hbmFnZXIiLCJMb2dnZXIiLCJsb2ciLCJTZXR0aW5ncyIsIkRPTU1hbmFnZXIiLCJ3YWl0Rm9yR3VpbGRzIiwiUmVhY3RDb21wb25lbnRzIiwiQ29tcG9uZW50UGF0Y2hlciIsIm1vZHVsZSIsIkJ1aWx0aW5zIiwicGx1Z2luRXJyb3JzIiwiUGx1Z2luTWFuYWdlciIsInRoZW1lRXJyb3JzIiwiVGhlbWVNYW5hZ2VyIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwicmVtb3ZlIiwic2hvd0FkZG9uRXJyb3JzIiwicGx1Z2lucyIsInRoZW1lcyIsInRpbWVzQ2hlY2tlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2hlY2tGb3JHdWlsZHMiLCJyZWFkeVN0YXRlIiwic2V0VGltZW91dCIsIndyYXBwZXIiLCJzcGxpdCIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJkZWZlckxvYWRlZCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7Q0FFQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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T0FBTyxHQUFHaEQsWUFBWSxDQUFDZ0QsT0FBYixDQUFxQkMsS0FBckIsQ0FBMkIsR0FBM0IsRUFBZ0MsQ0FBaEMsQ0FBaEI7QUFDQSxZQUFNQyxLQUFLLEdBQUdsRCxZQUFZLENBQUNtRCxRQUFiLENBQXNCRixLQUF0QixDQUE0QixHQUE1QixFQUFpQyxDQUFqQyxDQUFkO0FBQ0EsWUFBTUcsSUFBSSxHQUFHcEQsWUFBWSxDQUFDcUQsYUFBYixDQUEyQkosS0FBM0IsQ0FBaUMsR0FBakMsRUFBc0MsQ0FBdEMsQ0FBYjtBQUNBLFVBQUliLFFBQVEsQ0FBQ2tCLGdCQUFULENBQTJCLElBQUdOLE9BQVEsS0FBSUUsS0FBTSxLQUFJRSxJQUFLLEVBQXpELEVBQTRERyxNQUE1RCxHQUFxRSxDQUF6RSxFQUE0RSxPQUFPWCxPQUFPLENBQUNwQywyQ0FBTSxDQUFDZ0QsV0FBUCxHQUFxQixJQUF0QixDQUFkLENBQTVFLEtBQ0ssSUFBSWQsWUFBWSxJQUFJLEVBQXBCLEVBQXdCLE9BQU9FLE9BQU8sQ0FBQ3BDLDJDQUFNLENBQUNnRCxXQUFQLEdBQXFCLElBQXRCLENBQWQ7QUFDN0JULGdCQUFVLENBQUNGLGNBQUQsRUFBaUIsR0FBakIsQ0FBVjtBQUNILEtBVEQ7O0FBV0FBLGtCQUFjO0FBQ2pCLEdBYk0sQ0FBUDtBQWNILENBaEJEOztBQWtCZSxtRUFBSTNDLElBQUosRUFBZiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL2NvcmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9jYWxlTWFuYWdlciBmcm9tIFwiLi9sb2NhbGVtYW5hZ2VyXCI7XHJcblxyXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuL2xvZ2dlclwiO1xyXG5pbXBvcnQge0NvbmZpZ30gZnJvbSBcImRhdGFcIjtcclxuLy8gaW1wb3J0IEVtb3RlTW9kdWxlIGZyb20gXCIuL2Vtb3Rlc1wiO1xyXG4vLyBpbXBvcnQgUXVpY2tFbW90ZU1lbnUgZnJvbSBcIi4uL2J1aWx0aW5zL2Vtb3RlbWVudVwiO1xyXG5pbXBvcnQgRE9NTWFuYWdlciBmcm9tIFwiLi9kb21tYW5hZ2VyXCI7XHJcbmltcG9ydCBQbHVnaW5NYW5hZ2VyIGZyb20gXCIuL3BsdWdpbm1hbmFnZXJcIjtcclxuaW1wb3J0IFRoZW1lTWFuYWdlciBmcm9tIFwiLi90aGVtZW1hbmFnZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5pbXBvcnQgKiBhcyBCdWlsdGlucyBmcm9tIFwiYnVpbHRpbnNcIjtcclxuaW1wb3J0IE1vZGFscyBmcm9tIFwiLi4vdWkvbW9kYWxzXCI7XHJcbmltcG9ydCBSZWFjdENvbXBvbmVudHMgZnJvbSBcIi4vcmVhY3Rjb21wb25lbnRzXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbmltcG9ydCBEaXNjb3JkTW9kdWxlcyBmcm9tIFwiLi9kaXNjb3JkbW9kdWxlc1wiO1xyXG5pbXBvcnQgQ29tcG9uZW50UGF0Y2hlciBmcm9tIFwiLi9jb21wb25lbnRwYXRjaGVyXCI7XHJcblxyXG5cclxuY29uc3QgR3VpbGRDbGFzc2VzID0gRGlzY29yZE1vZHVsZXMuR3VpbGRDbGFzc2VzO1xyXG5cclxuZnVuY3Rpb24gQ29yZSgpIHtcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUuc2V0Q29uZmlnID0gZnVuY3Rpb24oY29uZmlnKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKENvbmZpZywgY29uZmlnKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXQgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGlmIChDb25maWcudmVyc2lvbiA8IENvbmZpZy5taW5TdXBwb3J0ZWRWZXJzaW9uKSB7XHJcbiAgICAgICAgTW9kYWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgQ29uZmlnLnZlcnNpb24gKyBcIiAoeW91ciB2ZXJzaW9uKVwiICsgXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGF0ZXN0IGpzIChcIiArIENvbmZpZy5iYmRWZXJzaW9uICsgXCIpLjxicj48YnI+IFBsZWFzZSBkb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkdpdEh1YjwvYT5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cuRUQpIHtcclxuICAgICAgICBNb2RhbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggRW5oYW5jZWREaXNjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5XZWJTb2NrZXQgJiYgd2luZG93LldlYlNvY2tldC5uYW1lICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZS5pbmNsdWRlcyhcIlBhdGNoZWRcIikpIHtcclxuICAgICAgICBNb2RhbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggUG93ZXJjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBjb25zdCBsYXRlc3RMb2NhbFZlcnNpb24gPSBDb25maWcudXBkYXRlciA/IENvbmZpZy51cGRhdGVyLkxhdGVzdFZlcnNpb24gOiBDb25maWcubGF0ZXN0VmVyc2lvbjtcclxuICAgIC8vIGlmIChsYXRlc3RMb2NhbFZlcnNpb24gPiBDb25maWcudmVyc2lvbikge1xyXG4gICAgLy8gICAgIE1vZGFscy5hbGVydChcIlVwZGF0ZSBBdmFpbGFibGVcIiwgYFxyXG4gICAgLy8gICAgICAgICBBbiB1cGRhdGUgZm9yIEJhbmRhZ2VkQkQgaXMgYXZhaWxhYmxlICgke2xhdGVzdExvY2FsVmVyc2lvbn0pISBQbGVhc2UgUmVpbnN0YWxsITxiciAvPjxiciAvPlxyXG4gICAgLy8gICAgICAgICA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkRvd25sb2FkIEluc3RhbGxlcjwvYT5cclxuICAgIC8vICAgICBgKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBEYXRhU3RvcmUuaW5pdGlhbGl6ZSgpO1xyXG4gICAgYXdhaXQgTG9jYWxlTWFuYWdlci5pbml0aWFsaXplKCk7XHJcblxyXG5cclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgU2V0dGluZ3MuaW5pdGlhbGl6ZSgpO1xyXG5cclxuICAgIERPTU1hbmFnZXIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yR3VpbGRzKCk7XHJcbiAgICBSZWFjdENvbXBvbmVudHMuaW5pdGlhbGl6ZSgpO1xyXG4gICAgQ29tcG9uZW50UGF0Y2hlci5pbml0aWFsaXplKCk7XHJcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBpbiBCdWlsdGlucykgQnVpbHRpbnNbbW9kdWxlXS5pbml0aWFsaXplKCk7XHJcblxyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFBsdWdpbnNcIik7XHJcbiAgICBjb25zdCBwbHVnaW5FcnJvcnMgPSBQbHVnaW5NYW5hZ2VyLmluaXRpYWxpemUoKTtcclxuXHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgVGhlbWVzXCIpO1xyXG4gICAgY29uc3QgdGhlbWVFcnJvcnMgPSBUaGVtZU1hbmFnZXIuaW5pdGlhbGl6ZSgpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiUmVtb3ZpbmcgTG9hZGluZyBJY29uXCIpO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpWzBdLnJlbW92ZSgpO1xyXG5cclxuICAgIC8vIFNob3cgbG9hZGluZyBlcnJvcnNcclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiQ29sbGVjdGluZyBTdGFydHVwIEVycm9yc1wiKTtcclxuICAgIE1vZGFscy5zaG93QWRkb25FcnJvcnMoe3BsdWdpbnM6IHBsdWdpbkVycm9ycywgdGhlbWVzOiB0aGVtZUVycm9yc30pO1xyXG5cclxuICAgIC8vIGNvbnN0IHByZXZpb3VzVmVyc2lvbiA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJ2ZXJzaW9uXCIpO1xyXG4gICAgLy8gaWYgKGJiZFZlcnNpb24gPiBwcmV2aW91c1ZlcnNpb24pIHtcclxuICAgIC8vICAgICBpZiAoYmJkQ2hhbmdlbG9nKSB0aGlzLnNob3dDaGFuZ2Vsb2dNb2RhbChiYmRDaGFuZ2Vsb2cpO1xyXG4gICAgLy8gICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJ2ZXJzaW9uXCIsIGJiZFZlcnNpb24pO1xyXG4gICAgLy8gfVxyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUud2FpdEZvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IHRpbWVzQ2hlY2tlZCA9IDA7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdGltZXNDaGVja2VkKys7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9IFwiY29tcGxldGVcIikgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IEd1aWxkQ2xhc3Nlcy53cmFwcGVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgY29uc3QgZ3VpbGQgPSBHdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBibG9iID0gR3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn0gLiR7Z3VpbGR9IC4ke2Jsb2J9YCkubGVuZ3RoID4gMCkgcmV0dXJuIHJlc29sdmUoQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVzQ2hlY2tlZCA+PSA1MCkgcmV0dXJuIHJlc29sdmUoQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY2hlY2tGb3JHdWlsZHMoKTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IENvcmUoKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/core.js\n"); /***/ }), @@ -683,7 +695,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return BDEmote; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nconst TooltipWrapper = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByDisplayName(\"TooltipDeprecated\");\nclass BDEmote extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n shouldAnimate: !this.animateOnHover,\n isFavorite: this.props.isFavorite\n };\n this.onMouseEnter = this.onMouseEnter.bind(this);\n this.onMouseLeave = this.onMouseLeave.bind(this);\n this.onClick = this.onClick.bind(this);\n this.toggleFavorite = this.toggleFavorite.bind(this);\n }\n\n get animateOnHover() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"emotes\", \"general\", \"animateOnHover\");\n }\n\n get label() {\n return this.props.modifier ? `${this.props.name}:${this.props.modifier}` : this.props.name;\n }\n\n get modifierClass() {\n return this.props.modifier ? ` emote${this.props.modifier}` : \"\";\n }\n\n onMouseEnter() {\n if (!this.state.shouldAnimate && this.animateOnHover) this.setState({\n shouldAnimate: true\n }); // if (!this.state.isFavorite && EmoteMenu.favoriteEmotes[this.label]) this.setState({isFavorite: true});\n // else if (this.state.isFavorite && !EmoteMenu.favoriteEmotes[this.label]) this.setState({isFavorite: false});\n }\n\n onMouseLeave() {\n if (this.state.shouldAnimate && this.animateOnHover) this.setState({\n shouldAnimate: false\n });\n }\n\n onClick(e) {\n if (this.props.onClick) this.props.onClick(e);\n }\n\n toggleFavorite(e) {\n e.preventDefault();\n e.stopPropagation();\n if (this.state.isFavorite) modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].emit(\"emotes-favorite-removed\", this.label);else modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].emit(\"emotes-favorite-added\", this.label, this.props.url);\n this.setState({\n isFavorite: !this.state.isFavorite\n });\n }\n\n render() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(TooltipWrapper, {\n color: \"black\",\n position: \"top\",\n text: this.label,\n delay: 750\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"emotewrapper\" + (this.props.jumboable ? \" jumboable\" : \"\"),\n onMouseEnter: this.onMouseEnter,\n onMouseLeave: this.onMouseLeave,\n onClick: this.onClick\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"img\", {\n draggable: false,\n className: \"emote\" + this.modifierClass + (this.props.jumboable ? \" jumboable\" : \"\") + (!this.state.shouldAnimate ? \" stop-animation\" : \"\"),\n dataModifier: this.props.modifier,\n alt: this.label,\n src: this.props.url\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n className: \"fav\" + (this.state.isFavorite ? \" active\" : \"\"),\n title: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Emotes.favoriteAction,\n type: \"button\",\n onClick: this.toggleFavorite\n })));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Vtb3RlLmpzPzZjY2IiXSwibmFtZXMiOlsiVG9vbHRpcFdyYXBwZXIiLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5RGlzcGxheU5hbWUiLCJCREVtb3RlIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3RhdGUiLCJzaG91bGRBbmltYXRlIiwiYW5pbWF0ZU9uSG92ZXIiLCJpc0Zhdm9yaXRlIiwib25Nb3VzZUVudGVyIiwiYmluZCIsIm9uTW91c2VMZWF2ZSIsIm9uQ2xpY2siLCJ0b2dnbGVGYXZvcml0ZSIsIlNldHRpbmdzIiwiZ2V0IiwibGFiZWwiLCJtb2RpZmllciIsIm5hbWUiLCJtb2RpZmllckNsYXNzIiwic2V0U3RhdGUiLCJlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJFdmVudHMiLCJlbWl0IiwidXJsIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsImNvbG9yIiwicG9zaXRpb24iLCJ0ZXh0IiwiZGVsYXkiLCJjbGFzc05hbWUiLCJqdW1ib2FibGUiLCJkcmFnZ2FibGUiLCJkYXRhTW9kaWZpZXIiLCJhbHQiLCJzcmMiLCJ0aXRsZSIsIlN0cmluZ3MiLCJFbW90ZXMiLCJmYXZvcml0ZUFjdGlvbiIsInR5cGUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUEsTUFBTUEsY0FBYyxHQUFHQyxzREFBYyxDQUFDQyxnQkFBZixDQUFnQyxtQkFBaEMsQ0FBdkI7QUFFZSxNQUFNQyxPQUFOLFNBQXNCQyw2Q0FBSyxDQUFDQyxTQUE1QixDQUFzQztBQUNqREMsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBRUEsU0FBS0MsS0FBTCxHQUFhO0FBQ1RDLG1CQUFhLEVBQUUsQ0FBQyxLQUFLQyxjQURaO0FBRVRDLGdCQUFVLEVBQUUsS0FBS0osS0FBTCxDQUFXSTtBQUZkLEtBQWI7QUFLQSxTQUFLQyxZQUFMLEdB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LENBQVc4QixTQUFYLEdBQXVCLFlBQXZCLEdBQXNDLEVBQXRFLEtBQTZFLENBQUMsS0FBSzdCLEtBQUwsQ0FBV0MsYUFBWixHQUE0QixpQkFBNUIsR0FBZ0QsRUFBN0gsQ0FGWTtBQUd2QjhCLGtCQUFZLEVBQUUsS0FBS2hDLEtBQUwsQ0FBV2EsUUFIRjtBQUl2Qm9CLFNBQUcsRUFBRSxLQUFLckIsS0FKYTtBQUt2QnNCLFNBQUcsRUFBRSxLQUFLbEMsS0FBTCxDQUFXc0I7QUFMTyxLQUEzQixDQU5KLEVBYUl6Qiw2Q0FBSyxDQUFDMkIsYUFBTixDQUFvQixPQUFwQixFQUE2QjtBQUN6QkssZUFBUyxFQUFFLFNBQVMsS0FBSzVCLEtBQUwsQ0FBV0csVUFBWCxHQUF3QixTQUF4QixHQUFvQyxFQUE3QyxDQURjO0FBRXpCK0IsV0FBSyxFQUFFQywrQ0FBTyxDQUFDQyxNQUFSLENBQWVDLGNBRkc7QUFHekJDLFVBQUksRUFBRSxRQUhtQjtBQUl6Qi9CLGFBQU8sRUFBRSxLQUFLQztBQUpXLEtBQTdCLENBYkosQ0FORCxDQUFQO0FBMkJIOztBQTdFZ0QiLCJmaWxlIjoiLi9zcmMvdWkvZW1vdGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NldHRpbmdzLCBSZWFjdCwgV2VicGFja01vZHVsZXMsIEV2ZW50cywgU3RyaW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmNvbnN0IFRvb2x0aXBXcmFwcGVyID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIlRvb2x0aXBEZXByZWNhdGVkXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQkRFbW90ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgc2hvdWxkQW5pbWF0ZTogIXRoaXMuYW5pbWF0ZU9uSG92ZXIsXHJcbiAgICAgICAgICAgIGlzRmF2b3JpdGU6IHRoaXMucHJvcHMuaXNGYXZvcml0ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25Nb3VzZUVudGVyID0gdGhpcy5vbk1vdXNlRW50ZXIuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9uTW91c2VMZWF2ZSA9IHRoaXMub25Nb3VzZUxlYXZlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy50b2dnbGVGYXZvcml0ZSA9IHRoaXMudG9nZ2xlRmF2b3JpdGUuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYW5pbWF0ZU9uSG92ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIFNldHRpbmdzLmdldChcImVtb3Rlc1wiLCBcImdlbmVyYWxcIiwgXCJhbmltYXRlT25Ib3ZlclwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGFiZWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMubW9kaWZpZXIgPyBgJHt0aGlzLnByb3BzLm5hbWV9OiR7dGhpcy5wcm9wcy5tb2RpZmllcn1gIDogdGhpcy5wcm9wcy5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2RpZmllckNsYXNzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGlmaWVyID8gYCBlbW90ZSR7dGhpcy5wcm9wcy5tb2RpZmllcn1gIDogXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBvbk1vdXNlRW50ZXIoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNob3VsZEFuaW1hdGUgJiYgdGhpcy5hbmltYXRlT25Ib3ZlcikgdGhpcy5zZXRTdGF0ZSh7c2hvdWxkQW5pbWF0ZTogdHJ1ZX0pO1xyXG4gICAgICAgIC8vIGlmICghdGhpcy5zdGF0ZS5pc0Zhdm9yaXRlICYmIEVtb3RlTWVudS5mYXZvcml0ZUVtb3Rlc1t0aGlzLmxhYmVsXSkgdGhpcy5zZXRTdGF0ZSh7aXNGYXZvcml0ZTogdHJ1ZX0pO1xyXG4gICAgICAgIC8vIGVsc2UgaWYgKHRoaXMuc3RhdGUuaXNGYXZvcml0ZSAmJiAhRW1vdGVNZW51LmZhdm9yaXRlRW1vdGVzW3RoaXMubGFiZWxdKSB0aGlzLnNldFN0YXRlKHtpc0Zhdm9yaXRlOiBmYWxzZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTW91c2VMZWF2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zaG91bGRBbmltYXRlICYmIHRoaXMuYW5pbWF0ZU9uSG92ZXIpIHRoaXMuc2V0U3RhdGUoe3Nob3VsZEFuaW1hdGU6IGZhbHNlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljayhlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykgdGhpcy5wcm9wcy5vbkNsaWNrKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUZhdm9yaXRlKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5pc0Zhdm9yaXRlKSBFdmVudHMuZW1pdChcImVtb3Rlcy1mYXZvcml0ZS1yZW1vdmVkXCIsIHRoaXMubGFiZWwpO1xyXG4gICAgICAgIGVsc2UgRXZlbnRzLmVtaXQoXCJlbW90ZXMtZmF2b3JpdGUtYWRkZWRcIiwgdGhpcy5sYWJlbCwgdGhpcy5wcm9wcy51cmwpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2lzRmF2b3JpdGU6ICF0aGlzLnN0YXRlLmlzRmF2b3JpdGV9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXBwZXIsIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBcImJsYWNrXCIsXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJ0b3BcIixcclxuICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBkZWxheTogNzUwXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZW1vdGV3cmFwcGVyXCIgKyAodGhpcy5wcm9wcy5qdW1ib2FibGUgPyBcIiBqdW1ib2FibGVcIiA6IFwiXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcjogdGhpcy5vbk1vdXNlRW50ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlOiB0aGlzLm9uTW91c2VMZWF2ZSxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQ2xpY2tcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdnYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJlbW90ZVwiICsgdGhpcy5tb2RpZmllckNsYXNzICsgKHRoaXMucHJvcHMuanVtYm9hYmxlID8gXCIganVtYm9hYmxlXCIgOiBcIlwiKSArICghdGhpcy5zdGF0ZS5zaG91bGRBbmltYXRlID8gXCIgc3RvcC1hbmltYXRpb25cIiA6IFwiXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTW9kaWZpZXI6IHRoaXMucHJvcHMubW9kaWZpZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdDogdGhpcy5sYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiB0aGlzLnByb3BzLnVybFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJmYXZcIiArICh0aGlzLnN0YXRlLmlzRmF2b3JpdGUgPyBcIiBhY3RpdmVcIiA6IFwiXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogU3RyaW5ncy5FbW90ZXMuZmF2b3JpdGVBY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHRoaXMudG9nZ2xlRmF2b3JpdGVcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/emote.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return BDEmote; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nconst TooltipWrapper = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByDisplayName(\"Tooltip\");\nclass BDEmote extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n shouldAnimate: !this.animateOnHover,\n isFavorite: this.props.isFavorite\n };\n this.onMouseEnter = this.onMouseEnter.bind(this);\n this.onMouseLeave = this.onMouseLeave.bind(this);\n this.onClick = this.onClick.bind(this);\n this.toggleFavorite = this.toggleFavorite.bind(this);\n }\n\n get animateOnHover() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"emotes\", \"general\", \"animateOnHover\");\n }\n\n get label() {\n return this.props.modifier ? `${this.props.name}:${this.props.modifier}` : this.props.name;\n }\n\n get modifierClass() {\n return this.props.modifier ? ` emote${this.props.modifier}` : \"\";\n }\n\n onMouseEnter() {\n if (!this.state.shouldAnimate && this.animateOnHover) this.setState({\n shouldAnimate: true\n }); // if (!this.state.isFavorite && EmoteMenu.favoriteEmotes[this.label]) this.setState({isFavorite: true});\n // else if (this.state.isFavorite && !EmoteMenu.favoriteEmotes[this.label]) this.setState({isFavorite: false});\n }\n\n onMouseLeave() {\n if (this.state.shouldAnimate && this.animateOnHover) this.setState({\n shouldAnimate: false\n });\n }\n\n onClick(e) {\n if (this.props.onClick) this.props.onClick(e);\n }\n\n toggleFavorite(e) {\n e.preventDefault();\n e.stopPropagation();\n if (this.state.isFavorite) modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].emit(\"emotes-favorite-removed\", this.label);else modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].emit(\"emotes-favorite-added\", this.label, this.props.url);\n this.setState({\n isFavorite: !this.state.isFavorite\n });\n }\n\n render() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(TooltipWrapper, {\n color: \"black\",\n position: \"top\",\n text: this.label,\n delay: 750\n }, childProps => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", Object.assign({\n className: \"emotewrapper\" + (this.props.jumboable ? \" jumboable\" : \"\"),\n onMouseEnter: this.onMouseEnter,\n onMouseLeave: this.onMouseLeave,\n onClick: this.onClick\n }, childProps), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"img\", {\n draggable: false,\n className: \"emote\" + this.modifierClass + (this.props.jumboable ? \" jumboable\" : \"\") + (!this.state.shouldAnimate ? \" stop-animation\" : \"\"),\n dataModifier: this.props.modifier,\n alt: this.label,\n src: this.props.url\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n className: \"fav\" + (this.state.isFavorite ? \" active\" : \"\"),\n title: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Emotes.favoriteAction,\n type: \"button\",\n onClick: this.toggleFavorite\n }));\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Vtb3RlLmpzPzZjY2IiXSwibmFtZXMiOlsiVG9vbHRpcFdyYXBwZXIiLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5RGlzcGxheU5hbWUiLCJCREVtb3RlIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3RhdGUiLCJzaG91bGRBbmltYXRlIiwiYW5pbWF0ZU9uSG92ZXIiLCJpc0Zhdm9yaXRlIiwib25Nb3VzZUVudGVyIiwiYmluZCIsIm9uTW91c2VMZWF2ZSIsIm9uQ2xpY2siLCJ0b2dnbGVGYXZvcml0ZSIsIlNldHRpbmdzIiwiZ2V0IiwibGFiZWwiLCJtb2RpZmllciIsIm5hbWUiLCJtb2RpZmllckNsYXNzIiwic2V0U3RhdGUiLCJlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJFdmVudHMiLCJlbWl0IiwidXJsIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsImNvbG9yIiwicG9zaXRpb24iLCJ0ZXh0IiwiZGVsYXkiLCJjaGlsZFByb3BzIiwiT2JqZWN0IiwiYXNzaWduIiwiY2xhc3NOYW1lIiwianVtYm9hYmxlIiwiZHJhZ2dhYmxlIiwiZGF0YU1vZGlmaWVyIiwiYWx0Iiwic3JjIiwidGl0bGUiLCJTdHJpbmdzIiwiRW1vdGVzIiwiZmF2b3JpdGVBY3Rpb24iLCJ0eXBlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBLE1BQU1BLGNBQWMsR0FBR0Msc0RBQWMsQ0FBQ0MsZ0JBQWYsQ0FBZ0MsU0FBaEMsQ0FBdkI7QUFFZSxNQUFNQyxPQUFOLFNBQXNCQyw2Q0FBSyxDQUFDQyxTQUE1QixDQUFzQztBQUNqREMsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBRUEsU0FBS0MsS0FBTCxHQUFhO0FBQ1RDLG1CQUFhLEVBQUUsQ0FBQyxLQUFLQyxjQURaO0FBRVRDLGdCQUFVLEVBQUUsS0FBS0osS0FBTCxDQUFX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QUMyQixhQUFOLENBQW9CLEtBQXBCLEVBQTJCO0FBQ3ZCVSxpQkFBUyxFQUFFLEtBRFk7QUFFdkJGLGlCQUFTLEVBQUUsVUFBVSxLQUFLakIsYUFBZixJQUFnQyxLQUFLZixLQUFMLENBQVdpQyxTQUFYLEdBQXVCLFlBQXZCLEdBQXNDLEVBQXRFLEtBQTZFLENBQUMsS0FBS2hDLEtBQUwsQ0FBV0MsYUFBWixHQUE0QixpQkFBNUIsR0FBZ0QsRUFBN0gsQ0FGWTtBQUd2QmlDLG9CQUFZLEVBQUUsS0FBS25DLEtBQUwsQ0FBV2EsUUFIRjtBQUl2QnVCLFdBQUcsRUFBRSxLQUFLeEIsS0FKYTtBQUt2QnlCLFdBQUcsRUFBRSxLQUFLckMsS0FBTCxDQUFXc0I7QUFMTyxPQUEzQixDQU5HLEVBYUh6Qiw2Q0FBSyxDQUFDMkIsYUFBTixDQUFvQixPQUFwQixFQUE2QjtBQUN6QlEsaUJBQVMsRUFBRSxTQUFTLEtBQUsvQixLQUFMLENBQVdHLFVBQVgsR0FBd0IsU0FBeEIsR0FBb0MsRUFBN0MsQ0FEYztBQUV6QmtDLGFBQUssRUFBRUMsK0NBQU8sQ0FBQ0MsTUFBUixDQUFlQyxjQUZHO0FBR3pCQyxZQUFJLEVBQUUsUUFIbUI7QUFJekJsQyxlQUFPLEVBQUUsS0FBS0M7QUFKVyxPQUE3QixDQWJHLENBQVA7QUFvQkgsS0EzQkUsQ0FBUDtBQTRCSDs7QUE5RWdEIiwiZmlsZSI6Ii4vc3JjL3VpL2Vtb3RlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZXR0aW5ncywgUmVhY3QsIFdlYnBhY2tNb2R1bGVzLCBFdmVudHMsIFN0cmluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5jb25zdCBUb29sdGlwV3JhcHBlciA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5RGlzcGxheU5hbWUoXCJUb29sdGlwXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQkRFbW90ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgc2hvdWxkQW5pbWF0ZTogIXRoaXMuYW5pbWF0ZU9uSG92ZXIsXHJcbiAgICAgICAgICAgIGlzRmF2b3JpdGU6IHRoaXMucHJvcHMuaXNGYXZvcml0ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25Nb3VzZUVudGVyID0gdGhpcy5vbk1vdXNlRW50ZXIuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9uTW91c2VMZWF2ZSA9IHRoaXMub25Nb3VzZUxlYXZlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy50b2dnbGVGYXZvcml0ZSA9IHRoaXMudG9nZ2xlRmF2b3JpdGUuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYW5pbWF0ZU9uSG92ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIFNldHRpbmdzLmdldChcImVtb3Rlc1wiLCBcImdlbmVyYWxcIiwgXCJhbmltYXRlT25Ib3ZlclwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGFiZWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMubW9kaWZpZXIgPyBgJHt0aGlzLnByb3BzLm5hbWV9OiR7dGhpcy5wcm9wcy5tb2RpZmllcn1gIDogdGhpcy5wcm9wcy5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2RpZmllckNsYXNzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGlmaWVyID8gYCBlbW90ZSR7dGhpcy5wcm9wcy5tb2RpZmllcn1gIDogXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBvbk1vdXNlRW50ZXIoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNob3VsZEFuaW1hdGUgJiYgdGhpcy5hbmltYXRlT25Ib3ZlcikgdGhpcy5zZXRTdGF0ZSh7c2hvdWxkQW5pbWF0ZTogdHJ1ZX0pO1xyXG4gICAgICAgIC8vIGlmICghdGhpcy5zdGF0ZS5pc0Zhdm9yaXRlICYmIEVtb3RlTWVudS5mYXZvcml0ZUVtb3Rlc1t0aGlzLmxhYmVsXSkgdGhpcy5zZXRTdGF0ZSh7aXNGYXZvcml0ZTogdHJ1ZX0pO1xyXG4gICAgICAgIC8vIGVsc2UgaWYgKHRoaXMuc3RhdGUuaXNGYXZvcml0ZSAmJiAhRW1vdGVNZW51LmZhdm9yaXRlRW1vdGVzW3RoaXMubGFiZWxdKSB0aGlzLnNldFN0YXRlKHtpc0Zhdm9yaXRlOiBmYWxzZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTW91c2VMZWF2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zaG91bGRBbmltYXRlICYmIHRoaXMuYW5pbWF0ZU9uSG92ZXIpIHRoaXMuc2V0U3RhdGUoe3Nob3VsZEFuaW1hdGU6IGZhbHNlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljayhlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykgdGhpcy5wcm9wcy5vbkNsaWNrKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUZhdm9yaXRlKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5pc0Zhdm9yaXRlKSBFdmVudHMuZW1pdChcImVtb3Rlcy1mYXZvcml0ZS1yZW1vdmVkXCIsIHRoaXMubGFiZWwpO1xyXG4gICAgICAgIGVsc2UgRXZlbnRzLmVtaXQoXCJlbW90ZXMtZmF2b3JpdGUtYWRkZWRcIiwgdGhpcy5sYWJlbCwgdGhpcy5wcm9wcy51cmwpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2lzRmF2b3JpdGU6ICF0aGlzLnN0YXRlLmlzRmF2b3JpdGV9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXBwZXIsIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBcImJsYWNrXCIsXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJ0b3BcIixcclxuICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBkZWxheTogNzUwXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChjaGlsZFByb3BzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZW1vdGV3cmFwcGVyXCIgKyAodGhpcy5wcm9wcy5qdW1ib2FibGUgPyBcIiBqdW1ib2FibGVcIiA6IFwiXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcjogdGhpcy5vbk1vdXNlRW50ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlOiB0aGlzLm9uTW91c2VMZWF2ZSxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQ2xpY2tcclxuICAgICAgICAgICAgICAgIH0sIGNoaWxkUHJvcHMpLFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZW1vdGVcIiArIHRoaXMubW9kaWZpZXJDbGFzcyArICh0aGlzLnByb3BzLmp1bWJvYWJsZSA/IFwiIGp1bWJvYWJsZVwiIDogXCJcIikgKyAoIXRoaXMuc3RhdGUuc2hvdWxkQW5pbWF0ZSA/IFwiIHN0b3AtYW5pbWF0aW9uXCIgOiBcIlwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1vZGlmaWVyOiB0aGlzLnByb3BzLm1vZGlmaWVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbHQ6IHRoaXMubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogdGhpcy5wcm9wcy51cmxcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZmF2XCIgKyAodGhpcy5zdGF0ZS5pc0Zhdm9yaXRlID8gXCIgYWN0aXZlXCIgOiBcIlwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFN0cmluZ3MuRW1vdGVzLmZhdm9yaXRlQWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLnRvZ2dsZUZhdm9yaXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/emote.js\n"); /***/ }), @@ -695,7 +707,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./window */ \"./src/ui/floating/window.jsx\");\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n\n\n\nclass FloatingWindowContainer extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n windows: []\n };\n }\n\n render() {\n return this.state.windows.map(window => modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_window__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _extends({}, window, {\n close: this.close.bind(this, window.id)\n }), window.children));\n }\n\n open(window) {\n this.setState({\n windows: [...this.state.windows, window]\n });\n }\n\n close(id) {\n this.setState({\n windows: this.state.windows.filter(w => {\n if (w.id == id && w.onClose) w.onClose();\n return w.id != id;\n })\n });\n }\n\n static get id() {\n return \"floating-windows\";\n }\n\n static get root() {\n if (this._root) return this._root;\n const container = document.createElement(\"div\");\n container.id = this.id;\n document.body.append(container);\n return this._root = container;\n }\n\n}\n\nconst containerRef = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\nconst container = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(FloatingWindowContainer, {\n ref: containerRef\n});\nconst App = modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].findInReactTree(modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].getReactInstance(document.querySelector(\".app-19_DXt\")), m => m && m.type && m.type.displayName && m.type.displayName == \"App\");\nmodules__WEBPACK_IMPORTED_MODULE_0__[\"Patcher\"].after(\"FloatingContainer\", App.type.prototype, \"render\", (thisObject, args, returnValue) => {\n const group = modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].findInRenderTree(returnValue, m => m && m[6] && m[6].type && m[6].type.displayName == \"LayerContainer\", {\n walkable: [\"children\", \"props\"]\n });\n group.push(container);\n});\nApp.stateNode.forceUpdate();\n/* harmony default export */ __webpack_exports__[\"default\"] = (containerRef.current);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Zsb2F0aW5nL2NvbnRhaW5lci5qc3g/MTU2OSJdLCJuYW1lcyI6WyJGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwid2luZG93cyIsInJlbmRlciIsIm1hcCIsIndpbmRvdyIsImNsb3NlIiwiYmluZCIsImlkIiwiY2hpbGRyZW4iLCJvcGVuIiwic2V0U3RhdGUiLCJmaWx0ZXIiLCJ3Iiwib25DbG9zZSIsInJvb3QiLCJfcm9vdCIsImNvbnRhaW5lciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImJvZHkiLCJhcHBlbmQiLCJjb250YWluZXJSZWYiLCJjcmVhdGVSZWYiLCJBcHAiLCJVdGlsaXRpZXMiLCJmaW5kSW5SZWFjdFRyZWUiLCJnZXRSZWFjdEluc3RhbmNlIiwicXVlcnlTZWxlY3RvciIsIm0iLCJ0eXBlIiwiZGlzcGxheU5hbWUiLCJQYXRjaGVyIiwiYWZ0ZXIiLCJwcm90b3R5cGUiLCJ0aGlzT2JqZWN0IiwiYXJncyIsInJldHVyblZhbHVlIiwiZ3JvdXAiLCJmaW5kSW5SZW5kZXJUcmVlIiwid2Fsa2FibGUiLCJwdXNoIiwic3RhdGVOb2RlIiwiZm9yY2VVcGRhdGUiLCJjdXJyZW50Il0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBRUE7O0FBRUEsTUFBTUEsdUJBQU4sU0FBc0NDLDZDQUFLLENBQUNDLFNBQTVDLENBQXNEO0FBRWxEQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxLQUFMLEdBQWE7QUFBQ0MsYUFBTyxFQUFFO0FBQVYsS0FBYjtBQUNIOztBQUVEQyxRQUFNLEdBQUc7QUFDTCxXQUFPLEtBQUtGLEtBQUwsQ0FBV0MsT0FBWCxDQUFtQkUsR0FBbkIsQ0FBdUJDLE1BQU0sSUFDaEMsNERBQUMsK0NBQUQsZUFBb0JBLE1BQXBCO0FBQTRCLFdBQUssRUFBRSxLQUFLQyxLQUFMLENBQVdDLElBQVgsQ0FBZ0IsSUFBaEIsRUFBc0JGLE1BQU0sQ0FBQ0csRUFBN0I7QUFBbkMsUUFDU0gsTUFBTSxDQUFDSSxRQURoQixDQURHLENBQVA7QUFLSDs7QUFFREMsTUFBSSxDQUFDTCxNQUFELEVBQVM7QUFDVCxTQUFLTSxRQUFMLENBQWM7QUFDVlQsYUFBTyxFQUFFLENBQUMsR0FBRyxLQUFLRCxLQUFMLENBQVdDLE9BQWYsRUFBd0JHLE1BQXhCO0FBREMsS0FBZDtBQUdIOztBQUVEQyxPQUFLLENBQUNFLEVBQUQsRUFBSztBQUNOLFNBQUtHLFFBQUwsQ0FBYztBQUNWVCxhQUFPLEVBQUUsS0FBS0QsS0FBTCxDQUFXQyxPQUFYLENBQW1CVSxNQUFuQixDQUEwQkMsQ0FBQyxJQUFJO0FBQ3BDLFlBQUlBLENBQUMsQ0FBQ0wsRUFBRixJQUFRQSxFQUFSLElBQWNLLENBQUMsQ0FBQ0MsT0FBcEIsRUFBNkJELENBQUMsQ0FBQ0MsT0FBRjtBQUM3QixlQUFPRCxDQUFDLENBQUNMLEVBQUYsSUFBUUEsRUFBZjtBQUNILE9BSFE7QUFEQyxLQUFkO0FBTUg7O0FBRUQsYUFBV0EsRUFBWCxHQUFnQjtBQUFDLFdBQU8sa0JBQVA7QUFBMkI7O0FBQzVDLGFBQVdPLElBQVgsR0FBa0I7QUFDZCxRQUFJLEtBQUtDLEtBQVQsRUFBZ0IsT0FBTyxLQUFLQSxLQUFaO0FBQ2hCLFVBQU1DLFNBQVMsR0FBR0MsUUFBUSxDQUFDQyxhQUFULENBQXVCLEtBQXZCLENBQWxCO0FBQ0FGLGFBQVMsQ0FBQ1QsRUFBVixHQUFlLEtBQUtBLEVBQXBCO0FBQ0FVLFlBQVEsQ0FBQ0UsSUFBVCxDQUFjQyxNQUFkLENBQXFCSixTQUFyQjtBQUNBLFdBQU8sS0FBS0QsS0FBTCxHQUFhQyxTQUFwQjtBQUNIOztBQXJDaUQ7O0FBd0N0RCxNQUFNSyxZQUFZLEdBQUd6Qiw2Q0FBSyxDQUFDMEIsU0FBTixFQUFyQjtBQUNBLE1BQU1OLFNBQVMsR0FBRyw0REFBQyx1QkFBRDtBQUF5QixLQUFHLEVBQUVLO0FBQTlCLEVBQWxCO0FBQ0EsTUFBTUUsR0FBRyxHQUFHQyxpREFBUyxDQUFDQyxlQUFWLENBQTBCRCxpREFBUyxDQUFDRSxnQkFBVixDQUEyQlQsUUFBUSxDQUFDVSxhQUFULENBQXVCLGFBQXZCLENBQTNCLENBQTFCLEVBQTZGQyxDQUFDLElBQUlBLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxJQUFQLElBQWVELENBQUMsQ0FBQ0MsSUFBRixDQUFPQyxXQUF0QixJQUFxQ0YsQ0FBQyxDQUFDQyxJQUFGLENBQU9DLFdBQVAsSUFBc0IsS0FBN0osQ0FBWjtBQUNBQywrQ0FBTyxDQUFDQyxLQUFSLENBQWMsbUJBQWQsRUFBbUNULEdBQUcsQ0FBQ00sSUFBSixDQUFTSSxTQUE1QyxFQUF1RCxRQUF2RCxFQUFpRSxDQUFDQyxVQUFELEVBQWFDLElBQWIsRUFBbUJDLFdBQW5CLEtBQW1DO0FBQ2hHLFFBQU1DLEtBQUssR0FBR2IsaURBQVMsQ0FBQ2MsZ0JBQVYsQ0FBMkJGLFdBQTNCLEVBQXdDUixDQUFDLElBQUlBLENBQUMsSUFBSUEsQ0FBQyxDQUFDLENBQUQsQ0FBTixJQUFhQSxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUtDLElBQWxCLElBQTBCRCxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUtDLElBQUwsQ0FBVUMsV0FBVixJQUF5QixnQkFBaEcsRUFBa0g7QUFBQ1MsWUFBUSxFQUFFLENBQUMsVUFBRCxFQUFhLE9BQWI7QUFBWCxHQUFsSCxDQUFkO0FBQ0FGLE9BQUssQ0FBQ0csSUFBTixDQUFXeEIsU0FBWDtBQUNILENBSEQ7QUFJQU8sR0FBRyxDQUFDa0IsU0FBSixDQUFjQyxXQUFkO0FBQ2VyQiwyRUFBWSxDQUFDc0IsT0FBNUIiLCJmaWxlIjoiLi9zcmMvdWkvZmxvYXRpbmcvY29udGFpbmVyLmpzeC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3QsIFV0aWxpdGllcywgUGF0Y2hlcn0gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBGbG9hdGluZ1dpbmRvdyBmcm9tIFwiLi93aW5kb3dcIjtcclxuXHJcbmNsYXNzIEZsb2F0aW5nV2luZG93Q29udGFpbmVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge3dpbmRvd3M6IFtdfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUud2luZG93cy5tYXAod2luZG93ID0+XHJcbiAgICAgICAgICAgIDxGbG9hdGluZ1dpbmRvdyB7Li4ud2luZG93fSBjbG9zZT17dGhpcy5jbG9zZS5iaW5kKHRoaXMsIHdpbmRvdy5pZCl9PlxyXG4gICAgICAgICAgICAgICAgICAgIHt3aW5kb3cuY2hpbGRyZW59XHJcbiAgICAgICAgICAgIDwvRmxvYXRpbmdXaW5kb3c+XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuKHdpbmRvdykge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB3aW5kb3dzOiBbLi4udGhpcy5zdGF0ZS53aW5kb3dzLCB3aW5kb3ddXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoaWQpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgd2luZG93czogdGhpcy5zdGF0ZS53aW5kb3dzLmZpbHRlcih3ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh3LmlkID09IGlkICYmIHcub25DbG9zZSkgdy5vbkNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdy5pZCAhPSBpZDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGlkKCkge3JldHVybiBcImZsb2F0aW5nLXdpbmRvd3NcIjt9XHJcbiAgICBzdGF0aWMgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Jvb3QpIHJldHVybiB0aGlzLl9yb290O1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgY29udGFpbmVyLmlkID0gdGhpcy5pZDtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250YWluZXIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yb290ID0gY29udGFpbmVyO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBjb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuY29uc3QgY29udGFpbmVyID0gPEZsb2F0aW5nV2luZG93Q29udGFpbmVyIHJlZj17Y29udGFpbmVyUmVmfSAvPjtcclxuY29uc3QgQXBwID0gVXRpbGl0aWVzLmZpbmRJblJlYWN0VHJlZShVdGlsaXRpZXMuZ2V0UmVhY3RJbnN0YW5jZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmFwcC0xOV9EWHRcIikpLCBtID0+IG0gJiYgbS50eXBlICYmIG0udHlwZS5kaXNwbGF5TmFtZSAmJiBtLnR5cGUuZGlzcGxheU5hbWUgPT0gXCJBcHBcIik7XHJcblBhdGNoZXIuYWZ0ZXIoXCJGbG9hdGluZ0NvbnRhaW5lclwiLCBBcHAudHlwZS5wcm90b3R5cGUsIFwicmVuZGVyXCIsICh0aGlzT2JqZWN0LCBhcmdzLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgY29uc3QgZ3JvdXAgPSBVdGlsaXRpZXMuZmluZEluUmVuZGVyVHJlZShyZXR1cm5WYWx1ZSwgbSA9PiBtICYmIG1bNl0gJiYgbVs2XS50eXBlICYmIG1bNl0udHlwZS5kaXNwbGF5TmFtZSA9PSBcIkxheWVyQ29udGFpbmVyXCIsIHt3YWxrYWJsZTogW1wiY2hpbGRyZW5cIiwgXCJwcm9wc1wiXX0pO1xyXG4gICAgZ3JvdXAucHVzaChjb250YWluZXIpO1xyXG59KTtcclxuQXBwLnN0YXRlTm9kZS5mb3JjZVVwZGF0ZSgpO1xyXG5leHBvcnQgZGVmYXVsdCBjb250YWluZXJSZWYuY3VycmVudDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/floating/container.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./window */ \"./src/ui/floating/window.jsx\");\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n\n\n\nclass FloatingWindowContainer extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n windows: []\n };\n }\n\n render() {\n return this.state.windows.map(window => modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_window__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _extends({}, window, {\n close: this.close.bind(this, window.id)\n }), window.children));\n }\n\n open(window) {\n this.setState({\n windows: [...this.state.windows, window]\n });\n }\n\n close(id) {\n this.setState({\n windows: this.state.windows.filter(w => {\n if (w.id == id && w.onClose) w.onClose();\n return w.id != id;\n })\n });\n }\n\n static get id() {\n return \"floating-windows\";\n }\n\n static get root() {\n if (this._root) return this._root;\n const container = document.createElement(\"div\");\n container.id = this.id;\n document.body.append(container);\n return this._root = container;\n }\n\n}\n\nconst containerRef = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef(); // const container = ;\n// const App = Utilities.findInReactTree(Utilities.getReactInstance(document.querySelector(\".app-19_DXt\")), m => m && m.type && m.type.displayName && m.type.displayName == \"App\");\n// Patcher.after(\"FloatingContainer\", App.type.prototype, \"render\", (thisObject, args, returnValue) => {\n// const group = Utilities.findInRenderTree(returnValue, m => m && m[6] && m[6].type && m[6].type.displayName == \"LayerContainer\", {walkable: [\"children\", \"props\"]});\n// group.push(container);\n// });\n// App.stateNode.forceUpdate();\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (containerRef.current);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Zsb2F0aW5nL2NvbnRhaW5lci5qc3g/MTU2OSJdLCJuYW1lcyI6WyJGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwid2luZG93cyIsInJlbmRlciIsIm1hcCIsIndpbmRvdyIsImNsb3NlIiwiYmluZCIsImlkIiwiY2hpbGRyZW4iLCJvcGVuIiwic2V0U3RhdGUiLCJmaWx0ZXIiLCJ3Iiwib25DbG9zZSIsInJvb3QiLCJfcm9vdCIsImNvbnRhaW5lciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImJvZHkiLCJhcHBlbmQiLCJjb250YWluZXJSZWYiLCJjcmVhdGVSZWYiLCJjdXJyZW50Il0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBRUE7O0FBRUEsTUFBTUEsdUJBQU4sU0FBc0NDLDZDQUFLLENBQUNDLFNBQTVDLENBQXNEO0FBRWxEQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxLQUFMLEdBQWE7QUFBQ0MsYUFBTyxFQUFFO0FBQVYsS0FBYjtBQUNIOztBQUVEQyxRQUFNLEdBQUc7QUFDTCxXQUFPLEtBQUtGLEtBQUwsQ0FBV0MsT0FBWCxDQUFtQkUsR0FBbkIsQ0FBdUJDLE1BQU0sSUFDaEMsNERBQUMsK0NBQUQsZUFBb0JBLE1BQXBCO0FBQTRCLFdBQUssRUFBRSxLQUFLQyxLQUFMLENBQVdDLElBQVgsQ0FBZ0IsSUFBaEIsRUFBc0JGLE1BQU0sQ0FBQ0csRUFBN0I7QUFBbkMsUUFDU0gsTUFBTSxDQUFDSSxRQURoQixDQURHLENBQVA7QUFLSDs7QUFFREMsTUFBSSxDQUFDTCxNQUFELEVBQVM7QUFDVCxTQUFLTSxRQUFMLENBQWM7QUFDVlQsYUFBTyxFQUFFLENBQUMsR0FBRyxLQUFLRCxLQUFMLENBQVdDLE9BQWYsRUFBd0JHLE1BQXhCO0FBREMsS0FBZDtBQUdIOztBQUVEQyxPQUFLLENBQUNFLEVBQUQsRUFBSztBQUNOLFNBQUtHLFFBQUwsQ0FBYztBQUNWVCxhQUFPLEVBQUUsS0FBS0QsS0FBTCxDQUFXQyxPQUFYLENBQW1CVSxNQUFuQixDQUEwQkMsQ0FBQyxJQUFJO0FBQ3BDLFlBQUlBLENBQUMsQ0FBQ0wsRUFBRixJQUFRQSxFQUFSLElBQWNLLENBQUMsQ0FBQ0MsT0FBcEIsRUFBNkJELENBQUMsQ0FBQ0MsT0FBRjtBQUM3QixlQUFPRCxDQUFDLENBQUNMLEVBQUYsSUFBUUEsRUFBZjtBQUNILE9BSFE7QUFEQyxLQUFkO0FBTUg7O0FBRUQsYUFBV0EsRUFBWCxHQUFnQjtBQUFDLFdBQU8sa0JBQVA7QUFBMkI7O0FBQzVDLGFBQVdPLElBQVgsR0FBa0I7QUFDZCxRQUFJLEtBQUtDLEtBQVQsRUFBZ0IsT0FBTyxLQUFLQSxLQUFaO0FBQ2hCLFVBQU1DLFNBQVMsR0FBR0MsUUFBUSxDQUFDQyxhQUFULENBQXVCLEtBQXZCLENBQWxCO0FBQ0FGLGFBQVMsQ0FBQ1QsRUFBVixHQUFlLEtBQUtBLEVBQXBCO0FBQ0FVLFlBQVEsQ0FBQ0UsSUFBVCxDQUFjQyxNQUFkLENBQXFCSixTQUFyQjtBQUNBLFdBQU8sS0FBS0QsS0FBTCxHQUFhQyxTQUFwQjtBQUNIOztBQXJDaUQ7O0FBd0N0RCxNQUFNSyxZQUFZLEdBQUd6Qiw2Q0FBSyxDQUFDMEIsU0FBTixFQUFyQixDLENBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ2VELDJFQUFZLENBQUNFLE9BQTVCIiwiZmlsZSI6Ii4vc3JjL3VpL2Zsb2F0aW5nL2NvbnRhaW5lci5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0LCBVdGlsaXRpZXMsIFBhdGNoZXJ9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQgRmxvYXRpbmdXaW5kb3cgZnJvbSBcIi4vd2luZG93XCI7XHJcblxyXG5jbGFzcyBGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHt3aW5kb3dzOiBbXX07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLndpbmRvd3MubWFwKHdpbmRvdyA9PlxyXG4gICAgICAgICAgICA8RmxvYXRpbmdXaW5kb3cgey4uLndpbmRvd30gY2xvc2U9e3RoaXMuY2xvc2UuYmluZCh0aGlzLCB3aW5kb3cuaWQpfT5cclxuICAgICAgICAgICAgICAgICAgICB7d2luZG93LmNoaWxkcmVufVxyXG4gICAgICAgICAgICA8L0Zsb2F0aW5nV2luZG93PlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb3Blbih3aW5kb3cpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgd2luZG93czogWy4uLnRoaXMuc3RhdGUud2luZG93cywgd2luZG93XVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKGlkKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHdpbmRvd3M6IHRoaXMuc3RhdGUud2luZG93cy5maWx0ZXIodyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAody5pZCA9PSBpZCAmJiB3Lm9uQ2xvc2UpIHcub25DbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHcuaWQgIT0gaWQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBpZCgpIHtyZXR1cm4gXCJmbG9hdGluZy13aW5kb3dzXCI7fVxyXG4gICAgc3RhdGljIGdldCByb290KCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9yb290KSByZXR1cm4gdGhpcy5fcm9vdDtcclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAgIGNvbnRhaW5lci5pZCA9IHRoaXMuaWQ7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdCA9IGNvbnRhaW5lcjtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcbi8vIGNvbnN0IGNvbnRhaW5lciA9IDxGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciByZWY9e2NvbnRhaW5lclJlZn0gLz47XHJcbi8vIGNvbnN0IEFwcCA9IFV0aWxpdGllcy5maW5kSW5SZWFjdFRyZWUoVXRpbGl0aWVzLmdldFJlYWN0SW5zdGFuY2UoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5hcHAtMTlfRFh0XCIpKSwgbSA9PiBtICYmIG0udHlwZSAmJiBtLnR5cGUuZGlzcGxheU5hbWUgJiYgbS50eXBlLmRpc3BsYXlOYW1lID09IFwiQXBwXCIpO1xyXG4vLyBQYXRjaGVyLmFmdGVyKFwiRmxvYXRpbmdDb250YWluZXJcIiwgQXBwLnR5cGUucHJvdG90eXBlLCBcInJlbmRlclwiLCAodGhpc09iamVjdCwgYXJncywgcmV0dXJuVmFsdWUpID0+IHtcclxuLy8gICAgIGNvbnN0IGdyb3VwID0gVXRpbGl0aWVzLmZpbmRJblJlbmRlclRyZWUocmV0dXJuVmFsdWUsIG0gPT4gbSAmJiBtWzZdICYmIG1bNl0udHlwZSAmJiBtWzZdLnR5cGUuZGlzcGxheU5hbWUgPT0gXCJMYXllckNvbnRhaW5lclwiLCB7d2Fsa2FibGU6IFtcImNoaWxkcmVuXCIsIFwicHJvcHNcIl19KTtcclxuLy8gICAgIGdyb3VwLnB1c2goY29udGFpbmVyKTtcclxuLy8gfSk7XHJcbi8vIEFwcC5zdGF0ZU5vZGUuZm9yY2VVcGRhdGUoKTtcclxuZXhwb3J0IGRlZmF1bHQgY29udGFpbmVyUmVmLmN1cnJlbnQ7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/floating/container.jsx\n"); /***/ }), @@ -863,7 +875,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Modals; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nclass Modals {\n static get shouldShowAddonErrors() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"settings\", \"addons\", \"addonErrors\");\n }\n\n static get ModalStack() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n }\n\n static get AlertModal() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByPrototypes(\"handleCancel\", \"handleSubmit\", \"handleMinorConfirm\");\n }\n\n static get TextElement() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"Sizes\", \"Weights\");\n }\n\n static get ConfirmationModal() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getModule(m => m.defaultProps && m.key && m.key() == \"confirm-modal\");\n }\n\n static default(title, content) {\n const backdrop = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"backdrop\") || {\n backdrop: \"backdrop-1wrmKb\"\n };\n const baseModalClasses = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getModule(m => m.modal && m.inner && !m.sizeMedium) || {\n modal: \"modal-36zFtW\",\n inner: \"inner-2VEzy9\"\n };\n const modalClasses = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"sizeMedium\") || {\n modal: \"backdrop-1wrmKb\",\n sizeMedium: \"sizeMedium-ctncE5\",\n content: \"content-2KoCOZ\",\n header: \"header-2nhbou\",\n footer: \"footer-30ewN8\",\n close: \"close-hhyjWJ\",\n inner: \"inner-2Z5QZX\"\n };\n const modal = modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].parseHTML(`
\n
\n
\n
\n
\n
${title}
\n
\n
\n
\n
\n ${content}\n
\n
\n
\n
\n \n
\n
\n
\n
`);\n modal.querySelector(\".footer button\").addEventListener(\"click\", () => {\n modal.addClass(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n modal.addClass(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n document.querySelector(\"#app-mount\").append(modal);\n }\n\n static alert(title, content) {\n if (this.ModalStack && this.AlertModal) return this.default(title, content);\n this.ModalStack.push(function (props) {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(this.AlertModal, Object.assign({\n title: title,\n body: content\n }, props));\n });\n }\n /**\r\n * Shows a generic but very customizable confirmation modal with optional confirm and cancel callbacks.\r\n * @param {string} title - title of the modal\r\n * @param {(string|ReactElement|Array)} children - a single or mixed array of react elements and strings. Everything is wrapped in Discord's `TextElement` component so strings will show and render properly.\r\n * @param {object} [options] - options to modify the modal\r\n * @param {boolean} [options.danger=false] - whether the main button should be red or not\r\n * @param {string} [options.confirmText=Okay] - text for the confirmation/submit button\r\n * @param {string} [options.cancelText=Cancel] - text for the cancel button\r\n * @param {callable} [options.onConfirm=NOOP] - callback to occur when clicking the submit button\r\n * @param {callable} [options.onCancel=NOOP] - callback to occur when clicking the cancel button\r\n */\n\n\n static showConfirmationModal(title, content, options = {}) {\n const TextElement = this.TextElement;\n const ConfirmationModal = this.ConfirmationModal;\n const ModalStack = this.ModalStack;\n if (!this.ModalStack || !this.ConfirmationModal || !this.TextElement) return this.alert(title, content);\n const {\n onConfirm,\n onCancel,\n confirmText,\n cancelText,\n danger = false\n } = options;\n if (typeof content == \"string\") content = TextElement.default({\n color: TextElement.Colors.PRIMARY,\n children: [content]\n });else if (Array.isArray(content)) content = TextElement.default({\n color: TextElement.Colors.PRIMARY,\n children: content\n });\n content = [content];\n\n const emptyFunction = () => {};\n\n ModalStack.push(function (props) {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(ConfirmationModal, Object.assign({\n header: title,\n children: content,\n red: danger,\n confirmText: confirmText ? confirmText : modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.okay,\n cancelText: cancelText ? cancelText : modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.cancel,\n onConfirm: onConfirm ? onConfirm : emptyFunction,\n onCancel: onCancel ? onCancel : emptyFunction\n }, props));\n });\n }\n\n static showAddonErrors({\n plugins: pluginErrors = [],\n themes: themeErrors = []\n }) {\n if (!pluginErrors || !themeErrors || !this.shouldShowAddonErrors) return;\n if (!pluginErrors.length && !themeErrors.length) return;\n const backdrop = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"backdrop\") || {\n backdrop: \"backdrop-1wrmKb\"\n };\n const baseModalClasses = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getModule(m => m.modal && m.inner && !m.sizeMedium) || {\n modal: \"modal-36zFtW\",\n inner: \"inner-2VEzy9\"\n };\n const modalClasses = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"sizeMedium\") || {\n modal: \"modal-3v8ziU\",\n sizeMedium: \"sizeMedium-ctncE5\",\n content: \"content-2KoCOZ\",\n header: \"header-2nhbou\",\n footer: \"footer-30ewN8\",\n close: \"close-hhyjWJ\",\n inner: \"inner-2Z5QZX\"\n };\n const modal = $(`
\n
\n
\n
\n
${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.addonErrors}
\n
\n
\n
\n
${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Panels.plugins}
\n
${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Panels.themes}
\n
\n
\n
\n
${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.name}
\n
${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.message}
\n
${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.error}
\n
\n
\n
\n\n
\n
\n
\n
\n \n
\n
\n
\n
`);\n\n const generateTab = function (errors) {\n const container = $(`
`);\n\n for (const err of errors) {\n const error = $(`
\n
${err.name ? err.name : err.file}
\n
${err.message}
\n \n
`);\n container.append(error);\n\n if (err.error) {\n error.find(\"a\").on(\"click\", e => {\n e.preventDefault();\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].stacktrace(\"AddonError\", `Error details for ${err.name ? err.name : err.file}.`, err.error);\n });\n }\n }\n\n return container;\n };\n\n const tabs = [generateTab(pluginErrors), generateTab(themeErrors)];\n modal.find(\".tab-bar-item\").on(\"click\", e => {\n e.preventDefault();\n modal.find(\".tab-bar-item\").removeClass(\"selected\");\n $(e.target).addClass(\"selected\");\n modal.find(\".scroller\").empty().append(tabs[$(e.target).index()]);\n });\n modal.find(\".footer button\").on(\"click\", () => {\n modal.addClass(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modal.find(\".bd-backdrop\").on(\"click\", () => {\n modal.addClass(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modal.appendTo(\"#app-mount\");\n if (pluginErrors.length) modal.find(\".tab-bar-item\")[0].click();else modal.find(\".tab-bar-item\")[1].click();\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL21vZGFscy5qcz8zYWIyIl0sIm5hbWVzIjpbIk1vZGFscyIsInNob3VsZFNob3dBZGRvbkVycm9ycyIsIlNldHRpbmdzIiwiZ2V0IiwiTW9kYWxTdGFjayIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlQcm9wcyIsIkFsZXJ0TW9kYWwiLCJnZXRCeVByb3RvdHlwZXMiLCJUZXh0RWxlbWVudCIsIkNvbmZpcm1hdGlvbk1vZGFsIiwiZ2V0TW9kdWxlIiwibSIsImRlZmF1bHRQcm9wcyIsImtleSIsImRlZmF1bHQiLCJ0aXRsZSIsImNvbnRlbnQiLCJiYWNrZHJvcCIsImJhc2VNb2RhbENsYXNzZXMiLCJtb2RhbCIsImlubmVyIiwic2l6ZU1lZGl1bSIsIm1vZGFsQ2xhc3NlcyIsImhlYWRlciIsImZvb3RlciIsImNsb3NlIiwiVXRpbGl0aWVzIiwicGFyc2VIVE1MIiwiU3RyaW5ncyIsIm9rYXkiLCJxdWVyeVNlbGVjdG9yIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZENsYXNzIiwic2V0VGltZW91dCIsInJlbW92ZSIsImRvY3VtZW50IiwiYXBwZW5kIiwiYWxlcnQiLCJwdXNoIiwicHJvcHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJPYmplY3QiLCJhc3NpZ24iLCJib2R5Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwib3B0aW9ucyIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIiwiY29uZmlybVRleHQiLCJjYW5jZWxUZXh0IiwiZGFuZ2VyIiwiY29sb3IiLCJDb2xvcnMiLCJQUklNQVJZIiwiY2hpbGRyZW4iLCJBcnJheSIsImlzQXJyYXkiLCJlbXB0eUZ1bmN0aW9uIiwicmVkIiwiY2FuY2VsIiwic2hvd0FkZG9uRXJyb3JzIiwicGx1Z2lucyIsInBsdWdpbkVycm9ycyIsInRoZW1lcyIsInRoZW1lRXJyb3JzIiwibGVuZ3RoIiwiJCIsImFkZG9uRXJyb3JzIiwiUGFuZWxzIiwibmFtZSIsIm1lc3NhZ2UiLCJlcnJvciIsImdlbmVyYXRlVGFiIiwiZXJyb3JzIiwiY29udGFpbmVyIiwiZXJyIiwiZmlsZSIsImZpbmQiLCJvbiIsImUiLCJwcmV2ZW50RGVmYXVsdCIsIkxvZ2dlciIsInN0YWNrdHJhY2UiLCJ0YWJzIiwicmVtb3ZlQ2xhc3MiLCJ0YXJnZXQiLCJlbXB0eSIsImluZGV4IiwiYXBwZW5kVG8iLCJjbGljayJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFZSxNQUFNQSxNQUFOLENBQWE7QUFFeEIsYUFBV0MscUJBQVgsR0FBbUM7QUFBQyxXQUFPQyxnREFBUSxDQUFDQyxHQUFULENBQWEsVUFBYixFQUF5QixRQUF6QixFQUFtQyxhQUFuQyxDQUFQO0FBQTBEOztBQUU5RixhQUFXQyxVQUFYLEdBQXdCO0FBQUMsV0FBT0Msc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixNQUExQixFQUFrQyxRQUFsQyxFQUE0QyxLQUE1QyxFQUFtRCxZQUFuRCxDQUFQO0FBQXlFOztBQUNsRyxhQUFXQyxVQUFYLEdBQXdCO0FBQUMsV0FBT0Ysc0RBQWMsQ0FBQ0csZUFBZixDQUErQixjQUEvQixFQUErQyxjQUEvQyxFQUErRCxvQkFBL0QsQ0FBUDtBQUE2Rjs7QUFDdEgsYUFBV0MsV0FBWCxHQUF5QjtBQUFDLFdBQU9KLHNEQUFjLENBQUNDLFVBQWYsQ0FBMEIsT0FBMUIsRUFBbUMsU0FBbkMsQ0FBUDtBQUFzRDs7QUFDaEYsYUFBV0ksaUJBQVgsR0FBK0I7QUFBQyxXQUFPTCxzREFBYyxDQUFDTSxTQUFmLENBQXlCQyxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsWUFBRixJQUFrQkQsQ0FBQyxDQUFDRSxHQUFwQixJQUEyQkYsQ0FBQyxDQUFDRSxHQUFGLE1BQVcsZUFBcEUsQ0FBUDtBQUE2Rjs7QUFFN0gsU0FBT0MsT0FBUCxDQUFlQyxLQUFmLEVBQXNCQyxPQUF0QixFQUErQjtBQUMzQixVQUFNQyxRQUFRLEdBQUdiLHNEQUFjLENBQUNDLFVBQWYsQ0FBMEIsVUFBMUIsS0FBeUM7QUFBQ1ksY0FBUSxFQUFF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LENBQUNhLFFBQU4sQ0FBZSxTQUFmO0FBQ0FDLGdCQUFVLENBQUMsTUFBTTtBQUFFZCxhQUFLLENBQUNlLE1BQU47QUFBaUIsT0FBMUIsRUFBNEIsR0FBNUIsQ0FBVjtBQUNILEtBSEQ7QUFJQWYsU0FBSyxDQUFDc0UsUUFBTixDQUFlLFlBQWY7QUFDQSxRQUFJMUIsWUFBWSxDQUFDRyxNQUFqQixFQUF5Qi9DLEtBQUssQ0FBQzJELElBQU4sQ0FBVyxlQUFYLEVBQTRCLENBQTVCLEVBQStCWSxLQUEvQixHQUF6QixLQUNLdkUsS0FBSyxDQUFDMkQsSUFBTixDQUFXLGVBQVgsRUFBNEIsQ0FBNUIsRUFBK0JZLEtBQS9CO0FBQ1I7O0FBckt1QiIsImZpbGUiOiIuL3NyYy91aS9tb2RhbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvZ2dlciwgV2VicGFja01vZHVsZXMsIFV0aWxpdGllcywgUmVhY3QsIFNldHRpbmdzLCBTdHJpbmdzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kYWxzIHtcclxuXHJcbiAgICBzdGF0aWMgZ2V0IHNob3VsZFNob3dBZGRvbkVycm9ycygpIHtyZXR1cm4gU2V0dGluZ3MuZ2V0KFwic2V0dGluZ3NcIiwgXCJhZGRvbnNcIiwgXCJhZGRvbkVycm9yc1wiKTt9XHJcblxyXG4gICAgc3RhdGljIGdldCBNb2RhbFN0YWNrKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7fVxyXG4gICAgc3RhdGljIGdldCBBbGVydE1vZGFsKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3RvdHlwZXMoXCJoYW5kbGVDYW5jZWxcIiwgXCJoYW5kbGVTdWJtaXRcIiwgXCJoYW5kbGVNaW5vckNvbmZpcm1cIik7fVxyXG4gICAgc3RhdGljIGdldCBUZXh0RWxlbWVudCgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIlNpemVzXCIsIFwiV2VpZ2h0c1wiKTt9XHJcbiAgICBzdGF0aWMgZ2V0IENvbmZpcm1hdGlvbk1vZGFsKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmtleSAmJiBtLmtleSgpID09IFwiY29uZmlybS1tb2RhbFwiKTt9XHJcblxyXG4gICAgc3RhdGljIGRlZmF1bHQodGl0bGUsIGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBiYWNrZHJvcCA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJiYWNrZHJvcFwiKSB8fCB7YmFja2Ryb3A6IFwiYmFja2Ryb3AtMXdybUtiXCJ9O1xyXG4gICAgICAgIGNvbnN0IGJhc2VNb2RhbENsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLm1vZGFsICYmIG0uaW5uZXIgJiYgIW0uc2l6ZU1lZGl1bSkgfHwge21vZGFsOiBcIm1vZGFsLTM2ekZ0V1wiLCBpbm5lcjogXCJpbm5lci0yVkV6eTlcIn07XHJcbiAgICAgICAgY29uc3QgbW9kYWxDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInNpemVNZWRpdW1cIikgfHwge21vZGFsOiBcImJhY2tkcm9wLTF3cm1LYlwiLCBzaXplTWVkaXVtOiBcInNpemVNZWRpdW0tY3RuY0U1XCIsIGNvbnRlbnQ6IFwiY29udGVudC0yS29DT1pcIiwgaGVhZGVyOiBcImhlYWRlci0ybmhib3VcIiwgZm9vdGVyOiBcImZvb3Rlci0zMGV3TjhcIiwgY2xvc2U6IFwiY2xvc2UtaGh5aldKXCIsIGlubmVyOiBcImlubmVyLTJaNVFaWFwifTtcclxuICAgICAgICBjb25zdCBtb2RhbCA9IFV0aWxpdGllcy5wYXJzZUhUTUwoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke2JhY2tkcm9wLmJhY2tkcm9wfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsICR7YmFzZU1vZGFsQ2xhc3Nlcy5tb2RhbH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHtiYXNlTW9kYWxDbGFzc2VzLmlubmVyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyIGhlYWRlci0xUl9BakZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHttb2RhbENsYXNzZXMuZm9vdGVyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJiZC1idXR0b25cIj4ke1N0cmluZ3MuTW9kYWxzLm9rYXl9PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PmApO1xyXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuZm9vdGVyIGJ1dHRvblwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBtb2RhbC5hZGRDbGFzcyhcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmJkLWJhY2tkcm9wXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vZGFsLmFkZENsYXNzKFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpLmFwcGVuZChtb2RhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGFsZXJ0KHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuTW9kYWxTdGFjayAmJiB0aGlzLkFsZXJ0TW9kYWwpIHJldHVybiB0aGlzLmRlZmF1bHQodGl0bGUsIGNvbnRlbnQpO1xyXG4gICAgICAgIHRoaXMuTW9kYWxTdGFjay5wdXNoKGZ1bmN0aW9uKHByb3BzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHRoaXMuQWxlcnRNb2RhbCwgT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICAgICAgICBib2R5OiBjb250ZW50LFxyXG4gICAgICAgICAgICB9LCBwcm9wcykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnl0aGluZyBpcyB3cmFwcGVkIGluIERpc2NvcmQncyBgVGV4dEVsZW1lbnRgIGNvbXBvbmVudCBzbyBzdHJpbmdzIHdpbGwgc2hvdyBhbmQgcmVuZGVyIHByb3Blcmx5LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb25maXJtVGV4dD1Pa2F5XSAtIHRleHQgZm9yIHRoZSBjb25maXJtYXRpb24vc3VibWl0IGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNhbmNlbD1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b25cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgVGV4dEVsZW1lbnQgPSB0aGlzLlRleHRFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IENvbmZpcm1hdGlvbk1vZGFsID0gdGhpcy5Db25maXJtYXRpb25Nb2RhbDtcclxuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gdGhpcy5Nb2RhbFN0YWNrO1xyXG4gICAgICAgIGlmICghdGhpcy5Nb2RhbFN0YWNrIHx8ICF0aGlzLkNvbmZpcm1hdGlvbk1vZGFsIHx8ICF0aGlzLlRleHRFbGVtZW50KSByZXR1cm4gdGhpcy5hbGVydCh0aXRsZSwgY29udGVudCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHtvbkNvbmZpcm0sIG9uQ2FuY2VsLCBjb25maXJtVGV4dCwgY2FuY2VsVGV4dCwgZGFuZ2VyID0gZmFsc2V9ID0gb3B0aW9ucztcclxuICAgICAgICBpZiAodHlwZW9mKGNvbnRlbnQpID09IFwic3RyaW5nXCIpIGNvbnRlbnQgPSBUZXh0RWxlbWVudC5kZWZhdWx0KHtjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlBSSU1BUlksIGNoaWxkcmVuOiBbY29udGVudF19KTtcclxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbnRlbnQpKSBjb250ZW50ID0gVGV4dEVsZW1lbnQuZGVmYXVsdCh7Y29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5QUklNQVJZLCBjaGlsZHJlbjogY29udGVudH0pO1xyXG4gICAgICAgIGNvbnRlbnQgPSBbY29udGVudF07XHJcblxyXG4gICAgICAgIGNvbnN0IGVtcHR5RnVuY3Rpb24gPSAoKSA9PiB7fTtcclxuICAgICAgICBNb2RhbFN0YWNrLnB1c2goZnVuY3Rpb24ocHJvcHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29uZmlybWF0aW9uTW9kYWwsIE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyOiB0aXRsZSxcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjb250ZW50LFxyXG4gICAgICAgICAgICAgICAgcmVkOiBkYW5nZXIsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogY29uZmlybVRleHQgPyBjb25maXJtVGV4dCA6IFN0cmluZ3MuTW9kYWxzLm9rYXksXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBjYW5jZWxUZXh0ID8gY2FuY2VsVGV4dCA6IFN0cmluZ3MuTW9kYWxzLmNhbmNlbCxcclxuICAgICAgICAgICAgICAgIG9uQ29uZmlybTogb25Db25maXJtID8gb25Db25maXJtIDogZW1wdHlGdW5jdGlvbixcclxuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiBvbkNhbmNlbCA/IG9uQ2FuY2VsIDogZW1wdHlGdW5jdGlvblxyXG4gICAgICAgICAgICB9LCBwcm9wcykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93QWRkb25FcnJvcnMoe3BsdWdpbnM6IHBsdWdpbkVycm9ycyA9IFtdLCB0aGVtZXM6IHRoZW1lRXJyb3JzID0gW119KSB7XHJcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMgfHwgIXRoZW1lRXJyb3JzIHx8ICF0aGlzLnNob3VsZFNob3dBZGRvbkVycm9ycykgcmV0dXJuO1xyXG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgYmFja2Ryb3AgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiYmFja2Ryb3BcIikgfHwge2JhY2tkcm9wOiBcImJhY2tkcm9wLTF3cm1LYlwifTtcclxuICAgICAgICBjb25zdCBiYXNlTW9kYWxDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5tb2RhbCAmJiBtLmlubmVyICYmICFtLnNpemVNZWRpdW0pIHx8IHttb2RhbDogXCJtb2RhbC0zNnpGdFdcIiwgaW5uZXI6IFwiaW5uZXItMlZFenk5XCJ9O1xyXG4gICAgICAgIGNvbnN0IG1vZGFsQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzaXplTWVkaXVtXCIpIHx8IHttb2RhbDogXCJtb2RhbC0zdjh6aVVcIiwgc2l6ZU1lZGl1bTogXCJzaXplTWVkaXVtLWN0bmNFNVwiLCBjb250ZW50OiBcImNvbnRlbnQtMktvQ09aXCIsIGhlYWRlcjogXCJoZWFkZXItMm5oYm91XCIsIGZvb3RlcjogXCJmb290ZXItMzBld044XCIsIGNsb3NlOiBcImNsb3NlLWhoeWpXSlwiLCBpbm5lcjogXCJpbm5lci0yWjVRWlhcIn07XHJcbiAgICAgICAgY29uc3QgbW9kYWwgPSAkKGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke2JhY2tkcm9wLmJhY2tkcm9wfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgYmQtY29udGVudC1tb2RhbCAke2Jhc2VNb2RhbENsYXNzZXMubW9kYWx9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHtiYXNlTW9kYWxDbGFzc2VzLmlubmVyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgJHttb2RhbENsYXNzZXMuaGVhZGVyfVwiPjxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7U3RyaW5ncy5Nb2RhbHMuYWRkb25FcnJvcnN9PC9kaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhciBUT1BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+JHtTdHJpbmdzLlBhbmVscy5wbHVnaW5zfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWl0ZW1cIj4ke1N0cmluZ3MuUGFuZWxzLnRoZW1lc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7U3RyaW5ncy5Nb2RhbHMubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW1lc3NhZ2VcIj4ke1N0cmluZ3MuTW9kYWxzLm1lc3NhZ2V9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPiR7U3RyaW5ncy5Nb2RhbHMuZXJyb3J9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBmYWRlICR7bW9kYWxDbGFzc2VzLmNvbnRlbnR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciAke21vZGFsQ2xhc3Nlcy5mb290ZXJ9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYmQtYnV0dG9uXCI+JHtTdHJpbmdzLk1vZGFscy5va2F5fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xyXG5cclxuICAgICAgICBjb25zdCBnZW5lcmF0ZVRhYiA9IGZ1bmN0aW9uKGVycm9ycykge1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSAkKGA8ZGl2IGNsYXNzPVwiZXJyb3JzXCI+YCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSAkKGA8ZGl2IGNsYXNzPVwiZXJyb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+JHtlcnIubWVzc2FnZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj48YSBjbGFzcz1cImVycm9yLWxpbmtcIiBocmVmPVwiXCI+JHtlcnIuZXJyb3IgPyBlcnIuZXJyb3IubWVzc2FnZSA6IFwiXCJ9PC9hPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IuZmluZChcImFcIikub24oXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZ2dlci5zdGFja3RyYWNlKFwiQWRkb25FcnJvclwiLCBgRXJyb3IgZGV0YWlscyBmb3IgJHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9LmAsIGVyci5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCB0YWJzID0gW2dlbmVyYXRlVGFiKHBsdWdpbkVycm9ycyksIGdlbmVyYXRlVGFiKHRoZW1lRXJyb3JzKV07XHJcblxyXG4gICAgICAgIG1vZGFsLmZpbmQoXCIudGFiLWJhci1pdGVtXCIpLm9uKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKFwiLnRhYi1iYXItaXRlbVwiKS5yZW1vdmVDbGFzcyhcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICAkKGUudGFyZ2V0KS5hZGRDbGFzcyhcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKFwiLnNjcm9sbGVyXCIpLmVtcHR5KCkuYXBwZW5kKHRhYnNbJChlLnRhcmdldCkuaW5kZXgoKV0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBtb2RhbC5maW5kKFwiLmZvb3RlciBidXR0b25cIikub24oXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vZGFsLmFkZENsYXNzKFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1vZGFsLmZpbmQoXCIuYmQtYmFja2Ryb3BcIikub24oXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vZGFsLmFkZENsYXNzKFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1vZGFsLmFwcGVuZFRvKFwiI2FwcC1tb3VudFwiKTtcclxuICAgICAgICBpZiAocGx1Z2luRXJyb3JzLmxlbmd0aCkgbW9kYWwuZmluZChcIi50YWItYmFyLWl0ZW1cIilbMF0uY2xpY2soKTtcclxuICAgICAgICBlbHNlIG1vZGFsLmZpbmQoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/modals.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Modals; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\nclass Modals {\n static get shouldShowAddonErrors() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].get(\"settings\", \"addons\", \"addonErrors\");\n }\n\n static get ModalStack() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n }\n\n static get AlertModal() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByPrototypes(\"handleCancel\", \"handleSubmit\", \"handleMinorConfirm\");\n }\n\n static get TextElement() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"Sizes\", \"Weights\");\n }\n\n static get ConfirmationModal() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.defaultProps && m.key && m.key() == \"confirm-modal\");\n }\n\n static default(title, content) {\n const backdrop = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"backdrop\") || {\n backdrop: \"backdrop-1wrmKb\"\n };\n const baseModalClasses = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.modal && m.inner && !m.sizeMedium) || {\n modal: \"modal-36zFtW\",\n inner: \"inner-2VEzy9\"\n };\n const modalClasses = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"sizeMedium\") || {\n modal: \"backdrop-1wrmKb\",\n sizeMedium: \"sizeMedium-ctncE5\",\n content: \"content-2KoCOZ\",\n header: \"header-2nhbou\",\n footer: \"footer-30ewN8\",\n close: \"close-hhyjWJ\",\n inner: \"inner-2Z5QZX\"\n };\n const modal = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].parseHTML(`
\n
\n
\n
\n
\n
${title}
\n
\n
\n
\n
\n ${content}\n
\n
\n
\n
\n \n
\n
\n
\n
`);\n modal.querySelector(\".footer button\").addEventListener(\"click\", () => {\n modal.addClass(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n modal.addClass(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n document.querySelector(\"#app-mount\").append(modal);\n }\n\n static alert(title, content) {\n if (this.ModalStack && this.AlertModal) return this.default(title, content);\n this.ModalStack.push(function (props) {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(this.AlertModal, Object.assign({\n title: title,\n body: content\n }, props));\n });\n }\n /**\r\n * Shows a generic but very customizable confirmation modal with optional confirm and cancel callbacks.\r\n * @param {string} title - title of the modal\r\n * @param {(string|ReactElement|Array)} children - a single or mixed array of react elements and strings. Everything is wrapped in Discord's `TextElement` component so strings will show and render properly.\r\n * @param {object} [options] - options to modify the modal\r\n * @param {boolean} [options.danger=false] - whether the main button should be red or not\r\n * @param {string} [options.confirmText=Okay] - text for the confirmation/submit button\r\n * @param {string} [options.cancelText=Cancel] - text for the cancel button\r\n * @param {callable} [options.onConfirm=NOOP] - callback to occur when clicking the submit button\r\n * @param {callable} [options.onCancel=NOOP] - callback to occur when clicking the cancel button\r\n */\n\n\n static showConfirmationModal(title, content, options = {}) {\n const TextElement = this.TextElement;\n const ConfirmationModal = this.ConfirmationModal;\n const ModalStack = this.ModalStack;\n if (!this.ModalStack || !this.ConfirmationModal || !this.TextElement) return this.alert(title, content);\n const {\n onConfirm,\n onCancel,\n confirmText,\n cancelText,\n danger = false\n } = options;\n if (typeof content == \"string\") content = TextElement.default({\n color: TextElement.Colors.PRIMARY,\n children: [content]\n });else if (Array.isArray(content)) content = TextElement.default({\n color: TextElement.Colors.PRIMARY,\n children: content\n });\n content = [content];\n\n const emptyFunction = () => {};\n\n ModalStack.push(function (props) {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(ConfirmationModal, Object.assign({\n header: title,\n children: content,\n red: danger,\n confirmText: confirmText ? confirmText : modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.okay,\n cancelText: cancelText ? cancelText : modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.cancel,\n onConfirm: onConfirm ? onConfirm : emptyFunction,\n onCancel: onCancel ? onCancel : emptyFunction\n }, props));\n });\n }\n\n static showAddonErrors({\n plugins: pluginErrors = [],\n themes: themeErrors = []\n }) {\n if (!pluginErrors || !themeErrors || !this.shouldShowAddonErrors) return;\n if (!pluginErrors.length && !themeErrors.length) return;\n const backdrop = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"backdrop\") || {\n backdrop: \"backdrop-1wrmKb\"\n };\n const baseModalClasses = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.modal && m.inner && !m.sizeMedium) || {\n modal: \"modal-36zFtW\",\n inner: \"inner-2VEzy9\"\n };\n const modalClasses = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"sizeMedium\") || {\n modal: \"modal-3v8ziU\",\n sizeMedium: \"sizeMedium-ctncE5\",\n content: \"content-2KoCOZ\",\n header: \"header-2nhbou\",\n footer: \"footer-30ewN8\",\n close: \"close-hhyjWJ\",\n inner: \"inner-2Z5QZX\"\n };\n const modal = $(`
\n
\n
\n
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.addonErrors}
\n
\n
\n
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Panels.plugins}
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Panels.themes}
\n
\n
\n
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.name}
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.message}
\n
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.error}
\n
\n
\n
\n\n
\n
\n
\n
\n \n
\n
\n
\n
`);\n\n const generateTab = function (errors) {\n const container = $(`
`);\n\n for (const err of errors) {\n const error = $(`
\n
${err.name ? err.name : err.file}
\n
${err.message}
\n \n
`);\n container.append(error);\n\n if (err.error) {\n error.find(\"a\").on(\"click\", e => {\n e.preventDefault();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Logger\"].stacktrace(\"AddonError\", `Error details for ${err.name ? err.name : err.file}.`, err.error);\n });\n }\n }\n\n return container;\n };\n\n const tabs = [generateTab(pluginErrors), generateTab(themeErrors)];\n modal.find(\".tab-bar-item\").on(\"click\", e => {\n e.preventDefault();\n modal.find(\".tab-bar-item\").removeClass(\"selected\");\n $(e.target).addClass(\"selected\");\n modal.find(\".scroller\").empty().append(tabs[$(e.target).index()]);\n });\n modal.find(\".footer button\").on(\"click\", () => {\n modal.addClass(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modal.find(\".bd-backdrop\").on(\"click\", () => {\n modal.addClass(\"closing\");\n setTimeout(() => {\n modal.remove();\n }, 300);\n });\n modal.appendTo(\"#app-mount\");\n if (pluginErrors.length) modal.find(\".tab-bar-item\")[0].click();else modal.find(\".tab-bar-item\")[1].click();\n }\n\n showChangelogModal(options = {}) {\n const ModalStack = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n const ChangelogClasses = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"fixed\", \"improved\");\n const TextElement = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"Sizes\", \"Weights\");\n const FlexChild = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"Child\");\n const Titles = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"Tags\", \"default\");\n const Changelog = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.defaultProps && m.defaultProps.selectable == false);\n const MarkdownParser = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"defaultRules\", \"parse\");\n if (!Changelog || !ModalStack || !ChangelogClasses || !TextElement || !FlexChild || !Titles || !MarkdownParser) return;\n const {\n image = \"https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5\",\n description = \"\",\n changes = [],\n title = \"BandagedBD\",\n subtitle = `v${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].bbdVersion}`,\n footer\n } = options;\n const ce = modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement;\n const changelogItems = [ce(\"img\", {\n src: image\n })];\n if (description) changelogItems.push(ce(\"p\", null, MarkdownParser.parse(description)));\n\n for (let c = 0; c < changes.length; c++) {\n const entry = changes[c];\n const type = ChangelogClasses[entry.type] ? ChangelogClasses[entry.type] : ChangelogClasses.added;\n const margin = c == 0 ? ChangelogClasses.marginTop : \"\";\n changelogItems.push(ce(\"h1\", {\n className: `${type} ${margin}`\n }, entry.title));\n const list = ce(\"ul\", null, entry.items.map(i => ce(\"li\", null, MarkdownParser.parse(i))));\n changelogItems.push(list);\n }\n\n const renderHeader = function () {\n return ce(FlexChild.Child, {\n grow: 1,\n shrink: 1\n }, ce(Titles.default, {\n tag: Titles.Tags.H4\n }, title), ce(TextElement, {\n size: TextElement.Sizes.SMALL,\n color: TextElement.Colors.PRIMARY,\n className: ChangelogClasses.date\n }, subtitle));\n };\n\n const renderFooter = () => {\n const Anchor = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.displayName == \"Anchor\");\n const AnchorClasses = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"anchorUnderlineOnHover\") || {\n anchor: \"anchor-3Z-8Bb\",\n anchorUnderlineOnHover: \"anchorUnderlineOnHover-2ESHQB\"\n };\n\n const joinSupportServer = click => {\n click.preventDefault();\n click.stopPropagation();\n ModalStack.pop();\n BDV2.joinBD2();\n };\n\n const supportLink = Anchor ? ce(Anchor, {\n onClick: joinSupportServer\n }, \"Join our Discord Server.\") : ce(\"a\", {\n className: `${AnchorClasses.anchor} ${AnchorClasses.anchorUnderlineOnHover}`,\n onClick: joinSupportServer\n }, \"Join our Discord Server.\");\n const defaultFooter = ce(TextElement, {\n size: TextElement.Sizes.SMALL,\n color: TextElement.Colors.PRIMARY\n }, \"Need support? \", supportLink);\n return ce(FlexChild.Child, {\n grow: 1,\n shrink: 1\n }, footer ? footer : defaultFooter);\n };\n\n ModalStack.push(function (props) {\n return ce(Changelog, Object.assign({\n className: ChangelogClasses.container,\n selectable: true,\n onScroll: _ => _,\n onClose: _ => _,\n renderHeader: renderHeader,\n renderFooter: renderFooter,\n children: changelogItems\n }, props));\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL21vZGFscy5qcz8zYWIyIl0sIm5hbWVzIjpbIk1vZGFscyIsInNob3VsZFNob3dBZGRvbkVycm9ycyIsIlNldHRpbmdzIiwiZ2V0IiwiTW9kYWxTdGFjayIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlQcm9wcyIsIkFsZXJ0TW9kYWwiLCJnZXRCeVByb3RvdHlwZXMiLCJUZXh0RWxlbWVudCIsIkNvbmZpcm1hdGlvbk1vZGFsIiwiZ2V0TW9kdWxlIiwibSIsImRlZmF1bHRQcm9wcyIsImtleSIsImRlZmF1bHQiLCJ0aXRsZSIsImNvbnRlbnQiLCJiYWNrZHJvcCIsImJhc2VNb2RhbENsYXNzZXMiLCJtb2RhbCIsImlubmVyIiwic2l6ZU1lZGl1bSIsIm1vZGFsQ2xhc3NlcyIsImhlYWRlciIsImZvb3RlciIsImNsb3NlIiwiVXRpbGl0aWVzIiwicGFyc2VIVE1MIiwiU3RyaW5ncyIsIm9rYXkiLCJxdWVyeVNlbGVjdG9yIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZENsYXNzIiwic2V0VGltZW91dCIsInJlbW92ZSIsImRvY3VtZW50IiwiYXBwZW5kIiwiYWxlcnQiLCJwdXNoIiwicHJvcHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJPYmplY3QiLCJhc3NpZ24iLCJib2R5Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwib3B0aW9ucyIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIiwiY29uZmlybVRleHQiLCJjYW5jZWxUZXh0IiwiZGFuZ2VyIiwiY29sb3IiLCJDb2xvcnMiLCJQUklNQVJZIiwiY2hpbGRyZW4iLCJBcnJheSIsImlzQXJyYXkiLCJlbXB0eUZ1bmN0aW9uIiwicmVkIiwiY2FuY2VsIiwic2hvd0FkZG9uRXJyb3JzIiwicGx1Z2lucyIsInBsdWdpbkVycm9ycyIsInRoZW1lcyIsInRoZW1lRXJyb3JzIiwibGVuZ3RoIiwiJCIsImFkZG9uRXJyb3JzIiwiUGFuZWxzIiwibmFtZSIsIm1lc3NhZ2UiLCJlcnJvciIsImdlbmVyYXRlVGFiIiwiZXJyb3JzIiwiY29udGFpbmVyIiwiZXJyIiwiZmlsZSIsImZpbmQiLCJvbiIsImUiLCJwcmV2ZW50RGVmYXVsdCIsIkxvZ2dlciIsInN0YWNrdHJhY2UiLCJ0YWJzIiwicmVtb3ZlQ2xhc3MiLCJ0YXJnZXQiLCJlbXB0eSIsImluZGV4IiwiYXBwZW5kVG8iLCJjbGljayIsInNob3dDaGFuZ2Vsb2dNb2RhbCIsIkNoYW5nZWxvZ0NsYXNzZXMiLCJGbGV4Q2hpbGQiLCJUaXRsZXMiLCJDaGFuZ2Vsb2ciLCJzZWxlY3RhYmxlIiwiTWFya2Rvd25QYXJzZXIiLCJpbWFnZSIsImRlc2NyaXB0aW9uIiwiY2hhbmdlcyIsInN1YnRpdGxlIiwiQ29uZmlnIiwiYmJkVmVyc2lvbiIsImNlIiwiY2hhbmdlbG9nSXRlbXMiLCJzcmMiLCJwYXJzZSIsImMiLCJlbnRyeSIsInR5cGUiLCJhZGRlZCIsIm1hcmdpbiIsIm1hcmdpblRvcCIsImNsYXNzTmFtZSIsImxpc3QiLCJpdGVtcyIsIm1hcCIsImkiLCJyZW5kZXJIZWFkZXIiLCJDaGlsZCIsImdyb3ciLCJzaHJpbmsiLCJ0YWciLCJUYWdzIiwiSDQiLCJzaXplIiwiU2l6ZXMiLCJTTUFMTCIsImRhdGUiLCJyZW5kZXJGb290ZXIiLCJBbmNob3IiLCJkaXNwbGF5TmFtZSIsIkFuY2hvckNsYXNzZXMiLCJhbmNob3IiLCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyIiwiam9pblN1cHBvcnRTZXJ2ZXIiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3AiLCJCRFYyIiwiam9pbkJEMiIsInN1cHBvcnRMaW5rIiwib25DbGljayIsImRlZmF1bHRGb290ZXIiLCJvblNjcm9sbCIsIl8iLCJvbkNsb3NlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFZSxNQUFNQSxNQUFOLENBQWE7QUFFeEIsYUFBV0MscUJBQVgsR0FBbUM7QUFBQyxXQUFPQyxnREFBUSxDQUFDQyxHQUFULENBQWEsVUFBYixFQUF5QixRQUF6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LENBQVosQ0FBVDtBQVNILEtBVkQ7QUFXSDs7QUE3TnVCIiwiZmlsZSI6Ii4vc3JjL3VpL21vZGFscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQge0xvZ2dlciwgV2VicGFja01vZHVsZXMsIFV0aWxpdGllcywgUmVhY3QsIFNldHRpbmdzLCBTdHJpbmdzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kYWxzIHtcclxuXHJcbiAgICBzdGF0aWMgZ2V0IHNob3VsZFNob3dBZGRvbkVycm9ycygpIHtyZXR1cm4gU2V0dGluZ3MuZ2V0KFwic2V0dGluZ3NcIiwgXCJhZGRvbnNcIiwgXCJhZGRvbkVycm9yc1wiKTt9XHJcblxyXG4gICAgc3RhdGljIGdldCBNb2RhbFN0YWNrKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7fVxyXG4gICAgc3RhdGljIGdldCBBbGVydE1vZGFsKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3RvdHlwZXMoXCJoYW5kbGVDYW5jZWxcIiwgXCJoYW5kbGVTdWJtaXRcIiwgXCJoYW5kbGVNaW5vckNvbmZpcm1cIik7fVxyXG4gICAgc3RhdGljIGdldCBUZXh0RWxlbWVudCgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIlNpemVzXCIsIFwiV2VpZ2h0c1wiKTt9XHJcbiAgICBzdGF0aWMgZ2V0IENvbmZpcm1hdGlvbk1vZGFsKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmtleSAmJiBtLmtleSgpID09IFwiY29uZmlybS1tb2RhbFwiKTt9XHJcblxyXG4gICAgc3RhdGljIGRlZmF1bHQodGl0bGUsIGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBiYWNrZHJvcCA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJiYWNrZHJvcFwiKSB8fCB7YmFja2Ryb3A6IFwiYmFja2Ryb3AtMXdybUtiXCJ9O1xyXG4gICAgICAgIGNvbnN0IGJhc2VNb2RhbENsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLm1vZGFsICYmIG0uaW5uZXIgJiYgIW0uc2l6ZU1lZGl1bSkgfHwge21vZGFsOiBcIm1vZGFsLTM2ekZ0V1wiLCBpbm5lcjogXCJpbm5lci0yVkV6eTlcIn07XHJcbiAgICAgICAgY29uc3QgbW9kYWxDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInNpemVNZWRpdW1cIikgfHwge21vZGFsOiBcImJhY2tkcm9wLTF3cm1LYlwiLCBzaXplTWVkaXVtOiBcInNpemVNZWRpdW0tY3RuY0U1XCIsIGNvbnRlbnQ6IFwiY29udGVudC0yS29DT1pcIiwgaGVhZGVyOiBcImhlYWRlci0ybmhib3VcIiwgZm9vdGVyOiBcImZvb3Rlci0zMGV3TjhcIiwgY2xvc2U6IFwiY2xvc2UtaGh5aldKXCIsIGlubmVyOiBcImlubmVyLTJaNVFaWFwifTtcclxuICAgICAgICBjb25zdCBtb2RhbCA9IFV0aWxpdGllcy5wYXJzZUhUTUwoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke2JhY2tkcm9wLmJhY2tkcm9wfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsICR7YmFzZU1vZGFsQ2xhc3Nlcy5tb2RhbH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHtiYXNlTW9kYWxDbGFzc2VzLmlubmVyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyIGhlYWRlci0xUl9BakZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHttb2RhbENsYXNzZXMuZm9vdGVyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJiZC1idXR0b25cIj4ke1N0cmluZ3MuTW9kYWxzLm9rYXl9PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PmApO1xyXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuZm9vdGVyIGJ1dHRvblwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBtb2RhbC5hZGRDbGFzcyhcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmJkLWJhY2tkcm9wXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vZGFsLmFkZENsYXNzKFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpLmFwcGVuZChtb2RhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGFsZXJ0KHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuTW9kYWxTdGFjayAmJiB0aGlzLkFsZXJ0TW9kYWwpIHJldHVybiB0aGlzLmRlZmF1bHQodGl0bGUsIGNvbnRlbnQpO1xyXG4gICAgICAgIHRoaXMuTW9kYWxTdGFjay5wdXNoKGZ1bmN0aW9uKHByb3BzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHRoaXMuQWxlcnRNb2RhbCwgT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICAgICAgICBib2R5OiBjb250ZW50LFxyXG4gICAgICAgICAgICB9LCBwcm9wcykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnl0aGluZyBpcyB3cmFwcGVkIGluIERpc2NvcmQncyBgVGV4dEVsZW1lbnRgIGNvbXBvbmVudCBzbyBzdHJpbmdzIHdpbGwgc2hvdyBhbmQgcmVuZGVyIHByb3Blcmx5LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb25maXJtVGV4dD1Pa2F5XSAtIHRleHQgZm9yIHRoZSBjb25maXJtYXRpb24vc3VibWl0IGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNhbmNlbD1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b25cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgVGV4dEVsZW1lbnQgPSB0aGlzLlRleHRFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IENvbmZpcm1hdGlvbk1vZGFsID0gdGhpcy5Db25maXJtYXRpb25Nb2RhbDtcclxuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gdGhpcy5Nb2RhbFN0YWNrO1xyXG4gICAgICAgIGlmICghdGhpcy5Nb2RhbFN0YWNrIHx8ICF0aGlzLkNvbmZpcm1hdGlvbk1vZGFsIHx8ICF0aGlzLlRleHRFbGVtZW50KSByZXR1cm4gdGhpcy5hbGVydCh0aXRsZSwgY29udGVudCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHtvbkNvbmZpcm0sIG9uQ2FuY2VsLCBjb25maXJtVGV4dCwgY2FuY2VsVGV4dCwgZGFuZ2VyID0gZmFsc2V9ID0gb3B0aW9ucztcclxuICAgICAgICBpZiAodHlwZW9mKGNvbnRlbnQpID09IFwic3RyaW5nXCIpIGNvbnRlbnQgPSBUZXh0RWxlbWVudC5kZWZhdWx0KHtjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlBSSU1BUlksIGNoaWxkcmVuOiBbY29udGVudF19KTtcclxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbnRlbnQpKSBjb250ZW50ID0gVGV4dEVsZW1lbnQuZGVmYXVsdCh7Y29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5QUklNQVJZLCBjaGlsZHJlbjogY29udGVudH0pO1xyXG4gICAgICAgIGNvbnRlbnQgPSBbY29udGVudF07XHJcblxyXG4gICAgICAgIGNvbnN0IGVtcHR5RnVuY3Rpb24gPSAoKSA9PiB7fTtcclxuICAgICAgICBNb2RhbFN0YWNrLnB1c2goZnVuY3Rpb24ocHJvcHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29uZmlybWF0aW9uTW9kYWwsIE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyOiB0aXRsZSxcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjb250ZW50LFxyXG4gICAgICAgICAgICAgICAgcmVkOiBkYW5nZXIsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogY29uZmlybVRleHQgPyBjb25maXJtVGV4dCA6IFN0cmluZ3MuTW9kYWxzLm9rYXksXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBjYW5jZWxUZXh0ID8gY2FuY2VsVGV4dCA6IFN0cmluZ3MuTW9kYWxzLmNhbmNlbCxcclxuICAgICAgICAgICAgICAgIG9uQ29uZmlybTogb25Db25maXJtID8gb25Db25maXJtIDogZW1wdHlGdW5jdGlvbixcclxuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiBvbkNhbmNlbCA/IG9uQ2FuY2VsIDogZW1wdHlGdW5jdGlvblxyXG4gICAgICAgICAgICB9LCBwcm9wcykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93QWRkb25FcnJvcnMoe3BsdWdpbnM6IHBsdWdpbkVycm9ycyA9IFtdLCB0aGVtZXM6IHRoZW1lRXJyb3JzID0gW119KSB7XHJcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMgfHwgIXRoZW1lRXJyb3JzIHx8ICF0aGlzLnNob3VsZFNob3dBZGRvbkVycm9ycykgcmV0dXJuO1xyXG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgYmFja2Ryb3AgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiYmFja2Ryb3BcIikgfHwge2JhY2tkcm9wOiBcImJhY2tkcm9wLTF3cm1LYlwifTtcclxuICAgICAgICBjb25zdCBiYXNlTW9kYWxDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5tb2RhbCAmJiBtLmlubmVyICYmICFtLnNpemVNZWRpdW0pIHx8IHttb2RhbDogXCJtb2RhbC0zNnpGdFdcIiwgaW5uZXI6IFwiaW5uZXItMlZFenk5XCJ9O1xyXG4gICAgICAgIGNvbnN0IG1vZGFsQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzaXplTWVkaXVtXCIpIHx8IHttb2RhbDogXCJtb2RhbC0zdjh6aVVcIiwgc2l6ZU1lZGl1bTogXCJzaXplTWVkaXVtLWN0bmNFNVwiLCBjb250ZW50OiBcImNvbnRlbnQtMktvQ09aXCIsIGhlYWRlcjogXCJoZWFkZXItMm5oYm91XCIsIGZvb3RlcjogXCJmb290ZXItMzBld044XCIsIGNsb3NlOiBcImNsb3NlLWhoeWpXSlwiLCBpbm5lcjogXCJpbm5lci0yWjVRWlhcIn07XHJcbiAgICAgICAgY29uc3QgbW9kYWwgPSAkKGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke2JhY2tkcm9wLmJhY2tkcm9wfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgYmQtY29udGVudC1tb2RhbCAke2Jhc2VNb2RhbENsYXNzZXMubW9kYWx9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHtiYXNlTW9kYWxDbGFzc2VzLmlubmVyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgJHttb2RhbENsYXNzZXMuaGVhZGVyfVwiPjxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7U3RyaW5ncy5Nb2RhbHMuYWRkb25FcnJvcnN9PC9kaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhciBUT1BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+JHtTdHJpbmdzLlBhbmVscy5wbHVnaW5zfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWl0ZW1cIj4ke1N0cmluZ3MuUGFuZWxzLnRoZW1lc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7U3RyaW5ncy5Nb2RhbHMubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW1lc3NhZ2VcIj4ke1N0cmluZ3MuTW9kYWxzLm1lc3NhZ2V9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPiR7U3RyaW5ncy5Nb2RhbHMuZXJyb3J9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBmYWRlICR7bW9kYWxDbGFzc2VzLmNvbnRlbnR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciAke21vZGFsQ2xhc3Nlcy5mb290ZXJ9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYmQtYnV0dG9uXCI+JHtTdHJpbmdzLk1vZGFscy5va2F5fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xyXG5cclxuICAgICAgICBjb25zdCBnZW5lcmF0ZVRhYiA9IGZ1bmN0aW9uKGVycm9ycykge1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSAkKGA8ZGl2IGNsYXNzPVwiZXJyb3JzXCI+YCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSAkKGA8ZGl2IGNsYXNzPVwiZXJyb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+JHtlcnIubWVzc2FnZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj48YSBjbGFzcz1cImVycm9yLWxpbmtcIiBocmVmPVwiXCI+JHtlcnIuZXJyb3IgPyBlcnIuZXJyb3IubWVzc2FnZSA6IFwiXCJ9PC9hPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IuZmluZChcImFcIikub24oXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZ2dlci5zdGFja3RyYWNlKFwiQWRkb25FcnJvclwiLCBgRXJyb3IgZGV0YWlscyBmb3IgJHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9LmAsIGVyci5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCB0YWJzID0gW2dlbmVyYXRlVGFiKHBsdWdpbkVycm9ycyksIGdlbmVyYXRlVGFiKHRoZW1lRXJyb3JzKV07XHJcblxyXG4gICAgICAgIG1vZGFsLmZpbmQoXCIudGFiLWJhci1pdGVtXCIpLm9uKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKFwiLnRhYi1iYXItaXRlbVwiKS5yZW1vdmVDbGFzcyhcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICAkKGUudGFyZ2V0KS5hZGRDbGFzcyhcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKFwiLnNjcm9sbGVyXCIpLmVtcHR5KCkuYXBwZW5kKHRhYnNbJChlLnRhcmdldCkuaW5kZXgoKV0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBtb2RhbC5maW5kKFwiLmZvb3RlciBidXR0b25cIikub24oXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vZGFsLmFkZENsYXNzKFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1vZGFsLmZpbmQoXCIuYmQtYmFja2Ryb3BcIikub24oXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vZGFsLmFkZENsYXNzKFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1vZGFsLmFwcGVuZFRvKFwiI2FwcC1tb3VudFwiKTtcclxuICAgICAgICBpZiAocGx1Z2luRXJyb3JzLmxlbmd0aCkgbW9kYWwuZmluZChcIi50YWItYmFyLWl0ZW1cIilbMF0uY2xpY2soKTtcclxuICAgICAgICBlbHNlIG1vZGFsLmZpbmQoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7XHJcbiAgICAgICAgY29uc3QgQ2hhbmdlbG9nQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJmaXhlZFwiLCBcImltcHJvdmVkXCIpO1xyXG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIlNpemVzXCIsIFwiV2VpZ2h0c1wiKTtcclxuICAgICAgICBjb25zdCBGbGV4Q2hpbGQgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiQ2hpbGRcIik7XHJcbiAgICAgICAgY29uc3QgVGl0bGVzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIlRhZ3NcIiwgXCJkZWZhdWx0XCIpO1xyXG4gICAgICAgIGNvbnN0IENoYW5nZWxvZyA9IFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZShtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLnNlbGVjdGFibGUgPT0gZmFsc2UpO1xyXG4gICAgICAgIGNvbnN0IE1hcmtkb3duUGFyc2VyID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImRlZmF1bHRSdWxlc1wiLCBcInBhcnNlXCIpO1xyXG4gICAgICAgIGlmICghQ2hhbmdlbG9nIHx8ICFNb2RhbFN0YWNrIHx8ICFDaGFuZ2Vsb2dDbGFzc2VzIHx8ICFUZXh0RWxlbWVudCB8fCAhRmxleENoaWxkIHx8ICFUaXRsZXMgfHwgIU1hcmtkb3duUGFyc2VyKSByZXR1cm47XHJcbiAgICBcclxuICAgICAgICBjb25zdCB7aW1hZ2UgPSBcImh0dHBzOi8vcmVwb3NpdG9yeS1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEwNTQ3MzUzNy85NTdiNTQ4MC03YzI2LTExZTktODQwMS01MGZhODIwY2JhZTVcIiwgZGVzY3JpcHRpb24gPSBcIlwiLCBjaGFuZ2VzID0gW10sIHRpdGxlID0gXCJCYW5kYWdlZEJEXCIsIHN1YnRpdGxlID0gYHYke0NvbmZpZy5iYmRWZXJzaW9ufWAsIGZvb3Rlcn0gPSBvcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGNlID0gUmVhY3QuY3JlYXRlRWxlbWVudDtcclxuICAgICAgICBjb25zdCBjaGFuZ2Vsb2dJdGVtcyA9IFtjZShcImltZ1wiLCB7c3JjOiBpbWFnZX0pXTtcclxuICAgICAgICBpZiAoZGVzY3JpcHRpb24pIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJwXCIsIG51bGwsIE1hcmtkb3duUGFyc2VyLnBhcnNlKGRlc2NyaXB0aW9uKSkpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2hhbmdlcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGNoYW5nZXNbY107XHJcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdID8gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA6IENoYW5nZWxvZ0NsYXNzZXMuYWRkZWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hcmdpbiA9IGMgPT0gMCA/IENoYW5nZWxvZ0NsYXNzZXMubWFyZ2luVG9wIDogXCJcIjtcclxuICAgICAgICAgICAgY2hhbmdlbG9nSXRlbXMucHVzaChjZShcImgxXCIsIHtjbGFzc05hbWU6IGAke3R5cGV9ICR7bWFyZ2lufWAsfSwgZW50cnkudGl0bGUpKTtcclxuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGNlKFwidWxcIiwgbnVsbCwgZW50cnkuaXRlbXMubWFwKGkgPT4gY2UoXCJsaVwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShpKSkpKTtcclxuICAgICAgICAgICAgY2hhbmdlbG9nSXRlbXMucHVzaChsaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVuZGVySGVhZGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtncm93OiAxLCBzaHJpbms6IDF9LFxyXG4gICAgICAgICAgICAgICAgY2UoVGl0bGVzLmRlZmF1bHQsIHt0YWc6IFRpdGxlcy5UYWdzLkg0fSwgdGl0bGUpLFxyXG4gICAgICAgICAgICAgICAgY2UoVGV4dEVsZW1lbnQse3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlBSSU1BUlksIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5kYXRlfSwgc3VidGl0bGUpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfTtcclxuICAgIFxyXG4gICAgICAgIGNvbnN0IHJlbmRlckZvb3RlciA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgICAgICAgICAgY29uc3QgQW5jaG9yQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xyXG4gICAgICAgICAgICBjb25zdCBqb2luU3VwcG9ydFNlcnZlciA9IChjbGljaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2xpY2sucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgTW9kYWxTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgICAgIEJEVjIuam9pbkJEMigpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBzdXBwb3J0TGluayA9IEFuY2hvciA/IGNlKEFuY2hvciwge29uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIikgOiBjZShcImFcIiwge2NsYXNzTmFtZTogYCR7QW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsIG9uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIik7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGb290ZXIgPSBjZShUZXh0RWxlbWVudCx7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuUFJJTUFSWX0sIFwiTmVlZCBzdXBwb3J0PyBcIiwgc3VwcG9ydExpbmspO1xyXG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSwgZm9vdGVyID8gZm9vdGVyIDogZGVmYXVsdEZvb3Rlcik7XHJcbiAgICAgICAgfTtcclxuICAgIFxyXG4gICAgICAgIE1vZGFsU3RhY2sucHVzaChmdW5jdGlvbihwcm9wcykge1xyXG4gICAgICAgICAgICByZXR1cm4gY2UoQ2hhbmdlbG9nLCBPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5jb250YWluZXIsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgb25TY3JvbGw6IF8gPT4gXyxcclxuICAgICAgICAgICAgICAgIG9uQ2xvc2U6IF8gPT4gXyxcclxuICAgICAgICAgICAgICAgIHJlbmRlckhlYWRlcjogcmVuZGVySGVhZGVyLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVyRm9vdGVyOiByZW5kZXJGb290ZXIsXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hhbmdlbG9nSXRlbXNcclxuICAgICAgICAgICAgfSwgcHJvcHMpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/modals.js\n"); /***/ }), @@ -899,7 +911,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _settings_addonlist__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./settings/addonlist */ \"./src/ui/settings/addonlist.jsx\");\n/* harmony import */ var _settings_group__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settings/group */ \"./src/ui/settings/group.jsx\");\n/* harmony import */ var _settings_title__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./settings/title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _settings_attribution__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settings/attribution */ \"./src/ui/settings/attribution.jsx\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class SettingsRenderer {\n constructor() {\n this.patchSections();\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(\"strings-updated\", this.forceUpdate);\n }\n\n onChange(onChange) {\n return (collection, category, id) => {\n const before = modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].collections.length + modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].panels.length;\n onChange(collection, category, id);\n const after = modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].collections.length + modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].panels.length;\n if (before != after) setTimeout(this.forceUpdate.bind(this), 50);\n };\n }\n\n buildSettingsPanel(title, config, state, onChange, button = null) {\n config.forEach(section => {\n section.settings.forEach(item => item.value = state[section.id][item.id]);\n });\n return this.getSettingsPanel(title, config, this.onChange(onChange), button);\n }\n\n getSettingsPanel(title, groups, onChange, button = null) {\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_title__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n text: title,\n button: button\n }), groups.map(section => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_group__WEBPACK_IMPORTED_MODULE_2__[\"default\"], Object.assign({}, section, {\n onChange\n }));\n })];\n }\n\n getAddonPanel(title, addonList, addonState, options = {}) {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_addonlist__WEBPACK_IMPORTED_MODULE_1__[\"default\"], Object.assign({}, {\n title: title,\n addonList: addonList,\n addonState: addonState\n }, options));\n }\n\n async patchSections() {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Patcher\"].after(\"SettingsManager\", modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByDisplayName(\"FluxContainer(GuildSettings)\").prototype, \"render\", thisObject => {\n thisObject._reactInternalFiber.return.return.return.return.return.return.memoizedProps.id = \"guild-settings\";\n });\n const UserSettings = await modules__WEBPACK_IMPORTED_MODULE_0__[\"ReactComponents\"].get(\"UserSettings\", m => m.prototype && m.prototype.generateSections);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Patcher\"].after(\"SettingsManager\", UserSettings.prototype, \"render\", thisObject => {\n thisObject._reactInternalFiber.return.return.return.return.return.return.return.memoizedProps.id = \"user-settings\";\n });\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Patcher\"].after(\"SettingsManager\", UserSettings.prototype, \"generateSections\", (thisObject, args, returnValue) => {\n let location = returnValue.findIndex(s => s.section.toLowerCase() == \"linux\") + 1;\n\n const insert = section => {\n returnValue.splice(location, 0, section);\n location++;\n };\n\n insert({\n section: \"DIVIDER\"\n });\n insert({\n section: \"HEADER\",\n label: \"BandagedBD\"\n });\n\n for (const collection of modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].collections) {\n if (collection.disabled) continue;\n insert({\n section: collection.name,\n label: collection.name,\n element: () => this.buildSettingsPanel(collection.name, collection.settings, modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].state[collection.id], modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].onSettingChange.bind(modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"], collection.id), collection.button ? collection.button : null)\n });\n }\n\n for (const panel of modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].panels.sort((a, b) => a.order > b.order)) {\n if (panel.clickListener) panel.onClick = event => panel.clickListener(thisObject, event, returnValue);\n insert(panel);\n }\n\n insert({\n section: \"CUSTOM\",\n element: _settings_attribution__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n });\n });\n this.forceUpdate();\n }\n\n forceUpdate() {\n const viewClass = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"standardSidebarView\").standardSidebarView.split(\" \")[0];\n const node = document.querySelector(`.${viewClass}`);\n if (!node) return;\n const stateNode = modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].findInReactTree(modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].getReactInstance(node), m => m && m.generateSections, {\n walkable: [\"return\", \"stateNode\"]\n });\n if (stateNode) stateNode.forceUpdate();\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzLmpzPzc2YmUiXSwibmFtZXMiOlsiU2V0dGluZ3NSZW5kZXJlciIsImNvbnN0cnVjdG9yIiwicGF0Y2hTZWN0aW9ucyIsIkV2ZW50cyIsIm9uIiwiZm9yY2VVcGRhdGUiLCJvbkNoYW5nZSIsImNvbGxlY3Rpb24iLCJjYXRlZ29yeSIsImlkIiwiYmVmb3JlIiwiU2V0dGluZ3MiLCJjb2xsZWN0aW9ucyIsImxlbmd0aCIsInBhbmVscyIsImFmdGVyIiwic2V0VGltZW91dCIsImJpbmQiLCJidWlsZFNldHRpbmdzUGFuZWwiLCJ0aXRsZSIsImNvbmZpZyIsInN0YXRlIiwiYnV0dG9uIiwiZm9yRWFjaCIsInNlY3Rpb24iLCJzZXR0aW5ncyIsIml0ZW0iLCJ2YWx1ZSIsImdldFNldHRpbmdzUGFuZWwiLCJncm91cHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJTZXR0aW5nc1RpdGxlIiwidGV4dCIsIm1hcCIsIlNldHRpbmdzR3JvdXAiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRBZGRvblBhbmVsIiwiYWRkb25MaXN0IiwiYWRkb25TdGF0ZSIsIm9wdGlvbnMiLCJBZGRvbkxpc3QiLCJQYXRjaGVyIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeURpc3BsYXlOYW1lIiwicHJvdG90eXBlIiwidGhpc09iamVjdCIsIl9yZWFjdEludGVybmFsRmliZXIiLCJyZXR1cm4iLCJtZW1vaXplZFByb3BzIiwiVXNlclNldHRpbmdzIiwiUmVhY3RDb21wb25lbnRzIiwiZ2V0IiwibSIsImdlbmVyYXRlU2VjdGlvbnMiLCJhcmdzIiwicmV0dXJuVmFsdWUiLCJsb2NhdGlvbiIsImZpbmRJbmRleCIsInMiLCJ0b0xvd2VyQ2FzZSIsImluc2VydCIsInNwbGljZSIsImxhYmVsIiwiZGlzYWJsZWQiLCJuYW1lIiwiZWxlbWVudCIsIm9uU2V0dGluZ0NoYW5nZSIsInBhbmVsIiwic29ydCIsImEiLCJiIiwib3JkZXIiLCJjbGlja0xpc3RlbmVyIiwib25DbGljayIsImV2ZW50IiwiQXR0cmlidXRpb24iLCJ2aWV3Q2xhc3MiLCJnZXRCeVByb3BzIiwic3RhbmRhcmRTaWRlYmFyVmlldyIsInNwbGl0Iiwibm9kZSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsInN0YXRlTm9kZSIsIlV0aWxpdGllcyIsImZpbmRJblJlYWN0VHJlZSIsImdldFJlYWN0SW5zdGFuY2UiLCJ3YWxrYWJsZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLG1FQUFJLE1BQU1BLGdCQUFOLENBQXVCO0FBRXRDQyxhQUFXLEdBQUc7QUFDVixTQUFLQyxhQUFMO0FBQ0FDLGtEQUFNLENBQUNDLEVBQVAsQ0FBVSxpQkFBVixFQUE2QixLQUFLQyxXQUFsQztBQUNIOztBQUVEQyxVQUFRLENBQUNBLFFBQUQsRUFBVztBQUNmLFdBQU8sQ0FBQ0MsVUFBRCxFQUFhQyxRQUFiLEVBQXVCQyxFQUF2QixLQUE4QjtBQUNqQyxZQUFNQyxNQUFNLEdBQUdDLGdEQUFRLENBQUNDLFdBQVQsQ0FBcUJDLE1BQXJCLEdBQThCRixnREFBUSxDQUFDRyxNQUFULENBQWdCRCxNQUE3RDtBQUNBUCxjQUFRLENBQUNDLFVBQUQsRUFBYUMsUUFBYixFQUF1QkMsRUFBdkIsQ0FBUjtBQUNBLFlBQU1NLEtBQUssR0FBR0osZ0RBQVEsQ0FBQ0MsV0FBVCxDQUFxQkMsTUFBckIsR0FBOEJGLGdEQUFRLENBQUNHLE1BQVQsQ0FBZ0JELE1BQTVEO0FBQ0EsVUFBSUgsTUFBTSxJQUFJSyxLQUFkLEVBQXFCQyxVQUFVLENBQUMsS0FBS1gsV0FBTCxDQUFpQlksSUFBakIsQ0FBc0IsSUFBdEIsQ0FBRCxFQUE4QixFQUE5QixDQUFWO0FBQ3hCLEtBTEQ7QUFNSDs7QUFFREMsb0JBQWtCLENBQUNDLEtBQUQsRUFBUUMsTUFBUixFQUFnQkMsS0FBaEIsRUFBdUJmLFFBQXZCLEVBQWlDZ0IsTUFBTSxHQUFH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QUFDRSxLQUFGLEdBQVVELENBQUMsQ0FBQ0MsS0FBMUMsQ0FBcEIsRUFBc0U7QUFDbEUsWUFBSUosS0FBSyxDQUFDSyxhQUFWLEVBQXlCTCxLQUFLLENBQUNNLE9BQU4sR0FBaUJDLEtBQUQsSUFBV1AsS0FBSyxDQUFDSyxhQUFOLENBQW9CM0IsVUFBcEIsRUFBZ0M2QixLQUFoQyxFQUF1Q25CLFdBQXZDLENBQTNCO0FBQ3pCSyxjQUFNLENBQUNPLEtBQUQsQ0FBTjtBQUNIOztBQUNEUCxZQUFNLENBQUM7QUFBQ3RDLGVBQU8sRUFBRSxRQUFWO0FBQW9CMkMsZUFBTyxFQUFFVSw2REFBV0E7QUFBeEMsT0FBRCxDQUFOO0FBQ0gsS0FyQkQ7QUFzQkEsU0FBS3hFLFdBQUw7QUFDSDs7QUFFREEsYUFBVyxHQUFHO0FBQ1YsVUFBTXlFLFNBQVMsR0FBR2xDLHNEQUFjLENBQUNtQyxVQUFmLENBQTBCLHFCQUExQixFQUFpREMsbUJBQWpELENBQXFFQyxLQUFyRSxDQUEyRSxHQUEzRSxFQUFnRixDQUFoRixDQUFsQjtBQUNBLFVBQU1DLElBQUksR0FBR0MsUUFBUSxDQUFDQyxhQUFULENBQXdCLElBQUdOLFNBQVUsRUFBckMsQ0FBYjtBQUNBLFFBQUksQ0FBQ0ksSUFBTCxFQUFXO0FBQ1gsVUFBTUcsU0FBUyxHQUFHQyxpREFBUyxDQUFDQyxlQUFWLENBQTBCRCxpREFBUyxDQUFDRSxnQkFBVixDQUEyQk4sSUFBM0IsQ0FBMUIsRUFBNEQ1QixDQUFDLElBQUlBLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxnQkFBeEUsRUFBMEY7QUFBQ2tDLGNBQVEsRUFBRSxDQUFDLFFBQUQsRUFBVyxXQUFYO0FBQVgsS0FBMUYsQ0FBbEI7QUFDQSxRQUFJSixTQUFKLEVBQWVBLFNBQVMsQ0FBQ2hGLFdBQVY7QUFDbEI7O0FBNUVxQyxDQUEzQixFQUFmIiwiZmlsZSI6Ii4vc3JjL3VpL3NldHRpbmdzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgV2VicGFja01vZHVsZXMsIFBhdGNoZXIsIFJlYWN0Q29tcG9uZW50cywgVXRpbGl0aWVzLCBTZXR0aW5ncywgRXZlbnRzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IEFkZG9uTGlzdCBmcm9tIFwiLi9zZXR0aW5ncy9hZGRvbmxpc3RcIjtcclxuaW1wb3J0IFNldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3MvZ3JvdXBcIjtcclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3MvdGl0bGVcIjtcclxuaW1wb3J0IEF0dHJpYnV0aW9uIGZyb20gXCIuL3NldHRpbmdzL2F0dHJpYnV0aW9uXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgU2V0dGluZ3NSZW5kZXJlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5wYXRjaFNlY3Rpb25zKCk7XHJcbiAgICAgICAgRXZlbnRzLm9uKFwic3RyaW5ncy11cGRhdGVkXCIsIHRoaXMuZm9yY2VVcGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKG9uQ2hhbmdlKSB7XHJcbiAgICAgICAgcmV0dXJuIChjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gU2V0dGluZ3MuY29sbGVjdGlvbnMubGVuZ3RoICsgU2V0dGluZ3MucGFuZWxzLmxlbmd0aDtcclxuICAgICAgICAgICAgb25DaGFuZ2UoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKTtcclxuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBTZXR0aW5ncy5jb2xsZWN0aW9ucy5sZW5ndGggKyBTZXR0aW5ncy5wYW5lbHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAoYmVmb3JlICE9IGFmdGVyKSBzZXRUaW1lb3V0KHRoaXMuZm9yY2VVcGRhdGUuYmluZCh0aGlzKSwgNTApO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRTZXR0aW5nc1BhbmVsKHRpdGxlLCBjb25maWcsIHN0YXRlLCBvbkNoYW5nZSwgYnV0dG9uID0gbnVsbCkge1xyXG4gICAgICAgIGNvbmZpZy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLmZvckVhY2goaXRlbSA9PiBpdGVtLnZhbHVlID0gc3RhdGVbc2VjdGlvbi5pZF1baXRlbS5pZF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzUGFuZWwodGl0bGUsIGNvbmZpZywgdGhpcy5vbkNoYW5nZShvbkNoYW5nZSksIGJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2V0dGluZ3NQYW5lbCh0aXRsZSwgZ3JvdXBzLCBvbkNoYW5nZSwgYnV0dG9uID0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBbUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGl0bGUsIGJ1dHRvbjogYnV0dG9ufSksIGdyb3Vwcy5tYXAoc2VjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzR3JvdXAsIE9iamVjdC5hc3NpZ24oe30sIHNlY3Rpb24sIHtvbkNoYW5nZX0pKTtcclxuICAgICAgICB9KV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWRkb25QYW5lbCh0aXRsZSwgYWRkb25MaXN0LCBhZGRvblN0YXRlLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBZGRvbkxpc3QsIE9iamVjdC5hc3NpZ24oe30sIHtcclxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICBhZGRvbkxpc3Q6IGFkZG9uTGlzdCxcclxuICAgICAgICAgICAgYWRkb25TdGF0ZTogYWRkb25TdGF0ZVxyXG4gICAgICAgIH0sIG9wdGlvbnMpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwYXRjaFNlY3Rpb25zKCkge1xyXG4gICAgICAgIFBhdGNoZXIuYWZ0ZXIoXCJTZXR0aW5nc01hbmFnZXJcIiwgV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIkZsdXhDb250YWluZXIoR3VpbGRTZXR0aW5ncylcIikucHJvdG90eXBlLCBcInJlbmRlclwiLCAodGhpc09iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzT2JqZWN0Ll9yZWFjdEludGVybmFsRmliZXIucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ubWVtb2l6ZWRQcm9wcy5pZCA9IFwiZ3VpbGQtc2V0dGluZ3NcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBVc2VyU2V0dGluZ3MgPSBhd2FpdCBSZWFjdENvbXBvbmVudHMuZ2V0KFwiVXNlclNldHRpbmdzXCIsIG0gPT4gbS5wcm90b3R5cGUgJiYgbS5wcm90b3R5cGUuZ2VuZXJhdGVTZWN0aW9ucyk7XHJcbiAgICAgICAgUGF0Y2hlci5hZnRlcihcIlNldHRpbmdzTWFuYWdlclwiLCBVc2VyU2V0dGluZ3MucHJvdG90eXBlLCBcInJlbmRlclwiLCAodGhpc09iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzT2JqZWN0Ll9yZWFjdEludGVybmFsRmliZXIucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLm1lbW9pemVkUHJvcHMuaWQgPSBcInVzZXItc2V0dGluZ3NcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICBQYXRjaGVyLmFmdGVyKFwiU2V0dGluZ3NNYW5hZ2VyXCIsIFVzZXJTZXR0aW5ncy5wcm90b3R5cGUsIFwiZ2VuZXJhdGVTZWN0aW9uc1wiLCAodGhpc09iamVjdCwgYXJncywgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgbGV0IGxvY2F0aW9uID0gcmV0dXJuVmFsdWUuZmluZEluZGV4KHMgPT4gcy5zZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT0gXCJsaW51eFwiKSArIDE7XHJcbiAgICAgICAgICAgIGNvbnN0IGluc2VydCA9IChzZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS5zcGxpY2UobG9jYXRpb24sIDAsIHNlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24rKztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaW5zZXJ0KHtzZWN0aW9uOiBcIkRJVklERVJcIn0pO1xyXG4gICAgICAgICAgICBpbnNlcnQoe3NlY3Rpb246IFwiSEVBREVSXCIsIGxhYmVsOiBcIkJhbmRhZ2VkQkRcIn0pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgU2V0dGluZ3MuY29sbGVjdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLmRpc2FibGVkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGluc2VydCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogY29sbGVjdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb2xsZWN0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogKCkgPT4gdGhpcy5idWlsZFNldHRpbmdzUGFuZWwoY29sbGVjdGlvbi5uYW1lLCBjb2xsZWN0aW9uLnNldHRpbmdzLCBTZXR0aW5ncy5zdGF0ZVtjb2xsZWN0aW9uLmlkXSwgU2V0dGluZ3Mub25TZXR0aW5nQ2hhbmdlLmJpbmQoU2V0dGluZ3MsIGNvbGxlY3Rpb24uaWQpLCBjb2xsZWN0aW9uLmJ1dHRvbiA/IGNvbGxlY3Rpb24uYnV0dG9uIDogbnVsbClcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFuZWwgb2YgU2V0dGluZ3MucGFuZWxzLnNvcnQoKGEsYikgPT4gYS5vcmRlciA+IGIub3JkZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFuZWwuY2xpY2tMaXN0ZW5lcikgcGFuZWwub25DbGljayA9IChldmVudCkgPT4gcGFuZWwuY2xpY2tMaXN0ZW5lcih0aGlzT2JqZWN0LCBldmVudCwgcmV0dXJuVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaW5zZXJ0KHBhbmVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbnNlcnQoe3NlY3Rpb246IFwiQ1VTVE9NXCIsIGVsZW1lbnQ6IEF0dHJpYnV0aW9ufSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmNlVXBkYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXdDbGFzcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzdGFuZGFyZFNpZGViYXJWaWV3XCIpLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt2aWV3Q2xhc3N9YCk7XHJcbiAgICAgICAgaWYgKCFub2RlKSByZXR1cm47XHJcbiAgICAgICAgY29uc3Qgc3RhdGVOb2RlID0gVXRpbGl0aWVzLmZpbmRJblJlYWN0VHJlZShVdGlsaXRpZXMuZ2V0UmVhY3RJbnN0YW5jZShub2RlKSwgbSA9PiBtICYmIG0uZ2VuZXJhdGVTZWN0aW9ucywge3dhbGthYmxlOiBbXCJyZXR1cm5cIiwgXCJzdGF0ZU5vZGVcIl19KTtcclxuICAgICAgICBpZiAoc3RhdGVOb2RlKSBzdGF0ZU5vZGUuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/settings.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _settings_addonlist__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./settings/addonlist */ \"./src/ui/settings/addonlist.jsx\");\n/* harmony import */ var _settings_group__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settings/group */ \"./src/ui/settings/group.jsx\");\n/* harmony import */ var _settings_title__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./settings/title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _settings_attribution__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settings/attribution */ \"./src/ui/settings/attribution.jsx\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class SettingsRenderer {\n constructor() {\n this.patchSections();\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(\"strings-updated\", this.forceUpdate);\n }\n\n onChange(onChange) {\n return (collection, category, id) => {\n const before = modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].collections.length + modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].panels.length;\n onChange(collection, category, id);\n const after = modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].collections.length + modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].panels.length;\n if (before != after) setTimeout(this.forceUpdate.bind(this), 50);\n };\n }\n\n buildSettingsPanel(title, config, state, onChange, button = null) {\n config.forEach(section => {\n section.settings.forEach(item => item.value = state[section.id][item.id]);\n });\n return this.getSettingsPanel(title, config, this.onChange(onChange), button);\n }\n\n getSettingsPanel(title, groups, onChange, button = null) {\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_title__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n text: title,\n button: button\n }), groups.map(section => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_group__WEBPACK_IMPORTED_MODULE_2__[\"default\"], Object.assign({}, section, {\n onChange\n }));\n })];\n }\n\n getAddonPanel(title, addonList, addonState, options = {}) {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_settings_addonlist__WEBPACK_IMPORTED_MODULE_1__[\"default\"], Object.assign({}, {\n title: title,\n addonList: addonList,\n addonState: addonState\n }, options));\n }\n\n async patchSections() {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"ReactComponents\"].get(\"FluxContainer(GuildSettings)\", m => m.displayName == \"FluxContainer(GuildSettings)\").then(c => console.log(\"COMPONENT\", c)); // const GuildSettings = await ReactComponents.get(\"FluxContainer(GuildSettings)\", m => m.displayName == \"FluxContainer(GuildSettings)\");\n // Patcher.after(\"SettingsManager\", GuildSettings.prototype, \"render\", (thisObject) => {\n // thisObject._reactInternalFiber.return.return.return.return.return.return.memoizedProps.id = \"guild-settings\";\n // });\n\n const UserSettings = await modules__WEBPACK_IMPORTED_MODULE_0__[\"ReactComponents\"].get(\"UserSettings\", m => m.prototype && m.prototype.generateSections);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Patcher\"].after(\"SettingsManager\", UserSettings.prototype, \"render\", thisObject => {\n thisObject._reactInternalFiber.return.return.return.return.return.return.return.memoizedProps.id = \"user-settings\";\n });\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Patcher\"].after(\"SettingsManager\", UserSettings.prototype, \"generateSections\", (thisObject, args, returnValue) => {\n let location = returnValue.findIndex(s => s.section.toLowerCase() == \"linux\") + 1;\n\n const insert = section => {\n returnValue.splice(location, 0, section);\n location++;\n };\n\n insert({\n section: \"DIVIDER\"\n });\n insert({\n section: \"HEADER\",\n label: \"BandagedBD\"\n });\n\n for (const collection of modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].collections) {\n if (collection.disabled) continue;\n insert({\n section: collection.name,\n label: collection.name,\n element: () => this.buildSettingsPanel(collection.name, collection.settings, modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].state[collection.id], modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].onSettingChange.bind(modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"], collection.id), collection.button ? collection.button : null)\n });\n }\n\n for (const panel of modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].panels.sort((a, b) => a.order > b.order)) {\n if (panel.clickListener) panel.onClick = event => panel.clickListener(thisObject, event, returnValue);\n insert(panel);\n }\n\n insert({\n section: \"CUSTOM\",\n element: _settings_attribution__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n });\n });\n this.forceUpdate();\n }\n\n forceUpdate() {\n const viewClass = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByProps(\"standardSidebarView\").standardSidebarView.split(\" \")[0];\n const node = document.querySelector(`.${viewClass}`);\n if (!node) return;\n const stateNode = modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].findInReactTree(modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].getReactInstance(node), m => m && m.generateSections, {\n walkable: [\"return\", \"stateNode\"]\n });\n if (stateNode) stateNode.forceUpdate();\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzLmpzPzc2YmUiXSwibmFtZXMiOlsiU2V0dGluZ3NSZW5kZXJlciIsImNvbnN0cnVjdG9yIiwicGF0Y2hTZWN0aW9ucyIsIkV2ZW50cyIsIm9uIiwiZm9yY2VVcGRhdGUiLCJvbkNoYW5nZSIsImNvbGxlY3Rpb24iLCJjYXRlZ29yeSIsImlkIiwiYmVmb3JlIiwiU2V0dGluZ3MiLCJjb2xsZWN0aW9ucyIsImxlbmd0aCIsInBhbmVscyIsImFmdGVyIiwic2V0VGltZW91dCIsImJpbmQiLCJidWlsZFNldHRpbmdzUGFuZWwiLCJ0aXRsZSIsImNvbmZpZyIsInN0YXRlIiwiYnV0dG9uIiwiZm9yRWFjaCIsInNlY3Rpb24iLCJzZXR0aW5ncyIsIml0ZW0iLCJ2YWx1ZSIsImdldFNldHRpbmdzUGFuZWwiLCJncm91cHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJTZXR0aW5nc1RpdGxlIiwidGV4dCIsIm1hcCIsIlNldHRpbmdzR3JvdXAiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRBZGRvblBhbmVsIiwiYWRkb25MaXN0IiwiYWRkb25TdGF0ZSIsIm9wdGlvbnMiLCJBZGRvbkxpc3QiLCJSZWFjdENvbXBvbmVudHMiLCJnZXQiLCJtIiwiZGlzcGxheU5hbWUiLCJ0aGVuIiwiYyIsImNvbnNvbGUiLCJsb2ciLCJVc2VyU2V0dGluZ3MiLCJwcm90b3R5cGUiLCJnZW5lcmF0ZVNlY3Rpb25zIiwiUGF0Y2hlciIsInRoaXNPYmplY3QiLCJfcmVhY3RJbnRlcm5hbEZpYmVyIiwicmV0dXJuIiwibWVtb2l6ZWRQcm9wcyIsImFyZ3MiLCJyZXR1cm5WYWx1ZSIsImxvY2F0aW9uIiwiZmluZEluZGV4IiwicyIsInRvTG93ZXJDYXNlIiwiaW5zZXJ0Iiwic3BsaWNlIiwibGFiZWwiLCJkaXNhYmxlZCIsIm5hbWUiLCJlbGVtZW50Iiwib25TZXR0aW5nQ2hhbmdlIiwicGFuZWwiLCJzb3J0IiwiYSIsImIiLCJvcmRlciIsImNsaWNrTGlzdGVuZXIiLCJvbkNsaWNrIiwiZXZlbnQiLCJBdHRyaWJ1dGlvbiIsInZpZXdDbGFzcyIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlQcm9wcyIsInN0YW5kYXJkU2lkZWJhclZpZXciLCJzcGxpdCIsIm5vZGUiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJzdGF0ZU5vZGUiLCJVdGlsaXRpZXMiLCJmaW5kSW5SZWFjdFRyZWUiLCJnZXRSZWFjdEluc3RhbmNlIiwid2Fsa2FibGUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFZSxtRUFBSSxNQUFNQSxnQkFBTixDQUF1QjtBQUV0Q0MsYUFBVyxHQUFHO0FBQ1YsU0FBS0MsYUFBTDtBQUNBQyxrREFBTSxDQUFDQyxFQUFQLENBQVUsaUJBQVYsRUFBNkIsS0FBS0MsV0FBbEM7QUFDSDs7QUFFREMsVUFBUSxDQUFDQSxRQUFELEVBQVc7QUFDZixXQUFPLENBQUNDLFVBQUQsRUFBYUMsUUFBYixFQUF1QkMsRUFBdkIsS0FBOEI7QUFDakMsWUFBTUMsTUFBTSxHQUFHQyxnREFBUSxDQUFDQyxXQUFULENBQXFCQyxNQUFyQixHQUE4QkYsZ0RBQVEsQ0FBQ0csTUFBVCxDQUFnQkQsTUFBN0Q7QUFDQVAsY0FBUSxDQUFDQyxVQUFELEVBQWFDLFFBQWIsRUFBdUJDLEVBQXZCLENBQVI7QUFDQSxZQUFNTSxLQUFLLEdBQUdKLGdEQUFRLENBQUNDLFdBQVQsQ0FBcUJDLE1BQXJCLEdBQThCRixnREFBUSxDQUFDRyxNQUFULENBQWdCRCxNQUE1RDtBQUNBLFVBQUlILE1BQU0sSUFBSUssS0FBZCxFQUFxQkMsVUFBVSxDQUFDLEtBQUtYLFdBQUwsQ0FBaUJZLElBQWpCLENBQXNCLElBQXRCLENBQUQsRUFBOEIsRUFBOUIsQ0FBVjtBQUN4QixLQUxEO0FBTUg7O0FBRURDLG9CQUFrQixDQUFDQyxLQUFELEVBQVFDLE1BQVIsRUFBZ0JDLEtBQWhCLEVBQXVCZixR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LENBQUNLLGFBQVYsRUFBeUJMLEtBQUssQ0FBQ00sT0FBTixHQUFpQkMsS0FBRCxJQUFXUCxLQUFLLENBQUNLLGFBQU4sQ0FBb0J0QixVQUFwQixFQUFnQ3dCLEtBQWhDLEVBQXVDbkIsV0FBdkMsQ0FBM0I7QUFDekJLLGNBQU0sQ0FBQ08sS0FBRCxDQUFOO0FBQ0g7O0FBQ0RQLFlBQU0sQ0FBQztBQUFDekMsZUFBTyxFQUFFLFFBQVY7QUFBb0I4QyxlQUFPLEVBQUVVLDZEQUFXQTtBQUF4QyxPQUFELENBQU47QUFDSCxLQXJCRDtBQXNCQSxTQUFLM0UsV0FBTDtBQUNIOztBQUVEQSxhQUFXLEdBQUc7QUFDVixVQUFNNEUsU0FBUyxHQUFHQyxzREFBYyxDQUFDQyxVQUFmLENBQTBCLHFCQUExQixFQUFpREMsbUJBQWpELENBQXFFQyxLQUFyRSxDQUEyRSxHQUEzRSxFQUFnRixDQUFoRixDQUFsQjtBQUNBLFVBQU1DLElBQUksR0FBR0MsUUFBUSxDQUFDQyxhQUFULENBQXdCLElBQUdQLFNBQVUsRUFBckMsQ0FBYjtBQUNBLFFBQUksQ0FBQ0ssSUFBTCxFQUFXO0FBQ1gsVUFBTUcsU0FBUyxHQUFHQyxpREFBUyxDQUFDQyxlQUFWLENBQTBCRCxpREFBUyxDQUFDRSxnQkFBVixDQUEyQk4sSUFBM0IsQ0FBMUIsRUFBNER6QyxDQUFDLElBQUlBLENBQUMsSUFBSUEsQ0FBQyxDQUFDUSxnQkFBeEUsRUFBMEY7QUFBQ3dDLGNBQVEsRUFBRSxDQUFDLFFBQUQsRUFBVyxXQUFYO0FBQVgsS0FBMUYsQ0FBbEI7QUFDQSxRQUFJSixTQUFKLEVBQWVBLFNBQVMsQ0FBQ3BGLFdBQVY7QUFDbEI7O0FBOUVxQyxDQUEzQixFQUFmIiwiZmlsZSI6Ii4vc3JjL3VpL3NldHRpbmdzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgV2VicGFja01vZHVsZXMsIFBhdGNoZXIsIFJlYWN0Q29tcG9uZW50cywgVXRpbGl0aWVzLCBTZXR0aW5ncywgRXZlbnRzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IEFkZG9uTGlzdCBmcm9tIFwiLi9zZXR0aW5ncy9hZGRvbmxpc3RcIjtcclxuaW1wb3J0IFNldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3MvZ3JvdXBcIjtcclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3MvdGl0bGVcIjtcclxuaW1wb3J0IEF0dHJpYnV0aW9uIGZyb20gXCIuL3NldHRpbmdzL2F0dHJpYnV0aW9uXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgU2V0dGluZ3NSZW5kZXJlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5wYXRjaFNlY3Rpb25zKCk7XHJcbiAgICAgICAgRXZlbnRzLm9uKFwic3RyaW5ncy11cGRhdGVkXCIsIHRoaXMuZm9yY2VVcGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKG9uQ2hhbmdlKSB7XHJcbiAgICAgICAgcmV0dXJuIChjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gU2V0dGluZ3MuY29sbGVjdGlvbnMubGVuZ3RoICsgU2V0dGluZ3MucGFuZWxzLmxlbmd0aDtcclxuICAgICAgICAgICAgb25DaGFuZ2UoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKTtcclxuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBTZXR0aW5ncy5jb2xsZWN0aW9ucy5sZW5ndGggKyBTZXR0aW5ncy5wYW5lbHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAoYmVmb3JlICE9IGFmdGVyKSBzZXRUaW1lb3V0KHRoaXMuZm9yY2VVcGRhdGUuYmluZCh0aGlzKSwgNTApO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRTZXR0aW5nc1BhbmVsKHRpdGxlLCBjb25maWcsIHN0YXRlLCBvbkNoYW5nZSwgYnV0dG9uID0gbnVsbCkge1xyXG4gICAgICAgIGNvbmZpZy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLmZvckVhY2goaXRlbSA9PiBpdGVtLnZhbHVlID0gc3RhdGVbc2VjdGlvbi5pZF1baXRlbS5pZF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzUGFuZWwodGl0bGUsIGNvbmZpZywgdGhpcy5vbkNoYW5nZShvbkNoYW5nZSksIGJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2V0dGluZ3NQYW5lbCh0aXRsZSwgZ3JvdXBzLCBvbkNoYW5nZSwgYnV0dG9uID0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBbUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGl0bGUsIGJ1dHRvbjogYnV0dG9ufSksIGdyb3Vwcy5tYXAoc2VjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzR3JvdXAsIE9iamVjdC5hc3NpZ24oe30sIHNlY3Rpb24sIHtvbkNoYW5nZX0pKTtcclxuICAgICAgICB9KV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWRkb25QYW5lbCh0aXRsZSwgYWRkb25MaXN0LCBhZGRvblN0YXRlLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBZGRvbkxpc3QsIE9iamVjdC5hc3NpZ24oe30sIHtcclxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICBhZGRvbkxpc3Q6IGFkZG9uTGlzdCxcclxuICAgICAgICAgICAgYWRkb25TdGF0ZTogYWRkb25TdGF0ZVxyXG4gICAgICAgIH0sIG9wdGlvbnMpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwYXRjaFNlY3Rpb25zKCkge1xyXG4gICAgICAgIFJlYWN0Q29tcG9uZW50cy5nZXQoXCJGbHV4Q29udGFpbmVyKEd1aWxkU2V0dGluZ3MpXCIsIG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkZsdXhDb250YWluZXIoR3VpbGRTZXR0aW5ncylcIikudGhlbihjID0+IGNvbnNvbGUubG9nKFwiQ09NUE9ORU5UXCIsIGMpKTtcclxuICAgICAgICAvLyBjb25zdCBHdWlsZFNldHRpbmdzID0gYXdhaXQgUmVhY3RDb21wb25lbnRzLmdldChcIkZsdXhDb250YWluZXIoR3VpbGRTZXR0aW5ncylcIiwgbSA9PiBtLmRpc3BsYXlOYW1lID09IFwiRmx1eENvbnRhaW5lcihHdWlsZFNldHRpbmdzKVwiKTtcclxuICAgICAgICAvLyBQYXRjaGVyLmFmdGVyKFwiU2V0dGluZ3NNYW5hZ2VyXCIsIEd1aWxkU2V0dGluZ3MucHJvdG90eXBlLCBcInJlbmRlclwiLCAodGhpc09iamVjdCkgPT4ge1xyXG4gICAgICAgIC8vICAgICB0aGlzT2JqZWN0Ll9yZWFjdEludGVybmFsRmliZXIucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ubWVtb2l6ZWRQcm9wcy5pZCA9IFwiZ3VpbGQtc2V0dGluZ3NcIjtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICBjb25zdCBVc2VyU2V0dGluZ3MgPSBhd2FpdCBSZWFjdENvbXBvbmVudHMuZ2V0KFwiVXNlclNldHRpbmdzXCIsIG0gPT4gbS5wcm90b3R5cGUgJiYgbS5wcm90b3R5cGUuZ2VuZXJhdGVTZWN0aW9ucyk7XHJcbiAgICAgICAgUGF0Y2hlci5hZnRlcihcIlNldHRpbmdzTWFuYWdlclwiLCBVc2VyU2V0dGluZ3MucHJvdG90eXBlLCBcInJlbmRlclwiLCAodGhpc09iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzT2JqZWN0Ll9yZWFjdEludGVybmFsRmliZXIucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLm1lbW9pemVkUHJvcHMuaWQgPSBcInVzZXItc2V0dGluZ3NcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICBQYXRjaGVyLmFmdGVyKFwiU2V0dGluZ3NNYW5hZ2VyXCIsIFVzZXJTZXR0aW5ncy5wcm90b3R5cGUsIFwiZ2VuZXJhdGVTZWN0aW9uc1wiLCAodGhpc09iamVjdCwgYXJncywgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgbGV0IGxvY2F0aW9uID0gcmV0dXJuVmFsdWUuZmluZEluZGV4KHMgPT4gcy5zZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT0gXCJsaW51eFwiKSArIDE7XHJcbiAgICAgICAgICAgIGNvbnN0IGluc2VydCA9IChzZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS5zcGxpY2UobG9jYXRpb24sIDAsIHNlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24rKztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaW5zZXJ0KHtzZWN0aW9uOiBcIkRJVklERVJcIn0pO1xyXG4gICAgICAgICAgICBpbnNlcnQoe3NlY3Rpb246IFwiSEVBREVSXCIsIGxhYmVsOiBcIkJhbmRhZ2VkQkRcIn0pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgU2V0dGluZ3MuY29sbGVjdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLmRpc2FibGVkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGluc2VydCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogY29sbGVjdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb2xsZWN0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogKCkgPT4gdGhpcy5idWlsZFNldHRpbmdzUGFuZWwoY29sbGVjdGlvbi5uYW1lLCBjb2xsZWN0aW9uLnNldHRpbmdzLCBTZXR0aW5ncy5zdGF0ZVtjb2xsZWN0aW9uLmlkXSwgU2V0dGluZ3Mub25TZXR0aW5nQ2hhbmdlLmJpbmQoU2V0dGluZ3MsIGNvbGxlY3Rpb24uaWQpLCBjb2xsZWN0aW9uLmJ1dHRvbiA/IGNvbGxlY3Rpb24uYnV0dG9uIDogbnVsbClcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFuZWwgb2YgU2V0dGluZ3MucGFuZWxzLnNvcnQoKGEsYikgPT4gYS5vcmRlciA+IGIub3JkZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFuZWwuY2xpY2tMaXN0ZW5lcikgcGFuZWwub25DbGljayA9IChldmVudCkgPT4gcGFuZWwuY2xpY2tMaXN0ZW5lcih0aGlzT2JqZWN0LCBldmVudCwgcmV0dXJuVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaW5zZXJ0KHBhbmVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbnNlcnQoe3NlY3Rpb246IFwiQ1VTVE9NXCIsIGVsZW1lbnQ6IEF0dHJpYnV0aW9ufSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmNlVXBkYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXdDbGFzcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzdGFuZGFyZFNpZGViYXJWaWV3XCIpLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt2aWV3Q2xhc3N9YCk7XHJcbiAgICAgICAgaWYgKCFub2RlKSByZXR1cm47XHJcbiAgICAgICAgY29uc3Qgc3RhdGVOb2RlID0gVXRpbGl0aWVzLmZpbmRJblJlYWN0VHJlZShVdGlsaXRpZXMuZ2V0UmVhY3RJbnN0YW5jZShub2RlKSwgbSA9PiBtICYmIG0uZ2VuZXJhdGVTZWN0aW9ucywge3dhbGthYmxlOiBbXCJyZXR1cm5cIiwgXCJzdGF0ZU5vZGVcIl19KTtcclxuICAgICAgICBpZiAoc3RhdGVOb2RlKSBzdGF0ZU5vZGUuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/settings.js\n"); /***/ }), @@ -911,7 +923,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var modu /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n/* harmony import */ var _icons_edit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/edit */ \"./src/ui/icons/edit.jsx\");\n/* harmony import */ var _icons_delete__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../icons/delete */ \"./src/ui/icons/delete.jsx\");\n/* harmony import */ var _components_switch__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/switch */ \"./src/ui/settings/components/switch.jsx\");\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n\n\n\n\n\n\nconst Tooltip = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByDisplayName(\"Tooltip\");\nclass AddonCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n settingsOpen: false\n };\n this.settingsPanel = \"\";\n this.panelRef = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.onChange = this.onChange.bind(this);\n this.reload = this.reload.bind(this);\n this.showSettings = this.showSettings.bind(this);\n this.closeSettings = this.closeSettings.bind(this);\n }\n\n reload() {\n if (!this.props.reload) return;\n this.props.addon = this.props.reload(this.props.addon.id);\n this.forceUpdate();\n }\n\n componentDidUpdate() {\n if (!this.state.settingsOpen) return;\n if (this.settingsPanel instanceof Node) this.panelRef.current.appendChild(this.settingsPanel); // if (!SettingsCookie[\"fork-ps-3\"]) return;\n\n const isHidden = (container, element) => {\n const cTop = container.scrollTop;\n const cBottom = cTop + container.clientHeight;\n const eTop = element.offsetTop;\n const eBottom = eTop + element.clientHeight;\n return eTop < cTop || eBottom > cBottom;\n };\n\n const panel = $(this.panelRef.current);\n const container = panel.parents(\".scroller-2FKFPG\");\n if (!isHidden(container[0], panel[0])) return;\n container.animate({\n scrollTop: panel.offset().top - container.offset().top + container.scrollTop() - 30\n }, 300);\n }\n\n getString(value) {\n return typeof value == \"string\" ? value : value.toString();\n }\n\n onChange() {\n this.props.onChange && this.props.onChange(this.props.addon.id);\n this.props.enabled = !this.props.enabled;\n }\n\n showSettings() {\n if (!this.props.hasSettings) return;\n this.setState({\n settingsOpen: true\n });\n }\n\n closeSettings() {\n this.panelRef.current.innerHTML = \"\";\n this.setState({\n settingsOpen: false\n });\n }\n\n buildTitle(name, version, author) {\n const title = modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.title.split(/({{[A-Za-z]+}})/);\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\n if (nameIndex) title[nameIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-name\"\n }, name);\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\n if (nameIndex) title[versionIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-version\"\n }, version);\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\n if (nameIndex) title[authorIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-author\"\n }, author);\n return title.flat();\n }\n\n get settingsComponent() {\n const addon = this.props.addon;\n const name = this.getString(addon.name);\n\n try {\n this.settingsPanel = this.props.getSettingsPanel();\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].stacktrace(\"Addon Settings\", \"Unable to get settings panel for \" + name + \".\", err);\n }\n\n const props = {\n id: `${name}-settings`,\n className: \"addon-settings\",\n ref: this.panelRef\n };\n if (typeof settingsPanel == \"string\") props.dangerouslySetInnerHTML = this.settingsPanel;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-card settings-open bd-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-close\",\n onClick: this.closeSettings\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", props, this.settingsPanel instanceof modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component ? this.settingsPanel : null));\n }\n\n buildLink(which) {\n const url = this.props.addon[which];\n if (!url) return null;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bd-link bd-link-website\",\n href: url,\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons[which]);\n }\n\n get footer() {\n const links = [\"website\", \"source\"];\n if (!links.some(l => this.props.addon[l]) && !this.props.hasSettings) return null;\n const linkComponents = links.map(this.buildLink.bind(this)).filter(c => c);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-links\"\n }, linkComponents.map((comp, i) => i < linkComponents.length - 1 ? [comp, \" | \"] : [comp]).flat()), this.props.hasSettings && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n onClick: this.showSettings,\n className: \"bd-button bd-button-addon-settings\",\n disabled: !this.props.enabled\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.addonSettings));\n }\n\n makeButton(title, children, action) {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(Tooltip, {\n color: \"black\",\n position: \"top\",\n text: title\n }, props => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", _extends({}, props, {\n className: \"bd-addon-button\",\n onClick: action\n }), children);\n });\n }\n\n render() {\n if (this.state.settingsOpen) return this.settingsComponent;\n const addon = this.props.addon;\n const name = this.getString(addon.name);\n const author = this.getString(addon.author);\n const description = this.getString(addon.description);\n const version = this.getString(addon.version);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: `${addon.id}-card`,\n className: \"bd-addon-card settings-closed\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-title\"\n }, this.buildTitle(name, version, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-controls\"\n }, this.props.editAddon && this.makeButton(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.editAddon, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_edit__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null), this.props.editAddon), this.props.deleteAddon && this.makeButton(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.deleteAddon, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_delete__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null), this.props.deleteAddon), this.props.showReloadIcon && this.makeButton(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.reload, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"bd-reload bd-reload-card\"\n }), this.reload), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_switch__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n checked: this.props.enabled,\n onChange: this.onChange\n }))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-description scroller\"\n }, description)), this.footer);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2FkZG9uY2FyZC5qc3g/NjM3MyJdLCJuYW1lcyI6WyJUb29sdGlwIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeURpc3BsYXlOYW1lIiwiQWRkb25DYXJkIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3RhdGUiLCJzZXR0aW5nc09wZW4iLCJzZXR0aW5nc1BhbmVsIiwicGFuZWxSZWYiLCJjcmVhdGVSZWYiLCJvbkNoYW5nZSIsImJpbmQiLCJyZWxvYWQiLCJzaG93U2V0dGluZ3MiLCJjbG9zZVNldHRpbmdzIiwiYWRkb24iLCJpZCIsImZvcmNlVXBkYXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiTm9kZSIsImN1cnJlbnQiLCJhcHBlbmRDaGlsZCIsImlzSGlkZGVuIiwiY29udGFpbmVyIiwiZWxlbWVudCIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiY2xpZW50SGVpZ2h0IiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJwYW5lbCIsIiQiLCJwYXJlbnRzIiwiYW5pbWF0ZSIsIm9mZnNldCIsInRvcCIsImdldFN0cmluZyIsInZhbHVlIiwidG9TdHJpbmciLCJlbmFibGVkIiwiaGFzU2V0dGluZ3MiLCJzZXRTdGF0ZSIsImlubmVySFRNTCIsImJ1aWxkVGl0bGUiLCJuYW1lIiwidmVyc2lvbiIsImF1dGhvciIsInRpdGxlIiwiU3RyaW5ncyIsIkFkZG9ucyIsInNwbGl0IiwibmFtZUluZGV4IiwiZmluZEluZGV4IiwicyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsImZsYXQiLCJzZXR0aW5nc0NvbXBvbmVudCIsImdldFNldHRpbmdzUGFuZWwiLCJlcnIiLCJMb2dnZXIiLCJzdGFja3RyYWNlIiwicmVmIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJidWlsZExpbmsiLCJ3aGljaCIsInVybCIsImZvb3RlciIsImxpbmtzIiwic29tZSIsImwiLCJsaW5rQ29tcG9uZW50cyIsIm1hcCIsImZpbHRlciIsImMiLCJjb21wIiwiaSIsImxlbmd0aCIsImFkZG9uU2V0dGluZ3MiLCJtYWtlQnV0dG9uIiwiY2hpbGRyZW4iLCJhY3Rpb24iLCJyZW5kZXIiLCJkZXNjcmlwdGlvbiIsImVkaXRBZGRvbiIsImRlbGV0ZUFkZG9uIiwic2hvd1JlbG9hZEljb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxPQUFPLEdBQUdDLHNEQUFjLENBQUNDLGdCQUFmLENBQWdDLFNBQWhDLENBQWhCO0FBRWUsTUFBTUMsU0FBTixTQUF3QkMsNkNBQUssQ0FBQ0MsU0FBOUIsQ0FBd0M7QUFFbkRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUtDLEtBQUwsR0FBYTtBQUNUQyxrQkFBWSxFQUFFO0FBREwsS0FBYjtBQUlBLFNBQUtDLGFBQUwsR0FBcUIsRUFBckI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCUCw2Q0FBSyxDQUFDUSxTQUFOLEVBQWhCO0FBRUEsU0FBS0MsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNDLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDQSxTQUFLQyxNQUFMLEdBQWMsS0FBS0EsTUFBTCxDQUFZRCxJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDQSxTQUFLRSxZQUFMLEdBQW9CLEtBQUtBLFlBQUwsQ0FBa0JGLElBQWxCLENBQXVCLElBQXZCLENBQXBCO0FBQ0EsU0FBS0csYUFBTCxHQUFxQixLQUFLQSxhQUFMLENBQW1CSCxJQUFuQixDQUF3QixJQUF4QixDQUFyQjtBQUNIOztBQUVEQyxRQUFNLEdBQUc7QUFDTCxRQUFJLENBQUMsS0FBS1IsS0FBTCxDQUFXUSxNQUFoQixFQUF3QjtBQUN4QixTQUFLUixLQUFMLENBQVdXLEtBQVgsR0FBbUIsS0FBS1gsS0FBTCxDQUFXUSxN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Sy9CO0FBQXBELE1BSkosQ0FGUixDQURMLEVBVUs7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUF3RDtBQUFLLGVBQVMsRUFBQztBQUFmLE9BQTBDNkUsV0FBMUMsQ0FBeEQsQ0FWTCxFQVdNLEtBQUtoQixNQVhYLENBQVA7QUFhSDs7QUFySWtEIiwiZmlsZSI6Ii4vc3JjL3VpL3NldHRpbmdzL2FkZG9uY2FyZC5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0LCBMb2dnZXIsIFN0cmluZ3MsIFdlYnBhY2tNb2R1bGVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5pbXBvcnQgQ2xvc2VCdXR0b24gZnJvbSBcIi4uL2ljb25zL2Nsb3NlXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuLi9pY29ucy9yZWxvYWRcIjtcclxuaW1wb3J0IEVkaXRJY29uIGZyb20gXCIuLi9pY29ucy9lZGl0XCI7XHJcbmltcG9ydCBEZWxldGVJY29uIGZyb20gXCIuLi9pY29ucy9kZWxldGVcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xyXG5cclxuY29uc3QgVG9vbHRpcCA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5RGlzcGxheU5hbWUoXCJUb29sdGlwXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWRkb25DYXJkIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZXR0aW5nc09wZW46IGZhbHNlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1BhbmVsID0gXCJcIjtcclxuICAgICAgICB0aGlzLnBhbmVsUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcblxyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZWxvYWQgPSB0aGlzLnJlbG9hZC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2hvd1NldHRpbmdzID0gdGhpcy5zaG93U2V0dGluZ3MuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNsb3NlU2V0dGluZ3MgPSB0aGlzLmNsb3NlU2V0dGluZ3MuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLnJlbG9hZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJvcHMuYWRkb24gPSB0aGlzLnByb3BzLnJlbG9hZCh0aGlzLnByb3BzLmFkZG9uLmlkKTtcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5zZXR0aW5nc09wZW4pIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc1BhbmVsIGluc3RhbmNlb2YgTm9kZSkgdGhpcy5wYW5lbFJlZi5jdXJyZW50LmFwcGVuZENoaWxkKHRoaXMuc2V0dGluZ3NQYW5lbCk7XHJcblxyXG4gICAgICAgIC8vIGlmICghU2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTNcIl0pIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY1RvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGNCb3R0b20gPSBjVG9wICsgY29udGFpbmVyLmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgY29uc3QgZVRvcCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICByZXR1cm4gIChlVG9wIDwgY1RvcCB8fCBlQm90dG9tID4gY0JvdHRvbSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFuZWwgPSAkKHRoaXMucGFuZWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gcGFuZWwucGFyZW50cyhcIi5zY3JvbGxlci0yRktGUEdcIik7XHJcbiAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXJbMF0sIHBhbmVsWzBdKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnRhaW5lci5hbmltYXRlKHtcclxuICAgICAgICAgICAgc2Nyb2xsVG9wOiBwYW5lbC5vZmZzZXQoKS50b3AgLSBjb250YWluZXIub2Zmc2V0KCkudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCgpIC0gMzBcclxuICAgICAgICB9LCAzMDApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge3JldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTt9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSAmJiB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuYWRkb24uaWQpO1xyXG4gICAgICAgIHRoaXMucHJvcHMuZW5hYmxlZCA9ICF0aGlzLnByb3BzLmVuYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1NldHRpbmdzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5oYXNTZXR0aW5ncykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzT3BlbjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgdGhpcy5wYW5lbFJlZi5jdXJyZW50LmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3NPcGVuOiBmYWxzZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkVGl0bGUobmFtZSwgdmVyc2lvbiwgYXV0aG9yKSB7XHJcbiAgICAgICAgY29uc3QgdGl0bGUgPSBTdHJpbmdzLkFkZG9ucy50aXRsZS5zcGxpdCgvKHt7W0EtWmEtel0rfX0pLyk7XHJcbiAgICAgICAgY29uc3QgbmFtZUluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7bmFtZX19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW25hbWVJbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkLW5hbWVcIn0sIG5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb25JbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e3ZlcnNpb259fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVt2ZXJzaW9uSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC12ZXJzaW9uXCJ9LCB2ZXJzaW9uKTtcclxuICAgICAgICBjb25zdCBhdXRob3JJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e2F1dGhvcn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmQtYXV0aG9yXCJ9LCBhdXRob3IpO1xyXG4gICAgICAgIHJldHVybiB0aXRsZS5mbGF0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNldHRpbmdzQ29tcG9uZW50KCkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRTdHJpbmcoYWRkb24ubmFtZSk7XHJcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5nZXRTZXR0aW5nc1BhbmVsKCk7IH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7IExvZ2dlci5zdGFja3RyYWNlKFwiQWRkb24gU2V0dGluZ3NcIiwgXCJVbmFibGUgdG8gZ2V0IHNldHRpbmdzIHBhbmVsIGZvciBcIiArIG5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9wcyA9IHtpZDogYCR7bmFtZX0tc2V0dGluZ3NgLCBjbGFzc05hbWU6IFwiYWRkb24tc2V0dGluZ3NcIiwgcmVmOiB0aGlzLnBhbmVsUmVmfTtcclxuICAgICAgICBpZiAodHlwZW9mKHNldHRpbmdzUGFuZWwpID09IFwic3RyaW5nXCIpIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0gdGhpcy5zZXR0aW5nc1BhbmVsO1xyXG5cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1jYXJkIHNldHRpbmdzLW9wZW4gYmQtc3dpdGNoLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWNsb3NlXCIgb25DbGljaz17dGhpcy5jbG9zZVNldHRpbmdzfT48Q2xvc2VCdXR0b24gLz48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHsuLi5wcm9wc30+e3RoaXMuc2V0dGluZ3NQYW5lbCBpbnN0YW5jZW9mIFJlYWN0LkNvbXBvbmVudCA/IHRoaXMuc2V0dGluZ3NQYW5lbCA6IG51bGx9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRMaW5rKHdoaWNoKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5wcm9wcy5hZGRvblt3aGljaF07XHJcbiAgICAgICAgaWYgKCF1cmwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiA8YSBjbGFzc05hbWU9XCJiZC1saW5rIGJkLWxpbmstd2Vic2l0ZVwiIGhyZWY9e3VybH0gdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPntTdHJpbmdzLkFkZG9uc1t3aGljaF19PC9hPjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZm9vdGVyKCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gW1wid2Vic2l0ZVwiLCBcInNvdXJjZVwiXTtcclxuICAgICAgICBpZiAoIWxpbmtzLnNvbWUobCA9PiB0aGlzLnByb3BzLmFkZG9uW2xdKSAmJiAhdGhpcy5wcm9wcy5oYXNTZXR0aW5ncykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgbGlua0NvbXBvbmVudHMgPSBsaW5rcy5tYXAodGhpcy5idWlsZExpbmsuYmluZCh0aGlzKSkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmQtbGlua3NcIj57bGlua0NvbXBvbmVudHMubWFwKChjb21wLCBpKSA9PiBpIDwgbGlua0NvbXBvbmVudHMubGVuZ3RoIC0gMSA/IFtjb21wLCBcIiB8IFwiXSA6IFtjb21wXSkuZmxhdCgpfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5oYXNTZXR0aW5ncyAmJiA8YnV0dG9uIG9uQ2xpY2s9e3RoaXMuc2hvd1NldHRpbmdzfSBjbGFzc05hbWU9XCJiZC1idXR0b24gYmQtYnV0dG9uLWFkZG9uLXNldHRpbmdzXCIgZGlzYWJsZWQ9eyF0aGlzLnByb3BzLmVuYWJsZWR9PntTdHJpbmdzLkFkZG9ucy5hZGRvblNldHRpbmdzfTwvYnV0dG9uPn1cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlQnV0dG9uKHRpdGxlLCBjaGlsZHJlbiwgYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuICA8VG9vbHRpcCBjb2xvcj1cImJsYWNrXCIgcG9zaXRpb249XCJ0b3BcIiB0ZXh0PXt0aXRsZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgeyhwcm9wcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiB7Li4ucHJvcHN9IGNsYXNzTmFtZT1cImJkLWFkZG9uLWJ1dHRvblwiIG9uQ2xpY2s9e2FjdGlvbn0+e2NoaWxkcmVufTwvZGl2PjtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPjtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2V0dGluZ3NPcGVuKSByZXR1cm4gdGhpcy5zZXR0aW5nc0NvbXBvbmVudDtcclxuXHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLnByb3BzLmFkZG9uO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldFN0cmluZyhhZGRvbi5uYW1lKTtcclxuICAgICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldFN0cmluZyhhZGRvbi5hdXRob3IpO1xyXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXRTdHJpbmcoYWRkb24uZGVzY3JpcHRpb24pO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFN0cmluZyhhZGRvbi52ZXJzaW9uKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgaWQ9e2Ake2FkZG9uLmlkfS1jYXJkYH0gY2xhc3NOYW1lPVwiYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1jbG9zZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmQtdGl0bGVcIj57dGhpcy5idWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcil9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1jb250cm9sc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmVkaXRBZGRvbiAmJiB0aGlzLm1ha2VCdXR0b24oU3RyaW5ncy5BZGRvbnMuZWRpdEFkZG9uLCA8RWRpdEljb24gLz4sIHRoaXMucHJvcHMuZWRpdEFkZG9uKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5kZWxldGVBZGRvbiAmJiB0aGlzLm1ha2VCdXR0b24oU3RyaW5ncy5BZGRvbnMuZGVsZXRlQWRkb24sIDxEZWxldGVJY29uIC8+LCB0aGlzLnByb3BzLmRlbGV0ZUFkZG9uKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5zaG93UmVsb2FkSWNvbiAmJiB0aGlzLm1ha2VCdXR0b24oU3RyaW5ncy5BZGRvbnMucmVsb2FkLCA8UmVsb2FkSWNvbiBjbGFzc05hbWU9XCJiZC1yZWxvYWQgYmQtcmVsb2FkLWNhcmRcIiAvPiwgdGhpcy5yZWxvYWQpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2ggY2hlY2tlZD17dGhpcy5wcm9wcy5lbmFibGVkfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtZGVzY3JpcHRpb24td3JhcCBzY3JvbGxlci13cmFwIGZhZGVcIj48ZGl2IGNsYXNzTmFtZT1cImJkLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCI+e2Rlc2NyaXB0aW9ufTwvZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLmZvb3Rlcn1cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/settings/addoncard.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n/* harmony import */ var _icons_edit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/edit */ \"./src/ui/icons/edit.jsx\");\n/* harmony import */ var _icons_delete__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../icons/delete */ \"./src/ui/icons/delete.jsx\");\n/* harmony import */ var _components_switch__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/switch */ \"./src/ui/settings/components/switch.jsx\");\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n\n\n\n\n\n\nconst Tooltip = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByDisplayName(\"Tooltip\");\nclass AddonCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n settingsOpen: false\n };\n this.settingsPanel = \"\";\n this.panelRef = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.onChange = this.onChange.bind(this);\n this.reload = this.reload.bind(this);\n this.showSettings = this.showSettings.bind(this);\n this.closeSettings = this.closeSettings.bind(this);\n }\n\n reload() {\n if (!this.props.reload) return;\n this.props.addon = this.props.reload(this.props.addon.id);\n this.forceUpdate();\n }\n\n componentDidUpdate() {\n if (!this.state.settingsOpen) return;\n if (this.settingsPanel instanceof Node) this.panelRef.current.appendChild(this.settingsPanel); // if (!SettingsCookie[\"fork-ps-3\"]) return;\n\n const isHidden = (container, element) => {\n const cTop = container.scrollTop;\n const cBottom = cTop + container.clientHeight;\n const eTop = element.offsetTop;\n const eBottom = eTop + element.clientHeight;\n return eTop < cTop || eBottom > cBottom;\n };\n\n const panel = $(this.panelRef.current);\n const container = panel.parents(\".scroller-2FKFPG\");\n if (!isHidden(container[0], panel[0])) return;\n container.animate({\n scrollTop: panel.offset().top - container.offset().top + container.scrollTop() - 30\n }, 300);\n }\n\n getString(value) {\n return typeof value == \"string\" ? value : value.toString();\n }\n\n onChange() {\n this.props.onChange && this.props.onChange(this.props.addon.id);\n this.props.enabled = !this.props.enabled;\n }\n\n showSettings() {\n if (!this.props.hasSettings) return;\n this.setState({\n settingsOpen: true\n });\n }\n\n closeSettings() {\n this.panelRef.current.innerHTML = \"\";\n this.setState({\n settingsOpen: false\n });\n }\n\n buildTitle(name, version, author) {\n const title = modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.title.split(/({{[A-Za-z]+}})/);\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\n if (nameIndex) title[nameIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-name\"\n }, name);\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\n if (nameIndex) title[versionIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-version\"\n }, version);\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\n if (nameIndex) title[authorIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-author\"\n }, author);\n return title.flat();\n }\n\n get settingsComponent() {\n const addon = this.props.addon;\n const name = this.getString(addon.name);\n\n try {\n this.settingsPanel = this.props.getSettingsPanel();\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].stacktrace(\"Addon Settings\", \"Unable to get settings panel for \" + name + \".\", err);\n }\n\n const props = {\n id: `${name}-settings`,\n className: \"addon-settings\",\n ref: this.panelRef\n };\n if (typeof settingsPanel == \"string\") props.dangerouslySetInnerHTML = this.settingsPanel;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-card settings-open bd-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-close\",\n onClick: this.closeSettings\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", props, this.settingsPanel instanceof modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component ? this.settingsPanel : null));\n }\n\n buildLink(which) {\n const url = this.props.addon[which];\n\n if (which == \"invite\") {\n const onClick = () => {\n const tester = /\\.gg\\/(.*)$/;\n let code = url;\n if (tester.test(code)) code = code.match(tester)[1];\n BDV2.LayerStack.popLayer();\n BDV2.InviteActions.acceptInviteAndTransitionToInviteChannel(code);\n };\n }\n\n if (!url) return null;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bd-link bd-link-website\",\n href: url,\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons[which]);\n }\n\n get footer() {\n const links = [\"website\", \"source\", \"invite\", \"donate\", \"patreon\"];\n if (!links.some(l => this.props.addon[l]) && !this.props.hasSettings) return null;\n const linkComponents = links.map(this.buildLink.bind(this)).filter(c => c);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-links\"\n }, linkComponents.map((comp, i) => i < linkComponents.length - 1 ? [comp, \" | \"] : [comp]).flat()), this.props.hasSettings && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n onClick: this.showSettings,\n className: \"bd-button bd-button-addon-settings\",\n disabled: !this.props.enabled\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.addonSettings));\n }\n\n makeButton(title, children, action) {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(Tooltip, {\n color: \"black\",\n position: \"top\",\n text: title\n }, props => {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", _extends({}, props, {\n className: \"bd-addon-button\",\n onClick: action\n }), children);\n });\n }\n\n render() {\n if (this.state.settingsOpen) return this.settingsComponent;\n const addon = this.props.addon;\n const name = this.getString(addon.name);\n const author = this.getString(addon.author);\n const description = this.getString(addon.description);\n const version = this.getString(addon.version);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: `${addon.id}-card`,\n className: \"bd-addon-card settings-closed\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-title\"\n }, this.buildTitle(name, version, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-controls\"\n }, this.props.editAddon && this.makeButton(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.editAddon, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_edit__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null), this.props.editAddon), this.props.deleteAddon && this.makeButton(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.deleteAddon, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_delete__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null), this.props.deleteAddon), this.props.showReloadIcon && this.makeButton(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.reload, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"bd-reload bd-reload-card\"\n }), this.reload), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_switch__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n checked: this.props.enabled,\n onChange: this.onChange\n }))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-description scroller\"\n }, description)), this.footer);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2FkZG9uY2FyZC5qc3g/NjM3MyJdLCJuYW1lcyI6WyJUb29sdGlwIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeURpc3BsYXlOYW1lIiwiQWRkb25DYXJkIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3RhdGUiLCJzZXR0aW5nc09wZW4iLCJzZXR0aW5nc1BhbmVsIiwicGFuZWxSZWYiLCJjcmVhdGVSZWYiLCJvbkNoYW5nZSIsImJpbmQiLCJyZWxvYWQiLCJzaG93U2V0dGluZ3MiLCJjbG9zZVNldHRpbmdzIiwiYWRkb24iLCJpZCIsImZvcmNlVXBkYXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiTm9kZSIsImN1cnJlbnQiLCJhcHBlbmRDaGlsZCIsImlzSGlkZGVuIiwiY29udGFpbmVyIiwiZWxlbWVudCIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiY2xpZW50SGVpZ2h0IiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJwYW5lbCIsIiQiLCJwYXJlbnRzIiwiYW5pbWF0ZSIsIm9mZnNldCIsInRvcCIsImdldFN0cmluZyIsInZhbHVlIiwidG9TdHJpbmciLCJlbmFibGVkIiwiaGFzU2V0dGluZ3MiLCJzZXRTdGF0ZSIsImlubmVySFRNTCIsImJ1aWxkVGl0bGUiLCJuYW1lIiwidmVyc2lvbiIsImF1dGhvciIsInRpdGxlIiwiU3RyaW5ncyIsIkFkZG9ucyIsInNwbGl0IiwibmFtZUluZGV4IiwiZmluZEluZGV4IiwicyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsImZsYXQiLCJzZXR0aW5nc0NvbXBvbmVudCIsImdldFNldHRpbmdzUGFuZWwiLCJlcnIiLCJMb2dnZXIiLCJzdGFja3RyYWNlIiwicmVmIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJidWlsZExpbmsiLCJ3aGljaCIsInVybCIsIm9uQ2xpY2siLCJ0ZXN0ZXIiLCJjb2RlIiwidGVzdCIsIm1hdGNoIiwiQkRWMiIsIkxheWVyU3RhY2siLCJwb3BMYXllciIsIkludml0ZUFjdGlvbnMiLCJhY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsIiwiZm9vdGVyIiwibGlua3MiLCJzb21lIiwibCIsImxpbmtDb21wb25lbnRzIiwibWFwIiwiZmlsdGVyIiwiYyIsImNvbXAiLCJpIiwibGVuZ3RoIiwiYWRkb25TZXR0aW5ncyIsIm1ha2VCdXR0b24iLCJjaGlsZHJlbiIsImFjdGlvbiIsInJlbmRlciIsImRlc2NyaXB0aW9uIiwiZWRpdEFkZG9uIiwiZGVsZXRlQWRkb24iLCJzaG93UmVsb2FkSWNvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLE9BQU8sR0FBR0Msc0RBQWMsQ0FBQ0MsZ0JBQWYsQ0FBZ0MsU0FBaEMsQ0FBaEI7QUFFZSxNQUFNQyxTQUFOLFNBQXdCQyw2Q0FBSyxDQUFDQyxTQUE5QixDQUF3QztBQUVuREMsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsU0FBS0MsS0FBTCxHQUFhO0FBQ1RDLGtCQUFZLEVBQUU7QUFETCxLQUFiO0FBSUEsU0FBS0MsYUFBTCxHQUFxQixFQUFyQjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0JQLDZDQUFLLENBQUNRLFNBQU4sRUFBaEI7QUFFQSxTQUFLQyxRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBY0MsSUFBZCxDQUFtQixJQUFuQixDQUFoQjtBQUNBLFNBQUtDLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVlELElBQVosQ0FBaUIsSUFBakIsQ0FBZDtBQUNBLFNBQUtFLFlBQUwsR0FBb0IsS0FBS0EsWUFBTCxDQUFrQkYsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBcEI7QUFDQSxTQUFLRyxhQUFMLEdBQXFCLEtBQUtBLGFBQUwsQ0FBbUJILElBQW5CLENBQXdC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QUF3QixLQUFLTCxVQUFMLENBQWdCM0MsK0NBQU8sQ0FBQ0MsTUFBUixDQUFlK0MsU0FBL0IsRUFBMEMsNERBQUMsbURBQUQsT0FBMUMsRUFBd0QsS0FBSzlGLEtBQUwsQ0FBVzhGLFNBQW5FLENBRDdCLEVBRUssS0FBSzlGLEtBQUwsQ0FBVytGLFdBQVgsSUFBMEIsS0FBS04sVUFBTCxDQUFnQjNDLCtDQUFPLENBQUNDLE1BQVIsQ0FBZWdELFdBQS9CLEVBQTRDLDREQUFDLHFEQUFELE9BQTVDLEVBQTRELEtBQUsvRixLQUFMLENBQVcrRixXQUF2RSxDQUYvQixFQUdLLEtBQUsvRixLQUFMLENBQVdnRyxjQUFYLElBQTZCLEtBQUtQLFVBQUwsQ0FBZ0IzQywrQ0FBTyxDQUFDQyxNQUFSLENBQWV2QyxNQUEvQixFQUF1Qyw0REFBQyxxREFBRDtBQUFZLGVBQVMsRUFBQztBQUF0QixNQUF2QyxFQUE0RixLQUFLQSxNQUFqRyxDQUhsQyxFQUlJLDREQUFDLDBEQUFEO0FBQVEsYUFBTyxFQUFFLEtBQUtSLEtBQUwsQ0FBV3FDLE9BQTVCO0FBQXFDLGNBQVEsRUFBRSxLQUFLL0I7QUFBcEQsTUFKSixDQUZSLENBREwsRUFVSztBQUFLLGVBQVMsRUFBQztBQUFmLE9BQXdEO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FBMEN1RixXQUExQyxDQUF4RCxDQVZMLEVBV00sS0FBS2hCLE1BWFgsQ0FBUDtBQWFIOztBQTlJa0QiLCJmaWxlIjoiLi9zcmMvdWkvc2V0dGluZ3MvYWRkb25jYXJkLmpzeC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3QsIExvZ2dlciwgU3RyaW5ncywgV2VicGFja01vZHVsZXN9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBDbG9zZUJ1dHRvbiBmcm9tIFwiLi4vaWNvbnMvY2xvc2VcIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4uL2ljb25zL3JlbG9hZFwiO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSBcIi4uL2ljb25zL2VkaXRcIjtcclxuaW1wb3J0IERlbGV0ZUljb24gZnJvbSBcIi4uL2ljb25zL2RlbGV0ZVwiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL2NvbXBvbmVudHMvc3dpdGNoXCI7XHJcblxyXG5jb25zdCBUb29sdGlwID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZGRvbkNhcmQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNldHRpbmdzT3BlbjogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzUGFuZWwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlbG9hZCA9IHRoaXMucmVsb2FkLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0dGluZ3MgPSB0aGlzLnNob3dTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VTZXR0aW5ncyA9IHRoaXMuY2xvc2VTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMucmVsb2FkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcm9wcy5hZGRvbiA9IHRoaXMucHJvcHMucmVsb2FkKHRoaXMucHJvcHMuYWRkb24uaWQpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzT3BlbikgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzUGFuZWwgaW5zdGFuY2VvZiBOb2RlKSB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuXHJcbiAgICAgICAgLy8gaWYgKCFTZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtM1wiXSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlzSGlkZGVuID0gKGNvbnRhaW5lciwgZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgY29uc3QgY0JvdHRvbSA9IGNUb3AgKyBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGVCb3R0b20gPSBlVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgIHJldHVybiAgKGVUb3AgPCBjVG9wIHx8IGVCb3R0b20gPiBjQm90dG9tKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBwYW5lbCA9ICQodGhpcy5wYW5lbFJlZi5jdXJyZW50KTtcclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBwYW5lbC5wYXJlbnRzKFwiLnNjcm9sbGVyLTJGS0ZQR1wiKTtcclxuICAgICAgICBpZiAoIWlzSGlkZGVuKGNvbnRhaW5lclswXSwgcGFuZWxbMF0pKSByZXR1cm47XHJcbiAgICAgICAgY29udGFpbmVyLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBzY3JvbGxUb3A6IHBhbmVsLm9mZnNldCgpLnRvcCAtIGNvbnRhaW5lci5vZmZzZXQoKS50b3AgKyBjb250YWluZXIuc2Nyb2xsVG9wKCkgLSAzMFxyXG4gICAgICAgIH0sIDMwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO31cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlICYmIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5hZGRvbi5pZCk7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5lbmFibGVkID0gIXRoaXMucHJvcHMuZW5hYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmhhc1NldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3NPcGVuOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nc09wZW46IGZhbHNlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRUaXRsZShuYW1lLCB2ZXJzaW9uLCBhdXRob3IpIHtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IFN0cmluZ3MuQWRkb25zLnRpdGxlLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmQtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkLXZlcnNpb25cIn0sIHZlcnNpb24pO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbYXV0aG9ySW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC1hdXRob3JcIn0sIGF1dGhvcik7XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLnByb3BzLmFkZG9uO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldFN0cmluZyhhZGRvbi5uYW1lKTtcclxuICAgICAgICB0cnkgeyB0aGlzLnNldHRpbmdzUGFuZWwgPSB0aGlzLnByb3BzLmdldFNldHRpbmdzUGFuZWwoKTsgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHsgTG9nZ2VyLnN0YWNrdHJhY2UoXCJBZGRvbiBTZXR0aW5nc1wiLCBcIlVuYWJsZSB0byBnZXQgc2V0dGluZ3MgcGFuZWwgZm9yIFwiICsgbmFtZSArIFwiLlwiLCBlcnIpOyB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByb3BzID0ge2lkOiBgJHtuYW1lfS1zZXR0aW5nc2AsIGNsYXNzTmFtZTogXCJhZGRvbi1zZXR0aW5nc1wiLCByZWY6IHRoaXMucGFuZWxSZWZ9O1xyXG4gICAgICAgIGlmICh0eXBlb2Yoc2V0dGluZ3NQYW5lbCkgPT0gXCJzdHJpbmdcIikgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSB0aGlzLnNldHRpbmdzUGFuZWw7XHJcblxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWNhcmQgc2V0dGluZ3Mtb3BlbiBiZC1zd2l0Y2gtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtY2xvc2VcIiBvbkNsaWNrPXt0aGlzLmNsb3NlU2V0dGluZ3N9PjxDbG9zZUJ1dHRvbiAvPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgey4uLnByb3BzfT57dGhpcy5zZXR0aW5nc1BhbmVsIGluc3RhbmNlb2YgUmVhY3QuQ29tcG9uZW50ID8gdGhpcy5zZXR0aW5nc1BhbmVsIDogbnVsbH08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZExpbmsod2hpY2gpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnByb3BzLmFkZG9uW3doaWNoXTtcclxuICAgICAgICBpZiAod2hpY2ggPT0gXCJpbnZpdGVcIikge1xyXG4gICAgICAgICAgICBjb25zdCBvbkNsaWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdGVyID0gL1xcLmdnXFwvKC4qKSQvO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSB1cmw7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVzdGVyLnRlc3QoY29kZSkpIGNvZGUgPSBjb2RlLm1hdGNoKHRlc3RlcilbMV07XHJcbiAgICAgICAgICAgICAgICBCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTtcclxuICAgICAgICAgICAgICAgIEJEVjIuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKGNvZGUpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXVybCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIDxhIGNsYXNzTmFtZT1cImJkLWxpbmsgYmQtbGluay13ZWJzaXRlXCIgaHJlZj17dXJsfSB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+e1N0cmluZ3MuQWRkb25zW3doaWNoXX08L2E+O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSBbXCJ3ZWJzaXRlXCIsIFwic291cmNlXCIsIFwiaW52aXRlXCIsIFwiZG9uYXRlXCIsIFwicGF0cmVvblwiXTtcclxuICAgICAgICBpZiAoIWxpbmtzLnNvbWUobCA9PiB0aGlzLnByb3BzLmFkZG9uW2xdKSAmJiAhdGhpcy5wcm9wcy5oYXNTZXR0aW5ncykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgbGlua0NvbXBvbmVudHMgPSBsaW5rcy5tYXAodGhpcy5idWlsZExpbmsuYmluZCh0aGlzKSkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmQtbGlua3NcIj57bGlua0NvbXBvbmVudHMubWFwKChjb21wLCBpKSA9PiBpIDwgbGlua0NvbXBvbmVudHMubGVuZ3RoIC0gMSA/IFtjb21wLCBcIiB8IFwiXSA6IFtjb21wXSkuZmxhdCgpfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5oYXNTZXR0aW5ncyAmJiA8YnV0dG9uIG9uQ2xpY2s9e3RoaXMuc2hvd1NldHRpbmdzfSBjbGFzc05hbWU9XCJiZC1idXR0b24gYmQtYnV0dG9uLWFkZG9uLXNldHRpbmdzXCIgZGlzYWJsZWQ9eyF0aGlzLnByb3BzLmVuYWJsZWR9PntTdHJpbmdzLkFkZG9ucy5hZGRvblNldHRpbmdzfTwvYnV0dG9uPn1cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlQnV0dG9uKHRpdGxlLCBjaGlsZHJlbiwgYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuICA8VG9vbHRpcCBjb2xvcj1cImJsYWNrXCIgcG9zaXRpb249XCJ0b3BcIiB0ZXh0PXt0aXRsZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgeyhwcm9wcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiB7Li4ucHJvcHN9IGNsYXNzTmFtZT1cImJkLWFkZG9uLWJ1dHRvblwiIG9uQ2xpY2s9e2FjdGlvbn0+e2NoaWxkcmVufTwvZGl2PjtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPjtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2V0dGluZ3NPcGVuKSByZXR1cm4gdGhpcy5zZXR0aW5nc0NvbXBvbmVudDtcclxuXHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLnByb3BzLmFkZG9uO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldFN0cmluZyhhZGRvbi5uYW1lKTtcclxuICAgICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldFN0cmluZyhhZGRvbi5hdXRob3IpO1xyXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXRTdHJpbmcoYWRkb24uZGVzY3JpcHRpb24pO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFN0cmluZyhhZGRvbi52ZXJzaW9uKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgaWQ9e2Ake2FkZG9uLmlkfS1jYXJkYH0gY2xhc3NOYW1lPVwiYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1jbG9zZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmQtdGl0bGVcIj57dGhpcy5idWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcil9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1jb250cm9sc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmVkaXRBZGRvbiAmJiB0aGlzLm1ha2VCdXR0b24oU3RyaW5ncy5BZGRvbnMuZWRpdEFkZG9uLCA8RWRpdEljb24gLz4sIHRoaXMucHJvcHMuZWRpdEFkZG9uKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5kZWxldGVBZGRvbiAmJiB0aGlzLm1ha2VCdXR0b24oU3RyaW5ncy5BZGRvbnMuZGVsZXRlQWRkb24sIDxEZWxldGVJY29uIC8+LCB0aGlzLnByb3BzLmRlbGV0ZUFkZG9uKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5zaG93UmVsb2FkSWNvbiAmJiB0aGlzLm1ha2VCdXR0b24oU3RyaW5ncy5BZGRvbnMucmVsb2FkLCA8UmVsb2FkSWNvbiBjbGFzc05hbWU9XCJiZC1yZWxvYWQgYmQtcmVsb2FkLWNhcmRcIiAvPiwgdGhpcy5yZWxvYWQpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2ggY2hlY2tlZD17dGhpcy5wcm9wcy5lbmFibGVkfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtZGVzY3JpcHRpb24td3JhcCBzY3JvbGxlci13cmFwIGZhZGVcIj48ZGl2IGNsYXNzTmFtZT1cImJkLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCI+e2Rlc2NyaXB0aW9ufTwvZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLmZvb3Rlcn1cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/settings/addoncard.jsx\n"); /***/ }), diff --git a/src/builtins/classnormalizer.js b/src/builtins/classnormalizer.js index 1c4f5f37..1af11a88 100644 --- a/src/builtins/classnormalizer.js +++ b/src/builtins/classnormalizer.js @@ -66,9 +66,9 @@ export default new class ClassNormalizer extends Builtin { if (this.shouldIgnore(value)) continue; const classList = value.split(" "); for (const normalClass of classList) { - const match = normalClass.match(randClass)[1]; - if (!match) continue; // Shouldn't ever happen since they passed the moduleFilter, but you never know - const camelCase = match.split("-").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(""); + const match = normalClass.match(randClass); + if (!match || !match.length || match.length < 2) continue; // Shouldn't ever happen since they passed the moduleFilter, but you never know + const camelCase = match[1].split("-").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(""); classNames[baseClassName] += ` ${componentName}-${camelCase}`; } } diff --git a/src/builtins/coloredtext.js b/src/builtins/coloredtext.js index 8a229356..0eaa8530 100644 --- a/src/builtins/coloredtext.js +++ b/src/builtins/coloredtext.js @@ -1,7 +1,7 @@ import Builtin from "../structs/builtin"; import {WebpackModules} from "modules"; -const MessageContent = WebpackModules.getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty("disableButtons")); +const MessageContent = WebpackModules.getModule(m => m.default && m.default.displayName && m.default.displayName == "Message"); export default new class ColoredText extends Builtin { get name() {return "ColoredText";} diff --git a/src/builtins/developermode.js b/src/builtins/developermode.js index 6d3747e2..0c0cc584 100644 --- a/src/builtins/developermode.js +++ b/src/builtins/developermode.js @@ -15,7 +15,7 @@ export default new class DeveloperMode extends Builtin { } enabled() { - $(window).on("keydown.bdDevmode", (e) => { + $(document).on("keydown.bdDevmode", (e) => { if (e.which === 119 || e.which == 118) {//F8 this.log("Debugger Activated"); debugger; // eslint-disable-line no-debugger @@ -26,7 +26,7 @@ export default new class DeveloperMode extends Builtin { } disabled() { - $(window).off("keydown.bdDevmode"); + $(document).off("keydown.bdDevmode"); if (this.selectorMode) this.disableSelectors(); if (this.selectorCancel) this.selectorCancel(); } diff --git a/src/builtins/emotemenu.js b/src/builtins/emotemenu.js index 223eb6d1..6c641cd0 100644 --- a/src/builtins/emotemenu.js +++ b/src/builtins/emotemenu.js @@ -160,7 +160,8 @@ export default new class EmoteMenu extends Builtin { observe(mutation) { if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) return; const node = mutation.addedNodes[0]; - if (!node.classList.contains("popout-3sVMXz") || node.classList.contains("popoutLeft-30WmrD") || !node.getElementsByClassName("emojiPicker-3m1S-j").length) return; + // if (!node.classList.contains("popout-2iWAc-") || node.classList.contains("popoutLeft-30WmrD") || !node.getElementsByClassName("emojiPicker-3m1S-j").length) return; + if (!node.classList.contains("layer-v9HyYc") || !node.getElementsByClassName("emojiPicker-3m1S-j").length || node.querySelector(".emojiPicker-3m1S-j").parentElement.classList.contains("animatorLeft-1EQxU0")) return; const e = $(node); if (this.hideEmojis) e.addClass("bd-qme-hidden"); diff --git a/src/builtins/emotes.js b/src/builtins/emotes.js index 625a32ba..8021b733 100644 --- a/src/builtins/emotes.js +++ b/src/builtins/emotes.js @@ -67,14 +67,15 @@ export default new class EmoteModule extends Builtin { await this.getBlacklist(); await this.loadEmoteData(); - while (!this.MessageContentComponent) await new Promise(resolve => setTimeout(resolve, 100)); - this.patchMessageContent(); + // while (!this.MessageContentComponent) await new Promise(resolve => setTimeout(resolve, 100)); + // this.patchMessageContent(); Events.on("emotes-favorite-added", this.addFavorite); Events.on("emotes-favorite-removed", this.removeFavorite); Events.on("setting-updated", this.onCategoryToggle); } disabled() { + console.log("DISABLED"); Events.off("setting-updated", this.onCategoryToggle); Events.off("emotes-favorite-added", this.addFavorite); Events.off("emotes-favorite-removed", this.removeFavorite); @@ -185,12 +186,17 @@ export default new class EmoteModule extends Builtin { } async getBlacklist() { - const category = "Blacklist"; - const exists = DataStore.emotesExist(category); - const valid = await this.isCacheValid(category); - const useCache = (valid) || (!valid && exists && !this.shouldDownload); - const list = useCache ? DataStore.getEmoteData(category) : await this.downloadEmotes(category); - blacklist.push(...list); + try { + const category = "Blacklist"; + const exists = DataStore.emotesExist(category); + const valid = await this.isCacheValid(category); + const useCache = (valid) || (!valid && exists && !this.shouldDownload); + const list = useCache ? DataStore.getEmoteData(category) : await this.downloadEmotes(category); + blacklist.push(...list); + } + catch (err) { + // TODO: Log this + } } isCacheValid(category) { diff --git a/src/data/changelog.js b/src/data/changelog.js new file mode 100644 index 00000000..2d669acb --- /dev/null +++ b/src/data/changelog.js @@ -0,0 +1,29 @@ +export default { + description: "Don't be shocked, this modal is supposed to be here.", + changes: [ + { + title: "What's New?", + items: [ + "**BandagedBD will now keep you updated with changelogs!** I will try to only show a changelog when there's more than a tiny or internal change.", + "**Twitter (@BandagedBD)** I created a Twitter to try and provide support and such for those without access to the server. https://Twitter.com/BandagedBD" + ] + }, + { + title: "Fixes", + type: "fixed", + items: [ + "**Colored Text** option should work again.", + "**Emotes** should show up in chat.", + "Fixed a bug where BBD attempted to patch the TabBar module incorrectly. (Thanks, DevilBro)" + ] + }, + { + title: "Minor Stuff", + type: "improved", + items: [ + "**Colour->Color.** Swapped to using English-US spelling by default to be consistent, and to potentially be prepared for localization.", + "**Versions simplified.** The BandagedBD version now integrates into Discord's at the bottom-left of settings instead of randomly being a part of the setting list." + ] + } + ] +}; \ No newline at end of file diff --git a/src/data/data.js b/src/data/data.js index 1a9a9a7c..63eaa63c 100644 --- a/src/data/data.js +++ b/src/data/data.js @@ -1,4 +1,5 @@ export {default as Config} from "./config"; export {default as EmoteConfig} from "./settings/emoteconfig"; export {default as SettingsConfig} from "./settings/config"; -export {default as Strings} from "./strings"; \ No newline at end of file +export {default as Strings} from "./strings"; +export {default as Changelog} from "./changelog"; \ No newline at end of file diff --git a/src/modules/addonmanager.js b/src/modules/addonmanager.js index 2a80336b..2608a4be 100644 --- a/src/modules/addonmanager.js +++ b/src/modules/addonmanager.js @@ -19,7 +19,7 @@ const fs = require("fs"); const Module = require("module").Module; Module.globalPaths.push(path.resolve(require("electron").remote.app.getAppPath(), "node_modules")); -const splitRegex = /[^\S\r\n]*?\r?\n[^\S\r\n]*?\*[^\S\r\n]?/; +const splitRegex = /[^\S\r\n]*?\r?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/; const escapedAtRegex = /^\\@/; const stripBOM = function(fileContent) { @@ -122,6 +122,7 @@ export default class AddonManager { const parsed = Utilities.testJSON(metaData); if (!parsed) throw new MetaError("META could not be parsed."); if (!parsed.name) throw new MetaError("META missing name data."); + parsed.format = "json"; return parsed; } @@ -144,6 +145,7 @@ export default class AddonManager { } out[field] = accum.trim(); delete out[""]; + out.format = "jsdoc"; return out; } diff --git a/src/modules/componentpatcher.js b/src/modules/componentpatcher.js index c7b6ff15..caddda49 100644 --- a/src/modules/componentpatcher.js +++ b/src/modules/componentpatcher.js @@ -43,6 +43,7 @@ export default new class ComponentPatcher { const GuildComponent = reactInstance.return.type; if (!GuildComponent) return; this.guildListItemsPatch = Patcher.after("ThemeHelper", GuildComponent.prototype, "render", (thisObject, _, returnValue) => { + if (!returnValue || !thisObject) return; const guildData = thisObject.props; returnValue.props.className += " bd-guild"; if (guildData.unread) returnValue.props.className += " bd-unread"; diff --git a/src/modules/core.js b/src/modules/core.js index 8ca48dd4..93707f6f 100644 --- a/src/modules/core.js +++ b/src/modules/core.js @@ -30,6 +30,16 @@ Core.prototype.init = async function() { Modals.alert("Not Supported", "BetterDiscord v" + Config.version + " (your version)" + " is not supported by the latest js (" + Config.bbdVersion + ").

Please download the latest version from GitHub"); return; } + + if (window.ED) { + Modals.alert("Not Supported", "BandagedBD does not work with EnhancedDiscord. Please uninstall one of them."); + return; + } + + if (window.WebSocket && window.WebSocket.name && window.WebSocket.name.includes("Patched")) { + Modals.alert("Not Supported", "BandagedBD does not work with Powercord. Please uninstall one of them."); + return; + } // const latestLocalVersion = Config.updater ? Config.updater.LatestVersion : Config.latestVersion; // if (latestLocalVersion > Config.version) { // Modals.alert("Update Available", ` @@ -63,16 +73,25 @@ Core.prototype.init = async function() { // Show loading errors Logger.log("Startup", "Collecting Startup Errors"); Modals.showAddonErrors({plugins: pluginErrors, themes: themeErrors}); + + // const previousVersion = DataStore.getBDData("version"); + // if (bbdVersion > previousVersion) { + // if (bbdChangelog) this.showChangelogModal(bbdChangelog); + // DataStore.setBDData("version", bbdVersion); + // } }; Core.prototype.waitForGuilds = function() { + let timesChecked = 0; return new Promise(resolve => { const checkForGuilds = function() { + timesChecked++; if (document.readyState != "complete") setTimeout(checkForGuilds, 100); const wrapper = GuildClasses.wrapper.split(" ")[0]; const guild = GuildClasses.listItem.split(" ")[0]; const blob = GuildClasses.blobContainer.split(" ")[0]; if (document.querySelectorAll(`.${wrapper} .${guild} .${blob}`).length > 0) return resolve(Config.deferLoaded = true); + else if (timesChecked >= 50) return resolve(Config.deferLoaded = true); setTimeout(checkForGuilds, 100); }; diff --git a/src/ui/emote.js b/src/ui/emote.js index 2c486374..c065fe4f 100644 --- a/src/ui/emote.js +++ b/src/ui/emote.js @@ -1,6 +1,6 @@ import {Settings, React, WebpackModules, Events, Strings} from "modules"; -const TooltipWrapper = WebpackModules.getByDisplayName("TooltipDeprecated"); +const TooltipWrapper = WebpackModules.getByDisplayName("Tooltip"); export default class BDEmote extends React.Component { constructor(props) { @@ -58,12 +58,13 @@ export default class BDEmote extends React.Component { text: this.label, delay: 750 }, - React.createElement("div", { + (childProps) => { + return React.createElement("div", Object.assign({ className: "emotewrapper" + (this.props.jumboable ? " jumboable" : ""), onMouseEnter: this.onMouseEnter, onMouseLeave: this.onMouseLeave, onClick: this.onClick - }, + }, childProps), React.createElement("img", { draggable: false, className: "emote" + this.modifierClass + (this.props.jumboable ? " jumboable" : "") + (!this.state.shouldAnimate ? " stop-animation" : ""), @@ -77,7 +78,7 @@ export default class BDEmote extends React.Component { type: "button", onClick: this.toggleFavorite }) - ) - ); + ); + }); } } \ No newline at end of file diff --git a/src/ui/floating/container.jsx b/src/ui/floating/container.jsx index a1eb75e9..e6f80417 100644 --- a/src/ui/floating/container.jsx +++ b/src/ui/floating/container.jsx @@ -43,11 +43,11 @@ class FloatingWindowContainer extends React.Component { } const containerRef = React.createRef(); -const container = ; -const App = Utilities.findInReactTree(Utilities.getReactInstance(document.querySelector(".app-19_DXt")), m => m && m.type && m.type.displayName && m.type.displayName == "App"); -Patcher.after("FloatingContainer", App.type.prototype, "render", (thisObject, args, returnValue) => { - const group = Utilities.findInRenderTree(returnValue, m => m && m[6] && m[6].type && m[6].type.displayName == "LayerContainer", {walkable: ["children", "props"]}); - group.push(container); -}); -App.stateNode.forceUpdate(); +// const container = ; +// const App = Utilities.findInReactTree(Utilities.getReactInstance(document.querySelector(".app-19_DXt")), m => m && m.type && m.type.displayName && m.type.displayName == "App"); +// Patcher.after("FloatingContainer", App.type.prototype, "render", (thisObject, args, returnValue) => { +// const group = Utilities.findInRenderTree(returnValue, m => m && m[6] && m[6].type && m[6].type.displayName == "LayerContainer", {walkable: ["children", "props"]}); +// group.push(container); +// }); +// App.stateNode.forceUpdate(); export default containerRef.current; \ No newline at end of file diff --git a/src/ui/modals.js b/src/ui/modals.js index c05ed706..65de8c14 100644 --- a/src/ui/modals.js +++ b/src/ui/modals.js @@ -1,3 +1,4 @@ +import {Config} from "data"; import {Logger, WebpackModules, Utilities, React, Settings, Strings} from "modules"; export default class Modals { @@ -166,4 +167,60 @@ export default class Modals { if (pluginErrors.length) modal.find(".tab-bar-item")[0].click(); else modal.find(".tab-bar-item")[1].click(); } + + showChangelogModal(options = {}) { + const ModalStack = WebpackModules.getByProps("push", "update", "pop", "popWithKey"); + const ChangelogClasses = WebpackModules.getByProps("fixed", "improved"); + const TextElement = WebpackModules.getByProps("Sizes", "Weights"); + const FlexChild = WebpackModules.getByProps("Child"); + const Titles = WebpackModules.getByProps("Tags", "default"); + const Changelog = WebpackModules.getModule(m => m.defaultProps && m.defaultProps.selectable == false); + const MarkdownParser = WebpackModules.getByProps("defaultRules", "parse"); + if (!Changelog || !ModalStack || !ChangelogClasses || !TextElement || !FlexChild || !Titles || !MarkdownParser) return; + + const {image = "https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5", description = "", changes = [], title = "BandagedBD", subtitle = `v${Config.bbdVersion}`, footer} = options; + const ce = React.createElement; + const changelogItems = [ce("img", {src: image})]; + if (description) changelogItems.push(ce("p", null, MarkdownParser.parse(description))); + for (let c = 0; c < changes.length; c++) { + const entry = changes[c]; + const type = ChangelogClasses[entry.type] ? ChangelogClasses[entry.type] : ChangelogClasses.added; + const margin = c == 0 ? ChangelogClasses.marginTop : ""; + changelogItems.push(ce("h1", {className: `${type} ${margin}`,}, entry.title)); + const list = ce("ul", null, entry.items.map(i => ce("li", null, MarkdownParser.parse(i)))); + changelogItems.push(list); + } + const renderHeader = function() { + return ce(FlexChild.Child, {grow: 1, shrink: 1}, + ce(Titles.default, {tag: Titles.Tags.H4}, title), + ce(TextElement,{size: TextElement.Sizes.SMALL, color: TextElement.Colors.PRIMARY, className: ChangelogClasses.date}, subtitle) + ); + }; + + const renderFooter = () => { + const Anchor = WebpackModules.getModule(m => m.displayName == "Anchor"); + const AnchorClasses = WebpackModules.getByProps("anchorUnderlineOnHover") || {anchor: "anchor-3Z-8Bb", anchorUnderlineOnHover: "anchorUnderlineOnHover-2ESHQB"}; + const joinSupportServer = (click) => { + click.preventDefault(); + click.stopPropagation(); + ModalStack.pop(); + BDV2.joinBD2(); + }; + const supportLink = Anchor ? ce(Anchor, {onClick: joinSupportServer}, "Join our Discord Server.") : ce("a", {className: `${AnchorClasses.anchor} ${AnchorClasses.anchorUnderlineOnHover}`, onClick: joinSupportServer}, "Join our Discord Server."); + const defaultFooter = ce(TextElement,{size: TextElement.Sizes.SMALL, color: TextElement.Colors.PRIMARY}, "Need support? ", supportLink); + return ce(FlexChild.Child, {grow: 1, shrink: 1}, footer ? footer : defaultFooter); + }; + + ModalStack.push(function(props) { + return ce(Changelog, Object.assign({ + className: ChangelogClasses.container, + selectable: true, + onScroll: _ => _, + onClose: _ => _, + renderHeader: renderHeader, + renderFooter: renderFooter, + children: changelogItems + }, props)); + }); + } } \ No newline at end of file diff --git a/src/ui/settings.js b/src/ui/settings.js index 1a92c34a..a78c8290 100644 --- a/src/ui/settings.js +++ b/src/ui/settings.js @@ -43,9 +43,11 @@ export default new class SettingsRenderer { } async patchSections() { - Patcher.after("SettingsManager", WebpackModules.getByDisplayName("FluxContainer(GuildSettings)").prototype, "render", (thisObject) => { - thisObject._reactInternalFiber.return.return.return.return.return.return.memoizedProps.id = "guild-settings"; - }); + ReactComponents.get("FluxContainer(GuildSettings)", m => m.displayName == "FluxContainer(GuildSettings)").then(c => console.log("COMPONENT", c)); + // const GuildSettings = await ReactComponents.get("FluxContainer(GuildSettings)", m => m.displayName == "FluxContainer(GuildSettings)"); + // Patcher.after("SettingsManager", GuildSettings.prototype, "render", (thisObject) => { + // thisObject._reactInternalFiber.return.return.return.return.return.return.memoizedProps.id = "guild-settings"; + // }); const UserSettings = await ReactComponents.get("UserSettings", m => m.prototype && m.prototype.generateSections); Patcher.after("SettingsManager", UserSettings.prototype, "render", (thisObject) => { thisObject._reactInternalFiber.return.return.return.return.return.return.return.memoizedProps.id = "user-settings"; diff --git a/src/ui/settings/addoncard.jsx b/src/ui/settings/addoncard.jsx index 55ca3fd8..7701ce4e 100644 --- a/src/ui/settings/addoncard.jsx +++ b/src/ui/settings/addoncard.jsx @@ -96,12 +96,21 @@ export default class AddonCard extends React.Component { buildLink(which) { const url = this.props.addon[which]; + if (which == "invite") { + const onClick = () => { + const tester = /\.gg\/(.*)$/; + let code = url; + if (tester.test(code)) code = code.match(tester)[1]; + BDV2.LayerStack.popLayer(); + BDV2.InviteActions.acceptInviteAndTransitionToInviteChannel(code); + }; + } if (!url) return null; return {Strings.Addons[which]}; } get footer() { - const links = ["website", "source"]; + const links = ["website", "source", "invite", "donate", "patreon"]; if (!links.some(l => this.props.addon[l]) && !this.props.hasSettings) return null; const linkComponents = links.map(this.buildLink.bind(this)).filter(c => c); return