@elite-dangerous-almanac/core 0.2.1 → 0.2.3

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.
Files changed (97) hide show
  1. package/PROVENANCE/ships/SOURCES.md +25 -0
  2. package/README.md +3 -2
  3. package/THIRD_PARTY_NOTICES.md +24 -2
  4. package/dist/astro/body-orbit.d.ts +174 -0
  5. package/dist/astro/body-orbit.js +1 -0
  6. package/dist/astro/body-orbit.js.map +1 -0
  7. package/dist/astro/body-physics.d.ts +228 -0
  8. package/dist/astro/body-physics.js +1 -0
  9. package/dist/astro/body-physics.js.map +1 -0
  10. package/dist/astro/body-rings.d.ts +223 -0
  11. package/dist/astro/body-rings.js +1 -0
  12. package/dist/astro/body-rings.js.map +1 -0
  13. package/dist/astro/codex-region-lookup.js +1 -1
  14. package/dist/astro/codex-region-lookup.js.map +1 -1
  15. package/dist/astro/index.d.ts +38 -1
  16. package/dist/astro/index.js +1 -1
  17. package/dist/astro/nebulae.d.ts +4 -4
  18. package/dist/astro/procedural-system.js +1 -1
  19. package/dist/astro/star-physics.d.ts +255 -0
  20. package/dist/astro/star-physics.js +1 -0
  21. package/dist/astro/star-physics.js.map +1 -0
  22. package/dist/body-scan-CEUYjCfH.d.ts +416 -0
  23. package/dist/{chunk-HUYYGTRM.js → chunk-3LZXB2MC.js} +1 -1
  24. package/dist/{chunk-AAE4KZ2V.js → chunk-6IWKFKQF.js} +1 -1
  25. package/dist/{chunk-AAE4KZ2V.js.map → chunk-6IWKFKQF.js.map} +1 -1
  26. package/dist/{chunk-MRTTQYT5.js → chunk-7EWZGDWY.js} +1 -1
  27. package/dist/{chunk-TBZJIQ5P.js → chunk-7TVFV3VO.js} +1 -1
  28. package/dist/chunk-7TVFV3VO.js.map +1 -0
  29. package/dist/chunk-7ZERP4TB.js +1 -0
  30. package/dist/{chunk-APEG4ZER.js.map → chunk-7ZERP4TB.js.map} +1 -1
  31. package/dist/chunk-AGRSIKNV.js +1 -0
  32. package/dist/chunk-AGRSIKNV.js.map +1 -0
  33. package/dist/chunk-CHA6LKH4.js +1 -0
  34. package/dist/chunk-CHA6LKH4.js.map +1 -0
  35. package/dist/chunk-DABPLBTN.js +1 -0
  36. package/dist/chunk-DABPLBTN.js.map +1 -0
  37. package/dist/chunk-DAQ3PJ4R.js +1 -0
  38. package/dist/chunk-DAQ3PJ4R.js.map +1 -0
  39. package/dist/chunk-G2VSQFD6.js +1 -0
  40. package/dist/{chunk-T62GO4AA.js.map → chunk-G2VSQFD6.js.map} +1 -1
  41. package/dist/chunk-GBTCWNO6.js +1 -0
  42. package/dist/chunk-GBTCWNO6.js.map +1 -0
  43. package/dist/chunk-KPJ77VPS.js +1 -0
  44. package/dist/{chunk-PL75RTA2.js.map → chunk-KPJ77VPS.js.map} +1 -1
  45. package/dist/chunk-NEXDA73Y.js +1 -0
  46. package/dist/chunk-NEXDA73Y.js.map +1 -0
  47. package/dist/chunk-P2MUFVJC.js +1 -0
  48. package/dist/chunk-P2MUFVJC.js.map +1 -0
  49. package/dist/chunk-TMXKC6JL.js +1 -0
  50. package/dist/chunk-TMXKC6JL.js.map +1 -0
  51. package/dist/chunk-ZZ376WHL.js +1 -0
  52. package/dist/chunk-ZZ376WHL.js.map +1 -0
  53. package/dist/commodities/commodities.d.ts +1 -1
  54. package/dist/equipment/index.js +1 -1
  55. package/dist/equipment/upgrade-costs.js +1 -1
  56. package/dist/equipment/upgrade-costs.js.map +1 -1
  57. package/dist/i18n/index.js +1 -1
  58. package/dist/i18n/pre-engineered.js +1 -1
  59. package/dist/materials/index.js +1 -1
  60. package/dist/materials/materials.d.ts +1 -1
  61. package/dist/materials/micro-resources-all.js +1 -1
  62. package/dist/materials/micro-resources.d.ts +1 -1
  63. package/dist/materials/micro-resources.js +1 -1
  64. package/dist/ships/build-metrics.d.ts +21 -232
  65. package/dist/ships/build-metrics.js +1 -1
  66. package/dist/ships/distributor.d.ts +1 -1
  67. package/dist/ships/heat.d.ts +1 -1
  68. package/dist/ships/index.d.ts +2 -2
  69. package/dist/ships/index.js +1 -1
  70. package/dist/ships/loadout-calculations.d.ts +2 -2
  71. package/dist/ships/mobility-capacitor.d.ts +1 -1
  72. package/dist/ships/modules-all.js +1 -1
  73. package/dist/ships/modules.d.ts +1 -1
  74. package/dist/ships/modules.js +1 -1
  75. package/dist/ships/pre-engineered-stats.d.ts +16 -9
  76. package/dist/ships/pre-engineered-stats.js +1 -1
  77. package/dist/ships/pre-engineered.d.ts +4 -3
  78. package/dist/ships/pre-engineered.js +1 -1
  79. package/dist/ships/shield-capacitor.d.ts +1 -1
  80. package/dist/ships/shields.d.ts +1 -1
  81. package/dist/ships/ship-loadout.d.ts +80 -16
  82. package/dist/ships/ship-loadout.js +1 -1
  83. package/package.json +19 -4
  84. package/dist/chunk-6S36AVA4.js +0 -1
  85. package/dist/chunk-6S36AVA4.js.map +0 -1
  86. package/dist/chunk-APEG4ZER.js +0 -1
  87. package/dist/chunk-GVNTKCVF.js +0 -1
  88. package/dist/chunk-GVNTKCVF.js.map +0 -1
  89. package/dist/chunk-JET673E5.js +0 -1
  90. package/dist/chunk-JET673E5.js.map +0 -1
  91. package/dist/chunk-PL75RTA2.js +0 -1
  92. package/dist/chunk-SG6YLUQ4.js +0 -1
  93. package/dist/chunk-SG6YLUQ4.js.map +0 -1
  94. package/dist/chunk-T62GO4AA.js +0 -1
  95. package/dist/chunk-TBZJIQ5P.js.map +0 -1
  96. /package/dist/{chunk-HUYYGTRM.js.map → chunk-3LZXB2MC.js.map} +0 -0
  97. /package/dist/{chunk-MRTTQYT5.js.map → chunk-7EWZGDWY.js.map} +0 -0
