coh-content-db 1.4.1 → 2.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +25 -0
- package/.github/workflows/build.yml +38 -0
- package/.github/workflows/pull-request.yml +32 -0
- package/.github/workflows/release.yml +52 -0
- package/LICENSE +24 -674
- package/README.md +74 -17
- package/dist/coh-content-db.d.ts +584 -22
- package/dist/coh-content-db.js +587 -2
- package/dist/coh-content-db.js.map +1 -0
- package/dist/coh-content-db.mjs +568 -0
- package/dist/coh-content-db.mjs.map +1 -0
- package/eslint.config.mjs +30 -0
- package/jest.config.mjs +7 -0
- package/package.json +31 -23
- package/rollup.config.mjs +27 -0
- package/src/main/api/alignment.ts +3 -0
- package/src/main/api/alternate-data.ts +22 -0
- package/src/main/api/archetype-data.ts +5 -0
- package/src/main/api/badge-data.ts +109 -0
- package/src/main/api/badge-partial-data.ts +65 -0
- package/src/main/api/badge-partial-type.ts +8 -0
- package/src/main/api/badge-type.ts +19 -0
- package/src/main/api/change.ts +14 -0
- package/src/main/api/enhancement-category.ts +30 -0
- package/src/main/api/game-map-data.ts +26 -0
- package/src/main/api/link.ts +4 -0
- package/src/main/api/plaque-type.ts +6 -0
- package/src/main/api/server-group-data.ts +65 -0
- package/src/main/api/sex.ts +3 -0
- package/src/main/api/vidiot-map-data.ts +18 -0
- package/src/main/api/vidiot-map-point-of-interest-data.ts +30 -0
- package/src/main/changelog.ts +20 -0
- package/src/main/db/alternates.ts +81 -0
- package/src/main/db/archetype.ts +14 -0
- package/src/main/db/badge-partial.ts +35 -0
- package/src/main/db/badge.ts +141 -0
- package/src/main/db/coh-content-database.ts +29 -0
- package/src/main/db/game-map.ts +33 -0
- package/src/main/db/key.ts +18 -0
- package/src/main/db/server-group.ts +112 -0
- package/src/main/db/vidiot-map-point-of-interest.ts +40 -0
- package/src/main/db/vidiot-map.ts +25 -0
- package/src/main/index.ts +33 -0
- package/src/main/util.ts +17 -0
- package/src/test/api/alignment.test.ts +31 -0
- package/src/test/api/archetype-data.fixture.ts +8 -0
- package/src/test/api/badge-data.fixture.ts +22 -0
- package/src/test/api/badge-data.test.ts +15 -0
- package/src/test/api/badge-partial-data.fixture.ts +17 -0
- package/src/test/api/badge-partial-type.test.ts +31 -0
- package/src/test/api/badge-type.test.ts +35 -0
- package/src/test/api/enhancement-category.test.ts +35 -0
- package/src/test/api/game-map-data.fixture.ts +10 -0
- package/src/test/api/plaque-type.test.ts +31 -0
- package/src/test/api/server-group-data.fixture.ts +23 -0
- package/src/test/api/server-group-data.test.ts +15 -0
- package/src/test/api/sex.test.ts +31 -0
- package/src/test/api/vidiot-map-point-of-interest.fixture.ts +10 -0
- package/src/test/api/vidiot-map.fixture.ts +9 -0
- package/src/test/changelog.test.ts +36 -0
- package/src/test/db/alternates.test.ts +223 -0
- package/src/test/db/archetype.test.ts +38 -0
- package/src/test/db/badge.test.ts +41 -0
- package/src/test/db/coh-content-database.test.ts +42 -0
- package/src/test/db/key.test.ts +22 -0
- package/src/test/db/server-group.test.ts +124 -0
- package/src/test/index.test.ts +10 -0
- package/src/test/util.test.ts +39 -0
- package/tsconfig.json +117 -0
- package/dist/_changelog.d.ts +0 -3
- package/dist/coh-content-db.nomin.js +0 -635
- package/dist/content-refence-utils.d.ts +0 -4
- package/dist/index.d.ts +0 -8
- package/dist/internal/_common.d.ts +0 -4
- package/dist/internal/archetype.d.ts +0 -10
- package/dist/internal/badge.d.ts +0 -44
- package/dist/internal/game-map.d.ts +0 -33
- package/dist/internal/server-group.d.ts +0 -24
- package/dist/types/archetype.d.ts +0 -9
- package/dist/types/badge.d.ts +0 -192
- package/dist/types/enhancement.d.ts +0 -28
- package/dist/types/game-map.d.ts +0 -47
- package/dist/types/link.d.ts +0 -4
- package/dist/types/server-group.d.ts +0 -75
package/dist/coh-content-db.js
CHANGED
|
@@ -1,2 +1,587 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("lodash")):"function"==typeof define&&define.amd?define("coh-content-db",["lodash"],t):"object"==typeof exports?exports["coh-content-db"]=t(require("lodash")):e["coh-content-db"]=t(e._)}(window,function(e){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=2)}([function(e,t,n){var i;void 0===(i=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=/[^a-z0-9\-]/;t.validateKey=function(e){if(n.test(e))throw new Error("Bad key: ["+e+"]; Keys can only contain lowercase characters, numbers and dashes.")},t.getOrDefine=function(e,t,n){var i=t[e];return void 0===i&&(i=t[e]=n(e)),i}}.apply(t,[n,t]))||(e.exports=i)},function(t,n){t.exports=e},function(e,t,n){var i,o;i=[n,t,n(3),n(4),n(5),n(6),n(11),n(12)],void 0===(o=function(e,t,n,i,o,r,a,s){"use strict";function u(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}Object.defineProperty(t,"__esModule",{value:!0}),u(n),u(i),u(o),t.CohContentDb=r.CohContentDb,t.Changelog=a.Changelog,u(s)}.apply(t,i))||(e.exports=o)},function(e,t,n){var i;void 0===(i=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.EXPLORATION="EXPLORATION",e.HISTORY="HISTORY",e.ACCOMPLISHMENT="ACCOMPLISHMENT",e.ACHIEVEMENT="ACHIEVEMENT",e.ACCOLADE="ACCOLADE",e.GLADIATOR="GLADIATOR",e.VETERAN="VETERAN",e.PVP="PVP",e.INVENTION="INVENTION",e.DEFEAT="DEFEAT",e.EVENT="EVENT",e.OUROBOROS="OUROBOROS",e.CONSIGNMENT="CONSIGNMENT",e.DAY_JOB="DAY_JOB",e.AE="AE"}(t.BadgeType||(t.BadgeType={})),function(e){e.PLAQUE="PLAQUE",e.BADGE="BADGE",e.INVENTION="INVENTION",e.INVENTION_PLUS_ONE="INVENTION_PLUS_ONE"}(t.BadgePartialType||(t.BadgePartialType={})),function(e){e.M="M",e.F="F",e.H="H",e.V="V",e.P="P",e.MH="MH",e.MV="MV",e.MP="MP",e.FH="FH",e.FV="FV",e.FP="FP"}(t.Alternate||(t.Alternate={})),t.ALIGNMENT_HERO={h:!0,v:!1,p:!1},t.ALIGNMENT_VILLAIN={h:!1,v:!0,p:!1},t.ALIGNMENT_PRIMAL={h:!0,v:!0,p:!1},t.ALIGNMENT_PRAETORIAN={h:!1,v:!1,p:!0},t.ALIGNMENT_ANY={h:!0,v:!0,p:!0},function(e){e.WALL_PLAQUE="WALL_PLAQUE",e.MONUMENT="MONUMENT"}(t.PlaqueType||(t.PlaqueType={}))}.apply(t,[n,t]))||(e.exports=i)},function(e,t,n){var i;void 0===(i=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.DEFENSE_DEBUFF="DEFENSE_DEBUFF",e.TO_HIT_DEBUFF="TO_HIT_DEBUFF",e.TAUNT="TAUNT",e.CONFUSE="CONFUSE",e.HEALING="HEALING",e.DEFENSE_BUFF="DEFENSE_BUFF",e.RESIST_DAMAGE="RESIST_DAMAGE",e.INTANGIBILITY="INTANGIBILITY",e.SLEEP="SLEEP",e.SLOW="SLOW",e.HOLD="HOLD",e.STUN="STUN",e.IMMOBILIZE="IMMOBILIZE",e.FEAR="FEAR",e.ENDURANCE_MODIFICATION="ENDURANCE_MODIFICATION",e.ENDURANCE_REDUCTION="ENDURANCE_REDUCTION",e.RECHARGE_REDUCTION="RECHARGE_REDUCTION",e.INTERRUPT_DURATION="INTERRUPT_DURATION",e.ACCURACY="ACCURACY",e.TO_HIT_BUFF="TO_HIT_BUFF",e.DAMAGE="DAMAGE",e.KNOCKBACK="KNOCKBACK",e.RUN_SPEED="RUN_SPEED",e.JUMP="JUMP",e.FLY_SPEED="FLY_SPEED",e.RANGE="RANGE"}(t.EnhancementCategory||(t.EnhancementCategory={}))}.apply(t,[n,t]))||(e.exports=i)},function(e,t,n){var i;void 0===(i=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.WORK_IN_PROGRESS="WORK_IN_PROGRESS",e.SUNSET="SUNSET"}(t.ServerGroupStatus||(t.ServerGroupStatus={}))}.apply(t,[n,t]))||(e.exports=i)},function(e,t,n){var i,o;i=[n,t,n(1),n(0),n(7)],void 0===(o=function(e,t,n,i,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(){this.serverGroups={}}return e.prototype.load=function(e){i.getOrDefine(e.key,this.serverGroups,function(e){return new o.ServerGroup(e)}).load(e)},e.prototype.getServerGroups=function(){return n.values(this.serverGroups)},e.prototype.getServerGroup=function(e){return this.serverGroups[e]},e}();t.CohContentDb=r}.apply(t,i))||(e.exports=o)},function(e,t,n){var i,o;i=[n,t,n(1),n(8),n(9),n(10),n(0)],void 0===(o=function(e,t,n,i,o,r,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e){this.archetypes=[],this.maps=[],this.badges=[],this.changelog={},this.archetypeCache={},this.mapCache={},this.badgeCache={},a.validateKey(e),this.key=e}return e.prototype.load=function(e){var t=this;null!=e.name&&(this.name=e.name),null!=e.description&&(this.description=e.description),null!=e.status&&(this.status=e.status),null!=e.repository&&(this.repository=e.repository),null!=e.servers&&(this.servers=e.servers),null!=e.archetypes&&(n.each(e.archetypes,function(e){return a.getOrDefine(e.key,t.archetypeCache,function(e){return new i.Archetype(t,e)}).load(e)}),this.archetypes=n.values(this.archetypeCache)),null!=e.maps&&(n.each(e.maps,function(e){return a.getOrDefine(e.key,t.mapCache,function(e){return new o.GameMap(t,e)}).load(e)}),this.maps=n.values(this.mapCache)),null!=e.badges&&(n.each(e.badges,function(e){return a.getOrDefine(e.key,t.badgeCache,function(e){return new r.Badge(t,e)}).load(e)}),this.badges=n.values(this.badgeCache)),e.changelog&&(this.changelog=e.changelog)},e.prototype.getArchetype=function(e){return this.archetypeCache[e]},e.prototype.getMap=function(e){return this.mapCache[e]},e.prototype.getBadge=function(e){return this.badgeCache[e]},e}();t.ServerGroup=s}.apply(t,i))||(e.exports=o)},function(e,t,n){var i,o;i=[n,t,n(0)],void 0===(o=function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){n.validateKey(t),this.serverGroup=e,this.key=t}return e.prototype.load=function(e){null!=e.name&&(this.name=e.name),null!=e.description&&(this.description=e.description)},e}();t.Archetype=i}.apply(t,i))||(e.exports=o)},function(e,t,n){var i,o;i=[n,t,n(0),n(1)],void 0===(o=function(e,t,n,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){this.vidiotMaps=[],n.validateKey(t),this.serverGroup=e,this.key=t}return e.prototype.load=function(e){var t=this;null!=e.name&&(this.name=e.name),null!=e.links&&(this.links=(this.links||[]).concat(e.links)),e.vidiotMaps&&i.each(e.vidiotMaps,function(e){return t.vidiotMaps.push(new r(t.serverGroup,t).load(e))})},e}();t.GameMap=o;var r=function(){function e(e,t){this.pointsOfInterest=[],this.serverGroup=e,this.map=t}return e.prototype.load=function(e){var t=this;return null!=e.href&&(this.href=e.href),null!=e.name&&(this.name=e.name),e.pointsOfInterest&&i.each(e.pointsOfInterest,function(e){return t.pointsOfInterest.push(new a(t.serverGroup,t.map,t).load(e))}),this},e}();t.VidiotMap=r;var a=function(){function e(e,t,n){this.serverGroup=e,this.map=t,this.vidiotMap=n}return e.prototype.load=function(e){return null!=e.x&&(this.x=e.x),null!=e.y&&(this.y=e.y),null!=e.notes&&(this.notes=e.notes),null!=e.mapKey&&(this.mapKey=e.mapKey),null!=e.badgeKey&&(this.badgeKey=e.badgeKey),null!=e.badgePartialKey&&(this.badgePartialKey=e.badgePartialKey),this},e}();t.VidiotMapPoi=a}.apply(t,i))||(e.exports=o)},function(e,t,n){var i,o;i=[n,t,n(0),n(1)],void 0===(o=function(e,t,n,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){this.partialCache={},n.validateKey(t),this.serverGroup=e,this.key=t}return e.prototype.load=function(e){var t=this;null!=e.type&&(this.type=e.type),null!=e.names&&(this.names=(this.names||[]).concat(e.names)),null!=e.alignment&&(this.alignment=e.alignment),null!=e.badgeText&&(this.badgeText=(this.badgeText||[]).concat(e.badgeText)),null!=e.acquisition&&(this.acquisition=e.acquisition),null!=e.icons&&(this.icons=(this.icons||[]).concat(e.icons)),null!=e.notes&&(this.notes=e.notes),null!=e.links&&(this.links=(this.links||[]).concat(e.links)),null!=e.mapKey&&(this.mapKey=e.mapKey),null!=e.location&&(this.location=e.location),null!=e.effect&&(this.effect=e.effect),null!=e.vidiotMapKey&&(this.vidiotMapKey=e.vidiotMapKey),null!=e.setTitleId&&(this.setTitleId=e.setTitleId),null!=e.setTitleIdPraetorian&&(this.setTitleIdPraetorian=e.setTitleIdPraetorian),null!=e.ignoreInTotals&&(this.ignoreInTotals=e.ignoreInTotals),null!=e.partials&&(i.each(e.partials,function(e){return n.getOrDefine(e.key,t.partialCache,function(e){return new r(t.serverGroup,t,e)}).load(e)}),this.partials=i.values(this.partialCache))},e.prototype.getPartial=function(e){return this.partialCache[e]},e}();t.Badge=o;var r=function(){function e(e,t,i){n.validateKey(i),this.key=i,this.serverGroup=e,this.parent=t}return e.prototype.load=function(e){null!=e.type&&(this.type=e.type),null!=e.mapKey&&(this.mapKey=e.mapKey),null!=e.location&&(this.location=e.location),null!=e.plaqueType&&(this.plaqueType=e.plaqueType),null!=e.inscription&&(this.inscription=e.inscription),null!=e.vidiotMapKey&&(this.vidiotMapKey=e.vidiotMapKey),null!=e.badgeKey&&(this.badgeKey=e.badgeKey),null!=e.inventionLevel&&(this.inventionLevel=e.inventionLevel),null!=e.inventionTypes&&(this.inventionTypes=e.inventionTypes),null!=e.count&&(this.count=e.count),null!=e.notes&&(this.notes=e.notes)},e}();t.BadgePartial=r}.apply(t,i))||(e.exports=o)},function(e,t,n){var i;void 0===(i=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Changelog={"1.0.0":"* Initial release.","1.0.1":"* Type encapsulation for ServerData and Archetype.","1.1.0":"* Badge icons are now urls instead of keys.\n* Badge icons have moved from `badge.imageKeys` to `badge.icons`.\n* Changelog is now just a markdown block instead of a string array.\n","1.1.1":"* `IGameMap.links` is now optional.","1.1.2":"* https://github.com/n15g/coh-content-db/issues/3 - Added `setTitleId` property for badges. Used to store the `settitle` slash command number of the badge.","1.1.3":"* Added some content reference utility functions.","1.2.0":"* https://github.com/n15g/coh-content-db/issues/4 - Added a field `ignoreInTotals` to `Badge`, allowing badges to be ignored in badge total calculations, for badges like [Flames of Prometheus] and [Bug Hunter].","1.3.1":"* https://github.com/n15g/coh-content-db/issues/5 - Added vidiot map data to maps.","1.3.2":"* Added badge partial support for vidiot map POIs.","1.4.0":"* https://github.com/n15g/coh-content-db/issues/7 - Settitle ids for Praetorian badges.","1.4.1":"* https://github.com/n15g/coh-content-db/pull/9 - Added Primal alignment value."}}.apply(t,[n,t]))||(e.exports=i)},function(e,t,n){var i;void 0===(i=function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.badgeReference=function(e){return"[badge:"+e.key+"]"},t.mapReference=function(e){return"[map:"+e.key+"]"}}.apply(t,[n,t]))||(e.exports=i)}])});
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jb2gtY29udGVudC1kYi93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvaW50ZXJuYWwvX2NvbW1vbi50cyIsIndlYnBhY2s6Ly9jb2gtY29udGVudC1kYi9leHRlcm5hbCB7XCJjb21tb25qc1wiOlwibG9kYXNoXCIsXCJjb21tb25qczJcIjpcImxvZGFzaFwiLFwiYW1kXCI6XCJsb2Rhc2hcIixcInJvb3RcIjpcIl9cIn0iLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvdHlwZXMvYmFkZ2UudHMiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvdHlwZXMvZW5oYW5jZW1lbnQudHMiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvdHlwZXMvc2VydmVyLWdyb3VwLnRzIiwid2VicGFjazovL2NvaC1jb250ZW50LWRiLy4vc3JjL2NvaC1jb250ZW50LWRiLnRzIiwid2VicGFjazovL2NvaC1jb250ZW50LWRiLy4vc3JjL2ludGVybmFsL3NlcnZlci1ncm91cC50cyIsIndlYnBhY2s6Ly9jb2gtY29udGVudC1kYi8uL3NyYy9pbnRlcm5hbC9hcmNoZXR5cGUudHMiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvaW50ZXJuYWwvZ2FtZS1tYXAudHMiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvaW50ZXJuYWwvYmFkZ2UudHMiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvX2NoYW5nZWxvZy50cyIsIndlYnBhY2s6Ly9jb2gtY29udGVudC1kYi8uL3NyYy9jb250ZW50LXJlZmVuY2UtdXRpbHMudHMiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwicmVxdWlyZSIsImRlZmluZSIsImFtZCIsIndpbmRvdyIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzFfXyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJLRVlfRk9STUFUIiwidGVzdCIsIkVycm9yIiwiY2FjaGUiLCJwcm92aWRlciIsImVudHJ5IiwidW5kZWZpbmVkIiwiQ29oQ29udGVudERiIiwiQ2hhbmdlbG9nIiwiQmFkZ2VUeXBlIiwiQmFkZ2VQYXJ0aWFsVHlwZSIsIkFsdGVybmF0ZSIsIkFMSUdOTUVOVF9IRVJPIiwiaCIsInYiLCJBTElHTk1FTlRfVklMTEFJTiIsIkFMSUdOTUVOVF9QUklNQUwiLCJBTElHTk1FTlRfUFJBRVRPUklBTiIsIkFMSUdOTUVOVF9BTlkiLCJQbGFxdWVUeXBlIiwiRW5oYW5jZW1lbnRDYXRlZ29yeSIsIlNlcnZlckdyb3VwU3RhdHVzIiwic2VydmVyR3JvdXBzIiwibG9hZCIsImRhdGEiLCJnZXRPckRlZmluZSIsInRoaXMiLCJTZXJ2ZXJHcm91cCIsImdldFNlcnZlckdyb3VwcyIsIl8iLCJ2YWx1ZXMiLCJnZXRTZXJ2ZXJHcm91cCIsInNlcnZlckdyb3VwS2V5IiwiYXJjaGV0eXBlcyIsIm1hcHMiLCJiYWRnZXMiLCJjaGFuZ2Vsb2ciLCJhcmNoZXR5cGVDYWNoZSIsIm1hcENhY2hlIiwiYmFkZ2VDYWNoZSIsInZhbGlkYXRlS2V5IiwiZGVzY3JpcHRpb24iLCJzdGF0dXMiLCJyZXBvc2l0b3J5Iiwic2VydmVycyIsImVhY2giLCJBcmNoZXR5cGUiLCJHYW1lTWFwIiwiQmFkZ2UiLCJnZXRBcmNoZXR5cGUiLCJnZXRNYXAiLCJnZXRCYWRnZSIsInNlcnZlckdyb3VwIiwidmlkaW90TWFwcyIsImxpbmtzIiwidmlkaW90TWFwRGF0YSIsInB1c2giLCJWaWRpb3RNYXAiLCJtYXAiLCJwb2ludHNPZkludGVyZXN0IiwiaHJlZiIsInBvaURhdGEiLCJWaWRpb3RNYXBQb2kiLCJ2aWRpb3RNYXAiLCJ4IiwieSIsIm5vdGVzIiwibWFwS2V5IiwiYmFkZ2VLZXkiLCJiYWRnZVBhcnRpYWxLZXkiLCJwYXJ0aWFsQ2FjaGUiLCJ0eXBlIiwibmFtZXMiLCJhbGlnbm1lbnQiLCJiYWRnZVRleHQiLCJhY3F1aXNpdGlvbiIsImljb25zIiwibG9jYXRpb24iLCJlZmZlY3QiLCJ2aWRpb3RNYXBLZXkiLCJzZXRUaXRsZUlkIiwic2V0VGl0bGVJZFByYWV0b3JpYW4iLCJpZ25vcmVJblRvdGFscyIsInBhcnRpYWxzIiwiQmFkZ2VQYXJ0aWFsIiwiZ2V0UGFydGlhbCIsInBhcmVudCIsInBsYXF1ZVR5cGUiLCJpbnNjcmlwdGlvbiIsImludmVudGlvbkxldmVsIiwiaW52ZW50aW9uVHlwZXMiLCJjb3VudCIsImJhZGdlIl0sIm1hcHBpbmdzIjoiQ0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsRUFBUUcsUUFBUSxXQUNSLG1CQUFYQyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8saUJBQWtCLENBQUMsVUFBV0osR0FDWCxpQkFBWkMsUUFDZEEsUUFBUSxrQkFBb0JELEVBQVFHLFFBQVEsV0FFNUNKLEVBQUssa0JBQW9CQyxFQUFRRCxFQUFRLEdBUjNDLENBU0dPLE9BQVEsU0FBU0MsR0FDcEIsTyxZQ1RFLElBQUlDLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixH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QUE2Qi9ELEtBQUsrRCxlQUFpQmpFLEVBQUtpRSxnQkFDdENuRixNQUF2QmtCLEVBQUtrRSxpQkFBNkJoRSxLQUFLZ0UsZUFBaUJsRSxFQUFLa0UsZ0JBQy9DcEYsTUFBZGtCLEVBQUttRSxRQUFvQmpFLEtBQUtpRSxNQUFRbkUsRUFBS21FLE9BQzdCckYsTUFBZGtCLEVBQUswQyxRQUFvQnhDLEtBQUt3QyxNQUFRMUMsRUFBSzBDLFFBRXZELEVBckNBLEdBQWEsRUFBQWtCLGdCLDBJQ2pFQSxFQUFBNUUsVUFBc0MsQ0FDL0MsUUFBUyxxQkFDVCxRQUFTLHFEQUVULFFBQVMsd0xBR1QsUUFBUyxzQ0FDVCxRQUFTLDhKQUNULFFBQVMsb0RBRVQsUUFBUyxxTkFHVCxRQUFTLHFGQUNULFFBQVMscURBRVQsUUFBUywwRkFDVCxRQUFTLG9GLDhJQ2ZiLDBCQUErQm9GLEdBQzNCLE1BQU8sVUFBVUEsRUFBTXJHLElBQUcsS0FHOUIsd0JBQTZCbUUsR0FDekIsTUFBTyxRQUFRQSxFQUFJbkUsSUFBRyxNIiwiZmlsZSI6ImNvaC1jb250ZW50LWRiLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwibG9kYXNoXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiY29oLWNvbnRlbnQtZGJcIiwgW1wibG9kYXNoXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImNvaC1jb250ZW50LWRiXCJdID0gZmFjdG9yeShyZXF1aXJlKFwibG9kYXNoXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJjb2gtY29udGVudC1kYlwiXSA9IGZhY3Rvcnkocm9vdFtcIl9cIl0pO1xufSkod2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18xX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMik7XG4iLCJjb25zdCBLRVlfRk9STUFUID0gL1teYS16MC05XFwtXS87XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUtleShrZXk6IHN0cmluZykge1xuICAgIGlmIChLRVlfRk9STUFULnRlc3Qoa2V5KSkgdGhyb3cgbmV3IEVycm9yKGBCYWQga2V5OiBbJHtrZXl9XTsgS2V5cyBjYW4gb25seSBjb250YWluIGxvd2VyY2FzZSBjaGFyYWN0ZXJzLCBudW1iZXJzIGFuZCBkYXNoZXMuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPckRlZmluZTxUPihrZXk6IHN0cmluZywgY2FjaGU6IHsgW2lkOiBzdHJpbmddOiBUIH0sIHByb3ZpZGVyOiAoa2V5OiBzdHJpbmcpID0+IFQpOiBUIHtcbiAgICBsZXQgZW50cnkgPSBjYWNoZVtrZXldO1xuXG4gICAgaWYgKGVudHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZW50cnkgPSBjYWNoZVtrZXldID0gcHJvdmlkZXIoa2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cnk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzFfXzsiLCJleHBvcnQgKiBmcm9tIFwiLi90eXBlcy9iYWRnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvZW5oYW5jZW1lbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzL2dhbWUtbWFwXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy9saW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy9zZXJ2ZXItZ3JvdXBcIjtcblxuZXhwb3J0IHtDb2hDb250ZW50RGJ9IGZyb20gXCIuL2NvaC1jb250ZW50LWRiXCI7XG5cbmV4cG9ydCB7Q2hhbmdlbG9nfSBmcm9tIFwiLi9fY2hhbmdlbG9nXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2NvbnRlbnQtcmVmZW5jZS11dGlsc1wiO1xuIiwiaW1wb3J0IHtJTGlua30gZnJvbSBcIi4vbGlua1wiO1xuaW1wb3J0IHtJU2VydmVyR3JvdXB9IGZyb20gXCIuL3NlcnZlci1ncm91cFwiO1xuaW1wb3J0IHtFbmhhbmNlbWVudENhdGVnb3J5fSBmcm9tIFwiLi9lbmhhbmNlbWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElCYWRnZURhdGEge1xuICAgIC8qKlxuICAgICAqIEtleS5cbiAgICAgKi9cbiAgICByZWFkb25seSBrZXk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEJhZGdlIHR5cGUuXG4gICAgICovXG4gICAgcmVhZG9ubHkgdHlwZT86IEJhZGdlVHlwZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lcyB0aGlzIGJhZGdlIGlzIGtub3duIGJ5LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG5hbWVzPzogSUFsdGVybmF0ZVZhbHVlW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50cyB0aGlzIGJhZGdlIGNhbiBiZSBvYnRhaW5lZCBieS5cbiAgICAgKi9cbiAgICByZWFkb25seSBhbGlnbm1lbnQ/OiBJQWxpZ25tZW50RmxhZ3M7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW4tZ2FtZSBiYWRnZSB0ZXh0LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGJhZGdlVGV4dD86IElBbHRlcm5hdGVWYWx1ZVtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCB1c2VkIHRvIGFjcXVpcmUgdGhlIGJhZGdlLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGFjcXVpc2l0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQmFkZ2UgaW1hZ2VzLiBVc2UgdGhlIGFic29sdXRlIHVybCBpbWFnZXMgaG9zdGVkIGluIGEgQ0ROIG9yIHNpbWlsYXIgcHVibGljbHktYWNjZXNzaWJsZSBsb2NhdGlvbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBpY29ucz86IElBbHRlcm5hdGVWYWx1ZVtdXG5cbiAgICAvKipcbiAgICAgKiBOb3RlcyBvciB0aXBzIGFib3V0IHRoZSBiYWRnZS5cbiAgICAgKi9cbiAgICByZWFkb25seSBub3Rlcz86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgbGlua3MgdG8gZXh0ZXJuYWwgcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGxpbmtzPzogSUxpbmtbXTtcblxuICAgIC8qKlxuICAgICAqIEtleSBvZiB0aGUgbWFwIHRoaXMgYmFkZ2UgaXMgZm91bmQgb24gZm9yIGV4cGxvcmF0aW9uIGJhZGdlcy5cbiAgICAgKi9cbiAgICByZWFkb25seSBtYXBLZXk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiAvbG9jIGNvb3JkaW5hdGVzIG9mIHRoZSBiYWRnZSBpbi1nYW1lLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGxvY2F0aW9uPzogbnVtYmVyW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9yIGxldHRlciB0aGUgYmFkZ2UgYXBwZWFycyBhcyBvbiBWaWRpb3QgTWFwcy5cbiAgICAgKi9cbiAgICByZWFkb25seSB2aWRpb3RNYXBLZXk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgdXNlZCB3aXRoIHRoZSBpbi1nYW1lIGBzZXR0aXRsZWAgc2xhc2ggY29tbWFuZCB0byBhcHBseSB0aGUgYmFkZ2UuXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2V0VGl0bGVJZD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNvbWUgcHJhZXRvcmlhbiBiYWRnZXMgaGF2ZSBhIGRpZmZlcmVudCBzZXR0aXRsZSBpZC5cbiAgICAgKi9cbiAgICByZWFkb25seSBzZXRUaXRsZUlkUHJhZXRvcmlhbj86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIGVmZmVjdCB0aGUgYmFkZ2Ugd2lsbCBoYXZlLCBzdWNoIGFzIGEgYnVmZiBvciBncmFudGluZyBhIHRlbXBvcmFyeSBwb3dlci5cbiAgICAgKi9cbiAgICByZWFkb25seSBlZmZlY3Q/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBGb3IgYmFkZ2VzIHRoYXQgaGF2ZSBwYXJ0aWFsIGZ1bGZpbG1lbnQgcmVxdWlyZW1lbnRzLCBzdWNoIGFzIHBsYXF1ZXMgZm9yIGhpc3RvcnkgYmFkZ2VzLCBvciBvdGhlciBiYWRnZXMgZm9yIG1ldGEtYmFkZ2VzIGxpa2UgYWNjb2xhZGVzLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHBhcnRpYWxzPzogSUJhZGdlUGFydGlhbERhdGFbXTtcblxuICAgIC8qKlxuICAgICAqIFNvbWUgYmFkZ2VzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGJhZGdlIHRvdGFsIGNvdW50Li4uIHN1Y2ggYXMgRmxhbWVzIG9mIFByb21ldGhldXMsIHdoaWNoIGNhbiBiZSByZW1vdmVkIGJ5IHJlZGVlbWluZyBpdCBmb3IgYSBOb3RpY2Ugb2YgdGhlIFdlbGwuXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWdub3JlSW5Ub3RhbHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCYWRnZVBhcnRpYWxEYXRhIHtcbiAgICAvKipcbiAgICAgKiBLZXkuXG4gICAgICovXG4gICAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUeXBlIG9mIHBhcnRpYWwuXG4gICAgICovXG4gICAgcmVhZG9ubHkgdHlwZT86IEJhZGdlUGFydGlhbFR5cGU7XG5cbiAgICAvKipcbiAgICAgKiBNYXAgdGhlIHBhcnRpYWwgaXMgbG9jYXRlZCBvbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBtYXBLZXk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiAvbG9jIGNvb3JkaW5hdGVzLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGxvY2F0aW9uPzogbnVtYmVyW107XG5cbiAgICAvKipcbiAgICAgKiBJcyBpdCBhIHdhbGwgcGxhcXVlIG9yIGEgcGh5c2ljYWwgbW9udW1lbnQ/XG4gICAgICovXG4gICAgcmVhZG9ubHkgcGxhcXVlVHlwZT86IFBsYXF1ZVR5cGU7XG5cbiAgICAvKipcbiAgICAgKiBQbGFxdWUgaW5zY3JpcHRpb24uXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5zY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9yIGxldHRlciB0aGUgcGFydGlhbCBhcHBlYXJzIGFzIG9uIFZpZGlvdCBNYXBzLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHZpZGlvdE1hcEtleT86IHN0cmluZztcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhZGdlIHJlcXVpcmVkIGZvciB0aGlzIHBhcnRpYWwuXG4gICAgICovXG4gICAgcmVhZG9ubHkgYmFkZ2VLZXk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBMZXZlbCBvZiB0aGUgaW52ZW50aW9uIHJlcXVpcmVkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGludmVudGlvbkxldmVsPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGVzIG9mIGVuaGFuY2VtZW50cyByZXF1aXJlZCB0byBiZSBjcmFmdGVkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGludmVudGlvblR5cGVzPzogRW5oYW5jZW1lbnRDYXRlZ29yeVtdO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIGludmVudGlvbiBjcmFmdHMgcmVxdWlyZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY291bnQ/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBBbnkgYWRkaXRpb25hbCBub3Rlcy5cbiAgICAgKi9cbiAgICByZWFkb25seSBub3Rlcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gQmFkZ2VUeXBlIHtcbiAgICBFWFBMT1JBVElPTiA9IFwiRVhQTE9SQVRJT05cIixcbiAgICBISVNUT1JZID0gXCJISVNUT1JZXCIsXG4gICAgQUNDT01QTElTSE1FTlQgPSBcIkFDQ09NUExJU0hNRU5UXCIsXG4gICAgQUNISUVWRU1FTlQgPSBcIkFDSElFVkVNRU5UXCIsXG4gICAgQUNDT0xBREUgPSBcIkFDQ09MQURFXCIsXG4gICAgR0xBRElBVE9SID0gXCJHTEFESUFUT1JcIixcbiAgICBWRVRFUkFOID0gXCJWRVRFUkFOXCIsXG4gICAgUFZQID0gXCJQVlBcIixcbiAgICBJTlZFTlRJT04gPSBcIklOVkVOVElPTlwiLFxuICAgIERFRkVBVCA9IFwiREVGRUFUXCIsXG4gICAgRVZFTlQgPSBcIkVWRU5UXCIsXG4gICAgT1VST0JPUk9TID0gXCJPVVJPQk9ST1NcIixcbiAgICBDT05TSUdOTUVOVCA9IFwiQ09OU0lHTk1FTlRcIixcbiAgICBEQVlfSk9CID0gXCJEQVlfSk9CXCIsXG4gICAgQUUgPSBcIkFFXCJcbn1cblxuZXhwb3J0IGVudW0gQmFkZ2VQYXJ0aWFsVHlwZSB7XG4gICAgUExBUVVFID0gXCJQTEFRVUVcIixcbiAgICBCQURHRSA9IFwiQkFER0VcIixcbiAgICBJTlZFTlRJT04gPSBcIklOVkVOVElPTlwiLFxuICAgIC8qKlxuICAgICAqIFNvbWUgaW52ZW50aW9uIGJhZGdlcyByZXF1aXJlIHlvdSB0byBidWlsZCB4IG9mIHR3byBkaWZmZXJlbnQgaW52ZW50aW9uIGxldmVscywgJ3BsdXMgb25lIG9mIGVpdGhlciBsZXZlbCcuXG4gICAgICovXG4gICAgSU5WRU5USU9OX1BMVVNfT05FID0gXCJJTlZFTlRJT05fUExVU19PTkVcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQWx0ZXJuYXRlVmFsdWUge1xuICAgIHJlYWRvbmx5IHR5cGU/OiBBbHRlcm5hdGU7XG4gICAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3IgYmFkZ2VzIHRoYXQgaGF2ZSBhbHRlcm5hdGUgdmFsdWVzIGJhc2VkIG9uIHRoZSBhbGlnbm1lbnQgKEgvVi9QKSBvciBzZXggKE0vRikgb2YgdGhlIGNoYXJhY3Rlci5cbiAqL1xuZXhwb3J0IGVudW0gQWx0ZXJuYXRlIHtcbiAgICBNID0gXCJNXCIsXG4gICAgRiA9IFwiRlwiLFxuICAgIEggPSBcIkhcIixcbiAgICBWID0gXCJWXCIsXG4gICAgUCA9IFwiUFwiLFxuICAgIE1IID0gXCJNSFwiLFxuICAgIE1WID0gXCJNVlwiLFxuICAgIE1QID0gXCJNUFwiLFxuICAgIEZIID0gXCJGSFwiLFxuICAgIEZWID0gXCJGVlwiLFxuICAgIEZQID0gXCJGUFwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFsaWdubWVudEZsYWdzIHtcbiAgICByZWFkb25seSBoOiBib29sZWFuLFxuICAgIHJlYWRvbmx5IHY6IGJvb2xlYW4sXG4gICAgcmVhZG9ubHkgcDogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgQUxJR05NRU5UX0hFUk86IElBbGlnbm1lbnRGbGFncyA9IHtoOiB0cnVlLCB2OiBmYWxzZSwgcDogZmFsc2V9O1xuZXhwb3J0IGNvbnN0IEFMSUdOTUVOVF9WSUxMQUlOOiBJQWxpZ25tZW50RmxhZ3MgPSB7aDogZmFsc2UsIHY6IHRydWUsIHA6IGZhbHNlfTtcbmV4cG9ydCBjb25zdCBBTElHTk1FTlRfUFJJTUFMOiBJQWxpZ25tZW50RmxhZ3MgPSB7aDogdHJ1ZSwgdjogdHJ1ZSwgcDogZmFsc2V9O1xuZXhwb3J0IGNvbnN0IEFMSUdOTUVOVF9QUkFFVE9SSUFOOiBJQWxpZ25tZW50RmxhZ3MgPSB7aDogZmFsc2UsIHY6IGZhbHNlLCBwOiB0cnVlfTtcbmV4cG9ydCBjb25zdCBBTElHTk1FTlRfQU5ZOiBJQWxpZ25tZW50RmxhZ3MgPSB7aDogdHJ1ZSwgdjogdHJ1ZSwgcDogdHJ1ZX07XG5cbmV4cG9ydCBlbnVtIFBsYXF1ZVR5cGUge1xuICAgIFdBTExfUExBUVVFID0gXCJXQUxMX1BMQVFVRVwiLFxuICAgIE1PTlVNRU5UID0gXCJNT05VTUVOVFwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhZGdlIGV4dGVuZHMgSUJhZGdlRGF0YSB7XG4gICAgcmVhZG9ubHkgc2VydmVyR3JvdXA6IElTZXJ2ZXJHcm91cDtcbiAgICByZWFkb25seSBwYXJ0aWFscz86IElCYWRnZVBhcnRpYWxbXTtcblxuICAgIGdldFBhcnRpYWwoa2V5OiBzdHJpbmcpOiBJQmFkZ2VQYXJ0aWFsIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQmFkZ2VQYXJ0aWFsIGV4dGVuZHMgSUJhZGdlUGFydGlhbERhdGEge1xuICAgIHJlYWRvbmx5IHNlcnZlckdyb3VwOiBJU2VydmVyR3JvdXA7XG4gICAgcmVhZG9ubHkgcGFyZW50OiBJQmFkZ2U7XG59XG5cbiIsImV4cG9ydCBlbnVtIEVuaGFuY2VtZW50Q2F0ZWdvcnkge1xuICAgIERFRkVOU0VfREVCVUZGID0gXCJERUZFTlNFX0RFQlVGRlwiLFxuICAgIFRPX0hJVF9ERUJVRkYgPSBcIlRPX0hJVF9ERUJVRkZcIixcbiAgICBUQVVOVCA9IFwiVEFVTlRcIixcbiAgICBDT05GVVNFID0gXCJDT05GVVNFXCIsXG4gICAgSEVBTElORyA9IFwiSEVBTElOR1wiLFxuICAgIERFRkVOU0VfQlVGRiA9IFwiREVGRU5TRV9CVUZGXCIsXG4gICAgUkVTSVNUX0RBTUFHRSA9IFwiUkVTSVNUX0RBTUFHRVwiLFxuICAgIElOVEFOR0lCSUxJVFkgPSBcIklOVEFOR0lCSUxJVFlcIixcbiAgICBTTEVFUCA9IFwiU0xFRVBcIixcbiAgICBTTE9XID0gXCJTTE9XXCIsXG4gICAgSE9MRCA9IFwiSE9MRFwiLFxuICAgIFNUVU4gPSBcIlNUVU5cIixcbiAgICBJTU1PQklMSVpFID0gXCJJTU1PQklMSVpFXCIsXG4gICAgRkVBUiA9IFwiRkVBUlwiLFxuICAgIEVORFVSQU5DRV9NT0RJRklDQVRJT04gPSBcIkVORFVSQU5DRV9NT0RJRklDQVRJT05cIixcbiAgICBFTkRVUkFOQ0VfUkVEVUNUSU9OID0gXCJFTkRVUkFOQ0VfUkVEVUNUSU9OXCIsXG4gICAgUkVDSEFSR0VfUkVEVUNUSU9OID0gXCJSRUNIQVJHRV9SRURVQ1RJT05cIixcbiAgICBJTlRFUlJVUFRfRFVSQVRJT04gPSBcIklOVEVSUlVQVF9EVVJBVElPTlwiLFxuICAgIEFDQ1VSQUNZID0gXCJBQ0NVUkFDWVwiLFxuICAgIFRPX0hJVF9CVUZGID0gXCJUT19ISVRfQlVGRlwiLFxuICAgIERBTUFHRSA9IFwiREFNQUdFXCIsXG4gICAgS05PQ0tCQUNLID0gXCJLTk9DS0JBQ0tcIixcbiAgICBSVU5fU1BFRUQgPSBcIlJVTl9TUEVFRFwiLFxuICAgIEpVTVAgPSBcIkpVTVBcIixcbiAgICBGTFlfU1BFRUQgPSBcIkZMWV9TUEVFRFwiLFxuICAgIFJBTkdFID0gXCJSQU5HRVwiXG59XG4iLCJpbXBvcnQge0lCYWRnZSwgSUJhZGdlRGF0YX0gZnJvbSBcIi4vYmFkZ2VcIjtcbmltcG9ydCB7SUdhbWVNYXAsIElHYW1lTWFwRGF0YX0gZnJvbSBcIi4vZ2FtZS1tYXBcIjtcbmltcG9ydCB7SUFyY2hldHlwZSwgSUFyY2hldHlwZURhdGF9IGZyb20gXCIuL2FyY2hldHlwZVwiO1xuXG4vKipcbiAqIEEgc2VydmVyIGdyb3VwIGlzIGEgY29sbGVjdGlvbiBvZiBnYW1lIHNlcnZlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNlcnZlckdyb3VwRGF0YSB7XG4gICAgLyoqXG4gICAgICogS2V5LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIHNlcnZlciBncm91cC5cbiAgICAgKi9cbiAgICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIERlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2ZXIgZ3JvdXAuIE1hcmtkb3duIGFsbG93ZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTdGF0dXMgb2YgdGhlIGNvbnRlbnQgbW9kdWxlLiB7QHNlZSBTZXJ2ZXJHcm91cFN0YXR1c30uXG4gICAgICovXG4gICAgcmVhZG9ubHkgc3RhdHVzPzogU2VydmVyR3JvdXBTdGF0dXNbXTtcblxuICAgIC8qKlxuICAgICAqIFJlcG9zaXRvcnkgd2hlcmUgdGhlIGRiIGNvbnRlbnQgcGFja2FnZSBpcyBtYWludGFpbmVkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHJlcG9zaXRvcnk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIHRoZSBuYW1lcyBvZiB0aGUgc2VydmVycyBpbiB0aGlzIGdyb3VwLlxuICAgICAqIFRvcmNoYmVhcmVyLCBFeGNlbHNpb3IsIGV0Yy5cbiAgICAgKi9cbiAgICByZWFkb25seSBzZXJ2ZXJzPzogSVNlcnZlckRhdGFbXTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgYXJjaGV0eXBlcyBhdmFpbGFibGUgb24gdGhpcyBncm91cC5cbiAgICAgKi9cbiAgICByZWFkb25seSBhcmNoZXR5cGVzPzogSUFyY2hldHlwZURhdGFbXTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgZ2FtZSBtYXBzIHN1cHBvcnRlZCBieSB0aGlzIHNlcnZlciBncm91cC5cbiAgICAgKi9cbiAgICByZWFkb25seSBtYXBzPzogSUdhbWVNYXBEYXRhW107XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGJhZGdlcyBhdmFpbGFibGUgb24gdGhpcyBzZXJ2ZXIgZ3JvdXAuXG4gICAgICovXG4gICAgcmVhZG9ubHkgYmFkZ2VzPzogSUJhZGdlRGF0YVtdO1xuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIGxvZy5cbiAgICAgKi9cbiAgICByZWFkb25seSBjaGFuZ2Vsb2c/OiB7IFtpZDogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlcnZlckRhdGEge1xuICAgIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gU2VydmVyR3JvdXBTdGF0dXMge1xuICAgIC8qKlxuICAgICAqIFBhY2thZ2UgaXMgc3RpbGwgYmVpbmcgZGV2ZWxvcGVkLCBhbmQgbWF5IGJlIG1pc3Npbmcgc29tZSBkYXRhIG9yIHNvbWUgZGF0YSBtYXkgYmUgaW5hY2N1cmF0ZS5cbiAgICAgKi9cbiAgICBXT1JLX0lOX1BST0dSRVNTID0gXCJXT1JLX0lOX1BST0dSRVNTXCIsXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNlcnZlciBncm91cCBoYXMgYmVlbiBzdW5zZXQsIGFuZCBpcyBub3QgbG9uZ2VyIGJlaW5nIG1haW50YWluZWQvZGV2ZWxvcGVkLlxuICAgICAqL1xuICAgIFNVTlNFVCA9IFwiU1VOU0VUXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VydmVyR3JvdXAgZXh0ZW5kcyBJU2VydmVyR3JvdXBEYXRhIHtcbiAgICByZWFkb25seSBzZXJ2ZXJzPzogSVNlcnZlcltdO1xuICAgIHJlYWRvbmx5IGFyY2hldHlwZXM/OiBJQXJjaGV0eXBlW107XG4gICAgcmVhZG9ubHkgbWFwcz86IElHYW1lTWFwW107XG4gICAgcmVhZG9ubHkgYmFkZ2VzPzogSUJhZGdlW107XG5cbiAgICBnZXRBcmNoZXR5cGUoa2V5OiBzdHJpbmcpOiBJQXJjaGV0eXBlIHwgbnVsbDtcblxuICAgIGdldE1hcChrZXk6IHN0cmluZyk6IElHYW1lTWFwIHwgbnVsbDtcblxuICAgIGdldEJhZGdlKGtleTogc3RyaW5nKTogSUJhZGdlIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VydmVyIGV4dGVuZHMgSVNlcnZlckRhdGEge1xuXG59XG4iLCJpbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7SVNlcnZlckdyb3VwLCBJU2VydmVyR3JvdXBEYXRhfSBmcm9tIFwiLi90eXBlcy9zZXJ2ZXItZ3JvdXBcIjtcbmltcG9ydCB7Z2V0T3JEZWZpbmV9IGZyb20gXCIuL2ludGVybmFsL19jb21tb25cIjtcbmltcG9ydCB7U2VydmVyR3JvdXB9IGZyb20gXCIuL2ludGVybmFsL3NlcnZlci1ncm91cFwiO1xuXG5pbnRlcmZhY2UgSUNvaENvbnRlbnREYiB7XG4gICAgLyoqXG4gICAgICogTG9hZCBzZXJ2ZXIgZ3JvdXAgZGF0YSBwYWNrYWdlIGludG8gdGhlIGRhdGFiYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGxvYWQuXG4gICAgICovXG4gICAgbG9hZChkYXRhOiBJU2VydmVyR3JvdXBEYXRhKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgdGhlIHNlcnZlciBncm91cHMgY3VycmVudGx5IGxvYWRlZCBpbiB0aGUgZGF0YWJhc2UuXG4gICAgICovXG4gICAgZ2V0U2VydmVyR3JvdXBzKCk6IElTZXJ2ZXJHcm91cFtdO1xuXG4gICAgLyoqXG4gICAgICogZ2V0IGEgc2VydmVyIGdyb3VwIGJ5IGtleS5cbiAgICAgKiBAcGFyYW0gc2VydmVyR3JvdXBLZXkgVGhlIGtleS5cbiAgICAgKi9cbiAgICBnZXRTZXJ2ZXJHcm91cChzZXJ2ZXJHcm91cEtleTogc3RyaW5nKTogSVNlcnZlckdyb3VwIHwgbnVsbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvaENvbnRlbnREYiBpbXBsZW1lbnRzIElDb2hDb250ZW50RGIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmVyR3JvdXBzOiB7IFtpZDogc3RyaW5nXTogU2VydmVyR3JvdXAgfSA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKiBAb3ZlcnJpZGVcbiAgICAgKi9cbiAgICBsb2FkKGRhdGE6IElTZXJ2ZXJHcm91cERhdGEpIHtcbiAgICAgICAgY29uc3Qgc2VydmVyR3JvdXAgPSBnZXRPckRlZmluZShkYXRhLmtleSwgdGhpcy5zZXJ2ZXJHcm91cHMsIChrZXkpID0+IG5ldyBTZXJ2ZXJHcm91cChrZXkpKTtcbiAgICAgICAgc2VydmVyR3JvdXAubG9hZChkYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqIEBvdmVycmlkZVxuICAgICAqL1xuICAgIGdldFNlcnZlckdyb3VwcygpOiBJU2VydmVyR3JvdXBbXSB7XG4gICAgICAgIHJldHVybiBfLnZhbHVlcyh0aGlzLnNlcnZlckdyb3Vwcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKiBAb3ZlcnJpZGVcbiAgICAgKi9cbiAgICBnZXRTZXJ2ZXJHcm91cChzZXJ2ZXJHcm91cEtleTogc3RyaW5nKTogSVNlcnZlckdyb3VwIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZlckdyb3Vwc1tzZXJ2ZXJHcm91cEtleV07XG4gICAgfVxufVxuIiwiaW1wb3J0IHtJQmFkZ2UsIElHYW1lTWFwLCBJU2VydmVyLCBJU2VydmVyR3JvdXAsIElTZXJ2ZXJHcm91cERhdGEsIFNlcnZlckdyb3VwU3RhdHVzfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7SUFyY2hldHlwZX0gZnJvbSBcIi4uL3R5cGVzL2FyY2hldHlwZVwiO1xuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQge0FyY2hldHlwZX0gZnJvbSBcIi4vYXJjaGV0eXBlXCI7XG5pbXBvcnQge0dhbWVNYXB9IGZyb20gXCIuL2dhbWUtbWFwXCI7XG5pbXBvcnQge0JhZGdlfSBmcm9tIFwiLi9iYWRnZVwiO1xuaW1wb3J0IHtnZXRPckRlZmluZSwgdmFsaWRhdGVLZXl9IGZyb20gXCIuL19jb21tb25cIjtcblxuZXhwb3J0IGNsYXNzIFNlcnZlckdyb3VwIGltcGxlbWVudHMgSVNlcnZlckdyb3VwIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gICAgcHVibGljIG5hbWU/OiBzdHJpbmc7XG4gICAgcHVibGljIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIHB1YmxpYyBzdGF0dXM/OiBTZXJ2ZXJHcm91cFN0YXR1c1tdO1xuICAgIHB1YmxpYyByZXBvc2l0b3J5Pzogc3RyaW5nO1xuICAgIHB1YmxpYyBzZXJ2ZXJzPzogSVNlcnZlcltdO1xuICAgIHB1YmxpYyBhcmNoZXR5cGVzOiBJQXJjaGV0eXBlW10gPSBbXTtcbiAgICBwdWJsaWMgbWFwczogSUdhbWVNYXBbXSA9IFtdO1xuICAgIHB1YmxpYyBiYWRnZXM6IElCYWRnZVtdID0gW107XG4gICAgcHVibGljIGNoYW5nZWxvZzogeyBbaWQ6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgICBwcml2YXRlIGFyY2hldHlwZUNhY2hlOiB7IFtpZDogc3RyaW5nXTogQXJjaGV0eXBlIH0gPSB7fTtcbiAgICBwcml2YXRlIG1hcENhY2hlOiB7IFtpZDogc3RyaW5nXTogR2FtZU1hcCB9ID0ge307XG4gICAgcHJpdmF0ZSBiYWRnZUNhY2hlOiB7IFtpZDogc3RyaW5nXTogQmFkZ2UgfSA9IHt9O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHZhbGlkYXRlS2V5KGtleSk7XG5cbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWQoZGF0YTogSVNlcnZlckdyb3VwRGF0YSkge1xuICAgICAgICBpZiAoZGF0YS5uYW1lICE9IHVuZGVmaW5lZCkgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xuICAgICAgICBpZiAoZGF0YS5kZXNjcmlwdGlvbiAhPSB1bmRlZmluZWQpIHRoaXMuZGVzY3JpcHRpb24gPSBkYXRhLmRlc2NyaXB0aW9uO1xuICAgICAgICBpZiAoZGF0YS5zdGF0dXMgIT0gdW5kZWZpbmVkKSB0aGlzLnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgICAgICBpZiAoZGF0YS5yZXBvc2l0b3J5ICE9IHVuZGVmaW5lZCkgdGhpcy5yZXBvc2l0b3J5ID0gZGF0YS5yZXBvc2l0b3J5O1xuICAgICAgICBpZiAoZGF0YS5zZXJ2ZXJzICE9IHVuZGVmaW5lZCkgdGhpcy5zZXJ2ZXJzID0gZGF0YS5zZXJ2ZXJzO1xuXG4gICAgICAgIGlmIChkYXRhLmFyY2hldHlwZXMgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBfLmVhY2goZGF0YS5hcmNoZXR5cGVzLCBkYXRhID0+XG4gICAgICAgICAgICAgICAgZ2V0T3JEZWZpbmUoZGF0YS5rZXksIHRoaXMuYXJjaGV0eXBlQ2FjaGUsIChrZXkpID0+IG5ldyBBcmNoZXR5cGUodGhpcywga2V5KSlcbiAgICAgICAgICAgICAgICAgICAgLmxvYWQoZGF0YSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmFyY2hldHlwZXMgPSBfLnZhbHVlcyh0aGlzLmFyY2hldHlwZUNhY2hlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLm1hcHMgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBfLmVhY2goZGF0YS5tYXBzLCBkYXRhID0+XG4gICAgICAgICAgICAgICAgZ2V0T3JEZWZpbmUoZGF0YS5rZXksIHRoaXMubWFwQ2FjaGUsIChrZXkpID0+IG5ldyBHYW1lTWFwKHRoaXMsIGtleSkpXG4gICAgICAgICAgICAgICAgICAgIC5sb2FkKGRhdGEpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5tYXBzID0gXy52YWx1ZXModGhpcy5tYXBDYWNoZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5iYWRnZXMgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBfLmVhY2goZGF0YS5iYWRnZXMsIGRhdGEgPT5cbiAgICAgICAgICAgICAgICBnZXRPckRlZmluZShkYXRhLmtleSwgdGhpcy5iYWRnZUNhY2hlLCAoa2V5KSA9PiBuZXcgQmFkZ2UodGhpcywga2V5KSlcbiAgICAgICAgICAgICAgICAgICAgLmxvYWQoZGF0YSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmJhZGdlcyA9IF8udmFsdWVzKHRoaXMuYmFkZ2VDYWNoZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5jaGFuZ2Vsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlbG9nID0gZGF0YS5jaGFuZ2Vsb2c7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXJjaGV0eXBlKGtleTogc3RyaW5nKTogSUFyY2hldHlwZSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5hcmNoZXR5cGVDYWNoZVtrZXldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNYXAoa2V5OiBzdHJpbmcpOiBJR2FtZU1hcCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBDYWNoZVtrZXldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCYWRnZShrZXk6IHN0cmluZyk6IElCYWRnZSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5iYWRnZUNhY2hlW2tleV07XG4gICAgfVxufVxuIiwiaW1wb3J0IHtJQXJjaGV0eXBlLCBJQXJjaGV0eXBlRGF0YX0gZnJvbSBcIi4uL3R5cGVzL2FyY2hldHlwZVwiO1xuaW1wb3J0IHt2YWxpZGF0ZUtleX0gZnJvbSBcIi4vX2NvbW1vblwiO1xuaW1wb3J0IHtTZXJ2ZXJHcm91cH0gZnJvbSBcIi4vc2VydmVyLWdyb3VwXCI7XG5cbmV4cG9ydCBjbGFzcyBBcmNoZXR5cGUgaW1wbGVtZW50cyBJQXJjaGV0eXBlIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VydmVyR3JvdXA6IFNlcnZlckdyb3VwO1xuICAgIHB1YmxpYyByZWFkb25seSBrZXk6IHN0cmluZztcbiAgICBwdWJsaWMgbmFtZT86IHN0cmluZztcbiAgICBwdWJsaWMgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihzZXJ2ZXJHcm91cDogU2VydmVyR3JvdXAsIGtleTogc3RyaW5nKSB7XG4gICAgICAgIHZhbGlkYXRlS2V5KGtleSk7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXJHcm91cCA9IHNlcnZlckdyb3VwO1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZChkYXRhOiBJQXJjaGV0eXBlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YS5uYW1lICE9IHVuZGVmaW5lZCkgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xuICAgICAgICBpZiAoZGF0YS5kZXNjcmlwdGlvbiAhPSB1bmRlZmluZWQpIHRoaXMuZGVzY3JpcHRpb24gPSBkYXRhLmRlc2NyaXB0aW9uO1xuICAgIH1cbn1cbiIsImltcG9ydCB7SUdhbWVNYXAsIElHYW1lTWFwRGF0YSwgSUxpbmssIElWaWRpb3RNYXAsIElWaWRpb3RNYXBEYXRhLCBJVmlkaW90TWFwUG9pLCBJVmlkaW90TWFwUG9pRGF0YX0gZnJvbSBcIi4uXCI7XG5pbXBvcnQge1NlcnZlckdyb3VwfSBmcm9tIFwiLi9zZXJ2ZXItZ3JvdXBcIjtcbmltcG9ydCB7dmFsaWRhdGVLZXl9IGZyb20gXCIuL19jb21tb25cIjtcbmltcG9ydCB7ZWFjaH0gZnJvbSBcImxvZGFzaFwiO1xuXG5leHBvcnQgY2xhc3MgR2FtZU1hcCBpbXBsZW1lbnRzIElHYW1lTWFwIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VydmVyR3JvdXA6IFNlcnZlckdyb3VwO1xuICAgIHB1YmxpYyByZWFkb25seSBrZXk6IHN0cmluZztcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyBsaW5rcz86IElMaW5rW107XG4gICAgcHVibGljIHZpZGlvdE1hcHM/OiBJVmlkaW90TWFwW10gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzZXJ2ZXJHcm91cDogU2VydmVyR3JvdXAsIGtleTogc3RyaW5nKSB7XG4gICAgICAgIHZhbGlkYXRlS2V5KGtleSk7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXJHcm91cCA9IHNlcnZlckdyb3VwO1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZChkYXRhOiBJR2FtZU1hcERhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEubmFtZSAhPSB1bmRlZmluZWQpIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcbiAgICAgICAgaWYgKGRhdGEubGlua3MgIT0gdW5kZWZpbmVkKSB0aGlzLmxpbmtzID0gWy4uLnRoaXMubGlua3MgfHwgW10sIC4uLmRhdGEubGlua3NdO1xuXG4gICAgICAgIGlmIChkYXRhLnZpZGlvdE1hcHMpIHtcbiAgICAgICAgICAgIGVhY2goZGF0YS52aWRpb3RNYXBzLCAodmlkaW90TWFwRGF0YSkgPT4gdGhpcy52aWRpb3RNYXBzLnB1c2gobmV3IFZpZGlvdE1hcCh0aGlzLnNlcnZlckdyb3VwLCB0aGlzKS5sb2FkKHZpZGlvdE1hcERhdGEpKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRpb3RNYXAgaW1wbGVtZW50cyBJVmlkaW90TWFwIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VydmVyR3JvdXA6IFNlcnZlckdyb3VwO1xuICAgIHB1YmxpYyByZWFkb25seSBtYXA6IElHYW1lTWFwO1xuICAgIHB1YmxpYyBocmVmOiBzdHJpbmc7XG4gICAgcHVibGljIG5hbWU/OiBzdHJpbmc7XG4gICAgcHVibGljIHBvaW50c09mSW50ZXJlc3Q6IFZpZGlvdE1hcFBvaVtdID0gW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2VydmVyR3JvdXA6IFNlcnZlckdyb3VwLCBtYXA6IElHYW1lTWFwKSB7XG4gICAgICAgIHRoaXMuc2VydmVyR3JvdXAgPSBzZXJ2ZXJHcm91cDtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWQoZGF0YTogSVZpZGlvdE1hcERhdGEpOiBWaWRpb3RNYXAge1xuICAgICAgICBpZiAoZGF0YS5ocmVmICE9IHVuZGVmaW5lZCkgdGhpcy5ocmVmID0gZGF0YS5ocmVmO1xuICAgICAgICBpZiAoZGF0YS5uYW1lICE9IHVuZGVmaW5lZCkgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xuXG4gICAgICAgIGlmIChkYXRhLnBvaW50c09mSW50ZXJlc3QpIHtcbiAgICAgICAgICAgIGVhY2goZGF0YS5wb2ludHNPZkludGVyZXN0LCAocG9pRGF0YSkgPT4gdGhpcy5wb2ludHNPZkludGVyZXN0LnB1c2gobmV3IFZpZGlvdE1hcFBvaSh0aGlzLnNlcnZlckdyb3VwLCB0aGlzLm1hcCwgdGhpcykubG9hZChwb2lEYXRhKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmlkaW90TWFwUG9pIGltcGxlbWVudHMgSVZpZGlvdE1hcFBvaSB7XG4gICAgcHVibGljIHJlYWRvbmx5IHNlcnZlckdyb3VwOiBTZXJ2ZXJHcm91cDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbWFwOiBJR2FtZU1hcDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmlkaW90TWFwOiBJVmlkaW90TWFwO1xuICAgIHB1YmxpYyB4OiBudW1iZXI7XG4gICAgcHVibGljIHk6IG51bWJlcjtcbiAgICBwdWJsaWMgbm90ZXM/OiBzdHJpbmc7XG4gICAgcHVibGljIG1hcEtleT86IHN0cmluZztcbiAgICBwdWJsaWMgYmFkZ2VLZXk/OiBzdHJpbmc7XG4gICAgcHVibGljIGJhZGdlUGFydGlhbEtleT86IHN0cmluZztcblxuXG4gICAgY29uc3RydWN0b3Ioc2VydmVyR3JvdXA6IFNlcnZlckdyb3VwLCBtYXA6IElHYW1lTWFwLCB2aWRpb3RNYXA6IElWaWRpb3RNYXApIHtcbiAgICAgICAgdGhpcy5zZXJ2ZXJHcm91cCA9IHNlcnZlckdyb3VwO1xuICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICAgICAgdGhpcy52aWRpb3RNYXAgPSB2aWRpb3RNYXA7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWQoZGF0YTogSVZpZGlvdE1hcFBvaURhdGEpOiBWaWRpb3RNYXBQb2kge1xuICAgICAgICBpZiAoZGF0YS54ICE9IHVuZGVmaW5lZCkgdGhpcy54ID0gZGF0YS54O1xuICAgICAgICBpZiAoZGF0YS55ICE9IHVuZGVmaW5lZCkgdGhpcy55ID0gZGF0YS55O1xuICAgICAgICBpZiAoZGF0YS5ub3RlcyAhPSB1bmRlZmluZWQpIHRoaXMubm90ZXMgPSBkYXRhLm5vdGVzO1xuICAgICAgICBpZiAoZGF0YS5tYXBLZXkgIT0gdW5kZWZpbmVkKSB0aGlzLm1hcEtleSA9IGRhdGEubWFwS2V5O1xuICAgICAgICBpZiAoZGF0YS5iYWRnZUtleSAhPSB1bmRlZmluZWQpIHRoaXMuYmFkZ2VLZXkgPSBkYXRhLmJhZGdlS2V5O1xuICAgICAgICBpZiAoZGF0YS5iYWRnZVBhcnRpYWxLZXkgIT0gdW5kZWZpbmVkKSB0aGlzLmJhZGdlUGFydGlhbEtleSA9IGRhdGEuYmFkZ2VQYXJ0aWFsS2V5O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiIsImltcG9ydCB7QmFkZ2VQYXJ0aWFsVHlwZSwgQmFkZ2VUeXBlLCBFbmhhbmNlbWVudENhdGVnb3J5LCBJQWxpZ25tZW50RmxhZ3MsIElBbHRlcm5hdGVWYWx1ZSwgSUJhZGdlLCBJQmFkZ2VEYXRhLCBJQmFkZ2VQYXJ0aWFsLCBJQmFkZ2VQYXJ0aWFsRGF0YSwgSUxpbmssIFBsYXF1ZVR5cGV9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHtTZXJ2ZXJHcm91cH0gZnJvbSBcIi4vc2VydmVyLWdyb3VwXCI7XG5pbXBvcnQge2dldE9yRGVmaW5lLCB2YWxpZGF0ZUtleX0gZnJvbSBcIi4vX2NvbW1vblwiO1xuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XG5cbmV4cG9ydCBjbGFzcyBCYWRnZSBpbXBsZW1lbnRzIElCYWRnZSB7XG4gICAgcHVibGljIHJlYWRvbmx5IHNlcnZlckdyb3VwOiBTZXJ2ZXJHcm91cDtcbiAgICBwdWJsaWMgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gICAgcHVibGljIHR5cGU/OiBCYWRnZVR5cGU7XG4gICAgcHVibGljIG5hbWVzPzogSUFsdGVybmF0ZVZhbHVlW107XG4gICAgcHVibGljIGFsaWdubWVudD86IElBbGlnbm1lbnRGbGFncztcbiAgICBwdWJsaWMgYmFkZ2VUZXh0PzogSUFsdGVybmF0ZVZhbHVlW107XG4gICAgcHVibGljIGFjcXVpc2l0aW9uPzogc3RyaW5nO1xuICAgIHB1YmxpYyBpY29ucz86IElBbHRlcm5hdGVWYWx1ZVtdO1xuICAgIHB1YmxpYyBub3Rlcz86IHN0cmluZztcbiAgICBwdWJsaWMgbGlua3M/OiBJTGlua1tdO1xuICAgIHB1YmxpYyBtYXBLZXk/OiBzdHJpbmc7XG4gICAgcHVibGljIGxvY2F0aW9uPzogbnVtYmVyW107XG4gICAgcHVibGljIHZpZGlvdE1hcEtleT86IHN0cmluZztcbiAgICBwdWJsaWMgc2V0VGl0bGVJZD86IG51bWJlcjtcbiAgICBwdWJsaWMgc2V0VGl0bGVJZFByYWV0b3JpYW4/OiBudW1iZXI7XG4gICAgcHVibGljIGVmZmVjdD86IHN0cmluZztcbiAgICBwdWJsaWMgcGFydGlhbHM/OiBCYWRnZVBhcnRpYWxbXTtcbiAgICBwdWJsaWMgaWdub3JlSW5Ub3RhbHM/OiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBwYXJ0aWFsQ2FjaGU6IHsgW2lkOiBzdHJpbmddOiBCYWRnZVBhcnRpYWwgfSA9IHt9O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNlcnZlckdyb3VwOiBTZXJ2ZXJHcm91cCwga2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdmFsaWRhdGVLZXkoa2V5KTtcblxuICAgICAgICB0aGlzLnNlcnZlckdyb3VwID0gc2VydmVyR3JvdXA7XG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkKGRhdGE6IElCYWRnZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEudHlwZSAhPSB1bmRlZmluZWQpIHRoaXMudHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgaWYgKGRhdGEubmFtZXMgIT0gdW5kZWZpbmVkKSB0aGlzLm5hbWVzID0gWy4uLnRoaXMubmFtZXMgfHwgW10sIC4uLmRhdGEubmFtZXNdO1xuICAgICAgICBpZiAoZGF0YS5hbGlnbm1lbnQgIT0gdW5kZWZpbmVkKSB0aGlzLmFsaWdubWVudCA9IGRhdGEuYWxpZ25tZW50O1xuICAgICAgICBpZiAoZGF0YS5iYWRnZVRleHQgIT0gdW5kZWZpbmVkKSB0aGlzLmJhZGdlVGV4dCA9IFsuLi50aGlzLmJhZGdlVGV4dCB8fCBbXSwgLi4uZGF0YS5iYWRnZVRleHRdO1xuICAgICAgICBpZiAoZGF0YS5hY3F1aXNpdGlvbiAhPSB1bmRlZmluZWQpIHRoaXMuYWNxdWlzaXRpb24gPSBkYXRhLmFjcXVpc2l0aW9uO1xuICAgICAgICBpZiAoZGF0YS5pY29ucyAhPSB1bmRlZmluZWQpIHRoaXMuaWNvbnMgPSBbLi4udGhpcy5pY29ucyB8fCBbXSwgLi4uZGF0YS5pY29uc107XG4gICAgICAgIGlmIChkYXRhLm5vdGVzICE9IHVuZGVmaW5lZCkgdGhpcy5ub3RlcyA9IGRhdGEubm90ZXM7XG4gICAgICAgIGlmIChkYXRhLmxpbmtzICE9IHVuZGVmaW5lZCkgdGhpcy5saW5rcyA9IFsuLi50aGlzLmxpbmtzIHx8IFtdLCAuLi5kYXRhLmxpbmtzXTtcbiAgICAgICAgaWYgKGRhdGEubWFwS2V5ICE9IHVuZGVmaW5lZCkgdGhpcy5tYXBLZXkgPSBkYXRhLm1hcEtleTtcbiAgICAgICAgaWYgKGRhdGEubG9jYXRpb24gIT0gdW5kZWZpbmVkKSB0aGlzLmxvY2F0aW9uID0gZGF0YS5sb2NhdGlvbjtcbiAgICAgICAgaWYgKGRhdGEuZWZmZWN0ICE9IHVuZGVmaW5lZCkgdGhpcy5lZmZlY3QgPSBkYXRhLmVmZmVjdDtcbiAgICAgICAgaWYgKGRhdGEudmlkaW90TWFwS2V5ICE9IHVuZGVmaW5lZCkgdGhpcy52aWRpb3RNYXBLZXkgPSBkYXRhLnZpZGlvdE1hcEtleTtcbiAgICAgICAgaWYgKGRhdGEuc2V0VGl0bGVJZCAhPSB1bmRlZmluZWQpIHRoaXMuc2V0VGl0bGVJZCA9IGRhdGEuc2V0VGl0bGVJZDtcbiAgICAgICAgaWYgKGRhdGEuc2V0VGl0bGVJZFByYWV0b3JpYW4gIT0gdW5kZWZpbmVkKSB0aGlzLnNldFRpdGxlSWRQcmFldG9yaWFuID0gZGF0YS5zZXRUaXRsZUlkUHJhZXRvcmlhbjtcbiAgICAgICAgaWYgKGRhdGEuaWdub3JlSW5Ub3RhbHMgIT0gdW5kZWZpbmVkKSB0aGlzLmlnbm9yZUluVG90YWxzID0gZGF0YS5pZ25vcmVJblRvdGFscztcblxuICAgICAgICBpZiAoZGF0YS5wYXJ0aWFscyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIF8uZWFjaChkYXRhLnBhcnRpYWxzLCBkYXRhID0+XG4gICAgICAgICAgICAgICAgZ2V0T3JEZWZpbmUoZGF0YS5rZXksIHRoaXMucGFydGlhbENhY2hlLCAoa2V5KSA9PiBuZXcgQmFkZ2VQYXJ0aWFsKHRoaXMuc2VydmVyR3JvdXAsIHRoaXMsIGtleSkpXG4gICAgICAgICAgICAgICAgICAgIC5sb2FkKGRhdGEpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5wYXJ0aWFscyA9IF8udmFsdWVzKHRoaXMucGFydGlhbENhY2hlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXJ0aWFsKGtleTogc3RyaW5nKTogSUJhZGdlUGFydGlhbCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJ0aWFsQ2FjaGVba2V5XTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCYWRnZVBhcnRpYWwgaW1wbGVtZW50cyBJQmFkZ2VQYXJ0aWFsIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VydmVyR3JvdXA6IFNlcnZlckdyb3VwO1xuICAgIHB1YmxpYyByZWFkb25seSBwYXJlbnQ6IEJhZGdlO1xuICAgIHB1YmxpYyByZWFkb25seSBrZXk6IHN0cmluZztcbiAgICBwdWJsaWMgdHlwZT86IEJhZGdlUGFydGlhbFR5cGU7XG4gICAgcHVibGljIG1hcEtleT86IHN0cmluZztcbiAgICBwdWJsaWMgbG9jYXRpb24/OiBudW1iZXJbXTtcbiAgICBwdWJsaWMgcGxhcXVlVHlwZT86IFBsYXF1ZVR5cGU7XG4gICAgcHVibGljIGluc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIHB1YmxpYyB2aWRpb3RNYXBLZXk/OiBzdHJpbmc7XG4gICAgcHVibGljIGJhZGdlS2V5Pzogc3RyaW5nO1xuICAgIHB1YmxpYyBpbnZlbnRpb25MZXZlbD86IG51bWJlcjtcbiAgICBwdWJsaWMgaW52ZW50aW9uVHlwZXM/OiBFbmhhbmNlbWVudENhdGVnb3J5W107XG4gICAgcHVibGljIGNvdW50PzogbnVtYmVyO1xuICAgIHB1YmxpYyBub3Rlcz86IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHNlcnZlckdyb3VwOiBTZXJ2ZXJHcm91cCwgcGFyZW50OiBCYWRnZSwga2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdmFsaWRhdGVLZXkoa2V5KTtcblxuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgICAgdGhpcy5zZXJ2ZXJHcm91cCA9IHNlcnZlckdyb3VwO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZChkYXRhOiBJQmFkZ2VQYXJ0aWFsRGF0YSkge1xuICAgICAgICBpZiAoZGF0YS50eXBlICE9IHVuZGVmaW5lZCkgdGhpcy50eXBlID0gZGF0YS50eXBlO1xuICAgICAgICBpZiAoZGF0YS5tYXBLZXkgIT0gdW5kZWZpbmVkKSB0aGlzLm1hcEtleSA9IGRhdGEubWFwS2V5O1xuICAgICAgICBpZiAoZGF0YS5sb2NhdGlvbiAhPSB1bmRlZmluZWQpIHRoaXMubG9jYXRpb24gPSBkYXRhLmxvY2F0aW9uO1xuICAgICAgICBpZiAoZGF0YS5wbGFxdWVUeXBlICE9IHVuZGVmaW5lZCkgdGhpcy5wbGFxdWVUeXBlID0gZGF0YS5wbGFxdWVUeXBlO1xuICAgICAgICBpZiAoZGF0YS5pbnNjcmlwdGlvbiAhPSB1bmRlZmluZWQpIHRoaXMuaW5zY3JpcHRpb24gPSBkYXRhLmluc2NyaXB0aW9uO1xuICAgICAgICBpZiAoZGF0YS52aWRpb3RNYXBLZXkgIT0gdW5kZWZpbmVkKSB0aGlzLnZpZGlvdE1hcEtleSA9IGRhdGEudmlkaW90TWFwS2V5O1xuICAgICAgICBpZiAoZGF0YS5iYWRnZUtleSAhPSB1bmRlZmluZWQpIHRoaXMuYmFkZ2VLZXkgPSBkYXRhLmJhZGdlS2V5O1xuICAgICAgICBpZiAoZGF0YS5pbnZlbnRpb25MZXZlbCAhPSB1bmRlZmluZWQpIHRoaXMuaW52ZW50aW9uTGV2ZWwgPSBkYXRhLmludmVudGlvbkxldmVsO1xuICAgICAgICBpZiAoZGF0YS5pbnZlbnRpb25UeXBlcyAhPSB1bmRlZmluZWQpIHRoaXMuaW52ZW50aW9uVHlwZXMgPSBkYXRhLmludmVudGlvblR5cGVzO1xuICAgICAgICBpZiAoZGF0YS5jb3VudCAhPSB1bmRlZmluZWQpIHRoaXMuY291bnQgPSBkYXRhLmNvdW50O1xuICAgICAgICBpZiAoZGF0YS5ub3RlcyAhPSB1bmRlZmluZWQpIHRoaXMubm90ZXMgPSBkYXRhLm5vdGVzO1xuICAgIH1cbn1cbiIsImV4cG9ydCBjb25zdCBDaGFuZ2Vsb2c6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICBcIjEuMC4wXCI6IFwiKiBJbml0aWFsIHJlbGVhc2UuXCIsXG4gICAgXCIxLjAuMVwiOiBcIiogVHlwZSBlbmNhcHN1bGF0aW9uIGZvciBTZXJ2ZXJEYXRhIGFuZCBBcmNoZXR5cGUuXCIsXG5cbiAgICBcIjEuMS4wXCI6IFwiKiBCYWRnZSBpY29ucyBhcmUgbm93IHVybHMgaW5zdGVhZCBvZiBrZXlzLlxcblwiICtcbiAgICAgICAgXCIqIEJhZGdlIGljb25zIGhhdmUgbW92ZWQgZnJvbSBgYmFkZ2UuaW1hZ2VLZXlzYCB0byBgYmFkZ2UuaWNvbnNgLlxcblwiICtcbiAgICAgICAgXCIqIENoYW5nZWxvZyBpcyBub3cganVzdCBhIG1hcmtkb3duIGJsb2NrIGluc3RlYWQgb2YgYSBzdHJpbmcgYXJyYXkuXFxuXCIsXG4gICAgXCIxLjEuMVwiOiBcIiogYElHYW1lTWFwLmxpbmtzYCBpcyBub3cgb3B0aW9uYWwuXCIsXG4gICAgXCIxLjEuMlwiOiBcIiogaHR0cHM6Ly9naXRodWIuY29tL24xNWcvY29oLWNvbnRlbnQtZGIvaXNzdWVzLzMgLSBBZGRlZCBgc2V0VGl0bGVJZGAgcHJvcGVydHkgZm9yIGJhZGdlcy4gVXNlZCB0byBzdG9yZSB0aGUgYHNldHRpdGxlYCBzbGFzaCBjb21tYW5kIG51bWJlciBvZiB0aGUgYmFkZ2UuXCIsXG4gICAgXCIxLjEuM1wiOiBcIiogQWRkZWQgc29tZSBjb250ZW50IHJlZmVyZW5jZSB1dGlsaXR5IGZ1bmN0aW9ucy5cIixcblxuICAgIFwiMS4yLjBcIjogXCIqIGh0dHBzOi8vZ2l0aHViLmNvbS9uMTVnL2NvaC1jb250ZW50LWRiL2lzc3Vlcy80IC0gQWRkZWQgYSBmaWVsZCBgaWdub3JlSW5Ub3RhbHNgIHRvIGBCYWRnZWAsIGFsbG93aW5nIGJhZGdlcyB0byBiZSBpZ25vcmVkIGluIGJhZGdlIHRvdGFsIGNhbGN1bGF0aW9ucywgZm9yIGJhZGdlcyBsaWtlXCIgK1xuICAgICAgICBcIiBbRmxhbWVzIG9mIFByb21ldGhldXNdIGFuZCBbQnVnIEh1bnRlcl0uXCIsXG5cbiAgICBcIjEuMy4xXCI6IFwiKiBodHRwczovL2dpdGh1Yi5jb20vbjE1Zy9jb2gtY29udGVudC1kYi9pc3N1ZXMvNSAtIEFkZGVkIHZpZGlvdCBtYXAgZGF0YSB0byBtYXBzLlwiLFxuICAgIFwiMS4zLjJcIjogXCIqIEFkZGVkIGJhZGdlIHBhcnRpYWwgc3VwcG9ydCBmb3IgdmlkaW90IG1hcCBQT0lzLlwiLFxuXG4gICAgXCIxLjQuMFwiOiBcIiogaHR0cHM6Ly9naXRodWIuY29tL24xNWcvY29oLWNvbnRlbnQtZGIvaXNzdWVzLzcgLSBTZXR0aXRsZSBpZHMgZm9yIFByYWV0b3JpYW4gYmFkZ2VzLlwiLFxuICAgIFwiMS40LjFcIjogXCIqIGh0dHBzOi8vZ2l0aHViLmNvbS9uMTVnL2NvaC1jb250ZW50LWRiL3B1bGwvOSAtIEFkZGVkIFByaW1hbCBhbGlnbm1lbnQgdmFsdWUuXCIsXG59O1xuIiwiaW1wb3J0IHtJQmFkZ2VEYXRhfSBmcm9tIFwiLi90eXBlcy9iYWRnZVwiO1xuaW1wb3J0IHtJR2FtZU1hcERhdGF9IGZyb20gXCIuL3R5cGVzL2dhbWUtbWFwXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWRnZVJlZmVyZW5jZShiYWRnZTogSUJhZGdlRGF0YSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbYmFkZ2U6JHtiYWRnZS5rZXl9XWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBSZWZlcmVuY2UobWFwOiBJR2FtZU1hcERhdGEpOiBzdHJpbmcge1xuICAgIHJldHVybiBgW21hcDoke21hcC5rZXl9XWA7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ALIGNMENT = ["H", "V", "P"];
|
|
4
|
+
|
|
5
|
+
const BADGE_PARTIAL_TYPE = [
|
|
6
|
+
"PLAQUE",
|
|
7
|
+
"BADGE",
|
|
8
|
+
"INVENTION",
|
|
9
|
+
"INVENTION_PLUS_ONE"
|
|
10
|
+
// Some invention badges require you to build x of two different invention levels, 'plus one of either level'.
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
const BADGE_TYPE = [
|
|
14
|
+
"EXPLORATION",
|
|
15
|
+
"HISTORY",
|
|
16
|
+
"ACCOMPLISHMENT",
|
|
17
|
+
"ACHIEVEMENT",
|
|
18
|
+
"ACCOLADE",
|
|
19
|
+
"GLADIATOR",
|
|
20
|
+
"VETERAN",
|
|
21
|
+
"PVP",
|
|
22
|
+
"INVENTION",
|
|
23
|
+
"DEFEAT",
|
|
24
|
+
"EVENT",
|
|
25
|
+
"OUROBOROS",
|
|
26
|
+
"CONSIGNMENT",
|
|
27
|
+
"DAY_JOB",
|
|
28
|
+
"AE"
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
const ENHANCEMENT_CATEGORY = [
|
|
32
|
+
"DEFENSE_DEBUFF",
|
|
33
|
+
"TO_HIT_DEBUFF",
|
|
34
|
+
"TAUNT",
|
|
35
|
+
"CONFUSE",
|
|
36
|
+
"HEALING",
|
|
37
|
+
"DEFENSE_BUFF",
|
|
38
|
+
"RESIST_DAMAGE",
|
|
39
|
+
"INTANGIBILITY",
|
|
40
|
+
"SLEEP",
|
|
41
|
+
"SLOW",
|
|
42
|
+
"HOLD",
|
|
43
|
+
"STUN",
|
|
44
|
+
"IMMOBILIZE",
|
|
45
|
+
"FEAR",
|
|
46
|
+
"ENDURANCE_MODIFICATION",
|
|
47
|
+
"ENDURANCE_REDUCTION",
|
|
48
|
+
"RECHARGE_REDUCTION",
|
|
49
|
+
"INTERRUPT_DURATION",
|
|
50
|
+
"ACCURACY",
|
|
51
|
+
"TO_HIT_BUFF",
|
|
52
|
+
"DAMAGE",
|
|
53
|
+
"KNOCKBACK",
|
|
54
|
+
"RUN_SPEED",
|
|
55
|
+
"JUMP",
|
|
56
|
+
"FLY_SPEED",
|
|
57
|
+
"RANGE"
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
const PLAQUE_TYPE = [
|
|
61
|
+
"WALL_PLAQUE",
|
|
62
|
+
"MONUMENT"
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const SEX = ["M", "F"];
|
|
66
|
+
|
|
67
|
+
var __typeError$4 = (msg) => {
|
|
68
|
+
throw TypeError(msg);
|
|
69
|
+
};
|
|
70
|
+
var __accessCheck$4 = (obj, member, msg) => member.has(obj) || __typeError$4("Cannot " + msg);
|
|
71
|
+
var __privateGet$4 = (obj, member, getter) => (__accessCheck$4(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
72
|
+
var __privateAdd$4 = (obj, member, value) => member.has(obj) ? __typeError$4("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
73
|
+
var __privateSet$1 = (obj, member, value, setter) => (__accessCheck$4(obj, member, "write to private field"), member.set(obj, value), value);
|
|
74
|
+
var __privateMethod$1 = (obj, member, method) => (__accessCheck$4(obj, member, "access private method"), method);
|
|
75
|
+
var _value, _Key_instances, validateKey_fn;
|
|
76
|
+
const INVALID_KEY_PATTERN = /[^a-z0-9-]/;
|
|
77
|
+
class Key {
|
|
78
|
+
constructor(value) {
|
|
79
|
+
__privateAdd$4(this, _Key_instances);
|
|
80
|
+
__privateAdd$4(this, _value);
|
|
81
|
+
__privateMethod$1(this, _Key_instances, validateKey_fn).call(this, value);
|
|
82
|
+
__privateSet$1(this, _value, value);
|
|
83
|
+
}
|
|
84
|
+
get value() {
|
|
85
|
+
return __privateGet$4(this, _value);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
_value = new WeakMap();
|
|
89
|
+
_Key_instances = new WeakSet();
|
|
90
|
+
validateKey_fn = function(key) {
|
|
91
|
+
if (INVALID_KEY_PATTERN.test(key)) throw new Error(`Invalid key: [${key}]; Keys can only contain lowercase characters, numbers and dashes.`);
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
var __defProp$6 = Object.defineProperty;
|
|
95
|
+
var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
96
|
+
var __publicField$6 = (obj, key, value) => __defNormalProp$6(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
97
|
+
class Archetype {
|
|
98
|
+
constructor(data) {
|
|
99
|
+
__publicField$6(this, "key");
|
|
100
|
+
__publicField$6(this, "name");
|
|
101
|
+
__publicField$6(this, "description");
|
|
102
|
+
this.key = new Key(data.key).value;
|
|
103
|
+
this.name = data.name;
|
|
104
|
+
this.description = data.description;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
var __defProp$5 = Object.defineProperty;
|
|
109
|
+
var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
110
|
+
var __publicField$5 = (obj, key, value) => __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
111
|
+
class BadgePartial {
|
|
112
|
+
constructor(data) {
|
|
113
|
+
__publicField$5(this, "key");
|
|
114
|
+
__publicField$5(this, "type");
|
|
115
|
+
__publicField$5(this, "mapKey");
|
|
116
|
+
__publicField$5(this, "loc");
|
|
117
|
+
__publicField$5(this, "plaqueType");
|
|
118
|
+
__publicField$5(this, "inscription");
|
|
119
|
+
__publicField$5(this, "vidiotMapKey");
|
|
120
|
+
__publicField$5(this, "badgeKey");
|
|
121
|
+
__publicField$5(this, "inventionLevel");
|
|
122
|
+
__publicField$5(this, "inventionTypes");
|
|
123
|
+
__publicField$5(this, "inventionCount");
|
|
124
|
+
__publicField$5(this, "notes");
|
|
125
|
+
this.key = new Key(data.key).value;
|
|
126
|
+
this.type = data.type;
|
|
127
|
+
this.mapKey = data.mapKey;
|
|
128
|
+
this.loc = data.loc;
|
|
129
|
+
this.plaqueType = data.plaqueType;
|
|
130
|
+
this.inscription = data.inscription;
|
|
131
|
+
this.vidiotMapKey = data.vidiotMapKey;
|
|
132
|
+
this.badgeKey = data.badgeKey;
|
|
133
|
+
this.inventionLevel = data.inventionLevel;
|
|
134
|
+
this.inventionTypes = data.inventionTypes;
|
|
135
|
+
this.inventionCount = data.inventionCount;
|
|
136
|
+
this.notes = data.notes;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
var __typeError$3 = (msg) => {
|
|
141
|
+
throw TypeError(msg);
|
|
142
|
+
};
|
|
143
|
+
var __accessCheck$3 = (obj, member, msg) => member.has(obj) || __typeError$3("Cannot " + msg);
|
|
144
|
+
var __privateGet$3 = (obj, member, getter) => (__accessCheck$3(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
145
|
+
var __privateAdd$3 = (obj, member, value) => member.has(obj) ? __typeError$3("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
146
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck$3(obj, member, "write to private field"), member.set(obj, value), value);
|
|
147
|
+
var __privateMethod = (obj, member, method) => (__accessCheck$3(obj, member, "access private method"), method);
|
|
148
|
+
var _sortedValues, _Alternates_instances, compareAlternates_fn, compareAlignment_fn, compareSex_fn;
|
|
149
|
+
const ALIGNMENT_SORT = { H: 2, V: 1, P: 0 };
|
|
150
|
+
const SEX_SORT = { M: 1, F: 0 };
|
|
151
|
+
class Alternates {
|
|
152
|
+
constructor(values) {
|
|
153
|
+
__privateAdd$3(this, _Alternates_instances);
|
|
154
|
+
__privateAdd$3(this, _sortedValues, []);
|
|
155
|
+
__privateSet(this, _sortedValues, values.sort());
|
|
156
|
+
__privateGet$3(this, _sortedValues).sort((a, b) => __privateMethod(this, _Alternates_instances, compareAlternates_fn).call(this, a, b));
|
|
157
|
+
}
|
|
158
|
+
getValue(alignment, sex) {
|
|
159
|
+
for (let index = __privateGet$3(this, _sortedValues).length; index--; ) {
|
|
160
|
+
const entry = __privateGet$3(this, _sortedValues)[index];
|
|
161
|
+
if ((entry.alignment === void 0 || entry.alignment === alignment) && (entry.sex === void 0 || entry.sex === sex)) return entry.value;
|
|
162
|
+
}
|
|
163
|
+
return void 0;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get the default value for this list of alternates, the value with the highest priority and lowest specificity.
|
|
167
|
+
*/
|
|
168
|
+
get default() {
|
|
169
|
+
return __privateGet$3(this, _sortedValues)[0]?.value;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get the list of alternates sorted in canonical order (alignment then sex, low to high specificity).
|
|
173
|
+
*/
|
|
174
|
+
get canonical() {
|
|
175
|
+
return __privateGet$3(this, _sortedValues);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
_sortedValues = new WeakMap();
|
|
179
|
+
_Alternates_instances = new WeakSet();
|
|
180
|
+
compareAlternates_fn = function(a, b) {
|
|
181
|
+
const aSpecificity = (a.alignment ? 2 : 0) + (a.sex ? 1 : 0);
|
|
182
|
+
const bSpecificity = (b.alignment ? 2 : 0) + (b.sex ? 1 : 0);
|
|
183
|
+
if (aSpecificity !== bSpecificity) return aSpecificity - bSpecificity;
|
|
184
|
+
const alignmentComparison = __privateMethod(this, _Alternates_instances, compareAlignment_fn).call(this, a.alignment, b.alignment);
|
|
185
|
+
if (alignmentComparison !== 0) return alignmentComparison;
|
|
186
|
+
const sexComparison = __privateMethod(this, _Alternates_instances, compareSex_fn).call(this, a.sex, b.sex);
|
|
187
|
+
if (sexComparison !== 0) return sexComparison;
|
|
188
|
+
return String(a.value).localeCompare(String(b.value));
|
|
189
|
+
};
|
|
190
|
+
compareAlignment_fn = function(a, b) {
|
|
191
|
+
if (a === b) return 0;
|
|
192
|
+
if (a === void 0 && b !== void 0) return -1;
|
|
193
|
+
if (b === void 0 && a !== void 0) return 1;
|
|
194
|
+
const aSort = a === void 0 ? -1 : ALIGNMENT_SORT[a] ?? -1;
|
|
195
|
+
const bSort = b === void 0 ? -1 : ALIGNMENT_SORT[b] ?? -1;
|
|
196
|
+
if (aSort !== bSort) return bSort - aSort;
|
|
197
|
+
return a?.localeCompare(b ?? "") ?? 0;
|
|
198
|
+
};
|
|
199
|
+
compareSex_fn = function(a, b) {
|
|
200
|
+
if (a === b) return 0;
|
|
201
|
+
if (a === void 0 && b !== void 0) return -1;
|
|
202
|
+
if (b === void 0 && a !== void 0) return 1;
|
|
203
|
+
const aSort = SEX_SORT[a ?? -1] ?? -1;
|
|
204
|
+
const bSort = SEX_SORT[b ?? -1] ?? -1;
|
|
205
|
+
if (aSort !== bSort) return bSort - aSort;
|
|
206
|
+
return a?.localeCompare(b ?? "") ?? 0;
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
var __defProp$4 = Object.defineProperty;
|
|
210
|
+
var __typeError$2 = (msg) => {
|
|
211
|
+
throw TypeError(msg);
|
|
212
|
+
};
|
|
213
|
+
var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
214
|
+
var __publicField$4 = (obj, key, value) => __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
215
|
+
var __accessCheck$2 = (obj, member, msg) => member.has(obj) || __typeError$2("Cannot " + msg);
|
|
216
|
+
var __privateGet$2 = (obj, member, getter) => (__accessCheck$2(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
217
|
+
var __privateAdd$2 = (obj, member, value) => member.has(obj) ? __typeError$2("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
218
|
+
var _partialsIndex;
|
|
219
|
+
class Badge {
|
|
220
|
+
constructor(data) {
|
|
221
|
+
__privateAdd$2(this, _partialsIndex, {});
|
|
222
|
+
/**
|
|
223
|
+
* The database key for this badge.
|
|
224
|
+
*/
|
|
225
|
+
__publicField$4(this, "key");
|
|
226
|
+
/**
|
|
227
|
+
* The type of badge.
|
|
228
|
+
*/
|
|
229
|
+
__publicField$4(this, "type");
|
|
230
|
+
/**
|
|
231
|
+
* The name of this badge.
|
|
232
|
+
*
|
|
233
|
+
* May vary by character sex or alignment.
|
|
234
|
+
*/
|
|
235
|
+
__publicField$4(this, "name");
|
|
236
|
+
/**
|
|
237
|
+
* The character alignments that this badge is available to.
|
|
238
|
+
*/
|
|
239
|
+
__publicField$4(this, "alignment");
|
|
240
|
+
/**
|
|
241
|
+
* The badge text as it appears in-game. May vary by character sex or alignment.
|
|
242
|
+
*/
|
|
243
|
+
__publicField$4(this, "badgeText");
|
|
244
|
+
/**
|
|
245
|
+
* Description of how to acquire the badge.
|
|
246
|
+
*
|
|
247
|
+
* Supports {@link https://www.markdownguide.org/|Markdown} format.
|
|
248
|
+
*/
|
|
249
|
+
__publicField$4(this, "acquisition");
|
|
250
|
+
/**
|
|
251
|
+
* Absolute URL to this badge's icon.
|
|
252
|
+
*
|
|
253
|
+
* May vary by character sex or alignment.
|
|
254
|
+
*/
|
|
255
|
+
__publicField$4(this, "icon");
|
|
256
|
+
/**
|
|
257
|
+
* Freeform notes or tips about the badge.
|
|
258
|
+
*
|
|
259
|
+
* Supports {@link https://www.markdownguide.org/|Markdown} format.
|
|
260
|
+
*/
|
|
261
|
+
__publicField$4(this, "notes");
|
|
262
|
+
/**
|
|
263
|
+
* List of external links for this Badge. Wiki, forums, etc.
|
|
264
|
+
*/
|
|
265
|
+
__publicField$4(this, "links");
|
|
266
|
+
/**
|
|
267
|
+
* For exploration badges, the key of the {@link GameMap} that this badge is found on.
|
|
268
|
+
*/
|
|
269
|
+
__publicField$4(this, "mapKey");
|
|
270
|
+
/**
|
|
271
|
+
* For exploration badges, the `/loc` coordinates of the badge on the in-game map.
|
|
272
|
+
*/
|
|
273
|
+
__publicField$4(this, "loc");
|
|
274
|
+
/**
|
|
275
|
+
* For badges that appear on a Vidiot Map, the number or letter the badge appears as.
|
|
276
|
+
*/
|
|
277
|
+
__publicField$4(this, "vidiotMapKey");
|
|
278
|
+
/**
|
|
279
|
+
* ID used with the in-game `/settitle` command to apply the badge.
|
|
280
|
+
*/
|
|
281
|
+
__publicField$4(this, "setTitle");
|
|
282
|
+
/**
|
|
283
|
+
* A description of the effect the badge will have, such as a buff or granting a temporary power.
|
|
284
|
+
*
|
|
285
|
+
* Supports {@link https://www.markdownguide.org/|Markdown} format.
|
|
286
|
+
*/
|
|
287
|
+
__publicField$4(this, "effect");
|
|
288
|
+
/**
|
|
289
|
+
* A list of requirements for badges that have partial fulfilment steps, such as visiting plaques for history badges, or collecting other badges for meta-badges like accolades.
|
|
290
|
+
*/
|
|
291
|
+
__publicField$4(this, "partials");
|
|
292
|
+
/**
|
|
293
|
+
* Some badges are not included in the badge total count... such as Flames of Prometheus, which can be removed by redeeming it for a Notice of the Well.
|
|
294
|
+
*/
|
|
295
|
+
__publicField$4(this, "ignoreInTotals");
|
|
296
|
+
this.key = new Key(data.key).value;
|
|
297
|
+
this.type = data.type;
|
|
298
|
+
this.name = new Alternates(data.name);
|
|
299
|
+
this.alignment = data.alignment;
|
|
300
|
+
this.badgeText = new Alternates(data.badgeText ?? []);
|
|
301
|
+
this.acquisition = data.acquisition;
|
|
302
|
+
this.icon = new Alternates(data.icon ?? []);
|
|
303
|
+
this.notes = data.notes;
|
|
304
|
+
this.links = data.links;
|
|
305
|
+
this.mapKey = data.mapKey;
|
|
306
|
+
this.loc = data.loc;
|
|
307
|
+
this.effect = data.effect;
|
|
308
|
+
this.vidiotMapKey = data.vidiotMapKey;
|
|
309
|
+
this.setTitle = data.setTitle;
|
|
310
|
+
this.ignoreInTotals = data.ignoreInTotals ?? false;
|
|
311
|
+
this.partials = data.partials?.map((data2) => {
|
|
312
|
+
if (__privateGet$2(this, _partialsIndex)[data2.key] !== void 0) throw new Error(`Duplicate badge partial key [${data2.key}]`);
|
|
313
|
+
const badge = new BadgePartial(data2);
|
|
314
|
+
__privateGet$2(this, _partialsIndex)[badge.key] = badge;
|
|
315
|
+
return badge;
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
getPartial(key) {
|
|
319
|
+
const result = __privateGet$2(this, _partialsIndex)[key];
|
|
320
|
+
if (result === void 0) throw new Error(`Unknown badge partial key [${key}]`);
|
|
321
|
+
return result;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
_partialsIndex = new WeakMap();
|
|
325
|
+
|
|
326
|
+
var __defProp$3 = Object.defineProperty;
|
|
327
|
+
var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
328
|
+
var __publicField$3 = (obj, key, value) => __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
329
|
+
class VidiotMapPointOfInterest {
|
|
330
|
+
constructor(data) {
|
|
331
|
+
/**
|
|
332
|
+
* The pixel-space position of the PoI on the map graphic.
|
|
333
|
+
*
|
|
334
|
+
* Screen-space, pixels from top-left `[0, 0]`.
|
|
335
|
+
*/
|
|
336
|
+
__publicField$3(this, "pos");
|
|
337
|
+
/**
|
|
338
|
+
* Freeform notes about the PoI.
|
|
339
|
+
*
|
|
340
|
+
* Supports {@link https://www.markdownguide.org/|Markdown} format.
|
|
341
|
+
*/
|
|
342
|
+
__publicField$3(this, "notes");
|
|
343
|
+
/**
|
|
344
|
+
* If the POI is a zone transfer, the map it transfers to.
|
|
345
|
+
*/
|
|
346
|
+
__publicField$3(this, "mapKey");
|
|
347
|
+
/**
|
|
348
|
+
* If the POI is a badge, the badge.
|
|
349
|
+
*/
|
|
350
|
+
__publicField$3(this, "badgeKey");
|
|
351
|
+
/**
|
|
352
|
+
* If the POI is a partial for a badge, the partial key.
|
|
353
|
+
*/
|
|
354
|
+
__publicField$3(this, "badgePartialKey");
|
|
355
|
+
this.pos = data.pos;
|
|
356
|
+
this.notes = data.notes;
|
|
357
|
+
this.mapKey = data.mapKey;
|
|
358
|
+
this.badgeKey = data.badgeKey;
|
|
359
|
+
this.badgePartialKey = data.badgePartialKey;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
var __defProp$2 = Object.defineProperty;
|
|
364
|
+
var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
365
|
+
var __publicField$2 = (obj, key, value) => __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
366
|
+
class VidiotMap {
|
|
367
|
+
constructor(data) {
|
|
368
|
+
/**
|
|
369
|
+
* URL of the map image.
|
|
370
|
+
*/
|
|
371
|
+
__publicField$2(this, "imageUrl");
|
|
372
|
+
/**
|
|
373
|
+
* Name to display for the Vidiot map.
|
|
374
|
+
*/
|
|
375
|
+
__publicField$2(this, "name");
|
|
376
|
+
/**
|
|
377
|
+
* List of Points of Interest labelled on the image.
|
|
378
|
+
*/
|
|
379
|
+
__publicField$2(this, "pointsOfInterest");
|
|
380
|
+
this.imageUrl = data.imageUrl;
|
|
381
|
+
this.name = data.name;
|
|
382
|
+
this.pointsOfInterest = data.pointsOfInterest?.map((data2) => new VidiotMapPointOfInterest(data2));
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
var __defProp$1 = Object.defineProperty;
|
|
387
|
+
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
388
|
+
var __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
389
|
+
class GameMap {
|
|
390
|
+
constructor(data) {
|
|
391
|
+
/**
|
|
392
|
+
* The database key for this map.
|
|
393
|
+
*/
|
|
394
|
+
__publicField$1(this, "key");
|
|
395
|
+
/**
|
|
396
|
+
* The name of the map as it appears in-game.
|
|
397
|
+
*/
|
|
398
|
+
__publicField$1(this, "name");
|
|
399
|
+
/**
|
|
400
|
+
* List of external links for this Map. Wiki, forums, etc.
|
|
401
|
+
*/
|
|
402
|
+
__publicField$1(this, "links");
|
|
403
|
+
/**
|
|
404
|
+
* List of Vidiot Map assets for this map.
|
|
405
|
+
*/
|
|
406
|
+
__publicField$1(this, "vidiotMaps");
|
|
407
|
+
this.key = new Key(data.key).value;
|
|
408
|
+
this.name = data.name;
|
|
409
|
+
this.links = data.links;
|
|
410
|
+
this.vidiotMaps = data.vidiotMaps?.map((data2) => new VidiotMap(data2));
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
var __defProp = Object.defineProperty;
|
|
415
|
+
var __typeError$1 = (msg) => {
|
|
416
|
+
throw TypeError(msg);
|
|
417
|
+
};
|
|
418
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
419
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
420
|
+
var __accessCheck$1 = (obj, member, msg) => member.has(obj) || __typeError$1("Cannot " + msg);
|
|
421
|
+
var __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
422
|
+
var __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
423
|
+
var _archetypeIndex, _mapIndex, _badgeIndex;
|
|
424
|
+
class ServerGroup {
|
|
425
|
+
constructor(data) {
|
|
426
|
+
__privateAdd$1(this, _archetypeIndex, {});
|
|
427
|
+
__privateAdd$1(this, _mapIndex, {});
|
|
428
|
+
__privateAdd$1(this, _badgeIndex, {});
|
|
429
|
+
/**
|
|
430
|
+
* The database key for this server group.
|
|
431
|
+
*/
|
|
432
|
+
__publicField(this, "key");
|
|
433
|
+
/**
|
|
434
|
+
* Name of the server group.
|
|
435
|
+
*/
|
|
436
|
+
__publicField(this, "name");
|
|
437
|
+
/**
|
|
438
|
+
* Description of the server group.
|
|
439
|
+
*
|
|
440
|
+
* Supports {@link https://www.markdownguide.org/|Markdown} format.
|
|
441
|
+
*/
|
|
442
|
+
__publicField(this, "description");
|
|
443
|
+
/**
|
|
444
|
+
* Repository where the db content package is maintained.
|
|
445
|
+
*/
|
|
446
|
+
__publicField(this, "repository");
|
|
447
|
+
/**
|
|
448
|
+
* List of external links for this Server Group. Wiki, forums, etc.
|
|
449
|
+
*/
|
|
450
|
+
__publicField(this, "links");
|
|
451
|
+
/**
|
|
452
|
+
* List of the game server names in this server group.
|
|
453
|
+
* Torchbearer, Excelsior, etc.
|
|
454
|
+
*/
|
|
455
|
+
__publicField(this, "servers");
|
|
456
|
+
/**
|
|
457
|
+
* List of archetypes available in this server group.
|
|
458
|
+
*/
|
|
459
|
+
__publicField(this, "archetypes");
|
|
460
|
+
/**
|
|
461
|
+
* List of game maps supported by this server group.
|
|
462
|
+
*/
|
|
463
|
+
__publicField(this, "maps");
|
|
464
|
+
/**
|
|
465
|
+
* List of badges available on this server group.
|
|
466
|
+
*/
|
|
467
|
+
__publicField(this, "badges");
|
|
468
|
+
/**
|
|
469
|
+
* Change log for this data package.
|
|
470
|
+
*/
|
|
471
|
+
__publicField(this, "changelog");
|
|
472
|
+
this.key = new Key(data.key).value;
|
|
473
|
+
this.name = data.name;
|
|
474
|
+
this.description = data.description;
|
|
475
|
+
this.repository = data.repository;
|
|
476
|
+
this.links = data.links;
|
|
477
|
+
this.servers = data.servers ?? [];
|
|
478
|
+
this.archetypes = data.archetypes?.map((data2) => {
|
|
479
|
+
if (__privateGet$1(this, _archetypeIndex)[data2.key] !== void 0) throw new Error(`Duplicate archetype key [${data2.key}]`);
|
|
480
|
+
const archetype = new Archetype(data2);
|
|
481
|
+
__privateGet$1(this, _archetypeIndex)[archetype.key] = archetype;
|
|
482
|
+
return archetype;
|
|
483
|
+
}) ?? [];
|
|
484
|
+
this.maps = data.maps?.map((data2) => {
|
|
485
|
+
if (__privateGet$1(this, _mapIndex)[data2.key] !== void 0) throw new Error(`Duplicate map key [${data2.key}]`);
|
|
486
|
+
const map = new GameMap(data2);
|
|
487
|
+
__privateGet$1(this, _mapIndex)[map.key] = map;
|
|
488
|
+
return map;
|
|
489
|
+
}) ?? [];
|
|
490
|
+
this.badges = data.badges?.map((data2) => {
|
|
491
|
+
if (__privateGet$1(this, _badgeIndex)[data2.key] !== void 0) throw new Error(`Duplicate badge key [${data2.key}]`);
|
|
492
|
+
const badge = new Badge(data2);
|
|
493
|
+
__privateGet$1(this, _badgeIndex)[badge.key] = badge;
|
|
494
|
+
return badge;
|
|
495
|
+
}) ?? [];
|
|
496
|
+
this.changelog = data.changelog;
|
|
497
|
+
}
|
|
498
|
+
getArchetype(key) {
|
|
499
|
+
const result = __privateGet$1(this, _archetypeIndex)[key];
|
|
500
|
+
if (result === void 0) throw new Error(`Unknown archetype key [${key}]`);
|
|
501
|
+
return result;
|
|
502
|
+
}
|
|
503
|
+
getMap(key) {
|
|
504
|
+
const result = __privateGet$1(this, _mapIndex)[key];
|
|
505
|
+
if (result === void 0) throw new Error(`Unknown map key [${key}]`);
|
|
506
|
+
return result;
|
|
507
|
+
}
|
|
508
|
+
getBadge(key) {
|
|
509
|
+
const result = __privateGet$1(this, _badgeIndex)[key];
|
|
510
|
+
if (result === void 0) throw new Error(`Unknown badge key [${key}]`);
|
|
511
|
+
return result;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
_archetypeIndex = new WeakMap();
|
|
515
|
+
_mapIndex = new WeakMap();
|
|
516
|
+
_badgeIndex = new WeakMap();
|
|
517
|
+
|
|
518
|
+
var __typeError = (msg) => {
|
|
519
|
+
throw TypeError(msg);
|
|
520
|
+
};
|
|
521
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
522
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
523
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
524
|
+
var _serverGroups;
|
|
525
|
+
class CohContentDatabase {
|
|
526
|
+
constructor() {
|
|
527
|
+
__privateAdd(this, _serverGroups, {});
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Load a server group data package into the database.
|
|
531
|
+
* @param data The data to load.
|
|
532
|
+
*/
|
|
533
|
+
loadServerGroupData(data) {
|
|
534
|
+
__privateGet(this, _serverGroups)[data.key] = new ServerGroup(data);
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Get all the server groups currently loaded in the database.
|
|
538
|
+
*/
|
|
539
|
+
listServerGroups() {
|
|
540
|
+
return Object.values(__privateGet(this, _serverGroups));
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* get a server group by key.
|
|
544
|
+
* @param serverGroupKey The key.
|
|
545
|
+
*/
|
|
546
|
+
getServerGroup(serverGroupKey) {
|
|
547
|
+
return __privateGet(this, _serverGroups)[serverGroupKey];
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
_serverGroups = new WeakMap();
|
|
551
|
+
|
|
552
|
+
const CHANGELOG = [
|
|
553
|
+
{
|
|
554
|
+
version: "2.0.0",
|
|
555
|
+
date: /* @__PURE__ */ new Date("2025-03-12"),
|
|
556
|
+
description: "* Replaced redundant interfaces with their concrete equivalents.\n* Replaced enums with extensible union types; Server groups with new badge types, enhancement types, etc. can now extend them locally.\n* Removed the `serverGroup` property from entities to simplify the object tree; Server group context will need to be managed separately.\n* Standardized pluralization of some field names (name, icon).\n* Combined `settitle` ids into a single tuple field.\n* Change from GNU to The Unlicense.\n* Removed dependency on lodash. There are now no third-party runtime dependencies.\n* Moved from webpack to rollup for packaging.\n* Add eslint for linting.\n* Add jest for unit tests.\n* Added GitHub Actions for CI.\n"
|
|
557
|
+
}
|
|
558
|
+
];
|
|
559
|
+
|
|
560
|
+
function createBadgeReference(target) {
|
|
561
|
+
const key = typeof target === "string" ? target : target.key;
|
|
562
|
+
return `[badge:${key}]`;
|
|
563
|
+
}
|
|
564
|
+
function createMapReference(target) {
|
|
565
|
+
const key = typeof target === "string" ? target : target.key;
|
|
566
|
+
return `[map:${key}]`;
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
exports.ALIGNMENT = ALIGNMENT;
|
|
570
|
+
exports.Archetype = Archetype;
|
|
571
|
+
exports.BADGE_PARTIAL_TYPE = BADGE_PARTIAL_TYPE;
|
|
572
|
+
exports.BADGE_TYPE = BADGE_TYPE;
|
|
573
|
+
exports.Badge = Badge;
|
|
574
|
+
exports.BadgePartial = BadgePartial;
|
|
575
|
+
exports.CHANGELOG = CHANGELOG;
|
|
576
|
+
exports.CohContentDatabase = CohContentDatabase;
|
|
577
|
+
exports.ENHANCEMENT_CATEGORY = ENHANCEMENT_CATEGORY;
|
|
578
|
+
exports.GameMap = GameMap;
|
|
579
|
+
exports.Key = Key;
|
|
580
|
+
exports.PLAQUE_TYPE = PLAQUE_TYPE;
|
|
581
|
+
exports.SEX = SEX;
|
|
582
|
+
exports.ServerGroup = ServerGroup;
|
|
583
|
+
exports.VidiotMap = VidiotMap;
|
|
584
|
+
exports.VidiotMapPointOfInterest = VidiotMapPointOfInterest;
|
|
585
|
+
exports.createBadgeReference = createBadgeReference;
|
|
586
|
+
exports.createMapReference = createMapReference;
|
|
587
|
+
//# sourceMappingURL=coh-content-db.js.map
|