coh-content-db 1.4.0 → 2.0.0-rc.1
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 -633
- 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 -191
- 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_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."}}.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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jb2gtY29udGVudC1kYi93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvaW50ZXJuYWwvX2NvbW1vbi50cyIsIndlYnBhY2s6Ly9jb2gtY29udGVudC1kYi9leHRlcm5hbCB7XCJjb21tb25qc1wiOlwibG9kYXNoXCIsXCJjb21tb25qczJcIjpcImxvZGFzaFwiLFwiYW1kXCI6XCJsb2Rhc2hcIixcInJvb3RcIjpcIl9cIn0iLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvdHlwZXMvYmFkZ2UudHMiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvdHlwZXMvZW5oYW5jZW1lbnQudHMiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvdHlwZXMvc2VydmVyLWdyb3VwLnRzIiwid2VicGFjazovL2NvaC1jb250ZW50LWRiLy4vc3JjL2NvaC1jb250ZW50LWRiLnRzIiwid2VicGFjazovL2NvaC1jb250ZW50LWRiLy4vc3JjL2ludGVybmFsL3NlcnZlci1ncm91cC50cyIsIndlYnBhY2s6Ly9jb2gtY29udGVudC1kYi8uL3NyYy9pbnRlcm5hbC9hcmNoZXR5cGUudHMiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvaW50ZXJuYWwvZ2FtZS1tYXAudHMiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvaW50ZXJuYWwvYmFkZ2UudHMiLCJ3ZWJwYWNrOi8vY29oLWNvbnRlbnQtZGIvLi9zcmMvX2NoYW5nZWxvZy50cyIsIndlYnBhY2s6Ly9jb2gtY29udGVudC1kYi8uL3NyYy9jb250ZW50LXJlZmVuY2UtdXRpbHMudHMiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwicmVxdWlyZSIsImRlZmluZSIsImFtZCIsIndpbmRvdyIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzFfXyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJLRVlfRk9STUFUIiwidGVzdCIsIkVycm9yIiwiY2FjaGUiLCJwcm92aWRlciIsImVudHJ5IiwidW5kZWZpbmVkIiwiQ29oQ29udGVudERiIiwiQ2hhbmdlbG9nIiwiQmFkZ2VUeXBlIiwiQmFkZ2VQYXJ0aWFsVHlwZSIsIkFsdGVybmF0ZSIsIkFMSUdOTUVOVF9IRVJPIiwiaCIsInYiLCJBTElHTk1FTlRfVklMTEFJTiIsIkFMSUdOTUVOVF9QUkFFVE9SSUFOIiwiQUxJR05NRU5UX0FOWSIsIlBsYXF1ZVR5cGUiLCJFbmhhbmNlbWVudENhdGVnb3J5IiwiU2VydmVyR3JvdXBTdGF0dXMiLCJzZXJ2ZXJHcm91cHMiLCJsb2FkIiwiZGF0YSIsImdldE9yRGVmaW5lIiwidGhpcyIsIlNlcnZlckdyb3VwIiwiZ2V0U2VydmVyR3JvdXBzIiwiXyIsInZhbHVlcyIsImdldFNlcnZlckdyb3VwIiwic2VydmVyR3JvdXBLZXkiLCJhcmNoZXR5cGVzIiwibWFwcyIsImJhZGdlcyIsImNoYW5nZWxvZyIsImFyY2hldHlwZUNhY2hlIiwibWFwQ2FjaGUiLCJiYWRnZUNhY2hlIiwidmFsaWRhdGVLZXkiLCJkZXNjcmlwdGlvbiIsInN0YXR1cyIsInJlcG9zaXRvcnkiLCJzZXJ2ZXJzIiwiZWFjaCIsIkFyY2hldHlwZSIsIkdhbWVNYXAiLCJCYWRnZSIsImdldEFyY2hldHlwZSIsImdldE1hcCIsImdldEJhZGdlIiwic2VydmVyR3JvdXAiLCJ2aWRpb3RNYXBzIiwibGlua3MiLCJ2aWRpb3RNYXBEYXRhIiwicHVzaCIsIlZpZGlvdE1hcCIsIm1hcCIsInBvaW50c09mSW50ZXJlc3QiLCJocmVmIiwicG9pRGF0YSIsIlZpZGlvdE1hcFBvaSIsInZpZGlvdE1hcCIsIngiLCJ5Iiwibm90ZXMiLCJtYXBLZXkiLCJiYWRnZUtleSIsImJhZGdlUGFydGlhbEtleSIsInBhcnRpYWxDYWNoZSIsInR5cGUiLCJuYW1lcyIsImFsaWdubWVudCIsImJhZGdlVGV4dCIsImFjcXVpc2l0aW9uIiwiaWNvbnMiLCJsb2NhdGlvbiIsImVmZmVjdCIsInZpZGlvdE1hcEtleSIsInNldFRpdGxlSWQiLCJzZXRUaXRsZUlkUHJhZXRvcmlhbiIsImlnbm9yZUluVG90YWxzIiwicGFydGlhbHMiLCJCYWRnZVBhcnRpYWwiLCJnZXRQYXJ0aWFsIiwicGFyZW50IiwicGxhcXVlVHlwZSIsImluc2NyaXB0aW9uIiwiaW52ZW50aW9uTGV2ZWwiLCJpbnZlbnRpb25UeXBlcyIsImNvdW50IiwiYmFkZ2UiXSwibWFwcGluZ3MiOiJDQUFBLFNBQTJDQSxFQUFNQyxHQUMxQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxFQUFRRyxRQUFRLFdBQ1IsbUJBQVhDLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxpQkFBa0IsQ0FBQyxVQUFXSixHQUNYLGlCQUFaQyxRQUNkQSxRQUFRLGtCQUFvQkQsRUFBUUcsUUFBUSxXQUU1Q0osRUFBSyxrQkFBb0JDLEVBQVFELEVBQVEsR0FSM0MsQ0FTR08sT0FBUSxTQUFTQyxHQUNwQixPLFlDVEUsSUFBSUMsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixP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QmxFLEVBQUtrRSxnQkFDL0NuRixNQUFkaUIsRUFBS21FLFFBQW9CakUsS0FBS2lFLE1BQVFuRSxFQUFLbUUsT0FDN0JwRixNQUFkaUIsRUFBSzBDLFFBQW9CeEMsS0FBS3dDLE1BQVExQyxFQUFLMEMsUUFFdkQsRUFyQ0EsR0FBYSxFQUFBa0IsZ0IsMElDakVBLEVBQUEzRSxVQUFzQyxDQUMvQyxRQUFTLHFCQUNULFFBQVMscURBRVQsUUFBUyx3TEFHVCxRQUFTLHNDQUNULFFBQVMsOEpBQ1QsUUFBUyxvREFFVCxRQUFTLHFOQUdULFFBQVMscUZBQ1QsUUFBUyxxREFFVCxRQUFTLDRGLDhJQ2RiLDBCQUErQm1GLEdBQzNCLE1BQU8sVUFBVUEsRUFBTXBHLElBQUcsS0FHOUIsd0JBQTZCa0UsR0FDekIsTUFBTyxRQUFRQSxFQUFJbEUsSUFBRyxNIiwiZmlsZSI6ImNvaC1jb250ZW50LWRiLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwibG9kYXNoXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiY29oLWNvbnRlbnQtZGJcIiwgW1wibG9kYXNoXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImNvaC1jb250ZW50LWRiXCJdID0gZmFjdG9yeShyZXF1aXJlKFwibG9kYXNoXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJjb2gtY29udGVudC1kYlwiXSA9IGZhY3Rvcnkocm9vdFtcIl9cIl0pO1xufSkod2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18xX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMik7XG4iLCJjb25zdCBLRVlfRk9STUFUID0gL1teYS16MC05XFwtXS87XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUtleShrZXk6IHN0cmluZykge1xuICAgIGlmIChLRVlfRk9STUFULnRlc3Qoa2V5KSkgdGhyb3cgbmV3IEVycm9yKGBCYWQga2V5OiBbJHtrZXl9XTsgS2V5cyBjYW4gb25seSBjb250YWluIGxvd2VyY2FzZSBjaGFyYWN0ZXJzLCBudW1iZXJzIGFuZCBkYXNoZXMuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPckRlZmluZTxUPihrZXk6IHN0cmluZywgY2FjaGU6IHsgW2lkOiBzdHJpbmddOiBUIH0sIHByb3ZpZGVyOiAoa2V5OiBzdHJpbmcpID0+IFQpOiBUIHtcbiAgICBsZXQgZW50cnkgPSBjYWNoZVtrZXldO1xuXG4gICAgaWYgKGVudHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZW50cnkgPSBjYWNoZVtrZXldID0gcHJvdmlkZXIoa2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cnk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzFfXzsiLCJleHBvcnQgKiBmcm9tIFwiLi90eXBlcy9iYWRnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvZW5oYW5jZW1lbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzL2dhbWUtbWFwXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy9saW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy9zZXJ2ZXItZ3JvdXBcIjtcblxuZXhwb3J0IHtDb2hDb250ZW50RGJ9IGZyb20gXCIuL2NvaC1jb250ZW50LWRiXCI7XG5cbmV4cG9ydCB7Q2hhbmdlbG9nfSBmcm9tIFwiLi9fY2hhbmdlbG9nXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2NvbnRlbnQtcmVmZW5jZS11dGlsc1wiO1xuIiwiaW1wb3J0IHtJTGlua30gZnJvbSBcIi4vbGlua1wiO1xuaW1wb3J0IHtJU2VydmVyR3JvdXB9IGZyb20gXCIuL3NlcnZlci1ncm91cFwiO1xuaW1wb3J0IHtFbmhhbmNlbWVudENhdGVnb3J5fSBmcm9tIFwiLi9lbmhhbmNlbWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElCYWRnZURhdGEge1xuICAgIC8qKlxuICAgICAqIEtleS5cbiAgICAgKi9cbiAgICByZWFkb25seSBrZXk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEJhZGdlIHR5cGUuXG4gICAgICovXG4gICAgcmVhZG9ubHkgdHlwZT86IEJhZGdlVHlwZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lcyB0aGlzIGJhZGdlIGlzIGtub3duIGJ5LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG5hbWVzPzogSUFsdGVybmF0ZVZhbHVlW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWxpZ25tZW50cyB0aGlzIGJhZGdlIGNhbiBiZSBvYnRhaW5lZCBieS5cbiAgICAgKi9cbiAgICByZWFkb25seSBhbGlnbm1lbnQ/OiBJQWxpZ25tZW50RmxhZ3M7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW4tZ2FtZSBiYWRnZSB0ZXh0LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGJhZGdlVGV4dD86IElBbHRlcm5hdGVWYWx1ZVtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCB1c2VkIHRvIGFjcXVpcmUgdGhlIGJhZGdlLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGFjcXVpc2l0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQmFkZ2UgaW1hZ2VzLiBVc2UgdGhlIGFic29sdXRlIHVybCBpbWFnZXMgaG9zdGVkIGluIGEgQ0ROIG9yIHNpbWlsYXIgcHVibGljbHktYWNjZXNzaWJsZSBsb2NhdGlvbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBpY29ucz86IElBbHRlcm5hdGVWYWx1ZVtdXG5cbiAgICAvKipcbiAgICAgKiBOb3RlcyBvciB0aXBzIGFib3V0IHRoZSBiYWRnZS5cbiAgICAgKi9cbiAgICByZWFkb25seSBub3Rlcz86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgbGlua3MgdG8gZXh0ZXJuYWwgcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGxpbmtzPzogSUxpbmtbXTtcblxuICAgIC8qKlxuICAgICAqIEtleSBvZiB0aGUgbWFwIHRoaXMgYmFkZ2UgaXMgZm91bmQgb24gZm9yIGV4cGxvcmF0aW9uIGJhZGdlcy5cbiAgICAgKi9cbiAgICByZWFkb25seSBtYXBLZXk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiAvbG9jIGNvb3JkaW5hdGVzIG9mIHRoZSBiYWRnZSBpbi1nYW1lLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGxvY2F0aW9uPzogbnVtYmVyW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9yIGxldHRlciB0aGUgYmFkZ2UgYXBwZWFycyBhcyBvbiBWaWRpb3QgTWFwcy5cbiAgICAgKi9cbiAgICByZWFkb25seSB2aWRpb3RNYXBLZXk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgdXNlZCB3aXRoIHRoZSBpbi1nYW1lIGBzZXR0aXRsZWAgc2xhc2ggY29tbWFuZCB0byBhcHBseSB0aGUgYmFkZ2UuXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2V0VGl0bGVJZD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNvbWUgcHJhZXRvcmlhbiBiYWRnZXMgaGF2ZSBhIGRpZmZlcmVudCBzZXR0aXRsZSBpZC5cbiAgICAgKi9cbiAgICByZWFkb25seSBzZXRUaXRsZUlkUHJhZXRvcmlhbj86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIGVmZmVjdCB0aGUgYmFkZ2Ugd2lsbCBoYXZlLCBzdWNoIGFzIGEgYnVmZiBvciBncmFudGluZyBhIHRlbXBvcmFyeSBwb3dlci5cbiAgICAgKi9cbiAgICByZWFkb25seSBlZmZlY3Q/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBGb3IgYmFkZ2VzIHRoYXQgaGF2ZSBwYXJ0aWFsIGZ1bGZpbG1lbnQgcmVxdWlyZW1lbnRzLCBzdWNoIGFzIHBsYXF1ZXMgZm9yIGhpc3RvcnkgYmFkZ2VzLCBvciBvdGhlciBiYWRnZXMgZm9yIG1ldGEtYmFkZ2VzIGxpa2UgYWNjb2xhZGVzLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHBhcnRpYWxzPzogSUJhZGdlUGFydGlhbERhdGFbXTtcblxuICAgIC8qKlxuICAgICAqIFNvbWUgYmFkZ2VzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGJhZGdlIHRvdGFsIGNvdW50Li4uIHN1Y2ggYXMgRmxhbWVzIG9mIFByb21ldGhldXMsIHdoaWNoIGNhbiBiZSByZW1vdmVkIGJ5IHJlZGVlbWluZyBpdCBmb3IgYSBOb3RpY2Ugb2YgdGhlIFdlbGwuXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWdub3JlSW5Ub3RhbHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCYWRnZVBhcnRpYWxEYXRhIHtcbiAgICAvKipcbiAgICAgKiBLZXkuXG4gICAgICovXG4gICAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUeXBlIG9mIHBhcnRpYWwuXG4gICAgICovXG4gICAgcmVhZG9ubHkgdHlwZT86IEJhZGdlUGFydGlhbFR5cGU7XG5cbiAgICAvKipcbiAgICAgKiBNYXAgdGhlIHBhcnRpYWwgaXMgbG9jYXRlZCBvbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBtYXBLZXk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiAvbG9jIGNvb3JkaW5hdGVzLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGxvY2F0aW9uPzogbnVtYmVyW107XG5cbiAgICAvKipcbiAgICAgKiBJcyBpdCBhIHdhbGwgcGxhcXVlIG9yIGEgcGh5c2ljYWwgbW9udW1lbnQ/XG4gICAgICovXG4gICAgcmVhZG9ubHkgcGxhcXVlVHlwZT86IFBsYXF1ZVR5cGU7XG5cbiAgICAvKipcbiAgICAgKiBQbGFxdWUgaW5zY3JpcHRpb24uXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5zY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9yIGxldHRlciB0aGUgcGFydGlhbCBhcHBlYXJzIGFzIG9uIFZpZGlvdCBNYXBzLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHZpZGlvdE1hcEtleT86IHN0cmluZztcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhZGdlIHJlcXVpcmVkIGZvciB0aGlzIHBhcnRpYWwuXG4gICAgICovXG4gICAgcmVhZG9ubHkgYmFkZ2VLZXk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBMZXZlbCBvZiB0aGUgaW52ZW50aW9uIHJlcXVpcmVkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGludmVudGlvbkxldmVsPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGVzIG9mIGVuaGFuY2VtZW50cyByZXF1aXJlZCB0byBiZSBjcmFmdGVkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGludmVudGlvblR5cGVzPzogRW5oYW5jZW1lbnRDYXRlZ29yeVtdO1xuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIGludmVudGlvbiBjcmFmdHMgcmVxdWlyZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY291bnQ/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBBbnkgYWRkaXRpb25hbCBub3Rlcy5cbiAgICAgKi9cbiAgICByZWFkb25seSBub3Rlcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gQmFkZ2VUeXBlIHtcbiAgICBFWFBMT1JBVElPTiA9IFwiRVhQTE9SQVRJT05cIixcbiAgICBISVNUT1JZID0gXCJISVNUT1JZXCIsXG4gICAgQUNDT01QTElTSE1FTlQgPSBcIkFDQ09NUExJU0hNRU5UXCIsXG4gICAgQUNISUVWRU1FTlQgPSBcIkFDSElFVkVNRU5UXCIsXG4gICAgQUNDT0xBREUgPSBcIkFDQ09MQURFXCIsXG4gICAgR0xBRElBVE9SID0gXCJHTEFESUFUT1JcIixcbiAgICBWRVRFUkFOID0gXCJWRVRFUkFOXCIsXG4gICAgUFZQID0gXCJQVlBcIixcbiAgICBJTlZFTlRJT04gPSBcIklOVkVOVElPTlwiLFxuICAgIERFRkVBVCA9IFwiREVGRUFUXCIsXG4gICAgRVZFTlQgPSBcIkVWRU5UXCIsXG4gICAgT1VST0JPUk9TID0gXCJPVVJPQk9ST1NcIixcbiAgICBDT05TSUdOTUVOVCA9IFwiQ09OU0lHTk1FTlRcIixcbiAgICBEQVlfSk9CID0gXCJEQVlfSk9CXCIsXG4gICAgQUUgPSBcIkFFXCJcbn1cblxuZXhwb3J0IGVudW0gQmFkZ2VQYXJ0aWFsVHlwZSB7XG4gICAgUExBUVVFID0gXCJQTEFRVUVcIixcbiAgICBCQURHRSA9IFwiQkFER0VcIixcbiAgICBJTlZFTlRJT04gPSBcIklOVkVOVElPTlwiLFxuICAgIC8qKlxuICAgICAqIFNvbWUgaW52ZW50aW9uIGJhZGdlcyByZXF1aXJlIHlvdSB0byBidWlsZCB4IG9mIHR3byBkaWZmZXJlbnQgaW52ZW50aW9uIGxldmVscywgJ3BsdXMgb25lIG9mIGVpdGhlciBsZXZlbCcuXG4gICAgICovXG4gICAgSU5WRU5USU9OX1BMVVNfT05FID0gXCJJTlZFTlRJT05fUExVU19PTkVcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQWx0ZXJuYXRlVmFsdWUge1xuICAgIHJlYWRvbmx5IHR5cGU/OiBBbHRlcm5hdGU7XG4gICAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3IgYmFkZ2VzIHRoYXQgaGF2ZSBhbHRlcm5hdGUgdmFsdWVzIGJhc2VkIG9uIHRoZSBhbGlnbm1lbnQgKEgvVi9QKSBvciBzZXggKE0vRikgb2YgdGhlIGNoYXJhY3Rlci5cbiAqL1xuZXhwb3J0IGVudW0gQWx0ZXJuYXRlIHtcbiAgICBNID0gXCJNXCIsXG4gICAgRiA9IFwiRlwiLFxuICAgIEggPSBcIkhcIixcbiAgICBWID0gXCJWXCIsXG4gICAgUCA9IFwiUFwiLFxuICAgIE1IID0gXCJNSFwiLFxuICAgIE1WID0gXCJNVlwiLFxuICAgIE1QID0gXCJNUFwiLFxuICAgIEZIID0gXCJGSFwiLFxuICAgIEZWID0gXCJGVlwiLFxuICAgIEZQID0gXCJGUFwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFsaWdubWVudEZsYWdzIHtcbiAgICByZWFkb25seSBoOiBib29sZWFuLFxuICAgIHJlYWRvbmx5IHY6IGJvb2xlYW4sXG4gICAgcmVhZG9ubHkgcDogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgQUxJR05NRU5UX0hFUk86IElBbGlnbm1lbnRGbGFncyA9IHtoOiB0cnVlLCB2OiBmYWxzZSwgcDogZmFsc2V9O1xuZXhwb3J0IGNvbnN0IEFMSUdOTUVOVF9WSUxMQUlOOiBJQWxpZ25tZW50RmxhZ3MgPSB7aDogZmFsc2UsIHY6IHRydWUsIHA6IGZhbHNlfTtcbmV4cG9ydCBjb25zdCBBTElHTk1FTlRfUFJBRVRPUklBTjogSUFsaWdubWVudEZsYWdzID0ge2g6IGZhbHNlLCB2OiBmYWxzZSwgcDogdHJ1ZX07XG5leHBvcnQgY29uc3QgQUxJR05NRU5UX0FOWTogSUFsaWdubWVudEZsYWdzID0ge2g6IHRydWUsIHY6IHRydWUsIHA6IHRydWV9O1xuXG5leHBvcnQgZW51bSBQbGFxdWVUeXBlIHtcbiAgICBXQUxMX1BMQVFVRSA9IFwiV0FMTF9QTEFRVUVcIixcbiAgICBNT05VTUVOVCA9IFwiTU9OVU1FTlRcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCYWRnZSBleHRlbmRzIElCYWRnZURhdGEge1xuICAgIHJlYWRvbmx5IHNlcnZlckdyb3VwOiBJU2VydmVyR3JvdXA7XG4gICAgcmVhZG9ubHkgcGFydGlhbHM/OiBJQmFkZ2VQYXJ0aWFsW107XG5cbiAgICBnZXRQYXJ0aWFsKGtleTogc3RyaW5nKTogSUJhZGdlUGFydGlhbCB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhZGdlUGFydGlhbCBleHRlbmRzIElCYWRnZVBhcnRpYWxEYXRhIHtcbiAgICByZWFkb25seSBzZXJ2ZXJHcm91cDogSVNlcnZlckdyb3VwO1xuICAgIHJlYWRvbmx5IHBhcmVudDogSUJhZGdlO1xufVxuXG4iLCJleHBvcnQgZW51bSBFbmhhbmNlbWVudENhdGVnb3J5IHtcbiAgICBERUZFTlNFX0RFQlVGRiA9IFwiREVGRU5TRV9ERUJVRkZcIixcbiAgICBUT19ISVRfREVCVUZGID0gXCJUT19ISVRfREVCVUZGXCIsXG4gICAgVEFVTlQgPSBcIlRBVU5UXCIsXG4gICAgQ09ORlVTRSA9IFwiQ09ORlVTRVwiLFxuICAgIEhFQUxJTkcgPSBcIkhFQUxJTkdcIixcbiAgICBERUZFTlNFX0JVRkYgPSBcIkRFRkVOU0VfQlVGRlwiLFxuICAgIFJFU0lTVF9EQU1BR0UgPSBcIlJFU0lTVF9EQU1BR0VcIixcbiAgICBJTlRBTkdJQklMSVRZID0gXCJJTlRBTkdJQklMSVRZXCIsXG4gICAgU0xFRVAgPSBcIlNMRUVQXCIsXG4gICAgU0xPVyA9IFwiU0xPV1wiLFxuICAgIEhPTEQgPSBcIkhPTERcIixcbiAgICBTVFVOID0gXCJTVFVOXCIsXG4gICAgSU1NT0JJTElaRSA9IFwiSU1NT0JJTElaRVwiLFxuICAgIEZFQVIgPSBcIkZFQVJcIixcbiAgICBFTkRVUkFOQ0VfTU9ESUZJQ0FUSU9OID0gXCJFTkRVUkFOQ0VfTU9ESUZJQ0FUSU9OXCIsXG4gICAgRU5EVVJBTkNFX1JFRFVDVElPTiA9IFwiRU5EVVJBTkNFX1JFRFVDVElPTlwiLFxuICAgIFJFQ0hBUkdFX1JFRFVDVElPTiA9IFwiUkVDSEFSR0VfUkVEVUNUSU9OXCIsXG4gICAgSU5URVJSVVBUX0RVUkFUSU9OID0gXCJJTlRFUlJVUFRfRFVSQVRJT05cIixcbiAgICBBQ0NVUkFDWSA9IFwiQUNDVVJBQ1lcIixcbiAgICBUT19ISVRfQlVGRiA9IFwiVE9fSElUX0JVRkZcIixcbiAgICBEQU1BR0UgPSBcIkRBTUFHRVwiLFxuICAgIEtOT0NLQkFDSyA9IFwiS05PQ0tCQUNLXCIsXG4gICAgUlVOX1NQRUVEID0gXCJSVU5fU1BFRURcIixcbiAgICBKVU1QID0gXCJKVU1QXCIsXG4gICAgRkxZX1NQRUVEID0gXCJGTFlfU1BFRURcIixcbiAgICBSQU5HRSA9IFwiUkFOR0VcIlxufVxuIiwiaW1wb3J0IHtJQmFkZ2UsIElCYWRnZURhdGF9IGZyb20gXCIuL2JhZGdlXCI7XG5pbXBvcnQge0lHYW1lTWFwLCBJR2FtZU1hcERhdGF9IGZyb20gXCIuL2dhbWUtbWFwXCI7XG5pbXBvcnQge0lBcmNoZXR5cGUsIElBcmNoZXR5cGVEYXRhfSBmcm9tIFwiLi9hcmNoZXR5cGVcIjtcblxuLyoqXG4gKiBBIHNlcnZlciBncm91cCBpcyBhIGNvbGxlY3Rpb24gb2YgZ2FtZSBzZXJ2ZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTZXJ2ZXJHcm91cERhdGEge1xuICAgIC8qKlxuICAgICAqIEtleS5cbiAgICAgKi9cbiAgICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBzZXJ2ZXIgZ3JvdXAuXG4gICAgICovXG4gICAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBEZXNjcmlwdGlvbiBvZiB0aGUgc2VydmVyIGdyb3VwLiBNYXJrZG93biBhbGxvd2VkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3RhdHVzIG9mIHRoZSBjb250ZW50IG1vZHVsZS4ge0BzZWUgU2VydmVyR3JvdXBTdGF0dXN9LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHN0YXR1cz86IFNlcnZlckdyb3VwU3RhdHVzW107XG5cbiAgICAvKipcbiAgICAgKiBSZXBvc2l0b3J5IHdoZXJlIHRoZSBkYiBjb250ZW50IHBhY2thZ2UgaXMgbWFpbnRhaW5lZC5cbiAgICAgKi9cbiAgICByZWFkb25seSByZXBvc2l0b3J5Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiB0aGUgbmFtZXMgb2YgdGhlIHNlcnZlcnMgaW4gdGhpcyBncm91cC5cbiAgICAgKiBUb3JjaGJlYXJlciwgRXhjZWxzaW9yLCBldGMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2VydmVycz86IElTZXJ2ZXJEYXRhW107XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGFyY2hldHlwZXMgYXZhaWxhYmxlIG9uIHRoaXMgZ3JvdXAuXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXJjaGV0eXBlcz86IElBcmNoZXR5cGVEYXRhW107XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGdhbWUgbWFwcyBzdXBwb3J0ZWQgYnkgdGhpcyBzZXJ2ZXIgZ3JvdXAuXG4gICAgICovXG4gICAgcmVhZG9ubHkgbWFwcz86IElHYW1lTWFwRGF0YVtdO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBiYWRnZXMgYXZhaWxhYmxlIG9uIHRoaXMgc2VydmVyIGdyb3VwLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGJhZGdlcz86IElCYWRnZURhdGFbXTtcblxuICAgIC8qKlxuICAgICAqIENoYW5nZSBsb2cuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY2hhbmdlbG9nPzogeyBbaWQ6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZXJ2ZXJEYXRhIHtcbiAgICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIFNlcnZlckdyb3VwU3RhdHVzIHtcbiAgICAvKipcbiAgICAgKiBQYWNrYWdlIGlzIHN0aWxsIGJlaW5nIGRldmVsb3BlZCwgYW5kIG1heSBiZSBtaXNzaW5nIHNvbWUgZGF0YSBvciBzb21lIGRhdGEgbWF5IGJlIGluYWNjdXJhdGUuXG4gICAgICovXG4gICAgV09SS19JTl9QUk9HUkVTUyA9IFwiV09SS19JTl9QUk9HUkVTU1wiLFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBzZXJ2ZXIgZ3JvdXAgaGFzIGJlZW4gc3Vuc2V0LCBhbmQgaXMgbm90IGxvbmdlciBiZWluZyBtYWludGFpbmVkL2RldmVsb3BlZC5cbiAgICAgKi9cbiAgICBTVU5TRVQgPSBcIlNVTlNFVFwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlcnZlckdyb3VwIGV4dGVuZHMgSVNlcnZlckdyb3VwRGF0YSB7XG4gICAgcmVhZG9ubHkgc2VydmVycz86IElTZXJ2ZXJbXTtcbiAgICByZWFkb25seSBhcmNoZXR5cGVzPzogSUFyY2hldHlwZVtdO1xuICAgIHJlYWRvbmx5IG1hcHM/OiBJR2FtZU1hcFtdO1xuICAgIHJlYWRvbmx5IGJhZGdlcz86IElCYWRnZVtdO1xuXG4gICAgZ2V0QXJjaGV0eXBlKGtleTogc3RyaW5nKTogSUFyY2hldHlwZSB8IG51bGw7XG5cbiAgICBnZXRNYXAoa2V5OiBzdHJpbmcpOiBJR2FtZU1hcCB8IG51bGw7XG5cbiAgICBnZXRCYWRnZShrZXk6IHN0cmluZyk6IElCYWRnZSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlcnZlciBleHRlbmRzIElTZXJ2ZXJEYXRhIHtcblxufVxuIiwiaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQge0lTZXJ2ZXJHcm91cCwgSVNlcnZlckdyb3VwRGF0YX0gZnJvbSBcIi4vdHlwZXMvc2VydmVyLWdyb3VwXCI7XG5pbXBvcnQge2dldE9yRGVmaW5lfSBmcm9tIFwiLi9pbnRlcm5hbC9fY29tbW9uXCI7XG5pbXBvcnQge1NlcnZlckdyb3VwfSBmcm9tIFwiLi9pbnRlcm5hbC9zZXJ2ZXItZ3JvdXBcIjtcblxuaW50ZXJmYWNlIElDb2hDb250ZW50RGIge1xuICAgIC8qKlxuICAgICAqIExvYWQgc2VydmVyIGdyb3VwIGRhdGEgcGFja2FnZSBpbnRvIHRoZSBkYXRhYmFzZS5cbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBsb2FkLlxuICAgICAqL1xuICAgIGxvYWQoZGF0YTogSVNlcnZlckdyb3VwRGF0YSk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIHRoZSBzZXJ2ZXIgZ3JvdXBzIGN1cnJlbnRseSBsb2FkZWQgaW4gdGhlIGRhdGFiYXNlLlxuICAgICAqL1xuICAgIGdldFNlcnZlckdyb3VwcygpOiBJU2VydmVyR3JvdXBbXTtcblxuICAgIC8qKlxuICAgICAqIGdldCBhIHNlcnZlciBncm91cCBieSBrZXkuXG4gICAgICogQHBhcmFtIHNlcnZlckdyb3VwS2V5IFRoZSBrZXkuXG4gICAgICovXG4gICAgZ2V0U2VydmVyR3JvdXAoc2VydmVyR3JvdXBLZXk6IHN0cmluZyk6IElTZXJ2ZXJHcm91cCB8IG51bGw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb2hDb250ZW50RGIgaW1wbGVtZW50cyBJQ29oQ29udGVudERiIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlcnZlckdyb3VwczogeyBbaWQ6IHN0cmluZ106IFNlcnZlckdyb3VwIH0gPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICogQG92ZXJyaWRlXG4gICAgICovXG4gICAgbG9hZChkYXRhOiBJU2VydmVyR3JvdXBEYXRhKSB7XG4gICAgICAgIGNvbnN0IHNlcnZlckdyb3VwID0gZ2V0T3JEZWZpbmUoZGF0YS5rZXksIHRoaXMuc2VydmVyR3JvdXBzLCAoa2V5KSA9PiBuZXcgU2VydmVyR3JvdXAoa2V5KSk7XG4gICAgICAgIHNlcnZlckdyb3VwLmxvYWQoZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKiBAb3ZlcnJpZGVcbiAgICAgKi9cbiAgICBnZXRTZXJ2ZXJHcm91cHMoKTogSVNlcnZlckdyb3VwW10ge1xuICAgICAgICByZXR1cm4gXy52YWx1ZXModGhpcy5zZXJ2ZXJHcm91cHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICogQG92ZXJyaWRlXG4gICAgICovXG4gICAgZ2V0U2VydmVyR3JvdXAoc2VydmVyR3JvdXBLZXk6IHN0cmluZyk6IElTZXJ2ZXJHcm91cCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJHcm91cHNbc2VydmVyR3JvdXBLZXldO1xuICAgIH1cbn1cbiIsImltcG9ydCB7SUJhZGdlLCBJR2FtZU1hcCwgSVNlcnZlciwgSVNlcnZlckdyb3VwLCBJU2VydmVyR3JvdXBEYXRhLCBTZXJ2ZXJHcm91cFN0YXR1c30gZnJvbSBcIi4uXCI7XG5pbXBvcnQge0lBcmNoZXR5cGV9IGZyb20gXCIuLi90eXBlcy9hcmNoZXR5cGVcIjtcbmltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHtBcmNoZXR5cGV9IGZyb20gXCIuL2FyY2hldHlwZVwiO1xuaW1wb3J0IHtHYW1lTWFwfSBmcm9tIFwiLi9nYW1lLW1hcFwiO1xuaW1wb3J0IHtCYWRnZX0gZnJvbSBcIi4vYmFkZ2VcIjtcbmltcG9ydCB7Z2V0T3JEZWZpbmUsIHZhbGlkYXRlS2V5fSBmcm9tIFwiLi9fY29tbW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBTZXJ2ZXJHcm91cCBpbXBsZW1lbnRzIElTZXJ2ZXJHcm91cCB7XG4gICAgcHVibGljIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICAgIHB1YmxpYyBuYW1lPzogc3RyaW5nO1xuICAgIHB1YmxpYyBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBwdWJsaWMgc3RhdHVzPzogU2VydmVyR3JvdXBTdGF0dXNbXTtcbiAgICBwdWJsaWMgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgICBwdWJsaWMgc2VydmVycz86IElTZXJ2ZXJbXTtcbiAgICBwdWJsaWMgYXJjaGV0eXBlczogSUFyY2hldHlwZVtdID0gW107XG4gICAgcHVibGljIG1hcHM6IElHYW1lTWFwW10gPSBbXTtcbiAgICBwdWJsaWMgYmFkZ2VzOiBJQmFkZ2VbXSA9IFtdO1xuICAgIHB1YmxpYyBjaGFuZ2Vsb2c6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXG4gICAgcHJpdmF0ZSBhcmNoZXR5cGVDYWNoZTogeyBbaWQ6IHN0cmluZ106IEFyY2hldHlwZSB9ID0ge307XG4gICAgcHJpdmF0ZSBtYXBDYWNoZTogeyBbaWQ6IHN0cmluZ106IEdhbWVNYXAgfSA9IHt9O1xuICAgIHByaXZhdGUgYmFkZ2VDYWNoZTogeyBbaWQ6IHN0cmluZ106IEJhZGdlIH0gPSB7fTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihrZXk6IHN0cmluZykge1xuICAgICAgICB2YWxpZGF0ZUtleShrZXkpO1xuXG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkKGRhdGE6IElTZXJ2ZXJHcm91cERhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEubmFtZSAhPSB1bmRlZmluZWQpIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcbiAgICAgICAgaWYgKGRhdGEuZGVzY3JpcHRpb24gIT0gdW5kZWZpbmVkKSB0aGlzLmRlc2NyaXB0aW9uID0gZGF0YS5kZXNjcmlwdGlvbjtcbiAgICAgICAgaWYgKGRhdGEuc3RhdHVzICE9IHVuZGVmaW5lZCkgdGhpcy5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICAgICAgaWYgKGRhdGEucmVwb3NpdG9yeSAhPSB1bmRlZmluZWQpIHRoaXMucmVwb3NpdG9yeSA9IGRhdGEucmVwb3NpdG9yeTtcbiAgICAgICAgaWYgKGRhdGEuc2VydmVycyAhPSB1bmRlZmluZWQpIHRoaXMuc2VydmVycyA9IGRhdGEuc2VydmVycztcblxuICAgICAgICBpZiAoZGF0YS5hcmNoZXR5cGVzICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgXy5lYWNoKGRhdGEuYXJjaGV0eXBlcywgZGF0YSA9PlxuICAgICAgICAgICAgICAgIGdldE9yRGVmaW5lKGRhdGEua2V5LCB0aGlzLmFyY2hldHlwZUNhY2hlLCAoa2V5KSA9PiBuZXcgQXJjaGV0eXBlKHRoaXMsIGtleSkpXG4gICAgICAgICAgICAgICAgICAgIC5sb2FkKGRhdGEpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5hcmNoZXR5cGVzID0gXy52YWx1ZXModGhpcy5hcmNoZXR5cGVDYWNoZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5tYXBzICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgXy5lYWNoKGRhdGEubWFwcywgZGF0YSA9PlxuICAgICAgICAgICAgICAgIGdldE9yRGVmaW5lKGRhdGEua2V5LCB0aGlzLm1hcENhY2hlLCAoa2V5KSA9PiBuZXcgR2FtZU1hcCh0aGlzLCBrZXkpKVxuICAgICAgICAgICAgICAgICAgICAubG9hZChkYXRhKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubWFwcyA9IF8udmFsdWVzKHRoaXMubWFwQ2FjaGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEuYmFkZ2VzICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgXy5lYWNoKGRhdGEuYmFkZ2VzLCBkYXRhID0+XG4gICAgICAgICAgICAgICAgZ2V0T3JEZWZpbmUoZGF0YS5rZXksIHRoaXMuYmFkZ2VDYWNoZSwgKGtleSkgPT4gbmV3IEJhZGdlKHRoaXMsIGtleSkpXG4gICAgICAgICAgICAgICAgICAgIC5sb2FkKGRhdGEpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5iYWRnZXMgPSBfLnZhbHVlcyh0aGlzLmJhZGdlQ2FjaGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEuY2hhbmdlbG9nKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWxvZyA9IGRhdGEuY2hhbmdlbG9nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFyY2hldHlwZShrZXk6IHN0cmluZyk6IElBcmNoZXR5cGUgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJjaGV0eXBlQ2FjaGVba2V5XTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWFwKGtleTogc3RyaW5nKTogSUdhbWVNYXAgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwQ2FjaGVba2V5XTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QmFkZ2Uoa2V5OiBzdHJpbmcpOiBJQmFkZ2UgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFkZ2VDYWNoZVtrZXldO1xuICAgIH1cbn1cbiIsImltcG9ydCB7SUFyY2hldHlwZSwgSUFyY2hldHlwZURhdGF9IGZyb20gXCIuLi90eXBlcy9hcmNoZXR5cGVcIjtcbmltcG9ydCB7dmFsaWRhdGVLZXl9IGZyb20gXCIuL19jb21tb25cIjtcbmltcG9ydCB7U2VydmVyR3JvdXB9IGZyb20gXCIuL3NlcnZlci1ncm91cFwiO1xuXG5leHBvcnQgY2xhc3MgQXJjaGV0eXBlIGltcGxlbWVudHMgSUFyY2hldHlwZSB7XG4gICAgcHVibGljIHJlYWRvbmx5IHNlcnZlckdyb3VwOiBTZXJ2ZXJHcm91cDtcbiAgICBwdWJsaWMgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gICAgcHVibGljIG5hbWU/OiBzdHJpbmc7XG4gICAgcHVibGljIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3Ioc2VydmVyR3JvdXA6IFNlcnZlckdyb3VwLCBrZXk6IHN0cmluZykge1xuICAgICAgICB2YWxpZGF0ZUtleShrZXkpO1xuXG4gICAgICAgIHRoaXMuc2VydmVyR3JvdXAgPSBzZXJ2ZXJHcm91cDtcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWQoZGF0YTogSUFyY2hldHlwZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEubmFtZSAhPSB1bmRlZmluZWQpIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcbiAgICAgICAgaWYgKGRhdGEuZGVzY3JpcHRpb24gIT0gdW5kZWZpbmVkKSB0aGlzLmRlc2NyaXB0aW9uID0gZGF0YS5kZXNjcmlwdGlvbjtcbiAgICB9XG59XG4iLCJpbXBvcnQge0lHYW1lTWFwLCBJR2FtZU1hcERhdGEsIElMaW5rLCBJVmlkaW90TWFwLCBJVmlkaW90TWFwRGF0YSwgSVZpZGlvdE1hcFBvaSwgSVZpZGlvdE1hcFBvaURhdGF9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHtTZXJ2ZXJHcm91cH0gZnJvbSBcIi4vc2VydmVyLWdyb3VwXCI7XG5pbXBvcnQge3ZhbGlkYXRlS2V5fSBmcm9tIFwiLi9fY29tbW9uXCI7XG5pbXBvcnQge2VhY2h9IGZyb20gXCJsb2Rhc2hcIjtcblxuZXhwb3J0IGNsYXNzIEdhbWVNYXAgaW1wbGVtZW50cyBJR2FtZU1hcCB7XG4gICAgcHVibGljIHJlYWRvbmx5IHNlcnZlckdyb3VwOiBTZXJ2ZXJHcm91cDtcbiAgICBwdWJsaWMgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gICAgcHVibGljIG5hbWU6IHN0cmluZztcbiAgICBwdWJsaWMgbGlua3M/OiBJTGlua1tdO1xuICAgIHB1YmxpYyB2aWRpb3RNYXBzPzogSVZpZGlvdE1hcFtdID0gW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2VydmVyR3JvdXA6IFNlcnZlckdyb3VwLCBrZXk6IHN0cmluZykge1xuICAgICAgICB2YWxpZGF0ZUtleShrZXkpO1xuXG4gICAgICAgIHRoaXMuc2VydmVyR3JvdXAgPSBzZXJ2ZXJHcm91cDtcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWQoZGF0YTogSUdhbWVNYXBEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLm5hbWUgIT0gdW5kZWZpbmVkKSB0aGlzLm5hbWUgPSBkYXRhLm5hbWU7XG4gICAgICAgIGlmIChkYXRhLmxpbmtzICE9IHVuZGVmaW5lZCkgdGhpcy5saW5rcyA9IFsuLi50aGlzLmxpbmtzIHx8IFtdLCAuLi5kYXRhLmxpbmtzXTtcblxuICAgICAgICBpZiAoZGF0YS52aWRpb3RNYXBzKSB7XG4gICAgICAgICAgICBlYWNoKGRhdGEudmlkaW90TWFwcywgKHZpZGlvdE1hcERhdGEpID0+IHRoaXMudmlkaW90TWFwcy5wdXNoKG5ldyBWaWRpb3RNYXAodGhpcy5zZXJ2ZXJHcm91cCwgdGhpcykubG9hZCh2aWRpb3RNYXBEYXRhKSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmlkaW90TWFwIGltcGxlbWVudHMgSVZpZGlvdE1hcCB7XG4gICAgcHVibGljIHJlYWRvbmx5IHNlcnZlckdyb3VwOiBTZXJ2ZXJHcm91cDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbWFwOiBJR2FtZU1hcDtcbiAgICBwdWJsaWMgaHJlZjogc3RyaW5nO1xuICAgIHB1YmxpYyBuYW1lPzogc3RyaW5nO1xuICAgIHB1YmxpYyBwb2ludHNPZkludGVyZXN0OiBWaWRpb3RNYXBQb2lbXSA9IFtdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNlcnZlckdyb3VwOiBTZXJ2ZXJHcm91cCwgbWFwOiBJR2FtZU1hcCkge1xuICAgICAgICB0aGlzLnNlcnZlckdyb3VwID0gc2VydmVyR3JvdXA7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkKGRhdGE6IElWaWRpb3RNYXBEYXRhKTogVmlkaW90TWFwIHtcbiAgICAgICAgaWYgKGRhdGEuaHJlZiAhPSB1bmRlZmluZWQpIHRoaXMuaHJlZiA9IGRhdGEuaHJlZjtcbiAgICAgICAgaWYgKGRhdGEubmFtZSAhPSB1bmRlZmluZWQpIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcblxuICAgICAgICBpZiAoZGF0YS5wb2ludHNPZkludGVyZXN0KSB7XG4gICAgICAgICAgICBlYWNoKGRhdGEucG9pbnRzT2ZJbnRlcmVzdCwgKHBvaURhdGEpID0+IHRoaXMucG9pbnRzT2ZJbnRlcmVzdC5wdXNoKG5ldyBWaWRpb3RNYXBQb2kodGhpcy5zZXJ2ZXJHcm91cCwgdGhpcy5tYXAsIHRoaXMpLmxvYWQocG9pRGF0YSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZpZGlvdE1hcFBvaSBpbXBsZW1lbnRzIElWaWRpb3RNYXBQb2kge1xuICAgIHB1YmxpYyByZWFkb25seSBzZXJ2ZXJHcm91cDogU2VydmVyR3JvdXA7XG4gICAgcHVibGljIHJlYWRvbmx5IG1hcDogSUdhbWVNYXA7XG4gICAgcHVibGljIHJlYWRvbmx5IHZpZGlvdE1hcDogSVZpZGlvdE1hcDtcbiAgICBwdWJsaWMgeDogbnVtYmVyO1xuICAgIHB1YmxpYyB5OiBudW1iZXI7XG4gICAgcHVibGljIG5vdGVzPzogc3RyaW5nO1xuICAgIHB1YmxpYyBtYXBLZXk/OiBzdHJpbmc7XG4gICAgcHVibGljIGJhZGdlS2V5Pzogc3RyaW5nO1xuICAgIHB1YmxpYyBiYWRnZVBhcnRpYWxLZXk/OiBzdHJpbmc7XG5cblxuICAgIGNvbnN0cnVjdG9yKHNlcnZlckdyb3VwOiBTZXJ2ZXJHcm91cCwgbWFwOiBJR2FtZU1hcCwgdmlkaW90TWFwOiBJVmlkaW90TWFwKSB7XG4gICAgICAgIHRoaXMuc2VydmVyR3JvdXAgPSBzZXJ2ZXJHcm91cDtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMudmlkaW90TWFwID0gdmlkaW90TWFwO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkKGRhdGE6IElWaWRpb3RNYXBQb2lEYXRhKTogVmlkaW90TWFwUG9pIHtcbiAgICAgICAgaWYgKGRhdGEueCAhPSB1bmRlZmluZWQpIHRoaXMueCA9IGRhdGEueDtcbiAgICAgICAgaWYgKGRhdGEueSAhPSB1bmRlZmluZWQpIHRoaXMueSA9IGRhdGEueTtcbiAgICAgICAgaWYgKGRhdGEubm90ZXMgIT0gdW5kZWZpbmVkKSB0aGlzLm5vdGVzID0gZGF0YS5ub3RlcztcbiAgICAgICAgaWYgKGRhdGEubWFwS2V5ICE9IHVuZGVmaW5lZCkgdGhpcy5tYXBLZXkgPSBkYXRhLm1hcEtleTtcbiAgICAgICAgaWYgKGRhdGEuYmFkZ2VLZXkgIT0gdW5kZWZpbmVkKSB0aGlzLmJhZGdlS2V5ID0gZGF0YS5iYWRnZUtleTtcbiAgICAgICAgaWYgKGRhdGEuYmFkZ2VQYXJ0aWFsS2V5ICE9IHVuZGVmaW5lZCkgdGhpcy5iYWRnZVBhcnRpYWxLZXkgPSBkYXRhLmJhZGdlUGFydGlhbEtleTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG4iLCJpbXBvcnQge0JhZGdlUGFydGlhbFR5cGUsIEJhZGdlVHlwZSwgRW5oYW5jZW1lbnRDYXRlZ29yeSwgSUFsaWdubWVudEZsYWdzLCBJQWx0ZXJuYXRlVmFsdWUsIElCYWRnZSwgSUJhZGdlRGF0YSwgSUJhZGdlUGFydGlhbCwgSUJhZGdlUGFydGlhbERhdGEsIElMaW5rLCBQbGFxdWVUeXBlfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7U2VydmVyR3JvdXB9IGZyb20gXCIuL3NlcnZlci1ncm91cFwiO1xuaW1wb3J0IHtnZXRPckRlZmluZSwgdmFsaWRhdGVLZXl9IGZyb20gXCIuL19jb21tb25cIjtcbmltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xuXG5leHBvcnQgY2xhc3MgQmFkZ2UgaW1wbGVtZW50cyBJQmFkZ2Uge1xuICAgIHB1YmxpYyByZWFkb25seSBzZXJ2ZXJHcm91cDogU2VydmVyR3JvdXA7XG4gICAgcHVibGljIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICAgIHB1YmxpYyB0eXBlPzogQmFkZ2VUeXBlO1xuICAgIHB1YmxpYyBuYW1lcz86IElBbHRlcm5hdGVWYWx1ZVtdO1xuICAgIHB1YmxpYyBhbGlnbm1lbnQ/OiBJQWxpZ25tZW50RmxhZ3M7XG4gICAgcHVibGljIGJhZGdlVGV4dD86IElBbHRlcm5hdGVWYWx1ZVtdO1xuICAgIHB1YmxpYyBhY3F1aXNpdGlvbj86IHN0cmluZztcbiAgICBwdWJsaWMgaWNvbnM/OiBJQWx0ZXJuYXRlVmFsdWVbXTtcbiAgICBwdWJsaWMgbm90ZXM/OiBzdHJpbmc7XG4gICAgcHVibGljIGxpbmtzPzogSUxpbmtbXTtcbiAgICBwdWJsaWMgbWFwS2V5Pzogc3RyaW5nO1xuICAgIHB1YmxpYyBsb2NhdGlvbj86IG51bWJlcltdO1xuICAgIHB1YmxpYyB2aWRpb3RNYXBLZXk/OiBzdHJpbmc7XG4gICAgcHVibGljIHNldFRpdGxlSWQ/OiBudW1iZXI7XG4gICAgcHVibGljIHNldFRpdGxlSWRQcmFldG9yaWFuPzogbnVtYmVyO1xuICAgIHB1YmxpYyBlZmZlY3Q/OiBzdHJpbmc7XG4gICAgcHVibGljIHBhcnRpYWxzPzogQmFkZ2VQYXJ0aWFsW107XG4gICAgcHVibGljIGlnbm9yZUluVG90YWxzPzogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgcGFydGlhbENhY2hlOiB7IFtpZDogc3RyaW5nXTogQmFkZ2VQYXJ0aWFsIH0gPSB7fTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzZXJ2ZXJHcm91cDogU2VydmVyR3JvdXAsIGtleTogc3RyaW5nKSB7XG4gICAgICAgIHZhbGlkYXRlS2V5KGtleSk7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXJHcm91cCA9IHNlcnZlckdyb3VwO1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZChkYXRhOiBJQmFkZ2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLnR5cGUgIT0gdW5kZWZpbmVkKSB0aGlzLnR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgIGlmIChkYXRhLm5hbWVzICE9IHVuZGVmaW5lZCkgdGhpcy5uYW1lcyA9IFsuLi50aGlzLm5hbWVzIHx8IFtdLCAuLi5kYXRhLm5hbWVzXTtcbiAgICAgICAgaWYgKGRhdGEuYWxpZ25tZW50ICE9IHVuZGVmaW5lZCkgdGhpcy5hbGlnbm1lbnQgPSBkYXRhLmFsaWdubWVudDtcbiAgICAgICAgaWYgKGRhdGEuYmFkZ2VUZXh0ICE9IHVuZGVmaW5lZCkgdGhpcy5iYWRnZVRleHQgPSBbLi4udGhpcy5iYWRnZVRleHQgfHwgW10sIC4uLmRhdGEuYmFkZ2VUZXh0XTtcbiAgICAgICAgaWYgKGRhdGEuYWNxdWlzaXRpb24gIT0gdW5kZWZpbmVkKSB0aGlzLmFjcXVpc2l0aW9uID0gZGF0YS5hY3F1aXNpdGlvbjtcbiAgICAgICAgaWYgKGRhdGEuaWNvbnMgIT0gdW5kZWZpbmVkKSB0aGlzLmljb25zID0gWy4uLnRoaXMuaWNvbnMgfHwgW10sIC4uLmRhdGEuaWNvbnNdO1xuICAgICAgICBpZiAoZGF0YS5ub3RlcyAhPSB1bmRlZmluZWQpIHRoaXMubm90ZXMgPSBkYXRhLm5vdGVzO1xuICAgICAgICBpZiAoZGF0YS5saW5rcyAhPSB1bmRlZmluZWQpIHRoaXMubGlua3MgPSBbLi4udGhpcy5saW5rcyB8fCBbXSwgLi4uZGF0YS5saW5rc107XG4gICAgICAgIGlmIChkYXRhLm1hcEtleSAhPSB1bmRlZmluZWQpIHRoaXMubWFwS2V5ID0gZGF0YS5tYXBLZXk7XG4gICAgICAgIGlmIChkYXRhLmxvY2F0aW9uICE9IHVuZGVmaW5lZCkgdGhpcy5sb2NhdGlvbiA9IGRhdGEubG9jYXRpb247XG4gICAgICAgIGlmIChkYXRhLmVmZmVjdCAhPSB1bmRlZmluZWQpIHRoaXMuZWZmZWN0ID0gZGF0YS5lZmZlY3Q7XG4gICAgICAgIGlmIChkYXRhLnZpZGlvdE1hcEtleSAhPSB1bmRlZmluZWQpIHRoaXMudmlkaW90TWFwS2V5ID0gZGF0YS52aWRpb3RNYXBLZXk7XG4gICAgICAgIGlmIChkYXRhLnNldFRpdGxlSWQgIT0gdW5kZWZpbmVkKSB0aGlzLnNldFRpdGxlSWQgPSBkYXRhLnNldFRpdGxlSWQ7XG4gICAgICAgIGlmIChkYXRhLnNldFRpdGxlSWRQcmFldG9yaWFuICE9IHVuZGVmaW5lZCkgdGhpcy5zZXRUaXRsZUlkUHJhZXRvcmlhbiA9IGRhdGEuc2V0VGl0bGVJZFByYWV0b3JpYW47XG4gICAgICAgIGlmIChkYXRhLmlnbm9yZUluVG90YWxzICE9IHVuZGVmaW5lZCkgdGhpcy5pZ25vcmVJblRvdGFscyA9IGRhdGEuaWdub3JlSW5Ub3RhbHM7XG5cbiAgICAgICAgaWYgKGRhdGEucGFydGlhbHMgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBfLmVhY2goZGF0YS5wYXJ0aWFscywgZGF0YSA9PlxuICAgICAgICAgICAgICAgIGdldE9yRGVmaW5lKGRhdGEua2V5LCB0aGlzLnBhcnRpYWxDYWNoZSwgKGtleSkgPT4gbmV3IEJhZGdlUGFydGlhbCh0aGlzLnNlcnZlckdyb3VwLCB0aGlzLCBrZXkpKVxuICAgICAgICAgICAgICAgICAgICAubG9hZChkYXRhKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMucGFydGlhbHMgPSBfLnZhbHVlcyh0aGlzLnBhcnRpYWxDYWNoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbChrZXk6IHN0cmluZyk6IElCYWRnZVBhcnRpYWwgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFydGlhbENhY2hlW2tleV07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmFkZ2VQYXJ0aWFsIGltcGxlbWVudHMgSUJhZGdlUGFydGlhbCB7XG4gICAgcHVibGljIHJlYWRvbmx5IHNlcnZlckdyb3VwOiBTZXJ2ZXJHcm91cDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFyZW50OiBCYWRnZTtcbiAgICBwdWJsaWMgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gICAgcHVibGljIHR5cGU/OiBCYWRnZVBhcnRpYWxUeXBlO1xuICAgIHB1YmxpYyBtYXBLZXk/OiBzdHJpbmc7XG4gICAgcHVibGljIGxvY2F0aW9uPzogbnVtYmVyW107XG4gICAgcHVibGljIHBsYXF1ZVR5cGU/OiBQbGFxdWVUeXBlO1xuICAgIHB1YmxpYyBpbnNjcmlwdGlvbj86IHN0cmluZztcbiAgICBwdWJsaWMgdmlkaW90TWFwS2V5Pzogc3RyaW5nO1xuICAgIHB1YmxpYyBiYWRnZUtleT86IHN0cmluZztcbiAgICBwdWJsaWMgaW52ZW50aW9uTGV2ZWw/OiBudW1iZXI7XG4gICAgcHVibGljIGludmVudGlvblR5cGVzPzogRW5oYW5jZW1lbnRDYXRlZ29yeVtdO1xuICAgIHB1YmxpYyBjb3VudD86IG51bWJlcjtcbiAgICBwdWJsaWMgbm90ZXM/OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihzZXJ2ZXJHcm91cDogU2VydmVyR3JvdXAsIHBhcmVudDogQmFkZ2UsIGtleTogc3RyaW5nKSB7XG4gICAgICAgIHZhbGlkYXRlS2V5KGtleSk7XG5cbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgICAgIHRoaXMuc2VydmVyR3JvdXAgPSBzZXJ2ZXJHcm91cDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWQoZGF0YTogSUJhZGdlUGFydGlhbERhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEudHlwZSAhPSB1bmRlZmluZWQpIHRoaXMudHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgaWYgKGRhdGEubWFwS2V5ICE9IHVuZGVmaW5lZCkgdGhpcy5tYXBLZXkgPSBkYXRhLm1hcEtleTtcbiAgICAgICAgaWYgKGRhdGEubG9jYXRpb24gIT0gdW5kZWZpbmVkKSB0aGlzLmxvY2F0aW9uID0gZGF0YS5sb2NhdGlvbjtcbiAgICAgICAgaWYgKGRhdGEucGxhcXVlVHlwZSAhPSB1bmRlZmluZWQpIHRoaXMucGxhcXVlVHlwZSA9IGRhdGEucGxhcXVlVHlwZTtcbiAgICAgICAgaWYgKGRhdGEuaW5zY3JpcHRpb24gIT0gdW5kZWZpbmVkKSB0aGlzLmluc2NyaXB0aW9uID0gZGF0YS5pbnNjcmlwdGlvbjtcbiAgICAgICAgaWYgKGRhdGEudmlkaW90TWFwS2V5ICE9IHVuZGVmaW5lZCkgdGhpcy52aWRpb3RNYXBLZXkgPSBkYXRhLnZpZGlvdE1hcEtleTtcbiAgICAgICAgaWYgKGRhdGEuYmFkZ2VLZXkgIT0gdW5kZWZpbmVkKSB0aGlzLmJhZGdlS2V5ID0gZGF0YS5iYWRnZUtleTtcbiAgICAgICAgaWYgKGRhdGEuaW52ZW50aW9uTGV2ZWwgIT0gdW5kZWZpbmVkKSB0aGlzLmludmVudGlvbkxldmVsID0gZGF0YS5pbnZlbnRpb25MZXZlbDtcbiAgICAgICAgaWYgKGRhdGEuaW52ZW50aW9uVHlwZXMgIT0gdW5kZWZpbmVkKSB0aGlzLmludmVudGlvblR5cGVzID0gZGF0YS5pbnZlbnRpb25UeXBlcztcbiAgICAgICAgaWYgKGRhdGEuY291bnQgIT0gdW5kZWZpbmVkKSB0aGlzLmNvdW50ID0gZGF0YS5jb3VudDtcbiAgICAgICAgaWYgKGRhdGEubm90ZXMgIT0gdW5kZWZpbmVkKSB0aGlzLm5vdGVzID0gZGF0YS5ub3RlcztcbiAgICB9XG59XG4iLCJleHBvcnQgY29uc3QgQ2hhbmdlbG9nOiB7IFtpZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgXCIxLjAuMFwiOiBcIiogSW5pdGlhbCByZWxlYXNlLlwiLFxuICAgIFwiMS4wLjFcIjogXCIqIFR5cGUgZW5jYXBzdWxhdGlvbiBmb3IgU2VydmVyRGF0YSBhbmQgQXJjaGV0eXBlLlwiLFxuXG4gICAgXCIxLjEuMFwiOiBcIiogQmFkZ2UgaWNvbnMgYXJlIG5vdyB1cmxzIGluc3RlYWQgb2Yga2V5cy5cXG5cIiArXG4gICAgICAgIFwiKiBCYWRnZSBpY29ucyBoYXZlIG1vdmVkIGZyb20gYGJhZGdlLmltYWdlS2V5c2AgdG8gYGJhZGdlLmljb25zYC5cXG5cIiArXG4gICAgICAgIFwiKiBDaGFuZ2Vsb2cgaXMgbm93IGp1c3QgYSBtYXJrZG93biBibG9jayBpbnN0ZWFkIG9mIGEgc3RyaW5nIGFycmF5LlxcblwiLFxuICAgIFwiMS4xLjFcIjogXCIqIGBJR2FtZU1hcC5saW5rc2AgaXMgbm93IG9wdGlvbmFsLlwiLFxuICAgIFwiMS4xLjJcIjogXCIqIGh0dHBzOi8vZ2l0aHViLmNvbS9uMTVnL2NvaC1jb250ZW50LWRiL2lzc3Vlcy8zIC0gQWRkZWQgYHNldFRpdGxlSWRgIHByb3BlcnR5IGZvciBiYWRnZXMuIFVzZWQgdG8gc3RvcmUgdGhlIGBzZXR0aXRsZWAgc2xhc2ggY29tbWFuZCBudW1iZXIgb2YgdGhlIGJhZGdlLlwiLFxuICAgIFwiMS4xLjNcIjogXCIqIEFkZGVkIHNvbWUgY29udGVudCByZWZlcmVuY2UgdXRpbGl0eSBmdW5jdGlvbnMuXCIsXG5cbiAgICBcIjEuMi4wXCI6IFwiKiBodHRwczovL2dpdGh1Yi5jb20vbjE1Zy9jb2gtY29udGVudC1kYi9pc3N1ZXMvNCAtIEFkZGVkIGEgZmllbGQgYGlnbm9yZUluVG90YWxzYCB0byBgQmFkZ2VgLCBhbGxvd2luZyBiYWRnZXMgdG8gYmUgaWdub3JlZCBpbiBiYWRnZSB0b3RhbCBjYWxjdWxhdGlvbnMsIGZvciBiYWRnZXMgbGlrZVwiICtcbiAgICAgICAgXCIgW0ZsYW1lcyBvZiBQcm9tZXRoZXVzXSBhbmQgW0J1ZyBIdW50ZXJdLlwiLFxuXG4gICAgXCIxLjMuMVwiOiBcIiogaHR0cHM6Ly9naXRodWIuY29tL24xNWcvY29oLWNvbnRlbnQtZGIvaXNzdWVzLzUgLSBBZGRlZCB2aWRpb3QgbWFwIGRhdGEgdG8gbWFwcy5cIixcbiAgICBcIjEuMy4yXCI6IFwiKiBBZGRlZCBiYWRnZSBwYXJ0aWFsIHN1cHBvcnQgZm9yIHZpZGlvdCBtYXAgUE9Jcy5cIixcblxuICAgIFwiMS40LjBcIjogXCIqIGh0dHBzOi8vZ2l0aHViLmNvbS9uMTVnL2NvaC1jb250ZW50LWRiL2lzc3Vlcy83IC0gU2V0dGl0bGUgaWRzIGZvciBQcmFldG9yaWFuIGJhZGdlcy5cIlxufTtcbiIsImltcG9ydCB7SUJhZGdlRGF0YX0gZnJvbSBcIi4vdHlwZXMvYmFkZ2VcIjtcbmltcG9ydCB7SUdhbWVNYXBEYXRhfSBmcm9tIFwiLi90eXBlcy9nYW1lLW1hcFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gYmFkZ2VSZWZlcmVuY2UoYmFkZ2U6IElCYWRnZURhdGEpOiBzdHJpbmcge1xuICAgIHJldHVybiBgW2JhZGdlOiR7YmFkZ2Uua2V5fV1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwUmVmZXJlbmNlKG1hcDogSUdhbWVNYXBEYXRhKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFttYXA6JHttYXAua2V5fV1gO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
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
|