@@ -166,7 +166,11 @@ type LoadoutSlot = BuildSlot & {
166
166
  * `sourceSymbol` when the source named nothing there at all. A module whose source stated
167
167
  * a recipe and no `Modifiers` reports `unresolvedEngineering` when neither a craftable
168
168
  * recipe nor a catalogued article answers to what it named, because that module alone
169
- * keeps the figures of an unengineered one.
169
+ * keeps the figures of an unengineered one. Two further entries report a *reading* the
170
+ * import chose rather than a change it made: `ambiguousEngineering` where an identity-only
171
+ * block was rolled while a catalogued article answers to it just as well, and
172
+ * `rerolledEngineering` where a stated modifier block moved nothing the module has and the
173
+ * recipe beside it was rolled in its place.
170
174
  *
171
175
  * @example
172
176
  * ```ts
@@ -211,6 +215,43 @@ type LoadoutImportOutcome = {
211
215
  readonly sourceSymbol: string;
212
216
  /** Recipe the source named, in its own spelling. */
213
217
  readonly blueprintSymbol: string;
218
+ } | {
219
+ /**
220
+ * The source stated a recipe and no `Modifiers`, and both readings of that
221
+ * identity are legitimate: the module's own engineering menu offers the recipe,
222
+ * *and* a catalogued fixed article carries the same blueprint at the same grade
223
+ * and effect. The roll was fitted, because that is what nearly every such block
224
+ * is; {@link preEngineeredVariant} is the article passed over.
225
+ */
226
+ readonly action: 'ambiguousEngineering';
227
+ /** Exact slot spelling used by the imported build. */
228
+ readonly slot: string;
229
+ /** Module identity the recipe was stated for. */
230
+ readonly sourceSymbol: string;
231
+ /** Recipe the source named, in its own spelling. */
232
+ readonly blueprintSymbol: string;
233
+ /**
234
+ * The catalogued article the same block equally describes. Pass it to
235
+ * {@link ships!ShipLoadout.setPreEngineeredVariant |
236
+ * ShipLoadout.setPreEngineeredVariant} to take that reading instead.
237
+ */
238
+ readonly preEngineeredVariant: PreEngineeredVariant;
239
+ } | {
240
+ /**
241
+ * The source stated `Modifiers` that move no stat this module has — an empty
242
+ * array, or labels the catalogues model nothing for — and identified no
243
+ * catalogued article, so the module would have published unengineered figures
244
+ * while reporting that it is engineered. The recipe stated beside them was
245
+ * rolled at the stated grade and quality in their place, and the source's own
246
+ * modifier block is gone from the build.
247
+ */
248
+ readonly action: 'rerolledEngineering';
249
+ /** Exact slot spelling used by the imported build. */
250
+ readonly slot: string;
251
+ /** Module identity the recipe was stated for. */
252
+ readonly sourceSymbol: string;
253
+ /** Recipe the source named, in its own spelling. */
254
+ readonly blueprintSymbol: string;
214
255
  };
215
256
 
216
257
  /**
@@ -543,7 +584,7 @@ interface SlefExportOptions extends LoadoutExportOptions {
543
584
  * const metrics = BuildMetrics.of(build);
544
585
  * metrics.maxJumpRange(); // -> 60.5478 (ly, best single jump)
545
586
  * metrics.powerBudget().withinBudget; // -> true
546
- * metrics.shieldMetrics()?.strength; // -> 743.12 (MJ)
587
+ * metrics.shieldMetricsResult().value?.strength; // -> 743.12 (MJ)
547
588
  * metrics.armourMetrics().hitPoints; // -> 307.8
548
589
  * ```
549
590
  */
@@ -585,14 +626,23 @@ declare class ShipLoadout {
585
626
  * the module would report that it is engineered while publishing the figures of one
586
627
  * that is not. Where the module's own engineering menu offers the recipe, the block
587
628
  * is read as an ordinary roll of it, even if a fixed article of that module carries
588
- * the same blueprint at the same grade; use {@link setPreEngineeredVariant} to say
589
- * the article was meant instead. A Mercenary article is read as its own article at
590
- * the grade it was bought at, and as that purchase climbed by its bespoke recipe
591
- * above it. Where the menu does not offer the recipe, no ordinary roll
592
- * could have written the block, so a single catalogued article answering to it is
593
- * fitted. Where neither answers, the module keeps unengineered figures and
629
+ * the same blueprint at the same grade a reading {@link importOutcomes} reports as
630
+ * `ambiguousEngineering`, carrying the article passed over so
631
+ * {@link setPreEngineeredVariant} can take the other one. A Mercenary article is read
632
+ * as its own article at the grade it was bought at, and as that purchase climbed by
633
+ * its bespoke recipe above it. Where the menu does not offer the recipe, no ordinary
634
+ * roll could have written the block, so a single catalogued article answering to it
635
+ * is fitted. Where neither answers, the module keeps unengineered figures and
594
636
  * {@link importOutcomes} reports the slot as `unresolvedEngineering`.
595
637
  *
638
+ * **A stated modifier block that moves nothing is replaced by the roll.** A block
639
+ * naming only stats the module has no value for describes some other module, and
640
+ * preserving it would publish unengineered figures under an engineered block, so the
641
+ * recipe stated beside it is rolled instead and the slot is reported as
642
+ * `rerolledEngineering`. Every block that moves at least one stat this module carries
643
+ * stays exactly as the source wrote it: a capture's own figures are what the game
644
+ * reported, and outrank anything recomputed here.
645
+ *
596
646
  * Modules are imported as one complete snapshot, so their order does not affect
597
647
  * per-ship count allowances. An entry stands as the event stated it when the mount
598
648
  * can hold the article the catalogue resolves, when its slot is a known cosmetic or
@@ -760,21 +810,26 @@ declare class ShipLoadout {
760
810
  /**
761
811
  * What the import made of this build: the changes it applied, in source order,
762
812
  * followed by the fixed mounts stocked from the hull defaults because the source
763
- * named none, in the defaults' own order, followed by the modules whose stated
764
- * engineering it could not resolve.
813
+ * named none, in the defaults' own order, followed by what it made of each module's
814
+ * stated engineering.
765
815
  *
766
816
  * @returns A deeply frozen list. It is empty for builds created with
767
817
  * {@link ShipLoadout.empty} or {@link ShipLoadout.default}, and for imports that
768
- * needed no normalization and left no engineering unresolved.
818
+ * needed no normalization and read every stated recipe unambiguously.
769
819
  * @remarks
770
820
  * Each entry names the exact slot, and the source identity where the source gave one.
771
821
  * `emptied` means an unknown module was removed from a removable mount; `defaulted`
772
822
  * names the stock article fitted to armour, a core internal or the cargo hatch, with
773
823
  * a `null` `sourceSymbol` when the source named nothing there at all.
774
- * `unresolvedEngineering` is the one entry that reports a *non*-change: the source
775
- * stated a recipe and no `Modifiers`, nothing the catalogues carry answers to it, and
776
- * that module alone keeps the figures of an unengineered one (see
777
- * {@link ShipLoadout.fromLoadout}).
824
+ * `rerolledEngineering` names a module whose stated `Modifiers` moved no stat it
825
+ * carries, so the recipe beside them was rolled in their place.
826
+ *
827
+ * Two entries report no change to the fit at all. `unresolvedEngineering` means the
828
+ * source stated a recipe and no `Modifiers`, nothing the catalogues carry answers to
829
+ * it, and that module alone keeps the figures of an unengineered one.
830
+ * `ambiguousEngineering` means such a block had *two* answers — an ordinary roll and
831
+ * a catalogued fixed article — and carries the article that was passed over, ready
832
+ * for {@link setPreEngineeredVariant} (see {@link ShipLoadout.fromLoadout}).
778
833
  */
779
834
  get importOutcomes(): readonly LoadoutImportOutcome[];
780
835
  /**
@@ -796,7 +851,7 @@ declare class ShipLoadout {
796
851
  * an error — it never leaves the pad, where the tank always is one — while a ship
797
852
  * that only fails with the hold full is a warning, and leaves the build valid and
798
853
  * complete: how much cargo to take is the pilot's call. Either way
799
- * {@link ships!BuildMetrics.mobilityMetrics | BuildMetrics.mobilityMetrics} reports
854
+ * {@link ships!BuildMetrics.mobilityMetricsResult | BuildMetrics.mobilityMetricsResult} reports
800
855
  * a speed of zero at the load in question.
801
856
  *
802
857
  * A capture may state a mass nobody can weigh — a negative `UnladenMass`, or an
@@ -1058,6 +1113,15 @@ declare class ShipLoadout {
1058
1113
  * purchase identity while the requested effect is composed with them. Refused edits
1059
1114
  * leave the build unchanged and return stable structured data.
1060
1115
  *
1116
+ * A Mercenary article is recomputed rather than composed, and that limits what can be
1117
+ * done to the effect ten of those rows are sold carrying. At its purchase grade there
1118
+ * is no recipe to recompute from — the bespoke recipe starts at grade 2 — so every
1119
+ * edit is refused with `unsupportedEngineering`. Once engineered to grade 2 or above
1120
+ * an edit recomputes normally, but only to an effect the module's own menu offers:
1121
+ * the Merc Mining Laser's Incendiary Rounds is not one, so re-stating it is refused
1122
+ * with `unsupportedExperimentalEffect`. Both refusals are lossless like any other, and
1123
+ * the baked effect stays where it is.
1124
+ *
1061
1125
  * @param slotKey - The engineered slot, matched case-insensitively.
1062
1126
  * @param experimental - Experimental-effect symbol, or `null` to remove the effect.
1063
1127
  * @returns A frozen result identifying an update, no-op or lossless refusal.
@@ -1 +1 @@
1
- export{LoadoutEditError,ShipLoadout}from"../chunk-SG6YLUQ4.js"; //# sourceMappingURL=ship-loadout.js.map
1
+ export{LoadoutEditError,ShipLoadout}from"../chunk-CHA6LKH4.js"; //# sourceMappingURL=ship-loadout.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elite-dangerous-almanac/core",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Elite Dangerous static data and calculations: astronomy, ships and outfitting, personal equipment and engineering, materials, and market commodities.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -53,6 +53,18 @@
53
53
  "import": "./dist/astro/index.js"
54
54
  },
55
55
  "./astro/internal/*": null,
56
+ "./astro/body-orbit": {
57
+ "types": "./dist/astro/body-orbit.d.ts",
58
+ "import": "./dist/astro/body-orbit.js"
59
+ },
60
+ "./astro/body-physics": {
61
+ "types": "./dist/astro/body-physics.d.ts",
62
+ "import": "./dist/astro/body-physics.js"
63
+ },
64
+ "./astro/body-rings": {
65
+ "types": "./dist/astro/body-rings.d.ts",
66
+ "import": "./dist/astro/body-rings.js"
67
+ },
56
68
  "./astro/codex-region-lookup": {
57
69
  "types": "./dist/astro/codex-region-lookup.d.ts",
58
70
  "import": "./dist/astro/codex-region-lookup.js"
@@ -117,6 +129,10 @@
117
129
  "types": "./dist/astro/sector-name.d.ts",
118
130
  "import": "./dist/astro/sector-name.js"
119
131
  },
132
+ "./astro/star-physics": {
133
+ "types": "./dist/astro/star-physics.d.ts",
134
+ "import": "./dist/astro/star-physics.js"
135
+ },
120
136
  "./astro/system-address-input": {
121
137
  "types": "./dist/astro/system-address-input.d.ts",
122
138
  "import": "./dist/astro/system-address-input.js"
@@ -470,7 +486,7 @@
470
486
  "scripts": {
471
487
  "audit": "pnpm audit --audit-level=low",
472
488
  "build": "node scripts/copy-notices.mjs && node scripts/copy-assets.mjs && tsup && node scripts/prune-sourcemap-sources.mjs && node scripts/prune-barrel-imports.mjs && node scripts/attach-barrel-docs.mjs",
473
- "check": "pnpm run check:fixtures && pnpm run check:i18n-coverage && pnpm run lint && pnpm run format:check && pnpm run typecheck && pnpm run check:examples && pnpm run check:sizes && pnpm test",
489
+ "check": "pnpm run check:fixtures && pnpm run check:i18n-coverage && pnpm run lint && pnpm run format:check && pnpm run typecheck && pnpm run check:examples && pnpm test",
474
490
  "check:fixtures": "node ../scripts/fixtures/generate-schema-and-types.mjs --check",
475
491
  "check:i18n-coverage": "node scripts/i18n-coverage.mjs --check",
476
492
  "format": "prettier --write . ../README.md ../CONTRIBUTING.md ../SECURITY.md ../schemas/**/*.{json,md} ../scripts/**/*.mjs ../.github/*.{md,yml} ../.github/workflows/*.yml ../.github/ISSUE_TEMPLATE/*.yml",
@@ -483,7 +499,6 @@
483
499
  "typecheck": "tsc --noEmit",
484
500
  "docs": "typedoc && node scripts/build-wiki-sidebar.mjs && node scripts/postprocess-wiki.mjs",
485
501
  "check:examples": "node --test scripts/example-claims.test.mjs scripts/example-runtime.test.mjs && node scripts/check-examples.mjs",
486
- "check:sizes": "pnpm run build && node scripts/check-sizes.mjs",
487
502
  "test:package": "node --test package.test.mjs"
488
503
  },
489
504
  "devDependencies": {
@@ -491,7 +506,7 @@
491
506
  "@jridgewell/sourcemap-codec": "^1.5.5",
492
507
  "@types/node": "^26.1.2",
493
508
  "ajv": "^8.20.0",
494
- "es-module-lexer": "2.3.1",
509
+ "es-module-lexer": "2.3.2",
495
510
  "esbuild": "0.28.2",
496
511
  "eslint": "^10.8.0",
497
512
  "globals": "^17.9.0",
@@ -1 +0,0 @@
1
- import{weaponsCapacitorMetrics}from"./chunk-M4FZRDAH.js";import{shieldCapacitorMetrics}from"./chunk-XQJERZUS.js";import{cellBankSummary,shieldRecovery}from"./chunk-JMAXSXXQ.js";import{loadoutInternals,fittedThrusterParamsFor,preEngineeredVariantFor,powerConsumerFor,powerAvailable,heatInputResultFor,completeResult,cellBankInputsFor,armourInputFor,weaponStatsFor,weaponsCapacitorInputFor,mobilityInputResultFor,shieldInputResultFor,shieldCapacitorInputResultFor,shieldRecoveryInputResultFor,distributorInputResultFor,incompleteResult}from"./chunk-AAE4KZ2V.js";import{isNonOutfittingSlot,isBuiltInHullModule,orderBySlotLayout}from"./chunk-JET673E5.js";import{weaponMetrics,sumWeaponMetrics}from"./chunk-37JIMWLK.js";import{shieldMetrics}from"./chunk-5VWACBTN.js";import{powerBudget}from"./chunk-GGQMIQPC.js";import{frameShiftDriveMassFactor,singleJumpRange,fuelPerJump,totalRange}from"./chunk-VTMCSCXV.js";import{calculateUnladenMass}from"./chunk-DCB4COCL.js";import{mobilityCapacitorMetrics}from"./chunk-VEEBJFJ7.js";import{mobilityMetrics}from"./chunk-A4QKXXZD.js";import{distributorMetrics}from"./chunk-M2TCZKRT.js";import{getExperimentalEffectCost}from"./chunk-CJK2IBI2.js";import{heatMetrics}from"./chunk-6HA2YIKW.js";import{ammunitionCapacity}from"./chunk-AA3K5XUE.js";import{armourMetrics}from"./chunk-Q5ALV3DI.js";import{requirePips,requireFiniteNonNegative}from"./chunk-65FZECUX.js";import{getBlueprintCost}from"./chunk-MTJ4MS7W.js";import{sumMaterials}from"./chunk-CJQ37JII.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var FACADE="BuildMetrics";function requireLoadOptions(scope,options){for(const field of["fuel","cargo"]){const value=options[field];if(value!==void 0)requireFiniteNonNegative(scope,field,value)}}var BuildMetrics=class _BuildMetrics{#build;#state;constructor(build,state){this.#build=build;this.#state=state}static of(build){return new _BuildMetrics(build,loadoutInternals(build,`${FACADE}.of: build`))}loadout(){return this.#build}frameShiftDrive(){const drive=this.#state.resolveDrive();if(drive===null){throw new TypeError(`${FACADE}: build has no frame shift drive`)}return drive}thrusters(){return fittedThrusterParamsFor(this.#state.modules(),this.#state.statsFor)}frameShiftDriveMassFactor(options={}){requireLoadOptions(`${FACADE}.frameShiftDriveMassFactor`,options);return frameShiftDriveMassFactor(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}maxJumpRange(){const fsd=this.frameShiftDrive();return singleJumpRange(this.#loadedMass(0),this.#maxJumpFuel(fsd),fsd)}jumpRange(options={}){requireLoadOptions(`${FACADE}.jumpRange`,options);return singleJumpRange(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}ladenJumpRange(){return this.jumpRange({cargo:this.#build.cargoCapacity})}fuelPerJump(distance,options={}){requireLoadOptions(`${FACADE}.fuelPerJump`,options);return fuelPerJump(distance,this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}totalRange(options={}){requireLoadOptions(`${FACADE}.totalRange`,options);return totalRange(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}standardLoad(load){return this.#standardLoad("standardLoad",load).value}standardLoadResult(load){return this.#standardLoad("standardLoadResult",load)}jumpRangeSummary(){const maximum=this.#require(this.standardLoadResult("maximum"),"maximum load");const unladen=this.#require(this.standardLoadResult("unladen"),"unladen load");const laden=this.#require(this.standardLoadResult("laden"),"laden load");return{max:this.jumpRange(maximum),unladen:this.jumpRange(unladen),laden:this.jumpRange(laden),totalMax:this.totalRange(maximum),totalUnladen:this.totalRange(unladen),totalLaden:this.totalRange(laden)}}buildMass(options={}){requireLoadOptions(`${FACADE}.buildMass`,options);const unladen=this.#build.unladenMass;const fuel=options.fuel??this.#build.fuelCapacity.main;const cargo=options.cargo??0;return Object.freeze({hull:this.#state.ship.hullMass,modules:calculateUnladenMass(0,this.#state.calculationModules()),unladen:unladen,fuel:fuel,cargo:cargo,total:unladen+fuel+cargo})}buildCost(){const hull=this.#state.ship.hullCost;let modules=0;let mercCoins=0;const unpriced=[];const materials=[];for(const module of this.#state.modules()){const stats=this.#state.statsFor(module);if(stats?.cost!==void 0){modules+=stats.cost}else if(stats!==null||!isNonOutfittingSlot(module.Slot)&&!isBuiltInHullModule(module)){unpriced.push({slot:module.Slot,symbol:module.Item})}const variant=preEngineeredVariantFor(module);mercCoins+=variant?.mercCoinCost??0;const engineering=module.Engineering;if(!engineering)continue;const grade=engineering.Level;const bought=variant?.grade??0;if(Number.isInteger(grade)&&grade>bought&&grade<=5){const climb=getBlueprintCost(engineering.BlueprintName,grade,bought);if(climb){materials.push(climb.materials);mercCoins+=climb.mercCoins}}const experimental=engineering.ExperimentalEffect;if(experimental!==void 0&&experimental.toLowerCase()!==variant?.experimentalEffectSymbol?.toLowerCase()){const cost=getExperimentalEffectCost(experimental);if(cost)materials.push(cost)}}return deepFreeze({credits:{total:hull+modules,hull:hull,modules:modules,rebuy:Math.trunc((hull+modules)*.05),unpriced:unpriced},mercCoins:mercCoins,materials:sumMaterials(...materials)})}powerBudget(){const modules=this.#state.modules();const consumers=[];for(const module of modules){const consumer=powerConsumerFor(module,this.#state.statsFor(module));if(consumer)consumers.push(consumer)}return powerBudget(powerAvailable(modules,this.#state.statsFor),consumers)}heatMetrics(){return this.heatMetricsResult().value}heatMetricsResult(){const input=heatInputResultFor(this.#state.ship,this.#state.effectiveModules(),this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(heatMetrics(input.value)):input}mobilityMetrics(options={}){return this.#mobility("mobilityMetrics",options).value}mobilityMetricsResult(options={}){return this.#mobility("mobilityMetricsResult",options)}mobilityCapacitorMetrics(options={}){return this.#mobilityCapacitor("mobilityCapacitorMetrics",options).value}mobilityCapacitorMetricsResult(options={}){return this.#mobilityCapacitor("mobilityCapacitorMetricsResult",options)}shieldMetrics(){return this.#shields().value}shieldMetricsResult(){return this.#shields()}shieldCapacitorMetrics(options={}){return this.#shieldCapacitor("shieldCapacitorMetrics",options).value}shieldCapacitorMetricsResult(options={}){return this.#shieldCapacitor("shieldCapacitorMetricsResult",options)}shieldRecovery(options={}){return this.#recovery("shieldRecovery",options).value}shieldRecoveryResult(options={}){return this.#recovery("shieldRecoveryResult",options)}cellBanks(){return cellBankSummary(orderBySlotLayout(cellBankInputsFor(this.#state.modules(),this.powerBudget(),this.#state.statsFor),this.#state.layout(),bank=>bank.slot))}armourMetrics(){return armourMetrics(armourInputFor(this.#state.ship,this.#state.modules(),this.#state.statsFor))}weaponMetrics(){const weapons=[];for(const module of this.#state.modules()){const record=this.#state.statsFor(module);const stats=weaponStatsFor(this.#state.effectiveModule(module),record);if(!stats)continue;weapons.push({slot:module.Slot,symbol:module.Item,name:record?.name??module.Item,enabled:module.On!==false,metrics:weaponMetrics(stats),ammunition:ammunitionCapacity(stats),...stats.maximumRange===void 0?{}:{maximumRange:stats.maximumRange},...stats.falloffRange===void 0?{}:{falloffRange:stats.falloffRange},...stats.projectileRange===void 0?{}:{projectileRange:{...stats.projectileRange}},...stats.armourPiercing===void 0?{}:{armourPiercing:stats.armourPiercing}})}const orderedWeapons=orderBySlotLayout(weapons,this.#state.layout(),weapon=>weapon.slot);return{weapons:orderedWeapons,total:sumWeaponMetrics(orderedWeapons.filter(weapon=>weapon.enabled).map(weapon=>weapon.metrics))}}weaponsCapacitorMetrics(options={}){const weaponsPips=requirePips(`${FACADE}.weaponsCapacitorMetrics`,"weaponsPips",options.weaponsPips??4);return weaponsCapacitorMetrics(weaponsCapacitorInputFor(this.#state.effectiveModules(),weaponsPips,this.powerBudget(),this.#state.statsFor))}distributorMetrics(options={}){return this.#distributor("distributorMetrics",options).value}distributorMetricsResult(options={}){return this.#distributor("distributorMetricsResult",options)}#mobility(method,options){const input=this.#mobilityInput(`${FACADE}.${method}`,options);return input.complete?completeResult(mobilityMetrics(input.value)):input}#mobilityCapacitor(method,options){const scope=`${FACADE}.${method}`;const enginesPips=requirePips(scope,"enginesPips",options.enginesPips??4);const input=this.#mobilityInput(scope,options);return input.complete?completeResult(mobilityCapacitorMetrics({...input.value,enginesPips:enginesPips})):input}#mobilityInput(scope,options){requireLoadOptions(scope,options);return mobilityInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),()=>this.#loadedMass(options.cargo??0)+(options.fuel??this.#state.statedMainFuel()??this.#build.fuelCapacity.main),this.#state.statsFor)}#shields(){const input=shieldInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(shieldMetrics(input.value)):input}#shieldCapacitor(method,options){const systemsPips=requirePips(`${FACADE}.${method}`,"systemsPips",options.systemsPips??4);const input=shieldCapacitorInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),systemsPips,this.#state.statsFor);return input.complete?completeResult(shieldCapacitorMetrics(input.value)):input}#recovery(method,options){const systemsPips=requirePips(`${FACADE}.${method}`,"systemsPips",options.systemsPips??4);const input=shieldRecoveryInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),systemsPips,this.#state.statsFor);return input.complete?completeResult(shieldRecovery(input.value)):input}#distributor(method,options){const scope=`${FACADE}.${method}`;const pips={systemsPips:requirePips(scope,"systemsPips",options.systemsPips??4),enginesPips:requirePips(scope,"enginesPips",options.enginesPips??4),weaponsPips:requirePips(scope,"weaponsPips",options.weaponsPips??4)};const input=distributorInputResultFor(this.#state.effectiveModules(),pips,this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(distributorMetrics(input.value)):input}#standardLoad(method,load){if(load!=="maximum"&&load!=="unladen"&&load!=="laden"){throw new RangeError(`${FACADE}.${method}: load must be 'maximum', 'unladen', or 'laden'`)}const fuel=this.#build.fuelCapacity;const cargo=load==="laden"?this.#build.cargoCapacity:0;const mass=load==="maximum"?this.#build.unladenMass:0;let drive=null;let maximumFuel=null;if(load==="maximum"){const fitted=this.#state.frameShiftDriveModule();let driveError=null;try{drive=this.#state.resolveDrive();maximumFuel=drive?.maxFuel??null}catch(error){if(!(error instanceof Error))throw error;driveError=error}if(maximumFuel===null){return incompleteResult([{field:"frameShiftDrive",reason:fitted?"unresolved":"missing",slot:fitted?.Slot??"FrameShiftDrive",...fitted?{symbol:fitted.Item}:{},message:driveError?.message??"FrameShiftDrive: no frame shift drive is fitted",params:fitted?{field:"frameShiftDrive",reason:"unresolved",slot:fitted.Slot,symbol:fitted.Item}:{field:"frameShiftDrive",reason:"missing",slot:"FrameShiftDrive"}}])}}const carriedFuel=load==="maximum"?Math.min(fuel.main,maximumFuel):fuel.main;const value=Object.freeze({fuel:carriedFuel,cargo:cargo,mass:this.#build.unladenMass+carriedFuel+cargo});if(load==="maximum"){try{this.jumpRange(value)}catch(error){if(!(error instanceof RangeError))throw error;const fitted=this.#state.frameShiftDriveModule();const field=drive!==null&&(!Number.isFinite(drive.maxFuel)||drive.maxFuel<0)?"frameShiftDrive":!Number.isFinite(value.fuel)||value.fuel<0?"fuelCapacity":!Number.isFinite(mass)||mass<0?"mass":"frameShiftDrive";const driveParams=field==="frameShiftDrive"&&fitted?{slot:fitted.Slot,symbol:fitted.Item}:{};return incompleteResult([{field:field,reason:"invalid",...driveParams,message:error.message,params:{field:field,reason:"invalid",...driveParams}}])}}return completeResult(value)}#require(result,what){if(result.value===null){throw new TypeError(`${FACADE}: cannot determine ${what} (${result.issues.map(issue=>issue.message).join("; ")})`)}return result.value}#loadedMass(cargo){return this.#build.unladenMass+cargo}#maxJumpFuel(fsd){return Math.min(this.#build.fuelCapacity.main,fsd.maxFuel)}};export{BuildMetrics};//# sourceMappingURL=chunk-6S36AVA4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ships/build-metrics.ts"],"names":["weaponsCapacitorMetrics","shieldCapacitorMetrics","cellBankSummary","shieldRecovery","loadoutInternals","fittedThrusterParamsFor","preEngineeredVariantFor","powerConsumerFor","powerAvailable","heatInputResultFor","completeResult","cellBankInputsFor","armourInputFor","weaponStatsFor","weaponsCapacitorInputFor","mobilityInputResultFor","shieldInputResultFor","shieldCapacitorInputResultFor","shieldRecoveryInputResultFor","distributorInputResultFor","incompleteResult","isNonOutfittingSlot","isBuiltInHullModule","orderBySlotLayout","weaponMetrics","sumWeaponMetrics","shieldMetrics","powerBudget","frameShiftDriveMassFactor","singleJumpRange","fuelPerJump","totalRange","calculateUnladenMass","mobilityCapacitorMetrics","mobilityMetrics","distributorMetrics","getExperimentalEffectCost","heatMetrics","ammunitionCapacity","armourMetrics","requirePips","requireFiniteNonNegative","getBlueprintCost","sumMaterials","deepFreeze","FACADE","requireLoadOptions","scope","options","field","value","BuildMetrics","_BuildMetrics","build","state","constructor","this","of","loadout","frameShiftDrive","drive","resolveDrive","TypeError","thrusters","modules","statsFor","loadedMass","cargo","fuel","fuelCapacity","main","maxJumpRange","fsd","maxJumpFuel","jumpRange","ladenJumpRange","cargoCapacity","distance","standardLoad","load","standardLoadResult","jumpRangeSummary","maximum","require","unladen","laden","max","totalMax","totalUnladen","totalLaden","buildMass","unladenMass","Object","freeze","hull","ship","hullMass","calculationModules","total","buildCost","hullCost","mercCoins","unpriced","materials","module","stats","cost","Slot","push","slot","symbol","Item","variant","mercCoinCost","engineering","Engineering","grade","Level","bought","Number","isInteger","climb","BlueprintName","experimental","ExperimentalEffect","toLowerCase","experimentalEffectSymbol","credits","rebuy","Math","trunc","consumers","consumer","heatMetricsResult","input","effectiveModules","complete","mobility","mobilityMetricsResult","mobilityCapacitor","mobilityCapacitorMetricsResult","shields","shieldMetricsResult","shieldCapacitor","shieldCapacitorMetricsResult","recovery","shieldRecoveryResult","cellBanks","layout","bank","weapons","record","effectiveModule","name","enabled","On","metrics","ammunition","maximumRange","falloffRange","projectileRange","armourPiercing","orderedWeapons","weapon","filter","map","weaponsPips","distributor","distributorMetricsResult","method","mobilityInput","enginesPips","statedMainFuel","systemsPips","pips","RangeError","mass","maximumFuel","fitted","frameShiftDriveModule","driveError","maxFuel","error","Error","reason","message","params","carriedFuel","min","isFinite","driveParams","result","what","issues","issue","join"],"mappings":"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"}
@@ -1 +0,0 @@
1
- import{CORE_MODULES}from"./chunk-FA5JVXVG.js";import{HARDPOINT_MODULES}from"./chunk-4TFAZX73.js";import{INTERNAL_MODULES}from"./chunk-4CBMQULR.js";import{UTILITY_MODULES}from"./chunk-ELT3FEA4.js";var ALL_MODULES=Object.freeze([...CORE_MODULES,...INTERNAL_MODULES,...HARDPOINT_MODULES,...UTILITY_MODULES]);export{ALL_MODULES};//# sourceMappingURL=chunk-APEG4ZER.js.map
@@ -1 +0,0 @@
1
- import{ITEM_MICRO_RESOURCES}from"./chunk-WHWFKHV3.js";import{COMPONENT_MICRO_RESOURCES}from"./chunk-HTB52N6S.js";import{CONSUMABLE_MICRO_RESOURCES}from"./chunk-K7L7SMIR.js";import{DATA_MICRO_RESOURCES}from"./chunk-GVLDFJEY.js";var ALL_MICRO_RESOURCES=Object.freeze([...COMPONENT_MICRO_RESOURCES,...CONSUMABLE_MICRO_RESOURCES,...DATA_MICRO_RESOURCES,...ITEM_MICRO_RESOURCES]);export{ALL_MICRO_RESOURCES};//# sourceMappingURL=chunk-GVNTKCVF.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/materials/micro-resources-all.ts"],"names":["ITEM_MICRO_RESOURCES","COMPONENT_MICRO_RESOURCES","CONSUMABLE_MICRO_RESOURCES","DATA_MICRO_RESOURCES","ALL_MICRO_RESOURCES","Object","freeze"],"mappings":"O,4NA6BO,IAAMI,oBAAgDC,OAAOC,OAAO,IACpEL,6BACAC,8BACAC,wBACAH,8BACNI"}
@@ -1 +0,0 @@
1
- import{combinedRateOfFire}from"./chunk-37JIMWLK.js";import{getPreEngineeredVariants}from"./chunk-PL75RTA2.js";import{builtInModuleBySymbol,getModuleBySymbol}from"./chunk-HUYYGTRM.js";import{ALL_MODULES}from"./chunk-APEG4ZER.js";import{EXPERIMENTAL_EFFECTS,getExperimentalEffect}from"./chunk-77I24V6B.js";import{fieldForLabel,baseStats,computeModifiers,labelsForDamageType,scaleForLabel,preciseModifierValue,capabilityValueForLabel}from"./chunk-CJQ37JII.js";import{resolveBlueprintForModule}from"./chunk-OLKNYGGT.js";import{getBlueprintsForModule,getExperimentalsForModule,getEngineeringGroup}from"./chunk-GLWPSVFV.js";import{getBlueprintGrade,getBlueprint,BLUEPRINTS}from"./chunk-AYAKU4YA.js";import{normalizeKey}from"./chunk-BKWLI44T.js";import{requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";function scaleDamageComponents(components,baseDamage,effectiveDamage){const scale=baseDamage!==void 0&&baseDamage!==0&&effectiveDamage!==void 0?effectiveDamage/baseDamage:1;return{...components.kinetic===void 0?{}:{kinetic:components.kinetic*scale},...components.thermal===void 0?{}:{thermal:components.thermal*scale},...components.explosive===void 0?{}:{explosive:components.explosive*scale},...components.absolute===void 0?{}:{absolute:components.absolute*scale},...components.antiXeno===void 0?{}:{antiXeno:components.antiXeno*scale},...components.unclassified===void 0?{}:{unclassified:components.unclassified.map(value=>value*scale)}}}function fixedModifierFeatures(modifiers){return modifiers.map(modifier=>({label:modifier.label,method:modifier.method,min:modifier.value,max:modifier.value}))}var FITTED_ITEM="ShipLoadout: fitted module Item";function isNonOutfittingSlot(slotKey){return/^(paintjob|shipname\d+|shipid\d+|bobble\d+|decal\d+|shipkit.+|weaponcolour|enginecolour|vesselvoice|shipcockpit|stringlights)$/i.test(slotKey)}function isCargoHatchSlot(slotKey){return slotKey.toLowerCase()==="cargohatch"}function isBuiltInHullModule(module){return isCargoHatchSlot(module.Slot)&&module.Item.toLowerCase().startsWith("modularcargobaydoor")}function cloneLoadoutModule(module){return{Slot:module.Slot,Item:module.Item,...module.On===void 0?{}:{On:module.On},...module.Priority===void 0?{}:{Priority:module.Priority},...module.Health===void 0?{}:{Health:module.Health},...module.Value===void 0?{}:{Value:module.Value},...module.Engineering===void 0?{}:{Engineering:{BlueprintName:module.Engineering.BlueprintName,Level:module.Engineering.Level,Quality:module.Engineering.Quality,...module.Engineering.ExperimentalEffect===void 0?{}:{ExperimentalEffect:module.Engineering.ExperimentalEffect},...module.Engineering.ExperimentalEffect_Localised===void 0?{}:{ExperimentalEffect_Localised:module.Engineering.ExperimentalEffect_Localised},...module.Engineering.Modifiers===void 0?{}:{Modifiers:module.Engineering.Modifiers.map(modifier=>({...modifier}))}}}}}function matchingKeyIn(keyed,slotKey){if(keyed.has(slotKey))return slotKey;const wanted=slotKey.toLowerCase();for(const key of keyed.keys()){if(key.toLowerCase()===wanted)return key}return null}function ownKeyIn(keyed,canonicalKey){return matchingKeyIn(keyed,canonicalKey)??(keyed.size>0&&[...keyed.keys()].every(key=>key===key.toLowerCase())?canonicalKey.toLowerCase():canonicalKey)}function orderBySlotLayout(values,layout,slotOf){const order=new Map(layout.map((slot,index)=>[slot.key.toLowerCase(),index]));return[...values].sort((left,right)=>(order.get(slotOf(left).toLowerCase())??Number.MAX_SAFE_INTEGER)-(order.get(slotOf(right).toLowerCase())??Number.MAX_SAFE_INTEGER))}function cloneModuleStats(module){try{return deepFreeze(structuredClone(module))}catch(error){if(!(error instanceof Error&&error.name==="DataCloneError"))throw error;return deepFreeze({...module,...module.restrictedToShips===void 0?{}:{restrictedToShips:[...module.restrictedToShips]},...module.limitIncrease===void 0?{}:{limitIncrease:{...module.limitIncrease}},...module.damageDistribution===void 0?{}:{damageDistribution:{...module.damageDistribution}},...module.damageComponents===void 0?{}:{damageComponents:{...module.damageComponents,...module.damageComponents.unclassified===void 0?{}:{unclassified:[...module.damageComponents.unclassified]}}},...module.projectileRange===void 0?{}:{projectileRange:{...module.projectileRange}}})}}var GUARDIAN_WEAPON_GROUPS=/* @__PURE__ */new Set(["guardianGauss","guardianPlasma","guardianShard"]);function missingBaseLabels(stats,base,features,experimental){const contributions=[...features,...experimental??[]];return[...new Set(contributions.map(contribution=>contribution.label).filter(label=>{if(base[label]!==void 0)return false;return fieldForLabel(label,stats)===null}))]}function recipeSignature(blueprintSymbol){const blueprint=getBlueprint(blueprintSymbol);if(!blueprint)return null;const grades=Object.entries(blueprint.grades).map(([grade,{features:features}])=>`${grade}:${features.map(feature=>`${feature.label}/${feature.method??""}`).sort().join(",")}`).sort().join(";");return`${blueprint.name.toLowerCase()}|${grades}`}var isGenericSpelling=blueprintSymbol=>blueprintSymbol.toLowerCase().startsWith("misc_");function isSoldWithBlueprint(item,wanted){return getPreEngineeredVariants(item).some(variant=>variant.acquisition==="mercenary"&&variant.blueprintSymbol.toLowerCase()===wanted)}function blueprintRoutesFor(item){const routes=/* @__PURE__ */new Map;for(const blueprintSymbol of getBlueprintsForModule(item))routes.set(blueprintSymbol,"ordinary");for(const variant of getPreEngineeredVariants(item)){if(variant.acquisition==="mercenary"&&!routes.has(variant.blueprintSymbol)){routes.set(variant.blueprintSymbol,"mercenary")}}return routes}function blueprintAvailableFor(item,blueprintSymbol){const offered=getBlueprintsForModule(item);const asWritten=normalizeKey(blueprintSymbol,"ShipLoadout.applyBlueprint: blueprintSymbol");const resolved=resolveBlueprintForModule(item,blueprintSymbol).trim();const wanted=resolved.toLowerCase();if(offered.some(id=>id.toLowerCase()===wanted))return true;if(isSoldWithBlueprint(item,wanted)||isSoldWithBlueprint(item,asWritten))return true;if(!isGenericSpelling(wanted))return false;const signature=recipeSignature(resolved);if(signature===null)return false;return offered.some(id=>recipeSignature(id)===signature&&!isGenericSpelling(id))}function experimentalAvailableFor(item,experimentalEffectSymbol){const wanted=normalizeKey(experimentalEffectSymbol,"ShipLoadout.applyBlueprint: options.experimentalEffectSymbol");return getExperimentalsForModule(item).some(id=>id.toLowerCase()===wanted)}function primitiveLabelFor(stats,label){if(label==="MaximumRange"&&stats.maximumRange!==void 0)return"Range";if(label==="DamageFalloffRange"&&stats.falloffRange!==void 0){return"FalloffRange"}if(label==="Range"&&stats.scannerRange!==void 0)return"ScannerRange";if(label==="DSS_PatchRadius")return"ProbeRadius";if(label==="FuelScoopRate")return"RefuelRate";if(label==="EnergyPerRegen"&&stats.shieldRegenRate!==void 0){return"DistributorDraw"}return label}function primitiveEngineeringInputsFor(stats,grade,experimental){const canonicalGrade={...grade,features:grade.features.map(feature=>{const label=primitiveLabelFor(stats,feature.label);return label===feature.label?feature:{...feature,label:label}})};if(!experimental)return{grade:canonicalGrade};return{grade:canonicalGrade,experimental:{...experimental,modifiers:experimental.modifiers.map(modifier=>{const label=primitiveLabelFor(stats,modifier.label);return label===modifier.label?modifier:{...modifier,label:label}})}}}function matchesCalculatedModifiers(captured,calculated){if(!captured||captured.length!==calculated.length)return false;const byLabel=new Map(captured.map(modifier=>[modifier.Label.trim().toLowerCase(),modifier]));if(byLabel.size!==captured.length)return false;return calculated.every(expected=>{const actual=byLabel.get(expected.Label.trim().toLowerCase());if(!actual)return false;if(expected.Value!==void 0){return actual.Value!==void 0&&Math.abs(actual.Value-expected.Value)<=1e-5*Math.max(1,Math.abs(expected.Value))}return actual.ValueStr===expected.ValueStr})}function unrollableFixedArticle(item,engineering){if(engineering.Modifiers!==void 0||typeof engineering.BlueprintName!=="string"){return null}const wanted=engineering.BlueprintName.trim().toLowerCase();const experimental=engineering.ExperimentalEffect?.trim().toLowerCase();const matches=getPreEngineeredVariants(item).filter(candidate=>candidate.blueprintSymbol.trim().toLowerCase()===wanted&&candidate.grade===engineering.Level&&(candidate.experimentalEffectSymbol===void 0?experimental===void 0&&engineering.ExperimentalEffect_Localised===void 0:candidate.experimentalEffectSymbol.trim().toLowerCase()===experimental)&&!blueprintAvailableFor(item,candidate.blueprintSymbol));return matches.length===1?matches[0]:null}function ordinaryEngineeringProof(item,engineering,experimental){const recipe=resolveBlueprintForModule(item,engineering.BlueprintName);const fixedCandidate=getPreEngineeredVariants(item).some(candidate=>candidate.acquisition!=="mercenary"&&candidate.blueprintSymbol.trim().toLowerCase()===recipe.trim().toLowerCase());if(!fixedCandidate)return"notFixedCandidate";const grade=getBlueprintGrade(recipe,engineering.Level);const quality=engineering.Quality;const stock=builtInModuleBySymbol(item,FITTED_ITEM);if(!stock||!grade||experimental===null||!Number.isFinite(quality)||quality<0||quality>1){return"unproven"}const current=primitiveEngineeringInputsFor(stock,grade,experimental);if(missingBaseLabels(stock,baseStats(stock),current.grade.features,current.experimental?.modifiers).length>0){return"unproven"}const calculated=journalModifiersFor(stock,computeModifiers(baseStats(stock),current.grade,quality,current.experimental));const damageDistribution=current.experimental?.damageDistribution??current.grade.damageDistribution;if(damageDistribution){for(const type of["kinetic","thermal","explosive","absolute"]){const value=damageDistribution[type];if(value===void 0)continue;const label=labelsForDamageType(type)[0];if(label===void 0)continue;calculated.push({Label:label,Value:value*scaleForLabel(label),OriginalValue:(stock.damageDistribution?.[type]??0)*scaleForLabel(label)})}}return matchesCalculatedModifiers(engineering.Modifiers,calculated)?"proven":"unproven"}var round6=value=>{const rounded=Math.round(value*1e6)/1e6;return Object.is(rounded,-0)?0:rounded};function float32FiringCycle(interval,burstRounds,burstRateOfFire){if(interval<=0)return void 0;const withinBurst=burstRounds>1?Math.fround(Math.fround(burstRounds-1)/Math.fround(burstRateOfFire)):0;const cycle=Math.fround(withinBurst+Math.fround(interval));return cycle>0?cycle:void 0}function float32RateOfFire(interval,burstRounds,burstRateOfFire){const cycle=float32FiringCycle(interval,burstRounds,burstRateOfFire);return cycle===void 0?void 0:Math.fround(Math.fround(burstRounds)/cycle)}function float32DamagePerSecond(damage,rounds,rate,burstRounds,cycle){if(cycle!==void 0&&(rounds!==1||burstRounds!==1)){const damagePerCycle=Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(burstRounds));return Math.fround(damagePerCycle/cycle)}return Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(rate))}var JOURNAL_MODIFIER_ORDER=["CargoCapacity","GuardianModuleResistance","Mass","Integrity","PowerDraw","BootTime","PowerCapacity","HeatEfficiency","FSDOptimalMass","MaxFuelPerJump","FSDHeatRate","EngineOptimalMass","EngineOptPerformance","EngineHeatRate","ShieldGenOptimalMass","ShieldGenStrength","DamagePerSecond","Damage","DistributorDraw","ThermalLoad","ArmourPenetration","MaximumRange","ShotSpeed","RateOfFire","DamageType","$Kinetic;","$Thermal;","$Explosive;","$Absolute;","AmmoClipSize","AmmoMaximum","ReloadTime","Jitter","DamageFalloffRange","DefenceModifierShieldMultiplier","DefenceModifierHealthMultiplier","DefenceModifierHealthAddition","DefenceModifierShieldAddition","RegenRate","BrokenRegenRate","EnergyPerRegen","KineticResistance","ThermicResistance","ExplosiveResistance","CausticResistance","DamageProtection","ModuleDefenceAbsorption","WeaponsCapacity","WeaponsRecharge","EnginesCapacity","EnginesRecharge","SystemsCapacity","SystemsRecharge","ShieldBankSpinUp","ShieldBankDuration","ShieldBankReinforcement","ShieldBankHeat","FSDInterdictorRange","FSDInterdictorFacingLimit","SensorTargetScanAngle","MaxAngle","ScannerTimeToScan","Range","DSS_PatchRadius","FuelScoopRate","FuelCapacity"];var JOURNAL_MODIFIER_RANK=new Map(JOURNAL_MODIFIER_ORDER.map((label,index)=>[label,index]));function sortJournalModifiers(modifiers){return modifiers.map((modifier,index)=>({modifier:modifier,index:index})).sort((a,b)=>(JOURNAL_MODIFIER_RANK.get(a.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)-(JOURNAL_MODIFIER_RANK.get(b.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)||a.index-b.index).map(({modifier:modifier})=>modifier)}function journalModifiersFor(stats,modifiers){const weapon=stats.damage!==void 0;const valueFor=(label,fallback)=>{const modifier=modifiers.find(candidate=>candidate.Label===label);return(modifier&&preciseModifierValue(modifier))??Math.fround(fallback)};const burstTouched=["BurstInterval","BurstSize","BurstRateOfFire"].some(label=>modifiers.some(modifier=>modifier.Label===label));const damageTouched=modifiers.some(modifier=>modifier.Label==="Damage");const rateTouched=burstTouched||modifiers.some(modifier=>modifier.Label==="RateOfFire");let damagePerSecond;let derivedRate;if(weapon&&(damageTouched||rateTouched)){const continuous=stats.burstInterval===void 0&&stats.rateOfFire===void 0;const baseDamage=Math.fround(stats.damage);const effectiveDamage=valueFor("Damage",stats.damage);if(continuous){damagePerSecond={Label:"DamagePerSecond",Value:round6(effectiveDamage),OriginalValue:round6(baseDamage)}}else{const burstRounds=valueFor("BurstSize",stats.burstRounds??1);const burstRate=valueFor("BurstRateOfFire",stats.burstRateOfFire??1);const baseBurstRounds=Math.fround(stats.burstRounds??1);const baseBurstRate=Math.fround(stats.burstRateOfFire??1);const baseInterval=stats.burstInterval===void 0?void 0:Math.fround(stats.burstInterval);const baseCycle=baseInterval===void 0?void 0:float32FiringCycle(baseInterval,baseBurstRounds,baseBurstRate);const baseRate=baseInterval!==void 0?float32RateOfFire(baseInterval,baseBurstRounds,baseBurstRate):stats.rateOfFire===void 0?void 0:Math.fround(stats.rateOfFire);const rateModifier=modifiers.find(modifier=>modifier.Label==="RateOfFire");const effectiveRate=rateModifier&&preciseModifierValue(rateModifier);const effectiveInterval=valueFor("BurstInterval",stats.burstInterval??0);const effectiveCycle=effectiveRate===void 0?float32FiringCycle(effectiveInterval,burstRounds,burstRate):void 0;const rate=effectiveRate??(effectiveCycle===void 0?void 0:Math.fround(Math.fround(burstRounds)/effectiveCycle));if(baseRate!==void 0&&rate!==void 0){const stockRounds=Math.fround(stats.roundsPerShot??1);const effectiveRounds=Math.fround(modifiers.find(modifier=>modifier.Label==="Rounds"||modifier.Label==="RoundsPerShot")?.Value??stockRounds);damagePerSecond={Label:"DamagePerSecond",Value:round6(float32DamagePerSecond(effectiveDamage,effectiveRounds,rate,burstRounds,effectiveCycle)),OriginalValue:round6(float32DamagePerSecond(baseDamage,stockRounds,baseRate,baseBurstRounds,baseCycle))};if(burstTouched){derivedRate={Label:"RateOfFire",Value:round6(rate),OriginalValue:round6(baseRate)}}}}}const result=[];for(const modifier of modifiers){const label=modifier.Label;if(weapon&&["BurstInterval","BurstSize","BurstRateOfFire"].includes(label))continue;if(weapon&&label==="Damage"&&stats.rateOfFire===void 0)continue;let journalLabel=label;if(label==="Range"&&stats.maximumRange!==void 0)journalLabel="MaximumRange";else if(label==="FalloffRange"&&stats.falloffRange!==void 0){journalLabel="DamageFalloffRange"}else if(label==="ScannerRange"&&stats.scannerRange!==void 0){journalLabel="Range"}else if(label==="ProbeRadius")journalLabel="DSS_PatchRadius";else if(label==="RefuelRate")journalLabel="FuelScoopRate";else if(label==="DistributorDraw"&&stats.shieldRegenRate!==void 0){journalLabel="EnergyPerRegen"}result.push(journalLabel===label?modifier:{...modifier,Label:journalLabel})}if(damagePerSecond)result.push(damagePerSecond);if(derivedRate){const direct=result.findIndex(modifier=>modifier.Label==="RateOfFire");if(direct>=0)result[direct]=derivedRate;else result.push(derivedRate)}return sortJournalModifiers(result)}function isFinalGuardianWeaponEngineering(item,blueprint){const group=getEngineeringGroup(item);if(group===null||!GUARDIAN_WEAPON_GROUPS.has(group))return false;const resolved=resolveBlueprintForModule(item,blueprint);return getBlueprint(resolved)!==null&&!blueprintAvailableFor(item,blueprint)}function engineerableBase(item,statsOverride){const stats=statsOverride??builtInModuleBySymbol(item,FITTED_ITEM);if(!stats||stats.engineeringLocked)return null;return{stats:stats,base:baseStats(stats)}}function availableBlueprintsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;const available=[];for(const[blueprintSymbol,route]of blueprintRoutesFor(item)){const blueprint=BLUEPRINTS[blueprintSymbol];if(!blueprint)continue;const grades=Object.entries(blueprint.grades).filter(([,grade])=>missingBaseLabels(stats,base,grade.features).length===0).map(([grade])=>Number(grade)).filter(Number.isFinite).sort((a,b)=>a-b);if(grades.length>0)available.push({blueprintSymbol:blueprintSymbol,grades:grades,route:route})}return available}function availableExperimentalsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;return getExperimentalsForModule(item).filter(experimentalEffectSymbol=>{const effect=EXPERIMENTAL_EFFECTS[experimentalEffectSymbol];return effect!==void 0&&missingBaseLabels(stats,base,effect.modifiers).length===0})}var MAX_ENGINEERING_GRADE=5;function modifiersWithExperimental(variant,experimental){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);const effectName=experimental===void 0?variant.experimentalEffectSymbol:experimental;if(!module||!variant.modifiers?.length&&effectName==null)return null;const effect=effectName==null?void 0:getExperimentalEffect(effectName);if(effectName!==null&&effectName!==void 0&&!effect)return null;return computeModifiers(baseStats(module),fixedModifierFeatures(variant.modifiers??[]),1,effect??void 0)}function getPreEngineeredModifiers(variant){return modifiersWithExperimental(variant)??[]}function journalModifiersWithExperimental(variant,experimental){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);if(!module)return[];const modifiers=journalModifiersFor(module,modifiersWithExperimental(variant,experimental)??[]);const effectName=experimental===void 0?variant.experimentalEffectSymbol:experimental;const damageDistribution=effectName?getExperimentalEffect(effectName)?.damageDistribution:void 0;if(!damageDistribution)return modifiers;for(const type of["kinetic","thermal","explosive","absolute"]){const value=damageDistribution[type];const label=labelsForDamageType(type)[0];if(value===void 0||label===void 0)continue;modifiers.push({Label:label,Value:value*scaleForLabel(label),OriginalValue:(module.damageDistribution?.[type]??0)*scaleForLabel(label)})}return modifiers}function getPreEngineeredJournalModifiers(variant){return journalModifiersWithExperimental(variant)}function sameJournalNumber(actual,expected){return Math.abs(actual-expected)<=Math.max(1e-5,Math.abs(expected)*1e-6)}function modifierKey(modifier,module){return fieldForLabel(modifier.Label,module)??`label:${normalizeKey(modifier.Label,"identifyPreEngineeredVariant: module.Engineering.Modifiers[].Label")}`}function sameModifier(actual,expected){if(expected.Value!==void 0){return actual.Value!==void 0&&sameJournalNumber(actual.Value,expected.Value)}return expected.ValueStr!==void 0&&actual.ValueStr!==void 0}function matchesModifierSignature(actualByKey,expected,module){let matched=0;for(const predicted of expected){const actual=actualByKey.get(modifierKey(predicted,module));if(!actual)continue;if(!sameModifier(actual,predicted))return false;matched++}return matched>=Math.max(1,expected.length-1)}function identifyPreEngineeredVariant(module){const engineering=module.Engineering;if(!engineering)return null;requireStringIfPresent(module.Item,"identifyPreEngineeredVariant: module.Item");const stock=getModuleBySymbol(module.Item,ALL_MODULES);if(!stock)return null;const capturedBlueprint=normalizeKey(engineering.BlueprintName,"identifyPreEngineeredVariant: module.Engineering.BlueprintName");const variants=getPreEngineeredVariants(module.Item);const blueprintMatches=variants.filter(candidate=>candidate.blueprintSymbol.toLowerCase()===capturedBlueprint);const blueprintMatch=blueprintMatches.length===1?blueprintMatches[0]:null;const capturedGrade=engineering.Level;if(blueprintMatch?.acquisition==="mercenary"&&Number.isInteger(capturedGrade)&&capturedGrade>=blueprintMatch.grade&&capturedGrade<=MAX_ENGINEERING_GRADE){return blueprintMatch}if(engineering.Modifiers===void 0){const capturedExperimental=normalizeKey(engineering.ExperimentalEffect,"identifyPreEngineeredVariant: module.Engineering.ExperimentalEffect");const identityMatches=blueprintMatches.filter(candidate=>candidate.engineeringLocked===true&&candidate.grade===capturedGrade&&(candidate.experimentalEffectSymbol===void 0?capturedExperimental===void 0&&engineering.ExperimentalEffect_Localised===void 0:candidate.experimentalEffectSymbol.toLowerCase()===capturedExperimental));return identityMatches.length===1?identityMatches[0]:null}if(!engineering.Modifiers?.length)return null;const actualByKey=/* @__PURE__ */new Map;for(const modifier of engineering.Modifiers){actualByKey.set(modifierKey(modifier,stock),modifier)}requireStringIfPresent(engineering.ExperimentalEffect,"identifyPreEngineeredVariant: module.Engineering.ExperimentalEffect");const matches=[];for(const candidate of variants){if(!candidate.modifiers?.length)continue;if(candidate.grade!==engineering.Level)continue;if(candidate.acquisition==="eventReward"&&(engineering.ExperimentalEffect!==void 0||engineering.ExperimentalEffect_Localised!==void 0||capturedBlueprint!==candidate.blueprintSymbol.toLowerCase())){continue}const primitive=modifiersWithExperimental(candidate,engineering.ExperimentalEffect??null);if(!primitive?.length)continue;const matched=matchesModifierSignature(actualByKey,primitive,stock)||matchesModifierSignature(actualByKey,journalModifiersWithExperimental(candidate,engineering.ExperimentalEffect??null),stock);if(matched)matches.push(candidate)}return matches.length===1?matches[0]:null}function unresolvedModifiers(variant){const resolved=new Set(getPreEngineeredModifiers(variant).map(modifier=>modifier.Label));return(variant.modifiers??[]).map(modifier=>modifier.label).filter(label=>!resolved.has(label))}function getPreEngineeredStats(variant){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);if(!module)return null;if(!variant.modifiers?.length&&!variant.engineeringLocked&&variant.experimentalEffectSymbol===void 0)return{...module};const modifiers=variant.modifiers??[];const resolved={...module,...variant.engineeringLocked?{engineeringLocked:true}:{}};for(const{Label:Label,Value:Value,ValueStr:ValueStr}of getPreEngineeredModifiers(variant)){const field=fieldForLabel(Label,module);if(field&&field!=="damageDistribution"&&Value!==void 0){Object.assign(resolved,{[field]:Value/scaleForLabel(Label)})}else if(field&&ValueStr!==void 0&&capabilityValueForLabel(Label)!==null){Object.assign(resolved,{[field]:true})}}const experimentalDamageDistribution=variant.experimentalEffectSymbol?getExperimentalEffect(variant.experimentalEffectSymbol)?.damageDistribution:void 0;if(experimentalDamageDistribution){resolved.damageDistribution={...experimentalDamageDistribution};delete resolved.damageComponents}if(resolved.rateOfFire!==void 0&&!modifiers.some(m=>m.label==="RateOfFire")&&modifiers.some(m=>m.label==="BurstSize"||m.label==="BurstRateOfFire"||m.label==="BurstInterval")){const rate=combinedRateOfFire(resolved);if(rate!==void 0)resolved.rateOfFire=rate}if(module.damageComponents&&!experimentalDamageDistribution){resolved.damageComponents=scaleDamageComponents(module.damageComponents,module.damage,resolved.damage)}return resolved}export{FITTED_ITEM,availableBlueprintsFor,availableExperimentalsFor,blueprintAvailableFor,blueprintRoutesFor,cloneLoadoutModule,cloneModuleStats,experimentalAvailableFor,getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,isBuiltInHullModule,isCargoHatchSlot,isFinalGuardianWeaponEngineering,isNonOutfittingSlot,journalModifiersFor,matchingKeyIn,missingBaseLabels,orderBySlotLayout,ordinaryEngineeringProof,ownKeyIn,primitiveEngineeringInputsFor,scaleDamageComponents,unresolvedModifiers,unrollableFixedArticle};//# sourceMappingURL=chunk-JET673E5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ships/internal/damage-components.ts","../src/ships/internal/fixed-modifier-features.ts","../src/ships/internal/loadout-state.ts","../src/ships/internal/loadout-engineering.ts","../src/ships/pre-engineered-stats.ts"],"names":["combinedRateOfFire","getPreEngineeredVariants","builtInModuleBySymbol","getModuleBySymbol","ALL_MODULES","EXPERIMENTAL_EFFECTS","getExperimentalEffect","fieldForLabel","baseStats","computeModifiers","labelsForDamageType","scaleForLabel","preciseModifierValue","capabilityValueForLabel","resolveBlueprintForModule","getBlueprintsForModule","getExperimentalsForModule","getEngineeringGroup","getBlueprintGrade","getBlueprint","BLUEPRINTS","normalizeKey","requireStringIfPresent","deepFreeze","scaleDamageComponents","components","baseDamage","effectiveDamage","scale","kinetic","thermal","explosive","absolute","antiXeno","unclassified","map","value","fixedModifierFeatures","modifiers","modifier","label","method","min","max","FITTED_ITEM","isNonOutfittingSlot","slotKey","test","isCargoHatchSlot","toLowerCase","isBuiltInHullModule","module","Slot","Item","startsWith","cloneLoadoutModule","On","Priority","Health","Value","Engineering","BlueprintName","Level","Quality","ExperimentalEffect","ExperimentalEffect_Localised","Modifiers","matchingKeyIn","keyed","has","wanted","key","keys","ownKeyIn","canonicalKey","size","every","orderBySlotLayout","values","layout","slotOf","order","Map","slot","index","sort","left","right","get","Number","MAX_SAFE_INTEGER","cloneModuleStats","structuredClone","error","Error","name","restrictedToShips","limitIncrease","damageDistribution","damageComponents","projectileRange","GUARDIAN_WEAPON_GROUPS","Set","missingBaseLabels","stats","base","features","experimental","contributions","contribution","filter","recipeSignature","blueprintSymbol","blueprint","grades","Object","entries","grade","feature","join","isGenericSpelling","isSoldWithBlueprint","item","some","variant","acquisition","blueprintRoutesFor","routes","set","blueprintAvailableFor","offered","asWritten","resolved","trim","id","signature","experimentalAvailableFor","experimentalEffectSymbol","primitiveLabelFor","maximumRange","falloffRange","scannerRange","shieldRegenRate","primitiveEngineeringInputsFor","canonicalGrade","matchesCalculatedModifiers","captured","calculated","length","byLabel","Label","expected","actual","Math","abs","ValueStr","unrollableFixedArticle","engineering","matches","candidate","ordinaryEngineeringProof","recipe","fixedCandidate","quality","stock","isFinite","current","journalModifiersFor","type","push","OriginalValue","round6","rounded","round","is","float32FiringCycle","interval","burstRounds","burstRateOfFire","withinBurst","fround","cycle","float32RateOfFire","float32DamagePerSecond","damage","rounds","rate","damagePerCycle","JOURNAL_MODIFIER_ORDER","JOURNAL_MODIFIER_RANK","sortJournalModifiers","a","b","weapon","valueFor","fallback","find","burstTouched","damageTouched","rateTouched","damagePerSecond","derivedRate","continuous","burstInterval","rateOfFire","burstRate","baseBurstRounds","baseBurstRate","baseInterval","baseCycle","baseRate","rateModifier","effectiveRate","effectiveInterval","effectiveCycle","stockRounds","roundsPerShot","effectiveRounds","result","includes","journalLabel","direct","findIndex","isFinalGuardianWeaponEngineering","group","engineerableBase","statsOverride","engineeringLocked","availableBlueprintsFor","engineerable","available","route","availableExperimentalsFor","effect","MAX_ENGINEERING_GRADE","modifiersWithExperimental","symbol","effectName","getPreEngineeredModifiers","journalModifiersWithExperimental","getPreEngineeredJournalModifiers","sameJournalNumber","modifierKey","sameModifier","matchesModifierSignature","actualByKey","matched","predicted","identifyPreEngineeredVariant","capturedBlueprint","variants","blueprintMatches","blueprintMatch","capturedGrade","isInteger","capturedExperimental","identityMatches","primitive","unresolvedModifiers","getPreEngineeredStats","field","assign","experimentalDamageDistribution","m"],"mappings":"O,g0BAWO,SAASwB,sBACZC,WACAC,WACAC,iBAEA,MAAMC,MACFF,kBAAe,GAAaA,aAAe,GAAKC,uBAAoB,EAC9DA,gBAAkBD,WAClB,EACV,MAAO,IACCD,WAAWI,eAAY,EAAY,CAAA,EAAK,CAAEA,QAASJ,WAAWI,QAAUD,UACxEH,WAAWK,eAAY,EAAY,CAAA,EAAK,CAAEA,QAASL,WAAWK,QAAUF,UACxEH,WAAWM,iBAAc,EAAY,CAAA,EAAK,CAAEA,UAAWN,WAAWM,UAAYH,UAC9EH,WAAWO,gBAAa,EAAY,CAAA,EAAK,CAAEA,SAAUP,WAAWO,SAAWJ,UAC3EH,WAAWQ,gBAAa,EAAY,CAAA,EAAK,CAAEA,SAAUR,WAAWQ,SAAWL,UAC3EH,WAAWS,oBAAiB,EAC1B,CAAA,EACA,CAAEA,aAAcT,WAAWS,aAAaC,IAAKC,OAAUA,MAAQR,QAE7E,CCdO,SAASS,sBACZC,WAEA,OAAOA,UAAUH,IAAKI,WAAA,CAClBC,MAAOD,SAASC,MAChBC,OAAQF,SAASE,OACjBC,IAAKH,SAASH,MACdO,IAAKJ,SAASH,QAEtB,CCZO,IAAMQ,YAAc,kCAGpB,SAASC,oBAAoBC,SAChC,MAAO,kIAAkIC,KACrID,QAER,CAGO,SAASE,iBAAiBF,SAC7B,OAAOA,QAAQG,gBAAkB,YACrC,CAGO,SAASC,oBAAoBC,QAChC,OACIH,iBAAiBG,OAAOC,OAASD,OAAOE,KAAKJ,cAAcK,WAAW,sBAE9E,CAGO,SAASC,mBAAmBJ,QAC/B,MAAO,CACHC,KAAMD,OAAOC,KACbC,KAAMF,OAAOE,QACTF,OAAOK,UAAO,EAAY,CAAA,EAAK,CAAEA,GAAIL,OAAOK,OAC5CL,OAAOM,gBAAa,EAAY,CAAA,EAAK,CAAEA,SAAUN,OAAOM,aACxDN,OAAOO,cAAW,EAAY,CAAA,EAAK,CAAEA,OAAQP,OAAOO,WACpDP,OAAOQ,aAAU,EAAY,CAAA,EAAK,CAAEA,MAAOR,OAAOQ,UAClDR,OAAOS,mBAAgB,EACrB,CAAA,EACA,CACIA,YAAa,CACTC,cAAeV,OAAOS,YAAYC,cAClCC,MAAOX,OAAOS,YAAYE,MAC1BC,QAASZ,OAAOS,YAAYG,WACxBZ,OAAOS,YAAYI,0BAAuB,EACxC,CAAA,EACA,CAAEA,mBAAoBb,OAAOS,YAAYI,uBAC3Cb,OAAOS,YAAYK,oCAAiC,EAClD,CAAA,EACA,CACIA,6BACId,OAAOS,YAAYK,iCAE7Bd,OAAOS,YAAYM,iBAAc,EAC/B,CAAA,EACA,CACIA,UAAWf,OAAOS,YAAYM,UAAU/B,IAAKI,WAAA,IACtCA,eAMvC,CAaO,SAAS4B,cAAcC,MAAqCtB,SAC/D,GAAIsB,MAAMC,IAAIvB,SAAU,OAAOA,QAC/B,MAAMwB,OAASxB,QAAQG,cACvB,IAAA,MAAWsB,OAAOH,MAAMI,OAAQ,CAC5B,GAAID,IAAItB,gBAAkBqB,OAAQ,OAAOC,GAC7C,CACA,OAAO,IACX,CAGO,SAASE,SAASL,MAAqCM,cAC1D,OACIP,cAAcC,MAAOM,gBACpBN,MAAMO,KAAO,GAAK,IAAIP,MAAMI,QAAQI,MAAOL,KAAQA,MAAQA,IAAItB,eAC1DyB,aAAazB,cACbyB,aAEd,CAGO,SAASG,kBACZC,OACAC,OACAC,QAEA,MAAMC,MAAQ,IAAIC,IAAIH,OAAO5C,IAAI,CAACgD,KAAMC,QAAU,CAACD,KAAKZ,IAAItB,cAAemC,SAC3E,MAAO,IAAIN,QAAQO,KACf,CAACC,KAAMC,SACFN,MAAMO,IAAIR,OAAOM,MAAMrC,gBAAkBwC,OAAOC,mBAChDT,MAAMO,IAAIR,OAAOO,OAAOtC,gBAAkBwC,OAAOC,kBAE9D,CAGO,SAASC,iBAAiBxC,QAC7B,IACI,OAAO5B,WAAWqE,gBAAgBzC,QACtC,CAAA,MAAS0C,OACL,KAAMA,iBAAiBC,OAASD,MAAME,OAAS,kBAAmB,MAAMF,MACxE,OAAOtE,WAAW,IACX4B,UACCA,OAAO6C,yBAAsB,EAC3B,CAAA,EACA,CAAEA,kBAAmB,IAAI7C,OAAO6C,uBAClC7C,OAAO8C,qBAAkB,EACvB,CAAA,EACA,CAAEA,cAAe,IAAK9C,OAAO8C,mBAC/B9C,OAAO+C,0BAAuB,EAC5B,CAAA,EACA,CAAEA,mBAAoB,IAAK/C,OAAO+C,wBACpC/C,OAAOgD,wBAAqB,EAC1B,CAAA,EACA,CACIA,iBAAkB,IACXhD,OAAOgD,oBACNhD,OAAOgD,iBAAiBjE,oBAAiB,EACvC,CAAA,EACA,CAAEA,aAAc,IAAIiB,OAAOgD,iBAAiBjE,oBAG5DiB,OAAOiD,uBAAoB,EACzB,CAAA,EACA,CAAEA,gBAAiB,IAAKjD,OAAOiD,mBAE7C,CACJ,CCpHA,IAAMC,sCAAA,IAAkDC,IAAI,CACxD,gBACA,iBACA,kBAeG,SAASC,kBACZC,MACAC,KACAC,SACAC,cAEA,MAAMC,cAAgB,IAAIF,YAAcC,cAAgB,IACxD,MAAO,IACA,IAAIL,IACHM,cACKzE,IAAK0E,cAAiBA,aAAarE,OACnCsE,OAAQtE,QACL,GAAIiE,KAAKjE,cAAW,EAAW,OAAO,MACtC,OAAOjC,cAAciC,MAAOgE,SAAW,QAI3D,CAeA,SAASO,gBAAgBC,iBACrB,MAAMC,UAAY9F,aAAa6F,iBAC/B,IAAKC,UAAW,OAAO,KACvB,MAAMC,OAASC,OAAOC,QAAQH,UAAUC,QACnC/E,IACG,EAAEkF,OAASX,sBACP,GAAGW,SAASX,SACPvE,IAAKmF,SAAY,GAAGA,QAAQ9E,SAAS8E,QAAQ7E,QAAU,MACvD4C,OACAkC,KAAK,QAEjBlC,OACAkC,KAAK,KACV,MAAO,GAAGN,UAAUlB,KAAK9C,iBAAiBiE,QAC9C,CAGA,IAAMM,kBAAqBR,iBACvBA,gBAAgB/D,cAAcK,WAAW,SA2B7C,SAASmE,oBAAoBC,KAAcpD,QACvC,OAAOrE,yBAAyByH,MAAMC,KACjCC,SACGA,QAAQC,cAAgB,aAAeD,QAAQZ,gBAAgB/D,gBAAkBqB,OAE7F,CASO,SAASwD,mBAAmBJ,MAC/B,MAAMK,sBAAA,IAAa7C,IACnB,IAAA,MAAW8B,mBAAmBjG,uBAAuB2G,MACjDK,OAAOC,IAAIhB,gBAAiB,YAChC,IAAA,MAAWY,WAAW3H,yBAAyByH,MAAO,CAClD,GAAIE,QAAQC,cAAgB,cAAgBE,OAAO1D,IAAIuD,QAAQZ,iBAAkB,CAC7Ee,OAAOC,IAAIJ,QAAQZ,gBAAiB,YACxC,CACJ,CACA,OAAOe,MACX,CA+DO,SAASE,sBAAsBP,KAAcV,iBAChD,MAAMkB,QAAUnH,uBAAuB2G,MACvC,MAAMS,UAAY9G,aAAa2F,gBAAiB,+CAChD,MAAMoB,SAAWtH,0BAA0B4G,KAAMV,iBAAiBqB,OAClE,MAAM/D,OAAS8D,SAASnF,cACxB,GAAIiF,QAAQP,KAAMW,IAAOA,GAAGrF,gBAAkBqB,QAAS,OAAO,KAE9D,GAAImD,oBAAoBC,KAAMpD,SAAWmD,oBAAoBC,KAAMS,WAAY,OAAO,KACtF,IAAKX,kBAAkBlD,QAAS,OAAO,MACvC,MAAMiE,UAAYxB,gBAAgBqB,UAClC,GAAIG,YAAc,KAAM,OAAO,MAE/B,OAAOL,QAAQP,KAAMW,IAAOvB,gBAAgBuB,MAAQC,YAAcf,kBAAkBc,IACxF,CAaO,SAASE,yBAAyBd,KAAce,0BACnD,MAAMnE,OAASjD,aACXoH,yBACA,gEAEJ,OAAOzH,0BAA0B0G,MAAMC,KAAMW,IAAOA,GAAGrF,gBAAkBqB,OAC7E,CAGA,SAASoE,kBAAkBlC,MAAyBhE,OAChD,GAAIA,QAAU,gBAAkBgE,MAAMmC,oBAAiB,EAAW,MAAO,QACzE,GAAInG,QAAU,sBAAwBgE,MAAMoC,oBAAiB,EAAW,CACpE,MAAO,cACX,CACA,GAAIpG,QAAU,SAAWgE,MAAMqC,oBAAiB,EAAW,MAAO,eAClE,GAAIrG,QAAU,kBAAmB,MAAO,cACxC,GAAIA,QAAU,gBAAiB,MAAO,aACtC,GAAIA,QAAU,kBAAoBgE,MAAMsC,uBAAoB,EAAW,CACnE,MAAO,iBACX,CACA,OAAOtG,KACX,CAYO,SAASuG,8BACZvC,MACAa,MACAV,cAEA,MAAMqC,eAAiB,IAChB3B,MACHX,SAAUW,MAAMX,SAASvE,IAAKmF,UAC1B,MAAM9E,MAAQkG,kBAAkBlC,MAAOc,QAAQ9E,OAC/C,OAAOA,QAAU8E,QAAQ9E,MAAQ8E,QAAU,IAAKA,QAAS9E,gBAGjE,IAAKmE,aAAc,MAAO,CAAEU,MAAO2B,gBACnC,MAAO,CACH3B,MAAO2B,eACPrC,aAAc,IACPA,aACHrE,UAAWqE,aAAarE,UAAUH,IAAKI,WACnC,MAAMC,MAAQkG,kBAAkBlC,MAAOjE,SAASC,OAChD,OAAOA,QAAUD,SAASC,MAAQD,SAAW,IAAKA,SAAUC,gBAI5E,CAGA,SAASyG,2BACLC,SACAC,YAEA,IAAKD,UAAYA,SAASE,SAAWD,WAAWC,OAAQ,OAAO,MAC/D,MAAMC,QAAU,IAAInE,IAChBgE,SAAS/G,IAAKI,UAAa,CAACA,SAAS+G,MAAMjB,OAAOpF,cAAeV,YAErE,GAAI8G,QAAQ1E,OAASuE,SAASE,OAAQ,OAAO,MAC7C,OAAOD,WAAWvE,MAAO2E,WACrB,MAAMC,OAASH,QAAQ7D,IAAI+D,SAASD,MAAMjB,OAAOpF,eACjD,IAAKuG,OAAQ,OAAO,MACpB,GAAID,SAAS5F,aAAU,EAAW,CAC9B,OACI6F,OAAO7F,aAAU,GACjB8F,KAAKC,IAAIF,OAAO7F,MAAQ4F,SAAS5F,QAC7B,KAAO8F,KAAK9G,IAAI,EAAG8G,KAAKC,IAAIH,SAAS5F,OAEjD,CACA,OAAO6F,OAAOG,WAAaJ,SAASI,UAE5C,CAYO,SAASC,uBACZlC,KACAmC,aAEA,GAAIA,YAAY3F,iBAAc,UAAoB2F,YAAYhG,gBAAkB,SAAU,CACtF,OAAO,IACX,CACA,MAAMS,OAASuF,YAAYhG,cAAcwE,OAAOpF,cAChD,MAAM0D,aAAekD,YAAY7F,oBAAoBqE,OAAOpF,cAC5D,MAAM6G,QAAU7J,yBAAyByH,MAAMZ,OAC1CiD,WACGA,UAAU/C,gBAAgBqB,OAAOpF,gBAAkBqB,QACnDyF,UAAU1C,QAAUwC,YAAY/F,QAC/BiG,UAAUtB,gCAA6B,EAClC9B,oBAAiB,GACjBkD,YAAY5F,oCAAiC,EAC7C8F,UAAUtB,yBAAyBJ,OAAOpF,gBAAkB0D,gBACjEsB,sBAAsBP,KAAMqC,UAAU/C,kBAE/C,OAAO8C,QAAQV,SAAW,EAAIU,QAAQ,GAAM,IAChD,CAYO,SAASE,yBACZtC,KACAmC,YACAlD,cAEA,MAAMsD,OAASnJ,0BAA0B4G,KAAMmC,YAAYhG,eAC3D,MAAMqG,eAAiBjK,yBAAyByH,MAAMC,KACjDoC,WACGA,UAAUlC,cAAgB,aAC1BkC,UAAU/C,gBAAgBqB,OAAOpF,gBAAkBgH,OAAO5B,OAAOpF,eAEzE,IAAKiH,eAAgB,MAAO,oBAE5B,MAAM7C,MAAQnG,kBAAkB+I,OAAQJ,YAAY/F,OACpD,MAAMqG,QAAUN,YAAY9F,QAC5B,MAAMqG,MAAQlK,sBAAsBwH,KAAM9E,aAC1C,IACKwH,QACA/C,OACDV,eAAiB,OAChBlB,OAAO4E,SAASF,UACjBA,QAAU,GACVA,QAAU,EACZ,CACE,MAAO,UACX,CAEA,MAAMG,QAAUvB,8BAA8BqB,MAAO/C,MAAOV,cAC5D,GACIJ,kBACI6D,MACA5J,UAAU4J,OACVE,QAAQjD,MAAMX,SACd4D,QAAQ3D,cAAcrE,WACxB8G,OAAS,EACb,CACE,MAAO,UACX,CAEA,MAAMD,WAAaoB,oBACfH,MACA3J,iBAAiBD,UAAU4J,OAAQE,QAAQjD,MAAO8C,QAASG,QAAQ3D,eAEvE,MAAMT,mBACFoE,QAAQ3D,cAAcT,oBAAsBoE,QAAQjD,MAAMnB,mBAC9D,GAAIA,mBAAoB,CACpB,IAAA,MAAWsE,OAAQ,CAAC,UAAW,UAAW,YAAa,YAAsB,CACzE,MAAMpI,MAAQ8D,mBAAmBsE,MACjC,GAAIpI,aAAU,EAAW,SACzB,MAAMI,MAAQ9B,oBAAoB8J,MAAM,GACxC,GAAIhI,aAAU,EAAW,SACzB2G,WAAWsB,KAAK,CACZnB,MAAO9G,MACPmB,MAAOvB,MAAQzB,cAAc6B,OAC7BkI,eAAgBN,MAAMlE,qBAAqBsE,OAAS,GAAK7J,cAAc6B,QAE/E,CACJ,CACA,OAAOyG,2BAA2BY,YAAY3F,UAAWiF,YAAc,SAAW,UACtF,CAGA,IAAMwB,OAAUvI,QACZ,MAAMwI,QAAUnB,KAAKoB,MAAMzI,MAAQ,KAAO,IAC1C,OAAO+E,OAAO2D,GAAGF,SAAS,GAAM,EAAIA,SAIxC,SAASG,mBACLC,SACAC,YACAC,iBAEA,GAAIF,UAAY,EAAG,YAAO,EAC1B,MAAMG,YACFF,YAAc,EACRxB,KAAK2B,OAAO3B,KAAK2B,OAAOH,YAAc,GAAKxB,KAAK2B,OAAOF,kBACvD,EACV,MAAMG,MAAQ5B,KAAK2B,OAAOD,YAAc1B,KAAK2B,OAAOJ,WACpD,OAAOK,MAAQ,EAAIA,WAAQ,CAC/B,CAGA,SAASC,kBACLN,SACAC,YACAC,iBAEA,MAAMG,MAAQN,mBAAmBC,SAAUC,YAAaC,iBACxD,OAAOG,aAAU,OAAY,EAAY5B,KAAK2B,OAAO3B,KAAK2B,OAAOH,aAAeI,MACpF,CAGA,SAASE,uBACLC,OACAC,OACAC,KACAT,YACAI,OAEA,GAAIA,aAAU,IAAcI,SAAW,GAAKR,cAAgB,GAAI,CAC5D,MAAMU,eAAiBlC,KAAK2B,OACxB3B,KAAK2B,OAAO3B,KAAK2B,OAAOI,QAAU/B,KAAK2B,OAAOK,SAAWhC,KAAK2B,OAAOH,cAEzE,OAAOxB,KAAK2B,OAAOO,eAAiBN,MACxC,CACA,OAAO5B,KAAK2B,OAAO3B,KAAK2B,OAAO3B,KAAK2B,OAAOI,QAAU/B,KAAK2B,OAAOK,SAAWhC,KAAK2B,OAAOM,MAC5F,CAEA,IAAME,uBAAyB,CAC3B,gBACA,2BACA,OACA,YACA,YACA,WACA,gBACA,iBACA,iBACA,iBACA,cACA,oBACA,uBACA,iBACA,uBACA,oBACA,kBACA,SACA,kBACA,cACA,oBACA,eACA,YACA,aACA,aACA,YACA,YACA,cACA,aACA,eACA,cACA,aACA,SACA,qBACA,kCACA,kCACA,gCACA,gCACA,YACA,kBACA,iBACA,oBACA,oBACA,sBACA,oBACA,mBACA,0BACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,qBACA,0BACA,iBACA,sBACA,4BACA,wBACA,WACA,oBACA,QACA,kBACA,gBACA,gBAGJ,IAAMC,sBAAqD,IAAI3G,IAC3D0G,uBAAuBzJ,IAAI,CAACK,MAAO4C,QAAU,CAAC5C,MAAO4C,SAIzD,SAAS0G,qBAAqBxJ,WAC1B,OAAOA,UACFH,IAAI,CAACI,SAAU6C,SAAA,CAAa7C,kBAAU6C,eACtCC,KACG,CAAC0G,EAAGC,KACCH,sBAAsBrG,IAAIuG,EAAExJ,SAAS+G,QAAUsC,uBAAuBxC,SAClEyC,sBAAsBrG,IAAIwG,EAAEzJ,SAAS+G,QAClCsC,uBAAuBxC,SAAW2C,EAAE3G,MAAQ4G,EAAE5G,OAE7DjD,IAAI,EAAGI,qBAAeA,SAC/B,CAeO,SAASgI,oBACZ/D,MACAlE,WAEA,MAAM2J,OAASzF,MAAMgF,cAAW,EAChC,MAAMU,SAAW,CAAC1J,MAAe2J,YAC7B,MAAM5J,SAAWD,UAAU8J,KAAMrC,WAAcA,UAAUT,QAAU9G,OACnE,OAAQD,UAAY3B,qBAAqB2B,YAAckH,KAAK2B,OAAOe,WAEvE,MAAME,aAAe,CAAC,gBAAiB,YAAa,mBAAmB1E,KAAMnF,OACzEF,UAAUqF,KAAMpF,UAAaA,SAAS+G,QAAU9G,QAEpD,MAAM8J,cAAgBhK,UAAUqF,KAAMpF,UAAaA,SAAS+G,QAAU,UACtE,MAAMiD,YACFF,cAAgB/J,UAAUqF,KAAMpF,UAAaA,SAAS+G,QAAU,cAEpE,IAAIkD,gBACJ,IAAIC,YACJ,GAAIR,SAAWK,eAAiBC,aAAc,CAC1C,MAAMG,WAAalG,MAAMmG,qBAAkB,GAAanG,MAAMoG,kBAAe,EAC7E,MAAMlL,WAAa+H,KAAK2B,OAAO5E,MAAMgF,QACrC,MAAM7J,gBAAkBuK,SAAS,SAAU1F,MAAMgF,QACjD,GAAIkB,WAAY,CACZF,gBAAkB,CACdlD,MAAO,kBACP3F,MAAOgH,OAAOhJ,iBACd+I,cAAeC,OAAOjJ,YAE9B,KAAO,CACH,MAAMuJ,YAAciB,SAAS,YAAa1F,MAAMyE,aAAe,GAC/D,MAAM4B,UAAYX,SAAS,kBAAmB1F,MAAM0E,iBAAmB,GACvE,MAAM4B,gBAAkBrD,KAAK2B,OAAO5E,MAAMyE,aAAe,GACzD,MAAM8B,cAAgBtD,KAAK2B,OAAO5E,MAAM0E,iBAAmB,GAC3D,MAAM8B,aACFxG,MAAMmG,qBAAkB,OAAY,EAAYlD,KAAK2B,OAAO5E,MAAMmG,eACtE,MAAMM,UACFD,oBAAiB,OACX,EACAjC,mBAAmBiC,aAAcF,gBAAiBC,eAC5D,MAAMG,SACFF,oBAAiB,EACX1B,kBAAkB0B,aAAcF,gBAAiBC,eACjDvG,MAAMoG,kBAAe,OACnB,EACAnD,KAAK2B,OAAO5E,MAAMoG,YAC9B,MAAMO,aAAe7K,UAAU8J,KAAM7J,UAAaA,SAAS+G,QAAU,cACrE,MAAM8D,cAAgBD,cAAgBvM,qBAAqBuM,cAC3D,MAAME,kBAAoBnB,SAAS,gBAAiB1F,MAAMmG,eAAiB,GAC3E,MAAMW,eACFF,qBAAkB,EACZrC,mBAAmBsC,kBAAmBpC,YAAa4B,gBACnD,EACV,MAAMnB,KACF0B,gBACCE,sBAAmB,OACd,EACA7D,KAAK2B,OAAO3B,KAAK2B,OAAOH,aAAeqC,iBACjD,GAAIJ,gBAAa,GAAaxB,YAAS,EAAW,CAC9C,MAAM6B,YAAc9D,KAAK2B,OAAO5E,MAAMgH,eAAiB,GACvD,MAAMC,gBAAkBhE,KAAK2B,OACzB9I,UAAU8J,KACL7J,UACGA,SAAS+G,QAAU,UAAY/G,SAAS+G,QAAU,kBACvD3F,OAAS4J,aAEhBf,gBAAkB,CACdlD,MAAO,kBACP3F,MAAOgH,OACHY,uBACI5J,gBACA8L,gBACA/B,KACAT,YACAqC,iBAGR5C,cAAeC,OACXY,uBACI7J,WACA6L,YACAL,SACAJ,gBACAG,aAIZ,GAAIZ,aAAc,CACdI,YAAc,CACVnD,MAAO,aACP3F,MAAOgH,OAAOe,MACdhB,cAAeC,OAAOuC,UAE9B,CACJ,CACJ,CACJ,CAEA,MAAMQ,OAAgC,GACtC,IAAA,MAAWnL,YAAYD,UAAW,CAC9B,MAAME,MAAQD,SAAS+G,MACvB,GAAI2C,QAAU,CAAC,gBAAiB,YAAa,mBAAmB0B,SAASnL,OAAQ,SACjF,GAAIyJ,QAAUzJ,QAAU,UAAYgE,MAAMoG,kBAAe,EAAW,SACpE,IAAIgB,aAAepL,MACnB,GAAIA,QAAU,SAAWgE,MAAMmC,oBAAiB,EAAWiF,aAAe,oBAAA,GACjEpL,QAAU,gBAAkBgE,MAAMoC,oBAAiB,EAAW,CACnEgF,aAAe,oBACnB,MAAA,GAAWpL,QAAU,gBAAkBgE,MAAMqC,oBAAiB,EAAW,CACrE+E,aAAe,OACnB,MAAA,GAAWpL,QAAU,cAAeoL,aAAe,uBAAA,GAC1CpL,QAAU,aAAcoL,aAAe,qBAAA,GACvCpL,QAAU,mBAAqBgE,MAAMsC,uBAAoB,EAAW,CACzE8E,aAAe,gBACnB,CACAF,OAAOjD,KAAKmD,eAAiBpL,MAAQD,SAAW,IAAKA,SAAU+G,MAAOsE,cAC1E,CACA,GAAIpB,gBAAiBkB,OAAOjD,KAAK+B,iBACjC,GAAIC,YAAa,CACb,MAAMoB,OAASH,OAAOI,UAAWvL,UAAaA,SAAS+G,QAAU,cACjE,GAAIuE,QAAU,EAAGH,OAAOG,QAAUpB,iBAC7BiB,OAAOjD,KAAKgC,YACrB,CACA,OAAOX,qBAAqB4B,OAChC,CAYO,SAASK,iCAAiCrG,KAAcT,WAC3D,MAAM+G,MAAQ/M,oBAAoByG,MAClC,GAAIsG,QAAU,OAAS3H,uBAAuBhC,IAAI2J,OAAQ,OAAO,MACjE,MAAM5F,SAAWtH,0BAA0B4G,KAAMT,WACjD,OAAO9F,aAAaiH,YAAc,OAASH,sBAAsBP,KAAMT,UAC3E,CAOA,SAASgH,iBACLvG,KACAwG,eAEA,MAAM1H,MAAQ0H,eAAiBhO,sBAAsBwH,KAAM9E,aAC3D,IAAK4D,OAASA,MAAM2H,kBAAmB,OAAO,KAC9C,MAAO,CAAE3H,YAAOC,KAAMjG,UAAUgG,OACpC,CAYO,SAAS4H,uBACZ1G,KACAwG,eAEA,MAAMG,aAAeJ,iBAAiBvG,KAAMwG,eAC5C,IAAKG,aAAc,MAAO,GAC1B,MAAM7H,MAAEA,MAAAC,KAAOA,MAAS4H,aACxB,MAAMC,UAAkC,GACxC,IAAA,MAAYtH,gBAAiBuH,SAAUzG,mBAAmBJ,MAAO,CAC7D,MAAMT,UAAY7F,WAAW4F,iBAC7B,IAAKC,UAAW,SAChB,MAAMC,OAASC,OAAOC,QAAQH,UAAUC,QACnCJ,OAAO,EAAC,CAAGO,SAAWd,kBAAkBC,MAAOC,KAAMY,MAAMX,UAAU0C,SAAW,GAChFjH,IAAI,EAAEkF,SAAW5B,OAAO4B,QACxBP,OAAOrB,OAAO4E,UACdhF,KAAK,CAAC0G,EAAGC,IAAMD,EAAIC,GACxB,GAAI9E,OAAOkC,OAAS,EAAGkF,UAAU7D,KAAK,CAAEzD,gCAAiBE,cAAQqH,aACrE,CACA,OAAOD,SACX,CAGO,SAASE,0BACZ9G,KACAwG,eAEA,MAAMG,aAAeJ,iBAAiBvG,KAAMwG,eAC5C,IAAKG,aAAc,MAAO,GAC1B,MAAM7H,MAAEA,MAAAC,KAAOA,MAAS4H,aACxB,OAAOrN,0BAA0B0G,MAAMZ,OAAQ2B,2BAC3C,MAAMgG,OAASpO,qBAAqBoI,0BACpC,OACIgG,cAAW,GAAalI,kBAAkBC,MAAOC,KAAMgI,OAAOnM,WAAW8G,SAAW,GAGhG,CCntBA,IAAMsF,sBAAwB,EAG9B,SAASC,0BACL/G,QACAjB,cAEA,MAAMxD,OAAShD,kBAAkByH,QAAQgH,OAAQxO,aACjD,MAAMyO,WAAalI,oBAAiB,EAAYiB,QAAQa,yBAA2B9B,aACnF,IAAKxD,SAAYyE,QAAQtF,WAAW8G,QAAUyF,YAAc,KAAO,OAAO,KAC1E,MAAMJ,OAASI,YAAc,UAAO,EAAYvO,sBAAsBuO,YACtE,GAAIA,aAAe,MAAQA,kBAAe,IAAcJ,OAAQ,OAAO,KACvE,OAAOhO,iBACHD,UAAU2C,QACVd,sBAAsBuF,QAAQtF,WAAa,IAC3C,EACAmM,aAAU,EAElB,CA2BO,SAASK,0BAA0BlH,SACtC,OAAO+G,0BAA0B/G,UAAY,EACjD,CAGA,SAASmH,iCACLnH,QACAjB,cAEA,MAAMxD,OAAShD,kBAAkByH,QAAQgH,OAAQxO,aACjD,IAAK+C,OAAQ,MAAO,GACpB,MAAMb,UAAYiI,oBACdpH,OACAwL,0BAA0B/G,QAASjB,eAAiB,IAExD,MAAMkI,WAAalI,oBAAiB,EAAYiB,QAAQa,yBAA2B9B,aACnF,MAAMT,mBAAqB2I,WACrBvO,sBAAsBuO,aAAa3I,wBACnC,EACN,IAAKA,mBAAoB,OAAO5D,UAChC,IAAA,MAAWkI,OAAQ,CAAC,UAAW,UAAW,YAAa,YAAsB,CACzE,MAAMpI,MAAQ8D,mBAAmBsE,MACjC,MAAMhI,MAAQ9B,oBAAoB8J,MAAM,GACxC,GAAIpI,aAAU,GAAaI,aAAU,EAAW,SAChDF,UAAUmI,KAAK,CACXnB,MAAO9G,MACPmB,MAAOvB,MAAQzB,cAAc6B,OAC7BkI,eAAgBvH,OAAO+C,qBAAqBsE,OAAS,GAAK7J,cAAc6B,QAEhF,CACA,OAAOF,SACX,CAyBO,SAAS0M,iCACZpH,SAEA,OAAOmH,iCAAiCnH,QAC5C,CAGA,SAASqH,kBAAkBzF,OAAgBD,UACvC,OAAOE,KAAKC,IAAIF,OAASD,WAAaE,KAAK9G,IAAI,KAAM8G,KAAKC,IAAIH,UAAY,KAC9E,CAGA,SAAS2F,YAAY3M,SAA+BY,QAChD,OACI5C,cAAcgC,SAAS+G,MAAOnG,SAC9B,SAAS9B,aAAakB,SAAS+G,MAAO,uEAE9C,CAGA,SAAS6F,aAAa3F,OAA6BD,UAC/C,GAAIA,SAAS5F,aAAU,EAAW,CAC9B,OAAO6F,OAAO7F,aAAU,GAAasL,kBAAkBzF,OAAO7F,MAAO4F,SAAS5F,MAClF,CAGA,OAAO4F,SAASI,gBAAa,GAAaH,OAAOG,gBAAa,CAClE,CAGA,SAASyF,yBACLC,YACA9F,SACApG,QAEA,IAAImM,QAAU,EACd,IAAA,MAAWC,aAAahG,SAAU,CAC9B,MAAMC,OAAS6F,YAAY7J,IAAI0J,YAAYK,UAAWpM,SACtD,IAAKqG,OAAQ,SACb,IAAK2F,aAAa3F,OAAQ+F,WAAY,OAAO,MAC7CD,SACJ,CACA,OAAOA,SAAW7F,KAAK9G,IAAI,EAAG4G,SAASH,OAAS,EACpD,CAuDO,SAASoG,6BAA6BrM,QACzC,MAAM0G,YAAc1G,OAAOS,YAC3B,IAAKiG,YAAa,OAAO,KAGzBvI,uBAAuB6B,OAAOE,KAAM,6CACpC,MAAM+G,MAAQjK,kBAAkBgD,OAAOE,KAAMjD,aAC7C,IAAKgK,MAAO,OAAO,KAEnB,MAAMqF,kBAAoBpO,aACtBwI,YAAYhG,cACZ,kEAEJ,MAAM6L,SAAWzP,yBAAyBkD,OAAOE,MACjD,MAAMsM,iBAAmBD,SAAS5I,OAC7BiD,WAAcA,UAAU/C,gBAAgB/D,gBAAkBwM,mBAE/D,MAAMG,eAAiBD,iBAAiBvG,SAAW,EAAIuG,iBAAiB,GAAM,KAC9E,MAAME,cAAgBhG,YAAY/F,MAClC,GACI8L,gBAAgB/H,cAAgB,aAChCpC,OAAOqK,UAAUD,gBACjBA,eAAiBD,eAAevI,OAChCwI,eAAiBnB,sBACnB,CACE,OAAOkB,cACX,CACA,GAAI/F,YAAY3F,iBAAc,EAAW,CACrC,MAAM6L,qBAAuB1O,aACzBwI,YAAY7F,mBACZ,uEAEJ,MAAMgM,gBAAkBL,iBAAiB7I,OACpCiD,WACGA,UAAUoE,oBAAsB,MAChCpE,UAAU1C,QAAUwI,gBACnB9F,UAAUtB,gCAA6B,EAClCsH,4BAAyB,GACzBlG,YAAY5F,oCAAiC,EAC7C8F,UAAUtB,yBAAyBxF,gBAAkB8M,uBAEnE,OAAOC,gBAAgB5G,SAAW,EAAI4G,gBAAgB,GAAM,IAChE,CACA,IAAKnG,YAAY3F,WAAWkF,OAAQ,OAAO,KAE3C,MAAMiG,2BAAA,IAAkBnK,IACxB,IAAA,MAAW3C,YAAYsH,YAAY3F,UAAW,CAC1CmL,YAAYrH,IAAIkH,YAAY3M,SAAU6H,OAAQ7H,SAClD,CACAjB,uBACIuI,YAAY7F,mBACZ,uEAEJ,MAAM8F,QAAkC,GACxC,IAAA,MAAWC,aAAa2F,SAAU,CAC9B,IAAK3F,UAAUzH,WAAW8G,OAAQ,SAClC,GAAIW,UAAU1C,QAAUwC,YAAY/F,MAAO,SAK3C,GACIiG,UAAUlC,cAAgB,gBACzBgC,YAAY7F,0BAAuB,GAChC6F,YAAY5F,oCAAiC,GAC7CwL,oBAAsB1F,UAAU/C,gBAAgB/D,eACtD,CACE,QACJ,CACA,MAAMgN,UAAYtB,0BACd5E,UACAF,YAAY7F,oBAAsB,MAEtC,IAAKiM,WAAW7G,OAAQ,SAIxB,MAAMkG,QACFF,yBAAyBC,YAAaY,UAAW7F,QACjDgF,yBACIC,YACAN,iCAAiChF,UAAWF,YAAY7F,oBAAsB,MAC9EoG,OAER,GAAIkF,QAASxF,QAAQW,KAAKV,UAC9B,CACA,OAAOD,QAAQV,SAAW,EAAIU,QAAQ,GAAM,IAChD,CAuBO,SAASoG,oBAAoBtI,SAChC,MAAMQ,SAAW,IAAI9B,IAAIwI,0BAA0BlH,SAASzF,IAAKI,UAAaA,SAAS+G,QACvF,OAAQ1B,QAAQtF,WAAa,IACxBH,IAAKI,UAAaA,SAASC,OAC3BsE,OAAQtE,QAAW4F,SAAS/D,IAAI7B,OACzC,CAqCO,SAAS2N,sBAAsBvI,SAClC,MAAMzE,OAAShD,kBAAkByH,QAAQgH,OAAQxO,aACjD,IAAK+C,OAAQ,OAAO,KACpB,IACKyE,QAAQtF,WAAW8G,SACnBxB,QAAQuG,mBACTvG,QAAQa,gCAA6B,EAKrC,MAAO,IAAKtF,QAChB,MAAMb,UAAYsF,QAAQtF,WAAa,GACvC,MAAM8F,SAA6E,IAC5EjF,UACCyE,QAAQuG,kBAAoB,CAAEA,kBAAmB,MAAS,CAAA,GAElE,IAAA,MAAW7E,MAAEA,MAAA3F,MAAOA,MAAAgG,SAAOA,YAAcmF,0BAA0BlH,SAAU,CACzE,MAAMwI,MAAQ7P,cAAc+I,MAAOnG,QAInC,GAAIiN,OAASA,QAAU,sBAAwBzM,aAAU,EAAW,CAChEwD,OAAOkJ,OAAOjI,SAAU,CAAEgI,CAACA,OAAQzM,MAAQhD,cAAc2I,QAC7D,MAAA,GAAW8G,OAASzG,gBAAa,GAAa9I,wBAAwByI,SAAW,KAAM,CACnFnC,OAAOkJ,OAAOjI,SAAU,CAAEgI,CAACA,OAAQ,MACvC,CACJ,CACA,MAAME,+BAAiC1I,QAAQa,yBACzCnI,sBAAsBsH,QAAQa,2BAA2BvC,wBACzD,EACN,GAAIoK,+BAAgC,CAChClI,SAASlC,mBAAqB,IAAKoK,uCAC5BlI,SAASjC,gBACpB,CAGA,GACIiC,SAASwE,kBAAe,IACvBtK,UAAUqF,KAAM4I,GAAMA,EAAE/N,QAAU,eACnCF,UAAUqF,KACL4I,GACGA,EAAE/N,QAAU,aACZ+N,EAAE/N,QAAU,mBACZ+N,EAAE/N,QAAU,iBAEtB,CACE,MAAMkJ,KAAO1L,mBAAmBoI,UAChC,GAAIsD,YAAS,EAAWtD,SAASwE,WAAalB,IAClD,CACA,GAAIvI,OAAOgD,mBAAqBmK,+BAAgC,CAC5DlI,SAASjC,iBAAmB3E,sBACxB2B,OAAOgD,iBACPhD,OAAOqI,OACPpD,SAASoD,OAEjB,CACA,OAAOpD,QACX,QAAAxF,YAAAwL,uBAAAI,0BAAAvG,sBAAAH,mBAAAvE,mBAAAoC,iBAAA6C,yBAAAwG,iCAAAF,0BAAAqB,sBAAAX,6BAAAtM,oBAAAF,iBAAA+K,iCAAAlL,oBAAA0H,oBAAApG,cAAAoC,kBAAA1B,kBAAAmF,yBAAAvF,SAAAsE,8BAAAvH,sBAAA0O,oBAAAtG"}
@@ -1 +0,0 @@
1
- import{filterByKey}from"./chunk-BKWLI44T.js";import{requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var pre_engineered_default=[{symbol:"Hpt_Mining_AbrBlstr_Fixed_Small",name:"Far-Reaching Abrasion Blaster",blueprintSymbol:"AbrasionBlaster_FarReaching",grade:1,acquisition:"mercenary",mercCoinCost:400},{symbol:"Hpt_CausticMissile_Fixed_Medium",name:"High-Yield Enzyme Missile Rack",blueprintSymbol:"EnzymeMissileRack_HighYield",grade:1,acquisition:"mercenary",mercCoinCost:850},{symbol:"Hpt_Slugshot_Gimbal_Small",name:"Double Screaming Fragment Cannon",blueprintSymbol:"FragmentCannonSmall_DoubleScreaming",grade:1,acquisition:"mercenary",mercCoinCost:800},{symbol:"Hpt_Slugshot_Gimbal_Large",name:"Double Screaming Fragment Cannon",blueprintSymbol:"FragmentCannonLarge_DoubleScreaming",grade:1,acquisition:"mercenary",mercCoinCost:950},{symbol:"Hpt_MiningLaser_Fixed_Small",name:"Long Range Mining Laser",blueprintSymbol:"MiningLaser_LongRange",grade:1,acquisition:"mercenary",mercCoinCost:450},{symbol:"Hpt_MultiCannon_Fixed_Medium",name:"Rapid Phase Multi-Cannon",blueprintSymbol:"MultiCannon_Rapid",grade:1,acquisition:"mercenary",mercCoinCost:850},{symbol:"Hpt_Railgun_Fixed_Medium",name:"Enduring Feedback Rail Gun",blueprintSymbol:"RailGun_LongShot",grade:1,acquisition:"mercenary",mercCoinCost:950},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Drag Seeker Missile Rack",blueprintSymbol:"SeekerMissileRack_Drag",grade:1,acquisition:"mercenary",mercCoinCost:800},{symbol:"Hpt_BasicMissileRack_Fixed_Large",name:"Drag Seeker Missile Rack",blueprintSymbol:"SeekerMissileRack_Drag",grade:1,acquisition:"mercenary",mercCoinCost:900},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Lightweight Thermal Seeker Missile Rack",blueprintSymbol:"SeekerMissileRack_LightWeightThermal",grade:1,acquisition:"mercenary",mercCoinCost:800},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Lockdown Seeker Missile Rack",blueprintSymbol:"SeekerMissileRackMedium_Lockdown",grade:1,acquisition:"mercenary",mercCoinCost:800},{symbol:"Hpt_BasicMissileRack_Fixed_Large",name:"Lockdown Seeker Missile Rack",blueprintSymbol:"SeekerMissileRackLarge_Lockdown",grade:1,acquisition:"mercenary",mercCoinCost:900},{symbol:"Int_CargoRack_Size5_Class1",name:"Extended Cargo Rack",blueprintSymbol:"CargoRackS5C1_Extended",grade:1,acquisition:"mercenary",mercCoinCost:550},{symbol:"Int_CargoRack_Size6_Class1",name:"Extended Cargo Rack",blueprintSymbol:"CargoRackS6C1_Extended",grade:1,acquisition:"mercenary",mercCoinCost:550},{symbol:"Int_DetailedSurfaceScanner_Tiny",name:"Long Range Detailed Surface Scanner",blueprintSymbol:"DetailedSurfaceScanner_LongRange",grade:1,acquisition:"mercenary",mercCoinCost:350},{symbol:"Int_ModuleReinforcement_Size5_Class2",name:"Heavy Duty Module Reinforcement Package",blueprintSymbol:"ModuleReinforcement_HeavyDuty",grade:1,acquisition:"mercenary",mercCoinCost:450},{symbol:"Int_PowerDistributor_Size3_Class2",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS3C2_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:300},{symbol:"Int_PowerDistributor_Size3_Class5",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS3C5_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:350},{symbol:"Int_PowerDistributor_Size4_Class2",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS4C2_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:400},{symbol:"Int_PowerDistributor_Size4_Class5",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS4C5_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:450},{symbol:"Int_PowerDistributor_Size5_Class5",name:"Balanced Power Distributor",blueprintSymbol:"PowerDistributor_Balanced",grade:1,acquisition:"mercenary",mercCoinCost:500},{symbol:"Int_PowerDistributor_Size6_Class5",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS6C5_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:550},{symbol:"Hpt_Mining_AbrBlstr_Fixed_Small",name:"Abrasion Blaster",blueprintSymbol:"Weapon_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"DistributorDraw",method:"multiplicative",value:-.5},{label:"FalloffRange",method:"multiplicative",value:4},{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaximumRange",method:"multiplicative",value:4},{label:"PowerDraw",method:"multiplicative",value:-.5},{label:"ThermalLoad",method:"multiplicative",value:-.5}]},{symbol:"Hpt_CausticMissile_Fixed_Medium",name:"Enzyme Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:.75},{label:"AmmoMaximum",method:"multiplicative",value:.25},{label:"Damage",method:"multiplicative",value:.5},{label:"Mass",method:"multiplicative",value:.6},{label:"PowerDraw",method:"multiplicative",value:.2}]},{symbol:"Hpt_Slugshot_Gimbal_Small",name:"Fragment Cannon",blueprintSymbol:"Weapon_DoubleShot",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_screening_shell",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1.6667},{label:"AmmoMaximum",method:"multiplicative",value:.67776},{label:"BurstInterval",method:"multiplicative",value:-.06},{label:"BurstSize",method:"overwrite",value:2},{label:"Mass",method:"multiplicative",value:.6},{label:"MaximumRange",method:"multiplicative",value:-.1},{label:"PowerDraw",method:"multiplicative",value:.2}]},{symbol:"Hpt_Slugshot_Gimbal_Large",name:"Fragment Cannon",blueprintSymbol:"Weapon_DoubleShot",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_screening_shell",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1.6667},{label:"AmmoMaximum",method:"multiplicative",value:.67776},{label:"BurstInterval",method:"multiplicative",value:-.06},{label:"BurstSize",method:"overwrite",value:2},{label:"Mass",method:"multiplicative",value:.6},{label:"MaximumRange",method:"multiplicative",value:-.1},{label:"PowerDraw",method:"multiplicative",value:.2}]},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Medium",name:"Guardian Shard Cannon",blueprintSymbol:"Weapon_LongRange",grade:5,acquisition:"communityGoal",engineeringLocked:true,modifiers:[{label:"ArmourPenetration",method:"multiplicative",value:1.02},{label:"DistributorDraw",method:"multiplicative",value:5.05},{label:"Jitter",method:"additive",value:-3.5},{label:"Mass",method:"multiplicative",value:.5},{label:"MaximumRange",method:"multiplicative",value:4},{label:"PowerDraw",method:"multiplicative",value:1.3},{label:"ShotSpeed",method:"overwrite",value:1258.89},{label:"ThermalLoad",method:"multiplicative",value:15.5}]},{symbol:"Hpt_MultiCannon_Fixed_Medium",name:"Multi-Cannon",blueprintSymbol:"Weapon_RapidFire",grade:1,acquisition:"communityGoal",experimentalEffectSymbol:"special_phasing_sequence",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:3},{label:"AmmoMaximum",method:"overwrite",value:6400},{label:"BurstInterval",method:"overwrite",value:.1},{label:"FalloffRange",method:"multiplicative",value:-.1},{label:"Jitter",method:"additive",value:3},{label:"MaximumRange",method:"multiplicative",value:-.5},{label:"RoundsPerShot",method:"additive",value:2}]},{symbol:"Hpt_Railgun_Fixed_Medium",name:"Rail Gun",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_feedback_cascade_cooled",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.61145},{label:"FalloffRange",method:"multiplicative",value:5},{label:"Mass",method:"multiplicative",value:.9},{label:"MaximumRange",method:"multiplicative",value:1},{label:"PowerDraw",method:"multiplicative",value:.65},{label:"ReloadTime",method:"multiplicative",value:.25}]},{symbol:"Hpt_Railgun_Fixed_Medium_Burst",name:"Imperial Hammer Rail Gun",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_super_penetrator",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.2635},{label:"Damage",method:"multiplicative",value:-.2},{label:"Mass",method:"multiplicative",value:.7},{label:"PowerDraw",method:"multiplicative",value:.25}]},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:1,acquisition:"communityGoal",experimentalEffectSymbol:"special_drag_munitions",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:2},{label:"AmmoMaximum",method:"multiplicative",value:2},{label:"BurstInterval",method:"multiplicative",value:-.2},{label:"DistributorDraw",method:"overwrite",value:.34},{label:"Mass",method:"multiplicative",value:1.5},{label:"PowerDraw",method:"multiplicative",value:.25}]},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_fsd_interrupt",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"ArmourPenetration",method:"multiplicative",value:.4},{label:"BurstInterval",method:"multiplicative",value:-.1},{label:"Damage",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:1},{label:"Mass",method:"multiplicative",value:1.2},{label:"PowerDraw",method:"multiplicative",value:.3},{label:"ThermalLoad",method:"multiplicative",value:-.1}]},{symbol:"Hpt_BasicMissileRack_Fixed_Large",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_fsd_interrupt",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"ArmourPenetration",method:"multiplicative",value:.4},{label:"BurstInterval",method:"multiplicative",value:-.1},{label:"Damage",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:1},{label:"Mass",method:"multiplicative",value:1.2},{label:"PowerDraw",method:"multiplicative",value:.3},{label:"ThermalLoad",method:"multiplicative",value:-.1}]},{symbol:"Hpt_ElectronicCountermeasure_Tiny",name:"Electronic Countermeasure",blueprintSymbol:"Misc_LightWeight",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:1},{label:"Mass",method:"multiplicative",value:-.85},{label:"PowerDraw",method:"multiplicative",value:1}]},{symbol:"Hpt_CrimeScanner_Size0_Class5",name:"Kill Warrant Scanner",blueprintSymbol:"Sensor_FastScan",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaxAngle",method:"multiplicative",value:-.3},{label:"PowerDraw",method:"multiplicative",value:.5},{label:"ScannerRange",method:"multiplicative",value:.65},{label:"ScannerTimeToScan",method:"multiplicative",value:-.8}]},{symbol:"Hpt_CrimeScanner_Size0_Class3",name:"Kill Warrant Scanner",blueprintSymbol:"Sensor_FastScan",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaxAngle",method:"multiplicative",value:-.3},{label:"PowerDraw",method:"multiplicative",value:.5},{label:"ScannerRange",method:"multiplicative",value:.65},{label:"ScannerTimeToScan",method:"multiplicative",value:-.8}]},{symbol:"Hpt_PlasmaPointDefence_Turret_Tiny",name:"Point Defence",blueprintSymbol:"Misc_LightWeight",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:-.5},{label:"Mass",method:"multiplicative",value:-.85},{label:"MaximumRange",method:"multiplicative",value:1},{label:"ThermalLoad",method:"multiplicative",value:.05}]},{symbol:"Int_PowerDistributor_Size3_Class5",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size3_Class2",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size4_Class5",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size4_Class2",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size6_Class5",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_Powerplant_Size3_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Armoured",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.13},{label:"Integrity",method:"multiplicative",value:.95},{label:"Mass",method:"multiplicative",value:.2},{label:"PowerCapacity",method:"multiplicative",value:.52}]},{symbol:"Int_Powerplant_Size3_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Boosted",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:-.3},{label:"PowerCapacity",method:"multiplicative",value:.6}]},{symbol:"Int_Powerplant_Size4_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Boosted",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:-.3},{label:"PowerCapacity",method:"multiplicative",value:.6}]},{symbol:"Int_Powerplant_Size5_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Boosted",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.35},{label:"Integrity",method:"overwrite",value:74},{label:"PowerCapacity",method:"multiplicative",value:.6}]},{symbol:"Int_Hyperdrive_Size3_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Size4_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Size6_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_CargoRack_Size5_Class1",name:"Cargo Rack",blueprintSymbol:"CargoRack_IncreasedCapacity",grade:5,acquisition:"communityGoal",modifiers:[{label:"CargoCapacity",method:"multiplicative",value:.34375}]},{symbol:"Int_CargoRack_Size6_Class1",name:"Cargo Rack",blueprintSymbol:"CargoRack_IncreasedCapacity",grade:5,acquisition:"communityGoal",modifiers:[{label:"CargoCapacity",method:"multiplicative",value:.34375}]},{symbol:"Int_ShieldGenerator_Size3_Class5",name:"Shield Generator",blueprintSymbol:"ShieldGenerator_Kinetic",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:.2},{label:"KineticResistance",method:"additive",value:.18},{label:"PowerDraw",method:"multiplicative",value:.4},{label:"ThermicResistance",method:"additive",value:.42}]},{symbol:"Hpt_ATDumbfireMissile_Fixed_Medium",name:"AX Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.3},{label:"Damage",method:"multiplicative",value:-.03},{label:"DistributorDraw",method:"multiplicative",value:-.2},{label:"Jitter",method:"additive",value:.5},{label:"Mass",method:"multiplicative",value:.7},{label:"PowerDraw",method:"multiplicative",value:.2},{label:"ReloadTime",method:"multiplicative",value:-.45}]},{symbol:"Hpt_ATDumbfireMissile_Fixed_Large",name:"AX Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.3},{label:"Damage",method:"multiplicative",value:-.03},{label:"DistributorDraw",method:"multiplicative",value:-.2},{label:"Jitter",method:"additive",value:.5},{label:"Mass",method:"multiplicative",value:.7},{label:"PowerDraw",method:"multiplicative",value:.2},{label:"ReloadTime",method:"multiplicative",value:-.45}]},{symbol:"Hpt_ATMultiCannon_Gimbal_Medium",name:"Enhanced AX Multi-Cannon",blueprintSymbol:"Weapon_Overcharged",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_auto_loader",engineeringLocked:true,modifiers:[{label:"Damage",method:"multiplicative",value:.1},{label:"PowerDraw",method:"multiplicative",value:.75},{label:"ThermalLoad",method:"multiplicative",value:3}]},{symbol:"Hpt_ATMultiCannon_Gimbal_Large",name:"Enhanced AX Multi-Cannon",blueprintSymbol:"Weapon_Overcharged",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_auto_loader",engineeringLocked:true,modifiers:[{label:"Damage",method:"multiplicative",value:.1},{label:"PowerDraw",method:"multiplicative",value:.75},{label:"ThermalLoad",method:"multiplicative",value:3}]},{symbol:"Hpt_Guardian_GaussCannon_Fixed_Small",name:"Guardian Gauss Cannon",blueprintSymbol:"Weapon_RapidFire",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:3},{label:"AmmoMaximum",method:"multiplicative",value:4},{label:"BurstInterval",method:"multiplicative",value:-.38237},{label:"BurstRateOfFire",method:"overwrite",value:10},{label:"BurstSize",method:"overwrite",value:4},{label:"Damage",method:"multiplicative",value:-.75214},{label:"DistributorDraw",method:"multiplicative",value:-.75},{label:"FalloffRange",method:"multiplicative",value:-.2},{label:"ThermalLoad",method:"multiplicative",value:-.75}]},{symbol:"Hpt_Guardian_GaussCannon_Fixed_Medium",name:"Guardian Gauss Cannon",blueprintSymbol:"Weapon_RapidFire",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:3},{label:"AmmoMaximum",method:"multiplicative",value:4},{label:"BurstInterval",method:"multiplicative",value:-.38237},{label:"BurstRateOfFire",method:"overwrite",value:10},{label:"BurstSize",method:"overwrite",value:4},{label:"Damage",method:"multiplicative",value:-.75214},{label:"DistributorDraw",method:"multiplicative",value:-.75},{label:"FalloffRange",method:"multiplicative",value:-.2},{label:"ThermalLoad",method:"multiplicative",value:-.75}]},{symbol:"Hpt_Guardian_PlasmaLauncher_Fixed_Small",name:"Guardian Plasma Charger",blueprintSymbol:"Weapon_Overcharged",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"overwrite",value:20},{label:"ArmourPenetration",method:"multiplicative",value:.375},{label:"Damage",method:"multiplicative",value:.66},{label:"PowerDraw",method:"multiplicative",value:.3239},{label:"ShotSpeed",method:"multiplicative",value:4},{label:"ThermalLoad",method:"multiplicative",value:.5}]},{symbol:"Hpt_Guardian_PlasmaLauncher_Fixed_Medium",name:"Guardian Plasma Charger",blueprintSymbol:"Weapon_Overcharged",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"overwrite",value:20},{label:"ArmourPenetration",method:"multiplicative",value:.375},{label:"Damage",method:"multiplicative",value:.66},{label:"PowerDraw",method:"multiplicative",value:.3239},{label:"ShotSpeed",method:"multiplicative",value:4},{label:"ThermalLoad",method:"multiplicative",value:.5}]},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Small",name:"Guardian Shard Cannon",blueprintSymbol:"Weapon_LongRange",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"ArmourPenetration",method:"multiplicative",value:1.02},{label:"DistributorDraw",method:"multiplicative",value:4.2769},{label:"FalloffRange",method:"overwrite",value:1500},{label:"Jitter",method:"additive",value:-3.5},{label:"Mass",method:"multiplicative",value:.5},{label:"MaximumRange",method:"overwrite",value:3e3},{label:"PowerDraw",method:"multiplicative",value:1.3},{label:"ShotSpeed",method:"overwrite",value:3568.6},{label:"ThermalLoad",method:"multiplicative",value:15.5}]},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Medium",name:"Guardian Shard Cannon",blueprintSymbol:"Weapon_LongRange",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"ArmourPenetration",method:"multiplicative",value:1.02},{label:"DistributorDraw",method:"overwrite",value:3.43},{label:"FalloffRange",method:"overwrite",value:1500},{label:"Jitter",method:"additive",value:-3.5},{label:"Mass",method:"multiplicative",value:.5},{label:"MaximumRange",method:"overwrite",value:3e3},{label:"PowerDraw",method:"multiplicative",value:1.3},{label:"ShotSpeed",method:"overwrite",value:6299.209},{label:"ThermalLoad",method:"multiplicative",value:15.5}]},{symbol:"Hpt_MiningLaser_Fixed_Small",name:"Mining Laser",blueprintSymbol:"Weapon_LongRange",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_incendiary_rounds",modifiers:[{label:"Damage",method:"multiplicative",value:-.05},{label:"DistributorDraw",method:"multiplicative",value:-.5},{label:"FalloffRange",method:"multiplicative",value:7.3333},{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaximumRange",method:"multiplicative",value:4},{label:"PowerDraw",method:"multiplicative",value:-.5},{label:"ThermalLoad",method:"multiplicative",value:-.83}]},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_thermal_cascade",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.1},{label:"DistributorDraw",method:"multiplicative",value:-.4},{label:"Integrity",method:"multiplicative",value:-.6},{label:"Mass",method:"multiplicative",value:-.9},{label:"PowerDraw",method:"multiplicative",value:-.2}]},{symbol:"Hpt_HeatSinkLauncher_Turret_Tiny",name:"Heat Sink Launcher",blueprintSymbol:"Misc_HeatSinkCapacity",grade:1,acquisition:"techBroker",modifiers:[{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"ReloadTime",method:"multiplicative",value:.75}]},{symbol:"Int_Hyperdrive_Size5_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size2_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size3_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size4_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size5_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size6_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size7_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_DetailedSurfaceScanner_Tiny",name:"Detailed Surface Scanner",blueprintSymbol:"Sensor_Expanded",grade:5,acquisition:"techBroker",modifiers:[{label:"DSS_PatchRadius",method:"multiplicative",value:1}]},{symbol:"Hpt_FlakMortar_Turret_Medium",name:"Festive Green Remote Release Flak Launcher",blueprintSymbol:"Decorative_Green",grade:5,acquisition:"eventReward",modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]},{symbol:"Hpt_FlakMortar_Turret_Medium",name:"Festive Red Remote Release Flak Launcher",blueprintSymbol:"Decorative_Red",grade:5,acquisition:"eventReward",modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]},{symbol:"Hpt_FlakMortar_Turret_Medium",name:"Festive Yellow Remote Release Flak Launcher",blueprintSymbol:"Decorative_Yellow",grade:5,acquisition:"eventReward",modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]}];var PRE_ENGINEERED_MODULES=deepFreeze(pre_engineered_default);function getPreEngineeredVariants(symbol){return filterByKey(PRE_ENGINEERED_MODULES,"symbol",symbol,"getPreEngineeredVariants: symbol")}function isPreEngineered(symbol){requireStringIfPresent(symbol,"isPreEngineered: symbol");return getPreEngineeredVariants(symbol).length>0}export{PRE_ENGINEERED_MODULES,getPreEngineeredVariants,isPreEngineered};//# sourceMappingURL=chunk-PL75RTA2.js.map