diff --git a/.eslintrc b/.eslintrc index 5eced1fc..a8c8c8be 100644 --- a/.eslintrc +++ b/.eslintrc @@ -78,7 +78,6 @@ "opener": "off", "origin": "off", "parent": "off", - "performance": "off", "personalbar": "off", "print": "off", "prompt": "off", diff --git a/TODO.md b/TODO.md index 43dd3a00..a8a90d30 100644 --- a/TODO.md +++ b/TODO.md @@ -1,37 +1,36 @@ # To-Do List -This list only reflects the items that have needed to be done since June 2019, there was a lot of progress/change before this point. +This list only reflects the items that have needed to be done since July 2020, there was a lot of progress/change before this point. Note: The items listed here are not in any sort of priority order. -### In Progress -- Redo emotemenu -- Remove all jquery usage +### To Do (Remote Side) +- Use DOM in place of jQuery +- Use fetch/require in place of $.ajax +- Dependency loading (jquery, css, config file) +- Stop depending on injector giving config +- Fix floating window module +- Dummyproof public servers -### To Dummy/Crash Proof -- PublicServers react -- Floating window +### To Do (Injector) +- Update to new windowprefs location +- Remove dependency management +- Remove string script injection/communication with remote -### To Complete +### To Do (Meta) +- Update README (info, patrons) +- Add issue template +- Add gh funding + +### Someday - Move old utilities to BdApi - Component patcher (also does additional classes, etc) - Plugin Class - New Plugin API - Require patch - Backwards compatibility module (with deprecation notices) - - Modify old monkeyPatch to really use Patcher +- Modify old monkeyPatch to really use Patcher - Repo browser - Addon update system -- PublicServer button patch -- Redo devmode - Rewrite emote auto caps - -### Potential Ideas -- Rearchitect to not use remote files -- Modify CSP rather than entirely remove - -### Done -- PublicServers React Rewrite -- Rewrite plugin/theme cards -- Addon list controls -- Use an actual patcher and not monkeyPatch \ No newline at end of file +- Modify CSP rather than entirely remove or use privileged scheme \ No newline at end of file diff --git a/css/main.css b/css/main.css index b3368394..2beb51af 100644 --- a/css/main.css +++ b/css/main.css @@ -2322,3 +2322,35 @@ body .ace_closeButton:active { /* =============== */ /* END DARK MODE */ + + + +.bd-chat-badge { + vertical-align: bottom; + line-height: 1.375rem; + display: inline-block; + height: 1.25rem; +} + +.bd-member-badge { + height: 15px; + margin-left: 4px; +} + +.bd-sidebar-header { + display: flex; + justify-content: space-between; +} + +.bd-sidebar-header .bd-changelog-button { + height: 16px; +} + +.bd-sidebar-header .bd-icon { + cursor: pointer; + fill: #72767d; +} + +.bd-sidebar-header .bd-icon:hover { + fill: #fff; +} \ No newline at end of file diff --git a/css/main.min.css b/css/main.min.css index c9749872..05adb998 100644 --- a/css/main.min.css +++ b/css/main.min.css @@ -1 +1 @@ -.bd-loaderv2{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+IDwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyBoZWlnaHQ9IjEwMCUiIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjAwMCAyMDAwIj4gICAgPG1ldGFkYXRhIC8+ICAgIDxkZWZzPiAgICAgICAgPGZpbHRlciBpZD0ic2hhZG93MSI+ICAgICAgICA8ZmVEcm9wU2hhZG93IGR4PSIyMCIgZHk9IjAiIHN0ZERldmlhdGlvbj0iMjAiIGZsb29kLWNvbG9yPSJyZ2JhKDAsMCwwLDAuMzUpIi8+ICAgICAgICA8L2ZpbHRlcj4gICAgICAgIDxmaWx0ZXIgaWQ9InNoYWRvdzIiPiAgICAgICAgPGZlRHJvcFNoYWRvdyBkeD0iMTUiIGR5PSIwIiBzdGREZXZpYXRpb249IjIwIiBmbG9vZC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwLjE1KSIvPiAgICAgICAgPC9maWx0ZXI+ICAgICAgICA8ZmlsdGVyIGlkPSJzaGFkb3czIj4gICAgICAgIDxmZURyb3BTaGFkb3cgZHg9IjEwIiBkeT0iMCIgc3RkRGV2aWF0aW9uPSIyMCIgZmxvb2QtY29sb3I9InJnYmEoMCwwLDAsMC4zNSkiLz4gICAgICAgIDwvZmlsdGVyPiAgICA8L2RlZnM+ICAgIDxnPiAgICAgICAgPHBhdGggc3R5bGU9ImZpbHRlcjogdXJsKCNzaGFkb3czKSIgZD0iTTExOTUuNDQrMTM1LjQ0MkwxMTk1LjQ0KzEzNS40NDJMOTk3LjYrMTM2LjQ0MkMxMDI0LjIrMTQ5Ljc0MisxMTcwLjM0KzE2My41NDIrMTE5My42NCsxNzkuNzQyQzEyNjQuMzQrMjI4Ljg0MisxMzE5Ljc0KzI5MS4yNDIrMTM1OC4yNCszNjUuMDQyQzEzOTguMTQrNDQxLjY0MisxNDE5Ljc0KzUzMC42NDIrMTQyMi41NCs2MjkuNjQyTDE0MjIuNTQrNjMwLjg0MkwxNDIyLjU0KzYzMi4wNDJDMTQyMi41NCs3NzMuMTQyKzE0MjIuNTQrMTIyOC4xNCsxNDIyLjU0KzEzNjkuMTRMMTQyMi41NCsxMzcwLjM0TDE0MjIuNTQrMTM3MS41NEMxNDE5Ljg0KzE0NzAuNTQrMTM5OC4yNCsxNTU5LjU0KzEzNTguMjQrMTYzNi4xNEMxMzE5Ljc0KzE3MDkuOTQrMTI2NC40NCsxNzcyLjM0KzExOTMuNjQrMTgyMS40NEMxMTcxLjA0KzE4MzcuMTQrMTAyNS43KzE4NTAuNTQrMTAwMCsxODYzLjU0TDExOTMuNTQrMTg2NC41NEMxNTM5Ljc0KzE4NjYuNDQrMTg2NC41NCsxNjkzLjM0KzE4NjQuNTQrMTI5Ni42NEwxODY0LjU0KzcxNi45NDJDMTg2Ni40NCszMTIuNDQyKzE1NDEuNjQrMTM1LjQ0MisxMTk1LjQ0KzEzNS40NDJaIiBmaWxsPSIjMTcxNzE3IiBvcGFjaXR5PSIxIi8+ICAgICAgICA8cGF0aCBzdHlsZT0iZmlsdGVyOiB1cmwoI3NoYWRvdzIpIiBkPSJNMTY5NS41NCs2MzEuNDQyQzE2ODUuODQrMjc4LjA0MisxNDA5LjM0KzEzNS40NDIrMTA1Mi45NCsxMzUuNDQyTDM2MS43NCsxMzYuNDQyTDgwMy43NCs0OTAuNDQyTDEwNjAuNzQrNDkwLjQ0MkMxMzM1LjI0KzQ5MC40NDIrMTMzNS4yNCs4MzUuMzQyKzEwNjAuNzQrODM1LjM0MkwxMDYwLjc0KzExNjQuODRDMTE1MC4yMisxMTY0Ljg0KzEyMTAuNTMrMTIwMS40OCsxMjQxLjY4KzEyNTAuODdDMTMwNi4wNysxMzUzKzEyNDUuNzYrMTUwOS42NCsxMDYwLjc0KzE1MDkuNjRMMzYxLjc0KzE4NjMuNTRMMTA1Mi45NCsxODY0LjU0QzE0MDkuMjQrMTg2NC41NCsxNjg1Ljc0KzE3MjEuOTQrMTY5NS41NCsxMzY4LjU0QzE2OTUuNTQrMTIwNS45NCsxNjUxLjA0KzEwODQuNDQrMTU3Mi42NCs5OTkuOTQyQzE2NTEuMDQrOTE1LjU0MisxNjk1LjU0Kzc5NC4wNDIrMTY5NS41NCs2MzEuNDQyWiIgZmlsbD0iIzNFODJFNSIgb3BhY2l0eT0iMSIvPiAgICAgICAgPHBhdGggc3R5bGU9ImZpbHRlcjogdXJsKCNzaGFkb3cxKSIgZD0iTTE0NjkuMjUrNjMxLjQ0MkMxNDU5LjU1KzI3OC4wNDIrMTE4My4wNSsxMzUuNDQyKzgyNi42NSsxMzUuNDQyTDEzNS40NSsxMzUuNDQyTDEzNS40NSsxMDA0QzEzNS40NSsxMDA0KzEzNS40MjcrMTI1NS4yMSszNTUuNjI2KzEyNTUuMjFDNTc1LjgyNSsxMjU1LjIxKzU3NS44NDgrMTAwNCs1NzUuODQ4KzEwMDRMNTc3LjQ1KzQ5MC40NDJMODM0LjQ1KzQ5MC40NDJDMTEwOC45NSs0OTAuNDQyKzExMDguOTUrODM1LjM0Mis4MzQuNDUrODM1LjM0Mkw2NjQuNjUrODM1LjM0Mkw2NjQuNjUrMTE2NC44NEw4MzQuNDUrMTE2NC44NEM5MjMuOTMyKzExNjQuODQrOTg0LjI0NCsxMjAxLjQ4KzEwMTUuMzkrMTI1MC44N0MxMDc5Ljc4KzEzNTMrMTAxOS40NysxNTA5LjY0KzgzNC40NSsxNTA5LjY0TDEzNS40NSsxNTA5LjY0TDEzNS40NSsxODY0LjU0TDgyNi42NSsxODY0LjU0QzExODIuOTUrMTg2NC41NCsxNDU5LjQ1KzE3MjEuOTQrMTQ2OS4yNSsxMzY4LjU0QzE0NjkuMjUrMTIwNS45NCsxNDI0Ljc1KzEwODQuNDQrMTM0Ni4zNSs5OTkuOTQyQzE0MjQuNzUrOTE1LjU0MisxNDY5LjI1Kzc5NC4wNDIrMTQ2OS4yNSs2MzEuNDQyWiIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMSIvPiAgICA8L2c+PC9zdmc+)}.bd-loaderv2{position:fixed;bottom:5px;right:5px;z-index:2147483647;display:block;width:20px;height:20px;background-size:100% 100%;animation:bd-loaderv2-animation 1.5s ease-in-out infinite}@keyframes bd-loaderv2-animation{0%{opacity:.05}50%{opacity:.6}to{opacity:.05}}.bd-settings-group.collapsible .bd-settings-title{display:flex;justify-content:space-between}.bd-settings-group.collapsible .bd-settings-title::after{content:"";background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FscXVlXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSItOTUwIDUzMiAxOCAxOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAtOTUwIDUzMiAxOCAxODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6bm9uZTt9DQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTS05MzIsNTMydjE4aC0xOHYtMThILTkzMnoiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QxIiBwb2ludHM9Ii05MzYuNiw1MzguOCAtOTQxLDU0My4yIC05NDUuNCw1MzguOCAiLz4NCjwvc3ZnPg0K);height:20px;width:20px;display:inline-block;vertical-align:bottom;transition:transform .3s ease;transform:rotate(0)}.bd-settings-group.collapsed .bd-settings-title::after{transition:transform .3s ease;transform:rotate(90deg)}.bd-settings-container{height:auto;overflow:hidden;transition:height 300ms cubic-bezier(.47,0,.745,.715)}.bd-settings-group.collapsed .bd-settings-container{height:0}.bd-settings-group~.bd-settings-group .bd-settings-title{margin-top:30px;transition:margin-top 300ms ease}.bd-settings-group.collapsed+.bd-settings-group .bd-settings-title{margin-top:0}.bd-settings-group.collapsible .bd-settings-title{order:1;align-items:center}.bd-settings-group.collapsible .bd-settings-title::before{content:"";background-color:rgba(114,118,125,.3);height:2px;order:2;flex:1;margin:0 10px 0 15px}.bd-settings-group.collapsible .bd-settings-title::after{order:3}.bd-settings-title.bd-settings-group-title{margin-bottom:10px}.checkbox-item{display:flex}.checkbox-item .checkbox-label{margin-right:8px}#bd-connection{margin-left:10px}.bd-button{background-color:#3e82e5;color:#fff;border-radius:3px;padding:2px 6px}.bd-button:hover{background-color:#3875ce}.bd-button:active{background-color:#3268b7}.bd-footnote{color:#b9bbbe;font-size:11px}.bd-button-next,.bd-button-reconnect{margin:5px 10px 10px 0;width:100%;min-height:20px}.bd-server-card{position:relative;border-width:1px;border-style:solid;border-radius:5px;background:rgba(32,34,37,.6);border-color:#202225;margin-bottom:8px}.bd-server-header,.bd-server-footer{display:flex;color:#b9bbbe}.bd-server-header{text-transform:uppercase;letter-spacing:.5px}.bd-server-card .bd-button{margin-top:4px}.bd-button.bd-button-success{background-color:#3ac15c}.bd-button.bd-button-success:hover{background-color:#34ae53}.bd-button.bd-button-success:active{background-color:#2e9a4a}#bbd-version{font-size:12px;font-weight:600;color:#72767d;padding:2px 10px}.settings-open .bd-close{cursor:pointer;float:right}@keyframes open-window{0%{transform:scale(.9)}to{transform:none}}.floating-window{animation:open-window 200ms ease;min-width:200px;min-height:300px;box-shadow:0 2px 10px 0 rgba(0,0,0,.2);display:flex;flex-direction:column;-webkit-app-region:no-drag;position:fixed;z-index:1001}.floating-window.modal-open{z-index:999}.floating-window.resizable{overflow:auto;resize:both;padding-bottom:10px;background:#202225}.floating-window-titlebar{width:100%;display:flex;justify-content:space-between;align-items:center;background:#202225;color:#fff;border-bottom:1px solid #272822}.floating-window-content{background:#2f3129;color:#fff;flex:1}.floating-window-titlebar .title{flex:1;text-align:center;padding:2px 0}.floating-window-buttons{display:flex}.floating-window-buttons .button{cursor:pointer;padding:0 2px}.floating-window-buttons .button svg{fill:#dcddde;margin-top:1.5px}.floating-window-buttons .button:hover svg{fill:#fff}.floating-window-buttons .button:hover{background-color:#36393f}.floating-window-buttons .close-button:hover{background-color:#f04747}.floating-window-buttons .close-button:hover svg path.fill{fill:#fff}.floating-window-content #bd-editor-panel{display:flex;flex-direction:column;flex:1}.floating-window-content{display:flex;flex-direction:column}.floating-window .editor-wrapper{flex:1}.floating-window .ace_editor{height:auto;flex:1}.floating-window #bd-editor-controls{height:auto;background:#202225;border:0;box-shadow:0 1px 0 0 #2f3129 inset}.bd-addon-controls{display:flex;align-items:center;justify-content:space-between}.bd-addon-controls .bd-search{font-size:13px;margin:0;width:200px}.bd-addon-dropdowns{display:flex}.bd-select-wrapper+.bd-select-wrapper{margin-left:10px}.bd-select-wrapper{color:#f6f6f7;font-size:13px;display:flex;align-items:center}.bd-select-wrapper label{opacity:.3;margin-right:5px}.bd-select{position:relative;cursor:pointer;color:#f6f6f7;font-size:13px;display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,.1);border:1px solid rgba(0,0,0,.3);border-radius:3px;padding:5px 5px 5px 0}.bd-select.bd-select-transparent{background:0 0;border:0;padding:0}.bd-select-value{padding-left:12px}.bd-select-arrow{margin-left:10px}.bd-select .bd-select-options{position:absolute;background:#2f3136;border-radius:0 0 3px 3px;max-height:300px;min-width:calc(100% + 2px);overflow-y:auto;box-shadow:rgba(0,0,0,.3) 0 1px 5px 0;border:1px solid rgba(0,0,0,.3);border-top:0;margin-top:-1px;margin-left:-1px;z-index:2;top:100%}.bd-select-transparent .bd-select-options{border:1px solid rgba(0,0,0,.3);margin-top:3px;border-radius:3px}.bd-select .bd-select-option{padding:8px 12px;cursor:pointer;white-space:pre}.bd-select .bd-select-option:hover,.bd-select .bd-select-option.selected{background:#26272b}.bd-search-wrapper{padding:3px;border-radius:3px;outline:0;border:0;background-color:#202225;color:#fff;display:flex;align-items:center}.bd-search{padding:2px 3px;background:0 0;border:0;color:#fff;flex:1}.bd-search-wrapper>svg{margin-right:2px}.bd-setting-item .bd-select{min-width:200px}.bd-settings-group.expanded .bd-settings-container:not(.animating){overflow:visible}.bd-switch{background-color:#72767d;border-radius:14px;width:42px;height:24px;opacity:1;overflow:hidden;user-select:none;position:relative;display:block;flex:0 0 auto;transition:background .15s ease-in-out,box-shadow .15s ease-in-out,border .15s ease-in-out,opacity .15s ease-in-out;margin-left:10px;box-shadow:inset 0 1px 1px rgba(0,0,0,.15)}.bd-switch::before{content:"";display:block;position:absolute;top:0;left:0;bottom:0;right:0;z-index:0;opacity:0;background-color:#000}.bd-switch::after{content:"";display:block;position:absolute;background-color:#fff;z-index:1;width:18px;margin:3px;border-radius:9px;height:18px;left:0;transition:transform .15s ease-in-out,width .1s ease-in-out,left .1s ease-in-out;box-shadow:0 2px 4px rgba(0,0,0,.3)}.bd-switch .bd-checkbox{position:absolute;width:100%;height:100%;opacity:0;padding:0;margin:0;z-index:2;cursor:pointer}.bd-switch-checked{background-color:#3e82e5}.bd-switch-checked::after{transform:translate3d(18px,0,0)}.bd-switch-disabled{opacity:.3;cursor:not-allowed}.bd-setting-item{display:flex;flex-direction:column;margin-bottom:20px}.bd-setting-header{display:flex;justify-content:space-between;align-items:center}.bd-setting-header label{font-weight:500;cursor:pointer;overflow:hidden;word-wrap:break-word;font-size:16px;line-height:24px;color:#f6f6f7}.bd-setting-note{color:#72767d;margin-top:4px;font-size:14px;line-height:20px;font-weight:500}.bd-setting-divider{width:100%;height:1px;margin-top:20px;background-color:rgba(114,118,125,.3)}.bd-controls+.bd-addon-list{margin-top:10px}.bd-addon-button{cursor:pointer}.bd-addon-button+.bd-addon-button{margin-left:5px}#emote-container{padding:10px}.emote-container{display:inline-block;padding:2px;border-radius:5px;width:30px;height:30px;position:relative}.emote-icon{max-width:100%;max-height:100%;position:absolute;margin:auto;top:0;right:0;bottom:0;left:0;cursor:pointer}.emote.stop-animation{animation:none!important}.emote-container:hover{background:rgba(123,123,123,.37)}.emoteflip,.emotespinflip{transform:scaleX(-1)}.emotespin{animation:1s emote-spin infinite linear}.emote1spin{animation:1s emote-spin-reverse infinite linear}.emotespin2{animation:.5s emote-spin infinite linear}.emote2spin{animation:.5s emote-spin-reverse infinite linear}.emotespin3{animation:.2s emote-spin infinite linear}.emote3spin{animation:.2s emote-spin-reverse infinite linear}.emotepulse{animation:1s emote-pulse infinite linear}.emotetr{transform:translateX(-3px)}.emotebl{transform:translateY(-3px)}.emotebr{transform:translate(-3px,-3px)}.emoteshake{animation:1s emote-shake infinite linear}.emoteflap{transform:scaleY(-1)!important}.emoteshake2{animation:emote-shake2 .3s linear infinite}.emoteshake3{animation:emote-shake3 .1s linear infinite}@keyframes emote-shake2{25%{transform:translate(-1px,-1px)}50%{transform:translate(-1px,1px)}75%{transform:translate(1px,1px)}75%{transform:translate(1px,-1px)}}@keyframes emote-shake3{25%{transform:translate(-1px,-1px)}50%{transform:translate(-1px,1px)}75%{transform:translate(1px,1px)}75%{transform:translate(1px,-1px)}}@keyframes emote-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes emote-spin-reverse{0%{transform:rotate(0deg)}to{transform:rotate(-360deg)}}@keyframes emote-pulse{0%{-webkit-transform:scale(1,1)}50%{-webkit-transform:scale(1.2,1.2)}to{-webkit-transform:scale(1,1)}}@keyframes emote-shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}#removemenu{width:auto;background:#505050;position:absolute;z-index:999999;display:none;box-shadow:0 0 2px #000;padding:2px;left:25px;display:block!important;cursor:pointer;color:#fff;position:fixed}#removemenu ul a{text-decoration:none;color:#fff;padding:3px}.emotewrapper{position:relative;display:inline-flex;object-fit:contain;margin:-.1em .05em -.2em .1em;vertical-align:top}.emotewrapper.jumboable{margin-bottom:0;margin-top:.2em;vertical-align:-.3em}.emote{height:1.45em}.emote.jumboable{height:2rem}.emotewrapper:hover .fav{display:block}.fav{display:none;position:absolute;width:15px;height:15px;right:-7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAzFBMVEUAAABQUFBMTExLS0tNTU1MTExNTU1NTU1MTExMTExNTU1LS0tEREBEREBEREBEREBJSUhLS0tLS0tEREBNTU1NTU1NTU1EREArKyhNTU1NTU0AAABMTExKSklMTExNTU1NTU1NTU1KSkpMTExKSkhNTU1KSkpISEZNTU1LS0tAQDxOTk5KSkpLS0tNTU1MTExMTEx/f39MTExMTExLS0pLS0tMTExNTU1NTU1LS0pNTU1NTU1NTU1NTU1NTU1NTUxNTU1NTU1NTUxMTEzB8C/5AAAAOnRSTlMAI8X96oWAgYSF68QBAg0PMCb9BIuLgQUD4N0Bh0mKhZSOQ4gcrKscaW8QRE6fmJyjAshASceG7cIpqQOxTQAAALVJREFUGFddx6FOA0EYAOGZvd07Qm6vVCAAgUUgQEDfX/YZMAigqaFN7iC5tsmPqGPUN/AvUVeoEbGOCElJz08Uzeixqu4AqomVVSNngOVjTqDGZSl3UFtPGV2ot2zaq96YM9p5Ddzcf/nTTAlj+/sNtNu8OcwkIsbPBtrUfMQeEhGQmHbmGIFMwLPzu6UMIwBNgToshgq8Nr2ki+Oy7ebDHp70LRPWB6OZgfWLWei7fJonOOsPCGA9kVlssOoAAAAASUVORK5CYII=);border:0;background-size:100% 100%;background-repeat:no-repeat;background-color:#303030;border-radius:5px;top:-7px;cursor:pointer}.fav.active{background-color:#ff0}.emojiPicker-3m1S-j{box-shadow:none;border-top:none;border-radius:0 0 5px 5px}#bd-qem{border-radius:5px 5px 0 0;background:#fff;border-bottom:1px solid rgba(0,0,0,.1)!important;height:30px;display:flex;flex-direction:row;padding-right:1px!important}#bd-qem button{border-left:1px solid #efefef;background:0 0;box-shadow:#cecece 1px 0 0 0;flex-grow:1}#bd-qem button:hover{background:#ececec}#bd-qem-twitch{border-radius:5px 0 0 0;order:2}#bd-qem-emojis{border-radius:0 5px 0 0;order:3}#bd-qem-favourite{order:3}#bd-qem button.active{background-color:#e2e2e2}#bd-qem-twitch-container,#bd-qem-favourite-container{width:346px;height:329px;background-color:#fff;border-radius:0 0 5px 5px}#bd-qem-twitch-container .scroller-wrap,#bd-qem-favourite-container .scroller-wrap{height:100%}.emote-menu-inner{padding:5px 0 0 15px}.bd-qme-hidden #bd-qem-emojis{display:none}#bd-pub-li{height:20px;margin-bottom:10px;overflow:hidden}#bd-pub-button{border-radius:4px;background-color:#2f3136;color:#b9bbbe;text-align:center;font-size:12px;line-height:20px;height:20px}.bd-server-card .bd-server-tags{flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:0;line-height:24px;font-size:12px;color:#b9bbbe;font-weight:700;margin-right:10px}.bd-server-card.bd-server-card-pinned{margin-bottom:15px}.bd-server-card.bd-server-card-pinned:after{background:#3a71c1;content:"";height:3px;width:100%;display:block;margin-top:7px;position:absolute;top:100%}.bd-server-description-container{color:#b9bbbe;min-height:65px;max-height:65px;border-top:1px solid #3f4146;border-bottom:1px solid #3f4146;padding-top:5px;font-size:13px}.bd-server-header{justify-content:space-between;font-weight:600}.bd-server-card{display:flex}.bd-server-content{padding:5px 10px;flex:1}.bd-server-image{min-width:115px;min-height:115px;max-width:115px;max-height:115px}.bd-server-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:15px;max-width:330px;flex:1 1 50%}.bd-layer{-ms-flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;flex-direction:column;left:0;position:absolute;right:0;top:0}#pubslayer button{background:#7289da;color:#fff;font-size:14px;font-weight:500;line-height:16px;padding:2px 16px;border:0;border-radius:3px;transition:background-color .17s ease}#pubslayer button:hover{background-color:#677bc4}#pubslayer input{color:#f6f6f7;background-color:rgba(0,0,0,.1);border-color:rgba(0,0,0,.3);padding:10px;height:30px;border-width:1px;border-style:solid;border-radius:3px;outline:0;transition:background-color .15s ease,border .15s ease}#bd-editor-panel{display:flex;flex-direction:column}#bd-editor-controls button{margin:0 5px 0 0;background:0 0;color:#fff;height:26px;font-weight:600;border-radius:3px;display:flex;align-items:center}#bd-editor-controls button:hover{background:rgba(255,255,255,.05)}#bd-editor-controls button svg{fill:#fff}#bd-editor-controls button:last-of-type{margin-right:0}#bd-editor-controls{display:flex;align-items:center;justify-content:space-between;background:#272822;color:#fff;border:0;box-shadow:0 1px 0 0 #2f3129 inset;padding:5px}.editor-wrapper{display:flex}.ace_editor{line-height:normal;font-family:Consolas,monospace;box-sizing:border-box;height:calc(100vh - 250px);font-size:14px;width:100%}.bd-monokai .editor .ace_gutter{background:#2f3136}.bd-monokai .ace_editor{background:#292b2f}.bd-monokai #bd-editor-controls{background:#202225}.theme-light #bd-editor-controls{background:#e8e8e8;border:1px solid #fff;border-top:1px solid #adadad;box-shadow:inset 0 1px 0 0 #fff}.controls-section{display:flex;align-items:center}.controls-section .checkbox-inner{width:14px;height:14px}.controls-section .checkbox-inner .checkbox:checked+span::after{left:2px;top:-2px}.controls-section .checkbox-label{font-size:14px}#floating-editor-window{min-width:340px;min-height:280px;max-height:900px;max-width:750px}.floating-addon-window{min-width:535px;min-height:605px;max-height:90%;max-width:90%}#ace_settingsmenu_container{background:rgba(0,0,0,.7)!important}body #ace_settingsmenu{padding-top:35px}body .ace_closeButton{position:absolute;top:8px;right:12px;z-index:10000;padding:0;cursor:pointer;background:0 0;border:0}body .ace_closeButton::before{content:"✖";color:#36393f}body .ace_closeButton:active{transform:translateY(2px)}#bd-editor-controls .help-text{margin-top:8px;margin-bottom:3px;font-size:14px}#bd-editor-controls .help-text .inline{background:#2f3129;padding:.2em;margin:-.2em 0;border-radius:3px}.bd-social-logo{opacity:.6}.bd-social-link:hover .bd-social-logo{opacity:1}.standardSidebarView-3F1I7i .bd-versioninfo-wrapper{bottom:0;left:0;position:fixed;background:inherit;right:0;padding:5px}.standardSidebarView-3F1I7i .bd-versioninfo-wrapper span{color:#b9bbbe;font-weight:600;font-size:11px}.standardSidebarView-3F1I7i .bd-versioninfo-wrapper a{font-size:11px}.bd-button-title{margin-left:10px}.bd-switch-item{flex-direction:column;margin-top:8px}.bd-switch-item h3{font-size:16px;font-weight:500;line-height:24px;flex:1}.theme-dark .bd-switch-item h3{color:#f6f6f7}.theme-light .bd-switch-item h3{color:#4f545c}.bd-switch-item .bd-switch-wrapper{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;width:44px;height:24px;display:block;flex:0 0 auto}.bd-switch-item .bd-switch-wrapper input{position:absolute;opacity:0;cursor:pointer;width:100%;height:100%;z-index:1}.bd-switch-item .bd-switch-wrapper .bd-switch{background:#7289da;position:absolute;top:0;right:0;bottom:0;left:0;background:#72767d;border-radius:14px;transition:background .15s ease-in-out,box-shadow .15s ease-in-out,border .15s ease-in-out}.bd-switch-item .bd-switch-wrapper .bd-switch:before{content:"";display:block;width:18px;height:18px;position:absolute;top:3px;left:3px;bottom:3px;background:#f6f6f7;border-radius:10px;transition:all .15s ease;box-shadow:0 3px 1px 0 rgba(0,0,0,.05),0 2px 2px 0 rgba(0,0,0,.1),0 3px 3px 0 rgba(0,0,0,.05)}.bd-switch-item .bd-switch-wrapper .bd-switch.checked{background:#7289da}.bd-switch-item .bd-switch-wrapper .bd-switch.checked:before{transform:translateX(20px)}#bd-settingspane-container .scroller-wrap{height:100%}#bd-settingspane-container .scroller-wrap .scroller{display:flex}.bd-reload{cursor:pointer;vertical-align:top;fill:#dcddde}.bd-reload:hover{fill:#fff}.bd-reload-header{margin-left:5px}.bd-reload-card{margin-right:5px}.bd-controls{display:flex}.bd-addon-list{user-select:text}.bd-addon-list .bd-addon-card{max-height:175px;margin-bottom:20px;padding:5px 8px;border:1px solid transparent;border-radius:5px;overflow:hidden}.theme-dark .bd-addon-list .bd-addon-card{background-color:rgba(32,34,37,.6);color:#f6f6f7;border-color:#202225}.theme-light .bd-addon-list .bd-addon-card{background-color:#f8f9f9;color:#4f545c;border-color:#dcddde}.bd-addon-list .bd-addon-card.settings-open{max-height:800px;overflow-y:auto}.bd-addon-list .bd-addon-header{font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:space-between;padding-bottom:5px;border-bottom:1px solid transparent;overflow:hidden}.theme-dark .bd-addon-list .bd-addon-header{color:#f6f6f7;border-bottom-color:rgba(114,118,125,.3)}.theme-light .bd-addon-list .bd-addon-header{color:#4f545c;border-bottom-color:rgba(185,187,190,.3)}.bd-addon-list .bd-description{word-break:break-word;max-height:100px;margin:5px 0;padding:5px 0;overflow-y:auto}.theme-dark .bd-addon-list .bd-description{color:#b9bbbe}.theme-light .bd-addon-list .bd-description{color:#72767d}.bd-addon-list .scroller::-webkit-scrollbar-track-piece,.bd-addon-list .scroller::-webkit-scrollbar-thumb{border-radius:0!important;border-color:transparent}.bd-addon-list .bd-footer{font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:space-between;padding-top:5px;border-top:1px solid transparent;overflow:hidden}.theme-dark .bd-addon-list .bd-footer{border-top-color:rgba(114,118,125,.3)}.theme-light .bd-addon-list .bd-footer{border-top-color:rgba(185,187,190,.3)}.bd-addon-list .bd-footer button{padding:3px 16px;transition:opacity 250ms ease}.bd-addon-list .bd-footer button:disabled{opacity:.4}.bd-addon-list .bd-footer a{color:#3e82e5}.bd-addon-list .bd-footer a:hover{text-decoration:underline}@keyframes bd-backdrop{to{opacity:.85}}@keyframes bd-modal-wrapper{to{transform:scale(1);opacity:1}}@keyframes bd-backdrop-closing{to{opacity:0}}@keyframes bd-modal-wrapper-closing{to{transform:scale(.7);opacity:0}}.bd-backdrop{animation:bd-backdrop 250ms ease;animation-fill-mode:forwards;opacity:0;background-color:#000;transform:translateZ(0)}.bd-modal-wrapper.closing .bd-backdrop{animation:bd-backdrop-closing 200ms linear;animation-fill-mode:forwards;animation-delay:50ms;opacity:.85}.bd-modal-wrapper.closing .bd-modal{animation:bd-modal-wrapper-closing 250ms cubic-bezier(.19,1,.22,1);animation-fill-mode:forwards;opacity:1;transform:scale(1)}.bd-modal-wrapper .bd-modal{animation:bd-modal-wrapper 250ms cubic-bezier(.175,.885,.32,1.275);animation-fill-mode:forwards;transform:scale(.7);transform-origin:50% 50%;display:flex;align-items:center;box-sizing:border-box;contain:content;justify-content:center;top:0;left:0;bottom:0;right:0;opacity:0;pointer-events:none;position:absolute;z-index:1000}.bd-modal-wrapper .bd-modal-inner{display:flex;contain:layout;flex-direction:column;pointer-events:auto;border:1px solid rgba(28,36,43,.6);border-radius:5px;box-shadow:0 2px 10px 0 rgba(0,0,0,.2);overflow:hidden;max-height:660px;min-height:200px;width:440px;user-select:text}.bd-modal-wrapper .bd-content-modal .bd-modal-inner{height:500px;width:700px}.bd-modal-wrapper .header{background-color:#35393e;box-shadow:0 2px 3px 0 rgba(0,0,0,.2);padding:12px 20px;z-index:1;color:#fff;font-size:16px;font-weight:700;line-height:19px}.bd-modal-wrapper .bd-modal-body{background-color:#36393f;color:#fff;flex-direction:row;overflow:hidden;display:flex;flex-direction:column;flex:1;contain:layout;position:relative}.bd-modal-wrapper .scroller{padding:10px}.bd-modal-wrapper .bd-content-modal .bd-modal-body{padding:0}.bd-modal-wrapper .scroller{overflow-y:auto}.bd-modal-wrapper .footer{display:flex;justify-content:flex-end;padding:10px 20px}.bd-modal-wrapper .footer button{min-height:32px;min-width:60px;align-items:center;display:flex;font-size:14px;font-weight:500;justify-content:center;line-height:16px;padding:2px 16px;user-select:none}.bd-modal-wrapper .tab-bar-container{align-items:center;border-bottom:0;background:rgba(0,0,0,.2);box-shadow:0 2px 3px 0 rgba(0,0,0,.1);display:flex;flex-direction:row;justify-content:space-between;margin-bottom:15px}.bd-modal-wrapper .tab-bar.TOP{margin:0;border:0;display:flex;flex-direction:row;justify-content:space-between;align-items:center}.bd-modal-wrapper .tab-bar-container .tab-bar-item{margin:0 15px;padding:15px 0;color:#fff!important;opacity:.5;transition:opacity 200ms ease;border-bottom:2px solid transparent}.bd-modal-wrapper .tab-bar-container .tab-bar-item:hover{border-color:#fff;cursor:pointer}.bd-modal-wrapper .tab-bar-container .tab-bar-item.selected{opacity:1;border-color:#fff}.bd-modal-wrapper .tab-bar.TOP .tab-bar-item+.tab-bar-item{margin:0}.bd-modal-wrapper .table-header{display:flex;justify-content:space-between;color:#fff;font-weight:700;padding-bottom:10px;margin:3px 15px 0 15px;border-bottom:1px solid #fff;font-size:14px}.bd-modal-wrapper .table-column{width:25%}.bd-modal-wrapper .table-column.column-error{width:50%}.bd-modal-wrapper .table-column{word-wrap:break-word}.bd-modal-wrapper .errors{display:flex;flex-direction:column;padding:0;font-size:14px;padding:0 5px}.bd-modal-wrapper .error{display:flex;color:#fff;border-bottom:1px solid rgba(255,255,255,.25);padding:15px 0;align-items:center}.bd-modal-wrapper .error-link{color:#3e82e5;font-weight:500}.bd-modal-wrapper .bd-content-modal .scroller{padding-top:0}.bd-toasts{position:fixed;display:flex;top:0;flex-direction:column;align-items:center;justify-content:flex-end;pointer-events:none;z-index:4000}@keyframes bd-toast-up{0%{transform:translateY(0);opacity:0}}.bd-toast{animation:bd-toast-up 300ms ease;transform:translateY(-10px);background:#36393f;padding:10px;border-radius:5px;box-shadow:0 0 0 1px rgba(32,34,37,.6),0 2px 10px 0 rgba(0,0,0,.2);font-weight:500;color:#fff;user-select:text;font-size:14px;opacity:1;margin-top:10px;pointer-events:none;user-select:none}@keyframes bd-toast-down{to{transform:translateY(0);opacity:0}}.bd-toast.closing{animation:bd-toast-down 200ms ease;animation-fill-mode:forwards;opacity:1;transform:translateY(-10px)}.bd-toast.icon{padding-left:30px;background-size:20px 20px;background-repeat:no-repeat;background-position:6px 50%}.bd-toast.toast-info{background-color:#4a90e2}.bd-toast.toast-info.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtNmgydjZ6bTAtOGgtMlY3aDJ2MnoiLz48L3N2Zz4=)}.bd-toast.toast-success{background-color:#43b581}.bd-toast.toast-success.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTIgMTVsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiLz48L3N2Zz4=)}.bd-toast.toast-danger,.bd-toast.toast-error{background-color:#f04747}.bd-toast.toast-danger.icon,.bd-toast.toast-error.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiIvPiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PC9zdmc+)}.bd-toast.toast-warning,.bd-toast.toast-warn{background-color:#ffa600;color:#fff}.bd-toast.toast-warning.icon,.bd-toast.toast-warn.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiIvPjwvc3ZnPg==)}.bd-minimal .divider-32i8lo{opacity:0}.bd-minimal .large-3ChYtB{max-width:20px;max-height:20px;background-size:100%;margin-right:2px;margin-top:0;border-radius:0}.bd-minimal .content-3dzVd8{border-left:2px solid #ebebeb;padding-left:2px}.bd-minimal .theme-dark .content-3dzVd8{border-left:2px solid #303030}.bd-minimal .username-_4ZSMR{font-size:small}.bd-minimal .container-1YxwTf{padding:5px}.bd-minimal .embed-IeVjo6{padding:2px}.bd-minimal .membersWrap-2h-GB4{min-width:0}.bd-minimal .members-1998pB .small-5Os1Bb{max-width:15px;max-height:15px;background-size:15px 15px}.bd-minimal .members-1998pB .small-5Os1Bb .status-oxiHuE{height:5px;width:5px}.bd-minimal .members-1998pB .member-3W1lQa{padding:5px}.bd-minimal .members-1998pB .memberInner-2CPc3V{transform:scale(.9)}.bd-minimal .members-1998pB .membersGroup-v9BXpm{margin-top:3px;transform:scale(.9)}.bd-minimal.bd-minimal-chan .channels-Ie2l6A{display:none}.bd-minimal .channels-Ie2l6A header span{font-size:12px}.bd-minimal .channels-Ie2l6A{width:160px}.bd-minimal .containerDefault-3GGEv_{transform:scale(.9)}.bd-minimal .content-3at_AU{transform:scale(.9)}.bd-minimal .icon-1_QxNX{width:14px;height:14px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .listItem-2P_4kh{width:20px;height:20px;background-size:100%;font-size:15px;line-height:20px;margin:0 12.5px 8px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .wrapper-25eVIn a,.bd-minimal .listItem-2P_4kh .wrapper-25eVIn .icon-27yU2q{width:20px;height:20px;background-size:100%;font-size:15px;line-height:20px}.bd-minimal .listItem-2P_4kh .wrapper-25eVIn{width:20px;height:20px;background-size:100%;font-size:15px;line-height:20px}.bd-minimal .listItem-2P_4kh svg,.bd-minimal .listItem-2P_4kh foreignObject[mask]{mask:none}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .homeIcon-tEMBK1{width:10px;height:10px;background-size:100%;font-size:15px;line-height:20px}.bd-minimal .circleIconButton-jET_ig{height:20px;width:20px}.bd-minimal .circleIconButton-jET_ig svg{height:14px;width:14px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .friendsOnline-_wi_fM{margin-left:-15px;font-size:7px}.bd-minimal #bd-pub-li{height:16px}.bd-minimal #bd-pub-button{font-size:8px;line-height:16px;height:16px}.bd-minimal .wrapper-1Rf91z,.bd-minimal .wrapper-1Rf91z .scrollerWrap-1IAIlv,.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG{width:45px}.bd-minimal .wrapper-1Rf91z .guildSeparator-3s64Iy{margin-left:-15px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .listItem-2P_4kh .wrapper-sa6paO{height:20px;margin-top:0;margin-left:-12.5px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .iconBadge-2wi9r4{width:12px;height:12px;background-size:12px}.bd-minimal .container-2Thooq .avatarSmall-3ACRaI{width:15px;height:15px;background-size:15px 15px}.bd-minimal .container-2Thooq .avatarSmall-3ACRaI .status-oxiHuE{height:5px;width:5px}.bd-minimal .container-2Thooq .accountDetails-3k9g4n{transform:scale(.8)}.bd-minimal .container-2Thooq .button-2b6hmh{height:14px;width:14px;background-size:14px 14px;margin-left:3px}.bd-minimal .container-2Thooq .button-2b6hmh svg{height:14px;width:14px}.bd-dark #bd-qem-favourite-container,.bd-dark #bd-qem-twitch-container{background-color:#353535}.bd-dark #bd-qem{border-bottom:1px solid #464646!important;background:#353535}.bd-dark #bd-qem button{background:#353535;border-left:1px solid #242424;box-shadow:#424242 1px 0 0 0;color:#fff}.bd-dark #bd-qem button.active{background-color:#292929}.bd-dark #bd-qem button:hover{background-color:#303030}.bd-dark #bd-qem-favourite-container,.bd-dark #bd-qem-twitch-container{background-color:#353535}.bd-dark .emojiPicker-3m1S-j{background-color:#353535}.bd-dark .emojiPicker-3m1S-j .category-2U57w6{background-color:#353535}.bd-dark .emojiPicker-3m1S-j .header-1nkwgG .searchBar-2pWH0_{background-color:#2b2b2b}.bd-dark .emojiPicker-3m1S-j .searchBar-2pWH0_ input{color:#fff}.bd-dark .emojiPicker-3m1S-j .searchBar-2pWH0_ input::-webkit-input-placeholder{color:#fff}.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7 .emojiItem-109bjA.selected-39BZ4S{background-color:rgba(123,123,123,.37)}.bd-dark .emojiPicker-3m1S-j .dimmer-3iH-5D.visible-3k45bQ{background-color:rgba(62,62,62,.65)}.bd-dark .emojiPicker-3m1S-j .diversitySelector-tmmMv0 .popout-2nUePc{background:#353535;border-color:#202020}.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar,.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar-track,.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar-track-piece,.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar,.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar-track,.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar-track-piece,.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar,.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar-track,.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar-track-piece{background-color:#303030!important;border-color:#303030!important}.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar-thumb,.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar-thumb,.bd-dark .emojiPicker-3g68GS .scroller-3vODG7::-webkit-scrollbar-thumb{border-color:#202020!important;background-color:#202020!important}.bd-dark .theme-light .slide-2pHaq5{background:#36393f}.bd-dark .theme-dark .action-1lSjCi,.bd-dark .theme-light .action-1lSjCi{background:#2f3136}.bd-dark .theme-dark .or-3THJsp,.bd-dark .theme-light .or-3THJsp{background:#2f3136;order:2;height:56px;width:56px;top:103px;line-height:56px;left:calc(50% - 29px);border-radius:50%;border:2px solid #484b52}.bd-dark .create-3jownz{order:1}.bd-dark .join-33Tr-7{order:3}.bd-dark .theme-dark .actionIcon-2IISM_,.bd-dark .theme-light .actionIcon-2IISM_{filter:grayscale(100%) brightness(60%)}.bd-dark .theme-light .footer-2yfCgX{background:#2f3136}.bd-dark .regionSelectModal-12e-57{background:#36393f}.bd-dark .regionSelectModal-12e-57 .regionSelectModalOption-2DSIZ3{background:#2f3136;border:2px solid #484b52}.bd-dark~div #ace_settingsmenu{color:#f6f6f7;background:#36393f;box-shadow:0 0 0 1px rgba(32,34,37,.6),0 2px 10px 0 rgba(0,0,0,.2)}.bd-dark~div #ace_settingsmenu select,.bd-dark~div #ace_settingsmenu input[type=text]{color:#f6f6f7;background:#2f3136;border:1px solid #484b52}.bd-dark~div .ace_closeButton::before{color:#f6f6f7} \ No newline at end of file +.bd-loaderv2{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+IDwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyBoZWlnaHQ9IjEwMCUiIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iMTAwJSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjAwMCAyMDAwIj4gICAgPG1ldGFkYXRhIC8+ICAgIDxkZWZzPiAgICAgICAgPGZpbHRlciBpZD0ic2hhZG93MSI+ICAgICAgICA8ZmVEcm9wU2hhZG93IGR4PSIyMCIgZHk9IjAiIHN0ZERldmlhdGlvbj0iMjAiIGZsb29kLWNvbG9yPSJyZ2JhKDAsMCwwLDAuMzUpIi8+ICAgICAgICA8L2ZpbHRlcj4gICAgICAgIDxmaWx0ZXIgaWQ9InNoYWRvdzIiPiAgICAgICAgPGZlRHJvcFNoYWRvdyBkeD0iMTUiIGR5PSIwIiBzdGREZXZpYXRpb249IjIwIiBmbG9vZC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwLjE1KSIvPiAgICAgICAgPC9maWx0ZXI+ICAgICAgICA8ZmlsdGVyIGlkPSJzaGFkb3czIj4gICAgICAgIDxmZURyb3BTaGFkb3cgZHg9IjEwIiBkeT0iMCIgc3RkRGV2aWF0aW9uPSIyMCIgZmxvb2QtY29sb3I9InJnYmEoMCwwLDAsMC4zNSkiLz4gICAgICAgIDwvZmlsdGVyPiAgICA8L2RlZnM+ICAgIDxnPiAgICAgICAgPHBhdGggc3R5bGU9ImZpbHRlcjogdXJsKCNzaGFkb3czKSIgZD0iTTExOTUuNDQrMTM1LjQ0MkwxMTk1LjQ0KzEzNS40NDJMOTk3LjYrMTM2LjQ0MkMxMDI0LjIrMTQ5Ljc0MisxMTcwLjM0KzE2My41NDIrMTE5My42NCsxNzkuNzQyQzEyNjQuMzQrMjI4Ljg0MisxMzE5Ljc0KzI5MS4yNDIrMTM1OC4yNCszNjUuMDQyQzEzOTguMTQrNDQxLjY0MisxNDE5Ljc0KzUzMC42NDIrMTQyMi41NCs2MjkuNjQyTDE0MjIuNTQrNjMwLjg0MkwxNDIyLjU0KzYzMi4wNDJDMTQyMi41NCs3NzMuMTQyKzE0MjIuNTQrMTIyOC4xNCsxNDIyLjU0KzEzNjkuMTRMMTQyMi41NCsxMzcwLjM0TDE0MjIuNTQrMTM3MS41NEMxNDE5Ljg0KzE0NzAuNTQrMTM5OC4yNCsxNTU5LjU0KzEzNTguMjQrMTYzNi4xNEMxMzE5Ljc0KzE3MDkuOTQrMTI2NC40NCsxNzcyLjM0KzExOTMuNjQrMTgyMS40NEMxMTcxLjA0KzE4MzcuMTQrMTAyNS43KzE4NTAuNTQrMTAwMCsxODYzLjU0TDExOTMuNTQrMTg2NC41NEMxNTM5Ljc0KzE4NjYuNDQrMTg2NC41NCsxNjkzLjM0KzE4NjQuNTQrMTI5Ni42NEwxODY0LjU0KzcxNi45NDJDMTg2Ni40NCszMTIuNDQyKzE1NDEuNjQrMTM1LjQ0MisxMTk1LjQ0KzEzNS40NDJaIiBmaWxsPSIjMTcxNzE3IiBvcGFjaXR5PSIxIi8+ICAgICAgICA8cGF0aCBzdHlsZT0iZmlsdGVyOiB1cmwoI3NoYWRvdzIpIiBkPSJNMTY5NS41NCs2MzEuNDQyQzE2ODUuODQrMjc4LjA0MisxNDA5LjM0KzEzNS40NDIrMTA1Mi45NCsxMzUuNDQyTDM2MS43NCsxMzYuNDQyTDgwMy43NCs0OTAuNDQyTDEwNjAuNzQrNDkwLjQ0MkMxMzM1LjI0KzQ5MC40NDIrMTMzNS4yNCs4MzUuMzQyKzEwNjAuNzQrODM1LjM0MkwxMDYwLjc0KzExNjQuODRDMTE1MC4yMisxMTY0Ljg0KzEyMTAuNTMrMTIwMS40OCsxMjQxLjY4KzEyNTAuODdDMTMwNi4wNysxMzUzKzEyNDUuNzYrMTUwOS42NCsxMDYwLjc0KzE1MDkuNjRMMzYxLjc0KzE4NjMuNTRMMTA1Mi45NCsxODY0LjU0QzE0MDkuMjQrMTg2NC41NCsxNjg1Ljc0KzE3MjEuOTQrMTY5NS41NCsxMzY4LjU0QzE2OTUuNTQrMTIwNS45NCsxNjUxLjA0KzEwODQuNDQrMTU3Mi42NCs5OTkuOTQyQzE2NTEuMDQrOTE1LjU0MisxNjk1LjU0Kzc5NC4wNDIrMTY5NS41NCs2MzEuNDQyWiIgZmlsbD0iIzNFODJFNSIgb3BhY2l0eT0iMSIvPiAgICAgICAgPHBhdGggc3R5bGU9ImZpbHRlcjogdXJsKCNzaGFkb3cxKSIgZD0iTTE0NjkuMjUrNjMxLjQ0MkMxNDU5LjU1KzI3OC4wNDIrMTE4My4wNSsxMzUuNDQyKzgyNi42NSsxMzUuNDQyTDEzNS40NSsxMzUuNDQyTDEzNS40NSsxMDA0QzEzNS40NSsxMDA0KzEzNS40MjcrMTI1NS4yMSszNTUuNjI2KzEyNTUuMjFDNTc1LjgyNSsxMjU1LjIxKzU3NS44NDgrMTAwNCs1NzUuODQ4KzEwMDRMNTc3LjQ1KzQ5MC40NDJMODM0LjQ1KzQ5MC40NDJDMTEwOC45NSs0OTAuNDQyKzExMDguOTUrODM1LjM0Mis4MzQuNDUrODM1LjM0Mkw2NjQuNjUrODM1LjM0Mkw2NjQuNjUrMTE2NC44NEw4MzQuNDUrMTE2NC44NEM5MjMuOTMyKzExNjQuODQrOTg0LjI0NCsxMjAxLjQ4KzEwMTUuMzkrMTI1MC44N0MxMDc5Ljc4KzEzNTMrMTAxOS40NysxNTA5LjY0KzgzNC40NSsxNTA5LjY0TDEzNS40NSsxNTA5LjY0TDEzNS40NSsxODY0LjU0TDgyNi42NSsxODY0LjU0QzExODIuOTUrMTg2NC41NCsxNDU5LjQ1KzE3MjEuOTQrMTQ2OS4yNSsxMzY4LjU0QzE0NjkuMjUrMTIwNS45NCsxNDI0Ljc1KzEwODQuNDQrMTM0Ni4zNSs5OTkuOTQyQzE0MjQuNzUrOTE1LjU0MisxNDY5LjI1Kzc5NC4wNDIrMTQ2OS4yNSs2MzEuNDQyWiIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMSIvPiAgICA8L2c+PC9zdmc+)}.bd-loaderv2{position:fixed;bottom:5px;right:5px;z-index:2147483647;display:block;width:20px;height:20px;background-size:100% 100%;animation:bd-loaderv2-animation 1.5s ease-in-out infinite}@keyframes bd-loaderv2-animation{0%{opacity:.05}50%{opacity:.6}to{opacity:.05}}.bd-settings-group.collapsible .bd-settings-title{display:flex;justify-content:space-between}.bd-settings-group.collapsible .bd-settings-title::after{content:"";background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FscXVlXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSItOTUwIDUzMiAxOCAxOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAtOTUwIDUzMiAxOCAxODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6bm9uZTt9DQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTS05MzIsNTMydjE4aC0xOHYtMThILTkzMnoiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QxIiBwb2ludHM9Ii05MzYuNiw1MzguOCAtOTQxLDU0My4yIC05NDUuNCw1MzguOCAiLz4NCjwvc3ZnPg0K);height:20px;width:20px;display:inline-block;vertical-align:bottom;transition:transform .3s ease;transform:rotate(0)}.bd-settings-group.collapsed .bd-settings-title::after{transition:transform .3s ease;transform:rotate(90deg)}.bd-settings-container{height:auto;overflow:hidden;transition:height 300ms cubic-bezier(.47,0,.745,.715)}.bd-settings-group.collapsed .bd-settings-container{height:0}.bd-settings-group~.bd-settings-group .bd-settings-title{margin-top:30px;transition:margin-top 300ms ease}.bd-settings-group.collapsed+.bd-settings-group .bd-settings-title{margin-top:0}.bd-settings-group.collapsible .bd-settings-title{order:1;align-items:center}.bd-settings-group.collapsible .bd-settings-title::before{content:"";background-color:rgba(114,118,125,.3);height:2px;order:2;flex:1;margin:0 10px 0 15px}.bd-settings-group.collapsible .bd-settings-title::after{order:3}.bd-settings-title.bd-settings-group-title{margin-bottom:10px}.checkbox-item{display:flex}.checkbox-item .checkbox-label{margin-right:8px}#bd-connection{margin-left:10px}.bd-button{background-color:#3e82e5;color:#fff;border-radius:3px;padding:2px 6px}.bd-button:hover{background-color:#3875ce}.bd-button:active{background-color:#3268b7}.bd-footnote{color:#b9bbbe;font-size:11px}.bd-button-next,.bd-button-reconnect{margin:5px 10px 10px 0;width:100%;min-height:20px}.bd-server-card{position:relative;border-width:1px;border-style:solid;border-radius:5px;background:rgba(32,34,37,.6);border-color:#202225;margin-bottom:8px}.bd-server-header,.bd-server-footer{display:flex;color:#b9bbbe}.bd-server-header{text-transform:uppercase;letter-spacing:.5px}.bd-server-card .bd-button{margin-top:4px}.bd-button.bd-button-success{background-color:#3ac15c}.bd-button.bd-button-success:hover{background-color:#34ae53}.bd-button.bd-button-success:active{background-color:#2e9a4a}#bbd-version{font-size:12px;font-weight:600;color:#72767d;padding:2px 10px}.settings-open .bd-close{cursor:pointer;float:right}@keyframes open-window{0%{transform:scale(.9)}to{transform:none}}.floating-window{animation:open-window 200ms ease;min-width:200px;min-height:300px;box-shadow:0 2px 10px 0 rgba(0,0,0,.2);display:flex;flex-direction:column;-webkit-app-region:no-drag;position:fixed;z-index:1001}.floating-window.modal-open{z-index:999}.floating-window.resizable{overflow:auto;resize:both;padding-bottom:10px;background:#202225}.floating-window-titlebar{width:100%;display:flex;justify-content:space-between;align-items:center;background:#202225;color:#fff;border-bottom:1px solid #272822}.floating-window-content{background:#2f3129;color:#fff;flex:1}.floating-window-titlebar .title{flex:1;text-align:center;padding:2px 0}.floating-window-buttons{display:flex}.floating-window-buttons .button{cursor:pointer;padding:0 2px}.floating-window-buttons .button svg{fill:#dcddde;margin-top:1.5px}.floating-window-buttons .button:hover svg{fill:#fff}.floating-window-buttons .button:hover{background-color:#36393f}.floating-window-buttons .close-button:hover{background-color:#f04747}.floating-window-buttons .close-button:hover svg path.fill{fill:#fff}.floating-window-content #bd-editor-panel{display:flex;flex-direction:column;flex:1}.floating-window-content{display:flex;flex-direction:column}.floating-window .editor-wrapper{flex:1}.floating-window .ace_editor{height:auto;flex:1}.floating-window #bd-editor-controls{height:auto;background:#202225;border:0;box-shadow:0 1px 0 0 #2f3129 inset}.bd-addon-controls{display:flex;align-items:center;justify-content:space-between}.bd-addon-controls .bd-search{font-size:13px;margin:0;width:200px}.bd-addon-dropdowns{display:flex}.bd-select-wrapper+.bd-select-wrapper{margin-left:10px}.bd-select-wrapper{color:#f6f6f7;font-size:13px;display:flex;align-items:center}.bd-select-wrapper label{opacity:.3;margin-right:5px}.bd-select{position:relative;cursor:pointer;color:#f6f6f7;font-size:13px;display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,.1);border:1px solid rgba(0,0,0,.3);border-radius:3px;padding:5px 5px 5px 0}.bd-select.bd-select-transparent{background:0 0;border:0;padding:0}.bd-select-value{padding-left:12px}.bd-select-arrow{margin-left:10px}.bd-select .bd-select-options{position:absolute;background:#2f3136;border-radius:0 0 3px 3px;max-height:300px;min-width:calc(100% + 2px);overflow-y:auto;box-shadow:rgba(0,0,0,.3) 0 1px 5px 0;border:1px solid rgba(0,0,0,.3);border-top:0;margin-top:-1px;margin-left:-1px;z-index:2;top:100%}.bd-select-transparent .bd-select-options{border:1px solid rgba(0,0,0,.3);margin-top:3px;border-radius:3px}.bd-select .bd-select-option{padding:8px 12px;cursor:pointer;white-space:pre}.bd-select .bd-select-option:hover,.bd-select .bd-select-option.selected{background:#26272b}.bd-search-wrapper{padding:3px;border-radius:3px;outline:0;border:0;background-color:#202225;color:#fff;display:flex;align-items:center}.bd-search{padding:2px 3px;background:0 0;border:0;color:#fff;flex:1}.bd-search-wrapper>svg{margin-right:2px}.bd-setting-item .bd-select{min-width:200px}.bd-settings-group.expanded .bd-settings-container:not(.animating){overflow:visible}.bd-switch{background-color:#72767d;border-radius:14px;width:42px;height:24px;opacity:1;overflow:hidden;user-select:none;position:relative;display:block;flex:0 0 auto;transition:background .15s ease-in-out,box-shadow .15s ease-in-out,border .15s ease-in-out,opacity .15s ease-in-out;margin-left:10px;box-shadow:inset 0 1px 1px rgba(0,0,0,.15)}.bd-switch::before{content:"";display:block;position:absolute;top:0;left:0;bottom:0;right:0;z-index:0;opacity:0;background-color:#000}.bd-switch::after{content:"";display:block;position:absolute;background-color:#fff;z-index:1;width:18px;margin:3px;border-radius:9px;height:18px;left:0;transition:transform .15s ease-in-out,width .1s ease-in-out,left .1s ease-in-out;box-shadow:0 2px 4px rgba(0,0,0,.3)}.bd-switch .bd-checkbox{position:absolute;width:100%;height:100%;opacity:0;padding:0;margin:0;z-index:2;cursor:pointer}.bd-switch-checked{background-color:#3e82e5}.bd-switch-checked::after{transform:translate3d(18px,0,0)}.bd-switch-disabled{opacity:.3;cursor:not-allowed}.bd-setting-item{display:flex;flex-direction:column;margin-bottom:20px}.bd-setting-header{display:flex;justify-content:space-between;align-items:center}.bd-setting-header label{font-weight:500;cursor:pointer;overflow:hidden;word-wrap:break-word;font-size:16px;line-height:24px;color:#f6f6f7}.bd-setting-note{color:#72767d;margin-top:4px;font-size:14px;line-height:20px;font-weight:500}.bd-setting-divider{width:100%;height:1px;margin-top:20px;background-color:rgba(114,118,125,.3)}.bd-controls+.bd-addon-list{margin-top:10px}.bd-addon-button{cursor:pointer}.bd-addon-button+.bd-addon-button{margin-left:5px}#emote-container{padding:10px}.emote-container{display:inline-block;padding:2px;border-radius:5px;width:30px;height:30px;position:relative}.emote-icon{max-width:100%;max-height:100%;position:absolute;margin:auto;top:0;right:0;bottom:0;left:0;cursor:pointer}.emote.stop-animation{animation:none!important}.emote-container:hover{background:rgba(123,123,123,.37)}.emoteflip,.emotespinflip{transform:scaleX(-1)}.emotespin{animation:1s emote-spin infinite linear}.emote1spin{animation:1s emote-spin-reverse infinite linear}.emotespin2{animation:.5s emote-spin infinite linear}.emote2spin{animation:.5s emote-spin-reverse infinite linear}.emotespin3{animation:.2s emote-spin infinite linear}.emote3spin{animation:.2s emote-spin-reverse infinite linear}.emotepulse{animation:1s emote-pulse infinite linear}.emotetr{transform:translateX(-3px)}.emotebl{transform:translateY(-3px)}.emotebr{transform:translate(-3px,-3px)}.emoteshake{animation:1s emote-shake infinite linear}.emoteflap{transform:scaleY(-1)!important}.emoteshake2{animation:emote-shake2 .3s linear infinite}.emoteshake3{animation:emote-shake3 .1s linear infinite}@keyframes emote-shake2{25%{transform:translate(-1px,-1px)}50%{transform:translate(-1px,1px)}75%{transform:translate(1px,1px)}75%{transform:translate(1px,-1px)}}@keyframes emote-shake3{25%{transform:translate(-1px,-1px)}50%{transform:translate(-1px,1px)}75%{transform:translate(1px,1px)}75%{transform:translate(1px,-1px)}}@keyframes emote-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes emote-spin-reverse{0%{transform:rotate(0deg)}to{transform:rotate(-360deg)}}@keyframes emote-pulse{0%{-webkit-transform:scale(1,1)}50%{-webkit-transform:scale(1.2,1.2)}to{-webkit-transform:scale(1,1)}}@keyframes emote-shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}#removemenu{width:auto;background:#505050;position:absolute;z-index:999999;display:none;box-shadow:0 0 2px #000;padding:2px;left:25px;display:block!important;cursor:pointer;color:#fff;position:fixed}#removemenu ul a{text-decoration:none;color:#fff;padding:3px}.emotewrapper{position:relative;display:inline-flex;object-fit:contain;margin:-.1em .05em -.2em .1em;vertical-align:top}.emotewrapper.jumboable{margin-bottom:0;margin-top:.2em;vertical-align:-.3em}.emote{height:1.45em}.emote.jumboable{height:2rem}.emotewrapper:hover .fav{display:block}.fav{display:none;position:absolute;width:15px;height:15px;right:-7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAzFBMVEUAAABQUFBMTExLS0tNTU1MTExNTU1NTU1MTExMTExNTU1LS0tEREBEREBEREBEREBJSUhLS0tLS0tEREBNTU1NTU1NTU1EREArKyhNTU1NTU0AAABMTExKSklMTExNTU1NTU1NTU1KSkpMTExKSkhNTU1KSkpISEZNTU1LS0tAQDxOTk5KSkpLS0tNTU1MTExMTEx/f39MTExMTExLS0pLS0tMTExNTU1NTU1LS0pNTU1NTU1NTU1NTU1NTU1NTUxNTU1NTU1NTUxMTEzB8C/5AAAAOnRSTlMAI8X96oWAgYSF68QBAg0PMCb9BIuLgQUD4N0Bh0mKhZSOQ4gcrKscaW8QRE6fmJyjAshASceG7cIpqQOxTQAAALVJREFUGFddx6FOA0EYAOGZvd07Qm6vVCAAgUUgQEDfX/YZMAigqaFN7iC5tsmPqGPUN/AvUVeoEbGOCElJz08Uzeixqu4AqomVVSNngOVjTqDGZSl3UFtPGV2ot2zaq96YM9p5Ddzcf/nTTAlj+/sNtNu8OcwkIsbPBtrUfMQeEhGQmHbmGIFMwLPzu6UMIwBNgToshgq8Nr2ki+Oy7ebDHp70LRPWB6OZgfWLWei7fJonOOsPCGA9kVlssOoAAAAASUVORK5CYII=);border:0;background-size:100% 100%;background-repeat:no-repeat;background-color:#303030;border-radius:5px;top:-7px;cursor:pointer}.fav.active{background-color:#ff0}.emojiPicker-3m1S-j{box-shadow:none;border-top:none;border-radius:0 0 5px 5px}#bd-qem{border-radius:5px 5px 0 0;background:#fff;border-bottom:1px solid rgba(0,0,0,.1)!important;height:30px;display:flex;flex-direction:row;padding-right:1px!important}#bd-qem button{border-left:1px solid #efefef;background:0 0;box-shadow:#cecece 1px 0 0 0;flex-grow:1}#bd-qem button:hover{background:#ececec}#bd-qem-twitch{border-radius:5px 0 0 0;order:2}#bd-qem-emojis{border-radius:0 5px 0 0;order:3}#bd-qem-favourite{order:3}#bd-qem button.active{background-color:#e2e2e2}#bd-qem-twitch-container,#bd-qem-favourite-container{width:346px;height:329px;background-color:#fff;border-radius:0 0 5px 5px}#bd-qem-twitch-container .scroller-wrap,#bd-qem-favourite-container .scroller-wrap{height:100%}.emote-menu-inner{padding:5px 0 0 15px}.bd-qme-hidden #bd-qem-emojis{display:none}#bd-pub-li{height:20px;margin-bottom:10px;overflow:hidden}#bd-pub-button{border-radius:4px;background-color:#2f3136;color:#b9bbbe;text-align:center;font-size:12px;line-height:20px;height:20px}.bd-server-card .bd-server-tags{flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:0;line-height:24px;font-size:12px;color:#b9bbbe;font-weight:700;margin-right:10px}.bd-server-card.bd-server-card-pinned{margin-bottom:15px}.bd-server-card.bd-server-card-pinned:after{background:#3a71c1;content:"";height:3px;width:100%;display:block;margin-top:7px;position:absolute;top:100%}.bd-server-description-container{color:#b9bbbe;min-height:65px;max-height:65px;border-top:1px solid #3f4146;border-bottom:1px solid #3f4146;padding-top:5px;font-size:13px}.bd-server-header{justify-content:space-between;font-weight:600}.bd-server-card{display:flex}.bd-server-content{padding:5px 10px;flex:1}.bd-server-image{min-width:115px;min-height:115px;max-width:115px;max-height:115px}.bd-server-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:15px;max-width:330px;flex:1 1 50%}.bd-layer{-ms-flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;flex-direction:column;left:0;position:absolute;right:0;top:0}#pubslayer button{background:#7289da;color:#fff;font-size:14px;font-weight:500;line-height:16px;padding:2px 16px;border:0;border-radius:3px;transition:background-color .17s ease}#pubslayer button:hover{background-color:#677bc4}#pubslayer input{color:#f6f6f7;background-color:rgba(0,0,0,.1);border-color:rgba(0,0,0,.3);padding:10px;height:30px;border-width:1px;border-style:solid;border-radius:3px;outline:0;transition:background-color .15s ease,border .15s ease}#bd-editor-panel{display:flex;flex-direction:column}#bd-editor-controls button{margin:0 5px 0 0;background:0 0;color:#fff;height:26px;font-weight:600;border-radius:3px;display:flex;align-items:center}#bd-editor-controls button:hover{background:rgba(255,255,255,.05)}#bd-editor-controls button svg{fill:#fff}#bd-editor-controls button:last-of-type{margin-right:0}#bd-editor-controls{display:flex;align-items:center;justify-content:space-between;background:#272822;color:#fff;border:0;box-shadow:0 1px 0 0 #2f3129 inset;padding:5px}.editor-wrapper{display:flex}.ace_editor{line-height:normal;font-family:Consolas,monospace;box-sizing:border-box;height:calc(100vh - 250px);font-size:14px;width:100%}.bd-monokai .editor .ace_gutter{background:#2f3136}.bd-monokai .ace_editor{background:#292b2f}.bd-monokai #bd-editor-controls{background:#202225}.theme-light #bd-editor-controls{background:#e8e8e8;border:1px solid #fff;border-top:1px solid #adadad;box-shadow:inset 0 1px 0 0 #fff}.controls-section{display:flex;align-items:center}.controls-section .checkbox-inner{width:14px;height:14px}.controls-section .checkbox-inner .checkbox:checked+span::after{left:2px;top:-2px}.controls-section .checkbox-label{font-size:14px}#floating-editor-window{min-width:340px;min-height:280px;max-height:900px;max-width:750px}.floating-addon-window{min-width:535px;min-height:605px;max-height:90%;max-width:90%}#ace_settingsmenu_container{background:rgba(0,0,0,.7)!important}body #ace_settingsmenu{padding-top:35px}body .ace_closeButton{position:absolute;top:8px;right:12px;z-index:10000;padding:0;cursor:pointer;background:0 0;border:0}body .ace_closeButton::before{content:"✖";color:#36393f}body .ace_closeButton:active{transform:translateY(2px)}#bd-editor-controls .help-text{margin-top:8px;margin-bottom:3px;font-size:14px}#bd-editor-controls .help-text .inline{background:#2f3129;padding:.2em;margin:-.2em 0;border-radius:3px}.bd-social-logo{opacity:.6}.bd-social-link:hover .bd-social-logo{opacity:1}.standardSidebarView-3F1I7i .bd-versioninfo-wrapper{bottom:0;left:0;position:fixed;background:inherit;right:0;padding:5px}.standardSidebarView-3F1I7i .bd-versioninfo-wrapper span{color:#b9bbbe;font-weight:600;font-size:11px}.standardSidebarView-3F1I7i .bd-versioninfo-wrapper a{font-size:11px}.bd-button-title{margin-left:10px}.bd-switch-item{flex-direction:column;margin-top:8px}.bd-switch-item h3{font-size:16px;font-weight:500;line-height:24px;flex:1}.theme-dark .bd-switch-item h3{color:#f6f6f7}.theme-light .bd-switch-item h3{color:#4f545c}.bd-switch-item .bd-switch-wrapper{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;width:44px;height:24px;display:block;flex:0 0 auto}.bd-switch-item .bd-switch-wrapper input{position:absolute;opacity:0;cursor:pointer;width:100%;height:100%;z-index:1}.bd-switch-item .bd-switch-wrapper .bd-switch{background:#7289da;position:absolute;top:0;right:0;bottom:0;left:0;background:#72767d;border-radius:14px;transition:background .15s ease-in-out,box-shadow .15s ease-in-out,border .15s ease-in-out}.bd-switch-item .bd-switch-wrapper .bd-switch:before{content:"";display:block;width:18px;height:18px;position:absolute;top:3px;left:3px;bottom:3px;background:#f6f6f7;border-radius:10px;transition:all .15s ease;box-shadow:0 3px 1px 0 rgba(0,0,0,.05),0 2px 2px 0 rgba(0,0,0,.1),0 3px 3px 0 rgba(0,0,0,.05)}.bd-switch-item .bd-switch-wrapper .bd-switch.checked{background:#7289da}.bd-switch-item .bd-switch-wrapper .bd-switch.checked:before{transform:translateX(20px)}#bd-settingspane-container .scroller-wrap{height:100%}#bd-settingspane-container .scroller-wrap .scroller{display:flex}.bd-reload{cursor:pointer;vertical-align:top;fill:#dcddde}.bd-reload:hover{fill:#fff}.bd-reload-header{margin-left:5px}.bd-reload-card{margin-right:5px}.bd-controls{display:flex}.bd-addon-list{user-select:text}.bd-addon-list .bd-addon-card{max-height:175px;margin-bottom:20px;padding:5px 8px;border:1px solid transparent;border-radius:5px;overflow:hidden}.theme-dark .bd-addon-list .bd-addon-card{background-color:rgba(32,34,37,.6);color:#f6f6f7;border-color:#202225}.theme-light .bd-addon-list .bd-addon-card{background-color:#f8f9f9;color:#4f545c;border-color:#dcddde}.bd-addon-list .bd-addon-card.settings-open{max-height:800px;overflow-y:auto}.bd-addon-list .bd-addon-header{font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:space-between;padding-bottom:5px;border-bottom:1px solid transparent;overflow:hidden}.theme-dark .bd-addon-list .bd-addon-header{color:#f6f6f7;border-bottom-color:rgba(114,118,125,.3)}.theme-light .bd-addon-list .bd-addon-header{color:#4f545c;border-bottom-color:rgba(185,187,190,.3)}.bd-addon-list .bd-description{word-break:break-word;max-height:100px;margin:5px 0;padding:5px 0;overflow-y:auto}.theme-dark .bd-addon-list .bd-description{color:#b9bbbe}.theme-light .bd-addon-list .bd-description{color:#72767d}.bd-addon-list .scroller::-webkit-scrollbar-track-piece,.bd-addon-list .scroller::-webkit-scrollbar-thumb{border-radius:0!important;border-color:transparent}.bd-addon-list .bd-footer{font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:space-between;padding-top:5px;border-top:1px solid transparent;overflow:hidden}.theme-dark .bd-addon-list .bd-footer{border-top-color:rgba(114,118,125,.3)}.theme-light .bd-addon-list .bd-footer{border-top-color:rgba(185,187,190,.3)}.bd-addon-list .bd-footer button{padding:3px 16px;transition:opacity 250ms ease}.bd-addon-list .bd-footer button:disabled{opacity:.4}.bd-addon-list .bd-footer a{color:#3e82e5}.bd-addon-list .bd-footer a:hover{text-decoration:underline}@keyframes bd-backdrop{to{opacity:.85}}@keyframes bd-modal-wrapper{to{transform:scale(1);opacity:1}}@keyframes bd-backdrop-closing{to{opacity:0}}@keyframes bd-modal-wrapper-closing{to{transform:scale(.7);opacity:0}}.bd-backdrop{animation:bd-backdrop 250ms ease;animation-fill-mode:forwards;opacity:0;background-color:#000;transform:translateZ(0)}.bd-modal-wrapper.closing .bd-backdrop{animation:bd-backdrop-closing 200ms linear;animation-fill-mode:forwards;animation-delay:50ms;opacity:.85}.bd-modal-wrapper.closing .bd-modal{animation:bd-modal-wrapper-closing 250ms cubic-bezier(.19,1,.22,1);animation-fill-mode:forwards;opacity:1;transform:scale(1)}.bd-modal-wrapper .bd-modal{animation:bd-modal-wrapper 250ms cubic-bezier(.175,.885,.32,1.275);animation-fill-mode:forwards;transform:scale(.7);transform-origin:50% 50%;display:flex;align-items:center;box-sizing:border-box;contain:content;justify-content:center;top:0;left:0;bottom:0;right:0;opacity:0;pointer-events:none;position:absolute;z-index:1000}.bd-modal-wrapper .bd-modal-inner{display:flex;contain:layout;flex-direction:column;pointer-events:auto;border:1px solid rgba(28,36,43,.6);border-radius:5px;box-shadow:0 2px 10px 0 rgba(0,0,0,.2);overflow:hidden;max-height:660px;min-height:200px;width:440px;user-select:text}.bd-modal-wrapper .bd-content-modal .bd-modal-inner{height:500px;width:700px}.bd-modal-wrapper .header{background-color:#35393e;box-shadow:0 2px 3px 0 rgba(0,0,0,.2);padding:12px 20px;z-index:1;color:#fff;font-size:16px;font-weight:700;line-height:19px}.bd-modal-wrapper .bd-modal-body{background-color:#36393f;color:#fff;flex-direction:row;overflow:hidden;display:flex;flex-direction:column;flex:1;contain:layout;position:relative}.bd-modal-wrapper .scroller{padding:10px}.bd-modal-wrapper .bd-content-modal .bd-modal-body{padding:0}.bd-modal-wrapper .scroller{overflow-y:auto}.bd-modal-wrapper .footer{display:flex;justify-content:flex-end;padding:10px 20px}.bd-modal-wrapper .footer button{min-height:32px;min-width:60px;align-items:center;display:flex;font-size:14px;font-weight:500;justify-content:center;line-height:16px;padding:2px 16px;user-select:none}.bd-modal-wrapper .tab-bar-container{align-items:center;border-bottom:0;background:rgba(0,0,0,.2);box-shadow:0 2px 3px 0 rgba(0,0,0,.1);display:flex;flex-direction:row;justify-content:space-between;margin-bottom:15px}.bd-modal-wrapper .tab-bar.TOP{margin:0;border:0;display:flex;flex-direction:row;justify-content:space-between;align-items:center}.bd-modal-wrapper .tab-bar-container .tab-bar-item{margin:0 15px;padding:15px 0;color:#fff!important;opacity:.5;transition:opacity 200ms ease;border-bottom:2px solid transparent}.bd-modal-wrapper .tab-bar-container .tab-bar-item:hover{border-color:#fff;cursor:pointer}.bd-modal-wrapper .tab-bar-container .tab-bar-item.selected{opacity:1;border-color:#fff}.bd-modal-wrapper .tab-bar.TOP .tab-bar-item+.tab-bar-item{margin:0}.bd-modal-wrapper .table-header{display:flex;justify-content:space-between;color:#fff;font-weight:700;padding-bottom:10px;margin:3px 15px 0 15px;border-bottom:1px solid #fff;font-size:14px}.bd-modal-wrapper .table-column{width:25%}.bd-modal-wrapper .table-column.column-error{width:50%}.bd-modal-wrapper .table-column{word-wrap:break-word}.bd-modal-wrapper .errors{display:flex;flex-direction:column;padding:0;font-size:14px;padding:0 5px}.bd-modal-wrapper .error{display:flex;color:#fff;border-bottom:1px solid rgba(255,255,255,.25);padding:15px 0;align-items:center}.bd-modal-wrapper .error-link{color:#3e82e5;font-weight:500}.bd-modal-wrapper .bd-content-modal .scroller{padding-top:0}.bd-toasts{position:fixed;display:flex;top:0;flex-direction:column;align-items:center;justify-content:flex-end;pointer-events:none;z-index:4000}@keyframes bd-toast-up{0%{transform:translateY(0);opacity:0}}.bd-toast{animation:bd-toast-up 300ms ease;transform:translateY(-10px);background:#36393f;padding:10px;border-radius:5px;box-shadow:0 0 0 1px rgba(32,34,37,.6),0 2px 10px 0 rgba(0,0,0,.2);font-weight:500;color:#fff;user-select:text;font-size:14px;opacity:1;margin-top:10px;pointer-events:none;user-select:none}@keyframes bd-toast-down{to{transform:translateY(0);opacity:0}}.bd-toast.closing{animation:bd-toast-down 200ms ease;animation-fill-mode:forwards;opacity:1;transform:translateY(-10px)}.bd-toast.icon{padding-left:30px;background-size:20px 20px;background-repeat:no-repeat;background-position:6px 50%}.bd-toast.toast-info{background-color:#4a90e2}.bd-toast.toast-info.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtNmgydjZ6bTAtOGgtMlY3aDJ2MnoiLz48L3N2Zz4=)}.bd-toast.toast-success{background-color:#43b581}.bd-toast.toast-success.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTIgMTVsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiLz48L3N2Zz4=)}.bd-toast.toast-danger,.bd-toast.toast-error{background-color:#f04747}.bd-toast.toast-danger.icon,.bd-toast.toast-error.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiIvPiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PC9zdmc+)}.bd-toast.toast-warning,.bd-toast.toast-warn{background-color:#ffa600;color:#fff}.bd-toast.toast-warning.icon,.bd-toast.toast-warn.icon{background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiIvPjwvc3ZnPg==)}.bd-minimal .divider-32i8lo{opacity:0}.bd-minimal .large-3ChYtB{max-width:20px;max-height:20px;background-size:100%;margin-right:2px;margin-top:0;border-radius:0}.bd-minimal .content-3dzVd8{border-left:2px solid #ebebeb;padding-left:2px}.bd-minimal .theme-dark .content-3dzVd8{border-left:2px solid #303030}.bd-minimal .username-_4ZSMR{font-size:small}.bd-minimal .container-1YxwTf{padding:5px}.bd-minimal .embed-IeVjo6{padding:2px}.bd-minimal .membersWrap-2h-GB4{min-width:0}.bd-minimal .members-1998pB .small-5Os1Bb{max-width:15px;max-height:15px;background-size:15px 15px}.bd-minimal .members-1998pB .small-5Os1Bb .status-oxiHuE{height:5px;width:5px}.bd-minimal .members-1998pB .member-3W1lQa{padding:5px}.bd-minimal .members-1998pB .memberInner-2CPc3V{transform:scale(.9)}.bd-minimal .members-1998pB .membersGroup-v9BXpm{margin-top:3px;transform:scale(.9)}.bd-minimal.bd-minimal-chan .channels-Ie2l6A{display:none}.bd-minimal .channels-Ie2l6A header span{font-size:12px}.bd-minimal .channels-Ie2l6A{width:160px}.bd-minimal .containerDefault-3GGEv_{transform:scale(.9)}.bd-minimal .content-3at_AU{transform:scale(.9)}.bd-minimal .icon-1_QxNX{width:14px;height:14px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .listItem-2P_4kh{width:20px;height:20px;background-size:100%;font-size:15px;line-height:20px;margin:0 12.5px 8px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .wrapper-25eVIn a,.bd-minimal .listItem-2P_4kh .wrapper-25eVIn .icon-27yU2q{width:20px;height:20px;background-size:100%;font-size:15px;line-height:20px}.bd-minimal .listItem-2P_4kh .wrapper-25eVIn{width:20px;height:20px;background-size:100%;font-size:15px;line-height:20px}.bd-minimal .listItem-2P_4kh svg,.bd-minimal .listItem-2P_4kh foreignObject[mask]{mask:none}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .homeIcon-tEMBK1{width:10px;height:10px;background-size:100%;font-size:15px;line-height:20px}.bd-minimal .circleIconButton-jET_ig{height:20px;width:20px}.bd-minimal .circleIconButton-jET_ig svg{height:14px;width:14px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .friendsOnline-_wi_fM{margin-left:-15px;font-size:7px}.bd-minimal #bd-pub-li{height:16px}.bd-minimal #bd-pub-button{font-size:8px;line-height:16px;height:16px}.bd-minimal .wrapper-1Rf91z,.bd-minimal .wrapper-1Rf91z .scrollerWrap-1IAIlv,.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG{width:45px}.bd-minimal .wrapper-1Rf91z .guildSeparator-3s64Iy{margin-left:-15px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .listItem-2P_4kh .wrapper-sa6paO{height:20px;margin-top:0;margin-left:-12.5px}.bd-minimal .wrapper-1Rf91z .scroller-2FKFPG .iconBadge-2wi9r4{width:12px;height:12px;background-size:12px}.bd-minimal .container-2Thooq .avatarSmall-3ACRaI{width:15px;height:15px;background-size:15px 15px}.bd-minimal .container-2Thooq .avatarSmall-3ACRaI .status-oxiHuE{height:5px;width:5px}.bd-minimal .container-2Thooq .accountDetails-3k9g4n{transform:scale(.8)}.bd-minimal .container-2Thooq .button-2b6hmh{height:14px;width:14px;background-size:14px 14px;margin-left:3px}.bd-minimal .container-2Thooq .button-2b6hmh svg{height:14px;width:14px}.bd-dark #bd-qem-favourite-container,.bd-dark #bd-qem-twitch-container{background-color:#353535}.bd-dark #bd-qem{border-bottom:1px solid #464646!important;background:#353535}.bd-dark #bd-qem button{background:#353535;border-left:1px solid #242424;box-shadow:#424242 1px 0 0 0;color:#fff}.bd-dark #bd-qem button.active{background-color:#292929}.bd-dark #bd-qem button:hover{background-color:#303030}.bd-dark #bd-qem-favourite-container,.bd-dark #bd-qem-twitch-container{background-color:#353535}.bd-dark .emojiPicker-3m1S-j{background-color:#353535}.bd-dark .emojiPicker-3m1S-j .category-2U57w6{background-color:#353535}.bd-dark .emojiPicker-3m1S-j .header-1nkwgG .searchBar-2pWH0_{background-color:#2b2b2b}.bd-dark .emojiPicker-3m1S-j .searchBar-2pWH0_ input{color:#fff}.bd-dark .emojiPicker-3m1S-j .searchBar-2pWH0_ input::-webkit-input-placeholder{color:#fff}.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7 .emojiItem-109bjA.selected-39BZ4S{background-color:rgba(123,123,123,.37)}.bd-dark .emojiPicker-3m1S-j .dimmer-3iH-5D.visible-3k45bQ{background-color:rgba(62,62,62,.65)}.bd-dark .emojiPicker-3m1S-j .diversitySelector-tmmMv0 .popout-2nUePc{background:#353535;border-color:#202020}.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar,.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar-track,.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar-track-piece,.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar,.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar-track,.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar-track-piece,.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar,.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar-track,.bd-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar-track-piece{background-color:#303030!important;border-color:#303030!important}.bd-dark #bd-qem-twitch-container .scroller::-webkit-scrollbar-thumb,.bd-dark #bd-qem-favourite-container .scroller::-webkit-scrollbar-thumb,.bd-dark .emojiPicker-3g68GS .scroller-3vODG7::-webkit-scrollbar-thumb{border-color:#202020!important;background-color:#202020!important}.bd-dark .theme-light .slide-2pHaq5{background:#36393f}.bd-dark .theme-dark .action-1lSjCi,.bd-dark .theme-light .action-1lSjCi{background:#2f3136}.bd-dark .theme-dark .or-3THJsp,.bd-dark .theme-light .or-3THJsp{background:#2f3136;order:2;height:56px;width:56px;top:103px;line-height:56px;left:calc(50% - 29px);border-radius:50%;border:2px solid #484b52}.bd-dark .create-3jownz{order:1}.bd-dark .join-33Tr-7{order:3}.bd-dark .theme-dark .actionIcon-2IISM_,.bd-dark .theme-light .actionIcon-2IISM_{filter:grayscale(100%) brightness(60%)}.bd-dark .theme-light .footer-2yfCgX{background:#2f3136}.bd-dark .regionSelectModal-12e-57{background:#36393f}.bd-dark .regionSelectModal-12e-57 .regionSelectModalOption-2DSIZ3{background:#2f3136;border:2px solid #484b52}.bd-dark~div #ace_settingsmenu{color:#f6f6f7;background:#36393f;box-shadow:0 0 0 1px rgba(32,34,37,.6),0 2px 10px 0 rgba(0,0,0,.2)}.bd-dark~div #ace_settingsmenu select,.bd-dark~div #ace_settingsmenu input[type=text]{color:#f6f6f7;background:#2f3136;border:1px solid #484b52}.bd-dark~div .ace_closeButton::before{color:#f6f6f7}.bd-chat-badge{vertical-align:bottom;line-height:1.375rem;display:inline-block;height:1.25rem}.bd-member-badge{height:15px;margin-left:4px} \ No newline at end of file diff --git a/data/emotes/blacklist.json b/data/emotes/blacklist.json index 0493a27f..9040d539 100644 --- a/data/emotes/blacklist.json +++ b/data/emotes/blacklist.json @@ -596,6 +596,7 @@ "Jaffa", "Jago", "James", + "Jannik", "Jazz", "Jeanne", "Jeremiah", diff --git a/js/main.js b/js/main.js index 671a969b..b27d72a0 100644 --- a/js/main.js +++ b/js/main.js @@ -87,15 +87,51 @@ var Core = /************************************************************************/ /******/ ({ -/***/ "./src/builtins/24hour.js": -/*!********************************!*\ - !*** ./src/builtins/24hour.js ***! - \********************************/ +/***/ "./src/builtins/appearance/coloredtext.js": +/*!************************************************!*\ + !*** ./src/builtins/appearance/coloredtext.js ***! + \************************************************/ /*! exports provided: default */ /***/ (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 TwentyFourHour extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"24Hour\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"twentyFourHour\";\n }\n\n enabled() {\n this.inject24Hour();\n }\n\n disabled() {\n this.unpatchAll();\n }\n\n inject24Hour() {\n const twelveHour = new RegExp(`([0-9]{1,2}):([0-9]{1,2})\\\\s(AM|PM)`);\n\n const convert = (thisObject, args, returnValue) => {\n const matched = returnValue.match(twelveHour);\n if (!matched || matched.length !== 4) return;\n if (matched[3] === \"AM\") return returnValue = returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"00\" : matched[1].padStart(2, \"0\")}:${matched[2]}`);\n return returnValue = returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"12\" : parseInt(matched[1]) + 12}:${matched[2]}`);\n };\n\n this.after(modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].TimeFormatter, \"calendarFormat\", convert); // Called in Cozy mode\n\n this.after(modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].TimeFormatter, \"dateFormat\", convert); // Called in Compact mode\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zLzI0aG91ci5qcz9kZTc4Il0sIm5hbWVzIjpbIlR3ZW50eUZvdXJIb3VyIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwiZW5hYmxlZCIsImluamVjdDI0SG91ciIsImRpc2FibGVkIiwidW5wYXRjaEFsbCIsInR3ZWx2ZUhvdXIiLCJSZWdFeHAiLCJjb252ZXJ0IiwidGhpc09iamVjdCIsImFyZ3MiLCJyZXR1cm5WYWx1ZSIsIm1hdGNoZWQiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiYWZ0ZXIiLCJEaXNjb3JkTW9kdWxlcyIsIlRpbWVGb3JtYXR0ZXIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFZSxtRUFBSSxNQUFNQSxjQUFOLFNBQTZCQyx3REFBN0IsQ0FBcUM7QUFDcEQsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxRQUFQO0FBQWlCOztBQUM3QixNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFNBQVA7QUFBa0I7O0FBQ2xDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8sZ0JBQVA7QUFBeUI7O0FBRW5DQyxTQUFPLEdBQUc7QUFDTixTQUFLQyxZQUFMO0FBQ0g7O0FBRURDLFVBQVEsR0FBRztBQUNQLFNBQUtDLFVBQUw7QUFDSDs7QUFFREYsY0FBWSxHQUFHO0FBQ1gsVUFBTUcsVUFBVSxHQUFHLElBQUlDLE1BQUosQ0FBWSxxQ0FBWixDQUFuQjs7QUFDQSxVQUFNQyxPQUFPLEdBQUcsQ0FBQ0MsVUFBRCxFQUFhQyxJQUFiLEVBQW1CQyxXQUFuQixLQUFtQztBQUMvQyxZQUFNQyxPQUFPLEdBQUdELFdBQVcsQ0FBQ0UsS0FBWixDQUFrQlAsVUFBbEIsQ0FBaEI7QUFDQSxVQUFJLENBQUNNLE9BQUQsSUFBWUEsT0FBTyxDQUFDRSxNQUFSLEtBQW1CLENBQW5DLEVBQXNDO0FBQ3RDLFVBQUlGLE9BQU8sQ0FBQyxDQUFELENBQVAsS0FBZSxJQUFuQixFQUF5QixPQUFPRCxXQUFXLEdBQUdBLFdBQVcsQ0FBQ0ksT0FBWixDQUFvQkgsT0FBTyxDQUFDLENBQUQsQ0FBM0IsRUFBaUMsR0FBRUEsT0FBTyxDQUFDLENBQUQsQ0FBUCxLQUFlLElBQWYsR0FBc0IsSUFBdEIsR0FBNkJBLE9BQU8sQ0FBQyxDQUFELENBQVAsQ0FBV0ksUUFBWCxDQUFvQixDQUFwQixFQUF1QixHQUF2QixDQUE0QixJQUFHSixPQUFPLENBQUMsQ0FBRCxDQUFJLEVBQTFHLENBQXJCO0FBQ3pCLGFBQU9ELFdBQVcsR0FBR0EsV0FBVyxDQUFDSSxPQUFaLENBQW9CSCxPQUFPLENBQUMsQ0FBRCxDQUEzQixFQUFpQyxHQUFFQSxPQUFPLENBQUMsQ0FBRCxDQUFQLEtBQWUsSUFBZixHQUFzQixJQUF0QixHQUE2QkssUUFBUSxDQUFDTCxPQUFPLENBQUMsQ0FBRCxDQUFSLENBQVIsR0FBdUIsRUFBRyxJQUFHQSxPQUFPLENBQUMsQ0FBRCxDQUFJLEVBQXhHLENBQXJCO0FBQ0gsS0FMRDs7QUFPQSxTQUFLTSxLQUFMLENBQVdDLHNEQUFjLENBQUNDLGFBQTFCLEVBQXlDLGdCQUF6QyxFQUEyRFosT0FBM0QsRUFUVyxDQVMwRDs7QUFDckUsU0FBS1UsS0FBTCxDQUFXQyxzREFBYyxDQUFDQyxhQUExQixFQUF5QyxZQUF6QyxFQUF1RFosT0FBdkQsRUFWVyxDQVVzRDtBQUNwRTs7QUF4Qm1ELENBQXpDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvMjRob3VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge0Rpc2NvcmRNb2R1bGVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFR3ZW50eUZvdXJIb3VyIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCIyNEhvdXJcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJ0d2VudHlGb3VySG91clwiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIHRoaXMuaW5qZWN0MjRIb3VyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgdGhpcy51bnBhdGNoQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0MjRIb3VyKCkge1xyXG4gICAgICAgIGNvbnN0IHR3ZWx2ZUhvdXIgPSBuZXcgUmVnRXhwKGAoWzAtOV17MSwyfSk6KFswLTldezEsMn0pXFxcXHMoQU18UE0pYCk7XHJcbiAgICAgICAgY29uc3QgY29udmVydCA9ICh0aGlzT2JqZWN0LCBhcmdzLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gcmV0dXJuVmFsdWUubWF0Y2godHdlbHZlSG91cik7XHJcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZCB8fCBtYXRjaGVkLmxlbmd0aCAhPT0gNCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2hlZFszXSA9PT0gXCJBTVwiKSByZXR1cm4gcmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoZWRbMF0sIGAke21hdGNoZWRbMV0gPT09IFwiMTJcIiA/IFwiMDBcIiA6IG1hdGNoZWRbMV0ucGFkU3RhcnQoMiwgXCIwXCIpfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlLnJlcGxhY2UobWF0Y2hlZFswXSwgYCR7bWF0Y2hlZFsxXSA9PT0gXCIxMlwiID8gXCIxMlwiIDogcGFyc2VJbnQobWF0Y2hlZFsxXSkgKyAxMn06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuYWZ0ZXIoRGlzY29yZE1vZHVsZXMuVGltZUZvcm1hdHRlciwgXCJjYWxlbmRhckZvcm1hdFwiLCBjb252ZXJ0KTsgLy8gQ2FsbGVkIGluIENvenkgbW9kZVxyXG4gICAgICAgIHRoaXMuYWZ0ZXIoRGlzY29yZE1vZHVsZXMuVGltZUZvcm1hdHRlciwgXCJkYXRlRm9ybWF0XCIsIGNvbnZlcnQpOyAvLyBDYWxsZWQgaW4gQ29tcGFjdCBtb2RlXHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/24hour.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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2FwcGVhcmFuY2UvY29sb3JlZHRleHQuanM/ZTQ3MyJdLCJuYW1lcyI6WyJNZXNzYWdlQ29udGVudCIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0TW9kdWxlIiwibSIsImRlZmF1bHQiLCJkaXNwbGF5TmFtZSIsIkNvbG9yZWRUZXh0IiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwiZW5hYmxlZCIsImluamVjdENvbG9yZWRUZXh0IiwiZGlzYWJsZWQiLCJ1bnBhdGNoQWxsIiwiYWZ0ZXIiLCJwcm90b3R5cGUiLCJ0aGlzT2JqZWN0IiwiYXJncyIsInJldFZhbCIsInByb3BzIiwic2lsZW50IiwicmV0dXJuVmFsdWUiLCJtYXJrdXAiLCJjaGlsZHJlbiIsInJvbGVDb2xvciIsIm1lc3NhZ2UiLCJjb2xvclN0cmluZyIsInN0eWxlIiwiY29sb3IiLCJyZW1vdmVDb2xvcmVkVGV4dCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJlbGVtIiwic2V0UHJvcGVydHkiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQSxNQUFNQSxjQUFjLEdBQUdDLHNEQUFjLENBQUNDLFNBQWYsQ0FBeUJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVQyxXQUF2QixJQUFzQ0YsQ0FBQyxDQUFDQyxPQUFGLENBQVVDLFdBQVYsSUFBeUIsU0FBN0YsQ0FBdkI7QUFFZSxtRUFBSSxNQUFNQyxXQUFOLFNBQTBCQyx3REFBMUIsQ0FBa0M7QUFDakQsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxhQUFQO0FBQXNCOztBQUNsQyxNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFlBQVA7QUFBcUI7O0FBQ3JDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8sYUFBUDtBQUFzQjs7QUFFaENDLFNBQU8sR0FBRztBQUNOLFNBQUtDLGlCQUFMO0FBQ0g7O0FBRURDLFVBQVEsR0FBRztBQUNQLFNBQUtDLFVBQUw7QUFDSDs7QUFFREYsbUJBQWlCLEdBQUc7QUFDaEIsU0FBS0csS0FBTCxDQUFXZixjQUFjLENBQUNnQixTQUExQixFQUFxQyxRQUFyQyxFQUErQyxDQUFDQyxVQUFELEVBQWFDLElBQWIsRUFBbUJDLE1BQW5CLEtBQThCO0FBQ3pFLFdBQUtKLEtBQUwsQ0FBV0ksTUFBTSxDQUFDQyxLQUFsQixFQUF5QixVQUF6QixFQUFxQztBQUFDQyxjQUFNLEVBQUUsSUFBVDtBQUFlTixhQUFLLEVBQUUsQ0FBQztBQUFDTztBQUFELFNBQUQsS0FBbUI7QUFDMUUsZ0JBQU1DLE1BQU0sR0FBR0QsV0FBVyxDQUFDRixLQUFaLENBQWtCSSxRQUFsQixDQUEyQixDQUEzQixDQUFmO0FBQ0EsZ0JBQU1DLFNBQVMsR0FBR1IsVUFBVSxDQUFDRyxLQUFYLENBQWlCTSxPQUFqQixDQUF5QkMsV0FBM0M7QUFDQSxjQUFJSixNQUFNLElBQUlFLFNBQWQsRUFBeUJGLE1BQU0sQ0FBQ0gsS0FBUCxDQUFhUSxLQUFiLEdBQXFCO0FBQUNDLGlCQUFLLEVBQUVKO0FBQVIsV0FBckI7QUFDNUI7QUFKb0MsT0FBckM7QUFLSCxLQU5EO0FBT0g7O0FBRURLLG1CQUFpQixHQUFHO0FBQ2hCQyxZQUFRLENBQUNDLGdCQUFULENBQTBCLGdCQUExQixFQUE0Q0MsT0FBNUMsQ0FBb0RDLElBQUksSUFBSTtBQUN4REEsVUFBSSxDQUFDTixLQUFMLENBQVdPLFdBQVgsQ0FBdUIsT0FBdkIsRUFBZ0MsRUFBaEM7QUFDSCxLQUZEO0FBR0g7O0FBM0JnRCxDQUF0QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2FwcGVhcmFuY2UvY29sb3JlZHRleHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vLi4vc3RydWN0cy9idWlsdGluXCI7XHJcbmltcG9ydCB7V2VicGFja01vZHVsZXN9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5jb25zdCBNZXNzYWdlQ29udGVudCA9IFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZShtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lID09IFwiTWVzc2FnZVwiKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb2xvcmVkVGV4dCBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiQ29sb3JlZFRleHRcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiYXBwZWFyYW5jZVwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJjb2xvcmVkVGV4dFwiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIHRoaXMuaW5qZWN0Q29sb3JlZFRleHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICB0aGlzLnVucGF0Y2hBbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3RDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICB0aGlzLmFmdGVyKE1lc3NhZ2VDb250ZW50LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmplY3QsIGFyZ3MsIHJldFZhbCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFmdGVyKHJldFZhbC5wcm9wcywgXCJjaGlsZHJlblwiLCB7c2lsZW50OiB0cnVlLCBhZnRlcjogKHtyZXR1cm5WYWx1ZX0pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmt1cCA9IHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm9sZUNvbG9yID0gdGhpc09iamVjdC5wcm9wcy5tZXNzYWdlLmNvbG9yU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hcmt1cCAmJiByb2xlQ29sb3IpIG1hcmt1cC5wcm9wcy5zdHlsZSA9IHtjb2xvcjogcm9sZUNvbG9yfTtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIubWFya3VwLTJCT3ctalwiKS5mb3JFYWNoKGVsZW0gPT4ge1xyXG4gICAgICAgICAgICBlbGVtLnN0eWxlLnNldFByb3BlcnR5KFwiY29sb3JcIiwgXCJcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/appearance/coloredtext.js\n"); + +/***/ }), + +/***/ "./src/builtins/appearance/darkmode.js": +/*!*********************************************!*\ + !*** ./src/builtins/appearance/darkmode.js ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (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\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class DarkMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"DarkMode\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"darkMode\";\n }\n\n enabled() {\n document.getElementById(\"app-mount\").classList.add(\"bda-dark\", \"bd-dark\");\n }\n\n disabled() {\n document.getElementById(\"app-mount\").classList.remove(\"bda-dark\", \"bd-dark\");\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2FwcGVhcmFuY2UvZGFya21vZGUuanM/NTIyMCJdLCJuYW1lcyI6WyJEYXJrTW9kZSIsIkJ1aWx0aW4iLCJuYW1lIiwiY2F0ZWdvcnkiLCJpZCIsImVuYWJsZWQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiY2xhc3NMaXN0IiwiYWRkIiwiZGlzYWJsZWQiLCJyZW1vdmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVlLG1FQUFJLE1BQU1BLFFBQU4sU0FBdUJDLHdEQUF2QixDQUErQjtBQUM5QyxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLFVBQVA7QUFBbUI7O0FBQy9CLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sWUFBUDtBQUFxQjs7QUFDckMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxVQUFQO0FBQW1COztBQUU3QkMsU0FBTyxHQUFHO0FBQ05DLFlBQVEsQ0FBQ0MsY0FBVCxDQUF3QixXQUF4QixFQUFxQ0MsU0FBckMsQ0FBK0NDLEdBQS9DLENBQW1ELFVBQW5ELEVBQStELFNBQS9EO0FBQ0g7O0FBRURDLFVBQVEsR0FBRztBQUNQSixZQUFRLENBQUNDLGNBQVQsQ0FBd0IsV0FBeEIsRUFBcUNDLFNBQXJDLENBQStDRyxNQUEvQyxDQUFzRCxVQUF0RCxFQUFrRSxTQUFsRTtBQUNIOztBQVg2QyxDQUFuQyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2FwcGVhcmFuY2UvZGFya21vZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vLi4vc3RydWN0cy9idWlsdGluXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGFya01vZGUgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkRhcmtNb2RlXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImFwcGVhcmFuY2VcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiZGFya01vZGVcIjt9XHJcblxyXG4gICAgZW5hYmxlZCgpIHtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcC1tb3VudFwiKS5jbGFzc0xpc3QuYWRkKFwiYmRhLWRhcmtcIiwgXCJiZC1kYXJrXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBwLW1vdW50XCIpLmNsYXNzTGlzdC5yZW1vdmUoXCJiZGEtZGFya1wiLCBcImJkLWRhcmtcIik7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/appearance/darkmode.js\n"); + +/***/ }), + +/***/ "./src/builtins/appearance/minimalmode.js": +/*!************************************************!*\ + !*** ./src/builtins/appearance/minimalmode.js ***! + \************************************************/ +/*! exports provided: default */ +/***/ (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\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class MinimalMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"MinimalMode\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"minimalMode\";\n }\n\n get hideChannelsID() {\n return \"hideChannels\";\n }\n\n get hideChannels() {\n return this.get(this.hideChannelsID);\n }\n\n constructor() {\n super();\n this.enableHideChannels = this.enableHideChannels.bind(this);\n this.disableHideChannels = this.disableHideChannels.bind(this);\n }\n\n enabled() {\n document.body.classList.add(\"bd-minimal\");\n if (this.hideChannels) this.enableHideChannels();\n this.hideChannelCancel = this.registerSetting(this.hideChannelsID, this.enableHideChannels, this.disableHideChannels);\n }\n\n disabled() {\n document.body.classList.remove(\"bd-minimal\");\n if (this.hideChannels) this.disableHideChannels();\n if (this.hideChannelCancel) this.hideChannelCancel();\n }\n\n enableHideChannels() {\n document.body.classList.add(\"bd-minimal-chan\");\n }\n\n disableHideChannels() {\n document.body.classList.remove(\"bd-minimal-chan\");\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2FwcGVhcmFuY2UvbWluaW1hbG1vZGUuanM/NWQyMSJdLCJuYW1lcyI6WyJNaW5pbWFsTW9kZSIsIkJ1aWx0aW4iLCJuYW1lIiwiY2F0ZWdvcnkiLCJpZCIsImhpZGVDaGFubmVsc0lEIiwiaGlkZUNoYW5uZWxzIiwiZ2V0IiwiY29uc3RydWN0b3IiLCJlbmFibGVIaWRlQ2hhbm5lbHMiLCJiaW5kIiwiZGlzYWJsZUhpZGVDaGFubmVscyIsImVuYWJsZWQiLCJkb2N1bWVudCIsImJvZHkiLCJjbGFzc0xpc3QiLCJhZGQiLCJoaWRlQ2hhbm5lbENhbmNlbCIsInJlZ2lzdGVyU2V0dGluZyIsImRpc2FibGVkIiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFZSxtRUFBSSxNQUFNQSxXQUFOLFNBQTBCQyx3REFBMUIsQ0FBa0M7QUFDakQsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxhQUFQO0FBQXNCOztBQUNsQyxNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFlBQVA7QUFBcUI7O0FBQ3JDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8sYUFBUDtBQUFzQjs7QUFDaEMsTUFBSUMsY0FBSixHQUFxQjtBQUFDLFdBQU8sY0FBUDtBQUF1Qjs7QUFDN0MsTUFBSUMsWUFBSixHQUFtQjtBQUFDLFdBQU8sS0FBS0MsR0FBTCxDQUFTLEtBQUtGLGNBQWQsQ0FBUDtBQUFzQzs7QUFFMURHLGFBQVcsR0FBRztBQUNWO0FBQ0EsU0FBS0Msa0JBQUwsR0FBMEIsS0FBS0Esa0JBQUwsQ0FBd0JDLElBQXhCLENBQTZCLElBQTdCLENBQTFCO0FBQ0EsU0FBS0MsbUJBQUwsR0FBMkIsS0FBS0EsbUJBQUwsQ0FBeUJELElBQXpCLENBQThCLElBQTlCLENBQTNCO0FBQ0g7O0FBRURFLFNBQU8sR0FBRztBQUNOQyxZQUFRLENBQUNDLElBQVQsQ0FBY0MsU0FBZCxDQUF3QkMsR0FBeEIsQ0FBNEIsWUFBNUI7QUFDQSxRQUFJLEtBQUtWLFlBQVQsRUFBdUIsS0FBS0csa0JBQUw7QUFDdkIsU0FBS1EsaUJBQUwsR0FBeUIsS0FBS0MsZUFBTCxDQUFxQixLQUFLYixjQUExQixFQUEwQyxLQUFLSSxrQkFBL0MsRUFBbUUsS0FBS0UsbUJBQXhFLENBQXpCO0FBQ0g7O0FBRURRLFVBQVEsR0FBRztBQUNQTixZQUFRLENBQUNDLElBQVQsQ0FBY0MsU0FBZCxDQUF3QkssTUFBeEIsQ0FBK0IsWUFBL0I7QUFDQSxRQUFJLEtBQUtkLFlBQVQsRUFBdUIsS0FBS0ssbUJBQUw7QUFDdkIsUUFBSSxLQUFLTSxpQkFBVCxFQUE0QixLQUFLQSxpQkFBTDtBQUMvQjs7QUFFRFIsb0JBQWtCLEdBQUc7QUFDakJJLFlBQVEsQ0FBQ0MsSUFBVCxDQUFjQyxTQUFkLENBQXdCQyxHQUF4QixDQUE0QixpQkFBNUI7QUFDSDs7QUFFREwscUJBQW1CLEdBQUc7QUFDbEJFLFlBQVEsQ0FBQ0MsSUFBVCxDQUFjQyxTQUFkLENBQXdCSyxNQUF4QixDQUErQixpQkFBL0I7QUFDSDs7QUEvQmdELENBQXRDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvYXBwZWFyYW5jZS9taW5pbWFsbW9kZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBNaW5pbWFsTW9kZSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiTWluaW1hbE1vZGVcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiYXBwZWFyYW5jZVwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJtaW5pbWFsTW9kZVwiO31cclxuICAgIGdldCBoaWRlQ2hhbm5lbHNJRCgpIHtyZXR1cm4gXCJoaWRlQ2hhbm5lbHNcIjt9XHJcbiAgICBnZXQgaGlkZUNoYW5uZWxzKCkge3JldHVybiB0aGlzLmdldCh0aGlzLmhpZGVDaGFubmVsc0lEKTt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmVuYWJsZUhpZGVDaGFubmVscyA9IHRoaXMuZW5hYmxlSGlkZUNoYW5uZWxzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlSGlkZUNoYW5uZWxzID0gdGhpcy5kaXNhYmxlSGlkZUNoYW5uZWxzLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlZCgpIHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVDaGFubmVscykgdGhpcy5lbmFibGVIaWRlQ2hhbm5lbHMoKTtcclxuICAgICAgICB0aGlzLmhpZGVDaGFubmVsQ2FuY2VsID0gdGhpcy5yZWdpc3RlclNldHRpbmcodGhpcy5oaWRlQ2hhbm5lbHNJRCwgdGhpcy5lbmFibGVIaWRlQ2hhbm5lbHMsIHRoaXMuZGlzYWJsZUhpZGVDaGFubmVscyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwiYmQtbWluaW1hbFwiKTtcclxuICAgICAgICBpZiAodGhpcy5oaWRlQ2hhbm5lbHMpIHRoaXMuZGlzYWJsZUhpZGVDaGFubmVscygpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVDaGFubmVsQ2FuY2VsKSB0aGlzLmhpZGVDaGFubmVsQ2FuY2VsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlSGlkZUNoYW5uZWxzKCkge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlSGlkZUNoYW5uZWxzKCkge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/appearance/minimalmode.js\n"); + +/***/ }), + +/***/ "./src/builtins/appearance/voicemode.js": +/*!**********************************************!*\ + !*** ./src/builtins/appearance/voicemode.js ***! + \**********************************************/ +/*! exports provided: default */ +/***/ (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\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class VoiceMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"VoiceMode\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"voiceMode\";\n }\n\n enabled() {\n document.querySelector(\".chat-3bRxxu\").style.setProperty(\"visibility\", \"hidden\");\n document.querySelector(\".chat-3bRxxu\").style.setProperty(\"min-width\", \"0px\");\n document.querySelector(\".channels-Ie2l6A\").style.setProperty(\"flex-grow\", \"100000\");\n }\n\n disabled() {\n document.querySelector(\".chat-3bRxxu\").style.setProperty(\"visibility\", \"\");\n document.querySelector(\".chat-3bRxxu\").style.setProperty(\"min-width\", \"\");\n document.querySelector(\".channels-Ie2l6A\").style.setProperty(\"flex-grow\", \"\");\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2FwcGVhcmFuY2Uvdm9pY2Vtb2RlLmpzP2ZjZGIiXSwibmFtZXMiOlsiVm9pY2VNb2RlIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwiZW5hYmxlZCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsInN0eWxlIiwic2V0UHJvcGVydHkiLCJkaXNhYmxlZCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRWUsbUVBQUksTUFBTUEsU0FBTixTQUF3QkMsd0RBQXhCLENBQWdDO0FBQy9DLE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sV0FBUDtBQUFvQjs7QUFDaEMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxZQUFQO0FBQXFCOztBQUNyQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLFdBQVA7QUFBb0I7O0FBRTlCQyxTQUFPLEdBQUc7QUFDTkMsWUFBUSxDQUFDQyxhQUFULENBQXVCLGNBQXZCLEVBQXVDQyxLQUF2QyxDQUE2Q0MsV0FBN0MsQ0FBeUQsWUFBekQsRUFBdUUsUUFBdkU7QUFDQUgsWUFBUSxDQUFDQyxhQUFULENBQXVCLGNBQXZCLEVBQXVDQyxLQUF2QyxDQUE2Q0MsV0FBN0MsQ0FBeUQsV0FBekQsRUFBc0UsS0FBdEU7QUFDQUgsWUFBUSxDQUFDQyxhQUFULENBQXVCLGtCQUF2QixFQUEyQ0MsS0FBM0MsQ0FBaURDLFdBQWpELENBQTZELFdBQTdELEVBQTBFLFFBQTFFO0FBQ0g7O0FBRURDLFVBQVEsR0FBRztBQUNQSixZQUFRLENBQUNDLGFBQVQsQ0FBdUIsY0FBdkIsRUFBdUNDLEtBQXZDLENBQTZDQyxXQUE3QyxDQUF5RCxZQUF6RCxFQUF1RSxFQUF2RTtBQUNBSCxZQUFRLENBQUNDLGFBQVQsQ0FBdUIsY0FBdkIsRUFBdUNDLEtBQXZDLENBQTZDQyxXQUE3QyxDQUF5RCxXQUF6RCxFQUFzRSxFQUF0RTtBQUNBSCxZQUFRLENBQUNDLGFBQVQsQ0FBdUIsa0JBQXZCLEVBQTJDQyxLQUEzQyxDQUFpREMsV0FBakQsQ0FBNkQsV0FBN0QsRUFBMEUsRUFBMUU7QUFDSDs7QUFmOEMsQ0FBcEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9hcHBlYXJhbmNlL3ZvaWNlbW9kZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWb2ljZU1vZGUgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlZvaWNlTW9kZVwiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJhcHBlYXJhbmNlXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcInZvaWNlTW9kZVwiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2hhdC0zYlJ4eHVcIikuc3R5bGUuc2V0UHJvcGVydHkoXCJ2aXNpYmlsaXR5XCIsIFwiaGlkZGVuXCIpO1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2hhdC0zYlJ4eHVcIikuc3R5bGUuc2V0UHJvcGVydHkoXCJtaW4td2lkdGhcIiwgXCIwcHhcIik7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jaGFubmVscy1JZTJsNkFcIikuc3R5bGUuc2V0UHJvcGVydHkoXCJmbGV4LWdyb3dcIiwgXCIxMDAwMDBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jaGF0LTNiUnh4dVwiKS5zdHlsZS5zZXRQcm9wZXJ0eShcInZpc2liaWxpdHlcIiwgXCJcIik7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jaGF0LTNiUnh4dVwiKS5zdHlsZS5zZXRQcm9wZXJ0eShcIm1pbi13aWR0aFwiLCBcIlwiKTtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmNoYW5uZWxzLUllMmw2QVwiKS5zdHlsZS5zZXRQcm9wZXJ0eShcImZsZXgtZ3Jvd1wiLCBcIlwiKTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/appearance/voicemode.js\n"); /***/ }), @@ -103,35 +139,11 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /*!**********************************!*\ !*** ./src/builtins/builtins.js ***! \**********************************/ -/*! exports provided: EmoteModule, CustomCSS, VoiceMode, ClassNormalizer, DeveloperMode, PublicServers, DarkMode, MinimalMode, TwentyFourHour, ColoredText, VoiceDisconnect, EmoteMenu, EmoteAutocaps, WindowPrefs */ +/*! exports provided: CustomCSS, WindowPrefs, TwentyFourHour, ClassNormalizer, PublicServers, VoiceDisconnect, ColoredText, DarkMode, MinimalMode, VoiceMode, EmoteModule, EmoteMenu, EmoteAutocaps, CopySelector, Debugger, ReactDevTools */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _emotes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./emotes */ \"./src/builtins/emotes.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteModule\", function() { return _emotes__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _customcss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./customcss */ \"./src/builtins/customcss.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomCSS\", function() { return _customcss__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _voicemode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./voicemode */ \"./src/builtins/voicemode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VoiceMode\", function() { return _voicemode__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _classnormalizer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./classnormalizer */ \"./src/builtins/classnormalizer.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ClassNormalizer\", function() { return _classnormalizer__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _developermode__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./developermode */ \"./src/builtins/developermode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DeveloperMode\", function() { return _developermode__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _publicservers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./publicservers */ \"./src/builtins/publicservers.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PublicServers\", function() { return _publicservers__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _darkmode__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./darkmode */ \"./src/builtins/darkmode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DarkMode\", function() { return _darkmode__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _minimalmode__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./minimalmode */ \"./src/builtins/minimalmode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MinimalMode\", function() { return _minimalmode__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _24hour__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./24hour */ \"./src/builtins/24hour.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TwentyFourHour\", function() { return _24hour__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _coloredtext__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./coloredtext */ \"./src/builtins/coloredtext.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ColoredText\", function() { return _coloredtext__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _voicedisconnect__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./voicedisconnect */ \"./src/builtins/voicedisconnect.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VoiceDisconnect\", function() { return _voicedisconnect__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _emotemenu__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./emotemenu */ \"./src/builtins/emotemenu.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteMenu\", function() { return _emotemenu__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _emoteautocaps__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./emoteautocaps */ \"./src/builtins/emoteautocaps.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteAutocaps\", function() { return _emoteautocaps__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _windowprefs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./windowprefs */ \"./src/builtins/windowprefs.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WindowPrefs\", function() { return _windowprefs__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n// Export these two first because they add settings/panels\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2J1aWx0aW5zLmpzPzU5YTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2J1aWx0aW5zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXhwb3J0IHRoZXNlIHR3byBmaXJzdCBiZWNhdXNlIHRoZXkgYWRkIHNldHRpbmdzL3BhbmVsc1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRW1vdGVNb2R1bGV9IGZyb20gXCIuL2Vtb3Rlc1wiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgQ3VzdG9tQ1NTfSBmcm9tIFwiLi9jdXN0b21jc3NcIjtcclxuXHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBWb2ljZU1vZGV9IGZyb20gXCIuL3ZvaWNlbW9kZVwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgQ2xhc3NOb3JtYWxpemVyfSBmcm9tIFwiLi9jbGFzc25vcm1hbGl6ZXJcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIERldmVsb3Blck1vZGV9IGZyb20gXCIuL2RldmVsb3Blcm1vZGVcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFB1YmxpY1NlcnZlcnN9IGZyb20gXCIuL3B1YmxpY3NlcnZlcnNcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIERhcmtNb2RlfSBmcm9tIFwiLi9kYXJrbW9kZVwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgTWluaW1hbE1vZGV9IGZyb20gXCIuL21pbmltYWxtb2RlXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBUd2VudHlGb3VySG91cn0gZnJvbSBcIi4vMjRob3VyXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBDb2xvcmVkVGV4dH0gZnJvbSBcIi4vY29sb3JlZHRleHRcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFZvaWNlRGlzY29ubmVjdH0gZnJvbSBcIi4vdm9pY2VkaXNjb25uZWN0XCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBFbW90ZU1lbnV9IGZyb20gXCIuL2Vtb3RlbWVudVwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRW1vdGVBdXRvY2Fwc30gZnJvbSBcIi4vZW1vdGVhdXRvY2Fwc1wiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgV2luZG93UHJlZnN9IGZyb20gXCIuL3dpbmRvd3ByZWZzXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/builtins.js\n"); - -/***/ }), - -/***/ "./src/builtins/classnormalizer.js": -/*!*****************************************!*\ - !*** ./src/builtins/classnormalizer.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (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);\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"); - -/***/ }), - -/***/ "./src/builtins/coloredtext.js": -/*!*************************************!*\ - !*** ./src/builtins/coloredtext.js ***! - \*************************************/ -/*! exports provided: default */ -/***/ (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.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"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _customcss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./customcss */ \"./src/builtins/customcss.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomCSS\", function() { return _customcss__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _windowprefs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./windowprefs */ \"./src/builtins/windowprefs.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WindowPrefs\", function() { return _windowprefs__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _general_24hour__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./general/24hour */ \"./src/builtins/general/24hour.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TwentyFourHour\", function() { return _general_24hour__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _general_classnormalizer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./general/classnormalizer */ \"./src/builtins/general/classnormalizer.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ClassNormalizer\", function() { return _general_classnormalizer__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _general_publicservers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./general/publicservers */ \"./src/builtins/general/publicservers.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PublicServers\", function() { return _general_publicservers__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _general_voicedisconnect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./general/voicedisconnect */ \"./src/builtins/general/voicedisconnect.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VoiceDisconnect\", function() { return _general_voicedisconnect__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _appearance_coloredtext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./appearance/coloredtext */ \"./src/builtins/appearance/coloredtext.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ColoredText\", function() { return _appearance_coloredtext__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _appearance_darkmode__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./appearance/darkmode */ \"./src/builtins/appearance/darkmode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DarkMode\", function() { return _appearance_darkmode__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _appearance_minimalmode__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./appearance/minimalmode */ \"./src/builtins/appearance/minimalmode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MinimalMode\", function() { return _appearance_minimalmode__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _appearance_voicemode__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./appearance/voicemode */ \"./src/builtins/appearance/voicemode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VoiceMode\", function() { return _appearance_voicemode__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _emotes_emotes__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./emotes/emotes */ \"./src/builtins/emotes/emotes.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteModule\", function() { return _emotes_emotes__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _emotes_emotemenu__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./emotes/emotemenu */ \"./src/builtins/emotes/emotemenu.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteMenu\", function() { return _emotes_emotemenu__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _emotes_emoteautocaps__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./emotes/emoteautocaps */ \"./src/builtins/emotes/emoteautocaps.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteAutocaps\", function() { return _emotes_emoteautocaps__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _developer_copyselector__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./developer/copyselector */ \"./src/builtins/developer/copyselector.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CopySelector\", function() { return _developer_copyselector__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony import */ var _developer_debugger__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./developer/debugger */ \"./src/builtins/developer/debugger.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Debugger\", function() { return _developer_debugger__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n/* harmony import */ var _developer_reactdevtools__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./developer/reactdevtools */ \"./src/builtins/developer/reactdevtools.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ReactDevTools\", function() { return _developer_reactdevtools__WEBPACK_IMPORTED_MODULE_15__[\"default\"]; });\n\n// Export these two first because they add settings/panels\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2J1aWx0aW5zLmpzPzU5YTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQSIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9idWlsdGlucy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEV4cG9ydCB0aGVzZSB0d28gZmlyc3QgYmVjYXVzZSB0aGV5IGFkZCBzZXR0aW5ncy9wYW5lbHNcclxuXHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBDdXN0b21DU1N9IGZyb20gXCIuL2N1c3RvbWNzc1wiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgV2luZG93UHJlZnN9IGZyb20gXCIuL3dpbmRvd3ByZWZzXCI7XHJcblxyXG5leHBvcnQge2RlZmF1bHQgYXMgVHdlbnR5Rm91ckhvdXJ9IGZyb20gXCIuL2dlbmVyYWwvMjRob3VyXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBDbGFzc05vcm1hbGl6ZXJ9IGZyb20gXCIuL2dlbmVyYWwvY2xhc3Nub3JtYWxpemVyXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBQdWJsaWNTZXJ2ZXJzfSBmcm9tIFwiLi9nZW5lcmFsL3B1YmxpY3NlcnZlcnNcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFZvaWNlRGlzY29ubmVjdH0gZnJvbSBcIi4vZ2VuZXJhbC92b2ljZWRpc2Nvbm5lY3RcIjtcclxuXHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBDb2xvcmVkVGV4dH0gZnJvbSBcIi4vYXBwZWFyYW5jZS9jb2xvcmVkdGV4dFwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRGFya01vZGV9IGZyb20gXCIuL2FwcGVhcmFuY2UvZGFya21vZGVcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIE1pbmltYWxNb2RlfSBmcm9tIFwiLi9hcHBlYXJhbmNlL21pbmltYWxtb2RlXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBWb2ljZU1vZGV9IGZyb20gXCIuL2FwcGVhcmFuY2Uvdm9pY2Vtb2RlXCI7XHJcblxyXG5leHBvcnQge2RlZmF1bHQgYXMgRW1vdGVNb2R1bGV9IGZyb20gXCIuL2Vtb3Rlcy9lbW90ZXNcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIEVtb3RlTWVudX0gZnJvbSBcIi4vZW1vdGVzL2Vtb3RlbWVudVwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRW1vdGVBdXRvY2Fwc30gZnJvbSBcIi4vZW1vdGVzL2Vtb3RlYXV0b2NhcHNcIjtcclxuXHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBDb3B5U2VsZWN0b3J9IGZyb20gXCIuL2RldmVsb3Blci9jb3B5c2VsZWN0b3JcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIERlYnVnZ2VyfSBmcm9tIFwiLi9kZXZlbG9wZXIvZGVidWdnZXJcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFJlYWN0RGV2VG9vbHN9IGZyb20gXCIuL2RldmVsb3Blci9yZWFjdGRldnRvb2xzXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/builtins.js\n"); /***/ }), @@ -147,111 +159,123 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ }), -/***/ "./src/builtins/darkmode.js": -/*!**********************************!*\ - !*** ./src/builtins/darkmode.js ***! - \**********************************/ +/***/ "./src/builtins/developer/copyselector.js": +/*!************************************************!*\ + !*** ./src/builtins/developer/copyselector.js ***! + \************************************************/ /*! exports provided: default */ /***/ (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\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class DarkMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"DarkMode\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"darkMode\";\n }\n\n enabled() {\n document.getElementById(\"app-mount\").classList.add(\"bda-dark\", \"bd-dark\");\n }\n\n disabled() {\n document.getElementById(\"app-mount\").classList.remove(\"bda-dark\", \"bd-dark\");\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Rhcmttb2RlLmpzPzVkZGUiXSwibmFtZXMiOlsiRGFya01vZGUiLCJCdWlsdGluIiwibmFtZSIsImNhdGVnb3J5IiwiaWQiLCJlbmFibGVkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImNsYXNzTGlzdCIsImFkZCIsImRpc2FibGVkIiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFZSxtRUFBSSxNQUFNQSxRQUFOLFNBQXVCQyx3REFBdkIsQ0FBK0I7QUFDOUMsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxVQUFQO0FBQW1COztBQUMvQixNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFlBQVA7QUFBcUI7O0FBQ3JDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8sVUFBUDtBQUFtQjs7QUFFN0JDLFNBQU8sR0FBRztBQUNOQyxZQUFRLENBQUNDLGNBQVQsQ0FBd0IsV0FBeEIsRUFBcUNDLFNBQXJDLENBQStDQyxHQUEvQyxDQUFtRCxVQUFuRCxFQUErRCxTQUEvRDtBQUNIOztBQUVEQyxVQUFRLEdBQUc7QUFDUEosWUFBUSxDQUFDQyxjQUFULENBQXdCLFdBQXhCLEVBQXFDQyxTQUFyQyxDQUErQ0csTUFBL0MsQ0FBc0QsVUFBdEQsRUFBa0UsU0FBbEU7QUFDSDs7QUFYNkMsQ0FBbkMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9kYXJrbW9kZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEYXJrTW9kZSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiRGFya01vZGVcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiYXBwZWFyYW5jZVwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJkYXJrTW9kZVwiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBwLW1vdW50XCIpLmNsYXNzTGlzdC5hZGQoXCJiZGEtZGFya1wiLCBcImJkLWRhcmtcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHAtbW91bnRcIikuY2xhc3NMaXN0LnJlbW92ZShcImJkYS1kYXJrXCIsIFwiYmQtZGFya1wiKTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/darkmode.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.copySelectorListener = this.copySelectorListener.bind(this);\n }\n\n enabled() {\n document.addEventListener(\"contextmenu\", this.copySelectorListener);\n }\n\n disabled() {\n document.removeEventListener(\"contextmenu\", this.copySelectorListener);\n }\n\n copySelectorListener(ctxEvent) {\n ctxEvent.stopPropagation();\n const selector = this.getSelector(ctxEvent.target);\n\n function attach() {\n let cm = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].query(\".contextMenu-HLZMGh\");\n\n if (!cm) {\n const container = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].query(\"#app-mount\");\n const cmWrap = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
`);\n cm = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
`);\n cmWrap.append(cm);\n container.append(cmWrap);\n cmWrap.style.top = ctxEvent.clientY + \"px\";\n cmWrap.style.left = ctxEvent.clientX + \"px\";\n cmWrap.style.zIndex = \"1002\";\n\n const removeCM = function (removeEvent) {\n if (removeEvent.keyCode && removeEvent.keyCode !== 27) return;\n cmWrap.remove();\n document.removeEventListener(\"click\", removeCM);\n document.removeEventListener(\"contextmenu\", removeCM);\n document.removeEventListener(\"keyup\", removeCM);\n };\n\n document.addEventListener(\"click\", removeCM);\n document.addEventListener(\"contextmenu\", removeCM);\n document.addEventListener(\"keyup\", removeCM);\n }\n\n const cmg = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
`);\n const cmi = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
`);\n cmi.append(modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
Copy Selector
`));\n cmi.addEventListener(\"click\", () => {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].ElectronModule.copy(selector);\n cm.style.display = \"none\";\n });\n cmg.append(cmi);\n cm.append(cmg);\n }\n\n setImmediate(attach);\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 getRules(element, css = element.ownerDocument.styleSheets) {\n //if (window.getMatchedCSSRules) return window.getMatchedCSSRules(element);\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}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2RldmVsb3Blci9jb3B5c2VsZWN0b3IuanM/ODg5ZSJdLCJuYW1lcyI6WyJEZXZlbG9wZXJNb2RlIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwic2VsZWN0b3JNb2RlSUQiLCJzZWxlY3Rvck1vZGUiLCJnZXQiLCJjb25zdHJ1Y3RvciIsImNvcHlTZWxlY3Rvckxpc3RlbmVyIiwiYmluZCIsImVuYWJsZWQiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkaXNhYmxlZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjdHhFdmVudCIsInN0b3BQcm9wYWdhdGlvbiIsInNlbGVjdG9yIiwiZ2V0U2VsZWN0b3IiLCJ0YXJnZXQiLCJhdHRhY2giLCJjbSIsIkRPTSIsInF1ZXJ5IiwiY29udGFpbmVyIiwiY21XcmFwIiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZCIsInN0eWxlIiwidG9wIiwiY2xpZW50WSIsImxlZnQiLCJjbGllbnRYIiwiekluZGV4IiwicmVtb3ZlQ00iLCJyZW1vdmVFdmVudCIsImtleUNvZGUiLCJyZW1vdmUiLCJjbWciLCJjbWkiLCJEaXNjb3JkTW9kdWxlcyIsIkVsZWN0cm9uTW9kdWxlIiwiY29weSIsImRpc3BsYXkiLCJzZXRJbW1lZGlhdGUiLCJlbGVtZW50IiwicnVsZXMiLCJnZXRSdWxlcyIsImxhdGVzdFJ1bGUiLCJsZW5ndGgiLCJzZWxlY3RvclRleHQiLCJjbGFzc0xpc3QiLCJBcnJheSIsImZyb20iLCJqb2luIiwicGFyZW50RWxlbWVudCIsImNzcyIsIm93bmVyRG9jdW1lbnQiLCJzdHlsZVNoZWV0cyIsInNoZWV0cyIsImZpbHRlciIsInMiLCJocmVmIiwiaW5jbHVkZXMiLCJtYXAiLCJjc3NSdWxlcyIsImZsYXQiLCJlbGVtZW50UnVsZXMiLCJyIiwibWF0Y2hlcyIsInNwbGl0Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRWUsbUVBQUksTUFBTUEsYUFBTixTQUE0QkMsd0RBQTVCLENBQW9DO0FBQ25ELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sZUFBUDtBQUF3Qjs7QUFDcEMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxXQUFQO0FBQW9COztBQUNwQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLGVBQVA7QUFBd0I7O0FBQ2xDLE1BQUlDLGNBQUosR0FBcUI7QUFBQyxXQUFPLGNBQVA7QUFBdUI7O0FBQzdDLE1BQUlDLFlBQUosR0FBbUI7QUFBQyxXQUFPLEtBQUtDLEdBQUwsQ0FBUyxLQUFLRixjQUFkLENBQVA7QUFBc0M7O0FBRTFERyxhQUFXLEdBQUc7QUFDVjtBQUNBLFNBQUtDLG9CQUFMLEdBQTRCLEtBQUtBLG9CQUFMLENBQTBCQyxJQUExQixDQUErQixJQUEvQixDQUE1QjtBQUNIOztBQUVEQyxTQUFPLEdBQUc7QUFDTkMsWUFBUSxDQUFDQyxnQkFBVCxDQUEwQixhQUExQixFQUF5QyxLQUFLSixvQkFBOUM7QUFDSDs7QUFFREssVUFBUSxHQUFHO0FBQ1BGLFlBQVEsQ0FBQ0csbUJBQVQsQ0FBNkIsYUFBN0IsRUFBNEMsS0FBS04sb0JBQWpEO0FBQ0g7O0FBRURBLHNCQUFvQixDQUFDTyxRQUFELEVBQVc7QUFDM0JBLFlBQVEsQ0FBQ0MsZUFBVDtBQUNBLFVBQU1DLFFBQVEsR0FBRyxLQUFLQyxXQUFMLENBQWlCSCxRQUFRLENBQUNJLE1BQTFCLENBQWpCOztBQUNBLGFBQVNDLE1BQVQsR0FBa0I7QUFDZCxVQUFJQyxFQUFFLEdBQUdDLDJDQUFHLENBQUNDLEtBQUosQ0FBVSxxQkFBVixDQUFUOztBQUNBLFVBQUksQ0FBQ0YsRUFBTCxFQUFTO0FBQ0wsY0FBTUcsU0FBUyxHQUFHRiwyQ0FBRyxDQUFDQyxLQUFKLENBQVUsWUFBVixDQUFsQjtBQUNBLGNBQU1FLE1BQU0sR0FBR0gsMkNBQUcsQ0FBQ0ksYUFBSixDQUFtQixxQ0FBbkIsQ0FBZjtBQUNBTCxVQUFFLEdBQUdDLDJDQUFHLENBQUNJLGFBQUosQ0FBbUIsdUVBQW5CLENBQUw7QUFDQUQsY0FBTSxDQUFDRSxNQUFQLENBQWNOLEVBQWQ7QUFDQUcsaUJBQVMsQ0FBQ0csTUFBVixDQUFpQkYsTUFBakI7QUFDQUEsY0FBTSxDQUFDRyxLQUFQLENBQWFDLEdBQWIsR0FBbUJkLFFBQVEsQ0FBQ2UsT0FBVCxHQUFtQixJQUF0QztBQUNBTCxjQUFNLENBQUNHLEtBQVAsQ0FBYUcsSUFBYixHQUFvQmhCLFFBQVEsQ0FBQ2lCLE9BQVQsR0FBbUIsSUFBdkM7QUFDQVAsY0FBTSxDQUFDRyxLQUFQLENBQWFLLE1BQWIsR0FBc0IsTUFBdEI7O0FBQ0EsY0FBTUMsUUFBUSxHQUFHLFVBQVNDLFdBQVQsRUFBc0I7QUFDbkMsY0FBSUEsV0FBVyxDQUFDQyxPQUFaLElBQXVCRCxXQUFXLENBQUNDLE9BQVosS0FBd0IsRUFBbkQsRUFBdUQ7QUFDdkRYLGdCQUFNLENBQUNZLE1BQVA7QUFDQTFCLGtCQUFRLENBQUNHLG1CQUFULENBQTZCLE9BQTdCLEVBQXNDb0IsUUFBdEM7QUFDQXZCLGtCQUFRLENBQUNHLG1CQUFULENBQTZCLGFBQTdCLEVBQTRDb0IsUUFBNUM7QUFDQXZCLGtCQUFRLENBQUNHLG1CQUFULENBQTZCLE9BQTdCLEVBQXNDb0IsUUFBdEM7QUFDSCxTQU5EOztBQU9BdkIsZ0JBQVEsQ0FBQ0MsZ0JBQVQsQ0FBMEIsT0FBMUIsRUFBbUNzQixRQUFuQztBQUNBdkIsZ0JBQVEsQ0FBQ0MsZ0JBQVQsQ0FBMEIsYUFBMUIsRUFBeUNzQixRQUF6QztBQUNBdkIsZ0JBQVEsQ0FBQ0MsZ0JBQVQsQ0FBMEIsT0FBMUIsRUFBbUNzQixRQUFuQztBQUNIOztBQUVELFlBQU1JLEdBQUcsR0FBR2hCLDJDQUFHLENBQUNJLGFBQUosQ0FBbUIsNkNBQW5CLENBQVo7QUFDQSxZQUFNYSxHQUFHLEdBQUdqQiwyQ0FBRyxDQUFDSSxhQUFKLENBQW1CLDZGQUFuQixDQUFaO0FBQ0FhLFNBQUcsQ0FBQ1osTUFBSixDQUFXTCwyQ0FBRyxDQUFDSSxhQUFKLENBQW1CLHdEQUFuQixDQUFYO0FBQ0FhLFNBQUcsQ0FBQzNCLGdCQUFKLENBQXFCLE9BQXJCLEVBQThCLE1BQU07QUFDaEM0Qiw4REFBYyxDQUFDQyxjQUFmLENBQThCQyxJQUE5QixDQUFtQ3pCLFFBQW5DO0FBQ0FJLFVBQUUsQ0FBQ08sS0FBSCxDQUFTZSxPQUFULEdBQW1CLE1BQW5CO0FBQ0gsT0FIRDtBQUlBTCxTQUFHLENBQUNYLE1BQUosQ0FBV1ksR0FBWDtBQUNBbEIsUUFBRSxDQUFDTSxNQUFILENBQVVXLEdBQVY7QUFDSDs7QUFFRE0sZ0JBQVksQ0FBQ3hCLE1BQUQsQ0FBWjtBQUNIOztBQUVERixhQUFXLENBQUMyQixPQUFELEVBQVU7QUFDakIsUUFBSUEsT0FBTyxDQUFDMUMsRUFBWixFQUFnQixPQUFRLElBQUcwQyxPQUFPLENBQUMxQyxFQUFHLEVBQXRCO0FBQ2hCLFVBQU0yQyxLQUFLLEdBQUcsS0FBS0MsUUFBTCxDQUFjRixPQUFkLENBQWQ7QUFDQSxVQUFNRyxVQUFVLEdBQUdGLEtBQUssQ0FBQ0EsS0FBSyxDQUFDRyxNQUFOLEdBQWUsQ0FBaEIsQ0FBeEI7QUFDQSxRQUFJRCxVQUFKLEVBQWdCLE9BQU9BLFVBQVUsQ0FBQ0UsWUFBbEIsQ0FBaEIsS0FDSyxJQUFJTCxPQUFPLENBQUNNLFNBQVIsQ0FBa0JGLE1BQXRCLEVBQThCLE9BQVEsSUFBR0csS0FBSyxDQUFDQyxJQUFOLENBQVdSLE9BQU8sQ0FBQ00sU0FBbkIsRUFBOEJHLElBQTlCLENBQW1DLEdBQW5DLENBQXdDLEVBQW5EO0FBQ25DLFdBQVEsSUFBR0YsS0FBSyxDQUFDQyxJQUFOLENBQVdSLE9BQU8sQ0FBQ1UsYUFBUixDQUFzQkosU0FBakMsRUFBNENHLElBQTVDLENBQWlELEdBQWpELENBQXNELEVBQWpFO0FBQ0g7O0FBRURQLFVBQVEsQ0FBQ0YsT0FBRCxFQUFVVyxHQUFHLEdBQUdYLE9BQU8sQ0FBQ1ksYUFBUixDQUFzQkMsV0FBdEMsRUFBbUQ7QUFDdkQ7QUFDQSxVQUFNQyxNQUFNLEdBQUcsQ0FBQyxHQUFHSCxHQUFKLEVBQVNJLE1BQVQsQ0FBZ0JDLENBQUMsSUFBSSxDQUFDQSxDQUFDLENBQUNDLElBQUgsSUFBVyxDQUFDRCxDQUFDLENBQUNDLElBQUYsQ0FBT0MsUUFBUCxDQUFnQixrQkFBaEIsQ0FBakMsQ0FBZjtBQUNBLFVBQU1qQixLQUFLLEdBQUdhLE1BQU0sQ0FBQ0ssR0FBUCxDQUFXSCxDQUFDLElBQUksQ0FBQyxJQUFJQSxDQUFDLENBQUNJLFFBQUYsSUFBYyxFQUFsQixDQUFELENBQWhCLEVBQXlDQyxJQUF6QyxFQUFkO0FBQ0EsVUFBTUMsWUFBWSxHQUFHckIsS0FBSyxDQUFDYyxNQUFOLENBQWFRLENBQUMsSUFBSUEsQ0FBQyxJQUFJQSxDQUFDLENBQUNsQixZQUFQLElBQXVCTCxPQUFPLENBQUN3QixPQUFSLENBQWdCRCxDQUFDLENBQUNsQixZQUFsQixDQUF2QixJQUEwRGtCLENBQUMsQ0FBQ3hDLEtBQUYsQ0FBUXFCLE1BQWxFLElBQTRFbUIsQ0FBQyxDQUFDbEIsWUFBRixDQUFlb0IsS0FBZixDQUFxQixJQUFyQixFQUEyQnJCLE1BQTNCLEdBQW9DLENBQWhILElBQXFILENBQUNtQixDQUFDLENBQUNsQixZQUFGLENBQWVvQixLQUFmLENBQXFCLElBQXJCLEVBQTJCUCxRQUEzQixDQUFvQyxHQUFwQyxDQUF4SSxDQUFyQjtBQUNBLFdBQU9JLFlBQVA7QUFDSDs7QUEzRWtELENBQXhDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvZGV2ZWxvcGVyL2NvcHlzZWxlY3Rvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtET00sIERpc2NvcmRNb2R1bGVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERldmVsb3Blck1vZGUgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkRldmVsb3Blck1vZGVcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZGV2ZWxvcGVyXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcImRldmVsb3Blck1vZGVcIjt9XHJcbiAgICBnZXQgc2VsZWN0b3JNb2RlSUQoKSB7cmV0dXJuIFwiY29weVNlbGVjdG9yXCI7fVxyXG4gICAgZ2V0IHNlbGVjdG9yTW9kZSgpIHtyZXR1cm4gdGhpcy5nZXQodGhpcy5zZWxlY3Rvck1vZGVJRCk7fVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lciA9IHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgY29weVNlbGVjdG9yTGlzdGVuZXIoY3R4RXZlbnQpIHtcclxuICAgICAgICBjdHhFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IoY3R4RXZlbnQudGFyZ2V0KTtcclxuICAgICAgICBmdW5jdGlvbiBhdHRhY2goKSB7XHJcbiAgICAgICAgICAgIGxldCBjbSA9IERPTS5xdWVyeShcIi5jb250ZXh0TWVudS1ITFpNR2hcIik7XHJcbiAgICAgICAgICAgIGlmICghY20pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IERPTS5xdWVyeShcIiNhcHAtbW91bnRcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbVdyYXAgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImxheWVyLXY5SHlZYyBkYS1sYXllclwiPmApO1xyXG4gICAgICAgICAgICAgICAgY20gPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImNvbnRleHRNZW51LUhMWk1HaCBkYS1jb250ZXh0TWVudSBiZC1jb250ZXh0LW1lbnVcIj48L2Rpdj5gKTtcclxuICAgICAgICAgICAgICAgIGNtV3JhcC5hcHBlbmQoY20pO1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChjbVdyYXApO1xyXG4gICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLnRvcCA9IGN0eEV2ZW50LmNsaWVudFkgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUubGVmdCA9IGN0eEV2ZW50LmNsaWVudFggKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUuekluZGV4ID0gXCIxMDAyXCI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVDTSA9IGZ1bmN0aW9uKHJlbW92ZUV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZUV2ZW50LmtleUNvZGUgJiYgcmVtb3ZlRXZlbnQua2V5Q29kZSAhPT0gMjcpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjbWcgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIml0ZW1Hcm91cC0xdEwwdXogZGEtaXRlbUdyb3VwXCI+YCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNtaSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiaXRlbS0xWXZlaGMgaXRlbUJhc2UtdHo1U2VDIGRhLWl0ZW0gZGEtaXRlbUJhc2UgY2xpY2thYmxlLTExdUJpLSBkYS1jbGlja2FibGVcIj5gKTtcclxuICAgICAgICAgICAgY21pLmFwcGVuZChET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImxhYmVsLUpXUWlOZSBkYS1sYWJlbFwiPkNvcHkgU2VsZWN0b3I8L2Rpdj5gKSk7XHJcbiAgICAgICAgICAgIGNtaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgRGlzY29yZE1vZHVsZXMuRWxlY3Ryb25Nb2R1bGUuY29weShzZWxlY3Rvcik7XHJcbiAgICAgICAgICAgICAgICBjbS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjbWcuYXBwZW5kKGNtaSk7XHJcbiAgICAgICAgICAgIGNtLmFwcGVuZChjbWcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0SW1tZWRpYXRlKGF0dGFjaCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VsZWN0b3IoZWxlbWVudCkge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmlkKSByZXR1cm4gYCMke2VsZW1lbnQuaWR9YDtcclxuICAgICAgICBjb25zdCBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0UnVsZSA9IHJ1bGVzW3J1bGVzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIGlmIChsYXRlc3RSdWxlKSByZXR1cm4gbGF0ZXN0UnVsZS5zZWxlY3RvclRleHQ7XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoKSByZXR1cm4gYC4ke0FycmF5LmZyb20oZWxlbWVudC5jbGFzc0xpc3QpLmpvaW4oXCIuXCIpfWA7XHJcbiAgICAgICAgcmV0dXJuIGAuJHtBcnJheS5mcm9tKGVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QpLmpvaW4oXCIuXCIpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UnVsZXMoZWxlbWVudCwgY3NzID0gZWxlbWVudC5vd25lckRvY3VtZW50LnN0eWxlU2hlZXRzKSB7XHJcbiAgICAgICAgLy9pZiAod2luZG93LmdldE1hdGNoZWRDU1NSdWxlcykgcmV0dXJuIHdpbmRvdy5nZXRNYXRjaGVkQ1NTUnVsZXMoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3Qgc2hlZXRzID0gWy4uLmNzc10uZmlsdGVyKHMgPT4gIXMuaHJlZiB8fCAhcy5ocmVmLmluY2x1ZGVzKFwiQmV0dGVyRGlzY29yZEFwcFwiKSk7XHJcbiAgICAgICAgY29uc3QgcnVsZXMgPSBzaGVldHMubWFwKHMgPT4gWy4uLihzLmNzc1J1bGVzIHx8IFtdKV0pLmZsYXQoKTtcclxuICAgICAgICBjb25zdCBlbGVtZW50UnVsZXMgPSBydWxlcy5maWx0ZXIociA9PiByICYmIHIuc2VsZWN0b3JUZXh0ICYmIGVsZW1lbnQubWF0Y2hlcyhyLnNlbGVjdG9yVGV4dCkgJiYgci5zdHlsZS5sZW5ndGggJiYgci5zZWxlY3RvclRleHQuc3BsaXQoXCIsIFwiKS5sZW5ndGggPCA4ICYmICFyLnNlbGVjdG9yVGV4dC5zcGxpdChcIiwgXCIpLmluY2x1ZGVzKFwiKlwiKSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRSdWxlcztcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/developer/copyselector.js\n"); /***/ }), -/***/ "./src/builtins/developermode.js": +/***/ "./src/builtins/developer/debugger.js": +/*!********************************************!*\ + !*** ./src/builtins/developer/debugger.js ***! + \********************************************/ +/*! exports provided: default */ +/***/ (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\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class DeveloperMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"Debugger\";\n }\n\n get category() {\n return \"developer\";\n }\n\n get id() {\n return \"debuggerHotkey\";\n }\n\n enabled() {\n document.addEventListener(\"keydown\", this.debugListener);\n }\n\n disabled() {\n document.removeEventListener(\"keydown\", this.debugListener);\n }\n\n debugListener(e) {\n if (e.which === 119 || e.which == 118) {\n //F8\n debugger; // eslint-disable-line no-debugger\n\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2RldmVsb3Blci9kZWJ1Z2dlci5qcz9iZDVlIl0sIm5hbWVzIjpbIkRldmVsb3Blck1vZGUiLCJCdWlsdGluIiwibmFtZSIsImNhdGVnb3J5IiwiaWQiLCJlbmFibGVkIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiZGVidWdMaXN0ZW5lciIsImRpc2FibGVkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImUiLCJ3aGljaCIsInByZXZlbnREZWZhdWx0Iiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFZSxtRUFBSSxNQUFNQSxhQUFOLFNBQTRCQyx3REFBNUIsQ0FBb0M7QUFDbkQsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxVQUFQO0FBQW1COztBQUMvQixNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFdBQVA7QUFBb0I7O0FBQ3BDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8sZ0JBQVA7QUFBeUI7O0FBRW5DQyxTQUFPLEdBQUc7QUFDTkMsWUFBUSxDQUFDQyxnQkFBVCxDQUEwQixTQUExQixFQUFxQyxLQUFLQyxhQUExQztBQUNIOztBQUVEQyxVQUFRLEdBQUc7QUFDUEgsWUFBUSxDQUFDSSxtQkFBVCxDQUE2QixTQUE3QixFQUF3QyxLQUFLRixhQUE3QztBQUNIOztBQUVEQSxlQUFhLENBQUNHLENBQUQsRUFBSTtBQUNiLFFBQUlBLENBQUMsQ0FBQ0MsS0FBRixLQUFZLEdBQVosSUFBbUJELENBQUMsQ0FBQ0MsS0FBRixJQUFXLEdBQWxDLEVBQXVDO0FBQUU7QUFDckMsZUFEbUMsQ0FDekI7O0FBQ1ZELE9BQUMsQ0FBQ0UsY0FBRjtBQUNBRixPQUFDLENBQUNHLHdCQUFGO0FBQ0Y7QUFDTDs7QUFuQmtELENBQXhDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvZGV2ZWxvcGVyL2RlYnVnZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uLy4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERldmVsb3Blck1vZGUgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkRlYnVnZ2VyXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImRldmVsb3BlclwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJkZWJ1Z2dlckhvdGtleVwiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZGVidWdMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5kZWJ1Z0xpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWJ1Z0xpc3RlbmVyKGUpIHtcclxuICAgICAgICBpZiAoZS53aGljaCA9PT0gMTE5IHx8IGUud2hpY2ggPT0gMTE4KSB7IC8vRjhcclxuICAgICAgICAgICAgZGVidWdnZXI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZGVidWdnZXJcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICB9XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/developer/debugger.js\n"); + +/***/ }), + +/***/ "./src/builtins/developer/reactdevtools.js": +/*!*************************************************!*\ + !*** ./src/builtins/developer/reactdevtools.js ***! + \*************************************************/ +/*! exports provided: default */ +/***/ (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 _ui_modals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../ui/modals */ \"./src/ui/modals.js\");\n\n\n\nconst electron = __webpack_require__(/*! electron */ \"electron\");\n\nconst fs = __webpack_require__(/*! fs */ \"fs\");\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\nconst BrowserWindow = electron.remote.BrowserWindow;\nconst webContents = electron.remote.getCurrentWebContents();\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ReactDevTools extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"ReactDevTools\";\n }\n\n get category() {\n return \"developer\";\n }\n\n get id() {\n return \"reactDevTools\";\n }\n\n initialize() {\n super.initialize();\n this.findExtension();\n }\n\n findExtension() {\n let extensionPath = \"\";\n if (process.platform === \"win32\") extensionPath = path.resolve(process.env.LOCALAPPDATA, \"Google/Chrome/User Data\");else if (process.platform === \"linux\") extensionPath = path.resolve(process.env.HOME, \".config/google-chrome\");else if (process.platform === \"darwin\") extensionPath = path.resolve(process.env.HOME, \"Library/Application Support/Google/Chrome\");else extensionPath = path.resolve(process.env.HOME, \".config/chromium\");\n extensionPath += \"/Default/Extensions/fmkadmapgofadopljbjfkapdkoienihi/\";\n\n if (fs.existsSync(extensionPath)) {\n const versions = fs.readdirSync(extensionPath);\n extensionPath = path.resolve(extensionPath, versions[versions.length - 1]);\n }\n\n this.extensionPath = extensionPath;\n this.isExtensionInstalled = fs.existsSync(extensionPath);\n this.listener = this.listener.bind(this);\n }\n\n enabled() {\n if (!this.isExtensionInstalled) this.findExtension();\n if (!this.isExtensionInstalled) return _ui_modals__WEBPACK_IMPORTED_MODULE_1__[\"default\"].alert(\"Extension Not Found\", \"Unable to find the React Developer Tools extension on your PC. Please install the extension on your local Chrome installation.\");\n setImmediate(() => webContents.on(\"devtools-opened\", this.listener));\n if (webContents.isDevToolsOpened()) this.listener();\n }\n\n disabled() {\n webContents.removeListener(\"devtools-opened\", this.listener);\n }\n\n listener() {\n if (!this.isExtensionInstalled) return;\n BrowserWindow.removeDevToolsExtension(\"React Developer Tools\");\n const didInstall = BrowserWindow.addDevToolsExtension(this.extensionPath);\n if (didInstall) this.log(\"Successfully installed react devtools.\");else this.error(\"Couldn't find react devtools in chrome extensions!\");\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2RldmVsb3Blci9yZWFjdGRldnRvb2xzLmpzPzc5MzciXSwibmFtZXMiOlsiZWxlY3Ryb24iLCJyZXF1aXJlIiwiZnMiLCJwYXRoIiwiQnJvd3NlcldpbmRvdyIsInJlbW90ZSIsIndlYkNvbnRlbnRzIiwiZ2V0Q3VycmVudFdlYkNvbnRlbnRzIiwiUmVhY3REZXZUb29scyIsIkJ1aWx0aW4iLCJuYW1lIiwiY2F0ZWdvcnkiLCJpZCIsImluaXRpYWxpemUiLCJmaW5kRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uUGF0aCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsInJlc29sdmUiLCJlbnYiLCJMT0NBTEFQUERBVEEiLCJIT01FIiwiZXhpc3RzU3luYyIsInZlcnNpb25zIiwicmVhZGRpclN5bmMiLCJsZW5ndGgiLCJpc0V4dGVuc2lvbkluc3RhbGxlZCIsImxpc3RlbmVyIiwiYmluZCIsImVuYWJsZWQiLCJNb2RhbHMiLCJhbGVydCIsInNldEltbWVkaWF0ZSIsIm9uIiwiaXNEZXZUb29sc09wZW5lZCIsImRpc2FibGVkIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVEZXZUb29sc0V4dGVuc2lvbiIsImRpZEluc3RhbGwiLCJhZGREZXZUb29sc0V4dGVuc2lvbiIsImxvZyIsImVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBOztBQUdBLE1BQU1BLFFBQVEsR0FBR0MsbUJBQU8sQ0FBQywwQkFBRCxDQUF4Qjs7QUFDQSxNQUFNQyxFQUFFLEdBQUdELG1CQUFPLENBQUMsY0FBRCxDQUFsQjs7QUFDQSxNQUFNRSxJQUFJLEdBQUdGLG1CQUFPLENBQUMsa0JBQUQsQ0FBcEI7O0FBRUEsTUFBTUcsYUFBYSxHQUFHSixRQUFRLENBQUNLLE1BQVQsQ0FBZ0JELGFBQXRDO0FBQ0EsTUFBTUUsV0FBVyxHQUFHTixRQUFRLENBQUNLLE1BQVQsQ0FBZ0JFLHFCQUFoQixFQUFwQjtBQUVlLG1FQUFJLE1BQU1DLGFBQU4sU0FBNEJDLHdEQUE1QixDQUFvQztBQUNuRCxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLGVBQVA7QUFBd0I7O0FBQ3BDLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sV0FBUDtBQUFvQjs7QUFDcEMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxlQUFQO0FBQXdCOztBQUVsQ0MsWUFBVSxHQUFHO0FBQ1QsVUFBTUEsVUFBTjtBQUNBLFNBQUtDLGFBQUw7QUFDSDs7QUFFREEsZUFBYSxHQUFHO0FBQ1osUUFBSUMsYUFBYSxHQUFHLEVBQXBCO0FBQ0EsUUFBSUMsT0FBTyxDQUFDQyxRQUFSLEtBQXFCLE9BQXpCLEVBQWtDRixhQUFhLEdBQUdaLElBQUksQ0FBQ2UsT0FBTCxDQUFhRixPQUFPLENBQUNHLEdBQVIsQ0FBWUMsWUFBekIsRUFBdUMseUJBQXZDLENBQWhCLENBQWxDLEtBQ0ssSUFBSUosT0FBTyxDQUFDQyxRQUFSLEtBQXFCLE9BQXpCLEVBQWtDRixhQUFhLEdBQUdaLElBQUksQ0FBQ2UsT0FBTCxDQUFhRixPQUFPLENBQUNHLEdBQVIsQ0FBWUUsSUFBekIsRUFBK0IsdUJBQS9CLENBQWhCLENBQWxDLEtBQ0EsSUFBSUwsT0FBTyxDQUFDQyxRQUFSLEtBQXFCLFFBQXpCLEVBQW1DRixhQUFhLEdBQUdaLElBQUksQ0FBQ2UsT0FBTCxDQUFhRixPQUFPLENBQUNHLEdBQVIsQ0FBWUUsSUFBekIsRUFBK0IsMkNBQS9CLENBQWhCLENBQW5DLEtBQ0FOLGFBQWEsR0FBR1osSUFBSSxDQUFDZSxPQUFMLENBQWFGLE9BQU8sQ0FBQ0csR0FBUixDQUFZRSxJQUF6QixFQUErQixrQkFBL0IsQ0FBaEI7QUFDTE4saUJBQWEsSUFBSSx1REFBakI7O0FBQ0EsUUFBSWIsRUFBRSxDQUFDb0IsVUFBSCxDQUFjUCxhQUFkLENBQUosRUFBa0M7QUFDOUIsWUFBTVEsUUFBUSxHQUFHckIsRUFBRSxDQUFDc0IsV0FBSCxDQUFlVCxhQUFmLENBQWpCO0FBQ0FBLG1CQUFhLEdBQUdaLElBQUksQ0FBQ2UsT0FBTCxDQUFhSCxhQUFiLEVBQTRCUSxRQUFRLENBQUNBLFFBQVEsQ0FBQ0UsTUFBVCxHQUFrQixDQUFuQixDQUFwQyxDQUFoQjtBQUNIOztBQUNELFNBQUtWLGFBQUwsR0FBcUJBLGFBQXJCO0FBQ0EsU0FBS1csb0JBQUwsR0FBNEJ4QixFQUFFLENBQUNvQixVQUFILENBQWNQLGFBQWQsQ0FBNUI7QUFDQSxTQUFLWSxRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBY0MsSUFBZCxDQUFtQixJQUFuQixDQUFoQjtBQUNIOztBQUVEQyxTQUFPLEdBQUc7QUFDTixRQUFJLENBQUMsS0FBS0gsb0JBQVYsRUFBZ0MsS0FBS1osYUFBTDtBQUNoQyxRQUFJLENBQUMsS0FBS1ksb0JBQVYsRUFBZ0MsT0FBT0ksa0RBQU0sQ0FBQ0MsS0FBUCxDQUFhLHFCQUFiLEVBQW9DLGdJQUFwQyxDQUFQO0FBQ2hDQyxnQkFBWSxDQUFDLE1BQU0xQixXQUFXLENBQUMyQixFQUFaLENBQWUsaUJBQWYsRUFBa0MsS0FBS04sUUFBdkMsQ0FBUCxDQUFaO0FBQ0EsUUFBSXJCLFdBQVcsQ0FBQzRCLGdCQUFaLEVBQUosRUFBb0MsS0FBS1AsUUFBTDtBQUN2Qzs7QUFFRFEsVUFBUSxHQUFHO0FBQ1A3QixlQUFXLENBQUM4QixjQUFaLENBQTJCLGlCQUEzQixFQUE4QyxLQUFLVCxRQUFuRDtBQUNIOztBQUVEQSxVQUFRLEdBQUc7QUFDUCxRQUFJLENBQUMsS0FBS0Qsb0JBQVYsRUFBZ0M7QUFDaEN0QixpQkFBYSxDQUFDaUMsdUJBQWQsQ0FBc0MsdUJBQXRDO0FBQ0EsVUFBTUMsVUFBVSxHQUFHbEMsYUFBYSxDQUFDbUMsb0JBQWQsQ0FBbUMsS0FBS3hCLGFBQXhDLENBQW5CO0FBRUEsUUFBSXVCLFVBQUosRUFBZ0IsS0FBS0UsR0FBTCxDQUFTLHdDQUFULEVBQWhCLEtBQ0ssS0FBS0MsS0FBTCxDQUFXLG9EQUFYO0FBQ1I7O0FBNUNrRCxDQUF4QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2RldmVsb3Blci9yZWFjdGRldnRvb2xzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uLy4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQgTW9kYWxzIGZyb20gXCIuLi8uLi91aS9tb2RhbHNcIjtcclxuXHJcblxyXG5jb25zdCBlbGVjdHJvbiA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuXHJcbmNvbnN0IEJyb3dzZXJXaW5kb3cgPSBlbGVjdHJvbi5yZW1vdGUuQnJvd3NlcldpbmRvdztcclxuY29uc3Qgd2ViQ29udGVudHMgPSBlbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgUmVhY3REZXZUb29scyBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiUmVhY3REZXZUb29sc1wiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJkZXZlbG9wZXJcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwicmVhY3REZXZUb29sc1wiO31cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcclxuICAgICAgICB0aGlzLmZpbmRFeHRlbnNpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBmaW5kRXh0ZW5zaW9uKCkge1xyXG4gICAgICAgIGxldCBleHRlbnNpb25QYXRoID0gXCJcIjtcclxuICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSBleHRlbnNpb25QYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52LkxPQ0FMQVBQREFUQSwgXCJHb29nbGUvQ2hyb21lL1VzZXIgRGF0YVwiKTtcclxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcImxpbnV4XCIpIGV4dGVuc2lvblBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuSE9NRSwgXCIuY29uZmlnL2dvb2dsZS1jaHJvbWVcIik7XHJcbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIikgZXh0ZW5zaW9uUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmVudi5IT01FLCBcIkxpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9Hb29nbGUvQ2hyb21lXCIpO1xyXG4gICAgICAgIGVsc2UgZXh0ZW5zaW9uUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmVudi5IT01FLCBcIi5jb25maWcvY2hyb21pdW1cIik7XHJcbiAgICAgICAgZXh0ZW5zaW9uUGF0aCArPSBcIi9EZWZhdWx0L0V4dGVuc2lvbnMvZm1rYWRtYXBnb2ZhZG9wbGpiamZrYXBka29pZW5paGkvXCI7XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZXh0ZW5zaW9uUGF0aCkpIHtcclxuICAgICAgICAgICAgY29uc3QgdmVyc2lvbnMgPSBmcy5yZWFkZGlyU3luYyhleHRlbnNpb25QYXRoKTtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uUGF0aCA9IHBhdGgucmVzb2x2ZShleHRlbnNpb25QYXRoLCB2ZXJzaW9uc1t2ZXJzaW9ucy5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uUGF0aCA9IGV4dGVuc2lvblBhdGg7XHJcbiAgICAgICAgdGhpcy5pc0V4dGVuc2lvbkluc3RhbGxlZCA9IGZzLmV4aXN0c1N5bmMoZXh0ZW5zaW9uUGF0aCk7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lciA9IHRoaXMubGlzdGVuZXIuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0V4dGVuc2lvbkluc3RhbGxlZCkgdGhpcy5maW5kRXh0ZW5zaW9uKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRXh0ZW5zaW9uSW5zdGFsbGVkKSByZXR1cm4gTW9kYWxzLmFsZXJ0KFwiRXh0ZW5zaW9uIE5vdCBGb3VuZFwiLCBcIlVuYWJsZSB0byBmaW5kIHRoZSBSZWFjdCBEZXZlbG9wZXIgVG9vbHMgZXh0ZW5zaW9uIG9uIHlvdXIgUEMuIFBsZWFzZSBpbnN0YWxsIHRoZSBleHRlbnNpb24gb24geW91ciBsb2NhbCBDaHJvbWUgaW5zdGFsbGF0aW9uLlwiKTtcclxuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4gd2ViQ29udGVudHMub24oXCJkZXZ0b29scy1vcGVuZWRcIiwgdGhpcy5saXN0ZW5lcikpO1xyXG4gICAgICAgIGlmICh3ZWJDb250ZW50cy5pc0RldlRvb2xzT3BlbmVkKCkpIHRoaXMubGlzdGVuZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICB3ZWJDb250ZW50cy5yZW1vdmVMaXN0ZW5lcihcImRldnRvb2xzLW9wZW5lZFwiLCB0aGlzLmxpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBsaXN0ZW5lcigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNFeHRlbnNpb25JbnN0YWxsZWQpIHJldHVybjtcclxuICAgICAgICBCcm93c2VyV2luZG93LnJlbW92ZURldlRvb2xzRXh0ZW5zaW9uKFwiUmVhY3QgRGV2ZWxvcGVyIFRvb2xzXCIpO1xyXG4gICAgICAgIGNvbnN0IGRpZEluc3RhbGwgPSBCcm93c2VyV2luZG93LmFkZERldlRvb2xzRXh0ZW5zaW9uKHRoaXMuZXh0ZW5zaW9uUGF0aCk7XHJcblxyXG4gICAgICAgIGlmIChkaWRJbnN0YWxsKSB0aGlzLmxvZyhcIlN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgcmVhY3QgZGV2dG9vbHMuXCIpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5lcnJvcihcIkNvdWxkbid0IGZpbmQgcmVhY3QgZGV2dG9vbHMgaW4gY2hyb21lIGV4dGVuc2lvbnMhXCIpO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/developer/reactdevtools.js\n"); + +/***/ }), + +/***/ "./src/builtins/emotes/emoteautocaps.js": +/*!**********************************************!*\ + !*** ./src/builtins/emotes/emoteautocaps.js ***! + \**********************************************/ +/*! exports provided: default */ +/***/ (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/emotes.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteAutocaps extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"EmoteAutocapitalize\";\n }\n\n get collection() {\n return \"emotes\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"autoCaps\";\n }\n\n enabled() {\n $(\"body\").off(\".bdac\");\n $(\"body\").on(\"keyup.bdac change.bdac paste.bdac\", $(\".channelTextArea-1LDbYG textarea:first\"), () => {\n const text = $(\".channelTextArea-1LDbYG textarea:first\").val();\n if (text == undefined) return;\n const lastWord = text.split(\" \").pop();\n\n if (lastWord.length > 3) {\n if (lastWord == \"danSgame\") return;\n const ret = this.capitalize(lastWord.toLowerCase());\n\n if (ret !== null && ret !== undefined) {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].insertText(modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].getTextArea()[0], text.replace(lastWord, ret));\n }\n }\n });\n }\n\n disabled() {\n $(\"body\").off(\".bdac\");\n }\n\n capitalize(value) {\n const res = _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\");\n\n for (const p in res) {\n if (res.hasOwnProperty(p) && value == (p + \"\").toLowerCase()) {\n return p;\n }\n }\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy9lbW90ZWF1dG9jYXBzLmpzPzkwMWQiXSwibmFtZXMiOlsiRW1vdGVBdXRvY2FwcyIsIkJ1aWx0aW4iLCJuYW1lIiwiY29sbGVjdGlvbiIsImNhdGVnb3J5IiwiaWQiLCJlbmFibGVkIiwiJCIsIm9mZiIsIm9uIiwidGV4dCIsInZhbCIsInVuZGVmaW5lZCIsImxhc3RXb3JkIiwic3BsaXQiLCJwb3AiLCJsZW5ndGgiLCJyZXQiLCJjYXBpdGFsaXplIiwidG9Mb3dlckNhc2UiLCJVdGlsaXRpZXMiLCJpbnNlcnRUZXh0IiwiZ2V0VGV4dEFyZWEiLCJyZXBsYWNlIiwiZGlzYWJsZWQiLCJ2YWx1ZSIsInJlcyIsIkVtb3RlTW9kdWxlIiwiZ2V0Q2F0ZWdvcnkiLCJwIiwiaGFzT3duUHJvcGVydHkiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBRWUsbUVBQUksTUFBTUEsYUFBTixTQUE0QkMsd0RBQTVCLENBQW9DO0FBQ25ELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8scUJBQVA7QUFBOEI7O0FBQzFDLE1BQUlDLFVBQUosR0FBaUI7QUFBQyxXQUFPLFFBQVA7QUFBaUI7O0FBQ25DLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sU0FBUDtBQUFrQjs7QUFDbEMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxVQUFQO0FBQW1COztBQUU3QkMsU0FBTyxHQUFHO0FBQ05DLEtBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVUMsR0FBVixDQUFjLE9BQWQ7QUFDQUQsS0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVRSxFQUFWLENBQWEsbUNBQWIsRUFBa0RGLENBQUMsQ0FBQyx3Q0FBRCxDQUFuRCxFQUErRixNQUFNO0FBQ2pHLFlBQU1HLElBQUksR0FBR0gsQ0FBQyxDQUFDLHdDQUFELENBQUQsQ0FBNENJLEdBQTVDLEVBQWI7QUFDQSxVQUFJRCxJQUFJLElBQUlFLFNBQVosRUFBdUI7QUFFdkIsWUFBTUMsUUFBUSxHQUFHSCxJQUFJLENBQUNJLEtBQUwsQ0FBVyxHQUFYLEVBQWdCQyxHQUFoQixFQUFqQjs7QUFDQSxVQUFJRixRQUFRLENBQUNHLE1BQVQsR0FBa0IsQ0FBdEIsRUFBeUI7QUFDckIsWUFBSUgsUUFBUSxJQUFJLFVBQWhCLEVBQTRCO0FBQzVCLGNBQU1JLEdBQUcsR0FBRyxLQUFLQyxVQUFMLENBQWdCTCxRQUFRLENBQUNNLFdBQVQsRUFBaEIsQ0FBWjs7QUFDQSxZQUFJRixHQUFHLEtBQUssSUFBUixJQUFnQkEsR0FBRyxLQUFLTCxTQUE1QixFQUF1QztBQUNuQ1EsMkRBQVMsQ0FBQ0MsVUFBVixDQUFxQkQsaURBQVMsQ0FBQ0UsV0FBVixHQUF3QixDQUF4QixDQUFyQixFQUFpRFosSUFBSSxDQUFDYSxPQUFMLENBQWFWLFFBQWIsRUFBdUJJLEdBQXZCLENBQWpEO0FBQ0g7QUFDSjtBQUNKLEtBWkQ7QUFhSDs7QUFFRE8sVUFBUSxHQUFHO0FBQ1BqQixLQUFDLENBQUMsTUFBRCxDQUFELENBQVVDLEdBQVYsQ0FBYyxPQUFkO0FBQ0g7O0FBRURVLFlBQVUsQ0FBQ08sS0FBRCxFQUFRO0FBQ2QsVUFBTUMsR0FBRyxHQUFHQywrQ0FBVyxDQUFDQyxXQUFaLENBQXdCLGNBQXhCLENBQVo7O0FBQ0EsU0FBSyxNQUFNQyxDQUFYLElBQWdCSCxHQUFoQixFQUFxQjtBQUNqQixVQUFJQSxHQUFHLENBQUNJLGNBQUosQ0FBbUJELENBQW5CLEtBQXlCSixLQUFLLElBQUksQ0FBQ0ksQ0FBQyxHQUFHLEVBQUwsRUFBU1YsV0FBVCxFQUF0QyxFQUE4RDtBQUMxRCxlQUFPVSxDQUFQO0FBQ0g7QUFDSjtBQUNKOztBQWxDa0QsQ0FBeEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9lbW90ZXMvZW1vdGVhdXRvY2Fwcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuXHJcbmltcG9ydCB7VXRpbGl0aWVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IEVtb3RlTW9kdWxlIGZyb20gXCIuL2Vtb3Rlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb3RlQXV0b2NhcHMgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkVtb3RlQXV0b2NhcGl0YWxpemVcIjt9XHJcbiAgICBnZXQgY29sbGVjdGlvbigpIHtyZXR1cm4gXCJlbW90ZXNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJhdXRvQ2Fwc1wiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgICQoXCJib2R5XCIpLm9mZihcIi5iZGFjXCIpO1xyXG4gICAgICAgICQoXCJib2R5XCIpLm9uKFwia2V5dXAuYmRhYyBjaGFuZ2UuYmRhYyBwYXN0ZS5iZGFjXCIsICQoXCIuY2hhbm5lbFRleHRBcmVhLTFMRGJZRyB0ZXh0YXJlYTpmaXJzdFwiKSwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gJChcIi5jaGFubmVsVGV4dEFyZWEtMUxEYllHIHRleHRhcmVhOmZpcnN0XCIpLnZhbCgpO1xyXG4gICAgICAgICAgICBpZiAodGV4dCA9PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RXb3JkID0gdGV4dC5zcGxpdChcIiBcIikucG9wKCk7XHJcbiAgICAgICAgICAgIGlmIChsYXN0V29yZC5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdFdvcmQgPT0gXCJkYW5TZ2FtZVwiKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXQgPSB0aGlzLmNhcGl0YWxpemUobGFzdFdvcmQudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmV0ICE9PSBudWxsICYmIHJldCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbGl0aWVzLmluc2VydFRleHQoVXRpbGl0aWVzLmdldFRleHRBcmVhKClbMF0sIHRleHQucmVwbGFjZShsYXN0V29yZCwgcmV0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICAkKFwiYm9keVwiKS5vZmYoXCIuYmRhY1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBjYXBpdGFsaXplKHZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gRW1vdGVNb2R1bGUuZ2V0Q2F0ZWdvcnkoXCJUd2l0Y2hHbG9iYWxcIik7XHJcbiAgICAgICAgZm9yIChjb25zdCBwIGluIHJlcykge1xyXG4gICAgICAgICAgICBpZiAocmVzLmhhc093blByb3BlcnR5KHApICYmIHZhbHVlID09IChwICsgXCJcIikudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/emotes/emoteautocaps.js\n"); + +/***/ }), + +/***/ "./src/builtins/emotes/emotemenu.js": +/*!******************************************!*\ + !*** ./src/builtins/emotes/emotemenu.js ***! + \******************************************/ +/*! exports provided: default */ +/***/ (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/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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy9lbW90ZW1lbnUuanM/ZjIyZSJdLCJuYW1lcyI6WyJoZWFkZXJIVE1MIiwidHdpdGNoRW1vdGVIVE1MIiwiZmF2b3JpdGVzSFRNTCIsIm1ha2VFbW90ZSIsImVtb3RlIiwidXJsIiwib3B0aW9ucyIsIm9uQ29udGV4dE1lbnUiLCJvbkNsaWNrIiwiZW1vdGVDb250YWluZXIiLCJVdGlsaXRpZXMiLCJwYXJzZUhUTUwiLCJhZGRFdmVudExpc3RlbmVyIiwiRW1vdGVNZW51IiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImhpZGVFbW9qaXNJRCIsImhpZGVFbW9qaXMiLCJnZXQiLCJjb25zdHJ1Y3RvciIsImxhc3RUYWIiLCJxbWVIZWFkZXIiLCJidXR0b24iLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN3aXRjaE1lbnUiLCJiaW5kIiwidGVDb250YWluZXIiLCJ0ZUNvbnRhaW5lcklubmVyIiwicXVlcnlTZWxlY3RvciIsImZhQ29udGFpbmVyIiwiZmFDb250YWluZXJJbm5lciIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm11dGF0aW9uIiwib2JzZXJ2ZSIsImVuYWJsZUhpZGVFbW9qaXMiLCJkaXNhYmxlSGlkZUVtb2ppcyIsInVwZGF0ZVR3aXRjaEVtb3RlcyIsImVuYWJsZWQiLCJsb2ciLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImhpZGVFbW9qaUNhbmNlbCIsInJlZ2lzdGVyU2V0dGluZyIsIkVtb3RlTW9kdWxlIiwiZW1vdGVzTG9hZGVkIiwidXBkYXRlRmF2b3JpdGVzIiwiRXZlbnRzIiwib24iLCJkaXNhYmxlZCIsIm9mZiIsImRpc2Nvbm5lY3QiLCJwaWNrZXIiLCJjbGFzc0xpc3QiLCJhZGQiLCJyZW1vdmUiLCJpbnNlcnRFbW90ZSIsInRhIiwiZ2V0VGV4dEFyZWEiLCJpbnNlcnRUZXh0IiwidmFsIiwic2xpY2UiLCJmYXZDb250ZXh0IiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsImVtIiwidGFyZ2V0IiwiY2xvc2VzdCIsImNoaWxkcmVuIiwibWVudSIsIiQiLCJjc3MiLCJ0b3AiLCJwYWdlWSIsIm9mZnNldCIsImxlZnQiLCJwYWdlWCIsInBhcmVudCIsImFwcGVuZCIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJyZW1vdmVGYXZvcml0ZSIsImF0dHIiLCJ0d2l0Y2giLCJmYXYiLCJlbW9qaXMiLCJyZW1vdmVDbGFzcyIsImhpZGUiLCJhZGRDbGFzcyIsInNob3ciLCJmb2N1cyIsImFkZGVkTm9kZXMiLCJsZW5ndGgiLCJFbGVtZW50Iiwibm9kZSIsImNvbnRhaW5zIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInBhcmVudEVsZW1lbnQiLCJwcmVwZW5kIiwiZmlyc3RDaGlsZCIsImdldENhdGVnb3J5IiwiaGFzT3duUHJvcGVydHkiLCJnZXRVcmwiLCJlbW90ZUVsZW1lbnQiLCJmYXZvcml0ZXMiLCJzYXZlRmF2b3JpdGVzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUVBLE1BQU1BLFVBQVUsR0FBSTs7OztPQUFwQjtBQU1BLE1BQU1DLGVBQWUsR0FBSTs7Ozs7Ozs7T0FBekI7QUFVQSxNQUFNQyxhQUFhLEdBQUk7Ozs7Ozs7O09BQXZCOztBQVVBLE1BQU1DLFNBQVMsR0FBRyxDQUFDQyxLQUFELEVBQVFDLEdBQVIsRUFBYUMsT0FBTyxHQUFHLEVBQXZCLEtBQThCO0FBQzVDLFFBQU07QUFBQ0MsaUJBQUQ7QUFBZ0JDO0FBQWhCLE1BQTJCRixPQUFqQztBQUNBLFFBQU1HLGNBQWMsR0FBR0MsaURBQVMsQ0FBQ0MsU0FBVixDQUFxQjt1Q0FDVFAsS0FBTSxVQUFTQyxHQUFJLFlBQVdELEtBQU07V0FEaEQsQ0FBdkI7QUFHQSxNQUFJRyxhQUFKLEVBQW1CRSxjQUFjLENBQUNHLGdCQUFmLENBQWdDLGFB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QyxHQUFHLEdBQUc2QywrQ0FBVyxDQUFDMEQsTUFBWixDQUFtQixjQUFuQixFQUFtQ3hHLEtBQW5DLENBQVo7QUFDQSxZQUFNeUcsWUFBWSxHQUFHMUcsU0FBUyxDQUFDQyxLQUFELEVBQVFDLEdBQVIsRUFBYTtBQUFDRyxlQUFPLEVBQUUsS0FBS3NELFdBQUwsQ0FBaUJsQyxJQUFqQixDQUFzQixJQUF0QixFQUE0QnhCLEtBQTVCO0FBQVYsT0FBYixDQUE5QjtBQUNBLFdBQUswQixnQkFBTCxDQUFzQnNELE1BQXRCLENBQTZCeUIsWUFBN0I7QUFDSDtBQUNKOztBQUVEekQsaUJBQWUsR0FBRztBQUNkLFdBQU8sS0FBS25CLGdCQUFMLENBQXNCd0UsVUFBN0IsRUFBeUMsS0FBS3hFLGdCQUFMLENBQXNCd0UsVUFBdEIsQ0FBaUM1QyxNQUFqQzs7QUFDekMsU0FBSyxNQUFNekQsS0FBWCxJQUFvQjhDLCtDQUFXLENBQUM0RCxTQUFoQyxFQUEyQztBQUN2QyxZQUFNekcsR0FBRyxHQUFHNkMsK0NBQVcsQ0FBQzRELFNBQVosQ0FBc0IxRyxLQUF0QixDQUFaO0FBQ0EsWUFBTXlHLFlBQVksR0FBRzFHLFNBQVMsQ0FBQ0MsS0FBRCxFQUFRQyxHQUFSLEVBQWE7QUFBQ0csZUFBTyxFQUFFLEtBQUtzRCxXQUFMLENBQWlCbEMsSUFBakIsQ0FBc0IsSUFBdEIsRUFBNEJ4QixLQUE1QixDQUFWO0FBQThDRyxxQkFBYSxFQUFFLEtBQUs2RCxVQUFMLENBQWdCeEMsSUFBaEIsQ0FBcUIsSUFBckI7QUFBN0QsT0FBYixDQUE5QjtBQUNBLFdBQUtLLGdCQUFMLENBQXNCbUQsTUFBdEIsQ0FBNkJ5QixZQUE3QjtBQUNIOztBQUNEM0QsbURBQVcsQ0FBQzZELGFBQVo7QUFDSDs7QUF6SjhDLENBQXBDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvZW1vdGVzL2Vtb3RlbWVudS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtVdGlsaXRpZXMsIEV2ZW50c30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBFbW90ZU1vZHVsZSBmcm9tIFwiLi9lbW90ZXNcIjtcclxuXHJcbmNvbnN0IGhlYWRlckhUTUwgPSBgPGRpdiBpZD1cImJkLXFlbVwiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImFjdGl2ZVwiIGlkPVwiYmQtcWVtLXR3aXRjaFwiPlR3aXRjaDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImJkLXFlbS1mYXZvdXJpdGVcIj5GYXZvdXJpdGU8L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJiZC1xZW0tZW1vamlzXCI+RW1vamlzPC9idXR0b25kPlxyXG48L2Rpdj5gO1xyXG5cclxuY29uc3QgdHdpdGNoRW1vdGVIVE1MID0gYDxkaXYgaWQ9XCJiZC1xZW0tdHdpdGNoLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgc2Nyb2xsZXJXcmFwLTJsSkVrZCBmYWRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyIHNjcm9sbGVyLTJGS0ZQR1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vdGUtbWVudS1pbm5lclwiPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+YDtcclxuXHJcbmNvbnN0IGZhdm9yaXRlc0hUTUwgPSBgPGRpdiBpZD1cImJkLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBzY3JvbGxlcldyYXAtMmxKRWtkIGZhZGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXIgc2Nyb2xsZXItMkZLRlBHXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbW90ZS1tZW51LWlubmVyXCI+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5gO1xyXG5cclxuY29uc3QgbWFrZUVtb3RlID0gKGVtb3RlLCB1cmwsIG9wdGlvbnMgPSB7fSkgPT4ge1xyXG4gICAgY29uc3Qge29uQ29udGV4dE1lbnUsIG9uQ2xpY2t9ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IGVtb3RlQ29udGFpbmVyID0gVXRpbGl0aWVzLnBhcnNlSFRNTChgPGRpdiBjbGFzcz1cImVtb3RlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxpbWcgY2xhc3M9XCJlbW90ZS1pY29uXCIgYWx0PVwiJHtlbW90ZX1cIiBzcmM9XCIke3VybH1cIiB0aXRsZT1cIiR7ZW1vdGV9XCI+XHJcbiAgICA8L2Rpdj5gKTtcclxuICAgIGlmIChvbkNvbnRleHRNZW51KSBlbW90ZUNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgb25Db250ZXh0TWVudSk7XHJcbiAgICBlbW90ZUNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljayk7XHJcbiAgICByZXR1cm4gZW1vdGVDb250YWluZXI7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vdGVNZW51IGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJFbW90ZU1lbnVcIjt9XHJcbiAgICBnZXQgY29sbGVjdGlvbigpIHtyZXR1cm4gXCJlbW90ZXNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJlbW90ZU1lbnVcIjt9XHJcbiAgICBnZXQgaGlkZUVtb2ppc0lEKCkge3JldHVybiBcImhpZGVFbW9qaU1lbnVcIjt9XHJcbiAgICBnZXQgaGlkZUVtb2ppcygpIHtyZXR1cm4gdGhpcy5nZXQodGhpcy5oaWRlRW1vamlzSUQpO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubGFzdFRhYiA9IFwiYmQtcWVtLWVtb2ppc1wiO1xyXG5cclxuICAgICAgICB0aGlzLnFtZUhlYWRlciA9IFV0aWxpdGllcy5wYXJzZUhUTUwoaGVhZGVySFRNTCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgdGhpcy5xbWVIZWFkZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJidXR0b25cIikpIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5zd2l0Y2hNZW51LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICB0aGlzLnRlQ29udGFpbmVyID0gVXRpbGl0aWVzLnBhcnNlSFRNTCh0d2l0Y2hFbW90ZUhUTUwpO1xyXG4gICAgICAgIHRoaXMudGVDb250YWluZXJJbm5lciA9IHRoaXMudGVDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5lbW90ZS1tZW51LWlubmVyXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmZhQ29udGFpbmVyID0gVXRpbGl0aWVzLnBhcnNlSFRNTChmYXZvcml0ZXNIVE1MKTtcclxuICAgICAgICB0aGlzLmZhQ29udGFpbmVySW5uZXIgPSB0aGlzLmZhQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZW1vdGUtbWVudS1pbm5lclwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG11dGF0aW9ucyA9PiB7Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHRoaXMub2JzZXJ2ZShtdXRhdGlvbik7fSk7XHJcbiAgICAgICAgdGhpcy5lbmFibGVIaWRlRW1vamlzID0gdGhpcy5lbmFibGVIaWRlRW1vamlzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlSGlkZUVtb2ppcyA9IHRoaXMuZGlzYWJsZUhpZGVFbW9qaXMuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVR3aXRjaEVtb3RlcyA9IHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHtcclxuICAgICAgICB0aGlzLmxvZyhcIlN0YXJ0aW5nIHRvIG9ic2VydmVcIik7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBwLW1vdW50XCIpLCB7XHJcbiAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaGlkZUVtb2ppQ2FuY2VsID0gdGhpcy5yZWdpc3RlclNldHRpbmcodGhpcy5oaWRlRW1vamlzSUQsIHRoaXMuZW5hYmxlSGlkZUVtb2ppcywgdGhpcy5kaXNhYmxlSGlkZUVtb2ppcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUVtb2ppcykgdGhpcy5lbmFibGVIaWRlRW1vamlzKCk7XHJcbiAgICAgICAgaWYgKEVtb3RlTW9kdWxlLmVtb3Rlc0xvYWRlZCkgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZhdm9yaXRlcygpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcImVtb3Rlcy1sb2FkZWRcIiwgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIEV2ZW50cy5vZmYoXCJlbW90ZXMtbG9hZGVkXCIsIHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzKTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVIaWRlRW1vamlzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUVtb2ppQ2FuY2VsKSB0aGlzLmhpZGVFbW9qaUNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZUhpZGVFbW9qaXMoKSB7XHJcbiAgICAgICAgY29uc3QgcGlja2VyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5lbW9qaVBpY2tlci0zbTFTLWpcIik7XHJcbiAgICAgICAgaWYgKHBpY2tlcikgcGlja2VyLmNsYXNzTGlzdC5hZGQoXCJiZC1xbWUtaGlkZGVuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVIaWRlRW1vamlzKCkge1xyXG4gICAgICAgIGNvbnN0IHBpY2tlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpO1xyXG4gICAgICAgIGlmIChwaWNrZXIpIHBpY2tlci5jbGFzc0xpc3QucmVtb3ZlKFwiYmQtcW1lLWhpZGRlblwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcnRFbW90ZShlbW90ZSkge1xyXG4gICAgICAgIGNvbnN0IHRhID0gVXRpbGl0aWVzLmdldFRleHRBcmVhKCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLmluc2VydFRleHQodGFbMF0sIHRhLnZhbCgpLnNsaWNlKC0xKSA9PSBcIiBcIiA/IHRhLnZhbCgpICsgZW1vdGUgOiB0YS52YWwoKSArIFwiIFwiICsgZW1vdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGZhdkNvbnRleHQoZSkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgZW0gPSBlLnRhcmdldC5jbG9zZXN0KFwiLmVtb3RlLWNvbnRhaW5lclwiKS5jaGlsZHJlblswXTtcclxuICAgICAgICBjb25zdCBtZW51ID0gJChgPGRpdiBpZD1cInJlbW92ZW1lbnVcIiBjbGFzcz1cImJkLWNvbnRleHQtbWVudSBjb250ZXh0LW1lbnUgdGhlbWUtZGFya1wiPlJlbW92ZTwvZGl2PmApO1xyXG4gICAgICAgIG1lbnUuY3NzKHtcclxuICAgICAgICAgICAgdG9wOiBlLnBhZ2VZIC0gJChcIiNiZC1xZW0tZmF2b3VyaXRlLWNvbnRhaW5lclwiKS5vZmZzZXQoKS50b3AsXHJcbiAgICAgICAgICAgIGxlZnQ6IGUucGFnZVggLSAkKFwiI2JkLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLm9mZnNldCgpLmxlZnRcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKGVtKS5wYXJlbnQoKS5hcHBlbmQobWVudSk7XHJcbiAgICAgICAgbWVudS5vbihcImNsaWNrXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgJChlbSkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIEVtb3RlTW9kdWxlLnJlbW92ZUZhdm9yaXRlKCQoZW0pLmF0dHIoXCJ0aXRsZVwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmF2b3JpdGVzKCk7XHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZihcIm1vdXNlZG93bi5lbW90ZW1lbnVcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChkb2N1bWVudCkub24oXCJtb3VzZWRvd24uZW1vdGVtZW51XCIsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQuaWQgPT0gXCJyZW1vdmVtZW51XCIpIHJldHVybjtcclxuICAgICAgICAgICAgJChcIiNyZW1vdmVtZW51XCIpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCJtb3VzZWRvd24uZW1vdGVtZW51XCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaE1lbnUoZSkge1xyXG4gICAgICAgIGxldCBpZCA9IHR5cGVvZihlKSA9PSBcInN0cmluZ1wiID8gZSA6IGUudGFyZ2V0LmlkO1xyXG4gICAgICAgIGlmIChpZCA9PSBcImJkLXFlbS1lbW9qaXNcIiAmJiB0aGlzLmhpZGVFbW9qaXMpIGlkID0gXCJiZC1xZW0tZmF2b3VyaXRlXCI7XHJcbiAgICAgICAgY29uc3QgdHdpdGNoID0gJChcIiNiZC1xZW0tdHdpdGNoXCIpO1xyXG4gICAgICAgIGNvbnN0IGZhdiA9ICQoXCIjYmQtcWVtLWZhdm91cml0ZVwiKTtcclxuICAgICAgICBjb25zdCBlbW9qaXMgPSAkKFwiI2JkLXFlbS1lbW9qaXNcIik7XHJcbiAgICAgICAgdHdpdGNoLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGZhdi5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICBlbW9qaXMucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgICAgICQoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLmhpZGUoKTtcclxuICAgICAgICAkKFwiI2JkLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLmhpZGUoKTtcclxuICAgICAgICAkKFwiI2JkLXFlbS10d2l0Y2gtY29udGFpbmVyXCIpLmhpZGUoKTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYmQtcWVtLXR3aXRjaFwiOlxyXG4gICAgICAgICAgICAgICAgdHdpdGNoLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNiZC1xZW0tdHdpdGNoLWNvbnRhaW5lclwiKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImJkLXFlbS1mYXZvdXJpdGVcIjpcclxuICAgICAgICAgICAgICAgIGZhdi5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICQoXCIjYmQtcWVtLWZhdm91cml0ZS1jb250YWluZXJcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJiZC1xZW0tZW1vamlzXCI6XHJcbiAgICAgICAgICAgICAgICBlbW9qaXMuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAkKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAkKFwiLmVtb2ppUGlja2VyLTNtMVMtaiBpbnB1dFwiKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCkgdGhpcy5sYXN0VGFiID0gaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgb2JzZXJ2ZShtdXRhdGlvbikge1xyXG4gICAgICAgIGlmICghbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggfHwgIShtdXRhdGlvbi5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gbXV0YXRpb24uYWRkZWROb2Rlc1swXTtcclxuICAgICAgICAvLyBpZiAoIW5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwicG9wb3V0LTJpV0FjLVwiKSB8fCBub2RlLmNsYXNzTGlzdC5jb250YWlucyhcInBvcG91dExlZnQtMzBXbXJEXCIpIHx8ICFub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJlbW9qaVBpY2tlci0zbTFTLWpcIikubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFub2RlLmNsYXNzTGlzdC5jb250YWlucyhcImxheWVyLXY5SHlZY1wiKSB8fCAhbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCB8fCBub2RlLnF1ZXJ5U2VsZWN0b3IoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYW5pbWF0b3JMZWZ0LTFFUXhVMFwiKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBlID0gJChub2RlKTtcclxuICAgICAgICBpZiAodGhpcy5oaWRlRW1vamlzKSBlLmFkZENsYXNzKFwiYmQtcW1lLWhpZGRlblwiKTtcclxuICAgICAgICBlbHNlIGUucmVtb3ZlQ2xhc3MoXCJiZC1xbWUtaGlkZGVuXCIpO1xyXG5cclxuICAgICAgICBlLnByZXBlbmQodGhpcy5xbWVIZWFkZXIpO1xyXG4gICAgICAgIGUuYXBwZW5kKHRoaXMudGVDb250YWluZXIpO1xyXG4gICAgICAgIGUuYXBwZW5kKHRoaXMuZmFDb250YWluZXIpO1xyXG5cclxuICAgICAgICB0aGlzLnN3aXRjaE1lbnUodGhpcy5sYXN0VGFiKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVUd2l0Y2hFbW90ZXMoKSB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMudGVDb250YWluZXJJbm5lci5maXJzdENoaWxkKSB0aGlzLnRlQ29udGFpbmVySW5uZXIuZmlyc3RDaGlsZC5yZW1vdmUoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGVtb3RlIGluIEVtb3RlTW9kdWxlLmdldENhdGVnb3J5KFwiVHdpdGNoR2xvYmFsXCIpKSB7XHJcbiAgICAgICAgICAgIGlmICghRW1vdGVNb2R1bGUuZ2V0Q2F0ZWdvcnkoXCJUd2l0Y2hHbG9iYWxcIikuaGFzT3duUHJvcGVydHkoZW1vdGUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gRW1vdGVNb2R1bGUuZ2V0VXJsKFwiVHdpdGNoR2xvYmFsXCIsIGVtb3RlKTtcclxuICAgICAgICAgICAgY29uc3QgZW1vdGVFbGVtZW50ID0gbWFrZUVtb3RlKGVtb3RlLCB1cmwsIHtvbkNsaWNrOiB0aGlzLmluc2VydEVtb3RlLmJpbmQodGhpcywgZW1vdGUpfSk7XHJcbiAgICAgICAgICAgIHRoaXMudGVDb250YWluZXJJbm5lci5hcHBlbmQoZW1vdGVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlRmF2b3JpdGVzKCkge1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmZhQ29udGFpbmVySW5uZXIuZmlyc3RDaGlsZCkgdGhpcy5mYUNvbnRhaW5lcklubmVyLmZpcnN0Q2hpbGQucmVtb3ZlKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBlbW90ZSBpbiBFbW90ZU1vZHVsZS5mYXZvcml0ZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gRW1vdGVNb2R1bGUuZmF2b3JpdGVzW2Vtb3RlXTtcclxuICAgICAgICAgICAgY29uc3QgZW1vdGVFbGVtZW50ID0gbWFrZUVtb3RlKGVtb3RlLCB1cmwsIHtvbkNsaWNrOiB0aGlzLmluc2VydEVtb3RlLmJpbmQodGhpcywgZW1vdGUpLCBvbkNvbnRleHRNZW51OiB0aGlzLmZhdkNvbnRleHQuYmluZCh0aGlzKX0pO1xyXG4gICAgICAgICAgICB0aGlzLmZhQ29udGFpbmVySW5uZXIuYXBwZW5kKGVtb3RlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEVtb3RlTW9kdWxlLnNhdmVGYXZvcml0ZXMoKTtcclxuICAgIH1cclxuXHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/emotes/emotemenu.js\n"); + +/***/ }), + +/***/ "./src/builtins/emotes/emotes.js": /*!***************************************!*\ - !*** ./src/builtins/developermode.js ***! + !*** ./src/builtins/emotes/emotes.js ***! \***************************************/ /*! exports provided: default */ /***/ (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 $(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"); +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 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 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 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy9lbW90ZXMuanM/YzRjYyJdLCJuYW1lcyI6WyJyZXF1ZXN0IiwicmVxdWlyZSIsIkVtb3RlVVJMcyIsIlR3aXRjaEdsb2JhbCIsIkZvcm1hdHRhYmxlU3RyaW5nIiwiVHdpdGNoU3Vic2NyaWJlciIsIkZyYW5rZXJGYWNlWiIsIkJUVFYiLCJFbW90ZXMiLCJibGFja2xpc3QiLCJvdmVycmlkZXMiLCJtb2RpZmllcnMiLCJFbW90ZU1vZHVsZSIsIkJ1aWx0aW4iLCJuYW1lIiwiY29sbGVjdGlvbiIsImNhdGVnb3J5IiwiaWQiLCJjYXRlZ29yaWVzIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImsiLCJpc0NhdGVnb3J5RW5hYmxlZCIsInNob3VsZERvd25sb2FkIiwiU2V0dGluZ3MiLCJnZXQiLCJ0b0xvd2VyQ2FzZSIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiV2VicGFja01vZHVsZXMiLCJnZXRNb2R1bGUiLCJtIiwiZGVmYXVsdFByb3BzIiwiaGFzT3duUHJvcGVydHkiLCJmYXZvcml0ZXMiLCJmYXZvcml0ZUVtb3RlcyIsImdldFVybCIsImZvcm1hdCIsImdldENhdGVnb3J5IiwiZ2V0UmVtb3RlRmlsZSIsIlV0aWxpdGllcyIsInJlcG9VcmwiLCJpbml0aWFsaXplIiwic3RvcmVkRmF2b3JpdGVzIiwiRGF0YVN0b3JlIiwiZ2V0QkREYXRhIiwiYWRkRmF2b3JpdGUiLCJiaW5kIiwicmVtb3ZlRmF2b3JpdGUiLCJvbkNhdGVnb3J5VG9nZ2xlIiwicmVzZXRFbW90ZXMiLCJlbmFibGVkIiwicmVnaXN0ZXJDb2xsZWN0aW9uIiwiRW1vdGVDb25maWciLCJ0aXRsZSIsIlN0cmluZ3MiLCJjbGVhckVtb3RlcyIsIm9uQ2xpY2siLCJnZXRCbGFja2xpc3QiLCJsb2FkRW1vdGVEYXRhIiwiRXZlbnRzIiwib24iLCJkaXNhYmxlZCIsIm9mZiIsInJlbW92ZUNvbGxlY3Rpb24iLCJlbXB0eUVtb3RlcyIsImNhbmNlbEVtb3RlUmVuZGVyIiwiY2F0IiwidW5sb2FkRW1vdGVEYXRhIiwidXJsIiwic2F2ZUZhdm9yaXRlcyIsImlzRmF2b3JpdGUiLCJzZXRCRERhdGEiLCJhc3NpZ24iLCJwYXRjaE1lc3NhZ2VDb250ZW50IiwiYWZ0ZXIiLCJwcm90b3R5cGUiLCJ0aGlzT2JqIiwiYXJncyIsInJldFZhbCIsInByb3BzIiwidCIsImEiLCJyZXR1cm5WYWx1ZSIsImxlbmd0aCIsIm1hcmt1cCIsImNoaWxkcmVuIiwibm9kZXMiLCJuIiwibm9kZSIsIndvcmRzIiwic3BsaXQiLCJjIiwiY2xlbiIsInciLCJ3bGVuIiwiZW1vdGUiLCJlbW90ZVNwbGl0IiwiZW1vdGVOYW1lIiwiZW1vdGVNb2RpZmllciIsImVtb3RlT3ZlcnJpZGUiLCJzbGljZSIsImluY2x1ZGVzIiwiY3VycmVudCIsInJlc3VsdHMiLCJtYXRjaCIsIlJlZ0V4cCIsImVzY2FwZSIsInByZSIsInN1YnN0cmluZyIsImluZGV4IiwicG9zdCIsImVtb3RlQ29tcG9uZW50IiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJCREVtb3RlIiwibW9kaWZpZXIiLCJzcGxpY2UiLCJvbmx5RW1vdGVzIiwiZXZlcnkiLCJyIiwicmVwbGFjZSIsInR5cGUiLCJlbW9qaU5hbWUiLCJqdW1ib2FibGUiLCJleGlzdHMiLCJlbW90ZXNFeGlzdCIsInZhbGlkIiwiaXNDYWNoZVZhbGlkIiwidXNlQ2FjaGUiLCJsaXN0IiwiZ2V0RW1vdGVEYXRhIiwiZG93bmxvYWRFbW90ZXMiLCJwdXNoIiwiZXJyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJldGFnIiwiZ2V0Q2FjaGVIYXNoIiwiaGVhZCIsImhlYWRlcnMiLCJyZXNwIiwic3RhdHVzQ29kZSIsIkFycmF5IiwiaXNBcnJheSIsImFsbCIsIm1hcCIsImZpbmQiLCJUb2FzdHMiLCJzaG93IiwibG9hZGluZyIsImVtb3Rlc0xvYWRlZCIsImRhdGEiLCJsb2ciLCJjYWNoZWREYXRhIiwiaGFzRGF0YSIsInNldFRpbWVvdXQiLCJkaXNwYXRjaCIsImxvYWRlZCIsIm9wdGlvbnMiLCJ0aW1lb3V0IiwianNvbiIsImVycm9yIiwicmVzcG9uc2UiLCJwYXJzZWREYXRhIiwic3RhY2t0cmFjZSIsInNhdmVFbW90ZURhdGEiLCJzZXRDYWNoZUhhc2giLCJpbnZhbGlkYXRlQ2FjaGUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE1BQU1BLE9BQU8sR0FBR0MsbUJBQU8sQ0FBQyx3QkFBRCxDQUF2Qjs7QUFFQSxNQUFNQyxTQUFTLEdBQUc7QUFDZEMsY0FBWSxFQUFFLElBQUlDLHVEQUFKLENBQXVCLHNEQUF2QixDQURBO0FBRWRDLGtCQUFnQixFQUFFLElBQUlELHVEQUFKLENBQXVCLHNEQUF2QixDQUZKO0FBR2RFLGNBQVksRUFBRSxJQUFJRix1REFBSixDQUF1QixnREFBdkIsQ0FIQTtBQUlkRyxNQUFJLEVBQUUsSUFBSUgsdURBQUosQ0FBdUIsMkNBQXZCO0FBSlEsQ0FBbEI7QUFPQSxNQUFNSSxNQUFNLEdBQUc7QUFDWEwsY0FBWSxFQUFFLEVBREg7QUFFWEUsa0JBQWdCLEVBQUUsRUFGUDtBQUdYRSxNQUFJLEVBQUUsRUFISztBQUlYRCxjQUFZLEVBQUU7QUFKSCxDQUFmO0FBT0EsTUFBTUcsU0FBUyxHQUFHLEVBQWxCO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLENBQUMsUUFBRCxFQUFXLFlBQVgsRUFBeUIsTUFBekIsRUFBaUMsS0FBakMsQ0FBbEI7QUFDQSxNQUFNQyxTQUFTLEdBQUcsQ0FBQyxNQUFELEVBQVMsTUFBVCxFQUFpQixPQUFqQixFQUEwQixPQUExQixFQUFtQyxPQUFuQyxFQUE0QyxPQUE1QyxFQUFxRCxPQUFyRCxFQUE4RCxPQUE5RCxFQUF1RSxJQUF2RSxFQUE2RSxJQUE3RSxFQUFtRixJQUFuRixFQUF5RixPQUF6RixFQUFrRyxRQUFsRyxFQUE0RyxRQUE1RyxF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QUFZWixNQUFaLENBQW5CO0FBQ0EsU0FBSzRELGVBQUwsQ0FBcUJsRCxVQUFyQjs7QUFDQSxTQUFLLE1BQU1pRCxHQUFYLElBQWtCakQsVUFBbEIsRUFBOEIwQixpREFBUyxDQUFDNkgsZUFBVixDQUEwQixRQUExQixFQUFvQ3RHLEdBQXBDOztBQUM5QixTQUFLUixhQUFMO0FBQ0g7O0FBM1BnRCxDQUF0QyxFQUFmLEUsQ0ErUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy9lbW90ZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vLi4vc3RydWN0cy9idWlsdGluXCI7XHJcblxyXG5pbXBvcnQge0Vtb3RlQ29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQge1V0aWxpdGllcywgV2VicGFja01vZHVsZXMsIERhdGFTdG9yZSwgRGlzY29yZE1vZHVsZXMsIEV2ZW50cywgU2V0dGluZ3MsIFN0cmluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBCREVtb3RlIGZyb20gXCIuLi8uLi91aS9lbW90ZVwiO1xyXG5pbXBvcnQgVG9hc3RzIGZyb20gXCIuLi8uLi91aS90b2FzdHNcIjtcclxuaW1wb3J0IEZvcm1hdHRhYmxlU3RyaW5nIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL3N0cmluZ1wiO1xyXG5jb25zdCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7XHJcblxyXG5jb25zdCBFbW90ZVVSTHMgPSB7XHJcbiAgICBUd2l0Y2hHbG9iYWw6IG5ldyBGb3JtYXR0YWJsZVN0cmluZyhgaHR0cHM6Ly9zdGF0aWMtY2RuLmp0dm53Lm5ldC9lbW90aWNvbnMvdjEve3tpZH19LzEuMGApLFxyXG4gICAgVHdpdGNoU3Vic2NyaWJlcjogbmV3IEZvcm1hdHRhYmxlU3RyaW5nKGBodHRwczovL3N0YXRpYy1jZG4uanR2bncubmV0L2Vtb3RpY29ucy92MS97e2lkfX0vMS4wYCksXHJcbiAgICBGcmFua2VyRmFjZVo6IG5ldyBGb3JtYXR0YWJsZVN0cmluZyhgaHR0cHM6Ly9jZG4uZnJhbmtlcmZhY2V6LmNvbS9lbW90aWNvbi97e2lkfX0vMWApLFxyXG4gICAgQlRUVjogbmV3IEZvcm1hdHRhYmxlU3RyaW5nKGBodHRwczovL2Nkbi5iZXR0ZXJ0dHYubmV0L2Vtb3RlL3t7aWR9fS8xeGApLFxyXG59O1xyXG5cclxuY29uc3QgRW1vdGVzID0ge1xyXG4gICAgVHdpdGNoR2xvYmFsOiB7fSxcclxuICAgIFR3aXRjaFN1YnNjcmliZXI6IHt9LFxyXG4gICAgQlRUVjoge30sXHJcbiAgICBGcmFua2VyRmFjZVo6IHt9XHJcbn07XHJcblxyXG5jb25zdCBibGFja2xpc3QgPSBbXTtcclxuY29uc3Qgb3ZlcnJpZGVzID0gW1widHdpdGNoXCIsIFwic3Vic2NyaWJlclwiLCBcImJ0dHZcIiwgXCJmZnpcIl07XHJcbmNvbnN0IG1vZGlmaWVycyA9IFtcImZsaXBcIiwgXCJzcGluXCIsIFwicHVsc2VcIiwgXCJzcGluMlwiLCBcInNwaW4zXCIsIFwiMXNwaW5cIiwgXCIyc3BpblwiLCBcIjNzcGluXCIsIFwidHJcIiwgXCJibFwiLCBcImJyXCIsIFwic2hha2VcIiwgXCJzaGFrZTJcIiwgXCJzaGFrZTNcIiwgXCJmbGFwXCJdO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb3RlTW9kdWxlIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJFbW90ZXNcIjt9XHJcbiAgICBnZXQgY29sbGVjdGlvbigpIHtyZXR1cm4gXCJzZXR0aW5nc1wiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJnZW5lcmFsXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcImVtb3Rlc1wiO31cclxuICAgIGdldCBjYXRlZ29yaWVzKCkge3JldHVybiBPYmplY3Qua2V5cyhFbW90ZXMpLmZpbHRlcihrID0+IHRoaXMuaXNDYXRlZ29yeUVuYWJsZWQoaykpO31cclxuICAgIGdldCBzaG91bGREb3dubG9hZCgpIHtyZXR1cm4gU2V0dGluZ3MuZ2V0KFwiZW1vdGVzXCIsIHRoaXMuY2F0ZWdvcnksIFwiZG93bmxvYWRcIik7fVxyXG5cclxuICAgIGlzQ2F0ZWdvcnlFbmFibGVkKGlkKSB7cmV0dXJuIHN1cGVyLmdldChcImVtb3Rlc1wiLCBcImNhdGVnb3JpZXNcIiwgaWQudG9Mb3dlckNhc2UoKSk7fVxyXG5cclxuICAgIGdldChpZCkge3JldHVybiBzdXBlci5nZXQoXCJlbW90ZXNcIiwgXCJnZW5lcmFsXCIsIGlkKTt9XHJcblxyXG4gICAgZ2V0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTt9XHJcblxyXG4gICAgZ2V0IEVtb3RlcygpIHtyZXR1cm4gRW1vdGVzO31cclxuICAgIGdldCBUd2l0Y2hHbG9iYWwoKSB7cmV0dXJuIEVtb3Rlcy5Ud2l0Y2hHbG9iYWw7fVxyXG4gICAgZ2V0IFR3aXRjaFN1YnNjcmliZXIoKSB7cmV0dXJuIEVtb3Rlcy5Ud2l0Y2hTdWJzY3JpYmVyO31cclxuICAgIGdldCBCVFRWKCkge3JldHVybiBFbW90ZXMuQlRUVjt9XHJcbiAgICBnZXQgRnJhbmtlckZhY2VaKCkge3JldHVybiBFbW90ZXMuRnJhbmtlckZhY2VaO31cclxuICAgIGdldCBibGFja2xpc3QoKSB7cmV0dXJuIGJsYWNrbGlzdDt9XHJcbiAgICBnZXQgZmF2b3JpdGVzKCkge3JldHVybiB0aGlzLmZhdm9yaXRlRW1vdGVzO31cclxuICAgIGdldFVybChjYXRlZ29yeSwgbmFtZSkge3JldHVybiBFbW90ZVVSTHNbY2F0ZWdvcnldLmZvcm1hdCh7aWQ6IEVtb3Rlc1tjYXRlZ29yeV1bbmFtZV19KTt9XHJcblxyXG4gICAgZ2V0Q2F0ZWdvcnkoY2F0ZWdvcnkpIHtyZXR1cm4gRW1vdGVzW2NhdGVnb3J5XTt9XHJcbiAgICBnZXRSZW1vdGVGaWxlKGNhdGVnb3J5KSB7cmV0dXJuIFV0aWxpdGllcy5yZXBvVXJsKGBkYXRhL2Vtb3Rlcy8ke2NhdGVnb3J5LnRvTG93ZXJDYXNlKCl9Lmpzb25gKTt9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XHJcbiAgICAgICAgY29uc3Qgc3RvcmVkRmF2b3JpdGVzID0gRGF0YVN0b3JlLmdldEJERGF0YShcImZhdm9yaXRlRW1vdGVzXCIpO1xyXG4gICAgICAgIHRoaXMuZmF2b3JpdGVFbW90ZXMgPSBzdG9yZWRGYXZvcml0ZXMgfHwge307XHJcbiAgICAgICAgdGhpcy5hZGRGYXZvcml0ZSA9IHRoaXMuYWRkRmF2b3JpdGUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlbW92ZUZhdm9yaXRlID0gdGhpcy5yZW1vdmVGYXZvcml0ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25DYXRlZ29yeVRvZ2dsZSA9IHRoaXMub25DYXRlZ29yeVRvZ2dsZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmVzZXRFbW90ZXMgPSB0aGlzLnJlc2V0RW1vdGVzLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHtcclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlckNvbGxlY3Rpb24oXCJlbW90ZXNcIiwgXCJFbW90ZXNcIiwgRW1vdGVDb25maWcsIHt0aXRsZTogU3RyaW5ncy5FbW90ZXMuY2xlYXJFbW90ZXMsIG9uQ2xpY2s6IHRoaXMucmVzZXRFbW90ZXN9KTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdldEJsYWNrbGlzdCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZEVtb3RlRGF0YSgpO1xyXG5cclxuICAgICAgICBFdmVudHMub24oXCJlbW90ZXMtZmF2b3JpdGUtYWRkZWRcIiwgdGhpcy5hZGRGYXZvcml0ZSk7XHJcbiAgICAgICAgRXZlbnRzLm9uKFwiZW1vdGVzLWZhdm9yaXRlLXJlbW92ZWRcIiwgdGhpcy5yZW1vdmVGYXZvcml0ZSk7XHJcbiAgICAgICAgRXZlbnRzLm9uKFwic2V0dGluZy11cGRhdGVkXCIsIHRoaXMub25DYXRlZ29yeVRvZ2dsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgRXZlbnRzLm9mZihcInNldHRpbmctdXBkYXRlZFwiLCB0aGlzLm9uQ2F0ZWdvcnlUb2dnbGUpO1xyXG4gICAgICAgIEV2ZW50cy5vZmYoXCJlbW90ZXMtZmF2b3JpdGUtYWRkZWRcIiwgdGhpcy5hZGRGYXZvcml0ZSk7XHJcbiAgICAgICAgRXZlbnRzLm9mZihcImVtb3Rlcy1mYXZvcml0ZS1yZW1vdmVkXCIsIHRoaXMucmVtb3ZlRmF2b3JpdGUpO1xyXG4gICAgICAgIFNldHRpbmdzLnJlbW92ZUNvbGxlY3Rpb24oXCJlbW90ZXNcIik7XHJcbiAgICAgICAgdGhpcy5lbXB0eUVtb3RlcygpO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcjtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhdGVnb3J5VG9nZ2xlKGNvbGxlY3Rpb24sIGNhdCwgY2F0ZWdvcnksIGVuYWJsZWQpIHtcclxuICAgICAgICBpZiAoY29sbGVjdGlvbiAhPSBcImVtb3Rlc1wiIHx8IGNhdCAhPSBcImNhdGVnb3JpZXNcIikgcmV0dXJuO1xyXG4gICAgICAgIGlmIChlbmFibGVkKSByZXR1cm4gdGhpcy5sb2FkRW1vdGVEYXRhKGNhdGVnb3J5KTtcclxuICAgICAgICByZXR1cm4gdGhpcy51bmxvYWRFbW90ZURhdGEoY2F0ZWdvcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEZhdm9yaXRlKG5hbWUsIHVybCkge1xyXG4gICAgICAgIGlmICghdGhpcy5mYXZvcml0ZUVtb3Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgdGhpcy5mYXZvcml0ZUVtb3Rlc1tuYW1lXSA9IHVybDtcclxuICAgICAgICB0aGlzLnNhdmVGYXZvcml0ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVGYXZvcml0ZShuYW1lKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZhdm9yaXRlRW1vdGVzLmhhc093blByb3BlcnR5KG5hbWUpKSByZXR1cm47XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZmF2b3JpdGVFbW90ZXNbbmFtZV07XHJcbiAgICAgICAgdGhpcy5zYXZlRmF2b3JpdGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNGYXZvcml0ZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmF2b3JpdGVFbW90ZXMuaGFzT3duUHJvcGVydHkobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUZhdm9yaXRlcygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiZmF2b3JpdGVFbW90ZXNcIiwgdGhpcy5mYXZvcml0ZUVtb3Rlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHlFbW90ZXMoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBjYXQgaW4gRW1vdGVzKSBPYmplY3QuYXNzaWduKEVtb3Rlcywge1tjYXRdOiB7fX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoTWVzc2FnZUNvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gdGhpcy5hZnRlcih0aGlzLk1lc3NhZ2VDb250ZW50Q29tcG9uZW50LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmosIGFyZ3MsIHJldFZhbCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFmdGVyKHJldFZhbC5wcm9wcywgXCJjaGlsZHJlblwiLCAodCwgYSwgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhdGVnb3JpZXMubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmt1cCA9IHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXJrdXAucHJvcHMuY2hpbGRyZW4pIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gbWFya3VwLnByb3BzLmNoaWxkcmVuWzFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub2RlcyB8fCAhbm9kZXMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IG5vZGVzLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yobm9kZSkgIT09IFwic3RyaW5nXCIpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS5zcGxpdCgvKFteXFxzXSspKFtcXHNdfCQpL2cpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjbGVuID0gdGhpcy5jYXRlZ29yaWVzLmxlbmd0aDsgYyA8IGNsZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB3ID0gMCwgd2xlbiA9IHdvcmRzLmxlbmd0aDsgdyA8IHdsZW47IHcrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vdGUgPSB3b3Jkc1t3XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlU3BsaXQgPSBlbW90ZS5zcGxpdChcIjpcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZU5hbWUgPSBlbW90ZVNwbGl0WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVtb3RlTW9kaWZpZXIgPSBlbW90ZVNwbGl0WzFdID8gZW1vdGVTcGxpdFsxXSA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW1vdGVPdmVycmlkZSA9IGVtb3RlTW9kaWZpZXIuc2xpY2UoMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlTmFtZS5sZW5ndGggPCA0IHx8IGJsYWNrbGlzdC5pbmNsdWRlcyhlbW90ZU5hbWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW9kaWZpZXJzLmluY2x1ZGVzKGVtb3RlTW9kaWZpZXIpIHx8ICFTZXR0aW5ncy5nZXQoXCJlbW90ZXNcIiwgXCJnZW5lcmFsXCIsIFwibW9kaWZpZXJzXCIpKSBlbW90ZU1vZGlmaWVyID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3ZlcnJpZGVzLmluY2x1ZGVzKGVtb3RlT3ZlcnJpZGUpKSBlbW90ZU92ZXJyaWRlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZW1vdGVNb2RpZmllciA9IGVtb3RlT3ZlcnJpZGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSB0aGlzLmNhdGVnb3JpZXNbY107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVPdmVycmlkZSA9PT0gXCJ0d2l0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFbW90ZXMuVHdpdGNoR2xvYmFsW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIlR3aXRjaEdsb2JhbFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEVtb3Rlcy5Ud2l0Y2hTdWJzY3JpYmVyW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIlR3aXRjaFN1YnNjcmliZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVtb3RlT3ZlcnJpZGUgPT09IFwic3Vic2NyaWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVtb3Rlcy5Ud2l0Y2hTdWJzY3JpYmVyW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIlR3aXRjaFN1YnNjcmliZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVtb3RlT3ZlcnJpZGUgPT09IFwiYnR0dlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVtb3Rlcy5CVFRWW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIkJUVFZcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVtb3RlT3ZlcnJpZGUgPT09IFwiZmZ6XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRW1vdGVzLkZyYW5rZXJGYWNlWltlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJGcmFua2VyRmFjZVpcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUVtb3Rlc1tjdXJyZW50XVtlbW90ZU5hbWVdKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBub2Rlc1tuXS5tYXRjaChuZXcgUmVnRXhwKGAoW1xcXFxzXXxeKSR7VXRpbGl0aWVzLmVzY2FwZShlbW90ZU1vZGlmaWVyID8gZW1vdGVOYW1lICsgXCI6XCIgKyBlbW90ZU1vZGlmaWVyIDogZW1vdGVOYW1lKX0oW1xcXFxzXXwkKWApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cykgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmUgPSBub2Rlc1tuXS5zdWJzdHJpbmcoMCwgcmVzdWx0cy5pbmRleCArIHJlc3VsdHNbMV0ubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc3QgPSBub2Rlc1tuXS5zdWJzdHJpbmcocmVzdWx0cy5pbmRleCArIHJlc3VsdHNbMF0ubGVuZ3RoIC0gcmVzdWx0c1syXS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXNbbl0gPSBwcmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZUNvbXBvbmVudCA9IERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRFbW90ZSwge25hbWU6IGVtb3RlTmFtZSwgdXJsOiBFbW90ZVVSTHNbY3VycmVudF0uZm9ybWF0KHtpZDogRW1vdGVzW2N1cnJlbnRdW2Vtb3RlTmFtZV19KSwgbW9kaWZpZXI6IGVtb3RlTW9kaWZpZXIsIGlzRmF2b3JpdGU6IHRoaXMuaXNGYXZvcml0ZShlbW90ZU5hbWUpfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UobiArIDEsIDAsIHBvc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKG4gKyAxLCAwLCBlbW90ZUNvbXBvbmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbmx5RW1vdGVzID0gbm9kZXMuZXZlcnkociA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihyKSA9PSBcInN0cmluZ1wiICYmIHIucmVwbGFjZSgvXFxzKi8sIFwiXCIpID09IFwiXCIpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHIudHlwZSAmJiByLnR5cGUubmFtZSA9PSBcIkJERW1vdGVcIikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoci5wcm9wcyAmJiByLnByb3BzLmNoaWxkcmVuICYmIHIucHJvcHMuY2hpbGRyZW4ucHJvcHMgJiYgci5wcm9wcy5jaGlsZHJlbi5wcm9wcy5lbW9qaU5hbWUpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvbmx5RW1vdGVzKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihub2RlKSAhPSBcIm9iamVjdFwiKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS50eXBlLm5hbWUgPT0gXCJCREVtb3RlXCIpIG5vZGUucHJvcHMuanVtYm9hYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLnByb3BzICYmIG5vZGUucHJvcHMuY2hpbGRyZW4gJiYgbm9kZS5wcm9wcy5jaGlsZHJlbi5wcm9wcyAmJiBub2RlLnByb3BzLmNoaWxkcmVuLnByb3BzLmVtb2ppTmFtZSkgbm9kZS5wcm9wcy5jaGlsZHJlbi5wcm9wcy5qdW1ib2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRCbGFja2xpc3QoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSBcIkJsYWNrbGlzdFwiO1xyXG4gICAgICAgICAgICBjb25zdCBleGlzdHMgPSBEYXRhU3RvcmUuZW1vdGVzRXhpc3QoY2F0ZWdvcnkpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9IGF3YWl0IHRoaXMuaXNDYWNoZVZhbGlkKGNhdGVnb3J5KTtcclxuICAgICAgICAgICAgY29uc3QgdXNlQ2FjaGUgPSAodmFsaWQpIHx8ICghdmFsaWQgJiYgZXhpc3RzICYmICF0aGlzLnNob3VsZERvd25sb2FkKTtcclxuICAgICAgICAgICAgY29uc3QgbGlzdCA9IHVzZUNhY2hlID8gRGF0YVN0b3JlLmdldEVtb3RlRGF0YShjYXRlZ29yeSkgOiBhd2FpdCB0aGlzLmRvd25sb2FkRW1vdGVzKGNhdGVnb3J5KTtcclxuICAgICAgICAgICAgYmxhY2tsaXN0LnB1c2goLi4ubGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgLy8gVE9ETzogTG9nIHRoaXNcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNDYWNoZVZhbGlkKGNhdGVnb3J5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBldGFnID0gRGF0YVN0b3JlLmdldENhY2hlSGFzaChcImVtb3Rlc1wiLCBjYXRlZ29yeSk7XHJcbiAgICAgICAgICAgIGlmICghZXRhZykgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICByZXF1ZXN0LmhlYWQoe3VybDogdGhpcy5nZXRSZW1vdGVGaWxlKGNhdGVnb3J5KSwgaGVhZGVyczoge1wiSWYtTm9uZS1NYXRjaFwiOiBldGFnfX0sIChlcnIsIHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcC5zdGF0dXNDb2RlID09IDMwNCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRFbW90ZURhdGEoY2F0ZWdvcmllcykge1xyXG4gICAgICAgIGlmICghY2F0ZWdvcmllcykgY2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcmllcztcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2F0ZWdvcmllcykpIGNhdGVnb3JpZXMgPSBbY2F0ZWdvcmllc107XHJcbiAgICAgICAgY29uc3QgYWxsID0gT2JqZWN0LmtleXMoRW1vdGVzKTtcclxuICAgICAgICBjYXRlZ29yaWVzID0gY2F0ZWdvcmllcy5tYXAoayA9PiBhbGwuZmluZChjID0+IGMudG9Mb3dlckNhc2UoKSA9PSBrLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBUb2FzdHMuc2hvdyhTdHJpbmdzLkVtb3Rlcy5sb2FkaW5nLCB7dHlwZTogXCJpbmZvXCJ9KTtcclxuICAgICAgICB0aGlzLmVtb3Rlc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RzID0gRGF0YVN0b3JlLmVtb3Rlc0V4aXN0KGNhdGVnb3J5KTtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBhd2FpdCB0aGlzLmlzQ2FjaGVWYWxpZChjYXRlZ29yeSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZUNhY2hlID0gKHZhbGlkKSB8fCAoIXZhbGlkICYmIGV4aXN0cyAmJiAhdGhpcy5zaG91bGREb3dubG9hZCk7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHVzZUNhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhgTG9hZGluZyAke2NhdGVnb3J5fSBlbW90ZXMgZnJvbSBsb2NhbCBjYWNoZS5gKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlZERhdGEgPSBEYXRhU3RvcmUuZ2V0RW1vdGVEYXRhKGNhdGVnb3J5KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0RhdGEgPSBPYmplY3Qua2V5cyhjYWNoZWREYXRhKS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhc0RhdGEpIGRhdGEgPSBjYWNoZWREYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZGF0YSkgZGF0YSA9IGF3YWl0IHRoaXMuZG93bmxvYWRFbW90ZXMoY2F0ZWdvcnkpO1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKEVtb3Rlc1tjYXRlZ29yeV0sIGRhdGEpO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTAwMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbW90ZXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIEV2ZW50cy5kaXNwYXRjaChcImVtb3Rlcy1sb2FkZWRcIik7XHJcbiAgICAgICAgVG9hc3RzLnNob3coU3RyaW5ncy5FbW90ZXMubG9hZGVkLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bmxvYWRFbW90ZURhdGEoY2F0ZWdvcmllcykge1xyXG4gICAgICAgIGlmICghY2F0ZWdvcmllcykgY2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcmllcztcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2F0ZWdvcmllcykpIGNhdGVnb3JpZXMgPSBbY2F0ZWdvcmllc107XHJcbiAgICAgICAgY29uc3QgYWxsID0gT2JqZWN0LmtleXMoRW1vdGVzKTtcclxuICAgICAgICBjYXRlZ29yaWVzID0gY2F0ZWdvcmllcy5tYXAoayA9PiBhbGwuZmluZChjID0+IGMudG9Mb3dlckNhc2UoKSA9PSBrLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcclxuICAgICAgICAgICAgZGVsZXRlIEVtb3Rlc1tjYXRlZ29yeV07XHJcbiAgICAgICAgICAgIEVtb3Rlc1tjYXRlZ29yeV0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRFbW90ZXMoY2F0ZWdvcnkpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlbW90ZUZpbGUoY2F0ZWdvcnkpO1xyXG4gICAgICAgIHRoaXMubG9nKGBEb3dubG9hZGluZyAke2NhdGVnb3J5fSBmcm9tICR7dXJsfWApO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7dXJsOiB1cmwsIHRpbWVvdXQ6IDEwMDAwLCBqc29uOiB0cnVlfTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHJlcXVlc3QuZ2V0KG9wdGlvbnMsIChlcnJvciwgcmVzcG9uc2UsIHBhcnNlZERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvciB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2t0cmFjZShgQ291bGQgbm90IGRvd25sb2FkICR7Y2F0ZWdvcnl9IGVtb3Rlcy5gLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gcGFyc2VkRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZS5sZW5ndGggPCA0IHx8IGJsYWNrbGlzdC5pbmNsdWRlcyhlbW90ZSkgfHwgIXBhcnNlZERhdGFbZW1vdGVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJzZWREYXRhW2Vtb3RlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlZERhdGFbZW1vdGVdID0gRW1vdGVVUkxzW2NhdGVnb3J5XS5mb3JtYXQoe2lkOiBwYXJzZWREYXRhW2Vtb3RlXX0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgRGF0YVN0b3JlLnNhdmVFbW90ZURhdGEoY2F0ZWdvcnksIHBhcnNlZERhdGEpO1xyXG4gICAgICAgICAgICAgICAgRGF0YVN0b3JlLnNldENhY2hlSGFzaChcImVtb3Rlc1wiLCBjYXRlZ29yeSwgcmVzcG9uc2UuaGVhZGVycy5ldGFnKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocGFyc2VkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhgRG93bmxvYWRlZCAke2NhdGVnb3J5fWApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldEVtb3RlcygpIHtcclxuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gT2JqZWN0LmtleXMoRW1vdGVzKTtcclxuICAgICAgICB0aGlzLnVubG9hZEVtb3RlRGF0YShjYXRlZ29yaWVzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdCBvZiBjYXRlZ29yaWVzKSBEYXRhU3RvcmUuaW52YWxpZGF0ZUNhY2hlKFwiZW1vdGVzXCIsIGNhdCk7XHJcbiAgICAgICAgdGhpcy5sb2FkRW1vdGVEYXRhKCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8gKGFzeW5jICgpID0+IHtcclxuLy8gICAgIGNvbnN0IGVtb3RlRGF0YSA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4vLyAgICAgICAgIGNvbnN0IHJlcSA9IHJlcXVpcmUoXCJyZXF1ZXN0XCIpO1xyXG4vLyAgICAgICAgIHJlcS5nZXQoe3VybDogXCJodHRwczovL3R3aXRjaGVtb3Rlcy5jb20vYXBpX2NhY2hlL3YzL2dsb2JhbC5qc29uXCIsIGpzb246IHRydWV9LCAoZXJyLCByZXNwLCBwYXJzZWREYXRhKSA9PiB7XHJcbi8vICAgICAgICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gcGFyc2VkRGF0YSkge1xyXG4vLyAgICAgICAgICAgICAgICAgaWYgKGVtb3RlLmxlbmd0aCA8IDQgfHwgd2luZG93LmJlbW90ZXMuaW5jbHVkZXMoZW1vdGUpKSB7XHJcbi8vICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnNlZERhdGFbZW1vdGVdO1xyXG4vLyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4vLyAgICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICAgICAgcGFyc2VkRGF0YVtlbW90ZV0gPSBwYXJzZWREYXRhW2Vtb3RlXS5pZDtcclxuLy8gICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICByZXNvbHZlKHBhcnNlZERhdGEpO1xyXG4vLyAgICAgICAgIH0pO1xyXG4vLyAgICAgfSk7XHJcbi8vICAgICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuLy8gICAgIGZzLndyaXRlRmlsZVN5bmMoXCJaOlxcXFxQcm9ncmFtbWluZ1xcXFxCZXR0ZXJEaXNjb3JkU3R1ZmZcXFxcQmV0dGVyRGlzY29yZEFwcFxcXFxkYXRhXFxcXGVtb3Rlc1xcXFxnbG9iYWwuanNvblwiLCBKU09OLnN0cmluZ2lmeShlbW90ZURhdGEpKTtcclxuLy8gICAgIHJldHVybiBlbW90ZURhdGE7XHJcbi8vIH0pKCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/emotes/emotes.js\n"); /***/ }), -/***/ "./src/builtins/emoteautocaps.js": -/*!***************************************!*\ - !*** ./src/builtins/emoteautocaps.js ***! - \***************************************/ +/***/ "./src/builtins/general/24hour.js": +/*!****************************************!*\ + !*** ./src/builtins/general/24hour.js ***! + \****************************************/ /*! exports provided: default */ /***/ (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\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteAutocaps extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"EmoteAutocapitalize\";\n }\n\n get collection() {\n return \"emotes\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"autoCaps\";\n }\n\n enabled() {\n $(\"body\").off(\".bdac\");\n $(\"body\").on(\"keyup.bdac change.bdac paste.bdac\", $(\".channelTextArea-1LDbYG textarea:first\"), () => {\n const text = $(\".channelTextArea-1LDbYG textarea:first\").val();\n if (text == undefined) return;\n const lastWord = text.split(\" \").pop();\n\n if (lastWord.length > 3) {\n if (lastWord == \"danSgame\") return;\n const ret = this.capitalize(lastWord.toLowerCase());\n\n if (ret !== null && ret !== undefined) {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].insertText(modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].getTextArea()[0], text.replace(lastWord, ret));\n }\n }\n });\n }\n\n disabled() {\n $(\"body\").off(\".bdac\");\n }\n\n capitalize(value) {\n const res = _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\");\n\n for (const p in res) {\n if (res.hasOwnProperty(p) && value == (p + \"\").toLowerCase()) {\n return p;\n }\n }\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3RlYXV0b2NhcHMuanM/MTY0NyJdLCJuYW1lcyI6WyJFbW90ZUF1dG9jYXBzIiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImVuYWJsZWQiLCIkIiwib2ZmIiwib24iLCJ0ZXh0IiwidmFsIiwidW5kZWZpbmVkIiwibGFzdFdvcmQiLCJzcGxpdCIsInBvcCIsImxlbmd0aCIsInJldCIsImNhcGl0YWxpemUiLCJ0b0xvd2VyQ2FzZSIsIlV0aWxpdGllcyIsImluc2VydFRleHQiLCJnZXRUZXh0QXJlYSIsInJlcGxhY2UiLCJkaXNhYmxlZCIsInZhbHVlIiwicmVzIiwiRW1vdGVNb2R1bGUiLCJnZXRDYXRlZ29yeSIsInAiLCJoYXNPd25Qcm9wZXJ0eSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFFZSxtRUFBSSxNQUFNQSxhQUFOLFNBQTRCQyx3REFBNUIsQ0FBb0M7QUFDbkQsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxxQkFBUDtBQUE4Qjs7QUFDMUMsTUFBSUMsVUFBSixHQUFpQjtBQUFDLFdBQU8sUUFBUDtBQUFpQjs7QUFDbkMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxTQUFQO0FBQWtCOztBQUNsQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLFVBQVA7QUFBbUI7O0FBRTdCQyxTQUFPLEdBQUc7QUFDTkMsS0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVQyxHQUFWLENBQWMsT0FBZDtBQUNBRCxLQUFDLENBQUMsTUFBRCxDQUFELENBQVVFLEVBQVYsQ0FBYSxtQ0FBYixFQUFrREYsQ0FBQyxDQUFDLHdDQUFELENBQW5ELEVBQStGLE1BQU07QUFDakcsWUFBTUcsSUFBSSxHQUFHSCxDQUFDLENBQUMsd0NBQUQsQ0FBRCxDQUE0Q0ksR0FBNUMsRUFBYjtBQUNBLFVBQUlELElBQUksSUFBSUUsU0FBWixFQUF1QjtBQUV2QixZQUFNQyxRQUFRLEdBQUdILElBQUksQ0FBQ0ksS0FBTCxDQUFXLEdBQVgsRUFBZ0JDLEdBQWhCLEVBQWpCOztBQUNBLFVBQUlGLFFBQVEsQ0FBQ0csTUFBVCxHQUFrQixDQUF0QixFQUF5QjtBQUNyQixZQUFJSCxRQUFRLElBQUksVUFBaEIsRUFBNEI7QUFDNUIsY0FBTUksR0FBRyxHQUFHLEtBQUtDLFVBQUwsQ0FBZ0JMLFFBQVEsQ0FBQ00sV0FBVCxFQUFoQixDQUFaOztBQUNBLFlBQUlGLEdBQUcsS0FBSyxJQUFSLElBQWdCQSxHQUFHLEtBQUtMLFNBQTVCLEVBQXVDO0FBQ25DUSwyREFBUyxDQUFDQyxVQUFWLENBQXFCRCxpREFBUyxDQUFDRSxXQUFWLEdBQXdCLENBQXhCLENBQXJCLEVBQWlEWixJQUFJLENBQUNhLE9BQUwsQ0FBYVYsUUFBYixFQUF1QkksR0FBdkIsQ0FBakQ7QUFDSDtBQUNKO0FBQ0osS0FaRDtBQWFIOztBQUVETyxVQUFRLEdBQUc7QUFDUGpCLEtBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVUMsR0FBVixDQUFjLE9BQWQ7QUFDSDs7QUFFRFUsWUFBVSxDQUFDTyxLQUFELEVBQVE7QUFDZCxVQUFNQyxHQUFHLEdBQUdDLCtDQUFXLENBQUNDLFdBQVosQ0FBd0IsY0FBeEIsQ0FBWjs7QUFDQSxTQUFLLE1BQU1DLENBQVgsSUFBZ0JILEdBQWhCLEVBQXFCO0FBQ2pCLFVBQUlBLEdBQUcsQ0FBQ0ksY0FBSixDQUFtQkQsQ0FBbkIsS0FBeUJKLEtBQUssSUFBSSxDQUFDSSxDQUFDLEdBQUcsRUFBTCxFQUFTVixXQUFULEVBQXRDLEVBQThEO0FBQzFELGVBQU9VLENBQVA7QUFDSDtBQUNKO0FBQ0o7O0FBbENrRCxDQUF4QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2Vtb3RlYXV0b2NhcHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcblxyXG5pbXBvcnQge1V0aWxpdGllc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBFbW90ZU1vZHVsZSBmcm9tIFwiLi9lbW90ZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBFbW90ZUF1dG9jYXBzIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJFbW90ZUF1dG9jYXBpdGFsaXplXCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwiZW1vdGVzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiYXV0b0NhcHNcIjt9XHJcblxyXG4gICAgZW5hYmxlZCgpIHtcclxuICAgICAgICAkKFwiYm9keVwiKS5vZmYoXCIuYmRhY1wiKTtcclxuICAgICAgICAkKFwiYm9keVwiKS5vbihcImtleXVwLmJkYWMgY2hhbmdlLmJkYWMgcGFzdGUuYmRhY1wiLCAkKFwiLmNoYW5uZWxUZXh0QXJlYS0xTERiWUcgdGV4dGFyZWE6Zmlyc3RcIiksICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGV4dCA9ICQoXCIuY2hhbm5lbFRleHRBcmVhLTFMRGJZRyB0ZXh0YXJlYTpmaXJzdFwiKS52YWwoKTtcclxuICAgICAgICAgICAgaWYgKHRleHQgPT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBsYXN0V29yZCA9IHRleHQuc3BsaXQoXCIgXCIpLnBvcCgpO1xyXG4gICAgICAgICAgICBpZiAobGFzdFdvcmQubGVuZ3RoID4gMykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RXb3JkID09IFwiZGFuU2dhbWVcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy5jYXBpdGFsaXplKGxhc3RXb3JkLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJldCAhPT0gbnVsbCAmJiByZXQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxpdGllcy5pbnNlcnRUZXh0KFV0aWxpdGllcy5nZXRUZXh0QXJlYSgpWzBdLCB0ZXh0LnJlcGxhY2UobGFzdFdvcmQsIHJldCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgJChcImJvZHlcIikub2ZmKFwiLmJkYWNcIik7XHJcbiAgICB9XHJcblxyXG4gICAgY2FwaXRhbGl6ZSh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IEVtb3RlTW9kdWxlLmdldENhdGVnb3J5KFwiVHdpdGNoR2xvYmFsXCIpO1xyXG4gICAgICAgIGZvciAoY29uc3QgcCBpbiByZXMpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5oYXNPd25Qcm9wZXJ0eShwKSAmJiB2YWx1ZSA9PSAocCArIFwiXCIpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/emoteautocaps.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 TwentyFourHour extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"24Hour\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"twentyFourHour\";\n }\n\n enabled() {\n this.inject24Hour();\n }\n\n disabled() {\n this.unpatchAll();\n }\n\n inject24Hour() {\n const twelveHour = new RegExp(`([0-9]{1,2}):([0-9]{1,2})\\\\s(AM|PM)`);\n\n const convert = (thisObject, args, returnValue) => {\n const matched = returnValue.match(twelveHour);\n if (!matched || matched.length !== 4) return;\n if (matched[3] === \"AM\") return returnValue = returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"00\" : matched[1].padStart(2, \"0\")}:${matched[2]}`);\n return returnValue = returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"12\" : parseInt(matched[1]) + 12}:${matched[2]}`);\n };\n\n this.after(modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].TimeFormatter, \"calendarFormat\", convert); // Called in Cozy mode\n\n this.after(modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].TimeFormatter, \"dateFormat\", convert); // Called in Compact mode\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2dlbmVyYWwvMjRob3VyLmpzPzFmZTUiXSwibmFtZXMiOlsiVHdlbnR5Rm91ckhvdXIiLCJCdWlsdGluIiwibmFtZSIsImNhdGVnb3J5IiwiaWQiLCJlbmFibGVkIiwiaW5qZWN0MjRIb3VyIiwiZGlzYWJsZWQiLCJ1bnBhdGNoQWxsIiwidHdlbHZlSG91ciIsIlJlZ0V4cCIsImNvbnZlcnQiLCJ0aGlzT2JqZWN0IiwiYXJncyIsInJldHVyblZhbHVlIiwibWF0Y2hlZCIsIm1hdGNoIiwibGVuZ3RoIiwicmVwbGFjZSIsInBhZFN0YXJ0IiwicGFyc2VJbnQiLCJhZnRlciIsIkRpc2NvcmRNb2R1bGVzIiwiVGltZUZvcm1hdHRlciJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVlLG1FQUFJLE1BQU1BLGNBQU4sU0FBNkJDLHdEQUE3QixDQUFxQztBQUNwRCxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLFFBQVA7QUFBaUI7O0FBQzdCLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sU0FBUDtBQUFrQjs7QUFDbEMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxnQkFBUDtBQUF5Qjs7QUFFbkNDLFNBQU8sR0FBRztBQUNOLFNBQUtDLFlBQUw7QUFDSDs7QUFFREMsVUFBUSxHQUFHO0FBQ1AsU0FBS0MsVUFBTDtBQUNIOztBQUVERixjQUFZLEdBQUc7QUFDWCxVQUFNRyxVQUFVLEdBQUcsSUFBSUMsTUFBSixDQUFZLHFDQUFaLENBQW5COztBQUNBLFVBQU1DLE9BQU8sR0FBRyxDQUFDQyxVQUFELEVBQWFDLElBQWIsRUFBbUJDLFdBQW5CLEtBQW1DO0FBQy9DLFlBQU1DLE9BQU8sR0FBR0QsV0FBVyxDQUFDRSxLQUFaLENBQWtCUCxVQUFsQixDQUFoQjtBQUNBLFVBQUksQ0FBQ00sT0FBRCxJQUFZQSxPQUFPLENBQUNFLE1BQVIsS0FBbUIsQ0FBbkMsRUFBc0M7QUFDdEMsVUFBSUYsT0FBTyxDQUFDLENBQUQsQ0FBUCxLQUFlLElBQW5CLEVBQXlCLE9BQU9ELFdBQVcsR0FBR0EsV0FBVyxDQUFDSSxPQUFaLENBQW9CSCxPQUFPLENBQUMsQ0FBRCxDQUEzQixFQUFpQyxHQUFFQSxPQUFPLENBQUMsQ0FBRCxDQUFQLEtBQWUsSUFBZixHQUFzQixJQUF0QixHQUE2QkEsT0FBTyxDQUFDLENBQUQsQ0FBUCxDQUFXSSxRQUFYLENBQW9CLENBQXBCLEVBQXVCLEdBQXZCLENBQTRCLElBQUdKLE9BQU8sQ0FBQyxDQUFELENBQUksRUFBMUcsQ0FBckI7QUFDekIsYUFBT0QsV0FBVyxHQUFHQSxXQUFXLENBQUNJLE9BQVosQ0FBb0JILE9BQU8sQ0FBQyxDQUFELENBQTNCLEVBQWlDLEdBQUVBLE9BQU8sQ0FBQyxDQUFELENBQVAsS0FBZSxJQUFmLEdBQXNCLElBQXRCLEdBQTZCSyxRQUFRLENBQUNMLE9BQU8sQ0FBQyxDQUFELENBQVIsQ0FBUixHQUF1QixFQUFHLElBQUdBLE9BQU8sQ0FBQyxDQUFELENBQUksRUFBeEcsQ0FBckI7QUFDSCxLQUxEOztBQU9BLFNBQUtNLEtBQUwsQ0FBV0Msc0RBQWMsQ0FBQ0MsYUFBMUIsRUFBeUMsZ0JBQXpDLEVBQTJEWixPQUEzRCxFQVRXLENBUzBEOztBQUNyRSxTQUFLVSxLQUFMLENBQVdDLHNEQUFjLENBQUNDLGFBQTFCLEVBQXlDLFlBQXpDLEVBQXVEWixPQUF2RCxFQVZXLENBVXNEO0FBQ3BFOztBQXhCbUQsQ0FBekMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9nZW5lcmFsLzI0aG91ci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtEaXNjb3JkTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBUd2VudHlGb3VySG91ciBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiMjRIb3VyXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwidHdlbnR5Rm91ckhvdXJcIjt9XHJcblxyXG4gICAgZW5hYmxlZCgpIHtcclxuICAgICAgICB0aGlzLmluamVjdDI0SG91cigpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIHRoaXMudW5wYXRjaEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdDI0SG91cigpIHtcclxuICAgICAgICBjb25zdCB0d2VsdmVIb3VyID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pOihbMC05XXsxLDJ9KVxcXFxzKEFNfFBNKWApO1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSAodGhpc09iamVjdCwgYXJncywgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IHJldHVyblZhbHVlLm1hdGNoKHR3ZWx2ZUhvdXIpO1xyXG4gICAgICAgICAgICBpZiAoIW1hdGNoZWQgfHwgbWF0Y2hlZC5sZW5ndGggIT09IDQpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKG1hdGNoZWRbM10gPT09IFwiQU1cIikgcmV0dXJuIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjAwXCIgOiBtYXRjaGVkWzFdLnBhZFN0YXJ0KDIsIFwiMFwiKX06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoZWRbMF0sIGAke21hdGNoZWRbMV0gPT09IFwiMTJcIiA/IFwiMTJcIiA6IHBhcnNlSW50KG1hdGNoZWRbMV0pICsgMTJ9OiR7bWF0Y2hlZFsyXX1gKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmFmdGVyKERpc2NvcmRNb2R1bGVzLlRpbWVGb3JtYXR0ZXIsIFwiY2FsZW5kYXJGb3JtYXRcIiwgY29udmVydCk7IC8vIENhbGxlZCBpbiBDb3p5IG1vZGVcclxuICAgICAgICB0aGlzLmFmdGVyKERpc2NvcmRNb2R1bGVzLlRpbWVGb3JtYXR0ZXIsIFwiZGF0ZUZvcm1hdFwiLCBjb252ZXJ0KTsgLy8gQ2FsbGVkIGluIENvbXBhY3QgbW9kZVxyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/general/24hour.js\n"); /***/ }), -/***/ "./src/builtins/emotemenu.js": -/*!***********************************!*\ - !*** ./src/builtins/emotemenu.js ***! - \***********************************/ +/***/ "./src/builtins/general/classnormalizer.js": +/*!*************************************************!*\ + !*** ./src/builtins/general/classnormalizer.js ***! + \*************************************************/ /*! exports provided: default */ /***/ (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]; // 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"); +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 Reflect.apply(contains, this, [token.split(\" \")[0]]); // return tokens.every(t => contains.call(this, t));\n };\n\n const add = DOMTokenList.prototype.add;\n\n DOMTokenList.prototype.add = function (...tokens) {\n for (let t = 0; t < tokens.length; t++) {\n tokens[t] = tokens[t].split(\" \")[0];\n }\n\n return Reflect.apply(add, this, tokens);\n };\n\n const remove = DOMTokenList.prototype.remove;\n\n DOMTokenList.prototype.remove = function (...tokens) {\n for (let t = 0; t < tokens.length; t++) {\n tokens[t] = tokens[t].split(\" \")[0];\n }\n\n return Reflect.apply(remove, this, tokens);\n };\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2dlbmVyYWwvY2xhc3Nub3JtYWxpemVyLmpzPzJkYjYiXSwibmFtZXMiOlsibm9ybWFsaXplZFByZWZpeCIsInJhbmRDbGFzcyIsIlJlZ0V4cCIsIkNsYXNzTm9ybWFsaXplciIsIkJ1aWx0aW4iLCJpZCIsImNhdGVnb3J5IiwibmFtZSIsImVuYWJsZWQiLCJoYXNQYXRjaGVkIiwicGF0Y2hDbGFzc01vZHVsZXMiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZXMiLCJtb2R1bGVGaWx0ZXIiLCJiaW5kIiwibm9ybWFsaXplRWxlbWVudCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsInBhdGNoRE9NTWV0aG9kcyIsImRpc2FibGVkIiwidW5wYXRjaENsYXNzTW9kdWxlcyIsInJldmVydEVsZW1lbnQiLCJtb2R1bGVzIiwibW9kdWxlIiwicGF0Y2hDbGFzc01vZHVsZSIsInVucGF0Y2hDbGFzc01vZHVsZSIsInNob3VsZElnbm9yZSIsInZhbHVlIiwiaXNOYU4iLCJlbmRzV2l0aCIsInN0YXJ0c1dpdGgiLCJsZW5ndGgiLCJpbmNsdWRlcyIsIkFycmF5IiwiaXNBcnJheSIsIl9fZXNNb2R1bGUiLCJPYmplY3QiLCJrZXlzIiwiYmFzZUNsYXNzTmFtZSIsInNwbGl0IiwidGVzdCIsImNvbXBvbmVudE5hbWUiLCJjbGFzc05hbWVzIiwiY2xhc3NMaXN0Iiwibm9ybWFsQ2xhc3MiLCJtYXRjaCIsImNhbWVsQ2FzZSIsIm1hcCIsInMiLCJpIiwidG9VcHBlckNhc2UiLCJzbGljZSIsImpvaW4iLCJuZXdTdHJpbmciLCJ0cmltIiwiZWxlbWVudCIsIkVsZW1lbnQiLCJjbGFzc2VzIiwiYyIsImNsZW4iLCJuZXdDbGFzcyIsImFkZCIsImNoaWxkIiwiY2hpbGRyZW4iLCJuZXh0RWxlbWVudFNpYmxpbmciLCJ0b1JlbW92ZSIsInB1c2giLCJyZW1vdmUiLCJjb250YWlucyIsIkRPTVRva2VuTGlzdCIsInBy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LGNBQU0sQ0FBQ0MsQ0FBRCxDQUFOLEdBQVlELE1BQU0sQ0FBQ0MsQ0FBRCxDQUFOLENBQVVwQyxLQUFWLENBQWdCLEdBQWhCLEVBQXFCLENBQXJCLENBQVo7QUFDSDs7QUFDRCxhQUFPaUMsT0FBTyxDQUFDQyxLQUFSLENBQWNaLEdBQWQsRUFBbUIsSUFBbkIsRUFBeUJhLE1BQXpCLENBQVA7QUFDSCxLQUxEOztBQU9BLFVBQU1QLE1BQU0sR0FBR0UsWUFBWSxDQUFDQyxTQUFiLENBQXVCSCxNQUF0Qzs7QUFDQUUsZ0JBQVksQ0FBQ0MsU0FBYixDQUF1QkgsTUFBdkIsR0FBZ0MsVUFBUyxHQUFHTyxNQUFaLEVBQW9CO0FBQ2hELFdBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0QsTUFBTSxDQUFDM0MsTUFBM0IsRUFBbUM0QyxDQUFDLEVBQXBDLEVBQXdDO0FBQ3BDRCxjQUFNLENBQUNDLENBQUQsQ0FBTixHQUFZRCxNQUFNLENBQUNDLENBQUQsQ0FBTixDQUFVcEMsS0FBVixDQUFnQixHQUFoQixFQUFxQixDQUFyQixDQUFaO0FBQ0g7O0FBQ0QsYUFBT2lDLE9BQU8sQ0FBQ0MsS0FBUixDQUFjTixNQUFkLEVBQXNCLElBQXRCLEVBQTRCTyxNQUE1QixDQUFQO0FBQ0gsS0FMRDtBQU1IOztBQW5Jb0QsQ0FBMUMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9nZW5lcmFsL2NsYXNzbm9ybWFsaXplci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtXZWJwYWNrTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmNvbnN0IG5vcm1hbGl6ZWRQcmVmaXggPSBcImRhXCI7XHJcbmNvbnN0IHJhbmRDbGFzcyA9IG5ldyBSZWdFeHAoYF4oPyEke25vcm1hbGl6ZWRQcmVmaXh9LSkoKD86W0EtWmEtel18WzAtOV18LSkrKS0oPzpbQS1aYS16XXxbMC05XXwtfF8pezZ9JGApO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENsYXNzTm9ybWFsaXplciBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcImNsYXNzTm9ybWFsaXplclwiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJnZW5lcmFsXCI7fVxyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiQ2xhc3NOb3JtYWxpemVyXCI7fVxyXG5cclxuICAgIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzUGF0Y2hlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlcyh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemVFbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpKTtcclxuICAgICAgICB0aGlzLmhhc1BhdGNoZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucGF0Y2hET01NZXRob2RzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlcyh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnRFbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpKTtcclxuICAgICAgICB0aGlzLmhhc1BhdGNoZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5wYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG91bGRJZ25vcmUodmFsdWUpIHtcclxuICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmVuZHNXaXRoKFwicHhcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJjaFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImVtXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwibXNcIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwibGF5ZXJDb250YWluZXItXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIiNcIikgJiYgKHZhbHVlLmxlbmd0aCA9PSA3IHx8IHZhbHVlLmxlbmd0aCA9PSA0KSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKFwiY2FsYyhcIikgfHwgdmFsdWUuaW5jbHVkZXMoXCJyZ2JhXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlRmlsdGVyKG1vZHVsZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobW9kdWxlKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChtb2R1bGUuX19lc01vZHVsZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICghT2JqZWN0LmtleXMobW9kdWxlKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gbW9kdWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kdWxlW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUuc3BsaXQoXCItXCIpLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIXJhbmRDbGFzcy50ZXN0KHZhbHVlLnNwbGl0KFwiIFwiKVswXSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gbm9ybWFsQ2xhc3MubWF0Y2gocmFuZENsYXNzKTtcclxuICAgICAgICAgICAgICAgIGlmICghbWF0Y2ggfHwgIW1hdGNoLmxlbmd0aCB8fCBtYXRjaC5sZW5ndGggPCAyKSBjb250aW51ZTsgLy8gU2hvdWxkbid0IGV2ZXIgaGFwcGVuIHNpbmNlIHRoZXkgcGFzc2VkIHRoZSBtb2R1bGVGaWx0ZXIsIGJ1dCB5b3UgbmV2ZXIga25vd1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FtZWxDYXNlID0gbWF0Y2hbMV0uc3BsaXQoXCItXCIpLm1hcCgocywgaSkgPT4gaSA/IHNbMF0udG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgOiBzKS5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSArPSBgICR7Y29tcG9uZW50TmFtZX0tJHtjYW1lbENhc2V9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsQ2xhc3Muc3RhcnRzV2l0aChgJHtjb21wb25lbnROYW1lfS1gKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBuZXdTdHJpbmcgKz0gYCAke25vcm1hbENsYXNzfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSA9IG5ld1N0cmluZy50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5vcm1hbGl6ZUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBlbGVtZW50LmNsYXNzTGlzdDtcclxuICAgICAgICBmb3IgKGxldCBjID0gMCwgY2xlbiA9IGNsYXNzZXMubGVuZ3RoOyBjIDwgY2xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QoY2xhc3Nlc1tjXSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsYXNzZXNbY10ubWF0Y2gocmFuZENsYXNzKVsxXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3MgPSBtYXRjaC5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChgJHtub3JtYWxpemVkUHJlZml4fS0ke25ld0NsYXNzfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsZW1lbnQuY2hpbGRyZW4pIHRoaXMubm9ybWFsaXplRWxlbWVudChjaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJ0RWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4gJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50LmNoaWxkcmVuWzBdKTtcclxuICAgICAgICBpZiAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmIChjbGFzc2VzW2NdLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZFByZWZpeH0tYCkpIHRvUmVtb3ZlLnB1c2goY2xhc3Nlc1tjXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi50b1JlbW92ZSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHBhdGNoRE9NTWV0aG9kcygpIHtcclxuICAgICAgICBjb25zdCBjb250YWlucyA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUuY29udGFpbnM7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKHRva2VuKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IHRva2VucyA9IHRva2VuLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoY29udGFpbnMsIHRoaXMsIFt0b2tlbi5zcGxpdChcIiBcIilbMF1dKTtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIHRva2Vucy5ldmVyeSh0ID0+IGNvbnRhaW5zLmNhbGwodGhpcywgdCkpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGFkZCA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkO1xyXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oLi4udG9rZW5zKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdG9rZW5zLmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbdF0gPSB0b2tlbnNbdF0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGFkZCwgdGhpcywgdG9rZW5zKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCByZW1vdmUgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZTtcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKC4uLnRva2Vucykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRva2Vucy5sZW5ndGg7IHQrKykge1xyXG4gICAgICAgICAgICAgICAgdG9rZW5zW3RdID0gdG9rZW5zW3RdLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShyZW1vdmUsIHRoaXMsIHRva2Vucyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/general/classnormalizer.js\n"); /***/ }), -/***/ "./src/builtins/emotes.js": -/*!********************************!*\ - !*** ./src/builtins/emotes.js ***! - \********************************/ +/***/ "./src/builtins/general/publicservers.js": +/*!***********************************************!*\ + !*** ./src/builtins/general/publicservers.js ***! + \***********************************************/ /*! exports provided: default */ /***/ (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(); // 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"); +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 _ui_publicservers_menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../ui/publicservers/menu */ \"./src/ui/publicservers/menu.js\");\n\n\n\nconst LayerStack = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"pushLayer\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class PublicServers extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"PublicServers\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"publicServers\";\n }\n\n enabled() {\n const GuildList = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].find(m => m.default && m.default.displayName == \"NavigableGuilds\");\n const GuildListOld = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].findByDisplayName(\"Guilds\");\n if (!GuildList && !GuildListOld) this.warn(\"Can't find GuildList component\");\n this.guildPatch = this.after(GuildList ? GuildList : GuildListOld.prototype, GuildList ? \"default\" : \"render\", this._appendButton);\n\n this._appendButton();\n }\n\n disabled() {\n this.unpatchAll();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].query(\"#bd-pub-li\").remove();\n }\n\n _appendButton() {\n const wrapper = modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].GuildClasses.wrapper.split(\" \")[0];\n const guilds = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].query(`.${wrapper} .scroller-2TZvBN >:first-child`);\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].after(guilds, this.button);\n }\n\n openPublicServers() {\n LayerStack.pushLayer(() => modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].React.createElement(_ui_publicservers_menu__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n close: LayerStack.popLayer\n }));\n }\n\n get button() {\n const btn = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
`);\n const label = modules__WEBPACK_IMPORTED_MODULE_1__[\"DOM\"].createElement(`
${modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].PublicServers.button}
`);\n label.addEventListener(\"click\", () => {\n this.openPublicServers();\n });\n btn.append(label);\n return btn; // const btn = $(\"
\", {\n // \"class\": DiscordModules.GuildClasses.listItem,\n // \"id\": \"bd-pub-li\"\n // }).append($(\"
\", {\n // \"class\": \"wrapper-25eVIn \" + DiscordModules.GuildClasses.circleButtonMask,\n // \"text\": Strings.PublicServers.button,\n // \"id\": \"bd-pub-button\",\n // \"click\": () => { this.openPublicServers(); }\n // }));\n // return btn;\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2dlbmVyYWwvcHVibGljc2VydmVycy5qcz84YjdlIl0sIm5hbWVzIjpbIkxheWVyU3RhY2siLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5UHJvcHMiLCJQdWJsaWNTZXJ2ZXJzIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwiZW5hYmxlZCIsIkd1aWxkTGlzdCIsImZpbmQiLCJtIiwiZGVmYXVsdCIsImRpc3BsYXlOYW1lIiwiR3VpbGRMaXN0T2xkIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJ3YXJuIiwiZ3VpbGRQYXRjaCIsImFmdGVyIiwicHJvdG90eXBlIiwiX2FwcGVuZEJ1dHRvbiIsImRpc2FibGVkIiwidW5wYXRjaEFsbCIsIkRPTSIsInF1ZXJ5IiwicmVtb3ZlIiwid3JhcHBlciIsIkRpc2NvcmRNb2R1bGVzIiwiR3VpbGRDbGFzc2VzIiwic3BsaXQiLCJndWlsZHMiLCJidXR0b24iLCJvcGVuUHVibGljU2VydmVycyIsInB1c2hMYXllciIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsIlB1YmxpY1NlcnZlcnNNZW51IiwiY2xvc2UiLCJwb3BMYXllciIsImJ0biIsImxpc3RJdGVtIiwibGFiZWwiLCJjaXJjbGVCdXR0b25NYXNrIiwiU3RyaW5ncyIsImFkZEV2ZW50TGlzdGVuZXIiLCJhcHBlbmQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUEsTUFBTUEsVUFBVSxHQUFHQyxzREFBYyxDQUFDQyxVQUFmLENBQTBCLFdBQTFCLENBQW5CO0FBRWUsbUVBQUksTUFBTUMsYUFBTixTQUE0QkMsd0RBQTVCLENBQW9DO0FBQ25ELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sZUFBUDtBQUF3Qjs7QUFDcEMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxTQUFQO0FBQWtCOztBQUNsQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLGVBQVA7QUFBd0I7O0FBRWxDQyxTQUFPLEdBQUc7QUFDTixVQUFNQyxTQUFTLEdBQUdSLHNEQUFjLENBQUNTLElBQWYsQ0FBb0JDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVQyxXQUFWLElBQXlCLGlCQUEvRCxDQUFsQjtBQUNBLFVBQU1DLFlBQVksR0FBR2Isc0RBQWMsQ0FBQ2MsaUJBQWYsQ0FBaUMsUUFBakMsQ0FBckI7QUFDQSxRQUFJLENBQUNOLFNBQUQsSUFBYyxDQUFDSyxZQUFuQixFQUFpQyxLQUFLRSxJQUFMLENBQVUsZ0NBQVY7QUFDakMsU0FBS0MsVUFBTCxHQUFrQixLQUFLQyxLQUFMLENBQVdULFNBQVMsR0FBR0EsU0FBSCxHQUFlSyxZQUFZLENBQUNLLFNBQWhELEVBQTJEVixTQUFTLEdBQUcsU0FBSCxHQUFlLFFBQW5GLEVBQTZGLEtBQUtXLGFBQWxHLENBQWxCOztBQUNBLFNBQUtBLGFBQUw7QUFDSDs7QUFFREMsVUFBUSxHQUFHO0FBQ1AsU0FBS0MsVUFBTDtBQUNBQywrQ0FBRyxDQUFDQyxLQUFKLENBQVUsWUFBVixFQUF3QkMsTUFBeEI7QUFDSDs7QUFFREwsZUFBYSxHQUFHO0FBQ1osVUFBTU0sT0FBTyxHQUFHQyxzREFBYyxDQUFDQyxZQUFmLENBQTRCRixPQUE1QixDQUFvQ0csS0FBcEMsQ0FBMEMsR0FBMUMsRUFBK0MsQ0FBL0MsQ0FBaEI7QUFDQSxVQUFNQyxNQUFNLEdBQUdQLDJDQUFHLENBQUNDLEtBQUosQ0FBVyxJQUFHRSxPQUFRLGlDQUF0QixDQUFmO0FBQ0FILCtDQUFHLENBQUNMLEtBQUosQ0FBVVksTUFBVixFQUFrQixLQUFLQyxNQUF2QjtBQUNIOztBQUVEQyxtQkFBaUIsR0FBRztBQUNoQmhDLGNBQVUsQ0FBQ2lDLFNBQVgsQ0FBcUIsTUFBTU4sc0RBQWMsQ0FBQ08sS0FBZixDQUFxQkMsYUFBckIsQ0FBbUNDLDhEQUFuQyxFQUFzRDtBQUFDQyxXQUFLLEVBQUVyQyxVQUFVLENBQUNzQztBQUFuQixLQUF0RCxDQUEzQjtBQUNIOztBQUVELE1BQUlQLE1BQUosR0FBYTtBQUNULFVBQU1RLEdBQUcsR0FBR2hCLDJDQUFHLENBQUNZLGFBQUosQ0FBbUIsOEJBQTZCUixzREFBYyxDQUFDQyxZQUFmLENBQTRCWSxRQUFTLElBQXJGLENBQVo7QUFDQSxVQUFNQyxLQUFLLEdBQUdsQiwyQ0FBRyxDQUFDWSxhQUFKLENBQW1CLGtDQUFpQyxvQkFBb0JSLHNEQUFjLENBQUNDLFlBQWYsQ0FBNEJjLGdCQUFpQixLQUFJQywrQ0FBTyxDQUFDeEMsYUFBUixDQUFzQjRCLE1BQU8sUUFBdEosQ0FBZDtBQUNBVSxTQUFLLENBQUNHLGdCQUFOLENBQXVCLE9BQXZCLEVBQWdDLE1BQU07QUFBQyxXQUFLWixpQkFBTDtBQUEwQixLQUFqRTtBQUNBTyxPQUFHLENBQUNNLE1BQUosQ0FBV0osS0FBWDtBQUNBLFdBQU9GLEdBQVAsQ0FMUyxDQU9UO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0g7O0FBOUNrRCxDQUF4QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2dlbmVyYWwvcHVibGljc2VydmVycy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi8uLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtEaXNjb3JkTW9kdWxlcywgV2VicGFja01vZHVsZXMsIFN0cmluZ3MsIERPTX0gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IFB1YmxpY1NlcnZlcnNNZW51IGZyb20gXCIuLi8uLi91aS9wdWJsaWNzZXJ2ZXJzL21lbnVcIjtcclxuXHJcbmNvbnN0IExheWVyU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicHVzaExheWVyXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFB1YmxpY1NlcnZlcnMgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlB1YmxpY1NlcnZlcnNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJwdWJsaWNTZXJ2ZXJzXCI7fVxyXG5cclxuICAgIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0ID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJOYXZpZ2FibGVHdWlsZHNcIik7XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0T2xkID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XHJcbiAgICAgICAgaWYgKCFHdWlsZExpc3QgJiYgIUd1aWxkTGlzdE9sZCkgdGhpcy53YXJuKFwiQ2FuJ3QgZmluZCBHdWlsZExpc3QgY29tcG9uZW50XCIpO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCA9IHRoaXMuYWZ0ZXIoR3VpbGRMaXN0ID8gR3VpbGRMaXN0IDogR3VpbGRMaXN0T2xkLnByb3RvdHlwZSwgR3VpbGRMaXN0ID8gXCJkZWZhdWx0XCIgOiBcInJlbmRlclwiLCB0aGlzLl9hcHBlbmRCdXR0b24pO1xyXG4gICAgICAgIHRoaXMuX2FwcGVuZEJ1dHRvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIHRoaXMudW5wYXRjaEFsbCgpO1xyXG4gICAgICAgIERPTS5xdWVyeShcIiNiZC1wdWItbGlcIikucmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2FwcGVuZEJ1dHRvbigpIHtcclxuICAgICAgICBjb25zdCB3cmFwcGVyID0gRGlzY29yZE1vZHVsZXMuR3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IERPTS5xdWVyeShgLiR7d3JhcHBlcn0gLnNjcm9sbGVyLTJUWnZCTiA+OmZpcnN0LWNoaWxkYCk7XHJcbiAgICAgICAgRE9NLmFmdGVyKGd1aWxkcywgdGhpcy5idXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5QdWJsaWNTZXJ2ZXJzKCkge1xyXG4gICAgICAgIExheWVyU3RhY2sucHVzaExheWVyKCgpID0+IERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoUHVibGljU2VydmVyc01lbnUsIHtjbG9zZTogTGF5ZXJTdGFjay5wb3BMYXllcn0pKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnV0dG9uKCkge1xyXG4gICAgICAgIGNvbnN0IGJ0biA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtcHViLWxpXCIgY2xhc3M9XCIke0Rpc2NvcmRNb2R1bGVzLkd1aWxkQ2xhc3Nlcy5saXN0SXRlbX1cIj5gKTtcclxuICAgICAgICBjb25zdCBsYWJlbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtcHViLWJ1dHRvblwiIGNsYXNzPVwiJHtcIndyYXBwZXItMjVlVkluIFwiICsgRGlzY29yZE1vZHVsZXMuR3VpbGRDbGFzc2VzLmNpcmNsZUJ1dHRvbk1hc2t9XCI+JHtTdHJpbmdzLlB1YmxpY1NlcnZlcnMuYnV0dG9ufTwvZGl2PmApO1xyXG4gICAgICAgIGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7dGhpcy5vcGVuUHVibGljU2VydmVycygpO30pO1xyXG4gICAgICAgIGJ0bi5hcHBlbmQobGFiZWwpO1xyXG4gICAgICAgIHJldHVybiBidG47XHJcblxyXG4gICAgICAgIC8vIGNvbnN0IGJ0biA9ICQoXCI8ZGl2Lz5cIiwge1xyXG4gICAgICAgIC8vICAgICBcImNsYXNzXCI6IERpc2NvcmRNb2R1bGVzLkd1aWxkQ2xhc3Nlcy5saXN0SXRlbSxcclxuICAgICAgICAvLyAgICAgXCJpZFwiOiBcImJkLXB1Yi1saVwiXHJcbiAgICAgICAgLy8gfSkuYXBwZW5kKCQoXCI8ZGl2Lz5cIiwge1xyXG4gICAgICAgIC8vICAgICBcImNsYXNzXCI6IFwid3JhcHBlci0yNWVWSW4gXCIgKyBEaXNjb3JkTW9kdWxlcy5HdWlsZENsYXNzZXMuY2lyY2xlQnV0dG9uTWFzayxcclxuICAgICAgICAvLyAgICAgXCJ0ZXh0XCI6IFN0cmluZ3MuUHVibGljU2VydmVycy5idXR0b24sXHJcbiAgICAgICAgLy8gICAgIFwiaWRcIjogXCJiZC1wdWItYnV0dG9uXCIsXHJcbiAgICAgICAgLy8gICAgIFwiY2xpY2tcIjogKCkgPT4geyB0aGlzLm9wZW5QdWJsaWNTZXJ2ZXJzKCk7IH1cclxuICAgICAgICAvLyB9KSk7XHJcblxyXG4gICAgICAgIC8vIHJldHVybiBidG47XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/general/publicservers.js\n"); /***/ }), -/***/ "./src/builtins/minimalmode.js": -/*!*************************************!*\ - !*** ./src/builtins/minimalmode.js ***! - \*************************************/ +/***/ "./src/builtins/general/voicedisconnect.js": +/*!*************************************************!*\ + !*** ./src/builtins/general/voicedisconnect.js ***! + \*************************************************/ /*! exports provided: default */ /***/ (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\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class MinimalMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"MinimalMode\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"minimalMode\";\n }\n\n get hideChannelsID() {\n return \"hideChannels\";\n }\n\n get hideChannels() {\n return this.get(this.hideChannelsID);\n }\n\n constructor() {\n super();\n this.enableHideChannels = this.enableHideChannels.bind(this);\n this.disableHideChannels = this.disableHideChannels.bind(this);\n }\n\n enabled() {\n document.body.classList.add(\"bd-minimal\");\n if (this.hideChannels) this.enableHideChannels();\n this.hideChannelCancel = this.registerSetting(this.hideChannelsID, this.enableHideChannels, this.disableHideChannels);\n }\n\n disabled() {\n document.body.classList.remove(\"bd-minimal\");\n if (this.hideChannels) this.disableHideChannels();\n if (this.hideChannelCancel) this.hideChannelCancel();\n }\n\n enableHideChannels() {\n document.body.classList.add(\"bd-minimal-chan\");\n }\n\n disableHideChannels() {\n document.body.classList.remove(\"bd-minimal-chan\");\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL21pbmltYWxtb2RlLmpzPzgzMzgiXSwibmFtZXMiOlsiTWluaW1hbE1vZGUiLCJCdWlsdGluIiwibmFtZSIsImNhdGVnb3J5IiwiaWQiLCJoaWRlQ2hhbm5lbHNJRCIsImhpZGVDaGFubmVscyIsImdldCIsImNvbnN0cnVjdG9yIiwiZW5hYmxlSGlkZUNoYW5uZWxzIiwiYmluZCIsImRpc2FibGVIaWRlQ2hhbm5lbHMiLCJlbmFibGVkIiwiZG9jdW1lbnQiLCJib2R5IiwiY2xhc3NMaXN0IiwiYWRkIiwiaGlkZUNoYW5uZWxDYW5jZWwiLCJyZWdpc3RlclNldHRpbmciLCJkaXNhYmxlZCIsInJlbW92ZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRWUsbUVBQUksTUFBTUEsV0FBTixTQUEwQkMsd0RBQTFCLENBQWtDO0FBQ2pELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sYUFBUDtBQUFzQjs7QUFDbEMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxZQUFQO0FBQXFCOztBQUNyQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLGFBQVA7QUFBc0I7O0FBQ2hDLE1BQUlDLGNBQUosR0FBcUI7QUFBQyxXQUFPLGNBQVA7QUFBdUI7O0FBQzdDLE1BQUlDLFlBQUosR0FBbUI7QUFBQyxXQUFPLEtBQUtDLEdBQUwsQ0FBUyxLQUFLRixjQUFkLENBQVA7QUFBc0M7O0FBRTFERyxhQUFXLEdBQUc7QUFDVjtBQUNBLFNBQUtDLGtCQUFMLEdBQTBCLEtBQUtBLGtCQUFMLENBQXdCQyxJQUF4QixDQUE2QixJQUE3QixDQUExQjtBQUNBLFNBQUtDLG1CQUFMLEdBQTJCLEtBQUtBLG1CQUFMLENBQXlCRCxJQUF6QixDQUE4QixJQUE5QixDQUEzQjtBQUNIOztBQUVERSxTQUFPLEdBQUc7QUFDTkMsWUFBUSxDQUFDQyxJQUFULENBQWNDLFNBQWQsQ0FBd0JDLEdBQXhCLENBQTRCLFlBQTVCO0FBQ0EsUUFBSSxLQUFLVixZQUFULEVBQXVCLEtBQUtHLGtCQUFMO0FBQ3ZCLFNBQUtRLGlCQUFMLEdBQXlCLEtBQUtDLGVBQUwsQ0FBcUIsS0FBS2IsY0FBMUIsRUFBMEMsS0FBS0ksa0JBQS9DLEVBQW1FLEtBQUtFLG1CQUF4RSxDQUF6QjtBQUNIOztBQUVEUSxVQUFRLEdBQUc7QUFDUE4sWUFBUSxDQUFDQyxJQUFULENBQWNDLFNBQWQsQ0FBd0JLLE1BQXhCLENBQStCLFlBQS9CO0FBQ0EsUUFBSSxLQUFLZCxZQUFULEVBQXVCLEtBQUtLLG1CQUFMO0FBQ3ZCLFFBQUksS0FBS00saUJBQVQsRUFBNEIsS0FBS0EsaUJBQUw7QUFDL0I7O0FBRURSLG9CQUFrQixHQUFHO0FBQ2pCSSxZQUFRLENBQUNDLElBQVQsQ0FBY0MsU0FBZCxDQUF3QkMsR0FBeEIsQ0FBNEIsaUJBQTVCO0FBQ0g7O0FBRURMLHFCQUFtQixHQUFHO0FBQ2xCRSxZQUFRLENBQUNDLElBQVQsQ0FBY0MsU0FBZCxDQUF3QkssTUFBeEIsQ0FBK0IsaUJBQS9CO0FBQ0g7O0FBL0JnRCxDQUF0QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL21pbmltYWxtb2RlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIE1pbmltYWxNb2RlIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJNaW5pbWFsTW9kZVwiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJhcHBlYXJhbmNlXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcIm1pbmltYWxNb2RlXCI7fVxyXG4gICAgZ2V0IGhpZGVDaGFubmVsc0lEKCkge3JldHVybiBcImhpZGVDaGFubmVsc1wiO31cclxuICAgIGdldCBoaWRlQ2hhbm5lbHMoKSB7cmV0dXJuIHRoaXMuZ2V0KHRoaXMuaGlkZUNoYW5uZWxzSUQpO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlSGlkZUNoYW5uZWxzID0gdGhpcy5lbmFibGVIaWRlQ2hhbm5lbHMuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVIaWRlQ2hhbm5lbHMgPSB0aGlzLmRpc2FibGVIaWRlQ2hhbm5lbHMuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUNoYW5uZWxzKSB0aGlzLmVuYWJsZUhpZGVDaGFubmVscygpO1xyXG4gICAgICAgIHRoaXMuaGlkZUNoYW5uZWxDYW5jZWwgPSB0aGlzLnJlZ2lzdGVyU2V0dGluZyh0aGlzLmhpZGVDaGFubmVsc0lELCB0aGlzLmVuYWJsZUhpZGVDaGFubmVscywgdGhpcy5kaXNhYmxlSGlkZUNoYW5uZWxzKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVDaGFubmVscykgdGhpcy5kaXNhYmxlSGlkZUNoYW5uZWxzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUNoYW5uZWxDYW5jZWwpIHRoaXMuaGlkZUNoYW5uZWxDYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVIaWRlQ2hhbm5lbHMoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVIaWRlQ2hhbm5lbHMoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/minimalmode.js\n"); - -/***/ }), - -/***/ "./src/builtins/publicservers.js": -/*!***************************************!*\ - !*** ./src/builtins/publicservers.js ***! - \***************************************/ -/*! exports provided: default */ -/***/ (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 _ui_publicservers_menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ui/publicservers/menu */ \"./src/ui/publicservers/menu.js\");\n\n\n\nconst LayerStack = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"pushLayer\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class PublicServers extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"PublicServers\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"publicServers\";\n }\n\n enabled() {\n const wrapper = modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].GuildClasses.wrapper.split(\" \")[0];\n const guilds = $(`.${wrapper} .scroller-2FKFPG >:first-child`);\n guilds.after(this.button);\n }\n\n disabled() {\n $(\"#bd-pub-li\").remove();\n }\n\n openPublicServers() {\n LayerStack.pushLayer(() => modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].React.createElement(_ui_publicservers_menu__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n close: LayerStack.popLayer\n }));\n }\n\n get button() {\n const btn = $(\"
\", {\n \"class\": modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].GuildClasses.listItem,\n \"id\": \"bd-pub-li\"\n }).append($(\"
\", {\n \"class\": \"wrapper-25eVIn \" + modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].GuildClasses.circleButtonMask,\n \"text\": modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].PublicServers.button,\n \"id\": \"bd-pub-button\",\n \"click\": () => {\n this.openPublicServers();\n }\n }));\n return btn;\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL3B1YmxpY3NlcnZlcnMuanM/MWY2NSJdLCJuYW1lcyI6WyJMYXllclN0YWNrIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeVByb3BzIiwiUHVibGljU2VydmVycyIsIkJ1aWx0aW4iLCJuYW1lIiwiY2F0ZWdvcnkiLCJpZCIsImVuYWJsZWQiLCJ3cmFwcGVyIiwiRGlzY29yZE1vZHVsZXMiLCJHdWlsZENsYXNzZXMiLCJzcGxpdCIsImd1aWxkcyIsIiQiLCJhZnRlciIsImJ1dHRvbiIsImRpc2FibGVkIiwicmVtb3ZlIiwib3BlblB1YmxpY1NlcnZlcnMiLCJwdXNoTGF5ZXIiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJQdWJsaWNTZXJ2ZXJzTWVudSIsImNsb3NlIiwicG9wTGF5ZXIiLCJidG4iLCJsaXN0SXRlbSIsImFwcGVuZCIsImNpcmNsZUJ1dHRvbk1hc2siLCJTdHJpbmdzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFVBQVUsR0FBR0Msc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixXQUExQixDQUFuQjtBQUVlLG1FQUFJLE1BQU1DLGFBQU4sU0FBNEJDLHdEQUE1QixDQUFvQztBQUNuRCxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLGVBQVA7QUFBd0I7O0FBQ3BDLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sU0FBUDtBQUFrQjs7QUFDbEMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxlQUFQO0FBQXdCOztBQUVsQ0MsU0FBTyxHQUFHO0FBQ04sVUFBTUMsT0FBTyxHQUFHQyxzREFBYyxDQUFDQyxZQUFmLENBQTRCRixPQUE1QixDQUFvQ0csS0FBcEMsQ0FBMEMsR0FBMUMsRUFBK0MsQ0FBL0MsQ0FBaEI7QUFDQSxVQUFNQyxNQUFNLEdBQUdDLENBQUMsQ0FBRSxJQUFHTCxPQUFRLGlDQUFiLENBQWhCO0FBQ0FJLFVBQU0sQ0FBQ0UsS0FBUCxDQUFhLEtBQUtDLE1BQWxCO0FBQ0g7O0FBRURDLFVBQVEsR0FBRztBQUNQSCxLQUFDLENBQUMsWUFBRCxDQUFELENBQWdCSSxNQUFoQjtBQUNIOztBQUVEQyxtQkFBaUIsR0FBRztBQUNoQm5CLGNBQVUsQ0FBQ29CLFNBQVgsQ0FBcUIsTUFBTVYsc0RBQWMsQ0FBQ1csS0FBZixDQUFxQkMsYUFBckIsQ0FBbUNDLDhEQUFuQyxFQUFzRDtBQUFDQyxXQUFLLEVBQUV4QixVQUFVLENBQUN5QjtBQUFuQixLQUF0RCxDQUEzQjtBQUNIOztBQUVELE1BQUlULE1BQUosR0FBYTtBQUNULFVBQU1VLEdBQUcsR0FBR1osQ0FBQyxDQUFDLFFBQUQsRUFBVztBQUNwQixlQUFTSixzREFBYyxDQUFDQyxZQUFmLENBQTRCZ0IsUUFEakI7QUFFcEIsWUFBTTtBQUZjLEtBQVgsQ0FBRCxDQUdUQyxNQUhTLENBR0ZkLENBQUMsQ0FBQyxRQUFELEVBQVc7QUFDbEIsZUFBUyxvQkFBb0JKLHNEQUFjLENBQUNDLFlBQWYsQ0FBNEJrQixnQkFEdkM7QUFFbEIsY0FBUUMsK0NBQU8sQ0FBQzNCLGFBQVIsQ0FBc0JhLE1BRlo7QUFHbEIsWUFBTSxlQUhZO0FBSWxCLGVBQVMsTUFBTTtBQUFFLGFBQUtHLGlCQUFMO0FBQTJCO0FBSjFCLEtBQVgsQ0FIQyxDQUFaO0FBVUEsV0FBT08sR0FBUDtBQUNIOztBQS9Ca0QsQ0FBeEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9wdWJsaWNzZXJ2ZXJzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge0Rpc2NvcmRNb2R1bGVzLCBXZWJwYWNrTW9kdWxlcywgU3RyaW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IFB1YmxpY1NlcnZlcnNNZW51IGZyb20gXCIuLi91aS9wdWJsaWNzZXJ2ZXJzL21lbnVcIjtcclxuXHJcbmNvbnN0IExheWVyU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicHVzaExheWVyXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFB1YmxpY1NlcnZlcnMgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlB1YmxpY1NlcnZlcnNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJwdWJsaWNTZXJ2ZXJzXCI7fVxyXG5cclxuICAgIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IERpc2NvcmRNb2R1bGVzLkd1aWxkQ2xhc3Nlcy53cmFwcGVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICBjb25zdCBndWlsZHMgPSAkKGAuJHt3cmFwcGVyfSAuc2Nyb2xsZXItMkZLRlBHID46Zmlyc3QtY2hpbGRgKTtcclxuICAgICAgICBndWlsZHMuYWZ0ZXIodGhpcy5idXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgICQoXCIjYmQtcHViLWxpXCIpLnJlbW92ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5QdWJsaWNTZXJ2ZXJzKCkge1xyXG4gICAgICAgIExheWVyU3RhY2sucHVzaExheWVyKCgpID0+IERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoUHVibGljU2VydmVyc01lbnUsIHtjbG9zZTogTGF5ZXJTdGFjay5wb3BMYXllcn0pKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnV0dG9uKCkge1xyXG4gICAgICAgIGNvbnN0IGJ0biA9ICQoXCI8ZGl2Lz5cIiwge1xyXG4gICAgICAgICAgICBcImNsYXNzXCI6IERpc2NvcmRNb2R1bGVzLkd1aWxkQ2xhc3Nlcy5saXN0SXRlbSxcclxuICAgICAgICAgICAgXCJpZFwiOiBcImJkLXB1Yi1saVwiXHJcbiAgICAgICAgfSkuYXBwZW5kKCQoXCI8ZGl2Lz5cIiwge1xyXG4gICAgICAgICAgICBcImNsYXNzXCI6IFwid3JhcHBlci0yNWVWSW4gXCIgKyBEaXNjb3JkTW9kdWxlcy5HdWlsZENsYXNzZXMuY2lyY2xlQnV0dG9uTWFzayxcclxuICAgICAgICAgICAgXCJ0ZXh0XCI6IFN0cmluZ3MuUHVibGljU2VydmVycy5idXR0b24sXHJcbiAgICAgICAgICAgIFwiaWRcIjogXCJiZC1wdWItYnV0dG9uXCIsXHJcbiAgICAgICAgICAgIFwiY2xpY2tcIjogKCkgPT4geyB0aGlzLm9wZW5QdWJsaWNTZXJ2ZXJzKCk7IH1cclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgIHJldHVybiBidG47XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/publicservers.js\n"); - -/***/ }), - -/***/ "./src/builtins/voicedisconnect.js": -/*!*****************************************!*\ - !*** ./src/builtins/voicedisconnect.js ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (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 DarkMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"VoiceDisconnect\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"voiceDisconnect\";\n }\n\n constructor() {\n super();\n this.beforeUnload = this.beforeUnload.bind(this);\n }\n\n enabled() {\n window.addEventListener(\"beforeunload\", this.beforeUnload);\n }\n\n disabled() {\n window.removeEventListener(\"beforeunload\", this.beforeUnload);\n }\n\n beforeUnload() {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].ChannelActions.selectVoiceChannel(null, null);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL3ZvaWNlZGlzY29ubmVjdC5qcz8yYmVmIl0sIm5hbWVzIjpbIkRhcmtNb2RlIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwiY29uc3RydWN0b3IiLCJiZWZvcmVVbmxvYWQiLCJiaW5kIiwiZW5hYmxlZCIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJkaXNhYmxlZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxBY3Rpb25zIiwic2VsZWN0Vm9pY2VDaGFubmVsIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRWUsbUVBQUksTUFBTUEsUUFBTixTQUF1QkMsd0RBQXZCLENBQStCO0FBQzlDLE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8saUJBQVA7QUFBMEI7O0FBQ3RDLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sU0FBUDtBQUFrQjs7QUFDbEMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxpQkFBUDtBQUEwQjs7QUFFcENDLGFBQVcsR0FBRztBQUNWO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQixLQUFLQSxZQUFMLENBQWtCQyxJQUFsQixDQUF1QixJQUF2QixDQUFwQjtBQUNIOztBQUVEQyxTQUFPLEdBQUc7QUFDTkMsVUFBTSxDQUFDQyxnQkFBUCxDQUF3QixjQUF4QixFQUF3QyxLQUFLSixZQUE3QztBQUNIOztBQUVESyxVQUFRLEdBQUc7QUFDUEYsVUFBTSxDQUFDRyxtQkFBUCxDQUEyQixjQUEzQixFQUEyQyxLQUFLTixZQUFoRDtBQUNIOztBQUVEQSxjQUFZLEdBQUc7QUFDWE8sMERBQWMsQ0FBQ0MsY0FBZixDQUE4QkMsa0JBQTlCLENBQWlELElBQWpELEVBQXVELElBQXZEO0FBQ0g7O0FBcEI2QyxDQUFuQyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL3ZvaWNlZGlzY29ubmVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtEaXNjb3JkTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEYXJrTW9kZSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiVm9pY2VEaXNjb25uZWN0XCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwidm9pY2VEaXNjb25uZWN0XCI7fVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5iZWZvcmVVbmxvYWQgPSB0aGlzLmJlZm9yZVVubG9hZC5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgdGhpcy5iZWZvcmVVbmxvYWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIHRoaXMuYmVmb3JlVW5sb2FkKTtcclxuICAgIH1cclxuXHJcbiAgICBiZWZvcmVVbmxvYWQoKSB7XHJcbiAgICAgICAgRGlzY29yZE1vZHVsZXMuQ2hhbm5lbEFjdGlvbnMuc2VsZWN0Vm9pY2VDaGFubmVsKG51bGwsIG51bGwpO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/voicedisconnect.js\n"); - -/***/ }), - -/***/ "./src/builtins/voicemode.js": -/*!***********************************!*\ - !*** ./src/builtins/voicemode.js ***! - \***********************************/ -/*! exports provided: default */ -/***/ (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\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class VoiceMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"VoiceMode\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"voiceMode\";\n }\n\n enabled() {\n document.querySelector(\".chat-3bRxxu\").style.setProperty(\"visibility\", \"hidden\");\n document.querySelector(\".chat-3bRxxu\").style.setProperty(\"min-width\", \"0px\");\n document.querySelector(\".channels-Ie2l6A\").style.setProperty(\"flex-grow\", \"100000\");\n }\n\n disabled() {\n document.querySelector(\".chat-3bRxxu\").style.setProperty(\"visibility\", \"\");\n document.querySelector(\".chat-3bRxxu\").style.setProperty(\"min-width\", \"\");\n document.querySelector(\".channels-Ie2l6A\").style.setProperty(\"flex-grow\", \"\");\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL3ZvaWNlbW9kZS5qcz80M2E3Il0sIm5hbWVzIjpbIlZvaWNlTW9kZSIsIkJ1aWx0aW4iLCJuYW1lIiwiY2F0ZWdvcnkiLCJpZCIsImVuYWJsZWQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJzdHlsZSIsInNldFByb3BlcnR5IiwiZGlzYWJsZWQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVlLG1FQUFJLE1BQU1BLFNBQU4sU0FBd0JDLHdEQUF4QixDQUFnQztBQUMvQyxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLFdBQVA7QUFBb0I7O0FBQ2hDLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sWUFBUDtBQUFxQjs7QUFDckMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxXQUFQO0FBQW9COztBQUU5QkMsU0FBTyxHQUFHO0FBQ05DLFlBQVEsQ0FBQ0MsYUFBVCxDQUF1QixjQUF2QixFQUF1Q0MsS0FBdkMsQ0FBNkNDLFdBQTdDLENBQXlELFlBQXpELEVBQXVFLFFBQXZFO0FBQ0FILFlBQVEsQ0FBQ0MsYUFBVCxDQUF1QixjQUF2QixFQUF1Q0MsS0FBdkMsQ0FBNkNDLFdBQTdDLENBQXlELFdBQXpELEVBQXNFLEtBQXRFO0FBQ0FILFlBQVEsQ0FBQ0MsYUFBVCxDQUF1QixrQkFBdkIsRUFBMkNDLEtBQTNDLENBQWlEQyxXQUFqRCxDQUE2RCxXQUE3RCxFQUEwRSxRQUExRTtBQUNIOztBQUVEQyxVQUFRLEdBQUc7QUFDUEosWUFBUSxDQUFDQyxhQUFULENBQXVCLGNBQXZCLEVBQXVDQyxLQUF2QyxDQUE2Q0MsV0FBN0MsQ0FBeUQsWUFBekQsRUFBdUUsRUFBdkU7QUFDQUgsWUFBUSxDQUFDQyxhQUFULENBQXVCLGNBQXZCLEVBQXVDQyxLQUF2QyxDQUE2Q0MsV0FBN0MsQ0FBeUQsV0FBekQsRUFBc0UsRUFBdEU7QUFDQUgsWUFBUSxDQUFDQyxhQUFULENBQXVCLGtCQUF2QixFQUEyQ0MsS0FBM0MsQ0FBaURDLFdBQWpELENBQTZELFdBQTdELEVBQTBFLEVBQTFFO0FBQ0g7O0FBZjhDLENBQXBDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvdm9pY2Vtb2RlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFZvaWNlTW9kZSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiVm9pY2VNb2RlXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImFwcGVhcmFuY2VcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwidm9pY2VNb2RlXCI7fVxyXG5cclxuICAgIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jaGF0LTNiUnh4dVwiKS5zdHlsZS5zZXRQcm9wZXJ0eShcInZpc2liaWxpdHlcIiwgXCJoaWRkZW5cIik7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jaGF0LTNiUnh4dVwiKS5zdHlsZS5zZXRQcm9wZXJ0eShcIm1pbi13aWR0aFwiLCBcIjBweFwiKTtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmNoYW5uZWxzLUllMmw2QVwiKS5zdHlsZS5zZXRQcm9wZXJ0eShcImZsZXgtZ3Jvd1wiLCBcIjEwMDAwMFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmNoYXQtM2JSeHh1XCIpLnN0eWxlLnNldFByb3BlcnR5KFwidmlzaWJpbGl0eVwiLCBcIlwiKTtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmNoYXQtM2JSeHh1XCIpLnN0eWxlLnNldFByb3BlcnR5KFwibWluLXdpZHRoXCIsIFwiXCIpO1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2hhbm5lbHMtSWUybDZBXCIpLnN0eWxlLnNldFByb3BlcnR5KFwiZmxleC1ncm93XCIsIFwiXCIpO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/voicemode.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 DarkMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"VoiceDisconnect\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"voiceDisconnect\";\n }\n\n constructor() {\n super();\n this.beforeUnload = this.beforeUnload.bind(this);\n }\n\n enabled() {\n window.addEventListener(\"beforeunload\", this.beforeUnload);\n }\n\n disabled() {\n window.removeEventListener(\"beforeunload\", this.beforeUnload);\n }\n\n beforeUnload() {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].ChannelActions.selectVoiceChannel(null, null);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2dlbmVyYWwvdm9pY2VkaXNjb25uZWN0LmpzPzk4YWYiXSwibmFtZXMiOlsiRGFya01vZGUiLCJCdWlsdGluIiwibmFtZSIsImNhdGVnb3J5IiwiaWQiLCJjb25zdHJ1Y3RvciIsImJlZm9yZVVubG9hZCIsImJpbmQiLCJlbmFibGVkIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImRpc2FibGVkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkRpc2NvcmRNb2R1bGVzIiwiQ2hhbm5lbEFjdGlvbnMiLCJzZWxlY3RWb2ljZUNoYW5uZWwiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFZSxtRUFBSSxNQUFNQSxRQUFOLFNBQXVCQyx3REFBdkIsQ0FBK0I7QUFDOUMsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxpQkFBUDtBQUEwQjs7QUFDdEMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxTQUFQO0FBQWtCOztBQUNsQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLGlCQUFQO0FBQTBCOztBQUVwQ0MsYUFBVyxHQUFHO0FBQ1Y7QUFDQSxTQUFLQyxZQUFMLEdBQW9CLEtBQUtBLFlBQUwsQ0FBa0JDLElBQWxCLENBQXVCLElBQXZCLENBQXBCO0FBQ0g7O0FBRURDLFNBQU8sR0FBRztBQUNOQyxVQUFNLENBQUNDLGdCQUFQLENBQXdCLGNBQXhCLEVBQXdDLEtBQUtKLFlBQTdDO0FBQ0g7O0FBRURLLFVBQVEsR0FBRztBQUNQRixVQUFNLENBQUNHLG1CQUFQLENBQTJCLGNBQTNCLEVBQTJDLEtBQUtOLFlBQWhEO0FBQ0g7O0FBRURBLGNBQVksR0FBRztBQUNYTywwREFBYyxDQUFDQyxjQUFmLENBQThCQyxrQkFBOUIsQ0FBaUQsSUFBakQsRUFBdUQsSUFBdkQ7QUFDSDs7QUFwQjZDLENBQW5DLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvZ2VuZXJhbC92b2ljZWRpc2Nvbm5lY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vLi4vc3RydWN0cy9idWlsdGluXCI7XHJcbmltcG9ydCB7RGlzY29yZE1vZHVsZXN9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGFya01vZGUgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlZvaWNlRGlzY29ubmVjdFwiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJnZW5lcmFsXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcInZvaWNlRGlzY29ubmVjdFwiO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuYmVmb3JlVW5sb2FkID0gdGhpcy5iZWZvcmVVbmxvYWQuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIHRoaXMuYmVmb3JlVW5sb2FkKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCB0aGlzLmJlZm9yZVVubG9hZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYmVmb3JlVW5sb2FkKCkge1xyXG4gICAgICAgIERpc2NvcmRNb2R1bGVzLkNoYW5uZWxBY3Rpb25zLnNlbGVjdFZvaWNlQ2hhbm5lbChudWxsLCBudWxsKTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/general/voicedisconnect.js\n"); /***/ }), @@ -263,7 +287,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\n\nconst fs = __webpack_require__(/*! fs */ \"fs\");\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class WindowPrefs extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"WindowPrefs\";\n }\n\n get category() {\n return \"window\";\n }\n\n get id() {\n return \"transparency\";\n }\n\n get WindowConfigFile() {\n if (this._windowConfigFile) return this._windowConfigFile;\n\n const electron = __webpack_require__(/*! electron */ \"electron\").remote.app;\n\n const base = electron.getAppPath();\n const roamingBase = electron.getPath(\"userData\");\n const roamingLocation = path.resolve(roamingBase, electron.getVersion(), \"modules\", \"discord_desktop_core\", \"injector\", \"config.json\");\n const location = path.resolve(base, \"..\", \"app\", \"config.json\");\n const realLocation = fs.existsSync(location) ? location : fs.existsSync(roamingLocation) ? roamingLocation : null;\n if (!realLocation) return this._windowConfigFile = null;\n return this._windowConfigFile = realLocation;\n }\n\n enabled() {\n this.setWindowPreference(\"transparent\", true);\n this.setWindowPreference(\"backgroundColor\", null);\n }\n\n disabled() {\n this.setWindowPreference(\"transparent\", false);\n this.setWindowPreference(\"backgroundColor\", \"#2f3136\");\n }\n\n getAllWindowPreferences() {\n if (!this.WindowConfigFile) return {};\n return require(this.WindowConfigFile);\n }\n\n getWindowPreference(key) {\n if (!this.WindowConfigFile) return undefined;\n return this.getAllWindowPreferences()[key];\n }\n\n setWindowPreference(key, value) {\n if (!this.WindowConfigFile) return;\n const prefs = this.getAllWindowPreferences();\n prefs[key] = value;\n delete __webpack_require__.c[this.WindowConfigFile];\n fs.writeFileSync(this.WindowConfigFile, JSON.stringify(prefs, null, 4));\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL3dpbmRvd3ByZWZzLmpzP2I0YTciXSwibmFtZXMiOlsiZnMiLCJyZXF1aXJlIiwicGF0aCIsIldpbmRvd1ByZWZzIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwiV2luZG93Q29uZmlnRmlsZSIsIl93aW5kb3dDb25maWdGaWxlIiwiZWxlY3Ryb24iLCJyZW1vdGUiLCJhcHAiLCJiYXNlIiwiZ2V0QXBwUGF0aCIsInJvYW1pbmdCYXNlIiwiZ2V0UGF0aCIsInJvYW1pbmdMb2NhdGlvbiIsInJlc29sdmUiLCJnZXRWZXJzaW9uIiwibG9jYXRpb24iLCJyZWFsTG9jYXRpb24iLCJleGlzdHNTeW5jIiwiZW5hYmxlZCIsInNldFdpbmRvd1ByZWZlcmVuY2UiLCJkaXNhYmxlZCIsImdldEFsbFdpbmRvd1ByZWZlcmVuY2VzIiwiX19ub25fd2VicGFja19yZXF1aXJlX18iLCJnZXRXaW5kb3dQcmVmZXJlbmNlIiwia2V5IiwidW5kZWZpbmVkIiwidmFsdWUiLCJwcmVmcyIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7O0FBRUEsTUFBTUEsRUFBRSxHQUFHQyxtQkFBTyxDQUFDLGNBQUQsQ0FBbEI7O0FBQ0EsTUFBTUMsSUFBSSxHQUFHRCxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUVlLG1FQUFJLE1BQU1FLFdBQU4sU0FBMEJDLHdEQUExQixDQUFrQztBQUNqRCxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLGFBQVA7QUFBc0I7O0FBQ2xDLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sUUFBUDtBQUFpQjs7QUFDakMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxjQUFQO0FBQXVCOztBQUVqQyxNQUFJQyxnQkFBSixHQUF1QjtBQUNuQixRQUFJLEtBQUtDLGlCQUFULEVBQTRCLE9BQU8sS0FBS0EsaUJBQVo7O0FBQzVCLFVBQU1DLFFBQVEsR0FBR1QsbUJBQU8sQ0FBQywwQkFBRCxDQUFQLENBQW9CVSxNQUFwQixDQUEyQkMsR0FBNUM7O0FBQ0EsVUFBTUMsSUFBSSxHQUFHSCxRQUFRLENBQUNJLFVBQVQsRUFBYjtBQUNBLFVBQU1DLFdBQVcsR0FBR0wsUUFBUSxDQUFDTSxPQUFULENBQWlCLFVBQWpCLENBQXBCO0FBQ0EsVUFBTUMsZUFBZSxHQUFHZixJQUFJLENBQUNnQixPQUFMLENBQWFILFdBQWIsRUFBMEJMLFFBQVEsQ0FBQ1MsVUFBVCxFQUExQixFQUFpRCxTQUFqRCxFQUE0RCxzQkFBNUQsRUFBb0YsVUFBcEYsRUFBZ0csYUFBaEcsQ0FBeEI7QUFDQSxVQUFNQyxRQUFRLEdBQUdsQixJQUFJLENBQUNnQixPQUFMLENBQWFMLElBQWIsRUFBbUIsSUFBbkIsRUFBeUIsS0FBekIsRUFBZ0MsYUFBaEMsQ0FBakI7QUFDQSxVQUFNUSxZQUFZLEdBQUdyQixFQUFFLENBQUNzQixVQUFILENBQWNGLFFBQWQsSUFBMEJBLFFBQTFCLEdBQXFDcEIsRUFBRSxDQUFDc0IsVUFBSCxDQUFjTCxlQUFkLElBQWlDQSxlQUFqQyxHQUFtRCxJQUE3RztBQUNBLFFBQUksQ0FBQ0ksWUFBTCxFQUFtQixPQUFPLEtBQUtaLGlCQUFMLEdBQXlCLElBQWhDO0FBQ25CLFdBQU8sS0FBS0EsaUJBQUwsR0FBeUJZLFlBQWhDO0FBQ0g7O0FBRURFLFNBQU8sR0FBRztBQUNOLFNBQUtDLG1CQUFMLENBQXlCLGFBQXpCLEVBQXdDLElBQXhDO0FBQ0EsU0FBS0EsbUJBQUwsQ0FBeUIsaUJBQXpCLEVBQTRDLElBQTVDO0FBQ0g7O0FBRURDLFVBQVEsR0FBRztBQUNQLFNBQUtELG1CQUFMLENBQXlCLGFBQXpCLEVBQXdDLEtBQXhDO0FBQ0EsU0FBS0EsbUJBQUwsQ0FBeUIsaUJBQXpCLEVBQTRDLFNBQTVDO0FBQ0g7O0FBRURFLHlCQUF1QixHQUFHO0FBQ3RCLFFBQUksQ0FBQyxLQUFLbEIsZ0JBQVYsRUFBNEIsT0FBTyxFQUFQO0FBQzVCLFdBQU9tQixPQUF1QixDQUFDLEtBQUtuQixnQkFBTixDQUE5QjtBQUNIOztBQUVEb0IscUJBQW1CLENBQUNDLEdBQUQsRUFBTTtBQUNyQixRQUFJLENBQUMsS0FBS3JCLGdCQUFWLEVBQTRCLE9BQU9zQixTQUFQO0FBQzVCLFdBQU8sS0FBS0osdUJBQUwsR0FBK0JHLEdBQS9CLENBQVA7QUFDSDs7QUFFREwscUJBQW1CLENBQUNLLEdBQUQsRUFBTUUsS0FBTixFQUFhO0FBQzVCLFFBQUksQ0FBQyxLQUFLdkIsZ0JBQVYsRUFBNEI7QUFDNUIsVUFBTXdCLEtBQUssR0FBRyxLQUFLTix1QkFBTCxFQUFkO0FBQ0FNLFNBQUssQ0FBQ0gsR0FBRCxDQUFMLEdBQWFFLEtBQWI7QUFDQSxXQUFPOUIscUJBQUEsQ0FBYyxLQUFLTyxnQkFBbkIsQ0FBUDtBQUNBUixNQUFFLENBQUNpQyxhQUFILENBQWlCLEtBQUt6QixnQkFBdEIsRUFBd0MwQixJQUFJLENBQUNDLFNBQUwsQ0FBZUgsS0FBZixFQUFzQixJQUF0QixFQUE0QixDQUE1QixDQUF4QztBQUNIOztBQTNDZ0QsQ0FBdEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy93aW5kb3dwcmVmcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuXHJcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgV2luZG93UHJlZnMgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIldpbmRvd1ByZWZzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcIndpbmRvd1wiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJ0cmFuc3BhcmVuY3lcIjt9XHJcblxyXG4gICAgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUpIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlO1xyXG4gICAgICAgIGNvbnN0IGVsZWN0cm9uID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHA7XHJcbiAgICAgICAgY29uc3QgYmFzZSA9IGVsZWN0cm9uLmdldEFwcFBhdGgoKTtcclxuICAgICAgICBjb25zdCByb2FtaW5nQmFzZSA9IGVsZWN0cm9uLmdldFBhdGgoXCJ1c2VyRGF0YVwiKTtcclxuICAgICAgICBjb25zdCByb2FtaW5nTG9jYXRpb24gPSBwYXRoLnJlc29sdmUocm9hbWluZ0Jhc2UsIGVsZWN0cm9uLmdldFZlcnNpb24oKSwgXCJtb2R1bGVzXCIsIFwiZGlzY29yZF9kZXNrdG9wX2NvcmVcIiwgXCJpbmplY3RvclwiLCBcImNvbmZpZy5qc29uXCIpO1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGJhc2UsIFwiLi5cIiwgXCJhcHBcIiwgXCJjb25maWcuanNvblwiKTtcclxuICAgICAgICBjb25zdCByZWFsTG9jYXRpb24gPSBmcy5leGlzdHNTeW5jKGxvY2F0aW9uKSA/IGxvY2F0aW9uIDogZnMuZXhpc3RzU3luYyhyb2FtaW5nTG9jYXRpb24pID8gcm9hbWluZ0xvY2F0aW9uIDogbnVsbDtcclxuICAgICAgICBpZiAoIXJlYWxMb2NhdGlvbikgcmV0dXJuIHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlID0gcmVhbExvY2F0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwidHJhbnNwYXJlbnRcIiwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwiYmFja2dyb3VuZENvbG9yXCIsIG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIHRoaXMuc2V0V2luZG93UHJlZmVyZW5jZShcInRyYW5zcGFyZW50XCIsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbFdpbmRvd1ByZWZlcmVuY2VzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5XaW5kb3dDb25maWdGaWxlKSByZXR1cm4ge307XHJcbiAgICAgICAgcmV0dXJuIF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHRoaXMuV2luZG93Q29uZmlnRmlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0V2luZG93UHJlZmVyZW5jZShrZXkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuV2luZG93Q29uZmlnRmlsZSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLldpbmRvd0NvbmZpZ0ZpbGUpIHJldHVybjtcclxuICAgICAgICBjb25zdCBwcmVmcyA9IHRoaXMuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKTtcclxuICAgICAgICBwcmVmc1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgZGVsZXRlIHJlcXVpcmUuY2FjaGVbdGhpcy5XaW5kb3dDb25maWdGaWxlXTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuV2luZG93Q29uZmlnRmlsZSwgSlNPTi5zdHJpbmdpZnkocHJlZnMsIG51bGwsIDQpKTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/windowprefs.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 _ui_modals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class WindowPrefs extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"WindowPrefs\";\n }\n\n get category() {\n return \"window\";\n }\n\n get id() {\n return \"transparency\";\n }\n\n initialize() {\n super.initialize();\n this.prefs = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getData(\"windowprefs\") || {};\n }\n\n enabled() {\n this.setWindowPreference(\"transparent\", true);\n this.setWindowPreference(\"backgroundColor\", \"#00000000\");\n this.showModal(modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].WindowPrefs.enabledInfo);\n }\n\n disabled() {\n this.deleteWindowPreference(\"transparent\");\n this.deleteWindowPreference(\"backgroundColor\");\n this.showModal(modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].WindowPrefs.disabledInfo);\n }\n\n showModal(info) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showConfirmationModal(modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Modals.additionalInfo, info, {\n confirmText: modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Modals.restartNow,\n cancelText: modules__WEBPACK_IMPORTED_MODULE_2__[\"Strings\"].Modals.restartLater,\n onConfirm: () => {\n const app = __webpack_require__(/*! electron */ \"electron\").remote.app;\n\n app.relaunch();\n app.exit();\n }\n });\n }\n\n getWindowPreference(key) {\n return this.prefs[key];\n }\n\n setWindowPreference(key, value) {\n this.prefs[key] = value;\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setData(\"windowprefs\", this.prefs);\n }\n\n deleteWindowPreference(key) {\n delete this.prefs[key];\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setData(\"windowprefs\", this.prefs);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL3dpbmRvd3ByZWZzLmpzP2I0YTciXSwibmFtZXMiOlsiV2luZG93UHJlZnMiLCJCdWlsdGluIiwibmFtZSIsImNhdGVnb3J5IiwiaWQiLCJpbml0aWFsaXplIiwicHJlZnMiLCJEYXRhU3RvcmUiLCJnZXREYXRhIiwiZW5hYmxlZCIsInNldFdpbmRvd1ByZWZlcmVuY2UiLCJzaG93TW9kYWwiLCJTdHJpbmdzIiwiZW5hYmxlZEluZm8iLCJkaXNhYmxlZCIsImRlbGV0ZVdpbmRvd1ByZWZlcmVuY2UiLCJkaXNhYmxlZEluZm8iLCJpbmZvIiwiTW9kYWxzIiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiYWRkaXRpb25hbEluZm8iLCJjb25maXJtVGV4dCIsInJlc3RhcnROb3ciLCJjYW5jZWxUZXh0IiwicmVzdGFydExhdGVyIiwib25Db25maXJtIiwiYXBwIiwicmVxdWlyZSIsInJlbW90ZSIsInJlbGF1bmNoIiwiZXhpdCIsImdldFdpbmRvd1ByZWZlcmVuY2UiLCJrZXkiLCJ2YWx1ZSIsInNldERhdGEiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRWUsbUVBQUksTUFBTUEsV0FBTixTQUEwQkMsd0RBQTFCLENBQWtDO0FBQ2pELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sYUFBUDtBQUFzQjs7QUFDbEMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxRQUFQO0FBQWlCOztBQUNqQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLGNBQVA7QUFBdUI7O0FBRWpDQyxZQUFVLEdBQUc7QUFDVCxVQUFNQSxVQUFOO0FBQ0EsU0FBS0MsS0FBTCxHQUFhQyxpREFBUyxDQUFDQyxPQUFWLENBQWtCLGFBQWxCLEtBQW9DLEVBQWpEO0FBQ0g7O0FBRURDLFNBQU8sR0FBRztBQUNOLFNBQUtDLG1CQUFMLENBQXlCLGFBQXpCLEVBQXdDLElBQXhDO0FBQ0EsU0FBS0EsbUJBQUwsQ0FBeUIsaUJBQXpCLEVBQTRDLFdBQTVDO0FBQ0EsU0FBS0MsU0FBTCxDQUFlQywrQ0FBTyxDQUFDWixXQUFSLENBQW9CYSxXQUFuQztBQUNIOztBQUVEQyxVQUFRLEdBQUc7QUFDUCxTQUFLQyxzQkFBTCxDQUE0QixhQUE1QjtBQUNBLFNBQUtBLHNCQUFMLENBQTRCLGlCQUE1QjtBQUNBLFNBQUtKLFNBQUwsQ0FBZUMsK0NBQU8sQ0FBQ1osV0FBUixDQUFvQmdCLFlBQW5DO0FBQ0g7O0FBRURMLFdBQVMsQ0FBQ00sSUFBRCxFQUFPO0FBQ1pDLHNEQUFNLENBQUNDLHFCQUFQLENBQTZCUCwrQ0FBTyxDQUFDTSxNQUFSLENBQWVFLGNBQTVDLEVBQTRESCxJQUE1RCxFQUFrRTtBQUM5REksaUJBQVcsRUFBRVQsK0NBQU8sQ0FBQ00sTUFBUixDQUFlSSxVQURrQztBQUU5REMsZ0JBQVUsRUFBRVgsK0NBQU8sQ0FBQ00sTUFBUixDQUFlTSxZQUZtQztBQUc5REMsZUFBUyxFQUFFLE1BQU07QUFDYixjQUFNQyxHQUFHLEdBQUdDLG1CQUFPLENBQUMsMEJBQUQsQ0FBUCxDQUFvQkMsTUFBcEIsQ0FBMkJGLEdBQXZDOztBQUNBQSxXQUFHLENBQUNHLFFBQUo7QUFDQUgsV0FBRyxDQUFDSSxJQUFKO0FBQ0g7QUFQNkQsS0FBbEU7QUFTSDs7QUFFREMscUJBQW1CLENBQUNDLEdBQUQsRUFBTTtBQUNyQixXQUFPLEtBQUsxQixLQUFMLENBQVcwQixHQUFYLENBQVA7QUFDSDs7QUFFRHRCLHFCQUFtQixDQUFDc0IsR0FBRCxFQUFNQyxLQUFOLEVBQWE7QUFDNUIsU0FBSzNCLEtBQUwsQ0FBVzBCLEdBQVgsSUFBa0JDLEtBQWxCO0FBQ0ExQixxREFBUyxDQUFDMkIsT0FBVixDQUFrQixhQUFsQixFQUFpQyxLQUFLNUIsS0FBdEM7QUFDSDs7QUFFRFMsd0JBQXNCLENBQUNpQixHQUFELEVBQU07QUFDeEIsV0FBTyxLQUFLMUIsS0FBTCxDQUFXMEIsR0FBWCxDQUFQO0FBQ0F6QixxREFBUyxDQUFDMkIsT0FBVixDQUFrQixhQUFsQixFQUFpQyxLQUFLNUIsS0FBdEM7QUFDSDs7QUE5Q2dELENBQXRDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvd2luZG93cHJlZnMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcbmltcG9ydCBNb2RhbHMgZnJvbSBcIi4uL3VpL21vZGFsc1wiO1xyXG5pbXBvcnQge0RhdGFTdG9yZSwgU3RyaW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBXaW5kb3dQcmVmcyBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiV2luZG93UHJlZnNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwid2luZG93XCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcInRyYW5zcGFyZW5jeVwiO31cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcclxuICAgICAgICB0aGlzLnByZWZzID0gRGF0YVN0b3JlLmdldERhdGEoXCJ3aW5kb3dwcmVmc1wiKSB8fCB7fTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIHRoaXMuc2V0V2luZG93UHJlZmVyZW5jZShcInRyYW5zcGFyZW50XCIsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBcIiMwMDAwMDAwMFwiKTtcclxuICAgICAgICB0aGlzLnNob3dNb2RhbChTdHJpbmdzLldpbmRvd1ByZWZzLmVuYWJsZWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICB0aGlzLmRlbGV0ZVdpbmRvd1ByZWZlcmVuY2UoXCJ0cmFuc3BhcmVudFwiKTtcclxuICAgICAgICB0aGlzLmRlbGV0ZVdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIik7XHJcbiAgICAgICAgdGhpcy5zaG93TW9kYWwoU3RyaW5ncy5XaW5kb3dQcmVmcy5kaXNhYmxlZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dNb2RhbChpbmZvKSB7XHJcbiAgICAgICAgTW9kYWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChTdHJpbmdzLk1vZGFscy5hZGRpdGlvbmFsSW5mbywgaW5mbywge1xyXG4gICAgICAgICAgICBjb25maXJtVGV4dDogU3RyaW5ncy5Nb2RhbHMucmVzdGFydE5vdyxcclxuICAgICAgICAgICAgY2FuY2VsVGV4dDogU3RyaW5ncy5Nb2RhbHMucmVzdGFydExhdGVyLFxyXG4gICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFwcCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwO1xyXG4gICAgICAgICAgICAgICAgYXBwLnJlbGF1bmNoKCk7XHJcbiAgICAgICAgICAgICAgICBhcHAuZXhpdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0V2luZG93UHJlZmVyZW5jZShrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcmVmc1trZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFdpbmRvd1ByZWZlcmVuY2Uoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMucHJlZnNba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXREYXRhKFwid2luZG93cHJlZnNcIiwgdGhpcy5wcmVmcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlV2luZG93UHJlZmVyZW5jZShrZXkpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5wcmVmc1trZXldO1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXREYXRhKFwid2luZG93cHJlZnNcIiwgdGhpcy5wcmVmcyk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/windowprefs.js\n"); /***/ }), @@ -311,7 +335,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _con /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ([{\n type: \"category\",\n id: \"general\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"emotes\",\n value: true\n }, {\n type: \"switch\",\n id: \"publicServers\",\n value: true\n }, {\n type: \"switch\",\n id: \"voiceDisconnect\",\n value: false\n }, {\n type: \"switch\",\n id: \"twentyFourHour\",\n value: false\n }, {\n type: \"switch\",\n id: \"classNormalizer\",\n value: true\n }, {\n type: \"switch\",\n id: \"showToasts\",\n value: true\n }]\n}, {\n type: \"category\",\n id: \"appearance\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"voiceMode\",\n value: false\n }, {\n type: \"switch\",\n id: \"minimalMode\",\n value: false\n }, {\n type: \"switch\",\n id: \"hideChannels\",\n value: false,\n enableWith: \"minimalMode\"\n }, {\n type: \"switch\",\n id: \"darkMode\",\n value: true\n }, {\n type: \"switch\",\n id: \"coloredText\",\n value: false\n }]\n}, {\n type: \"category\",\n id: \"addons\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"addonErrors\",\n value: true\n }, {\n type: \"switch\",\n id: \"autoScroll\",\n value: true\n }, {\n type: \"switch\",\n id: \"autoReload\",\n value: true\n }, {\n type: \"dropdown\",\n id: \"editAction\",\n value: \"detached\",\n options: [{\n value: \"detached\"\n }, {\n value: \"system\"\n }]\n }]\n}, {\n type: \"category\",\n id: \"customcss\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"customcss\",\n value: true\n }, {\n type: \"switch\",\n id: \"liveUpdate\",\n value: false\n }, {\n type: \"dropdown\",\n id: \"openAction\",\n value: \"settings\",\n options: [{\n value: \"settings\"\n }, {\n value: \"detached\"\n }, {\n value: \"system\"\n }]\n }]\n}, {\n type: \"category\",\n id: \"developer\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"developerMode\",\n value: false\n }, {\n type: \"switch\",\n id: \"copySelector\",\n value: false,\n enableWith: \"developerMode\"\n }]\n}, {\n type: \"category\",\n id: \"window\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"transparency\",\n value: false\n }, {\n type: \"switch\",\n id: \"frame\",\n value: false,\n hidden: true\n }]\n}]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvc2V0dGluZ3MvY29uZmlnLmpzP2ZmOGUiXSwibmFtZXMiOlsidHlwZSIsImlkIiwiY29sbGFwc2libGUiLCJzZXR0aW5ncyIsInZhbHVlIiwiZW5hYmxlV2l0aCIsInNob3duIiwib3B0aW9ucyIsImhpZGRlbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBZSxnRUFDWDtBQUNJQSxNQUFJLEVBQUUsVUFEVjtBQUVJQyxJQUFFLEVBQUUsU0FGUjtBQUdJQyxhQUFXLEVBQUUsSUFIakI7QUFJSUMsVUFBUSxFQUFFLENBQ047QUFBQ0gsUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxRQUFyQjtBQUErQkcsU0FBSyxFQUFFO0FBQXRDLEdBRE0sRUFFTjtBQUFDSixRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLGVBQXJCO0FBQXNDRyxTQUFLLEVBQUU7QUFBN0MsR0FGTSxFQUdOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsaUJBQXJCO0FBQXdDRyxTQUFLLEVBQUU7QUFBL0MsR0FITSxFQUlOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsZ0JBQXJCO0FBQXVDRyxTQUFLLEVBQUU7QUFBOUMsR0FKTSxFQUtOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsaUJBQXJCO0FBQXdDRyxTQUFLLEVBQUU7QUFBL0MsR0FMTSxFQU1OO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsWUFBckI7QUFBbUNHLFNBQUssRUFBRTtBQUExQyxHQU5NO0FBSmQsQ0FEVyxFQWNYO0FBQ0lKLE1BQUksRUFBRSxVQURWO0FBRUlDLElBQUUsRUFBRSxZQUZSO0FBR0lDLGFBQVcsRUFBRSxJQUhqQjtBQUlJQyxVQUFRLEVBQUUsQ0FDTjtBQUFDSCxRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLFdBQXJCO0FBQWtDRyxTQUFL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QUssRUFBRTtBQUE1QyxHQURNLEVBRU47QUFBQ0osUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxPQUFyQjtBQUE4QkcsU0FBSyxFQUFFLEtBQXJDO0FBQTRDSSxVQUFNLEVBQUU7QUFBcEQsR0FGTTtBQUxkLENBM0RXLENBQWYiLCJmaWxlIjoiLi9zcmMvZGF0YS9zZXR0aW5ncy9jb25maWcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBbXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcImdlbmVyYWxcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiZW1vdGVzXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcInB1YmxpY1NlcnZlcnNcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwidm9pY2VEaXNjb25uZWN0XCIsIHZhbHVlOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJ0d2VudHlGb3VySG91clwiLCB2YWx1ZTogZmFsc2V9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiY2xhc3NOb3JtYWxpemVyXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcInNob3dUb2FzdHNcIiwgdmFsdWU6IHRydWV9XHJcbiAgICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXHJcbiAgICAgICAgaWQ6IFwiYXBwZWFyYW5jZVwiLFxyXG4gICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJ2b2ljZU1vZGVcIiwgdmFsdWU6IGZhbHNlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcIm1pbmltYWxNb2RlXCIsIHZhbHVlOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJoaWRlQ2hhbm5lbHNcIiwgdmFsdWU6IGZhbHNlLCBlbmFibGVXaXRoOiBcIm1pbmltYWxNb2RlXCJ9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiZGFya01vZGVcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiY29sb3JlZFRleHRcIiwgdmFsdWU6IGZhbHNlfVxyXG4gICAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcImFkZG9uc1wiLFxyXG4gICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHNob3duOiBmYWxzZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiYWRkb25FcnJvcnNcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiYXV0b1Njcm9sbFwiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJhdXRvUmVsb2FkXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwiZHJvcGRvd25cIiwgaWQ6IFwiZWRpdEFjdGlvblwiLCB2YWx1ZTogXCJkZXRhY2hlZFwiLCBvcHRpb25zOiBbe3ZhbHVlOiBcImRldGFjaGVkXCJ9LCB7dmFsdWU6IFwic3lzdGVtXCJ9XX1cclxuICAgICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcclxuICAgICAgICBpZDogXCJjdXN0b21jc3NcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzaG93bjogZmFsc2UsXHJcbiAgICAgICAgc2V0dGluZ3M6IFtcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImN1c3RvbWNzc1wiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJsaXZlVXBkYXRlXCIsIHZhbHVlOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcImRyb3Bkb3duXCIsIGlkOiBcIm9wZW5BY3Rpb25cIiwgdmFsdWU6IFwic2V0dGluZ3NcIiwgb3B0aW9uczogW3t2YWx1ZTogXCJzZXR0aW5nc1wifSwge3ZhbHVlOiBcImRldGFjaGVkXCJ9LCB7dmFsdWU6IFwic3lzdGVtXCJ9XX1cclxuICAgICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcclxuICAgICAgICBpZDogXCJkZXZlbG9wZXJcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzaG93bjogZmFsc2UsXHJcbiAgICAgICAgc2V0dGluZ3M6IFtcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImRldmVsb3Blck1vZGVcIiwgdmFsdWU6IGZhbHNlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImNvcHlTZWxlY3RvclwiLCB2YWx1ZTogZmFsc2UsIGVuYWJsZVdpdGg6IFwiZGV2ZWxvcGVyTW9kZVwifVxyXG4gICAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcIndpbmRvd1wiLFxyXG4gICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHNob3duOiBmYWxzZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwidHJhbnNwYXJlbmN5XCIsIHZhbHVlOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJmcmFtZVwiLCB2YWx1ZTogZmFsc2UsIGhpZGRlbjogdHJ1ZX1cclxuICAgICAgICBdXHJcbiAgICB9XHJcbl07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/data/settings/config.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ([{\n type: \"category\",\n id: \"general\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"emotes\",\n value: true\n }, {\n type: \"switch\",\n id: \"publicServers\",\n value: true\n }, {\n type: \"switch\",\n id: \"voiceDisconnect\",\n value: false\n }, {\n type: \"switch\",\n id: \"twentyFourHour\",\n value: false\n }, {\n type: \"switch\",\n id: \"classNormalizer\",\n value: true\n }, {\n type: \"switch\",\n id: \"showToasts\",\n value: true\n }]\n}, {\n type: \"category\",\n id: \"appearance\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"voiceMode\",\n value: false\n }, {\n type: \"switch\",\n id: \"minimalMode\",\n value: false\n }, {\n type: \"switch\",\n id: \"hideChannels\",\n value: false,\n enableWith: \"minimalMode\"\n }, {\n type: \"switch\",\n id: \"darkMode\",\n value: true\n }, {\n type: \"switch\",\n id: \"coloredText\",\n value: false\n }]\n}, {\n type: \"category\",\n id: \"addons\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"addonErrors\",\n value: true\n }, {\n type: \"switch\",\n id: \"autoScroll\",\n value: true\n }, {\n type: \"switch\",\n id: \"autoReload\",\n value: true\n }, {\n type: \"dropdown\",\n id: \"editAction\",\n value: \"detached\",\n options: [{\n value: \"detached\"\n }, {\n value: \"system\"\n }]\n }]\n}, {\n type: \"category\",\n id: \"customcss\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"customcss\",\n value: true\n }, {\n type: \"switch\",\n id: \"liveUpdate\",\n value: false\n }, {\n type: \"dropdown\",\n id: \"openAction\",\n value: \"settings\",\n options: [{\n value: \"settings\"\n }, {\n value: \"detached\"\n }, {\n value: \"system\"\n }]\n }]\n}, {\n type: \"category\",\n id: \"developer\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"debuggerHotkey\",\n value: false\n }, {\n type: \"switch\",\n id: \"copySelector\",\n value: false\n }, {\n type: \"switch\",\n id: \"reactDevTools\",\n value: false\n }]\n}, {\n type: \"category\",\n id: \"window\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"transparency\",\n value: false\n }, {\n type: \"switch\",\n id: \"frame\",\n value: false,\n hidden: true\n }]\n}]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvc2V0dGluZ3MvY29uZmlnLmpzP2ZmOGUiXSwibmFtZXMiOlsidHlwZSIsImlkIiwiY29sbGFwc2libGUiLCJzZXR0aW5ncyIsInZhbHVlIiwiZW5hYmxlV2l0aCIsInNob3duIiwib3B0aW9ucyIsImhpZGRlbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBZSxnRUFDWDtBQUNJQSxNQUFJLEVBQUUsVUFEVjtBQUVJQyxJQUFFLEVBQUUsU0FGUjtBQUdJQyxhQUFXLEVBQUUsSUFIakI7QUFJSUMsVUFBUSxFQUFFLENBQ047QUFBQ0gsUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxRQUFyQjtBQUErQkcsU0FBSyxFQUFFO0FBQXRDLEdBRE0sRUFFTjtBQUFDSixRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLGVBQXJCO0FBQXNDRyxTQUFLLEVBQUU7QUFBN0MsR0FGTSxFQUdOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsaUJBQXJCO0FBQXdDRyxTQUFLLEVBQUU7QUFBL0MsR0FITSxFQUlOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsZ0JBQXJCO0FBQXVDRyxTQUFLLEVBQUU7QUFBOUMsR0FKTSxFQUtOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsaUJBQXJCO0FBQXdDRyxTQUFLLEVBQUU7QUFBL0MsR0FMTSxFQU1OO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsWUFBckI7QUFBbUNHLFNBQUssRUFBRTtBQUExQyxHQU5NO0FBSmQsQ0FEVyxFQWNYO0FBQ0lKLE1BQUksRUFBRSxVQURWO0FBRUlDLElBQUUsRUFBRSxZQUZSO0FBR0lDLGFBQVcsRUFBRSxJQUhqQjtBQUlJQyxVQUFRLEVBQUUsQ0FDTjtBQUFDSCxRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLFdBQXJCO0FBQWtDRyxTQUFL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TjtBQUFDSCxRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLGNBQXJCO0FBQXFDRyxTQUFLLEVBQUU7QUFBNUMsR0FETSxFQUVOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsT0FBckI7QUFBOEJHLFNBQUssRUFBRSxLQUFyQztBQUE0Q0ksVUFBTSxFQUFFO0FBQXBELEdBRk07QUFMZCxDQTVEVyxDQUFmIiwiZmlsZSI6Ii4vc3JjL2RhdGEvc2V0dGluZ3MvY29uZmlnLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgW1xyXG4gICAge1xyXG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcclxuICAgICAgICBpZDogXCJnZW5lcmFsXCIsXHJcbiAgICAgICAgY29sbGFwc2libGU6IHRydWUsXHJcbiAgICAgICAgc2V0dGluZ3M6IFtcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImVtb3Rlc1wiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJwdWJsaWNTZXJ2ZXJzXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcInZvaWNlRGlzY29ubmVjdFwiLCB2YWx1ZTogZmFsc2V9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwidHdlbnR5Rm91ckhvdXJcIiwgdmFsdWU6IGZhbHNlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImNsYXNzTm9ybWFsaXplclwiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJzaG93VG9hc3RzXCIsIHZhbHVlOiB0cnVlfVxyXG4gICAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcImFwcGVhcmFuY2VcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwidm9pY2VNb2RlXCIsIHZhbHVlOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJtaW5pbWFsTW9kZVwiLCB2YWx1ZTogZmFsc2V9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiaGlkZUNoYW5uZWxzXCIsIHZhbHVlOiBmYWxzZSwgZW5hYmxlV2l0aDogXCJtaW5pbWFsTW9kZVwifSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImRhcmtNb2RlXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImNvbG9yZWRUZXh0XCIsIHZhbHVlOiBmYWxzZX1cclxuICAgICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcclxuICAgICAgICBpZDogXCJhZGRvbnNcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzaG93bjogZmFsc2UsXHJcbiAgICAgICAgc2V0dGluZ3M6IFtcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImFkZG9uRXJyb3JzXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImF1dG9TY3JvbGxcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiYXV0b1JlbG9hZFwiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcImRyb3Bkb3duXCIsIGlkOiBcImVkaXRBY3Rpb25cIiwgdmFsdWU6IFwiZGV0YWNoZWRcIiwgb3B0aW9uczogW3t2YWx1ZTogXCJkZXRhY2hlZFwifSwge3ZhbHVlOiBcInN5c3RlbVwifV19XHJcbiAgICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXHJcbiAgICAgICAgaWQ6IFwiY3VzdG9tY3NzXCIsXHJcbiAgICAgICAgY29sbGFwc2libGU6IHRydWUsXHJcbiAgICAgICAgc2hvd246IGZhbHNlLFxyXG4gICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJjdXN0b21jc3NcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwibGl2ZVVwZGF0ZVwiLCB2YWx1ZTogZmFsc2V9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJkcm9wZG93blwiLCBpZDogXCJvcGVuQWN0aW9uXCIsIHZhbHVlOiBcInNldHRpbmdzXCIsIG9wdGlvbnM6IFt7dmFsdWU6IFwic2V0dGluZ3NcIn0sIHt2YWx1ZTogXCJkZXRhY2hlZFwifSwge3ZhbHVlOiBcInN5c3RlbVwifV19XHJcbiAgICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXHJcbiAgICAgICAgaWQ6IFwiZGV2ZWxvcGVyXCIsXHJcbiAgICAgICAgY29sbGFwc2libGU6IHRydWUsXHJcbiAgICAgICAgc2hvd246IGZhbHNlLFxyXG4gICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJkZWJ1Z2dlckhvdGtleVwiLCB2YWx1ZTogZmFsc2V9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiY29weVNlbGVjdG9yXCIsIHZhbHVlOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJyZWFjdERldlRvb2xzXCIsIHZhbHVlOiBmYWxzZX1cclxuICAgICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcclxuICAgICAgICBpZDogXCJ3aW5kb3dcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzaG93bjogZmFsc2UsXHJcbiAgICAgICAgc2V0dGluZ3M6IFtcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcInRyYW5zcGFyZW5jeVwiLCB2YWx1ZTogZmFsc2V9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiZnJhbWVcIiwgdmFsdWU6IGZhbHNlLCBoaWRkZW46IHRydWV9XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5dOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/data/settings/config.js\n"); /***/ }), @@ -335,7 +359,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n Panels: {\n plugins: \"Plugins\",\n themes: \"Themes\",\n customcss: \"Custom CSS\"\n },\n Collections: {\n settings: {\n name: \"Settings\",\n general: {\n name: \"General\",\n emotes: {\n name: \"Emote System\",\n note: \"Enables BD's emote system\"\n },\n publicServers: {\n name: \"Public Servers\",\n note: \"Display public servers button\"\n },\n voiceDisconnect: {\n name: \"Voice Disconnect\",\n note: \"Disconnect from voice server when closing Discord\"\n },\n twentyFourHour: {\n name: \"24-Hour Timestamps\",\n note: \"Hides channels when in minimal mode\"\n },\n classNormalizer: {\n name: \"Normalize Classes\",\n note: \"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)\"\n },\n showToasts: {\n name: \"Show Toasts\",\n note: \"Shows a small notification for important information\"\n }\n },\n appearance: {\n name: \"Appearance\",\n voiceMode: {\n name: \"Voice Mode\",\n note: \"Hides everything that isn't voice chat\"\n },\n minimalMode: {\n name: \"Minimal Mode\",\n note: \"Hide elements and reduce the size of elements\"\n },\n hideChannels: {\n name: \"Hide Channels\",\n note: \"Hides channels when in minimal mode\"\n },\n darkMode: {\n name: \"Dark Mode\",\n note: \"Make certain elements dark by default\"\n },\n coloredText: {\n name: \"Colored Text\",\n note: \"Make text colour the same as role color\"\n }\n },\n addons: {\n name: \"Addon Manager\",\n addonErrors: {\n name: \"Show Addon Errors\",\n note: \"Shows a modal with plugin/theme errors\"\n },\n autoScroll: {\n name: \"Scroll To Settings\",\n note: \"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)\"\n },\n autoReload: {\n name: \"Automatic Loading\",\n note: \"Automatically loads, reloads, and unloads plugins and themes\"\n },\n editAction: {\n name: \"Edit Action\",\n note: \"Where plugins & themes appear when editing\",\n options: {\n detached: \"Detached Window\",\n system: \"System Editor\"\n }\n }\n },\n customcss: {\n name: \"Custom CSS\",\n customcss: {\n name: \"Custom CSS\",\n note: \"Enables the Custom CSS tab\"\n },\n liveUpdate: {\n name: \"Live Update\",\n note: \"Updates the css as you type\"\n },\n startDetached: {\n name: \"Start Detached\",\n note: \"Clicking the Custom CSS tab opens the editor in a separate window\"\n },\n nativeOpen: {\n name: \"Open in Native Editor\",\n note: \"Clicking the Custom CSS tab opens your custom css in your native editor\"\n },\n openAction: {\n name: \"Editor Location\",\n note: \"Where Custom CSS should open by default\",\n options: {\n settings: \"Settings Menu\",\n detached: \"Detached Window\",\n system: \"System Editor\"\n }\n }\n },\n developer: {\n name: \"Developer Settings\",\n developerMode: {\n name: \"Developer Mode\",\n note: \"Allows activating debugger when pressing F8\"\n },\n copySelector: {\n name: \"Copy Selector\",\n note: \"Adds a \\\"Copy Selector\\\" option to context menus when developer mode is active\"\n }\n },\n window: {\n name: \"Window Preferences\",\n transparency: {\n name: \"Enable Transparency\",\n note: \"Enables the main window to be see-through (requires restart)\"\n },\n frame: {\n name: \"Window Frame\",\n note: \"Adds the native os window frame to the main window\"\n }\n }\n },\n emotes: {\n name: \"Emotes\",\n general: {\n name: \"General\",\n download: {\n name: \"Download Emotes\",\n note: \"Download emotes whenever they are out of date\"\n },\n emoteMenu: {\n name: \"Emote Menu\",\n note: \"Show Twitch/Favourite emotes in emote menu\"\n },\n hideEmojiMenu: {\n name: \"Hide Emoji Menu\",\n note: \"Hides Discord's emoji menu when using emote menu\"\n },\n autoCaps: {\n name: \"Emote Autocapitalization\",\n note: \"Autocapitalize emote commands\"\n },\n showNames: {\n name: \"Show Names\",\n note: \"Show emote names on hover\"\n },\n modifiers: {\n name: \"Show Emote Modifiers\",\n note: \"Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)\"\n },\n animateOnHover: {\n name: \"Animate On Hover\",\n note: \"Only animate the emote modifiers on hover\"\n }\n },\n categories: {\n name: \"Categories\",\n twitchglobal: {\n name: \"Twitch Globals\",\n note: \"Show Twitch global emotes\"\n },\n twitchsubscriber: {\n name: \"Twitch Subscribers\",\n note: \"Show Twitch subscriber emotes\"\n },\n frankerfacez: {\n name: \"FrankerFaceZ\",\n note: \"Show emotes from FFZ\"\n },\n bttv: {\n name: \"BetterTTV\",\n note: \"Show emotes from BTTV\"\n }\n }\n }\n },\n Addons: {\n title: \"{{name}} v{{version}} by {{author}}\",\n openFolder: \"Open {{type}} Folder\",\n reload: \"Reload\",\n addonSettings: \"Settings\",\n website: \"Website\",\n source: \"Source\",\n server: \"Support Server\",\n donate: \"Donate\",\n name: \"Name\",\n author: \"Author\",\n version: \"Version\",\n added: \"Date Added\",\n modified: \"Date Modified\",\n search: \"Search {{type}}\",\n editAddon: \"Edit\",\n deleteAddon: \"Delete\",\n confirmDelete: \"Are you sure you want to delete {{name}}?\",\n confirmationText: \"You have unsaved changes to {{name}}. Closing this window will lose all those changes.\"\n },\n Emotes: {\n loading: \"Loading emotes in the background do not reload.\",\n loaded: \"All emotes successfully loaded.\",\n clearEmotes: \"Clear Emote Data\",\n favoriteAction: \"Favorite!\"\n },\n CustomCSS: {\n confirmationText: \"You have unsaved changes to your Custom CSS. Closing this window will lose all those changes.\",\n update: \"Update\",\n save: \"Save\",\n openNative: \"Open in System Editor\",\n openDetached: \"Detach Window\",\n settings: \"Editor Settings\",\n editorTitle: \"Custom CSS Editor\"\n },\n PublicServers: {\n button: \"public\",\n join: \"Join\",\n joining: \"Joining\",\n joined: \"Joined\",\n loading: \"Loading\",\n loadMore: \"Load More\",\n notConnected: \"Not connected to DiscordServers.com!\",\n search: \"Search\",\n connect: \"Connect\",\n reconnect: \"Reconnect\",\n categories: \"Categories\",\n connection: \"Connected as: {{username}}#{{discriminator}}\",\n results: \"Showing {{start}}-{{end}} of {{total}} results in {{category}}\",\n query: \"for {{query}}\"\n },\n Modals: {\n confirmAction: \"Are You Sure?\",\n okay: \"Okay\",\n cancel: \"Cancel\",\n close: \"Close\",\n name: \"Name\",\n message: \"Message\",\n error: \"Error\",\n addonErrors: \"Addon Errors\"\n },\n Sorting: {\n sortBy: \"Sort By\",\n order: \"Order\",\n ascending: \"Ascending\",\n descending: \"Descending\"\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvc3RyaW5ncy5qcz9iYzcxIl0sIm5hbWVzIjpbIlBhbmVscyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJjdXN0b21jc3MiLCJDb2xsZWN0aW9ucyIsInNldHRpbmdzIiwibmFtZSIsImdlbmVyYWwiLCJlbW90ZXMiLCJub3RlIiwicHVibGljU2VydmVycyIsInZvaWNlRGlzY29ubmVjdCIsInR3ZW50eUZvdXJIb3VyIiwiY2xhc3NOb3JtYWxpemVyIiwic2hvd1RvYXN0cyIsImFwcGVhcmFuY2UiLCJ2b2ljZU1vZGUiLCJtaW5pbWFsTW9kZSIsImhpZGVDaGFubmVscyIsImRhcmtNb2RlIiwiY29sb3JlZFRleHQiLCJhZGRvbnMiLCJhZGRvbkVycm9ycyIsImF1dG9TY3JvbGwiLCJhdXRvUmVsb2FkIiwiZWRpdEFjdGlvbiIsIm9wdGlvbnMiLCJkZXRhY2hlZCIsInN5c3RlbSIsImxpdmVVcGRhdGUiLCJzdGFydERldGFjaGVkIiwibmF0aXZlT3BlbiIsIm9wZW5BY3Rpb24iLCJkZXZlbG9wZXIiLCJkZXZlbG9wZXJNb2RlIiwiY29weVNlbGVjdG9yIiwid2luZG93IiwidHJhbnNwYXJlbmN5IiwiZnJhbWUiLCJkb3dubG9hZCIsImVtb3RlTWVudSIsImhpZGVFbW9qaU1lbnUiLCJhdXRvQ2FwcyIsInNob3dOYW1lcyIsIm1vZGlmaWVycyIsImFuaW1hdGVPbkhvdmVyIiwiY2F0ZWdvcmllcyIsInR3aXRjaGdsb2JhbCIsInR3aXRjaHN1YnNjcmliZXIiLCJmcmFua2VyZmFjZXoiLCJidHR2IiwiQWRkb25zIiwidGl0bGUiLCJvcGVuRm9sZGVyIiwicmVsb2FkIiwiYWRkb25TZXR0aW5ncyIsIndlYnNpdGUiLCJzb3VyY2UiLCJzZXJ2ZXIiLCJkb25hdGUiLCJhdXRob3IiLCJ2ZXJzaW9uIiwiYWRkZWQiLCJtb2RpZmllZCIsInNlYXJjaCIsImVkaXRBZGRvbiIsImRlbGV0ZUFkZG9uIiwiY29uZmlybURlbGV0ZSIsImNvbmZpcm1hdGlvblRleHQiLCJFbW90ZXMiLCJsb2FkaW5nIiwibG9hZGVkIiwiY2xlYXJFbW90ZXMiLCJmYXZvcml0ZUFjdGlvbiIsIkN1c3RvbUNTUyIsInVwZGF0ZSIsInNhdmUiLCJvcGVuTmF0aXZlIiwib3BlbkRldGFjaGVkIiwiZWRpdG9yVGl0bGUiLCJQdWJsaWNTZXJ2ZXJzIiwiYnV0dG9uIiwiam9pbiIsImpvaW5pbmciLCJqb2luZWQiLCJsb2FkTW9yZSIsIm5vdENvbm5lY3RlZCIsImNvbm5lY3QiLCJyZWNvbm5lY3QiLCJjb25uZWN0aW9uIiwicmVzdWx0cyIsInF1ZXJ5IiwiTW9kYWxzIiwiY29uZmlybUFjdGlvbiIsIm9rYXkiLCJjYW5jZWwiLCJjbG9zZSIsIm1lc3NhZ2UiLCJlcnJvciIsIlNvcnRpbmciLCJzb3J0QnkiLCJvcmRlciIsImFzY2VuZGluZyIsImRlc2NlbmRpbmciXSwibWFwcGluZ3MiOiJBQUFBO0FBQWU7QUFDWEEsUUFBTSxFQUFFO0FBQ0pDLFdBQU8sRUFBRSxTQURMO0FBRUpDLFVBQU0sRUFBRSxRQUZKO0FBR0pDLGFBQVMsRUFBRTtBQUhQLEdBREc7QUFNWEMsYUFBVyxFQUFFO0FBQ1RDLFlBQVEsRUFBRTtBQUNOQyxVQUFJLEVBQUUsVUFEQTtBQUVOQyxhQUFPLEVBQUU7QUFDTEQsWUFBSSxFQUFFLFNBREQ7QUFFTEUsY0FBTSxFQUFFO0FBQ0pGLGNBQUksRUFBRSxjQURGO0FBRUpHLGNBQUksRUFBRTtBQUZGLFNBRkg7QUFNTEMscUJBQWEsRUFBRTtBQUNYSixjQUFJLEVBQUUsZ0JBREs7QUFFWEcsY0FBSSxFQUFFO0FBRkssU0FOVjtBQVVMRSx1QkFBZSxFQUFFO0FBQ2JMLGNBQUksRUFBRSxrQkFETztBQUViRyxjQUFJLEVBQUU7QUFGTyxTQVZaO0FBY0xHLHNCQUFjLEVBQUU7QUFDWk4sY0FBSSxFQUFFLG9CQURNO0FBRVpHLGNBQUksRUFBRTtBQUZNLFNBZFg7QUFrQkxJLHVCQUFlLEVBQUU7QUFDYlAsY0FBSSxFQUFFLG1CQURPO0FBRWJHLGNB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QyxpQkFBYSxFQUFFLGVBRFg7QUFFSkMsUUFBSSxFQUFFLE1BRkY7QUFHSkMsVUFBTSxFQUFFLFFBSEo7QUFJSkMsU0FBSyxFQUFFLE9BSkg7QUFLSjFGLFFBQUksRUFBRSxNQUxGO0FBTUoyRixXQUFPLEVBQUUsU0FOTDtBQU9KQyxTQUFLLEVBQUUsT0FQSDtBQVFKNUUsZUFBVyxFQUFFO0FBUlQsR0E5T0c7QUF3UFg2RSxTQUFPLEVBQUU7QUFDTEMsVUFBTSxFQUFFLFNBREg7QUFFTEMsU0FBSyxFQUFFLE9BRkY7QUFHTEMsYUFBUyxFQUFFLFdBSE47QUFJTEMsY0FBVSxFQUFFO0FBSlA7QUF4UEUsQ0FBZiIsImZpbGUiOiIuL3NyYy9kYXRhL3N0cmluZ3MuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XHJcbiAgICBQYW5lbHM6IHtcclxuICAgICAgICBwbHVnaW5zOiBcIlBsdWdpbnNcIixcclxuICAgICAgICB0aGVtZXM6IFwiVGhlbWVzXCIsXHJcbiAgICAgICAgY3VzdG9tY3NzOiBcIkN1c3RvbSBDU1NcIlxyXG4gICAgfSxcclxuICAgIENvbGxlY3Rpb25zOiB7XHJcbiAgICAgICAgc2V0dGluZ3M6IHtcclxuICAgICAgICAgICAgbmFtZTogXCJTZXR0aW5nc1wiLFxyXG4gICAgICAgICAgICBnZW5lcmFsOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkdlbmVyYWxcIixcclxuICAgICAgICAgICAgICAgIGVtb3Rlczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW1vdGUgU3lzdGVtXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJFbmFibGVzIEJEJ3MgZW1vdGUgc3lzdGVtXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBwdWJsaWNTZXJ2ZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJQdWJsaWMgU2VydmVyc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRGlzcGxheSBwdWJsaWMgc2VydmVycyBidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHZvaWNlRGlzY29ubmVjdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVm9pY2UgRGlzY29ubmVjdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRGlzY29ubmVjdCBmcm9tIHZvaWNlIHNlcnZlciB3aGVuIGNsb3NpbmcgRGlzY29yZFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHdlbnR5Rm91ckhvdXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIjI0LUhvdXIgVGltZXN0YW1wc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSGlkZXMgY2hhbm5lbHMgd2hlbiBpbiBtaW5pbWFsIG1vZGVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNsYXNzTm9ybWFsaXplcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTm9ybWFsaXplIENsYXNzZXNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkFkZHMgc3RhYmxlIGNsYXNzZXMgdG8gZWxlbWVudHMgdG8gaGVscCB0aGVtZXMuIChlLmcuIGFkZHMgLmRhLWNoYW5uZWxzIHRvIC5jaGFubmVscy1JZTJsNkEpXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzaG93VG9hc3RzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTaG93IFRvYXN0c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvd3MgYSBzbWFsbCBub3RpZmljYXRpb24gZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvblwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQXBwZWFyYW5jZVwiLFxyXG4gICAgICAgICAgICAgICAgdm9pY2VNb2RlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJWb2ljZSBNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJIaWRlcyBldmVyeXRoaW5nIHRoYXQgaXNuJ3Qgdm9pY2UgY2hhdFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbWluaW1hbE1vZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk1pbmltYWwgTW9kZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSGlkZSBlbGVtZW50cyBhbmQgcmVkdWNlIHRoZSBzaXplIG9mIGVsZW1lbnRzXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBoaWRlQ2hhbm5lbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkhpZGUgQ2hhbm5lbHNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkhpZGVzIGNoYW5uZWxzIHdoZW4gaW4gbWluaW1hbCBtb2RlXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBkYXJrTW9kZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGFyayBNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJNYWtlIGNlcnRhaW4gZWxlbWVudHMgZGFyayBieSBkZWZhdWx0XCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb2xvcmVkVGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29sb3JlZCBUZXh0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJNYWtlIHRleHQgY29sb3VyIHRoZSBzYW1lIGFzIHJvbGUgY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhZGRvbnM6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQWRkb24gTWFuYWdlclwiLFxyXG4gICAgICAgICAgICAgICAgYWRkb25FcnJvcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNob3cgQWRkb24gRXJyb3JzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJTaG93cyBhIG1vZGFsIHdpdGggcGx1Z2luL3RoZW1lIGVycm9yc1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYXV0b1Njcm9sbDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2Nyb2xsIFRvIFNldHRpbmdzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJBdXRvLXNjcm9sbHMgdG8gYSBwbHVnaW4ncyBzZXR0aW5ncyB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCAob25seSBpZiBvdXQgb2YgdmlldylcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGF1dG9SZWxvYWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkF1dG9tYXRpYyBMb2FkaW5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJBdXRvbWF0aWNhbGx5IGxvYWRzLCByZWxvYWRzLCBhbmQgdW5sb2FkcyBwbHVnaW5zIGFuZCB0aGVtZXNcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVkaXRBY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVkaXQgQWN0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJXaGVyZSBwbHVnaW5zICYgdGhlbWVzIGFwcGVhciB3aGVuIGVkaXRpbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaGVkOiBcIkRldGFjaGVkIFdpbmRvd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW06IFwiU3lzdGVtIEVkaXRvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjdXN0b21jc3M6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQ3VzdG9tIENTU1wiLFxyXG4gICAgICAgICAgICAgICAgY3VzdG9tY3NzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDdXN0b20gQ1NTXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJFbmFibGVzIHRoZSBDdXN0b20gQ1NTIHRhYlwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbGl2ZVVwZGF0ZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTGl2ZSBVcGRhdGVcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlVwZGF0ZXMgdGhlIGNzcyBhcyB5b3UgdHlwZVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3RhcnREZXRhY2hlZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RhcnQgRGV0YWNoZWRcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkNsaWNraW5nIHRoZSBDdXN0b20gQ1NTIHRhYiBvcGVucyB0aGUgZWRpdG9yIGluIGEgc2VwYXJhdGUgd2luZG93XCIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbmF0aXZlT3Blbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiT3BlbiBpbiBOYXRpdmUgRWRpdG9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJDbGlja2luZyB0aGUgQ3VzdG9tIENTUyB0YWIgb3BlbnMgeW91ciBjdXN0b20gY3NzIGluIHlvdXIgbmF0aXZlIGVkaXRvclwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb3BlbkFjdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRWRpdG9yIExvY2F0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJXaGVyZSBDdXN0b20gQ1NTIHNob3VsZCBvcGVuIGJ5IGRlZmF1bHRcIixcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzOiBcIlNldHRpbmdzIE1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWNoZWQ6IFwiRGV0YWNoZWQgV2luZG93XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTogXCJTeXN0ZW0gRWRpdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRldmVsb3Blcjoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJEZXZlbG9wZXIgU2V0dGluZ3NcIixcclxuICAgICAgICAgICAgICAgIGRldmVsb3Blck1vZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRldmVsb3BlciBNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJBbGxvd3MgYWN0aXZhdGluZyBkZWJ1Z2dlciB3aGVuIHByZXNzaW5nIEY4XCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb3B5U2VsZWN0b3I6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvcHkgU2VsZWN0b3JcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkFkZHMgYSBcXFwiQ29weSBTZWxlY3RvclxcXCIgb3B0aW9uIHRvIGNvbnRleHQgbWVudXMgd2hlbiBkZXZlbG9wZXIgbW9kZSBpcyBhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB3aW5kb3c6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiV2luZG93IFByZWZlcmVuY2VzXCIsXHJcbiAgICAgICAgICAgICAgICB0cmFuc3BhcmVuY3k6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVuYWJsZSBUcmFuc3BhcmVuY3lcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkVuYWJsZXMgdGhlIG1haW4gd2luZG93IHRvIGJlIHNlZS10aHJvdWdoIChyZXF1aXJlcyByZXN0YXJ0KVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZnJhbWU6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIldpbmRvdyBGcmFtZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiQWRkcyB0aGUgbmF0aXZlIG9zIHdpbmRvdyBmcmFtZSB0byB0aGUgbWFpbiB3aW5kb3dcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbW90ZXM6IHtcclxuICAgICAgICAgICAgbmFtZTogXCJFbW90ZXNcIixcclxuICAgICAgICAgICAgZ2VuZXJhbDoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJHZW5lcmFsXCIsXHJcbiAgICAgICAgICAgICAgICBkb3dubG9hZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRG93bmxvYWQgRW1vdGVzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJEb3dubG9hZCBlbW90ZXMgd2hlbmV2ZXIgdGhleSBhcmUgb3V0IG9mIGRhdGVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVtb3RlTWVudToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW1vdGUgTWVudVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvdyBUd2l0Y2gvRmF2b3VyaXRlIGVtb3RlcyBpbiBlbW90ZSBtZW51XCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBoaWRlRW1vamlNZW51OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJIaWRlIEVtb2ppIE1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkhpZGVzIERpc2NvcmQncyBlbW9qaSBtZW51IHdoZW4gdXNpbmcgZW1vdGUgbWVudVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYXV0b0NhcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVtb3RlIEF1dG9jYXBpdGFsaXphdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiQXV0b2NhcGl0YWxpemUgZW1vdGUgY29tbWFuZHNcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNob3dOYW1lczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2hvdyBOYW1lc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvdyBlbW90ZSBuYW1lcyBvbiBob3ZlclwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTaG93IEVtb3RlIE1vZGlmaWVyc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRW5hYmxlIGVtb3RlIG1vZHMgKGZsaXAsIHNwaW4sIHB1bHNlLCBzcGluMiwgc3BpbjMsIDFzcGluLCAyc3BpbiwgM3NwaW4sIHRyLCBibCwgYnIsIHNoYWtlLCBzaGFrZTIsIHNoYWtlMywgZmxhcClcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGFuaW1hdGVPbkhvdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJBbmltYXRlIE9uIEhvdmVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJPbmx5IGFuaW1hdGUgdGhlIGVtb3RlIG1vZGlmaWVycyBvbiBob3ZlclwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQ2F0ZWdvcmllc1wiLFxyXG4gICAgICAgICAgICAgICAgdHdpdGNoZ2xvYmFsOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUd2l0Y2ggR2xvYmFsc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvdyBUd2l0Y2ggZ2xvYmFsIGVtb3Rlc1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHdpdGNoc3Vic2NyaWJlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVHdpdGNoIFN1YnNjcmliZXJzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJTaG93IFR3aXRjaCBzdWJzY3JpYmVyIGVtb3Rlc1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZnJhbmtlcmZhY2V6OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJGcmFua2VyRmFjZVpcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgZW1vdGVzIGZyb20gRkZaXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBidHR2OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCZXR0ZXJUVFZcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgZW1vdGVzIGZyb20gQlRUVlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgQWRkb25zOiB7XHJcbiAgICAgICAgdGl0bGU6IFwie3tuYW1lfX0gdnt7dmVyc2lvbn19IGJ5IHt7YXV0aG9yfX1cIixcclxuICAgICAgICBvcGVuRm9sZGVyOiBcIk9wZW4ge3t0eXBlfX0gRm9sZGVyXCIsXHJcbiAgICAgICAgcmVsb2FkOiBcIlJlbG9hZFwiLFxyXG4gICAgICAgIGFkZG9uU2V0dGluZ3M6IFwiU2V0dGluZ3NcIixcclxuICAgICAgICB3ZWJzaXRlOiBcIldlYnNpdGVcIixcclxuICAgICAgICBzb3VyY2U6IFwiU291cmNlXCIsXHJcbiAgICAgICAgc2VydmVyOiBcIlN1cHBvcnQgU2VydmVyXCIsXHJcbiAgICAgICAgZG9uYXRlOiBcIkRvbmF0ZVwiLFxyXG4gICAgICAgIG5hbWU6IFwiTmFtZVwiLFxyXG4gICAgICAgIGF1dGhvcjogXCJBdXRob3JcIixcclxuICAgICAgICB2ZXJzaW9uOiBcIlZlcnNpb25cIixcclxuICAgICAgICBhZGRlZDogXCJEYXRlIEFkZGVkXCIsXHJcbiAgICAgICAgbW9kaWZpZWQ6IFwiRGF0ZSBNb2RpZmllZFwiLFxyXG4gICAgICAgIHNlYXJjaDogXCJTZWFyY2gge3t0eXBlfX1cIixcclxuICAgICAgICBlZGl0QWRkb246IFwiRWRpdFwiLFxyXG4gICAgICAgIGRlbGV0ZUFkZG9uOiBcIkRlbGV0ZVwiLFxyXG4gICAgICAgIGNvbmZpcm1EZWxldGU6IFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB7e25hbWV9fT9cIixcclxuICAgICAgICBjb25maXJtYXRpb25UZXh0OiBcIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyB0byB7e25hbWV9fS4gQ2xvc2luZyB0aGlzIHdpbmRvdyB3aWxsIGxvc2UgYWxsIHRob3NlIGNoYW5nZXMuXCIsXHJcbiAgICB9LFxyXG4gICAgRW1vdGVzOiB7XHJcbiAgICAgICAgbG9hZGluZzogXCJMb2FkaW5nIGVtb3RlcyBpbiB0aGUgYmFja2dyb3VuZCBkbyBub3QgcmVsb2FkLlwiLFxyXG4gICAgICAgIGxvYWRlZDogXCJBbGwgZW1vdGVzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXCIsXHJcbiAgICAgICAgY2xlYXJFbW90ZXM6IFwiQ2xlYXIgRW1vdGUgRGF0YVwiLFxyXG4gICAgICAgIGZhdm9yaXRlQWN0aW9uOiBcIkZhdm9yaXRlIVwiXHJcbiAgICB9LFxyXG4gICAgQ3VzdG9tQ1NTOiB7XHJcbiAgICAgICAgY29uZmlybWF0aW9uVGV4dDogXCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgdG8geW91ciBDdXN0b20gQ1NTLiBDbG9zaW5nIHRoaXMgd2luZG93IHdpbGwgbG9zZSBhbGwgdGhvc2UgY2hhbmdlcy5cIixcclxuICAgICAgICB1cGRhdGU6IFwiVXBkYXRlXCIsXHJcbiAgICAgICAgc2F2ZTogXCJTYXZlXCIsXHJcbiAgICAgICAgb3Blbk5hdGl2ZTogXCJPcGVuIGluIFN5c3RlbSBFZGl0b3JcIixcclxuICAgICAgICBvcGVuRGV0YWNoZWQ6IFwiRGV0YWNoIFdpbmRvd1wiLFxyXG4gICAgICAgIHNldHRpbmdzOiBcIkVkaXRvciBTZXR0aW5nc1wiLFxyXG4gICAgICAgIGVkaXRvclRpdGxlOiBcIkN1c3RvbSBDU1MgRWRpdG9yXCJcclxuICAgIH0sXHJcbiAgICBQdWJsaWNTZXJ2ZXJzOiB7XHJcbiAgICAgICAgYnV0dG9uOiBcInB1YmxpY1wiLFxyXG4gICAgICAgIGpvaW46IFwiSm9pblwiLFxyXG4gICAgICAgIGpvaW5pbmc6IFwiSm9pbmluZ1wiLFxyXG4gICAgICAgIGpvaW5lZDogXCJKb2luZWRcIixcclxuICAgICAgICBsb2FkaW5nOiBcIkxvYWRpbmdcIixcclxuICAgICAgICBsb2FkTW9yZTogXCJMb2FkIE1vcmVcIixcclxuICAgICAgICBub3RDb25uZWN0ZWQ6IFwiTm90IGNvbm5lY3RlZCB0byBEaXNjb3JkU2VydmVycy5jb20hXCIsXHJcbiAgICAgICAgc2VhcmNoOiBcIlNlYXJjaFwiLFxyXG4gICAgICAgIGNvbm5lY3Q6IFwiQ29ubmVjdFwiLFxyXG4gICAgICAgIHJlY29ubmVjdDogXCJSZWNvbm5lY3RcIixcclxuICAgICAgICBjYXRlZ29yaWVzOiBcIkNhdGVnb3JpZXNcIixcclxuICAgICAgICBjb25uZWN0aW9uOiBcIkNvbm5lY3RlZCBhczoge3t1c2VybmFtZX19I3t7ZGlzY3JpbWluYXRvcn19XCIsXHJcbiAgICAgICAgcmVzdWx0czogXCJTaG93aW5nIHt7c3RhcnR9fS17e2VuZH19IG9mIHt7dG90YWx9fSByZXN1bHRzIGluIHt7Y2F0ZWdvcnl9fVwiLFxyXG4gICAgICAgIHF1ZXJ5OiBcImZvciB7e3F1ZXJ5fX1cIlxyXG4gICAgfSxcclxuICAgIE1vZGFsczoge1xyXG4gICAgICAgIGNvbmZpcm1BY3Rpb246IFwiQXJlIFlvdSBTdXJlP1wiLFxyXG4gICAgICAgIG9rYXk6IFwiT2theVwiLFxyXG4gICAgICAgIGNhbmNlbDogXCJDYW5jZWxcIixcclxuICAgICAgICBjbG9zZTogXCJDbG9zZVwiLFxyXG4gICAgICAgIG5hbWU6IFwiTmFtZVwiLFxyXG4gICAgICAgIG1lc3NhZ2U6IFwiTWVzc2FnZVwiLFxyXG4gICAgICAgIGVycm9yOiBcIkVycm9yXCIsXHJcbiAgICAgICAgYWRkb25FcnJvcnM6IFwiQWRkb24gRXJyb3JzXCJcclxuICAgIH0sXHJcbiAgICBTb3J0aW5nOiB7XHJcbiAgICAgICAgc29ydEJ5OiBcIlNvcnQgQnlcIixcclxuICAgICAgICBvcmRlcjogXCJPcmRlclwiLFxyXG4gICAgICAgIGFzY2VuZGluZzogXCJBc2NlbmRpbmdcIixcclxuICAgICAgICBkZXNjZW5kaW5nOiBcIkRlc2NlbmRpbmdcIlxyXG4gICAgfVxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/data/strings.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n Panels: {\n plugins: \"Plugins\",\n themes: \"Themes\",\n customcss: \"Custom CSS\"\n },\n Collections: {\n settings: {\n name: \"Settings\",\n general: {\n name: \"General\",\n emotes: {\n name: \"Emote System\",\n note: \"Enables BD's emote system\"\n },\n publicServers: {\n name: \"Public Servers\",\n note: \"Display public servers button\"\n },\n voiceDisconnect: {\n name: \"Voice Disconnect\",\n note: \"Disconnect from voice server when closing Discord\"\n },\n twentyFourHour: {\n name: \"24-Hour Timestamps\",\n note: \"Hides channels when in minimal mode\"\n },\n classNormalizer: {\n name: \"Normalize Classes\",\n note: \"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)\"\n },\n showToasts: {\n name: \"Show Toasts\",\n note: \"Shows a small notification for important information\"\n }\n },\n appearance: {\n name: \"Appearance\",\n voiceMode: {\n name: \"Voice Mode\",\n note: \"Hides everything that isn't voice chat\"\n },\n minimalMode: {\n name: \"Minimal Mode\",\n note: \"Hide elements and reduce the size of elements\"\n },\n hideChannels: {\n name: \"Hide Channels\",\n note: \"Hides channels when in minimal mode\"\n },\n darkMode: {\n name: \"Dark Mode\",\n note: \"Make certain elements dark by default\"\n },\n coloredText: {\n name: \"Colored Text\",\n note: \"Make text colour the same as role color\"\n }\n },\n addons: {\n name: \"Addon Manager\",\n addonErrors: {\n name: \"Show Addon Errors\",\n note: \"Shows a modal with plugin/theme errors\"\n },\n autoScroll: {\n name: \"Scroll To Settings\",\n note: \"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)\"\n },\n autoReload: {\n name: \"Automatic Loading\",\n note: \"Automatically loads, reloads, and unloads plugins and themes\"\n },\n editAction: {\n name: \"Edit Action\",\n note: \"Where plugins & themes appear when editing\",\n options: {\n detached: \"Detached Window\",\n system: \"System Editor\"\n }\n }\n },\n customcss: {\n name: \"Custom CSS\",\n customcss: {\n name: \"Custom CSS\",\n note: \"Enables the Custom CSS tab\"\n },\n liveUpdate: {\n name: \"Live Update\",\n note: \"Updates the css as you type\"\n },\n startDetached: {\n name: \"Start Detached\",\n note: \"Clicking the Custom CSS tab opens the editor in a separate window\"\n },\n nativeOpen: {\n name: \"Open in Native Editor\",\n note: \"Clicking the Custom CSS tab opens your custom css in your native editor\"\n },\n openAction: {\n name: \"Editor Location\",\n note: \"Where Custom CSS should open by default\",\n options: {\n settings: \"Settings Menu\",\n detached: \"Detached Window\",\n system: \"System Editor\"\n }\n }\n },\n developer: {\n name: \"Developer Settings\",\n debuggerHotkey: {\n name: \"Debugger Hotkey\",\n note: \"Allows activating debugger when pressing F8\"\n },\n copySelector: {\n name: \"Copy Selector\",\n note: \"Adds a \\\"Copy Selector\\\" option to context menus when developer mode is active\"\n },\n reactDevTools: {\n name: \"React Developer Tools\",\n note: \"Injects your local installation of React Developer Tools into Discord\"\n }\n },\n window: {\n name: \"Window Preferences\",\n transparency: {\n name: \"Enable Transparency\",\n note: \"Enables the main window to be see-through (requires restart)\"\n },\n frame: {\n name: \"Window Frame\",\n note: \"Adds the native os window frame to the main window\"\n }\n }\n },\n emotes: {\n name: \"Emotes\",\n general: {\n name: \"General\",\n download: {\n name: \"Download Emotes\",\n note: \"Download emotes whenever they are out of date\"\n },\n emoteMenu: {\n name: \"Emote Menu\",\n note: \"Show Twitch/Favourite emotes in emote menu\"\n },\n hideEmojiMenu: {\n name: \"Hide Emoji Menu\",\n note: \"Hides Discord's emoji menu when using emote menu\"\n },\n autoCaps: {\n name: \"Emote Autocapitalization\",\n note: \"Autocapitalize emote commands\"\n },\n showNames: {\n name: \"Show Names\",\n note: \"Show emote names on hover\"\n },\n modifiers: {\n name: \"Show Emote Modifiers\",\n note: \"Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)\"\n },\n animateOnHover: {\n name: \"Animate On Hover\",\n note: \"Only animate the emote modifiers on hover\"\n }\n },\n categories: {\n name: \"Categories\",\n twitchglobal: {\n name: \"Twitch Globals\",\n note: \"Show Twitch global emotes\"\n },\n twitchsubscriber: {\n name: \"Twitch Subscribers\",\n note: \"Show Twitch subscriber emotes\"\n },\n frankerfacez: {\n name: \"FrankerFaceZ\",\n note: \"Show emotes from FFZ\"\n },\n bttv: {\n name: \"BetterTTV\",\n note: \"Show emotes from BTTV\"\n }\n }\n }\n },\n Addons: {\n title: \"{{name}} v{{version}} by {{author}}\",\n openFolder: \"Open {{type}} Folder\",\n reload: \"Reload\",\n addonSettings: \"Settings\",\n website: \"Website\",\n source: \"Source\",\n invite: \"Support Server\",\n donate: \"Donate\",\n patreon: \"Patreon\",\n name: \"Name\",\n author: \"Author\",\n version: \"Version\",\n added: \"Date Added\",\n modified: \"Date Modified\",\n search: \"Search {{type}}\",\n editAddon: \"Edit\",\n deleteAddon: \"Delete\",\n confirmDelete: \"Are you sure you want to delete {{name}}?\",\n confirmationText: \"You have unsaved changes to {{name}}. Closing this window will lose all those changes.\"\n },\n Emotes: {\n loading: \"Loading emotes in the background do not reload.\",\n loaded: \"All emotes successfully loaded.\",\n clearEmotes: \"Clear Emote Data\",\n favoriteAction: \"Favorite!\"\n },\n CustomCSS: {\n confirmationText: \"You have unsaved changes to your Custom CSS. Closing this window will lose all those changes.\",\n update: \"Update\",\n save: \"Save\",\n openNative: \"Open in System Editor\",\n openDetached: \"Detach Window\",\n settings: \"Editor Settings\",\n editorTitle: \"Custom CSS Editor\"\n },\n PublicServers: {\n button: \"public\",\n join: \"Join\",\n joining: \"Joining\",\n joined: \"Joined\",\n loading: \"Loading\",\n loadMore: \"Load More\",\n notConnected: \"Not connected to DiscordServers.com!\",\n search: \"Search\",\n connect: \"Connect\",\n reconnect: \"Reconnect\",\n categories: \"Categories\",\n connection: \"Connected as: {{username}}#{{discriminator}}\",\n results: \"Showing {{start}}-{{end}} of {{total}} results in {{category}}\",\n query: \"for {{query}}\"\n },\n Modals: {\n confirmAction: \"Are You Sure?\",\n okay: \"Okay\",\n cancel: \"Cancel\",\n close: \"Close\",\n name: \"Name\",\n message: \"Message\",\n error: \"Error\",\n addonErrors: \"Addon Errors\",\n restartRequired: \"Restart Required\",\n restartNow: \"Restart Now\",\n restartLater: \"Restart Later\",\n additionalInfo: \"Additional Info\"\n },\n Sorting: {\n sortBy: \"Sort By\",\n order: \"Order\",\n ascending: \"Ascending\",\n descending: \"Descending\"\n },\n WindowPrefs: {\n enabledInfo: \"This option requires a transparent theme in order to work properly. On Windows this may break your aero snapping and maximizing.\\n\\nIn order to take effect, Discord needs to be restarted. Do you want to restart now?\",\n disabledInfo: \"In order to take effect, Discord needs to be restarted. Do you want to restart now?\"\n },\n Startup: {\n notSupported: \"Not Supported\",\n versionMismatch: \"BandagedBD Injector v{{injector}} is not supported by the latest remote (v{{remote}}).\\n\\nPlease download the latest version from [GitHub](https://github.com/rauenzi/BetterDiscordApp/releases/latest)\",\n incompatibleApp: \"BandagedBD does not work with {{app}}. Please uninstall one of them.\",\n updateNow: \"Update Now\",\n maybeLater: \"Maybe Later\",\n updateAvailable: \"Update Available\",\n updateInfo: \"There is an update available for BandagedBD's Injector ({{version}}).\\n\\nYou can either update and restart now, or later.\",\n updateFailed: \"Could Not Update\",\n manualUpdate: \"Unable to update automatically, please download the installer and reinstall normally.\\n\\n[Download Installer](https://github.com/rauenzi/BetterDiscordApp/releases/latest)\"\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvc3RyaW5ncy5qcz9iYzcxIl0sIm5hbWVzIjpbIlBhbmVscyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJjdXN0b21jc3MiLCJDb2xsZWN0aW9ucyIsInNldHRpbmdzIiwibmFtZSIsImdlbmVyYWwiLCJlbW90ZXMiLCJub3RlIiwicHVibGljU2VydmVycyIsInZvaWNlRGlzY29ubmVjdCIsInR3ZW50eUZvdXJIb3VyIiwiY2xhc3NOb3JtYWxpemVyIiwic2hvd1RvYXN0cyIsImFwcGVhcmFuY2UiLCJ2b2ljZU1vZGUiLCJtaW5pbWFsTW9kZSIsImhpZGVDaGFubmVscyIsImRhcmtNb2RlIiwiY29sb3JlZFRleHQiLCJhZGRvbnMiLCJhZGRvbkVycm9ycyIsImF1dG9TY3JvbGwiLCJhdXRvUmVsb2FkIiwiZWRpdEFjdGlvbiIsIm9wdGlvbnMiLCJkZXRhY2hlZCIsInN5c3RlbSIsImxpdmVVcGRhdGUiLCJzdGFydERldGFjaGVkIiwibmF0aXZlT3BlbiIsIm9wZW5BY3Rpb24iLCJkZXZlbG9wZXIiLCJkZWJ1Z2dlckhvdGtleSIsImNvcHlTZWxlY3RvciIsInJlYWN0RGV2VG9vbHMiLCJ3aW5kb3ciLCJ0cmFuc3BhcmVuY3kiLCJmcmFtZSIsImRvd25sb2FkIiwiZW1vdGVNZW51IiwiaGlkZUVtb2ppTWVudSIsImF1dG9DYXBzIiwic2hvd05hbWVzIiwibW9kaWZpZXJzIiwiYW5pbWF0ZU9uSG92ZXIiLCJjYXRlZ29yaWVzIiwidHdpdGNoZ2xvYmFsIiwidHdpdGNoc3Vic2NyaWJlciIsImZyYW5rZXJmYWNleiIsImJ0dHYiLCJBZGRvbnMiLCJ0aXRsZSIsIm9wZW5Gb2xkZXIiLCJyZWxvYWQiLCJhZGRvblNldHRpbmdzIiwid2Vic2l0ZSIsInNvdXJjZSIsImludml0ZSIsImRvbmF0ZSIsInBhdHJlb24iLCJhdXRob3IiLCJ2ZXJzaW9uIiwiYWRkZWQiLCJtb2RpZmllZCIsInNlYXJjaCIsImVkaXRBZGRvbiIsImRlbGV0ZUFkZG9uIiwiY29uZmlybURlbGV0ZSIsImNvbmZpcm1hdGlvblRleHQiLCJFbW90ZXMiLCJsb2FkaW5nIiwibG9hZGVkIiwiY2xlYXJFbW90ZXMiLCJmYXZvcml0ZUFjdGlvbiIsIkN1c3RvbUNTUyIsInVwZGF0ZSIsInNhdmUiLCJvcGVuTmF0aXZlIiwib3BlbkRldGFjaGVkIiwiZWRpdG9yVGl0bGUiLCJQdWJsaWNTZXJ2ZXJzIiwiYnV0dG9uIiwiam9pbiIsImpvaW5pbmciLCJqb2luZWQiLCJsb2FkTW9yZSIsIm5vdENvbm5lY3RlZCIsImNvbm5lY3QiLCJyZWNvbm5lY3QiLCJjb25uZWN0aW9uIiwicmVzdWx0cyIsInF1ZXJ5IiwiTW9kYWxzIiwiY29uZmlybUFjdGlvbiIsIm9rYXkiLCJjYW5jZWwiLCJjbG9zZSIsIm1lc3NhZ2UiLCJlcnJvciIsInJlc3RhcnRSZXF1aXJlZCIsInJlc3RhcnROb3ciLCJyZXN0YXJ0TGF0ZXIiLCJhZGRpdGlvbmFsSW5mbyIsIlNvcnRpbmciLCJzb3J0QnkiLCJvcmRlciIsImFzY2VuZGluZyIsImRlc2NlbmRpbmciLCJXaW5kb3dQcmVmcyIsImVuYWJsZWRJbmZvIiwiZGlzYWJsZWRJbmZvIiwiU3RhcnR1cCIsIm5vdFN1cHBvcnRlZCIsInZlcnNpb25NaXNtYXRjaCIsImluY29tcGF0aWJsZUFwcCIsInVwZGF0ZU5vdyIsIm1heWJlTGF0ZXIiLCJ1cGRhdGVBdmFpbGFibGUiLCJ1cGRhdGVJbmZvIiwidXBkYXRlRmFpbGVkIiwibWFudWFsVXBkYXRlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFlO0FBQ1hBLFFBQU0sRUFBRTtBQUNKQyxXQUFPLEVBQUUsU0FETDtBQUVKQyxVQUFNLEVBQUUsUUFGSjtBQUdKQyxhQUFTLEVBQUU7QUFIUCxHQURHO0FBTVhDLGFBQVcsRUFBRTtBQUNUQyxZQUFRLEVBQUU7QUFDTkMsVUFBSSxFQUFFLFVBREE7QUFFTkMsYUFBTyxFQUFFO0FBQ0xELFlBQUksRUFBRSxTQUREO0FBRUxFLGNBQU0sRUFBRTtBQUNKRixjQUFJ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QVMsRUFBRSxZQUpOO0FBS0xDLGNBQVUsRUFBRSxhQUxQO0FBTUxDLG1CQUFlLEVBQUUsa0JBTlo7QUFPTEMsY0FBVSxFQUFFLDJIQVBQO0FBUUxDLGdCQUFZLEVBQUUsa0JBUlQ7QUFTTEMsZ0JBQVksRUFBRTtBQVRUO0FBM1FFLENBQWYiLCJmaWxlIjoiLi9zcmMvZGF0YS9zdHJpbmdzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgUGFuZWxzOiB7XHJcbiAgICAgICAgcGx1Z2luczogXCJQbHVnaW5zXCIsXHJcbiAgICAgICAgdGhlbWVzOiBcIlRoZW1lc1wiLFxyXG4gICAgICAgIGN1c3RvbWNzczogXCJDdXN0b20gQ1NTXCJcclxuICAgIH0sXHJcbiAgICBDb2xsZWN0aW9uczoge1xyXG4gICAgICAgIHNldHRpbmdzOiB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiU2V0dGluZ3NcIixcclxuICAgICAgICAgICAgZ2VuZXJhbDoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJHZW5lcmFsXCIsXHJcbiAgICAgICAgICAgICAgICBlbW90ZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVtb3RlIFN5c3RlbVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRW5hYmxlcyBCRCdzIGVtb3RlIHN5c3RlbVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcHVibGljU2VydmVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiUHVibGljIFNlcnZlcnNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkRpc3BsYXkgcHVibGljIHNlcnZlcnMgYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB2b2ljZURpc2Nvbm5lY3Q6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlZvaWNlIERpc2Nvbm5lY3RcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkRpc2Nvbm5lY3QgZnJvbSB2b2ljZSBzZXJ2ZXIgd2hlbiBjbG9zaW5nIERpc2NvcmRcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHR3ZW50eUZvdXJIb3VyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCIyNC1Ib3VyIFRpbWVzdGFtcHNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkhpZGVzIGNoYW5uZWxzIHdoZW4gaW4gbWluaW1hbCBtb2RlXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjbGFzc05vcm1hbGl6ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk5vcm1hbGl6ZSBDbGFzc2VzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJBZGRzIHN0YWJsZSBjbGFzc2VzIHRvIGVsZW1lbnRzIHRvIGhlbHAgdGhlbWVzLiAoZS5nLiBhZGRzIC5kYS1jaGFubmVscyB0byAuY2hhbm5lbHMtSWUybDZBKVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvYXN0czoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2hvdyBUb2FzdHNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3dzIGEgc21hbGwgbm90aWZpY2F0aW9uIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhcHBlYXJhbmNlOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkFwcGVhcmFuY2VcIixcclxuICAgICAgICAgICAgICAgIHZvaWNlTW9kZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVm9pY2UgTW9kZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSGlkZXMgZXZlcnl0aGluZyB0aGF0IGlzbid0IHZvaWNlIGNoYXRcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG1pbmltYWxNb2RlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJNaW5pbWFsIE1vZGVcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkhpZGUgZWxlbWVudHMgYW5kIHJlZHVjZSB0aGUgc2l6ZSBvZiBlbGVtZW50c1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaGlkZUNoYW5uZWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJIaWRlIENoYW5uZWxzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJIaWRlcyBjaGFubmVscyB3aGVuIGluIG1pbmltYWwgbW9kZVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZGFya01vZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRhcmsgTW9kZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiTWFrZSBjZXJ0YWluIGVsZW1lbnRzIGRhcmsgYnkgZGVmYXVsdFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29sb3JlZFRleHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbG9yZWQgVGV4dFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiTWFrZSB0ZXh0IGNvbG91ciB0aGUgc2FtZSBhcyByb2xlIGNvbG9yXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkb25zOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkFkZG9uIE1hbmFnZXJcIixcclxuICAgICAgICAgICAgICAgIGFkZG9uRXJyb3JzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTaG93IEFkZG9uIEVycm9yc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvd3MgYSBtb2RhbCB3aXRoIHBsdWdpbi90aGVtZSBlcnJvcnNcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGF1dG9TY3JvbGw6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNjcm9sbCBUbyBTZXR0aW5nc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiQXV0by1zY3JvbGxzIHRvIGEgcGx1Z2luJ3Mgc2V0dGluZ3Mgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgKG9ubHkgaWYgb3V0IG9mIHZpZXcpXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhdXRvUmVsb2FkOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJBdXRvbWF0aWMgTG9hZGluZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiQXV0b21hdGljYWxseSBsb2FkcywgcmVsb2FkcywgYW5kIHVubG9hZHMgcGx1Z2lucyBhbmQgdGhlbWVzXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlZGl0QWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFZGl0IEFjdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiV2hlcmUgcGx1Z2lucyAmIHRoZW1lcyBhcHBlYXIgd2hlbiBlZGl0aW5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhY2hlZDogXCJEZXRhY2hlZCBXaW5kb3dcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtOiBcIlN5c3RlbSBFZGl0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3VzdG9tY3NzOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkN1c3RvbSBDU1NcIixcclxuICAgICAgICAgICAgICAgIGN1c3RvbWNzczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ3VzdG9tIENTU1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRW5hYmxlcyB0aGUgQ3VzdG9tIENTUyB0YWJcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGxpdmVVcGRhdGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkxpdmUgVXBkYXRlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJVcGRhdGVzIHRoZSBjc3MgYXMgeW91IHR5cGVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0RGV0YWNoZWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0YXJ0IERldGFjaGVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJDbGlja2luZyB0aGUgQ3VzdG9tIENTUyB0YWIgb3BlbnMgdGhlIGVkaXRvciBpbiBhIHNlcGFyYXRlIHdpbmRvd1wiLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG5hdGl2ZU9wZW46IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk9wZW4gaW4gTmF0aXZlIEVkaXRvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiQ2xpY2tpbmcgdGhlIEN1c3RvbSBDU1MgdGFiIG9wZW5zIHlvdXIgY3VzdG9tIGNzcyBpbiB5b3VyIG5hdGl2ZSBlZGl0b3JcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9wZW5BY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVkaXRvciBMb2NhdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiV2hlcmUgQ3VzdG9tIENTUyBzaG91bGQgb3BlbiBieSBkZWZhdWx0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nczogXCJTZXR0aW5ncyBNZW51XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaGVkOiBcIkRldGFjaGVkIFdpbmRvd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW06IFwiU3lzdGVtIEVkaXRvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZXZlbG9wZXI6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiRGV2ZWxvcGVyIFNldHRpbmdzXCIsXHJcbiAgICAgICAgICAgICAgICBkZWJ1Z2dlckhvdGtleToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGVidWdnZXIgSG90a2V5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJBbGxvd3MgYWN0aXZhdGluZyBkZWJ1Z2dlciB3aGVuIHByZXNzaW5nIEY4XCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb3B5U2VsZWN0b3I6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvcHkgU2VsZWN0b3JcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkFkZHMgYSBcXFwiQ29weSBTZWxlY3RvclxcXCIgb3B0aW9uIHRvIGNvbnRleHQgbWVudXMgd2hlbiBkZXZlbG9wZXIgbW9kZSBpcyBhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHJlYWN0RGV2VG9vbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlJlYWN0IERldmVsb3BlciBUb29sc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW5qZWN0cyB5b3VyIGxvY2FsIGluc3RhbGxhdGlvbiBvZiBSZWFjdCBEZXZlbG9wZXIgVG9vbHMgaW50byBEaXNjb3JkXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgd2luZG93OiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIldpbmRvdyBQcmVmZXJlbmNlc1wiLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNwYXJlbmN5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbmFibGUgVHJhbnNwYXJlbmN5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJFbmFibGVzIHRoZSBtYWluIHdpbmRvdyB0byBiZSBzZWUtdGhyb3VnaCAocmVxdWlyZXMgcmVzdGFydClcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZyYW1lOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJXaW5kb3cgRnJhbWVcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkFkZHMgdGhlIG5hdGl2ZSBvcyB3aW5kb3cgZnJhbWUgdG8gdGhlIG1haW4gd2luZG93XCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW1vdGVzOiB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRW1vdGVzXCIsXHJcbiAgICAgICAgICAgIGdlbmVyYWw6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiR2VuZXJhbFwiLFxyXG4gICAgICAgICAgICAgICAgZG93bmxvYWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRvd25sb2FkIEVtb3Rlc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRG93bmxvYWQgZW1vdGVzIHdoZW5ldmVyIHRoZXkgYXJlIG91dCBvZiBkYXRlXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlbW90ZU1lbnU6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVtb3RlIE1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgVHdpdGNoL0Zhdm91cml0ZSBlbW90ZXMgaW4gZW1vdGUgbWVudVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaGlkZUVtb2ppTWVudToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiSGlkZSBFbW9qaSBNZW51XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJIaWRlcyBEaXNjb3JkJ3MgZW1vamkgbWVudSB3aGVuIHVzaW5nIGVtb3RlIG1lbnVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGF1dG9DYXBzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbW90ZSBBdXRvY2FwaXRhbGl6YXRpb25cIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkF1dG9jYXBpdGFsaXplIGVtb3RlIGNvbW1hbmRzXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzaG93TmFtZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNob3cgTmFtZXNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgZW1vdGUgbmFtZXMgb24gaG92ZXJcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG1vZGlmaWVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2hvdyBFbW90ZSBNb2RpZmllcnNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkVuYWJsZSBlbW90ZSBtb2RzIChmbGlwLCBzcGluLCBwdWxzZSwgc3BpbjIsIHNwaW4zLCAxc3BpbiwgMnNwaW4sIDNzcGluLCB0ciwgYmwsIGJyLCBzaGFrZSwgc2hha2UyLCBzaGFrZTMsIGZsYXApXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhbmltYXRlT25Ib3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQW5pbWF0ZSBPbiBIb3ZlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiT25seSBhbmltYXRlIHRoZSBlbW90ZSBtb2RpZmllcnMgb24gaG92ZXJcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkNhdGVnb3JpZXNcIixcclxuICAgICAgICAgICAgICAgIHR3aXRjaGdsb2JhbDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVHdpdGNoIEdsb2JhbHNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgVHdpdGNoIGdsb2JhbCBlbW90ZXNcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHR3aXRjaHN1YnNjcmliZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlR3aXRjaCBTdWJzY3JpYmVyc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvdyBUd2l0Y2ggc3Vic2NyaWJlciBlbW90ZXNcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZyYW5rZXJmYWNlejoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRnJhbmtlckZhY2VaXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJTaG93IGVtb3RlcyBmcm9tIEZGWlwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYnR0djoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQmV0dGVyVFRWXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJTaG93IGVtb3RlcyBmcm9tIEJUVFZcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIEFkZG9uczoge1xyXG4gICAgICAgIHRpdGxlOiBcInt7bmFtZX19IHZ7e3ZlcnNpb259fSBieSB7e2F1dGhvcn19XCIsXHJcbiAgICAgICAgb3BlbkZvbGRlcjogXCJPcGVuIHt7dHlwZX19IEZvbGRlclwiLFxyXG4gICAgICAgIHJlbG9hZDogXCJSZWxvYWRcIixcclxuICAgICAgICBhZGRvblNldHRpbmdzOiBcIlNldHRpbmdzXCIsXHJcbiAgICAgICAgd2Vic2l0ZTogXCJXZWJzaXRlXCIsXHJcbiAgICAgICAgc291cmNlOiBcIlNvdXJjZVwiLFxyXG4gICAgICAgIGludml0ZTogXCJTdXBwb3J0IFNlcnZlclwiLFxyXG4gICAgICAgIGRvbmF0ZTogXCJEb25hdGVcIixcclxuICAgICAgICBwYXRyZW9uOiBcIlBhdHJlb25cIixcclxuICAgICAgICBuYW1lOiBcIk5hbWVcIixcclxuICAgICAgICBhdXRob3I6IFwiQXV0aG9yXCIsXHJcbiAgICAgICAgdmVyc2lvbjogXCJWZXJzaW9uXCIsXHJcbiAgICAgICAgYWRkZWQ6IFwiRGF0ZSBBZGRlZFwiLFxyXG4gICAgICAgIG1vZGlmaWVkOiBcIkRhdGUgTW9kaWZpZWRcIixcclxuICAgICAgICBzZWFyY2g6IFwiU2VhcmNoIHt7dHlwZX19XCIsXHJcbiAgICAgICAgZWRpdEFkZG9uOiBcIkVkaXRcIixcclxuICAgICAgICBkZWxldGVBZGRvbjogXCJEZWxldGVcIixcclxuICAgICAgICBjb25maXJtRGVsZXRlOiBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUge3tuYW1lfX0/XCIsXHJcbiAgICAgICAgY29uZmlybWF0aW9uVGV4dDogXCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgdG8ge3tuYW1lfX0uIENsb3NpbmcgdGhpcyB3aW5kb3cgd2lsbCBsb3NlIGFsbCB0aG9zZSBjaGFuZ2VzLlwiLFxyXG4gICAgfSxcclxuICAgIEVtb3Rlczoge1xyXG4gICAgICAgIGxvYWRpbmc6IFwiTG9hZGluZyBlbW90ZXMgaW4gdGhlIGJhY2tncm91bmQgZG8gbm90IHJlbG9hZC5cIixcclxuICAgICAgICBsb2FkZWQ6IFwiQWxsIGVtb3RlcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlwiLFxyXG4gICAgICAgIGNsZWFyRW1vdGVzOiBcIkNsZWFyIEVtb3RlIERhdGFcIixcclxuICAgICAgICBmYXZvcml0ZUFjdGlvbjogXCJGYXZvcml0ZSFcIlxyXG4gICAgfSxcclxuICAgIEN1c3RvbUNTUzoge1xyXG4gICAgICAgIGNvbmZpcm1hdGlvblRleHQ6IFwiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIHRvIHlvdXIgQ3VzdG9tIENTUy4gQ2xvc2luZyB0aGlzIHdpbmRvdyB3aWxsIGxvc2UgYWxsIHRob3NlIGNoYW5nZXMuXCIsXHJcbiAgICAgICAgdXBkYXRlOiBcIlVwZGF0ZVwiLFxyXG4gICAgICAgIHNhdmU6IFwiU2F2ZVwiLFxyXG4gICAgICAgIG9wZW5OYXRpdmU6IFwiT3BlbiBpbiBTeXN0ZW0gRWRpdG9yXCIsXHJcbiAgICAgICAgb3BlbkRldGFjaGVkOiBcIkRldGFjaCBXaW5kb3dcIixcclxuICAgICAgICBzZXR0aW5nczogXCJFZGl0b3IgU2V0dGluZ3NcIixcclxuICAgICAgICBlZGl0b3JUaXRsZTogXCJDdXN0b20gQ1NTIEVkaXRvclwiXHJcbiAgICB9LFxyXG4gICAgUHVibGljU2VydmVyczoge1xyXG4gICAgICAgIGJ1dHRvbjogXCJwdWJsaWNcIixcclxuICAgICAgICBqb2luOiBcIkpvaW5cIixcclxuICAgICAgICBqb2luaW5nOiBcIkpvaW5pbmdcIixcclxuICAgICAgICBqb2luZWQ6IFwiSm9pbmVkXCIsXHJcbiAgICAgICAgbG9hZGluZzogXCJMb2FkaW5nXCIsXHJcbiAgICAgICAgbG9hZE1vcmU6IFwiTG9hZCBNb3JlXCIsXHJcbiAgICAgICAgbm90Q29ubmVjdGVkOiBcIk5vdCBjb25uZWN0ZWQgdG8gRGlzY29yZFNlcnZlcnMuY29tIVwiLFxyXG4gICAgICAgIHNlYXJjaDogXCJTZWFyY2hcIixcclxuICAgICAgICBjb25uZWN0OiBcIkNvbm5lY3RcIixcclxuICAgICAgICByZWNvbm5lY3Q6IFwiUmVjb25uZWN0XCIsXHJcbiAgICAgICAgY2F0ZWdvcmllczogXCJDYXRlZ29yaWVzXCIsXHJcbiAgICAgICAgY29ubmVjdGlvbjogXCJDb25uZWN0ZWQgYXM6IHt7dXNlcm5hbWV9fSN7e2Rpc2NyaW1pbmF0b3J9fVwiLFxyXG4gICAgICAgIHJlc3VsdHM6IFwiU2hvd2luZyB7e3N0YXJ0fX0te3tlbmR9fSBvZiB7e3RvdGFsfX0gcmVzdWx0cyBpbiB7e2NhdGVnb3J5fX1cIixcclxuICAgICAgICBxdWVyeTogXCJmb3Ige3txdWVyeX19XCJcclxuICAgIH0sXHJcbiAgICBNb2RhbHM6IHtcclxuICAgICAgICBjb25maXJtQWN0aW9uOiBcIkFyZSBZb3UgU3VyZT9cIixcclxuICAgICAgICBva2F5OiBcIk9rYXlcIixcclxuICAgICAgICBjYW5jZWw6IFwiQ2FuY2VsXCIsXHJcbiAgICAgICAgY2xvc2U6IFwiQ2xvc2VcIixcclxuICAgICAgICBuYW1lOiBcIk5hbWVcIixcclxuICAgICAgICBtZXNzYWdlOiBcIk1lc3NhZ2VcIixcclxuICAgICAgICBlcnJvcjogXCJFcnJvclwiLFxyXG4gICAgICAgIGFkZG9uRXJyb3JzOiBcIkFkZG9uIEVycm9yc1wiLFxyXG4gICAgICAgIHJlc3RhcnRSZXF1aXJlZDogXCJSZXN0YXJ0IFJlcXVpcmVkXCIsXHJcbiAgICAgICAgcmVzdGFydE5vdzogXCJSZXN0YXJ0IE5vd1wiLFxyXG4gICAgICAgIHJlc3RhcnRMYXRlcjogXCJSZXN0YXJ0IExhdGVyXCIsXHJcbiAgICAgICAgYWRkaXRpb25hbEluZm86IFwiQWRkaXRpb25hbCBJbmZvXCJcclxuICAgIH0sXHJcbiAgICBTb3J0aW5nOiB7XHJcbiAgICAgICAgc29ydEJ5OiBcIlNvcnQgQnlcIixcclxuICAgICAgICBvcmRlcjogXCJPcmRlclwiLFxyXG4gICAgICAgIGFzY2VuZGluZzogXCJBc2NlbmRpbmdcIixcclxuICAgICAgICBkZXNjZW5kaW5nOiBcIkRlc2NlbmRpbmdcIlxyXG4gICAgfSxcclxuICAgIFdpbmRvd1ByZWZzOiB7XHJcbiAgICAgICAgZW5hYmxlZEluZm86IFwiVGhpcyBvcHRpb24gcmVxdWlyZXMgYSB0cmFuc3BhcmVudCB0aGVtZSBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5LiBPbiBXaW5kb3dzIHRoaXMgbWF5IGJyZWFrIHlvdXIgYWVybyBzbmFwcGluZyBhbmQgbWF4aW1pemluZy5cXG5cXG5JbiBvcmRlciB0byB0YWtlIGVmZmVjdCwgRGlzY29yZCBuZWVkcyB0byBiZSByZXN0YXJ0ZWQuIERvIHlvdSB3YW50IHRvIHJlc3RhcnQgbm93P1wiLFxyXG4gICAgICAgIGRpc2FibGVkSW5mbzogXCJJbiBvcmRlciB0byB0YWtlIGVmZmVjdCwgRGlzY29yZCBuZWVkcyB0byBiZSByZXN0YXJ0ZWQuIERvIHlvdSB3YW50IHRvIHJlc3RhcnQgbm93P1wiXHJcbiAgICB9LFxyXG4gICAgU3RhcnR1cDoge1xyXG4gICAgICAgIG5vdFN1cHBvcnRlZDogXCJOb3QgU3VwcG9ydGVkXCIsXHJcbiAgICAgICAgdmVyc2lvbk1pc21hdGNoOiBcIkJhbmRhZ2VkQkQgSW5qZWN0b3Igdnt7aW5qZWN0b3J9fSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBsYXRlc3QgcmVtb3RlICh2e3tyZW1vdGV9fSkuXFxuXFxuUGxlYXNlIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIFtHaXRIdWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0KVwiLFxyXG4gICAgICAgIGluY29tcGF0aWJsZUFwcDogXCJCYW5kYWdlZEJEIGRvZXMgbm90IHdvcmsgd2l0aCB7e2FwcH19LiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiLFxyXG4gICAgICAgIHVwZGF0ZU5vdzogXCJVcGRhdGUgTm93XCIsXHJcbiAgICAgICAgbWF5YmVMYXRlcjogXCJNYXliZSBMYXRlclwiLFxyXG4gICAgICAgIHVwZGF0ZUF2YWlsYWJsZTogXCJVcGRhdGUgQXZhaWxhYmxlXCIsXHJcbiAgICAgICAgdXBkYXRlSW5mbzogXCJUaGVyZSBpcyBhbiB1cGRhdGUgYXZhaWxhYmxlIGZvciBCYW5kYWdlZEJEJ3MgSW5qZWN0b3IgKHt7dmVyc2lvbn19KS5cXG5cXG5Zb3UgY2FuIGVpdGhlciB1cGRhdGUgYW5kIHJlc3RhcnQgbm93LCBvciBsYXRlci5cIixcclxuICAgICAgICB1cGRhdGVGYWlsZWQ6IFwiQ291bGQgTm90IFVwZGF0ZVwiLFxyXG4gICAgICAgIG1hbnVhbFVwZGF0ZTogXCJVbmFibGUgdG8gdXBkYXRlIGF1dG9tYXRpY2FsbHksIHBsZWFzZSBkb3dubG9hZCB0aGUgaW5zdGFsbGVyIGFuZCByZWluc3RhbGwgbm9ybWFsbHkuXFxuXFxuW0Rvd25sb2FkIEluc3RhbGxlcl0oaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QpXCJcclxuICAgIH1cclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/data/strings.js\n"); /***/ }), @@ -347,7 +371,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ /***/ (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 CoreWrapper; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _modules_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/core */ \"./src/modules/core.js\");\n/* harmony import */ var _modules_pluginapi__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/pluginapi */ \"./src/modules/pluginapi.js\");\n/* harmony import */ var _modules_pluginmanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _modules_thememanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _modules_emitter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _modules_datastore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _builtins_emotes__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./builtins/emotes */ \"./src/builtins/emotes.js\");\n/* harmony import */ var _modules_dommanager__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./modules/dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _modules_utilities__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modules/utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _modules_reactcomponents__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./modules/reactcomponents */ \"./src/modules/reactcomponents.js\");\n/* harmony import */ var _modules_strings__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modules/strings */ \"./src/modules/strings.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n // Perform some setup\n// proxyLocalStorage();\n\nconst loadingIcon = document.createElement(\"div\");\nloadingIcon.className = \"bd-loaderv2\";\nloadingIcon.title = \"BandagedBD is loading...\";\ndocument.body.appendChild(loadingIcon); // window.Core = Core;\n\nwindow.BdApi = _modules_pluginapi__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; // window.settings = SettingsInfo;\n// window.settingsCookie = SettingsCookie;\n// window.pluginCookie = PluginCookie;\n// window.themeCookie = ThemeCookie;\n\nwindow.pluginModule = _modules_pluginmanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\nwindow.themeModule = _modules_thememanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; // window.bdthemes = Themes;\n// window.bdplugins = Plugins;\n\nwindow.bdEmotes = _builtins_emotes__WEBPACK_IMPORTED_MODULE_8__[\"default\"].Emotes;\nwindow.bemotes = _builtins_emotes__WEBPACK_IMPORTED_MODULE_8__[\"default\"].blacklist; // window.bdPluginStorage = bdPluginStorage;\n\nwindow.settingsModule = _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_6__[\"default\"];\nwindow.DataStore = _modules_datastore__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\nwindow.DomManager = _modules_dommanager__WEBPACK_IMPORTED_MODULE_9__[\"default\"];\nwindow.utils = _modules_utilities__WEBPACK_IMPORTED_MODULE_10__[\"default\"];\nwindow.Components = _modules_reactcomponents__WEBPACK_IMPORTED_MODULE_11__[\"default\"];\nwindow.BDEvents = _modules_emitter__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\nwindow.bdConfig = data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"];\nwindow.Strings = _modules_strings__WEBPACK_IMPORTED_MODULE_12__[\"default\"];\nclass CoreWrapper {\n constructor(config) {\n _modules_core__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setConfig(config);\n }\n\n init() {\n _modules_core__WEBPACK_IMPORTED_MODULE_1__[\"default\"].init();\n }\n\n}\n\nfunction patchModuleLoad() {\n const namespace = \"betterdiscord\";\n const prefix = `${namespace}/`;\n\n const Module = __webpack_require__(/*! module */ \"module\");\n\n const load = Module._load; // const resolveFilename = Module._resolveFilename;\n\n Module._load = function (request) {\n if (request === namespace || request.startsWith(prefix)) {\n const requested = request.substr(prefix.length);\n if (requested == \"api\") return _modules_pluginapi__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n }\n\n return load.apply(this, arguments);\n }; // Module._resolveFilename = function (request, parent, isMain) {\n // if (request === \"betterdiscord\" || request.startsWith(\"betterdiscord/\")) {\n // const contentPath = PluginManager.getPluginPathByModule(parent);\n // if (contentPath) return request;\n // }\n // return resolveFilename.apply(this, arguments);\n // };\n\n\n return function () {\n Module._load = load;\n };\n}\n\npatchModuleLoad(); // var settingsPanel, emoteModule, quickEmoteMenu, voiceMode,, dMode, publicServersModule;\n// var bdConfig = null;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2luZGV4LmpzP2I2MzUiXSwibmFtZXMiOlsibG9hZGluZ0ljb24iLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ0aXRsZSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsIndpbmRvdyIsIkJkQXBpIiwicGx1Z2luTW9kdWxlIiwiUGx1Z2luTWFuYWdlciIsInRoZW1lTW9kdWxlIiwiVGhlbWVNYW5hZ2VyIiwiYmRFbW90ZXMiLCJFbW90ZU1vZHVsZSIsIkVtb3RlcyIsImJlbW90ZXMiLCJibGFja2xpc3QiLCJzZXR0aW5nc01vZHVsZSIsIlNldHRpbmdzIiwiRGF0YVN0b3JlIiwiRG9tTWFuYWdlciIsInV0aWxzIiwiVXRpbGl0aWVzIiwiQ29tcG9uZW50cyIsIlJlYWN0Q29tcG9uZW50cyIsIkJERXZlbnRzIiwiRXZlbnRzIiwiYmRDb25maWciLCJDb25maWciLCJTdHJpbmdzIiwiQ29yZVdyYXBwZXIiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsIkNvcmUiLCJzZXRDb25maWciLCJpbml0IiwicGF0Y2hNb2R1bGVMb2FkIiwibmFtZXNwYWNlIiwicHJlZml4IiwiTW9kdWxlIiwicmVxdWlyZSIsImxvYWQiLCJfbG9hZCIsInJlcXVlc3QiLCJzdGFydHNXaXRoIiwicmVxdWVzdGVkIiwic3Vic3RyIiwibGVuZ3RoIiwiYXBwbHkiLCJhcmd1bWVudHMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtDQUdBO0FBQ0E7O0FBQ0EsTUFBTUEsV0FBVyxHQUFHQyxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBcEI7QUFDQUYsV0FBVyxDQUFDRyxTQUFaLEdBQXdCLGFBQXhCO0FBQ0FILFdBQVcsQ0FBQ0ksS0FBWixHQUFvQiwwQkFBcEI7QUFDQUgsUUFBUSxDQUFDSSxJQUFULENBQWNDLFdBQWQsQ0FBMEJOLFdBQTFCLEUsQ0FFQTs7QUFDQU8sTUFBTSxDQUFDQyxLQUFQLEdBQWVBLDBEQUFmLEMsQ0FDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQUQsTUFBTSxDQUFDRSxZQUFQLEdBQXNCQyw4REFBdEI7QUFDQUgsTUFBTSxDQUFDSSxXQUFQLEdBQXFCQyw2REFBckIsQyxDQUNBO0FBQ0E7O0FBQ0FMLE1BQU0sQ0FBQ00sUUFBUCxHQUFrQkMsd0RBQVcsQ0FBQ0MsTUFBOUI7QUFDQVIsTUFBTSxDQUFDUyxPQUFQLEdBQWlCRix3REFBVyxDQUFDRyxTQUE3QixDLENBQ0E7O0FBQ0FWLE1BQU0sQ0FBQ1csY0FBUCxHQUF3QkMsZ0VBQXhCO0FBQ0FaLE1BQU0sQ0FBQ2EsU0FBUCxHQUFtQkEsMERBQW5CO0FBR0FiLE1BQU0sQ0FBQ2MsVUFBUCxHQUFvQkEsMkRBQXBCO0FBQ0FkLE1BQU0sQ0FBQ2UsS0FBUCxHQUFlQywyREFBZjtBQUNBaEIsTUFBTSxDQUFDaUIsVUFBUCxHQUFvQkMsaUVBQXBCO0FBRUFsQixNQUFNLENBQUNtQixRQUFQLEdBQWtCQyx3REFBbEI7QUFDQXBCLE1BQU0sQ0FBQ3FCLFFBQVAsR0FBa0JDLDJDQUFsQjtBQUNBdEIsTUFBTSxDQUFDdUIsT0FBUCxHQUFpQkEseURBQWpCO0FBRWUsTUFBTUMsV0FBTixDQUFrQjtBQUM3QkMsYUFBVyxDQUFDQyxNQUFELEVBQVM7QUFDaEJDLHlEQUFJLENBQUNDLFNBQUwsQ0FBZUYsTUFBZjtBQUNIOztBQUVERyxNQUFJLEdBQUc7QUFDSEYseURBQUksQ0FBQ0UsSUFBTDtBQUNIOztBQVA0Qjs7QUFVakMsU0FBU0MsZUFBVCxHQUEyQjtBQUN2QixRQUFNQyxTQUFTLEdBQUcsZUFBbEI7QUFDQSxRQUFNQyxNQUFNLEdBQUksR0FBRUQsU0FBVSxHQUE1Qjs7QUFDQSxRQUFNRSxNQUFNLEdBQUdDLG1CQUFPLENBQUMsc0JBQUQsQ0FBdEI7O0FBQ0EsUUFBTUMsSUFBSSxHQUFHRixNQUFNLENBQUNHLEtBQXBCLENBSnVCLENBS3ZCOztBQUVBSCxRQUFNLENBQUNHLEtBQVAsR0FBZSxVQUFTQyxPQUFULEVBQWtCO0FBQzdCLFFBQUlBLE9BQU8sS0FBS04sU0FBWixJQUF5Qk0sT0FBTyxDQUFDQyxVQUFSLENBQW1CTixNQUFuQixDQUE3QixFQUF5RDtBQUNyRCxZQUFNTyxTQUFTLEdBQUdGLE9BQU8sQ0FBQ0csTUFBUixDQUFlUixNQUFNLENBQUNTLE1BQXRCLENBQWxCO0FBQ0EsVUFBSUYsU0FBUyxJQUFJLEtBQWpCLEVBQXdCLE9BQU90QywwREFBUDtBQUMzQjs7QUFFRCxXQUFPa0MsSUFBSSxDQUFDTyxLQUFMLENBQVcsSUFBWCxFQUFpQkMsU0FBakIsQ0FBUDtBQUNILEdBUEQsQ0FQdUIsQ0FnQnZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOzs7QUFFQSxTQUFPLFlBQVc7QUFDZFYsVUFBTSxDQUFDRyxLQUFQLEdBQWVELElBQWY7QUFDSCxHQUZEO0FBR0g7O0FBRURMLGVBQWUsRyxDQUVmO0FBQ0EiLCJmaWxlIjoiLi9zcmMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbmZpZ30gZnJvbSBcImRhdGFcIjtcclxuaW1wb3J0IENvcmUgZnJvbSBcIi4vbW9kdWxlcy9jb3JlXCI7XHJcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi9tb2R1bGVzL3BsdWdpbmFwaVwiO1xyXG5pbXBvcnQgUGx1Z2luTWFuYWdlciBmcm9tIFwiLi9tb2R1bGVzL3BsdWdpbm1hbmFnZXJcIjtcclxuaW1wb3J0IFRoZW1lTWFuYWdlciBmcm9tIFwiLi9tb2R1bGVzL3RoZW1lbWFuYWdlclwiO1xyXG5pbXBvcnQgRXZlbnRzIGZyb20gXCIuL21vZHVsZXMvZW1pdHRlclwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vbW9kdWxlcy9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9tb2R1bGVzL2RhdGFzdG9yZVwiO1xyXG5pbXBvcnQgRW1vdGVNb2R1bGUgZnJvbSBcIi4vYnVpbHRpbnMvZW1vdGVzXCI7XHJcbmltcG9ydCBEb21NYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvZG9tbWFuYWdlclwiO1xyXG5pbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL21vZHVsZXMvdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBSZWFjdENvbXBvbmVudHMgZnJvbSBcIi4vbW9kdWxlcy9yZWFjdGNvbXBvbmVudHNcIjtcclxuaW1wb3J0IFN0cmluZ3MgZnJvbSBcIi4vbW9kdWxlcy9zdHJpbmdzXCI7XHJcblxyXG4vLyBQZXJmb3JtIHNvbWUgc2V0dXBcclxuLy8gcHJveHlMb2NhbFN0b3JhZ2UoKTtcclxuY29uc3QgbG9hZGluZ0ljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5sb2FkaW5nSWNvbi5jbGFzc05hbWUgPSBcImJkLWxvYWRlcnYyXCI7XHJcbmxvYWRpbmdJY29uLnRpdGxlID0gXCJCYW5kYWdlZEJEIGlzIGxvYWRpbmcuLi5cIjtcclxuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsb2FkaW5nSWNvbik7XHJcblxyXG4vLyB3aW5kb3cuQ29yZSA9IENvcmU7XHJcbndpbmRvdy5CZEFwaSA9IEJkQXBpO1xyXG4vLyB3aW5kb3cuc2V0dGluZ3MgPSBTZXR0aW5nc0luZm87XHJcbi8vIHdpbmRvdy5zZXR0aW5nc0Nvb2tpZSA9IFNldHRpbmdzQ29va2llO1xyXG4vLyB3aW5kb3cucGx1Z2luQ29va2llID0gUGx1Z2luQ29va2llO1xyXG4vLyB3aW5kb3cudGhlbWVDb29raWUgPSBUaGVtZUNvb2tpZTtcclxud2luZG93LnBsdWdpbk1vZHVsZSA9IFBsdWdpbk1hbmFnZXI7XHJcbndpbmRvdy50aGVtZU1vZHVsZSA9IFRoZW1lTWFuYWdlcjtcclxuLy8gd2luZG93LmJkdGhlbWVzID0gVGhlbWVzO1xyXG4vLyB3aW5kb3cuYmRwbHVnaW5zID0gUGx1Z2lucztcclxud2luZG93LmJkRW1vdGVzID0gRW1vdGVNb2R1bGUuRW1vdGVzO1xyXG53aW5kb3cuYmVtb3RlcyA9IEVtb3RlTW9kdWxlLmJsYWNrbGlzdDtcclxuLy8gd2luZG93LmJkUGx1Z2luU3RvcmFnZSA9IGJkUGx1Z2luU3RvcmFnZTtcclxud2luZG93LnNldHRpbmdzTW9kdWxlID0gU2V0dGluZ3M7XHJcbndpbmRvdy5EYXRhU3RvcmUgPSBEYXRhU3RvcmU7XHJcblxyXG5cclxud2luZG93LkRvbU1hbmFnZXIgPSBEb21NYW5hZ2VyO1xyXG53aW5kb3cudXRpbHMgPSBVdGlsaXRpZXM7XHJcbndpbmRvdy5Db21wb25lbnRzID0gUmVhY3RDb21wb25lbnRzO1xyXG5cclxud2luZG93LkJERXZlbnRzID0gRXZlbnRzO1xyXG53aW5kb3cuYmRDb25maWcgPSBDb25maWc7XHJcbndpbmRvdy5TdHJpbmdzID0gU3RyaW5ncztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvcmVXcmFwcGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xyXG4gICAgICAgIENvcmUuc2V0Q29uZmlnKGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICBDb3JlLmluaXQoKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcGF0Y2hNb2R1bGVMb2FkKCkge1xyXG4gICAgY29uc3QgbmFtZXNwYWNlID0gXCJiZXR0ZXJkaXNjb3JkXCI7XHJcbiAgICBjb25zdCBwcmVmaXggPSBgJHtuYW1lc3BhY2V9L2A7XHJcbiAgICBjb25zdCBNb2R1bGUgPSByZXF1aXJlKFwibW9kdWxlXCIpO1xyXG4gICAgY29uc3QgbG9hZCA9IE1vZHVsZS5fbG9hZDtcclxuICAgIC8vIGNvbnN0IHJlc29sdmVGaWxlbmFtZSA9IE1vZHVsZS5fcmVzb2x2ZUZpbGVuYW1lO1xyXG5cclxuICAgIE1vZHVsZS5fbG9hZCA9IGZ1bmN0aW9uKHJlcXVlc3QpIHtcclxuICAgICAgICBpZiAocmVxdWVzdCA9PT0gbmFtZXNwYWNlIHx8IHJlcXVlc3Quc3RhcnRzV2l0aChwcmVmaXgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RlZCA9IHJlcXVlc3Quc3Vic3RyKHByZWZpeC5sZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAocmVxdWVzdGVkID09IFwiYXBpXCIpIHJldHVybiBCZEFwaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsb2FkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIE1vZHVsZS5fcmVzb2x2ZUZpbGVuYW1lID0gZnVuY3Rpb24gKHJlcXVlc3QsIHBhcmVudCwgaXNNYWluKSB7XHJcbiAgICAvLyAgICAgaWYgKHJlcXVlc3QgPT09IFwiYmV0dGVyZGlzY29yZFwiIHx8IHJlcXVlc3Quc3RhcnRzV2l0aChcImJldHRlcmRpc2NvcmQvXCIpKSB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGNvbnRlbnRQYXRoID0gUGx1Z2luTWFuYWdlci5nZXRQbHVnaW5QYXRoQnlNb2R1bGUocGFyZW50KTtcclxuICAgIC8vICAgICAgICAgaWYgKGNvbnRlbnRQYXRoKSByZXR1cm4gcmVxdWVzdDtcclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICAgIHJldHVybiByZXNvbHZlRmlsZW5hbWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgIC8vIH07XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIE1vZHVsZS5fbG9hZCA9IGxvYWQ7XHJcbiAgICB9O1xyXG59XHJcblxyXG5wYXRjaE1vZHVsZUxvYWQoKTtcclxuXHJcbi8vIHZhciBzZXR0aW5nc1BhbmVsLCBlbW90ZU1vZHVsZSwgcXVpY2tFbW90ZU1lbnUsIHZvaWNlTW9kZSwsIGRNb2RlLCBwdWJsaWNTZXJ2ZXJzTW9kdWxlO1xyXG4vLyB2YXIgYmRDb25maWcgPSBudWxsOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/index.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return CoreWrapper; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _secure__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./secure */ \"./src/secure.js\");\n/* harmony import */ var _modules_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/core */ \"./src/modules/core.js\");\n/* harmony import */ var _modules_pluginapi__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/pluginapi */ \"./src/modules/pluginapi.js\");\n/* harmony import */ var _modules_pluginmanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _modules_thememanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _modules_emitter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _modules_datastore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modules/datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _builtins_emotes_emotes__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./builtins/emotes/emotes */ \"./src/builtins/emotes/emotes.js\");\n/* harmony import */ var _modules_dommanager__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modules/dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _modules_utilities__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./modules/utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _modules_reactcomponents__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modules/reactcomponents */ \"./src/modules/reactcomponents.js\");\n/* harmony import */ var _modules_strings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./modules/strings */ \"./src/modules/strings.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n // Perform some setup\n\nObject(_secure__WEBPACK_IMPORTED_MODULE_1__[\"default\"])();\nconst loadingIcon = document.createElement(\"div\");\nloadingIcon.className = \"bd-loaderv2\";\nloadingIcon.title = \"BandagedBD is loading...\";\ndocument.body.appendChild(loadingIcon); // window.Core = Core;\n\nwindow.BdApi = _modules_pluginapi__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; // window.settings = SettingsInfo;\n// window.settingsCookie = SettingsCookie;\n// window.pluginCookie = PluginCookie;\n// window.themeCookie = ThemeCookie;\n\nwindow.pluginModule = _modules_pluginmanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\nwindow.themeModule = _modules_thememanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; // window.bdthemes = Themes;\n// window.bdplugins = Plugins;\n\nwindow.bdEmotes = _builtins_emotes_emotes__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Emotes;\nwindow.bemotes = _builtins_emotes_emotes__WEBPACK_IMPORTED_MODULE_9__[\"default\"].blacklist; // window.bdPluginStorage = bdPluginStorage;\n\nwindow.settingsModule = _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\nwindow.DataStore = _modules_datastore__WEBPACK_IMPORTED_MODULE_8__[\"default\"];\nwindow.DomManager = _modules_dommanager__WEBPACK_IMPORTED_MODULE_10__[\"default\"];\nwindow.utils = _modules_utilities__WEBPACK_IMPORTED_MODULE_11__[\"default\"];\nwindow.Components = _modules_reactcomponents__WEBPACK_IMPORTED_MODULE_12__[\"default\"];\nwindow.BDEvents = _modules_emitter__WEBPACK_IMPORTED_MODULE_6__[\"default\"];\nwindow.bdConfig = data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"];\nwindow.Strings = _modules_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"];\nclass CoreWrapper {\n constructor(config) {\n _modules_core__WEBPACK_IMPORTED_MODULE_2__[\"default\"].setConfig(config);\n }\n\n init() {\n _modules_core__WEBPACK_IMPORTED_MODULE_2__[\"default\"].init();\n }\n\n}\n\nfunction patchModuleLoad() {\n const namespace = \"betterdiscord\";\n const prefix = `${namespace}/`;\n\n const Module = __webpack_require__(/*! module */ \"module\");\n\n const load = Module._load; // const resolveFilename = Module._resolveFilename;\n\n Module._load = function (request) {\n if (request === namespace || request.startsWith(prefix)) {\n const requested = request.substr(prefix.length);\n if (requested == \"api\") return _modules_pluginapi__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n }\n\n return load.apply(this, arguments);\n }; // Module._resolveFilename = function (request, parent, isMain) {\n // if (request === \"betterdiscord\" || request.startsWith(\"betterdiscord/\")) {\n // const contentPath = PluginManager.getPluginPathByModule(parent);\n // if (contentPath) return request;\n // }\n // return resolveFilename.apply(this, arguments);\n // };\n\n\n return function () {\n Module._load = load;\n };\n}\n\npatchModuleLoad(); // var settingsPanel, emoteModule, quickEmoteMenu, voiceMode,, dMode, publicServersModule;\n// var bdConfig = null;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2luZGV4LmpzP2I2MzUiXSwibmFtZXMiOlsic2VjdXJlIiwibG9hZGluZ0ljb24iLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ0aXRsZSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsIndpbmRvdyIsIkJkQXBpIiwicGx1Z2luTW9kdWxlIiwiUGx1Z2luTWFuYWdlciIsInRoZW1lTW9kdWxlIiwiVGhlbWVNYW5hZ2VyIiwiYmRFbW90ZXMiLCJFbW90ZU1vZHVsZSIsIkVtb3RlcyIsImJlbW90ZXMiLCJibGFja2xpc3QiLCJzZXR0aW5nc01vZHVsZSIsIlNldHRpbmdzIiwiRGF0YVN0b3JlIiwiRG9tTWFuYWdlciIsInV0aWxzIiwiVXRpbGl0aWVzIiwiQ29tcG9uZW50cyIsIlJlYWN0Q29tcG9uZW50cyIsIkJERXZlbnRzIiwiRXZlbnRzIiwiYmRDb25maWciLCJDb25maWciLCJTdHJpbmdzIiwiQ29yZVdyYXBwZXIiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsIkNvcmUiLCJzZXRDb25maWciLCJpbml0IiwicGF0Y2hNb2R1bGVMb2FkIiwibmFtZXNwYWNlIiwicHJlZml4IiwiTW9kdWxlIiwicmVxdWlyZSIsImxvYWQiLCJfbG9hZCIsInJlcXVlc3QiLCJzdGFydHNXaXRoIiwicmVxdWVzdGVkIiwic3Vic3RyIiwibGVuZ3RoIiwiYXBwbHkiLCJhcmd1bWVudHMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Q0FHQTs7QUFDQUEsdURBQU07QUFFTixNQUFNQyxXQUFXLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixLQUF2QixDQUFwQjtBQUNBRixXQUFXLENBQUNHLFNBQVosR0FBd0IsYUFBeEI7QUFDQUgsV0FBVyxDQUFDSSxLQUFaLEdBQW9CLDBCQUFwQjtBQUNBSCxRQUFRLENBQUNJLElBQVQsQ0FBY0MsV0FBZCxDQUEwQk4sV0FBMUIsRSxDQUVBOztBQUNBTyxNQUFNLENBQUNDLEtBQVAsR0FBZUEsMERBQWYsQyxDQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBRCxNQUFNLENBQUNFLFlBQVAsR0FBc0JDLDhEQUF0QjtBQUNBSCxNQUFNLENBQUNJLFdBQVAsR0FBcUJDLDZEQUFyQixDLENBQ0E7QUFDQTs7QUFDQUwsTUFBTSxDQUFDTSxRQUFQLEdBQWtCQywrREFBVyxDQUFDQyxNQUE5QjtBQUNBUixNQUFNLENBQUNTLE9BQVAsR0FBaUJGLCtEQUFXLENBQUNHLFNBQTdCLEMsQ0FDQTs7QUFDQVYsTUFBTSxDQUFDVyxjQUFQLEdBQXdCQyxnRUFBeEI7QUFDQVosTUFBTSxDQUFDYSxTQUFQLEdBQW1CQSwwREFBbkI7QUFHQWIsTUFBTSxDQUFDYyxVQUFQLEdBQW9CQSw0REFBcEI7QUFDQWQsTUFBTSxDQUFDZSxLQUFQLEdBQWVDLDJEQUFmO0FBQ0FoQixNQUFNLENBQUNpQixVQUFQLEdBQW9CQyxpRUFBcEI7QUFFQWxCLE1BQU0sQ0FBQ21CLFFBQVAsR0FBa0JDLHdEQUFsQjtBQUNBcEIsTUFBTSxDQUFDcUIsUUFBUCxHQUFrQkMsMkNBQWxCO0FBQ0F0QixNQUFNLENBQUN1QixPQUFQLEdBQWlCQSx5REFBakI7QUFFZSxNQUFNQyxXQUFOLENBQWtCO0FBQzdCQyxhQUFXLENBQUNDLE1BQUQsRUFBUztBQUNoQkMseURBQUksQ0FBQ0MsU0FBTCxDQUFlRixNQUFmO0FBQ0g7O0FBRURHLE1BQUksR0FBRztBQUNIRix5REFBSSxDQUFDRSxJQUFMO0FBQ0g7O0FBUDRCOztBQVVqQyxTQUFTQyxlQUFULEdBQTJCO0FBQ3ZCLFFBQU1DLFNBQVMsR0FBRyxlQUFsQjtBQUNBLFFBQU1DLE1BQU0sR0FBSSxHQUFFRCxTQUFVLEdBQTVCOztBQUNBLFFBQU1FLE1BQU0sR0FBR0MsbUJBQU8sQ0FBQyxzQkFBRCxDQUF0Qjs7QUFDQSxRQUFNQyxJQUFJLEdBQUdGLE1BQU0sQ0FBQ0csS0FBcEIsQ0FKdUIsQ0FLdkI7O0FBRUFILFFBQU0sQ0FBQ0csS0FBUCxHQUFlLFVBQVNDLE9BQVQsRUFBa0I7QUFDN0IsUUFBSUEsT0FBTyxLQUFLTixTQUFaLElBQXlCTSxPQUFPLENBQUNDLFVBQVIsQ0FBbUJOLE1BQW5CLENBQTdCLEVBQXlEO0FBQ3JELFlBQU1PLFNBQVMsR0FBR0YsT0FBTyxDQUFDRyxNQUFSLENBQWVSLE1BQU0sQ0FBQ1MsTUFBdEIsQ0FBbEI7QUFDQSxVQUFJRixTQUFTLElBQUksS0FBakIsRUFBd0IsT0FBT3RDLDBEQUFQO0FBQzNCOztBQUVELFdBQU9rQyxJQUFJLENBQUNPLEtBQUwsQ0FBVyxJQUFYLEVBQWlCQyxTQUFqQixDQUFQO0FBQ0gsR0FQRCxDQVB1QixDQWdCdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7OztBQUVBLFNBQU8sWUFBVztBQUNkVixVQUFNLENBQUNHLEtBQVAsR0FBZUQsSUFBZjtBQUNILEdBRkQ7QUFHSDs7QUFFREwsZUFBZSxHLENBRWY7QUFDQSIsImZpbGUiOiIuL3NyYy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQgc2VjdXJlIGZyb20gXCIuL3NlY3VyZVwiO1xyXG5pbXBvcnQgQ29yZSBmcm9tIFwiLi9tb2R1bGVzL2NvcmVcIjtcclxuaW1wb3J0IEJkQXBpIGZyb20gXCIuL21vZHVsZXMvcGx1Z2luYXBpXCI7XHJcbmltcG9ydCBQbHVnaW5NYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvcGx1Z2lubWFuYWdlclwiO1xyXG5pbXBvcnQgVGhlbWVNYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvdGhlbWVtYW5hZ2VyXCI7XHJcbmltcG9ydCBFdmVudHMgZnJvbSBcIi4vbW9kdWxlcy9lbWl0dGVyXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9tb2R1bGVzL3NldHRpbmdzbWFuYWdlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL21vZHVsZXMvZGF0YXN0b3JlXCI7XHJcbmltcG9ydCBFbW90ZU1vZHVsZSBmcm9tIFwiLi9idWlsdGlucy9lbW90ZXMvZW1vdGVzXCI7XHJcbmltcG9ydCBEb21NYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvZG9tbWFuYWdlclwiO1xyXG5pbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL21vZHVsZXMvdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBSZWFjdENvbXBvbmVudHMgZnJvbSBcIi4vbW9kdWxlcy9yZWFjdGNvbXBvbmVudHNcIjtcclxuaW1wb3J0IFN0cmluZ3MgZnJvbSBcIi4vbW9kdWxlcy9zdHJpbmdzXCI7XHJcblxyXG4vLyBQZXJmb3JtIHNvbWUgc2V0dXBcclxuc2VjdXJlKCk7XHJcblxyXG5jb25zdCBsb2FkaW5nSWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbmxvYWRpbmdJY29uLmNsYXNzTmFtZSA9IFwiYmQtbG9hZGVydjJcIjtcclxubG9hZGluZ0ljb24udGl0bGUgPSBcIkJhbmRhZ2VkQkQgaXMgbG9hZGluZy4uLlwiO1xyXG5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxvYWRpbmdJY29uKTtcclxuXHJcbi8vIHdpbmRvdy5Db3JlID0gQ29yZTtcclxud2luZG93LkJkQXBpID0gQmRBcGk7XHJcbi8vIHdpbmRvdy5zZXR0aW5ncyA9IFNldHRpbmdzSW5mbztcclxuLy8gd2luZG93LnNldHRpbmdzQ29va2llID0gU2V0dGluZ3NDb29raWU7XHJcbi8vIHdpbmRvdy5wbHVnaW5Db29raWUgPSBQbHVnaW5Db29raWU7XHJcbi8vIHdpbmRvdy50aGVtZUNvb2tpZSA9IFRoZW1lQ29va2llO1xyXG53aW5kb3cucGx1Z2luTW9kdWxlID0gUGx1Z2luTWFuYWdlcjtcclxud2luZG93LnRoZW1lTW9kdWxlID0gVGhlbWVNYW5hZ2VyO1xyXG4vLyB3aW5kb3cuYmR0aGVtZXMgPSBUaGVtZXM7XHJcbi8vIHdpbmRvdy5iZHBsdWdpbnMgPSBQbHVnaW5zO1xyXG53aW5kb3cuYmRFbW90ZXMgPSBFbW90ZU1vZHVsZS5FbW90ZXM7XHJcbndpbmRvdy5iZW1vdGVzID0gRW1vdGVNb2R1bGUuYmxhY2tsaXN0O1xyXG4vLyB3aW5kb3cuYmRQbHVnaW5TdG9yYWdlID0gYmRQbHVnaW5TdG9yYWdlO1xyXG53aW5kb3cuc2V0dGluZ3NNb2R1bGUgPSBTZXR0aW5ncztcclxud2luZG93LkRhdGFTdG9yZSA9IERhdGFTdG9yZTtcclxuXHJcblxyXG53aW5kb3cuRG9tTWFuYWdlciA9IERvbU1hbmFnZXI7XHJcbndpbmRvdy51dGlscyA9IFV0aWxpdGllcztcclxud2luZG93LkNvbXBvbmVudHMgPSBSZWFjdENvbXBvbmVudHM7XHJcblxyXG53aW5kb3cuQkRFdmVudHMgPSBFdmVudHM7XHJcbndpbmRvdy5iZENvbmZpZyA9IENvbmZpZztcclxud2luZG93LlN0cmluZ3MgPSBTdHJpbmdzO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29yZVdyYXBwZXIge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XHJcbiAgICAgICAgQ29yZS5zZXRDb25maWcoY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIENvcmUuaW5pdCgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXRjaE1vZHVsZUxvYWQoKSB7XHJcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBcImJldHRlcmRpc2NvcmRcIjtcclxuICAgIGNvbnN0IHByZWZpeCA9IGAke25hbWVzcGFjZX0vYDtcclxuICAgIGNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIik7XHJcbiAgICBjb25zdCBsb2FkID0gTW9kdWxlLl9sb2FkO1xyXG4gICAgLy8gY29uc3QgcmVzb2x2ZUZpbGVuYW1lID0gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWU7XHJcblxyXG4gICAgTW9kdWxlLl9sb2FkID0gZnVuY3Rpb24ocmVxdWVzdCkge1xyXG4gICAgICAgIGlmIChyZXF1ZXN0ID09PSBuYW1lc3BhY2UgfHwgcmVxdWVzdC5zdGFydHNXaXRoKHByZWZpeCkpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdGVkID0gcmVxdWVzdC5zdWJzdHIocHJlZml4Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWQgPT0gXCJhcGlcIikgcmV0dXJuIEJkQXBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGxvYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWUgPSBmdW5jdGlvbiAocmVxdWVzdCwgcGFyZW50LCBpc01haW4pIHtcclxuICAgIC8vICAgICBpZiAocmVxdWVzdCA9PT0gXCJiZXR0ZXJkaXNjb3JkXCIgfHwgcmVxdWVzdC5zdGFydHNXaXRoKFwiYmV0dGVyZGlzY29yZC9cIikpIHtcclxuICAgIC8vICAgICAgICAgY29uc3QgY29udGVudFBhdGggPSBQbHVnaW5NYW5hZ2VyLmdldFBsdWdpblBhdGhCeU1vZHVsZShwYXJlbnQpO1xyXG4gICAgLy8gICAgICAgICBpZiAoY29udGVudFBhdGgpIHJldHVybiByZXF1ZXN0O1xyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvLyAgICAgcmV0dXJuIHJlc29sdmVGaWxlbmFtZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgLy8gfTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgTW9kdWxlLl9sb2FkID0gbG9hZDtcclxuICAgIH07XHJcbn1cclxuXHJcbnBhdGNoTW9kdWxlTG9hZCgpO1xyXG5cclxuLy8gdmFyIHNldHRpbmdzUGFuZWwsIGVtb3RlTW9kdWxlLCBxdWlja0Vtb3RlTWVudSwgdm9pY2VNb2RlLCwgZE1vZGUsIHB1YmxpY1NlcnZlcnNNb2R1bGU7XHJcbi8vIHZhciBiZENvbmZpZyA9IG51bGw7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/index.js\n"); /***/ }), @@ -371,7 +395,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 data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _patcher__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./patcher */ \"./src/modules/patcher.js\");\n/* harmony import */ var _ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../ui/icons/bdlogo */ \"./src/ui/icons/bdlogo.jsx\");\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ComponentPatcher {\n initialize() {\n _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].suppressErrors(this.patchSocial.bind(this), \"BD Social Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].suppressErrors(this.patchGuildPills.bind(this), \"BD Guild Pills Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].suppressErrors(this.patchGuildListItems.bind(this), \"BD Guild List Items Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].suppressErrors(this.patchGuildSeparator.bind(this), \"BD Guild Separator Patch\")();\n }\n\n patchSocial() {\n if (this.socialPatch) return; // const TabBar = WebpackModules.getByDisplayName(\"TabBar\");\n // const Anchor = WebpackModules.getByDisplayName(\"Anchor\");\n // if (!TabBar || !Anchor) return;\n // this.socialPatch = Patcher.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 // const newOne = function() {\n // const returnVal = original(...arguments);\n // returnVal.props.children.push(DiscordModules.React.createElement(Anchor, {className: \"bd-social-link\", href: \"https://github.com/rauenzi/BetterDiscordApp\", rel: \"author\", title: \"BandagedBD\", target: \"_blank\"},\n // DiscordModules.React.createElement(BDLogo, {size: \"16px\", className: \"bd-social-logo\"})\n // ));\n // return returnVal;\n // };\n // children[children.length - 1].type = newOne;\n // });\n\n if (this.socialPatch) return;\n const TabBar = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByDisplayName(\"TabBar\");\n const Anchor = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByDisplayName(\"Anchor\");\n if (!TabBar) return;\n this.socialPatch = _patcher__WEBPACK_IMPORTED_MODULE_4__[\"default\"].after(\"ComponentPatcher\", TabBar.prototype, \"render\", (thisObject, args, returnValue) => {\n const children = returnValue.props.children;\n if (!children || !children.length || children.length < 3) return;\n if (children[children.length - 3].type.displayName !== \"Separator\") return;\n if (!children[children.length - 2].type.toString().includes(\"socialLinks\")) return;\n\n if (Anchor) {\n const original = children[children.length - 2].type;\n\n const newOne = function () {\n const returnVal = original(...arguments);\n returnVal.props.children.push( // DiscordModules.React.createElement(TooltipWrap, {color: \"black\", side: \"top\", text: \"BandagedBD\"},\n _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-social-link\",\n href: \"https://github.com/rauenzi/BetterDiscordApp\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n size: \"16px\",\n className: \"bd-social-logo\"\n })) // )\n );\n return returnVal;\n };\n\n children[children.length - 2].type = newOne;\n }\n\n const injector = _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(\"div\", {\n className: \"colorMuted-HdFt4q size12-3cLvbJ\"\n }, `Injector ${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].version}`);\n const versionHash = `(${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].hash ? data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].hash.substring(0, 7) : data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].branch})`;\n const additional = _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(\"div\", {\n className: \"colorMuted-HdFt4q size12-3cLvbJ\"\n }, `BBD ${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].bbdVersion} `, _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(\"span\", {\n className: \"versionHash-2gXjIB da-versionHash\"\n }, versionHash));\n const originalVersions = children[children.length - 1].type;\n\n children[children.length - 1].type = function () {\n const returnVal = originalVersions(...arguments);\n returnVal.props.children.splice(returnVal.props.children.length - 1, 0, injector);\n returnVal.props.children.splice(1, 0, additional);\n return returnVal;\n };\n });\n }\n\n patchGuildListItems() {\n if (this.guildListItemsPatch) return;\n const listItemClass = _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].GuildClasses.listItem.split(\" \")[0];\n const blobClass = _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].GuildClasses.blobContainer.split(\" \")[0];\n const reactInstance = _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getReactInstance(document.querySelector(`.${listItemClass} .${blobClass}`).parentElement);\n const GuildComponent = reactInstance.return.type;\n if (!GuildComponent) return;\n this.guildListItemsPatch = _patcher__WEBPACK_IMPORTED_MODULE_4__[\"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_1__[\"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_4__[\"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_1__[\"default\"].getByDisplayName(\"Guilds\");\n const guildComponents = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"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_4__[\"default\"].after(\"ThemeHelper\", Guilds.prototype, \"render\", (_, __, returnValue) => {\n const Separator = _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].findInReactTree(returnValue, m => m.type && !m.type.displayName && typeof m.type == \"function\" && _utilities__WEBPACK_IMPORTED_MODULE_3__[\"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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29tcG9uZW50cGF0Y2hlci5qcz8yZjAyIl0sIm5hbWVzIjpbIkNvbXBvbmVudFBhdGNoZXIiLCJpbml0aWFsaXplIiwiVXRpbGl0aWVzIiwic3VwcHJlc3NFcnJvcnMiLCJwYXRjaFNvY2lhbCIsImJpbmQiLCJwYXRjaEd1aWxkUGlsbHMiLCJwYXRjaEd1aWxkTGlzdEl0ZW1zIiwicGF0Y2hHdWlsZFNlcGFyYXRvciIsInNvY2lhbFBhdGNoIiwiVGFiQmFyIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeURpc3BsYXlOYW1lIiwiQW5jaG9yIiwiUGF0Y2hlciIsImFmdGVyIiwicHJvdG90eXBlIiwidGhpc09iamVjdCIsImFyZ3MiLCJyZXR1cm5WYWx1ZSIsImNoaWxkcmVuIiwicHJvcHMiLCJsZW5ndGgiLCJ0eXBlIiwiZGlzcGxheU5hbWUiLCJ0b1N0cmluZyIsImluY2x1ZGVzIiwib3JpZ2luYWwiLCJuZXdPbmUiLCJyZXR1cm5WYWwiLCJhcmd1bWVudHMiLCJwdXNoIiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJocmVmIiwidGl0bGUiLCJ0YXJnZXQiLCJCRExvZ28iLCJzaXplIiwiaW5qZWN0b3IiLCJDb25maWciLCJ2ZXJzaW9uIiwidmVyc2lvbkhhc2giLCJoYXNoIiwic3Vic3RyaW5nIiwiYnJhbmNoIiwiYWRkaXRpb25hbCIsImJiZFZlcnNpb24iLCJvcmlnaW5hbFZlcnNpb25zIiwic3BsaWNlIiwiZ3VpbGRMaXN0SXRlbXNQYXRjaCIsImxpc3RJdGVtQ2xhc3MiLCJHdWlsZENsYXNzZXMiLCJsaXN0SXRlbSIsInNwbGl0IiwiYmxvYkNsYXNzIiwiYmxvYkNvbnRhaW5lciIsInJlYWN0SW5zdGFuY2UiLCJnZXRSZWFjdEluc3RhbmNlIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicGFyZW50RWxlbWVudCIsIkd1aWxkQ29tcG9uZW50IiwicmV0dXJuIiwiXyIsImd1aWxkRGF0YSIsInVucmVhZCIsInNlbGVjdGVkIiwiYXVkaW8iLCJ2aWRlbyIsImJhZGdlIiwiYW5pbWF0YWJsZSIsImd1aWxkUGlsbFBhdGNoIiwiZ3VpbGRQaWxsIiwiZ2V0TW9kdWxlIiwibSIsImRlZmF1bHQiLCJob3ZlcmVkIiwiZ3VpbGRTZXBhcmF0b3JQYXRjaCIsIkd1aWxkcyIsImd1aWxkQ29tcG9uZW50cyIsImdldEJ5UHJvcHMiLCJHdWlsZFNlcGFyYXRvciIsIlNlcGFyYXRvciIsIl9fIiwiZmluZEluUmVhY3RUcmVlIiwiaXNFbXB0eSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFZSxtRUFBSSxNQUFNQSxnQkFBTixDQUF1QjtBQUV0Q0MsWUFBVSxHQUFHO0FBQ1RDLHNEQUFTLENBQUNDLGNBQVYsQ0FBeUIsS0FBS0MsV0FBTCxDQUFpQkMsSUFBakIsQ0FBc0IsSUFBdEIsQ0FBekIsRUFBc0QsaUJBQXREO0FBQ0FILHNEQUFTLENBQUNDLGNBQVYsQ0FBeUIsS0FBS0csZUFBTCxDQUFxQkQsSUFBckIsQ0FBMEIsSUFBMUIsQ0FBekIsRUFBMEQsc0JBQTFEO0FBQ0FILHNEQUFTLENBQUNDLGNBQVYsQ0FBeUIsS0FBS0ksbUJBQUwsQ0FBeUJGLElBQXpCLENBQThCLElBQTlCLENBQXpCLEVBQThELDJCQUE5RDtBQUNBSCxzREFBUyxDQUFDQyxjQUFWLENBQXlCLEtBQUtLLG1CQUFMLENBQXlCSCxJQUF6QixDQUE4QixJQUE5QixDQUF6QixFQUE4RCwwQkFBOUQ7QUFDSDs7QUFFREQsYUFBVyxHQUFHO0FBQ1YsUUFBSSxLQUFLSyxXQUFULEVBQXNCLE9BRFosQ0FFVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBSSxLQUFLQSxXQUFU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WUFBTWpFLFdBQVcsR0FBRytELGVBQWUsQ0FBQ0csU0FBaEIsQ0FBMEIsR0FBR3ZELFNBQTdCLENBQXBCO0FBQ0FYLGlCQUFXLENBQUNFLEtBQVosQ0FBa0JjLFNBQWxCLElBQStCLHFCQUEvQjtBQUNBLGFBQU9oQixXQUFQO0FBQ0gsS0FKRDs7QUFLQSxTQUFLNkQsbUJBQUwsR0FBMkJsRSxnREFBTyxDQUFDQyxLQUFSLENBQWMsYUFBZCxFQUE2QmtFLE1BQU0sQ0FBQ2pFLFNBQXBDLEVBQStDLFFBQS9DLEVBQXlELENBQUNrRCxDQUFELEVBQUlvQixFQUFKLEVBQVFuRSxXQUFSLEtBQXdCO0FBQ3hHLFlBQU1rRSxTQUFTLEdBQUduRixrREFBUyxDQUFDcUYsZUFBVixDQUEwQnBFLFdBQTFCLEVBQXVDMEQsQ0FBQyxJQUFJQSxDQUFDLENBQUN0RCxJQUFGLElBQVUsQ0FBQ3NELENBQUMsQ0FBQ3RELElBQUYsQ0FBT0MsV0FBbEIsSUFBaUMsT0FBT3FELENBQUMsQ0FBQ3RELElBQVQsSUFBa0IsVUFBbkQsSUFBaUVyQixrREFBUyxDQUFDc0YsT0FBVixDQUFrQlgsQ0FBQyxDQUFDeEQsS0FBcEIsQ0FBN0csQ0FBbEI7QUFDQSxVQUFJLENBQUNnRSxTQUFMLEVBQWdCO0FBQ2hCQSxlQUFTLENBQUM5RCxJQUFWLEdBQWlCNkQsY0FBakI7QUFDSCxLQUowQixDQUEzQjtBQUtIOztBQXZIcUMsQ0FBM0IsRUFBZiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL2NvbXBvbmVudHBhdGNoZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbmZpZ30gZnJvbSBcImRhdGFcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2ttb2R1bGVzXCI7XHJcbmltcG9ydCBEaXNjb3JkTW9kdWxlcyBmcm9tIFwiLi9kaXNjb3JkbW9kdWxlc1wiO1xyXG5pbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5pbXBvcnQgUGF0Y2hlciBmcm9tIFwiLi9wYXRjaGVyXCI7XHJcbmltcG9ydCBCRExvZ28gZnJvbSBcIi4uL3VpL2ljb25zL2JkbG9nb1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENvbXBvbmVudFBhdGNoZXIge1xyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hTb2NpYWwuYmluZCh0aGlzKSwgXCJCRCBTb2NpYWwgUGF0Y2hcIikoKTtcclxuICAgICAgICBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkUGlsbHMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBQaWxscyBQYXRjaFwiKSgpO1xyXG4gICAgICAgIFV0aWxpdGllcy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRMaXN0SXRlbXMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBMaXN0IEl0ZW1zIFBhdGNoXCIpKCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFNlcGFyYXRvci5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFNlcGFyYXRvciBQYXRjaFwiKSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoU29jaWFsKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNvY2lhbFBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgLy8gY29uc3QgVGFiQmFyID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIlRhYkJhclwiKTtcclxuICAgICAgICAvLyBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeURpc3BsYXlOYW1lKFwiQW5jaG9yXCIpO1xyXG4gICAgICAgIC8vIGlmICghVGFiQmFyIHx8ICFBbmNob3IpIHJldHVybjtcclxuICAgICAgICAvLyB0aGlzLnNvY2lhbFBhdGNoID0gUGF0Y2hlci5hZnRlcihcIlRoZW1lSGVscGVyXCIsIFRhYkJhci5wcm90b3R5cGUsIFwicmVuZGVyXCIsIChfLCBfXywgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAvLyAgICAgY29uc3QgY2hpbGRyZW4gPSByZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlbjtcclxuICAgICAgICAvLyAgICAgaWYgKCFjaGlsZHJlbiB8fCAhY2hpbGRyZW4ubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgLy8gICAgIGlmIChjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlLmRpc3BsYXlOYW1lICE9PSBcIlNlcGFyYXRvclwiKSByZXR1cm47XHJcbiAgICAgICAgLy8gICAgIGlmICghY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZS50b1N0cmluZygpLmluY2x1ZGVzKFwic29jaWFsTGlua3NcIikpIHJldHVybjtcclxuICAgICAgICAvLyAgICAgY29uc3Qgb3JpZ2luYWwgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlO1xyXG4gICAgICAgIC8vICAgICBjb25zdCBuZXdPbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgLy8gICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4ucHVzaChEaXNjb3JkTW9kdWxlcy5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGlua1wiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgcmVsOiBcImF1dGhvclwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgRGlzY29yZE1vZHVsZXMuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxyXG4gICAgICAgIC8vICAgICAgICAgKSk7XHJcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xyXG4gICAgICAgIC8vICAgICB9O1xyXG4gICAgICAgIC8vICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlID0gbmV3T25lO1xyXG4gICAgICAgIC8vIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zb2NpYWxQYXRjaCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IFRhYkJhciA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5RGlzcGxheU5hbWUoXCJUYWJCYXJcIik7XHJcbiAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIkFuY2hvclwiKTtcclxuICAgICAgICBpZiAoIVRhYkJhcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc29jaWFsUGF0Y2ggPSBQYXRjaGVyLmFmdGVyKFwiQ29tcG9uZW50UGF0Y2hlclwiLCBUYWJCYXIucHJvdG90eXBlLCBcInJlbmRlclwiLCAodGhpc09iamVjdCwgYXJncywgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSByZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlbjtcclxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhY2hpbGRyZW4ubGVuZ3RoIHx8IGNoaWxkcmVuLmxlbmd0aCA8IDMpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDNdLnR5cGUuZGlzcGxheU5hbWUgIT09IFwiU2VwYXJhdG9yXCIpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJzb2NpYWxMaW5rc1wiKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoQW5jaG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdPbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbCguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNjb3JkTW9kdWxlcy5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzY29yZE1vZHVsZXMuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxpbmtcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTW9kdWxlcy5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIClcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZSA9IG5ld09uZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBEaXNjb3JkTW9kdWxlcy5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiY29sb3JNdXRlZC1IZEZ0NHEgc2l6ZTEyLTNjTHZiSlwifSwgYEluamVjdG9yICR7Q29uZmlnLnZlcnNpb259YCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb25IYXNoID0gYCgke0NvbmZpZy5oYXNoID8gQ29uZmlnLmhhc2guc3Vic3RyaW5nKDAsIDcpIDogQ29uZmlnLmJyYW5jaH0pYDtcclxuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbCA9IERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb2xvck11dGVkLUhkRnQ0cSBzaXplMTItM2NMdmJKXCJ9LCBgQkJEICR7Q29uZmlnLmJiZFZlcnNpb259IGAsIERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwidmVyc2lvbkhhc2gtMmdYaklCIGRhLXZlcnNpb25IYXNoXCJ9LCB2ZXJzaW9uSGFzaCkpO1xyXG4gICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVmVyc2lvbnMgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlO1xyXG4gICAgICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbFZlcnNpb25zKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4uc3BsaWNlKHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5sZW5ndGggLSAxLCAwLCBpbmplY3Rvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4uc3BsaWNlKDEsIDAsIGFkZGl0aW9uYWwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaEd1aWxkTGlzdEl0ZW1zKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2gpIHJldHVybjtcclxuICAgICAgICBjb25zdCBsaXN0SXRlbUNsYXNzID0gRGlzY29yZE1vZHVsZXMuR3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICBjb25zdCBibG9iQ2xhc3MgPSBEaXNjb3JkTW9kdWxlcy5HdWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgY29uc3QgcmVhY3RJbnN0YW5jZSA9IFV0aWxpdGllcy5nZXRSZWFjdEluc3RhbmNlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke2xpc3RJdGVtQ2xhc3N9IC4ke2Jsb2JDbGFzc31gKS5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICBjb25zdCBHdWlsZENvbXBvbmVudCA9IHJlYWN0SW5zdGFuY2UucmV0dXJuLnR5cGU7XHJcbiAgICAgICAgaWYgKCFHdWlsZENvbXBvbmVudCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRMaXN0SXRlbXNQYXRjaCA9IFBhdGNoZXIuYWZ0ZXIoXCJUaGVtZUhlbHBlclwiLCBHdWlsZENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsICh0aGlzT2JqZWN0LCBfLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJldHVyblZhbHVlIHx8ICF0aGlzT2JqZWN0KSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IGd1aWxkRGF0YSA9IHRoaXNPYmplY3QucHJvcHM7XHJcbiAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnVucmVhZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnNlbGVjdGVkKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hdWRpbykgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWF1ZGlvXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudmlkZW8pIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC12aWRlb1wiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmJhZGdlKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtYmFkZ2VcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hbmltYXRhYmxlKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtYW5pbWF0YWJsZVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hHdWlsZFBpbGxzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmd1aWxkUGlsbFBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZ3VpbGRQaWxsID0gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5kZWZhdWx0ICYmICFtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LnRvU3RyaW5nICYmIG0uZGVmYXVsdC50b1N0cmluZygpLmluY2x1ZGVzKFwidHJhbnNsYXRlM2RcIikpO1xyXG4gICAgICAgIGlmICghZ3VpbGRQaWxsKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5ndWlsZFBpbGxQYXRjaCA9IFBhdGNoZXIuYWZ0ZXIoXCJUaGVtZUhlbHBlclwiLCBndWlsZFBpbGwsIFwiZGVmYXVsdFwiLCAoXywgYXJncywgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBhcmdzWzBdO1xyXG4gICAgICAgICAgICBpZiAocHJvcHMudW5yZWFkKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XHJcbiAgICAgICAgICAgIGlmIChwcm9wcy5zZWxlY3RlZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XHJcbiAgICAgICAgICAgIGlmIChwcm9wcy5ob3ZlcmVkKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtaG92ZXJlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hHdWlsZFNlcGFyYXRvcigpIHtcclxuICAgICAgICBpZiAodGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgR3VpbGRzID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgICAgICBjb25zdCBndWlsZENvbXBvbmVudHMgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicmVuZGVyTGlzdEl0ZW1cIik7XHJcbiAgICAgICAgaWYgKCFndWlsZENvbXBvbmVudHMgfHwgIUd1aWxkcykgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZ3VpbGRDb21wb25lbnRzLlNlcGFyYXRvciguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGQtc2VwYXJhdG9yXCI7XHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCA9IFBhdGNoZXIuYWZ0ZXIoXCJUaGVtZUhlbHBlclwiLCBHdWlsZHMucHJvdG90eXBlLCBcInJlbmRlclwiLCAoXywgX18sIHJldHVyblZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IFNlcGFyYXRvciA9IFV0aWxpdGllcy5maW5kSW5SZWFjdFRyZWUocmV0dXJuVmFsdWUsIG0gPT4gbS50eXBlICYmICFtLnR5cGUuZGlzcGxheU5hbWUgJiYgdHlwZW9mKG0udHlwZSkgPT0gXCJmdW5jdGlvblwiICYmIFV0aWxpdGllcy5pc0VtcHR5KG0ucHJvcHMpKTtcclxuICAgICAgICAgICAgaWYgKCFTZXBhcmF0b3IpIHJldHVybjtcclxuICAgICAgICAgICAgU2VwYXJhdG9yLnR5cGUgPSBHdWlsZFNlcGFyYXRvcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/componentpatcher.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _patcher__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./patcher */ \"./src/modules/patcher.js\");\n/* harmony import */ var _ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../ui/icons/bdlogo */ \"./src/ui/icons/bdlogo.jsx\");\n\n\n\n\n\n\nconst React = _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React;\nconst Tooltip = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByDisplayName(\"Tooltip\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ComponentPatcher {\n initialize() {\n _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].suppressErrors(this.patchSocial.bind(this), \"BD Social Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].suppressErrors(this.patchGuildPills.bind(this), \"BD Guild Pills Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].suppressErrors(this.patchGuildListItems.bind(this), \"BD Guild List Items Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].suppressErrors(this.patchGuildSeparator.bind(this), \"BD Guild Separator Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].suppressErrors(this.patchMessageHeader.bind(this), \"BD Message Header Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].suppressErrors(this.patchMemberList.bind(this), \"BD Member List Patch\")();\n }\n\n patchSocial() {\n if (this.socialPatch) return;\n const TabBar = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByDisplayName(\"TabBar\");\n const Anchor = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByDisplayName(\"Anchor\");\n if (!TabBar) return;\n this.socialPatch = _patcher__WEBPACK_IMPORTED_MODULE_4__[\"default\"].after(\"ComponentPatcher\", TabBar.prototype, \"render\", (thisObject, args, returnValue) => {\n const children = returnValue.props.children;\n if (!children || !children.length || children.length < 3) return;\n if (children[children.length - 3].type.displayName !== \"Separator\") return;\n if (!children[children.length - 2].type.toString().includes(\"socialLinks\")) return;\n\n if (Anchor) {\n const original = children[children.length - 2].type;\n\n const newOne = function () {\n const returnVal = original(...arguments);\n returnVal.props.children.push(_discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(Anchor, {\n className: \"bd-social-link\",\n href: \"https://twitter.com/BandagedBD\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(_ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n size: \"16px\",\n className: \"bd-social-logo\"\n })));\n return returnVal;\n };\n\n children[children.length - 2].type = newOne;\n }\n\n const injector = _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(\"div\", {\n className: \"colorMuted-HdFt4q size12-3cLvbJ\"\n }, `Injector ${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].version}`);\n const versionHash = `(${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].hash ? data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].hash.substring(0, 7) : data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].branch})`;\n const additional = _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(\"div\", {\n className: \"colorMuted-HdFt4q size12-3cLvbJ\"\n }, `BBD ${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].bbdVersion} `, _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React.createElement(\"span\", {\n className: \"versionHash-2gXjIB da-versionHash\"\n }, versionHash));\n const originalVersions = children[children.length - 1].type;\n\n children[children.length - 1].type = function () {\n const returnVal = originalVersions(...arguments);\n returnVal.props.children.splice(returnVal.props.children.length - 1, 0, injector);\n returnVal.props.children.splice(1, 0, additional);\n return returnVal;\n };\n });\n }\n\n patchGuildListItems() {\n if (this.guildListItemsPatch) return;\n const listItemClass = _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].GuildClasses.listItem.split(\" \")[0];\n const blobClass = _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].GuildClasses.blobContainer.split(\" \")[0];\n const reactInstance = _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getReactInstance(document.querySelector(`.${listItemClass} .${blobClass}`).parentElement);\n const GuildComponent = reactInstance.return.type;\n if (!GuildComponent) return;\n this.guildListItemsPatch = _patcher__WEBPACK_IMPORTED_MODULE_4__[\"default\"].after(\"ComponentPatcher\", 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_1__[\"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_4__[\"default\"].after(\"ComponentPatcher\", 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_1__[\"default\"].getByDisplayName(\"Guilds\");\n const guildComponents = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"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_4__[\"default\"].after(\"ComponentPatcher\", Guilds.prototype, \"render\", (_, __, returnValue) => {\n const Separator = _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].findInReactTree(returnValue, m => m.type && !m.type.displayName && typeof m.type == \"function\" && _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isEmpty(m.props));\n if (!Separator) return;\n Separator.type = GuildSeparator;\n });\n }\n\n patchMessageHeader() {\n if (this.messageHeaderPatch) return;\n const MessageHeader = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"MessageTimestamp\");\n const Anchor = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].find(m => m.displayName == \"Anchor\");\n if (!Anchor || !MessageHeader || !MessageHeader.default) return;\n this.messageHeaderPatch = _patcher__WEBPACK_IMPORTED_MODULE_4__[\"default\"].after(\"ComponentPatcher\", MessageHeader, \"default\", (_, args, returnValue) => {\n const author = _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getNestedProp(args[0], \"message.author\");\n const children = _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getNestedProp(returnValue, \"props.children.1.props.children.1.props.children\");\n if (!children || !author || !author.id || author.id !== \"249746236008169473\") return;\n if (!Array.isArray(children)) return;\n children.push(React.createElement(Tooltip, {\n color: \"black\",\n position: \"top\",\n text: \"BandagedBD Developer\"\n }, props => React.createElement(Anchor, Object.assign({\n className: \"bd-chat-badge\",\n href: \"https://github.com/rauenzi/BetterDiscordApp\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, props), React.createElement(_ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n size: \"16px\",\n className: \"bd-logo\"\n }))));\n });\n }\n\n patchMemberList() {\n if (this.memberListPatch) return;\n const MemberListItem = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findByDisplayName(\"MemberListItem\");\n const Anchor = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].find(m => m.displayName == \"Anchor\");\n if (!Anchor || !MemberListItem || !MemberListItem.prototype || !MemberListItem.prototype.renderDecorators) return;\n this.memberListPatch = _patcher__WEBPACK_IMPORTED_MODULE_4__[\"default\"].after(\"ComponentPatcher\", MemberListItem.prototype, \"renderDecorators\", (thisObject, args, returnValue) => {\n const user = _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getNestedProp(thisObject, \"props.user\");\n const children = _utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getNestedProp(returnValue, \"props.children\");\n if (!children || !user || !user.id || user.id !== \"249746236008169473\") return;\n if (!Array.isArray(children)) return;\n children.push(React.createElement(Tooltip, {\n color: \"black\",\n position: \"top\",\n text: \"BandagedBD Developer\"\n }, props => React.createElement(Anchor, Object.assign({\n className: \"bd-member-badge\",\n href: \"https://github.com/rauenzi/BetterDiscordApp\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, props), React.createElement(_ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n size: \"16px\",\n className: \"bd-logo\"\n }))));\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29tcG9uZW50cGF0Y2hlci5qcz8yZjAyIl0sIm5hbWVzIjpbIlJlYWN0IiwiRGlzY29yZE1vZHVsZXMiLCJUb29sdGlwIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeURpc3BsYXlOYW1lIiwiQ29tcG9uZW50UGF0Y2hlciIsImluaXRpYWxpemUiLCJVdGlsaXRpZXMiLCJzdXBwcmVzc0Vycm9ycyIsInBhdGNoU29jaWFsIiwiYmluZCIsInBhdGNoR3VpbGRQaWxscyIsInBhdGNoR3VpbGRMaXN0SXRlbXMiLCJwYXRjaEd1aWxkU2VwYXJhdG9yIiwicGF0Y2hNZXNzYWdlSGVhZGVyIiwicGF0Y2hNZW1iZXJMaXN0Iiwic29jaWFsUGF0Y2giLCJUYWJCYXIiLCJBbmNob3IiLCJQYXRjaGVyIiwiYWZ0ZXIiLCJwcm90b3R5cGUiLCJ0aGlzT2JqZWN0IiwiYXJncyIsInJldHVyblZhbHVlIiwiY2hpbGRyZW4iLCJwcm9wcyIsImxlbmd0aCIsInR5cGUiLCJkaXNwbGF5TmFtZSIsInRvU3RyaW5nIiwiaW5jbHVkZXMiLCJvcmlnaW5hbCIsIm5ld09uZSIsInJldHVyblZhbCIsImFyZ3VtZW50cyIsInB1c2giLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiaHJlZiIsInRpdGxlIiwidGFyZ2V0IiwiQkRMb2dvIiwic2l6ZSIsImluamVjdG9yIiwiQ29uZmlnIiwidmVyc2lvbiIsInZlcnNpb25IYXNoIiwiaGFzaCIsInN1YnN0cmluZyIsImJyYW5jaCIsImFkZGl0aW9uYWwiLCJiYmRWZXJzaW9uIiwib3JpZ2luYWxWZXJzaW9ucyIsInNwbGljZSIsImd1aWxkTGlzdEl0ZW1zUGF0Y2giLCJsaXN0SXRlbUNsYXNzIiwiR3VpbGRDbGFzc2VzIiwibGlzdEl0ZW0iLCJzcGxpdCIsImJsb2JDbGFzcyIsImJsb2JDb250YWluZXIiLCJyZWFjdEluc3RhbmNlIiwiZ2V0UmVhY3RJbnN0YW5jZSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsInBhcmVudEVsZW1lbnQiLCJHdWlsZENvbXBvbmVudCIsInJldHVybiIsIl8iLCJndWlsZERhdGEiLCJ1bnJlYWQiLCJzZWxlY3RlZCIsImF1ZGlvIiwidmlkZW8iLCJiYWRnZSIsImFuaW1hdGFibGUiLCJndWlsZFBpbGxQYXRjaCIsImd1aWxkUGlsbCIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0IiwiaG92ZXJlZCIsImd1aWxkU2VwYXJhdG9yUGF0Y2giLCJHdWlsZHMiLCJndWlsZENvbXBvbmVudHMiLCJnZXRCeVByb3BzIiwiR3VpbGRTZXBhcmF0b3IiLCJTZXBhcmF0b3IiLCJfXyIsImZpbmRJblJlYWN0VHJlZSIsImlzRW1wdHkiLCJtZXNzYWdlSGVhZGVyUGF0Y2giLCJNZXNzYWdlSGVhZGVyIiwiZmluZCIsImF1dGhvciIsImdldE5lc3RlZFByb3AiLCJpZCIsIkFycmF5IiwiaXNBcnJheSIsImNvbG9yIiwicG9zaXRpb24iLCJ0ZXh0IiwiT2JqZWN0IiwiYXNzaWduIiwibWVtYmVyTGlzdFBhdGNoIiwiTWVtYmVyTGlzdEl0ZW0iLCJmaW5kQnlEaXNwbGF5TmFtZSIsInJlbmRlckRlY29yYXRvcnMiLCJ1c2VyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLEtBQUssR0FBR0MsdURBQWMsQ0FBQ0QsS0FBN0I7QUFDQSxNQUFNRSxPQUFPLEdBQUdDLHVEQUFjLENBQUNDLGdCQUFmLENBQWdDLFNBQWhDLENBQWhCO0FBRWUsbUVBQUksTUFBTUMsZ0JBQU4sQ0FBdUI7QUFFdENDLFlBQVUsR0FBRztBQUNUQyxzREFBUyxDQUFDQyxjQUFWLENBQXlCLEtBQUtDLFdBQUwsQ0FBaUJDLElBQWpCLENBQXNCLElBQXRCLENBQXpCLEVBQXNELGlCQUF0RDtBQUNBSCxzREFBUyxDQUFDQyxjQUFWLENBQXlCLEtBQUtHLGVBQUwsQ0FBcUJELElBQXJCLENB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QUFDeUYsYUFBVixDQUF3QjFFLFVBQXhCLEVBQW9DLFlBQXBDLENBQWI7QUFDQSxZQUFNRyxRQUFRLEdBQUdsQixrREFBUyxDQUFDeUYsYUFBVixDQUF3QnhFLFdBQXhCLEVBQXFDLGdCQUFyQyxDQUFqQjtBQUNBLFVBQUksQ0FBQ0MsUUFBRCxJQUFhLENBQUNvRixJQUFkLElBQXNCLENBQUNBLElBQUksQ0FBQ1osRUFBNUIsSUFBa0NZLElBQUksQ0FBQ1osRUFBTCxLQUFZLG9CQUFsRCxFQUF3RTtBQUN4RSxVQUFJLENBQUNDLEtBQUssQ0FBQ0MsT0FBTixDQUFjMUUsUUFBZCxDQUFMLEVBQThCO0FBQzlCQSxjQUFRLENBQUNXLElBQVQsQ0FDSXBDLEtBQUssQ0FBQ3FDLGFBQU4sQ0FBb0JuQyxPQUFwQixFQUE2QjtBQUFDa0csYUFBSyxFQUFFLE9BQVI7QUFBaUJDLGdCQUFRLEVBQUUsS0FBM0I7QUFBa0NDLFlBQUksRUFBRTtBQUF4QyxPQUE3QixFQUNJNUUsS0FBSyxJQUFJMUIsS0FBSyxDQUFDcUMsYUFBTixDQUFvQm5CLE1BQXBCLEVBQTRCcUYsTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFBQ2xFLGlCQUFTLEVBQUUsaUJBQVo7QUFBK0JDLFlBQUksRUFBRSw2Q0FBckM7QUFBb0ZDLGFBQUssRUFBRSxZQUEzRjtBQUF5R0MsY0FBTSxFQUFFO0FBQWpILE9BQWQsRUFBMElmLEtBQTFJLENBQTVCLEVBQ0wxQixLQUFLLENBQUNxQyxhQUFOLENBQW9CSyx3REFBcEIsRUFBNEI7QUFBQ0MsWUFBSSxFQUFFLE1BQVA7QUFBZUwsaUJBQVMsRUFBRTtBQUExQixPQUE1QixDQURLLENBRGIsQ0FESjtBQU9ILEtBWnNCLENBQXZCO0FBYUg7O0FBM0lxQyxDQUEzQixFQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvY29tcG9uZW50cGF0Y2hlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja21vZHVsZXNcIjtcclxuaW1wb3J0IERpc2NvcmRNb2R1bGVzIGZyb20gXCIuL2Rpc2NvcmRtb2R1bGVzXCI7XHJcbmltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBQYXRjaGVyIGZyb20gXCIuL3BhdGNoZXJcIjtcclxuaW1wb3J0IEJETG9nbyBmcm9tIFwiLi4vdWkvaWNvbnMvYmRsb2dvXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IERpc2NvcmRNb2R1bGVzLlJlYWN0O1xyXG5jb25zdCBUb29sdGlwID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ29tcG9uZW50UGF0Y2hlciB7XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaFNvY2lhbC5iaW5kKHRoaXMpLCBcIkJEIFNvY2lhbCBQYXRjaFwiKSgpO1xyXG4gICAgICAgIFV0aWxpdGllcy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRQaWxscy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFBpbGxzIFBhdGNoXCIpKCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZExpc3RJdGVtcy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIExpc3QgSXRlbXMgUGF0Y2hcIikoKTtcclxuICAgICAgICBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkU2VwYXJhdG9yLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgU2VwYXJhdG9yIFBhdGNoXCIpKCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hNZXNzYWdlSGVhZGVyLmJpbmQodGhpcyksIFwiQkQgTWVzc2FnZSBIZWFkZXIgUGF0Y2hcIikoKTtcclxuICAgICAgICBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaE1lbWJlckxpc3QuYmluZCh0aGlzKSwgXCJCRCBNZW1iZXIgTGlzdCBQYXRjaFwiKSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoU29jaWFsKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNvY2lhbFBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgVGFiQmFyID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIlRhYkJhclwiKTtcclxuICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeURpc3BsYXlOYW1lKFwiQW5jaG9yXCIpO1xyXG4gICAgICAgIGlmICghVGFiQmFyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zb2NpYWxQYXRjaCA9IFBhdGNoZXIuYWZ0ZXIoXCJDb21wb25lbnRQYXRjaGVyXCIsIFRhYkJhci5wcm90b3R5cGUsIFwicmVuZGVyXCIsICh0aGlzT2JqZWN0LCBhcmdzLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW4ubGVuZ3RoIDwgMykgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gM10udHlwZS5kaXNwbGF5TmFtZSAhPT0gXCJTZXBhcmF0b3JcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoIWNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUudG9TdHJpbmcoKS5pbmNsdWRlcyhcInNvY2lhbExpbmtzXCIpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmIChBbmNob3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld09uZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rXCIsIGhyZWY6IFwiaHR0cHM6Ly90d2l0dGVyLmNvbS9CYW5kYWdlZEJEXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1zb2NpYWwtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlID0gbmV3T25lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpbmplY3RvciA9IERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb2xvck11dGVkLUhkRnQ0cSBzaXplMTItM2NMdmJKXCJ9LCBgSW5qZWN0b3IgJHtDb25maWcudmVyc2lvbn1gKTtcclxuICAgICAgICAgICAgY29uc3QgdmVyc2lvbkhhc2ggPSBgKCR7Q29uZmlnLmhhc2ggPyBDb25maWcuaGFzaC5zdWJzdHJpbmcoMCwgNykgOiBDb25maWcuYnJhbmNofSlgO1xyXG4gICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsID0gRGlzY29yZE1vZHVsZXMuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbG9yTXV0ZWQtSGRGdDRxIHNpemUxMi0zY0x2YkpcIn0sIGBCQkQgJHtDb25maWcuYmJkVmVyc2lvbn0gYCwgRGlzY29yZE1vZHVsZXMuUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJ2ZXJzaW9uSGFzaC0yZ1hqSUIgZGEtdmVyc2lvbkhhc2hcIn0sIHZlcnNpb25IYXNoKSk7XHJcbiAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxWZXJzaW9ucyA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGU7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsVmVyc2lvbnMoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5zcGxpY2UocmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLmxlbmd0aCAtIDEsIDAsIGluamVjdG9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5zcGxpY2UoMSwgMCwgYWRkaXRpb25hbCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoR3VpbGRMaXN0SXRlbXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3VpbGRMaXN0SXRlbXNQYXRjaCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGxpc3RJdGVtQ2xhc3MgPSBEaXNjb3JkTW9kdWxlcy5HdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGJsb2JDbGFzcyA9IERpc2NvcmRNb2R1bGVzLkd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICBjb25zdCByZWFjdEluc3RhbmNlID0gVXRpbGl0aWVzLmdldFJlYWN0SW5zdGFuY2UoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7bGlzdEl0ZW1DbGFzc30gLiR7YmxvYkNsYXNzfWApLnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IEd1aWxkQ29tcG9uZW50ID0gcmVhY3RJbnN0YW5jZS5yZXR1cm4udHlwZTtcclxuICAgICAgICBpZiAoIUd1aWxkQ29tcG9uZW50KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoID0gUGF0Y2hlci5hZnRlcihcIkNvbXBvbmVudFBhdGNoZXJcIiwgR3VpbGRDb21wb25lbnQucHJvdG90eXBlLCBcInJlbmRlclwiLCAodGhpc09iamVjdCwgXywgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXR1cm5WYWx1ZSB8fCAhdGhpc09iamVjdCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZERhdGEgPSB0aGlzT2JqZWN0LnByb3BzO1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS51bnJlYWQpIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC11bnJlYWRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5zZWxlY3RlZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYXVkaW8pIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1hdWRpb1wiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnZpZGVvKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdmlkZW9cIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5iYWRnZSkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWJhZGdlXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYW5pbWF0YWJsZSkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWFuaW1hdGFibGVcIjtcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoR3VpbGRQaWxscygpIHtcclxuICAgICAgICBpZiAodGhpcy5ndWlsZFBpbGxQYXRjaCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkUGlsbCA9IFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZShtID0+IG0uZGVmYXVsdCAmJiAhbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC50b1N0cmluZyAmJiBtLmRlZmF1bHQudG9TdHJpbmcoKS5pbmNsdWRlcyhcInRyYW5zbGF0ZTNkXCIpKTtcclxuICAgICAgICBpZiAoIWd1aWxkUGlsbCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQaWxsUGF0Y2ggPSBQYXRjaGVyLmFmdGVyKFwiQ29tcG9uZW50UGF0Y2hlclwiLCBndWlsZFBpbGwsIFwiZGVmYXVsdFwiLCAoXywgYXJncywgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBhcmdzWzBdO1xyXG4gICAgICAgICAgICBpZiAocHJvcHMudW5yZWFkKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XHJcbiAgICAgICAgICAgIGlmIChwcm9wcy5zZWxlY3RlZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XHJcbiAgICAgICAgICAgIGlmIChwcm9wcy5ob3ZlcmVkKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtaG92ZXJlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hHdWlsZFNlcGFyYXRvcigpIHtcclxuICAgICAgICBpZiAodGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgR3VpbGRzID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgICAgICBjb25zdCBndWlsZENvbXBvbmVudHMgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicmVuZGVyTGlzdEl0ZW1cIik7XHJcbiAgICAgICAgaWYgKCFndWlsZENvbXBvbmVudHMgfHwgIUd1aWxkcykgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZ3VpbGRDb21wb25lbnRzLlNlcGFyYXRvciguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGQtc2VwYXJhdG9yXCI7XHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCA9IFBhdGNoZXIuYWZ0ZXIoXCJDb21wb25lbnRQYXRjaGVyXCIsIEd1aWxkcy5wcm90b3R5cGUsIFwicmVuZGVyXCIsIChfLCBfXywgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgU2VwYXJhdG9yID0gVXRpbGl0aWVzLmZpbmRJblJlYWN0VHJlZShyZXR1cm5WYWx1ZSwgbSA9PiBtLnR5cGUgJiYgIW0udHlwZS5kaXNwbGF5TmFtZSAmJiB0eXBlb2YobS50eXBlKSA9PSBcImZ1bmN0aW9uXCIgJiYgVXRpbGl0aWVzLmlzRW1wdHkobS5wcm9wcykpO1xyXG4gICAgICAgICAgICBpZiAoIVNlcGFyYXRvcikgcmV0dXJuO1xyXG4gICAgICAgICAgICBTZXBhcmF0b3IudHlwZSA9IEd1aWxkU2VwYXJhdG9yO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoTWVzc2FnZUhlYWRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5tZXNzYWdlSGVhZGVyUGF0Y2gpIHJldHVybjtcclxuICAgICAgICBjb25zdCBNZXNzYWdlSGVhZGVyID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIk1lc3NhZ2VUaW1lc3RhbXBcIik7XHJcbiAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICAgICAgaWYgKCFBbmNob3IgfHwgIU1lc3NhZ2VIZWFkZXIgfHwgIU1lc3NhZ2VIZWFkZXIuZGVmYXVsdCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZUhlYWRlclBhdGNoID0gUGF0Y2hlci5hZnRlcihcIkNvbXBvbmVudFBhdGNoZXJcIiwgTWVzc2FnZUhlYWRlciwgXCJkZWZhdWx0XCIsIChfLCBhcmdzLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhdXRob3IgPSBVdGlsaXRpZXMuZ2V0TmVzdGVkUHJvcChhcmdzWzBdLCBcIm1lc3NhZ2UuYXV0aG9yXCIpO1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxpdGllcy5nZXROZXN0ZWRQcm9wKHJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlblwiKTtcclxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhYXV0aG9yIHx8ICFhdXRob3IuaWQgfHwgYXV0aG9yLmlkICE9PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcCwge2NvbG9yOiBcImJsYWNrXCIsIHBvc2l0aW9uOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BzID0+IFJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCBPYmplY3QuYXNzaWduKHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LCBwcm9wcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaE1lbWJlckxpc3QoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWVtYmVyTGlzdFBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgTWVtYmVyTGlzdEl0ZW0gPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIk1lbWJlckxpc3RJdGVtXCIpO1xyXG4gICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgICAgIGlmICghQW5jaG9yIHx8ICFNZW1iZXJMaXN0SXRlbSB8fCAhTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlIHx8ICFNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUucmVuZGVyRGVjb3JhdG9ycykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubWVtYmVyTGlzdFBhdGNoID0gUGF0Y2hlci5hZnRlcihcIkNvbXBvbmVudFBhdGNoZXJcIiwgTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLCBcInJlbmRlckRlY29yYXRvcnNcIiwgKHRoaXNPYmplY3QsIGFyZ3MsIHJldHVyblZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBVdGlsaXRpZXMuZ2V0TmVzdGVkUHJvcCh0aGlzT2JqZWN0LCBcInByb3BzLnVzZXJcIik7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbGl0aWVzLmdldE5lc3RlZFByb3AocmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW5cIik7XHJcbiAgICAgICAgICAgIGlmICghY2hpbGRyZW4gfHwgIXVzZXIgfHwgIXVzZXIuaWQgfHwgdXNlci5pZCAhPT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXAsIHtjb2xvcjogXCJibGFja1wiLCBwb3NpdGlvbjogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcyA9PiBSZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwgT2JqZWN0LmFzc2lnbih7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LCBwcm9wcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/componentpatcher.js\n"); /***/ }), @@ -383,7 +407,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data /***/ (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 }\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"); +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/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./strings */ \"./src/modules/strings.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\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 _datastore__WEBPACK_IMPORTED_MODULE_10__[\"default\"].initialize();\n await _localemanager__WEBPACK_IMPORTED_MODULE_0__[\"default\"].initialize();\n\n if (data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version < data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].minSupportedVersion) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.notSupported, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.versionMismatch.format({\n injector: data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version,\n remote: data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].bbdVersion\n }));\n }\n\n if (window.ED) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.notSupported, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.incompatibleApp.format({\n app: \"EnhancedDiscord\"\n }));\n }\n\n if (window.WebSocket && window.WebSocket.name && window.WebSocket.name.includes(\"Patched\")) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.notSupported, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.incompatibleApp.format({\n app: \"Powercord\"\n }));\n }\n\n console.log(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"]);\n const latestLocalVersion = data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].updater ? data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].updater.LatestVersion : data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].latestVersion;\n\n if (latestLocalVersion > data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].showConfirmationModal(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.updateAvailable, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.updateInfo.format({\n version: latestLocalVersion\n }), {\n confirmText: _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.updateNow,\n cancelText: _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.maybeLater,\n onConfirm: async () => {\n const onUpdateFailed = () => {\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(_strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.updateFailed, _strings__WEBPACK_IMPORTED_MODULE_13__[\"default\"].Startup.manualUpdate);\n };\n\n try {\n const didUpdate = await this.updateInjector();\n if (!didUpdate) return onUpdateFailed();\n\n const app = __webpack_require__(/*! electron */ \"electron\").remote.app;\n\n app.relaunch();\n app.exit();\n } catch (err) {\n onUpdateFailed();\n }\n }\n });\n }\n\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 const previousVersion = _datastore__WEBPACK_IMPORTED_MODULE_10__[\"default\"].getBDData(\"version\");\n\n if (data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].bbdVersion > previousVersion) {\n this.showChangelogModal(data__WEBPACK_IMPORTED_MODULE_2__[\"Changelog\"]);\n _datastore__WEBPACK_IMPORTED_MODULE_10__[\"default\"].setBDData(\"version\", data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].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\nCore.prototype.updateInjector = async function () {\n const injectionPath = _datastore__WEBPACK_IMPORTED_MODULE_10__[\"default\"].injectionPath;\n if (!injectionPath) return false;\n\n const fs = __webpack_require__(/*! fs */ \"fs\");\n\n const path = __webpack_require__(/*! path */ \"path\");\n\n const rmrf = __webpack_require__(/*! rimraf */ \"rimraf\");\n\n const yauzl = __webpack_require__(/*! yauzl */ \"yauzl\");\n\n const mkdirp = __webpack_require__(/*! mkdirp */ \"mkdirp\");\n\n const request = __webpack_require__(/*! request */ \"request\");\n\n const parentPath = path.resolve(injectionPath, \"..\");\n const folderName = path.basename(injectionPath);\n const zipLink = \"https://github.com/rauenzi/BetterDiscordApp/archive/injector.zip\";\n const savedZip = path.resolve(parentPath, \"injector.zip\");\n const extractedFolder = path.resolve(parentPath, \"BetterDiscordApp-injector\"); // Download the injector zip file\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", \"Downloading \" + zipLink);\n let success = await new Promise(resolve => {\n request.get({\n url: zipLink,\n encoding: null\n }, async (error, response, body) => {\n if (error || response.statusCode !== 200) return resolve(false); // Save a backup in case someone has their own copy\n\n const alreadyExists = await new Promise(res => fs.exists(savedZip, res));\n if (alreadyExists) await new Promise(res => fs.rename(savedZip, `${savedZip}.bak${Math.round(performance.now())}`, res));\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", \"Writing \" + savedZip);\n fs.writeFile(savedZip, body, err => resolve(!err));\n });\n });\n if (!success) return success; // Check and delete rename extraction\n\n const alreadyExists = await new Promise(res => fs.exists(extractedFolder, res));\n if (alreadyExists) await new Promise(res => fs.rename(extractedFolder, `${extractedFolder}.bak${Math.round(performance.now())}`, res)); // Unzip the downloaded zip file\n\n const zipfile = await new Promise(r => yauzl.open(savedZip, {\n lazyEntries: true\n }, (err, zip) => r(zip)));\n zipfile.on(\"entry\", function (entry) {\n // Skip directories, they are handled with mkdirp\n if (entry.fileName.endsWith(\"/\")) return zipfile.readEntry();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", \"Extracting \" + entry.fileName); // Make any needed parent directories\n\n const fullPath = path.resolve(parentPath, entry.fileName);\n mkdirp.sync(path.dirname(fullPath));\n zipfile.openReadStream(entry, function (err, readStream) {\n if (err) return success = false;\n readStream.on(\"end\", function () {\n zipfile.readEntry();\n }); // Go to next file after this\n\n readStream.pipe(fs.createWriteStream(fullPath));\n });\n });\n zipfile.readEntry(); // Start reading\n // Wait for the final file to finish\n\n await new Promise(resolve => zipfile.once(\"end\", resolve)); // Save a backup in case something goes wrong during final step\n\n const backupFolder = path.resolve(parentPath, `${folderName}.bak${Math.round(performance.now())}`);\n await new Promise(resolve => fs.rename(injectionPath, backupFolder, resolve)); // Rename the extracted folder to what it should be\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", `Renaming ${path.basename(extractedFolder)} to ${folderName}`);\n success = await new Promise(resolve => fs.rename(extractedFolder, injectionPath, err => resolve(!err)));\n\n if (!success) {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].err(\"InjectorUpdate\", \"Failed to rename the final directory\");\n return success;\n } // If rename had issues, delete what we tried to rename and restore backup\n\n\n if (!success) {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].err(\"InjectorUpdate\", \"Something went wrong... restoring backups.\");\n await new Promise(resolve => rmrf(extractedFolder, resolve));\n await new Promise(resolve => fs.rename(backupFolder, injectionPath, resolve));\n return success;\n } // If we've gotten to this point, everything should have gone smoothly.\n // Cleanup the backup folder then remove the zip\n\n\n await new Promise(resolve => rmrf(backupFolder, resolve));\n await new Promise(resolve => fs.unlink(savedZip, resolve));\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"InjectorUpdate\", \"Injector Updated!\");\n return success;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new Core());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29yZS5qcz9iNmRlIl0sIm5hbWVzIjpbIkd1aWxkQ2xhc3NlcyIsIkRpc2NvcmRNb2R1bGVzIiwiQ29yZSIsInByb3RvdHlwZSIsInNldENvbmZpZyIsImNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsIkNvbmZpZyIsImluaXQiLCJEYXRhU3RvcmUiLCJpbml0aWFsaXplIiwiTG9jYWxlTWFuYWdlciIsInZlcnNpb24iLCJtaW5TdXBwb3J0ZWRWZXJzaW9uIiwiTW9kYWxzIiwiYWxlcnQiLCJTdHJpbmdzIiwiU3RhcnR1cCIsIm5vdFN1cHBvcnRlZCIsInZlcnNpb25NaXNtYXRjaCIsImZvcm1hdCIsImluamVjdG9yIiwicmVtb3RlIiwiYmJkVmVyc2lvbiIsIndpbmRvdyIsIkVEIiwiaW5jb21wYXRpYmxlQXBwIiwiYXBwIiwiV2ViU29ja2V0IiwibmFtZSIsImluY2x1ZGVzIiwiY29uc29sZSIsImxvZyIsImxhdGVzdExvY2FsVmVyc2lvbiIsInVwZGF0ZXIiLCJMYXRlc3RWZXJzaW9uIiwibGF0ZXN0VmVyc2lvbiIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsInVwZGF0ZUF2YWlsYWJsZSIsInVwZGF0ZUluZm8iLCJjb25maXJtVGV4dCIsInVwZGF0ZU5vdyIsImNhbmNlbFRleHQiLCJtYXliZUxhdGVyIiwib25Db25maXJtIiwib25VcGRhdGVGYWlsZWQiLCJ1cGRhdGVGYWlsZWQiLCJtYW51YWxVcGRhdGUiLCJkaWRVcGRhdGUiLCJ1cGRhdGVJbmplY3RvciIsInJlcXVpcmUiLCJyZWxhdW5jaCIsImV4aXQiLCJlcnIiLCJMb2dnZXIiLCJTZXR0aW5ncyIsIkRPTU1hbmFnZXIiLCJ3YWl0Rm9yR3VpbGRzIiwiUmVhY3RDb21wb25lbnRzIiwiQ29tcG9uZW50UGF0Y2hlciIsIm1vZHVsZSIsIkJ1aWx0aW5zIiwicGx1Z2luRXJyb3JzIiwiUGx1Z2luTWFuYWdlciIsInRoZW1lRXJyb3JzIiwiVGhlbWVNYW5hZ2VyIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwicmVtb3ZlIiwic2hvd0FkZG9uRXJyb3JzIiwicGx1Z2lucyIsInRoZW1lcyIsInByZXZpb3VzVmVyc2lvbiIsImdldEJERGF0YSIsInNob3dDaGFuZ2Vsb2dNb2RhbCIsIkNoYW5nZWxvZyIsInNldEJERGF0YSIsInRpbWVzQ2hlY2tlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2hlY2tGb3JHdWlsZHMiLCJyZWFkeVN0YXRlIiwic2V0VGltZW91dCIsIndyYXBwZXIiLCJzcGxpdCIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJkZWZlckxvYWRlZCIsImluamVjdGlvblBhdGgiLCJmcyIsInBhdGgiLCJybXJmIiwieWF1emwiLCJta2RpcnAiLCJyZXF1ZXN0IiwicGFyZW50UGF0aCIsImZvbGRlck5hbWUiLCJiYXNlbmFtZSIsInppcExpbmsiLCJzYXZlZFppcCIsImV4dHJhY3RlZEZvbGRlciIsInN1Y2Nlc3MiLCJnZXQiLCJ1cmwiLCJlbmNvZGluZyIsImVycm9yIiwicmVzcG9uc2UiLCJib2R5Iiwic3RhdHVzQ29kZSIsImFscmVhZHlFeGlzdHMiLCJyZXMiLCJleGlzdHMiLCJyZW5hbWUiLCJNYXRoIiwicm91bmQiLCJwZXJmb3JtYW5jZSIsIm5vdyIsIndyaXRlRmlsZSIsInppcGZpbGUiLCJyIiwib3BlbiIsImxhenlFbnRyaWVzIiwiemlwIiwib24iLCJlbnRyeSIsImZpbGVOYW1lIiwiZW5kc1dpdGgiLCJyZWFkRW50cnkiLCJmdWxsUGF0aCIsInN5bmMiLCJkaXJuYW1lIiwib3BlblJlYWRTdHJlYW0iLCJyZWFkU3RyZWFtIiwicGlwZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwib25jZSIsImJhY2t1cEZvbGRlciIsInVubGluayJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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QixFQUEwQ3ZDLEdBQUcsSUFBSTBCLE9BQU8sQ0FBQyxDQUFDMUIsR0FBRixDQUF4RCxDQUF2QixDQUFoQjs7QUFDQSxNQUFJLENBQUNvRCxPQUFMLEVBQWM7QUFDVm5ELG1EQUFNLENBQUNELEdBQVAsQ0FBVyxnQkFBWCxFQUE2QixzQ0FBN0I7QUFDQSxXQUFPb0QsT0FBUDtBQUNILEdBbkU0QyxDQXFFN0M7OztBQUNBLE1BQUksQ0FBQ0EsT0FBTCxFQUFjO0FBQ1ZuRCxtREFBTSxDQUFDRCxHQUFQLENBQVcsZ0JBQVgsRUFBNkIsNENBQTdCO0FBQ0EsVUFBTSxJQUFJeUIsT0FBSixDQUFZQyxPQUFPLElBQUlnQixJQUFJLENBQUNTLGVBQUQsRUFBa0J6QixPQUFsQixDQUEzQixDQUFOO0FBQ0EsVUFBTSxJQUFJRCxPQUFKLENBQVlDLE9BQU8sSUFBSWMsRUFBRSxDQUFDdUIsTUFBSCxDQUFVd0IsWUFBVixFQUF3QmhELGFBQXhCLEVBQXVDYixPQUF2QyxDQUF2QixDQUFOO0FBQ0EsV0FBTzBCLE9BQVA7QUFDSCxHQTNFNEMsQ0E2RTdDO0FBQ0E7OztBQUNBLFFBQU0sSUFBSTNCLE9BQUosQ0FBWUMsT0FBTyxJQUFJZ0IsSUFBSSxDQUFDNkMsWUFBRCxFQUFlN0QsT0FBZixDQUEzQixDQUFOO0FBQ0EsUUFBTSxJQUFJRCxPQUFKLENBQVlDLE9BQU8sSUFBSWMsRUFBRSxDQUFDZ0QsTUFBSCxDQUFVdEMsUUFBVixFQUFvQnhCLE9BQXBCLENBQXZCLENBQU47QUFFQXpCLGlEQUFNLENBQUN0QixHQUFQLENBQVcsZ0JBQVgsRUFBNkIsbUJBQTdCO0FBQ0EsU0FBT3lFLE9BQVA7QUFDSCxDQXBGRDs7QUFzRmUsbUVBQUl4RyxJQUFKLEVBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9jb3JlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvY2FsZU1hbmFnZXIgZnJvbSBcIi4vbG9jYWxlbWFuYWdlclwiO1xyXG5cclxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcclxuaW1wb3J0IHtDb25maWcsIENoYW5nZWxvZ30gZnJvbSBcImRhdGFcIjtcclxuLy8gaW1wb3J0IEVtb3RlTW9kdWxlIGZyb20gXCIuL2Vtb3Rlc1wiO1xyXG4vLyBpbXBvcnQgUXVpY2tFbW90ZU1lbnUgZnJvbSBcIi4uL2J1aWx0aW5zL2Vtb3RlbWVudVwiO1xyXG5pbXBvcnQgRE9NTWFuYWdlciBmcm9tIFwiLi9kb21tYW5hZ2VyXCI7XHJcbmltcG9ydCBQbHVnaW5NYW5hZ2VyIGZyb20gXCIuL3BsdWdpbm1hbmFnZXJcIjtcclxuaW1wb3J0IFRoZW1lTWFuYWdlciBmcm9tIFwiLi90aGVtZW1hbmFnZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5pbXBvcnQgKiBhcyBCdWlsdGlucyBmcm9tIFwiYnVpbHRpbnNcIjtcclxuaW1wb3J0IE1vZGFscyBmcm9tIFwiLi4vdWkvbW9kYWxzXCI7XHJcbmltcG9ydCBSZWFjdENvbXBvbmVudHMgZnJvbSBcIi4vcmVhY3Rjb21wb25lbnRzXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbmltcG9ydCBEaXNjb3JkTW9kdWxlcyBmcm9tIFwiLi9kaXNjb3JkbW9kdWxlc1wiO1xyXG5pbXBvcnQgQ29tcG9uZW50UGF0Y2hlciBmcm9tIFwiLi9jb21wb25lbnRwYXRjaGVyXCI7XHJcbmltcG9ydCBTdHJpbmdzIGZyb20gXCIuL3N0cmluZ3NcIjtcclxuXHJcblxyXG5jb25zdCBHdWlsZENsYXNzZXMgPSBEaXNjb3JkTW9kdWxlcy5HdWlsZENsYXNzZXM7XHJcblxyXG5mdW5jdGlvbiBDb3JlKCkge1xyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5zZXRDb25maWcgPSBmdW5jdGlvbihjb25maWcpIHtcclxuICAgIE9iamVjdC5hc3NpZ24oQ29uZmlnLCBjb25maWcpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdCA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIERhdGFTdG9yZS5pbml0aWFsaXplKCk7XHJcbiAgICBhd2FpdCBMb2NhbGVNYW5hZ2VyLmluaXRpYWxpemUoKTtcclxuXHJcbiAgICBpZiAoQ29uZmlnLnZlcnNpb24gPCBDb25maWcubWluU3VwcG9ydGVkVmVyc2lvbikge1xyXG4gICAgICAgIHJldHVybiBNb2RhbHMuYWxlcnQoU3RyaW5ncy5TdGFydHVwLm5vdFN1cHBvcnRlZCwgU3RyaW5ncy5TdGFydHVwLnZlcnNpb25NaXNtYXRjaC5mb3JtYXQoe2luamVjdG9yOiBDb25maWcudmVyc2lvbiwgcmVtb3RlOiBDb25maWcuYmJkVmVyc2lvbn0pKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LkVEKSB7XHJcbiAgICAgICAgcmV0dXJuIE1vZGFscy5hbGVydChTdHJpbmdzLlN0YXJ0dXAubm90U3VwcG9ydGVkLCBTdHJpbmdzLlN0YXJ0dXAuaW5jb21wYXRpYmxlQXBwLmZvcm1hdCh7YXBwOiBcIkVuaGFuY2VkRGlzY29yZFwifSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cuV2ViU29ja2V0ICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZSAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUuaW5jbHVkZXMoXCJQYXRjaGVkXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIE1vZGFscy5hbGVydChTdHJpbmdzLlN0YXJ0dXAubm90U3VwcG9ydGVkLCBTdHJpbmdzLlN0YXJ0dXAuaW5jb21wYXRpYmxlQXBwLmZvcm1hdCh7YXBwOiBcIlBvd2VyY29yZFwifSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKENvbmZpZyk7XHJcblxyXG4gICAgY29uc3QgbGF0ZXN0TG9jYWxWZXJzaW9uID0gQ29uZmlnLnVwZGF0ZXIgPyBDb25maWcudXBkYXRlci5MYXRlc3RWZXJzaW9uIDogQ29uZmlnLmxhdGVzdFZlcnNpb247XHJcbiAgICBpZiAobGF0ZXN0TG9jYWxWZXJzaW9uID4gQ29uZmlnLnZlcnNpb24pIHtcclxuICAgICAgICBNb2RhbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFN0cmluZ3MuU3RhcnR1cC51cGRhdGVBdmFpbGFibGUsIFN0cmluZ3MuU3RhcnR1cC51cGRhdGVJbmZvLmZvcm1hdCh7dmVyc2lvbjogbGF0ZXN0TG9jYWxWZXJzaW9ufSksIHtcclxuICAgICAgICAgICAgY29uZmlybVRleHQ6IFN0cmluZ3MuU3RhcnR1cC51cGRhdGVOb3csXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6IFN0cmluZ3MuU3RhcnR1cC5tYXliZUxhdGVyLFxyXG4gICAgICAgICAgICBvbkNvbmZpcm06IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9uVXBkYXRlRmFpbGVkID0gKCkgPT4ge01vZGFscy5hbGVydChTdHJpbmdzLlN0YXJ0dXAudXBkYXRlRmFpbGVkLCBTdHJpbmdzLlN0YXJ0dXAubWFudWFsVXBkYXRlKTt9O1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWRVcGRhdGUgPSBhd2FpdCB0aGlzLnVwZGF0ZUluamVjdG9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkaWRVcGRhdGUpIHJldHVybiBvblVwZGF0ZUZhaWxlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5yZWxhdW5jaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5leGl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25VcGRhdGVGYWlsZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuXHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBTZXR0aW5nc1wiKTtcclxuICAgIFNldHRpbmdzLmluaXRpYWxpemUoKTtcclxuXHJcbiAgICBET01NYW5hZ2VyLmluaXRpYWxpemUoKTtcclxuICAgIGF3YWl0IHRoaXMud2FpdEZvckd1aWxkcygpO1xyXG4gICAgUmVhY3RDb21wb25lbnRzLmluaXRpYWxpemUoKTtcclxuICAgIENvbXBvbmVudFBhdGNoZXIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgZm9yIChjb25zdCBtb2R1bGUgaW4gQnVpbHRpbnMpIEJ1aWx0aW5zW21vZHVsZV0uaW5pdGlhbGl6ZSgpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBQbHVnaW5zXCIpO1xyXG4gICAgY29uc3QgcGx1Z2luRXJyb3JzID0gUGx1Z2luTWFuYWdlci5pbml0aWFsaXplKCk7XHJcblxyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFRoZW1lc1wiKTtcclxuICAgIGNvbnN0IHRoZW1lRXJyb3JzID0gVGhlbWVNYW5hZ2VyLmluaXRpYWxpemUoKTtcclxuXHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIlJlbW92aW5nIExvYWRpbmcgSWNvblwiKTtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKVswXS5yZW1vdmUoKTtcclxuXHJcbiAgICAvLyBTaG93IGxvYWRpbmcgZXJyb3JzXHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIkNvbGxlY3RpbmcgU3RhcnR1cCBFcnJvcnNcIik7XHJcbiAgICBNb2RhbHMuc2hvd0FkZG9uRXJyb3JzKHtwbHVnaW5zOiBwbHVnaW5FcnJvcnMsIHRoZW1lczogdGhlbWVFcnJvcnN9KTtcclxuXHJcbiAgICBjb25zdCBwcmV2aW91c1ZlcnNpb24gPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwidmVyc2lvblwiKTtcclxuICAgIGlmIChDb25maWcuYmJkVmVyc2lvbiA+IHByZXZpb3VzVmVyc2lvbikge1xyXG4gICAgICAgIHRoaXMuc2hvd0NoYW5nZWxvZ01vZGFsKENoYW5nZWxvZyk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcInZlcnNpb25cIiwgQ29uZmlnLmJiZFZlcnNpb24pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUud2FpdEZvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IHRpbWVzQ2hlY2tlZCA9IDA7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdGltZXNDaGVja2VkKys7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9IFwiY29tcGxldGVcIikgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IEd1aWxkQ2xhc3Nlcy53cmFwcGVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgY29uc3QgZ3VpbGQgPSBHdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBibG9iID0gR3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn0gLiR7Z3VpbGR9IC4ke2Jsb2J9YCkubGVuZ3RoID4gMCkgcmV0dXJuIHJlc29sdmUoQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVzQ2hlY2tlZCA+PSA1MCkgcmV0dXJuIHJlc29sdmUoQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY2hlY2tGb3JHdWlsZHMoKTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUudXBkYXRlSW5qZWN0b3IgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IGluamVjdGlvblBhdGggPSBEYXRhU3RvcmUuaW5qZWN0aW9uUGF0aDtcclxuICAgIGlmICghaW5qZWN0aW9uUGF0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG4gICAgY29uc3Qgcm1yZiA9IHJlcXVpcmUoXCJyaW1yYWZcIik7XHJcbiAgICBjb25zdCB5YXV6bCA9IHJlcXVpcmUoXCJ5YXV6bFwiKTtcclxuICAgIGNvbnN0IG1rZGlycCA9IHJlcXVpcmUoXCJta2RpcnBcIik7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7XHJcblxyXG4gICAgY29uc3QgcGFyZW50UGF0aCA9IHBhdGgucmVzb2x2ZShpbmplY3Rpb25QYXRoLCBcIi4uXCIpO1xyXG4gICAgY29uc3QgZm9sZGVyTmFtZSA9IHBhdGguYmFzZW5hbWUoaW5qZWN0aW9uUGF0aCk7XHJcbiAgICBjb25zdCB6aXBMaW5rID0gXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL2FyY2hpdmUvaW5qZWN0b3IuemlwXCI7XHJcbiAgICBjb25zdCBzYXZlZFppcCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBcImluamVjdG9yLnppcFwiKTtcclxuICAgIGNvbnN0IGV4dHJhY3RlZEZvbGRlciA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBcIkJldHRlckRpc2NvcmRBcHAtaW5qZWN0b3JcIik7XHJcblxyXG4gICAgLy8gRG93bmxvYWQgdGhlIGluamVjdG9yIHppcCBmaWxlXHJcbiAgICBMb2dnZXIubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJEb3dubG9hZGluZyBcIiArIHppcExpbmspO1xyXG4gICAgbGV0IHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICByZXF1ZXN0LmdldCh7dXJsOiB6aXBMaW5rLCBlbmNvZGluZzogbnVsbH0sIGFzeW5jIChlcnJvciwgcmVzcG9uc2UsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZW9uZSBoYXMgdGhlaXIgb3duIGNvcHlcclxuICAgICAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5leGlzdHMoc2F2ZWRaaXAsIHJlcykpO1xyXG4gICAgICAgICAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShzYXZlZFppcCwgYCR7c2F2ZWRaaXB9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcblxyXG4gICAgICAgICAgICBMb2dnZXIubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJXcml0aW5nIFwiICsgc2F2ZWRaaXApO1xyXG4gICAgICAgICAgICBmcy53cml0ZUZpbGUoc2F2ZWRaaXAsIGJvZHksIGVyciA9PiByZXNvbHZlKCFlcnIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKCFzdWNjZXNzKSByZXR1cm4gc3VjY2VzcztcclxuXHJcbiAgICAvLyBDaGVjayBhbmQgZGVsZXRlIHJlbmFtZSBleHRyYWN0aW9uXHJcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhleHRyYWN0ZWRGb2xkZXIsIHJlcykpO1xyXG4gICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoZXh0cmFjdGVkRm9sZGVyLCBgJHtleHRyYWN0ZWRGb2xkZXJ9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcbiAgICBcclxuICAgIC8vIFVuemlwIHRoZSBkb3dubG9hZGVkIHppcCBmaWxlXHJcbiAgICBjb25zdCB6aXBmaWxlID0gYXdhaXQgbmV3IFByb21pc2UociA9PiB5YXV6bC5vcGVuKHNhdmVkWmlwLCB7bGF6eUVudHJpZXM6IHRydWV9LCAoZXJyLCB6aXApID0+ICByKHppcCkpKTtcclxuICAgIHppcGZpbGUub24oXCJlbnRyeVwiLCBmdW5jdGlvbihlbnRyeSkge1xyXG4gICAgICAgIC8vIFNraXAgZGlyZWN0b3JpZXMsIHRoZXkgYXJlIGhhbmRsZWQgd2l0aCBta2RpcnBcclxuICAgICAgICBpZiAoZW50cnkuZmlsZU5hbWUuZW5kc1dpdGgoXCIvXCIpKSByZXR1cm4gemlwZmlsZS5yZWFkRW50cnkoKTtcclxuXHJcbiAgICAgICAgTG9nZ2VyLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiRXh0cmFjdGluZyBcIiArIGVudHJ5LmZpbGVOYW1lKTtcclxuICAgICAgICAvLyBNYWtlIGFueSBuZWVkZWQgcGFyZW50IGRpcmVjdG9yaWVzXHJcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgZW50cnkuZmlsZU5hbWUpO1xyXG4gICAgICAgIG1rZGlycC5zeW5jKHBhdGguZGlybmFtZShmdWxsUGF0aCkpO1xyXG4gICAgICAgIHppcGZpbGUub3BlblJlYWRTdHJlYW0oZW50cnksIGZ1bmN0aW9uKGVyciwgcmVhZFN0cmVhbSkge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gc3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZWFkU3RyZWFtLm9uKFwiZW5kXCIsIGZ1bmN0aW9uKCkge3ppcGZpbGUucmVhZEVudHJ5KCk7fSk7IC8vIEdvIHRvIG5leHQgZmlsZSBhZnRlciB0aGlzXHJcbiAgICAgICAgICAgIHJlYWRTdHJlYW0ucGlwZShmcy5jcmVhdGVXcml0ZVN0cmVhbShmdWxsUGF0aCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB6aXBmaWxlLnJlYWRFbnRyeSgpOyAvLyBTdGFydCByZWFkaW5nXHJcblxyXG4gICAgLy8gV2FpdCBmb3IgdGhlIGZpbmFsIGZpbGUgdG8gZmluaXNoXHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHppcGZpbGUub25jZShcImVuZFwiLCByZXNvbHZlKSk7XHJcblxyXG4gICAgLy8gU2F2ZSBhIGJhY2t1cCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyBmaW5hbCBzdGVwXHJcbiAgICBjb25zdCBiYWNrdXBGb2xkZXIgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgYCR7Zm9sZGVyTmFtZX0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gKTtcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGluamVjdGlvblBhdGgsIGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIC8vIFJlbmFtZSB0aGUgZXh0cmFjdGVkIGZvbGRlciB0byB3aGF0IGl0IHNob3VsZCBiZVxyXG4gICAgTG9nZ2VyLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIGBSZW5hbWluZyAke3BhdGguYmFzZW5hbWUoZXh0cmFjdGVkRm9sZGVyKX0gdG8gJHtmb2xkZXJOYW1lfWApO1xyXG4gICAgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGV4dHJhY3RlZEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgZXJyID0+IHJlc29sdmUoIWVycikpKTtcclxuICAgIGlmICghc3VjY2Vzcykge1xyXG4gICAgICAgIExvZ2dlci5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIkZhaWxlZCB0byByZW5hbWUgdGhlIGZpbmFsIGRpcmVjdG9yeVwiKTtcclxuICAgICAgICByZXR1cm4gc3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiByZW5hbWUgaGFkIGlzc3VlcywgZGVsZXRlIHdoYXQgd2UgdHJpZWQgdG8gcmVuYW1lIGFuZCByZXN0b3JlIGJhY2t1cFxyXG4gICAgaWYgKCFzdWNjZXNzKSB7XHJcbiAgICAgICAgTG9nZ2VyLmVycihcIkluamVjdG9yVXBkYXRlXCIsIFwiU29tZXRoaW5nIHdlbnQgd3JvbmcuLi4gcmVzdG9yaW5nIGJhY2t1cHMuXCIpO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihleHRyYWN0ZWRGb2xkZXIsIHJlc29sdmUpKTtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShiYWNrdXBGb2xkZXIsIGluamVjdGlvblBhdGgsIHJlc29sdmUpKTtcclxuICAgICAgICByZXR1cm4gc3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB3ZSd2ZSBnb3R0ZW4gdG8gdGhpcyBwb2ludCwgZXZlcnl0aGluZyBzaG91bGQgaGF2ZSBnb25lIHNtb290aGx5LlxyXG4gICAgLy8gQ2xlYW51cCB0aGUgYmFja3VwIGZvbGRlciB0aGVuIHJlbW92ZSB0aGUgemlwXHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJtcmYoYmFja3VwRm9sZGVyLCByZXNvbHZlKSk7XHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnVubGluayhzYXZlZFppcCwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkluamVjdG9yIFVwZGF0ZWQhXCIpO1xyXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/core.js\n"); /***/ }), @@ -395,7 +419,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _loc /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n\n\n\nconst fs = __webpack_require__(/*! fs */ \"fs\");\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\nconst releaseChannel = DiscordNative.globals.releaseChannel; // Schema\n// =======================\n// %appdata%\\BetterDiscord\n// -> data\n// -> [releaseChannel]\\ (stable/canary/ptb)\n// -> settings.json\n// -> plugins.json\n// -> themes.json\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class DataStore {\n constructor() {\n this.data = {\n misc: {}\n };\n this.pluginData = {};\n this.cacheData = {};\n }\n\n initialize() {\n if (!fs.existsSync(this.baseFolder)) fs.mkdirSync(this.baseFolder);\n if (!fs.existsSync(this.dataFolder)) fs.mkdirSync(this.dataFolder);\n if (!fs.existsSync(this.localeFolder)) fs.mkdirSync(this.localeFolder);\n if (!fs.existsSync(this.emoteFolder)) fs.mkdirSync(this.emoteFolder);\n if (!fs.existsSync(this.cacheFile)) fs.writeFileSync(this.cacheFile, JSON.stringify({}));\n if (!fs.existsSync(this.customCSS)) fs.writeFileSync(this.customCSS, \"\");\n const dataFiles = fs.readdirSync(this.dataFolder).filter(f => !fs.statSync(path.resolve(this.dataFolder, f)).isDirectory() && f.endsWith(\".json\"));\n\n for (const file of dataFiles) {\n this.data[file.split(\".\")[0]] = require(path.resolve(this.dataFolder, file));\n }\n\n this.cacheData = _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].testJSON(fs.readFileSync(this.cacheFile).toString()) || {};\n }\n\n get customCSS() {\n return this._customCSS || (this._customCSS = path.resolve(this.dataFolder, \"custom.css\"));\n }\n\n get baseFolder() {\n return this._baseFolder || (this._baseFolder = path.resolve(data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].dataPath, \"data\"));\n }\n\n get dataFolder() {\n return this._dataFolder || (this._dataFolder = path.resolve(this.baseFolder, `${releaseChannel}`));\n }\n\n get localeFolder() {\n return this._localeFolder || (this._localeFolder = path.resolve(this.baseFolder, `locales`));\n }\n\n get emoteFolder() {\n return this._emoteFolder || (this._emoteFolder = path.resolve(this.baseFolder, `emotes`));\n }\n\n get cacheFile() {\n return this._cacheFile || (this._cacheFile = path.resolve(this.baseFolder, `.cache`));\n }\n\n getPluginFile(pluginName) {\n return path.resolve(data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].dataPath, \"plugins\", pluginName + \".config.json\");\n }\n\n _getFile(key) {\n if (key == \"settings\" || key == \"plugins\" || key == \"themes\") return path.resolve(this.dataFolder, `${key}.json`);\n return path.resolve(this.dataFolder, `misc.json`);\n }\n\n getBDData(key) {\n return this.data.misc[key] || \"\";\n }\n\n setBDData(key, value) {\n this.data.misc[key] = value;\n fs.writeFileSync(path.resolve(this.dataFolder, `misc.json`), JSON.stringify(this.data.misc, null, 4));\n }\n\n getLocale(locale) {\n const file = path.resolve(this.localeFolder, `${locale}.json`);\n if (!fs.existsSync(file)) return null;\n return _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].testJSON(fs.readFileSync(file).toString());\n }\n\n saveLocale(locale, strings) {\n fs.writeFileSync(path.resolve(this.localeFolder, `${locale}.json`), JSON.stringify(strings, null, 4));\n }\n\n getCacheHash(category, key) {\n if (!this.cacheData[category]) return \"\";\n if (!fs.existsSync(path.resolve(this.baseFolder, category, `${key}.json`))) return \"\";\n return this.cacheData[category][key] || \"\";\n }\n\n setCacheHash(category, key, hash) {\n if (!this.cacheData[category]) this.cacheData[category] = {};\n this.cacheData[category][key] = hash;\n fs.writeFileSync(this.cacheFile, JSON.stringify(this.cacheData));\n }\n\n invalidateCache(category, key) {\n if (!this.cacheData[category]) return;\n delete this.cacheData[category][key];\n fs.writeFileSync(this.cacheFile, JSON.stringify(this.cacheData));\n }\n\n emotesExist(category) {\n return fs.existsSync(path.resolve(this.emoteFolder, `${category}.json`));\n }\n\n getEmoteData(category) {\n const file = path.resolve(this.emoteFolder, `${category}.json`);\n if (!fs.existsSync(file)) return null;\n return _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].testJSON(fs.readFileSync(file).toString());\n }\n\n saveEmoteData(category, data) {\n fs.writeFileSync(path.resolve(this.emoteFolder, `${category}.json`), JSON.stringify(data));\n }\n\n getData(key) {\n return this.data[key] || \"\";\n }\n\n setData(key, value) {\n this.data[key] = value;\n fs.writeFileSync(path.resolve(this.dataFolder, `${key}.json`), JSON.stringify(value, null, 4));\n }\n\n loadCustomCSS() {\n return fs.readFileSync(this.customCSS).toString();\n }\n\n saveCustomCSS(css) {\n return fs.writeFileSync(this.customCSS, css);\n }\n\n getPluginData(pluginName, key) {\n if (this.pluginData[pluginName] !== undefined) return this.pluginData[pluginName][key] || undefined;\n if (!fs.existsSync(this.getPluginFile(pluginName))) return undefined;\n this.pluginData[pluginName] = JSON.parse(fs.readFileSync(this.getPluginFile(pluginName)));\n return this.pluginData[pluginName][key] || undefined;\n }\n\n setPluginData(pluginName, key, value) {\n if (value === undefined) return;\n if (this.pluginData[pluginName] === undefined) this.pluginData[pluginName] = {};\n this.pluginData[pluginName][key] = value;\n fs.writeFileSync(this.getPluginFile(pluginName), JSON.stringify(this.pluginData[pluginName], null, 4));\n }\n\n deletePluginData(pluginName, key) {\n if (this.pluginData[pluginName] === undefined) this.pluginData[pluginName] = {};\n delete this.pluginData[pluginName][key];\n fs.writeFileSync(this.getPluginFile(pluginName), JSON.stringify(this.pluginData[pluginName], null, 4));\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvZGF0YXN0b3JlLmpzPzEwNTIiXSwibmFtZXMiOlsiZnMiLCJyZXF1aXJlIiwicGF0aCIsInJlbGVhc2VDaGFubmVsIiwiRGlzY29yZE5hdGl2ZSIsImdsb2JhbHMiLCJEYXRhU3RvcmUiLCJjb25zdHJ1Y3RvciIsImRhdGEiLCJtaXNjIiwicGx1Z2luRGF0YSIsImNhY2hlRGF0YSIsImluaXRpYWxpemUiLCJleGlzdHNTeW5jIiwiYmFzZUZvbGRlciIsIm1rZGlyU3luYyIsImRhdGFGb2xkZXIiLCJsb2NhbGVGb2xkZXIiLCJlbW90ZUZvbGRlciIsImNhY2hlRmlsZSIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5IiwiY3VzdG9tQ1NTIiwiZGF0YUZpbGVzIiwicmVhZGRpclN5bmMiLCJmaWx0ZXIiLCJmIiwic3RhdFN5bmMiLCJyZXNvbHZlIiwiaXNEaXJlY3RvcnkiLCJlbmRzV2l0aCIsImZpbGUiLCJzcGxpdCIsIl9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fIiwiVXRpbGl0aWVzIiwidGVzdEpTT04iLCJyZWFkRmlsZVN5bmMiLCJ0b1N0cmluZyIsIl9jdXN0b21DU1MiLCJfYmFzZUZvbGRlciIsIkNvbmZpZyIsImRhdGFQYXRoIiwiX2RhdGFGb2xkZXIiLCJfbG9jYWxlRm9sZGVyIiwiX2Vtb3RlRm9sZGVyIiwiX2NhY2hlRmlsZSIsImdldFBsdWdpbkZpbGUiLCJwbHVnaW5OYW1lIiwiX2dldEZpbGUiLCJrZXkiLCJnZXRCRERhdGEiLCJzZXRCRERhdGEiLCJ2YWx1ZSIsImdldExvY2FsZSIsImxvY2FsZSIsInNhdmVMb2NhbGUiLCJzdHJpbmdzIiwiZ2V0Q2FjaGVIYXNoIiwiY2F0ZWdvcnkiLCJzZXRDYWNoZUhhc2giLCJoYXNoIiwiaW52YWxpZGF0ZUNhY2hlIiwiZW1vdGVzRXhpc3QiLCJnZXRFbW90ZURhdGEiLCJzYXZlRW1vdGVEYXRhIiwiZ2V0RGF0YSIsInNldERhdGEiLCJsb2FkQ3VzdG9tQ1NTIiwic2F2ZUN1c3RvbUNTUyIsImNzcyIsImdldFBsdWdpbkRhdGEiLCJ1bmRlZmluZWQiLCJwYXJzZSIsInNldFBsdWdpbkRhdGEiLCJkZWxldGVQbHVnaW5EYXRhIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBOztBQUNBLE1BQU1BLEVBQUUsR0FBR0MsbUJBQU8sQ0FBQyxjQUFELENBQWxCOztBQUNBLE1BQU1DLElBQUksR0FBR0QsbUJBQU8sQ0FBQyxrQkFBRCxDQUFwQjs7QUFDQSxNQUFNRSxjQUFjLEdBQUdDLGFBQWEsQ0FBQ0MsT0FBZCxDQUFzQkYsY0FBN0MsQyxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWUsbUVBQUksTUFBTUcsU0FBTixDQUFnQjtBQUMvQkMsYUFBVyxHQUFHO0FBQ1YsU0FBS0MsSUFBTCxHQUFZO0FBQUNDLFVBQUksRUFBRTtBQUFQLEtBQVo7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLEVBQWxCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixFQUFqQjtBQUNIOztBQUVEQyxZQUFVLEdBQUc7QUFDVCxRQUFJLENBQUNaLEVBQUUsQ0FBQ2EsVUFBSCxDQUFjLEtBQUtDLFVBQW5CLENBQUwsRUFBcUNkLEVBQUUsQ0FBQ2UsU0FBSCxDQUFhLEtBQUtELFVBQWxCO0FBQ3JDLFFBQUksQ0FBQ2QsRUFBRSxDQUFDYSxVQUFILENBQWMsS0FBS0csVUFBbkIsQ0FBTCxFQUFxQ2hCLEVBQUUsQ0FBQ2UsU0FBSCxDQUFhLEtBQUtDLFVBQWxCO0FBQ3JDLFFBQUksQ0FBQ2hCLEVBQUUsQ0FBQ2EsVUFBSCxDQUFjLEtBQUtJLFlBQW5CLENBQUwsRUFBdUNqQixFQUFFLENBQUNlLFNBQUgsQ0FBYSxLQUFLRSxZQUFsQjtBQUN2QyxRQUFJLENBQUNqQixFQUFFLENBQUNhLFVBQUgsQ0FBYyxLQUFLSyxXQUFuQixDQUFMLEVBQXNDbEIsRUFBRSxDQUFDZSxTQUFILENBQWEsS0FBS0csV0FBbEI7QUFDdEMsUUFBSSxDQUFD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QUFDL0MsU0FBS3RDLFVBQUwsQ0FBZ0JzQyxVQUFoQixFQUE0QkUsR0FBNUIsSUFBbUNHLEtBQW5DO0FBQ0FyRCxNQUFFLENBQUNvQixhQUFILENBQWlCLEtBQUsyQixhQUFMLENBQW1CQyxVQUFuQixDQUFqQixFQUFpRDNCLElBQUksQ0FBQ0MsU0FBTCxDQUFlLEtBQUtaLFVBQUwsQ0FBZ0JzQyxVQUFoQixDQUFmLEVBQTRDLElBQTVDLEVBQWtELENBQWxELENBQWpEO0FBQ0g7O0FBRUQyQixrQkFBZ0IsQ0FBQzNCLFVBQUQsRUFBYUUsR0FBYixFQUFrQjtBQUM5QixRQUFJLEtBQUt4QyxVQUFMLENBQWdCc0MsVUFBaEIsTUFBZ0N3QixTQUFwQyxFQUErQyxLQUFLOUQsVUFBTCxDQUFnQnNDLFVBQWhCLElBQThCLEVBQTlCO0FBQy9DLFdBQU8sS0FBS3RDLFVBQUwsQ0FBZ0JzQyxVQUFoQixFQUE0QkUsR0FBNUIsQ0FBUDtBQUNBbEQsTUFBRSxDQUFDb0IsYUFBSCxDQUFpQixLQUFLMkIsYUFBTCxDQUFtQkMsVUFBbkIsQ0FBakIsRUFBaUQzQixJQUFJLENBQUNDLFNBQUwsQ0FBZSxLQUFLWixVQUFMLENBQWdCc0MsVUFBaEIsQ0FBZixFQUE0QyxJQUE1QyxFQUFrRCxDQUFsRCxDQUFqRDtBQUNIOztBQXpIOEIsQ0FBcEIsRUFBZiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL2RhdGFzdG9yZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCByZWxlYXNlQ2hhbm5lbCA9IERpc2NvcmROYXRpdmUuZ2xvYmFscy5yZWxlYXNlQ2hhbm5lbDtcclxuXHJcbi8vIFNjaGVtYVxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAlYXBwZGF0YSVcXEJldHRlckRpc2NvcmRcclxuLy8gICAgIC0+IGRhdGFcclxuLy8gICAgICAgICAtPiBbcmVsZWFzZUNoYW5uZWxdXFwgKHN0YWJsZS9jYW5hcnkvcHRiKVxyXG4vLyAgICAgICAgICAgICAtPiBzZXR0aW5ncy5qc29uXHJcbi8vICAgICAgICAgICAgIC0+IHBsdWdpbnMuanNvblxyXG4vLyAgICAgICAgICAgICAtPiB0aGVtZXMuanNvblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERhdGFTdG9yZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSB7bWlzYzoge319O1xyXG4gICAgICAgIHRoaXMucGx1Z2luRGF0YSA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2FjaGVEYXRhID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5iYXNlRm9sZGVyKSkgZnMubWtkaXJTeW5jKHRoaXMuYmFzZUZvbGRlcik7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZGF0YUZvbGRlcikpIGZzLm1rZGlyU3luYyh0aGlzLmRhdGFGb2xkZXIpO1xyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLmxvY2FsZUZvbGRlcikpIGZzLm1rZGlyU3luYyh0aGlzLmxvY2FsZUZvbGRlcik7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZW1vdGVGb2xkZXIpKSBmcy5ta2RpclN5bmModGhpcy5lbW90ZUZvbGRlcik7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuY2FjaGVGaWxlKSkgZnMud3JpdGVGaWxlU3luYyh0aGlzLmNhY2hlRmlsZSwgSlNPTi5zdHJpbmdpZnkoe30pKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5jdXN0b21DU1MpKSBmcy53cml0ZUZpbGVTeW5jKHRoaXMuY3VzdG9tQ1NTLCBcIlwiKTtcclxuICAgICAgICBjb25zdCBkYXRhRmlsZXMgPSBmcy5yZWFkZGlyU3luYyh0aGlzLmRhdGFGb2xkZXIpLmZpbHRlcihmID0+ICFmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5kYXRhRm9sZGVyLCBmKSkuaXNEaXJlY3RvcnkoKSAmJiBmLmVuZHNXaXRoKFwiLmpzb25cIikpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBkYXRhRmlsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhW2ZpbGUuc3BsaXQoXCIuXCIpWzBdXSA9IF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHBhdGgucmVzb2x2ZSh0aGlzLmRhdGFGb2xkZXIsIGZpbGUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWNoZURhdGEgPSBVdGlsaXRpZXMudGVzdEpTT04oZnMucmVhZEZpbGVTeW5jKHRoaXMuY2FjaGVGaWxlKS50b1N0cmluZygpKSB8fCB7fTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY3VzdG9tQ1NTKCkge3JldHVybiB0aGlzLl9jdXN0b21DU1MgfHwgKHRoaXMuX2N1c3RvbUNTUyA9IHBhdGgucmVzb2x2ZSh0aGlzLmRhdGFGb2xkZXIsIFwiY3VzdG9tLmNzc1wiKSk7fVxyXG4gICAgZ2V0IGJhc2VGb2xkZXIoKSB7cmV0dXJuIHRoaXMuX2Jhc2VGb2xkZXIgfHwgKHRoaXMuX2Jhc2VGb2xkZXIgPSBwYXRoLnJlc29sdmUoQ29uZmlnLmRhdGFQYXRoLCBcImRhdGFcIikpO31cclxuICAgIGdldCBkYXRhRm9sZGVyKCkge3JldHVybiB0aGlzLl9kYXRhRm9sZGVyIHx8ICh0aGlzLl9kYXRhRm9sZGVyID0gcGF0aC5yZXNvbHZlKHRoaXMuYmFzZUZvbGRlciwgYCR7cmVsZWFzZUNoYW5uZWx9YCkpO31cclxuICAgIGdldCBsb2NhbGVGb2xkZXIoKSB7cmV0dXJuIHRoaXMuX2xvY2FsZUZvbGRlciB8fCAodGhpcy5fbG9jYWxlRm9sZGVyID0gcGF0aC5yZXNvbHZlKHRoaXMuYmFzZUZvbGRlciwgYGxvY2FsZXNgKSk7fVxyXG4gICAgZ2V0IGVtb3RlRm9sZGVyKCkge3JldHVybiB0aGlzLl9lbW90ZUZvbGRlciB8fCAodGhpcy5fZW1vdGVGb2xkZXIgPSBwYXRoLnJlc29sdmUodGhpcy5iYXNlRm9sZGVyLCBgZW1vdGVzYCkpO31cclxuICAgIGdldCBjYWNoZUZpbGUoKSB7cmV0dXJuIHRoaXMuX2NhY2hlRmlsZSB8fCAodGhpcy5fY2FjaGVGaWxlID0gcGF0aC5yZXNvbHZlKHRoaXMuYmFzZUZvbGRlciwgYC5jYWNoZWApKTt9XHJcbiAgICBnZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpIHtyZXR1cm4gcGF0aC5yZXNvbHZlKENvbmZpZy5kYXRhUGF0aCwgXCJwbHVnaW5zXCIsIHBsdWdpbk5hbWUgKyBcIi5jb25maWcuanNvblwiKTt9XHJcblxyXG5cclxuICAgIF9nZXRGaWxlKGtleSkge1xyXG4gICAgICAgIGlmIChrZXkgPT0gXCJzZXR0aW5nc1wiIHx8IGtleSA9PSBcInBsdWdpbnNcIiB8fCBrZXkgPT0gXCJ0aGVtZXNcIikgcmV0dXJuIHBhdGgucmVzb2x2ZSh0aGlzLmRhdGFGb2xkZXIsIGAke2tleX0uanNvbmApO1xyXG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUodGhpcy5kYXRhRm9sZGVyLCBgbWlzYy5qc29uYCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QkREYXRhKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubWlzY1trZXldIHx8IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QkREYXRhKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRhdGEubWlzY1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLnJlc29sdmUodGhpcy5kYXRhRm9sZGVyLCBgbWlzYy5qc29uYCksIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YS5taXNjLCBudWxsLCA0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TG9jYWxlKGxvY2FsZSkge1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5sb2NhbGVGb2xkZXIsIGAke2xvY2FsZX0uanNvbmApO1xyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxpdGllcy50ZXN0SlNPTihmcy5yZWFkRmlsZVN5bmMoZmlsZSkudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUxvY2FsZShsb2NhbGUsIHN0cmluZ3MpIHtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmxvY2FsZUZvbGRlciwgYCR7bG9jYWxlfS5qc29uYCksIEpTT04uc3RyaW5naWZ5KHN0cmluZ3MsIG51bGwsIDQpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDYWNoZUhhc2goY2F0ZWdvcnksIGtleSkge1xyXG4gICAgICAgIGlmICghdGhpcy5jYWNoZURhdGFbY2F0ZWdvcnldKSByZXR1cm4gXCJcIjtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aC5yZXNvbHZlKHRoaXMuYmFzZUZvbGRlciwgY2F0ZWdvcnksIGAke2tleX0uanNvbmApKSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVEYXRhW2NhdGVnb3J5XVtrZXldIHx8IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q2FjaGVIYXNoKGNhdGVnb3J5LCBrZXksIGhhc2gpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVEYXRhW2NhdGVnb3J5XSkgdGhpcy5jYWNoZURhdGFbY2F0ZWdvcnldID0ge307XHJcbiAgICAgICAgdGhpcy5jYWNoZURhdGFbY2F0ZWdvcnldW2tleV0gPSBoYXNoO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5jYWNoZUZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuY2FjaGVEYXRhKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW52YWxpZGF0ZUNhY2hlKGNhdGVnb3J5LCBrZXkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVEYXRhW2NhdGVnb3J5XSkgcmV0dXJuO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlRGF0YVtjYXRlZ29yeV1ba2V5XTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuY2FjaGVGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmNhY2hlRGF0YSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGVtb3Rlc0V4aXN0KGNhdGVnb3J5KSB7XHJcbiAgICAgICAgcmV0dXJuIGZzLmV4aXN0c1N5bmMocGF0aC5yZXNvbHZlKHRoaXMuZW1vdGVGb2xkZXIsIGAke2NhdGVnb3J5fS5qc29uYCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVtb3RlRGF0YShjYXRlZ29yeSkge1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5lbW90ZUZvbGRlciwgYCR7Y2F0ZWdvcnl9Lmpzb25gKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZSkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBVdGlsaXRpZXMudGVzdEpTT04oZnMucmVhZEZpbGVTeW5jKGZpbGUpLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVFbW90ZURhdGEoY2F0ZWdvcnksIGRhdGEpIHtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmVtb3RlRm9sZGVyLCBgJHtjYXRlZ29yeX0uanNvbmApLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGF0YShrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhW2tleV0gfHwgXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBzZXREYXRhKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5yZXNvbHZlKHRoaXMuZGF0YUZvbGRlciwgYCR7a2V5fS5qc29uYCksIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCA0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZEN1c3RvbUNTUygpIHtcclxuICAgICAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKHRoaXMuY3VzdG9tQ1NTKS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVDdXN0b21DU1MoY3NzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmModGhpcy5jdXN0b21DU1MsIGNzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldIHx8IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdLCBudWxsLCA0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlUGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID09PSB1bmRlZmluZWQpIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9IHt9O1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdLCBudWxsLCA0KSk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/datastore.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n\n\n\nconst fs = __webpack_require__(/*! fs */ \"fs\");\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\nconst releaseChannel = DiscordNative.globals ? DiscordNative.globals.releaseChannel : DiscordNative.app ? DiscordNative.app.getReleaseChannel() : \"stable\"; // Schema\n// =======================\n// %appdata%\\BetterDiscord\n// -> data\n// -> [releaseChannel]\\ (stable/canary/ptb)\n// -> settings.json\n// -> plugins.json\n// -> themes.json\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class DataStore {\n constructor() {\n this.data = {\n misc: {}\n };\n this.pluginData = {};\n this.cacheData = {};\n }\n\n initialize() {\n if (!fs.existsSync(this.baseFolder)) fs.mkdirSync(this.baseFolder);\n if (!fs.existsSync(this.dataFolder)) fs.mkdirSync(this.dataFolder);\n if (!fs.existsSync(this.localeFolder)) fs.mkdirSync(this.localeFolder);\n if (!fs.existsSync(this.emoteFolder)) fs.mkdirSync(this.emoteFolder);\n if (!fs.existsSync(this.cacheFile)) fs.writeFileSync(this.cacheFile, JSON.stringify({}));\n if (!fs.existsSync(this.customCSS)) fs.writeFileSync(this.customCSS, \"\");\n const dataFiles = fs.readdirSync(this.dataFolder).filter(f => !fs.statSync(path.resolve(this.dataFolder, f)).isDirectory() && f.endsWith(\".json\"));\n\n for (const file of dataFiles) {\n this.data[file.split(\".\")[0]] = require(path.resolve(this.dataFolder, file));\n }\n\n this.cacheData = _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].testJSON(fs.readFileSync(this.cacheFile).toString()) || {};\n }\n\n get injectionPath() {\n if (this._injectionPath) return this._injectionPath;\n\n const electron = __webpack_require__(/*! electron */ \"electron\").remote.app;\n\n const base = electron.getAppPath();\n const roamingBase = electron.getPath(\"userData\");\n const roamingLocation = path.resolve(roamingBase, electron.getVersion(), \"modules\", \"discord_desktop_core\", \"injector\");\n const location = path.resolve(base, \"..\", \"app\");\n const realLocation = fs.existsSync(location) ? location : fs.existsSync(roamingLocation) ? roamingLocation : null;\n if (!realLocation) return this._injectionPath = null;\n return this._injectionPath = realLocation;\n }\n\n get customCSS() {\n return this._customCSS || (this._customCSS = path.resolve(this.dataFolder, \"custom.css\"));\n }\n\n get baseFolder() {\n return this._baseFolder || (this._baseFolder = path.resolve(data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].dataPath, \"data\"));\n }\n\n get dataFolder() {\n return this._dataFolder || (this._dataFolder = path.resolve(this.baseFolder, `${releaseChannel}`));\n }\n\n get localeFolder() {\n return this._localeFolder || (this._localeFolder = path.resolve(this.baseFolder, `locales`));\n }\n\n get emoteFolder() {\n return this._emoteFolder || (this._emoteFolder = path.resolve(this.baseFolder, `emotes`));\n }\n\n get cacheFile() {\n return this._cacheFile || (this._cacheFile = path.resolve(this.baseFolder, `.cache`));\n }\n\n getPluginFile(pluginName) {\n return path.resolve(data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].dataPath, \"plugins\", pluginName + \".config.json\");\n }\n\n _getFile(key) {\n if (key == \"settings\" || key == \"plugins\" || key == \"themes\" || key == \"window\") return path.resolve(this.dataFolder, `${key}.json`);\n return path.resolve(this.dataFolder, `misc.json`);\n }\n\n getBDData(key) {\n return this.data.misc[key] || \"\";\n }\n\n setBDData(key, value) {\n this.data.misc[key] = value;\n fs.writeFileSync(path.resolve(this.dataFolder, `misc.json`), JSON.stringify(this.data.misc, null, 4));\n }\n\n getLocale(locale) {\n const file = path.resolve(this.localeFolder, `${locale}.json`);\n if (!fs.existsSync(file)) return null;\n return _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].testJSON(fs.readFileSync(file).toString());\n }\n\n saveLocale(locale, strings) {\n fs.writeFileSync(path.resolve(this.localeFolder, `${locale}.json`), JSON.stringify(strings, null, 4));\n }\n\n getCacheHash(category, key) {\n if (!this.cacheData[category]) return \"\";\n if (!fs.existsSync(path.resolve(this.baseFolder, category, `${key}.json`))) return \"\";\n return this.cacheData[category][key] || \"\";\n }\n\n setCacheHash(category, key, hash) {\n if (!this.cacheData[category]) this.cacheData[category] = {};\n this.cacheData[category][key] = hash;\n fs.writeFileSync(this.cacheFile, JSON.stringify(this.cacheData));\n }\n\n invalidateCache(category, key) {\n if (!this.cacheData[category]) return;\n delete this.cacheData[category][key];\n fs.writeFileSync(this.cacheFile, JSON.stringify(this.cacheData));\n }\n\n emotesExist(category) {\n return fs.existsSync(path.resolve(this.emoteFolder, `${category}.json`));\n }\n\n getEmoteData(category) {\n const file = path.resolve(this.emoteFolder, `${category}.json`);\n if (!fs.existsSync(file)) return null;\n return _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].testJSON(fs.readFileSync(file).toString());\n }\n\n saveEmoteData(category, data) {\n fs.writeFileSync(path.resolve(this.emoteFolder, `${category}.json`), JSON.stringify(data));\n }\n\n getData(key) {\n return this.data[key] || \"\";\n }\n\n setData(key, value) {\n this.data[key] = value;\n fs.writeFileSync(path.resolve(this.dataFolder, `${key}.json`), JSON.stringify(value, null, 4));\n }\n\n loadCustomCSS() {\n return fs.readFileSync(this.customCSS).toString();\n }\n\n saveCustomCSS(css) {\n return fs.writeFileSync(this.customCSS, css);\n }\n\n getPluginData(pluginName, key) {\n if (this.pluginData[pluginName] !== undefined) return this.pluginData[pluginName][key] || undefined;\n if (!fs.existsSync(this.getPluginFile(pluginName))) return undefined;\n this.pluginData[pluginName] = JSON.parse(fs.readFileSync(this.getPluginFile(pluginName)));\n return this.pluginData[pluginName][key] || undefined;\n }\n\n setPluginData(pluginName, key, value) {\n if (value === undefined) return;\n if (this.pluginData[pluginName] === undefined) this.pluginData[pluginName] = {};\n this.pluginData[pluginName][key] = value;\n fs.writeFileSync(this.getPluginFile(pluginName), JSON.stringify(this.pluginData[pluginName], null, 4));\n }\n\n deletePluginData(pluginName, key) {\n if (this.pluginData[pluginName] === undefined) this.pluginData[pluginName] = {};\n delete this.pluginData[pluginName][key];\n fs.writeFileSync(this.getPluginFile(pluginName), JSON.stringify(this.pluginData[pluginName], null, 4));\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvZGF0YXN0b3JlLmpzPzEwNTIiXSwibmFtZXMiOlsiZnMiLCJyZXF1aXJlIiwicGF0aCIsInJlbGVhc2VDaGFubmVsIiwiRGlzY29yZE5hdGl2ZSIsImdsb2JhbHMiLCJhcHAiLCJnZXRSZWxlYXNlQ2hhbm5lbCIsIkRhdGFTdG9yZSIsImNvbnN0cnVjdG9yIiwiZGF0YSIsIm1pc2MiLCJwbHVnaW5EYXRhIiwiY2FjaGVEYXRhIiwiaW5pdGlhbGl6ZSIsImV4aXN0c1N5bmMiLCJiYXNlRm9sZGVyIiwibWtkaXJTeW5jIiwiZGF0YUZvbGRlciIsImxvY2FsZUZvbGRlciIsImVtb3RlRm9sZGVyIiwiY2FjaGVGaWxlIiwid3JpdGVGaWxlU3luYyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjdXN0b21DU1MiLCJkYXRhRmlsZXMiLCJyZWFkZGlyU3luYyIsImZpbHRlciIsImYiLCJzdGF0U3luYyIsInJlc29sdmUiLCJpc0RpcmVjdG9yeSIsImVuZHNXaXRoIiwiZmlsZSIsInNwbGl0IiwiX19ub25fd2VicGFja19yZXF1aXJlX18iLCJVdGlsaXRpZXMiLCJ0ZXN0SlNPTiIsInJlYWRGaWxlU3luYyIsInRvU3RyaW5nIiwiaW5qZWN0aW9uUGF0aCIsIl9pbmplY3Rpb25QYXRoIiwiZWxlY3Ryb24iLCJyZW1vdGUiLCJiYXNlIiwiZ2V0QXBwUGF0aCIsInJvYW1pbmdCYXNlIiwiZ2V0UGF0aCIsInJvYW1pbmdMb2NhdGlvbiIsImdldFZlcnNpb24iLCJsb2NhdGlvbiIsInJlYWxMb2NhdGlvbiIsIl9jdXN0b21DU1MiLCJfYmFzZUZvbGRlciIsIkNvbmZpZyIsImRhdGFQYXRoIiwiX2RhdGFGb2xkZXIiLCJfbG9jYWxlRm9sZGVyIiwiX2Vtb3RlRm9sZGVyIiwiX2NhY2hlRmlsZSIsImdldFBsdWdpbkZpbGUiLCJwbHVnaW5OYW1lIiwiX2dldEZpbGUiLCJrZXkiLCJnZXRCRERhdGEiLCJzZXRCRERhdGEiLCJ2YWx1ZSIsImdldExvY2FsZSIsImxvY2FsZSIsInNhdmVMb2NhbGUiLCJzdHJpbmdzIiwiZ2V0Q2FjaGVIYXNoIiwiY2F0ZWdvcnkiLCJzZXRDYWNoZUhhc2giLCJoYXNoIiwiaW52YWxpZGF0ZUNhY2hlIiwiZW1vdGVzRXhpc3QiLCJnZXRFbW90ZURhdGEiLCJzYXZlRW1vdGVEYXRhIiwiZ2V0RGF0YSIsInNldERhdGEiLCJsb2FkQ3VzdG9tQ1NTIiwic2F2ZUN1c3RvbUNTUyIsImNzcyIsImdldFBsdWdpbkRhdGEiLCJ1bmRlZmluZWQiLCJwYXJzZSIsInNldFBsdWdpbkRhdGEiLCJkZWxldGVQbHVnaW5EYXRhIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBOztBQUNBLE1BQU1BLEVBQUUsR0FBR0MsbUJBQU8sQ0FBQyxjQUFELENBQWxCOztBQUNBLE1BQU1DLElBQUksR0FBR0QsbUJBQU8sQ0FBQyxrQkFBRCxDQUFwQjs7QUFDQSxNQUFNRSxjQUFjLEdBQUdDLGFBQWEsQ0FBQ0MsT0FBZCxHQUF3QkQsYUFBYSxDQUFDQyxPQUFkLENBQXNCRixjQUE5QyxHQUErREMsYUFBYSxDQUFDRSxHQUFkLEdBQW9CRixhQUFhLENBQUNFLEdBQWQsQ0FBa0JDLGlCQUFsQixFQUFwQixHQUE0RCxRQUFsSixDLENBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZSxtRUFBSSxNQUFNQyxTQUFOLENBQWdCO0FBQy9CQyxhQUFXLEdBQUc7QUFDVixTQUFLQyxJQUFMLEdBQVk7QUFBQ0MsVUFBSSxFQUFFO0FBQVAsS0FBWjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsRUFBbEI7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLEVBQWpCO0FBQ0g7O0FBRURDLFlBQVUsR0FBRztBQUNULFFBQUksQ0FBQ2QsRUFBRSxDQUFDZSxVQUFILENBQWMsS0FBS0MsVUFBbkIsQ0FBTCxFQUFxQ2hCLEVBQUUsQ0FBQ2lCLFNBQUgsQ0FBYSxLQUFLRCxVQUFsQjtBQUNyQyxRQUFJLENBQUNoQixFQUFF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QUFLMUUsVUFBTCxDQUFnQmtELFVBQWhCLE1BQWdDd0IsU0FBcEMsRUFBK0MsS0FBSzFFLFVBQUwsQ0FBZ0JrRCxVQUFoQixJQUE4QixFQUE5QjtBQUMvQyxTQUFLbEQsVUFBTCxDQUFnQmtELFVBQWhCLEVBQTRCRSxHQUE1QixJQUFtQ0csS0FBbkM7QUFDQW5FLE1BQUUsQ0FBQ3NCLGFBQUgsQ0FBaUIsS0FBS3VDLGFBQUwsQ0FBbUJDLFVBQW5CLENBQWpCLEVBQWlEdkMsSUFBSSxDQUFDQyxTQUFMLENBQWUsS0FBS1osVUFBTCxDQUFnQmtELFVBQWhCLENBQWYsRUFBNEMsSUFBNUMsRUFBa0QsQ0FBbEQsQ0FBakQ7QUFDSDs7QUFFRDJCLGtCQUFnQixDQUFDM0IsVUFBRCxFQUFhRSxHQUFiLEVBQWtCO0FBQzlCLFFBQUksS0FBS3BELFVBQUwsQ0FBZ0JrRCxVQUFoQixNQUFnQ3dCLFNBQXBDLEVBQStDLEtBQUsxRSxVQUFMLENBQWdCa0QsVUFBaEIsSUFBOEIsRUFBOUI7QUFDL0MsV0FBTyxLQUFLbEQsVUFBTCxDQUFnQmtELFVBQWhCLEVBQTRCRSxHQUE1QixDQUFQO0FBQ0FoRSxNQUFFLENBQUNzQixhQUFILENBQWlCLEtBQUt1QyxhQUFMLENBQW1CQyxVQUFuQixDQUFqQixFQUFpRHZDLElBQUksQ0FBQ0MsU0FBTCxDQUFlLEtBQUtaLFVBQUwsQ0FBZ0JrRCxVQUFoQixDQUFmLEVBQTRDLElBQTVDLEVBQWtELENBQWxELENBQWpEO0FBQ0g7O0FBckk4QixDQUFwQixFQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvZGF0YXN0b3JlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmNvbnN0IHJlbGVhc2VDaGFubmVsID0gRGlzY29yZE5hdGl2ZS5nbG9iYWxzID8gRGlzY29yZE5hdGl2ZS5nbG9iYWxzLnJlbGVhc2VDaGFubmVsIDogRGlzY29yZE5hdGl2ZS5hcHAgPyBEaXNjb3JkTmF0aXZlLmFwcC5nZXRSZWxlYXNlQ2hhbm5lbCgpIDogXCJzdGFibGVcIjtcclxuXHJcbi8vIFNjaGVtYVxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyAlYXBwZGF0YSVcXEJldHRlckRpc2NvcmRcclxuLy8gICAgIC0+IGRhdGFcclxuLy8gICAgICAgICAtPiBbcmVsZWFzZUNoYW5uZWxdXFwgKHN0YWJsZS9jYW5hcnkvcHRiKVxyXG4vLyAgICAgICAgICAgICAtPiBzZXR0aW5ncy5qc29uXHJcbi8vICAgICAgICAgICAgIC0+IHBsdWdpbnMuanNvblxyXG4vLyAgICAgICAgICAgICAtPiB0aGVtZXMuanNvblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERhdGFTdG9yZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSB7bWlzYzoge319O1xyXG4gICAgICAgIHRoaXMucGx1Z2luRGF0YSA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2FjaGVEYXRhID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5iYXNlRm9sZGVyKSkgZnMubWtkaXJTeW5jKHRoaXMuYmFzZUZvbGRlcik7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZGF0YUZvbGRlcikpIGZzLm1rZGlyU3luYyh0aGlzLmRhdGFGb2xkZXIpO1xyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLmxvY2FsZUZvbGRlcikpIGZzLm1rZGlyU3luYyh0aGlzLmxvY2FsZUZvbGRlcik7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZW1vdGVGb2xkZXIpKSBmcy5ta2RpclN5bmModGhpcy5lbW90ZUZvbGRlcik7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuY2FjaGVGaWxlKSkgZnMud3JpdGVGaWxlU3luYyh0aGlzLmNhY2hlRmlsZSwgSlNPTi5zdHJpbmdpZnkoe30pKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5jdXN0b21DU1MpKSBmcy53cml0ZUZpbGVTeW5jKHRoaXMuY3VzdG9tQ1NTLCBcIlwiKTtcclxuICAgICAgICBjb25zdCBkYXRhRmlsZXMgPSBmcy5yZWFkZGlyU3luYyh0aGlzLmRhdGFGb2xkZXIpLmZpbHRlcihmID0+ICFmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5kYXRhRm9sZGVyLCBmKSkuaXNEaXJlY3RvcnkoKSAmJiBmLmVuZHNXaXRoKFwiLmpzb25cIikpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBkYXRhRmlsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhW2ZpbGUuc3BsaXQoXCIuXCIpWzBdXSA9IF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHBhdGgucmVzb2x2ZSh0aGlzLmRhdGFGb2xkZXIsIGZpbGUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWNoZURhdGEgPSBVdGlsaXRpZXMudGVzdEpTT04oZnMucmVhZEZpbGVTeW5jKHRoaXMuY2FjaGVGaWxlKS50b1N0cmluZygpKSB8fCB7fTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaW5qZWN0aW9uUGF0aCgpIHtcclxuICAgICAgICBpZiAodGhpcy5faW5qZWN0aW9uUGF0aCkgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGg7XHJcbiAgICAgICAgY29uc3QgZWxlY3Ryb24gPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcDtcclxuICAgICAgICBjb25zdCBiYXNlID0gZWxlY3Ryb24uZ2V0QXBwUGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdCYXNlID0gZWxlY3Ryb24uZ2V0UGF0aChcInVzZXJEYXRhXCIpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdMb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShyb2FtaW5nQmFzZSwgZWxlY3Ryb24uZ2V0VmVyc2lvbigpLCBcIm1vZHVsZXNcIiwgXCJkaXNjb3JkX2Rlc2t0b3BfY29yZVwiLCBcImluamVjdG9yXCIpO1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGJhc2UsIFwiLi5cIiwgXCJhcHBcIik7XHJcbiAgICAgICAgY29uc3QgcmVhbExvY2F0aW9uID0gZnMuZXhpc3RzU3luYyhsb2NhdGlvbikgPyBsb2NhdGlvbiA6IGZzLmV4aXN0c1N5bmMocm9hbWluZ0xvY2F0aW9uKSA/IHJvYW1pbmdMb2NhdGlvbiA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFyZWFsTG9jYXRpb24pIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IHJlYWxMb2NhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY3VzdG9tQ1NTKCkge3JldHVybiB0aGlzLl9jdXN0b21DU1MgfHwgKHRoaXMuX2N1c3RvbUNTUyA9IHBhdGgucmVzb2x2ZSh0aGlzLmRhdGFGb2xkZXIsIFwiY3VzdG9tLmNzc1wiKSk7fVxyXG4gICAgZ2V0IGJhc2VGb2xkZXIoKSB7cmV0dXJuIHRoaXMuX2Jhc2VGb2xkZXIgfHwgKHRoaXMuX2Jhc2VGb2xkZXIgPSBwYXRoLnJlc29sdmUoQ29uZmlnLmRhdGFQYXRoLCBcImRhdGFcIikpO31cclxuICAgIGdldCBkYXRhRm9sZGVyKCkge3JldHVybiB0aGlzLl9kYXRhRm9sZGVyIHx8ICh0aGlzLl9kYXRhRm9sZGVyID0gcGF0aC5yZXNvbHZlKHRoaXMuYmFzZUZvbGRlciwgYCR7cmVsZWFzZUNoYW5uZWx9YCkpO31cclxuICAgIGdldCBsb2NhbGVGb2xkZXIoKSB7cmV0dXJuIHRoaXMuX2xvY2FsZUZvbGRlciB8fCAodGhpcy5fbG9jYWxlRm9sZGVyID0gcGF0aC5yZXNvbHZlKHRoaXMuYmFzZUZvbGRlciwgYGxvY2FsZXNgKSk7fVxyXG4gICAgZ2V0IGVtb3RlRm9sZGVyKCkge3JldHVybiB0aGlzLl9lbW90ZUZvbGRlciB8fCAodGhpcy5fZW1vdGVGb2xkZXIgPSBwYXRoLnJlc29sdmUodGhpcy5iYXNlRm9sZGVyLCBgZW1vdGVzYCkpO31cclxuICAgIGdldCBjYWNoZUZpbGUoKSB7cmV0dXJuIHRoaXMuX2NhY2hlRmlsZSB8fCAodGhpcy5fY2FjaGVGaWxlID0gcGF0aC5yZXNvbHZlKHRoaXMuYmFzZUZvbGRlciwgYC5jYWNoZWApKTt9XHJcbiAgICBnZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpIHtyZXR1cm4gcGF0aC5yZXNvbHZlKENvbmZpZy5kYXRhUGF0aCwgXCJwbHVnaW5zXCIsIHBsdWdpbk5hbWUgKyBcIi5jb25maWcuanNvblwiKTt9XHJcblxyXG5cclxuICAgIF9nZXRGaWxlKGtleSkge1xyXG4gICAgICAgIGlmIChrZXkgPT0gXCJzZXR0aW5nc1wiIHx8IGtleSA9PSBcInBsdWdpbnNcIiB8fCBrZXkgPT0gXCJ0aGVtZXNcIiB8fCBrZXkgPT0gXCJ3aW5kb3dcIikgcmV0dXJuIHBhdGgucmVzb2x2ZSh0aGlzLmRhdGFGb2xkZXIsIGAke2tleX0uanNvbmApO1xyXG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUodGhpcy5kYXRhRm9sZGVyLCBgbWlzYy5qc29uYCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QkREYXRhKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubWlzY1trZXldIHx8IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QkREYXRhKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRhdGEubWlzY1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLnJlc29sdmUodGhpcy5kYXRhRm9sZGVyLCBgbWlzYy5qc29uYCksIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YS5taXNjLCBudWxsLCA0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TG9jYWxlKGxvY2FsZSkge1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5sb2NhbGVGb2xkZXIsIGAke2xvY2FsZX0uanNvbmApO1xyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxpdGllcy50ZXN0SlNPTihmcy5yZWFkRmlsZVN5bmMoZmlsZSkudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUxvY2FsZShsb2NhbGUsIHN0cmluZ3MpIHtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmxvY2FsZUZvbGRlciwgYCR7bG9jYWxlfS5qc29uYCksIEpTT04uc3RyaW5naWZ5KHN0cmluZ3MsIG51bGwsIDQpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDYWNoZUhhc2goY2F0ZWdvcnksIGtleSkge1xyXG4gICAgICAgIGlmICghdGhpcy5jYWNoZURhdGFbY2F0ZWdvcnldKSByZXR1cm4gXCJcIjtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aC5yZXNvbHZlKHRoaXMuYmFzZUZvbGRlciwgY2F0ZWdvcnksIGAke2tleX0uanNvbmApKSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVEYXRhW2NhdGVnb3J5XVtrZXldIHx8IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q2FjaGVIYXNoKGNhdGVnb3J5LCBrZXksIGhhc2gpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVEYXRhW2NhdGVnb3J5XSkgdGhpcy5jYWNoZURhdGFbY2F0ZWdvcnldID0ge307XHJcbiAgICAgICAgdGhpcy5jYWNoZURhdGFbY2F0ZWdvcnldW2tleV0gPSBoYXNoO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5jYWNoZUZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuY2FjaGVEYXRhKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW52YWxpZGF0ZUNhY2hlKGNhdGVnb3J5LCBrZXkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVEYXRhW2NhdGVnb3J5XSkgcmV0dXJuO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlRGF0YVtjYXRlZ29yeV1ba2V5XTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuY2FjaGVGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmNhY2hlRGF0YSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGVtb3Rlc0V4aXN0KGNhdGVnb3J5KSB7XHJcbiAgICAgICAgcmV0dXJuIGZzLmV4aXN0c1N5bmMocGF0aC5yZXNvbHZlKHRoaXMuZW1vdGVGb2xkZXIsIGAke2NhdGVnb3J5fS5qc29uYCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVtb3RlRGF0YShjYXRlZ29yeSkge1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5lbW90ZUZvbGRlciwgYCR7Y2F0ZWdvcnl9Lmpzb25gKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZSkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBVdGlsaXRpZXMudGVzdEpTT04oZnMucmVhZEZpbGVTeW5jKGZpbGUpLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVFbW90ZURhdGEoY2F0ZWdvcnksIGRhdGEpIHtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmVtb3RlRm9sZGVyLCBgJHtjYXRlZ29yeX0uanNvbmApLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGF0YShrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhW2tleV0gfHwgXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBzZXREYXRhKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5yZXNvbHZlKHRoaXMuZGF0YUZvbGRlciwgYCR7a2V5fS5qc29uYCksIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCA0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZEN1c3RvbUNTUygpIHtcclxuICAgICAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKHRoaXMuY3VzdG9tQ1NTKS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVDdXN0b21DU1MoY3NzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmModGhpcy5jdXN0b21DU1MsIGNzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldIHx8IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdLCBudWxsLCA0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlUGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID09PSB1bmRlZmluZWQpIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9IHt9O1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdLCBudWxsLCA0KSk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/datastore.js\n"); /***/ }), @@ -407,7 +431,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/**\r\n * A large list of known and useful webpack modules internal to Discord.\r\n *\r\n * @module DiscordModules\r\n * @version 0.0.3\r\n */\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].memoizeObject({\n get React() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"createElement\", \"cloneElement\");\n },\n\n get ReactDOM() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"render\", \"findDOMNode\");\n },\n\n get Flux() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"connectStores\");\n },\n\n get Events() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByPrototypes(\"setMaxListeners\", \"emit\");\n },\n\n /* Guild Info, Stores, and Utilities */\n get GuildStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getGuild\");\n },\n\n get SortedGuildStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getSortedGuilds\");\n },\n\n get SelectedGuildStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getLastSelectedGuildId\");\n },\n\n get GuildSync() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getSyncedGuilds\");\n },\n\n get GuildInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getAcronym\");\n },\n\n get GuildChannelsStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getChannels\", \"getDefaultChannel\");\n },\n\n get GuildMemberStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMember\");\n },\n\n get MemberCountStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMemberCounts\");\n },\n\n get GuildEmojiStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getEmojis\");\n },\n\n get GuildActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"markGuildAsRead\");\n },\n\n get GuildPermissions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getGuildPermissions\");\n },\n\n /* Channel Store & Actions */\n get ChannelStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getChannels\", \"getDMFromUserId\");\n },\n\n get SelectedChannelStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getLastSelectedChannelId\");\n },\n\n get ChannelActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"selectChannel\");\n },\n\n get PrivateChannelActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"openPrivateChannel\");\n },\n\n get ChannelSelector() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"selectGuild\", \"selectChannel\");\n },\n\n /* Current User Info, State and Settings */\n get UserInfoStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getToken\");\n },\n\n get UserSettingsStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"guildPositions\");\n },\n\n get AccountManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"register\", \"login\");\n },\n\n get UserSettingsUpdater() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"updateRemoteSettings\");\n },\n\n get OnlineWatcher() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isOnline\");\n },\n\n get CurrentUserIdle() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getIdleTime\");\n },\n\n get RelationshipStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isBlocked\", \"getFriendIDs\");\n },\n\n get RelationshipManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"addRelationship\");\n },\n\n get MentionStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMentions\");\n },\n\n /* User Stores and Utils */\n get UserStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getCurrentUser\");\n },\n\n get UserStatusStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getStatus\", \"getState\");\n },\n\n get UserTypingStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isTyping\");\n },\n\n get UserActivityStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getActivity\");\n },\n\n get UserNameResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getName\");\n },\n\n get UserNoteStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getNote\");\n },\n\n get UserNoteActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"updateNote\");\n },\n\n /* Emoji Store and Utils */\n get EmojiInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isEmojiDisabled\");\n },\n\n get EmojiUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getGuildEmoji\");\n },\n\n get EmojiStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getByCategory\", \"EMOJI_NAME_RE\");\n },\n\n /* Invite Store and Utils */\n get InviteStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getInvites\");\n },\n\n get InviteResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"findInvite\");\n },\n\n get InviteActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"acceptInvite\");\n },\n\n /* Discord Objects & Utils */\n get DiscordConstants() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Permissions\", \"ActivityTypes\", \"StatusTypes\");\n },\n\n get DiscordPermissions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Permissions\", \"ActivityTypes\", \"StatusTypes\").Permissions;\n },\n\n get PermissionUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getHighestRole\");\n },\n\n get ColorConverter() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"hex2int\");\n },\n\n get ColorShader() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"darken\");\n },\n\n get TinyColor() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByPrototypes(\"toRgb\");\n },\n\n get ClassResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getClass\");\n },\n\n get ButtonData() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"ButtonSizes\");\n },\n\n get IconNames() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"IconNames\");\n },\n\n get NavigationUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"transitionTo\", \"replaceWith\", \"getHistory\");\n },\n\n /* Discord Messages */\n get MessageStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMessages\");\n },\n\n get MessageActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"jumpToMessage\", \"_sendMessage\");\n },\n\n get MessageQueue() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"enqueue\");\n },\n\n get MessageParser() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"createMessage\", \"parse\", \"unparse\");\n },\n\n /* Text Processing */\n get hljs() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"highlight\", \"highlightBlock\");\n },\n\n get SimpleMarkdown() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"parseBlock\", \"parseInline\", \"defaultOutput\");\n },\n\n /* Experiments */\n get ExperimentStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getExperimentOverrides\");\n },\n\n get ExperimentsManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isDeveloper\");\n },\n\n get CurrentExperiment() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getExperimentId\");\n },\n\n /* Images, Avatars and Utils */\n get ImageResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getUserAvatarURL\", \"getGuildIconURL\");\n },\n\n get ImageUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getSizedImageSrc\");\n },\n\n get AvatarDefaults() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getUserAvatarURL\", \"DEFAULT_AVATARS\");\n },\n\n /* Window, DOM, HTML */\n get WindowInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isFocused\", \"windowSize\");\n },\n\n get TagInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"VALID_TAG_NAMES\");\n },\n\n get DOMInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"canUseDOM\");\n },\n\n /* Locale/Location and Time */\n get LocaleManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"setLocale\");\n },\n\n get Moment() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"parseZone\");\n },\n\n get LocationManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"createLocation\");\n },\n\n get Timestamps() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"fromTimestamp\");\n },\n\n get TimeFormatter() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"dateFormat\");\n },\n\n /* Strings and Utils */\n get Strings() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Messages\").Messages;\n },\n\n get StringFormats() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"a\", \"z\");\n },\n\n get StringUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"toASCII\");\n },\n\n /* URLs and Utils */\n get URLParser() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Url\", \"parse\");\n },\n\n get ExtraURLs() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getArticleURL\");\n },\n\n /* Drag & Drop */\n get DNDActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"beginDrag\");\n },\n\n get DNDSources() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"addTarget\");\n },\n\n get DNDObjects() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"DragSource\");\n },\n\n /* Media Stuff (Audio/Video) */\n get MediaDeviceInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Codecs\", \"SUPPORTED_BROWSERS\");\n },\n\n get MediaInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getOutputVolume\");\n },\n\n get MediaEngineInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"MediaEngineFeatures\");\n },\n\n get VoiceInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"EchoCancellation\");\n },\n\n get VideoStream() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getVideoStream\");\n },\n\n get SoundModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"playSound\");\n },\n\n /* Electron & Other Internals with Utils*/\n get ElectronModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"setBadge\");\n },\n\n get Dispatcher() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"dirtyDispatch\");\n },\n\n get PathUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"hasBasename\");\n },\n\n get NotificationModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"showNotification\");\n },\n\n get RouterModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Router\");\n },\n\n get APIModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getAPIBaseURL\");\n },\n\n get AnalyticEvents() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"AnalyticEventConfigs\");\n },\n\n get KeyGenerator() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByRegex(/\"binary\"/);\n },\n\n get Buffers() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Buffer\", \"kMaxLength\");\n },\n\n get DeviceStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getDevices\");\n },\n\n get SoftwareInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"os\");\n },\n\n get CurrentContext() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"setTagsContext\");\n },\n\n /* Commonly Used Classes */\n get GuildClasses() {\n const guildsWrapper = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"wrapper\", \"unreadMentionsBar\");\n const guilds = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"guildsError\", \"selected\");\n const pill = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"blobContainer\");\n return Object.assign({}, guildsWrapper, guilds, pill);\n }\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvZGlzY29yZG1vZHVsZXMuanM/YTU0ZCJdLCJuYW1lcyI6WyJVdGlsaXRpZXMiLCJtZW1vaXplT2JqZWN0IiwiUmVhY3QiLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5UHJvcHMiLCJSZWFjdERPTSIsIkZsdXgiLCJFdmVudHMiLCJnZXRCeVByb3RvdHlwZXMiLCJHdWlsZFN0b3JlIiwiU29ydGVkR3VpbGRTdG9yZSIsIlNlbGVjdGVkR3VpbGRTdG9yZSIsIkd1aWxkU3luYyIsIkd1aWxkSW5mbyIsIkd1aWxkQ2hhbm5lbHNTdG9yZSIsIkd1aWxkTWVtYmVyU3RvcmUiLCJNZW1iZXJDb3VudFN0b3JlIiwiR3VpbGRFbW9qaVN0b3JlIiwiR3VpbGRBY3Rpb25zIiwiR3VpbGRQZXJtaXNzaW9ucyIsIkNoYW5uZWxTdG9yZSIsIlNlbGVjdGVkQ2hhbm5lbFN0b3JlIiwiQ2hhbm5lbEFjdGlvbnMiLCJQcml2YXRlQ2hhbm5lbEFjdGlvbnMiLCJDaGFubmVsU2VsZWN0b3IiLCJVc2VySW5mb1N0b3JlIiwiVXNlclNldHRpbmdzU3RvcmUiLCJBY2NvdW50TWFuYWdlciIsIlVzZXJTZXR0aW5nc1VwZGF0ZXIiLCJPbmxpbmVXYXRjaGVyIiwiQ3VycmVudFVzZXJJZGxlIiwiUmVsYXRpb25zaGlwU3RvcmUiLCJSZWxhdGlvbnNoaXBNYW5hZ2VyIiwiTWVudGlvblN0b3JlIiwiVXNlclN0b3JlIiwiVXNlclN0YXR1c1N0b3JlIiwiVXNlclR5cGluZ1N0b3JlIiwiVXNlckFjdGl2aXR5U3RvcmUiLCJVc2VyTmFtZVJlc29sdmVyIiwiVXNlck5vdGVTdG9yZSIsIlVzZXJOb3RlQWN0aW9ucyIsIkVtb2ppSW5mbyIsIkVtb2ppVXRpbHMiLCJFbW9qaVN0b3JlIiwiSW52aXRlU3RvcmUiLCJJbnZpdGVSZXNvbHZlciIsIkludml0ZUFjdGlvbnMiLCJEaXNjb3JkQ29uc3RhbnRzIiwiRGlzY29yZFBlcm1pc3Npb25zIiwiUGVybWlzc2lvbnMiLCJQZXJtaXNzaW9uVXRpbHMiLCJDb2xvckNvbnZlcnRlciIsIkNvbG9yU2hhZGVyIiwiVGlueUNvbG9yIiwiQ2xhc3NSZXNvbHZlciIsIkJ1dHRvbkRhdGEiLCJJY29uTmFtZXMiLCJOYXZpZ2F0aW9uVXRpbHMiLCJNZXNzYWdlU3RvcmUiLCJNZXNzYWdlQWN0aW9ucyIsIk1lc3NhZ2VRdWV1ZSIsIk1lc3NhZ2VQYXJzZXIiLCJobGpzIiwiU2ltcGxlTWFya2Rvd24iLCJFeHBlcmltZW50U3RvcmUiLCJFeHBlcmltZW50c01hbmFnZXIiLCJDdXJyZW50RXhwZXJpbWVudCIsIkltYWdlUmVzb2x2ZXIiLCJJbWFnZVV0aWxzIiwiQXZhdGFyRGVmYXVsdHMiLCJXaW5kb3dJbmZvIiwiVGFnSW5mbyIsIkRPTUluZm8iLCJMb2NhbGVNYW5hZ2VyIiwiTW9tZW50IiwiTG9jYXRpb25NYW5hZ2VyIiwiVGltZXN0YW1wcyIsIlRpbWVGb3JtYXR0ZXIiLCJTdHJpbmdzIiwiTWVzc2FnZXMiLCJTdHJpbmdGb3JtYXRzIiwiU3RyaW5nVXRpbHMiLCJVUkxQYXJzZXIiLCJFeHRyYVVSTHMiLCJETkRBY3Rpb25zIiwiRE5EU291cmNlcyIsIkRORE9iamVjdHMiLCJNZWRpYURldmljZUluZm8iLCJNZWRpYUluZm8iLCJNZWRpYUVuZ2luZUluZm8iLCJWb2ljZUluZm8iLCJWaWRlb1N0cmVhbSIsIlNvdW5kTW9kdWxlIiwiRWxlY3Ryb25Nb2R1bGUiLCJEaXNwYXRjaGVyIiwiUGF0aFV0aWxzIiwiTm90aWZpY2F0aW9uTW9kdWxlIiwiUm91dGVyTW9kdWxlIiwiQVBJTW9kdWxlIiwiQW5hbHl0aWNFdmVudHMiLCJLZXlHZW5lcmF0b3IiLCJnZXRCeVJlZ2V4IiwiQnVmZmVycyIsIkRldmljZVN0b3JlIiwiU29mdHdhcmVJbmZvIiwiQ3VycmVudENvbnRleHQiLCJHdWlsZENsYXNzZXMiLCJndWlsZHNXcmFwcGVyIiwiZ3VpbGRzIiwicGlsbCIsIk9iamVjdCIsImFzc2lnbiJdLCJtYXBwaW5ncyI6IkFB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QyxDQUFmO0FBQ0EsVUFBTXlHLElBQUksR0FBRzFHLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsZUFBMUIsQ0FBYjtBQUNBLFdBQU8wRyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCSixhQUFsQixFQUFpQ0MsTUFBakMsRUFBeUNDLElBQXpDLENBQVA7QUFDTjs7QUE5SXFDLENBQXhCLENBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9kaXNjb3JkbW9kdWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBIGxhcmdlIGxpc3Qgb2Yga25vd24gYW5kIHVzZWZ1bCB3ZWJwYWNrIG1vZHVsZXMgaW50ZXJuYWwgdG8gRGlzY29yZC5cclxuICpcclxuICogQG1vZHVsZSBEaXNjb3JkTW9kdWxlc1xyXG4gKiBAdmVyc2lvbiAwLjAuM1xyXG4gKi9cclxuXHJcbmltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrbW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVXRpbGl0aWVzLm1lbW9pemVPYmplY3Qoe1xyXG4gICAgZ2V0IFJlYWN0KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY3JlYXRlRWxlbWVudFwiLCBcImNsb25lRWxlbWVudFwiKTt9LFxyXG4gICAgZ2V0IFJlYWN0RE9NKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicmVuZGVyXCIsIFwiZmluZERPTU5vZGVcIik7fSxcclxuICAgIGdldCBGbHV4KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY29ubmVjdFN0b3Jlc1wiKTt9LFxyXG4gICAgZ2V0IEV2ZW50cygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm90b3R5cGVzKFwic2V0TWF4TGlzdGVuZXJzXCIsIFwiZW1pdFwiKTt9LFxyXG5cclxuICAgIC8qIEd1aWxkIEluZm8sIFN0b3JlcywgYW5kIFV0aWxpdGllcyAqL1xyXG4gICAgZ2V0IEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRHdWlsZFwiKTt9LFxyXG4gICAgZ2V0IFNvcnRlZEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRTb3J0ZWRHdWlsZHNcIik7fSxcclxuICAgIGdldCBTZWxlY3RlZEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRMYXN0U2VsZWN0ZWRHdWlsZElkXCIpO30sXHJcbiAgICBnZXQgR3VpbGRTeW5jKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U3luY2VkR3VpbGRzXCIpO30sXHJcbiAgICBnZXQgR3VpbGRJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QWNyb255bVwiKTt9LFxyXG4gICAgZ2V0IEd1aWxkQ2hhbm5lbHNTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldENoYW5uZWxzXCIsIFwiZ2V0RGVmYXVsdENoYW5uZWxcIik7fSxcclxuICAgIGdldCBHdWlsZE1lbWJlclN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0TWVtYmVyXCIpO30sXHJcbiAgICBnZXQgTWVtYmVyQ291bnRTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE1lbWJlckNvdW50c1wiKTt9LFxyXG4gICAgZ2V0IEd1aWxkRW1vamlTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldEVtb2ppc1wiKTt9LFxyXG4gICAgZ2V0IEd1aWxkQWN0aW9ucygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIm1hcmtHdWlsZEFzUmVhZFwiKTt9LFxyXG4gICAgZ2V0IEd1aWxkUGVybWlzc2lvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRHdWlsZFBlcm1pc3Npb25zXCIpO30sXHJcblxyXG4gICAgLyogQ2hhbm5lbCBTdG9yZSAmIEFjdGlvbnMgKi9cclxuICAgIGdldCBDaGFubmVsU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRDaGFubmVsc1wiLCBcImdldERNRnJvbVVzZXJJZFwiKTt9LFxyXG4gICAgZ2V0IFNlbGVjdGVkQ2hhbm5lbFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0TGFzdFNlbGVjdGVkQ2hhbm5lbElkXCIpO30sXHJcbiAgICBnZXQgQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZWxlY3RDaGFubmVsXCIpO30sXHJcbiAgICBnZXQgUHJpdmF0ZUNoYW5uZWxBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwib3BlblByaXZhdGVDaGFubmVsXCIpO30sXHJcbiAgICBnZXQgQ2hhbm5lbFNlbGVjdG9yKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwic2VsZWN0R3VpbGRcIiwgXCJzZWxlY3RDaGFubmVsXCIpO30sXHJcblxyXG4gICAgLyogQ3VycmVudCBVc2VyIEluZm8sIFN0YXRlIGFuZCBTZXR0aW5ncyAqL1xyXG4gICAgZ2V0IFVzZXJJbmZvU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRUb2tlblwiKTt9LFxyXG4gICAgZ2V0IFVzZXJTZXR0aW5nc1N0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ3VpbGRQb3NpdGlvbnNcIik7fSxcclxuICAgIGdldCBBY2NvdW50TWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInJlZ2lzdGVyXCIsIFwibG9naW5cIik7fSxcclxuICAgIGdldCBVc2VyU2V0dGluZ3NVcGRhdGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwidXBkYXRlUmVtb3RlU2V0dGluZ3NcIik7fSxcclxuICAgIGdldCBPbmxpbmVXYXRjaGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNPbmxpbmVcIik7fSxcclxuICAgIGdldCBDdXJyZW50VXNlcklkbGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRJZGxlVGltZVwiKTt9LFxyXG4gICAgZ2V0IFJlbGF0aW9uc2hpcFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNCbG9ja2VkXCIsIFwiZ2V0RnJpZW5kSURzXCIpO30sXHJcbiAgICBnZXQgUmVsYXRpb25zaGlwTWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFkZFJlbGF0aW9uc2hpcFwiKTt9LFxyXG4gICAgZ2V0IE1lbnRpb25TdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE1lbnRpb25zXCIpO30sXHJcblxyXG4gICAgLyogVXNlciBTdG9yZXMgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgVXNlclN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0Q3VycmVudFVzZXJcIik7fSxcclxuICAgIGdldCBVc2VyU3RhdHVzU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRTdGF0dXNcIiwgXCJnZXRTdGF0ZVwiKTt9LFxyXG4gICAgZ2V0IFVzZXJUeXBpbmdTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzVHlwaW5nXCIpO30sXHJcbiAgICBnZXQgVXNlckFjdGl2aXR5U3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRBY3Rpdml0eVwiKTt9LFxyXG4gICAgZ2V0IFVzZXJOYW1lUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXROYW1lXCIpO30sXHJcbiAgICBnZXQgVXNlck5vdGVTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE5vdGVcIik7fSxcclxuICAgIGdldCBVc2VyTm90ZUFjdGlvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJ1cGRhdGVOb3RlXCIpO30sXHJcblxyXG4gICAgLyogRW1vamkgU3RvcmUgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgRW1vamlJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNFbW9qaURpc2FibGVkXCIpO30sXHJcbiAgICBnZXQgRW1vamlVdGlscygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldEd1aWxkRW1vamlcIik7fSxcclxuICAgIGdldCBFbW9qaVN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QnlDYXRlZ29yeVwiLCBcIkVNT0pJX05BTUVfUkVcIik7fSxcclxuXHJcbiAgICAvKiBJbnZpdGUgU3RvcmUgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgSW52aXRlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRJbnZpdGVzXCIpO30sXHJcbiAgICBnZXQgSW52aXRlUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJmaW5kSW52aXRlXCIpO30sXHJcbiAgICBnZXQgSW52aXRlQWN0aW9ucygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFjY2VwdEludml0ZVwiKTt9LFxyXG5cclxuICAgIC8qIERpc2NvcmQgT2JqZWN0cyAmIFV0aWxzICovXHJcbiAgICBnZXQgRGlzY29yZENvbnN0YW50cygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIlBlcm1pc3Npb25zXCIsIFwiQWN0aXZpdHlUeXBlc1wiLCBcIlN0YXR1c1R5cGVzXCIpO30sXHJcbiAgICBnZXQgRGlzY29yZFBlcm1pc3Npb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiUGVybWlzc2lvbnNcIiwgXCJBY3Rpdml0eVR5cGVzXCIsIFwiU3RhdHVzVHlwZXNcIikuUGVybWlzc2lvbnM7fSxcclxuICAgIGdldCBQZXJtaXNzaW9uVXRpbHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRIaWdoZXN0Um9sZVwiKTt9LFxyXG4gICAgZ2V0IENvbG9yQ29udmVydGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaGV4MmludFwiKTt9LFxyXG4gICAgZ2V0IENvbG9yU2hhZGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZGFya2VuXCIpO30sXHJcbiAgICBnZXQgVGlueUNvbG9yKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3RvdHlwZXMoXCJ0b1JnYlwiKTt9LFxyXG4gICAgZ2V0IENsYXNzUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRDbGFzc1wiKTt9LFxyXG4gICAgZ2V0IEJ1dHRvbkRhdGEoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJCdXR0b25TaXplc1wiKTt9LFxyXG4gICAgZ2V0IEljb25OYW1lcygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIkljb25OYW1lc1wiKTt9LFxyXG4gICAgZ2V0IE5hdmlnYXRpb25VdGlscygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInRyYW5zaXRpb25Ub1wiLCBcInJlcGxhY2VXaXRoXCIsIFwiZ2V0SGlzdG9yeVwiKTt9LFxyXG5cclxuICAgIC8qIERpc2NvcmQgTWVzc2FnZXMgKi9cclxuICAgIGdldCBNZXNzYWdlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRNZXNzYWdlc1wiKTt9LFxyXG4gICAgZ2V0IE1lc3NhZ2VBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwianVtcFRvTWVzc2FnZVwiLCBcIl9zZW5kTWVzc2FnZVwiKTt9LFxyXG4gICAgZ2V0IE1lc3NhZ2VRdWV1ZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImVucXVldWVcIik7fSxcclxuICAgIGdldCBNZXNzYWdlUGFyc2VyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY3JlYXRlTWVzc2FnZVwiLCBcInBhcnNlXCIsIFwidW5wYXJzZVwiKTt9LFxyXG5cclxuICAgIC8qIFRleHQgUHJvY2Vzc2luZyAqL1xyXG4gICAgZ2V0IGhsanMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJoaWdobGlnaHRcIiwgXCJoaWdobGlnaHRCbG9ja1wiKTt9LFxyXG4gICAgZ2V0IFNpbXBsZU1hcmtkb3duKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicGFyc2VCbG9ja1wiLCBcInBhcnNlSW5saW5lXCIsIFwiZGVmYXVsdE91dHB1dFwiKTt9LFxyXG5cclxuICAgIC8qIEV4cGVyaW1lbnRzICovXHJcbiAgICBnZXQgRXhwZXJpbWVudFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0RXhwZXJpbWVudE92ZXJyaWRlc1wiKTt9LFxyXG4gICAgZ2V0IEV4cGVyaW1lbnRzTWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzRGV2ZWxvcGVyXCIpO30sXHJcbiAgICBnZXQgQ3VycmVudEV4cGVyaW1lbnQoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRFeHBlcmltZW50SWRcIik7fSxcclxuXHJcbiAgICAvKiBJbWFnZXMsIEF2YXRhcnMgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgSW1hZ2VSZXNvbHZlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldFVzZXJBdmF0YXJVUkxcIiwgXCJnZXRHdWlsZEljb25VUkxcIik7fSxcclxuICAgIGdldCBJbWFnZVV0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U2l6ZWRJbWFnZVNyY1wiKTt9LFxyXG4gICAgZ2V0IEF2YXRhckRlZmF1bHRzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0VXNlckF2YXRhclVSTFwiLCBcIkRFRkFVTFRfQVZBVEFSU1wiKTt9LFxyXG5cclxuICAgIC8qIFdpbmRvdywgRE9NLCBIVE1MICovXHJcbiAgICBnZXQgV2luZG93SW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzRm9jdXNlZFwiLCBcIndpbmRvd1NpemVcIik7fSxcclxuICAgIGdldCBUYWdJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiVkFMSURfVEFHX05BTUVTXCIpO30sXHJcbiAgICBnZXQgRE9NSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImNhblVzZURPTVwiKTt9LFxyXG5cclxuICAgIC8qIExvY2FsZS9Mb2NhdGlvbiBhbmQgVGltZSAqL1xyXG4gICAgZ2V0IExvY2FsZU1hbmFnZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZXRMb2NhbGVcIik7fSxcclxuICAgIGdldCBNb21lbnQoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJwYXJzZVpvbmVcIik7fSxcclxuICAgIGdldCBMb2NhdGlvbk1hbmFnZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJjcmVhdGVMb2NhdGlvblwiKTt9LFxyXG4gICAgZ2V0IFRpbWVzdGFtcHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJmcm9tVGltZXN0YW1wXCIpO30sXHJcbiAgICBnZXQgVGltZUZvcm1hdHRlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImRhdGVGb3JtYXRcIik7fSxcclxuXHJcbiAgICAvKiBTdHJpbmdzIGFuZCBVdGlscyAqL1xyXG4gICAgZ2V0IFN0cmluZ3MoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJNZXNzYWdlc1wiKS5NZXNzYWdlczt9LFxyXG4gICAgZ2V0IFN0cmluZ0Zvcm1hdHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJhXCIsIFwielwiKTt9LFxyXG4gICAgZ2V0IFN0cmluZ1V0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwidG9BU0NJSVwiKTt9LFxyXG5cclxuICAgIC8qIFVSTHMgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgVVJMUGFyc2VyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiVXJsXCIsIFwicGFyc2VcIik7fSxcclxuICAgIGdldCBFeHRyYVVSTHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRBcnRpY2xlVVJMXCIpO30sXHJcblxyXG4gICAgLyogRHJhZyAmIERyb3AgKi9cclxuICAgIGdldCBETkRBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiYmVnaW5EcmFnXCIpO30sXHJcbiAgICBnZXQgRE5EU291cmNlcygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFkZFRhcmdldFwiKTt9LFxyXG4gICAgZ2V0IERORE9iamVjdHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJEcmFnU291cmNlXCIpO30sXHJcblxyXG4gICAgLyogTWVkaWEgU3R1ZmYgKEF1ZGlvL1ZpZGVvKSAqL1xyXG4gICAgZ2V0IE1lZGlhRGV2aWNlSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIkNvZGVjc1wiLCBcIlNVUFBPUlRFRF9CUk9XU0VSU1wiKTt9LFxyXG4gICAgZ2V0IE1lZGlhSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE91dHB1dFZvbHVtZVwiKTt9LFxyXG4gICAgZ2V0IE1lZGlhRW5naW5lSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIk1lZGlhRW5naW5lRmVhdHVyZXNcIik7fSxcclxuICAgIGdldCBWb2ljZUluZm8oKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJFY2hvQ2FuY2VsbGF0aW9uXCIpO30sXHJcbiAgICBnZXQgVmlkZW9TdHJlYW0oKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRWaWRlb1N0cmVhbVwiKTt9LFxyXG4gICAgZ2V0IFNvdW5kTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicGxheVNvdW5kXCIpO30sXHJcblxyXG4gICAgLyogRWxlY3Ryb24gJiBPdGhlciBJbnRlcm5hbHMgd2l0aCBVdGlscyovXHJcbiAgICBnZXQgRWxlY3Ryb25Nb2R1bGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZXRCYWRnZVwiKTt9LFxyXG4gICAgZ2V0IERpc3BhdGNoZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJkaXJ0eURpc3BhdGNoXCIpO30sXHJcbiAgICBnZXQgUGF0aFV0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaGFzQmFzZW5hbWVcIik7fSxcclxuICAgIGdldCBOb3RpZmljYXRpb25Nb2R1bGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzaG93Tm90aWZpY2F0aW9uXCIpO30sXHJcbiAgICBnZXQgUm91dGVyTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiUm91dGVyXCIpO30sXHJcbiAgICBnZXQgQVBJTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QVBJQmFzZVVSTFwiKTt9LFxyXG4gICAgZ2V0IEFuYWx5dGljRXZlbnRzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiQW5hbHl0aWNFdmVudENvbmZpZ3NcIik7fSxcclxuICAgIGdldCBLZXlHZW5lcmF0b3IoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UmVnZXgoL1wiYmluYXJ5XCIvKTt9LFxyXG4gICAgZ2V0IEJ1ZmZlcnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJCdWZmZXJcIiwgXCJrTWF4TGVuZ3RoXCIpO30sXHJcbiAgICBnZXQgRGV2aWNlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXREZXZpY2VzXCIpO30sXHJcbiAgICBnZXQgU29mdHdhcmVJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwib3NcIik7fSxcclxuICAgIGdldCBDdXJyZW50Q29udGV4dCgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInNldFRhZ3NDb250ZXh0XCIpO30sXHJcblxyXG4gICAgLyogQ29tbW9ubHkgVXNlZCBDbGFzc2VzICovXHJcbiAgICBnZXQgR3VpbGRDbGFzc2VzKCkge1xyXG5cdFx0Y29uc3QgZ3VpbGRzV3JhcHBlciA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJ3cmFwcGVyXCIsIFwidW5yZWFkTWVudGlvbnNCYXJcIik7XHJcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImd1aWxkc0Vycm9yXCIsIFwic2VsZWN0ZWRcIik7XHJcbiAgICAgICAgY29uc3QgcGlsbCA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJibG9iQ29udGFpbmVyXCIpO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xyXG5cdH1cclxufSk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/discordmodules.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/**\r\n * A large list of known and useful webpack modules internal to Discord.\r\n *\r\n * @module DiscordModules\r\n * @version 0.0.3\r\n */\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].memoizeObject({\n get React() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"createElement\", \"cloneElement\");\n },\n\n get ReactDOM() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"render\", \"findDOMNode\");\n },\n\n get Flux() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"connectStores\");\n },\n\n get Events() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByPrototypes(\"setMaxListeners\", \"emit\");\n },\n\n /* Guild Info, Stores, and Utilities */\n get GuildStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getGuild\");\n },\n\n get SortedGuildStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getSortedGuilds\");\n },\n\n get SelectedGuildStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getLastSelectedGuildId\");\n },\n\n get GuildSync() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getSyncedGuilds\");\n },\n\n get GuildInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getAcronym\");\n },\n\n get GuildChannelsStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getChannels\", \"getDefaultChannel\");\n },\n\n get GuildMemberStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMember\");\n },\n\n get MemberCountStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMemberCounts\");\n },\n\n get GuildEmojiStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getEmojis\");\n },\n\n get GuildActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"markGuildAsRead\");\n },\n\n get GuildPermissions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getGuildPermissions\");\n },\n\n /* Channel Store & Actions */\n get ChannelStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getChannels\", \"getDMFromUserId\");\n },\n\n get SelectedChannelStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getLastSelectedChannelId\");\n },\n\n get ChannelActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"selectChannel\");\n },\n\n get PrivateChannelActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"openPrivateChannel\");\n },\n\n get ChannelSelector() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"selectGuild\", \"selectChannel\");\n },\n\n /* Current User Info, State and Settings */\n get UserInfoStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getToken\");\n },\n\n get UserSettingsStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"guildPositions\");\n },\n\n get AccountManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"register\", \"login\");\n },\n\n get UserSettingsUpdater() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"updateRemoteSettings\");\n },\n\n get OnlineWatcher() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isOnline\");\n },\n\n get CurrentUserIdle() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getIdleTime\");\n },\n\n get RelationshipStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isBlocked\", \"getFriendIDs\");\n },\n\n get RelationshipManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"addRelationship\");\n },\n\n get MentionStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMentions\");\n },\n\n /* User Stores and Utils */\n get UserStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getCurrentUser\");\n },\n\n get UserStatusStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getStatus\", \"getState\");\n },\n\n get UserTypingStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isTyping\");\n },\n\n get UserActivityStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getActivity\");\n },\n\n get UserNameResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getName\");\n },\n\n get UserNoteStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getNote\");\n },\n\n get UserNoteActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"updateNote\");\n },\n\n /* Emoji Store and Utils */\n get EmojiInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isEmojiDisabled\");\n },\n\n get EmojiUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getGuildEmoji\");\n },\n\n get EmojiStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getByCategory\", \"EMOJI_NAME_RE\");\n },\n\n /* Invite Store and Utils */\n get InviteStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getInvites\");\n },\n\n get InviteResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"findInvite\");\n },\n\n get InviteActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"acceptInvite\");\n },\n\n /* Discord Objects & Utils */\n get DiscordConstants() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Permissions\", \"ActivityTypes\", \"StatusTypes\");\n },\n\n get DiscordPermissions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Permissions\", \"ActivityTypes\", \"StatusTypes\").Permissions;\n },\n\n get PermissionUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getHighestRole\");\n },\n\n get ColorConverter() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"hex2int\");\n },\n\n get ColorShader() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"darken\");\n },\n\n get TinyColor() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByPrototypes(\"toRgb\");\n },\n\n get ClassResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getClass\");\n },\n\n get ButtonData() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"ButtonSizes\");\n },\n\n get IconNames() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"IconNames\");\n },\n\n get NavigationUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"transitionTo\", \"replaceWith\", \"getHistory\");\n },\n\n /* Discord Messages */\n get MessageStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMessages\");\n },\n\n get MessageActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"jumpToMessage\", \"_sendMessage\");\n },\n\n get MessageQueue() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"enqueue\");\n },\n\n get MessageParser() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"createMessage\", \"parse\", \"unparse\");\n },\n\n /* Text Processing */\n get hljs() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"highlight\", \"highlightBlock\");\n },\n\n get SimpleMarkdown() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"parseBlock\", \"parseInline\", \"defaultOutput\");\n },\n\n /* Experiments */\n get ExperimentStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getExperimentOverrides\");\n },\n\n get ExperimentsManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isDeveloper\");\n },\n\n get CurrentExperiment() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getExperimentId\");\n },\n\n /* Images, Avatars and Utils */\n get ImageResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getUserAvatarURL\", \"getGuildIconURL\");\n },\n\n get ImageUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getSizedImageSrc\");\n },\n\n get AvatarDefaults() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getUserAvatarURL\", \"DEFAULT_AVATARS\");\n },\n\n /* Window, DOM, HTML */\n get WindowInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isFocused\", \"windowSize\");\n },\n\n get TagInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"VALID_TAG_NAMES\");\n },\n\n get DOMInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"canUseDOM\");\n },\n\n /* Locale/Location and Time */\n get LocaleManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"setLocale\");\n },\n\n get Moment() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"parseZone\");\n },\n\n get LocationManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"createLocation\");\n },\n\n get Timestamps() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"fromTimestamp\");\n },\n\n get TimeFormatter() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"dateFormat\");\n },\n\n /* Strings and Utils */\n get Strings() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Messages\").Messages;\n },\n\n get StringFormats() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"a\", \"z\");\n },\n\n get StringUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"toASCII\");\n },\n\n /* URLs and Utils */\n get URLParser() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Url\", \"parse\");\n },\n\n get ExtraURLs() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getArticleURL\");\n },\n\n /* Drag & Drop */\n get DNDActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"beginDrag\");\n },\n\n get DNDSources() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"addTarget\");\n },\n\n get DNDObjects() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"DragSource\");\n },\n\n /* Media Stuff (Audio/Video) */\n get MediaDeviceInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Codecs\", \"SUPPORTED_BROWSERS\");\n },\n\n get MediaInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getOutputVolume\");\n },\n\n get MediaEngineInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"MediaEngineFeatures\");\n },\n\n get VoiceInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"EchoCancellation\");\n },\n\n get VideoStream() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getVideoStream\");\n },\n\n get SoundModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"playSound\");\n },\n\n /* Electron & Other Internals with Utils*/\n get ElectronModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"setBadge\");\n },\n\n get Dispatcher() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"dirtyDispatch\");\n },\n\n get PathUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"hasBasename\");\n },\n\n get NotificationModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"showNotification\");\n },\n\n get RouterModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Router\");\n },\n\n get APIModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getAPIBaseURL\");\n },\n\n get AnalyticEvents() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"AnalyticEventConfigs\");\n },\n\n get KeyGenerator() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByRegex(/\"binary\"/);\n },\n\n get Buffers() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Buffer\", \"kMaxLength\");\n },\n\n get DeviceStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getDevices\");\n },\n\n get SoftwareInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"os\");\n },\n\n get CurrentContext() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"setTagsContext\");\n },\n\n /* Commonly Used Classes */\n get GuildClasses() {\n const guildsWrapper = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"wrapper\", \"unreadMentionsBar\");\n const guilds = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"guildsError\", \"selected\");\n const pill = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"blobContainer\");\n return Object.assign({}, guildsWrapper, guilds, pill);\n },\n\n get LayerStack() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"pushLayer\");\n }\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvZGlzY29yZG1vZHVsZXMuanM/YTU0ZCJdLCJuYW1lcyI6WyJVdGlsaXRpZXMiLCJtZW1vaXplT2JqZWN0IiwiUmVhY3QiLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5UHJvcHMiLCJSZWFjdERPTSIsIkZsdXgiLCJFdmVudHMiLCJnZXRCeVByb3RvdHlwZXMiLCJHdWlsZFN0b3JlIiwiU29ydGVkR3VpbGRTdG9yZSIsIlNlbGVjdGVkR3VpbGRTdG9yZSIsIkd1aWxkU3luYyIsIkd1aWxkSW5mbyIsIkd1aWxkQ2hhbm5lbHNTdG9yZSIsIkd1aWxkTWVtYmVyU3RvcmUiLCJNZW1iZXJDb3VudFN0b3JlIiwiR3VpbGRFbW9qaVN0b3JlIiwiR3VpbGRBY3Rpb25zIiwiR3VpbGRQZXJtaXNzaW9ucyIsIkNoYW5uZWxTdG9yZSIsIlNlbGVjdGVkQ2hhbm5lbFN0b3JlIiwiQ2hhbm5lbEFjdGlvbnMiLCJQcml2YXRlQ2hhbm5lbEFjdGlvbnMiLCJDaGFubmVsU2VsZWN0b3IiLCJVc2VySW5mb1N0b3JlIiwiVXNlclNldHRpbmdzU3RvcmUiLCJBY2NvdW50TWFuYWdlciIsIlVzZXJTZXR0aW5nc1VwZGF0ZXIiLCJPbmxpbmVXYXRjaGVyIiwiQ3VycmVudFVzZXJJZGxlIiwiUmVsYXRpb25zaGlwU3RvcmUiLCJSZWxhdGlvbnNoaXBNYW5hZ2VyIiwiTWVudGlvblN0b3JlIiwiVXNlclN0b3JlIiwiVXNlclN0YXR1c1N0b3JlIiwiVXNlclR5cGluZ1N0b3JlIiwiVXNlckFjdGl2aXR5U3RvcmUiLCJVc2VyTmFtZVJlc29sdmVyIiwiVXNlck5vdGVTdG9yZSIsIlVzZXJOb3RlQWN0aW9ucyIsIkVtb2ppSW5mbyIsIkVtb2ppVXRpbHMiLCJFbW9qaVN0b3JlIiwiSW52aXRlU3RvcmUiLCJJbnZpdGVSZXNvbHZlciIsIkludml0ZUFjdGlvbnMiLCJEaXNjb3JkQ29uc3RhbnRzIiwiRGlzY29yZFBlcm1pc3Npb25zIiwiUGVybWlzc2lvbnMiLCJQZXJtaXNzaW9uVXRpbHMiLCJDb2xvckNvbnZlcnRlciIsIkNvbG9yU2hhZGVyIiwiVGlueUNvbG9yIiwiQ2xhc3NSZXNvbHZlciIsIkJ1dHRvbkRhdGEiLCJJY29uTmFtZXMiLCJOYXZpZ2F0aW9uVXRpbHMiLCJNZXNzYWdlU3RvcmUiLCJNZXNzYWdlQWN0aW9ucyIsIk1lc3NhZ2VRdWV1ZSIsIk1lc3NhZ2VQYXJzZXIiLCJobGpzIiwiU2ltcGxlTWFya2Rvd24iLCJFeHBlcmltZW50U3RvcmUiLCJFeHBlcmltZW50c01hbmFnZXIiLCJDdXJyZW50RXhwZXJpbWVudCIsIkltYWdlUmVzb2x2ZXIiLCJJbWFnZVV0aWxzIiwiQXZhdGFyRGVmYXVsdHMiLCJXaW5kb3dJbmZvIiwiVGFnSW5mbyIsIkRPTUluZm8iLCJMb2NhbGVNYW5hZ2VyIiwiTW9tZW50IiwiTG9jYXRpb25NYW5hZ2VyIiwiVGltZXN0YW1wcyIsIlRpbWVGb3JtYXR0ZXIiLCJTdHJpbmdzIiwiTWVzc2FnZXMiLCJTdHJpbmdGb3JtYXRzIiwiU3RyaW5nVXRpbHMiLCJVUkxQYXJzZXIiLCJFeHRyYVVSTHMiLCJETkRBY3Rpb25zIiwiRE5EU291cmNlcyIsIkRORE9iamVjdHMiLCJNZWRpYURldmljZUluZm8iLCJNZWRpYUluZm8iLCJNZWRpYUVuZ2luZUluZm8iLCJWb2ljZUluZm8iLCJWaWRlb1N0cmVhbSIsIlNvdW5kTW9kdWxlIiwiRWxlY3Ryb25Nb2R1bGUiLCJEaXNwYXRjaGVyIiwiUGF0aFV0aWxzIiwiTm90aWZpY2F0aW9uTW9kdWxlIiwiUm91dGVyTW9kdWxlIiwiQVBJTW9kdWxlIiwiQW5hbHl0aWNFdmVudHMiLCJLZXlHZW5lcmF0b3IiLCJnZXRCeVJlZ2V4IiwiQnVmZmVycyIsIkRldmljZVN0b3JlIiwiU29mdHdhcmVJbmZvIiwiQ3VycmVudENvbnRleHQiLCJHdWlsZENsYXNzZXMiLCJndWlsZHNXcmFwcGVyIiwiZ3VpbGRzIiwicGlsbCIsIk9iamVjdCIsImFzc2lnbiIsIkxheWVyU3RhY2siXSwi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QixFQUF5QyxVQUF6QyxDQUFmO0FBQ0EsVUFBTXlHLElBQUksR0FBRzFHLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsZUFBMUIsQ0FBYjtBQUNBLFdBQU8wRyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCSixhQUFsQixFQUFpQ0MsTUFBakMsRUFBeUNDLElBQXpDLENBQVA7QUFDSCxHQTlJa0M7O0FBZ0puQyxNQUFJRyxVQUFKLEdBQWlCO0FBQUMsV0FBTzdHLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsV0FBMUIsQ0FBUDtBQUErQzs7QUFoSjlCLENBQXhCLENBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9kaXNjb3JkbW9kdWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBIGxhcmdlIGxpc3Qgb2Yga25vd24gYW5kIHVzZWZ1bCB3ZWJwYWNrIG1vZHVsZXMgaW50ZXJuYWwgdG8gRGlzY29yZC5cclxuICpcclxuICogQG1vZHVsZSBEaXNjb3JkTW9kdWxlc1xyXG4gKiBAdmVyc2lvbiAwLjAuM1xyXG4gKi9cclxuXHJcbmltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrbW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVXRpbGl0aWVzLm1lbW9pemVPYmplY3Qoe1xyXG4gICAgZ2V0IFJlYWN0KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY3JlYXRlRWxlbWVudFwiLCBcImNsb25lRWxlbWVudFwiKTt9LFxyXG4gICAgZ2V0IFJlYWN0RE9NKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicmVuZGVyXCIsIFwiZmluZERPTU5vZGVcIik7fSxcclxuICAgIGdldCBGbHV4KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY29ubmVjdFN0b3Jlc1wiKTt9LFxyXG4gICAgZ2V0IEV2ZW50cygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm90b3R5cGVzKFwic2V0TWF4TGlzdGVuZXJzXCIsIFwiZW1pdFwiKTt9LFxyXG5cclxuICAgIC8qIEd1aWxkIEluZm8sIFN0b3JlcywgYW5kIFV0aWxpdGllcyAqL1xyXG4gICAgZ2V0IEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRHdWlsZFwiKTt9LFxyXG4gICAgZ2V0IFNvcnRlZEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRTb3J0ZWRHdWlsZHNcIik7fSxcclxuICAgIGdldCBTZWxlY3RlZEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRMYXN0U2VsZWN0ZWRHdWlsZElkXCIpO30sXHJcbiAgICBnZXQgR3VpbGRTeW5jKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U3luY2VkR3VpbGRzXCIpO30sXHJcbiAgICBnZXQgR3VpbGRJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QWNyb255bVwiKTt9LFxyXG4gICAgZ2V0IEd1aWxkQ2hhbm5lbHNTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldENoYW5uZWxzXCIsIFwiZ2V0RGVmYXVsdENoYW5uZWxcIik7fSxcclxuICAgIGdldCBHdWlsZE1lbWJlclN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0TWVtYmVyXCIpO30sXHJcbiAgICBnZXQgTWVtYmVyQ291bnRTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE1lbWJlckNvdW50c1wiKTt9LFxyXG4gICAgZ2V0IEd1aWxkRW1vamlTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldEVtb2ppc1wiKTt9LFxyXG4gICAgZ2V0IEd1aWxkQWN0aW9ucygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIm1hcmtHdWlsZEFzUmVhZFwiKTt9LFxyXG4gICAgZ2V0IEd1aWxkUGVybWlzc2lvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRHdWlsZFBlcm1pc3Npb25zXCIpO30sXHJcblxyXG4gICAgLyogQ2hhbm5lbCBTdG9yZSAmIEFjdGlvbnMgKi9cclxuICAgIGdldCBDaGFubmVsU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRDaGFubmVsc1wiLCBcImdldERNRnJvbVVzZXJJZFwiKTt9LFxyXG4gICAgZ2V0IFNlbGVjdGVkQ2hhbm5lbFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0TGFzdFNlbGVjdGVkQ2hhbm5lbElkXCIpO30sXHJcbiAgICBnZXQgQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZWxlY3RDaGFubmVsXCIpO30sXHJcbiAgICBnZXQgUHJpdmF0ZUNoYW5uZWxBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwib3BlblByaXZhdGVDaGFubmVsXCIpO30sXHJcbiAgICBnZXQgQ2hhbm5lbFNlbGVjdG9yKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwic2VsZWN0R3VpbGRcIiwgXCJzZWxlY3RDaGFubmVsXCIpO30sXHJcblxyXG4gICAgLyogQ3VycmVudCBVc2VyIEluZm8sIFN0YXRlIGFuZCBTZXR0aW5ncyAqL1xyXG4gICAgZ2V0IFVzZXJJbmZvU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRUb2tlblwiKTt9LFxyXG4gICAgZ2V0IFVzZXJTZXR0aW5nc1N0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ3VpbGRQb3NpdGlvbnNcIik7fSxcclxuICAgIGdldCBBY2NvdW50TWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInJlZ2lzdGVyXCIsIFwibG9naW5cIik7fSxcclxuICAgIGdldCBVc2VyU2V0dGluZ3NVcGRhdGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwidXBkYXRlUmVtb3RlU2V0dGluZ3NcIik7fSxcclxuICAgIGdldCBPbmxpbmVXYXRjaGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNPbmxpbmVcIik7fSxcclxuICAgIGdldCBDdXJyZW50VXNlcklkbGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRJZGxlVGltZVwiKTt9LFxyXG4gICAgZ2V0IFJlbGF0aW9uc2hpcFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNCbG9ja2VkXCIsIFwiZ2V0RnJpZW5kSURzXCIpO30sXHJcbiAgICBnZXQgUmVsYXRpb25zaGlwTWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFkZFJlbGF0aW9uc2hpcFwiKTt9LFxyXG4gICAgZ2V0IE1lbnRpb25TdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE1lbnRpb25zXCIpO30sXHJcblxyXG4gICAgLyogVXNlciBTdG9yZXMgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgVXNlclN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0Q3VycmVudFVzZXJcIik7fSxcclxuICAgIGdldCBVc2VyU3RhdHVzU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRTdGF0dXNcIiwgXCJnZXRTdGF0ZVwiKTt9LFxyXG4gICAgZ2V0IFVzZXJUeXBpbmdTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzVHlwaW5nXCIpO30sXHJcbiAgICBnZXQgVXNlckFjdGl2aXR5U3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRBY3Rpdml0eVwiKTt9LFxyXG4gICAgZ2V0IFVzZXJOYW1lUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXROYW1lXCIpO30sXHJcbiAgICBnZXQgVXNlck5vdGVTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE5vdGVcIik7fSxcclxuICAgIGdldCBVc2VyTm90ZUFjdGlvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJ1cGRhdGVOb3RlXCIpO30sXHJcblxyXG4gICAgLyogRW1vamkgU3RvcmUgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgRW1vamlJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNFbW9qaURpc2FibGVkXCIpO30sXHJcbiAgICBnZXQgRW1vamlVdGlscygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldEd1aWxkRW1vamlcIik7fSxcclxuICAgIGdldCBFbW9qaVN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QnlDYXRlZ29yeVwiLCBcIkVNT0pJX05BTUVfUkVcIik7fSxcclxuXHJcbiAgICAvKiBJbnZpdGUgU3RvcmUgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgSW52aXRlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRJbnZpdGVzXCIpO30sXHJcbiAgICBnZXQgSW52aXRlUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJmaW5kSW52aXRlXCIpO30sXHJcbiAgICBnZXQgSW52aXRlQWN0aW9ucygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFjY2VwdEludml0ZVwiKTt9LFxyXG5cclxuICAgIC8qIERpc2NvcmQgT2JqZWN0cyAmIFV0aWxzICovXHJcbiAgICBnZXQgRGlzY29yZENvbnN0YW50cygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIlBlcm1pc3Npb25zXCIsIFwiQWN0aXZpdHlUeXBlc1wiLCBcIlN0YXR1c1R5cGVzXCIpO30sXHJcbiAgICBnZXQgRGlzY29yZFBlcm1pc3Npb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiUGVybWlzc2lvbnNcIiwgXCJBY3Rpdml0eVR5cGVzXCIsIFwiU3RhdHVzVHlwZXNcIikuUGVybWlzc2lvbnM7fSxcclxuICAgIGdldCBQZXJtaXNzaW9uVXRpbHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRIaWdoZXN0Um9sZVwiKTt9LFxyXG4gICAgZ2V0IENvbG9yQ29udmVydGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaGV4MmludFwiKTt9LFxyXG4gICAgZ2V0IENvbG9yU2hhZGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZGFya2VuXCIpO30sXHJcbiAgICBnZXQgVGlueUNvbG9yKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3RvdHlwZXMoXCJ0b1JnYlwiKTt9LFxyXG4gICAgZ2V0IENsYXNzUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRDbGFzc1wiKTt9LFxyXG4gICAgZ2V0IEJ1dHRvbkRhdGEoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJCdXR0b25TaXplc1wiKTt9LFxyXG4gICAgZ2V0IEljb25OYW1lcygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIkljb25OYW1lc1wiKTt9LFxyXG4gICAgZ2V0IE5hdmlnYXRpb25VdGlscygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInRyYW5zaXRpb25Ub1wiLCBcInJlcGxhY2VXaXRoXCIsIFwiZ2V0SGlzdG9yeVwiKTt9LFxyXG5cclxuICAgIC8qIERpc2NvcmQgTWVzc2FnZXMgKi9cclxuICAgIGdldCBNZXNzYWdlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRNZXNzYWdlc1wiKTt9LFxyXG4gICAgZ2V0IE1lc3NhZ2VBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwianVtcFRvTWVzc2FnZVwiLCBcIl9zZW5kTWVzc2FnZVwiKTt9LFxyXG4gICAgZ2V0IE1lc3NhZ2VRdWV1ZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImVucXVldWVcIik7fSxcclxuICAgIGdldCBNZXNzYWdlUGFyc2VyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY3JlYXRlTWVzc2FnZVwiLCBcInBhcnNlXCIsIFwidW5wYXJzZVwiKTt9LFxyXG5cclxuICAgIC8qIFRleHQgUHJvY2Vzc2luZyAqL1xyXG4gICAgZ2V0IGhsanMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJoaWdobGlnaHRcIiwgXCJoaWdobGlnaHRCbG9ja1wiKTt9LFxyXG4gICAgZ2V0IFNpbXBsZU1hcmtkb3duKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicGFyc2VCbG9ja1wiLCBcInBhcnNlSW5saW5lXCIsIFwiZGVmYXVsdE91dHB1dFwiKTt9LFxyXG5cclxuICAgIC8qIEV4cGVyaW1lbnRzICovXHJcbiAgICBnZXQgRXhwZXJpbWVudFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0RXhwZXJpbWVudE92ZXJyaWRlc1wiKTt9LFxyXG4gICAgZ2V0IEV4cGVyaW1lbnRzTWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzRGV2ZWxvcGVyXCIpO30sXHJcbiAgICBnZXQgQ3VycmVudEV4cGVyaW1lbnQoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRFeHBlcmltZW50SWRcIik7fSxcclxuXHJcbiAgICAvKiBJbWFnZXMsIEF2YXRhcnMgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgSW1hZ2VSZXNvbHZlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldFVzZXJBdmF0YXJVUkxcIiwgXCJnZXRHdWlsZEljb25VUkxcIik7fSxcclxuICAgIGdldCBJbWFnZVV0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U2l6ZWRJbWFnZVNyY1wiKTt9LFxyXG4gICAgZ2V0IEF2YXRhckRlZmF1bHRzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0VXNlckF2YXRhclVSTFwiLCBcIkRFRkFVTFRfQVZBVEFSU1wiKTt9LFxyXG5cclxuICAgIC8qIFdpbmRvdywgRE9NLCBIVE1MICovXHJcbiAgICBnZXQgV2luZG93SW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzRm9jdXNlZFwiLCBcIndpbmRvd1NpemVcIik7fSxcclxuICAgIGdldCBUYWdJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiVkFMSURfVEFHX05BTUVTXCIpO30sXHJcbiAgICBnZXQgRE9NSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImNhblVzZURPTVwiKTt9LFxyXG5cclxuICAgIC8qIExvY2FsZS9Mb2NhdGlvbiBhbmQgVGltZSAqL1xyXG4gICAgZ2V0IExvY2FsZU1hbmFnZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZXRMb2NhbGVcIik7fSxcclxuICAgIGdldCBNb21lbnQoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJwYXJzZVpvbmVcIik7fSxcclxuICAgIGdldCBMb2NhdGlvbk1hbmFnZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJjcmVhdGVMb2NhdGlvblwiKTt9LFxyXG4gICAgZ2V0IFRpbWVzdGFtcHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJmcm9tVGltZXN0YW1wXCIpO30sXHJcbiAgICBnZXQgVGltZUZvcm1hdHRlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImRhdGVGb3JtYXRcIik7fSxcclxuXHJcbiAgICAvKiBTdHJpbmdzIGFuZCBVdGlscyAqL1xyXG4gICAgZ2V0IFN0cmluZ3MoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJNZXNzYWdlc1wiKS5NZXNzYWdlczt9LFxyXG4gICAgZ2V0IFN0cmluZ0Zvcm1hdHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJhXCIsIFwielwiKTt9LFxyXG4gICAgZ2V0IFN0cmluZ1V0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwidG9BU0NJSVwiKTt9LFxyXG5cclxuICAgIC8qIFVSTHMgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgVVJMUGFyc2VyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiVXJsXCIsIFwicGFyc2VcIik7fSxcclxuICAgIGdldCBFeHRyYVVSTHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRBcnRpY2xlVVJMXCIpO30sXHJcblxyXG4gICAgLyogRHJhZyAmIERyb3AgKi9cclxuICAgIGdldCBETkRBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiYmVnaW5EcmFnXCIpO30sXHJcbiAgICBnZXQgRE5EU291cmNlcygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFkZFRhcmdldFwiKTt9LFxyXG4gICAgZ2V0IERORE9iamVjdHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJEcmFnU291cmNlXCIpO30sXHJcblxyXG4gICAgLyogTWVkaWEgU3R1ZmYgKEF1ZGlvL1ZpZGVvKSAqL1xyXG4gICAgZ2V0IE1lZGlhRGV2aWNlSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIkNvZGVjc1wiLCBcIlNVUFBPUlRFRF9CUk9XU0VSU1wiKTt9LFxyXG4gICAgZ2V0IE1lZGlhSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE91dHB1dFZvbHVtZVwiKTt9LFxyXG4gICAgZ2V0IE1lZGlhRW5naW5lSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIk1lZGlhRW5naW5lRmVhdHVyZXNcIik7fSxcclxuICAgIGdldCBWb2ljZUluZm8oKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJFY2hvQ2FuY2VsbGF0aW9uXCIpO30sXHJcbiAgICBnZXQgVmlkZW9TdHJlYW0oKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRWaWRlb1N0cmVhbVwiKTt9LFxyXG4gICAgZ2V0IFNvdW5kTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicGxheVNvdW5kXCIpO30sXHJcblxyXG4gICAgLyogRWxlY3Ryb24gJiBPdGhlciBJbnRlcm5hbHMgd2l0aCBVdGlscyovXHJcbiAgICBnZXQgRWxlY3Ryb25Nb2R1bGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZXRCYWRnZVwiKTt9LFxyXG4gICAgZ2V0IERpc3BhdGNoZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJkaXJ0eURpc3BhdGNoXCIpO30sXHJcbiAgICBnZXQgUGF0aFV0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaGFzQmFzZW5hbWVcIik7fSxcclxuICAgIGdldCBOb3RpZmljYXRpb25Nb2R1bGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzaG93Tm90aWZpY2F0aW9uXCIpO30sXHJcbiAgICBnZXQgUm91dGVyTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiUm91dGVyXCIpO30sXHJcbiAgICBnZXQgQVBJTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QVBJQmFzZVVSTFwiKTt9LFxyXG4gICAgZ2V0IEFuYWx5dGljRXZlbnRzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiQW5hbHl0aWNFdmVudENvbmZpZ3NcIik7fSxcclxuICAgIGdldCBLZXlHZW5lcmF0b3IoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UmVnZXgoL1wiYmluYXJ5XCIvKTt9LFxyXG4gICAgZ2V0IEJ1ZmZlcnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJCdWZmZXJcIiwgXCJrTWF4TGVuZ3RoXCIpO30sXHJcbiAgICBnZXQgRGV2aWNlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXREZXZpY2VzXCIpO30sXHJcbiAgICBnZXQgU29mdHdhcmVJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwib3NcIik7fSxcclxuICAgIGdldCBDdXJyZW50Q29udGV4dCgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInNldFRhZ3NDb250ZXh0XCIpO30sXHJcblxyXG4gICAgLyogQ29tbW9ubHkgVXNlZCBDbGFzc2VzICovXHJcbiAgICBnZXQgR3VpbGRDbGFzc2VzKCkge1xyXG4gICAgICAgIGNvbnN0IGd1aWxkc1dyYXBwZXIgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwid3JhcHBlclwiLCBcInVucmVhZE1lbnRpb25zQmFyXCIpO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJndWlsZHNFcnJvclwiLCBcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgIGNvbnN0IHBpbGwgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiYmxvYkNvbnRhaW5lclwiKTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ3VpbGRzV3JhcHBlciwgZ3VpbGRzLCBwaWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0IExheWVyU3RhY2soKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJwdXNoTGF5ZXJcIik7fVxyXG59KTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/discordmodules.js\n"); /***/ }), @@ -423,6 +447,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), +/***/ "./src/modules/domtools.js": +/*!*********************************!*\ + !*** ./src/modules/domtools.js ***! + \*********************************/ +/*! exports provided: default */ +/***/ (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 DOMTools; });\n/**\r\n * Copyright 2018 Zachary Rauen\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the \"Software\"),\r\n * to deal in the Software without restriction, including without limitation the\r\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is furnished\r\n * to do so, subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\n * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\n * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\r\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\r\n * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n * \r\n * From: https://github.com/rauenzi/BDPluginLibrary\r\n */\n\n/**\r\n * @interface\r\n * @name Offset\r\n * @property {number} top - Top offset of the target element.\r\n * @property {number} right - Right offset of the target element.\r\n * @property {number} bottom - Bottom offset of the target element.\r\n * @property {number} left - Left offset of the target element.\r\n * @property {number} height - Outer height of the target element.\r\n * @property {number} width - Outer width of the target element.\r\n */\n\n/**\r\n* Function that automatically removes added listener.\r\n* @callback module:DOMTools~CancelListener\r\n*/\nclass DOMTools {\n static escapeID(id) {\n return id.replace(/^[^a-z]+|[^\\w-]+/gi, \"-\");\n }\n /**\r\n * Adds a style to the document.\r\n * @param {string} id - identifier to use as the element id\r\n * @param {string} css - css to add to the document\r\n */\n\n\n static addStyle(id, css) {\n document.head.append(DOMTools.createElement(``));\n }\n /**\r\n * Removes a style from the document.\r\n * @param {string} id - original identifier used\r\n */\n\n\n static removeStyle(id) {\n const element = document.getElementById(id);\n if (element) element.remove();\n }\n /**\r\n * Adds/requires a remote script to be loaded\r\n * @param {string} id - identifier to use for this script\r\n * @param {string} url - url from which to load the script\r\n * @returns {Promise} promise that resolves when the script is loaded\r\n */\n\n\n static addScript(id, url) {\n return new Promise(resolve => {\n const script = document.createElement(\"script\");\n script.id = id;\n script.src = url;\n script.type = \"text/javascript\";\n script.onload = resolve;\n document.head.append(script);\n });\n }\n /**\r\n * Removes a remote script from the document.\r\n * @param {string} id - original identifier used\r\n */\n\n\n static removeScript(id) {\n id = this.escapeID(id);\n const element = document.getElementById(id);\n if (element) element.remove();\n } // https://javascript.info/js-animation\n\n\n static animate({\n timing = _ => _,\n update,\n duration\n }) {\n const start = performance.now();\n requestAnimationFrame(function animate(time) {\n // timeFraction goes from 0 to 1\n let timeFraction = (time - start) / duration;\n if (timeFraction > 1) timeFraction = 1; // calculate the current animation state\n\n const progress = timing(timeFraction);\n update(progress); // draw it\n\n if (timeFraction < 1) {\n requestAnimationFrame(animate);\n }\n });\n }\n /**\r\n * This is my shit version of not having to use `$` from jQuery. Meaning\r\n * that you can pass a selector and it will automatically run {@link module:DOMTools.query}.\r\n * It also means that you can pass a string of html and it will perform and return `parseHTML`.\r\n * @see module:DOMTools.parseHTML\r\n * @see module:DOMTools.query\r\n * @param {string} selector - Selector to query or HTML to parse\r\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - Either the result of `parseHTML` or `query`\r\n */\n\n\n static Q(selector) {\n const element = this.parseHTML(selector);\n const isHTML = element instanceof NodeList ? Array.from(element).some(n => n.nodeType === 1) : element.nodeType === 1;\n if (isHTML) return element;\n return this.query(selector);\n }\n /**\r\n * Essentially a shorthand for `document.querySelector`. If the `baseElement` is not provided\r\n * `document` is used by default.\r\n * @param {string} selector - Selector to query\r\n * @param {Element} [baseElement] - Element to base the query from\r\n * @returns {(Element|null)} - The found element or null if not found\r\n */\n\n\n static query(selector, baseElement) {\n if (!baseElement) baseElement = document;\n return baseElement.querySelector(selector);\n }\n /**\r\n * Essentially a shorthand for `document.querySelectorAll`. If the `baseElement` is not provided\r\n * `document` is used by default.\r\n * @param {string} selector - Selector to query\r\n * @param {Element} [baseElement] - Element to base the query from\r\n * @returns {Array} - Array of all found elements\r\n */\n\n\n static queryAll(selector, baseElement) {\n if (!baseElement) baseElement = document;\n return baseElement.querySelectorAll(selector);\n }\n /**\r\n * Parses a string of HTML and returns the results. If the second parameter is true,\r\n * the parsed HTML will be returned as a document fragment {@see https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment}.\r\n * This is extremely useful if you have a list of elements at the top level, they can then be appended all at once to another node.\r\n * \r\n * If the second parameter is false, then the return value will be the list of parsed\r\n * nodes and there were multiple top level nodes, otherwise the single node is returned.\r\n * @param {string} html - HTML to be parsed\r\n * @param {boolean} [fragment=false] - Whether or not the return should be the raw `DocumentFragment`\r\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - The result of HTML parsing\r\n */\n\n\n static parseHTML(html, fragment = false) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n const node = template.content.cloneNode(true);\n if (fragment) return node;\n return node.childNodes.length > 1 ? node.childNodes : node.childNodes[0];\n }\n /** Alternate name for {@link module:DOMTools.parseHTML} */\n\n\n static createElement(html, fragment = false) {\n return this.parseHTML(html, fragment);\n }\n /**\r\n * Takes a string of html and escapes it using the brower's own escaping mechanism.\r\n * @param {String} html - html to be escaped\r\n */\n\n\n static escapeHTML(html) {\n const textNode = document.createTextNode(\"\");\n const spanElement = document.createElement(\"span\");\n spanElement.append(textNode);\n textNode.nodeValue = html;\n return spanElement.innerHTML;\n }\n /**\r\n * Adds a list of classes from the target element.\r\n * @param {Element} element - Element to edit classes of\r\n * @param {...string} classes - Names of classes to add\r\n * @returns {Element} - `element` to allow for chaining\r\n */\n\n\n static addClass(element, ...classes) {\n classes = classes.flat().filter(c => c);\n\n for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(\" \");\n\n classes = classes.flat().filter(c => c);\n element.classList.add(...classes);\n return element;\n }\n /**\r\n * Removes a list of classes from the target element.\r\n * @param {Element} element - Element to edit classes of\r\n * @param {...string} classes - Names of classes to remove\r\n * @returns {Element} - `element` to allow for chaining\r\n */\n\n\n static removeClass(element, ...classes) {\n for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(\" \");\n\n classes = classes.flat().filter(c => c);\n element.classList.remove(...classes);\n return element;\n }\n /**\r\n * When only one argument is present: Toggle class value;\r\n * i.e., if class exists then remove it and return false, if not, then add it and return true.\r\n * When a second argument is present:\r\n * If the second argument evaluates to true, add specified class value, and if it evaluates to false, remove it.\r\n * @param {Element} element - Element to edit classes of\r\n * @param {string} classname - Name of class to toggle\r\n * @param {boolean} [indicator] - Optional indicator for if the class should be toggled\r\n * @returns {Element} - `element` to allow for chaining\r\n */\n\n\n static toggleClass(element, classname, indicator) {\n classname = classname.toString().split(\" \").filter(c => c);\n if (typeof indicator !== \"undefined\") classname.forEach(c => element.classList.toggle(c, indicator));else classname.forEach(c => element.classList.toggle(c));\n return element;\n }\n /**\r\n * Checks if an element has a specific class\r\n * @param {Element} element - Element to edit classes of\r\n * @param {string} classname - Name of class to check\r\n * @returns {boolean} - `true` if the element has the class, `false` otherwise.\r\n */\n\n\n static hasClass(element, classname) {\n return classname.toString().split(\" \").filter(c => c).every(c => element.classList.contains(c));\n }\n /**\r\n * Replaces one class with another\r\n * @param {Element} element - Element to edit classes of\r\n * @param {string} oldName - Name of class to replace\r\n * @param {string} newName - New name for the class\r\n * @returns {Element} - `element` to allow for chaining\r\n */\n\n\n static replaceClass(element, oldName, newName) {\n element.classList.replace(oldName, newName);\n return element;\n }\n /**\r\n * Appends `thisNode` to `thatNode`\r\n * @param {Node} thisNode - Node to be appended to another node\r\n * @param {Node} thatNode - Node for `thisNode` to be appended to\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\n\n\n static appendTo(thisNode, thatNode) {\n if (typeof thatNode == \"string\") thatNode = this.query(thatNode);\n if (!thatNode) return null;\n thatNode.append(thisNode);\n return thisNode;\n }\n /**\r\n * Prepends `thisNode` to `thatNode`\r\n * @param {Node} thisNode - Node to be prepended to another node\r\n * @param {Node} thatNode - Node for `thisNode` to be prepended to\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\n\n\n static prependTo(thisNode, thatNode) {\n if (typeof thatNode == \"string\") thatNode = this.query(thatNode);\n if (!thatNode) return null;\n thatNode.prepend(thisNode);\n return thisNode;\n }\n /**\r\n * Insert after a specific element, similar to jQuery's `thisElement.insertAfter(otherElement)`.\r\n * @param {Node} thisNode - The node to insert\r\n * @param {Node} targetNode - Node to insert after in the tree\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\n\n\n static insertAfter(thisNode, targetNode) {\n targetNode.parentNode.insertBefore(thisNode, targetNode.nextSibling);\n return thisNode;\n }\n /**\r\n * Insert after a specific element, similar to jQuery's `thisElement.after(newElement)`.\r\n * @param {Node} thisNode - The node to insert\r\n * @param {Node} newNode - Node to insert after in the tree\r\n * @returns {Node} - `thisNode` to allow for chaining\r\n */\n\n\n static after(thisNode, newNode) {\n thisNode.parentNode.insertBefore(newNode, thisNode.nextSibling);\n return thisNode;\n }\n /**\r\n * Gets the next sibling element that matches the selector.\r\n * @param {Element} element - Element to get the next sibling of\r\n * @param {string} [selector=\"\"] - Optional selector\r\n * @returns {Element} - The sibling element\r\n */\n\n\n static next(element, selector = \"\") {\n return selector ? element.querySelector(\"+ \" + selector) : element.nextElementSibling;\n }\n /**\r\n * Gets all subsequent siblings.\r\n * @param {Element} element - Element to get next siblings of\r\n * @returns {NodeList} - The list of siblings\r\n */\n\n\n static nextAll(element) {\n return element.querySelectorAll(\"~ *\");\n }\n /**\r\n * Gets the subsequent siblings until an element matches the selector.\r\n * @param {Element} element - Element to get the following siblings of\r\n * @param {string} selector - Selector to stop at\r\n * @returns {Array} - The list of siblings\r\n */\n\n\n static nextUntil(element, selector) {\n const next = [];\n\n while (element.nextElementSibling && !element.nextElementSibling.matches(selector)) next.push(element = element.nextElementSibling);\n\n return next;\n }\n /**\r\n * Gets the previous sibling element that matches the selector.\r\n * @param {Element} element - Element to get the previous sibling of\r\n * @param {string} [selector=\"\"] - Optional selector\r\n * @returns {Element} - The sibling element\r\n */\n\n\n static previous(element, selector = \"\") {\n const previous = element.previousElementSibling;\n if (selector) return previous && previous.matches(selector) ? previous : null;\n return previous;\n }\n /**\r\n * Gets all preceeding siblings.\r\n * @param {Element} element - Element to get preceeding siblings of\r\n * @returns {NodeList} - The list of siblings\r\n */\n\n\n static previousAll(element) {\n const previous = [];\n\n while (element.previousElementSibling) previous.push(element = element.previousElementSibling);\n\n return previous;\n }\n /**\r\n * Gets the preceeding siblings until an element matches the selector.\r\n * @param {Element} element - Element to get the preceeding siblings of\r\n * @param {string} selector - Selector to stop at\r\n * @returns {Array} - The list of siblings\r\n */\n\n\n static previousUntil(element, selector) {\n const previous = [];\n\n while (element.previousElementSibling && !element.previousElementSibling.matches(selector)) previous.push(element = element.previousElementSibling);\n\n return previous;\n }\n /**\r\n * Find which index in children a certain node is. Similar to jQuery's `$.index()`\r\n * @param {HTMLElement} node - The node to find its index in parent\r\n * @returns {number} Index of the node\r\n */\n\n\n static indexInParent(node) {\n const children = node.parentNode.childNodes;\n let num = 0;\n\n for (let i = 0; i < children.length; i++) {\n if (children[i] == node) return num;\n if (children[i].nodeType == 1) num++;\n }\n\n return -1;\n }\n /** Shorthand for {@link module:DOMTools.indexInParent} */\n\n\n static index(node) {\n return this.indexInParent(node);\n }\n /**\r\n * Gets the parent of the element if it matches the selector,\r\n * otherwise returns null.\r\n * @param {Element} element - Element to get parent of\r\n * @param {string} [selector=\"\"] - Selector to match parent\r\n * @returns {(Element|null)} - The sibling element or null\r\n */\n\n\n static parent(element, selector = \"\") {\n return !selector || element.parentElement.matches(selector) ? element.parentElement : null;\n }\n /**\r\n * Gets all children of Element that match the selector if provided.\r\n * @param {Element} element - Element to get all children of\r\n * @param {string} selector - Selector to match the children to\r\n * @returns {Array} - The list of children\r\n */\n\n\n static findChild(element, selector) {\n return element.querySelector(\":scope > \" + selector);\n }\n /**\r\n * Gets all children of Element that match the selector if provided.\r\n * @param {Element} element - Element to get all children of\r\n * @param {string} selector - Selector to match the children to\r\n * @returns {Array} - The list of children\r\n */\n\n\n static findChildren(element, selector) {\n return element.querySelectorAll(\":scope > \" + selector);\n }\n /**\r\n * Gets all ancestors of Element that match the selector if provided.\r\n * @param {Element} element - Element to get all parents of\r\n * @param {string} [selector=\"\"] - Selector to match the parents to\r\n * @returns {Array} - The list of parents\r\n */\n\n\n static parents(element, selector = \"\") {\n const parents = [];\n if (selector) while (element.parentElement && element.parentElement.closest(selector)) parents.push(element = element.parentElement.closest(selector));else while (element.parentElement) parents.push(element = element.parentElement);\n return parents;\n }\n /**\r\n * Gets the ancestors until an element matches the selector.\r\n * @param {Element} element - Element to get the ancestors of\r\n * @param {string} selector - Selector to stop at\r\n * @returns {Array} - The list of parents\r\n */\n\n\n static parentsUntil(element, selector) {\n const parents = [];\n\n while (element.parentElement && !element.parentElement.matches(selector)) parents.push(element = element.parentElement);\n\n return parents;\n }\n /**\r\n * Gets all siblings of the element that match the selector.\r\n * @param {Element} element - Element to get all siblings of\r\n * @param {string} [selector=\"*\"] - Selector to match the siblings to\r\n * @returns {Array} - The list of siblings\r\n */\n\n\n static siblings(element, selector = \"*\") {\n return Array.from(element.parentElement.children).filter(e => e != element && e.matches(selector));\n }\n /**\r\n * Sets or gets css styles for a specific element. If `value` is provided\r\n * then it sets the style and returns the element to allow for chaining,\r\n * otherwise returns the style. \r\n * @param {Element} element - Element to set the CSS of\r\n * @param {string} attribute - Attribute to get or set\r\n * @param {string} [value] - Value to set for attribute\r\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\r\n */\n\n\n static css(element, attribute, value) {\n if (typeof value == \"undefined\") return global.getComputedStyle(element)[attribute];\n element.style[attribute] = value;\n return element;\n }\n /**\r\n * Sets or gets the width for a specific element. If `value` is provided\r\n * then it sets the width and returns the element to allow for chaining,\r\n * otherwise returns the width. \r\n * @param {Element} element - Element to set the CSS of\r\n * @param {string} [value] - Width to set\r\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\r\n */\n\n\n static width(element, value) {\n if (typeof value == \"undefined\") return parseInt(getComputedStyle(element).width);\n element.style.width = value;\n return element;\n }\n /**\r\n * Sets or gets the height for a specific element. If `value` is provided\r\n * then it sets the height and returns the element to allow for chaining,\r\n * otherwise returns the height. \r\n * @param {Element} element - Element to set the CSS of\r\n * @param {string} [value] - Height to set\r\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\r\n */\n\n\n static height(element, value) {\n if (typeof value == \"undefined\") return parseInt(getComputedStyle(element).height);\n element.style.height = value;\n return element;\n }\n /**\r\n * Sets the inner text of an element if given a value, otherwise returns it.\r\n * @param {Element} element - Element to set the text of\r\n * @param {string} [text] - Content to set\r\n * @returns {string} - Either the string set by this call or the current text content of the node.\r\n */\n\n\n static text(element, text) {\n if (typeof text == \"undefined\") return element.textContent;\n return element.textContent = text;\n }\n /**\r\n * Returns the innerWidth of the element.\r\n * @param {Element} element - Element to retrieve inner width of\r\n * @return {number} - The inner width of the element.\r\n */\n\n\n static innerWidth(element) {\n return element.clientWidth;\n }\n /**\r\n * Returns the innerHeight of the element.\r\n * @param {Element} element - Element to retrieve inner height of\r\n * @return {number} - The inner height of the element.\r\n */\n\n\n static innerHeight(element) {\n return element.clientHeight;\n }\n /**\r\n * Returns the outerWidth of the element.\r\n * @param {Element} element - Element to retrieve outer width of\r\n * @return {number} - The outer width of the element.\r\n */\n\n\n static outerWidth(element) {\n return element.offsetWidth;\n }\n /**\r\n * Returns the outerHeight of the element.\r\n * @param {Element} element - Element to retrieve outer height of\r\n * @return {number} - The outer height of the element.\r\n */\n\n\n static outerHeight(element) {\n return element.offsetHeight;\n }\n /**\r\n * Gets the offset of the element in the page.\r\n * @param {Element} element - Element to get offset of\r\n * @return {Offset} - The offset of the element\r\n */\n\n\n static offset(element) {\n return element.getBoundingClientRect();\n }\n\n static get listeners() {\n return this._listeners || (this._listeners = {});\n }\n /**\r\n * This is similar to jQuery's `on` function and can *hopefully* be used in the same way.\r\n * \r\n * Rather than attempt to explain, I'll show some example usages.\r\n * \r\n * The following will add a click listener (in the `myPlugin` namespace) to `element`.\r\n * `DOMTools.on(element, \"click.myPlugin\", () => {console.log(\"clicked!\");});`\r\n * \r\n * The following will add a click listener (in the `myPlugin` namespace) to `element` that only fires when the target is a `.block` element.\r\n * `DOMTools.on(element, \"click.myPlugin\", \".block\", () => {console.log(\"clicked!\");});`\r\n * \r\n * The following will add a click listener (without namespace) to `element`.\r\n * `DOMTools.on(element, \"click\", () => {console.log(\"clicked!\");});`\r\n * \r\n * The following will add a click listener (without namespace) to `element` that only fires once.\r\n * `const cancel = DOMTools.on(element, \"click\", () => {console.log(\"fired!\"); cancel();});`\r\n * \r\n * @param {Element} element - Element to add listener to\r\n * @param {string} event - Event to listen to with option namespace (e.g. \"event.namespace\")\r\n * @param {(string|callable)} delegate - Selector to run on element to listen to\r\n * @param {callable} [callback] - Function to fire on event\r\n * @returns {module:DOMTools~CancelListener} - A function that will undo the listener\r\n */\n\n\n static on(element, event, delegate, callback) {\n const [type, namespace] = event.split(\".\");\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? callback : function (event) {\n if (event.target.matches(delegate)) {\n callback(event);\n }\n };\n element.addEventListener(type, eventFunc);\n\n const cancel = () => {\n element.removeEventListener(type, eventFunc);\n };\n\n if (namespace) {\n if (!this.listeners[namespace]) this.listeners[namespace] = [];\n\n const newCancel = () => {\n cancel();\n this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1);\n };\n\n this.listeners[namespace].push({\n event: type,\n element: element,\n cancel: newCancel\n });\n return newCancel;\n }\n\n return cancel;\n }\n /**\r\n * Functionality for this method matches {@link module:DOMTools.on} but automatically cancels itself\r\n * and removes the listener upon the first firing of the desired event.\r\n * \r\n * @param {Element} element - Element to add listener to\r\n * @param {string} event - Event to listen to with option namespace (e.g. \"event.namespace\")\r\n * @param {(string|callable)} delegate - Selector to run on element to listen to\r\n * @param {callable} [callback] - Function to fire on event\r\n * @returns {module:DOMTools~CancelListener} - A function that will undo the listener\r\n */\n\n\n static once(element, event, delegate, callback) {\n const [type, namespace] = event.split(\".\");\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? function (event) {\n callback(event);\n element.removeEventListener(type, eventFunc);\n } : function (event) {\n if (!event.target.matches(delegate)) return;\n callback(event);\n element.removeEventListener(type, eventFunc);\n };\n element.addEventListener(type, eventFunc);\n\n const cancel = () => {\n element.removeEventListener(type, eventFunc);\n };\n\n if (namespace) {\n if (!this.listeners[namespace]) this.listeners[namespace] = [];\n\n const newCancel = () => {\n cancel();\n this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1);\n };\n\n this.listeners[namespace].push({\n event: type,\n element: element,\n cancel: newCancel\n });\n return newCancel;\n }\n\n return cancel;\n }\n\n static __offAll(event, element) {\n const [type, namespace] = event.split(\".\");\n\n let matchFilter = listener => listener.event == type,\n defaultFilter = _ => _;\n\n if (element) matchFilter = l => l.event == type && l.element == element, defaultFilter = l => l.element == element;\n const listeners = this.listeners[namespace] || [];\n const list = type ? listeners.filter(matchFilter) : listeners.filter(defaultFilter);\n\n for (let c = 0; c < list.length; c++) list[c].cancel();\n }\n /**\r\n * This is similar to jQuery's `off` function and can *hopefully* be used in the same way.\r\n * \r\n * Rather than attempt to explain, I'll show some example usages.\r\n * \r\n * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element`.\r\n * `DOMTools.off(element, \"click.myPlugin\", onClick);`\r\n * \r\n * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element` that only fired when the target is a `.block` element.\r\n * `DOMTools.off(element, \"click.myPlugin\", \".block\", onClick);`\r\n * \r\n * The following will remove a click listener (without namespace) from `element`.\r\n * `DOMTools.off(element, \"click\", onClick);`\r\n * \r\n * The following will remove all listeners in namespace `myPlugin` from `element`.\r\n * `DOMTools.off(element, \".myPlugin\");`\r\n * \r\n * The following will remove all click listeners in namespace `myPlugin` from *all elements*.\r\n * `DOMTools.off(\"click.myPlugin\");`\r\n * \r\n * The following will remove all listeners in namespace `myPlugin` from *all elements*.\r\n * `DOMTools.off(\".myPlugin\");`\r\n * \r\n * @param {(Element|string)} element - Element to remove listener from\r\n * @param {string} [event] - Event to listen to with option namespace (e.g. \"event.namespace\")\r\n * @param {(string|callable)} [delegate] - Selector to run on element to listen to\r\n * @param {callable} [callback] - Function to fire on event\r\n * @returns {Element} - The original element to allow for chaining\r\n */\n\n\n static off(element, event, delegate, callback) {\n if (typeof element == \"string\") return this.__offAll(element);\n const [type, namespace] = event.split(\".\");\n if (namespace) return this.__offAll(event, element);\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? callback : function (event) {\n if (event.target.matches(delegate)) {\n callback(event);\n }\n };\n element.removeEventListener(type, eventFunc);\n return element;\n }\n /**\r\n * Adds a listener for when the node is added/removed from the document body.\r\n * The listener is automatically removed upon firing.\r\n * @param {HTMLElement} node - node to wait for\r\n * @param {callable} callback - function to be performed on event\r\n * @param {boolean} onMount - determines if it should fire on Mount or on Unmount\r\n */\n\n\n static onMountChange(node, callback, onMount = true) {\n const wrappedCallback = () => {\n this.observer.unsubscribe(wrappedCallback);\n callback();\n };\n\n this.observer.subscribe(wrappedCallback, mutation => {\n const nodes = Array.from(onMount ? mutation.addedNodes : mutation.removedNodes);\n const directMatch = nodes.indexOf(node) > -1;\n const parentMatch = nodes.some(parent => parent.contains(node));\n return directMatch || parentMatch;\n });\n return node;\n }\n /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `true` */\n\n\n static onMount(node, callback) {\n return this.onMountChange(node, callback);\n }\n /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `false` */\n\n\n static onUnmount(node, callback) {\n return this.onMountChange(node, callback, false);\n }\n /** Alias for {@link module:DOMTools.onMount} */\n\n\n static onAdded(node, callback) {\n return this.onMount(node, callback);\n }\n /** Alias for {@link module:DOMTools.onUnmount} */\n\n\n static onRemoved(node, callback) {\n return this.onUnmount(node, callback, false);\n }\n /**\r\n * Helper function which combines multiple elements into one parent element\r\n * @param {Array} elements - array of elements to put into a single parent\r\n */\n\n\n static wrap(elements) {\n const domWrapper = this.parseHTML(`
`);\n\n for (let e = 0; e < elements.length; e++) domWrapper.appendChild(elements[e]);\n\n return domWrapper;\n }\n /**\r\n * Resolves the node to an HTMLElement. This is mainly used by library modules.\r\n * @param {(jQuery|Element)} node - node to resolve\r\n */\n\n\n static resolveElement(node) {\n if (!(node instanceof jQuery) && !(node instanceof Element)) return undefined;\n return node instanceof jQuery ? node[0] : node;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvZG9tdG9vbHMuanM/MTNkZCJdLCJuYW1lcyI6WyJET01Ub29scyIsImVzY2FwZUlEIiwiaWQiLCJyZXBsYWNlIiwiYWRkU3R5bGUiLCJjc3MiLCJkb2N1bWVudCIsImhlYWQiLCJhcHBlbmQiLCJjcmVhdGVFbGVtZW50IiwicmVtb3ZlU3R5bGUiLCJlbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJyZW1vdmUiLCJhZGRTY3JpcHQiLCJ1cmwiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNjcmlwdCIsInNyYyIsInR5cGUiLCJvbmxvYWQiLCJyZW1vdmVTY3JpcHQiLCJhbmltYXRlIiwidGltaW5nIiwiXyIsInVwZGF0ZSIsImR1cmF0aW9uIiwic3RhcnQiLCJwZXJmb3JtYW5jZSIsIm5vdyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInRpbWUiLCJ0aW1lRnJhY3Rpb24iLCJwcm9ncmVzcyIsIlEiLCJzZWxlY3RvciIsInBhcnNlSFRNTCIsImlzSFRNTCIsIk5vZGVMaXN0IiwiQXJyYXkiLCJmcm9tIiwic29tZSIsIm4iLCJub2RlVHlwZSIsInF1ZXJ5IiwiYmFzZUVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlBbGwiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaHRtbCIsImZyYWdtZW50IiwidGVtcGxhdGUiLCJpbm5lckhUTUwiLCJub2RlIiwiY29udGVudCIsImNsb25lTm9kZSIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJlc2NhcGVIVE1MIiwidGV4dE5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsInNwYW5FbGVtZW50Iiwibm9kZVZhbHVlIiwiYWRkQ2xhc3MiLCJjbGFzc2VzIiwiZmxhdCIsImZpbHRlciIsImMiLCJ0b1N0cmluZyIsInNwbGl0IiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsImNsYXNzbmFtZSIsImluZGljYXRvciIsImZvckVhY2giLCJ0b2dnbGUiLCJoYXNDbGFzcyIsImV2ZXJ5IiwiY29udGFpbnMiLCJyZXBsYWNlQ2xhc3MiLCJvbGROYW1lIiwibmV3TmFtZSIsImFwcGVuZFRvIiwidGhpc05vZGUiLCJ0aGF0Tm9kZSIsInByZXBlbmRUbyIsInByZXBlbmQiLCJpbnNlcnRBZnRlciIsInRhcmdldE5vZGUiLCJwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJhZnRlciIsIm5ld05vZGUiLCJuZXh0IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwibmV4dEFsbCIsIm5leHRVbnRpbCIsIm1hdGNoZXMiLCJwdXNoIiwicHJldmlvdXMiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNBbGwiLCJwcmV2aW91c1VudGlsIiwiaW5kZXhJblBhcmVudCIsImNoaWxkcmVuIiwibnVtIiwiaSIsImluZGV4IiwicGFyZW50IiwicGFyZW50RWxlbWVudCIsImZpbmRDaGlsZCIsImZpbmRDaGlsZHJlbiIsInBhcmVudHMiLCJjbG9zZXN0IiwicGFyZW50c1VudGlsIiwic2libGluZ3MiLCJlIiwiYXR0cmlidXRlIiwidmFsdWUiLCJnbG9iYWwiLCJnZXRDb21wdXRlZFN0eWxlIiwic3R5bGUiLCJ3aWR0aCIsInBhcnNlSW50IiwiaGVpZ2h0IiwidGV4dCIsInRleHRDb250ZW50IiwiaW5uZXJXaWR0aCIsImNsaWVudFdpZHRoIiwiaW5uZXJIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJvdXRlcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJvdXRlckhlaWdodCIsIm9mZnNldEhlaWdodCIsIm9mZnNldCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxpc3RlbmVycyIsIl9saXN0ZW5lcnMiLCJvbiIsImV2ZW50IiwiZGVsZWdhdGUiLCJjYWxsYmFjayIsIm5hbWVzcGFjZSIsImhhc0RlbGVnYXRlIiwiZXZlbnRGdW5jIiwidGFyZ2V0IiwiYWRkRXZlbnRMaXN0ZW5lciIsImNhbmNlbCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJuZXdDYW5jZWwiLCJzcGxpY2UiLCJmaW5kSW5kZXgiLCJsIiwib25jZSIsIl9fb2ZmQWxsIiwibWF0Y2hGaWx0ZXIiLCJsaXN0ZW5lciIsImRlZmF1bHRGaWx0ZXIiLCJsaXN0Iiwib2ZmIiwib25Nb3VudENoYW5nZSIsIm9uTW91bnQiLCJ3cmFwcGVkQ2FsbGJhY2siLCJvYnNlcnZlciIsInVuc3Vic2NyaWJlIiwic3Vic2NyaWJlIiwibXV0YXRpb24iLCJub2RlcyIsImFkZGVkTm9kZXMiLCJyZW1vdmVkTm9kZXMiLCJkaXJlY3RNYXRjaCIsImluZGV4T2YiLCJwYXJlbnRNYXRjaCIsIm9uVW5tb3VudCIsIm9uQWRkZWQiLCJvblJlbW92ZWQiLCJ3cmFwIiwiZWxlbWVudHMiLCJkb21XcmFwcGVyIiwiYXBwZW5kQ2hpbGQiLCJyZXNvbHZlRWxlbWVudCIsImpRdWVyeSIsIkVsZW1lbnQiLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QkE7Ozs7Ozs7Ozs7O0FBV0M7Ozs7QUFLYyxNQUFNQSxRQUFOLENBQWU7QUFFMUIsU0FBT0MsUUFBUCxDQUFnQkMsRUFBaEIsRUFBb0I7QUFDaEIsV0FBT0EsRUFBRSxDQUFDQyxPQUFILENBQVcsb0JBQVgsRUFBaUMsR0FBakMsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7QUFLSCxTQUFPQyxRQUFQLENBQWdCRixFQUFoQixFQUFvQkcsR0FBcEIsRUFBeUI7QUFDeEJDLFlBQVEsQ0FBQ0MsSUFBVCxDQUFjQyxNQUFkLENBQXFCUixRQUFRLENBQUNTLGFBQVQsQ0FBd0IsY0FBYVAsRUFBRyxLQUFJRyxHQUFJLFVBQWhELENBQXJCO0FBQ0E7QUFFRDs7Ozs7O0FBSUEsU0FBT0ssV0FBUCxDQUFtQlIsRUFBbkIsRUFBdUI7QUFDdEIsVUFBTVMsT0FBTyxHQUFHTCxRQUFRLENBQUNNLGNBQVQsQ0FBd0JWLEVBQXhCLENBQWhCO0FBQ0EsUUFBSVMsT0FBSixFQUFhQSxPQUFPLENBQUNFLE1BQVI7QUFDYjtBQUVE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QXVCRixRQUFRLENBQUM5RCxDQUFELENBQS9COztBQUMxQyxXQUFPK0QsVUFBUDtBQUNIO0FBRUQ7Ozs7OztBQUlBLFNBQU9FLGNBQVAsQ0FBc0JuSSxJQUF0QixFQUE0QjtBQUN4QixRQUFJLEVBQUVBLElBQUksWUFBWW9JLE1BQWxCLEtBQTZCLEVBQUVwSSxJQUFJLFlBQVlxSSxPQUFsQixDQUFqQyxFQUE2RCxPQUFPQyxTQUFQO0FBQzdELFdBQU90SSxJQUFJLFlBQVlvSSxNQUFoQixHQUF5QnBJLElBQUksQ0FBQyxDQUFELENBQTdCLEdBQW1DQSxJQUExQztBQUNIOztBQXhzQnlCIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvZG9tdG9vbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29weXJpZ2h0IDIwMTggWmFjaGFyeSBSYXVlblxyXG4gKlxyXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcclxuICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXHJcbiAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXHJcbiAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXHJcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWRcclxuICogdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxyXG4gKlxyXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcclxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cclxuICpcclxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELFxyXG4gKiBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQVxyXG4gKiBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUXHJcbiAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRlxyXG4gKiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkVcclxuICogT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXHJcbiAqIFxyXG4gKiBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CRFBsdWdpbkxpYnJhcnlcclxuICovXHJcblxyXG4vKipcclxuICogQGludGVyZmFjZVxyXG4gKiBAbmFtZSBPZmZzZXRcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRvcCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmlnaHQgLSBSaWdodCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gYm90dG9tIC0gQm90dG9tIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gTGVmdCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gT3V0ZXIgaGVpZ2h0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gT3V0ZXIgd2lkdGggb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKi9cclxuXHJcbiAvKipcclxuICogRnVuY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgYWRkZWQgbGlzdGVuZXIuXHJcbiAqIEBjYWxsYmFjayBtb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJcclxuICovXHJcbiBcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRE9NVG9vbHMge1xyXG5cclxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xyXG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG5cdCAqIEFkZHMgYSBzdHlsZSB0byB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgYXMgdGhlIGVsZW1lbnQgaWRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY3NzIC0gY3NzIHRvIGFkZCB0byB0aGUgZG9jdW1lbnRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU3R5bGUoaWQsIGNzcykge1xyXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoRE9NVG9vbHMuY3JlYXRlRWxlbWVudChgPHN0eWxlIGlkPVwiJHtpZH1cIj4ke2Nzc308L3N0eWxlPmApKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSBzdHlsZSBmcm9tIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBvcmlnaW5hbCBpZGVudGlmaWVyIHVzZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgcmVtb3ZlU3R5bGUoaWQpIHtcclxuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcblx0XHRpZiAoZWxlbWVudCkgZWxlbWVudC5yZW1vdmUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZHMvcmVxdWlyZXMgYSByZW1vdGUgc2NyaXB0IHRvIGJlIGxvYWRlZFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkZW50aWZpZXIgdG8gdXNlIGZvciB0aGlzIHNjcmlwdFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSB1cmwgZnJvbSB3aGljaCB0byBsb2FkIHRoZSBzY3JpcHRcclxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNjcmlwdCBpcyBsb2FkZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU2NyaXB0KGlkLCB1cmwpIHtcclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuXHRcdFx0Y29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcclxuXHRcdFx0c2NyaXB0LmlkID0gaWQ7XHJcblx0XHRcdHNjcmlwdC5zcmMgPSB1cmw7XHJcblx0XHRcdHNjcmlwdC50eXBlID0gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcclxuXHRcdFx0c2NyaXB0Lm9ubG9hZCA9IHJlc29sdmU7XHJcblx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKHNjcmlwdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSByZW1vdGUgc2NyaXB0IGZyb20gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVTY3JpcHQoaWQpIHtcclxuICAgICAgICBpZCA9IHRoaXMuZXNjYXBlSUQoaWQpO1xyXG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBodHRwczovL2phdmFzY3JpcHQuaW5mby9qcy1hbmltYXRpb25cclxuICAgIHN0YXRpYyBhbmltYXRlKHt0aW1pbmcgPSBfID0+IF8sIHVwZGF0ZSwgZHVyYXRpb259KSB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgICAgXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xyXG4gICAgICAgICAgLy8gdGltZUZyYWN0aW9uIGdvZXMgZnJvbSAwIHRvIDFcclxuICAgICAgICAgIGxldCB0aW1lRnJhY3Rpb24gPSAodGltZSAtIHN0YXJ0KSAvIGR1cmF0aW9uO1xyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA+IDEpIHRpbWVGcmFjdGlvbiA9IDE7XHJcbiAgICAgIFxyXG4gICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZVxyXG4gICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSB0aW1pbmcodGltZUZyYWN0aW9uKTtcclxuICAgICAgXHJcbiAgICAgICAgICB1cGRhdGUocHJvZ3Jlc3MpOyAvLyBkcmF3IGl0XHJcbiAgICAgIFxyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA8IDEpIHtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBteSBzaGl0IHZlcnNpb24gb2Ygbm90IGhhdmluZyB0byB1c2UgYCRgIGZyb20galF1ZXJ5LiBNZWFuaW5nXHJcbiAgICAgKiB0aGF0IHlvdSBjYW4gcGFzcyBhIHNlbGVjdG9yIGFuZCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIHtAbGluayBtb2R1bGU6RE9NVG9vbHMucXVlcnl9LlxyXG4gICAgICogSXQgYWxzbyBtZWFucyB0aGF0IHlvdSBjYW4gcGFzcyBhIHN0cmluZyBvZiBodG1sIGFuZCBpdCB3aWxsIHBlcmZvcm0gYW5kIHJldHVybiBgcGFyc2VIVE1MYC5cclxuICAgICAqIEBzZWUgbW9kdWxlOkRPTVRvb2xzLnBhcnNlSFRNTFxyXG4gICAgICogQHNlZSBtb2R1bGU6RE9NVG9vbHMucXVlcnlcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5IG9yIEhUTUwgdG8gcGFyc2VcclxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gRWl0aGVyIHRoZSByZXN1bHQgb2YgYHBhcnNlSFRNTGAgb3IgYHF1ZXJ5YFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgUShzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBhcnNlSFRNTChzZWxlY3Rvcik7XHJcbiAgICAgICAgY29uc3QgaXNIVE1MID0gZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0ID8gQXJyYXkuZnJvbShlbGVtZW50KS5zb21lKG4gPT4gbi5ub2RlVHlwZSA9PT0gMSkgOiBlbGVtZW50Lm5vZGVUeXBlID09PSAxO1xyXG4gICAgICAgIGlmIChpc0hUTUwpIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzc2VudGlhbGx5IGEgc2hvcnRoYW5kIGZvciBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAuIElmIHRoZSBgYmFzZUVsZW1lbnRgIGlzIG5vdCBwcm92aWRlZFxyXG4gICAgICogYGRvY3VtZW50YCBpcyB1c2VkIGJ5IGRlZmF1bHQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBbYmFzZUVsZW1lbnRdIC0gRWxlbWVudCB0byBiYXNlIHRoZSBxdWVyeSBmcm9tXHJcbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIGZvdW5kIGVsZW1lbnQgb3IgbnVsbCBpZiBub3QgZm91bmRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5KHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXHJcbiAgICAgKiBgZG9jdW1lbnRgIGlzIHVzZWQgYnkgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBBcnJheSBvZiBhbGwgZm91bmQgZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5QWxsKHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIG9mIEhUTUwgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMuIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRydWUsXHJcbiAgICAgKiB0aGUgcGFyc2VkIEhUTUwgd2lsbCBiZSByZXR1cm5lZCBhcyBhIGRvY3VtZW50IGZyYWdtZW50IHtAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudEZyYWdtZW50fS5cclxuICAgICAqIFRoaXMgaXMgZXh0cmVtZWx5IHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIGxpc3Qgb2YgZWxlbWVudHMgYXQgdGhlIHRvcCBsZXZlbCwgdGhleSBjYW4gdGhlbiBiZSBhcHBlbmRlZCBhbGwgYXQgb25jZSB0byBhbm90aGVyIG5vZGUuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGZhbHNlLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB0aGUgbGlzdCBvZiBwYXJzZWRcclxuICAgICAqIG5vZGVzIGFuZCB0aGVyZSB3ZXJlIG11bHRpcGxlIHRvcCBsZXZlbCBub2Rlcywgb3RoZXJ3aXNlIHRoZSBzaW5nbGUgbm9kZSBpcyByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gSFRNTCB0byBiZSBwYXJzZWRcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZyYWdtZW50PWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRoZSByZXR1cm4gc2hvdWxkIGJlIHRoZSByYXcgYERvY3VtZW50RnJhZ21lbnRgXHJcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIFRoZSByZXN1bHQgb2YgSFRNTCBwYXJzaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xyXG4gICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgIGlmIChmcmFnbWVudCkgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAxID8gbm9kZS5jaGlsZE5vZGVzIDogbm9kZS5jaGlsZE5vZGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBBbHRlcm5hdGUgbmFtZSBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUx9ICovXHJcbiAgICBzdGF0aWMgY3JlYXRlRWxlbWVudChodG1sLCBmcmFnbWVudCA9IGZhbHNlKSB7cmV0dXJuIHRoaXMucGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50KTt9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSBzdHJpbmcgb2YgaHRtbCBhbmQgZXNjYXBlcyBpdCB1c2luZyB0aGUgYnJvd2VyJ3Mgb3duIGVzY2FwaW5nIG1lY2hhbmlzbS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIC0gaHRtbCB0byBiZSBlc2NhcGVkXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlc2NhcGVIVE1MKGh0bWwpIHtcclxuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XHJcbiAgICAgICAgc3BhbkVsZW1lbnQuYXBwZW5kKHRleHROb2RlKTtcclxuICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSBodG1sO1xyXG4gICAgICAgIHJldHVybiBzcGFuRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byBhZGRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFkZENsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gY2xhc3NlcyAtIE5hbWVzIG9mIGNsYXNzZXMgdG8gcmVtb3ZlXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZW1vdmVDbGFzcyhlbGVtZW50LCAuLi5jbGFzc2VzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwcmVzZW50OiBUb2dnbGUgY2xhc3MgdmFsdWU7XHJcbiAgICAgKiBpLmUuLCBpZiBjbGFzcyBleGlzdHMgdGhlbiByZW1vdmUgaXQgYW5kIHJldHVybiBmYWxzZSwgaWYgbm90LCB0aGVuIGFkZCBpdCBhbmQgcmV0dXJuIHRydWUuXHJcbiAgICAgKiBXaGVuIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQ6XHJcbiAgICAgKiBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGV2YWx1YXRlcyB0byB0cnVlLCBhZGQgc3BlY2lmaWVkIGNsYXNzIHZhbHVlLCBhbmQgaWYgaXQgZXZhbHVhdGVzIHRvIGZhbHNlLCByZW1vdmUgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gdG9nZ2xlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmRpY2F0b3JdIC0gT3B0aW9uYWwgaW5kaWNhdG9yIGZvciBpZiB0aGUgY2xhc3Mgc2hvdWxkIGJlIHRvZ2dsZWRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRvZ2dsZUNsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSwgaW5kaWNhdG9yKSB7XHJcbiAgICAgICAgY2xhc3NuYW1lID0gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGlmICh0eXBlb2YoaW5kaWNhdG9yKSAhPT0gXCJ1bmRlZmluZWRcIikgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYywgaW5kaWNhdG9yKSk7XHJcbiAgICAgICAgZWxzZSBjbGFzc25hbWUuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjKSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYSBzcGVjaWZpYyBjbGFzc1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc25hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBjbGFzcywgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc25hbWUpIHtcclxuICAgICAgICByZXR1cm4gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpLmV2ZXJ5KGMgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoYykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZXMgb25lIGNsYXNzIHdpdGggYW5vdGhlclxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROYW1lIC0gTmFtZSBvZiBjbGFzcyB0byByZXBsYWNlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIGZvciB0aGUgY2xhc3NcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlcGxhY2VDbGFzcyhlbGVtZW50LCBvbGROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZShvbGROYW1lLCBuZXdOYW1lKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gTm9kZSB0byBiZSBhcHBlbmRlZCB0byBhbm90aGVyIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIGFwcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXBwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcclxuICAgICAgICBpZiAoIXRoYXROb2RlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB0aGF0Tm9kZS5hcHBlbmQodGhpc05vZGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXBlbmRzIGB0aGlzTm9kZWAgdG8gYHRoYXROb2RlYFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIE5vZGUgdG8gYmUgcHJlcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGF0Tm9kZSAtIE5vZGUgZm9yIGB0aGlzTm9kZWAgdG8gYmUgcHJlcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJlcGVuZFRvKHRoaXNOb2RlLCB0aGF0Tm9kZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodGhhdE5vZGUpID09IFwic3RyaW5nXCIpIHRoYXROb2RlID0gdGhpcy5xdWVyeSh0aGF0Tm9kZSk7XHJcbiAgICAgICAgaWYgKCF0aGF0Tm9kZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhhdE5vZGUucHJlcGVuZCh0aGlzTm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuaW5zZXJ0QWZ0ZXIob3RoZXJFbGVtZW50KWAuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gVGhlIG5vZGUgdG8gaW5zZXJ0XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRhcmdldE5vZGUgLSBOb2RlIHRvIGluc2VydCBhZnRlciBpbiB0aGUgdHJlZVxyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGluc2VydEFmdGVyKHRoaXNOb2RlLCB0YXJnZXROb2RlKSB7XHJcbiAgICAgICAgdGFyZ2V0Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzTm9kZSwgdGFyZ2V0Tm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuYWZ0ZXIobmV3RWxlbWVudClgLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBuZXdOb2RlIC0gTm9kZSB0byBpbnNlcnQgYWZ0ZXIgaW4gdGhlIHRyZWVcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhZnRlcih0aGlzTm9kZSwgbmV3Tm9kZSkge1xyXG4gICAgICAgIHRoaXNOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHRoaXNOb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIG5leHQgc2libGluZyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgc2libGluZyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiBzZWxlY3RvciA/IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIisgXCIgKyBzZWxlY3RvcikgOiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHN1YnNlcXVlbnQgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBuZXh0IHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRBbGwoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ+ICpcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdWJzZXF1ZW50IHNpYmxpbmdzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgZm9sbG93aW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBbXTsgXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nICYmICFlbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgbmV4dC5wdXNoKGVsZW1lbnQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5leHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gT3B0aW9uYWwgc2VsZWN0b3JcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBzaWJsaW5nIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgIGlmIChzZWxlY3RvcikgcmV0dXJuIHByZXZpb3VzICYmIHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpID8gcHJldmlvdXMgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHByZWNlZWRpbmcgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBwcmVjZWVkaW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzQWxsKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHByZXZpb3VzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIHByZWNlZWRpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXNVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gW107IFxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgIWVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kIHdoaWNoIGluZGV4IGluIGNoaWxkcmVuIGEgY2VydGFpbiBub2RlIGlzLiBTaW1pbGFyIHRvIGpRdWVyeSdzIGAkLmluZGV4KClgXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gVGhlIG5vZGUgdG8gZmluZCBpdHMgaW5kZXggaW4gcGFyZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbm9kZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5kZXhJblBhcmVudChub2RlKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICBsZXQgbnVtID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXSA9PSBub2RlKSByZXR1cm4gbnVtO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubm9kZVR5cGUgPT0gMSkgbnVtKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLmluZGV4SW5QYXJlbnR9ICovXHJcbiAgICBzdGF0aWMgaW5kZXgobm9kZSkge3JldHVybiB0aGlzLmluZGV4SW5QYXJlbnQobm9kZSk7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50IGlmIGl0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgbnVsbC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHBhcmVudCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHBhcmVudFxyXG4gICAgICogQHJldHVybnMgeyhFbGVtZW50fG51bGwpfSAtIFRoZSBzaWJsaW5nIGVsZW1lbnQgb3IgbnVsbFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiAhc2VsZWN0b3IgfHwgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpID8gZWxlbWVudC5wYXJlbnRFbGVtZW50IDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBjaGlsZHJlbiB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kQ2hpbGQoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIGNoaWxkcmVuIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgY2hpbGRyZW4gdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBjaGlsZHJlblxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZENoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIjpzY29wZSA+IFwiICsgc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgYW5jZXN0b3JzIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgcGFyZW50cyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBwYXJlbnRzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50cyhlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xvc2VzdChzZWxlY3RvcikpO1xyXG4gICAgICAgIGVsc2Ugd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYW5jZXN0b3JzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgYW5jZXN0b3JzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50c1VudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgIWVsZW1lbnQucGFyZW50RWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgc2libGluZ3Mgb2YgdGhlIGVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCIqXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHNpYmxpbmdzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNpYmxpbmdzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCIqXCIpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihlID0+IGUgIT0gZWxlbWVudCAmJiBlLm1hdGNoZXMoc2VsZWN0b3IpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyBjc3Mgc3R5bGVzIGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgc3R5bGUgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHN0eWxlLiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlIC0gQXR0cmlidXRlIHRvIGdldCBvciBzZXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gVmFsdWUgdG8gc2V0IGZvciBhdHRyaWJ1dGVcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjc3MoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWwuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVthdHRyaWJ1dGVdO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGVbYXR0cmlidXRlXSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSB3aWR0aCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIHdpZHRoIGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSB3aWR0aC4gIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBXaWR0aCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3aWR0aChlbGVtZW50LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLndpZHRoKTtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGhlaWdodCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIGhlaWdodCBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgaGVpZ2h0LiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIEhlaWdodCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoZWlnaHQoZWxlbWVudCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHQpO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbm5lciB0ZXh0IG9mIGFuIGVsZW1lbnQgaWYgZ2l2ZW4gYSB2YWx1ZSwgb3RoZXJ3aXNlIHJldHVybnMgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgdGV4dCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0ZXh0XSAtIENvbnRlbnQgdG8gc2V0XHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEVpdGhlciB0aGUgc3RyaW5nIHNldCBieSB0aGlzIGNhbGwgb3IgdGhlIGN1cnJlbnQgdGV4dCBjb250ZW50IG9mIHRoZSBub2RlLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdGV4dChlbGVtZW50LCB0ZXh0KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0ZXh0KSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudDtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpbm5lcldpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBpbm5lciB3aWR0aCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlubmVyV2lkdGgoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgaW5uZXJIZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIGhlaWdodCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbm5lckhlaWdodChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgb3V0ZXJXaWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgb3V0ZXIgd2lkdGggb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgd2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvdXRlcldpZHRoKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG91dGVySGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciBoZWlnaHQgb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb3V0ZXJIZWlnaHQoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgcGFnZS5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IG9mZnNldCBvZlxyXG4gICAgICogQHJldHVybiB7T2Zmc2V0fSAtIFRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9mZnNldChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsaXN0ZW5lcnMoKSB7IHJldHVybiB0aGlzLl9saXN0ZW5lcnMgfHwgKHRoaXMuX2xpc3RlbmVycyA9IHt9KTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGpRdWVyeSdzIGBvbmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZXMgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVzIG9uY2UuXHJcbiAgICAgKiBgY29uc3QgY2FuY2VsID0gRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJmaXJlZCFcIik7IGNhbmNlbCgpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lcn0gLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB1bmRvIHRoZSBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb24oZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgbWV0aG9kIG1hdGNoZXMge0BsaW5rIG1vZHVsZTpET01Ub29scy5vbn0gYnV0IGF1dG9tYXRpY2FsbHkgY2FuY2VscyBpdHNlbGZcclxuICAgICAqIGFuZCByZW1vdmVzIHRoZSBsaXN0ZW5lciB1cG9uIHRoZSBmaXJzdCBmaXJpbmcgb2YgdGhlIGRlc2lyZWQgZXZlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYWRkIGxpc3RlbmVyIHRvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBkZWxlZ2F0ZSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJ9IC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgdW5kbyB0aGUgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uY2UoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH0gOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBsZXQgbWF0Y2hGaWx0ZXIgPSBsaXN0ZW5lciA9PiBsaXN0ZW5lci5ldmVudCA9PSB0eXBlLCBkZWZhdWx0RmlsdGVyID0gXyA9PiBfO1xyXG4gICAgICAgIGlmIChlbGVtZW50KSBtYXRjaEZpbHRlciA9IGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50LCBkZWZhdWx0RmlsdGVyID0gbCA9PiBsLmVsZW1lbnQgPT0gZWxlbWVudDtcclxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSB0eXBlID8gbGlzdGVuZXJzLmZpbHRlcihtYXRjaEZpbHRlcikgOiBsaXN0ZW5lcnMuZmlsdGVyKGRlZmF1bHRGaWx0ZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbGlzdC5sZW5ndGg7IGMrKykgbGlzdFtjXS5jYW5jZWwoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9mZmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyIGNhbGxlZCBgb25DbGlja2AgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgY2FsbGVkIGBvbkNsaWNrYCAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZWQgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBcIi5ibG9ja1wiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcIi5teVBsdWdpblwiKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGNsaWNrIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tICphbGwgZWxlbWVudHMqLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihcImNsaWNrLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gKmFsbCBlbGVtZW50cyouXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoRWxlbWVudHxzdHJpbmcpfSBlbGVtZW50IC0gRWxlbWVudCB0byByZW1vdmUgbGlzdGVuZXIgZnJvbVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudF0gLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBbZGVsZWdhdGVdIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIG9yaWdpbmFsIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvZmYoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZWxlbWVudCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIHRoaXMuX19vZmZBbGwoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkgcmV0dXJuIHRoaXMuX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gY2FsbGJhY2sgOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciBmb3Igd2hlbiB0aGUgbm9kZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGJvZHkuXHJcbiAgICAgKiBUaGUgbGlzdGVuZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIHVwb24gZmlyaW5nLlxyXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIG5vZGUgdG8gd2FpdCBmb3JcclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGV2ZW50XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9uTW91bnQgLSBkZXRlcm1pbmVzIGlmIGl0IHNob3VsZCBmaXJlIG9uIE1vdW50IG9yIG9uIFVubW91bnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2ssIG9uTW91bnQgPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLnVuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLnN1YnNjcmliZSh3cmFwcGVkQ2FsbGJhY2ssIG11dGF0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG9uTW91bnQgPyBtdXRhdGlvbi5hZGRlZE5vZGVzIDogbXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYHRydWVgICovXHJcbiAgICBzdGF0aWMgb25Nb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrKTsgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYGZhbHNlYCAqL1xyXG4gICAgc3RhdGljIG9uVW5tb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudH0gKi9cclxuICAgIHN0YXRpYyBvbkFkZGVkKG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnQobm9kZSwgY2FsbGJhY2spOyB9XHJcblxyXG4gICAgLyoqIEFsaWFzIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uVW5tb3VudH0gKi9cclxuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Vbm1vdW50KG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBjb21iaW5lcyBtdWx0aXBsZSBlbGVtZW50cyBpbnRvIG9uZSBwYXJlbnQgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtBcnJheTxIVE1MRWxlbWVudD59IGVsZW1lbnRzIC0gYXJyYXkgb2YgZWxlbWVudHMgdG8gcHV0IGludG8gYSBzaW5nbGUgcGFyZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3cmFwKGVsZW1lbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZG9tV3JhcHBlciA9IHRoaXMucGFyc2VIVE1MKGA8ZGl2IGNsYXNzPVwiZG9tLXdyYXBwZXJcIj48L2Rpdj5gKTtcclxuICAgICAgICBmb3IgKGxldCBlID0gMDsgZSA8IGVsZW1lbnRzLmxlbmd0aDsgZSsrKSBkb21XcmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnRzW2VdKTtcclxuICAgICAgICByZXR1cm4gZG9tV3JhcHBlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc29sdmVzIHRoZSBub2RlIHRvIGFuIEhUTUxFbGVtZW50LiBUaGlzIGlzIG1haW5seSB1c2VkIGJ5IGxpYnJhcnkgbW9kdWxlcy5cclxuICAgICAqIEBwYXJhbSB7KGpRdWVyeXxFbGVtZW50KX0gbm9kZSAtIG5vZGUgdG8gcmVzb2x2ZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVzb2x2ZUVsZW1lbnQobm9kZSkge1xyXG4gICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/domtools.js\n"); + +/***/ }), + /***/ "./src/modules/emitter.js": /*!********************************!*\ !*** ./src/modules/emitter.js ***! @@ -463,11 +499,11 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /*!********************************!*\ !*** ./src/modules/modules.js ***! \********************************/ -/*! exports provided: WebpackModules, React, ReactDOM, DiscordModules, Utilities, DataStore, Events, Settings, DOMManager, Logger, Patcher, ReactComponents, LocaleManager, Strings */ +/*! exports provided: WebpackModules, React, ReactDOM, DiscordModules, Utilities, DataStore, Events, Settings, DOMManager, DOM, Logger, Patcher, ReactComponents, LocaleManager, Strings */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"React\", function() { return React; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ReactDOM\", function() { return ReactDOM; });\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WebpackModules\", function() { return _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DiscordModules\", function() { return _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Utilities\", function() { return _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DataStore\", function() { return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Events\", function() { return _emitter__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Settings\", function() { return _settingsmanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DOMManager\", function() { return _dommanager__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Logger\", function() { return _logger__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _patcher__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./patcher */ \"./src/modules/patcher.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Patcher\", function() { return _patcher__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _reactcomponents__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactcomponents */ \"./src/modules/reactcomponents.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ReactComponents\", function() { return _reactcomponents__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _localemanager__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./localemanager */ \"./src/modules/localemanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocaleManager\", function() { return _localemanager__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./strings */ \"./src/modules/strings.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Strings\", function() { return _strings__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n\n\nconst React = _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].React;\nconst ReactDOM = _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ReactDOM;\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvbW9kdWxlcy5qcz8xNGRiIl0sIm5hbWVzIjpbIlJlYWN0IiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdERPTSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNPLE1BQU1BLEtBQUssR0FBR0MsdURBQWMsQ0FBQ0QsS0FBN0I7QUFDQSxNQUFNRSxRQUFRLEdBQUdELHVEQUFjLENBQUNDLFFBQWhDO0FBQ1A7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9tb2R1bGVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtkZWZhdWx0IGFzIFdlYnBhY2tNb2R1bGVzfSBmcm9tIFwiLi93ZWJwYWNrbW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IERpc2NvcmRNb2R1bGVzIGZyb20gXCIuL2Rpc2NvcmRtb2R1bGVzXCI7XHJcbmV4cG9ydCBjb25zdCBSZWFjdCA9IERpc2NvcmRNb2R1bGVzLlJlYWN0O1xyXG5leHBvcnQgY29uc3QgUmVhY3RET00gPSBEaXNjb3JkTW9kdWxlcy5SZWFjdERPTTtcclxuZXhwb3J0IHtEaXNjb3JkTW9kdWxlc307XHJcblxyXG5leHBvcnQge2RlZmF1bHQgYXMgVXRpbGl0aWVzfSBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIERhdGFTdG9yZX0gZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBFdmVudHN9IGZyb20gXCIuL2VtaXR0ZXJcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFNldHRpbmdzfSBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIERPTU1hbmFnZXJ9IGZyb20gXCIuL2RvbW1hbmFnZXJcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIExvZ2dlcn0gZnJvbSBcIi4vbG9nZ2VyXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBQYXRjaGVyfSBmcm9tIFwiLi9wYXRjaGVyXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBSZWFjdENvbXBvbmVudHN9IGZyb20gXCIuL3JlYWN0Y29tcG9uZW50c1wiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgTG9jYWxlTWFuYWdlcn0gZnJvbSBcIi4vbG9jYWxlbWFuYWdlclwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgU3RyaW5nc30gZnJvbSBcIi4vc3RyaW5nc1wiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/modules.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"React\", function() { return React; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ReactDOM\", function() { return ReactDOM; });\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WebpackModules\", function() { return _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DiscordModules\", function() { return _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Utilities\", function() { return _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DataStore\", function() { return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Events\", function() { return _emitter__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Settings\", function() { return _settingsmanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DOMManager\", function() { return _dommanager__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _domtools__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./domtools */ \"./src/modules/domtools.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DOM\", function() { return _domtools__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Logger\", function() { return _logger__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _patcher__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./patcher */ \"./src/modules/patcher.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Patcher\", function() { return _patcher__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _reactcomponents__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./reactcomponents */ \"./src/modules/reactcomponents.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ReactComponents\", function() { return _reactcomponents__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _localemanager__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./localemanager */ \"./src/modules/localemanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocaleManager\", function() { return _localemanager__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./strings */ \"./src/modules/strings.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Strings\", function() { return _strings__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n\n\nconst React = _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].React;\nconst ReactDOM = _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ReactDOM;\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvbW9kdWxlcy5qcz8xNGRiIl0sIm5hbWVzIjpbIlJlYWN0IiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdERPTSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNPLE1BQU1BLEtBQUssR0FBR0MsdURBQWMsQ0FBQ0QsS0FBN0I7QUFDQSxNQUFNRSxRQUFRLEdBQUdELHVEQUFjLENBQUNDLFFBQWhDO0FBQ1A7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL21vZHVsZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgV2VicGFja01vZHVsZXN9IGZyb20gXCIuL3dlYnBhY2ttb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIi4vZGlzY29yZG1vZHVsZXNcIjtcclxuZXhwb3J0IGNvbnN0IFJlYWN0ID0gRGlzY29yZE1vZHVsZXMuUmVhY3Q7XHJcbmV4cG9ydCBjb25zdCBSZWFjdERPTSA9IERpc2NvcmRNb2R1bGVzLlJlYWN0RE9NO1xyXG5leHBvcnQge0Rpc2NvcmRNb2R1bGVzfTtcclxuXHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBVdGlsaXRpZXN9IGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRGF0YVN0b3JlfSBmcm9tIFwiLi9kYXRhc3RvcmVcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIEV2ZW50c30gZnJvbSBcIi4vZW1pdHRlclwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgU2V0dGluZ3N9IGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRE9NTWFuYWdlcn0gZnJvbSBcIi4vZG9tbWFuYWdlclwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRE9NfSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgTG9nZ2VyfSBmcm9tIFwiLi9sb2dnZXJcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFBhdGNoZXJ9IGZyb20gXCIuL3BhdGNoZXJcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFJlYWN0Q29tcG9uZW50c30gZnJvbSBcIi4vcmVhY3Rjb21wb25lbnRzXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBMb2NhbGVNYW5hZ2VyfSBmcm9tIFwiLi9sb2NhbGVtYW5hZ2VyXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBTdHJpbmdzfSBmcm9tIFwiLi9zdHJpbmdzXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/modules.js\n"); /***/ }), @@ -491,7 +527,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 _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n\n\n\n\n\n\n\n\n\nconst BdApi = {\n get React() {\n return _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React;\n },\n\n get ReactDOM() {\n return _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ReactDOM;\n },\n\n get WindowConfigFile() {\n if (this._windowConfigFile) return this._windowConfigFile;\n\n const electron = __webpack_require__(/*! electron */ \"electron\").remote.app;\n\n const path = __webpack_require__(/*! path */ \"path\");\n\n const base = electron.getAppPath();\n const roamingBase = electron.getPath(\"userData\");\n const roamingLocation = path.resolve(roamingBase, electron.getVersion(), \"modules\", \"discord_desktop_core\", \"injector\", \"config.json\");\n const location = path.resolve(base, \"..\", \"app\", \"config.json\");\n\n const fs = __webpack_require__(/*! fs */ \"fs\");\n\n const realLocation = fs.existsSync(location) ? location : fs.existsSync(roamingLocation) ? roamingLocation : null;\n if (!realLocation) return this._windowConfigFile = null;\n return this._windowConfigFile = realLocation;\n }\n\n};\n\nBdApi.getAllWindowPreferences = function () {\n if (!this.WindowConfigFile) return {};\n return require(this.WindowConfigFile);\n};\n\nBdApi.getWindowPreference = function (key) {\n if (!this.WindowConfigFile) return undefined;\n return this.getAllWindowPreferences()[key];\n};\n\nBdApi.setWindowPreference = function (key, value) {\n if (!this.WindowConfigFile) return;\n\n const fs = __webpack_require__(/*! fs */ \"fs\");\n\n const prefs = this.getAllWindowPreferences();\n prefs[key] = value;\n delete __webpack_require__.c[this.WindowConfigFile];\n fs.writeFileSync(this.WindowConfigFile, JSON.stringify(prefs, null, 4));\n}; //Inject CSS to document head\n//id = id of element\n//css = custom css\n\n\nBdApi.injectCSS = function (id, css) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].injectStyle(id, css);\n}; //Clear css/remove any element\n//id = id of element\n\n\nBdApi.clearCSS = function (id) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].removeStyle(id);\n}; //Inject CSS to document head\n//id = id of element\n//css = custom css\n\n\nBdApi.linkJS = function (id, url) {\n return _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].injectScript(id, url);\n}; //Clear css/remove any element\n//id = id of element\n\n\nBdApi.unlinkJS = function (id) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].removeScript(id);\n};\n/**\r\n * Shows a generic but very customizable modal.\r\n * @param {string} title - title of the modal\r\n * @param {string} content - a string of text to display in the modal\r\n */\n\n\nBdApi.alert = function (title, content) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_6__[\"default\"].alert(title, content);\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\nBdApi.showConfirmationModal = function (title, content, options = {}) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_6__[\"default\"].showConfirmationModal(title, content, options);\n};\n/**\r\n * This shows a toast similar to android towards the bottom of the screen.\r\n *\r\n * @param {string} content The string to show in the toast.\r\n * @param {object} options Options object. Optional parameter.\r\n * @param {string} [options.type=\"\"] Changes the type of the toast stylistically and semantically. Choices: \"\", \"info\", \"success\", \"danger\"/\"error\", \"warning\"/\"warn\". Default: \"\"\r\n * @param {boolean} [options.icon=true] Determines whether the icon should show corresponding to the type. A toast without type will always have no icon. Default: true\r\n * @param {number} [options.timeout=3000] Adjusts the time (in ms) the toast should be shown for before disappearing automatically. Default: 3000\r\n * @param {boolean} [options.forceShow=false] Whether to force showing the toast and ignore the bd setting\r\n */\n\n\nBdApi.showToast = function (content, options = {}) {\n _ui_toasts__WEBPACK_IMPORTED_MODULE_5__[\"default\"].show(content, options);\n}; // Finds module\n\n\nBdApi.findModule = function (filter) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getModule(filter);\n}; // Finds module\n\n\nBdApi.findAllModules = function (filter) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getModule(filter, false);\n}; // Finds module\n\n\nBdApi.findModuleByProps = function (...props) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(...props);\n};\n\nBdApi.findModuleByPrototypes = function (...protos) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByPrototypes(...protos);\n};\n\nBdApi.findModuleByDisplayName = function (name) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByDisplayName(name);\n}; // Gets react instance\n\n\nBdApi.getInternalInstance = function (node) {\n if (!(node instanceof window.jQuery) && !(node instanceof Element)) return undefined;\n if (node instanceof jQuery) node = node[0];\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getReactInstance(node);\n}; // Gets data\n\n\nBdApi.loadData = function (pluginName, key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getPluginData(pluginName, key);\n};\n\nBdApi.getData = BdApi.loadData; // Sets data\n\nBdApi.saveData = function (pluginName, key, data) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setPluginData(pluginName, key, data);\n};\n\nBdApi.setData = BdApi.saveData; // Deletes data\n\nBdApi.deleteData = function (pluginName, key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].deletePluginData(pluginName, key);\n}; // Patches other functions\n\n\nBdApi.monkeyPatch = function (what, methodName, options) {\n const {\n before,\n after,\n instead,\n once = false,\n silent = false,\n force = false\n } = options;\n const displayName = options.displayName || what.displayName || what.name || what.constructor.displayName || what.constructor.name;\n if (!silent) console.log(\"patch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n\n if (!what[methodName]) {\n if (force) what[methodName] = function () {};else return console.error(methodName, \"does not exist for\", displayName); // eslint-disable-line no-console\n }\n\n const origMethod = what[methodName];\n\n const cancel = () => {\n if (!silent) console.log(\"unpatch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n\n what[methodName] = origMethod;\n };\n\n what[methodName] = function () {\n const data = {\n thisObject: this,\n methodArguments: arguments,\n cancelPatch: cancel,\n originalMethod: origMethod,\n callOriginalMethod: () => data.returnValue = data.originalMethod.apply(data.thisObject, data.methodArguments)\n };\n\n if (instead) {\n const tempRet = _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(instead, \"`instead` callback of \" + what[methodName].displayName)(data);\n if (tempRet !== undefined) data.returnValue = tempRet;\n } else {\n if (before) _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(before, \"`before` callback of \" + what[methodName].displayName)(data);\n data.callOriginalMethod();\n if (after) _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(after, \"`after` callback of \" + what[methodName].displayName)(data);\n }\n\n if (once) cancel();\n return data.returnValue;\n };\n\n what[methodName].__monkeyPatched = true;\n if (!what[methodName].__originalMethod) what[methodName].__originalMethod = origMethod;\n what[methodName].displayName = \"patched \" + (what[methodName].displayName || methodName);\n return cancel;\n}; // Event when element is removed\n\n\nBdApi.onRemoved = function (node, callback) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].onRemoved(node, callback);\n}; // Wraps function in try..catch\n\n\nBdApi.suppressErrors = function (method, message) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(method, message);\n}; // Tests for valid JSON\n\n\nBdApi.testJSON = function (data) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testJSON(data);\n}; //Get another plugin\n//name = name of plugin\n\n\nBdApi.getPlugin = function (name) {\n return _pluginmanager__WEBPACK_IMPORTED_MODULE_7__[\"default\"].addonList.find(a => a.name == name);\n};\n\nBdApi.isPluginEnabled = function (name) {\n const plugin = this.getPlugin(name);\n if (!plugin) return false;\n return _pluginmanager__WEBPACK_IMPORTED_MODULE_7__[\"default\"].isEnabled(plugin.id);\n};\n\nBdApi.isThemeEnabled = function (name) {\n const theme = _thememanager__WEBPACK_IMPORTED_MODULE_8__[\"default\"].addonList.find(a => a.name == name);\n if (!theme) return false;\n return _thememanager__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isEnabled(theme.id);\n};\n\nBdApi.isSettingEnabled = function (name) {\n return null;\n}; // Gets data\n\n\nBdApi.getBDData = function (key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getBDData(key);\n}; // Sets data\n\n\nBdApi.setBDData = function (key, data) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setBDData(key, data);\n}; // const makeAddonAPI = (cookie, list, manager) => new class AddonAPI {\n// get folder() {return manager.folder;}\n// isEnabled(name) {\n// return !!cookie[name];\n// }\n// enable(name) {\n// return manager.enable(name);\n// }\n// disable(name) {\n// return manager.disable(name);\n// }\n// toggle(name) {\n// if (cookie[name]) this.disable(name);\n// else this.enable(name);\n// }\n// reload(name) {\n// return manager.reload(name);\n// }\n// get(name) {\n// if (list.hasOwnProperty(name)) {\n// if (list[name].plugin) return list[name].plugin;\n// return list[name];\n// }\n// return null;\n// }\n// getAll() {\n// return Object.keys(list).map(k => this.get(k)).filter(a => a);\n// }\n// };\n// BdApi.Plugins = makeAddonAPI(pluginCookie, bdplugins, pluginModule);\n// BdApi.Themes = makeAddonAPI(themeCookie, bdthemes, themeModule);\n\n\nBdApi.Plugins = BdApi.themes = new class AddonAPI {\n get folder() {\n return \"\";\n }\n\n isEnabled(name) {\n return null;\n }\n\n enable(name) {\n return null;\n }\n\n disable(name) {\n return null;\n }\n\n toggle(name) {\n return null;\n }\n\n reload(name) {\n return null;\n }\n\n get(name) {\n return null;\n }\n\n getAll() {\n return [];\n }\n\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (BdApi);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvcGx1Z2luYXBpLmpzPzZhOTMiXSwibmFtZXMiOlsiQmRBcGkiLCJSZWFjdCIsIkRpc2NvcmRNb2R1bGVzIiwiUmVhY3RET00iLCJXaW5kb3dDb25maWdGaWxlIiwiX3dpbmRvd0NvbmZpZ0ZpbGUiLCJlbGVjdHJvbiIsInJlcXVpcmUiLCJyZW1vdGUiLCJhcHAiLCJwYXRoIiwiYmFzZSIsImdldEFwcFBhdGgiLCJyb2FtaW5nQmFzZSIsImdldFBhdGgiLCJyb2FtaW5nTG9jYXRpb24iLCJyZXNvbHZlIiwiZ2V0VmVyc2lvbiIsImxvY2F0aW9uIiwiZnMiLCJyZWFsTG9jYXRpb24iLCJleGlzdHNTeW5jIiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsImdldFdpbmRvd1ByZWZlcmVuY2UiLCJrZXkiLCJ1bmRlZmluZWQiLCJzZXRXaW5kb3dQcmVmZXJlbmNlIiwidmFsdWUiLCJwcmVmcyIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5IiwiaW5qZWN0Q1NTIiwiaWQiLCJjc3MiLCJET01NYW5hZ2VyIiwiaW5qZWN0U3R5bGUiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwidXJsIiwiaW5qZWN0U2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJhbGVydCIsInRpdGxlIiwiY29udGVudCIsIk1vZGFscyIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsIm9wdGlvbnMiLCJzaG93VG9hc3QiLCJUb2FzdHMiLCJzaG93IiwiZmluZE1vZHVsZSIsImZpbHRlciIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0TW9kdWxlIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kTW9kdWxlQnlQcm9wcyIsInByb3BzIiwiZ2V0QnlQcm9wcyIsImZpbmRNb2R1bGVCeVByb3RvdHlwZXMiLCJwcm90b3MiLCJnZXRCeVByb3RvdHlwZXMiLCJmaW5kTW9kdWxlQnlEaXNwbGF5TmFtZSIsIm5hbWUiLCJnZXRCeURpc3BsYXlOYW1lIiwiZ2V0SW50ZXJuYWxJbnN0YW5jZSIsIm5vZGUiLCJ3aW5kb3ciLCJqUXVlcnkiLCJFbGVtZW50IiwiVXRpbGl0aWVzIiwiZ2V0UmVhY3RJbnN0YW5jZSIsImxvYWREYXRhIiwicGx1Z2luTmFtZSIsIkRhdGFTdG9yZSIsImdldFBsdWdpbkRhdGEiLCJnZXREYXRhIiwic2F2ZURhdGEiLCJkYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIm1vbmtleVBhdGNoIiwid2hhdCIsIm1ldGhvZE5hbWUiLCJiZWZvcmUiLCJhZnRlciIsImluc3RlYWQiLCJvbmNlIiwic2lsZW50IiwiZm9yY2UiLCJkaXNwbGF5TmFtZSIsImNvbnN0cnVjdG9yIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwib3JpZ01ldGhvZCIsImNhbmNlbCIsInRoaXNPYmplY3QiLCJtZXRob2RBcmd1bWVudHMiLCJhcmd1bWVudHMiLCJjYW5jZWxQYXRjaCIsIm9yaWdpbmFsTWV0aG9kIiwiY2FsbE9yaWdpbmFsTWV0aG9kIiwicmV0dXJuVmFsdWUiLCJhcHBseSIsInRlbXBSZXQiLCJzdXBwcmVzc0Vycm9ycyIsIl9fbW9ua2V5UGF0Y2hlZCIsIl9fb3JpZ2luYWxNZXRob2QiLCJvblJlbW92ZWQiLCJjYWxsYmFjayIsIm1ldGhvZCIsIm1lc3NhZ2UiLCJ0ZXN0SlNPTiIsImdldFBsdWdpbiIsIlBsdWdpbk1hbmFnZXIiLCJhZGRvbkxpc3QiLCJmaW5kIiwiYSIsImlzUGx1Z2luRW5hYmxlZCIsInBsdWdpbiIsImlzRW5hYmxlZCIsImlzVGhlbWVFbmFibGVkIiwidGhlbWUiLCJUaGVtZU1hbmFnZXIiLCJpc1NldHRpbmdFbmFibGVkIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwiUGx1Z2lucyIsInRoZW1lcyIsIkFkZG9uQVBJIiwiZm9sZGVyIiwiZW5hYmxlIiwiZGlzYWJsZSIsInRvZ2dsZSIsInJlbG9hZCIsImdldCIsImdldEFsbCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxLQUFLLEdBQUc7QUFDVixNQUFJQyxLQUFKLEdBQVk7QUFBRSxXQUFPQyx1REFBYyxDQUFDRCxLQUF0QjtBQUE4QixHQURsQzs7QUFFVixNQUFJRSxRQUFKLEdBQWU7QUFBRSxXQUFPRCx1REFBYyxDQUFDQyxRQUF0QjtBQUFpQyxHQUZ4Qzs7QUFHVixNQUFJQyxnQkFBSixHQUF1QjtBQUNuQixRQUFJLEtBQUtDLGlCQUFULEVBQTRCLE9BQU8sS0FBS0EsaUJBQVo7O0FBQzVCLFVBQU1DLFFBQVEsR0FBR0MsbUJBQU8sQ0FBQywwQkFBRCxDQUFQLENBQW9CQyxNQUFwQixDQUEyQkMsR0FBNUM7O0FBQ0EsVUFBTUMsSUFBSSxHQUFHSCxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUNBLFVBQU1JLElBQUksR0FBR0wsUUFBUSxDQUFDTSxVQUFULEVBQWI7QUFDQSxVQUFNQyxXQUFXLEdBQUdQLFFBQVEsQ0FBQ1EsT0FBVCxDQUFpQixVQUFqQixDQUFwQjtBQUNBLFVBQU1DLGVBQWUsR0FBR0wsSUFBSSxDQUFDTSxPQUFMLENBQWFILFdBQWIsRUFBMEJQLFFBQVEsQ0FBQ1csVUFBVCxFQUExQixFQUFpRCxTQUFqRCxFQUE0RCxzQkFBNUQsRUFBb0YsVUFBcEYsRUFBZ0csYUFBaEcsQ0FBeEI7QUFDQSxVQUFNQyxRQUFRLEdBQUdSLElBQUksQ0FBQ00sT0FBTCxDQUFhTCxJQUFiLEVBQW1CLElBQW5CLEVBQXlCLEtBQXpCLEVBQWdDLGFBQWhDLENBQWpCOztBQUNBLFVBQU1RLEVBQUUsR0FBR1osbUJBQU8sQ0FBQyxjQUFELENBQWxCOztBQUNBLFVBQU1hLFlBQVksR0FBR0QsRUFBRSxDQUFDRSxVQUFILENBQWNILFFBQWQsSUFBMEJBLFFBQTFCLEdBQXFDQyxFQUFFLENBQUNFLFVBQUgsQ0FBY04sZUFBZCxJQUFpQ0EsZUFBakMsR0FBbUQsSUFBN0c7QUFDQSxRQUFJLENBQUNLLFlBQUwsRUFBbUIsT0FBTyxLQUFLZixpQkFBTCxHQUF5QixJQUFoQztBQUNuQixXQUFPLEtBQUtBLGlCQUFMLEdBQXlCZSxZQUFoQztBQUNIOztBQWZTLENBQWQ7O0FBa0JBcEIsS0FBSyxDQUFDc0IsdUJBQU4sR0FBZ0MsWUFBVztBQUN2QyxNQUFJLENBQUMsS0FBS2xCLGdCQUFWLEVBQTRCLE9BQU8sRUFBUDtBQUM1QixTQUFPbUIsT0FBdUIsQ0FBQyxLQUFLbkIsZ0JBQU4sQ0FBOUI7QUFDSCxDQUhEOztBQUtBSixLQUFLLENBQUN3QixtQkFBTixHQUE0QixVQUFTQyxHQUFULEVBQWM7QUFDdEMsTUFBSSxDQUFDLEtBQUtyQixnQkFBVixFQUE0QixPQUFPc0IsU0FBUDtBQUM1QixTQUFPLEtBQUtKLHVCQUFMLEdBQStCRyxHQUEvQixDQUFQO0FBQ0gsQ0FIRDs7QUFLQXpCLEtBQUssQ0FBQzJCLG1CQUFOLEdBQTRCLFVBQVNGLEdBQVQsRUFBY0csS0FBZCxFQUFxQjtBQUM3QyxNQUFJLENBQUMsS0FBS3hCLGdCQUFWLEVBQTRCOztBQUM1QixRQUFNZSxFQUFFLEdBQUdaLG1CQUFPLENBQUMsY0FBRCxDQUFsQjs7QUFDQSxRQUFNc0IsS0FBSyxHQUFHLEtBQUtQLHVCQUFMLEVBQWQ7QUFDQU8sT0FBSyxDQUFDSixHQUFELENBQUwsR0FBYUcsS0FBYjtBQUNBLFNBQU9yQixxQkFBQSxDQUFjLEtBQUtILGdCQUFuQixDQUFQO0FBQ0FlLElBQUUsQ0FBQ1csYUFBSCxDQUFpQixLQUFLMUIsZ0JBQXRCLEVBQXdDMkIsSUFBSSxDQUFDQyxTQUFMLENBQWVILEtBQWYsRUFBc0IsSUFBdEIsRUFBNEIsQ0FBNUIsQ0FBeEM7QUFDSCxDQVBELEMsQ0FTQTtBQUNBO0FBQ0E7OztBQUNBN0IsS0FBSyxDQUFDaUMsU0FBTixHQUFrQixVQUFVQyxFQUFWLEVBQWNDLEdBQWQsRUFBbUI7QUFDakNDLHFEQUFVLENBQUNDLFdBQVgsQ0FBdUJILEVBQXZCLEVBQTJCQyxHQUEzQjtBQUNILENBRkQsQyxDQUlBO0FBQ0E7OztBQUNBbkMsS0FBSyxDQUFDc0MsUUFBTixHQUFpQixVQUFVSixFQUFWLEVBQWM7QUFDM0JFLHFEQUFVLENBQUNHLFdBQVgsQ0FBdUJMLEVBQXZCO0FBQ0gsQ0FGRCxDLENBSUE7QUFDQTtBQUNBOzs7QUFDQWxDLEtBQUssQ0FBQ3dDLE1BQU4sR0FBZSxVQUFVTixFQUFWLEVBQWNPLEdBQWQsRUFBbUI7QUFDOUIsU0FBT0wsbURBQVUsQ0FBQ00sWUFBWCxDQUF3QlIsRUFBeEIsRUFBNEJPLEdBQTVCLENBQVA7QUFDSCxDQUZELEMsQ0FJQTtBQUNBOzs7QUFDQXpDLEtBQUssQ0FBQzJDLFFBQU4sR0FBaUIsVUFBVVQsRUFBVixFQUFjO0FBQzNCRSxxREFBVSxDQUFDUSxZQUFYLENBQXdCVixFQUF4QjtBQUNILENBRkQ7QUFJQTs7Ozs7OztBQUtBbEMsS0FBSyxDQUFDNkMsS0FBTixHQUFjLFVBQVVDLEtBQVYsRUFBaUJDLE9BQWpCLEVBQTBCO0FBQ3BDQyxvREFBTSxDQUFDSCxLQUFQLENBQWFDLEtBQWIsRUFBb0JDLE9BQXBCO0FBQ0gsQ0FGRDtBQUlBOzs7Ozs7Ozs7Ozs7O0FBV0EvQyxLQUFLLENBQUNpRCxxQkFBTixHQUE4QixVQUFVSCxLQUFWLEVBQWlCQyxPQUFqQixFQUEwQkcsT0FBTyxHQUFHLEVBQXBDLEVBQXdDO0FBQ2xFLFNBQU9GLGtEQUFNLENBQUNDLHFCQUFQLENBQTZCSCxLQUE3QixFQUFvQ0MsT0FBcEMsRUFBNkNHLE9BQTdDLENBQVA7QUFDSCxDQUZEO0FBSUE7Ozs7Ozs7Ozs7OztBQVVBbEQsS0FBSyxDQUFDbUQsU0FBTixHQUFrQixVQUFTSixPQUFULEVBQWtCRyxPQUFPLEdBQUcsRUFBNUIsRUFBZ0M7QUFDOUNFLG9EQUFNLENBQUNDLElBQVAsQ0FBWU4sT0FBWixFQUFxQkcsT0FBckI7QUFDSCxDQUZELEMsQ0FJQTs7O0FBQ0FsRCxLQUFLLENBQUNzRCxVQUFOLEdBQW1CLFVBQVNDLE1BQVQsRUFBaUI7QUFDaEMsU0FBT0MsdURBQWMsQ0FBQ0MsU0FBZixDQUF5QkYsTUFBekIsQ0FBUDtBQUNILENBRkQsQyxDQUlBOzs7QUFDQXZELEtBQUssQ0FBQzBELGNBQU4sR0FBdUIsVUFBU0gsTUFBVCxFQUFpQjtBQUNwQyxTQUFPQyx1REFBYyxDQUFDQyxTQUFmLENBQXlCRixNQUF6QixFQUFpQyxLQUFqQyxDQUFQO0FBQ0gsQ0FGRCxDLENBSUE7OztBQUNBdkQsS0FBSyxDQUFDMkQsaUJBQU4sR0FBMEIsVUFBUyxHQUFHQyxLQUFaLEVBQW1CO0FBQ3pDLFNBQU9KLHVEQUFjLENBQUNLLFVBQWYsQ0FBMEIsR0FBR0QsS0FBN0IsQ0FBUDtBQUNILENBRkQ7O0FBSUE1RCxLQUFLLENBQUM4RCxzQkFBTixHQUErQixVQUFTLEdBQUdDLE1BQVosRUFBb0I7QUFDL0MsU0FBT1AsdURBQWMsQ0FBQ1EsZUFBZixDQUErQixHQUFHRCxNQUFsQyxDQUFQO0FBQ0gsQ0FGRDs7QUFJQS9ELEtBQUssQ0FBQ2lFLHVCQUFOLEdBQWdDLFVBQVNDLElBQVQsRUFBZTtBQUMzQyxTQUFPVix1REFBYyxDQUFDVyxnQkFBZixDQUFnQ0QsSUFBaEMsQ0FBUDtBQUNILENBRkQsQyxDQUlBOzs7QUFDQWxFLEtBQUssQ0FBQ29FLG1CQUFOLEdBQTRCLFVBQVNDLElBQVQsRUFBZTtBQUN2QyxNQUFJLEVBQUVBLElBQUksWUFBWUMsTUFBTSxDQUFDQyxNQUF6QixLQUFvQyxFQUFFRixJQUFJLFlBQVlHLE9BQWxCLENBQXhDLEVBQW9FLE9BQU85QyxTQUFQO0FBQ3BFLE1BQUkyQyxJQUFJLFlBQVlFLE1BQXBCLEVBQTRCRixJQUFJLEdBQUdBLElBQUksQ0FBQyxDQUFELENBQVg7QUFDNUIsU0FBT0ksa0RBQVMsQ0FBQ0MsZ0JBQVYsQ0FBMkJMLElBQTNCLENBQVA7QUFDSCxDQUpELEMsQ0FNQTs7O0FBQ0FyRSxLQUFLLENBQUMyRSxRQUFOLEdBQWlCLFVBQVNDLFVBQVQsRUFBcUJuRCxHQUFyQixFQUEwQjtBQUN2QyxTQUFPb0Qsa0RBQVMsQ0FBQ0MsYUFBVixDQUF3QkYsVUFBeEIsRUFBb0NuRCxHQUFwQyxDQUFQO0FBQ0gsQ0FGRDs7QUFJQXpCLEtBQUssQ0FBQytFLE9BQU4sR0FBZ0IvRSxLQUFLLENBQUMyRSxRQUF0QixDLENBRUE7O0FBQ0EzRSxLQUFLLENBQUNnRixRQUFOLEdBQWlCLFVBQVNKLFVBQVQsRUFBcUJuRCxHQUFyQixFQUEwQndELElBQTFCLEVBQWdDO0FBQzdDLFNBQU9KLGtEQUFTLENBQUNLLGFBQVYsQ0FBd0JOLFVBQXhCLEVBQW9DbkQsR0FBcEMsRUFBeUN3RCxJQUF6QyxDQUFQO0FBQ0gsQ0FGRDs7QUFJQWpGLEtBQUssQ0FBQ21GLE9BQU4sR0FBZ0JuRixLQUFLLENBQUNnRixRQUF0QixDLENBRUE7O0FBQ0FoRixLQUFLLENBQUNvRixVQUFOLEdBQW1CLFVBQVNSLFVBQVQsRUFBcUJuRCxHQUFyQixFQUEwQjtBQUN6QyxTQUFPb0Qsa0RBQVMsQ0FBQ1EsZ0JBQVYsQ0FBMkJULFVBQTNCLEVBQXVDbkQsR0FBdkMsQ0FBUDtBQUNILENBRkQsQyxDQUlBOzs7QUFDQXpCLEtBQUssQ0FBQ3NGLFdBQU4sR0FBb0IsVUFBU0MsSUFBVCxFQUFlQyxVQUFmLEVBQTJCdEMsT0FBM0IsRUFBb0M7QUFDcEQsUUFBTTtBQUFDdUMsVUFBRDtBQUFTQyxTQUFUO0FBQWdCQyxXQUFoQjtBQUF5QkMsUUFBSSxHQUFHLEtBQWhDO0FBQXVDQyxVQUFNLEdBQUcsS0FBaEQ7QUFBdURDLFNBQUssR0FBRztBQUEvRCxNQUF3RTVDLE9BQTlFO0FBQ0EsUUFBTTZDLFdBQVcsR0FBRzdDLE9BQU8sQ0FBQzZDLFdBQVIsSUFBdUJSLElBQUksQ0FBQ1EsV0FBNUIsSUFBMkNSLElBQUksQ0FBQ3JCLElBQWhELElBQXdEcUIsSUFBSSxDQUFDUyxXQUFMLENBQWlCRCxXQUF6RSxJQUF3RlIsSUFBSSxDQUFDUyxXQUFMLENBQWlCOUIsSUFBN0g7QUFDQSxNQUFJLENBQUMyQixNQUFMLEVBQWFJLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLE9BQVosRUFBcUJWLFVBQXJCLEVBQWlDLElBQWpDLEVBQXVDTyxXQUF2QyxFQUh1QyxDQUdjOztBQUNsRSxNQUFJLENBQUNSLElBQUksQ0FBQ0MsVUFBRCxDQUFULEVBQXVCO0FBQ25CLFFBQUlNLEtBQUosRUFBV1AsSUFBSSxDQUFDQyxVQUFELENBQUosR0FBbUIsWUFBVyxDQUFFLENBQWhDLENBQVgsS0FDSyxPQUFPUyxPQUFPLENBQUNFLEtBQVIsQ0FBY1gsVUFBZCxFQUEwQixvQkFBMUIsRUFBZ0RPLFdBQWhELENBQVAsQ0FGYyxDQUV1RDtBQUM3RTs7QUFDRCxRQUFNSyxVQUFVLEdBQUdiLElBQUksQ0FBQ0MsVUFBRCxDQUF2Qjs7QUFDQSxRQUFNYSxNQUFNLEdBQUcsTUFBTTtBQUNqQixRQUFJLENBQUNSLE1BQUwsRUFBYUksT0FBTyxDQUFDQyxHQUFSLENBQVksU0FBWixFQUF1QlYsVUFBdkIsRUFBbUMsSUFBbkMsRUFBeUNPLFdBQXpDLEVBREksQ0FDbUQ7O0FBQ3BFUixRQUFJLENBQUNDLFVBQUQsQ0FBSixHQUFtQlksVUFBbkI7QUFDSCxHQUhEOztBQUlBYixNQUFJLENBQUNDLFVBQUQsQ0FBSixHQUFtQixZQUFXO0FBQzFCLFVBQU1QLElBQUksR0FBRztBQUNUcUIsZ0JBQVUsRUFBRSxJQURIO0FBRVRDLHFCQUFlLEVBQUVDLFNBRlI7QUFHVEMsaUJBQVcsRUFBRUosTUFISjtBQUlUSyxvQkFBYyxFQUFFTixVQUpQO0FBS1RPLHdCQUFrQixFQUFFLE1BQU0xQixJQUFJLENBQUMyQixXQUFMLEdBQW1CM0IsSUFBSSxDQUFDeUIsY0FBTCxDQUFvQkcsS0FBcEIsQ0FBMEI1QixJQUFJLENBQUNxQixVQUEvQixFQUEyQ3JCLElBQUksQ0FBQ3NCLGVBQWhEO0FBTHBDLEtBQWI7O0FBT0EsUUFBSVosT0FBSixFQUFhO0FBQ1QsWUFBTW1CLE9BQU8sR0FBR3JDLGtEQUFTLENBQUNzQyxjQUFWLENBQXlCcEIsT0FBekIsRUFBa0MsMkJBQTJCSixJQUFJLENBQUNDLFVBQUQsQ0FBSixDQUFpQk8sV0FBOUUsRUFBMkZkLElBQTNGLENBQWhCO0FBQ0EsVUFBSTZCLE9BQU8sS0FBS3BGLFNBQWhCLEVBQTJCdUQsSUFBSSxDQUFDMkIsV0FBTCxHQUFtQkUsT0FBbkI7QUFDOUIsS0FIRCxNQUlLO0FBQ0QsVUFBSXJCLE1BQUosRUFBWWhCLGtEQUFTLENBQUNzQyxjQUFWLENBQXlCdEIsTUFBekIsRUFBaUMsMEJBQTBCRixJQUFJLENBQUNDLFVBQUQsQ0FBSixDQUFpQk8sV0FBNUUsRUFBeUZkLElBQXpGO0FBQ1pBLFVBQUksQ0FBQzBCLGtCQUFMO0FBQ0EsVUFBSWpCLEtBQUosRUFBV2pCLGtEQUFTLENBQUNzQyxjQUFWLENBQXlCckIsS0FBekIsRUFBZ0MseUJBQXlCSCxJQUFJLENBQUNDLFVBQUQsQ0FBSixDQUFpQk8sV0FBMUUsRUFBdUZkLElBQXZGO0FBQ2Q7O0FBQ0QsUUFBSVcsSUFBSixFQUFVUyxNQUFNO0FBQ2hCLFdBQU9wQixJQUFJLENBQUMyQixXQUFaO0FBQ0gsR0FuQkQ7O0FBb0JBckIsTUFBSSxDQUFDQyxVQUFELENBQUosQ0FBaUJ3QixlQUFqQixHQUFtQyxJQUFuQztBQUNBLE1BQUksQ0FBQ3pCLElBQUksQ0FBQ0MsVUFBRCxDQUFKLENBQWlCeUIsZ0JBQXRCLEVBQXdDMUIsSUFBSSxDQUFDQyxVQUFELENBQUosQ0FBaUJ5QixnQkFBakIsR0FBb0NiLFVBQXBDO0FBQ3hDYixNQUFJLENBQUNDLFVBQUQsQ0FBSixDQUFpQk8sV0FBakIsR0FBK0IsY0FBY1IsSUFBSSxDQUFDQyxVQUFELENBQUosQ0FBaUJPLFdBQWpCLElBQWdDUCxVQUE5QyxDQUEvQjtBQUNBLFNBQU9hLE1BQVA7QUFDSCxDQXJDRCxDLENBc0NBOzs7QUFDQXJHLEtBQUssQ0FBQ2tILFNBQU4sR0FBa0IsVUFBUzdDLElBQVQsRUFBZThDLFFBQWYsRUFBeUI7QUFDdkMsU0FBTzFDLGtEQUFTLENBQUN5QyxTQUFWLENBQW9CN0MsSUFBcEIsRUFBMEI4QyxRQUExQixDQUFQO0FBQ0gsQ0FGRCxDLENBSUE7OztBQUNBbkgsS0FBSyxDQUFDK0csY0FBTixHQUF1QixVQUFTSyxNQUFULEVBQWlCQyxPQUFqQixFQUEwQjtBQUM3QyxTQUFPNUMsa0RBQVMsQ0FBQ3NDLGNBQVYsQ0FBeUJLLE1BQXpCLEVBQWlDQyxPQUFqQyxDQUFQO0FBQ0gsQ0FGRCxDLENBSUE7OztBQUNBckgsS0FBSyxDQUFDc0gsUUFBTixHQUFpQixVQUFTckMsSUFBVCxFQUFlO0FBQzVCLFNBQU9SLGtEQUFTLENBQUM2QyxRQUFWLENBQW1CckMsSUFBbkIsQ0FBUDtBQUNILENBRkQsQyxDQUlBO0FBQ0E7OztBQUNBakYsS0FBSyxDQUFDdUgsU0FBTixHQUFrQixVQUFVckQsSUFBVixFQUFnQjtBQUM5QixTQUFPc0Qsc0RBQWEsQ0FBQ0MsU0FBZCxDQUF3QkMsSUFBeEIsQ0FBNkJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDekQsSUFBRixJQUFVQSxJQUE1QyxDQUFQO0FBQ0gsQ0FGRDs7QUFJQWxFLEtBQUssQ0FBQzRILGVBQU4sR0FBd0IsVUFBUzFELElBQVQsRUFBZTtBQUNuQyxRQUFNMkQsTUFBTSxHQUFHLEtBQUtOLFNBQUwsQ0FBZXJELElBQWYsQ0FBZjtBQUNBLE1BQUksQ0FBQzJELE1BQUwsRUFBYSxPQUFPLEtBQVA7QUFDYixTQUFPTCxzREFBYSxDQUFDTSxTQUFkLENBQXdCRCxNQUFNLENBQUMzRixFQUEvQixDQUFQO0FBQ0gsQ0FKRDs7QUFNQWxDLEtBQUssQ0FBQytILGNBQU4sR0FBdUIsVUFBUzdELElBQVQsRUFBZTtBQUNsQyxRQUFNOEQsS0FBSyxHQUFHQyxxREFBWSxDQUFDUixTQUFiLENBQXVCQyxJQUF2QixDQUE0QkMsQ0FBQyxJQUFJQSxDQUFDLENBQUN6RCxJQUFGLElBQVVBLElBQTNDLENBQWQ7QUFDQSxNQUFJLENBQUM4RCxLQUFMLEVBQVksT0FBTyxLQUFQO0FBQ1osU0FBT0MscURBQVksQ0FBQ0gsU0FBYixDQUF1QkUsS0FBSyxDQUFDOUYsRUFBN0IsQ0FBUDtBQUNILENBSkQ7O0FBTUFsQyxLQUFLLENBQUNrSSxnQkFBTixHQUF5QixVQUFTaEUsSUFBVCxFQUFlO0FBQ3BDLFNBQU8sSUFBUDtBQUNILENBRkQsQyxDQUlBOzs7QUFDQWxFLEtBQUssQ0FBQ21JLFNBQU4sR0FBa0IsVUFBUzFHLEdBQVQsRUFBYztBQUM1QixTQUFPb0Qsa0RBQVMsQ0FBQ3NELFNBQVYsQ0FBb0IxRyxHQUFwQixDQUFQO0FBQ0gsQ0FGRCxDLENBSUE7OztBQUNBekIsS0FBSyxDQUFDb0ksU0FBTixHQUFrQixVQUFTM0csR0FBVCxFQUFjd0QsSUFBZCxFQUFvQjtBQUNsQyxTQUFPSixrREFBUyxDQUFDdUQsU0FBVixDQUFvQjNHLEdBQXBCLEVBQXlCd0QsSUFBekIsQ0FBUDtBQUNILENBRkQsQyxDQUlBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOzs7QUFFQWpGLEtBQUssQ0FBQ3FJLE9BQU4sR0FBZ0JySSxLQUFLLENBQUNzSSxNQUFOLEdBQWUsSUFBSSxNQUFNQyxRQUFOLENBQWU7QUFFOUMsTUFBSUMsTUFBSixHQUFhO0FBQUMsV0FBTyxFQUFQO0FBQVc7O0FBRXpCVixXQUFTLENBQUM1RCxJQUFELEVBQU87QUFDWixXQUFPLElBQVA7QUFDSDs7QUFFRHVFLFFBQU0sQ0FBQ3ZFLElBQUQsRUFBTztBQUNULFdBQU8sSUFBUDtBQUNIOztBQUVEd0UsU0FBTyxDQUFDeEUsSUFBRCxFQUFPO0FBQ1YsV0FBTyxJQUFQO0FBQ0g7O0FBRUR5RSxRQUFNLENBQUN6RSxJQUFELEVBQU87QUFDVCxXQUFPLElBQVA7QUFDSDs7QUFFRDBFLFFBQU0sQ0FBQzFFLElBQUQsRUFBTztBQUNULFdBQU8sSUFBUDtBQUNIOztBQUVEMkUsS0FBRyxDQUFDM0UsSUFBRCxFQUFPO0FBQ04sV0FBTyxJQUFQO0FBQ0g7O0FBRUQ0RSxRQUFNLEdBQUc7QUFDTCxXQUFPLEVBQVA7QUFDSDs7QUE5QjZDLENBQW5CLEVBQS9CO0FBaUNlOUksb0VBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9wbHVnaW5hcGkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja21vZHVsZXNcIjtcclxuaW1wb3J0IERpc2NvcmRNb2R1bGVzIGZyb20gXCIuL2Rpc2NvcmRtb2R1bGVzXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbmltcG9ydCBET01NYW5hZ2VyIGZyb20gXCIuL2RvbW1hbmFnZXJcIjtcclxuaW1wb3J0IFRvYXN0cyBmcm9tIFwiLi4vdWkvdG9hc3RzXCI7XHJcbmltcG9ydCBNb2RhbHMgZnJvbSBcIi4uL3VpL21vZGFsc1wiO1xyXG5pbXBvcnQgUGx1Z2luTWFuYWdlciBmcm9tIFwiLi9wbHVnaW5tYW5hZ2VyXCI7XHJcbmltcG9ydCBUaGVtZU1hbmFnZXIgZnJvbSBcIi4vdGhlbWVtYW5hZ2VyXCI7XHJcblxyXG5jb25zdCBCZEFwaSA9IHtcclxuICAgIGdldCBSZWFjdCgpIHsgcmV0dXJuIERpc2NvcmRNb2R1bGVzLlJlYWN0OyB9LFxyXG4gICAgZ2V0IFJlYWN0RE9NKCkgeyByZXR1cm4gRGlzY29yZE1vZHVsZXMuUmVhY3RET007IH0sXHJcbiAgICBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fd2luZG93Q29uZmlnRmlsZSkgcmV0dXJuIHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGU7XHJcbiAgICAgICAgY29uc3QgZWxlY3Ryb24gPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcDtcclxuICAgICAgICBjb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbiAgICAgICAgY29uc3QgYmFzZSA9IGVsZWN0cm9uLmdldEFwcFBhdGgoKTtcclxuICAgICAgICBjb25zdCByb2FtaW5nQmFzZSA9IGVsZWN0cm9uLmdldFBhdGgoXCJ1c2VyRGF0YVwiKTtcclxuICAgICAgICBjb25zdCByb2FtaW5nTG9jYXRpb24gPSBwYXRoLnJlc29sdmUocm9hbWluZ0Jhc2UsIGVsZWN0cm9uLmdldFZlcnNpb24oKSwgXCJtb2R1bGVzXCIsIFwiZGlzY29yZF9kZXNrdG9wX2NvcmVcIiwgXCJpbmplY3RvclwiLCBcImNvbmZpZy5qc29uXCIpO1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGJhc2UsIFwiLi5cIiwgXCJhcHBcIiwgXCJjb25maWcuanNvblwiKTtcclxuICAgICAgICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuICAgICAgICBjb25zdCByZWFsTG9jYXRpb24gPSBmcy5leGlzdHNTeW5jKGxvY2F0aW9uKSA/IGxvY2F0aW9uIDogZnMuZXhpc3RzU3luYyhyb2FtaW5nTG9jYXRpb24pID8gcm9hbWluZ0xvY2F0aW9uIDogbnVsbDtcclxuICAgICAgICBpZiAoIXJlYWxMb2NhdGlvbikgcmV0dXJuIHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlID0gcmVhbExvY2F0aW9uO1xyXG4gICAgfVxyXG59O1xyXG5cclxuQmRBcGkuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICghdGhpcy5XaW5kb3dDb25maWdGaWxlKSByZXR1cm4ge307XHJcbiAgICByZXR1cm4gX19ub25fd2VicGFja19yZXF1aXJlX18odGhpcy5XaW5kb3dDb25maWdGaWxlKTtcclxufTtcclxuXHJcbkJkQXBpLmdldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIGlmICghdGhpcy5XaW5kb3dDb25maWdGaWxlKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKVtrZXldO1xyXG59O1xyXG5cclxuQmRBcGkuc2V0V2luZG93UHJlZmVyZW5jZSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcclxuICAgIGlmICghdGhpcy5XaW5kb3dDb25maWdGaWxlKSByZXR1cm47XHJcbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuICAgIGNvbnN0IHByZWZzID0gdGhpcy5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpO1xyXG4gICAgcHJlZnNba2V5XSA9IHZhbHVlO1xyXG4gICAgZGVsZXRlIHJlcXVpcmUuY2FjaGVbdGhpcy5XaW5kb3dDb25maWdGaWxlXTtcclxuICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5XaW5kb3dDb25maWdGaWxlLCBKU09OLnN0cmluZ2lmeShwcmVmcywgbnVsbCwgNCkpO1xyXG59O1xyXG5cclxuLy9JbmplY3QgQ1NTIHRvIGRvY3VtZW50IGhlYWRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuLy9jc3MgPSBjdXN0b20gY3NzXHJcbkJkQXBpLmluamVjdENTUyA9IGZ1bmN0aW9uIChpZCwgY3NzKSB7XHJcbiAgICBET01NYW5hZ2VyLmluamVjdFN0eWxlKGlkLCBjc3MpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLmNsZWFyQ1NTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET01NYW5hZ2VyLnJlbW92ZVN0eWxlKGlkKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5saW5rSlMgPSBmdW5jdGlvbiAoaWQsIHVybCkge1xyXG4gICAgcmV0dXJuIERPTU1hbmFnZXIuaW5qZWN0U2NyaXB0KGlkLCB1cmwpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLnVubGlua0pTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET01NYW5hZ2VyLnJlbW92ZVNjcmlwdChpZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBtb2RhbC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IC0gYSBzdHJpbmcgb2YgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBtb2RhbFxyXG4gKi9cclxuQmRBcGkuYWxlcnQgPSBmdW5jdGlvbiAodGl0bGUsIGNvbnRlbnQpIHtcclxuICAgIE1vZGFscy5hbGVydCh0aXRsZSwgY29udGVudCk7XHJcbn07XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5dGhpbmcgaXMgd3JhcHBlZCBpbiBEaXNjb3JkJ3MgYFRleHRFbGVtZW50YCBjb21wb25lbnQgc28gc3RyaW5ncyB3aWxsIHNob3cgYW5kIHJlbmRlciBwcm9wZXJseS5cclxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRhbmdlcj1mYWxzZV0gLSB3aGV0aGVyIHRoZSBtYWluIGJ1dHRvbiBzaG91bGQgYmUgcmVkIG9yIG5vdFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29uZmlybVRleHQ9T2theV0gLSB0ZXh0IGZvciB0aGUgY29uZmlybWF0aW9uL3N1Ym1pdCBidXR0b25cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ29uZmlybT1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b25cclxuICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25DYW5jZWw9Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAqL1xyXG5CZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwgPSBmdW5jdGlvbiAodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgcmV0dXJuIE1vZGFscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgc2hvd3MgYSB0b2FzdCBzaW1pbGFyIHRvIGFuZHJvaWQgdG93YXJkcyB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRoZSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9hc3QuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0LiBPcHRpb25hbCBwYXJhbWV0ZXIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50eXBlPVwiXCJdIENoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHRvYXN0IHN0eWxpc3RpY2FsbHkgYW5kIHNlbWFudGljYWxseS4gQ2hvaWNlczogXCJcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcImRhbmdlclwiL1wiZXJyb3JcIiwgXCJ3YXJuaW5nXCIvXCJ3YXJuXCIuIERlZmF1bHQ6IFwiXCJcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5pY29uPXRydWVdIERldGVybWluZXMgd2hldGhlciB0aGUgaWNvbiBzaG91bGQgc2hvdyBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlLiBBIHRvYXN0IHdpdGhvdXQgdHlwZSB3aWxsIGFsd2F5cyBoYXZlIG5vIGljb24uIERlZmF1bHQ6IHRydWVcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRpbWVvdXQ9MzAwMF0gQWRqdXN0cyB0aGUgdGltZSAoaW4gbXMpIHRoZSB0b2FzdCBzaG91bGQgYmUgc2hvd24gZm9yIGJlZm9yZSBkaXNhcHBlYXJpbmcgYXV0b21hdGljYWxseS4gRGVmYXVsdDogMzAwMFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZvcmNlU2hvdz1mYWxzZV0gV2hldGhlciB0byBmb3JjZSBzaG93aW5nIHRoZSB0b2FzdCBhbmQgaWdub3JlIHRoZSBiZCBzZXR0aW5nXHJcbiAqL1xyXG5CZEFwaS5zaG93VG9hc3QgPSBmdW5jdGlvbihjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIFRvYXN0cy5zaG93KGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGUgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUoZmlsdGVyKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kQWxsTW9kdWxlcyA9IGZ1bmN0aW9uKGZpbHRlcikge1xyXG4gICAgcmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZShmaWx0ZXIsIGZhbHNlKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlQnlQcm9wcyA9IGZ1bmN0aW9uKC4uLnByb3BzKSB7XHJcbiAgICByZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyguLi5wcm9wcyk7XHJcbn07XHJcblxyXG5CZEFwaS5maW5kTW9kdWxlQnlQcm90b3R5cGVzID0gZnVuY3Rpb24oLi4ucHJvdG9zKSB7XHJcbiAgICByZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm90b3R5cGVzKC4uLnByb3Rvcyk7XHJcbn07XHJcblxyXG5CZEFwaS5maW5kTW9kdWxlQnlEaXNwbGF5TmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeURpc3BsYXlOYW1lKG5hbWUpO1xyXG59O1xyXG5cclxuLy8gR2V0cyByZWFjdCBpbnN0YW5jZVxyXG5CZEFwaS5nZXRJbnRlcm5hbEluc3RhbmNlID0gZnVuY3Rpb24obm9kZSkge1xyXG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIHdpbmRvdy5qUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpIG5vZGUgPSBub2RlWzBdO1xyXG4gICAgcmV0dXJuIFV0aWxpdGllcy5nZXRSZWFjdEluc3RhbmNlKG5vZGUpO1xyXG59O1xyXG5cclxuLy8gR2V0cyBkYXRhXHJcbkJkQXBpLmxvYWREYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcclxufTtcclxuXHJcbkJkQXBpLmdldERhdGEgPSBCZEFwaS5sb2FkRGF0YTtcclxuXHJcbi8vIFNldHMgZGF0YVxyXG5CZEFwaS5zYXZlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSwgZGF0YSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5zZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSwgZGF0YSk7XHJcbn07XHJcblxyXG5CZEFwaS5zZXREYXRhID0gQmRBcGkuc2F2ZURhdGE7XHJcblxyXG4vLyBEZWxldGVzIGRhdGFcclxuQmRBcGkuZGVsZXRlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5kZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XHJcbn07XHJcblxyXG4vLyBQYXRjaGVzIG90aGVyIGZ1bmN0aW9uc1xyXG5CZEFwaS5tb25rZXlQYXRjaCA9IGZ1bmN0aW9uKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtiZWZvcmUsIGFmdGVyLCBpbnN0ZWFkLCBvbmNlID0gZmFsc2UsIHNpbGVudCA9IGZhbHNlLCBmb3JjZSA9IGZhbHNlfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWUgfHwgd2hhdC5kaXNwbGF5TmFtZSB8fCB3aGF0Lm5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJwYXRjaFwiLCBtZXRob2ROYW1lLCBcIm9mXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXHJcbiAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0pIHtcclxuICAgICAgICBpZiAoZm9yY2UpIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHt9O1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIGNvbnNvbGUuZXJyb3IobWV0aG9kTmFtZSwgXCJkb2VzIG5vdCBleGlzdCBmb3JcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcclxuICAgIH1cclxuICAgIGNvbnN0IG9yaWdNZXRob2QgPSB3aGF0W21ldGhvZE5hbWVdO1xyXG4gICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInVucGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBvcmlnTWV0aG9kO1xyXG4gICAgfTtcclxuICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgICAgICB0aGlzT2JqZWN0OiB0aGlzLFxyXG4gICAgICAgICAgICBtZXRob2RBcmd1bWVudHM6IGFyZ3VtZW50cyxcclxuICAgICAgICAgICAgY2FuY2VsUGF0Y2g6IGNhbmNlbCxcclxuICAgICAgICAgICAgb3JpZ2luYWxNZXRob2Q6IG9yaWdNZXRob2QsXHJcbiAgICAgICAgICAgIGNhbGxPcmlnaW5hbE1ldGhvZDogKCkgPT4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEub3JpZ2luYWxNZXRob2QuYXBwbHkoZGF0YS50aGlzT2JqZWN0LCBkYXRhLm1ldGhvZEFyZ3VtZW50cylcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChpbnN0ZWFkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBSZXQgPSBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnMoaW5zdGVhZCwgXCJgaW5zdGVhZGAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcclxuICAgICAgICAgICAgaWYgKHRlbXBSZXQgIT09IHVuZGVmaW5lZCkgZGF0YS5yZXR1cm5WYWx1ZSA9IHRlbXBSZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoYmVmb3JlKSBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnMoYmVmb3JlLCBcImBiZWZvcmVgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XHJcbiAgICAgICAgICAgIGRhdGEuY2FsbE9yaWdpbmFsTWV0aG9kKCk7XHJcbiAgICAgICAgICAgIGlmIChhZnRlcikgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKGFmdGVyLCBcImBhZnRlcmAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9uY2UpIGNhbmNlbCgpO1xyXG4gICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgfTtcclxuICAgIHdoYXRbbWV0aG9kTmFtZV0uX19tb25rZXlQYXRjaGVkID0gdHJ1ZTtcclxuICAgIGlmICghd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kKSB3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnTWV0aG9kO1xyXG4gICAgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSA9IFwicGF0Y2hlZCBcIiArICh3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lIHx8IG1ldGhvZE5hbWUpO1xyXG4gICAgcmV0dXJuIGNhbmNlbDtcclxufTtcclxuLy8gRXZlbnQgd2hlbiBlbGVtZW50IGlzIHJlbW92ZWRcclxuQmRBcGkub25SZW1vdmVkID0gZnVuY3Rpb24obm9kZSwgY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBVdGlsaXRpZXMub25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKTtcclxufTtcclxuXHJcbi8vIFdyYXBzIGZ1bmN0aW9uIGluIHRyeS4uY2F0Y2hcclxuQmRBcGkuc3VwcHJlc3NFcnJvcnMgPSBmdW5jdGlvbihtZXRob2QsIG1lc3NhZ2UpIHtcclxuICAgIHJldHVybiBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnMobWV0aG9kLCBtZXNzYWdlKTtcclxufTtcclxuXHJcbi8vIFRlc3RzIGZvciB2YWxpZCBKU09OXHJcbkJkQXBpLnRlc3RKU09OID0gZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgcmV0dXJuIFV0aWxpdGllcy50ZXN0SlNPTihkYXRhKTtcclxufTtcclxuXHJcbi8vR2V0IGFub3RoZXIgcGx1Z2luXHJcbi8vbmFtZSA9IG5hbWUgb2YgcGx1Z2luXHJcbkJkQXBpLmdldFBsdWdpbiA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICByZXR1cm4gUGx1Z2luTWFuYWdlci5hZGRvbkxpc3QuZmluZChhID0+IGEubmFtZSA9PSBuYW1lKTtcclxufTtcclxuXHJcbkJkQXBpLmlzUGx1Z2luRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuZ2V0UGx1Z2luKG5hbWUpO1xyXG4gICAgaWYgKCFwbHVnaW4pIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBQbHVnaW5NYW5hZ2VyLmlzRW5hYmxlZChwbHVnaW4uaWQpO1xyXG59O1xyXG5cclxuQmRBcGkuaXNUaGVtZUVuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICBjb25zdCB0aGVtZSA9IFRoZW1lTWFuYWdlci5hZGRvbkxpc3QuZmluZChhID0+IGEubmFtZSA9PSBuYW1lKTtcclxuICAgIGlmICghdGhlbWUpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBUaGVtZU1hbmFnZXIuaXNFbmFibGVkKHRoZW1lLmlkKTtcclxufTtcclxuXHJcbkJkQXBpLmlzU2V0dGluZ0VuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5nZXRCRERhdGEgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0QkREYXRhKGtleSk7XHJcbn07XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2V0QkREYXRhID0gZnVuY3Rpb24oa2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldEJERGF0YShrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuLy8gY29uc3QgbWFrZUFkZG9uQVBJID0gKGNvb2tpZSwgbGlzdCwgbWFuYWdlcikgPT4gbmV3IGNsYXNzIEFkZG9uQVBJIHtcclxuXHJcbi8vICAgICBnZXQgZm9sZGVyKCkge3JldHVybiBtYW5hZ2VyLmZvbGRlcjt9XHJcblxyXG4vLyAgICAgaXNFbmFibGVkKG5hbWUpIHtcclxuLy8gICAgICAgICByZXR1cm4gISFjb29raWVbbmFtZV07XHJcbi8vICAgICB9XHJcblxyXG4vLyAgICAgZW5hYmxlKG5hbWUpIHtcclxuLy8gICAgICAgICByZXR1cm4gbWFuYWdlci5lbmFibGUobmFtZSk7XHJcbi8vICAgICB9XHJcblxyXG4vLyAgICAgZGlzYWJsZShuYW1lKSB7XHJcbi8vICAgICAgICAgcmV0dXJuIG1hbmFnZXIuZGlzYWJsZShuYW1lKTtcclxuLy8gICAgIH1cclxuXHJcbi8vICAgICB0b2dnbGUobmFtZSkge1xyXG4vLyAgICAgICAgIGlmIChjb29raWVbbmFtZV0pIHRoaXMuZGlzYWJsZShuYW1lKTtcclxuLy8gICAgICAgICBlbHNlIHRoaXMuZW5hYmxlKG5hbWUpO1xyXG4vLyAgICAgfVxyXG5cclxuLy8gICAgIHJlbG9hZChuYW1lKSB7XHJcbi8vICAgICAgICAgcmV0dXJuIG1hbmFnZXIucmVsb2FkKG5hbWUpO1xyXG4vLyAgICAgfVxyXG5cclxuLy8gICAgIGdldChuYW1lKSB7XHJcbi8vICAgICAgICAgaWYgKGxpc3QuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuLy8gICAgICAgICAgICAgaWYgKGxpc3RbbmFtZV0ucGx1Z2luKSByZXR1cm4gbGlzdFtuYW1lXS5wbHVnaW47XHJcbi8vICAgICAgICAgICAgIHJldHVybiBsaXN0W25hbWVdO1xyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgICByZXR1cm4gbnVsbDtcclxuLy8gICAgIH1cclxuXHJcbi8vICAgICBnZXRBbGwoKSB7XHJcbi8vICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGxpc3QpLm1hcChrID0+IHRoaXMuZ2V0KGspKS5maWx0ZXIoYSA9PiBhKTtcclxuLy8gICAgIH1cclxuLy8gfTtcclxuXHJcbi8vIEJkQXBpLlBsdWdpbnMgPSBtYWtlQWRkb25BUEkocGx1Z2luQ29va2llLCBiZHBsdWdpbnMsIHBsdWdpbk1vZHVsZSk7XHJcbi8vIEJkQXBpLlRoZW1lcyA9IG1ha2VBZGRvbkFQSSh0aGVtZUNvb2tpZSwgYmR0aGVtZXMsIHRoZW1lTW9kdWxlKTtcclxuXHJcbkJkQXBpLlBsdWdpbnMgPSBCZEFwaS50aGVtZXMgPSBuZXcgY2xhc3MgQWRkb25BUEkge1xyXG5cclxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIFwiXCI7fVxyXG5cclxuICAgIGlzRW5hYmxlZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGwoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmRBcGk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/pluginapi.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n\n\n\n\n\n\n\n\n\nconst BdApi = {\n get React() {\n return _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React;\n },\n\n get ReactDOM() {\n return _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ReactDOM;\n },\n\n get WindowConfigFile() {\n if (this._windowConfigFile) return this._windowConfigFile;\n\n const electron = __webpack_require__(/*! electron */ \"electron\").remote.app;\n\n const path = __webpack_require__(/*! path */ \"path\");\n\n const base = electron.getAppPath();\n const roamingBase = electron.getPath(\"userData\");\n const roamingLocation = path.resolve(roamingBase, electron.getVersion(), \"modules\", \"discord_desktop_core\", \"injector\", \"config.json\");\n const location = path.resolve(base, \"..\", \"app\", \"config.json\");\n\n const fs = __webpack_require__(/*! fs */ \"fs\");\n\n const realLocation = fs.existsSync(location) ? location : fs.existsSync(roamingLocation) ? roamingLocation : null;\n if (!realLocation) return this._windowConfigFile = null;\n return this._windowConfigFile = realLocation;\n }\n\n};\n\nBdApi.getAllWindowPreferences = function () {\n if (!this.WindowConfigFile) return {};\n return require(this.WindowConfigFile);\n};\n\nBdApi.getWindowPreference = function (key) {\n if (!this.WindowConfigFile) return undefined;\n return this.getAllWindowPreferences()[key];\n};\n\nBdApi.setWindowPreference = function (key, value) {\n if (!this.WindowConfigFile) return;\n\n const fs = __webpack_require__(/*! fs */ \"fs\");\n\n const prefs = this.getAllWindowPreferences();\n prefs[key] = value;\n delete __webpack_require__.c[this.WindowConfigFile];\n fs.writeFileSync(this.WindowConfigFile, JSON.stringify(prefs, null, 4));\n}; //Inject CSS to document head\n//id = id of element\n//css = custom css\n\n\nBdApi.injectCSS = function (id, css) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].injectStyle(id, css);\n}; //Clear css/remove any element\n//id = id of element\n\n\nBdApi.clearCSS = function (id) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].removeStyle(id);\n}; //Inject CSS to document head\n//id = id of element\n//css = custom css\n\n\nBdApi.linkJS = function (id, url) {\n return _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].injectScript(id, url);\n}; //Clear css/remove any element\n//id = id of element\n\n\nBdApi.unlinkJS = function (id) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].removeScript(id);\n};\n/**\r\n * Shows a generic but very customizable modal.\r\n * @param {string} title - title of the modal\r\n * @param {string} content - a string of text to display in the modal\r\n */\n\n\nBdApi.alert = function (title, content) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_6__[\"default\"].alert(title, content);\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\nBdApi.showConfirmationModal = function (title, content, options = {}) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_6__[\"default\"].showConfirmationModal(title, content, options);\n};\n/**\r\n * This shows a toast similar to android towards the bottom of the screen.\r\n *\r\n * @param {string} content The string to show in the toast.\r\n * @param {object} options Options object. Optional parameter.\r\n * @param {string} [options.type=\"\"] Changes the type of the toast stylistically and semantically. Choices: \"\", \"info\", \"success\", \"danger\"/\"error\", \"warning\"/\"warn\". Default: \"\"\r\n * @param {boolean} [options.icon=true] Determines whether the icon should show corresponding to the type. A toast without type will always have no icon. Default: true\r\n * @param {number} [options.timeout=3000] Adjusts the time (in ms) the toast should be shown for before disappearing automatically. Default: 3000\r\n * @param {boolean} [options.forceShow=false] Whether to force showing the toast and ignore the bd setting\r\n */\n\n\nBdApi.showToast = function (content, options = {}) {\n _ui_toasts__WEBPACK_IMPORTED_MODULE_5__[\"default\"].show(content, options);\n}; // Finds module\n\n\nBdApi.findModule = function (filter) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getModule(filter);\n}; // Finds module\n\n\nBdApi.findAllModules = function (filter) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getModule(filter, false);\n}; // Finds module\n\n\nBdApi.findModuleByProps = function (...props) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(...props);\n};\n\nBdApi.findModuleByPrototypes = function (...protos) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByPrototypes(...protos);\n};\n\nBdApi.findModuleByDisplayName = function (name) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByDisplayName(name);\n}; // Gets react instance\n\n\nBdApi.getInternalInstance = function (node) {\n if (!(node instanceof window.jQuery) && !(node instanceof Element)) return undefined;\n if (node instanceof jQuery) node = node[0];\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getReactInstance(node);\n}; // Gets data\n\n\nBdApi.loadData = function (pluginName, key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getPluginData(pluginName, key);\n};\n\nBdApi.getData = BdApi.loadData; // Sets data\n\nBdApi.saveData = function (pluginName, key, data) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setPluginData(pluginName, key, data);\n};\n\nBdApi.setData = BdApi.saveData; // Deletes data\n\nBdApi.deleteData = function (pluginName, key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].deletePluginData(pluginName, key);\n}; // Patches other functions\n\n\nBdApi.monkeyPatch = function (what, methodName, options) {\n const {\n before,\n after,\n instead,\n once = false,\n silent = false,\n force = false\n } = options;\n const displayName = options.displayName || what.displayName || what.name || what.constructor.displayName || what.constructor.name;\n if (!silent) console.log(\"patch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n\n if (!what[methodName]) {\n if (force) what[methodName] = function () {};else return console.error(methodName, \"does not exist for\", displayName); // eslint-disable-line no-console\n }\n\n const origMethod = what[methodName];\n\n const cancel = () => {\n if (!silent) console.log(\"unpatch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n\n what[methodName] = origMethod;\n };\n\n what[methodName] = function () {\n const data = {\n thisObject: this,\n methodArguments: arguments,\n cancelPatch: cancel,\n originalMethod: origMethod,\n callOriginalMethod: () => data.returnValue = data.originalMethod.apply(data.thisObject, data.methodArguments)\n };\n\n if (instead) {\n const tempRet = _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(instead, \"`instead` callback of \" + what[methodName].displayName)(data);\n if (tempRet !== undefined) data.returnValue = tempRet;\n } else {\n if (before) _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(before, \"`before` callback of \" + what[methodName].displayName)(data);\n data.callOriginalMethod();\n if (after) _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(after, \"`after` callback of \" + what[methodName].displayName)(data);\n }\n\n if (once) cancel();\n return data.returnValue;\n };\n\n what[methodName].__monkeyPatched = true;\n if (!what[methodName].__originalMethod) what[methodName].__originalMethod = origMethod;\n what[methodName].displayName = \"patched \" + (what[methodName].displayName || methodName);\n return cancel;\n}; // Event when element is removed\n\n\nBdApi.onRemoved = function (node, callback) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].onRemoved(node, callback);\n}; // Wraps function in try..catch\n\n\nBdApi.suppressErrors = function (method, message) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(method, message);\n}; // Tests for valid JSON\n\n\nBdApi.testJSON = function (data) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testJSON(data);\n}; //Get another plugin\n//name = name of plugin\n\n\nBdApi.getPlugin = function (name) {\n return _pluginmanager__WEBPACK_IMPORTED_MODULE_7__[\"default\"].addonList.find(a => a.name == name);\n};\n\nBdApi.isPluginEnabled = function (name) {\n const plugin = this.getPlugin(name);\n if (!plugin) return false;\n return _pluginmanager__WEBPACK_IMPORTED_MODULE_7__[\"default\"].isEnabled(plugin.id);\n};\n\nBdApi.isThemeEnabled = function (name) {\n const theme = _thememanager__WEBPACK_IMPORTED_MODULE_8__[\"default\"].addonList.find(a => a.name == name);\n if (!theme) return false;\n return _thememanager__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isEnabled(theme.id);\n};\n\nBdApi.isSettingEnabled = function (name) {\n return null;\n};\n\nBdApi.enableSetting = function (id) {\n return settingsPanel.onChange(id, true);\n};\n\nBdApi.disableSetting = function (id) {\n return settingsPanel.onChange(id, false);\n};\n\nBdApi.toggleSetting = function (id) {\n return settingsPanel.onChange(id, !settingsCookie[id]);\n}; // Gets data\n\n\nBdApi.getBDData = function (key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getBDData(key);\n}; // Sets data\n\n\nBdApi.setBDData = function (key, data) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setBDData(key, data);\n}; // const makeAddonAPI = (cookie, list, manager) => new class AddonAPI {\n// get folder() {return manager.folder;}\n// isEnabled(name) {\n// return !!cookie[name];\n// }\n// enable(name) {\n// return manager.enable(name);\n// }\n// disable(name) {\n// return manager.disable(name);\n// }\n// toggle(name) {\n// if (cookie[name]) this.disable(name);\n// else this.enable(name);\n// }\n// reload(name) {\n// return manager.reload(name);\n// }\n// get(name) {\n// if (list.hasOwnProperty(name)) {\n// if (list[name].plugin) return list[name].plugin;\n// return list[name];\n// }\n// return null;\n// }\n// getAll() {\n// return Object.keys(list).map(k => this.get(k)).filter(a => a);\n// }\n// };\n// BdApi.Plugins = makeAddonAPI(pluginCookie, bdplugins, pluginModule);\n// BdApi.Themes = makeAddonAPI(themeCookie, bdthemes, themeModule);\n\n\nBdApi.Plugins = BdApi.Themes = new class AddonAPI {\n get folder() {\n return \"\";\n }\n\n isEnabled(name) {\n return null;\n }\n\n enable(name) {\n return null;\n }\n\n disable(name) {\n return null;\n }\n\n toggle(name) {\n return null;\n }\n\n reload(name) {\n return null;\n }\n\n get(name) {\n return null;\n }\n\n getAll() {\n return [];\n }\n\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (BdApi);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvcGx1Z2luYXBpLmpzPzZhOTMiXSwibmFtZXMiOlsiQmRBcGkiLCJSZWFjdCIsIkRpc2NvcmRNb2R1bGVzIiwiUmVhY3RET00iLCJXaW5kb3dDb25maWdGaWxlIiwiX3dpbmRvd0NvbmZpZ0ZpbGUiLCJlbGVjdHJvbiIsInJlcXVpcmUiLCJyZW1vdGUiLCJhcHAiLCJwYXRoIiwiYmFzZSIsImdldEFwcFBhdGgiLCJyb2FtaW5nQmFzZSIsImdldFBhdGgiLCJyb2FtaW5nTG9jYXRpb24iLCJyZXNvbHZlIiwiZ2V0VmVyc2lvbiIsImxvY2F0aW9uIiwiZnMiLCJyZWFsTG9jYXRpb24iLCJleGlzdHNTeW5jIiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsImdldFdpbmRvd1ByZWZlcmVuY2UiLCJrZXkiLCJ1bmRlZmluZWQiLCJzZXRXaW5kb3dQcmVmZXJlbmNlIiwidmFsdWUiLCJwcmVmcyIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5IiwiaW5qZWN0Q1NTIiwiaWQiLCJjc3MiLCJET01NYW5hZ2VyIiwiaW5qZWN0U3R5bGUiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwidXJsIiwiaW5qZWN0U2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJhbGVydCIsInRpdGxlIiwiY29udGVudCIsIk1vZGFscyIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsIm9wdGlvbnMiLCJzaG93VG9hc3QiLCJUb2FzdHMiLCJzaG93IiwiZmluZE1vZHVsZSIsImZpbHRlciIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0TW9kdWxlIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kTW9kdWxlQnlQcm9wcyIsInByb3BzIiwiZ2V0QnlQcm9wcyIsImZpbmRNb2R1bGVCeVByb3RvdHlwZXMiLCJwcm90b3MiLCJnZXRCeVByb3RvdHlwZXMiLCJmaW5kTW9kdWxlQnlEaXNwbGF5TmFtZSIsIm5hbWUiLCJnZXRCeURpc3BsYXlOYW1lIiwiZ2V0SW50ZXJuYWxJbnN0YW5jZSIsIm5vZGUiLCJ3aW5kb3ciLCJqUXVlcnkiLCJFbGVtZW50IiwiVXRpbGl0aWVzIiwiZ2V0UmVhY3RJbnN0YW5jZSIsImxvYWREYXRhIiwicGx1Z2luTmFtZSIsIkRhdGFTdG9yZSIsImdldFBsdWdpbkRhdGEiLCJnZXREYXRhIiwic2F2ZURhdGEiLCJkYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIm1vbmtleVBhdGNoIiwid2hhdCIsIm1ldGhvZE5hbWUiLCJiZWZvcmUiLCJhZnRlciIsImluc3RlYWQiLCJvbmNlIiwic2lsZW50IiwiZm9yY2UiLCJkaXNwbGF5TmFtZSIsImNvbnN0cnVjdG9yIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwib3JpZ01ldGhvZCIsImNhbmNlbCIsInRoaXNPYmplY3QiLCJtZXRob2RBcmd1bWVudHMiLCJhcmd1bWVudHMiLCJjYW5jZWxQYXRjaCIsIm9yaWdpbmFsTWV0aG9kIiwiY2FsbE9yaWdpbmFsTWV0aG9kIiwicmV0dXJuVmFsdWUiLCJhcHBseSIsInRlbXBSZXQiLCJzdXBwcmVzc0Vycm9ycyIsIl9fbW9ua2V5UGF0Y2hlZCIsIl9fb3JpZ2luYWxNZXRob2QiLCJvblJlbW92ZWQiLCJjYWxsYmFjayIsIm1ldGhvZCIsIm1lc3NhZ2UiLCJ0ZXN0SlNPTiIsImdldFBsdWdpbiIsIlBsdWdpbk1hbmFnZXIiLCJhZGRvbkxpc3QiLCJmaW5kIiwiYSIsImlzUGx1Z2luRW5hYmxlZCIsInBsdWdpbiIsImlzRW5hYmxlZCIsImlzVGhlbWVFbmFibGVkIiwidGhlbWUiLCJUaGVtZU1hbmFnZXIiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsInNldHRpbmdzUGFuZWwiLCJvbkNoYW5nZSIsImRpc2FibGVTZXR0aW5nIiwidG9nZ2xlU2V0dGluZyIsInNldHRpbmdzQ29va2llIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkFkZG9uQVBJIiwiZm9sZGVyIiwiZW5hYmxlIiwiZGlzYWJsZSIsInRvZ2dsZSIsInJlbG9hZCIsImdldCIsImdldEFsbCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxLQUFLLEdBQUc7QUFDVixNQUFJQyxLQUFKLEdBQVk7QUFBRSxXQUFPQyx1REFBYyxDQUFDRCxLQUF0QjtBQUE4QixHQURsQzs7QUFFVixNQUFJRSxRQUFKLEdBQWU7QUFBRSxXQUFPRCx1REFBYyxDQUFDQyxRQUF0QjtBQUFpQyxHQUZ4Qzs7QUFHVixNQUFJQyxnQkFBSixHQUF1QjtBQUNuQixRQUFJLEtBQUtDLGlCQUFULEVBQTRCLE9BQU8sS0FBS0EsaUJBQVo7O0FBQzVCLFVBQU1DLFFBQVEsR0FBR0MsbUJBQU8sQ0FBQywwQkFBRCxDQUFQLENBQW9CQyxNQUFwQixDQUEyQkMsR0FBNUM7O0FBQ0EsVUFBTUMsSUFBSSxHQUFHSCxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUNBLFVBQU1JLElBQUksR0FBR0wsUUFBUSxDQUFDTSxVQUFULEVBQWI7QUFDQSxVQUFNQyxXQUFXLEdBQUdQLFFBQVEsQ0FBQ1EsT0FBVCxDQUFpQixVQUFqQixDQUFwQjtBQUNBLFVBQU1DLGVBQWUsR0FBR0wsSUFBSSxDQUFDTSxPQUFMLENBQWFILFdBQWIsRUFBMEJQLFFBQVEsQ0FBQ1csVUFBVCxFQUExQixFQUFpRCxTQUFqRCxFQUE0RCxzQkFBNUQsRUFBb0YsVUFBcEYsRUFBZ0csYUFBaEcsQ0FBeEI7QUFDQSxVQUFNQyxRQUFRLEdBQUdSLElBQUksQ0FBQ00sT0FBTCxDQUFhTCxJQUFiLEVBQW1CLElBQW5CLEVBQXlCLEtBQXpCLEVBQWdDLGFBQWhDLENBQWpCOztBQUNBLFVBQU1RLEVB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOzs7QUFFQWpGLEtBQUssQ0FBQzJJLE9BQU4sR0FBZ0IzSSxLQUFLLENBQUM0SSxNQUFOLEdBQWUsSUFBSSxNQUFNQyxRQUFOLENBQWU7QUFFOUMsTUFBSUMsTUFBSixHQUFhO0FBQUMsV0FBTyxFQUFQO0FBQVc7O0FBRXpCaEIsV0FBUyxDQUFDNUQsSUFBRCxFQUFPO0FBQ1osV0FBTyxJQUFQO0FBQ0g7O0FBRUQ2RSxRQUFNLENBQUM3RSxJQUFELEVBQU87QUFDVCxXQUFPLElBQVA7QUFDSDs7QUFFRDhFLFNBQU8sQ0FBQzlFLElBQUQsRUFBTztBQUNWLFdBQU8sSUFBUDtBQUNIOztBQUVEK0UsUUFBTSxDQUFDL0UsSUFBRCxFQUFPO0FBQ1QsV0FBTyxJQUFQO0FBQ0g7O0FBRURnRixRQUFNLENBQUNoRixJQUFELEVBQU87QUFDVCxXQUFPLElBQVA7QUFDSDs7QUFFRGlGLEtBQUcsQ0FBQ2pGLElBQUQsRUFBTztBQUNOLFdBQU8sSUFBUDtBQUNIOztBQUVEa0YsUUFBTSxHQUFHO0FBQ0wsV0FBTyxFQUFQO0FBQ0g7O0FBOUI2QyxDQUFuQixFQUEvQjtBQWlDZXBKLG9FQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvcGx1Z2luYXBpLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFV0aWxpdGllcyBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2ttb2R1bGVzXCI7XHJcbmltcG9ydCBEaXNjb3JkTW9kdWxlcyBmcm9tIFwiLi9kaXNjb3JkbW9kdWxlc1wiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFzdG9yZVwiO1xyXG5pbXBvcnQgRE9NTWFuYWdlciBmcm9tIFwiLi9kb21tYW5hZ2VyXCI7XHJcbmltcG9ydCBUb2FzdHMgZnJvbSBcIi4uL3VpL3RvYXN0c1wiO1xyXG5pbXBvcnQgTW9kYWxzIGZyb20gXCIuLi91aS9tb2RhbHNcIjtcclxuaW1wb3J0IFBsdWdpbk1hbmFnZXIgZnJvbSBcIi4vcGx1Z2lubWFuYWdlclwiO1xyXG5pbXBvcnQgVGhlbWVNYW5hZ2VyIGZyb20gXCIuL3RoZW1lbWFuYWdlclwiO1xyXG5cclxuY29uc3QgQmRBcGkgPSB7XHJcbiAgICBnZXQgUmVhY3QoKSB7IHJldHVybiBEaXNjb3JkTW9kdWxlcy5SZWFjdDsgfSxcclxuICAgIGdldCBSZWFjdERPTSgpIHsgcmV0dXJuIERpc2NvcmRNb2R1bGVzLlJlYWN0RE9NOyB9LFxyXG4gICAgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUpIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlO1xyXG4gICAgICAgIGNvbnN0IGVsZWN0cm9uID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHA7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG4gICAgICAgIGNvbnN0IGJhc2UgPSBlbGVjdHJvbi5nZXRBcHBQYXRoKCk7XHJcbiAgICAgICAgY29uc3Qgcm9hbWluZ0Jhc2UgPSBlbGVjdHJvbi5nZXRQYXRoKFwidXNlckRhdGFcIik7XHJcbiAgICAgICAgY29uc3Qgcm9hbWluZ0xvY2F0aW9uID0gcGF0aC5yZXNvbHZlKHJvYW1pbmdCYXNlLCBlbGVjdHJvbi5nZXRWZXJzaW9uKCksIFwibW9kdWxlc1wiLCBcImRpc2NvcmRfZGVza3RvcF9jb3JlXCIsIFwiaW5qZWN0b3JcIiwgXCJjb25maWcuanNvblwiKTtcclxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShiYXNlLCBcIi4uXCIsIFwiYXBwXCIsIFwiY29uZmlnLmpzb25cIik7XHJcbiAgICAgICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICAgICAgY29uc3QgcmVhbExvY2F0aW9uID0gZnMuZXhpc3RzU3luYyhsb2NhdGlvbikgPyBsb2NhdGlvbiA6IGZzLmV4aXN0c1N5bmMocm9hbWluZ0xvY2F0aW9uKSA/IHJvYW1pbmdMb2NhdGlvbiA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFyZWFsTG9jYXRpb24pIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93Q29uZmlnRmlsZSA9IHJlYWxMb2NhdGlvbjtcclxuICAgIH1cclxufTtcclxuXHJcbkJkQXBpLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoIXRoaXMuV2luZG93Q29uZmlnRmlsZSkgcmV0dXJuIHt9O1xyXG4gICAgcmV0dXJuIF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHRoaXMuV2luZG93Q29uZmlnRmlsZSk7XHJcbn07XHJcblxyXG5CZEFwaS5nZXRXaW5kb3dQcmVmZXJlbmNlID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICBpZiAoIXRoaXMuV2luZG93Q29uZmlnRmlsZSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIHJldHVybiB0aGlzLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzKClba2V5XTtcclxufTtcclxuXHJcbkJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAoIXRoaXMuV2luZG93Q29uZmlnRmlsZSkgcmV0dXJuO1xyXG4gICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICBjb25zdCBwcmVmcyA9IHRoaXMuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKTtcclxuICAgIHByZWZzW2tleV0gPSB2YWx1ZTtcclxuICAgIGRlbGV0ZSByZXF1aXJlLmNhY2hlW3RoaXMuV2luZG93Q29uZmlnRmlsZV07XHJcbiAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuV2luZG93Q29uZmlnRmlsZSwgSlNPTi5zdHJpbmdpZnkocHJlZnMsIG51bGwsIDQpKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5pbmplY3RDU1MgPSBmdW5jdGlvbiAoaWQsIGNzcykge1xyXG4gICAgRE9NTWFuYWdlci5pbmplY3RTdHlsZShpZCwgY3NzKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS5jbGVhckNTUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NTWFuYWdlci5yZW1vdmVTdHlsZShpZCk7XHJcbn07XHJcblxyXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG4vL2NzcyA9IGN1c3RvbSBjc3NcclxuQmRBcGkubGlua0pTID0gZnVuY3Rpb24gKGlkLCB1cmwpIHtcclxuICAgIHJldHVybiBET01NYW5hZ2VyLmluamVjdFNjcmlwdChpZCwgdXJsKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS51bmxpbmtKUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NTWFuYWdlci5yZW1vdmVTY3JpcHQoaWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgbW9kYWwuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIGEgc3RyaW5nIG9mIHRleHQgdG8gZGlzcGxheSBpbiB0aGUgbW9kYWxcclxuICovXHJcbkJkQXBpLmFsZXJ0ID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICBNb2RhbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWFjdEVsZW1lbnR8QXJyYXk8c3RyaW5nfFJlYWN0RWxlbWVudD4pfSBjaGlsZHJlbiAtIGEgc2luZ2xlIG9yIG1peGVkIGFycmF5IG9mIHJlYWN0IGVsZW1lbnRzIGFuZCBzdHJpbmdzLiBFdmVyeXRoaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBUZXh0RWxlbWVudGAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKi9cclxuQmRBcGkuc2hvd0NvbmZpcm1hdGlvbk1vZGFsID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBNb2RhbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUaGlzIHNob3dzIGEgdG9hc3Qgc2ltaWxhciB0byBhbmRyb2lkIHRvd2FyZHMgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBUaGUgc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvYXN0LlxyXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBPcHRpb25zIG9iamVjdC4gT3B0aW9uYWwgcGFyYW1ldGVyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudHlwZT1cIlwiXSBDaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB0b2FzdCBzdHlsaXN0aWNhbGx5IGFuZCBzZW1hbnRpY2FsbHkuIENob2ljZXM6IFwiXCIsIFwiaW5mb1wiLCBcInN1Y2Nlc3NcIiwgXCJkYW5nZXJcIi9cImVycm9yXCIsIFwid2FybmluZ1wiL1wid2FyblwiLiBEZWZhdWx0OiBcIlwiXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaWNvbj10cnVlXSBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50aW1lb3V0PTMwMDBdIEFkanVzdHMgdGhlIHRpbWUgKGluIG1zKSB0aGUgdG9hc3Qgc2hvdWxkIGJlIHNob3duIGZvciBiZWZvcmUgZGlzYXBwZWFyaW5nIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQ6IDMwMDBcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mb3JjZVNob3c9ZmFsc2VdIFdoZXRoZXIgdG8gZm9yY2Ugc2hvd2luZyB0aGUgdG9hc3QgYW5kIGlnbm9yZSB0aGUgYmQgc2V0dGluZ1xyXG4gKi9cclxuQmRBcGkuc2hvd1RvYXN0ID0gZnVuY3Rpb24oY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBUb2FzdHMuc2hvdyhjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlID0gZnVuY3Rpb24oZmlsdGVyKSB7XHJcbiAgICByZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKGZpbHRlcik7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZEFsbE1vZHVsZXMgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUoZmlsdGVyLCBmYWxzZSk7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvcHMgPSBmdW5jdGlvbiguLi5wcm9wcykge1xyXG4gICAgcmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoLi4ucHJvcHMpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvdG90eXBlcyA9IGZ1bmN0aW9uKC4uLnByb3Rvcykge1xyXG4gICAgcmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvdG90eXBlcyguLi5wcm90b3MpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShuYW1lKTtcclxufTtcclxuXHJcbi8vIEdldHMgcmVhY3QgaW5zdGFuY2VcclxuQmRBcGkuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cualF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmIChub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSBub2RlID0gbm9kZVswXTtcclxuICAgIHJldHVybiBVdGlsaXRpZXMuZ2V0UmVhY3RJbnN0YW5jZShub2RlKTtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5sb2FkRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XHJcbn07XHJcblxyXG5CZEFwaS5nZXREYXRhID0gQmRBcGkubG9hZERhdGE7XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2F2ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuQmRBcGkuc2V0RGF0YSA9IEJkQXBpLnNhdmVEYXRhO1xyXG5cclxuLy8gRGVsZXRlcyBkYXRhXHJcbkJkQXBpLmRlbGV0ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZGVsZXRlUGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xyXG59O1xyXG5cclxuLy8gUGF0Y2hlcyBvdGhlciBmdW5jdGlvbnNcclxuQmRBcGkubW9ua2V5UGF0Y2ggPSBmdW5jdGlvbih3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7YmVmb3JlLCBhZnRlciwgaW5zdGVhZCwgb25jZSA9IGZhbHNlLCBzaWxlbnQgPSBmYWxzZSwgZm9yY2UgPSBmYWxzZX0gPSBvcHRpb25zO1xyXG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdC5uYW1lIHx8IHdoYXQuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwicGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxyXG4gICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdKSB7XHJcbiAgICAgICAgaWYgKGZvcmNlKSB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7fTtcclxuICAgICAgICBlbHNlIHJldHVybiBjb25zb2xlLmVycm9yKG1ldGhvZE5hbWUsIFwiZG9lcyBub3QgZXhpc3QgZm9yXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXHJcbiAgICB9XHJcbiAgICBjb25zdCBvcmlnTWV0aG9kID0gd2hhdFttZXRob2ROYW1lXTtcclxuICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJ1bnBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICB3aGF0W21ldGhvZE5hbWVdID0gb3JpZ01ldGhvZDtcclxuICAgIH07XHJcbiAgICB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgICAgdGhpc09iamVjdDogdGhpcyxcclxuICAgICAgICAgICAgbWV0aG9kQXJndW1lbnRzOiBhcmd1bWVudHMsXHJcbiAgICAgICAgICAgIGNhbmNlbFBhdGNoOiBjYW5jZWwsXHJcbiAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kOiBvcmlnTWV0aG9kLFxyXG4gICAgICAgICAgICBjYWxsT3JpZ2luYWxNZXRob2Q6ICgpID0+IGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLm9yaWdpbmFsTWV0aG9kLmFwcGx5KGRhdGEudGhpc09iamVjdCwgZGF0YS5tZXRob2RBcmd1bWVudHMpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoaW5zdGVhZCkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wUmV0ID0gVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKGluc3RlYWQsIFwiYGluc3RlYWRgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XHJcbiAgICAgICAgICAgIGlmICh0ZW1wUmV0ICE9PSB1bmRlZmluZWQpIGRhdGEucmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGJlZm9yZSkgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKGJlZm9yZSwgXCJgYmVmb3JlYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xyXG4gICAgICAgICAgICBkYXRhLmNhbGxPcmlnaW5hbE1ldGhvZCgpO1xyXG4gICAgICAgICAgICBpZiAoYWZ0ZXIpIFV0aWxpdGllcy5zdXBwcmVzc0Vycm9ycyhhZnRlciwgXCJgYWZ0ZXJgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvbmNlKSBjYW5jZWwoKTtcclxuICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZTtcclxuICAgIH07XHJcbiAgICB3aGF0W21ldGhvZE5hbWVdLl9fbW9ua2V5UGF0Y2hlZCA9IHRydWU7XHJcbiAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCkgd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kID0gb3JpZ01ldGhvZDtcclxuICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBcInBhdGNoZWQgXCIgKyAod2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCBtZXRob2ROYW1lKTtcclxuICAgIHJldHVybiBjYW5jZWw7XHJcbn07XHJcbi8vIEV2ZW50IHdoZW4gZWxlbWVudCBpcyByZW1vdmVkXHJcbkJkQXBpLm9uUmVtb3ZlZCA9IGZ1bmN0aW9uKG5vZGUsIGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gVXRpbGl0aWVzLm9uUmVtb3ZlZChub2RlLCBjYWxsYmFjayk7XHJcbn07XHJcblxyXG4vLyBXcmFwcyBmdW5jdGlvbiBpbiB0cnkuLmNhdGNoXHJcbkJkQXBpLnN1cHByZXNzRXJyb3JzID0gZnVuY3Rpb24obWV0aG9kLCBtZXNzYWdlKSB7XHJcbiAgICByZXR1cm4gVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSk7XHJcbn07XHJcblxyXG4vLyBUZXN0cyBmb3IgdmFsaWQgSlNPTlxyXG5CZEFwaS50ZXN0SlNPTiA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgIHJldHVybiBVdGlsaXRpZXMudGVzdEpTT04oZGF0YSk7XHJcbn07XHJcblxyXG4vL0dldCBhbm90aGVyIHBsdWdpblxyXG4vL25hbWUgPSBuYW1lIG9mIHBsdWdpblxyXG5CZEFwaS5nZXRQbHVnaW4gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgcmV0dXJuIFBsdWdpbk1hbmFnZXIuYWRkb25MaXN0LmZpbmQoYSA9PiBhLm5hbWUgPT0gbmFtZSk7XHJcbn07XHJcblxyXG5CZEFwaS5pc1BsdWdpbkVuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICBjb25zdCBwbHVnaW4gPSB0aGlzLmdldFBsdWdpbihuYW1lKTtcclxuICAgIGlmICghcGx1Z2luKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gUGx1Z2luTWFuYWdlci5pc0VuYWJsZWQocGx1Z2luLmlkKTtcclxufTtcclxuXHJcbkJkQXBpLmlzVGhlbWVFbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgY29uc3QgdGhlbWUgPSBUaGVtZU1hbmFnZXIuYWRkb25MaXN0LmZpbmQoYSA9PiBhLm5hbWUgPT0gbmFtZSk7XHJcbiAgICBpZiAoIXRoZW1lKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gVGhlbWVNYW5hZ2VyLmlzRW5hYmxlZCh0aGVtZS5pZCk7XHJcbn07XHJcblxyXG5CZEFwaS5pc1NldHRpbmdFbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5CZEFwaS5lbmFibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCB0cnVlKTtcclxufTtcclxuXHJcbkJkQXBpLmRpc2FibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCBmYWxzZSk7XHJcbn07XHJcblxyXG5CZEFwaS50b2dnbGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCAhc2V0dGluZ3NDb29raWVbaWRdKTtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5nZXRCRERhdGEgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0QkREYXRhKGtleSk7XHJcbn07XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2V0QkREYXRhID0gZnVuY3Rpb24oa2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldEJERGF0YShrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuLy8gY29uc3QgbWFrZUFkZG9uQVBJID0gKGNvb2tpZSwgbGlzdCwgbWFuYWdlcikgPT4gbmV3IGNsYXNzIEFkZG9uQVBJIHtcclxuXHJcbi8vICAgICBnZXQgZm9sZGVyKCkge3JldHVybiBtYW5hZ2VyLmZvbGRlcjt9XHJcblxyXG4vLyAgICAgaXNFbmFibGVkKG5hbWUpIHtcclxuLy8gICAgICAgICByZXR1cm4gISFjb29raWVbbmFtZV07XHJcbi8vICAgICB9XHJcblxyXG4vLyAgICAgZW5hYmxlKG5hbWUpIHtcclxuLy8gICAgICAgICByZXR1cm4gbWFuYWdlci5lbmFibGUobmFtZSk7XHJcbi8vICAgICB9XHJcblxyXG4vLyAgICAgZGlzYWJsZShuYW1lKSB7XHJcbi8vICAgICAgICAgcmV0dXJuIG1hbmFnZXIuZGlzYWJsZShuYW1lKTtcclxuLy8gICAgIH1cclxuXHJcbi8vICAgICB0b2dnbGUobmFtZSkge1xyXG4vLyAgICAgICAgIGlmIChjb29raWVbbmFtZV0pIHRoaXMuZGlzYWJsZShuYW1lKTtcclxuLy8gICAgICAgICBlbHNlIHRoaXMuZW5hYmxlKG5hbWUpO1xyXG4vLyAgICAgfVxyXG5cclxuLy8gICAgIHJlbG9hZChuYW1lKSB7XHJcbi8vICAgICAgICAgcmV0dXJuIG1hbmFnZXIucmVsb2FkKG5hbWUpO1xyXG4vLyAgICAgfVxyXG5cclxuLy8gICAgIGdldChuYW1lKSB7XHJcbi8vICAgICAgICAgaWYgKGxpc3QuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuLy8gICAgICAgICAgICAgaWYgKGxpc3RbbmFtZV0ucGx1Z2luKSByZXR1cm4gbGlzdFtuYW1lXS5wbHVnaW47XHJcbi8vICAgICAgICAgICAgIHJldHVybiBsaXN0W25hbWVdO1xyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgICByZXR1cm4gbnVsbDtcclxuLy8gICAgIH1cclxuXHJcbi8vICAgICBnZXRBbGwoKSB7XHJcbi8vICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGxpc3QpLm1hcChrID0+IHRoaXMuZ2V0KGspKS5maWx0ZXIoYSA9PiBhKTtcclxuLy8gICAgIH1cclxuLy8gfTtcclxuXHJcbi8vIEJkQXBpLlBsdWdpbnMgPSBtYWtlQWRkb25BUEkocGx1Z2luQ29va2llLCBiZHBsdWdpbnMsIHBsdWdpbk1vZHVsZSk7XHJcbi8vIEJkQXBpLlRoZW1lcyA9IG1ha2VBZGRvbkFQSSh0aGVtZUNvb2tpZSwgYmR0aGVtZXMsIHRoZW1lTW9kdWxlKTtcclxuXHJcbkJkQXBpLlBsdWdpbnMgPSBCZEFwaS5UaGVtZXMgPSBuZXcgY2xhc3MgQWRkb25BUEkge1xyXG5cclxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIFwiXCI7fVxyXG5cclxuICAgIGlzRW5hYmxlZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGwoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmRBcGk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/pluginapi.js\n"); /***/ }), @@ -575,7 +611,19 @@ 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__, \"Filters\", function() { return Filters; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return WebpackModules; });\n/**\r\n * Allows for grabbing and searching through Discord's webpacked modules.\r\n * @module WebpackModules\r\n * @version 0.0.2\r\n */\n// import DiscordModules from \"./discordmodules\";\n\n/**\r\n * Checks if a given module matches a set of parameters.\r\n * @callback module:WebpackModules.Filters~filter\r\n * @param {*} module - module to check\r\n * @returns {boolean} - True if the module matches the filter, false otherwise\r\n */\n\n/**\r\n * Filters for use with {@link module:WebpackModules} but may prove useful elsewhere.\r\n */\nclass Filters {\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties.\r\n * @param {Array} props - Array of property names\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties\r\n */\n static byProperties(props, filter = m => m) {\n return module => {\n const component = filter(module);\n if (!component) return false;\n return props.every(property => component[property] !== undefined);\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties on the object's prototype.\r\n * @param {Array} fields - Array of property names\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties on the object's prototype\r\n */\n\n\n static byPrototypeFields(fields, filter = m => m) {\n return module => {\n const component = filter(module);\n if (!component) return false;\n if (!component.prototype) return false;\n return fields.every(field => component.prototype[field] !== undefined);\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a regex.\r\n * @param {RegExp} search - A RegExp to check on the module\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties\r\n */\n\n\n static byCode(search, filter = m => m) {\n return module => {\n const method = filter(module);\n if (!method) return false;\n return method.toString([]).search(search) !== -1;\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by strings.\r\n * @param {...String} search - A RegExp to check on the module\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of strings\r\n */\n\n\n static byString(...strings) {\n return module => {\n const moduleString = module.toString([]);\n\n for (const s of strings) {\n if (!moduleString.includes(s)) return false;\n }\n\n return true;\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties.\r\n * @param {string} name - Name the module should have\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties\r\n */\n\n\n static byDisplayName(name) {\n return module => {\n return module && module.displayName === name;\n };\n }\n /**\r\n * Generates a combined {@link module:WebpackModules.Filters~filter} from a list of filters.\r\n * @param {...module:WebpackModules.Filters~filter} filters - A list of filters\r\n * @returns {module:WebpackModules.Filters~filter} - Combinatory filter of all arguments\r\n */\n\n\n static combine(...filters) {\n return module => {\n return filters.every(filter => filter(module));\n };\n }\n\n}\nclass WebpackModules {\n static find(filter, first = true) {\n return this.getModule(filter, first);\n }\n\n static findAll(filter) {\n return this.getModule(filter, false);\n }\n\n static findByUniqueProperties(props, first = true) {\n return first ? this.getByProps(...props) : this.getAllByProps(...props);\n }\n\n static findByDisplayName(name) {\n return this.getByDisplayName(name);\n }\n /**\r\n * Finds a module using a filter function.\r\n * @param {Function} filter A function to use to filter modules\r\n * @param {Boolean} first Whether to return only the first matching module\r\n * @return {Any}\r\n */\n\n\n static getModule(filter, first = true) {\n const modules = this.getAllModules();\n const rm = [];\n\n for (const index in modules) {\n if (!modules.hasOwnProperty(index)) continue;\n const module = modules[index];\n const {\n exports\n } = module;\n let foundModule = null;\n if (!exports) continue;\n if (exports.__esModule && exports.default && filter(exports.default)) foundModule = exports.default;\n if (filter(exports)) foundModule = exports;\n if (!foundModule) continue;\n if (first) return foundModule;\n rm.push(foundModule);\n }\n\n return first || rm.length == 0 ? undefined : rm;\n }\n /**\r\n * Finds all modules matching a filter function.\r\n * @param {Function} filter A function to use to filter modules\r\n */\n\n\n static getModules(filter) {\n return this.getModule(filter, false);\n }\n /**\r\n * Finds a module by its name.\r\n * @param {String} name The name of the module\r\n * @param {Function} fallback A function to use to filter modules if not finding a known module\r\n * @return {Any}\r\n */\n // static getModuleByName(name, fallback) {\n // if (DiscordModules.hasOwnProperty(name)) return DiscordModules[name];\n // if (!fallback) return undefined;\n // const module = this.getModule(fallback, true);\n // return module ? DiscordModules[name] = module : undefined;\n // }\n\n /**\r\n * Finds a module by its display name.\r\n * @param {String} name The display name of the module\r\n * @return {Any}\r\n */\n\n\n static getByDisplayName(name) {\n return this.getModule(Filters.byDisplayName(name), true);\n }\n /**\r\n * Finds a module using its code.\r\n * @param {RegEx} regex A regular expression to use to filter modules\r\n * @param {Boolean} first Whether to return the only the first matching module\r\n * @return {Any}\r\n */\n\n\n static getByRegex(regex, first = true) {\n return this.getModule(Filters.byCode(regex), first);\n }\n /**\r\n * Finds a single module using properties on its prototype.\r\n * @param {...string} prototypes Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getByPrototypes(...prototypes) {\n return this.getModule(Filters.byPrototypeFields(prototypes), true);\n }\n /**\r\n * Finds all modules with a set of properties of its prototype.\r\n * @param {...string} prototypes Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getAllByPrototypes(...prototypes) {\n return this.getModule(Filters.byPrototypeFields(prototypes), false);\n }\n /**\r\n * Finds a single module using its own properties.\r\n * @param {...string} props Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getByProps(...props) {\n return this.getModule(Filters.byProperties(props), true);\n }\n /**\r\n * Finds all modules with a set of properties.\r\n * @param {...string} props Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getAllByProps(...props) {\n return this.getModule(Filters.byProperties(props), false);\n }\n /**\r\n * Finds a single module using a set of strings.\r\n * @param {...String} props Strings to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getByString(...strings) {\n return this.getModule(Filters.byString(...strings), true);\n }\n /**\r\n * Finds all modules with a set of strings.\r\n * @param {...String} strings Strings to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getAllByString(...strings) {\n return this.getModule(Filters.byString(...strings), false);\n }\n /**\r\n * Discord's __webpack_require__ function.\r\n */\n\n\n static get require() {\n if (this._require) return this._require;\n const id = \"bbd-webpackmodules\";\n\n const __webpack_require__ = typeof window.webpackJsonp == \"function\" ? window.webpackJsonp([], {\n [id]: (module, exports, __internal_require__) => exports.default = __internal_require__\n }, [id]).default : window.webpackJsonp.push([[], {\n [id]: (module, exports, __internal_require__) => module.exports = __internal_require__\n }, [[id]]]);\n\n delete __webpack_require__.m[id];\n delete __webpack_require__.c[id];\n return this._require = __webpack_require__;\n }\n /**\r\n * Returns all loaded modules.\r\n * @return {Array}\r\n */\n\n\n static getAllModules() {\n return this.require.c;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvd2VicGFja21vZHVsZXMuanM/OWIyNyJdLCJuYW1lcyI6WyJGaWx0ZXJzIiwiYnlQcm9wZXJ0aWVzIiwicHJvcHMiLCJmaWx0ZXIiLCJtIiwibW9kdWxlIiwiY29tcG9uZW50IiwiZXZlcnkiLCJwcm9wZXJ0eSIsInVuZGVmaW5lZCIsImJ5UHJvdG90eXBlRmllbGRzIiwiZmllbGRzIiwicHJvdG90eXBlIiwiZmllbGQiLCJieUNvZGUiLCJzZWFyY2giLCJtZXRob2QiLCJ0b1N0cmluZyIsImJ5U3RyaW5nIiwic3RyaW5ncyIsIm1vZHVsZVN0cmluZyIsInMiLCJpbmNsdWRlcyIsImJ5RGlzcGxheU5hbWUiLCJuYW1lIiwiZGlzcGxheU5hbWUiLCJjb21iaW5lIiwiZmlsdGVycyIsIldlYnBhY2tNb2R1bGVzIiwiZmluZCIsImZpcnN0IiwiZ2V0TW9kdWxlIiwiZmluZEFsbCIsImZpbmRCeVVuaXF1ZVByb3BlcnRpZXMiLCJnZXRCeVByb3BzIiwiZ2V0QWxsQnlQcm9wcyIsImZpbmRCeURpc3BsYXlOYW1lIiwiZ2V0QnlEaXNwbGF5TmFtZSIsIm1vZHVsZXMiLCJnZXRBbGxNb2R1bGVzIiwicm0iLCJpbmRleCIsImhhc093blByb3BlcnR5IiwiZXhwb3J0cyIsImZvdW5kTW9kdWxlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJwdXNoIiwibGVuZ3RoIiwiZ2V0TW9kdWxlcyIsImdldEJ5UmVnZXgiLCJyZWdleCIsImdldEJ5UHJvdG90eXBlcyIsInByb3RvdHlwZXMiLCJnZXRBbGxCeVByb3RvdHlwZXMiLCJnZXRCeVN0cmluZyIsImdldEFsbEJ5U3RyaW5nIiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiaWQiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwid2luZG93Iiwid2VicGFja0pzb25wIiwiX19pbnRlcm5hbF9yZXF1aXJlX18iLCJjIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7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S0FBMkMxRCxNQUFNLENBQUNzQyxPQUFQLEdBQWlCb0I7QUFEckIsS0FBTCxFQUV6QyxDQUFDLENBQUNKLEVBQUQsQ0FBRCxDQUZ5QyxDQUF6QixDQUZuQjs7QUFLQSxXQUFPQyxtQkFBbUIsQ0FBQ3hELENBQXBCLENBQXNCdUQsRUFBdEIsQ0FBUDtBQUNBLFdBQU9DLG1CQUFtQixDQUFDSSxDQUFwQixDQUFzQkwsRUFBdEIsQ0FBUDtBQUNBLFdBQU8sS0FBS0QsUUFBTCxHQUFnQkUsbUJBQXZCO0FBQ0g7QUFFRDs7Ozs7O0FBSUEsU0FBT3JCLGFBQVAsR0FBdUI7QUFDbkIsV0FBTyxLQUFLa0IsT0FBTCxDQUFhTyxDQUFwQjtBQUNIOztBQWxKK0IiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy93ZWJwYWNrbW9kdWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBbGxvd3MgZm9yIGdyYWJiaW5nIGFuZCBzZWFyY2hpbmcgdGhyb3VnaCBEaXNjb3JkJ3Mgd2VicGFja2VkIG1vZHVsZXMuXHJcbiAqIEBtb2R1bGUgV2VicGFja01vZHVsZXNcclxuICogQHZlcnNpb24gMC4wLjJcclxuICovXHJcblxyXG4vLyBpbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIi4vZGlzY29yZG1vZHVsZXNcIjtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBtb2R1bGUgbWF0Y2hlcyBhIHNldCBvZiBwYXJhbWV0ZXJzLlxyXG4gKiBAY2FsbGJhY2sgbW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyXHJcbiAqIEBwYXJhbSB7Kn0gbW9kdWxlIC0gbW9kdWxlIHRvIGNoZWNrXHJcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFRydWUgaWYgdGhlIG1vZHVsZSBtYXRjaGVzIHRoZSBmaWx0ZXIsIGZhbHNlIG90aGVyd2lzZVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBGaWx0ZXJzIGZvciB1c2Ugd2l0aCB7QGxpbmsgbW9kdWxlOldlYnBhY2tNb2R1bGVzfSBidXQgbWF5IHByb3ZlIHVzZWZ1bCBlbHNld2hlcmUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRmlsdGVycyB7XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IHRoYXQgZmlsdGVycyBieSBhIHNldCBvZiBwcm9wZXJ0aWVzLlxyXG4gICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBwcm9wcyAtIEFycmF5IG9mIHByb3BlcnR5IG5hbWVzXHJcbiAgICAgKiBAcGFyYW0ge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gZmlsdGVyIC0gQWRkaXRpb25hbCBmaWx0ZXJcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IC0gQSBmaWx0ZXIgdGhhdCBjaGVja3MgZm9yIGEgc2V0IG9mIHByb3BlcnRpZXNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGJ5UHJvcGVydGllcyhwcm9wcywgZmlsdGVyID0gbSA9PiBtKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGZpbHRlcihtb2R1bGUpO1xyXG4gICAgICAgICAgICBpZiAoIWNvbXBvbmVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMuZXZlcnkocHJvcGVydHkgPT4gY29tcG9uZW50W3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGEge0BsaW5rIG1vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gdGhhdCBmaWx0ZXJzIGJ5IGEgc2V0IG9mIHByb3BlcnRpZXMgb24gdGhlIG9iamVjdCdzIHByb3RvdHlwZS5cclxuICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmllbGRzIC0gQXJyYXkgb2YgcHJvcGVydHkgbmFtZXNcclxuICAgICAqIEBwYXJhbSB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSBmaWx0ZXIgLSBBZGRpdGlvbmFsIGZpbHRlclxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBBIGZpbHRlciB0aGF0IGNoZWNrcyBmb3IgYSBzZXQgb2YgcHJvcGVydGllcyBvbiB0aGUgb2JqZWN0J3MgcHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBieVByb3RvdHlwZUZpZWxkcyhmaWVsZHMsIGZpbHRlciA9IG0gPT4gbSkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBmaWx0ZXIobW9kdWxlKTtcclxuICAgICAgICAgICAgaWYgKCFjb21wb25lbnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCFjb21wb25lbnQucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWVsZHMuZXZlcnkoZmllbGQgPT4gY29tcG9uZW50LnByb3RvdHlwZVtmaWVsZF0gIT09IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IHRoYXQgZmlsdGVycyBieSBhIHJlZ2V4LlxyXG4gICAgICogQHBhcmFtIHtSZWdFeHB9IHNlYXJjaCAtIEEgUmVnRXhwIHRvIGNoZWNrIG9uIHRoZSBtb2R1bGVcclxuICAgICAqIEBwYXJhbSB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSBmaWx0ZXIgLSBBZGRpdGlvbmFsIGZpbHRlclxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBBIGZpbHRlciB0aGF0IGNoZWNrcyBmb3IgYSBzZXQgb2YgcHJvcGVydGllc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYnlDb2RlKHNlYXJjaCwgZmlsdGVyID0gbSA9PiBtKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IGZpbHRlcihtb2R1bGUpO1xyXG4gICAgICAgICAgICBpZiAoIW1ldGhvZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gbWV0aG9kLnRvU3RyaW5nKFtdKS5zZWFyY2goc2VhcmNoKSAhPT0gLTE7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IHRoYXQgZmlsdGVycyBieSBzdHJpbmdzLlxyXG4gICAgICogQHBhcmFtIHsuLi5TdHJpbmd9IHNlYXJjaCAtIEEgUmVnRXhwIHRvIGNoZWNrIG9uIHRoZSBtb2R1bGVcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IC0gQSBmaWx0ZXIgdGhhdCBjaGVja3MgZm9yIGEgc2V0IG9mIHN0cmluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGJ5U3RyaW5nKC4uLnN0cmluZ3MpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kdWxlU3RyaW5nID0gbW9kdWxlLnRvU3RyaW5nKFtdKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBzIG9mIHN0cmluZ3MpIHtcclxuICAgICAgICAgICAgICAgIGlmICghbW9kdWxlU3RyaW5nLmluY2x1ZGVzKHMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IHRoYXQgZmlsdGVycyBieSBhIHNldCBvZiBwcm9wZXJ0aWVzLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIHRoZSBtb2R1bGUgc2hvdWxkIGhhdmVcclxuICAgICAqIEBwYXJhbSB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSBmaWx0ZXIgLSBBZGRpdGlvbmFsIGZpbHRlclxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBBIGZpbHRlciB0aGF0IGNoZWNrcyBmb3IgYSBzZXQgb2YgcHJvcGVydGllc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYnlEaXNwbGF5TmFtZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGUgJiYgbW9kdWxlLmRpc3BsYXlOYW1lID09PSBuYW1lO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYSBjb21iaW5lZCB7QGxpbmsgbW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSBmcm9tIGEgbGlzdCBvZiBmaWx0ZXJzLlxyXG4gICAgICogQHBhcmFtIHsuLi5tb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IGZpbHRlcnMgLSBBIGxpc3Qgb2YgZmlsdGVyc1xyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBDb21iaW5hdG9yeSBmaWx0ZXIgb2YgYWxsIGFyZ3VtZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY29tYmluZSguLi5maWx0ZXJzKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJzLmV2ZXJ5KGZpbHRlciA9PiBmaWx0ZXIobW9kdWxlKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2VicGFja01vZHVsZXMge1xyXG5cclxuICAgIHN0YXRpYyBmaW5kKGZpbHRlciwgZmlyc3QgPSB0cnVlKSB7cmV0dXJuIHRoaXMuZ2V0TW9kdWxlKGZpbHRlciwgZmlyc3QpO31cclxuICAgIHN0YXRpYyBmaW5kQWxsKGZpbHRlcikge3JldHVybiB0aGlzLmdldE1vZHVsZShmaWx0ZXIsIGZhbHNlKTt9XHJcbiAgICBzdGF0aWMgZmluZEJ5VW5pcXVlUHJvcGVydGllcyhwcm9wcywgZmlyc3QgPSB0cnVlKSB7cmV0dXJuIGZpcnN0ID8gdGhpcy5nZXRCeVByb3BzKC4uLnByb3BzKSA6IHRoaXMuZ2V0QWxsQnlQcm9wcyguLi5wcm9wcyk7fVxyXG4gICAgc3RhdGljIGZpbmRCeURpc3BsYXlOYW1lKG5hbWUpIHtyZXR1cm4gdGhpcy5nZXRCeURpc3BsYXlOYW1lKG5hbWUpO31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgbW9kdWxlIHVzaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmlsdGVyIEEgZnVuY3Rpb24gdG8gdXNlIHRvIGZpbHRlciBtb2R1bGVzXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGZpcnN0IFdoZXRoZXIgdG8gcmV0dXJuIG9ubHkgdGhlIGZpcnN0IG1hdGNoaW5nIG1vZHVsZVxyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0TW9kdWxlKGZpbHRlciwgZmlyc3QgPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IHRoaXMuZ2V0QWxsTW9kdWxlcygpO1xyXG4gICAgICAgIGNvbnN0IHJtID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBpbiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGlmICghbW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBtb2R1bGVzW2luZGV4XTtcclxuICAgICAgICAgICAgY29uc3Qge2V4cG9ydHN9ID0gbW9kdWxlO1xyXG4gICAgICAgICAgICBsZXQgZm91bmRNb2R1bGUgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFleHBvcnRzKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGV4cG9ydHMuX19lc01vZHVsZSAmJiBleHBvcnRzLmRlZmF1bHQgJiYgZmlsdGVyKGV4cG9ydHMuZGVmYXVsdCkpIGZvdW5kTW9kdWxlID0gZXhwb3J0cy5kZWZhdWx0O1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyKGV4cG9ydHMpKSBmb3VuZE1vZHVsZSA9IGV4cG9ydHM7XHJcbiAgICAgICAgICAgIGlmICghZm91bmRNb2R1bGUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAoZmlyc3QpIHJldHVybiBmb3VuZE1vZHVsZTtcclxuICAgICAgICAgICAgcm0ucHVzaChmb3VuZE1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaXJzdCB8fCBybS5sZW5ndGggPT0gMCA/IHVuZGVmaW5lZCA6IHJtO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYWxsIG1vZHVsZXMgbWF0Y2hpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXIgQSBmdW5jdGlvbiB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldE1vZHVsZXMoZmlsdGVyKSB7cmV0dXJuIHRoaXMuZ2V0TW9kdWxlKGZpbHRlciwgZmFsc2UpO31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgbW9kdWxlIGJ5IGl0cyBuYW1lLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmFsbGJhY2sgQSBmdW5jdGlvbiB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXMgaWYgbm90IGZpbmRpbmcgYSBrbm93biBtb2R1bGVcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgLy8gc3RhdGljIGdldE1vZHVsZUJ5TmFtZShuYW1lLCBmYWxsYmFjaykge1xyXG4gICAgLy8gICAgIGlmIChEaXNjb3JkTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgcmV0dXJuIERpc2NvcmRNb2R1bGVzW25hbWVdO1xyXG4gICAgLy8gICAgIGlmICghZmFsbGJhY2spIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAvLyAgICAgY29uc3QgbW9kdWxlID0gdGhpcy5nZXRNb2R1bGUoZmFsbGJhY2ssIHRydWUpO1xyXG4gICAgLy8gICAgIHJldHVybiBtb2R1bGUgPyBEaXNjb3JkTW9kdWxlc1tuYW1lXSA9IG1vZHVsZSA6IHVuZGVmaW5lZDtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgbW9kdWxlIGJ5IGl0cyBkaXNwbGF5IG5hbWUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBtb2R1bGVcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEJ5RGlzcGxheU5hbWUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZShGaWx0ZXJzLmJ5RGlzcGxheU5hbWUobmFtZSksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSBtb2R1bGUgdXNpbmcgaXRzIGNvZGUuXHJcbiAgICAgKiBAcGFyYW0ge1JlZ0V4fSByZWdleCBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gZmlyc3QgV2hldGhlciB0byByZXR1cm4gdGhlIG9ubHkgdGhlIGZpcnN0IG1hdGNoaW5nIG1vZHVsZVxyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0QnlSZWdleChyZWdleCwgZmlyc3QgPSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlKEZpbHRlcnMuYnlDb2RlKHJlZ2V4KSwgZmlyc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSBzaW5nbGUgbW9kdWxlIHVzaW5nIHByb3BlcnRpZXMgb24gaXRzIHByb3RvdHlwZS5cclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwcm90b3R5cGVzIFByb3BlcnRpZXMgdG8gdXNlIHRvIGZpbHRlciBtb2R1bGVzXHJcbiAgICAgKiBAcmV0dXJuIHtBbnl9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRCeVByb3RvdHlwZXMoLi4ucHJvdG90eXBlcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZShGaWx0ZXJzLmJ5UHJvdG90eXBlRmllbGRzKHByb3RvdHlwZXMpLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGFsbCBtb2R1bGVzIHdpdGggYSBzZXQgb2YgcHJvcGVydGllcyBvZiBpdHMgcHJvdG90eXBlLlxyXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IHByb3RvdHlwZXMgUHJvcGVydGllcyB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEFsbEJ5UHJvdG90eXBlcyguLi5wcm90b3R5cGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlKEZpbHRlcnMuYnlQcm90b3R5cGVGaWVsZHMocHJvdG90eXBlcyksIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgc2luZ2xlIG1vZHVsZSB1c2luZyBpdHMgb3duIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gcHJvcHMgUHJvcGVydGllcyB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEJ5UHJvcHMoLi4ucHJvcHMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGUoRmlsdGVycy5ieVByb3BlcnRpZXMocHJvcHMpLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGFsbCBtb2R1bGVzIHdpdGggYSBzZXQgb2YgcHJvcGVydGllcy5cclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwcm9wcyBQcm9wZXJ0aWVzIHRvIHVzZSB0byBmaWx0ZXIgbW9kdWxlc1xyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0QWxsQnlQcm9wcyguLi5wcm9wcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZShGaWx0ZXJzLmJ5UHJvcGVydGllcyhwcm9wcyksIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgc2luZ2xlIG1vZHVsZSB1c2luZyBhIHNldCBvZiBzdHJpbmdzLlxyXG4gICAgICogQHBhcmFtIHsuLi5TdHJpbmd9IHByb3BzIFN0cmluZ3MgdG8gdXNlIHRvIGZpbHRlciBtb2R1bGVzXHJcbiAgICAgKiBAcmV0dXJuIHtBbnl9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRCeVN0cmluZyguLi5zdHJpbmdzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlKEZpbHRlcnMuYnlTdHJpbmcoLi4uc3RyaW5ncyksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYWxsIG1vZHVsZXMgd2l0aCBhIHNldCBvZiBzdHJpbmdzLlxyXG4gICAgICogQHBhcmFtIHsuLi5TdHJpbmd9IHN0cmluZ3MgU3RyaW5ncyB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEFsbEJ5U3RyaW5nKC4uLnN0cmluZ3MpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGUoRmlsdGVycy5ieVN0cmluZyguLi5zdHJpbmdzKSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzY29yZCdzIF9fd2VicGFja19yZXF1aXJlX18gZnVuY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXQgcmVxdWlyZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcmVxdWlyZSkgcmV0dXJuIHRoaXMuX3JlcXVpcmU7XHJcbiAgICAgICAgY29uc3QgaWQgPSBcImJiZC13ZWJwYWNrbW9kdWxlc1wiO1xyXG4gICAgICAgIGNvbnN0IF9fd2VicGFja19yZXF1aXJlX18gPSB0eXBlb2Yod2luZG93LndlYnBhY2tKc29ucCkgPT0gXCJmdW5jdGlvblwiID8gd2luZG93LndlYnBhY2tKc29ucChbXSwge1xyXG4gICAgICAgICAgICBbaWRdOiAobW9kdWxlLCBleHBvcnRzLCBfX2ludGVybmFsX3JlcXVpcmVfXykgPT4gZXhwb3J0cy5kZWZhdWx0ID0gX19pbnRlcm5hbF9yZXF1aXJlX19cclxuICAgICAgICB9LCBbaWRdKS5kZWZhdWx0IDogd2luZG93LndlYnBhY2tKc29ucC5wdXNoKFtbXSwge1xyXG4gICAgICAgICAgICBbaWRdOiAobW9kdWxlLCBleHBvcnRzLCBfX2ludGVybmFsX3JlcXVpcmVfXykgPT4gbW9kdWxlLmV4cG9ydHMgPSBfX2ludGVybmFsX3JlcXVpcmVfX1xyXG4gICAgICAgIH0sIFtbaWRdXV0pO1xyXG4gICAgICAgIGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLm1baWRdO1xyXG4gICAgICAgIGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbaWRdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYWxsIGxvYWRlZCBtb2R1bGVzLlxyXG4gICAgICogQHJldHVybiB7QXJyYXl9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRBbGxNb2R1bGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVpcmUuYztcclxuICAgIH1cclxuXHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/webpackmodules.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Filters\", function() { return Filters; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return WebpackModules; });\n/**\r\n * Allows for grabbing and searching through Discord's webpacked modules.\r\n * @module WebpackModules\r\n * @version 0.0.2\r\n */\n\n/**\r\n * Checks if a given module matches a set of parameters.\r\n * @callback module:WebpackModules.Filters~filter\r\n * @param {*} module - module to check\r\n * @returns {boolean} - True if the module matches the filter, false otherwise\r\n */\n\n/**\r\n * Filters for use with {@link module:WebpackModules} but may prove useful elsewhere.\r\n */\nclass Filters {\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties.\r\n * @param {Array} props - Array of property names\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties\r\n */\n static byProperties(props, filter = m => m) {\n return module => {\n const component = filter(module);\n if (!component) return false;\n return props.every(property => component[property] !== undefined);\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties on the object's prototype.\r\n * @param {Array} fields - Array of property names\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties on the object's prototype\r\n */\n\n\n static byPrototypeFields(fields, filter = m => m) {\n return module => {\n const component = filter(module);\n if (!component) return false;\n if (!component.prototype) return false;\n return fields.every(field => component.prototype[field] !== undefined);\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a regex.\r\n * @param {RegExp} search - A RegExp to check on the module\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties\r\n */\n\n\n static byCode(search, filter = m => m) {\n return module => {\n const method = filter(module);\n if (!method) return false;\n return method.toString([]).search(search) !== -1;\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by strings.\r\n * @param {...String} search - A RegExp to check on the module\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of strings\r\n */\n\n\n static byString(...strings) {\n return module => {\n const moduleString = module.toString([]);\n\n for (const s of strings) {\n if (!moduleString.includes(s)) return false;\n }\n\n return true;\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties.\r\n * @param {string} name - Name the module should have\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties\r\n */\n\n\n static byDisplayName(name) {\n return module => {\n return module && module.displayName === name;\n };\n }\n /**\r\n * Generates a combined {@link module:WebpackModules.Filters~filter} from a list of filters.\r\n * @param {...module:WebpackModules.Filters~filter} filters - A list of filters\r\n * @returns {module:WebpackModules.Filters~filter} - Combinatory filter of all arguments\r\n */\n\n\n static combine(...filters) {\n return module => {\n return filters.every(filter => filter(module));\n };\n }\n\n}\n\nconst protect = theModule => {\n if (theModule.remove && theModule.set && theModule.clear && theModule.get && !theModule.sort) return null;\n if (!theModule.getToken && !theModule.getEmail && !theModule.showToken) return theModule;\n const proxy = new Proxy(theModule, {\n getOwnPropertyDescriptor: function (obj, prop) {\n if (prop === \"getToken\" || prop === \"getEmail\" || prop === \"showToken\") return undefined;\n return Object.getOwnPropertyDescriptor(obj, prop);\n },\n get: function (obj, func) {\n if (func == \"getToken\") return () => \"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa\";\n if (func == \"getEmail\") return () => \"puppet11112@gmail.com\";\n if (func == \"showToken\") return () => true; // if (func == \"__proto__\") return proxy;\n\n return obj[func];\n }\n });\n return proxy;\n};\n\nclass WebpackModules {\n static find(filter, first = true) {\n return this.getModule(filter, first);\n }\n\n static findAll(filter) {\n return this.getModule(filter, false);\n }\n\n static findByUniqueProperties(props, first = true) {\n return first ? this.getByProps(...props) : this.getAllByProps(...props);\n }\n\n static findByDisplayName(name) {\n return this.getByDisplayName(name);\n }\n /**\r\n * Finds a module using a filter function.\r\n * @param {Function} filter A function to use to filter modules\r\n * @param {Boolean} first Whether to return only the first matching module\r\n * @return {Any}\r\n */\n\n\n static getModule(filter, first = true) {\n const modules = this.getAllModules();\n const rm = [];\n\n for (const index in modules) {\n if (!modules.hasOwnProperty(index)) continue;\n const module = modules[index];\n const {\n exports\n } = module;\n let foundModule = null;\n if (!exports) continue;\n if (exports.__esModule && exports.default && filter(exports.default)) foundModule = exports.default;\n if (filter(exports)) foundModule = exports;\n if (!foundModule) continue;\n if (first) return protect(foundModule);\n rm.push(protect(foundModule));\n }\n\n return first || rm.length == 0 ? undefined : rm;\n }\n /**\r\n * Finds all modules matching a filter function.\r\n * @param {Function} filter A function to use to filter modules\r\n */\n\n\n static getModules(filter) {\n return this.getModule(filter, false);\n }\n /**\r\n * Finds a module by its name.\r\n * @param {String} name The name of the module\r\n * @param {Function} fallback A function to use to filter modules if not finding a known module\r\n * @return {Any}\r\n */\n // static getModuleByName(name, fallback) {\n // if (DiscordModules.hasOwnProperty(name)) return DiscordModules[name];\n // if (!fallback) return undefined;\n // const module = this.getModule(fallback, true);\n // return module ? DiscordModules[name] = module : undefined;\n // }\n\n /**\r\n * Finds a module by its display name.\r\n * @param {String} name The display name of the module\r\n * @return {Any}\r\n */\n\n\n static getByDisplayName(name) {\n return this.getModule(Filters.byDisplayName(name), true);\n }\n /**\r\n * Finds a module using its code.\r\n * @param {RegEx} regex A regular expression to use to filter modules\r\n * @param {Boolean} first Whether to return the only the first matching module\r\n * @return {Any}\r\n */\n\n\n static getByRegex(regex, first = true) {\n return this.getModule(Filters.byCode(regex), first);\n }\n /**\r\n * Finds a single module using properties on its prototype.\r\n * @param {...string} prototypes Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getByPrototypes(...prototypes) {\n return this.getModule(Filters.byPrototypeFields(prototypes), true);\n }\n /**\r\n * Finds all modules with a set of properties of its prototype.\r\n * @param {...string} prototypes Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getAllByPrototypes(...prototypes) {\n return this.getModule(Filters.byPrototypeFields(prototypes), false);\n }\n /**\r\n * Finds a single module using its own properties.\r\n * @param {...string} props Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getByProps(...props) {\n return this.getModule(Filters.byProperties(props), true);\n }\n /**\r\n * Finds all modules with a set of properties.\r\n * @param {...string} props Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getAllByProps(...props) {\n return this.getModule(Filters.byProperties(props), false);\n }\n /**\r\n * Finds a single module using a set of strings.\r\n * @param {...String} props Strings to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getByString(...strings) {\n return this.getModule(Filters.byString(...strings), true);\n }\n /**\r\n * Finds all modules with a set of strings.\r\n * @param {...String} strings Strings to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getAllByString(...strings) {\n return this.getModule(Filters.byString(...strings), false);\n }\n /**\r\n * Discord's __webpack_require__ function.\r\n */\n\n\n static get require() {\n if (this._require) return this._require;\n const id = \"bbd-webpackmodules\";\n\n const __webpack_require__ = typeof window.webpackJsonp == \"function\" ? window.webpackJsonp([], {\n [id]: (module, exports, __internal_require__) => exports.default = __internal_require__\n }, [id]).default : window.webpackJsonp.push([[], {\n [id]: (module, exports, __internal_require__) => module.exports = __internal_require__\n }, [[id]]]);\n\n delete __webpack_require__.m[id];\n delete __webpack_require__.c[id];\n return this._require = __webpack_require__;\n }\n /**\r\n * Returns all loaded modules.\r\n * @return {Array}\r\n */\n\n\n static getAllModules() {\n return this.require.c;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvd2VicGFja21vZHVsZXMuanM/OWIyNyJdLCJuYW1lcyI6WyJGaWx0ZXJzIiwiYnlQcm9wZXJ0aWVzIiwicHJvcHMiLCJmaWx0ZXIiLCJtIiwibW9kdWxlIiwiY29tcG9uZW50IiwiZXZlcnkiLCJwcm9wZXJ0eSIsInVuZGVmaW5lZCIsImJ5UHJvdG90eXBlRmllbGRzIiwiZmllbGRzIiwicHJvdG90eXBlIiwiZmllbGQiLCJieUNvZGUiLCJzZWFyY2giLCJtZXRob2QiLCJ0b1N0cmluZyIsImJ5U3RyaW5nIiwic3RyaW5ncyIsIm1vZHVsZVN0cmluZyIsInMiLCJpbmNsdWRlcyIsImJ5RGlzcGxheU5hbWUiLCJuYW1lIiwiZGlzcGxheU5hbWUiLCJjb21iaW5lIiwiZmlsdGVycyIsInByb3RlY3QiLCJ0aGVNb2R1bGUiLCJyZW1vdmUiLCJzZXQiLCJjbGVhciIsImdldCIsInNvcnQiLCJnZXRUb2tlbiIsImdldEVtYWlsIiwic2hvd1Rva2VuIiwicHJveHkiLCJQcm94eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm9iaiIsInByb3AiLCJPYmplY3QiLCJmdW5jIiwiV2VicGFja01vZHVsZXMiLCJmaW5kIiwiZmlyc3QiLCJnZXRNb2R1bGUiLCJmaW5kQWxsIiwiZmluZEJ5VW5pcXVlUHJvcGVydGllcyIsImdldEJ5UHJvcHMiLCJnZXRBbGxCeVByb3BzIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJnZXRCeURpc3BsYXlOYW1lIiwibW9kdWxlcyIsImdldEFsbE1vZHVsZXMiLCJybSIsImluZGV4IiwiaGFzT3duUHJvcGVydHkiLCJleHBvcnRzIiwiZm91bmRNb2R1bGUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInB1c2giLCJsZW5ndGgiLCJnZXRNb2R1bGVzIiwiZ2V0QnlSZWdleCIsInJlZ2V4IiwiZ2V0QnlQcm90b3R5cGVzIiwicHJvdG90eXBlcyIsImdldEFsbEJ5UHJvdG90eXBlcyIsImdldEJ5U3RyaW5nIiwiZ2V0QWxsQnlTdHJpbmciLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJpZCIsIl9fd2VicGFja19yZXF1aXJlX18iLCJ3aW5kb3ciLCJ3ZWJwYWNrSnNvbnAiLCJfX2ludGVybmFsX3JlcXVpcmVfXyIsImMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7QUFNQTs7Ozs7OztBQU9BOzs7QUFHTyxNQUFNQSxPQUFOLENBQWM7QUFDakI7Ozs7OztBQU1BLFNBQU9DLFlBQVAsQ0FBb0JDLEtBQXBCLEVBQTJCQyxNQUFNLEdBQUdDLENBQUMsSUFBSUEsQ0FBekMsRUFBNEM7QUFDeEMsV0FBT0MsTUFBTSxJQUFJO0FBQ2IsWUFBTUMsU0FBUyxHQUFHSCxNQUFNLENBQUNFLE1BQUQsQ0FBeEI7QUFDQSxVQUFJLENBQUNDLFNBQUwsRUFBZ0IsT0FBTyxLQUFQO0FBQ2hCLGFBQU9KLEtBQUssQ0FBQ0ssS0FBTixDQUFZQyxRQUFRLElBQUlGLFNBQVMsQ0FBQ0UsUUFBRCxDQUFULEtBQXdCQyxTQUFoRCxDQUFQO0FBQ0gsS0FKRDtBQUtIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT0MsaUJBQVAsQ0FBeUJDLE1BQXpCLEVBQWlDUixNQUFNLEdBQUdDLENBQUMsSUFBSUEsQ0FBL0MsRUFBa0Q7QUFDOUMsV0FBT0MsTUFBTSxJQUFJO0FBQ2IsWUFBTUMsU0FBUyxHQUFHSCxNQUFNLENBQUNFLE1BQUQsQ0FBeEI7QUFDQSxVQUFJLENBQUNDLFNBQUwsRUFBZ0IsT0FBTyxLQUFQO0FBQ2hCLFVBQUksQ0FBQ0EsU0FBUyxDQUFDTSxTQUFmLEVBQTBCLE9BQU8sS0FBUDtBQUMxQixhQUFPRCxNQUFNLENBQUNKLEtBQVAsQ0FBYU0sS0FBSyxJQUFJUCxTQUFTLENBQUNNLFNBQVYsQ0FBb0JDLEtBQXBCLE1BQStCSixTQUFyRCxDQUFQO0FBQ0gsS0FMRDtBQU1IO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT0ssTUFBUCxDQUFjQyxNQUFkLEVBQXNCWixNQUFNLEdBQUdDLENBQUMsSUFBSUEsQ0FB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Q0FGcUUsRUFFL0RiLE9BRm1CLEdBRVRlLE1BQU0sQ0FBQ0MsWUFBUCxDQUFvQmYsSUFBcEIsQ0FBeUIsQ0FBQyxFQUFELEVBQUs7QUFDN0MsT0FBQ1ksRUFBRCxHQUFNLENBQUN2RSxNQUFELEVBQVN1RCxPQUFULEVBQWtCb0Isb0JBQWxCLEtBQTJDM0UsTUFBTSxDQUFDdUQsT0FBUCxHQUFpQm9CO0FBRHJCLEtBQUwsRUFFekMsQ0FBQyxDQUFDSixFQUFELENBQUQsQ0FGeUMsQ0FBekIsQ0FGbkI7O0FBS0EsV0FBT0MsbUJBQW1CLENBQUN6RSxDQUFwQixDQUFzQndFLEVBQXRCLENBQVA7QUFDQSxXQUFPQyxtQkFBbUIsQ0FBQ0ksQ0FBcEIsQ0FBc0JMLEVBQXRCLENBQVA7QUFDQSxXQUFPLEtBQUtELFFBQUwsR0FBZ0JFLG1CQUF2QjtBQUNIO0FBRUQ7Ozs7OztBQUlBLFNBQU9yQixhQUFQLEdBQXVCO0FBQ25CLFdBQU8sS0FBS2tCLE9BQUwsQ0FBYU8sQ0FBcEI7QUFDSDs7QUFuSitCIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvd2VicGFja21vZHVsZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQWxsb3dzIGZvciBncmFiYmluZyBhbmQgc2VhcmNoaW5nIHRocm91Z2ggRGlzY29yZCdzIHdlYnBhY2tlZCBtb2R1bGVzLlxyXG4gKiBAbW9kdWxlIFdlYnBhY2tNb2R1bGVzXHJcbiAqIEB2ZXJzaW9uIDAuMC4yXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiBhIGdpdmVuIG1vZHVsZSBtYXRjaGVzIGEgc2V0IG9mIHBhcmFtZXRlcnMuXHJcbiAqIEBjYWxsYmFjayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJcclxuICogQHBhcmFtIHsqfSBtb2R1bGUgLSBtb2R1bGUgdG8gY2hlY2tcclxuICogQHJldHVybnMge2Jvb2xlYW59IC0gVHJ1ZSBpZiB0aGUgbW9kdWxlIG1hdGNoZXMgdGhlIGZpbHRlciwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEZpbHRlcnMgZm9yIHVzZSB3aXRoIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXN9IGJ1dCBtYXkgcHJvdmUgdXNlZnVsIGVsc2V3aGVyZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJzIHtcclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGEge0BsaW5rIG1vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gdGhhdCBmaWx0ZXJzIGJ5IGEgc2V0IG9mIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHByb3BzIC0gQXJyYXkgb2YgcHJvcGVydHkgbmFtZXNcclxuICAgICAqIEBwYXJhbSB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSBmaWx0ZXIgLSBBZGRpdGlvbmFsIGZpbHRlclxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBBIGZpbHRlciB0aGF0IGNoZWNrcyBmb3IgYSBzZXQgb2YgcHJvcGVydGllc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYnlQcm9wZXJ0aWVzKHByb3BzLCBmaWx0ZXIgPSBtID0+IG0pIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZmlsdGVyKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIGlmICghY29tcG9uZW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy5ldmVyeShwcm9wZXJ0eSA9PiBjb21wb25lbnRbcHJvcGVydHldICE9PSB1bmRlZmluZWQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYSB7QGxpbmsgbW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSB0aGF0IGZpbHRlcnMgYnkgYSBzZXQgb2YgcHJvcGVydGllcyBvbiB0aGUgb2JqZWN0J3MgcHJvdG90eXBlLlxyXG4gICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWVsZHMgLSBBcnJheSBvZiBwcm9wZXJ0eSBuYW1lc1xyXG4gICAgICogQHBhcmFtIHttb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IGZpbHRlciAtIEFkZGl0aW9uYWwgZmlsdGVyXHJcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSAtIEEgZmlsdGVyIHRoYXQgY2hlY2tzIGZvciBhIHNldCBvZiBwcm9wZXJ0aWVzIG9uIHRoZSBvYmplY3QncyBwcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGJ5UHJvdG90eXBlRmllbGRzKGZpZWxkcywgZmlsdGVyID0gbSA9PiBtKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGZpbHRlcihtb2R1bGUpO1xyXG4gICAgICAgICAgICBpZiAoIWNvbXBvbmVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIWNvbXBvbmVudC5wcm90b3R5cGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkcy5ldmVyeShmaWVsZCA9PiBjb21wb25lbnQucHJvdG90eXBlW2ZpZWxkXSAhPT0gdW5kZWZpbmVkKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGEge0BsaW5rIG1vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gdGhhdCBmaWx0ZXJzIGJ5IGEgcmVnZXguXHJcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gc2VhcmNoIC0gQSBSZWdFeHAgdG8gY2hlY2sgb24gdGhlIG1vZHVsZVxyXG4gICAgICogQHBhcmFtIHttb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IGZpbHRlciAtIEFkZGl0aW9uYWwgZmlsdGVyXHJcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSAtIEEgZmlsdGVyIHRoYXQgY2hlY2tzIGZvciBhIHNldCBvZiBwcm9wZXJ0aWVzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBieUNvZGUoc2VhcmNoLCBmaWx0ZXIgPSBtID0+IG0pIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gZmlsdGVyKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIGlmICghbWV0aG9kKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBtZXRob2QudG9TdHJpbmcoW10pLnNlYXJjaChzZWFyY2gpICE9PSAtMTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGEge0BsaW5rIG1vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gdGhhdCBmaWx0ZXJzIGJ5IHN0cmluZ3MuXHJcbiAgICAgKiBAcGFyYW0gey4uLlN0cmluZ30gc2VhcmNoIC0gQSBSZWdFeHAgdG8gY2hlY2sgb24gdGhlIG1vZHVsZVxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBBIGZpbHRlciB0aGF0IGNoZWNrcyBmb3IgYSBzZXQgb2Ygc3RyaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYnlTdHJpbmcoLi4uc3RyaW5ncykge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGVTdHJpbmcgPSBtb2R1bGUudG9TdHJpbmcoW10pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2Ygc3RyaW5ncykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtb2R1bGVTdHJpbmcuaW5jbHVkZXMocykpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGEge0BsaW5rIG1vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gdGhhdCBmaWx0ZXJzIGJ5IGEgc2V0IG9mIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgdGhlIG1vZHVsZSBzaG91bGQgaGF2ZVxyXG4gICAgICogQHBhcmFtIHttb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IGZpbHRlciAtIEFkZGl0aW9uYWwgZmlsdGVyXHJcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSAtIEEgZmlsdGVyIHRoYXQgY2hlY2tzIGZvciBhIHNldCBvZiBwcm9wZXJ0aWVzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBieURpc3BsYXlOYW1lKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZSAmJiBtb2R1bGUuZGlzcGxheU5hbWUgPT09IG5hbWU7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIGNvbWJpbmVkIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IGZyb20gYSBsaXN0IG9mIGZpbHRlcnMuXHJcbiAgICAgKiBAcGFyYW0gey4uLm1vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gZmlsdGVycyAtIEEgbGlzdCBvZiBmaWx0ZXJzXHJcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSAtIENvbWJpbmF0b3J5IGZpbHRlciBvZiBhbGwgYXJndW1lbnRzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjb21iaW5lKC4uLmZpbHRlcnMpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcnMuZXZlcnkoZmlsdGVyID0+IGZpbHRlcihtb2R1bGUpKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBwcm90ZWN0ID0gdGhlTW9kdWxlID0+IHtcclxuICAgIGlmICh0aGVNb2R1bGUucmVtb3ZlICYmIHRoZU1vZHVsZS5zZXQgJiYgdGhlTW9kdWxlLmNsZWFyICYmIHRoZU1vZHVsZS5nZXQgJiYgIXRoZU1vZHVsZS5zb3J0KSByZXR1cm4gbnVsbDtcclxuICAgIGlmICghdGhlTW9kdWxlLmdldFRva2VuICYmICF0aGVNb2R1bGUuZ2V0RW1haWwgJiYgIXRoZU1vZHVsZS5zaG93VG9rZW4pIHJldHVybiB0aGVNb2R1bGU7XHJcbiAgICBjb25zdCBwcm94eSA9IG5ldyBQcm94eSh0aGVNb2R1bGUsIHtcclxuICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJnZXRUb2tlblwiIHx8IHByb3AgPT09IFwiZ2V0RW1haWxcIiB8fCBwcm9wID09PSBcInNob3dUb2tlblwiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIGZ1bmMpIHtcclxuICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJnZXRUb2tlblwiKSByZXR1cm4gKCkgPT4gXCJtZmEuWENuYkt6bzBDTElxZEp6Qm5MMEQ4UGZEcnVxa0pOSGp3SFh0cjM5VVUzRjhoSHg0M2pvaklTeWk1amRqTzUyZTlfZTlNam1hZlpGRnBjLXNlT01hXCI7XHJcbiAgICAgICAgICAgIGlmIChmdW5jID09IFwiZ2V0RW1haWxcIikgcmV0dXJuICgpID0+IFwicHVwcGV0MTExMTJAZ21haWwuY29tXCI7XHJcbiAgICAgICAgICAgIGlmIChmdW5jID09IFwic2hvd1Rva2VuXCIpIHJldHVybiAoKSA9PiB0cnVlO1xyXG4gICAgICAgICAgICAvLyBpZiAoZnVuYyA9PSBcIl9fcHJvdG9fX1wiKSByZXR1cm4gcHJveHk7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmpbZnVuY107XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJveHk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJwYWNrTW9kdWxlcyB7XHJcblxyXG4gICAgc3RhdGljIGZpbmQoZmlsdGVyLCBmaXJzdCA9IHRydWUpIHtyZXR1cm4gdGhpcy5nZXRNb2R1bGUoZmlsdGVyLCBmaXJzdCk7fVxyXG4gICAgc3RhdGljIGZpbmRBbGwoZmlsdGVyKSB7cmV0dXJuIHRoaXMuZ2V0TW9kdWxlKGZpbHRlciwgZmFsc2UpO31cclxuICAgIHN0YXRpYyBmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzKHByb3BzLCBmaXJzdCA9IHRydWUpIHtyZXR1cm4gZmlyc3QgPyB0aGlzLmdldEJ5UHJvcHMoLi4ucHJvcHMpIDogdGhpcy5nZXRBbGxCeVByb3BzKC4uLnByb3BzKTt9XHJcbiAgICBzdGF0aWMgZmluZEJ5RGlzcGxheU5hbWUobmFtZSkge3JldHVybiB0aGlzLmdldEJ5RGlzcGxheU5hbWUobmFtZSk7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSBtb2R1bGUgdXNpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXIgQSBmdW5jdGlvbiB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gZmlyc3QgV2hldGhlciB0byByZXR1cm4gb25seSB0aGUgZmlyc3QgbWF0Y2hpbmcgbW9kdWxlXHJcbiAgICAgKiBAcmV0dXJuIHtBbnl9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRNb2R1bGUoZmlsdGVyLCBmaXJzdCA9IHRydWUpIHtcclxuICAgICAgICBjb25zdCBtb2R1bGVzID0gdGhpcy5nZXRBbGxNb2R1bGVzKCk7XHJcbiAgICAgICAgY29uc3Qgcm0gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IGluIG1vZHVsZXMpIHtcclxuICAgICAgICAgICAgaWYgKCFtb2R1bGVzLmhhc093blByb3BlcnR5KGluZGV4KSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG1vZHVsZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICBjb25zdCB7ZXhwb3J0c30gPSBtb2R1bGU7XHJcbiAgICAgICAgICAgIGxldCBmb3VuZE1vZHVsZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWV4cG9ydHMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAoZXhwb3J0cy5fX2VzTW9kdWxlICYmIGV4cG9ydHMuZGVmYXVsdCAmJiBmaWx0ZXIoZXhwb3J0cy5kZWZhdWx0KSkgZm91bmRNb2R1bGUgPSBleHBvcnRzLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIoZXhwb3J0cykpIGZvdW5kTW9kdWxlID0gZXhwb3J0cztcclxuICAgICAgICAgICAgaWYgKCFmb3VuZE1vZHVsZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChmaXJzdCkgcmV0dXJuIHByb3RlY3QoZm91bmRNb2R1bGUpO1xyXG4gICAgICAgICAgICBybS5wdXNoKHByb3RlY3QoZm91bmRNb2R1bGUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGZpcnN0IHx8IHJtLmxlbmd0aCA9PSAwID8gdW5kZWZpbmVkIDogcm07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyBhbGwgbW9kdWxlcyBtYXRjaGluZyBhIGZpbHRlciBmdW5jdGlvbi5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbHRlciBBIGZ1bmN0aW9uIHRvIHVzZSB0byBmaWx0ZXIgbW9kdWxlc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0TW9kdWxlcyhmaWx0ZXIpIHtyZXR1cm4gdGhpcy5nZXRNb2R1bGUoZmlsdGVyLCBmYWxzZSk7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSBtb2R1bGUgYnkgaXRzIG5hbWUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmYWxsYmFjayBBIGZ1bmN0aW9uIHRvIHVzZSB0byBmaWx0ZXIgbW9kdWxlcyBpZiBub3QgZmluZGluZyBhIGtub3duIG1vZHVsZVxyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICAvLyBzdGF0aWMgZ2V0TW9kdWxlQnlOYW1lKG5hbWUsIGZhbGxiYWNrKSB7XHJcbiAgICAvLyAgICAgaWYgKERpc2NvcmRNb2R1bGVzLmhhc093blByb3BlcnR5KG5hbWUpKSByZXR1cm4gRGlzY29yZE1vZHVsZXNbbmFtZV07XHJcbiAgICAvLyAgICAgaWYgKCFmYWxsYmFjaykgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIC8vICAgICBjb25zdCBtb2R1bGUgPSB0aGlzLmdldE1vZHVsZShmYWxsYmFjaywgdHJ1ZSk7XHJcbiAgICAvLyAgICAgcmV0dXJuIG1vZHVsZSA/IERpc2NvcmRNb2R1bGVzW25hbWVdID0gbW9kdWxlIDogdW5kZWZpbmVkO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSBtb2R1bGUgYnkgaXRzIGRpc3BsYXkgbmFtZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIG1vZHVsZVxyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0QnlEaXNwbGF5TmFtZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlKEZpbHRlcnMuYnlEaXNwbGF5TmFtZShuYW1lKSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyBhIG1vZHVsZSB1c2luZyBpdHMgY29kZS5cclxuICAgICAqIEBwYXJhbSB7UmVnRXh9IHJlZ2V4IEEgcmVndWxhciBleHByZXNzaW9uIHRvIHVzZSB0byBmaWx0ZXIgbW9kdWxlc1xyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBmaXJzdCBXaGV0aGVyIHRvIHJldHVybiB0aGUgb25seSB0aGUgZmlyc3QgbWF0Y2hpbmcgbW9kdWxlXHJcbiAgICAgKiBAcmV0dXJuIHtBbnl9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRCeVJlZ2V4KHJlZ2V4LCBmaXJzdCA9IHRydWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGUoRmlsdGVycy5ieUNvZGUocmVnZXgpLCBmaXJzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyBhIHNpbmdsZSBtb2R1bGUgdXNpbmcgcHJvcGVydGllcyBvbiBpdHMgcHJvdG90eXBlLlxyXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IHByb3RvdHlwZXMgUHJvcGVydGllcyB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEJ5UHJvdG90eXBlcyguLi5wcm90b3R5cGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlKEZpbHRlcnMuYnlQcm90b3R5cGVGaWVsZHMocHJvdG90eXBlcyksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYWxsIG1vZHVsZXMgd2l0aCBhIHNldCBvZiBwcm9wZXJ0aWVzIG9mIGl0cyBwcm90b3R5cGUuXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gcHJvdG90eXBlcyBQcm9wZXJ0aWVzIHRvIHVzZSB0byBmaWx0ZXIgbW9kdWxlc1xyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0QWxsQnlQcm90b3R5cGVzKC4uLnByb3RvdHlwZXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGUoRmlsdGVycy5ieVByb3RvdHlwZUZpZWxkcyhwcm90b3R5cGVzKSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSBzaW5nbGUgbW9kdWxlIHVzaW5nIGl0cyBvd24gcHJvcGVydGllcy5cclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwcm9wcyBQcm9wZXJ0aWVzIHRvIHVzZSB0byBmaWx0ZXIgbW9kdWxlc1xyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0QnlQcm9wcyguLi5wcm9wcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZShGaWx0ZXJzLmJ5UHJvcGVydGllcyhwcm9wcyksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYWxsIG1vZHVsZXMgd2l0aCBhIHNldCBvZiBwcm9wZXJ0aWVzLlxyXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IHByb3BzIFByb3BlcnRpZXMgdG8gdXNlIHRvIGZpbHRlciBtb2R1bGVzXHJcbiAgICAgKiBAcmV0dXJuIHtBbnl9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRBbGxCeVByb3BzKC4uLnByb3BzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlKEZpbHRlcnMuYnlQcm9wZXJ0aWVzKHByb3BzKSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSBzaW5nbGUgbW9kdWxlIHVzaW5nIGEgc2V0IG9mIHN0cmluZ3MuXHJcbiAgICAgKiBAcGFyYW0gey4uLlN0cmluZ30gcHJvcHMgU3RyaW5ncyB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEJ5U3RyaW5nKC4uLnN0cmluZ3MpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGUoRmlsdGVycy5ieVN0cmluZyguLi5zdHJpbmdzKSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyBhbGwgbW9kdWxlcyB3aXRoIGEgc2V0IG9mIHN0cmluZ3MuXHJcbiAgICAgKiBAcGFyYW0gey4uLlN0cmluZ30gc3RyaW5ncyBTdHJpbmdzIHRvIHVzZSB0byBmaWx0ZXIgbW9kdWxlc1xyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0QWxsQnlTdHJpbmcoLi4uc3RyaW5ncykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZShGaWx0ZXJzLmJ5U3RyaW5nKC4uLnN0cmluZ3MpLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNjb3JkJ3MgX193ZWJwYWNrX3JlcXVpcmVfXyBmdW5jdGlvbi5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldCByZXF1aXJlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9yZXF1aXJlKSByZXR1cm4gdGhpcy5fcmVxdWlyZTtcclxuICAgICAgICBjb25zdCBpZCA9IFwiYmJkLXdlYnBhY2ttb2R1bGVzXCI7XHJcbiAgICAgICAgY29uc3QgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHR5cGVvZih3aW5kb3cud2VicGFja0pzb25wKSA9PSBcImZ1bmN0aW9uXCIgPyB3aW5kb3cud2VicGFja0pzb25wKFtdLCB7XHJcbiAgICAgICAgICAgIFtpZF06IChtb2R1bGUsIGV4cG9ydHMsIF9faW50ZXJuYWxfcmVxdWlyZV9fKSA9PiBleHBvcnRzLmRlZmF1bHQgPSBfX2ludGVybmFsX3JlcXVpcmVfX1xyXG4gICAgICAgIH0sIFtpZF0pLmRlZmF1bHQgOiB3aW5kb3cud2VicGFja0pzb25wLnB1c2goW1tdLCB7XHJcbiAgICAgICAgICAgIFtpZF06IChtb2R1bGUsIGV4cG9ydHMsIF9faW50ZXJuYWxfcmVxdWlyZV9fKSA9PiBtb2R1bGUuZXhwb3J0cyA9IF9faW50ZXJuYWxfcmVxdWlyZV9fXHJcbiAgICAgICAgfSwgW1tpZF1dXSk7XHJcbiAgICAgICAgZGVsZXRlIF9fd2VicGFja19yZXF1aXJlX18ubVtpZF07XHJcbiAgICAgICAgZGVsZXRlIF9fd2VicGFja19yZXF1aXJlX18uY1tpZF07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgbG9hZGVkIG1vZHVsZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEFsbE1vZHVsZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWlyZS5jO1xyXG4gICAgfVxyXG5cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/webpackmodules.js\n"); + +/***/ }), + +/***/ "./src/secure.js": +/*!***********************!*\ + !*** ./src/secure.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\"] = (function () {\n const contentWindowGetter = Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype, \"contentWindow\").get;\n Object.defineProperty(HTMLIFrameElement.prototype, \"contentWindow\", {\n get: function () {\n const contentWindow = Reflect.apply(contentWindowGetter, this, arguments);\n return new Proxy(contentWindow, {\n getOwnPropertyDescriptor: function (obj, prop) {\n if (prop === \"localStorage\") return undefined;\n return Object.getOwnPropertyDescriptor(obj, prop);\n },\n get: function (obj, prop) {\n if (prop === \"localStorage\") return null;\n const val = obj[prop];\n if (typeof val === \"function\") return val.bind(obj);\n return val;\n }\n });\n }\n }); // Prevent interception by patching Reflect.apply and Function.prototype.bind\n\n Object.defineProperty(Reflect, \"apply\", {\n value: Reflect.apply,\n writable: false,\n configurable: false\n });\n Object.defineProperty(Function.prototype, \"bind\", {\n value: Function.prototype.bind,\n writable: false,\n configurable: false\n });\n const oOpen = XMLHttpRequest.prototype.open;\n\n XMLHttpRequest.prototype.open = function () {\n const url = arguments[1];\n if (url.toLowerCase().includes(\"api/webhooks\")) return null;\n return Reflect.apply(oOpen, this, arguments);\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3NlY3VyZS5qcz82ZTJiIl0sIm5hbWVzIjpbImNvbnRlbnRXaW5kb3dHZXR0ZXIiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJIVE1MSUZyYW1lRWxlbWVudCIsInByb3RvdHlwZSIsImdldCIsImRlZmluZVByb3BlcnR5IiwiY29udGVudFdpbmRvdyIsIlJlZmxlY3QiLCJhcHBseSIsImFyZ3VtZW50cyIsIlByb3h5Iiwib2JqIiwicHJvcCIsInVuZGVmaW5lZCIsInZhbCIsImJpbmQiLCJ2YWx1ZSIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQWUsMkVBQVc7QUFDdEIsUUFBTUEsbUJBQW1CLEdBQUdDLE1BQU0sQ0FBQ0Msd0JBQVAsQ0FBZ0NDLGlCQUFpQixDQUFDQyxTQUFsRCxFQUE2RCxlQUE3RCxFQUE4RUMsR0FBMUc7QUFDQUosUUFBTSxDQUFDSyxjQUFQLENBQXNCSCxpQkFBaUIsQ0FBQ0MsU0FBeEMsRUFBbUQsZUFBbkQsRUFBb0U7QUFDaEVDLE9BQUcsRUFBRSxZQUFZO0FBQ2IsWUFBTUUsYUFBYSxHQUFHQyxPQUFPLENBQUNDLEtBQVIsQ0FBY1QsbUJBQWQsRUFBbUMsSUFBbkMsRUFBeUNVLFNBQXpDLENBQXRCO0FBQ0EsYUFBTyxJQUFJQyxLQUFKLENBQVVKLGFBQVYsRUFBeUI7QUFDNUJMLGdDQUF3QixFQUFFLFVBQVNVLEdBQVQsRUFBY0MsSUFBZCxFQUFvQjtBQUMxQyxjQUFJQSxJQUFJLEtBQUssY0FBYixFQUE2QixPQUFPQyxTQUFQO0FBQzdCLGlCQUFPYixNQUFNLENBQUNDLHdCQUFQLENBQWdDVSxHQUFoQyxFQUFxQ0MsSUFBckMsQ0FBUDtBQUNILFNBSjJCO0FBSzVCUixXQUFHLEVBQUUsVUFBU08sR0FBVCxFQUFjQyxJQUFkLEVBQW9CO0FBQ3JCLGNBQUlBLElBQUksS0FBSyxjQUFiLEVBQTZCLE9BQU8sSUFBUDtBQUM3QixnQkFBTUUsR0FBRyxHQUFHSCxHQUFHLENBQUNDLElBQUQsQ0FBZjtBQUNBLGNBQUksT0FBT0UsR0FBUCxLQUFlLFVBQW5CLEVBQStCLE9BQU9BLEdBQUcsQ0FBQ0MsSUFBSixDQUFTSixHQUFULENBQVA7QUFDL0IsaUJBQU9HLEdBQVA7QUFDSDtBQVYyQixPQUF6QixDQUFQO0FBWUg7QUFmK0QsR0FBcEUsRUFGc0IsQ0FvQnRCOztBQUNBZCxRQUFNLENBQUNLLGNBQVAsQ0FBc0JFLE9BQXRCLEVBQStCLE9BQS9CLEVBQXdDO0FBQUNTLFNBQUssRUFBRVQsT0FBTyxDQUFDQyxLQUFoQjtBQUF1QlMsWUFBUSxFQUFFLEtBQWpDO0FBQXdDQyxnQkFBWSxFQUFFO0FBQXRELEdBQXhDO0FBQ0FsQixRQUFNLENBQUNLLGNBQVAsQ0FBc0JjLFFBQVEsQ0FBQ2hCLFNBQS9CLEVBQTBDLE1BQTFDLEVBQWtEO0FBQUNhLFNBQUssRUFBRUcsUUFBUSxDQUFDaEIsU0FBVCxDQUFtQlksSUFBM0I7QUFBaUNFLFlBQVEsRUFBRSxLQUEzQztBQUFrREMsZ0JBQVksRUFBRTtBQUFoRSxHQUFsRDtBQUVBLFFBQU1FLEtBQUssR0FBR0MsY0FBYyxDQUFDbEIsU0FBZixDQUF5Qm1CLElBQXZDOztBQUNBRCxnQkFBYyxDQUFDbEIsU0FBZixDQUF5Qm1CLElBQXpCLEdBQWdDLFlBQVc7QUFDdkMsVUFBTUMsR0FBRyxHQUFHZCxTQUFTLENBQUMsQ0FBRCxDQUFyQjtBQUNBLFFBQUljLEdBQUcsQ0FBQ0MsV0FBSixHQUFrQkMsUUFBbEIsQ0FBMkIsY0FBM0IsQ0FBSixFQUFnRCxPQUFPLElBQVA7QUFDaEQsV0FBT2xCLE9BQU8sQ0FBQ0MsS0FBUixDQUFjWSxLQUFkLEVBQXFCLElBQXJCLEVBQTJCWCxTQUEzQixDQUFQO0FBQ0gsR0FKRDtBQUtILEMiLCJmaWxlIjoiLi9zcmMvc2VjdXJlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBjb250ZW50V2luZG93R2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwiY29udGVudFdpbmRvd1wiKS5nZXQ7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50V2luZG93ID0gUmVmbGVjdC5hcHBseShjb250ZW50V2luZG93R2V0dGVyLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3h5KGNvbnRlbnRXaW5kb3csIHtcclxuICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwibG9jYWxTdG9yYWdlXCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImxvY2FsU3RvcmFnZVwiKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBvYmpbcHJvcF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHZhbC5iaW5kKG9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUHJldmVudCBpbnRlcmNlcHRpb24gYnkgcGF0Y2hpbmcgUmVmbGVjdC5hcHBseSBhbmQgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWZsZWN0LCBcImFwcGx5XCIsIHt2YWx1ZTogUmVmbGVjdC5hcHBseSwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCBcImJpbmRcIiwge3ZhbHVlOiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlfSk7XHJcblxyXG4gICAgY29uc3Qgb09wZW4gPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbjtcclxuICAgIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYXJndW1lbnRzWzFdO1xyXG4gICAgICAgIGlmICh1cmwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImFwaS93ZWJob29rc1wiKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkob09wZW4sIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/secure.js\n"); /***/ }), @@ -699,6 +747,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), +/***/ "./src/ui/errorboundary.jsx": +/*!**********************************!*\ + !*** ./src/ui/errorboundary.jsx ***! + \**********************************/ +/*! exports provided: default */ +/***/ (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 ErrorBoundary; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nclass ErrorBoundary extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n hasError: false\n };\n }\n\n componentDidCatch() {\n this.setState({\n hasError: true\n });\n }\n\n render() {\n if (this.state.hasError) return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"react-error\"\n }, \"Component Error\");\n return this.props.children;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Vycm9yYm91bmRhcnkuanN4P2Q2ZDEiXSwibmFtZXMiOlsiRXJyb3JCb3VuZGFyeSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwiaGFzRXJyb3IiLCJjb21wb25lbnREaWRDYXRjaCIsInNldFN0YXRlIiwicmVuZGVyIiwiY2hpbGRyZW4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRWUsTUFBTUEsYUFBTixTQUE0QkMsNkNBQUssQ0FBQ0MsU0FBbEMsQ0FBNEM7QUFDdkRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2pCLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxLQUFMLEdBQWE7QUFBQ0MsY0FBUSxFQUFFO0FBQVgsS0FBYjtBQUNEOztBQUVEQyxtQkFBaUIsR0FBRztBQUNsQixTQUFLQyxRQUFMLENBQWM7QUFBQ0YsY0FBUSxFQUFFO0FBQVgsS0FBZDtBQUNEOztBQUVERyxRQUFNLEdBQUc7QUFDUCxRQUFJLEtBQUtKLEtBQUwsQ0FBV0MsUUFBZixFQUF5QixPQUFPO0FBQUssZUFBUyxFQUFDO0FBQWYseUJBQVA7QUFDekIsV0FBTyxLQUFLRixLQUFMLENBQVdNLFFBQWxCO0FBQ0Q7O0FBYnNEIiwiZmlsZSI6Ii4vc3JjL3VpL2Vycm9yYm91bmRhcnkuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdH0gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yQm91bmRhcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICB0aGlzLnN0YXRlID0ge2hhc0Vycm9yOiBmYWxzZX07XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkQ2F0Y2goKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2hhc0Vycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZS5oYXNFcnJvcikgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwicmVhY3QtZXJyb3JcIj5Db21wb25lbnQgRXJyb3I8L2Rpdj47ICBcclxuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47IFxyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/errorboundary.jsx\n"); + +/***/ }), + /***/ "./src/ui/floating/container.jsx": /*!***************************************!*\ !*** ./src/ui/floating/container.jsx ***! @@ -819,6 +879,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), +/***/ "./src/ui/icons/history.jsx": +/*!**********************************!*\ + !*** ./src/ui/icons/history.jsx ***! + \**********************************/ +/*! exports provided: default */ +/***/ (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 History; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nclass History extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n render() {\n const size = this.props.size || \"18px\";\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"svg\", {\n viewBox: \"0 0 24 24\",\n fill: \"#FFFFFF\",\n className: this.props.className || \"\",\n style: {\n width: size,\n height: size\n },\n onClick: this.props.onClick\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"path\", {\n d: \"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z\"\n }));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2ljb25zL2hpc3RvcnkuanN4PzY2YmMiXSwibmFtZXMiOlsiSGlzdG9yeSIsIlJlYWN0IiwiQ29tcG9uZW50IiwicmVuZGVyIiwic2l6ZSIsInByb3BzIiwiY2xhc3NOYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJvbkNsaWNrIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVlLE1BQU1BLE9BQU4sU0FBc0JDLDZDQUFLLENBQUNDLFNBQTVCLENBQXNDO0FBQ2pEQyxRQUFNLEdBQUc7QUFDTCxVQUFNQyxJQUFJLEdBQUcsS0FBS0MsS0FBTCxDQUFXRCxJQUFYLElBQW1CLE1BQWhDO0FBQ0EsV0FBTztBQUFLLGFBQU8sRUFBQyxXQUFiO0FBQXlCLFVBQUksRUFBQyxTQUE5QjtBQUF3QyxlQUFTLEVBQUUsS0FBS0MsS0FBTCxDQUFXQyxTQUFYLElBQXdCLEVBQTNFO0FBQStFLFdBQUssRUFBRTtBQUFDQyxhQUFLLEVBQUVILElBQVI7QUFBY0ksY0FBTSxFQUFFSjtBQUF0QixPQUF0RjtBQUFtSCxhQUFPLEVBQUUsS0FBS0MsS0FBTCxDQUFXSTtBQUF2SSxPQUNDO0FBQU0sT0FBQyxFQUFDLGVBQVI7QUFBd0IsVUFBSSxFQUFDO0FBQTdCLE1BREQsRUFFQztBQUFNLE9BQUMsRUFBQztBQUFSLE1BRkQsQ0FBUDtBQUlIOztBQVBnRCIsImZpbGUiOiIuL3NyYy91aS9pY29ucy9oaXN0b3J5LmpzeC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3R9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIaXN0b3J5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMThweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwiI0ZGRkZGRlwiIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfT5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XHJcbiAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/icons/history.jsx\n"); + +/***/ }), + /***/ "./src/ui/icons/reload.jsx": /*!*********************************!*\ !*** ./src/ui/icons/reload.jsx ***! @@ -875,7 +947,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 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(); // TODO: 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL21vZGFscy5qcz8zYWIyIl0sIm5hbWVzIjpbIk1vZGFscyIsInNob3VsZFNob3dBZGRvbkVycm9ycyIsIlNldHRpbmdzIiwiZ2V0IiwiTW9kYWxTdGFjayIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlQcm9wcyIsIkFsZXJ0TW9kYWwiLCJnZXRCeVByb3RvdHlwZXMiLCJUZXh0RWxlbWVudCIsIkNvbmZpcm1hdGlvbk1vZGFsIiwiZ2V0TW9kdWxlIiwibSIsImRlZmF1bHRQcm9wcyIsImtleSIsImRlZmF1bHQiLCJ0aXRsZSIsImNvbnRlbnQiLCJiYWNrZHJvcCIsImJhc2VNb2RhbENsYXNzZXMiLCJtb2RhbCIsImlubmVyIiwic2l6ZU1lZGl1bSIsIm1vZGFsQ2xhc3NlcyIsImhlYWRlciIsImZvb3RlciIsImNsb3NlIiwiVXRpbGl0aWVzIiwicGFyc2VIVE1MIiwiU3RyaW5ncyIsIm9rYXkiLCJxdWVyeVNlbGVjdG9yIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZENsYXNzIiwic2V0VGltZW91dCIsInJlbW92ZSIsImRvY3VtZW50IiwiYXBwZW5kIiwiYWxlcnQiLCJwdXNoIiwicHJvcHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJPYmplY3QiLCJhc3NpZ24iLCJib2R5Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwib3B0aW9ucyIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIiwiY29uZmlybVRleHQiLCJjYW5jZWxUZXh0IiwiZGFuZ2VyIiwiY29sb3IiLCJDb2xvcnMiLCJQUklNQVJZIiwiY2hpbGRyZW4iLCJBcnJheSIsImlzQXJyYXkiLCJlbXB0eUZ1bmN0aW9uIiwicmVkIiwiY2FuY2VsIiwic2hvd0FkZG9uRXJyb3JzIiwicGx1Z2lucyIsInBsdWdpbkVycm9ycyIsInRoZW1lcyIsInRoZW1lRXJyb3JzIiwibGVuZ3RoIiwiJCIsImFkZG9uRXJyb3JzIiwiUGFuZWxzIiwibmFtZSIsIm1lc3NhZ2UiLCJlcnJvciIsImdlbmVyYXRlVGFiIiwiZXJyb3JzIiwiY29udGFpbmVyIiwiZXJyIiwiZmlsZSIsImZpbmQiLCJvbiIsImUiLCJwcmV2ZW50RGVmYXVsdCIsIkxvZ2dlciIsInN0YWNrdHJhY2UiLCJ0YWJzIiwicmVtb3ZlQ2xhc3MiLCJ0YXJnZXQiLCJlbXB0eSIsImluZGV4IiwiYXBwZW5kVG8iLCJjbGljayIsInNob3dDaGFuZ2Vsb2dNb2RhbCIsIkNoYW5nZWxvZ0NsYXNzZXMiLCJGbGV4Q2hpbGQiLCJUaXRsZXMiLCJDaGFuZ2Vsb2ciLCJzZWxlY3RhYmxlIiwiTWFya2Rvd25QYXJzZXIiLCJpbWFnZSIsImRlc2NyaXB0aW9uIiwiY2hhbmdlcyIsInN1YnRpdGxlIiwiQ29uZmlnIiwiYmJkVmVyc2lvbiIsImNlIiwiY2hhbmdlbG9nSXRlbXMiLCJzcmMiLCJwYXJzZSIsImMiLCJlbnRyeSIsInR5cGUiLCJhZGRlZCIsIm1hcmdpbiIsIm1hcmdpblRvcCIsImNsYXNzTmFtZSIsImxpc3QiLCJpdGVtcyIsIm1hcCIsImkiLCJyZW5kZXJIZWFkZXIiLCJDaGlsZCIsImdyb3ciLCJzaHJpbmsiLCJ0YWciLCJUYWdzIiwiSDQiLCJzaXplIiwiU2l6ZXMiLCJTTUFMTCIsImRhdGUiLCJyZW5kZXJGb290ZXIiLCJBbmNob3IiLCJkaXNwbGF5TmFtZSIsIkFuY2hvckNsYXNzZXMiLCJhbmNob3IiLCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyIiwiam9pblN1cHBvcnRTZXJ2ZXIiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3AiLCJzdXBwb3J0TGluayIsIm9uQ2xpY2siLCJkZWZhdWx0Rm9vdGVyIiwib25TY3JvbGwiLCJfIiwib25DbG9zZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRWUsTUFBTUEsTUFBTixDQUFhO0FBRXhCLGFBQVdDLHFCQUFYLEdBQW1DO0FBQUMsV0FBT0MsZ0RBQVEsQ0FBQ0MsR0FBVCxDQUFhLFVBQWIsRUFBeUIsUUFBekIsRUFBbUMsYUFBbkMsQ0FB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QUE3TnVCIiwiZmlsZSI6Ii4vc3JjL3VpL21vZGFscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQge0xvZ2dlciwgV2VicGFja01vZHVsZXMsIFV0aWxpdGllcywgUmVhY3QsIFNldHRpbmdzLCBTdHJpbmdzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kYWxzIHtcclxuXHJcbiAgICBzdGF0aWMgZ2V0IHNob3VsZFNob3dBZGRvbkVycm9ycygpIHtyZXR1cm4gU2V0dGluZ3MuZ2V0KFwic2V0dGluZ3NcIiwgXCJhZGRvbnNcIiwgXCJhZGRvbkVycm9yc1wiKTt9XHJcblxyXG4gICAgc3RhdGljIGdldCBNb2RhbFN0YWNrKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7fVxyXG4gICAgc3RhdGljIGdldCBBbGVydE1vZGFsKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3RvdHlwZXMoXCJoYW5kbGVDYW5jZWxcIiwgXCJoYW5kbGVTdWJtaXRcIiwgXCJoYW5kbGVNaW5vckNvbmZpcm1cIik7fVxyXG4gICAgc3RhdGljIGdldCBUZXh0RWxlbWVudCgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIlNpemVzXCIsIFwiV2VpZ2h0c1wiKTt9XHJcbiAgICBzdGF0aWMgZ2V0IENvbmZpcm1hdGlvbk1vZGFsKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmtleSAmJiBtLmtleSgpID09IFwiY29uZmlybS1tb2RhbFwiKTt9XHJcblxyXG4gICAgc3RhdGljIGRlZmF1bHQodGl0bGUsIGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBiYWNrZHJvcCA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJiYWNrZHJvcFwiKSB8fCB7YmFja2Ryb3A6IFwiYmFja2Ryb3AtMXdybUtiXCJ9O1xyXG4gICAgICAgIGNvbnN0IGJhc2VNb2RhbENsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLm1vZGFsICYmIG0uaW5uZXIgJiYgIW0uc2l6ZU1lZGl1bSkgfHwge21vZGFsOiBcIm1vZGFsLTM2ekZ0V1wiLCBpbm5lcjogXCJpbm5lci0yVkV6eTlcIn07XHJcbiAgICAgICAgY29uc3QgbW9kYWxDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInNpemVNZWRpdW1cIikgfHwge21vZGFsOiBcImJhY2tkcm9wLTF3cm1LYlwiLCBzaXplTWVkaXVtOiBcInNpemVNZWRpdW0tY3RuY0U1XCIsIGNvbnRlbnQ6IFwiY29udGVudC0yS29DT1pcIiwgaGVhZGVyOiBcImhlYWRlci0ybmhib3VcIiwgZm9vdGVyOiBcImZvb3Rlci0zMGV3TjhcIiwgY2xvc2U6IFwiY2xvc2UtaGh5aldKXCIsIGlubmVyOiBcImlubmVyLTJaNVFaWFwifTtcclxuICAgICAgICBjb25zdCBtb2RhbCA9IFV0aWxpdGllcy5wYXJzZUhUTUwoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke2JhY2tkcm9wLmJhY2tkcm9wfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsICR7YmFzZU1vZGFsQ2xhc3Nlcy5tb2RhbH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHtiYXNlTW9kYWxDbGFzc2VzLmlubmVyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyIGhlYWRlci0xUl9BakZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGl0bGV9PC9kaXY+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+IHtcclxuICAgICAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgICAgICAgICAgY29uc3QgQW5jaG9yQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xyXG4gICAgICAgICAgICBjb25zdCBqb2luU3VwcG9ydFNlcnZlciA9IChjbGljaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2xpY2sucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgTW9kYWxTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE86IEJEVjIuam9pbkJEMigpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBzdXBwb3J0TGluayA9IEFuY2hvciA/IGNlKEFuY2hvciwge29uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIikgOiBjZShcImFcIiwge2NsYXNzTmFtZTogYCR7QW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsIG9uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIik7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGb290ZXIgPSBjZShUZXh0RWxlbWVudCx7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuUFJJTUFSWX0sIFwiTmVlZCBzdXBwb3J0PyBcIiwgc3VwcG9ydExpbmspO1xyXG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSwgZm9vdGVyID8gZm9vdGVyIDogZGVmYXVsdEZvb3Rlcik7XHJcbiAgICAgICAgfTtcclxuICAgIFxyXG4gICAgICAgIE1vZGFsU3RhY2sucHVzaChmdW5jdGlvbihwcm9wcykge1xyXG4gICAgICAgICAgICByZXR1cm4gY2UoQ2hhbmdlbG9nLCBPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5jb250YWluZXIsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgb25TY3JvbGw6IF8gPT4gXyxcclxuICAgICAgICAgICAgICAgIG9uQ2xvc2U6IF8gPT4gXyxcclxuICAgICAgICAgICAgICAgIHJlbmRlckhlYWRlcjogcmVuZGVySGVhZGVyLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVyRm9vdGVyOiByZW5kZXJGb290ZXIsXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hhbmdlbG9nSXRlbXNcclxuICAgICAgICAgICAgfSwgcHJvcHMpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\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/* harmony import */ var _structs_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../structs/string */ \"./src/structs/string.js\");\n\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 get Markdown() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].findByDisplayName(\"Markdown\");\n }\n\n static default(title, content) {\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 this.showConfirmationModal(title, content);\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 `Markdown` 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 * @param {string} [options.key] - key used to identify the modal. If not provided, one is generated and returned\r\n * @returns {string} - the key used for this modal\r\n */\n\n\n static showConfirmationModal(title, content, options = {}) {\n const Markdown = this.Markdown;\n const ConfirmationModal = this.ConfirmationModal;\n const ModalStack = this.ModalStack;\n if (content instanceof _structs_string__WEBPACK_IMPORTED_MODULE_2__[\"default\"]) content = content.toString();\n if (!this.ModalStack || !this.ConfirmationModal || !this.Markdown) return this.default(title, content);\n\n const emptyFunction = () => {};\n\n const {\n onConfirm = emptyFunction,\n onCancel = emptyFunction,\n confirmText = modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.okay,\n cancelText = modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Modals.cancel,\n danger = false,\n key = undefined\n } = options;\n if (!Array.isArray(content)) content = [content];\n content = content.map(c => typeof c === \"string\" ? modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(Markdown, null, c) : c);\n return ModalStack.push(ConfirmationModal, {\n header: title,\n children: content,\n red: danger,\n confirmText: confirmText,\n cancelText: cancelText,\n onConfirm: onConfirm,\n onCancel: onCancel\n }, key);\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 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 static 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\"].findByDisplayName(\"Text\");\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 modules__WEBPACK_IMPORTED_MODULE_1__[\"Logger\"].warn(\"Modals\", \"showChangelogModal missing modules\");\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.STANDARD,\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 modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].InviteActions.acceptInviteAndTransitionToInviteChannel(\"2HScm8j\");\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.STANDARD\n }, \"Need support? \", supportLink);\n return ce(FlexChild.Child, {\n grow: 1,\n shrink: 1\n }, footer ? footer : defaultFooter);\n };\n\n return ModalStack.push(Changelog, {\n className: ChangelogClasses.container,\n selectable: true,\n onScroll: _ => _,\n onClose: _ => _,\n renderHeader: renderHeader,\n renderFooter: renderFooter,\n children: changelogItems\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL21vZGFscy5qcz8zYWIyIl0sIm5hbWVzIjpbIk1vZGFscyIsInNob3VsZFNob3dBZGRvbkVycm9ycyIsIlNldHRpbmdzIiwiZ2V0IiwiTW9kYWxTdGFjayIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlQcm9wcyIsIkFsZXJ0TW9kYWwiLCJnZXRCeVByb3RvdHlwZXMiLCJUZXh0RWxlbWVudCIsIkNvbmZpcm1hdGlvbk1vZGFsIiwiZ2V0TW9kdWxlIiwibSIsImRlZmF1bHRQcm9wcyIsImtleSIsIk1hcmtkb3duIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJkZWZhdWx0IiwidGl0bGUiLCJjb250ZW50IiwibW9kYWwiLCJVdGlsaXRpZXMiLCJwYXJzZUhUTUwiLCJTdHJpbmdzIiwib2theSIsInF1ZXJ5U2VsZWN0b3IiLCJhZGRFdmVudExpc3RlbmVyIiwiYWRkQ2xhc3MiLCJzZXRUaW1lb3V0IiwicmVtb3ZlIiwiZG9jdW1lbnQiLCJhcHBlbmQiLCJhbGVydCIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsIm9wdGlvbnMiLCJGb3JtYXR0YWJsZVN0cmluZyIsInRvU3RyaW5nIiwiZW1wdHlGdW5jdGlvbiIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIiwiY29uZmlybVRleHQiLCJjYW5jZWxUZXh0IiwiY2FuY2VsIiwiZGFuZ2VyIiwidW5kZWZpbmVkIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiYyIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsInB1c2giLCJoZWFkZXIiLCJjaGlsZHJlbiIsInJlZCIsInNob3dBZGRvbkVycm9ycyIsInBsdWdpbnMiLCJwbHVnaW5FcnJvcnMiLCJ0aGVtZXMiLCJ0aGVtZUVycm9ycyIsImxlbmd0aCIsIiQiLCJhZGRvbkVycm9ycyIsIlBhbmVscyIsIm5hbWUiLCJtZXNzYWdlIiwiZXJyb3IiLCJnZW5lcmF0ZVRhYiIsImVycm9ycyIsImNvbnRhaW5lciIsImVyciIsImZpbGUiLCJmaW5kIiwib24iLCJlIiwicHJldmVudERlZmF1bHQiLCJMb2dnZXIiLCJzdGFja3RyYWNlIiwidGFicyIsInJlbW92ZUNsYXNzIiwidGFyZ2V0IiwiZW1wdHkiLCJpbmRleCIsImFwcGVuZFRvIiwiY2xpY2siLCJzaG93Q2hhbmdlbG9nTW9kYWwiLCJDaGFuZ2Vsb2dDbGFzc2VzIiwiRmxleENoaWxkIiwiVGl0bGVzIiwiQ2hhbmdlbG9nIiwic2VsZWN0YWJsZSIsIk1hcmtkb3duUGFyc2VyIiwid2FybiIsImltYWdlIiwiZGVzY3JpcHRpb24iLCJjaGFuZ2VzIiwic3VidGl0bGUiLCJDb25maWciLCJiYmRWZXJzaW9uIiwiZm9vdGVyIiwiY2UiLCJjaGFuZ2Vsb2dJdGVtcyIsInNyYyIsInBhcnNlIiwiZW50cnkiLCJ0eXBlIiwiYWRkZWQiLCJtYXJnaW4iLCJtYXJnaW5Ub3AiLCJjbGFzc05hbWUiLCJsaXN0IiwiaXRlbXMiLCJpIiwicmVuZGVySGVhZGVyIiwiQ2hpbGQiLCJncm93Iiwic2hyaW5rIiwidGFnIiwiVGFncyIsIkg0Iiwic2l6ZSIsIlNpemVzIiwiU01BTEwiLCJjb2xvciIsIkNvbG9ycyIsIlNUQU5EQVJEIiwiZGF0ZSIsInJlbmRlckZvb3RlciIsIkFuY2hvciIsImRpc3BsYXlOYW1lIiwiQW5jaG9yQ2xhc3NlcyIsImFuY2hvciIsImFuY2hvclVuZGVybGluZU9uSG92ZXIiLCJqb2luU3VwcG9ydFNlcnZlciIsInN0b3BQcm9wYWdhdGlvbiIsInBvcCIsIkRpc2NvcmRNb2R1bGVzIiwiSW52aXRlQWN0aW9ucyIsImFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwiLCJzdXBwb3J0TGluayIsIm9uQ2xpY2siLCJkZWZhdWx0Rm9vdGVyIiwib25TY3JvbGwiLCJfIiwib25DbG9zZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVlLE1BQU1BLE1BQU4sQ0FBYTtBQUV4QixhQUFXQyxxQkFBWCxHQUFtQztBQUFD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QWNBLFdBQU96SSxVQUFVLENBQUMrQyxJQUFYLENBQWdCc0MsU0FBaEIsRUFBMkI7QUFDOUJvQixlQUFTLEVBQUV2QixnQkFBZ0IsQ0FBQ2pCLFNBREU7QUFFOUJxQixnQkFBVSxFQUFFLElBRmtCO0FBRzlCb0QsY0FBUSxFQUFFQyxDQUFDLElBQUlBLENBSGU7QUFJOUJDLGFBQU8sRUFBRUQsQ0FBQyxJQUFJQSxDQUpnQjtBQUs5QjlCLGtCQUFZLEVBQUVBLFlBTGdCO0FBTTlCYyxrQkFBWSxFQUFFQSxZQU5nQjtBQU85QjFFLGNBQVEsRUFBRWdEO0FBUG9CLEtBQTNCLENBQVA7QUFTSDs7QUFqTnVCIiwiZmlsZSI6Ii4vc3JjL3VpL21vZGFscy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQge0xvZ2dlciwgV2VicGFja01vZHVsZXMsIFV0aWxpdGllcywgUmVhY3QsIFNldHRpbmdzLCBTdHJpbmdzLCBET00sIERpc2NvcmRNb2R1bGVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5pbXBvcnQgRm9ybWF0dGFibGVTdHJpbmcgZnJvbSBcIi4uL3N0cnVjdHMvc3RyaW5nXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2RhbHMge1xyXG5cclxuICAgIHN0YXRpYyBnZXQgc2hvdWxkU2hvd0FkZG9uRXJyb3JzKCkge3JldHVybiBTZXR0aW5ncy5nZXQoXCJzZXR0aW5nc1wiLCBcImFkZG9uc1wiLCBcImFkZG9uRXJyb3JzXCIpO31cclxuXHJcbiAgICBzdGF0aWMgZ2V0IE1vZGFsU3RhY2soKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJwdXNoXCIsIFwidXBkYXRlXCIsIFwicG9wXCIsIFwicG9wV2l0aEtleVwiKTt9XHJcbiAgICBzdGF0aWMgZ2V0IEFsZXJ0TW9kYWwoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvdG90eXBlcyhcImhhbmRsZUNhbmNlbFwiLCBcImhhbmRsZVN1Ym1pdFwiLCBcImhhbmRsZU1pbm9yQ29uZmlybVwiKTt9XHJcbiAgICBzdGF0aWMgZ2V0IFRleHRFbGVtZW50KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiU2l6ZXNcIiwgXCJXZWlnaHRzXCIpO31cclxuICAgIHN0YXRpYyBnZXQgQ29uZmlybWF0aW9uTW9kYWwoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZShtID0+IG0uZGVmYXVsdFByb3BzICYmIG0ua2V5ICYmIG0ua2V5KCkgPT0gXCJjb25maXJtLW1vZGFsXCIpO31cclxuICAgIHN0YXRpYyBnZXQgTWFya2Rvd24oKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiTWFya2Rvd25cIik7fVxyXG5cclxuICAgIHN0YXRpYyBkZWZhdWx0KHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgbW9kYWwgPSBVdGlsaXRpZXMucGFyc2VIVE1MKGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgYmFja2Ryb3AtMXdybUtCXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgbW9kYWwtMVVHZG5SXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyIGlubmVyLTFKZUdWY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyIGhlYWRlci0xUl9BakZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgZm9vdGVyLTJ5ZkNnWCBmb290ZXItM3JEV2RDIGZvb3Rlci0yZ0wxcHBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYmQtYnV0dG9uXCI+JHtTdHJpbmdzLk1vZGFscy5va2F5fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5gKTtcclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgbW9kYWwuYWRkQ2xhc3MoXCJjbG9zaW5nXCIpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBtb2RhbC5hZGRDbGFzcyhcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKS5hcHBlbmQobW9kYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBhbGVydCh0aXRsZSwgY29udGVudCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5dGhpbmcgaXMgd3JhcHBlZCBpbiBEaXNjb3JkJ3MgYE1hcmtkb3duYCBjb21wb25lbnQgc28gc3RyaW5ncyB3aWxsIHNob3cgYW5kIHJlbmRlciBwcm9wZXJseS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29uZmlybVRleHQ9T2theV0gLSB0ZXh0IGZvciB0aGUgY29uZmlybWF0aW9uL3N1Ym1pdCBidXR0b25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25DYW5jZWw9Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2V5XSAtIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RhbC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgaXMgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgTWFya2Rvd24gPSB0aGlzLk1hcmtkb3duO1xyXG4gICAgICAgIGNvbnN0IENvbmZpcm1hdGlvbk1vZGFsID0gdGhpcy5Db25maXJtYXRpb25Nb2RhbDtcclxuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gdGhpcy5Nb2RhbFN0YWNrO1xyXG4gICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgRm9ybWF0dGFibGVTdHJpbmcpIGNvbnRlbnQgPSBjb250ZW50LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLk1vZGFsU3RhY2sgfHwgIXRoaXMuQ29uZmlybWF0aW9uTW9kYWwgfHwgIXRoaXMuTWFya2Rvd24pIHJldHVybiB0aGlzLmRlZmF1bHQodGl0bGUsIGNvbnRlbnQpO1xyXG5cclxuICAgICAgICBjb25zdCBlbXB0eUZ1bmN0aW9uID0gKCkgPT4ge307XHJcbiAgICAgICAgY29uc3Qge29uQ29uZmlybSA9IGVtcHR5RnVuY3Rpb24sIG9uQ2FuY2VsID0gZW1wdHlGdW5jdGlvbiwgY29uZmlybVRleHQgPSBTdHJpbmdzLk1vZGFscy5va2F5LCBjYW5jZWxUZXh0ID0gU3RyaW5ncy5Nb2RhbHMuY2FuY2VsLCBkYW5nZXIgPSBmYWxzZSwga2V5ID0gdW5kZWZpbmVkfSA9IG9wdGlvbnM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnQpKSBjb250ZW50ID0gW2NvbnRlbnRdO1xyXG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50Lm1hcChjID0+IHR5cGVvZihjKSA9PT0gXCJzdHJpbmdcIiA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFya2Rvd24sIG51bGwsIGMpIDogYyk7XHJcblxyXG4gICAgICAgIHJldHVybiBNb2RhbFN0YWNrLnB1c2goQ29uZmlybWF0aW9uTW9kYWwsIHtcclxuICAgICAgICAgICAgaGVhZGVyOiB0aXRsZSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IGNvbnRlbnQsXHJcbiAgICAgICAgICAgIHJlZDogZGFuZ2VyLFxyXG4gICAgICAgICAgICBjb25maXJtVGV4dDogY29uZmlybVRleHQsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6IGNhbmNlbFRleHQsXHJcbiAgICAgICAgICAgIG9uQ29uZmlybTogb25Db25maXJtLFxyXG4gICAgICAgICAgICBvbkNhbmNlbDogb25DYW5jZWxcclxuICAgICAgICB9LCBrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93QWRkb25FcnJvcnMoe3BsdWdpbnM6IHBsdWdpbkVycm9ycyA9IFtdLCB0aGVtZXM6IHRoZW1lRXJyb3JzID0gW119KSB7XHJcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMgfHwgIXRoZW1lRXJyb3JzIHx8ICF0aGlzLnNob3VsZFNob3dBZGRvbkVycm9ycykgcmV0dXJuO1xyXG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbW9kYWwgPSAkKGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCBiYWNrZHJvcC0xd3JtS0JcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsIGJkLWNvbnRlbnQtbW9kYWwgbW9kYWwtMVVHZG5SXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgaW5uZXItMUplR1ZjXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciBoZWFkZXItMVJfQWpGXCI+PGRpdiBjbGFzcz1cInRpdGxlXCI+JHtTdHJpbmdzLk1vZGFscy5hZGRvbkVycm9yc308L2Rpdj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyIFRPUFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWl0ZW1cIj4ke1N0cmluZ3MuUGFuZWxzLnBsdWdpbnN9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPiR7U3RyaW5ncy5QYW5lbHMudGhlbWVzfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1uYW1lXCI+JHtTdHJpbmdzLk1vZGFscy5uYW1lfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPiR7U3RyaW5ncy5Nb2RhbHMubWVzc2FnZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+JHtTdHJpbmdzLk1vZGFscy5lcnJvcn08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIGZhZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyIGZvb3Rlci0yeWZDZ1ggZm9vdGVyLTNyRFdkQyBmb290ZXItMmdMMXBwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYmQtYnV0dG9uXCI+JHtTdHJpbmdzLk1vZGFscy5va2F5fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xyXG5cclxuICAgICAgICBjb25zdCBnZW5lcmF0ZVRhYiA9IGZ1bmN0aW9uKGVycm9ycykge1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSAkKGA8ZGl2IGNsYXNzPVwiZXJyb3JzXCI+YCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSAkKGA8ZGl2IGNsYXNzPVwiZXJyb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+JHtlcnIubWVzc2FnZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj48YSBjbGFzcz1cImVycm9yLWxpbmtcIiBocmVmPVwiXCI+JHtlcnIuZXJyb3IgPyBlcnIuZXJyb3IubWVzc2FnZSA6IFwiXCJ9PC9hPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IuZmluZChcImFcIikub24oXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZ2dlci5zdGFja3RyYWNlKFwiQWRkb25FcnJvclwiLCBgRXJyb3IgZGV0YWlscyBmb3IgJHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9LmAsIGVyci5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCB0YWJzID0gW2dlbmVyYXRlVGFiKHBsdWdpbkVycm9ycyksIGdlbmVyYXRlVGFiKHRoZW1lRXJyb3JzKV07XHJcblxyXG4gICAgICAgIG1vZGFsLmZpbmQoXCIudGFiLWJhci1pdGVtXCIpLm9uKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKFwiLnRhYi1iYXItaXRlbVwiKS5yZW1vdmVDbGFzcyhcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICAkKGUudGFyZ2V0KS5hZGRDbGFzcyhcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKFwiLnNjcm9sbGVyXCIpLmVtcHR5KCkuYXBwZW5kKHRhYnNbJChlLnRhcmdldCkuaW5kZXgoKV0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBtb2RhbC5maW5kKFwiLmZvb3RlciBidXR0b25cIikub24oXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vZGFsLmFkZENsYXNzKFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1vZGFsLmZpbmQoXCIuYmQtYmFja2Ryb3BcIikub24oXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vZGFsLmFkZENsYXNzKFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1vZGFsLmFwcGVuZFRvKFwiI2FwcC1tb3VudFwiKTtcclxuICAgICAgICBpZiAocGx1Z2luRXJyb3JzLmxlbmd0aCkgbW9kYWwuZmluZChcIi50YWItYmFyLWl0ZW1cIilbMF0uY2xpY2soKTtcclxuICAgICAgICBlbHNlIG1vZGFsLmZpbmQoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xyXG4gICAgICAgIGNvbnN0IENoYW5nZWxvZ0NsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZml4ZWRcIiwgXCJpbXByb3ZlZFwiKTtcclxuICAgICAgICBjb25zdCBUZXh0RWxlbWVudCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVGV4dFwiKTtcclxuICAgICAgICBjb25zdCBGbGV4Q2hpbGQgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiQ2hpbGRcIik7XHJcbiAgICAgICAgY29uc3QgVGl0bGVzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIlRhZ3NcIiwgXCJkZWZhdWx0XCIpO1xyXG4gICAgICAgIGNvbnN0IENoYW5nZWxvZyA9IFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZShtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLnNlbGVjdGFibGUgPT0gZmFsc2UpO1xyXG4gICAgICAgIGNvbnN0IE1hcmtkb3duUGFyc2VyID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImRlZmF1bHRSdWxlc1wiLCBcInBhcnNlXCIpO1xyXG4gICAgICAgIGlmICghQ2hhbmdlbG9nIHx8ICFNb2RhbFN0YWNrIHx8ICFDaGFuZ2Vsb2dDbGFzc2VzIHx8ICFUZXh0RWxlbWVudCB8fCAhRmxleENoaWxkIHx8ICFUaXRsZXMgfHwgIU1hcmtkb3duUGFyc2VyKSByZXR1cm4gTG9nZ2VyLndhcm4oXCJNb2RhbHNcIiwgXCJzaG93Q2hhbmdlbG9nTW9kYWwgbWlzc2luZyBtb2R1bGVzXCIpO1xyXG4gICAgXHJcbiAgICAgICAgY29uc3Qge2ltYWdlID0gXCJodHRwczovL3JlcG9zaXRvcnktaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMDU0NzM1MzcvOTU3YjU0ODAtN2MyNi0xMWU5LTg0MDEtNTBmYTgyMGNiYWU1XCIsIGRlc2NyaXB0aW9uID0gXCJcIiwgY2hhbmdlcyA9IFtdLCB0aXRsZSA9IFwiQmFuZGFnZWRCRFwiLCBzdWJ0aXRsZSA9IGB2JHtDb25maWcuYmJkVmVyc2lvbn1gLCBmb290ZXJ9ID0gb3B0aW9ucztcclxuICAgICAgICBjb25zdCBjZSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgY2hhbmdlbG9nSXRlbXMgPSBbY2UoXCJpbWdcIiwge3NyYzogaW1hZ2V9KV07XHJcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwicFwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShkZXNjcmlwdGlvbikpKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNoYW5nZXMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBjaGFuZ2VzW2NdO1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA/IENoYW5nZWxvZ0NsYXNzZXNbZW50cnkudHlwZV0gOiBDaGFuZ2Vsb2dDbGFzc2VzLmFkZGVkO1xyXG4gICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBjID09IDAgPyBDaGFuZ2Vsb2dDbGFzc2VzLm1hcmdpblRvcCA6IFwiXCI7XHJcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJoMVwiLCB7Y2xhc3NOYW1lOiBgJHt0eXBlfSAke21hcmdpbn1gLH0sIGVudHJ5LnRpdGxlKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBjZShcInVsXCIsIG51bGwsIGVudHJ5Lml0ZW1zLm1hcChpID0+IGNlKFwibGlcIiwgbnVsbCwgTWFya2Rvd25QYXJzZXIucGFyc2UoaSkpKSk7XHJcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2gobGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlbmRlckhlYWRlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSxcclxuICAgICAgICAgICAgICAgIGNlKFRpdGxlcy5kZWZhdWx0LCB7dGFnOiBUaXRsZXMuVGFncy5INH0sIHRpdGxlKSxcclxuICAgICAgICAgICAgICAgIGNlKFRleHRFbGVtZW50LCB7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuU1RBTkRBUkQsIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5kYXRlfSwgc3VidGl0bGUpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfTtcclxuICAgIFxyXG4gICAgICAgIGNvbnN0IHJlbmRlckZvb3RlciA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgICAgICAgICAgY29uc3QgQW5jaG9yQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xyXG4gICAgICAgICAgICBjb25zdCBqb2luU3VwcG9ydFNlcnZlciA9IChjbGljaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2xpY2sucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgTW9kYWxTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgICAgIERpc2NvcmRNb2R1bGVzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjJIU2NtOGpcIik7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRMaW5rID0gQW5jaG9yID8gY2UoQW5jaG9yLCB7b25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKSA6IGNlKFwiYVwiLCB7Y2xhc3NOYW1lOiBgJHtBbmNob3JDbGFzc2VzLmFuY2hvcn0gJHtBbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YCwgb25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKTtcclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZvb3RlciA9IGNlKFRleHRFbGVtZW50LCB7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuU1RBTkRBUkR9LCBcIk5lZWQgc3VwcG9ydD8gXCIsIHN1cHBvcnRMaW5rKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNlKEZsZXhDaGlsZC5DaGlsZCwge2dyb3c6IDEsIHNocmluazogMX0sIGZvb3RlciA/IGZvb3RlciA6IGRlZmF1bHRGb290ZXIpO1xyXG4gICAgICAgIH07XHJcbiAgICBcclxuICAgICAgICByZXR1cm4gTW9kYWxTdGFjay5wdXNoKENoYW5nZWxvZywge1xyXG4gICAgICAgICAgICBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuY29udGFpbmVyLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBvblNjcm9sbDogXyA9PiBfLFxyXG4gICAgICAgICAgICBvbkNsb3NlOiBfID0+IF8sXHJcbiAgICAgICAgICAgIHJlbmRlckhlYWRlcjogcmVuZGVySGVhZGVyLFxyXG4gICAgICAgICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcclxuICAgICAgICAgICAgY2hpbGRyZW46IGNoYW5nZWxvZ0l0ZW1zXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/modals.js\n"); /***/ }), @@ -911,7 +983,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__[\"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 } // insert({section: \"CUSTOM\", element: Attribution});\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzLmpzPzc2YmUiXSwibmFtZXMiOlsiU2V0dGluZ3NSZW5kZXJlciIsImNvbnN0cnVjdG9yIiwicGF0Y2hTZWN0aW9ucyIsIkV2ZW50cyIsIm9uIiwiZm9yY2VVcGRhdGUiLCJvbkNoYW5nZSIsImNvbGxlY3Rpb24iLCJjYXRlZ29yeSIsImlkIiwiYmVmb3JlIiwiU2V0dGluZ3MiLCJjb2xsZWN0aW9ucyIsImxlbmd0aCIsInBhbmVscyIsImFmdGVyIiwic2V0VGltZW91dCIsImJpbmQiLCJidWlsZFNldHRpbmdzUGFuZWwiLCJ0aXRsZSIsImNvbmZpZyIsInN0YXRlIiwiYnV0dG9uIiwiZm9yRWFjaCIsInNlY3Rpb24iLCJzZXR0aW5ncyIsIml0ZW0iLCJ2YWx1ZSIsImdldFNldHRpbmdzUGFuZWwiLCJncm91cHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJTZXR0aW5nc1RpdGxlIiwidGV4dCIsIm1hcCIsIlNldHRpbmdzR3JvdXAiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRBZGRvblBhbmVsIiwiYWRkb25MaXN0IiwiYWRkb25TdGF0ZSIsIm9wdGlvbnMiLCJBZGRvbkxpc3QiLCJSZWFjdENvbXBvbmVudHMiLCJnZXQiLCJtIiwiZGlzcGxheU5hbWUiLCJ0aGVuIiwiYyIsImNvbnNvbGUiLCJsb2ciLCJVc2VyU2V0dGluZ3MiLCJwcm90b3R5cGUiLCJnZW5lcmF0ZVNlY3Rpb25zIiwiUGF0Y2hlciIsInRoaXNPYmplY3QiLCJfcmVhY3RJbnRlcm5hbEZpYmVyIiwicmV0dXJuIiwibWVtb2l6ZWRQcm9wcyIsImFyZ3MiLCJyZXR1cm5WYWx1ZSIsImxvY2F0aW9uIiwiZmluZEluZGV4IiwicyIsInRvTG93ZXJDYXNlIiwiaW5zZXJ0Iiwic3BsaWNlIiwibGFiZWwiLCJkaXNhYmxlZCIsIm5hbWUiLCJlbGVtZW50Iiwib25TZXR0aW5nQ2hhbmdlIiwicGFuZWwiLCJzb3J0IiwiYSIsImIiLCJvcmRlciIsImNsaWNrTGlzdGVuZXIiLCJvbkNsaWNrIiwiZXZlbnQiLCJ2aWV3Q2xhc3MiLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5UHJvcHMiLCJzdGFuZGFyZFNpZGViYXJWaWV3Iiwic3BsaXQiLCJub2RlIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwic3RhdGVOb2RlIiwiVXRpbGl0aWVzIiwiZmluZEluUmVhY3RUcmVlIiwiZ2V0UmVhY3RJbnN0YW5jZSIsIndhbGthYmxlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRWUsbUVBQUksTUFBTUEsZ0JBQU4sQ0FBdUI7QUFFdENDLGFBQVcsR0FBRztBQUNWLFNBQUtDLGFBQUw7QUFDQUMsa0RBQU0sQ0FBQ0MsRUFBUCxDQUFVLGlCQUFWLEVBQTZCLEtBQUtDLFdBQWxDO0FBQ0g7O0FBRURDLFVBQVEsQ0FBQ0EsUUFBRCxFQUFXO0FBQ2YsV0FBTyxDQUFDQyxVQUFELEVBQWFDLFFBQWIsRUFBdUJDLEVBQXZCLEtBQThCO0FBQ2pDLFlBQU1DLE1BQU0sR0FBR0MsZ0RBQVEsQ0FBQ0MsV0FBVCxDQUFxQkMsTUFBckIsR0FBOEJGLGdEQUFRLENBQUNHLE1BQVQsQ0FBZ0JELE1BQTdEO0FBQ0FQLGNBQVEsQ0FBQ0MsVUFBRCxFQUFhQyxRQUFiLEVBQXVCQyxFQUF2QixDQUFSO0FBQ0EsWUFBTU0sS0FBSyxHQUFHSixnREFBUSxDQUFDQyxXQUFULENBQXFCQyxNQUFyQixHQUE4QkYsZ0RBQVEsQ0FBQ0csTUFBVCxDQUFnQkQsTUFBNUQ7QUFDQSxVQUFJSCxNQUFNLElBQUlLLEtBQWQsRUFBcUJDLFVBQVUsQ0FBQyxLQUFLWCxXQUFMLENBQWlCWSxJQUFqQixDQUFzQixJQUF0QixDQUFELEVBQThCLEVBQTlCLENBQVY7QUFDeEIsS0FMRDtBQU1IOztBQUVEQyxvQkFBa0IsQ0FBQ0MsS0FBRCxFQUFRQyxNQUFSLEVBQWdCQyxLQUFoQixFQUF1QmYsUUFBdkIsRUFBaUNnQixN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QXlCTCxLQUFLLENBQUNNLE9BQU4sR0FBaUJDLEtBQUQsSUFBV1AsS0FBSyxDQUFDSyxhQUFOLENBQW9CdEIsVUFBcEIsRUFBZ0N3QixLQUFoQyxFQUF1Q25CLFdBQXZDLENBQTNCO0FBQ3pCSyxjQUFNLENBQUNPLEtBQUQsQ0FBTjtBQUNILE9BbkIyRyxDQW9CNUc7O0FBQ0gsS0FyQkQ7QUFzQkEsU0FBS25FLFdBQUw7QUFDSDs7QUFFREEsYUFBVyxHQUFHO0FBQ1YsVUFBTTJFLFNBQVMsR0FBR0Msc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixxQkFBMUIsRUFBaURDLG1CQUFqRCxDQUFxRUMsS0FBckUsQ0FBMkUsR0FBM0UsRUFBZ0YsQ0FBaEYsQ0FBbEI7QUFDQSxVQUFNQyxJQUFJLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF3QixJQUFHUCxTQUFVLEVBQXJDLENBQWI7QUFDQSxRQUFJLENBQUNLLElBQUwsRUFBVztBQUNYLFVBQU1HLFNBQVMsR0FBR0MsaURBQVMsQ0FBQ0MsZUFBVixDQUEwQkQsaURBQVMsQ0FBQ0UsZ0JBQVYsQ0FBMkJOLElBQTNCLENBQTFCLEVBQTREeEMsQ0FBQyxJQUFJQSxDQUFDLElBQUlBLENBQUMsQ0FBQ1EsZ0JBQXhFLEVBQTBGO0FBQUN1QyxjQUFRLEVBQUUsQ0FBQyxRQUFELEVBQVcsV0FBWDtBQUFYLEtBQTFGLENBQWxCO0FBQ0EsUUFBSUosU0FBSixFQUFlQSxTQUFTLENBQUNuRixXQUFWO0FBQ2xCOztBQTlFcUMsQ0FBM0IsRUFBZiIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3QsIFdlYnBhY2tNb2R1bGVzLCBQYXRjaGVyLCBSZWFjdENvbXBvbmVudHMsIFV0aWxpdGllcywgU2V0dGluZ3MsIEV2ZW50c30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBBZGRvbkxpc3QgZnJvbSBcIi4vc2V0dGluZ3MvYWRkb25saXN0XCI7XHJcbmltcG9ydCBTZXR0aW5nc0dyb3VwIGZyb20gXCIuL3NldHRpbmdzL2dyb3VwXCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzL3RpdGxlXCI7XHJcbmltcG9ydCBBdHRyaWJ1dGlvbiBmcm9tIFwiLi9zZXR0aW5ncy9hdHRyaWJ1dGlvblwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFNldHRpbmdzUmVuZGVyZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMucGF0Y2hTZWN0aW9ucygpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcInN0cmluZ3MtdXBkYXRlZFwiLCB0aGlzLmZvcmNlVXBkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZShvbkNoYW5nZSkge1xyXG4gICAgICAgIHJldHVybiAoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IFNldHRpbmdzLmNvbGxlY3Rpb25zLmxlbmd0aCArIFNldHRpbmdzLnBhbmVscy5sZW5ndGg7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlKGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gU2V0dGluZ3MuY29sbGVjdGlvbnMubGVuZ3RoICsgU2V0dGluZ3MucGFuZWxzLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKGJlZm9yZSAhPSBhZnRlcikgc2V0VGltZW91dCh0aGlzLmZvcmNlVXBkYXRlLmJpbmQodGhpcyksIDUwKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkU2V0dGluZ3NQYW5lbCh0aXRsZSwgY29uZmlnLCBzdGF0ZSwgb25DaGFuZ2UsIGJ1dHRvbiA9IG51bGwpIHtcclxuICAgICAgICBjb25maWcuZm9yRWFjaChzZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbi5zZXR0aW5ncy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS52YWx1ZSA9IHN0YXRlW3NlY3Rpb24uaWRdW2l0ZW0uaWRdKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5nc1BhbmVsKHRpdGxlLCBjb25maWcsIHRoaXMub25DaGFuZ2Uob25DaGFuZ2UpLCBidXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNldHRpbmdzUGFuZWwodGl0bGUsIGdyb3Vwcywgb25DaGFuZ2UsIGJ1dHRvbiA9IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gW1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHRpdGxlLCBidXR0b246IGJ1dHRvbn0pLCBncm91cHMubWFwKHNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc0dyb3VwLCBPYmplY3QuYXNzaWduKHt9LCBzZWN0aW9uLCB7b25DaGFuZ2V9KSk7XHJcbiAgICAgICAgfSldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFkZG9uUGFuZWwodGl0bGUsIGFkZG9uTGlzdCwgYWRkb25TdGF0ZSwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkb25MaXN0LCBPYmplY3QuYXNzaWduKHt9LCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgYWRkb25MaXN0OiBhZGRvbkxpc3QsXHJcbiAgICAgICAgICAgIGFkZG9uU3RhdGU6IGFkZG9uU3RhdGVcclxuICAgICAgICB9LCBvcHRpb25zKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcGF0Y2hTZWN0aW9ucygpIHtcclxuICAgICAgICBSZWFjdENvbXBvbmVudHMuZ2V0KFwiRmx1eENvbnRhaW5lcihHdWlsZFNldHRpbmdzKVwiLCBtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJGbHV4Q29udGFpbmVyKEd1aWxkU2V0dGluZ3MpXCIpLnRoZW4oYyA9PiBjb25zb2xlLmxvZyhcIkNPTVBPTkVOVFwiLCBjKSk7XHJcbiAgICAgICAgLy8gY29uc3QgR3VpbGRTZXR0aW5ncyA9IGF3YWl0IFJlYWN0Q29tcG9uZW50cy5nZXQoXCJGbHV4Q29udGFpbmVyKEd1aWxkU2V0dGluZ3MpXCIsIG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkZsdXhDb250YWluZXIoR3VpbGRTZXR0aW5ncylcIik7XHJcbiAgICAgICAgLy8gUGF0Y2hlci5hZnRlcihcIlNldHRpbmdzTWFuYWdlclwiLCBHdWlsZFNldHRpbmdzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmplY3QpID0+IHtcclxuICAgICAgICAvLyAgICAgdGhpc09iamVjdC5fcmVhY3RJbnRlcm5hbEZpYmVyLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLm1lbW9pemVkUHJvcHMuaWQgPSBcImd1aWxkLXNldHRpbmdzXCI7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgY29uc3QgVXNlclNldHRpbmdzID0gYXdhaXQgUmVhY3RDb21wb25lbnRzLmdldChcIlVzZXJTZXR0aW5nc1wiLCBtID0+IG0ucHJvdG90eXBlICYmIG0ucHJvdG90eXBlLmdlbmVyYXRlU2VjdGlvbnMpO1xyXG4gICAgICAgIFBhdGNoZXIuYWZ0ZXIoXCJTZXR0aW5nc01hbmFnZXJcIiwgVXNlclNldHRpbmdzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpc09iamVjdC5fcmVhY3RJbnRlcm5hbEZpYmVyLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5tZW1vaXplZFByb3BzLmlkID0gXCJ1c2VyLXNldHRpbmdzXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgUGF0Y2hlci5hZnRlcihcIlNldHRpbmdzTWFuYWdlclwiLCBVc2VyU2V0dGluZ3MucHJvdG90eXBlLCBcImdlbmVyYXRlU2VjdGlvbnNcIiwgKHRoaXNPYmplY3QsIGFyZ3MsIHJldHVyblZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBsb2NhdGlvbiA9IHJldHVyblZhbHVlLmZpbmRJbmRleChzID0+IHMuc2VjdGlvbi50b0xvd2VyQ2FzZSgpID09IFwibGludXhcIikgKyAxO1xyXG4gICAgICAgICAgICBjb25zdCBpbnNlcnQgPSAoc2VjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUuc3BsaWNlKGxvY2F0aW9uLCAwLCBzZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uKys7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGluc2VydCh7c2VjdGlvbjogXCJESVZJREVSXCJ9KTtcclxuICAgICAgICAgICAgaW5zZXJ0KHtzZWN0aW9uOiBcIkhFQURFUlwiLCBsYWJlbDogXCJCYW5kYWdlZEJEXCJ9KTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIFNldHRpbmdzLmNvbGxlY3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbi5kaXNhYmxlZCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpbnNlcnQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGNvbGxlY3Rpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sbGVjdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6ICgpID0+IHRoaXMuYnVpbGRTZXR0aW5nc1BhbmVsKGNvbGxlY3Rpb24ubmFtZSwgY29sbGVjdGlvbi5zZXR0aW5ncywgU2V0dGluZ3Muc3RhdGVbY29sbGVjdGlvbi5pZF0sIFNldHRpbmdzLm9uU2V0dGluZ0NoYW5nZS5iaW5kKFNldHRpbmdzLCBjb2xsZWN0aW9uLmlkKSwgY29sbGVjdGlvbi5idXR0b24gPyBjb2xsZWN0aW9uLmJ1dHRvbiA6IG51bGwpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhbmVsIG9mIFNldHRpbmdzLnBhbmVscy5zb3J0KChhLGIpID0+IGEub3JkZXIgPiBiLm9yZGVyKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhbmVsLmNsaWNrTGlzdGVuZXIpIHBhbmVsLm9uQ2xpY2sgPSAoZXZlbnQpID0+IHBhbmVsLmNsaWNrTGlzdGVuZXIodGhpc09iamVjdCwgZXZlbnQsIHJldHVyblZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGluc2VydChwYW5lbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaW5zZXJ0KHtzZWN0aW9uOiBcIkNVU1RPTVwiLCBlbGVtZW50OiBBdHRyaWJ1dGlvbn0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3JjZVVwZGF0ZSgpIHtcclxuICAgICAgICBjb25zdCB2aWV3Q2xhc3MgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwic3RhbmRhcmRTaWRlYmFyVmlld1wiKS5zdGFuZGFyZFNpZGViYXJWaWV3LnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7dmlld0NsYXNzfWApO1xyXG4gICAgICAgIGlmICghbm9kZSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHN0YXRlTm9kZSA9IFV0aWxpdGllcy5maW5kSW5SZWFjdFRyZWUoVXRpbGl0aWVzLmdldFJlYWN0SW5zdGFuY2Uobm9kZSksIG0gPT4gbSAmJiBtLmdlbmVyYXRlU2VjdGlvbnMsIHt3YWxrYWJsZTogW1wicmV0dXJuXCIsIFwic3RhdGVOb2RlXCJdfSk7XHJcbiAgICAgICAgaWYgKHN0YXRlTm9kZSkgc3RhdGVOb2RlLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\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_sidebarheader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settings/sidebarheader */ \"./src/ui/settings/sidebarheader.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 }); //Header\n\n insert({\n section: \"CUSTOM\",\n element: _settings_sidebarheader__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\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 } // insert({section: \"CUSTOM\", element: Attribution});\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzLmpzPzc2YmUiXSwibmFtZXMiOlsiU2V0dGluZ3NSZW5kZXJlciIsImNvbnN0cnVjdG9yIiwicGF0Y2hTZWN0aW9ucyIsIkV2ZW50cyIsIm9uIiwiZm9yY2VVcGRhdGUiLCJvbkNoYW5nZSIsImNvbGxlY3Rpb24iLCJjYXRlZ29yeSIsImlkIiwiYmVmb3JlIiwiU2V0dGluZ3MiLCJjb2xsZWN0aW9ucyIsImxlbmd0aCIsInBhbmVscyIsImFmdGVyIiwic2V0VGltZW91dCIsImJpbmQiLCJidWlsZFNldHRpbmdzUGFuZWwiLCJ0aXRsZSIsImNvbmZpZyIsInN0YXRlIiwiYnV0dG9uIiwiZm9yRWFjaCIsInNlY3Rpb24iLCJzZXR0aW5ncyIsIml0ZW0iLCJ2YWx1ZSIsImdldFNldHRpbmdzUGFuZWwiLCJncm91cHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJTZXR0aW5nc1RpdGxlIiwidGV4dCIsIm1hcCIsIlNldHRpbmdzR3JvdXAiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRBZGRvblBhbmVsIiwiYWRkb25MaXN0IiwiYWRkb25TdGF0ZSIsIm9wdGlvbnMiLCJBZGRvbkxpc3QiLCJSZWFjdENvbXBvbmVudHMiLCJnZXQiLCJtIiwiZGlzcGxheU5hbWUiLCJ0aGVuIiwiYyIsImNvbnNvbGUiLCJsb2ciLCJVc2VyU2V0dGluZ3MiLCJwcm90b3R5cGUiLCJnZW5lcmF0ZVNlY3Rpb25zIiwiUGF0Y2hlciIsInRoaXNPYmplY3QiLCJfcmVhY3RJbnRlcm5hbEZpYmVyIiwicmV0dXJuIiwibWVtb2l6ZWRQcm9wcyIsImFyZ3MiLCJyZXR1cm5WYWx1ZSIsImxvY2F0aW9uIiwiZmluZEluZGV4IiwicyIsInRvTG93ZXJDYXNlIiwiaW5zZXJ0Iiwic3BsaWNlIiwiZWxlbWVudCIsIkhlYWRlciIsImRpc2FibGVkIiwibmFtZSIsImxhYmVsIiwib25TZXR0aW5nQ2hhbmdlIiwicGFuZWwiLCJzb3J0IiwiYSIsImIiLCJvcmRlciIsImNsaWNrTGlzdGVuZXIiLCJvbkNsaWNrIiwiZXZlbnQiLCJ2aWV3Q2xhc3MiLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5UHJvcHMiLCJzdGFuZGFyZFNpZGViYXJWaWV3Iiwic3BsaXQiLCJub2RlIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwic3RhdGVOb2RlIiwiVXRpbGl0aWVzIiwiZmluZEluUmVhY3RUcmVlIiwiZ2V0UmVhY3RJbnN0YW5jZSIsIndhbGthYmxlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRWUsbUVBQUksTUFBTUEsZ0JBQU4sQ0FBdUI7QUFFdENDLGFBQVcsR0FBRztBQUNWLFNBQUtDLGFBQUw7QUFDQUMsa0RBQU0sQ0FBQ0MsRUFBUCxDQUFVLGlCQUFWLEVBQTZCLEtBQUtDLFdBQWxDO0FBQ0g7O0FBRURDLFVBQVEsQ0FBQ0EsUUFBRCxFQUFXO0FBQ2YsV0FBTyxDQUFDQyxVQUFELEVBQWFDLFFBQWIsRUFBdUJDLEVBQXZCLEtBQThCO0FBQ2pDLFlBQU1DLE1BQU0sR0FBR0MsZ0RBQVEsQ0FBQ0MsV0FBVCxDQUFxQkMsTUFBckIsR0FBOEJGLGdEQUFRLENBQUNHLE1BQVQsQ0FBZ0JELE1BQTdEO0FBQ0FQLGNBQVEsQ0FBQ0MsVUFBRCxFQUFhQyxRQUFiLEVBQXVCQyxFQUF2QixDQUFSO0FBQ0EsWUFBTU0sS0FBSyxHQUFHSixnREFBUSxDQUFDQyxXQUFULENBQXFCQyxNQUFyQixHQUE4QkYsZ0RBQVEsQ0FBQ0csTUFBVCxDQUFnQkQsTUFBNUQ7QUFDQSxVQUFJSCxNQUFNLElBQUlLLEtBQWQsRUFBcUJDLFVBQVUsQ0FBQyxLQUFLWCxXQUFMLENBQWlCWSxJQUFqQixDQUFzQixJQUF0QixDQUFELEVBQThCLEVBQTlCLENBQVY7QUFDeEIsS0FMRDtBQU1IOztBQUVEQyxvQkFBa0IsQ0FBQ0MsS0FBRCxFQUFRQyxNQUFSLEVBQWdCQyxLQUFoQixFQUF1QmYsUUFBdkIs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QUFDbEUsWUFBSUosS0FBSyxDQUFDSyxhQUFWLEVBQXlCTCxLQUFLLENBQUNNLE9BQU4sR0FBaUJDLEtBQUQsSUFBV1AsS0FBSyxDQUFDSyxhQUFOLENBQW9CdkIsVUFBcEIsRUFBZ0N5QixLQUFoQyxFQUF1Q3BCLFdBQXZDLENBQTNCO0FBQ3pCSyxjQUFNLENBQUNRLEtBQUQsQ0FBTjtBQUNILE9BcEIyRyxDQXFCNUc7O0FBQ0gsS0F0QkQ7QUF1QkEsU0FBS3BFLFdBQUw7QUFDSDs7QUFFREEsYUFBVyxHQUFHO0FBQ1YsVUFBTTRFLFNBQVMsR0FBR0Msc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixxQkFBMUIsRUFBaURDLG1CQUFqRCxDQUFxRUMsS0FBckUsQ0FBMkUsR0FBM0UsRUFBZ0YsQ0FBaEYsQ0FBbEI7QUFDQSxVQUFNQyxJQUFJLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF3QixJQUFHUCxTQUFVLEVBQXJDLENBQWI7QUFDQSxRQUFJLENBQUNLLElBQUwsRUFBVztBQUNYLFVBQU1HLFNBQVMsR0FBR0MsaURBQVMsQ0FBQ0MsZUFBVixDQUEwQkQsaURBQVMsQ0FBQ0UsZ0JBQVYsQ0FBMkJOLElBQTNCLENBQTFCLEVBQTREekMsQ0FBQyxJQUFJQSxDQUFDLElBQUlBLENBQUMsQ0FBQ1EsZ0JBQXhFLEVBQTBGO0FBQUN3QyxjQUFRLEVBQUUsQ0FBQyxRQUFELEVBQVcsV0FBWDtBQUFYLEtBQTFGLENBQWxCO0FBQ0EsUUFBSUosU0FBSixFQUFlQSxTQUFTLENBQUNwRixXQUFWO0FBQ2xCOztBQS9FcUMsQ0FBM0IsRUFBZiIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3QsIFdlYnBhY2tNb2R1bGVzLCBQYXRjaGVyLCBSZWFjdENvbXBvbmVudHMsIFV0aWxpdGllcywgU2V0dGluZ3MsIEV2ZW50c30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBBZGRvbkxpc3QgZnJvbSBcIi4vc2V0dGluZ3MvYWRkb25saXN0XCI7XHJcbmltcG9ydCBTZXR0aW5nc0dyb3VwIGZyb20gXCIuL3NldHRpbmdzL2dyb3VwXCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzL3RpdGxlXCI7XHJcbmltcG9ydCBIZWFkZXIgZnJvbSBcIi4vc2V0dGluZ3Mvc2lkZWJhcmhlYWRlclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFNldHRpbmdzUmVuZGVyZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMucGF0Y2hTZWN0aW9ucygpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcInN0cmluZ3MtdXBkYXRlZFwiLCB0aGlzLmZvcmNlVXBkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZShvbkNoYW5nZSkge1xyXG4gICAgICAgIHJldHVybiAoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IFNldHRpbmdzLmNvbGxlY3Rpb25zLmxlbmd0aCArIFNldHRpbmdzLnBhbmVscy5sZW5ndGg7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlKGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gU2V0dGluZ3MuY29sbGVjdGlvbnMubGVuZ3RoICsgU2V0dGluZ3MucGFuZWxzLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKGJlZm9yZSAhPSBhZnRlcikgc2V0VGltZW91dCh0aGlzLmZvcmNlVXBkYXRlLmJpbmQodGhpcyksIDUwKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkU2V0dGluZ3NQYW5lbCh0aXRsZSwgY29uZmlnLCBzdGF0ZSwgb25DaGFuZ2UsIGJ1dHRvbiA9IG51bGwpIHtcclxuICAgICAgICBjb25maWcuZm9yRWFjaChzZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbi5zZXR0aW5ncy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS52YWx1ZSA9IHN0YXRlW3NlY3Rpb24uaWRdW2l0ZW0uaWRdKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5nc1BhbmVsKHRpdGxlLCBjb25maWcsIHRoaXMub25DaGFuZ2Uob25DaGFuZ2UpLCBidXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNldHRpbmdzUGFuZWwodGl0bGUsIGdyb3Vwcywgb25DaGFuZ2UsIGJ1dHRvbiA9IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gW1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHRpdGxlLCBidXR0b246IGJ1dHRvbn0pLCBncm91cHMubWFwKHNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc0dyb3VwLCBPYmplY3QuYXNzaWduKHt9LCBzZWN0aW9uLCB7b25DaGFuZ2V9KSk7XHJcbiAgICAgICAgfSldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFkZG9uUGFuZWwodGl0bGUsIGFkZG9uTGlzdCwgYWRkb25TdGF0ZSwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkb25MaXN0LCBPYmplY3QuYXNzaWduKHt9LCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgYWRkb25MaXN0OiBhZGRvbkxpc3QsXHJcbiAgICAgICAgICAgIGFkZG9uU3RhdGU6IGFkZG9uU3RhdGVcclxuICAgICAgICB9LCBvcHRpb25zKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcGF0Y2hTZWN0aW9ucygpIHtcclxuICAgICAgICBSZWFjdENvbXBvbmVudHMuZ2V0KFwiRmx1eENvbnRhaW5lcihHdWlsZFNldHRpbmdzKVwiLCBtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJGbHV4Q29udGFpbmVyKEd1aWxkU2V0dGluZ3MpXCIpLnRoZW4oYyA9PiBjb25zb2xlLmxvZyhcIkNPTVBPTkVOVFwiLCBjKSk7XHJcbiAgICAgICAgLy8gY29uc3QgR3VpbGRTZXR0aW5ncyA9IGF3YWl0IFJlYWN0Q29tcG9uZW50cy5nZXQoXCJGbHV4Q29udGFpbmVyKEd1aWxkU2V0dGluZ3MpXCIsIG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkZsdXhDb250YWluZXIoR3VpbGRTZXR0aW5ncylcIik7XHJcbiAgICAgICAgLy8gUGF0Y2hlci5hZnRlcihcIlNldHRpbmdzTWFuYWdlclwiLCBHdWlsZFNldHRpbmdzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmplY3QpID0+IHtcclxuICAgICAgICAvLyAgICAgdGhpc09iamVjdC5fcmVhY3RJbnRlcm5hbEZpYmVyLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLm1lbW9pemVkUHJvcHMuaWQgPSBcImd1aWxkLXNldHRpbmdzXCI7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgY29uc3QgVXNlclNldHRpbmdzID0gYXdhaXQgUmVhY3RDb21wb25lbnRzLmdldChcIlVzZXJTZXR0aW5nc1wiLCBtID0+IG0ucHJvdG90eXBlICYmIG0ucHJvdG90eXBlLmdlbmVyYXRlU2VjdGlvbnMpO1xyXG4gICAgICAgIFBhdGNoZXIuYWZ0ZXIoXCJTZXR0aW5nc01hbmFnZXJcIiwgVXNlclNldHRpbmdzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpc09iamVjdC5fcmVhY3RJbnRlcm5hbEZpYmVyLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5tZW1vaXplZFByb3BzLmlkID0gXCJ1c2VyLXNldHRpbmdzXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgUGF0Y2hlci5hZnRlcihcIlNldHRpbmdzTWFuYWdlclwiLCBVc2VyU2V0dGluZ3MucHJvdG90eXBlLCBcImdlbmVyYXRlU2VjdGlvbnNcIiwgKHRoaXNPYmplY3QsIGFyZ3MsIHJldHVyblZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBsb2NhdGlvbiA9IHJldHVyblZhbHVlLmZpbmRJbmRleChzID0+IHMuc2VjdGlvbi50b0xvd2VyQ2FzZSgpID09IFwibGludXhcIikgKyAxO1xyXG4gICAgICAgICAgICBjb25zdCBpbnNlcnQgPSAoc2VjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUuc3BsaWNlKGxvY2F0aW9uLCAwLCBzZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uKys7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGluc2VydCh7c2VjdGlvbjogXCJESVZJREVSXCJ9KTtcclxuICAgICAgICAgICAgLy9IZWFkZXJcclxuICAgICAgICAgICAgaW5zZXJ0KHtzZWN0aW9uOiBcIkNVU1RPTVwiLCBlbGVtZW50OiBIZWFkZXJ9KTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIFNldHRpbmdzLmNvbGxlY3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbi5kaXNhYmxlZCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpbnNlcnQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGNvbGxlY3Rpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sbGVjdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6ICgpID0+IHRoaXMuYnVpbGRTZXR0aW5nc1BhbmVsKGNvbGxlY3Rpb24ubmFtZSwgY29sbGVjdGlvbi5zZXR0aW5ncywgU2V0dGluZ3Muc3RhdGVbY29sbGVjdGlvbi5pZF0sIFNldHRpbmdzLm9uU2V0dGluZ0NoYW5nZS5iaW5kKFNldHRpbmdzLCBjb2xsZWN0aW9uLmlkKSwgY29sbGVjdGlvbi5idXR0b24gPyBjb2xsZWN0aW9uLmJ1dHRvbiA6IG51bGwpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhbmVsIG9mIFNldHRpbmdzLnBhbmVscy5zb3J0KChhLGIpID0+IGEub3JkZXIgPiBiLm9yZGVyKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhbmVsLmNsaWNrTGlzdGVuZXIpIHBhbmVsLm9uQ2xpY2sgPSAoZXZlbnQpID0+IHBhbmVsLmNsaWNrTGlzdGVuZXIodGhpc09iamVjdCwgZXZlbnQsIHJldHVyblZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGluc2VydChwYW5lbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaW5zZXJ0KHtzZWN0aW9uOiBcIkNVU1RPTVwiLCBlbGVtZW50OiBBdHRyaWJ1dGlvbn0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3JjZVVwZGF0ZSgpIHtcclxuICAgICAgICBjb25zdCB2aWV3Q2xhc3MgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwic3RhbmRhcmRTaWRlYmFyVmlld1wiKS5zdGFuZGFyZFNpZGViYXJWaWV3LnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7dmlld0NsYXNzfWApO1xyXG4gICAgICAgIGlmICghbm9kZSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHN0YXRlTm9kZSA9IFV0aWxpdGllcy5maW5kSW5SZWFjdFRyZWUoVXRpbGl0aWVzLmdldFJlYWN0SW5zdGFuY2Uobm9kZSksIG0gPT4gbSAmJiBtLmdlbmVyYXRlU2VjdGlvbnMsIHt3YWxrYWJsZTogW1wicmV0dXJuXCIsIFwic3RhdGVOb2RlXCJdfSk7XHJcbiAgICAgICAgaWYgKHN0YXRlTm9kZSkgc3RhdGVOb2RlLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/settings.js\n"); /***/ }), @@ -923,7 +995,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\n if (which == \"invite\") {// TODO:\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/NjM3MyJdLCJuYW1lcyI6WyJUb29sdGlwIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeURpc3BsYXlOYW1lIiwiQWRkb25DYXJkIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3RhdGUiLCJzZXR0aW5nc09wZW4iLCJzZXR0aW5nc1BhbmVsIiwicGFuZWxSZWYiLCJjcmVhdGVSZWYiLCJvbkNoYW5nZSIsImJpbmQiLCJyZWxvYWQiLCJzaG93U2V0dGluZ3MiLCJjbG9zZVNldHRpbmdzIiwiYWRkb24iLCJpZCIsImZvcmNlVXBkYXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiTm9kZSIsImN1cnJlbnQiLCJhcHBlbmRDaGlsZCIsImlzSGlkZGVuIiwiY29udGFpbmVyIiwiZWxlbWVudCIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiY2xpZW50SGVpZ2h0IiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJwYW5lbCIsIiQiLCJwYXJlbnRzIiwiYW5pbWF0ZSIsIm9mZnNldCIsInRvcCIsImdldFN0cmluZyIsInZhbHVlIiwidG9TdHJpbmciLCJlbmFibGVkIiwiaGFzU2V0dGluZ3MiLCJzZXRTdGF0ZSIsImlubmVySFRNTCIsImJ1aWxkVGl0bGUiLCJuYW1lIiwidmVyc2lvbiIsImF1dGhvciIsInRpdGxlIiwiU3RyaW5ncyIsIkFkZG9ucyIsInNwbGl0IiwibmFtZUluZGV4IiwiZmluZEluZGV4IiwicyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsImZsYXQiLCJzZXR0aW5nc0NvbXBvbmVudCIsImdldFNldHRpbmdzUGFuZWwiLCJlcnIiLCJMb2dnZXIiLCJzdGFja3RyYWNlIiwicmVmIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJidWlsZExpbmsiLCJ3aGljaCIsInVybCIsImZvb3RlciIsImxpbmtzIiwic29tZSIsImwiLCJsaW5rQ29tcG9uZW50cyIsIm1hcCIsImZpbHRlciIsImMiLCJjb21wIiwiaSIsImxlbmd0aCIsImFkZG9uU2V0dGluZ3MiLCJtYWtlQnV0dG9uIiwiY2hpbGRyZW4iLCJhY3Rpb24iLCJyZW5kZXIiLCJkZXNjcmlwdGlvbiIsImVkaXRBZGRvbiIsImRlbGV0ZUFkZG9uIiwic2hvd1JlbG9hZEljb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxPQUFPLEdBQUdDLHNEQUFjLENBQUNDLGdCQUFmLENBQWdDLFNBQWhDLENBQWhCO0FBRWUsTUFBTUMsU0FBTixTQUF3QkMsNkNBQUssQ0FBQ0MsU0FBOUIsQ0FBd0M7QUFFbkRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUtDLEtBQUwsR0FBYTtBQUNUQyxrQkFBWSxFQUFFO0FBREwsS0FBYjtBQUlBLFNBQUtDLGFBQUwsR0FBcUIsRUFBckI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCUCw2Q0FBSyxDQUFDUSxTQUFOLEVBQWhCO0FBRUEsU0FBS0MsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNDLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDQSxTQUFLQyxNQUFMLEdBQWMsS0FBS0EsTUFBTCxDQUFZRCxJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDQSxTQUFLRSxZQUFMLEdBQW9CLEtBQUtBLFlBQUwsQ0FBa0JGLElBQWxCLENBQXVCLElBQXZCLENBQXBCO0FBQ0EsU0FBS0csYUFBTCxHQUFxQixLQUFLQSxhQUFMLENBQW1CSCxJQUFuQixDQUF3QixJQUF4QixDQUFyQjtBQUNIOztBQUVEQyxRQUFNLEdBQUc7QUFDTCxRQUFJLENBQUMsS0FBS1IsS0FBTCxDQUFXUSxNQUFoQixFQUF3QjtBQUN4QixTQUFLUixLQUFMLENBQVdXLEtBQVgsR0FBbUIsS0FBS1gsS0FBTCxDQUFXUSxN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RUFBQztBQUF0QixNQUF2QyxFQUE0RixLQUFLQSxNQUFqRyxDQUhsQyxFQUlJLDREQUFDLDBEQUFEO0FBQVEsYUFBTyxFQUFFLEtBQUtSLEtBQUwsQ0FBV3FDLE9BQTVCO0FBQXFDLGNBQVEsRUFBRSxLQUFLL0I7QUFBcEQsTUFKSixDQUZSLENBREwsRUFVSztBQUFLLGVBQVMsRUFBQztBQUFmLE9BQXdEO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FBMEM2RSxXQUExQyxDQUF4RCxDQVZMLEVBV00sS0FBS2hCLE1BWFgsQ0FBUDtBQWFIOztBQS9Ja0QiLCJmaWxlIjoiLi9zcmMvdWkvc2V0dGluZ3MvYWRkb25jYXJkLmpzeC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3QsIExvZ2dlciwgU3RyaW5ncywgV2VicGFja01vZHVsZXN9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBDbG9zZUJ1dHRvbiBmcm9tIFwiLi4vaWNvbnMvY2xvc2VcIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4uL2ljb25zL3JlbG9hZFwiO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSBcIi4uL2ljb25zL2VkaXRcIjtcclxuaW1wb3J0IERlbGV0ZUljb24gZnJvbSBcIi4uL2ljb25zL2RlbGV0ZVwiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL2NvbXBvbmVudHMvc3dpdGNoXCI7XHJcblxyXG5jb25zdCBUb29sdGlwID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZGRvbkNhcmQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNldHRpbmdzT3BlbjogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzUGFuZWwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlbG9hZCA9IHRoaXMucmVsb2FkLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0dGluZ3MgPSB0aGlzLnNob3dTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VTZXR0aW5ncyA9IHRoaXMuY2xvc2VTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMucmVsb2FkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcm9wcy5hZGRvbiA9IHRoaXMucHJvcHMucmVsb2FkKHRoaXMucHJvcHMuYWRkb24uaWQpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzT3BlbikgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzUGFuZWwgaW5zdGFuY2VvZiBOb2RlKSB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuXHJcbiAgICAgICAgLy8gaWYgKCFTZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtM1wiXSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlzSGlkZGVuID0gKGNvbnRhaW5lciwgZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgY29uc3QgY0JvdHRvbSA9IGNUb3AgKyBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGVCb3R0b20gPSBlVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgIHJldHVybiAgKGVUb3AgPCBjVG9wIHx8IGVCb3R0b20gPiBjQm90dG9tKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBwYW5lbCA9ICQodGhpcy5wYW5lbFJlZi5jdXJyZW50KTtcclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBwYW5lbC5wYXJlbnRzKFwiLnNjcm9sbGVyLTJGS0ZQR1wiKTtcclxuICAgICAgICBpZiAoIWlzSGlkZGVuKGNvbnRhaW5lclswXSwgcGFuZWxbMF0pKSByZXR1cm47XHJcbiAgICAgICAgY29udGFpbmVyLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBzY3JvbGxUb3A6IHBhbmVsLm9mZnNldCgpLnRvcCAtIGNvbnRhaW5lci5vZmZzZXQoKS50b3AgKyBjb250YWluZXIuc2Nyb2xsVG9wKCkgLSAzMFxyXG4gICAgICAgIH0sIDMwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO31cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlICYmIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5hZGRvbi5pZCk7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5lbmFibGVkID0gIXRoaXMucHJvcHMuZW5hYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmhhc1NldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3NPcGVuOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nc09wZW46IGZhbHNlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRUaXRsZShuYW1lLCB2ZXJzaW9uLCBhdXRob3IpIHtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IFN0cmluZ3MuQWRkb25zLnRpdGxlLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmQtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkLXZlcnNpb25cIn0sIHZlcnNpb24pO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbYXV0aG9ySW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC1hdXRob3JcIn0sIGF1dGhvcik7XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLnByb3BzLmFkZG9uO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldFN0cmluZyhhZGRvbi5uYW1lKTtcclxuICAgICAgICB0cnkgeyB0aGlzLnNldHRpbmdzUGFuZWwgPSB0aGlzLnByb3BzLmdldFNldHRpbmdzUGFuZWwoKTsgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHsgTG9nZ2VyLnN0YWNrdHJhY2UoXCJBZGRvbiBTZXR0aW5nc1wiLCBcIlVuYWJsZSB0byBnZXQgc2V0dGluZ3MgcGFuZWwgZm9yIFwiICsgbmFtZSArIFwiLlwiLCBlcnIpOyB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByb3BzID0ge2lkOiBgJHtuYW1lfS1zZXR0aW5nc2AsIGNsYXNzTmFtZTogXCJhZGRvbi1zZXR0aW5nc1wiLCByZWY6IHRoaXMucGFuZWxSZWZ9O1xyXG4gICAgICAgIGlmICh0eXBlb2Yoc2V0dGluZ3NQYW5lbCkgPT0gXCJzdHJpbmdcIikgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSB0aGlzLnNldHRpbmdzUGFuZWw7XHJcblxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWNhcmQgc2V0dGluZ3Mtb3BlbiBiZC1zd2l0Y2gtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtY2xvc2VcIiBvbkNsaWNrPXt0aGlzLmNsb3NlU2V0dGluZ3N9PjxDbG9zZUJ1dHRvbiAvPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgey4uLnByb3BzfT57dGhpcy5zZXR0aW5nc1BhbmVsIGluc3RhbmNlb2YgUmVhY3QuQ29tcG9uZW50ID8gdGhpcy5zZXR0aW5nc1BhbmVsIDogbnVsbH08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZExpbmsod2hpY2gpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnByb3BzLmFkZG9uW3doaWNoXTtcclxuICAgICAgICBpZiAod2hpY2ggPT0gXCJpbnZpdGVcIikge1xyXG4gICAgICAgICAgICAvLyBUT0RPOlxyXG4gICAgICAgICAgICAvLyBjb25zdCBvbkNsaWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgY29uc3QgdGVzdGVyID0gL1xcLmdnXFwvKC4qKSQvO1xyXG4gICAgICAgICAgICAvLyAgICAgbGV0IGNvZGUgPSB1cmw7XHJcbiAgICAgICAgICAgIC8vICAgICBpZiAodGVzdGVyLnRlc3QoY29kZSkpIGNvZGUgPSBjb2RlLm1hdGNoKHRlc3RlcilbMV07XHJcbiAgICAgICAgICAgIC8vICAgICBCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTtcclxuICAgICAgICAgICAgLy8gICAgIEJEVjIuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKGNvZGUpO1xyXG4gICAgICAgICAgICAvLyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXVybCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIDxhIGNsYXNzTmFtZT1cImJkLWxpbmsgYmQtbGluay13ZWJzaXRlXCIgaHJlZj17dXJsfSB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+e1N0cmluZ3MuQWRkb25zW3doaWNoXX08L2E+O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSBbXCJ3ZWJzaXRlXCIsIFwic291cmNlXCIsIFwiaW52aXRlXCIsIFwiZG9uYXRlXCIsIFwicGF0cmVvblwiXTtcclxuICAgICAgICBpZiAoIWxpbmtzLnNvbWUobCA9PiB0aGlzLnByb3BzLmFkZG9uW2xdKSAmJiAhdGhpcy5wcm9wcy5oYXNTZXR0aW5ncykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgbGlua0NvbXBvbmVudHMgPSBsaW5rcy5tYXAodGhpcy5idWlsZExpbmsuYmluZCh0aGlzKSkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtZm9vdGVyXCI+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\");\n/* harmony import */ var _errorboundary__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../errorboundary */ \"./src/ui/errorboundary.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\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 // 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 // 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 setImmediate(() => {\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 thisNode = this.panelRef.current;\n const container = thisNode.closest(\".scroller\");\n if (!isHidden(container, thisNode)) return;\n const thisNodeOffset = modules__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].offset(thisNode);\n const containerOffset = modules__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].offset(container);\n const original = container.scrollTop;\n const endPoint = thisNodeOffset.top - containerOffset.top + container.scrollTop - 30;\n modules__WEBPACK_IMPORTED_MODULE_0__[\"DOM\"].animate({\n duration: 300,\n update: function (progress) {\n if (endPoint > original) container.scrollTop = original + progress * (endPoint - original);else container.scrollTop = original - progress * (original - endPoint);\n }\n });\n });\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\n if (typeof settingsPanel == \"string\") {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].warn(\"Addon Settings\", \"Using a DOMString is officially deprecated.\");\n props.dangerouslySetInnerHTML = this.settingsPanel;\n }\n\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, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_errorboundary__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, this.settingsPanel instanceof modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component || typeof this.settingsPanel === \"function\" ? this.settingsPanel : null)));\n }\n\n buildLink(which) {\n const url = this.props.addon[which];\n if (!url) return null;\n const link = 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 if (which == \"invite\") {\n link.props.onClick = function (event) {\n event.preventDefault();\n event.stopPropagation();\n let code = url;\n const tester = /\\.gg\\/(.*)$/;\n if (tester.test(code)) code = code.match(tester)[1];\n modules__WEBPACK_IMPORTED_MODULE_0__[\"DiscordModules\"].LayerStack.popLayer();\n modules__WEBPACK_IMPORTED_MODULE_0__[\"DiscordModules\"].InviteActions.acceptInviteAndTransitionToInviteChannel(code);\n };\n }\n\n return link;\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/NjM3MyJdLCJuYW1lcyI6WyJUb29sdGlwIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeURpc3BsYXlOYW1lIiwiQWRkb25DYXJkIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3RhdGUiLCJzZXR0aW5nc09wZW4iLCJzZXR0aW5nc1BhbmVsIiwicGFuZWxSZWYiLCJjcmVhdGVSZWYiLCJvbkNoYW5nZSIsImJpbmQiLCJyZWxvYWQiLCJzaG93U2V0dGluZ3MiLCJjbG9zZVNldHRpbmdzIiwiYWRkb24iLCJpZCIsImZvcmNlVXBkYXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiTm9kZSIsImN1cnJlbnQiLCJhcHBlbmRDaGlsZCIsInNldEltbWVkaWF0ZSIsImlzSGlkZGVuIiwiY29udGFpbmVyIiwiZWxlbWVudCIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiY2xpZW50SGVpZ2h0IiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJ0aGlzTm9kZSIsImNsb3Nlc3QiLCJ0aGlzTm9kZU9mZnNldCIsIkRPTSIsIm9mZnNldCIsImNvbnRhaW5lck9mZnNldCIsIm9yaWdpbmFsIiwiZW5kUG9pbnQiLCJ0b3AiLCJhbmltYXRlIiwiZHVyYXRpb24iLCJ1cGRhdGUiLCJwcm9ncmVzcyIsImdldFN0cmluZyIsInZhbHVlIiwidG9TdHJpbmciLCJlbmFibGVkIiwiaGFzU2V0dGluZ3MiLCJzZXRTdGF0ZSIsImlubmVySFRNTCIsImJ1aWxkVGl0bGUiLCJuYW1lIiwidmVyc2lvbiIsImF1dGhvciIsInRpdGxlIiwiU3RyaW5ncyIsIkFkZG9ucyIsInNwbGl0IiwibmFtZUluZGV4IiwiZmluZEluZGV4IiwicyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsImZsYXQiLCJzZXR0aW5nc0NvbXBvbmVudCIsImdldFNldHRpbmdzUGFuZWwiLCJlcnIiLCJMb2dnZXIiLCJzdGFja3RyYWNlIiwicmVmIiwid2FybiIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiYnVpbGRMaW5rIiwid2hpY2giLCJ1cmwiLCJsaW5rIiwib25DbGljayIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJjb2RlIiwidGVzdGVyIiwidGVzdCIsIm1hdGNoIiwiRGlzY29yZE1vZHVsZXMiLCJMYXllclN0YWNrIiwicG9wTGF5ZXIiLCJJbnZpdGVBY3Rpb25zIiwiYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbCIsImZvb3RlciIsImxpbmtzIiwic29tZSIsImwiLCJsaW5rQ29tcG9uZW50cyIsIm1hcCIsImZpbHRlciIsImMiLCJjb21wIiwiaSIsImxlbmd0aCIsImFkZG9uU2V0dGluZ3MiLCJtYWtlQnV0dG9uIiwiY2hpbGRyZW4iLCJhY3Rpb24iLCJyZW5kZXIiLCJkZXNjcmlwdGlvbiIsImVkaXRBZGRvbiIsImRlbGV0ZUFkZG9uIiwic2hvd1JlbG9hZEljb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxPQUFPLEdBQUdDLHNEQUFjLENBQUNDLGdCQUFmLENBQWdDLFNBQWhDLENBQWhCO0FBRWUsTUFBTUMsU0FBTixTQUF3QkMsNkNBQUssQ0FBQ0MsU0FBOUIsQ0FBd0M7QUFFbkRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUtDLEtBQUwsR0FBYTtBQUNUQyxrQkFBWSxFQUFFO0FBREwsS0FBYjtBQUlBLFNBQUtDLGFBQUwsR0FBcUIsRUFBckI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCUCw2Q0FBSyxDQUFDUSxTQUFOLEVBQWhCO0FBRUEsU0FBS0MsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNDLElBQWQsQ0FBbUIsSUFBbkIs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RCxLQUFLM0csS0FBTCxDQUFXMkcsU0FBbkUsQ0FEN0IsRUFFSyxLQUFLM0csS0FBTCxDQUFXNEcsV0FBWCxJQUEwQixLQUFLTixVQUFMLENBQWdCaEQsK0NBQU8sQ0FBQ0MsTUFBUixDQUFlcUQsV0FBL0IsRUFBNEMsNERBQUMscURBQUQsT0FBNUMsRUFBNEQsS0FBSzVHLEtBQUwsQ0FBVzRHLFdBQXZFLENBRi9CLEVBR0ssS0FBSzVHLEtBQUwsQ0FBVzZHLGNBQVgsSUFBNkIsS0FBS1AsVUFBTCxDQUFnQmhELCtDQUFPLENBQUNDLE1BQVIsQ0FBZS9DLE1BQS9CLEVBQXVDLDREQUFDLHFEQUFEO0FBQVksZUFBUyxFQUFDO0FBQXRCLE1BQXZDLEVBQTRGLEtBQUtBLE1BQWpHLENBSGxDLEVBSUksNERBQUMsMERBQUQ7QUFBUSxhQUFPLEVBQUUsS0FBS1IsS0FBTCxDQUFXNkMsT0FBNUI7QUFBcUMsY0FBUSxFQUFFLEtBQUt2QztBQUFwRCxNQUpKLENBRlIsQ0FETCxFQVVLO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FBd0Q7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUEwQ29HLFdBQTFDLENBQXhELENBVkwsRUFXTSxLQUFLaEIsTUFYWCxDQUFQO0FBYUg7O0FBN0trRCIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy9hZGRvbmNhcmQuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgTG9nZ2VyLCBTdHJpbmdzLCBXZWJwYWNrTW9kdWxlcywgRE9NLCBEaXNjb3JkTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IENsb3NlQnV0dG9uIGZyb20gXCIuLi9pY29ucy9jbG9zZVwiO1xyXG5pbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi4vaWNvbnMvcmVsb2FkXCI7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tIFwiLi4vaWNvbnMvZWRpdFwiO1xyXG5pbXBvcnQgRGVsZXRlSWNvbiBmcm9tIFwiLi4vaWNvbnMvZGVsZXRlXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSAgXCIuLi9lcnJvcmJvdW5kYXJ5XCI7XHJcblxyXG5jb25zdCBUb29sdGlwID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZGRvbkNhcmQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNldHRpbmdzT3BlbjogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzUGFuZWwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlbG9hZCA9IHRoaXMucmVsb2FkLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0dGluZ3MgPSB0aGlzLnNob3dTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VTZXR0aW5ncyA9IHRoaXMuY2xvc2VTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMucmVsb2FkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcm9wcy5hZGRvbiA9IHRoaXMucHJvcHMucmVsb2FkKHRoaXMucHJvcHMuYWRkb24uaWQpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzT3BlbikgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzUGFuZWwgaW5zdGFuY2VvZiBOb2RlKSB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuXHJcbiAgICAgICAgLy8gaWYgKCFTZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtM1wiXSkgcmV0dXJuO1xyXG4gICAgICAgIC8vIGNvbnN0IGlzSGlkZGVuID0gKGNvbnRhaW5lciwgZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIC8vICAgICBjb25zdCBjVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAvLyAgICAgY29uc3QgY0JvdHRvbSA9IGNUb3AgKyBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgIC8vICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgLy8gICAgIGNvbnN0IGVCb3R0b20gPSBlVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgLy8gICAgIHJldHVybiAgKGVUb3AgPCBjVG9wIHx8IGVCb3R0b20gPiBjQm90dG9tKTtcclxuICAgICAgICAvLyB9O1xyXG5cclxuICAgICAgICAvLyBjb25zdCBwYW5lbCA9ICQodGhpcy5wYW5lbFJlZi5jdXJyZW50KTtcclxuICAgICAgICAvLyBjb25zdCBjb250YWluZXIgPSBwYW5lbC5wYXJlbnRzKFwiLnNjcm9sbGVyLTJGS0ZQR1wiKTtcclxuICAgICAgICAvLyBpZiAoIWlzSGlkZGVuKGNvbnRhaW5lclswXSwgcGFuZWxbMF0pKSByZXR1cm47XHJcbiAgICAgICAgLy8gY29udGFpbmVyLmFuaW1hdGUoe1xyXG4gICAgICAgIC8vICAgICBzY3JvbGxUb3A6IHBhbmVsLm9mZnNldCgpLnRvcCAtIGNvbnRhaW5lci5vZmZzZXQoKS50b3AgKyBjb250YWluZXIuc2Nyb2xsVG9wKCkgLSAzMFxyXG4gICAgICAgIC8vIH0sIDMwMCk7XHJcblxyXG4gICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzSGlkZGVuID0gKGNvbnRhaW5lciwgZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY1RvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjQm90dG9tID0gY1RvcCArIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICAoZVRvcCA8IGNUb3AgfHwgZUJvdHRvbSA+IGNCb3R0b20pO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGUgPSB0aGlzLnBhbmVsUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXNOb2RlLmNsb3Nlc3QoXCIuc2Nyb2xsZXJcIik7XHJcbiAgICAgICAgICAgIGlmICghaXNIaWRkZW4oY29udGFpbmVyLCB0aGlzTm9kZSkpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGVPZmZzZXQgPSBET00ub2Zmc2V0KHRoaXNOb2RlKTtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyT2Zmc2V0ID0gRE9NLm9mZnNldChjb250YWluZXIpO1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpc05vZGVPZmZzZXQudG9wIC0gY29udGFpbmVyT2Zmc2V0LnRvcCArIGNvbnRhaW5lci5zY3JvbGxUb3AgLSAzMDtcclxuICAgICAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMCxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kUG9pbnQgPiBvcmlnaW5hbCkgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsICsgKHByb2dyZXNzICogKGVuZFBvaW50IC0gb3JpZ2luYWwpKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBvcmlnaW5hbCAtIChwcm9ncmVzcyAqIChvcmlnaW5hbCAtIGVuZFBvaW50KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge3JldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTt9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSAmJiB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuYWRkb24uaWQpO1xyXG4gICAgICAgIHRoaXMucHJvcHMuZW5hYmxlZCA9ICF0aGlzLnByb3BzLmVuYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1NldHRpbmdzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5oYXNTZXR0aW5ncykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzT3BlbjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgdGhpcy5wYW5lbFJlZi5jdXJyZW50LmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3NPcGVuOiBmYWxzZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkVGl0bGUobmFtZSwgdmVyc2lvbiwgYXV0aG9yKSB7XHJcbiAgICAgICAgY29uc3QgdGl0bGUgPSBTdHJpbmdzLkFkZG9ucy50aXRsZS5zcGxpdCgvKHt7W0EtWmEtel0rfX0pLyk7XHJcbiAgICAgICAgY29uc3QgbmFtZUluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7bmFtZX19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW25hbWVJbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkLW5hbWVcIn0sIG5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb25JbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e3ZlcnNpb259fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVt2ZXJzaW9uSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC12ZXJzaW9uXCJ9LCB2ZXJzaW9uKTtcclxuICAgICAgICBjb25zdCBhdXRob3JJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e2F1dGhvcn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmQtYXV0aG9yXCJ9LCBhdXRob3IpO1xyXG4gICAgICAgIHJldHVybiB0aXRsZS5mbGF0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNldHRpbmdzQ29tcG9uZW50KCkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRTdHJpbmcoYWRkb24ubmFtZSk7XHJcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5nZXRTZXR0aW5nc1BhbmVsKCk7IH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7IExvZ2dlci5zdGFja3RyYWNlKFwiQWRkb24gU2V0dGluZ3NcIiwgXCJVbmFibGUgdG8gZ2V0IHNldHRpbmdzIHBhbmVsIGZvciBcIiArIG5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9wcyA9IHtpZDogYCR7bmFtZX0tc2V0dGluZ3NgLCBjbGFzc05hbWU6IFwiYWRkb24tc2V0dGluZ3NcIiwgcmVmOiB0aGlzLnBhbmVsUmVmfTtcclxuICAgICAgICBpZiAodHlwZW9mKHNldHRpbmdzUGFuZWwpID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgTG9nZ2VyLndhcm4oXCJBZGRvbiBTZXR0aW5nc1wiLCBcIlVzaW5nIGEgRE9NU3RyaW5nIGlzIG9mZmljaWFsbHkgZGVwcmVjYXRlZC5cIik7XHJcbiAgICAgICAgICAgIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0gdGhpcy5zZXR0aW5nc1BhbmVsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1vcGVuIGJkLXN3aXRjaC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1jbG9zZVwiIG9uQ2xpY2s9e3RoaXMuY2xvc2VTZXR0aW5nc30+PENsb3NlQnV0dG9uIC8+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB7Li4ucHJvcHN9PjxFcnJvckJvdW5kYXJ5Pnt0aGlzLnNldHRpbmdzUGFuZWwgaW5zdGFuY2VvZiBSZWFjdC5Db21wb25lbnQgfHwgdHlwZW9mKHRoaXMuc2V0dGluZ3NQYW5lbCkgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMuc2V0dGluZ3NQYW5lbCA6IG51bGx9PC9FcnJvckJvdW5kYXJ5PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkTGluayh3aGljaCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMucHJvcHMuYWRkb25bd2hpY2hdO1xyXG4gICAgICAgIGlmICghdXJsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBsaW5rID0gPGEgY2xhc3NOYW1lPVwiYmQtbGluayBiZC1saW5rLXdlYnNpdGVcIiBocmVmPXt1cmx9IHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj57U3RyaW5ncy5BZGRvbnNbd2hpY2hdfTwvYT47XHJcbiAgICAgICAgaWYgKHdoaWNoID09IFwiaW52aXRlXCIpIHtcclxuICAgICAgICAgICAgbGluay5wcm9wcy5vbkNsaWNrID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGxldCBjb2RlID0gdXJsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdGVyID0gL1xcLmdnXFwvKC4qKSQvO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlc3Rlci50ZXN0KGNvZGUpKSBjb2RlID0gY29kZS5tYXRjaCh0ZXN0ZXIpWzFdO1xyXG4gICAgICAgICAgICAgICAgRGlzY29yZE1vZHVsZXMuTGF5ZXJTdGFjay5wb3BMYXllcigpO1xyXG4gICAgICAgICAgICAgICAgRGlzY29yZE1vZHVsZXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKGNvZGUpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGluaztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZm9vdGVyKCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gW1wid2Vic2l0ZVwiLCBcInNvdXJjZVwiLCBcImludml0ZVwiLCBcImRvbmF0ZVwiLCBcInBhdHJlb25cIl07XHJcbiAgICAgICAgaWYgKCFsaW5rcy5zb21lKGwgPT4gdGhpcy5wcm9wcy5hZGRvbltsXSkgJiYgIXRoaXMucHJvcHMuaGFzU2V0dGluZ3MpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IGxpbmtDb21wb25lbnRzID0gbGlua3MubWFwKHRoaXMuYnVpbGRMaW5rLmJpbmQodGhpcykpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJkLWxpbmtzXCI+e2xpbmtDb21wb25lbnRzLm1hcCgoY29tcCwgaSkgPT4gaSA8IGxpbmtDb21wb25lbnRzLmxlbmd0aCAtIDEgPyBbY29tcCwgXCIgfCBcIl0gOiBjb21wKS5mbGF0KCl9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmhhc1NldHRpbmdzICYmIDxidXR0b24gb25DbGljaz17dGhpcy5zaG93U2V0dGluZ3N9IGNsYXNzTmFtZT1cImJkLWJ1dHRvbiBiZC1idXR0b24tYWRkb24tc2V0dGluZ3NcIiBkaXNhYmxlZD17IXRoaXMucHJvcHMuZW5hYmxlZH0+e1N0cmluZ3MuQWRkb25zLmFkZG9uU2V0dGluZ3N9PC9idXR0b24+fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG5cclxuICAgIG1ha2VCdXR0b24odGl0bGUsIGNoaWxkcmVuLCBhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gIDxUb29sdGlwIGNvbG9yPVwiYmxhY2tcIiBwb3NpdGlvbj1cInRvcFwiIHRleHQ9e3RpdGxlfT5cclxuICAgICAgICAgICAgICAgICAgICB7KHByb3BzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IHsuLi5wcm9wc30gY2xhc3NOYW1lPVwiYmQtYWRkb24tYnV0dG9uXCIgb25DbGljaz17YWN0aW9ufT57Y2hpbGRyZW59PC9kaXY+O1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5nc09wZW4pIHJldHVybiB0aGlzLnNldHRpbmdzQ29tcG9uZW50O1xyXG5cclxuICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMucHJvcHMuYWRkb247XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0U3RyaW5nKGFkZG9uLm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuZ2V0U3RyaW5nKGFkZG9uLmF1dGhvcik7XHJcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldFN0cmluZyhhZGRvbi5kZXNjcmlwdGlvbik7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnZlcnNpb24pO1xyXG5cclxuICAgICAgICByZXR1cm4gPGRpdiBpZD17YCR7YWRkb24uaWR9LWNhcmRgfSBjbGFzc05hbWU9XCJiZC1hZGRvbi1jYXJkIHNldHRpbmdzLWNsb3NlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJiZC10aXRsZVwiPnt0aGlzLmJ1aWxkVGl0bGUobmFtZSwgdmVyc2lvbiwgYXV0aG9yKX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWNvbnRyb2xzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuZWRpdEFkZG9uICYmIHRoaXMubWFrZUJ1dHRvbihTdHJpbmdzLkFkZG9ucy5lZGl0QWRkb24sIDxFZGl0SWNvbiAvPiwgdGhpcy5wcm9wcy5lZGl0QWRkb24pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmRlbGV0ZUFkZG9uICYmIHRoaXMubWFrZUJ1dHRvbihTdHJpbmdzLkFkZG9ucy5kZWxldGVBZGRvbiwgPERlbGV0ZUljb24gLz4sIHRoaXMucHJvcHMuZGVsZXRlQWRkb24pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnNob3dSZWxvYWRJY29uICYmIHRoaXMubWFrZUJ1dHRvbihTdHJpbmdzLkFkZG9ucy5yZWxvYWQsIDxSZWxvYWRJY29uIGNsYXNzTmFtZT1cImJkLXJlbG9hZCBiZC1yZWxvYWQtY2FyZFwiIC8+LCB0aGlzLnJlbG9hZCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaCBjaGVja2VkPXt0aGlzLnByb3BzLmVuYWJsZWR9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1kZXNjcmlwdGlvbi13cmFwIHNjcm9sbGVyLXdyYXAgZmFkZVwiPjxkaXYgY2xhc3NOYW1lPVwiYmQtZGVzY3JpcHRpb24gc2Nyb2xsZXJcIj57ZGVzY3JpcHRpb259PC9kaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMuZm9vdGVyfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/settings/addoncard.jsx\n"); /***/ }), @@ -935,19 +1007,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 AddonList; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _title__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n/* harmony import */ var _addoncard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./addoncard */ \"./src/ui/settings/addoncard.jsx\");\n/* harmony import */ var _components_dropdown__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/dropdown */ \"./src/ui/settings/components/dropdown.jsx\");\n/* harmony import */ var _components_search__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/search */ \"./src/ui/settings/components/search.jsx\");\n\n\n\n\n\n\n\nclass AddonList extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n sort: \"name\",\n ascending: true,\n query: \"\"\n };\n this.sort = this.sort.bind(this);\n this.reverse = this.reverse.bind(this);\n this.search = this.search.bind(this);\n this.update = this.update.bind(this);\n }\n\n componentDidMount() {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(`${this.props.prefix}-loaded`, this.update);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(`${this.props.prefix}-unloaded`, this.update);\n }\n\n componentWillUnmount() {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].off(`${this.props.prefix}-loaded`, this.update);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].off(`${this.props.prefix}-unloaded`, this.update);\n }\n\n update() {\n this.forceUpdate();\n }\n\n reload() {\n if (this.props.refreshList) this.props.refreshList();\n this.forceUpdate();\n }\n\n reverse(value) {\n this.setState({\n ascending: value\n });\n }\n\n sort(value) {\n this.setState({\n sort: value\n });\n }\n\n search(event) {\n this.setState({\n query: event.target.value.toLocaleLowerCase()\n });\n }\n\n get sortOptions() {\n return [{\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.name,\n value: \"name\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.author,\n value: \"author\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.version,\n value: \"version\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.added,\n value: \"added\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.modified,\n value: \"modified\"\n }];\n }\n\n get directions() {\n return [{\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.ascending,\n value: true\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.descending,\n value: false\n }];\n }\n\n render() {\n const {\n title,\n folder,\n addonList,\n addonState,\n onChange,\n reload\n } = this.props;\n const showReloadIcon = !modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"settings\", \"addons\", \"autoReload\");\n const button = folder ? {\n title: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.openFolder.format({\n type: title\n }),\n onClick: () => {\n __webpack_require__(/*! electron */ \"electron\").shell.openItem(folder);\n }\n } : null;\n const sortedAddons = addonList.sort((a, b) => {\n const first = a[this.state.sort];\n const second = b[this.state.sort];\n if (typeof first == \"string\") return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase());\n if (first > second) return 1;\n if (second > first) return -1;\n return 0;\n });\n if (!this.state.ascending) sortedAddons.reverse();\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: \"title\",\n text: title,\n button: button,\n otherChildren: showReloadIcon && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"bd-reload\",\n onClick: this.reload.bind(this)\n })\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-controls bd-addon-controls\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_search__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n onChange: this.search,\n placeholder: `${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.search.format({\n type: this.props.title\n })}...`\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-dropdowns\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-select-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"bd-label\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.sortBy, \":\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n options: this.sortOptions,\n onChange: this.sort,\n style: \"transparent\"\n })), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-select-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"bd-label\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.order, \":\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n options: this.directions,\n onChange: this.reverse,\n style: \"transparent\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n key: \"addonList\",\n className: \"bd-addon-list\"\n }, sortedAddons.map(addon => {\n if (this.state.query) {\n let matches = addon.name.toLocaleLowerCase().includes(this.state.query);\n matches = matches || addon.author.toLocaleLowerCase().includes(this.state.query);\n matches = matches || addon.description.toLocaleLowerCase().includes(this.state.query);\n if (!matches) return null;\n }\n\n const hasSettings = addon.type && typeof addon.plugin.getSettingsPanel === \"function\";\n const getSettings = hasSettings && addon.plugin.getSettingsPanel.bind(addon.plugin);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_addoncard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n editAddon: this.editAddon.bind(this, addon.id),\n deleteAddon: this.deleteAddon.bind(this, addon.id),\n showReloadIcon: showReloadIcon,\n key: addon.id,\n enabled: addonState[addon.id],\n addon: addon,\n onChange: onChange,\n reload: reload,\n hasSettings: hasSettings,\n getSettingsPanel: getSettings\n });\n }))];\n }\n\n editAddon(id) {\n if (this.props.editAddon) this.props.editAddon(id);\n }\n\n async deleteAddon(id) {\n const addon = this.props.addonList.find(a => a.id == id);\n const shouldDelete = await this.confirmDelete(addon);\n if (!shouldDelete) return;\n if (this.props.deleteAddon) this.props.deleteAddon(addon);\n }\n\n confirmDelete(addon) {\n return new Promise(resolve => {\n _modals__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showConfirmationModal(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.confirmAction, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.confirmDelete.format({\n name: addon.name\n }), {\n danger: true,\n confirmText: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.deleteAddon,\n onConfirm: () => {\n resolve(true);\n },\n onCancel: () => {\n resolve(false);\n }\n });\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2FkZG9ubGlzdC5qc3g/NjRkMiJdLCJuYW1lcyI6WyJBZGRvbkxpc3QiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsInNvcnQiLCJhc2NlbmRpbmciLCJxdWVyeSIsImJpbmQiLCJyZXZlcnNlIiwic2VhcmNoIiwidXBkYXRlIiwiY29tcG9uZW50RGlkTW91bnQiLCJFdmVudHMiLCJvbiIsInByZWZpeCIsImNvbXBvbmVudFdpbGxVbm1vdW50Iiwib2ZmIiwiZm9yY2VVcGRhdGUiLCJyZWxvYWQiLCJyZWZyZXNoTGlzdCIsInZhbHVlIiwic2V0U3RhdGUiLCJldmVudCIsInRhcmdldCIsInRvTG9jYWxlTG93ZXJDYXNlIiwic29ydE9wdGlvbnMiLCJsYWJlbCIsIlN0cmluZ3MiLCJBZGRvbnMiLCJuYW1lIiwiYXV0aG9yIiwidmVyc2lvbiIsImFkZGVkIiwibW9kaWZpZWQiLCJkaXJlY3Rpb25zIiwiU29ydGluZyIsImRlc2NlbmRpbmciLCJyZW5kZXIiLCJ0aXRsZSIsImZvbGRlciIsImFkZG9uTGlzdCIsImFkZG9uU3RhdGUiLCJvbkNoYW5nZSIsInNob3dSZWxvYWRJY29uIiwiU2V0dGluZ3MiLCJnZXQiLCJidXR0b24iLCJvcGVuRm9sZGVyIiwiZm9ybWF0IiwidHlwZSIsIm9uQ2xpY2siLCJyZXF1aXJlIiwic2hlbGwiLCJvcGVuSXRlbSIsInNvcnRlZEFkZG9ucyIsImEiLCJiIiwiZmlyc3QiLCJzZWNvbmQiLCJsb2NhbGVDb21wYXJlIiwic29ydEJ5Iiwib3JkZXIiLCJtYXAiLCJhZGRvbiIsIm1hdGNoZXMiLCJpbmNsdWRlcyIsImRlc2NyaXB0aW9uIiwiaGFzU2V0dGluZ3MiLCJwbHVnaW4iLCJnZXRTZXR0aW5nc1BhbmVsIiwiZ2V0U2V0dGluZ3MiLCJlZGl0QWRkb24iLCJpZCIsImRlbGV0ZUFkZG9uIiwiZmluZCIsInNob3VsZERlbGV0ZSIsImNvbmZpcm1EZWxldGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsIk1vZGFscyIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsImNvbmZpcm1BY3Rpb24iLCJkYW5nZXIiLCJjb25maXJtVGV4dCIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLE1BQU1BLFNBQU4sU0FBd0JDLDZDQUFLLENBQUNDLFNBQTlCLENBQXdDO0FBRW5EQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxLQUFMLEdBQWE7QUFBQ0MsVUFBSSxFQUFFLE1BQVA7QUFBZUMsZUFBUyxFQUFFLElBQTFCO0FBQWdDQyxXQUFLLEVBQUU7QUFBdkMsS0FBYjtBQUNBLFNBQUtGLElBQUwsR0FBWSxLQUFLQSxJQUFMLENBQVVHLElBQVYsQ0FBZSxJQUFmLENBQVo7QUFDQSxTQUFLQyxPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhRCxJQUFiLENBQWtCLElBQWxCLENBQWY7QUFDQSxTQUFLRSxNQUFMLEdBQWMsS0FBS0EsTUFBTCxDQUFZRixJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDQSxTQUFLRyxNQUFMLEdBQWMsS0FBS0EsTUFBTCxDQUFZSCxJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDSDs7QUFFREksbUJBQWlCLEdBQUc7QUFDaEJDLGtEQUFNLENBQUNDLEVBQVAsQ0FBVyxHQUFFLEtBQUtYLEtBQUwsQ0FBV1ksTUFBTyxTQUEvQixFQUF5QyxLQUFLSixNQUE5QztBQUNBRSxrREFBTSxDQUFDQyxFQUFQLENBQVcsR0FBRSxLQUFLWCxLQUFMLENBQVdZLE1BQU8sV0FBL0IsRUFBMkMsS0FBS0osTUFBaEQ7QUFDSDs7QUFFREssc0JBQW9CLEdBQUc7QUFDbkJILGtEQUFNLENBQUNJLEdBQVAsQ0FBWSxHQUFFLEtBQUtkLEtBQUwsQ0FBV1ksTUFBTyxTQUFoQyxFQUEwQyxLQUFLSixNQUEvQztBQUNBRSxrREFBTSxDQUFDSSxHQUFQLENBQVksR0FBRSxLQUFLZCxLQUFMLENBQVdZLE1BQU8sV0FBaEMsRUFBNEMsS0FBS0osTUFBakQ7QUFDSDs7QUFFREEsUUFBTSxHQUFHO0FBQ0wsU0FBS08sV0FBTDtBQUNIOztBQUVEQyxRQUFNLEdBQUc7QUFDTCxRQUFJLEtBQUtoQixLQUFMLENBQVdpQixXQUFmLEVBQTRCLEtBQUtqQixLQUFMLENBQVdpQixXQUFYO0FBQzVCLFNBQUtGLFdBQUw7QUFDSDs7QUFFRFQsU0FBTyxDQUFDWSxLQUFELEVBQVE7QUFDWCxTQUFLQyxRQUFMLENBQWM7QUFBQ2hCLGVBQVMsRUFBRWU7QUFBWixLQUFkO0FBQ0g7O0FBRURoQixNQUFJLENBQUNnQixLQUFELEVBQVE7QUFDUixTQUFLQyxRQUFMLENBQWM7QUFBQ2pCLFVBQUksRUFBRWdCO0FBQVAsS0FBZDtBQUNIOztBQUVEWCxRQUFNLENBQUNhLEtBQUQsRUFBUTtBQUNWLFNBQUtELFFBQUwsQ0FBYztBQUFDZixXQUFLLEVBQUVnQixLQUFLLENBQUNDLE1BQU4sQ0FBYUgsS0FBYixDQUFtQkksaUJBQW5CO0FBQVIsS0FBZDtBQUNIOztBQUVELE1BQUlDLFdBQUosR0FBa0I7QUFDZCxXQUFPLENBQ0g7QUFBQ0MsV0FBSyxFQUFFQywrQ0FBTyxDQUFDQyxNQUFSLENBQWVDLElBQXZCO0FBQTZCVCxXQUFLLEVBQUU7QUFBcEMsS0FERyxFQUVIO0FBQUNNLFdBQUssRUFBRUMsK0NBQU8sQ0FBQ0MsTUFBUixDQUFlRSxNQUF2QjtBQUErQlYsV0FBSyxFQUFFO0FBQXRDLEtBRkcsRUFHSDtBQUFDTSxXQUFLLEVBQUVDLCtDQUFPLENBQUNDLE1BQVIsQ0FBZUcsT0FBdkI7QUFBZ0NYLFdBQUssRUFBRTtBQUF2QyxLQUhHLEVBSUg7QUFBQ00sV0FBSyxFQUFFQywrQ0FBTyxDQUFDQyxNQUFSLENBQWVJLEtBQXZCO0FBQThCWixXQUFLLEVBQUU7QUFBckMsS0FKRyxFQUtIO0FBQUNNLFdBQUssRUFBRUMsK0NBQU8sQ0FBQ0MsTUFBUixDQUFlSyxRQUF2QjtBQUFpQ2IsV0FBSyxFQUFFO0FBQXhDLEtBTEcsQ0FBUDtBQU9IOztBQUVELE1BQUljLFVBQUosR0FBaUI7QUFDYixXQUFPLENBQ0g7QUFBQ1IsV0FBSyxFQUFFQywrQ0FBTyxDQUFDUSxPQUFSLENBQWdCOUIsU0FBeEI7QUFBbUNlLFdBQUssRUFBRTtBQUExQyxLQURHLEVBRUg7QUFBQ00sV0FBSyxFQUFFQywrQ0FBTyxDQUFDUSxPQUFSLENBQWdCQyxVQUF4QjtBQUFvQ2hCLFdBQUssRUFBRTtBQUEzQyxLQUZHLENBQVA7QUFJSDs7QUFFRGlCLFFBQU0sR0FBRztBQUNMLFVBQU07QUFBQ0MsV0FBRDtBQUFRQyxZQUFSO0FBQWdCQyxlQUFoQjtBQUEyQkMsZ0JBQTNCO0FBQXVDQyxjQUF2QztBQUFpRHhCO0FBQWpELFFBQTJELEtBQUtoQixLQUF0RTtBQUNBLFVBQU15QyxjQUFjLEdBQUcsQ0FBQ0MsZ0RBQVEsQ0FBQ0MsR0FBVCxDQUFhLFVBQWIsRUFBeUIsUUFBekIsRUFBbUMsWUFBbkMsQ0FBeEI7QUFDQSxVQUFNQyxNQUFNLEdBQUdQLE1BQU0sR0FBRztBQUFDRCxXQUFLLEVBQUVYLCtDQUFPLENBQUNDLE1BQVIsQ0FBZW1CLFVBQWYsQ0FBMEJDLE1BQTFCLENBQWlDO0FBQUNDLFlBQUksRUFBRVg7QUFBUCxPQUFqQyxDQUFSO0FBQXlEWSxhQUFPLEVBQUUsTUFBTTtBQUFDQywyQkFBTyxDQUFDLDBCQUFELENBQVAsQ0FBb0JDLEtBQXBCLENBQTBCQyxRQUExQixDQUFtQ2QsTUFBbkM7QUFBNEM7QUFBckgsS0FBSCxHQUE0SCxJQUFqSjtBQUNBLFVBQU1lLFlBQVksR0FBR2QsU0FBUyxDQUFDcEMsSUFBVixDQUFlLENBQUNtRCxDQUFELEVBQUlDLENBQUosS0FBVTtBQUMxQyxZQUFNQyxLQUFLLEdBQUdGLENBQUMsQ0FBQyxLQUFLcEQsS0FBTCxDQUFXQyxJQUFaLENBQWY7QUFDQSxZQUFNc0QsTUFBTSxHQUFHRixDQUFDLENBQUMsS0FBS3JELEtBQUwsQ0FBV0MsSUFBWixDQUFoQjtBQUNBLFVBQUksT0FBT3FELEtBQVAsSUFBaUIsUUFBckIsRUFBK0IsT0FBT0EsS0FBSyxDQUFDakMsaUJBQU4sR0FBMEJtQyxhQUExQixDQUF3Q0QsTUFBTSxDQUFDbEMsaUJBQVAsRUFBeEMsQ0FBUDtBQUMvQixVQUFJaUMsS0FBSyxHQUFHQyxNQUFaLEVBQW9CLE9BQU8sQ0FBUDtBQUNwQixVQUFJQSxNQUFNLEdBQUdELEtBQWIsRUFBb0IsT0FBTyxDQUFDLENBQVI7QUFDcEIsYUFBTyxDQUFQO0FBQ0gsS0FQb0IsQ0FBckI7QUFRQSxRQUFJLENBQUMsS0FBS3RELEtBQUwsQ0FBV0UsU0FBaEIsRUFBMkJpRCxZQUFZLENBQUM5QyxPQUFiO0FBQzNCLFdBQU8sQ0FDSCw0REFBQyw4Q0FBRDtBQUFlLFNBQUcsRUFBQyxPQUFuQjtBQUEyQixVQUFJLEVBQUU4QixLQUFqQztBQUF3QyxZQUFNLEVBQUVRLE1BQWhEO0FBQXdELG1CQUFhLEVBQUVILGNBQWMsSUFBSSw0REFBQyxxREFBRDtBQUFZLGlCQUFTLEVBQUMsV0FBdEI7QUFBa0MsZUFBTyxFQUFFLEtBQUt6QixNQUFMLENBQVlYLElBQVosQ0FBaUIsSUFBakI7QUFBM0M7QUFBekYsTUFERyxFQUVIO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FDSSw0REFBQywwREFBRDtBQUFRLGNBQVEsRUFBRSxLQUFLRSxNQUF2QjtBQUErQixpQkFBVyxFQUFHLEdBQUVrQiwrQ0FBTyxDQUFDQyxNQUFSLENBQWVuQixNQUFmLENBQXNCdUMsTUFBdEIsQ0FBNkI7QUFBQ0MsWUFBSSxFQUFFLEtBQUsvQyxLQUFMLENBQVdvQztBQUFsQixPQUE3QixDQUF1RDtBQUF0RyxNQURKLEVBRUk7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUNJO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FDSTtBQUFPLGVBQVMsRUFBQztBQUFqQixPQUE2QlgsK0NBQU8sQ0FBQ1EsT0FBUixDQUFnQnlCLE1BQTdDLE1BREosRUFFSSw0REFBQyw0REFBRDtBQUFVLGFBQU8sRUFBRSxLQUFLbkMsV0FBeEI7QUFBcUMsY0FBUSxFQUFFLEtBQUtyQixJQUFwRDtBQUEwRCxXQUFLLEVBQUM7QUFBaEUsTUFGSixDQURKLEVBS0k7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUNJO0FBQU8sZUFBUyxFQUFDO0FBQWpCLE9BQTZCdUIsK0NBQU8sQ0FBQ1EsT0FBUixDQUFnQjBCLEtBQTdDLE1BREosRUFFSSw0REFBQyw0REFBRDtBQUFVLGFBQU8sRUFBRSxLQUFLM0IsVUFBeEI7QUFBb0MsY0FBUSxFQUFFLEtBQUsxQixPQUFuRDtBQUE0RCxXQUFLLEVBQUM7QUFBbEUsTUFGSixDQUxKLENBRkosQ0FGRyxFQWdCSDtBQUFLLFNBQUcsRUFBQyxXQUFUO0FBQXFCLGVBQVMsRUFBRTtBQUFoQyxPQUNDOEMsWUFBWSxDQUFDUSxHQUFiLENBQWlCQyxLQUFLLElBQUk7QUFDdkIsVUFBSSxLQUFLNUQsS0FBTCxDQUFXRyxLQUFmLEVBQXNCO0FBQ2xCLFlBQUkwRCxPQUFPLEdBQUdELEtBQUssQ0FBQ2xDLElBQU4sQ0FBV0wsaUJBQVgsR0FBK0J5QyxRQUEvQixDQUF3QyxLQUFLOUQsS0FBTCxDQUFXRyxLQUFuRCxDQUFkO0FBQ0EwRCxlQUFPLEdBQUdBLE9BQU8sSUFBSUQsS0FBSyxDQUFDakMsTUFBTixDQUFhTixpQkFBYixHQUFpQ3lDLFFBQWpDLENBQTBDLEtBQUs5RCxLQUFMLENBQVdHLEtBQXJELENBQXJCO0FBQ0EwRCxlQUFPLEdBQUdBLE9BQU8sSUFBSUQsS0FBSyxDQUFDRyxXQUFOLENBQWtCMUMsaUJBQWxCLEdBQXNDeUMsUUFBdEMsQ0FBK0MsS0FBSzlELEtBQUwsQ0FBV0csS0FBMUQsQ0FBckI7QUFDQSxZQUFJLENBQUMwRCxPQUFMLEVBQWMsT0FBTyxJQUFQO0FBQ2pCOztBQUNELFlBQU1HLFdBQVcsR0FBR0osS0FBSyxDQUFDZCxJQUFOLElBQWMsT0FBT2MsS0FBSyxDQUFDSyxNQUFOLENBQWFDLGdCQUFwQixLQUEwQyxVQUE1RTtBQUNBLFlBQU1DLFdBQVcsR0FBR0gsV0FBVyxJQUFJSixLQUFLLENBQUNLLE1BQU4sQ0FBYUMsZ0JBQWIsQ0FBOEI5RCxJQUE5QixDQUFtQ3dELEtBQUssQ0FBQ0ssTUFBekMsQ0FBbkM7QUFDQSxhQUFPLDREQUFDLGtEQUFEO0FBQVcsaUJBQVMsRUFBRSxLQUFLRyxTQUFMLENBQWVoRSxJQUFmLENBQW9CLElBQXBCLEVBQTBCd0QsS0FBSyxDQUFDUyxFQUFoQyxDQUF0QjtBQUEyRCxtQkFBVyxFQUFFLEtBQUtDLFdBQUwsQ0FBaUJsRSxJQUFqQixDQUFzQixJQUF0QixFQUE0QndELEtBQUssQ0FBQ1MsRUFBbEMsQ0FBeEU7QUFBK0csc0JBQWMsRUFBRTdCLGNBQS9IO0FBQStJLFdBQUcsRUFBRW9CLEtBQUssQ0FBQ1MsRUFBMUo7QUFBOEosZUFBTyxFQUFFL0IsVUFBVSxDQUFDc0IsS0FBSyxDQUFDUyxFQUFQLENBQWpMO0FBQTZMLGFBQUssRUFBRVQsS0FBcE07QUFBMk0sZ0JBQVEsRUFBRXJCLFFBQXJOO0FBQStOLGNBQU0sRUFBRXhCLE1BQXZPO0FBQStPLG1CQUFXLEVBQUVpRCxXQUE1UDtBQUF5USx3QkFBZ0IsRUFBRUc7QUFBM1IsUUFBUDtBQUNILEtBVkEsQ0FERCxDQWhCRyxDQUFQO0FBOEJIOztBQUVEQyxXQUFTLENBQUNDLEVBQUQsRUFBSztBQUNWLFFBQUksS0FBS3RFLEtBQUwsQ0FBV3FFLFNBQWYsRUFBMEIsS0FBS3JFLEtBQUwsQ0FBV3FFLFNBQVgsQ0FBcUJDLEVBQXJCO0FBQzdCOztBQUVELFFBQU1DLFdBQU4sQ0FBa0JELEVBQWxCLEVBQXNCO0FBQ2xCLFVBQU1ULEtBQUssR0FBRyxLQUFLN0QsS0FBTCxDQUFXc0MsU0FBWCxDQUFxQmtDLElBQXJCLENBQTBCbkIsQ0FBQyxJQUFJQSxDQUFDLENBQUNpQixFQUFGLElBQVFBLEVBQXZDLENBQWQ7QUFDQSxVQUFNRyxZQUFZLEdBQUcsTUFBTSxLQUFLQyxhQUFMLENBQW1CYixLQUFuQixDQUEzQjtBQUNBLFFBQUksQ0FBQ1ksWUFBTCxFQUFtQjtBQUNuQixRQUFJLEtBQUt6RSxLQUFMLENBQVd1RSxXQUFmLEVBQTRCLEtBQUt2RSxLQUFMLENBQVd1RSxXQUFYLENBQXVCVixLQUF2QjtBQUMvQjs7QUFFRGEsZUFBYSxDQUFDYixLQUFELEVBQVE7QUFDakIsV0FBTyxJQUFJYyxPQUFKLENBQVlDLE9BQU8sSUFBSTtBQUMxQkMscURBQU0sQ0FBQ0MscUJBQVAsQ0FBNkJyRCwrQ0FBTyxDQUFDb0QsTUFBUixDQUFlRSxhQUE1QyxFQUEyRHRELCtDQUFPLENBQUNDLE1BQVIsQ0FBZWdELGFBQWYsQ0FBNkI1QixNQUE3QixDQUFvQztBQUFDbkIsWUFBSSxFQUFFa0MsS0FBSyxDQUFDbEM7QUFBYixPQUFwQyxDQUEzRCxFQUFvSDtBQUNoSHFELGNBQU0sRUFBRSxJQUR3RztBQUVoSEMsbUJBQVcsRUFBRXhELCtDQUFPLENBQUNDLE1BQVIsQ0FBZTZDLFdBRm9GO0FBR2hIVyxpQkFBUyxFQUFFLE1BQU07QUFBQ04saUJBQU8sQ0FBQyxJQUFELENBQVA7QUFBZSxTQUgrRTtBQUloSE8sZ0JBQVEsRUFBRSxNQUFNO0FBQUNQLGlCQUFPLENBQUMsS0FBRCxDQUFQO0FBQWdCO0FBSitFLE9BQXBIO0FBTUgsS0FQTSxDQUFQO0FBUUg7O0FBNUhrRCIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy9hZGRvbmxpc3QuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgU2V0dGluZ3MsIFN0cmluZ3MsIEV2ZW50c30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBNb2RhbHMgZnJvbSBcIi4uL21vZGFsc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi90aXRsZVwiO1xyXG5pbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi4vaWNvbnMvcmVsb2FkXCI7XHJcbmltcG9ydCBBZGRvbkNhcmQgZnJvbSBcIi4vYWRkb25jYXJkXCI7XHJcbmltcG9ydCBEcm9wZG93biBmcm9tIFwiLi9jb21wb25lbnRzL2Ryb3Bkb3duXCI7XHJcbmltcG9ydCBTZWFyY2ggZnJvbSBcIi4vY29tcG9uZW50cy9zZWFyY2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFkZG9uTGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtzb3J0OiBcIm5hbWVcIiwgYXNjZW5kaW5nOiB0cnVlLCBxdWVyeTogXCJcIn07XHJcbiAgICAgICAgdGhpcy5zb3J0ID0gdGhpcy5zb3J0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnNlID0gdGhpcy5yZXZlcnNlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgRXZlbnRzLm9uKGAke3RoaXMucHJvcHMucHJlZml4fS1sb2FkZWRgLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgRXZlbnRzLm9uKGAke3RoaXMucHJvcHMucHJlZml4fS11bmxvYWRlZGAsIHRoaXMudXBkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICBFdmVudHMub2ZmKGAke3RoaXMucHJvcHMucHJlZml4fS1sb2FkZWRgLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgRXZlbnRzLm9mZihgJHt0aGlzLnByb3BzLnByZWZpeH0tdW5sb2FkZWRgLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKCkge1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucmVmcmVzaExpc3QpIHRoaXMucHJvcHMucmVmcmVzaExpc3QoKTtcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJzZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2FzY2VuZGluZzogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c29ydDogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2goZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtxdWVyeTogZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCl9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc29ydE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge2xhYmVsOiBTdHJpbmdzLkFkZG9ucy5uYW1lLCB2YWx1ZTogXCJuYW1lXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuQWRkb25zLmF1dGhvciwgdmFsdWU6IFwiYXV0aG9yXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuQWRkb25zLnZlcnNpb24sIHZhbHVlOiBcInZlcnNpb25cIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMuYWRkZWQsIHZhbHVlOiBcImFkZGVkXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuQWRkb25zLm1vZGlmaWVkLCB2YWx1ZTogXCJtb2RpZmllZFwifVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRpcmVjdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge2xhYmVsOiBTdHJpbmdzLlNvcnRpbmcuYXNjZW5kaW5nLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5Tb3J0aW5nLmRlc2NlbmRpbmcsIHZhbHVlOiBmYWxzZX1cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7dGl0bGUsIGZvbGRlciwgYWRkb25MaXN0LCBhZGRvblN0YXRlLCBvbkNoYW5nZSwgcmVsb2FkfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgY29uc3Qgc2hvd1JlbG9hZEljb24gPSAhU2V0dGluZ3MuZ2V0KFwic2V0dGluZ3NcIiwgXCJhZGRvbnNcIiwgXCJhdXRvUmVsb2FkXCIpO1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IGZvbGRlciA/IHt0aXRsZTogU3RyaW5ncy5BZGRvbnMub3BlbkZvbGRlci5mb3JtYXQoe3R5cGU6IHRpdGxlfSksIG9uQ2xpY2s6ICgpID0+IHtyZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oZm9sZGVyKTt9fSA6IG51bGw7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWRkb25zID0gYWRkb25MaXN0LnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBhW3RoaXMuc3RhdGUuc29ydF07XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IGJbdGhpcy5zdGF0ZS5zb3J0XTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihmaXJzdCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZpcnN0LnRvTG9jYWxlTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShzZWNvbmQudG9Mb2NhbGVMb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmIChmaXJzdCA+IHNlY29uZCkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPiBmaXJzdCkgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuYXNjZW5kaW5nKSBzb3J0ZWRBZGRvbnMucmV2ZXJzZSgpO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIDxTZXR0aW5nc1RpdGxlIGtleT1cInRpdGxlXCIgdGV4dD17dGl0bGV9IGJ1dHRvbj17YnV0dG9ufSBvdGhlckNoaWxkcmVuPXtzaG93UmVsb2FkSWNvbiAmJiA8UmVsb2FkSWNvbiBjbGFzc05hbWU9XCJiZC1yZWxvYWRcIiBvbkNsaWNrPXt0aGlzLnJlbG9hZC5iaW5kKHRoaXMpfSAvPn0gLz4sXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtY29udHJvbHMgYmQtYWRkb24tY29udHJvbHNcIj5cclxuICAgICAgICAgICAgICAgIDxTZWFyY2ggb25DaGFuZ2U9e3RoaXMuc2VhcmNofSBwbGFjZWhvbGRlcj17YCR7U3RyaW5ncy5BZGRvbnMuc2VhcmNoLmZvcm1hdCh7dHlwZTogdGhpcy5wcm9wcy50aXRsZX0pfS4uLmB9IC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWRyb3Bkb3duc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+e1N0cmluZ3MuU29ydGluZy5zb3J0Qnl9OjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXt0aGlzLnNvcnRPcHRpb25zfSBvbkNoYW5nZT17dGhpcy5zb3J0fSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPntTdHJpbmdzLlNvcnRpbmcub3JkZXJ9OjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXt0aGlzLmRpcmVjdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLnJldmVyc2V9IHN0eWxlPVwidHJhbnNwYXJlbnRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PixcclxuICAgICAgICAgICAgPGRpdiBrZXk9XCJhZGRvbkxpc3RcIiBjbGFzc05hbWU9e1wiYmQtYWRkb24tbGlzdFwifT5cclxuICAgICAgICAgICAge3NvcnRlZEFkZG9ucy5tYXAoYWRkb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUucXVlcnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGFkZG9uLm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gbWF0Y2hlcyB8fCBhZGRvbi5hdXRob3IudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gbWF0Y2hlcyB8fCBhZGRvbi5kZXNjcmlwdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNTZXR0aW5ncyA9IGFkZG9uLnR5cGUgJiYgdHlwZW9mKGFkZG9uLnBsdWdpbi5nZXRTZXR0aW5nc1BhbmVsKSA9PT0gXCJmdW5jdGlvblwiO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ2V0U2V0dGluZ3MgPSBoYXNTZXR0aW5ncyAmJiBhZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbC5iaW5kKGFkZG9uLnBsdWdpbik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPEFkZG9uQ2FyZCBlZGl0QWRkb249e3RoaXMuZWRpdEFkZG9uLmJpbmQodGhpcywgYWRkb24uaWQpfSBkZWxldGVBZGRvbj17dGhpcy5kZWxldGVBZGRvbi5iaW5kKHRoaXMsIGFkZG9uLmlkKX0gc2hvd1JlbG9hZEljb249e3Nob3dSZWxvYWRJY29ufSBrZXk9e2FkZG9uLmlkfSBlbmFibGVkPXthZGRvblN0YXRlW2FkZG9uLmlkXX0gYWRkb249e2FkZG9ufSBvbkNoYW5nZT17b25DaGFuZ2V9IHJlbG9hZD17cmVsb2FkfSBoYXNTZXR0aW5ncz17aGFzU2V0dGluZ3N9IGdldFNldHRpbmdzUGFuZWw9e2dldFNldHRpbmdzfSAvPjtcclxuICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdEFkZG9uKGlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZWRpdEFkZG9uKSB0aGlzLnByb3BzLmVkaXRBZGRvbihpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlQWRkb24oaWQpIHtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMucHJvcHMuYWRkb25MaXN0LmZpbmQoYSA9PiBhLmlkID09IGlkKTtcclxuICAgICAgICBjb25zdCBzaG91bGREZWxldGUgPSBhd2FpdCB0aGlzLmNvbmZpcm1EZWxldGUoYWRkb24pO1xyXG4gICAgICAgIGlmICghc2hvdWxkRGVsZXRlKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVsZXRlQWRkb24pIHRoaXMucHJvcHMuZGVsZXRlQWRkb24oYWRkb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm1EZWxldGUoYWRkb24pIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIE1vZGFscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoU3RyaW5ncy5Nb2RhbHMuY29uZmlybUFjdGlvbiwgU3RyaW5ncy5BZGRvbnMuY29uZmlybURlbGV0ZS5mb3JtYXQoe25hbWU6IGFkZG9uLm5hbWV9KSwge1xyXG4gICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFN0cmluZ3MuQWRkb25zLmRlbGV0ZUFkZG9uLFxyXG4gICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7cmVzb2x2ZSh0cnVlKTt9LFxyXG4gICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHtyZXNvbHZlKGZhbHNlKTt9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/settings/addonlist.jsx\n"); - -/***/ }), - -/***/ "./src/ui/settings/attribution.jsx": -/*!*****************************************!*\ - !*** ./src/ui/settings/attribution.jsx ***! - \*****************************************/ -/*! exports provided: default */ -/***/ (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 BBDAttribution; });\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 BBDAttribution extends modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].Component {\n buildTitle(name, version, author) {\n const title = modules__WEBPACK_IMPORTED_MODULE_1__[\"Strings\"].Addons.title.split(/({{[A-Za-z]+}})/);\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\n if (nameIndex) title[nameIndex] = name;\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\n if (nameIndex) title[versionIndex] = version;\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\n if (nameIndex) title[authorIndex] = author;\n return title.flat();\n }\n\n render() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"div\", {\n id: \"bbd-version\"\n }, this.buildTitle(\"BBD\", data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].bbdVersion, modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"a\", {\n href: \"https://github.com/rauenzi\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"Zerebos\")));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2F0dHJpYnV0aW9uLmpzeD8xNzg0Il0sIm5hbWVzIjpbIkJCREF0dHJpYnV0aW9uIiwiUmVhY3QiLCJDb21wb25lbnQiLCJidWlsZFRpdGxlIiwibmFtZSIsInZlcnNpb24iLCJhdXRob3IiLCJ0aXRsZSIsIlN0cmluZ3MiLCJBZGRvbnMiLCJzcGxpdCIsIm5hbWVJbmRleCIsImZpbmRJbmRleCIsInMiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsImZsYXQiLCJyZW5kZXIiLCJDb25maWciLCJiYmRWZXJzaW9uIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFZSxNQUFNQSxjQUFOLFNBQTZCQyw2Q0FBSyxDQUFDQyxTQUFuQyxDQUE2QztBQUV4REMsWUFBVSxDQUFDQyxJQUFELEVBQU9DLE9BQVAsRUFBZ0JDLE1BQWhCLEVBQXdCO0FBQzlCLFVBQU1DLEtBQUssR0FBR0MsK0NBQU8sQ0FBQ0MsTUFBUixDQUFlRixLQUFmLENBQXFCRyxLQUFyQixDQUEyQixpQkFBM0IsQ0FBZDtBQUNBLFVBQU1DLFNBQVMsR0FBR0osS0FBSyxDQUFDSyxTQUFOLENBQWdCQyxDQUFDLElBQUlBLENBQUMsSUFBSSxVQUExQixDQUFsQjtBQUNBLFFBQUlGLFNBQUosRUFBZUosS0FBSyxDQUFDSSxTQUFELENBQUwsR0FBbUJQLElBQW5CO0FBQ2YsVUFBTVUsWUFBWSxHQUFHUCxLQUFLLENBQUNLLFNBQU4sQ0FBZ0JDLENBQUMsSUFBSUEsQ0FBQyxJQUFJLGFBQTFCLENBQXJCO0FBQ0EsUUFBSUYsU0FBSixFQUFlSixLQUFLLENBQUNPLFlBQUQsQ0FBTCxHQUFzQlQsT0FBdEI7QUFDZixVQUFNVSxXQUFXLEdBQUdSLEtBQUssQ0FBQ0ssU0FBTixDQUFnQkMsQ0FBQyxJQUFJQSxDQUFDLElBQUksWUFBMUIsQ0FBcEI7QUFDQSxRQUFJRixTQUFKLEVBQWVKLEtBQUssQ0FBQ1EsV0FBRCxDQUFMLEdBQXFCVCxNQUFyQjtBQUNmLFdBQU9DLEtBQUssQ0FBQ1MsSUFBTixFQUFQO0FBQ0g7O0FBRURDLFFBQU0sR0FBRztBQUNMLFdBQU87QUFBSyxRQUFFLEVBQUM7QUFBUixPQUNGLEtBQUtkLFVBQUwsQ0FBZ0IsS0FBaEIsRUFBdUJlLDJDQUFNLENBQUNDLFVBQTlCLEVBQTBDO0FBQUcsVUFBSSxFQUFDLDRCQUFSO0FBQXFDLFlBQU0sRUFBQyxRQUE1QztBQUFxRCxTQUFHLEVBQUM7QUFBekQsaUJBQTFDLENBREUsQ0FBUDtBQUdIOztBQWpCdUQiLCJmaWxlIjoiLi9zcmMvdWkvc2V0dGluZ3MvYXR0cmlidXRpb24uanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCB7UmVhY3QsIFN0cmluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCQkRBdHRyaWJ1dGlvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgYnVpbGRUaXRsZShuYW1lLCB2ZXJzaW9uLCBhdXRob3IpIHtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IFN0cmluZ3MuQWRkb25zLnRpdGxlLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IG5hbWU7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSB2ZXJzaW9uO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbYXV0aG9ySW5kZXhdID0gYXV0aG9yO1xyXG4gICAgICAgIHJldHVybiB0aXRsZS5mbGF0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGlkPVwiYmJkLXZlcnNpb25cIj5cclxuICAgICAgICAgICAge3RoaXMuYnVpbGRUaXRsZShcIkJCRFwiLCBDb25maWcuYmJkVmVyc2lvbiwgPGEgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlplcmVib3M8L2E+KX1cclxuICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/settings/attribution.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonList; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _title__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n/* harmony import */ var _addoncard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./addoncard */ \"./src/ui/settings/addoncard.jsx\");\n/* harmony import */ var _components_dropdown__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/dropdown */ \"./src/ui/settings/components/dropdown.jsx\");\n/* harmony import */ var _components_search__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/search */ \"./src/ui/settings/components/search.jsx\");\n/* harmony import */ var _errorboundary__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../errorboundary */ \"./src/ui/errorboundary.jsx\");\n\n\n\n\n\n\n\n\nclass AddonList extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n sort: \"name\",\n ascending: true,\n query: \"\"\n };\n this.sort = this.sort.bind(this);\n this.reverse = this.reverse.bind(this);\n this.search = this.search.bind(this);\n this.update = this.update.bind(this);\n }\n\n componentDidMount() {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(`${this.props.prefix}-loaded`, this.update);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(`${this.props.prefix}-unloaded`, this.update);\n }\n\n componentWillUnmount() {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].off(`${this.props.prefix}-loaded`, this.update);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].off(`${this.props.prefix}-unloaded`, this.update);\n }\n\n update() {\n this.forceUpdate();\n }\n\n reload() {\n if (this.props.refreshList) this.props.refreshList();\n this.forceUpdate();\n }\n\n reverse(value) {\n this.setState({\n ascending: value\n });\n }\n\n sort(value) {\n this.setState({\n sort: value\n });\n }\n\n search(event) {\n this.setState({\n query: event.target.value.toLocaleLowerCase()\n });\n }\n\n get sortOptions() {\n return [{\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.name,\n value: \"name\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.author,\n value: \"author\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.version,\n value: \"version\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.added,\n value: \"added\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.modified,\n value: \"modified\"\n }];\n }\n\n get directions() {\n return [{\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.ascending,\n value: true\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.descending,\n value: false\n }];\n }\n\n render() {\n const {\n title,\n folder,\n addonList,\n addonState,\n onChange,\n reload\n } = this.props;\n const showReloadIcon = !modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"settings\", \"addons\", \"autoReload\");\n const button = folder ? {\n title: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.openFolder.format({\n type: title\n }),\n onClick: () => {\n const shell = __webpack_require__(/*! electron */ \"electron\").shell;\n\n const open = shell.openItem || shell.openPath;\n open(folder);\n }\n } : null;\n const sortedAddons = addonList.sort((a, b) => {\n const first = a[this.state.sort];\n const second = b[this.state.sort];\n if (typeof first == \"string\") return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase());\n if (first > second) return 1;\n if (second > first) return -1;\n return 0;\n });\n if (!this.state.ascending) sortedAddons.reverse();\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: \"title\",\n text: title,\n button: button,\n otherChildren: showReloadIcon && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"bd-reload\",\n onClick: this.reload.bind(this)\n })\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-controls bd-addon-controls\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_search__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n onChange: this.search,\n placeholder: `${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.search.format({\n type: this.props.title\n })}...`\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-dropdowns\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-select-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"bd-label\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.sortBy, \":\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n options: this.sortOptions,\n onChange: this.sort,\n style: \"transparent\"\n })), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-select-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"bd-label\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.order, \":\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n options: this.directions,\n onChange: this.reverse,\n style: \"transparent\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n key: \"addonList\",\n className: \"bd-addon-list\"\n }, sortedAddons.map(addon => {\n if (this.state.query) {\n let matches = addon.name.toLocaleLowerCase().includes(this.state.query);\n matches = matches || addon.author.toLocaleLowerCase().includes(this.state.query);\n matches = matches || addon.description.toLocaleLowerCase().includes(this.state.query);\n if (!matches) return null;\n }\n\n const hasSettings = addon.type && typeof addon.plugin.getSettingsPanel === \"function\";\n const getSettings = hasSettings && addon.plugin.getSettingsPanel.bind(addon.plugin);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_errorboundary__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_addoncard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n editAddon: this.editAddon.bind(this, addon.id),\n deleteAddon: this.deleteAddon.bind(this, addon.id),\n showReloadIcon: showReloadIcon,\n key: addon.id,\n enabled: addonState[addon.id],\n addon: addon,\n onChange: onChange,\n reload: reload,\n hasSettings: hasSettings,\n getSettingsPanel: getSettings\n }));\n }))];\n }\n\n editAddon(id) {\n if (this.props.editAddon) this.props.editAddon(id);\n }\n\n async deleteAddon(id) {\n const addon = this.props.addonList.find(a => a.id == id);\n const shouldDelete = await this.confirmDelete(addon);\n if (!shouldDelete) return;\n if (this.props.deleteAddon) this.props.deleteAddon(addon);\n }\n\n confirmDelete(addon) {\n return new Promise(resolve => {\n _modals__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showConfirmationModal(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.confirmAction, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.confirmDelete.format({\n name: addon.name\n }), {\n danger: true,\n confirmText: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.deleteAddon,\n onConfirm: () => {\n resolve(true);\n },\n onCancel: () => {\n resolve(false);\n }\n });\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2FkZG9ubGlzdC5qc3g/NjRkMiJdLCJuYW1lcyI6WyJBZGRvbkxpc3QiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsInNvcnQiLCJhc2NlbmRpbmciLCJxdWVyeSIsImJpbmQiLCJyZXZlcnNlIiwic2VhcmNoIiwidXBkYXRlIiwiY29tcG9uZW50RGlkTW91bnQiLCJFdmVudHMiLCJvbiIsInByZWZpeCIsImNvbXBvbmVudFdpbGxVbm1vdW50Iiwib2ZmIiwiZm9yY2VVcGRhdGUiLCJyZWxvYWQiLCJyZWZyZXNoTGlzdCIsInZhbHVlIiwic2V0U3RhdGUiLCJldmVudCIsInRhcmdldCIsInRvTG9jYWxlTG93ZXJDYXNlIiwic29ydE9wdGlvbnMiLCJsYWJlbCIsIlN0cmluZ3MiLCJBZGRvbnMiLCJuYW1lIiwiYXV0aG9yIiwidmVyc2lvbiIsImFkZGVkIiwibW9kaWZpZWQiLCJkaXJlY3Rpb25zIiwiU29ydGluZyIsImRlc2NlbmRpbmciLCJyZW5kZXIiLCJ0aXRsZSIsImZvbGRlciIsImFkZG9uTGlzdCIsImFkZG9uU3RhdGUiLCJvbkNoYW5nZSIsInNob3dSZWxvYWRJY29uIiwiU2V0dGluZ3MiLCJnZXQiLCJidXR0b24iLCJvcGVuRm9sZGVyIiwiZm9ybWF0IiwidHlwZSIsIm9uQ2xpY2siLCJzaGVsbCIsInJlcXVpcmUiLCJvcGVuIiwib3Blbkl0ZW0iLCJvcGVuUGF0aCIsInNvcnRlZEFkZG9ucyIsImEiLCJiIiwiZmlyc3QiLCJzZWNvbmQiLCJsb2NhbGVDb21wYXJlIiwic29ydEJ5Iiwib3JkZXIiLCJtYXAiLCJhZGRvbiIsIm1hdGNoZXMiLCJpbmNsdWRlcyIsImRlc2NyaXB0aW9uIiwiaGFzU2V0dGluZ3MiLCJwbHVnaW4iLCJnZXRTZXR0aW5nc1BhbmVsIiwiZ2V0U2V0dGluZ3MiLCJlZGl0QWRkb24iLCJpZCIsImRlbGV0ZUFkZG9uIiwiZmluZCIsInNob3VsZERlbGV0ZSIsImNvbmZpcm1EZWxldGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsIk1vZGFscyIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsImNvbmZpcm1BY3Rpb24iLCJkYW5nZXIiLCJjb25maXJtVGV4dCIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFZSxNQUFNQSxTQUFOLFNBQXdCQyw2Q0FBSyxDQUFDQyxTQUE5QixDQUF3QztBQUVuREMsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsU0FBS0MsS0FBTCxHQUFhO0FBQUNDLFVBQUksRUFBRSxNQUFQO0FBQWVDLGVBQVMsRUFBRSxJQUExQjtBQUFnQ0MsV0FBSyxFQUFFO0FBQXZDLEtBQWI7QUFDQSxTQUFLRixJQUFMLEdBQVksS0FBS0EsSUFBTCxDQUFVRyxJQUFWLENBQWUsSUFBZixDQUFaO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtBLE9BQUwsQ0FBYUQsSUFBYixDQUFrQixJQUFsQixDQUFmO0FBQ0EsU0FBS0UsTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWUYsSUFBWixDQUFpQixJQUFqQixDQUFkO0FBQ0EsU0FBS0csTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWUgsSUFBWixDQUFpQixJQUFqQixDQUFkO0FBQ0g7O0FBRURJLG1CQUFpQixHQUFHO0FBQ2hCQyxrREFBTSxDQUFDQyxFQUFQLENBQVcsR0FBRSxLQUFLWCxLQUFMLENBQVdZLE1BQU8sU0FBL0IsRUFBeUMsS0FBS0osTUFBOUM7QUFDQUUsa0RBQU0sQ0FBQ0MsRUFBUCxDQUFXLEdBQUUsS0FBS1gsS0FBTCxDQUFXWSxNQUFPLFdBQS9CLEVBQTJDLEtBQUtKLE1BQWhEO0FBQ0g7O0FBRURLLHNCQUFvQixHQUFHO0FBQ25CSCxrREFBTSxDQUFDSSxHQUFQLENBQVksR0FBRSxLQUFLZCxLQUFMLENBQVdZLE1BQU8sU0FBaEMsRUFBMEMsS0FBS0osTUFBL0M7QUFDQUUsa0RBQU0sQ0FBQ0ksR0FBUCxDQUFZLEdBQUUsS0FBS2QsS0FBTCxDQUFXWSxNQUFPLFdBQWhDLEVBQTRDLEtBQUtKLE1BQWpEO0FBQ0g7O0FBRURBLFFBQU0sR0FBRztBQUNMLFNBQUtPLFdBQUw7QUFDSDs7QUFFREMsUUFBTSxHQUFHO0FBQ0wsUUFBSSxLQUFLaEIsS0FBTCxDQUFXaUIsV0FBZixFQUE0QixLQUFLakIsS0FBTCxDQUFXaUIsV0FBWDtBQUM1QixTQUFLRixXQUFMO0FBQ0g7O0FBRURULFNBQU8sQ0FBQ1ksS0FBRCxFQUFRO0FBQ1gsU0FBS0MsUUFBTCxDQUFjO0FBQUNoQixlQUFTLEVBQUVlO0FBQVosS0FBZDtBQUNIOztBQUVEaEIsTUFBSSxDQUFDZ0IsS0FBRCxFQUFRO0FBQ1IsU0FBS0MsUUFBTCxDQUFjO0FBQUNqQixVQUFJLEVBQUVnQjtBQUFQLEtBQWQ7QUFDSDs7QUFFRFgsUUFBTSxDQUFDYSxLQUFELEVBQVE7QUFDVixTQUFLRCxRQUFMLENBQWM7QUFBQ2YsV0FBSyxFQUFFZ0IsS0FBSyxDQUFDQyxNQUFOLENBQWFILEtBQWIsQ0FBbUJJLGlCQUFuQjtBQUFSLEtBQWQ7QUFDSDs7QUFFRCxNQUFJQyxXQUFKLEdBQWtCO0FBQ2QsV0FBTyxDQUNIO0FBQUNDLFdBQUssRUFBRUMsK0NBQU8sQ0FBQ0MsTUFBUixDQUFlQyxJQUF2QjtBQUE2QlQsV0FBSyxFQUFFO0FBQXBDLEtBREcsRUFFSDtBQUFDTSxXQUFLLEVBQUVDLCtDQUFPLENBQUNDLE1BQVIsQ0FBZUUsTUFBdkI7QUFBK0JWLFdBQUssRUFBRTtBQUF0QyxLQUZHLEVBR0g7QUFBQ00sV0FBSyxFQUFFQywrQ0FBTyxDQUFDQyxNQUFSLENBQWVHLE9BQXZCO0FBQWdDWCxXQUFLLEVBQUU7QUFBdkMsS0FIRyxFQUlIO0FBQUNNLFdBQUssRUFBRUMsK0NBQU8sQ0FBQ0MsTUFBUixDQUFlSSxLQUF2QjtBQUE4QlosV0FBSyxFQUFFO0FBQXJDLEtBSkcsRUFLSDtBQUFDTSxXQUFLLEVBQUVDLCtDQUFPLENBQUNDLE1BQVIsQ0FBZUssUUFBdkI7QUFBaUNiLFdBQUssRUFBRTtBQUF4QyxLQUxHLENBQVA7QUFPSDs7QUFFRCxNQUFJYyxVQUFKLEdBQWlCO0FBQ2IsV0FBTyxDQUNIO0FBQUNSLFdBQUssRUFBRUMsK0NBQU8sQ0FBQ1EsT0FBUixDQUFnQjlCLFNBQXhCO0FBQW1DZSxXQUFLLEVBQUU7QUFBMUMsS0FERyxFQUVIO0FBQUNNLFdBQUssRUFBRUMsK0NBQU8sQ0FBQ1EsT0FBUixDQUFnQkMsVUFBeEI7QUFBb0NoQixXQUFLLEVBQUU7QUFBM0MsS0FGRyxDQUFQO0FBSUg7O0FBRURpQixRQUFNLEdBQUc7QUFDTCxVQUFNO0FBQUNDLFdBQUQ7QUFBUUMsWUFBUjtBQUFnQkMsZUFBaEI7QUFBMkJDLGdCQUEzQjtBQUF1Q0MsY0FBdkM7QUFBaUR4QjtBQUFqRCxRQUEyRCxLQUFLaEIsS0FBdEU7QUFDQSxVQUFNeUMsY0FBYyxHQUFHLENBQUNDLGdEQUFRLENBQUNDLEdBQVQsQ0FBYSxVQUFiLEVBQXlCLFFBQXpCLEVBQW1DLFlBQW5DLENBQXhCO0FBQ0EsVUFBTUMsTUFBTSxHQUFHUCxNQUFNLEdBQUc7QUFBQ0QsV0FBSyxFQUFFWCwrQ0FBTyxDQUFDQyxNQUFSLENBQWVtQixVQUFmLENBQTBCQyxNQUExQixDQUFpQztBQUFDQyxZQUFJLEVBQUVYO0FBQVAsT0FBakMsQ0FBUjtBQUF5RFksYUFBTyxFQUFFLE1BQU07QUFDNUYsY0FBTUMsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLDBCQUFELENBQVAsQ0FBb0JELEtBQWxDOztBQUNBLGNBQU1FLElBQUksR0FBR0YsS0FBSyxDQUFDRyxRQUFOLElBQWtCSCxLQUFLLENBQUNJLFFBQXJDO0FBQ0FGLFlBQUksQ0FBQ2QsTUFBRCxDQUFKO0FBQ0g7QUFKdUIsS0FBSCxHQUloQixJQUpMO0FBS0EsVUFBTWlCLFlBQVksR0FBR2hCLFNBQVMsQ0FBQ3BDLElBQVYsQ0FBZSxDQUFDcUQsQ0FBRCxFQUFJQyxDQUFKLEtBQVU7QUFDMUMsWUFBTUMsS0FBSyxHQUFHRixDQUFDLENBQUMsS0FBS3RELEtBQUwsQ0FBV0MsSUFBWixDQUFmO0FBQ0EsWUFBTXdELE1BQU0sR0FBR0YsQ0FBQyxDQUFDLEtBQUt2RCxLQUFMLENBQVdDLElBQVosQ0FBaEI7QUFDQSxVQUFJLE9BQU91RCxLQUFQLElBQWlCLFFBQXJCLEVBQStCLE9BQU9BLEtBQUssQ0FBQ25DLGlCQUFOLEdBQTBCcUMsYUFBMUIsQ0FBd0NELE1BQU0sQ0FBQ3BDLGlCQUFQLEVBQXhDLENBQVA7QUFDL0IsVUFBSW1DLEtBQUssR0FBR0MsTUFBWixFQUFvQixPQUFPLENBQVA7QUFDcEIsVUFBSUEsTUFBTSxHQUFHRCxLQUFiLEVBQW9CLE9BQU8sQ0FBQyxDQUFSO0FBQ3BCLGFBQU8sQ0FBUDtBQUNILEtBUG9CLENBQXJCO0FBUUEsUUFBSSxDQUFDLEtBQUt4RCxLQUFMLENBQVdFLFNBQWhCLEVBQTJCbUQsWUFBWSxDQUFDaEQsT0FBYjtBQUMzQixXQUFPLENBQ0gsNERBQUMsOENBQUQ7QUFBZSxTQUFHLEVBQUMsT0FBbkI7QUFBMkIsVUFBSSxFQUFFOEIsS0FBakM7QUFBd0MsWUFBTSxFQUFFUSxNQUFoRDtBQUF3RCxtQkFBYSxFQUFFSCxjQUFjLElBQUksNERBQUMscURBQUQ7QUFBWSxpQkFBUyxFQUFDLFdBQXRCO0FBQWtDLGVBQU8sRUFBRSxLQUFLekIsTUFBTCxDQUFZWCxJQUFaLENBQWlCLElBQWpCO0FBQTNDO0FBQXpGLE1BREcsRUFFSDtBQUFLLGVBQVMsRUFBQztBQUFmLE9BQ0ksNERBQUMsMERBQUQ7QUFBUSxjQUFRLEVBQUUsS0FBS0UsTUFBdkI7QUFBK0IsaUJBQVcsRUFBRyxHQUFFa0IsK0NBQU8sQ0FBQ0MsTUFBUixDQUFlbkIsTUFBZixDQUFzQnVDLE1BQXRCLENBQTZCO0FBQUNDLFlBQUksRUFBRSxLQUFLL0MsS0FBTCxDQUFXb0M7QUFBbEIsT0FBN0IsQ0FBdUQ7QUFBdEcsTUFESixFQUVJO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FDSTtBQUFLLGVBQVMsRUFBQztBQUFmLE9BQ0k7QUFBTyxlQUFTLEVBQUM7QUFBakIsT0FBNkJYLCtDQUFPLENBQUNRLE9BQVIsQ0FBZ0IyQixNQUE3QyxNQURKLEVBRUksNERBQUMsNERBQUQ7QUFBVSxhQUFPLEVBQUUsS0FBS3JDLFdBQXhCO0FBQXFDLGNBQVEsRUFBRSxLQUFLckIsSUFBcEQ7QUFBMEQsV0FBSyxFQUFDO0FBQWhFLE1BRkosQ0FESixFQUtJO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FDSTtBQUFPLGVBQVMsRUFBQztBQUFqQixPQUE2QnVCLCtDQUFPLENBQUNRLE9BQVIsQ0FBZ0I0QixLQUE3QyxNQURKLEVBRUksNERBQUMsNERBQUQ7QUFBVSxhQUFPLEVBQUUsS0FBSzdCLFVBQXhCO0FBQW9DLGNBQVEsRUFBRSxLQUFLMUIsT0FBbkQ7QUFBNEQsV0FBSyxFQUFDO0FBQWxFLE1BRkosQ0FMSixDQUZKLENBRkcsRUFnQkg7QUFBSyxTQUFHLEVBQUMsV0FBVDtBQUFxQixlQUFTLEVBQUU7QUFBaEMsT0FDQ2dELFlBQVksQ0FBQ1EsR0FBYixDQUFpQkMsS0FBSyxJQUFJO0FBQ3ZCLFVBQUksS0FBSzlELEtBQUwsQ0FBV0csS0FBZixFQUFzQjtBQUNsQixZQUFJNEQsT0FBTyxHQUFHRCxLQUFLLENBQUNwQyxJQUFOLENBQVdMLGlCQUFYLEdBQStCMkMsUUFBL0IsQ0FBd0MsS0FBS2hFLEtBQUwsQ0FBV0csS0FBbkQsQ0FBZDtBQUNBNEQsZUFBTyxHQUFHQSxPQUFPLElBQUlELEtBQUssQ0FBQ25DLE1BQU4sQ0FBYU4saUJBQWIsR0FBaUMyQyxRQUFqQyxDQUEwQyxLQUFLaEUsS0FBTCxDQUFXRyxLQUFyRCxDQUFyQjtBQUNBNEQsZUFBTyxHQUFHQSxPQUFPLElBQUlELEtBQUssQ0FBQ0csV0FBTixDQUFrQjVDLGlCQUFsQixHQUFzQzJDLFFBQXRDLENBQStDLEtBQUtoRSxLQUFMLENBQVdHLEtBQTFELENBQXJCO0FBQ0EsWUFBSSxDQUFDNEQsT0FBTCxFQUFjLE9BQU8sSUFBUDtBQUNqQjs7QUFDRCxZQUFNRyxXQUFXLEdBQUdKLEtBQUssQ0FBQ2hCLElBQU4sSUFBYyxPQUFPZ0IsS0FBSyxDQUFDSyxNQUFOLENBQWFDLGdCQUFwQixLQUEwQyxVQUE1RTtBQUNBLFlBQU1DLFdBQVcsR0FBR0gsV0FBVyxJQUFJSixLQUFLLENBQUNLLE1BQU4sQ0FBYUMsZ0JBQWIsQ0FBOEJoRSxJQUE5QixDQUFtQzBELEtBQUssQ0FBQ0ssTUFBekMsQ0FBbkM7QUFDQSxhQUFPLDREQUFDLHNEQUFELFFBQWUsNERBQUMsa0RBQUQ7QUFBVyxpQkFBUyxFQUFFLEtBQUtHLFNBQUwsQ0FBZWxFLElBQWYsQ0FBb0IsSUFBcEIsRUFBMEIwRCxLQUFLLENBQUNTLEVBQWhDLENBQXRCO0FBQTJELG1CQUFXLEVBQUUsS0FBS0MsV0FBTCxDQUFpQnBFLElBQWpCLENBQXNCLElBQXRCLEVBQTRCMEQsS0FBSyxDQUFDUyxFQUFsQyxDQUF4RTtBQUErRyxzQkFBYyxFQUFFL0IsY0FBL0g7QUFBK0ksV0FBRyxFQUFFc0IsS0FBSyxDQUFDUyxFQUExSjtBQUE4SixlQUFPLEVBQUVqQyxVQUFVLENBQUN3QixLQUFLLENBQUNTLEVBQVAsQ0FBakw7QUFBNkwsYUFBSyxFQUFFVCxLQUFwTTtBQUEyTSxnQkFBUSxFQUFFdkIsUUFBck47QUFBK04sY0FBTSxFQUFFeEIsTUFBdk87QUFBK08sbUJBQVcsRUFBRW1ELFdBQTVQO0FBQXlRLHdCQUFnQixFQUFFRztBQUEzUixRQUFmLENBQVA7QUFDSCxLQVZBLENBREQsQ0FoQkcsQ0FBUDtBQThCSDs7QUFFREMsV0FBUyxDQUFDQyxFQUFELEVBQUs7QUFDVixRQUFJLEtBQUt4RSxLQUFMLENBQVd1RSxTQUFmLEVBQTBCLEtBQUt2RSxLQUFMLENBQVd1RSxTQUFYLENBQXFCQyxFQUFyQjtBQUM3Qjs7QUFFRCxRQUFNQyxXQUFOLENBQWtCRCxFQUFsQixFQUFzQjtBQUNsQixVQUFNVCxLQUFLLEdBQUcsS0FBSy9ELEtBQUwsQ0FBV3NDLFNBQVgsQ0FBcUJvQyxJQUFyQixDQUEwQm5CLENBQUMsSUFBSUEsQ0FBQyxDQUFDaUIsRUFBRixJQUFRQSxFQUF2QyxDQUFkO0FBQ0EsVUFBTUcsWUFBWSxHQUFHLE1BQU0sS0FBS0MsYUFBTCxDQUFtQmIsS0FBbkIsQ0FBM0I7QUFDQSxRQUFJLENBQUNZLFlBQUwsRUFBbUI7QUFDbkIsUUFBSSxLQUFLM0UsS0FBTCxDQUFXeUUsV0FBZixFQUE0QixLQUFLekUsS0FBTCxDQUFXeUUsV0FBWCxDQUF1QlYsS0FBdkI7QUFDL0I7O0FBRURhLGVBQWEsQ0FBQ2IsS0FBRCxFQUFRO0FBQ2pCLFdBQU8sSUFBSWMsT0FBSixDQUFZQyxPQUFPLElBQUk7QUFDMUJDLHFEQUFNLENBQUNDLHFCQUFQLENBQTZCdkQsK0NBQU8sQ0FBQ3NELE1BQVIsQ0FBZUUsYUFBNUMsRUFBMkR4RCwrQ0FBTyxDQUFDQyxNQUFSLENBQWVrRCxhQUFmLENBQTZCOUIsTUFBN0IsQ0FBb0M7QUFBQ25CLFlBQUksRUFBRW9DLEtBQUssQ0FBQ3BDO0FBQWIsT0FBcEMsQ0FBM0QsRUFBb0g7QUFDaEh1RCxjQUFNLEVBQUUsSUFEd0c7QUFFaEhDLG1CQUFXLEVBQUUxRCwrQ0FBTyxDQUFDQyxNQUFSLENBQWUrQyxXQUZvRjtBQUdoSFcsaUJBQVMsRUFBRSxNQUFNO0FBQUNOLGlCQUFPLENBQUMsSUFBRCxDQUFQO0FBQWUsU0FIK0U7QUFJaEhPLGdCQUFRLEVBQUUsTUFBTTtBQUFDUCxpQkFBTyxDQUFDLEtBQUQsQ0FBUDtBQUFnQjtBQUorRSxPQUFwSDtBQU1ILEtBUE0sQ0FBUDtBQVFIOztBQWhJa0QiLCJmaWxlIjoiLi9zcmMvdWkvc2V0dGluZ3MvYWRkb25saXN0LmpzeC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3QsIFNldHRpbmdzLCBTdHJpbmdzLCBFdmVudHN9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQgTW9kYWxzIGZyb20gXCIuLi9tb2RhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vdGl0bGVcIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4uL2ljb25zL3JlbG9hZFwiO1xyXG5pbXBvcnQgQWRkb25DYXJkIGZyb20gXCIuL2FkZG9uY2FyZFwiO1xyXG5pbXBvcnQgRHJvcGRvd24gZnJvbSBcIi4vY29tcG9uZW50cy9kcm9wZG93blwiO1xyXG5pbXBvcnQgU2VhcmNoIGZyb20gXCIuL2NvbXBvbmVudHMvc2VhcmNoXCI7XHJcbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gIFwiLi4vZXJyb3Jib3VuZGFyeVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWRkb25MaXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge3NvcnQ6IFwibmFtZVwiLCBhc2NlbmRpbmc6IHRydWUsIHF1ZXJ5OiBcIlwifTtcclxuICAgICAgICB0aGlzLnNvcnQgPSB0aGlzLnNvcnQuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJldmVyc2UgPSB0aGlzLnJldmVyc2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNlYXJjaCA9IHRoaXMuc2VhcmNoLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGUgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBFdmVudHMub24oYCR7dGhpcy5wcm9wcy5wcmVmaXh9LWxvYWRlZGAsIHRoaXMudXBkYXRlKTtcclxuICAgICAgICBFdmVudHMub24oYCR7dGhpcy5wcm9wcy5wcmVmaXh9LXVubG9hZGVkYCwgdGhpcy51cGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIEV2ZW50cy5vZmYoYCR7dGhpcy5wcm9wcy5wcmVmaXh9LWxvYWRlZGAsIHRoaXMudXBkYXRlKTtcclxuICAgICAgICBFdmVudHMub2ZmKGAke3RoaXMucHJvcHMucHJlZml4fS11bmxvYWRlZGAsIHRoaXMudXBkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5yZWZyZXNoTGlzdCkgdGhpcy5wcm9wcy5yZWZyZXNoTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnNlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YXNjZW5kaW5nOiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzb3J0OiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3F1ZXJ5OiBldmVudC50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzb3J0T3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuQWRkb25zLm5hbWUsIHZhbHVlOiBcIm5hbWVcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMuYXV0aG9yLCB2YWx1ZTogXCJhdXRob3JcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMudmVyc2lvbiwgdmFsdWU6IFwidmVyc2lvblwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBTdHJpbmdzLkFkZG9ucy5hZGRlZCwgdmFsdWU6IFwiYWRkZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMubW9kaWZpZWQsIHZhbHVlOiBcIm1vZGlmaWVkXCJ9XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlyZWN0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuU29ydGluZy5hc2NlbmRpbmcsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge2xhYmVsOiBTdHJpbmdzLlNvcnRpbmcuZGVzY2VuZGluZywgdmFsdWU6IGZhbHNlfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHt0aXRsZSwgZm9sZGVyLCBhZGRvbkxpc3QsIGFkZG9uU3RhdGUsIG9uQ2hhbmdlLCByZWxvYWR9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCBzaG93UmVsb2FkSWNvbiA9ICFTZXR0aW5ncy5nZXQoXCJzZXR0aW5nc1wiLCBcImFkZG9uc1wiLCBcImF1dG9SZWxvYWRcIik7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uID0gZm9sZGVyID8ge3RpdGxlOiBTdHJpbmdzLkFkZG9ucy5vcGVuRm9sZGVyLmZvcm1hdCh7dHlwZTogdGl0bGV9KSwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzaGVsbCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbDtcclxuICAgICAgICAgICAgY29uc3Qgb3BlbiA9IHNoZWxsLm9wZW5JdGVtIHx8IHNoZWxsLm9wZW5QYXRoO1xyXG4gICAgICAgICAgICBvcGVuKGZvbGRlcik7XHJcbiAgICAgICAgfX0gOiBudWxsO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEFkZG9ucyA9IGFkZG9uTGlzdC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gYVt0aGlzLnN0YXRlLnNvcnRdO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBiW3RoaXMuc3RhdGUuc29ydF07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YoZmlyc3QpID09IFwic3RyaW5nXCIpIHJldHVybiBmaXJzdC50b0xvY2FsZUxvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoc2Vjb25kLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBpZiAoZmlyc3QgPiBzZWNvbmQpIHJldHVybiAxO1xyXG4gICAgICAgICAgICBpZiAoc2Vjb25kID4gZmlyc3QpIHJldHVybiAtMTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmFzY2VuZGluZykgc29ydGVkQWRkb25zLnJldmVyc2UoKTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8U2V0dGluZ3NUaXRsZSBrZXk9XCJ0aXRsZVwiIHRleHQ9e3RpdGxlfSBidXR0b249e2J1dHRvbn0gb3RoZXJDaGlsZHJlbj17c2hvd1JlbG9hZEljb24gJiYgPFJlbG9hZEljb24gY2xhc3NOYW1lPVwiYmQtcmVsb2FkXCIgb25DbGljaz17dGhpcy5yZWxvYWQuYmluZCh0aGlzKX0gLz59IC8+LFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWNvbnRyb2xzIGJkLWFkZG9uLWNvbnRyb2xzXCI+XHJcbiAgICAgICAgICAgICAgICA8U2VhcmNoIG9uQ2hhbmdlPXt0aGlzLnNlYXJjaH0gcGxhY2Vob2xkZXI9e2Ake1N0cmluZ3MuQWRkb25zLnNlYXJjaC5mb3JtYXQoe3R5cGU6IHRoaXMucHJvcHMudGl0bGV9KX0uLi5gfSAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1kcm9wZG93bnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPntTdHJpbmdzLlNvcnRpbmcuc29ydEJ5fTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5zb3J0T3B0aW9uc30gb25DaGFuZ2U9e3RoaXMuc29ydH0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj57U3RyaW5ncy5Tb3J0aW5nLm9yZGVyfTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5kaXJlY3Rpb25zfSBvbkNoYW5nZT17dGhpcy5yZXZlcnNlfSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXYga2V5PVwiYWRkb25MaXN0XCIgY2xhc3NOYW1lPXtcImJkLWFkZG9uLWxpc3RcIn0+XHJcbiAgICAgICAgICAgIHtzb3J0ZWRBZGRvbnMubWFwKGFkZG9uID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBhZGRvbi5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgYWRkb24uYXV0aG9yLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgYWRkb24uZGVzY3JpcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzU2V0dGluZ3MgPSBhZGRvbi50eXBlICYmIHR5cGVvZihhZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCkgPT09IFwiZnVuY3Rpb25cIjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdldFNldHRpbmdzID0gaGFzU2V0dGluZ3MgJiYgYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwuYmluZChhZGRvbi5wbHVnaW4pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxFcnJvckJvdW5kYXJ5PjxBZGRvbkNhcmQgZWRpdEFkZG9uPXt0aGlzLmVkaXRBZGRvbi5iaW5kKHRoaXMsIGFkZG9uLmlkKX0gZGVsZXRlQWRkb249e3RoaXMuZGVsZXRlQWRkb24uYmluZCh0aGlzLCBhZGRvbi5pZCl9IHNob3dSZWxvYWRJY29uPXtzaG93UmVsb2FkSWNvbn0ga2V5PXthZGRvbi5pZH0gZW5hYmxlZD17YWRkb25TdGF0ZVthZGRvbi5pZF19IGFkZG9uPXthZGRvbn0gb25DaGFuZ2U9e29uQ2hhbmdlfSByZWxvYWQ9e3JlbG9hZH0gaGFzU2V0dGluZ3M9e2hhc1NldHRpbmdzfSBnZXRTZXR0aW5nc1BhbmVsPXtnZXRTZXR0aW5nc30gLz48L0Vycm9yQm91bmRhcnk+O1xyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0QWRkb24oaWQpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5lZGl0QWRkb24pIHRoaXMucHJvcHMuZWRpdEFkZG9uKGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVBZGRvbihpZCkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbkxpc3QuZmluZChhID0+IGEuaWQgPT0gaWQpO1xyXG4gICAgICAgIGNvbnN0IHNob3VsZERlbGV0ZSA9IGF3YWl0IHRoaXMuY29uZmlybURlbGV0ZShhZGRvbik7XHJcbiAgICAgICAgaWYgKCFzaG91bGREZWxldGUpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5kZWxldGVBZGRvbikgdGhpcy5wcm9wcy5kZWxldGVBZGRvbihhZGRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybURlbGV0ZShhZGRvbikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgTW9kYWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChTdHJpbmdzLk1vZGFscy5jb25maXJtQWN0aW9uLCBTdHJpbmdzLkFkZG9ucy5jb25maXJtRGVsZXRlLmZvcm1hdCh7bmFtZTogYWRkb24ubmFtZX0pLCB7XHJcbiAgICAgICAgICAgICAgICBkYW5nZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogU3RyaW5ncy5BZGRvbnMuZGVsZXRlQWRkb24sXHJcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXHJcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge3Jlc29sdmUoZmFsc2UpO31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/settings/addonlist.jsx\n"); /***/ }), @@ -1023,6 +1083,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), +/***/ "./src/ui/settings/sidebarheader.jsx": +/*!*******************************************!*\ + !*** ./src/ui/settings/sidebarheader.jsx ***! + \*******************************************/ +/*! exports provided: default */ +/***/ (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 SettingsTitle; });\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/* harmony import */ var _icons_history__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/history */ \"./src/ui/icons/history.jsx\");\n/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../modals */ \"./src/ui/modals.js\");\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\nconst SidebarComponents = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.Header && m.Separator && m.Item);\nconst Tooltip = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByDisplayName(\"Tooltip\");\nclass SettingsTitle extends modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"div\", {\n className: \"bd-sidebar-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(SidebarComponents.Header, null, \"BandagedBD\"), modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(Tooltip, {\n color: \"black\",\n position: \"top\",\n text: \"Changelog\"\n }, props => modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"div\", _extends({}, props, {\n className: \"bd-changelog-button\",\n onClick: () => _modals__WEBPACK_IMPORTED_MODULE_3__[\"default\"].showChangelogModal(data__WEBPACK_IMPORTED_MODULE_0__[\"Changelog\"])\n }), modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_icons_history__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"bd-icon\",\n size: \"16px\"\n }))));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL3NpZGViYXJoZWFkZXIuanN4P2E5NWEiXSwibmFtZXMiOlsiU2lkZWJhckNvbXBvbmVudHMiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJIZWFkZXIiLCJTZXBhcmF0b3IiLCJJdGVtIiwiVG9vbHRpcCIsImdldEJ5RGlzcGxheU5hbWUiLCJTZXR0aW5nc1RpdGxlIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwicmVuZGVyIiwiTW9kYWxzIiwic2hvd0NoYW5nZWxvZ01vZGFsIiwiQ2hhbmdlbG9nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsaUJBQWlCLEdBQUdDLHNEQUFjLENBQUNDLFNBQWYsQ0FBeUJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxNQUFGLElBQVlELENBQUMsQ0FBQ0UsU0FBZCxJQUEyQkYsQ0FBQyxDQUFDRyxJQUEzRCxDQUExQjtBQUNBLE1BQU1DLE9BQU8sR0FBR04sc0RBQWMsQ0FBQ08sZ0JBQWYsQ0FBZ0MsU0FBaEMsQ0FBaEI7QUFFZSxNQUFNQyxhQUFOLFNBQTRCQyw2Q0FBSyxDQUFDQyxTQUFsQyxDQUE0QztBQUN2REMsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0g7O0FBRURDLFFBQU0sR0FBRztBQUNMLFdBQU87QUFBSyxlQUFTLEVBQUM7QUFBZixPQUNLLDREQUFDLGlCQUFELENBQW1CLE1BQW5CLHFCQURMLEVBRUssNERBQUMsT0FBRDtBQUFTLFdBQUssRUFBQyxPQUFmO0FBQXVCLGNBQVEsRUFBQyxLQUFoQztBQUFzQyxVQUFJLEVBQUM7QUFBM0MsT0FDS0QsS0FBSyxJQUNGLGdGQUFTQSxLQUFUO0FBQWdCLGVBQVMsRUFBQyxxQkFBMUI7QUFBZ0QsYUFBTyxFQUFFLE1BQU1FLCtDQUFNLENBQUNDLGtCQUFQLENBQTBCQyw4Q0FBMUI7QUFBL0QsUUFDSSw0REFBQyxzREFBRDtBQUFhLGVBQVMsRUFBQyxTQUF2QjtBQUFpQyxVQUFJLEVBQUM7QUFBdEMsTUFESixDQUZSLENBRkwsQ0FBUDtBQVVIOztBQWhCc0QiLCJmaWxlIjoiLi9zcmMvdWkvc2V0dGluZ3Mvc2lkZWJhcmhlYWRlci5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZWxvZ30gZnJvbSBcImRhdGFcIjtcclxuaW1wb3J0IHtSZWFjdCwgV2VicGFja01vZHVsZXN9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBIaXN0b3J5SWNvbiBmcm9tIFwiLi4vaWNvbnMvaGlzdG9yeVwiO1xyXG5pbXBvcnQgTW9kYWxzIGZyb20gXCIuLi9tb2RhbHNcIjtcclxuXHJcbmNvbnN0IFNpZGViYXJDb21wb25lbnRzID0gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5IZWFkZXIgJiYgbS5TZXBhcmF0b3IgJiYgbS5JdGVtKTtcclxuY29uc3QgVG9vbHRpcCA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5RGlzcGxheU5hbWUoXCJUb29sdGlwXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2V0dGluZ3NUaXRsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2lkZWJhci1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8U2lkZWJhckNvbXBvbmVudHMuSGVhZGVyPkJhbmRhZ2VkQkQ8L1NpZGViYXJDb21wb25lbnRzLkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCBjb2xvcj1cImJsYWNrXCIgcG9zaXRpb249XCJ0b3BcIiB0ZXh0PVwiQ2hhbmdlbG9nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcyA9PiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgey4uLnByb3BzfSBjbGFzc05hbWU9XCJiZC1jaGFuZ2Vsb2ctYnV0dG9uXCIgb25DbGljaz17KCkgPT4gTW9kYWxzLnNob3dDaGFuZ2Vsb2dNb2RhbChDaGFuZ2Vsb2cpfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SGlzdG9yeUljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIHNpemU9XCIxNnB4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/settings/sidebarheader.jsx\n"); + +/***/ }), + /***/ "./src/ui/settings/title.jsx": /*!***********************************!*\ !*** ./src/ui/settings/title.jsx ***! @@ -1080,6 +1152,17 @@ eval("module.exports = require(\"fs\");//# sourceURL=[module]\n//# sourceMapping /***/ }), +/***/ "mkdirp": +/*!**************************************!*\ + !*** external "require(\"mkdirp\")" ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("module.exports = require(\"mkdirp\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlL2V4dGVybmFsIFwicmVxdWlyZShcXFwibWtkaXJwXFxcIilcIj9hNTkyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6Im1rZGlycC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1rZGlycFwiKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///mkdirp\n"); + +/***/ }), + /***/ "module": /*!*************************!*\ !*** external "module" ***! @@ -1111,6 +1194,28 @@ eval("module.exports = require(\"path\");//# sourceURL=[module]\n//# sourceMappi eval("module.exports = require(\"request\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlL2V4dGVybmFsIFwicmVxdWlyZShcXFwicmVxdWVzdFxcXCIpXCI/MmM1ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiJyZXF1ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVxdWVzdFwiKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///request\n"); +/***/ }), + +/***/ "rimraf": +/*!**************************************!*\ + !*** external "require(\"rimraf\")" ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("module.exports = require(\"rimraf\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlL2V4dGVybmFsIFwicmVxdWlyZShcXFwicmltcmFmXFxcIilcIj80N2FkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6InJpbXJhZi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJpbXJhZlwiKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///rimraf\n"); + +/***/ }), + +/***/ "yauzl": +/*!*************************************!*\ + !*** external "require(\"yauzl\")" ***! + \*************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +eval("module.exports = require(\"yauzl\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlL2V4dGVybmFsIFwicmVxdWlyZShcXFwieWF1emxcXFwiKVwiPzU5MjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoieWF1emwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ5YXV6bFwiKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///yauzl\n"); + /***/ }) /******/ })["default"]; \ No newline at end of file diff --git a/src/builtins/coloredtext.js b/src/builtins/appearance/coloredtext.js similarity index 95% rename from src/builtins/coloredtext.js rename to src/builtins/appearance/coloredtext.js index 0eaa8530..76da7e32 100644 --- a/src/builtins/coloredtext.js +++ b/src/builtins/appearance/coloredtext.js @@ -1,4 +1,4 @@ -import Builtin from "../structs/builtin"; +import Builtin from "../../structs/builtin"; import {WebpackModules} from "modules"; const MessageContent = WebpackModules.getModule(m => m.default && m.default.displayName && m.default.displayName == "Message"); diff --git a/src/builtins/darkmode.js b/src/builtins/appearance/darkmode.js similarity index 89% rename from src/builtins/darkmode.js rename to src/builtins/appearance/darkmode.js index 3fcc5e26..a8940f47 100644 --- a/src/builtins/darkmode.js +++ b/src/builtins/appearance/darkmode.js @@ -1,4 +1,4 @@ -import Builtin from "../structs/builtin"; +import Builtin from "../../structs/builtin"; export default new class DarkMode extends Builtin { get name() {return "DarkMode";} diff --git a/src/builtins/minimalmode.js b/src/builtins/appearance/minimalmode.js similarity index 95% rename from src/builtins/minimalmode.js rename to src/builtins/appearance/minimalmode.js index da0075b6..c15b812b 100644 --- a/src/builtins/minimalmode.js +++ b/src/builtins/appearance/minimalmode.js @@ -1,4 +1,4 @@ -import Builtin from "../structs/builtin"; +import Builtin from "../../structs/builtin"; export default new class MinimalMode extends Builtin { get name() {return "MinimalMode";} diff --git a/src/builtins/voicemode.js b/src/builtins/appearance/voicemode.js similarity index 94% rename from src/builtins/voicemode.js rename to src/builtins/appearance/voicemode.js index 5ce33dc7..d892ae22 100644 --- a/src/builtins/voicemode.js +++ b/src/builtins/appearance/voicemode.js @@ -1,4 +1,4 @@ -import Builtin from "../structs/builtin"; +import Builtin from "../../structs/builtin"; export default new class VoiceMode extends Builtin { get name() {return "VoiceMode";} diff --git a/src/builtins/builtins.js b/src/builtins/builtins.js index 51f7f2d0..744bfdcd 100644 --- a/src/builtins/builtins.js +++ b/src/builtins/builtins.js @@ -1,16 +1,22 @@ // Export these two first because they add settings/panels -export {default as EmoteModule} from "./emotes"; -export {default as CustomCSS} from "./customcss"; -export {default as VoiceMode} from "./voicemode"; -export {default as ClassNormalizer} from "./classnormalizer"; -export {default as DeveloperMode} from "./developermode"; -export {default as PublicServers} from "./publicservers"; -export {default as DarkMode} from "./darkmode"; -export {default as MinimalMode} from "./minimalmode"; -export {default as TwentyFourHour} from "./24hour"; -export {default as ColoredText} from "./coloredtext"; -export {default as VoiceDisconnect} from "./voicedisconnect"; -export {default as EmoteMenu} from "./emotemenu"; -export {default as EmoteAutocaps} from "./emoteautocaps"; -export {default as WindowPrefs} from "./windowprefs"; \ No newline at end of file +export {default as CustomCSS} from "./customcss"; +export {default as WindowPrefs} from "./windowprefs"; + +export {default as TwentyFourHour} from "./general/24hour"; +export {default as ClassNormalizer} from "./general/classnormalizer"; +export {default as PublicServers} from "./general/publicservers"; +export {default as VoiceDisconnect} from "./general/voicedisconnect"; + +export {default as ColoredText} from "./appearance/coloredtext"; +export {default as DarkMode} from "./appearance/darkmode"; +export {default as MinimalMode} from "./appearance/minimalmode"; +export {default as VoiceMode} from "./appearance/voicemode"; + +export {default as EmoteModule} from "./emotes/emotes"; +export {default as EmoteMenu} from "./emotes/emotemenu"; +export {default as EmoteAutocaps} from "./emotes/emoteautocaps"; + +export {default as CopySelector} from "./developer/copyselector"; +export {default as Debugger} from "./developer/debugger"; +export {default as ReactDevTools} from "./developer/reactdevtools"; \ No newline at end of file diff --git a/src/builtins/developer/copyselector.js b/src/builtins/developer/copyselector.js new file mode 100644 index 00000000..953eb8a4 --- /dev/null +++ b/src/builtins/developer/copyselector.js @@ -0,0 +1,80 @@ +import Builtin from "../../structs/builtin"; +import {DOM, DiscordModules} from "modules"; + +export default new class DeveloperMode extends Builtin { + get name() {return "DeveloperMode";} + get category() {return "developer";} + get id() {return "developerMode";} + get selectorModeID() {return "copySelector";} + get selectorMode() {return this.get(this.selectorModeID);} + + constructor() { + super(); + this.copySelectorListener = this.copySelectorListener.bind(this); + } + + enabled() { + document.addEventListener("contextmenu", this.copySelectorListener); + } + + disabled() { + document.removeEventListener("contextmenu", this.copySelectorListener); + } + + copySelectorListener(ctxEvent) { + ctxEvent.stopPropagation(); + const selector = this.getSelector(ctxEvent.target); + function attach() { + let cm = DOM.query(".contextMenu-HLZMGh"); + if (!cm) { + const container = DOM.query("#app-mount"); + const cmWrap = DOM.createElement(`
`); + cm = DOM.createElement(`
`); + cmWrap.append(cm); + container.append(cmWrap); + cmWrap.style.top = ctxEvent.clientY + "px"; + cmWrap.style.left = ctxEvent.clientX + "px"; + cmWrap.style.zIndex = "1002"; + const removeCM = function(removeEvent) { + if (removeEvent.keyCode && removeEvent.keyCode !== 27) return; + cmWrap.remove(); + document.removeEventListener("click", removeCM); + document.removeEventListener("contextmenu", removeCM); + document.removeEventListener("keyup", removeCM); + }; + document.addEventListener("click", removeCM); + document.addEventListener("contextmenu", removeCM); + document.addEventListener("keyup", removeCM); + } + + const cmg = DOM.createElement(`
`); + const cmi = DOM.createElement(`
`); + cmi.append(DOM.createElement(`
Copy Selector
`)); + cmi.addEventListener("click", () => { + DiscordModules.ElectronModule.copy(selector); + cm.style.display = "none"; + }); + cmg.append(cmi); + cm.append(cmg); + } + + setImmediate(attach); + } + + getSelector(element) { + if (element.id) return `#${element.id}`; + const rules = this.getRules(element); + const latestRule = rules[rules.length - 1]; + if (latestRule) return latestRule.selectorText; + else if (element.classList.length) return `.${Array.from(element.classList).join(".")}`; + return `.${Array.from(element.parentElement.classList).join(".")}`; + } + + getRules(element, css = element.ownerDocument.styleSheets) { + //if (window.getMatchedCSSRules) return window.getMatchedCSSRules(element); + const sheets = [...css].filter(s => !s.href || !s.href.includes("BetterDiscordApp")); + const rules = sheets.map(s => [...(s.cssRules || [])]).flat(); + const elementRules = rules.filter(r => r && r.selectorText && element.matches(r.selectorText) && r.style.length && r.selectorText.split(", ").length < 8 && !r.selectorText.split(", ").includes("*")); + return elementRules; + } +}; \ No newline at end of file diff --git a/src/builtins/developer/debugger.js b/src/builtins/developer/debugger.js new file mode 100644 index 00000000..35acc21b --- /dev/null +++ b/src/builtins/developer/debugger.js @@ -0,0 +1,23 @@ +import Builtin from "../../structs/builtin"; + +export default new class DeveloperMode extends Builtin { + get name() {return "Debugger";} + get category() {return "developer";} + get id() {return "debuggerHotkey";} + + enabled() { + document.addEventListener("keydown", this.debugListener); + } + + disabled() { + document.removeEventListener("keydown", this.debugListener); + } + + debugListener(e) { + if (e.which === 119 || e.which == 118) { //F8 + debugger; // eslint-disable-line no-debugger + e.preventDefault(); + e.stopImmediatePropagation(); + } + } +}; \ No newline at end of file diff --git a/src/builtins/developer/reactdevtools.js b/src/builtins/developer/reactdevtools.js new file mode 100644 index 00000000..ddcdb4e7 --- /dev/null +++ b/src/builtins/developer/reactdevtools.js @@ -0,0 +1,57 @@ +import Builtin from "../../structs/builtin"; +import Modals from "../../ui/modals"; + + +const electron = require("electron"); +const fs = require("fs"); +const path = require("path"); + +const BrowserWindow = electron.remote.BrowserWindow; +const webContents = electron.remote.getCurrentWebContents(); + +export default new class ReactDevTools extends Builtin { + get name() {return "ReactDevTools";} + get category() {return "developer";} + get id() {return "reactDevTools";} + + initialize() { + super.initialize(); + this.findExtension(); + } + + findExtension() { + let extensionPath = ""; + if (process.platform === "win32") extensionPath = path.resolve(process.env.LOCALAPPDATA, "Google/Chrome/User Data"); + else if (process.platform === "linux") extensionPath = path.resolve(process.env.HOME, ".config/google-chrome"); + else if (process.platform === "darwin") extensionPath = path.resolve(process.env.HOME, "Library/Application Support/Google/Chrome"); + else extensionPath = path.resolve(process.env.HOME, ".config/chromium"); + extensionPath += "/Default/Extensions/fmkadmapgofadopljbjfkapdkoienihi/"; + if (fs.existsSync(extensionPath)) { + const versions = fs.readdirSync(extensionPath); + extensionPath = path.resolve(extensionPath, versions[versions.length - 1]); + } + this.extensionPath = extensionPath; + this.isExtensionInstalled = fs.existsSync(extensionPath); + this.listener = this.listener.bind(this); + } + + enabled() { + if (!this.isExtensionInstalled) this.findExtension(); + if (!this.isExtensionInstalled) return Modals.alert("Extension Not Found", "Unable to find the React Developer Tools extension on your PC. Please install the extension on your local Chrome installation."); + setImmediate(() => webContents.on("devtools-opened", this.listener)); + if (webContents.isDevToolsOpened()) this.listener(); + } + + disabled() { + webContents.removeListener("devtools-opened", this.listener); + } + + listener() { + if (!this.isExtensionInstalled) return; + BrowserWindow.removeDevToolsExtension("React Developer Tools"); + const didInstall = BrowserWindow.addDevToolsExtension(this.extensionPath); + + if (didInstall) this.log("Successfully installed react devtools."); + else this.error("Couldn't find react devtools in chrome extensions!"); + } +}; \ No newline at end of file diff --git a/src/builtins/developermode.js b/src/builtins/developermode.js deleted file mode 100644 index 0c0cc584..00000000 --- a/src/builtins/developermode.js +++ /dev/null @@ -1,103 +0,0 @@ -import Builtin from "../structs/builtin"; -import {DiscordModules, Strings} from "modules"; - -export default new class DeveloperMode extends Builtin { - get name() {return "DeveloperMode";} - get category() {return "developer";} - get id() {return "developerMode";} - get selectorModeID() {return "copySelector";} - get selectorMode() {return this.get(this.selectorModeID);} - - constructor() { - super(); - this.enableSelectors = this.enableSelectors.bind(this); - this.disableSelectors = this.disableSelectors.bind(this); - } - - enabled() { - $(document).on("keydown.bdDevmode", (e) => { - if (e.which === 119 || e.which == 118) {//F8 - this.log("Debugger Activated"); - debugger; // eslint-disable-line no-debugger - } - }); - if (this.selectorMode) this.enableSelectors(); - this.selectorCancel = this.registerSetting(this.selectorModeID, this.enableSelectors, this.disableSelectors); - } - - disabled() { - $(document).off("keydown.bdDevmode"); - if (this.selectorMode) this.disableSelectors(); - if (this.selectorCancel) this.selectorCancel(); - } - - enableSelectors() { - $(document).on("contextmenu.bdDevmode", (e) => { - this.lastSelector = this.getSelector(e.toElement); - - const attach = () => { - let cm = $(".contextMenu-HLZMGh"); - if (cm.length <= 0) { - cm = $("
"); - cm.addClass($(".app, .app-2rEoOp").hasClass("theme-dark") ? "theme-dark" : "theme-light"); - cm.appendTo(".app, .app-2rEoOp"); - cm.css("top", e.clientY); - cm.css("left", e.clientX); - $(document).on("click.bdDevModeCtx", () => { - cm.remove(); - $(document).off(".bdDevModeCtx"); - }); - $(document).on("contextmenu.bdDevModeCtx", () => { - cm.remove(); - $(document).off(".bdDevModeCtx"); - }); - $(document).on("keyup.bdDevModeCtx", (event) => { - if (event.keyCode === 27) { - cm.remove(); - $(document).off(".bdDevModeCtx"); - } - }); - } - - const cmo = $("
", { - "class": "itemGroup-1tL0uz" - }); - const cmi = $("
", { - "class": "item-1Yvehc", - "click": () => { - DiscordModules.ElectronModule.copy(this.lastSelector); - cm.hide(); - } - }).append($("", {text: Strings.Collections.settings.developer.copySelector.name})); - cmo.append(cmi); - cm.append(cmo); - if (cm.hasClass("undefined")) cm.css("top", "-=" + cmo.outerHeight()); - }; - - setImmediate(attach); - e.stopPropagation(); - }); - } - - disableSelectors() { - $(document).off("contextmenu.bdDevmode"); - $(document).off("contextmenu.bdDevModeCtx"); - } - - getRules(element, css = element.ownerDocument.styleSheets) { - // return [].concat(...[...css].map(s => [...s.cssRules || []])).filter(r => r && r.selectorText && element.matches(r.selectorText) && r.style.length && r.selectorText.split(", ").length < 8); - const sheets = [...css].filter(s => !s.href || !s.href.includes("BetterDiscordApp")); - const rules = sheets.map(s => [...(s.cssRules || [])]).flat(); - const elementRules = rules.filter(r => r && r.selectorText && element.matches(r.selectorText) && r.style.length && r.selectorText.split(", ").length < 8 && !r.selectorText.split(", ").includes("*")); - return elementRules; - } - - getSelector(element) { - if (element.id) return `#${element.id}`; - const rules = this.getRules(element); - const latestRule = rules[rules.length - 1]; - if (latestRule) return latestRule.selectorText; - else if (element.classList.length) return `.${Array.from(element.classList).join(".")}`; - return `.${Array.from(element.parentElement.classList).join(".")}`; - } -}; \ No newline at end of file diff --git a/src/builtins/emoteautocaps.js b/src/builtins/emotes/emoteautocaps.js similarity index 96% rename from src/builtins/emoteautocaps.js rename to src/builtins/emotes/emoteautocaps.js index 8683c509..c628d281 100644 --- a/src/builtins/emoteautocaps.js +++ b/src/builtins/emotes/emoteautocaps.js @@ -1,4 +1,4 @@ -import Builtin from "../structs/builtin"; +import Builtin from "../../structs/builtin"; import {Utilities} from "modules"; diff --git a/src/builtins/emotemenu.js b/src/builtins/emotes/emotemenu.js similarity index 99% rename from src/builtins/emotemenu.js rename to src/builtins/emotes/emotemenu.js index 6c641cd0..90060e58 100644 --- a/src/builtins/emotemenu.js +++ b/src/builtins/emotes/emotemenu.js @@ -1,4 +1,4 @@ -import Builtin from "../structs/builtin"; +import Builtin from "../../structs/builtin"; import {Utilities, Events} from "modules"; import EmoteModule from "./emotes"; diff --git a/src/builtins/emotes.js b/src/builtins/emotes/emotes.js similarity index 97% rename from src/builtins/emotes.js rename to src/builtins/emotes/emotes.js index 8021b733..81b10476 100644 --- a/src/builtins/emotes.js +++ b/src/builtins/emotes/emotes.js @@ -1,10 +1,10 @@ -import Builtin from "../structs/builtin"; +import Builtin from "../../structs/builtin"; import {EmoteConfig} from "data"; import {Utilities, WebpackModules, DataStore, DiscordModules, Events, Settings, Strings} from "modules"; -import BDEmote from "../ui/emote"; -import Toasts from "../ui/toasts"; -import FormattableString from "../structs/string"; +import BDEmote from "../../ui/emote"; +import Toasts from "../../ui/toasts"; +import FormattableString from "../../structs/string"; const request = require("request"); const EmoteURLs = { @@ -53,7 +53,6 @@ export default new class EmoteModule extends Builtin { initialize() { super.initialize(); - window.emoteModule = this; const storedFavorites = DataStore.getBDData("favoriteEmotes"); this.favoriteEmotes = storedFavorites || {}; this.addFavorite = this.addFavorite.bind(this); @@ -67,15 +66,12 @@ 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(); 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); diff --git a/src/builtins/24hour.js b/src/builtins/general/24hour.js similarity index 95% rename from src/builtins/24hour.js rename to src/builtins/general/24hour.js index 421343c9..ec4e86f3 100644 --- a/src/builtins/24hour.js +++ b/src/builtins/general/24hour.js @@ -1,4 +1,4 @@ -import Builtin from "../structs/builtin"; +import Builtin from "../../structs/builtin"; import {DiscordModules} from "modules"; export default new class TwentyFourHour extends Builtin { diff --git a/src/builtins/classnormalizer.js b/src/builtins/general/classnormalizer.js similarity index 85% rename from src/builtins/classnormalizer.js rename to src/builtins/general/classnormalizer.js index 1af11a88..3e81269d 100644 --- a/src/builtins/classnormalizer.js +++ b/src/builtins/general/classnormalizer.js @@ -1,4 +1,4 @@ -import Builtin from "../structs/builtin"; +import Builtin from "../../structs/builtin"; import {WebpackModules} from "modules"; const normalizedPrefix = "da"; @@ -115,8 +115,25 @@ export default new class ClassNormalizer extends Builtin { patchDOMMethods() { const contains = DOMTokenList.prototype.contains; DOMTokenList.prototype.contains = function(token) { - const tokens = token.split(" "); - return tokens.every(t => contains.call(this, t)); + // const tokens = token.split(" "); + return Reflect.apply(contains, this, [token.split(" ")[0]]); + // return tokens.every(t => contains.call(this, t)); + }; + + const add = DOMTokenList.prototype.add; + DOMTokenList.prototype.add = function(...tokens) { + for (let t = 0; t < tokens.length; t++) { + tokens[t] = tokens[t].split(" ")[0]; + } + return Reflect.apply(add, this, tokens); + }; + + const remove = DOMTokenList.prototype.remove; + DOMTokenList.prototype.remove = function(...tokens) { + for (let t = 0; t < tokens.length; t++) { + tokens[t] = tokens[t].split(" ")[0]; + } + return Reflect.apply(remove, this, tokens); }; } diff --git a/src/builtins/general/publicservers.js b/src/builtins/general/publicservers.js new file mode 100644 index 00000000..8aeb7c5c --- /dev/null +++ b/src/builtins/general/publicservers.js @@ -0,0 +1,54 @@ +import Builtin from "../../structs/builtin"; +import {DiscordModules, WebpackModules, Strings, DOM} from "modules"; +import PublicServersMenu from "../../ui/publicservers/menu"; + +const LayerStack = WebpackModules.getByProps("pushLayer"); + +export default new class PublicServers extends Builtin { + get name() {return "PublicServers";} + get category() {return "general";} + get id() {return "publicServers";} + + enabled() { + const GuildList = WebpackModules.find(m => m.default && m.default.displayName == "NavigableGuilds"); + const GuildListOld = WebpackModules.findByDisplayName("Guilds"); + if (!GuildList && !GuildListOld) this.warn("Can't find GuildList component"); + this.guildPatch = this.after(GuildList ? GuildList : GuildListOld.prototype, GuildList ? "default" : "render", this._appendButton); + this._appendButton(); + } + + disabled() { + this.unpatchAll(); + DOM.query("#bd-pub-li").remove(); + } + + _appendButton() { + const wrapper = DiscordModules.GuildClasses.wrapper.split(" ")[0]; + const guilds = DOM.query(`.${wrapper} .scroller-2TZvBN >:first-child`); + DOM.after(guilds, this.button); + } + + openPublicServers() { + LayerStack.pushLayer(() => DiscordModules.React.createElement(PublicServersMenu, {close: LayerStack.popLayer})); + } + + get button() { + const btn = DOM.createElement(`
`); + const label = DOM.createElement(`
${Strings.PublicServers.button}
`); + label.addEventListener("click", () => {this.openPublicServers();}); + btn.append(label); + return btn; + + // const btn = $("
", { + // "class": DiscordModules.GuildClasses.listItem, + // "id": "bd-pub-li" + // }).append($("
", { + // "class": "wrapper-25eVIn " + DiscordModules.GuildClasses.circleButtonMask, + // "text": Strings.PublicServers.button, + // "id": "bd-pub-button", + // "click": () => { this.openPublicServers(); } + // })); + + // return btn; + } +}; \ No newline at end of file diff --git a/src/builtins/voicedisconnect.js b/src/builtins/general/voicedisconnect.js similarity index 92% rename from src/builtins/voicedisconnect.js rename to src/builtins/general/voicedisconnect.js index 60d6ae40..0337b2d3 100644 --- a/src/builtins/voicedisconnect.js +++ b/src/builtins/general/voicedisconnect.js @@ -1,4 +1,4 @@ -import Builtin from "../structs/builtin"; +import Builtin from "../../structs/builtin"; import {DiscordModules} from "modules"; export default new class DarkMode extends Builtin { diff --git a/src/builtins/publicservers.js b/src/builtins/publicservers.js deleted file mode 100644 index 4485ef27..00000000 --- a/src/builtins/publicservers.js +++ /dev/null @@ -1,39 +0,0 @@ -import Builtin from "../structs/builtin"; -import {DiscordModules, WebpackModules, Strings} from "modules"; -import PublicServersMenu from "../ui/publicservers/menu"; - -const LayerStack = WebpackModules.getByProps("pushLayer"); - -export default new class PublicServers extends Builtin { - get name() {return "PublicServers";} - get category() {return "general";} - get id() {return "publicServers";} - - enabled() { - const wrapper = DiscordModules.GuildClasses.wrapper.split(" ")[0]; - const guilds = $(`.${wrapper} .scroller-2FKFPG >:first-child`); - guilds.after(this.button); - } - - disabled() { - $("#bd-pub-li").remove(); - } - - openPublicServers() { - LayerStack.pushLayer(() => DiscordModules.React.createElement(PublicServersMenu, {close: LayerStack.popLayer})); - } - - get button() { - const btn = $("
", { - "class": DiscordModules.GuildClasses.listItem, - "id": "bd-pub-li" - }).append($("
", { - "class": "wrapper-25eVIn " + DiscordModules.GuildClasses.circleButtonMask, - "text": Strings.PublicServers.button, - "id": "bd-pub-button", - "click": () => { this.openPublicServers(); } - })); - - return btn; - } -}; \ No newline at end of file diff --git a/src/builtins/windowprefs.js b/src/builtins/windowprefs.js index 32aed9db..97c3ca1d 100644 --- a/src/builtins/windowprefs.js +++ b/src/builtins/windowprefs.js @@ -1,50 +1,52 @@ import Builtin from "../structs/builtin"; - -const fs = require("fs"); -const path = require("path"); +import Modals from "../ui/modals"; +import {DataStore, Strings} from "modules"; export default new class WindowPrefs extends Builtin { get name() {return "WindowPrefs";} get category() {return "window";} get id() {return "transparency";} - get WindowConfigFile() { - if (this._windowConfigFile) return this._windowConfigFile; - const electron = require("electron").remote.app; - const base = electron.getAppPath(); - const roamingBase = electron.getPath("userData"); - const roamingLocation = path.resolve(roamingBase, electron.getVersion(), "modules", "discord_desktop_core", "injector", "config.json"); - const location = path.resolve(base, "..", "app", "config.json"); - const realLocation = fs.existsSync(location) ? location : fs.existsSync(roamingLocation) ? roamingLocation : null; - if (!realLocation) return this._windowConfigFile = null; - return this._windowConfigFile = realLocation; + initialize() { + super.initialize(); + this.prefs = DataStore.getData("windowprefs") || {}; } enabled() { this.setWindowPreference("transparent", true); - this.setWindowPreference("backgroundColor", null); + this.setWindowPreference("backgroundColor", "#00000000"); + this.showModal(Strings.WindowPrefs.enabledInfo); } disabled() { - this.setWindowPreference("transparent", false); - this.setWindowPreference("backgroundColor", "#2f3136"); + this.deleteWindowPreference("transparent"); + this.deleteWindowPreference("backgroundColor"); + this.showModal(Strings.WindowPrefs.disabledInfo); } - getAllWindowPreferences() { - if (!this.WindowConfigFile) return {}; - return __non_webpack_require__(this.WindowConfigFile); + showModal(info) { + Modals.showConfirmationModal(Strings.Modals.additionalInfo, info, { + confirmText: Strings.Modals.restartNow, + cancelText: Strings.Modals.restartLater, + onConfirm: () => { + const app = require("electron").remote.app; + app.relaunch(); + app.exit(); + } + }); } getWindowPreference(key) { - if (!this.WindowConfigFile) return undefined; - return this.getAllWindowPreferences()[key]; + return this.prefs[key]; } setWindowPreference(key, value) { - if (!this.WindowConfigFile) return; - const prefs = this.getAllWindowPreferences(); - prefs[key] = value; - delete require.cache[this.WindowConfigFile]; - fs.writeFileSync(this.WindowConfigFile, JSON.stringify(prefs, null, 4)); + this.prefs[key] = value; + DataStore.setData("windowprefs", this.prefs); + } + + deleteWindowPreference(key) { + delete this.prefs[key]; + DataStore.setData("windowprefs", this.prefs); } }; \ No newline at end of file diff --git a/src/data/settings/config.js b/src/data/settings/config.js index de3d55e1..738c71f7 100644 --- a/src/data/settings/config.js +++ b/src/data/settings/config.js @@ -53,8 +53,9 @@ export default [ collapsible: true, shown: false, settings: [ - {type: "switch", id: "developerMode", value: false}, - {type: "switch", id: "copySelector", value: false, enableWith: "developerMode"} + {type: "switch", id: "debuggerHotkey", value: false}, + {type: "switch", id: "copySelector", value: false}, + {type: "switch", id: "reactDevTools", value: false} ] }, { diff --git a/src/data/strings.js b/src/data/strings.js index ec3eca22..a727b9aa 100644 --- a/src/data/strings.js +++ b/src/data/strings.js @@ -110,13 +110,17 @@ export default { }, developer: { name: "Developer Settings", - developerMode: { - name: "Developer Mode", + debuggerHotkey: { + name: "Debugger Hotkey", note: "Allows activating debugger when pressing F8" }, copySelector: { name: "Copy Selector", note: "Adds a \"Copy Selector\" option to context menus when developer mode is active" + }, + reactDevTools: { + name: "React Developer Tools", + note: "Injects your local installation of React Developer Tools into Discord" } }, window: { @@ -192,8 +196,9 @@ export default { addonSettings: "Settings", website: "Website", source: "Source", - server: "Support Server", + invite: "Support Server", donate: "Donate", + patreon: "Patreon", name: "Name", author: "Author", version: "Version", @@ -244,12 +249,31 @@ export default { name: "Name", message: "Message", error: "Error", - addonErrors: "Addon Errors" + addonErrors: "Addon Errors", + restartRequired: "Restart Required", + restartNow: "Restart Now", + restartLater: "Restart Later", + additionalInfo: "Additional Info" }, Sorting: { sortBy: "Sort By", order: "Order", ascending: "Ascending", descending: "Descending" + }, + WindowPrefs: { + enabledInfo: "This option requires a transparent theme in order to work properly. On Windows this may break your aero snapping and maximizing.\n\nIn order to take effect, Discord needs to be restarted. Do you want to restart now?", + disabledInfo: "In order to take effect, Discord needs to be restarted. Do you want to restart now?" + }, + Startup: { + notSupported: "Not Supported", + versionMismatch: "BandagedBD Injector v{{injector}} is not supported by the latest remote (v{{remote}}).\n\nPlease download the latest version from [GitHub](https://github.com/rauenzi/BetterDiscordApp/releases/latest)", + incompatibleApp: "BandagedBD does not work with {{app}}. Please uninstall one of them.", + updateNow: "Update Now", + maybeLater: "Maybe Later", + updateAvailable: "Update Available", + updateInfo: "There is an update available for BandagedBD's Injector ({{version}}).\n\nYou can either update and restart now, or later.", + updateFailed: "Could Not Update", + manualUpdate: "Unable to update automatically, please download the installer and reinstall normally.\n\n[Download Installer](https://github.com/rauenzi/BetterDiscordApp/releases/latest)" } }; diff --git a/src/index.js b/src/index.js index ec36a918..9d92b101 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,5 @@ import {Config} from "data"; +import secure from "./secure"; import Core from "./modules/core"; import BdApi from "./modules/pluginapi"; import PluginManager from "./modules/pluginmanager"; @@ -6,14 +7,15 @@ import ThemeManager from "./modules/thememanager"; import Events from "./modules/emitter"; import Settings from "./modules/settingsmanager"; import DataStore from "./modules/datastore"; -import EmoteModule from "./builtins/emotes"; +import EmoteModule from "./builtins/emotes/emotes"; import DomManager from "./modules/dommanager"; import Utilities from "./modules/utilities"; import ReactComponents from "./modules/reactcomponents"; import Strings from "./modules/strings"; // Perform some setup -// proxyLocalStorage(); +secure(); + const loadingIcon = document.createElement("div"); loadingIcon.className = "bd-loaderv2"; loadingIcon.title = "BandagedBD is loading..."; diff --git a/src/modules/componentpatcher.js b/src/modules/componentpatcher.js index 1590c753..e3223b47 100644 --- a/src/modules/componentpatcher.js +++ b/src/modules/componentpatcher.js @@ -5,6 +5,9 @@ import Utilities from "./utilities"; import Patcher from "./patcher"; import BDLogo from "../ui/icons/bdlogo"; +const React = DiscordModules.React; +const Tooltip = WebpackModules.getByDisplayName("Tooltip"); + export default new class ComponentPatcher { initialize() { @@ -12,29 +15,11 @@ export default new class ComponentPatcher { Utilities.suppressErrors(this.patchGuildPills.bind(this), "BD Guild Pills Patch")(); Utilities.suppressErrors(this.patchGuildListItems.bind(this), "BD Guild List Items Patch")(); Utilities.suppressErrors(this.patchGuildSeparator.bind(this), "BD Guild Separator Patch")(); + Utilities.suppressErrors(this.patchMessageHeader.bind(this), "BD Message Header Patch")(); + Utilities.suppressErrors(this.patchMemberList.bind(this), "BD Member List Patch")(); } patchSocial() { - if (this.socialPatch) return; - // const TabBar = WebpackModules.getByDisplayName("TabBar"); - // const Anchor = WebpackModules.getByDisplayName("Anchor"); - // if (!TabBar || !Anchor) return; - // this.socialPatch = Patcher.after("ThemeHelper", TabBar.prototype, "render", (_, __, returnValue) => { - // const children = returnValue.props.children; - // if (!children || !children.length) return; - // if (children[children.length - 2].type.displayName !== "Separator") return; - // if (!children[children.length - 1].type.toString().includes("socialLinks")) return; - // const original = children[children.length - 1].type; - // const newOne = function() { - // const returnVal = original(...arguments); - // returnVal.props.children.push(DiscordModules.React.createElement(Anchor, {className: "bd-social-link", href: "https://github.com/rauenzi/BetterDiscordApp", rel: "author", title: "BandagedBD", target: "_blank"}, - // DiscordModules.React.createElement(BDLogo, {size: "16px", className: "bd-social-logo"}) - // )); - // return returnVal; - // }; - // children[children.length - 1].type = newOne; - // }); - if (this.socialPatch) return; const TabBar = WebpackModules.getByDisplayName("TabBar"); const Anchor = WebpackModules.getByDisplayName("Anchor"); @@ -49,11 +34,9 @@ export default new class ComponentPatcher { const newOne = function() { const returnVal = original(...arguments); returnVal.props.children.push( - // DiscordModules.React.createElement(TooltipWrap, {color: "black", side: "top", text: "BandagedBD"}, - DiscordModules.React.createElement(Anchor, {className: "bd-social-link", href: "https://github.com/rauenzi/BetterDiscordApp", title: "BandagedBD", target: "_blank"}, - DiscordModules.React.createElement(BDLogo, {size: "16px", className: "bd-social-logo"}) - ) - // ) + DiscordModules.React.createElement(Anchor, {className: "bd-social-link", href: "https://twitter.com/BandagedBD", title: "BandagedBD", target: "_blank"}, + DiscordModules.React.createElement(BDLogo, {size: "16px", className: "bd-social-logo"}) + ) ); return returnVal; }; @@ -82,7 +65,7 @@ export default new class ComponentPatcher { const reactInstance = Utilities.getReactInstance(document.querySelector(`.${listItemClass} .${blobClass}`).parentElement); const GuildComponent = reactInstance.return.type; if (!GuildComponent) return; - this.guildListItemsPatch = Patcher.after("ThemeHelper", GuildComponent.prototype, "render", (thisObject, _, returnValue) => { + this.guildListItemsPatch = Patcher.after("ComponentPatcher", GuildComponent.prototype, "render", (thisObject, _, returnValue) => { if (!returnValue || !thisObject) return; const guildData = thisObject.props; returnValue.props.className += " bd-guild"; @@ -100,7 +83,7 @@ export default new class ComponentPatcher { if (this.guildPillPatch) return; const guildPill = WebpackModules.getModule(m => m.default && !m.default.displayName && m.default.toString && m.default.toString().includes("translate3d")); if (!guildPill) return; - this.guildPillPatch = Patcher.after("ThemeHelper", guildPill, "default", (_, args, returnValue) => { + this.guildPillPatch = Patcher.after("ComponentPatcher", guildPill, "default", (_, args, returnValue) => { const props = args[0]; if (props.unread) returnValue.props.className += " bd-unread"; if (props.selected) returnValue.props.className += " bd-selected"; @@ -119,11 +102,51 @@ export default new class ComponentPatcher { returnValue.props.className += " bd-guild-separator"; return returnValue; }; - this.guildSeparatorPatch = Patcher.after("ThemeHelper", Guilds.prototype, "render", (_, __, returnValue) => { + this.guildSeparatorPatch = Patcher.after("ComponentPatcher", Guilds.prototype, "render", (_, __, returnValue) => { const Separator = Utilities.findInReactTree(returnValue, m => m.type && !m.type.displayName && typeof(m.type) == "function" && Utilities.isEmpty(m.props)); if (!Separator) return; Separator.type = GuildSeparator; }); } + patchMessageHeader() { + if (this.messageHeaderPatch) return; + const MessageHeader = WebpackModules.getByProps("MessageTimestamp"); + const Anchor = WebpackModules.find(m => m.displayName == "Anchor"); + if (!Anchor || !MessageHeader || !MessageHeader.default) return; + this.messageHeaderPatch = Patcher.after("ComponentPatcher", MessageHeader, "default", (_, args, returnValue) => { + const author = Utilities.getNestedProp(args[0], "message.author"); + const children = Utilities.getNestedProp(returnValue, "props.children.1.props.children.1.props.children"); + if (!children || !author || !author.id || author.id !== "249746236008169473") return; + if (!Array.isArray(children)) return; + children.push( + React.createElement(Tooltip, {color: "black", position: "top", text: "BandagedBD Developer"}, + props => React.createElement(Anchor, Object.assign({className: "bd-chat-badge", href: "https://github.com/rauenzi/BetterDiscordApp", title: "BandagedBD", target: "_blank"}, props), + React.createElement(BDLogo, {size: "16px", className: "bd-logo"}) + ) + ) + ); + }); + } + + patchMemberList() { + if (this.memberListPatch) return; + const MemberListItem = WebpackModules.findByDisplayName("MemberListItem"); + const Anchor = WebpackModules.find(m => m.displayName == "Anchor"); + if (!Anchor || !MemberListItem || !MemberListItem.prototype || !MemberListItem.prototype.renderDecorators) return; + this.memberListPatch = Patcher.after("ComponentPatcher", MemberListItem.prototype, "renderDecorators", (thisObject, args, returnValue) => { + const user = Utilities.getNestedProp(thisObject, "props.user"); + const children = Utilities.getNestedProp(returnValue, "props.children"); + if (!children || !user || !user.id || user.id !== "249746236008169473") return; + if (!Array.isArray(children)) return; + children.push( + React.createElement(Tooltip, {color: "black", position: "top", text: "BandagedBD Developer"}, + props => React.createElement(Anchor, Object.assign({className: "bd-member-badge", href: "https://github.com/rauenzi/BetterDiscordApp", title: "BandagedBD", target: "_blank"}, props), + React.createElement(BDLogo, {size: "16px", className: "bd-logo"}) + ) + ) + ); + }); + } + }; \ No newline at end of file diff --git a/src/modules/core.js b/src/modules/core.js index 93707f6f..49e0db5c 100644 --- a/src/modules/core.js +++ b/src/modules/core.js @@ -1,7 +1,7 @@ import LocaleManager from "./localemanager"; import Logger from "./logger"; -import {Config} from "data"; +import {Config, Changelog} from "data"; // import EmoteModule from "./emotes"; // import QuickEmoteMenu from "../builtins/emotemenu"; import DOMManager from "./dommanager"; @@ -14,6 +14,7 @@ import ReactComponents from "./reactcomponents"; import DataStore from "./datastore"; import DiscordModules from "./discordmodules"; import ComponentPatcher from "./componentpatcher"; +import Strings from "./strings"; const GuildClasses = DiscordModules.GuildClasses; @@ -26,31 +27,47 @@ Core.prototype.setConfig = function(config) { }; Core.prototype.init = async function() { - if (Config.version < Config.minSupportedVersion) { - 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", ` - // An update for BandagedBD is available (${latestLocalVersion})! Please Reinstall!

- // Download Installer - // `); - // } DataStore.initialize(); await LocaleManager.initialize(); + if (Config.version < Config.minSupportedVersion) { + return Modals.alert(Strings.Startup.notSupported, Strings.Startup.versionMismatch.format({injector: Config.version, remote: Config.bbdVersion})); + } + + if (window.ED) { + return Modals.alert(Strings.Startup.notSupported, Strings.Startup.incompatibleApp.format({app: "EnhancedDiscord"})); + } + + if (window.WebSocket && window.WebSocket.name && window.WebSocket.name.includes("Patched")) { + return Modals.alert(Strings.Startup.notSupported, Strings.Startup.incompatibleApp.format({app: "Powercord"})); + } + + console.log(Config); + + const latestLocalVersion = Config.updater ? Config.updater.LatestVersion : Config.latestVersion; + if (latestLocalVersion > Config.version) { + Modals.showConfirmationModal(Strings.Startup.updateAvailable, Strings.Startup.updateInfo.format({version: latestLocalVersion}), { + confirmText: Strings.Startup.updateNow, + cancelText: Strings.Startup.maybeLater, + onConfirm: async () => { + const onUpdateFailed = () => {Modals.alert(Strings.Startup.updateFailed, Strings.Startup.manualUpdate);}; + try { + const didUpdate = await this.updateInjector(); + if (!didUpdate) return onUpdateFailed(); + const app = require("electron").remote.app; + app.relaunch(); + app.exit(); + } + catch (err) { + onUpdateFailed(); + } + } + }); + } + + + Logger.log("Startup", "Initializing Settings"); Settings.initialize(); @@ -74,11 +91,11 @@ Core.prototype.init = async function() { 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); - // } + const previousVersion = DataStore.getBDData("version"); + if (Config.bbdVersion > previousVersion) { + this.showChangelogModal(Changelog); + DataStore.setBDData("version", Config.bbdVersion); + } }; Core.prototype.waitForGuilds = function() { @@ -99,4 +116,90 @@ Core.prototype.waitForGuilds = function() { }); }; +Core.prototype.updateInjector = async function() { + const injectionPath = DataStore.injectionPath; + if (!injectionPath) return false; + + const fs = require("fs"); + const path = require("path"); + const rmrf = require("rimraf"); + const yauzl = require("yauzl"); + const mkdirp = require("mkdirp"); + const request = require("request"); + + const parentPath = path.resolve(injectionPath, ".."); + const folderName = path.basename(injectionPath); + const zipLink = "https://github.com/rauenzi/BetterDiscordApp/archive/injector.zip"; + const savedZip = path.resolve(parentPath, "injector.zip"); + const extractedFolder = path.resolve(parentPath, "BetterDiscordApp-injector"); + + // Download the injector zip file + Logger.log("InjectorUpdate", "Downloading " + zipLink); + let success = await new Promise(resolve => { + request.get({url: zipLink, encoding: null}, async (error, response, body) => { + if (error || response.statusCode !== 200) return resolve(false); + // Save a backup in case someone has their own copy + const alreadyExists = await new Promise(res => fs.exists(savedZip, res)); + if (alreadyExists) await new Promise(res => fs.rename(savedZip, `${savedZip}.bak${Math.round(performance.now())}`, res)); + + Logger.log("InjectorUpdate", "Writing " + savedZip); + fs.writeFile(savedZip, body, err => resolve(!err)); + }); + }); + if (!success) return success; + + // Check and delete rename extraction + const alreadyExists = await new Promise(res => fs.exists(extractedFolder, res)); + if (alreadyExists) await new Promise(res => fs.rename(extractedFolder, `${extractedFolder}.bak${Math.round(performance.now())}`, res)); + + // Unzip the downloaded zip file + const zipfile = await new Promise(r => yauzl.open(savedZip, {lazyEntries: true}, (err, zip) => r(zip))); + zipfile.on("entry", function(entry) { + // Skip directories, they are handled with mkdirp + if (entry.fileName.endsWith("/")) return zipfile.readEntry(); + + Logger.log("InjectorUpdate", "Extracting " + entry.fileName); + // Make any needed parent directories + const fullPath = path.resolve(parentPath, entry.fileName); + mkdirp.sync(path.dirname(fullPath)); + zipfile.openReadStream(entry, function(err, readStream) { + if (err) return success = false; + readStream.on("end", function() {zipfile.readEntry();}); // Go to next file after this + readStream.pipe(fs.createWriteStream(fullPath)); + }); + }); + zipfile.readEntry(); // Start reading + + // Wait for the final file to finish + await new Promise(resolve => zipfile.once("end", resolve)); + + // Save a backup in case something goes wrong during final step + const backupFolder = path.resolve(parentPath, `${folderName}.bak${Math.round(performance.now())}`); + await new Promise(resolve => fs.rename(injectionPath, backupFolder, resolve)); + + // Rename the extracted folder to what it should be + Logger.log("InjectorUpdate", `Renaming ${path.basename(extractedFolder)} to ${folderName}`); + success = await new Promise(resolve => fs.rename(extractedFolder, injectionPath, err => resolve(!err))); + if (!success) { + Logger.err("InjectorUpdate", "Failed to rename the final directory"); + return success; + } + + // If rename had issues, delete what we tried to rename and restore backup + if (!success) { + Logger.err("InjectorUpdate", "Something went wrong... restoring backups."); + await new Promise(resolve => rmrf(extractedFolder, resolve)); + await new Promise(resolve => fs.rename(backupFolder, injectionPath, resolve)); + return success; + } + + // If we've gotten to this point, everything should have gone smoothly. + // Cleanup the backup folder then remove the zip + await new Promise(resolve => rmrf(backupFolder, resolve)); + await new Promise(resolve => fs.unlink(savedZip, resolve)); + + Logger.log("InjectorUpdate", "Injector Updated!"); + return success; +}; + export default new Core(); \ No newline at end of file diff --git a/src/modules/datastore.js b/src/modules/datastore.js index aeca3296..0f873d07 100644 --- a/src/modules/datastore.js +++ b/src/modules/datastore.js @@ -2,7 +2,7 @@ import {Config} from "data"; import Utilities from "./utilities"; const fs = require("fs"); const path = require("path"); -const releaseChannel = DiscordNative.globals.releaseChannel; +const releaseChannel = DiscordNative.globals ? DiscordNative.globals.releaseChannel : DiscordNative.app ? DiscordNative.app.getReleaseChannel() : "stable"; // Schema // ======================= @@ -34,6 +34,18 @@ export default new class DataStore { this.cacheData = Utilities.testJSON(fs.readFileSync(this.cacheFile).toString()) || {}; } + get injectionPath() { + if (this._injectionPath) return this._injectionPath; + const electron = require("electron").remote.app; + const base = electron.getAppPath(); + const roamingBase = electron.getPath("userData"); + const roamingLocation = path.resolve(roamingBase, electron.getVersion(), "modules", "discord_desktop_core", "injector"); + const location = path.resolve(base, "..", "app"); + const realLocation = fs.existsSync(location) ? location : fs.existsSync(roamingLocation) ? roamingLocation : null; + if (!realLocation) return this._injectionPath = null; + return this._injectionPath = realLocation; + } + get customCSS() {return this._customCSS || (this._customCSS = path.resolve(this.dataFolder, "custom.css"));} get baseFolder() {return this._baseFolder || (this._baseFolder = path.resolve(Config.dataPath, "data"));} get dataFolder() {return this._dataFolder || (this._dataFolder = path.resolve(this.baseFolder, `${releaseChannel}`));} @@ -44,7 +56,7 @@ export default new class DataStore { _getFile(key) { - if (key == "settings" || key == "plugins" || key == "themes") return path.resolve(this.dataFolder, `${key}.json`); + if (key == "settings" || key == "plugins" || key == "themes" || key == "window") return path.resolve(this.dataFolder, `${key}.json`); return path.resolve(this.dataFolder, `misc.json`); } diff --git a/src/modules/discordmodules.js b/src/modules/discordmodules.js index 129f1b81..759146fe 100644 --- a/src/modules/discordmodules.js +++ b/src/modules/discordmodules.js @@ -146,9 +146,11 @@ export default Utilities.memoizeObject({ /* Commonly Used Classes */ get GuildClasses() { - const guildsWrapper = WebpackModules.getByProps("wrapper", "unreadMentionsBar"); + const guildsWrapper = WebpackModules.getByProps("wrapper", "unreadMentionsBar"); const guilds = WebpackModules.getByProps("guildsError", "selected"); const pill = WebpackModules.getByProps("blobContainer"); return Object.assign({}, guildsWrapper, guilds, pill); - } + }, + + get LayerStack() {return WebpackModules.getByProps("pushLayer");} }); \ No newline at end of file diff --git a/src/modules/domtools.js b/src/modules/domtools.js new file mode 100644 index 00000000..352175a9 --- /dev/null +++ b/src/modules/domtools.js @@ -0,0 +1,753 @@ +/** + * Copyright 2018 Zachary Rauen + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * From: https://github.com/rauenzi/BDPluginLibrary + */ + +/** + * @interface + * @name Offset + * @property {number} top - Top offset of the target element. + * @property {number} right - Right offset of the target element. + * @property {number} bottom - Bottom offset of the target element. + * @property {number} left - Left offset of the target element. + * @property {number} height - Outer height of the target element. + * @property {number} width - Outer width of the target element. + */ + + /** + * Function that automatically removes added listener. + * @callback module:DOMTools~CancelListener + */ + +export default class DOMTools { + + static escapeID(id) { + return id.replace(/^[^a-z]+|[^\w-]+/gi, "-"); + } + + /** + * Adds a style to the document. + * @param {string} id - identifier to use as the element id + * @param {string} css - css to add to the document + */ + static addStyle(id, css) { + document.head.append(DOMTools.createElement(``)); + } + + /** + * Removes a style from the document. + * @param {string} id - original identifier used + */ + static removeStyle(id) { + const element = document.getElementById(id); + if (element) element.remove(); + } + + /** + * Adds/requires a remote script to be loaded + * @param {string} id - identifier to use for this script + * @param {string} url - url from which to load the script + * @returns {Promise} promise that resolves when the script is loaded + */ + static addScript(id, url) { + return new Promise(resolve => { + const script = document.createElement("script"); + script.id = id; + script.src = url; + script.type = "text/javascript"; + script.onload = resolve; + document.head.append(script); + }); + } + + /** + * Removes a remote script from the document. + * @param {string} id - original identifier used + */ + static removeScript(id) { + id = this.escapeID(id); + const element = document.getElementById(id); + if (element) element.remove(); + } + + // https://javascript.info/js-animation + static animate({timing = _ => _, update, duration}) { + const start = performance.now(); + + requestAnimationFrame(function animate(time) { + // timeFraction goes from 0 to 1 + let timeFraction = (time - start) / duration; + if (timeFraction > 1) timeFraction = 1; + + // calculate the current animation state + const progress = timing(timeFraction); + + update(progress); // draw it + + if (timeFraction < 1) { + requestAnimationFrame(animate); + } + + }); + } + + /** + * This is my shit version of not having to use `$` from jQuery. Meaning + * that you can pass a selector and it will automatically run {@link module:DOMTools.query}. + * It also means that you can pass a string of html and it will perform and return `parseHTML`. + * @see module:DOMTools.parseHTML + * @see module:DOMTools.query + * @param {string} selector - Selector to query or HTML to parse + * @returns {(DocumentFragment|NodeList|HTMLElement)} - Either the result of `parseHTML` or `query` + */ + static Q(selector) { + const element = this.parseHTML(selector); + const isHTML = element instanceof NodeList ? Array.from(element).some(n => n.nodeType === 1) : element.nodeType === 1; + if (isHTML) return element; + return this.query(selector); + } + + /** + * Essentially a shorthand for `document.querySelector`. If the `baseElement` is not provided + * `document` is used by default. + * @param {string} selector - Selector to query + * @param {Element} [baseElement] - Element to base the query from + * @returns {(Element|null)} - The found element or null if not found + */ + static query(selector, baseElement) { + if (!baseElement) baseElement = document; + return baseElement.querySelector(selector); + } + + /** + * Essentially a shorthand for `document.querySelectorAll`. If the `baseElement` is not provided + * `document` is used by default. + * @param {string} selector - Selector to query + * @param {Element} [baseElement] - Element to base the query from + * @returns {Array} - Array of all found elements + */ + static queryAll(selector, baseElement) { + if (!baseElement) baseElement = document; + return baseElement.querySelectorAll(selector); + } + + /** + * Parses a string of HTML and returns the results. If the second parameter is true, + * the parsed HTML will be returned as a document fragment {@see https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment}. + * This is extremely useful if you have a list of elements at the top level, they can then be appended all at once to another node. + * + * If the second parameter is false, then the return value will be the list of parsed + * nodes and there were multiple top level nodes, otherwise the single node is returned. + * @param {string} html - HTML to be parsed + * @param {boolean} [fragment=false] - Whether or not the return should be the raw `DocumentFragment` + * @returns {(DocumentFragment|NodeList|HTMLElement)} - The result of HTML parsing + */ + static parseHTML(html, fragment = false) { + const template = document.createElement("template"); + template.innerHTML = html; + const node = template.content.cloneNode(true); + if (fragment) return node; + return node.childNodes.length > 1 ? node.childNodes : node.childNodes[0]; + } + + /** Alternate name for {@link module:DOMTools.parseHTML} */ + static createElement(html, fragment = false) {return this.parseHTML(html, fragment);} + + /** + * Takes a string of html and escapes it using the brower's own escaping mechanism. + * @param {String} html - html to be escaped + */ + static escapeHTML(html) { + const textNode = document.createTextNode(""); + const spanElement = document.createElement("span"); + spanElement.append(textNode); + textNode.nodeValue = html; + return spanElement.innerHTML; + } + + /** + * Adds a list of classes from the target element. + * @param {Element} element - Element to edit classes of + * @param {...string} classes - Names of classes to add + * @returns {Element} - `element` to allow for chaining + */ + static addClass(element, ...classes) { + classes = classes.flat().filter(c => c); + for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(" "); + classes = classes.flat().filter(c => c); + element.classList.add(...classes); + return element; + } + + /** + * Removes a list of classes from the target element. + * @param {Element} element - Element to edit classes of + * @param {...string} classes - Names of classes to remove + * @returns {Element} - `element` to allow for chaining + */ + static removeClass(element, ...classes) { + for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(" "); + classes = classes.flat().filter(c => c); + element.classList.remove(...classes); + return element; + } + + /** + * When only one argument is present: Toggle class value; + * i.e., if class exists then remove it and return false, if not, then add it and return true. + * When a second argument is present: + * If the second argument evaluates to true, add specified class value, and if it evaluates to false, remove it. + * @param {Element} element - Element to edit classes of + * @param {string} classname - Name of class to toggle + * @param {boolean} [indicator] - Optional indicator for if the class should be toggled + * @returns {Element} - `element` to allow for chaining + */ + static toggleClass(element, classname, indicator) { + classname = classname.toString().split(" ").filter(c => c); + if (typeof(indicator) !== "undefined") classname.forEach(c => element.classList.toggle(c, indicator)); + else classname.forEach(c => element.classList.toggle(c)); + return element; + } + + /** + * Checks if an element has a specific class + * @param {Element} element - Element to edit classes of + * @param {string} classname - Name of class to check + * @returns {boolean} - `true` if the element has the class, `false` otherwise. + */ + static hasClass(element, classname) { + return classname.toString().split(" ").filter(c => c).every(c => element.classList.contains(c)); + } + + /** + * Replaces one class with another + * @param {Element} element - Element to edit classes of + * @param {string} oldName - Name of class to replace + * @param {string} newName - New name for the class + * @returns {Element} - `element` to allow for chaining + */ + static replaceClass(element, oldName, newName) { + element.classList.replace(oldName, newName); + return element; + } + + /** + * Appends `thisNode` to `thatNode` + * @param {Node} thisNode - Node to be appended to another node + * @param {Node} thatNode - Node for `thisNode` to be appended to + * @returns {Node} - `thisNode` to allow for chaining + */ + static appendTo(thisNode, thatNode) { + if (typeof(thatNode) == "string") thatNode = this.query(thatNode); + if (!thatNode) return null; + thatNode.append(thisNode); + return thisNode; + } + + /** + * Prepends `thisNode` to `thatNode` + * @param {Node} thisNode - Node to be prepended to another node + * @param {Node} thatNode - Node for `thisNode` to be prepended to + * @returns {Node} - `thisNode` to allow for chaining + */ + static prependTo(thisNode, thatNode) { + if (typeof(thatNode) == "string") thatNode = this.query(thatNode); + if (!thatNode) return null; + thatNode.prepend(thisNode); + return thisNode; + } + + /** + * Insert after a specific element, similar to jQuery's `thisElement.insertAfter(otherElement)`. + * @param {Node} thisNode - The node to insert + * @param {Node} targetNode - Node to insert after in the tree + * @returns {Node} - `thisNode` to allow for chaining + */ + static insertAfter(thisNode, targetNode) { + targetNode.parentNode.insertBefore(thisNode, targetNode.nextSibling); + return thisNode; + } + + /** + * Insert after a specific element, similar to jQuery's `thisElement.after(newElement)`. + * @param {Node} thisNode - The node to insert + * @param {Node} newNode - Node to insert after in the tree + * @returns {Node} - `thisNode` to allow for chaining + */ + static after(thisNode, newNode) { + thisNode.parentNode.insertBefore(newNode, thisNode.nextSibling); + return thisNode; + } + + /** + * Gets the next sibling element that matches the selector. + * @param {Element} element - Element to get the next sibling of + * @param {string} [selector=""] - Optional selector + * @returns {Element} - The sibling element + */ + static next(element, selector = "") { + return selector ? element.querySelector("+ " + selector) : element.nextElementSibling; + } + + /** + * Gets all subsequent siblings. + * @param {Element} element - Element to get next siblings of + * @returns {NodeList} - The list of siblings + */ + static nextAll(element) { + return element.querySelectorAll("~ *"); + } + + /** + * Gets the subsequent siblings until an element matches the selector. + * @param {Element} element - Element to get the following siblings of + * @param {string} selector - Selector to stop at + * @returns {Array} - The list of siblings + */ + static nextUntil(element, selector) { + const next = []; + while (element.nextElementSibling && !element.nextElementSibling.matches(selector)) next.push(element = element.nextElementSibling); + return next; + } + + /** + * Gets the previous sibling element that matches the selector. + * @param {Element} element - Element to get the previous sibling of + * @param {string} [selector=""] - Optional selector + * @returns {Element} - The sibling element + */ + static previous(element, selector = "") { + const previous = element.previousElementSibling; + if (selector) return previous && previous.matches(selector) ? previous : null; + return previous; + } + + /** + * Gets all preceeding siblings. + * @param {Element} element - Element to get preceeding siblings of + * @returns {NodeList} - The list of siblings + */ + static previousAll(element) { + const previous = []; + while (element.previousElementSibling) previous.push(element = element.previousElementSibling); + return previous; + } + + /** + * Gets the preceeding siblings until an element matches the selector. + * @param {Element} element - Element to get the preceeding siblings of + * @param {string} selector - Selector to stop at + * @returns {Array} - The list of siblings + */ + static previousUntil(element, selector) { + const previous = []; + while (element.previousElementSibling && !element.previousElementSibling.matches(selector)) previous.push(element = element.previousElementSibling); + return previous; + } + + /** + * Find which index in children a certain node is. Similar to jQuery's `$.index()` + * @param {HTMLElement} node - The node to find its index in parent + * @returns {number} Index of the node + */ + static indexInParent(node) { + const children = node.parentNode.childNodes; + let num = 0; + for (let i = 0; i < children.length; i++) { + if (children[i] == node) return num; + if (children[i].nodeType == 1) num++; + } + return -1; + } + + /** Shorthand for {@link module:DOMTools.indexInParent} */ + static index(node) {return this.indexInParent(node);} + + /** + * Gets the parent of the element if it matches the selector, + * otherwise returns null. + * @param {Element} element - Element to get parent of + * @param {string} [selector=""] - Selector to match parent + * @returns {(Element|null)} - The sibling element or null + */ + static parent(element, selector = "") { + return !selector || element.parentElement.matches(selector) ? element.parentElement : null; + } + + /** + * Gets all children of Element that match the selector if provided. + * @param {Element} element - Element to get all children of + * @param {string} selector - Selector to match the children to + * @returns {Array} - The list of children + */ + static findChild(element, selector) { + return element.querySelector(":scope > " + selector); + } + + /** + * Gets all children of Element that match the selector if provided. + * @param {Element} element - Element to get all children of + * @param {string} selector - Selector to match the children to + * @returns {Array} - The list of children + */ + static findChildren(element, selector) { + return element.querySelectorAll(":scope > " + selector); + } + + /** + * Gets all ancestors of Element that match the selector if provided. + * @param {Element} element - Element to get all parents of + * @param {string} [selector=""] - Selector to match the parents to + * @returns {Array} - The list of parents + */ + static parents(element, selector = "") { + const parents = []; + if (selector) while (element.parentElement && element.parentElement.closest(selector)) parents.push(element = element.parentElement.closest(selector)); + else while (element.parentElement) parents.push(element = element.parentElement); + return parents; + } + + /** + * Gets the ancestors until an element matches the selector. + * @param {Element} element - Element to get the ancestors of + * @param {string} selector - Selector to stop at + * @returns {Array} - The list of parents + */ + static parentsUntil(element, selector) { + const parents = []; + while (element.parentElement && !element.parentElement.matches(selector)) parents.push(element = element.parentElement); + return parents; + } + + /** + * Gets all siblings of the element that match the selector. + * @param {Element} element - Element to get all siblings of + * @param {string} [selector="*"] - Selector to match the siblings to + * @returns {Array} - The list of siblings + */ + static siblings(element, selector = "*") { + return Array.from(element.parentElement.children).filter(e => e != element && e.matches(selector)); + } + + /** + * Sets or gets css styles for a specific element. If `value` is provided + * then it sets the style and returns the element to allow for chaining, + * otherwise returns the style. + * @param {Element} element - Element to set the CSS of + * @param {string} attribute - Attribute to get or set + * @param {string} [value] - Value to set for attribute + * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned. + */ + static css(element, attribute, value) { + if (typeof(value) == "undefined") return global.getComputedStyle(element)[attribute]; + element.style[attribute] = value; + return element; + } + + /** + * Sets or gets the width for a specific element. If `value` is provided + * then it sets the width and returns the element to allow for chaining, + * otherwise returns the width. + * @param {Element} element - Element to set the CSS of + * @param {string} [value] - Width to set + * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned. + */ + static width(element, value) { + if (typeof(value) == "undefined") return parseInt(getComputedStyle(element).width); + element.style.width = value; + return element; + } + + /** + * Sets or gets the height for a specific element. If `value` is provided + * then it sets the height and returns the element to allow for chaining, + * otherwise returns the height. + * @param {Element} element - Element to set the CSS of + * @param {string} [value] - Height to set + * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned. + */ + static height(element, value) { + if (typeof(value) == "undefined") return parseInt(getComputedStyle(element).height); + element.style.height = value; + return element; + } + + /** + * Sets the inner text of an element if given a value, otherwise returns it. + * @param {Element} element - Element to set the text of + * @param {string} [text] - Content to set + * @returns {string} - Either the string set by this call or the current text content of the node. + */ + static text(element, text) { + if (typeof(text) == "undefined") return element.textContent; + return element.textContent = text; + } + + /** + * Returns the innerWidth of the element. + * @param {Element} element - Element to retrieve inner width of + * @return {number} - The inner width of the element. + */ + static innerWidth(element) { + return element.clientWidth; + } + + /** + * Returns the innerHeight of the element. + * @param {Element} element - Element to retrieve inner height of + * @return {number} - The inner height of the element. + */ + static innerHeight(element) { + return element.clientHeight; + } + + /** + * Returns the outerWidth of the element. + * @param {Element} element - Element to retrieve outer width of + * @return {number} - The outer width of the element. + */ + static outerWidth(element) { + return element.offsetWidth; + } + + /** + * Returns the outerHeight of the element. + * @param {Element} element - Element to retrieve outer height of + * @return {number} - The outer height of the element. + */ + static outerHeight(element) { + return element.offsetHeight; + } + + /** + * Gets the offset of the element in the page. + * @param {Element} element - Element to get offset of + * @return {Offset} - The offset of the element + */ + static offset(element) { + return element.getBoundingClientRect(); + } + + static get listeners() { return this._listeners || (this._listeners = {}); } + + /** + * This is similar to jQuery's `on` function and can *hopefully* be used in the same way. + * + * Rather than attempt to explain, I'll show some example usages. + * + * The following will add a click listener (in the `myPlugin` namespace) to `element`. + * `DOMTools.on(element, "click.myPlugin", () => {console.log("clicked!");});` + * + * The following will add a click listener (in the `myPlugin` namespace) to `element` that only fires when the target is a `.block` element. + * `DOMTools.on(element, "click.myPlugin", ".block", () => {console.log("clicked!");});` + * + * The following will add a click listener (without namespace) to `element`. + * `DOMTools.on(element, "click", () => {console.log("clicked!");});` + * + * The following will add a click listener (without namespace) to `element` that only fires once. + * `const cancel = DOMTools.on(element, "click", () => {console.log("fired!"); cancel();});` + * + * @param {Element} element - Element to add listener to + * @param {string} event - Event to listen to with option namespace (e.g. "event.namespace") + * @param {(string|callable)} delegate - Selector to run on element to listen to + * @param {callable} [callback] - Function to fire on event + * @returns {module:DOMTools~CancelListener} - A function that will undo the listener + */ + static on(element, event, delegate, callback) { + const [type, namespace] = event.split("."); + const hasDelegate = delegate && callback; + if (!callback) callback = delegate; + const eventFunc = !hasDelegate ? callback : function(event) { + if (event.target.matches(delegate)) { + callback(event); + } + }; + + element.addEventListener(type, eventFunc); + const cancel = () => { + element.removeEventListener(type, eventFunc); + }; + if (namespace) { + if (!this.listeners[namespace]) this.listeners[namespace] = []; + const newCancel = () => { + cancel(); + this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1); + }; + this.listeners[namespace].push({ + event: type, + element: element, + cancel: newCancel + }); + return newCancel; + } + return cancel; + } + + /** + * Functionality for this method matches {@link module:DOMTools.on} but automatically cancels itself + * and removes the listener upon the first firing of the desired event. + * + * @param {Element} element - Element to add listener to + * @param {string} event - Event to listen to with option namespace (e.g. "event.namespace") + * @param {(string|callable)} delegate - Selector to run on element to listen to + * @param {callable} [callback] - Function to fire on event + * @returns {module:DOMTools~CancelListener} - A function that will undo the listener + */ + static once(element, event, delegate, callback) { + const [type, namespace] = event.split("."); + const hasDelegate = delegate && callback; + if (!callback) callback = delegate; + const eventFunc = !hasDelegate ? function(event) { + callback(event); + element.removeEventListener(type, eventFunc); + } : function(event) { + if (!event.target.matches(delegate)) return; + callback(event); + element.removeEventListener(type, eventFunc); + }; + + element.addEventListener(type, eventFunc); + const cancel = () => { + element.removeEventListener(type, eventFunc); + }; + if (namespace) { + if (!this.listeners[namespace]) this.listeners[namespace] = []; + const newCancel = () => { + cancel(); + this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1); + }; + this.listeners[namespace].push({ + event: type, + element: element, + cancel: newCancel + }); + return newCancel; + } + return cancel; + } + + static __offAll(event, element) { + const [type, namespace] = event.split("."); + let matchFilter = listener => listener.event == type, defaultFilter = _ => _; + if (element) matchFilter = l => l.event == type && l.element == element, defaultFilter = l => l.element == element; + const listeners = this.listeners[namespace] || []; + const list = type ? listeners.filter(matchFilter) : listeners.filter(defaultFilter); + for (let c = 0; c < list.length; c++) list[c].cancel(); + } + + /** + * This is similar to jQuery's `off` function and can *hopefully* be used in the same way. + * + * Rather than attempt to explain, I'll show some example usages. + * + * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element`. + * `DOMTools.off(element, "click.myPlugin", onClick);` + * + * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element` that only fired when the target is a `.block` element. + * `DOMTools.off(element, "click.myPlugin", ".block", onClick);` + * + * The following will remove a click listener (without namespace) from `element`. + * `DOMTools.off(element, "click", onClick);` + * + * The following will remove all listeners in namespace `myPlugin` from `element`. + * `DOMTools.off(element, ".myPlugin");` + * + * The following will remove all click listeners in namespace `myPlugin` from *all elements*. + * `DOMTools.off("click.myPlugin");` + * + * The following will remove all listeners in namespace `myPlugin` from *all elements*. + * `DOMTools.off(".myPlugin");` + * + * @param {(Element|string)} element - Element to remove listener from + * @param {string} [event] - Event to listen to with option namespace (e.g. "event.namespace") + * @param {(string|callable)} [delegate] - Selector to run on element to listen to + * @param {callable} [callback] - Function to fire on event + * @returns {Element} - The original element to allow for chaining + */ + static off(element, event, delegate, callback) { + if (typeof(element) == "string") return this.__offAll(element); + const [type, namespace] = event.split("."); + if (namespace) return this.__offAll(event, element); + + const hasDelegate = delegate && callback; + if (!callback) callback = delegate; + const eventFunc = !hasDelegate ? callback : function(event) { + if (event.target.matches(delegate)) { + callback(event); + } + }; + + element.removeEventListener(type, eventFunc); + return element; + } + + /** + * Adds a listener for when the node is added/removed from the document body. + * The listener is automatically removed upon firing. + * @param {HTMLElement} node - node to wait for + * @param {callable} callback - function to be performed on event + * @param {boolean} onMount - determines if it should fire on Mount or on Unmount + */ + static onMountChange(node, callback, onMount = true) { + const wrappedCallback = () => { + this.observer.unsubscribe(wrappedCallback); + callback(); + }; + this.observer.subscribe(wrappedCallback, mutation => { + const nodes = Array.from(onMount ? mutation.addedNodes : mutation.removedNodes); + const directMatch = nodes.indexOf(node) > -1; + const parentMatch = nodes.some(parent => parent.contains(node)); + return directMatch || parentMatch; + }); + return node; + } + + /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `true` */ + static onMount(node, callback) { return this.onMountChange(node, callback); } + + /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `false` */ + static onUnmount(node, callback) { return this.onMountChange(node, callback, false); } + + /** Alias for {@link module:DOMTools.onMount} */ + static onAdded(node, callback) { return this.onMount(node, callback); } + + /** Alias for {@link module:DOMTools.onUnmount} */ + static onRemoved(node, callback) { return this.onUnmount(node, callback, false); } + + /** + * Helper function which combines multiple elements into one parent element + * @param {Array} elements - array of elements to put into a single parent + */ + static wrap(elements) { + const domWrapper = this.parseHTML(`
`); + for (let e = 0; e < elements.length; e++) domWrapper.appendChild(elements[e]); + return domWrapper; + } + + /** + * Resolves the node to an HTMLElement. This is mainly used by library modules. + * @param {(jQuery|Element)} node - node to resolve + */ + static resolveElement(node) { + if (!(node instanceof jQuery) && !(node instanceof Element)) return undefined; + return node instanceof jQuery ? node[0] : node; + } +} \ No newline at end of file diff --git a/src/modules/modules.js b/src/modules/modules.js index f0ad3fba..fe477b6c 100644 --- a/src/modules/modules.js +++ b/src/modules/modules.js @@ -10,6 +10,7 @@ export {default as DataStore} from "./datastore"; export {default as Events} from "./emitter"; export {default as Settings} from "./settingsmanager"; export {default as DOMManager} from "./dommanager"; +export {default as DOM} from "./domtools"; export {default as Logger} from "./logger"; export {default as Patcher} from "./patcher"; export {default as ReactComponents} from "./reactcomponents"; diff --git a/src/modules/pluginapi.js b/src/modules/pluginapi.js index 9c213389..68960445 100644 --- a/src/modules/pluginapi.js +++ b/src/modules/pluginapi.js @@ -7,6 +7,8 @@ import Toasts from "../ui/toasts"; import Modals from "../ui/modals"; import PluginManager from "./pluginmanager"; import ThemeManager from "./thememanager"; +import Settings from "./settingsmanager"; +import Logger from "./logger"; const BdApi = { get React() { return DiscordModules.React; }, @@ -23,7 +25,9 @@ const BdApi = { const realLocation = fs.existsSync(location) ? location : fs.existsSync(roamingLocation) ? roamingLocation : null; if (!realLocation) return this._windowConfigFile = null; return this._windowConfigFile = realLocation; - } + }, + get settings() {return Settings.collections;}, + get emotes() {return {};} }; BdApi.getAllWindowPreferences = function() { @@ -215,23 +219,38 @@ BdApi.testJSON = function(data) { //Get another plugin //name = name of plugin BdApi.getPlugin = function (name) { + Logger.warn("BdApi", "getPlugin is deprecated. Please make use of the addon api (BdApi.Plugins)"); return PluginManager.addonList.find(a => a.name == name); }; BdApi.isPluginEnabled = function(name) { + Logger.warn("BdApi", "isPluginEnabled is deprecated. Please make use of the addon api (BdApi.Plugins)"); const plugin = this.getPlugin(name); if (!plugin) return false; return PluginManager.isEnabled(plugin.id); }; BdApi.isThemeEnabled = function(name) { + Logger.warn("BdApi", "isThemeEnabled is deprecated. Please make use of the addon api (BdApi.Themes)"); const theme = ThemeManager.addonList.find(a => a.name == name); if (!theme) return false; return ThemeManager.isEnabled(theme.id); }; -BdApi.isSettingEnabled = function(name) { - return null; +BdApi.isSettingEnabled = function(collection, category, id) { + return Settings.get(collection, category, id); +}; + +BdApi.enableSetting = function(collection, category, id) { + return Settings.set(collection, category, id, true); +}; + +BdApi.disableSetting = function(collection, category, id) { + return Settings.set(collection, category, id, false); +}; + +BdApi.toggleSetting = function(collection, category, id) { + return Settings.set(collection, category, id, !Settings.get(collection, category, id)); }; // Gets data @@ -244,78 +263,18 @@ BdApi.setBDData = function(key, data) { return DataStore.setBDData(key, data); }; -// const makeAddonAPI = (cookie, list, manager) => new class AddonAPI { - -// get folder() {return manager.folder;} - -// isEnabled(name) { -// return !!cookie[name]; -// } - -// enable(name) { -// return manager.enable(name); -// } - -// disable(name) { -// return manager.disable(name); -// } - -// toggle(name) { -// if (cookie[name]) this.disable(name); -// else this.enable(name); -// } - -// reload(name) { -// return manager.reload(name); -// } - -// get(name) { -// if (list.hasOwnProperty(name)) { -// if (list[name].plugin) return list[name].plugin; -// return list[name]; -// } -// return null; -// } - -// getAll() { -// return Object.keys(list).map(k => this.get(k)).filter(a => a); -// } -// }; - -// BdApi.Plugins = makeAddonAPI(pluginCookie, bdplugins, pluginModule); -// BdApi.Themes = makeAddonAPI(themeCookie, bdthemes, themeModule); - -BdApi.Plugins = BdApi.themes = new class AddonAPI { - - get folder() {return "";} - - isEnabled(name) { - return null; - } - - enable(name) { - return null; - } - - disable(name) { - return null; - } - - toggle(name) { - return null; - } - - reload(name) { - return null; - } - - get(name) { - return null; - } - - getAll() { - return []; - } +const makeAddonAPI = (manager) => new class AddonAPI { + get folder() {return manager.folder;} + isEnabled(idOrFile) {return manager.isEnabled(idOrFile);} + enable(idOrAddon) {return manager.enableAddon(idOrAddon);} + disable(idOrAddon) {return manager.disableAddon(idOrAddon);} + toggle(idOrAddon) {return manager.toggleAddon(idOrAddon);} + reload(idOrFileOrAddon) {return manager.reloadAddon(idOrFileOrAddon);} + get(idOrFile) {return manager.addonList.find(c => c.id == idOrFile || c.filename == idOrFile);} + getAll() {return manager.addonList;} }; +BdApi.Plugins = makeAddonAPI(PluginManager); +BdApi.Themes = makeAddonAPI(ThemeManager); + export default BdApi; \ No newline at end of file diff --git a/src/modules/webpackmodules.js b/src/modules/webpackmodules.js index ae2b1d10..de71a3d1 100644 --- a/src/modules/webpackmodules.js +++ b/src/modules/webpackmodules.js @@ -4,8 +4,6 @@ * @version 0.0.2 */ -// import DiscordModules from "./discordmodules"; - /** * Checks if a given module matches a set of parameters. * @callback module:WebpackModules.Filters~filter @@ -99,6 +97,25 @@ export class Filters { } } +const protect = theModule => { + if (theModule.remove && theModule.set && theModule.clear && theModule.get && !theModule.sort) return null; + if (!theModule.getToken && !theModule.getEmail && !theModule.showToken) return theModule; + const proxy = new Proxy(theModule, { + getOwnPropertyDescriptor: function(obj, prop) { + if (prop === "getToken" || prop === "getEmail" || prop === "showToken") return undefined; + return Object.getOwnPropertyDescriptor(obj, prop); + }, + get: function(obj, func) { + if (func == "getToken") return () => "mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa"; + if (func == "getEmail") return () => "puppet11112@gmail.com"; + if (func == "showToken") return () => true; + // if (func == "__proto__") return proxy; + return obj[func]; + } + }); + return proxy; +}; + export default class WebpackModules { static find(filter, first = true) {return this.getModule(filter, first);} @@ -125,9 +142,10 @@ export default class WebpackModules { if (exports.__esModule && exports.default && filter(exports.default)) foundModule = exports.default; if (filter(exports)) foundModule = exports; if (!foundModule) continue; - if (first) return foundModule; - rm.push(foundModule); + if (first) return protect(foundModule); + rm.push(protect(foundModule)); } + return first || rm.length == 0 ? undefined : rm; } diff --git a/src/secure.js b/src/secure.js new file mode 100644 index 00000000..76c47ad0 --- /dev/null +++ b/src/secure.js @@ -0,0 +1,31 @@ +export default function() { + const contentWindowGetter = Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype, "contentWindow").get; + Object.defineProperty(HTMLIFrameElement.prototype, "contentWindow", { + get: function () { + const contentWindow = Reflect.apply(contentWindowGetter, this, arguments); + return new Proxy(contentWindow, { + getOwnPropertyDescriptor: function(obj, prop) { + if (prop === "localStorage") return undefined; + return Object.getOwnPropertyDescriptor(obj, prop); + }, + get: function(obj, prop) { + if (prop === "localStorage") return null; + const val = obj[prop]; + if (typeof val === "function") return val.bind(obj); + return val; + } + }); + } + }); + + // Prevent interception by patching Reflect.apply and Function.prototype.bind + Object.defineProperty(Reflect, "apply", {value: Reflect.apply, writable: false, configurable: false}); + Object.defineProperty(Function.prototype, "bind", {value: Function.prototype.bind, writable: false, configurable: false}); + + const oOpen = XMLHttpRequest.prototype.open; + XMLHttpRequest.prototype.open = function() { + const url = arguments[1]; + if (url.toLowerCase().includes("api/webhooks")) return null; + return Reflect.apply(oOpen, this, arguments); + }; +} \ No newline at end of file diff --git a/src/ui/errorboundary.jsx b/src/ui/errorboundary.jsx new file mode 100644 index 00000000..d87fc1b4 --- /dev/null +++ b/src/ui/errorboundary.jsx @@ -0,0 +1,25 @@ +import {React, Logger} from "modules"; + +export default class ErrorBoundary extends React.Component { + constructor(props) { + super(props); + this.state = {hasError: false}; + } + + componentDidCatch() { + this.setState({hasError: true}); + } + + render() { + if (this.state.hasError) return
Component Error
; + return this.props.children; + } +} + +const originalRender = ErrorBoundary.prototype.render; +Object.defineProperty(ErrorBoundary.prototype, "render", { + enumerable: false, + configurable: false, + set: function() {Logger.warn("ErrorBoundary", "Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins");}, + get: () => originalRender +}); \ No newline at end of file diff --git a/src/ui/icons/history.jsx b/src/ui/icons/history.jsx new file mode 100644 index 00000000..19fc43be --- /dev/null +++ b/src/ui/icons/history.jsx @@ -0,0 +1,11 @@ +import {React} from "modules"; + +export default class History extends React.Component { + render() { + const size = this.props.size || "18px"; + return + + + ; + } +} \ No newline at end of file diff --git a/src/ui/modals.js b/src/ui/modals.js index 989dffd8..1b2cff15 100644 --- a/src/ui/modals.js +++ b/src/ui/modals.js @@ -1,5 +1,6 @@ import {Config} from "data"; -import {Logger, WebpackModules, Utilities, React, Settings, Strings} from "modules"; +import {Logger, WebpackModules, Utilities, React, Settings, Strings, DOM, DiscordModules} from "modules"; +import FormattableString from "../structs/string"; export default class Modals { @@ -9,15 +10,13 @@ export default class Modals { static get AlertModal() {return WebpackModules.getByPrototypes("handleCancel", "handleSubmit", "handleMinorConfirm");} static get TextElement() {return WebpackModules.getByProps("Sizes", "Weights");} static get ConfirmationModal() {return WebpackModules.getModule(m => m.defaultProps && m.key && m.key() == "confirm-modal");} + static get Markdown() {return WebpackModules.findByDisplayName("Markdown");} static default(title, content) { - const backdrop = WebpackModules.getByProps("backdrop") || {backdrop: "backdrop-1wrmKb"}; - const baseModalClasses = WebpackModules.getModule(m => m.modal && m.inner && !m.sizeMedium) || {modal: "modal-36zFtW", inner: "inner-2VEzy9"}; - const modalClasses = WebpackModules.getByProps("sizeMedium") || {modal: "backdrop-1wrmKb", sizeMedium: "sizeMedium-ctncE5", content: "content-2KoCOZ", header: "header-2nhbou", footer: "footer-30ewN8", close: "close-hhyjWJ", inner: "inner-2Z5QZX"}; const modal = Utilities.parseHTML(`
-
-
-
+
+
- @@ -46,62 +45,54 @@ export default class Modals { } static alert(title, content) { - if (this.ModalStack && this.AlertModal) return this.default(title, content); - this.ModalStack.push(function(props) { - return React.createElement(this.AlertModal, Object.assign({ - title: title, - body: content, - }, props)); - }); + this.showConfirmationModal(title, content); } /** * Shows a generic but very customizable confirmation modal with optional confirm and cancel callbacks. * @param {string} title - title of the modal - * @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. + * @param {(string|ReactElement|Array)} children - a single or mixed array of react elements and strings. Everything is wrapped in Discord's `Markdown` component so strings will show and render properly. * @param {object} [options] - options to modify the modal * @param {boolean} [options.danger=false] - whether the main button should be red or not * @param {string} [options.confirmText=Okay] - text for the confirmation/submit button * @param {string} [options.cancelText=Cancel] - text for the cancel button * @param {callable} [options.onConfirm=NOOP] - callback to occur when clicking the submit button * @param {callable} [options.onCancel=NOOP] - callback to occur when clicking the cancel button + * @param {string} [options.key] - key used to identify the modal. If not provided, one is generated and returned + * @returns {string} - the key used for this modal */ static showConfirmationModal(title, content, options = {}) { - const TextElement = this.TextElement; + const Markdown = this.Markdown; const ConfirmationModal = this.ConfirmationModal; const ModalStack = this.ModalStack; - if (!this.ModalStack || !this.ConfirmationModal || !this.TextElement) return this.alert(title, content); - - const {onConfirm, onCancel, confirmText, cancelText, danger = false} = options; - if (typeof(content) == "string") content = TextElement.default({color: TextElement.Colors.PRIMARY, children: [content]}); - else if (Array.isArray(content)) content = TextElement.default({color: TextElement.Colors.PRIMARY, children: content}); - content = [content]; + if (content instanceof FormattableString) content = content.toString(); + if (!this.ModalStack || !this.ConfirmationModal || !this.Markdown) return this.default(title, content); const emptyFunction = () => {}; - ModalStack.push(function(props) { - return React.createElement(ConfirmationModal, Object.assign({ - header: title, - children: content, - red: danger, - confirmText: confirmText ? confirmText : Strings.Modals.okay, - cancelText: cancelText ? cancelText : Strings.Modals.cancel, - onConfirm: onConfirm ? onConfirm : emptyFunction, - onCancel: onCancel ? onCancel : emptyFunction - }, props)); - }); + const {onConfirm = emptyFunction, onCancel = emptyFunction, confirmText = Strings.Modals.okay, cancelText = Strings.Modals.cancel, danger = false, key = undefined} = options; + + if (!Array.isArray(content)) content = [content]; + content = content.map(c => typeof(c) === "string" ? React.createElement(Markdown, null, c) : c); + + return ModalStack.push(ConfirmationModal, { + header: title, + children: content, + red: danger, + confirmText: confirmText, + cancelText: cancelText, + onConfirm: onConfirm, + onCancel: onCancel + }, key); } static showAddonErrors({plugins: pluginErrors = [], themes: themeErrors = []}) { if (!pluginErrors || !themeErrors || !this.shouldShowAddonErrors) return; if (!pluginErrors.length && !themeErrors.length) return; - const backdrop = WebpackModules.getByProps("backdrop") || {backdrop: "backdrop-1wrmKb"}; - const baseModalClasses = WebpackModules.getModule(m => m.modal && m.inner && !m.sizeMedium) || {modal: "modal-36zFtW", inner: "inner-2VEzy9"}; - const modalClasses = WebpackModules.getByProps("sizeMedium") || {modal: "modal-3v8ziU", sizeMedium: "sizeMedium-ctncE5", content: "content-2KoCOZ", header: "header-2nhbou", footer: "footer-30ewN8", close: "close-hhyjWJ", inner: "inner-2Z5QZX"}; const modal = $(`
-
-
-
-
${Strings.Modals.addonErrors}
+
+