@elite-dangerous-almanac/core 0.1.0-beta.8 → 0.1.0-beta.9

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 (80) hide show
  1. package/PROVENANCE/i18n/SOURCES.md +54 -5
  2. package/PROVENANCE/materials/SOURCES.md +33 -12
  3. package/README.md +15 -5
  4. package/THIRD_PARTY_NOTICES.md +11 -9
  5. package/dist/chunk-4AE22CHV.js +1 -0
  6. package/dist/chunk-4AE22CHV.js.map +1 -0
  7. package/dist/chunk-4WC5NHBJ.js +1 -0
  8. package/dist/chunk-4WC5NHBJ.js.map +1 -0
  9. package/dist/chunk-53ERRGPM.js +1 -0
  10. package/dist/{chunk-WASJ5U5A.js.map → chunk-53ERRGPM.js.map} +1 -1
  11. package/dist/chunk-BYBT5XSW.js +1 -0
  12. package/dist/chunk-BYBT5XSW.js.map +1 -0
  13. package/dist/{chunk-DHOCTGWB.js → chunk-G3AMKCOE.js} +1 -1
  14. package/dist/{chunk-RIT6MOO5.js → chunk-GVLDFJEY.js} +1 -1
  15. package/dist/{chunk-RIT6MOO5.js.map → chunk-GVLDFJEY.js.map} +1 -1
  16. package/dist/{chunk-IZGYEP2X.js → chunk-KLIYDSYF.js} +1 -1
  17. package/dist/{chunk-IZGYEP2X.js.map → chunk-KLIYDSYF.js.map} +1 -1
  18. package/dist/{chunk-DYFUHGJQ.js → chunk-KQDJTDLV.js} +1 -1
  19. package/dist/{chunk-PRFXKOCZ.js → chunk-MNXWK7PA.js} +1 -1
  20. package/dist/chunk-P2QOL63K.js +1 -0
  21. package/dist/chunk-P2QOL63K.js.map +1 -0
  22. package/dist/{chunk-NQ2ID6BF.js → chunk-Q22LXT53.js} +1 -1
  23. package/dist/chunk-QF3NYGUJ.js +1 -0
  24. package/dist/chunk-QF3NYGUJ.js.map +1 -0
  25. package/dist/chunk-UXZJMZEU.js +1 -0
  26. package/dist/chunk-UXZJMZEU.js.map +1 -0
  27. package/dist/chunk-V4C6FIE2.js +1 -0
  28. package/dist/{chunk-TLA6LHLN.js.map → chunk-V4C6FIE2.js.map} +1 -1
  29. package/dist/{chunk-ESEM3LPU.js → chunk-VARPO47V.js} +1 -1
  30. package/dist/{chunk-CI3ACMRA.js → chunk-WHWFKHV3.js} +1 -1
  31. package/dist/{chunk-CI3ACMRA.js.map → chunk-WHWFKHV3.js.map} +1 -1
  32. package/dist/{chunk-ELIZXUMI.js → chunk-YDBRGW4G.js} +1 -1
  33. package/dist/i18n/blueprints.js +1 -1
  34. package/dist/i18n/experimental-effects.js +1 -1
  35. package/dist/i18n/index.d.ts +3 -1
  36. package/dist/i18n/index.js +1 -1
  37. package/dist/i18n/materials.d.ts +31 -0
  38. package/dist/i18n/materials.js +1 -0
  39. package/dist/i18n/materials.js.map +1 -0
  40. package/dist/i18n/micro-resources.d.ts +31 -0
  41. package/dist/i18n/micro-resources.js +1 -0
  42. package/dist/i18n/micro-resources.js.map +1 -0
  43. package/dist/i18n/modules.js +1 -1
  44. package/dist/materials/index.js +1 -1
  45. package/dist/materials/materials-all.js +1 -1
  46. package/dist/materials/materials.js +1 -1
  47. package/dist/materials/micro-resources-all.d.ts +2 -2
  48. package/dist/materials/micro-resources-all.js +1 -1
  49. package/dist/materials/micro-resources-data.d.ts +3 -3
  50. package/dist/materials/micro-resources-data.js +1 -1
  51. package/dist/materials/micro-resources-item.d.ts +3 -3
  52. package/dist/materials/micro-resources-item.js +1 -1
  53. package/dist/materials/micro-resources.d.ts +8 -8
  54. package/dist/materials/micro-resources.js +1 -1
  55. package/dist/{ship-loadout-B5mQ1l-N.d.ts → ship-loadout-BsfKbvKe.d.ts} +56 -12
  56. package/dist/ships/distributor.d.ts +98 -0
  57. package/dist/ships/distributor.js +1 -0
  58. package/dist/ships/distributor.js.map +1 -0
  59. package/dist/ships/index.d.ts +4 -2
  60. package/dist/ships/index.js +1 -1
  61. package/dist/ships/modules-all.js +1 -1
  62. package/dist/ships/modules.js +1 -1
  63. package/dist/ships/pre-engineered-stats.js +1 -1
  64. package/dist/ships/ship-loadout.d.ts +2 -1
  65. package/dist/ships/ship-loadout.js +1 -1
  66. package/package.json +14 -2
  67. package/dist/chunk-5H74FKY7.js +0 -1
  68. package/dist/chunk-5H74FKY7.js.map +0 -1
  69. package/dist/chunk-HOKW2EWE.js +0 -1
  70. package/dist/chunk-HOKW2EWE.js.map +0 -1
  71. package/dist/chunk-JWRV67UY.js +0 -1
  72. package/dist/chunk-JWRV67UY.js.map +0 -1
  73. package/dist/chunk-TLA6LHLN.js +0 -1
  74. package/dist/chunk-WASJ5U5A.js +0 -1
  75. /package/dist/{chunk-DHOCTGWB.js.map → chunk-G3AMKCOE.js.map} +0 -0
  76. /package/dist/{chunk-DYFUHGJQ.js.map → chunk-KQDJTDLV.js.map} +0 -0
  77. /package/dist/{chunk-PRFXKOCZ.js.map → chunk-MNXWK7PA.js.map} +0 -0
  78. /package/dist/{chunk-NQ2ID6BF.js.map → chunk-Q22LXT53.js.map} +0 -0
  79. /package/dist/{chunk-ESEM3LPU.js.map → chunk-VARPO47V.js.map} +0 -0
  80. /package/dist/{chunk-ELIZXUMI.js.map → chunk-YDBRGW4G.js.map} +0 -0
@@ -1,10 +1,10 @@
1
1
  # Localized game-name catalogues
2
2
 
3
3
  These catalogues keep the canonical English display names already published by the
4
- ships data domain and add only localized values carried explicitly by the pinned community
5
- sources. They are deliberately sparse: absence means that no accepted source carried a
6
- value, and the lookup API returns `null` for that locale rather than treating English as
7
- a translation.
4
+ ships data domain and add only localized values carried explicitly by accepted sources.
5
+ They are deliberately sparse: absence means that no accepted source carried a value, and
6
+ the lookup API returns `null` for that locale rather than treating English as a
7
+ translation.
8
8
 
9
9
  ## `module-names.jsonc`
10
10
 
@@ -58,6 +58,55 @@ a translation.
58
58
  Spanish, French, Portuguese and Russian.
59
59
  - **Manual corrections:** none.
60
60
 
61
+ ## `material-names.jsonc`
62
+
63
+ - **Acquired:** 2026-08-16 UTC.
64
+ - **Odyssey Materials Helper revision:** commit
65
+ `23343c453938e724f317c56e9eb7db0dbfa71f78`.
66
+ - **Derivation:** each of the 146 current symbols and its canonical English name comes
67
+ from the three `data/materials/materials-*.jsonc` catalogues. The lower-cased symbol
68
+ joins directly to the final component of Odyssey Materials Helper's message key in
69
+ `locale/material/horizons/{raw,manufactured,encoded}.csv`; only that row's explicit
70
+ localized columns are copied. The source's English column is not copied because the
71
+ owning materials catalogues remain authoritative for canonical names. The canonical
72
+ English values therefore keep the existing `Segment` spelling and omit the source's
73
+ parenthetical Guardian and Thargoid category labels where the owning catalogue does;
74
+ localized columns remain verbatim source values.
75
+ - **Coverage:** English, Spanish and Russian cover all 146 materials. The explicit
76
+ translations cover 128 in German, 140 in French, 140 in Portuguese and 28 in
77
+ Georgian. Fourteen of the source's Georgian values are byte-for-byte equal to the
78
+ canonical English spelling and are retained verbatim; they are explicit source values,
79
+ not lookup-generated fallbacks. The pinned source carries no Simplified Chinese
80
+ material names.
81
+ - **Manual corrections:** none.
82
+
83
+ ## `micro-resource-names.jsonc`
84
+
85
+ - **Acquired:** 2026-08-16 UTC.
86
+ - **Odyssey Materials Helper revision:** commit
87
+ `23343c453938e724f317c56e9eb7db0dbfa71f78`.
88
+ - **Supplemental source:** in-game verification, acquired 2026-08-16 UTC; immutable
89
+ revision unavailable.
90
+ - **Derivation:** each of the 226 current symbols and its canonical English name comes
91
+ from the four `data/materials/micro-resources-*.jsonc` catalogues. The 196 FDevIDs-backed
92
+ records join directly to the final component of Odyssey Materials Helper's message key
93
+ in `locale/material/odyssey/{asset,consumable,data,good}.csv`; only that row's explicit
94
+ localized columns are copied. Twenty-eight of the 30 in-game-backed records also have
95
+ rows in Odyssey Materials Helper, while `PowerVirus` and
96
+ `SmallCapacityPowerRegulator` do not. All 30 take the explicit in-game `name` values for
97
+ German, Spanish, French, Brazilian Portuguese and Russian. The Brazilian Portuguese
98
+ values are stored under `pt`, matching the existing catalogue values described below.
99
+ In both cases the owning catalogue remains authoritative for canonical English names.
100
+ - **Coverage:** English, Spanish and Russian cover all 226 micro resources. The explicit
101
+ translations cover 218 in German and Portuguese, 225 in French, 6 in Simplified Chinese
102
+ and 10 in Georgian. Five of the source's Georgian values are byte-for-byte equal to the
103
+ canonical English spelling and are retained verbatim; they are explicit source values,
104
+ not lookup-generated fallbacks.
105
+ - **Manual corrections:** the 30 in-game values labelled Brazilian Portuguese are stored
106
+ under `pt`, matching the 188 existing Portuguese entries because both sets contain the
107
+ same Brazilian Portuguese game text. `pt-BR` lookups resolve these values through the
108
+ regional-to-language fallback.
109
+
61
110
  ## Deliberate absence: ship names
62
111
 
63
112
  - **Acquired:** 2026-08-14 UTC.
@@ -82,7 +131,7 @@ a translation.
82
131
 
83
132
  ## Known gaps
84
133
 
85
- Localized coverage follows the pinned sources and is not complete for every catalogue or
134
+ Localized coverage follows the accepted sources and is not complete for every catalogue or
86
135
  locale. Missing values are observable as `null`, never an English fallback. Expanding
87
136
  source-backed coverage, localized slot labels and higher-level generated text remains
88
137
  tracked by [#245](https://github.com/DarkSession/Elite-Dangerous-Almanac/issues/245).
@@ -1,9 +1,9 @@
1
1
  # Data sources — `data/materials/`
2
2
 
3
- **Acquired:** 2026-07-24. **Upstream revision:** unavailable for both sources below.
4
-
5
3
  ## Materials — raw, manufactured, encoded
6
4
 
5
+ **Acquired:** 2026-07-24. **Upstream revision:** unavailable for both sources below.
6
+
7
7
  - **Files:** `materials-raw.jsonc`, `materials-manufactured.jsonc`,
8
8
  `materials-encoded.jsonc`.
9
9
  - **Primary source:** EDCD FDevIDs, `material.csv`. It provides, for each material, the
@@ -52,18 +52,39 @@ grade 3), which is why it is used to fill the gap.
52
52
 
53
53
  - **Files:** `micro-resources-component.jsonc`, `micro-resources-consumable.jsonc`,
54
54
  `micro-resources-data.jsonc`, `micro-resources-item.jsonc`.
55
- - **Source:** EDCD FDevIDs, `microresources.csv`. It provides, for each micro resource,
56
- the internal symbol, category (Component / Consumable / Data / Item) and English display
57
- name.
55
+ - **Sources:**
56
+ - EDCD FDevIDs `microresources.csv`, acquired 2026-07-24; upstream revision
57
+ unavailable. It provides 196 records, including each internal symbol,
58
+ category (Component / Consumable / Data / Item) and English display name.
59
+ - In-game verification, acquired 2026-08-16 UTC; immutable revision unavailable. It
60
+ provides 30 player-facing identities absent from the FDevIDs snapshot, their internal
61
+ identifiers and English display names, and player categories for 29 of them.
62
+ `PowerMegashipData` is the exception documented under manual corrections.
63
+ - Inara component pages, acquired 2026-08-16 UTC; immutable revision unavailable. Its
64
+ six Power data pages independently classify Power Association Data, Power Classified
65
+ Data, Power Industrial Data, Power Injection Malware, Power Megaship Data and Power
66
+ Political Data as Odyssey data resources.
58
67
  - **Derivation:**
59
- - `symbol` is FDevIDs' internal id (e.g. `graphene`) — what the player journal reports
60
- with the same field and meaning as on a ship, module or material.
61
- Frontier's numeric micro-resource id from the CSV is **not** carried.
68
+ - `symbol` is the source's internal id (e.g. `graphene`) — what the player journal
69
+ reports with the same field and meaning as on a ship, module or material. Frontier's
70
+ numeric micro-resource id from the FDevIDs CSV is **not** carried.
62
71
  - `name` is the English display name (`Graphene`).
63
- - FDevIDs' category is lower-cased to `component` / `consumable` / `data` / `item`
64
- (matching how ship modules and materials spell their category). Each data file holds
65
- exactly one category, so the category is represented by the file rather than repeated
66
- on every record.
72
+ - The source category is lower-cased to `component` / `consumable` / `data` / `item`
73
+ (matching how ship modules and materials spell their category). In-game `assets` map
74
+ to `component` and `goods` map to `item`. Each data file holds exactly one category,
75
+ so the category is represented by the file rather than repeated on every record.
67
76
  - Micro resources have **no grade and no line** — those belong to the ship-side
68
77
  engineering materials above; each data-file record is a plain `{ symbol, name }`
69
78
  registry record.
79
+ - Three registered identities are deliberately absent: `FlightData` and
80
+ `Humanoid_ShieldGrenade_Bubble` have no localization and are not player-facing
81
+ resources; `NOCData_Tutorial` is the tutorial-only duplicate of `NOCData` and has the
82
+ same English display name. The localized, player-facing
83
+ `SmallCapacityPowerRegulator` record is retained.
84
+ - **Manual corrections:** `PowerMegashipData` is assigned to `data`. The encoded-material
85
+ classification attached to its in-game localization record is rejected: Inara
86
+ classifies it alongside the other five Power data resources, establishing that it is an
87
+ Odyssey micro resource with no material grade or line. The in-game English names are
88
+ otherwise retained verbatim, including
89
+ `Installation Intelligence Report`, `Personal Protective Equipment` and
90
+ `Contaminated Spire Compound` where the community table differs.
package/README.md CHANGED
@@ -48,7 +48,8 @@ The package has six feature areas:
48
48
  - `astro`: procedural names, id64 addresses, regions, nebulae and permit locks;
49
49
  - `ships`: ships, modules, SLEF loadouts, engineering and build metrics;
50
50
  - `equipment`: Odyssey suits, handheld weapons, grade upgrades and modifications;
51
- - `i18n`: sparse localized module, blueprint and experimental-effect names;
51
+ - `i18n`: sparse localized module, blueprint, experimental-effect, material and
52
+ micro-resource names;
52
53
  - `materials`: ship engineering materials and Odyssey micro resources;
53
54
  - `commodities`: standard and rare market goods.
54
55
 
@@ -126,15 +127,24 @@ do not bundle them. English names are complete; other locales return `null` wher
126
127
  pinned sources carry no translation instead of silently substituting English:
127
128
 
128
129
  ```ts
129
- import { getBlueprintName, getModuleName } from '@elite-dangerous-almanac/core/i18n';
130
+ import {
131
+ getBlueprintName,
132
+ getMaterialName,
133
+ getMicroResourceName,
134
+ getModuleName,
135
+ } from '@elite-dangerous-almanac/core/i18n';
130
136
 
131
137
  getModuleName('Int_Hyperdrive_Size6_Class5', 'de-DE'); // -> "Frameshiftantrieb"
132
138
  getBlueprintName('FSD_LongRange', 'fr-FR'); // -> "Portée FSD améliorée"
139
+ getMaterialName('GridResistors', 'de'); // -> "Gitterwiderstände"
140
+ getMicroResourceName('graphene', 'fr'); // -> "Graphène"
133
141
  ```
134
142
 
135
- Unqualified `zh` selects the source's Simplified Chinese (`zh-CN`) module names.
136
- Explicitly different Chinese scripts or regions such as `zh-TW` do not fall back to
137
- Simplified Chinese and return `null` unless a matching source is added.
143
+ The functions return an explicit source value verbatim, so a source-backed spelling may
144
+ happen to equal English; the library itself never supplies an English fallback.
145
+ Unqualified `zh` selects the source's Simplified Chinese (`zh-CN`) names. Explicitly
146
+ different Chinese scripts or regions such as `zh-TW` do not fall back to Simplified
147
+ Chinese and return `null` unless a matching source is added.
138
148
 
139
149
  Registry lookups ignore case and surrounding whitespace. Material, commodity and
140
150
  module lookups search their complete registry by default and accept an optional
@@ -33,7 +33,7 @@ a verbatim copy produced at build time — edit this file, never the copy.
33
33
  boost and rotation through the thruster-mass and ENG-pip curves; shield strength and its
34
34
  mass curve; shield collapse delay, regeneration and SYS-capacitor recovery timing; armour
35
35
  hit points; resistance stacking with its diminishing returns; weapon DPS / capacitor
36
- draw / heat; and WEP-pip recharge with weapons-capacitor endurance. It credits the
36
+ draw / heat; SYS- and WEP-pip recharge; and weapons-capacitor endurance. It credits the
37
37
  original Frontier-forum research the formulas come from.
38
38
  - **The heat model** — the equilibrium heat level a thermal load settles at, how heat
39
39
  moves towards it over time, and the multiplier a drained weapons capacitor puts on a
@@ -49,9 +49,10 @@ a verbatim copy produced at build time — edit this file, never the copy.
49
49
  the game displays. Both
50
50
  describe Frontier's game and fall under the same Frontier notice as every other stat
51
51
  here; what differs is how they were arrived at, not who owns them.
52
- - **The jump-range and fuel algorithm**, **per-axis ENG-pip handling**, the **engineered
53
- ammunition rounding** rule and the **build metrics above** are cross-checked against, or
54
- ported as fact from, EDSY (credited under Data below). The jump-range model derives from
52
+ - **The jump-range and fuel algorithm**, **per-axis ENG-pip handling**, **ENG-capacitor
53
+ pip-scaled recharge**, the **engineered ammunition rounding** rule and the **build metrics
54
+ above** are cross-checked against, or ported as fact from, EDSY (credited under Data below).
55
+ The jump-range model derives from
55
56
  Frontier's "mass effect on hyperspace range" description; Coriolis carries the same maths
56
57
  for the metrics, and a clip round-up that omits EDSY's burst step, where EDSY is followed.
57
58
  - **Galactic codex region lookup** — resolving a region from galactic coordinates or from a
@@ -91,7 +92,7 @@ a verbatim copy produced at build time — edit this file, never the copy.
91
92
  - **[Inara](https://inara.cz/)** — the blueprint and outfitting registries behind the
92
93
  Operations pre-engineered blueprints and shop rows, the ship pages used to corroborate
93
94
  hull layouts, and the component pages that grade the Thargoid caustic / Titan materials
94
- absent from FDevIDs.
95
+ absent from FDevIDs and classify Power Megaship Data as an Odyssey data resource.
95
96
  - **[EliteDangerousRegionMap](https://github.com/klightspeed/EliteDangerousRegionMap)** by
96
97
  **Ben Peddell** ([klightspeed](https://github.com/klightspeed)), **MIT** — the 42
97
98
  galactic codex regions, their ids and their lookup geometry. Original region-boundary
@@ -117,8 +118,9 @@ a verbatim copy produced at build time — edit this file, never the copy.
117
118
  **Jixxed**, **MIT** — supplies the personal suit and handheld-weapon identities, stats,
118
119
  journal symbols, grade-upgrade recipes and engineer-applied modification recipes. A
119
120
  CAPI response in its test resources also corroborates the six bundle-granted Vessel
120
- Hangar variants. The values and response are factual Elite Dangerous game data. Its MIT
121
- notice is reproduced below.
121
+ Hangar variants. Its language tables supply localized engineering-material and Odyssey
122
+ micro-resource display names. The values and response are factual Elite Dangerous game
123
+ data. Its MIT notice is reproduced below.
122
124
  - **[msarilar/EDEngineer](https://github.com/msarilar/EDEngineer)**, **MIT** for its code
123
125
  — its `blueprints.json` corroborates which weapons the Overcharged recipe gives a clip
124
126
  penalty to. The values are game data.
@@ -201,8 +203,8 @@ add it here and record the provenance where the data lives.
201
203
 
202
204
  ## Odyssey Materials Helper license
203
205
 
204
- The personal-equipment data is derived from Odyssey Materials Helper, whose MIT notice
205
- is reproduced as required:
206
+ The personal-equipment data and localized material and micro-resource name tables are
207
+ derived from Odyssey Materials Helper, whose MIT notice is reproduced as required:
206
208
 
207
209
  ```
208
210
  Copyright (c) 2026 Jixxed
@@ -0,0 +1 @@
1
+ import{normalizeKey,CATALOGUE_KEY,findInKeyIndex}from"./chunk-S4DBNX2B.js";import{requireString}from"./chunk-B5TT26XE.js";var CANONICAL_LOCALE=Object.freeze({en:"en",de:"de",es:"es",fr:"fr",hu:"hu",it:"it",ka:"ka",pt:"pt","pt-br":"pt-BR",ru:"ru","zh-cn":"zh-CN"});function canonicalLocale(locale){return Object.hasOwn(CANONICAL_LOCALE,locale)?CANONICAL_LOCALE[locale]:void 0}function localeCandidates(locale,label){const normalized=requireString(locale,label).trim().replaceAll("_","-").toLowerCase();if(normalized==="zh"||normalized==="zh-hans"||normalized.startsWith("zh-hans-")){return["zh-CN"]}if(normalized.startsWith("zh-")&&normalized!=="zh-cn")return[];const exact=canonicalLocale(normalized);const language=canonicalLocale(normalized.split("-",1)[0]);if(exact===void 0)return language===void 0?[]:[language];return language===void 0||language===exact?[exact]:[exact,language]}function createLocalizedNameIndex(names){const index=/* @__PURE__ */Object.create(null);for(const[identifier,name]of Object.entries(names)){const key=normalizeKey(identifier,CATALOGUE_KEY);if(!Object.hasOwn(index,key))index[key]=name}return Object.freeze(index)}function createDeduplicatedLocalizedNameIndex(catalogue){const index=/* @__PURE__ */Object.create(null);for(const[identifier,nameKey]of Object.entries(catalogue.nameKeys)){const name=catalogue.names[nameKey];if(name===void 0)continue;const key=normalizeKey(identifier,CATALOGUE_KEY);if(!Object.hasOwn(index,key))index[key]=name}return Object.freeze(index)}function selectLocalizedName(names,locale,functionName){const candidates=localeCandidates(locale,`${functionName}: locale`);if(names===null)return null;for(const candidate of candidates){const name=names[candidate];if(name!==void 0)return name}return null}function getLocalizedName(names,identifier,locale,functionName,identifierName){const record=findInKeyIndex(names,identifier,`${functionName}: ${identifierName}`);return selectLocalizedName(record,locale,functionName)}export{createDeduplicatedLocalizedNameIndex,createLocalizedNameIndex,getLocalizedName};//# sourceMappingURL=chunk-4AE22CHV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/i18n/internal/localized-name.ts"],"names":["normalizeKey","CATALOGUE_KEY","findInKeyIndex","requireString","CANONICAL_LOCALE","Object","freeze","en","de","es","fr","hu","it","ka","pt","ru","canonicalLocale","locale","hasOwn","localeCandidates","label","normalized","trim","replaceAll","toLowerCase","startsWith","exact","language","split","createLocalizedNameIndex","names","index","create","identifier","name","entries","key","createDeduplicatedLocalizedNameIndex","catalogue","nameKey","nameKeys","selectLocalizedName","functionName","candidates","candidate","getLocalizedName","identifierName","record"],"mappings":"O,mHA4BA,IAAMI,iBAA8DC,OAAOC,OAAO,CAC9EC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,KACJ,QAAS,QACTC,GAAI,KACJ,QAAS,UAIb,SAASC,gBAAgBC,QACrB,OAAOZ,OAAOa,OAAOd,iBAAkBa,QAAUb,iBAAiBa,aAAU,CAChF,CAMA,SAASE,iBAAiBF,OAAgBG,OACtC,MAAMC,WAAalB,cAAcc,OAAQG,OAAOE,OAAOC,WAAW,IAAK,KAAKC,cAC5E,GAAIH,aAAe,MAAQA,aAAe,WAAaA,WAAWI,WAAW,YAAa,CACtF,MAAO,CAAC,QACZ,CACA,GAAIJ,WAAWI,WAAW,QAAUJ,aAAe,QAAA,MAAgB,GACnE,MAAMK,MAAQV,gBAAgBK,YAC9B,MAAMM,SAAWX,gBAAgBK,WAAWO,MAAM,IAAK,GAAG,IAC1D,GAAIF,aAAU,EAAW,OAAOC,gBAAa,EAAY,GAAK,CAACA,UAC/D,OAAOA,gBAAa,GAAaA,WAAaD,MAAQ,CAACA,OAAS,CAACA,MAAOC,SAC5E,CAGO,SAASE,yBAAyBC,OACrC,MAAMC,qBAAQ1B,OAAO2B,OAAO,MAC5B,IAAA,MAAYC,WAAYC,QAAS7B,OAAO8B,QAAQL,OAAQ,CACpD,MAAMM,IAAMpC,aAAaiC,WAAYhC,eACrC,IAAKI,OAAOa,OAAOa,MAAOK,KAAML,MAAMK,KAAOF,IACjD,CACA,OAAO7B,OAAOC,OAAOyB,MACzB,CAGO,SAASM,qCACZC,WAEA,MAAMP,qBAAQ1B,OAAO2B,OAAO,MAC5B,IAAA,MAAYC,WAAYM,WAAYlC,OAAO8B,QAAQG,UAAUE,UAAW,CACpE,MAAMN,KAAOI,UAAUR,MAAMS,SAC7B,GAAIL,YAAS,EAAW,SACxB,MAAME,IAAMpC,aAAaiC,WAAYhC,eACrC,IAAKI,OAAOa,OAAOa,MAAOK,KAAML,MAAMK,KAAOF,IACjD,CACA,OAAO7B,OAAOC,OAAOyB,MACzB,CAGA,SAASU,oBACLX,MACAb,OACAyB,cAEA,MAAMC,WAAaxB,iBAAiBF,OAAQ,GAAGyB,wBAC/C,GAAIZ,QAAU,KAAM,OAAO,KAC3B,IAAA,MAAWc,aAAaD,WAAY,CAChC,MAAMT,KAAOJ,MAAMc,WACnB,GAAIV,YAAS,EAAW,OAAOA,IACnC,CACA,OAAO,IACX,CAGO,SAASW,iBACZf,MACAG,WACAhB,OACAyB,aACAI,gBAEA,MAAMC,OAAS7C,eAAe4B,MAAOG,WAAY,GAAGS,iBAAiBI,kBACrE,OAAOL,oBAAoBM,OAAQ9B,OAAQyB,aAC/C,QAAAL,qCAAAR,yBAAAgB"}
@@ -0,0 +1 @@
1
+ import{DATA_MICRO_RESOURCES}from"./chunk-GVLDFJEY.js";import{ITEM_MICRO_RESOURCES}from"./chunk-WHWFKHV3.js";import{COMPONENT_MICRO_RESOURCES}from"./chunk-HTB52N6S.js";import{CONSUMABLE_MICRO_RESOURCES}from"./chunk-K7L7SMIR.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-4WC5NHBJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/materials/micro-resources-all.ts"],"names":["DATA_MICRO_RESOURCES","ITEM_MICRO_RESOURCES","COMPONENT_MICRO_RESOURCES","CONSUMABLE_MICRO_RESOURCES","ALL_MICRO_RESOURCES","Object","freeze"],"mappings":"O,4NA6BO,IAAMI,oBAAgDC,OAAOC,OAAO,IACpEJ,6BACAC,8BACAH,wBACAC,8BACNG"}
@@ -0,0 +1 @@
1
+ import{CORE_MODULES}from"./chunk-O72KI7RP.js";import{HARDPOINT_MODULES}from"./chunk-BSOIPL4A.js";import{INTERNAL_MODULES}from"./chunk-NSSWYRHN.js";import{UTILITY_MODULES}from"./chunk-3IMWUYXJ.js";var ALL_MODULES=Object.freeze([...CORE_MODULES,...INTERNAL_MODULES,...HARDPOINT_MODULES,...UTILITY_MODULES]);export{ALL_MODULES};//# sourceMappingURL=chunk-53ERRGPM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ships/modules-all.ts"],"names":["UTILITY_MODULES","CORE_MODULES","HARDPOINT_MODULES","INTERNAL_MODULES","ALL_MODULES","Object","freeze"],"mappings":"O,6LA0CO,IAAMI,YAA2CC,OAAOC,OAAO,IAC/DL,gBACAE,oBACAD,qBACAF,yBACNI"}
1
+ {"version":3,"sources":["../src/ships/modules-all.ts"],"names":["CORE_MODULES","HARDPOINT_MODULES","INTERNAL_MODULES","UTILITY_MODULES","ALL_MODULES","Object","freeze"],"mappings":"O,6LA0CO,IAAMI,YAA2CC,OAAOC,OAAO,IAC/DN,gBACAE,oBACAD,qBACAE,yBACNC"}
@@ -0,0 +1 @@
1
+ import{weaponsCapacitorMetrics}from"./chunk-FMPRCYKY.js";import{shieldRecovery,cellBankSummary}from"./chunk-MPZGCTRG.js";import{shieldMetrics}from"./chunk-2FHHMYDC.js";import{getShipSlots,getShipBySymbol,getShipByName}from"./chunk-IJRKEODR.js";import{parseSlef,toSlef,stringifySlef,getLoadoutModifier}from"./chunk-RKLJ7EEE.js";import{enumerateSlots,parseSlotName,SLOT_RESTRICTION_LABELS}from"./chunk-I7PIDRMU.js";import{sourcePurchaseFromLoadout,getSourceModuleValue}from"./chunk-QTDBO7R2.js";import{powerBudget}from"./chunk-76XKY2Y2.js";import{isNonOutfittingSlot,isBuiltInHullModule,cloneLoadoutModule,identifyPreEngineeredVariant,cloneModuleStats,availableBlueprintsFor,availableExperimentalsFor,blueprintAvailableFor,blueprintRoutesFor,experimentalAvailableFor,primitiveEngineeringInputsFor,missingBaseLabels,journalModifiersFor,getPreEngineeredStats,unresolvedModifiers,getPreEngineeredJournalModifiers,getPreEngineeredModifiers,matchingKeyIn,FITTED_ITEM,isFinalGuardianWeaponEngineering,scaleDamageComponents}from"./chunk-KLIYDSYF.js";import{weaponMetrics,sumWeaponMetrics,combinedRateOfFire}from"./chunk-LJI7VXJD.js";import{builtInModuleBySymbol,getBulkheadsForShip}from"./chunk-MNXWK7PA.js";import{getPreEngineeredVariants}from"./chunk-32PVERNH.js";import{singleJumpRange,frameShiftDriveMassFactor,fuelPerJump,totalRange}from"./chunk-GQ5GX5TB.js";import{completeResult,calculateUnladenMass,calculateCargoCapacity,calculateFuelCapacity}from"./chunk-RF2IKLWQ.js";import{validateLoadout}from"./chunk-5W43EQEQ.js";import{mobilityMetrics}from"./chunk-24INI4U7.js";import{calculateModuleLimits}from"./chunk-KPETDYQX.js";import{ALL_MODULES}from"./chunk-53ERRGPM.js";import{CORE_MODULES}from"./chunk-O72KI7RP.js";import{getDefaultLoadout}from"./chunk-V3DW67W2.js";import{distributorMetrics}from"./chunk-P2QOL63K.js";import{getExperimentalEffect}from"./chunk-PMJG7PHU.js";import{heatMetrics}from"./chunk-QMQHIZGS.js";import{ammunitionCapacity}from"./chunk-AA3K5XUE.js";import{armourMetrics}from"./chunk-FGXWVFN6.js";import{baseStats,computeModifiers,labelsForDamageType,scaleForLabel,fieldForLabel,labelsForField,capabilityValueForLabel,damageTypeForLabel}from"./chunk-SVZARHWP.js";import{resolveBlueprintForModule}from"./chunk-ZJB5UYNE.js";import{getExperimentalsForModule}from"./chunk-TH4S5MVD.js";import{getBlueprintGrade}from"./chunk-DNTN34M4.js";import{normalizeKey}from"./chunk-S4DBNX2B.js";import{truncate,describeValue,requireString,requireStringIfPresent}from"./chunk-B5TT26XE.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var PREFIX={powerPlant:["int_powerplant","int_guardianpowerplant"],thrusters:["int_engine","int_mkiiagileboost_engine"],frameShiftDrive:["int_hyperdrive"],powerDistributor:["int_powerdistributor","int_guardianpowerdistributor"],shieldGenerator:["int_shieldgenerator"],shieldCellBank:["int_shieldcellbank"],shieldBooster:["hpt_shieldbooster"],shieldReinforcement:["int_guardianshieldreinforcement"],hullReinforcement:["int_hullreinforcement","int_guardianhullreinforcement","int_metaalloyhullreinforcement"],moduleReinforcement:["int_modulereinforcement","int_guardianmodulereinforcement"]};var startsWithAny=(symbol,prefixes)=>prefixes.some(prefix=>symbol.toLowerCase().startsWith(prefix));function isPowerDistributor(module,stats){return stats?.slot?stats.slot==="powerDistributor":startsWithAny(module.Item,PREFIX.powerDistributor)}function isEnabled(module){return module.On!==false}function priorityOf(module){return(module.Priority??0)+1}function effectiveStat(module,field,stats){const stated=statedModifier(module,field);if(stated!==void 0)return stated;const base=stats?.[field];return typeof base==="number"?base:void 0}function statedModifier(module,field){for(const label of labelsForField(field)){if(capabilityValueForLabel(label)!==null)continue;const modified=getLoadoutModifier(module,label);if(modified!==null)return modified/scaleForLabel(label)}return void 0}function effectiveCapability(module,field,stats){for(const label of labelsForField(field)){if(capabilityValueForLabel(label)===null)continue;if(module.Engineering?.Modifiers?.some(modifier=>modifier.Label.toLowerCase()===label.toLowerCase())){return true}}const base=stats[field];return typeof base==="boolean"?base:void 0}function effectiveDamageDistribution(module,stats){const fromEffect=module.Engineering?.ExperimentalEffect?getExperimentalEffect(module.Engineering.ExperimentalEffect)?.damageDistribution:void 0;const distribution={...fromEffect??stats.damageDistribution};let resolved=fromEffect!==void 0||stats.damageDistribution!==void 0;for(const modifier of module.Engineering?.Modifiers??[]){if(modifier.Value===void 0)continue;const type=damageTypeForLabel(modifier.Label);if(type===null)continue;distribution[type]=modifier.Value/scaleForLabel(modifier.Label);resolved=true}return resolved?distribution:void 0}function convertsDamage(module){if(module.Engineering?.ExperimentalEffect&&getExperimentalEffect(module.Engineering.ExperimentalEffect)?.damageDistribution){return true}return(module.Engineering?.Modifiers??[]).some(modifier=>damageTypeForLabel(modifier.Label)!==null)}function modifierRatio(module,stats,field){const base=stats?.[field];if(typeof base!=="number"||base===0)return 1;const effective=effectiveStat(module,field,stats);return effective===void 0?1:effective/base}function relatedStat(module,stats,field,ratio){const stated=statedModifier(module,field);if(stated!==void 0)return stated;const base=stats?.[field];return typeof base==="number"?base*ratio:void 0}function effectiveModule(module,stats){if(!stats||!module.Engineering)return stats;const merged={...stats};const fields=new Set(Object.keys(stats));for(const modifier of module.Engineering.Modifiers??[]){const field=fieldForLabel(modifier.Label,stats);if(field)fields.add(field)}for(const key of fields){const capability=effectiveCapability(module,key,stats);if(capability!==void 0){merged[key]=capability;continue}const value=effectiveStat(module,key,stats);if(value!==void 0)merged[key]=value}if(stats.engineeringGroup==="thrusters"){const massRatio=modifierRatio(module,stats,"optMass");const minMass=relatedStat(module,stats,"minMass",massRatio);const maxMass=relatedStat(module,stats,"maxMass",massRatio);if(minMass!==void 0)merged.minMass=minMass;if(maxMass!==void 0)merged.maxMass=maxMass}if(stats.engineeringGroup==="thrusters"||stats.engineeringGroup==="shieldGenerators"){const performanceRatio=modifierRatio(module,stats,"optMultiplier");const minMultiplier=relatedStat(module,stats,"minMultiplier",performanceRatio);const maxMultiplier=relatedStat(module,stats,"maxMultiplier",performanceRatio);if(minMultiplier!==void 0)merged.minMultiplier=minMultiplier;if(maxMultiplier!==void 0)merged.maxMultiplier=maxMultiplier;if(stats.engineeringGroup==="thrusters"){for(const field of["minSpeedMultiplier","optSpeedMultiplier","maxSpeedMultiplier","minRotationMultiplier","optRotationMultiplier","maxRotationMultiplier"]){const value=stats[field];if(value!==void 0)merged[field]=value*performanceRatio}}}const damageDistribution=effectiveDamageDistribution(module,stats);if(damageDistribution)merged.damageDistribution=damageDistribution;if(stats.category==="hardpoint")normalizeEffectiveWeapon(module,merged);if(convertsDamage(module)){delete merged.damageComponents}else if(stats.damageComponents){merged.damageComponents=scaleDamageComponents(stats.damageComponents,stats.damage,typeof merged.damage==="number"?merged.damage:void 0)}return merged}function powerConsumerFor(module,stats){const draw=effectiveStat(module,"powerDraw",stats);const parsedSlot=parseSlotName(module.Slot);const mounted=stats?.category==="hardpoint"||stats?.category==="utility";const deployedOnly=stats!==null?mounted&&stats.alwaysPowered!==true:parsedSlot?.kind==="hardpoint"?true:parsedSlot?.kind==="utility"?void 0:false;const common={priority:priorityOf(module),enabled:isEnabled(module),...deployedOnly===void 0?{}:{deployedOnly:deployedOnly},label:module.Slot};if(draw===void 0){const inherentlyPassiveSlot=parsedSlot?.kind==="armour"||parsedSlot?.kind==="core"&&(parsedSlot.core==="powerPlant"||parsedSlot.core==="fuelTank");if(stats!==null||inherentlyPassiveSlot||isNonOutfittingSlot(module.Slot))return null;return{drawUnknown:true,...common}}if(draw===0)return null;return{draw:draw,...common}}function powerAvailable(modules,statsFor){for(const module of modules){const stats=statsFor(module);const isPlant=stats?.slot?stats.slot==="powerPlant":startsWithAny(module.Item,PREFIX.powerPlant);if(!isPlant)continue;if(!isEnabled(module))return 0;return effectiveStat(module,"powerCapacity",stats)??0}return 0}function mapResistanceFields(read){return{kineticResistance:read("kineticResistance")??0,thermalResistance:read("thermalResistance")??0,explosiveResistance:read("explosiveResistance")??0,causticResistance:read("causticResistance")??0}}function resistancesOf(module,stats){return mapResistanceFields(field=>effectiveStat(module,field,stats))}function shieldInputFor(shipSymbol,modules,systemsPips,statsFor){const hull=getShipBySymbol(shipSymbol);let generator=null;const boosters=[];let reinforcement=0;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(!generator&&startsWithAny(module.Item,PREFIX.shieldGenerator)){const massRatio=modifierRatio(module,stats,"optMass");const strengthRatio=modifierRatio(module,stats,"optMultiplier");const optMass=effectiveStat(module,"optMass",stats);const minMass=relatedStat(module,stats,"minMass",massRatio);const maxMass=relatedStat(module,stats,"maxMass",Math.max(1,massRatio));const optMultiplier=effectiveStat(module,"optMultiplier",stats);const minMultiplier=relatedStat(module,stats,"minMultiplier",strengthRatio);const maxMultiplier=relatedStat(module,stats,"maxMultiplier",strengthRatio);generator={...optMass===void 0?{}:{optMass:optMass},...minMass===void 0?{}:{minMass:minMass},...maxMass===void 0?{}:{maxMass:maxMass},...optMultiplier===void 0?{}:{optMultiplier:optMultiplier},...minMultiplier===void 0?{}:{minMultiplier:minMultiplier},...maxMultiplier===void 0?{}:{maxMultiplier:maxMultiplier},...resistancesOf(module,stats)}}else if(startsWithAny(module.Item,PREFIX.shieldBooster)){boosters.push({shieldBoost:effectiveStat(module,"shieldBoost",stats)??0,...resistancesOf(module,stats)})}else if(startsWithAny(module.Item,PREFIX.shieldReinforcement)){reinforcement+=effectiveStat(module,"shieldAddition",stats)??0}}return{hullMass:hull?.hullMass??0,baseShieldStrength:hull?.baseShieldStrength??0,generator:generator,boosters:boosters,reinforcement:reinforcement,systemsPips:systemsPips}}function mobilityInputFor(shipSymbol,modules,mass,enginesPips,statsFor){const hull=getShipBySymbol(shipSymbol);if(!hull)return null;let thrusters=null;for(const module of modules){const stats=statsFor(module);const isThruster=stats?.slot?stats.slot==="thrusters":startsWithAny(module.Item,PREFIX.thrusters);if(!isThruster)continue;if(!isEnabled(module))return null;const effective=effectiveModule(module,stats);const minMass=effective?.minMass;const optMass=effective?.optMass;const maxMass=effective?.maxMass;const minMultiplier=effective?.minMultiplier;const optMultiplier=effective?.optMultiplier;const maxMultiplier=effective?.maxMultiplier;if(minMass===void 0||optMass===void 0||maxMass===void 0||minMultiplier===void 0||optMultiplier===void 0||maxMultiplier===void 0){return null}thrusters={minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:minMultiplier,optMultiplier:optMultiplier,maxMultiplier:maxMultiplier,...effective?.optSpeedMultiplier===void 0?{}:{speedCurve:{minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:effective.minSpeedMultiplier??minMultiplier,optMultiplier:effective.optSpeedMultiplier,maxMultiplier:effective.maxSpeedMultiplier??maxMultiplier}},...effective?.optRotationMultiplier===void 0?{}:{rotationCurve:{minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:effective.minRotationMultiplier??minMultiplier,optMultiplier:effective.optRotationMultiplier,maxMultiplier:effective.maxRotationMultiplier??maxMultiplier}}};break}if(!thrusters)return null;return{minimumSpeed:hull.minimumSpeed,maximumSpeed:hull.maximumSpeed,boost:hull.boost,minPitch:hull.minPitch,pitch:hull.pitch,minRoll:hull.minRoll,roll:hull.roll,minYaw:hull.minYaw,yaw:hull.yaw,mass:typeof mass==="function"?mass():mass,thrusters:thrusters,enginesPips:enginesPips}}function shieldRecoveryInputFor(shipSymbol,modules,systemsPips,statsFor){let generator=null;let distributor=null;for(const module of modules){const stats=statsFor(module);if(!generator&&startsWithAny(module.Item,PREFIX.shieldGenerator)){if(!isEnabled(module))return null;generator=module}if(isPowerDistributor(module,stats)&&isEnabled(module))distributor=module}if(!generator)return null;const generatorStats=statsFor(generator);const distributorStats=distributor?statsFor(distributor):null;const strength=shieldMetrics(shieldInputFor(shipSymbol,modules,0,statsFor)).strength;return{strength:strength,regenRate:effectiveStat(generator,"shieldRegenRate",generatorStats)??0,brokenRegenRate:effectiveStat(generator,"shieldBrokenRegenRate",generatorStats)??0,distributorDraw:effectiveStat(generator,"distributorDraw",generatorStats)??.6,systemsCapacity:distributor?effectiveStat(distributor,"systemsCapacity",distributorStats)??0:0,systemsRecharge:distributor?effectiveStat(distributor,"systemsRecharge",distributorStats)??0:0,systemsPips:systemsPips}}function weaponsCapacitorInputFor(modules,weaponsPips,budget,statsFor){let weaponsCapacity=0;let weaponsRecharge=0;let sustainedEnergyPerSecond=0;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(!poweredStates(module,stats,budget).deployed)continue;if(isPowerDistributor(module,stats)){weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats)??0;weaponsRecharge=effectiveStat(module,"weaponsRecharge",stats)??0}const weapon=weaponStatsFor(module,stats);if(weapon){sustainedEnergyPerSecond+=weaponMetrics(weapon).sustainedEnergyPerSecond}}return{weaponsCapacity:weaponsCapacity,weaponsRecharge:weaponsRecharge,sustainedEnergyPerSecond:sustainedEnergyPerSecond,weaponsPips:weaponsPips}}function distributorInputFor(modules,pips,budget,statsFor){for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(!isPowerDistributor(module,stats))continue;if(!poweredStates(module,stats,budget).retracted)return null;const systemsCapacity=effectiveStat(module,"systemsCapacity",stats);const systemsRecharge=effectiveStat(module,"systemsRecharge",stats);const enginesCapacity=effectiveStat(module,"enginesCapacity",stats);const enginesRecharge=effectiveStat(module,"enginesRecharge",stats);const weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats);const weaponsRecharge=effectiveStat(module,"weaponsRecharge",stats);if(systemsCapacity===void 0||systemsRecharge===void 0||enginesCapacity===void 0||enginesRecharge===void 0||weaponsCapacity===void 0||weaponsRecharge===void 0){return null}return{systemsCapacity:systemsCapacity,systemsRecharge:systemsRecharge,enginesCapacity:enginesCapacity,enginesRecharge:enginesRecharge,weaponsCapacity:weaponsCapacity,weaponsRecharge:weaponsRecharge,...pips}}return null}function heatInputFor(shipSymbol,modules,budget,statsFor){const hull=getShipBySymbol(shipSymbol);if(!hull)return null;let heatEfficiency;let thrusterHeatRate=0;let deployedThrusterHeatRate=0;let fsdHeatRate=0;let weaponsCapacity=0;const weapons=[];for(const module of modules){const stats=statsFor(module);const isPlant=stats?.slot?stats.slot==="powerPlant":startsWithAny(module.Item,PREFIX.powerPlant);if(isPlant){if(!isEnabled(module))return null;heatEfficiency=effectiveStat(module,"heatEfficiency",stats);continue}if(!isEnabled(module))continue;const running=poweredStates(module,stats,budget);if(stats?.slot?stats.slot==="thrusters":startsWithAny(module.Item,PREFIX.thrusters)){const heat=effectiveStat(module,"engineHeatRate",stats)??0;if(running.retracted)thrusterHeatRate+=heat;if(running.deployed)deployedThrusterHeatRate+=heat}else if(stats?.slot?stats.slot==="frameShiftDrive":startsWithAny(module.Item,PREFIX.frameShiftDrive)){if(running.retracted)fsdHeatRate+=effectiveStat(module,"fsdHeatRate",stats)??0}else if(isPowerDistributor(module,stats)){if(running.deployed){weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats)??0}}const weapon=weaponStatsFor(module,stats);if(!weapon||!running.deployed)continue;weapons.push({heatPerSecond:weaponMetrics(weapon).sustainedHeatPerSecond,distributorDraw:weapon.distributorDraw??0})}if(heatEfficiency===void 0)return null;return{heatCapacity:hull.heatCapacity,heatDissipation:hull.heatDissipation,heatEfficiency:heatEfficiency,retractedPowerDraw:poweredDraw(budget,"retracted"),deployedPowerDraw:poweredDraw(budget,"deployed"),thrusterHeatRate:thrusterHeatRate,deployedThrusterHeatRate:deployedThrusterHeatRate,fsdHeatRate:fsdHeatRate,weaponsCapacity:weaponsCapacity,weapons:weapons,unknownDraws:budget.unknownDraws.map(consumer=>consumer.label??"(unnamed module)")}}function poweredDraw(budget,state){const powered=state==="retracted"?"poweredRetracted":"poweredDeployed";return budget.bands.reduce((total,band)=>band[powered]?total+band[state]:total,0)}function poweredStates(module,stats,budget){const draw=effectiveStat(module,"powerDraw",stats);if(draw===void 0||draw===0)return{retracted:true,deployed:true};const band=budget.bands[Math.min(budget.bands.length,Math.max(1,priorityOf(module)))-1];if(!band)return{retracted:true,deployed:true};return{retracted:band.poweredRetracted,deployed:band.poweredDeployed}}function cellBankInputsFor(modules,statsFor){const banks=[];for(const module of modules){if(!startsWithAny(module.Item,PREFIX.shieldCellBank))continue;const effective=effectiveModule(module,statsFor(module));const ammunition=effective?ammunitionCapacity(effective):null;banks.push({slot:module.Slot,symbol:module.Item,reinforcementRate:effective?.shieldBankReinforcement??0,cells:ammunition?.total??0,spinUp:effective?.shieldBankSpinUp??0,duration:effective?.shieldBankDuration??0,heat:effective?.shieldBankHeat??0})}return banks}function stockBulkhead(shipSymbol){const hull=getShipBySymbol(shipSymbol);if(!hull)return null;const variants=getBulkheadsForShip(hull.name,CORE_MODULES);return variants.find(v=>v.symbol.toLowerCase().endsWith("_default"))??variants.find(v=>v.mass===0)??variants[0]??null}function armourInputFor(shipSymbol,modules,statsFor){const hull=getShipBySymbol(shipSymbol);const reinforcements=[];const moduleReinforcements=[];let bulkhead=null;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(module.Slot.toLowerCase()==="armour"){bulkhead={hullBoost:effectiveStat(module,"hullBoost",stats)??0,...resistancesOf(module,stats)}}else if(startsWithAny(module.Item,PREFIX.hullReinforcement)){const boost=getLoadoutModifier(module,"DefenceModifierHealthMultiplier");reinforcements.push({hullReinforcement:effectiveStat(module,"hullReinforcement",stats)??0,hullBoost:boost===null?0:boost/scaleForLabel("DefenceModifierHealthMultiplier"),...resistancesOf(module,stats)})}else if(startsWithAny(module.Item,PREFIX.moduleReinforcement)){moduleReinforcements.push({moduleProtection:effectiveStat(module,"moduleProtection",stats)??0,integrity:effectiveStat(module,"integrity",stats)??0})}}if(!bulkhead){const stock=stockBulkhead(shipSymbol);bulkhead=stock?{hullBoost:stock.hullBoost??0,...mapResistanceFields(field=>stock[field])}:null}return{baseArmour:hull?.baseArmour??0,bulkhead:bulkhead,reinforcements:reinforcements,moduleReinforcements:moduleReinforcements}}var WEAPON_FIELDS=["damage","roundsPerShot","rateOfFire","burstInterval","burstRounds","burstRateOfFire","chargeTime","clipSize","ammoMaximum","reloadTime","distributorDraw","thermalLoad","powerDraw","maximumRange","falloffRange","armourPiercing"];function weaponStatsFor(module,stats){if(!stats||stats.category!=="hardpoint")return null;const weapon={};for(const field of WEAPON_FIELDS){const value=effectiveStat(module,field,stats);if(value!==void 0)weapon[field]=value}normalizeEffectiveWeapon(module,weapon);const damageDistribution=effectiveDamageDistribution(module,stats);if(damageDistribution)weapon.damageDistribution=damageDistribution;if(stats.damageComponents&&!convertsDamage(module)){weapon.damageComponents=scaleDamageComponents(stats.damageComponents,stats.damage,typeof weapon.damage==="number"?weapon.damage:void 0)}if(stats.projectileRange)weapon.projectileRange={...stats.projectileRange};return weapon}function burstAdjustedRateOfFire(module,weapon){if(getLoadoutModifier(module,"RateOfFire")!==null)return void 0;const touched=["BurstSize","BurstRateOfFire","BurstInterval"].some(label=>getLoadoutModifier(module,label)!==null);if(!touched)return void 0;return combinedRateOfFire(weapon)}function normalizeEffectiveWeapon(module,weapon){const rate=burstAdjustedRateOfFire(module,weapon);if(rate!==void 0)weapon.rateOfFire=rate;const statedDamagePerSecond=getLoadoutModifier(module,"DamagePerSecond");const firingFactor=Number(weapon.roundsPerShot??1)*Number(weapon.rateOfFire??1);if(statedDamagePerSecond!==null&&firingFactor>0){weapon.damage=statedDamagePerSecond/firingFactor}const{maximumRange:maximumRange,falloffRange:falloffRange}=weapon;if(maximumRange!==void 0&&falloffRange!==void 0&&falloffRange>maximumRange){weapon.falloffRange=maximumRange}}var CORE_NAMES={powerPlant:"Power Plant",thrusters:"Thrusters",frameShiftDrive:"Frame Shift Drive",lifeSupport:"Life Support",powerDistributor:"Power Distributor",sensors:"Sensors",fuelTank:"Fuel Tank"};var RESTRICTED_OPTIONAL_NAMES={military:"Military Slot",cargo:"Cargo Slot",limpetController:"Limpet Controller Slot",vesselHangar:"Vessel Hangar Slot",passenger:"Passenger Slot"};function trailingDigits(key){let start=key.length;while(start>0){const code=key.charCodeAt(start-1);if(code<48||code>57)break;start--}return start===key.length?null:key.slice(start)}function loadoutSlotName(slot){switch(slot.kind){case"core":return CORE_NAMES[slot.core];case"hardpoint":{const match=/^(Small|Medium|Large|Huge)(Mining)?Hardpoint(\d+)$/.exec(slot.key);if(!match)return slot.key;return`${match[1]}${match[2]?" Mining":""} Hardpoint ${Number(match[3])}`}case"utility":{const match=/^TinyHardpoint(\d+)$/.exec(slot.key);return match?`Utility Mount ${Number(match[1])}`:slot.key}case"optional":{if(slot.restriction==="planetaryApproachSuite")return"Planetary Approach Suite";if(slot.restriction){const numbered=trailingDigits(slot.key);const label=RESTRICTED_OPTIONAL_NAMES[slot.restriction];return label&&numbered?`${label} ${Number(numbered)}`:slot.key}const optional=/^Slot(\d+)_Size(\d+)$/.exec(slot.key);return optional?`Optional Internal ${Number(optional[1])} (Size ${slot.size})`:slot.key}case"armour":return"Armour";case"cargoHatch":return"Cargo Hatch"}}var MILITARY_PREFIXES=["int_hullreinforcement","int_metaalloyhullreinforcement","int_modulereinforcement","int_shieldcellbank","int_guardianhullreinforcement","int_guardianmodulereinforcement","int_guardianshieldreinforcement"];var MINING_PREFIXES=["hpt_mininglaser","hpt_mining_abrblstr","hpt_mining_seismchrgwarhd","hpt_mining_subsurfdispmisle","hpt_human_extraction","hpt_miningtoolv2"];var CARGO_PREFIXES=["int_cargorack","int_largecargorack","int_corrosionproofcargorack","int_fueltank"];var RESTRICTED_SLOT_PREFIXES={mining:MINING_PREFIXES,military:MILITARY_PREFIXES,cargo:CARGO_PREFIXES,limpetController:["int_dronecontrol","int_multidronecontrol"],vesselHangar:["int_fighterbay"],passenger:["int_passengercabin","int_mkii_passengercabin"],planetaryApproachSuite:["int_planetapproachsuite"]};var problem=(constraint,message,params)=>({constraint:constraint,message:message,...params===void 0?{}:{params:params}});function restrictionProblem(slot,symbol){const restriction=slot.restriction;if(!restriction)return null;if(RESTRICTED_SLOT_PREFIXES[restriction].some(prefix=>symbol.startsWith(prefix))){return null}return problem("restrictedMount",`slot only takes ${SLOT_RESTRICTION_LABELS[restriction]}`,{restriction:restriction})}function moduleSlotProblem(slot,module){const required=module.restrictedToSlot;if(!required||slot.restriction===required)return null;return problem("restrictedMount",`module only fits a mount that takes ${SLOT_RESTRICTION_LABELS[required]}`,{restriction:required})}function moduleFitProblem(shipSymbol,slot,module){if(slot.kind==="cargoHatch"){return problem("immutableSlot","the cargoHatch slot cannot be changed")}if(slot.kind==="armour"){const hull=getShipBySymbol(shipSymbol);if(module.slot!=="armour"||module.ship===void 0){return problem("armourRequired","not a ship armour module")}if(!hull||module.ship.toLowerCase()!==hull.name.toLowerCase()){const armourHull=getShipByName(module.ship);return problem("wrongHullArmour",`armour belongs to ${truncate(module.ship)}, not ${truncate(hull?.name??shipSymbol)}`,{armourShipName:module.ship,...armourHull===null?{}:{armourShipSymbol:armourHull.symbol},shipSymbol:shipSymbol,...hull===null?{}:{shipName:hull.name}})}return null}const restricted=module.restrictedToShips;if(restricted&&!restricted.some(symbol2=>symbol2.toLowerCase()===shipSymbol.toLowerCase())){const allowedShipNames=restricted.map(symbol2=>{const hull=getShipBySymbol(symbol2);return hull?.name??symbol2});const labels=restricted.map((symbol2,index)=>{const name=allowedShipNames[index];return name===symbol2?symbol2:`${name} (${symbol2})`});return problem("restrictedHull",`module is restricted to ${truncate(labels.join(", "))}`,{allowedShipNames:allowedShipNames,allowedShipSymbols:[...restricted],shipSymbol:shipSymbol})}const wrongMount=moduleSlotProblem(slot,module);if(wrongMount)return wrongMount;const symbol=module.symbol.toLowerCase();const moduleSlot=module.slot;switch(slot.kind){case"core":if(moduleSlot!==slot.core){return problem("wrongCoreType",`not a ${slot.core} module`,{requiredCore:slot.core,moduleSlot:moduleSlot??"none"})}break;case"hardpoint":{if(module.category!=="hardpoint"){return problem("hardpointRequired","not a hardpoint weapon")}const restricted2=restrictionProblem(slot,symbol);if(restricted2)return restricted2;break}case"utility":if(module.category!=="utility"){return problem("utilityRequired","not a utility module")}return null;case"optional":{const isFuelTank=moduleSlot==="fuelTank";if(module.category!=="internal"&&!isFuelTank){return problem("optionalInternalRequired","not an optional-internal module")}if(moduleSlot&&!isFuelTank){return problem("coreModuleInOptionalSlot","a core module only fits its core slot")}const restricted2=restrictionProblem(slot,symbol);if(restricted2)return restricted2;break}}return module.class>slot.size?problem("oversized",`module size ${truncate(module.class)} exceeds slot size ${slot.size}`,{moduleClass:module.class,slotSize:slot.size}):null}function moduleFitError(shipSymbol,slot,module){return moduleFitProblem(shipSymbol,slot,module)?.message??null}var REBUY_FRACTION=.05;function exportLoadoutEvent(input,options){const fromSource=options.credits==="source";const source=fromSource?input.sourcePurchase:null;const totals=source!==null&&sourceTotalsHold(input.modules,source)?source:null;const hullValue=fromSource?source?.hullValue??null:input.retailHullValue;const modulesValue=fromSource?totals?.modulesValue??null:computedModulesValue(input.modules,input.statsFor);const rebuy=fromSource?totals?.rebuy??null:hullValue===null||modulesValue===null?null:Math.trunc((hullValue+modulesValue)*REBUY_FRACTION);return{event:"Loadout",Ship:input.shipSymbol.toLowerCase(),...input.shipName===void 0?{}:{ShipName:input.shipName},...input.shipIdent===void 0?{}:{ShipIdent:input.shipIdent},...hullValue===null?{}:{HullValue:hullValue},...modulesValue===null?{}:{ModulesValue:modulesValue},...input.unladenMass===null?{}:{UnladenMass:input.unladenMass},...input.cargoCapacity===null?{}:{CargoCapacity:input.cargoCapacity},...input.maxJumpRange===null?{}:{MaxJumpRange:input.maxJumpRange},...input.fuelCapacity===null?{}:{FuelCapacity:{Main:input.fuelCapacity.main,Reserve:input.fuelCapacity.reserve}},...rebuy===null?{}:{Rebuy:rebuy},Modules:exportModules(input,options,fromSource)}}function exportModules(input,options,fromSource){const ordered=options.moduleOrder==="slots"?slotOrderedModules(input.shipSymbol,input.modules,input.layout):[...input.modules.values()];return ordered.map(module=>{const on=module.On??(options.explicitPower?true:void 0);const priority=module.Priority??(options.explicitPower?0:void 0);const value=fromSource?sourceModuleValue(module,input.sourcePurchase):moduleValue(module,input.statsFor);return{Slot:module.Slot,Item:module.Item.toLowerCase(),...on===void 0?{}:{On:on},...priority===void 0?{}:{Priority:priority},...module.Health===void 0?{}:{Health:module.Health},...typeof value==="number"?{Value:value}:{},...module.Engineering===void 0?{}:{Engineering:cloneLoadoutModule(module).Engineering}}})}function slotOrderedModules(shipSymbol,modules,layout){if(!layout){throw new TypeError(`ShipLoadout.toLoadoutEvent: no slot layout for hull "${truncate(shipSymbol)}", so modules cannot be ordered by slot`)}const remaining=new Map(modules);const ordered=[];for(const slot of layout){const key=matchingKeyIn(remaining,slot.key);const module=key===null?void 0:remaining.get(key);if(module&&key!==null){ordered.push(module);remaining.delete(key)}}return[...ordered,...remaining.values()]}function computedModulesValue(modules,statsFor){let sum=0;for(const module of modules.values()){const value=moduleValue(module,statsFor);if(value==="unknown")return null;if(value!=="free")sum+=value}return sum}function moduleValue(module,statsFor){const stats=statsFor(module);if(stats!==null)return stats.cost??"unknown";return isNonOutfittingSlot(module.Slot)||isBuiltInHullModule(module)?"free":"unknown"}var SOURCE_ITEM="ShipLoadout: sourcePurchase moduleValues[].item";function sourceModuleValue(module,source){const entry=source===null?null:getSourceModuleValue(source,module.Slot);if(entry===null)return"unknown";return normalizeKey(entry.item,SOURCE_ITEM)===normalizeKey(module.Item,FITTED_ITEM)?entry.value:"unknown"}function sourceTotalsHold(modules,source){for(const entry of source.moduleValues){const key=matchingKeyIn(modules,entry.slot);const fitted=key===null?void 0:modules.get(key);if(!fitted||normalizeKey(fitted.Item,FITTED_ITEM)!==normalizeKey(entry.item,SOURCE_ITEM)){return false}}return true}function captureLoadoutEvent(event){const modules=event.Modules;const shipName=event.ShipName;const shipIdent=event.ShipIdent;const hullValue=event.HullValue;const modulesValue=event.ModulesValue;const rebuy=event.Rebuy;const unladenMass=event.UnladenMass;const cargoCapacity=event.CargoCapacity;const fuelCapacity=event.FuelCapacity;return{Ship:event.Ship,Modules:Array.isArray(modules)?captureEach(modules,captureModule):modules,...shipName===void 0?{}:{ShipName:shipName},...shipIdent===void 0?{}:{ShipIdent:shipIdent},...hullValue===void 0?{}:{HullValue:hullValue},...modulesValue===void 0?{}:{ModulesValue:modulesValue},...rebuy===void 0?{}:{Rebuy:rebuy},...unladenMass===void 0?{}:{UnladenMass:unladenMass},...cargoCapacity===void 0?{}:{CargoCapacity:cargoCapacity},...fuelCapacity===void 0?{}:{FuelCapacity:{...fuelCapacity}}}}function captureEach(values,capture){const captured=[];const{length:length}=values;for(let index=0;index<length;index++)captured.push(capture(values[index]));return captured}function captureModule(module){if(module===null||typeof module!=="object")return module;const on=module.On;const priority=module.Priority;const health=module.Health;const value=module.Value;const engineering=module.Engineering;return{Slot:module.Slot,Item:module.Item,...on===void 0?{}:{On:on},...priority===void 0?{}:{Priority:priority},...health===void 0?{}:{Health:health},...value===void 0?{}:{Value:value},...engineering===void 0?{}:{Engineering:captureEngineering(engineering)}}}function captureEngineering(engineering){if(engineering===null||typeof engineering!=="object")return engineering;const experimental=engineering.ExperimentalEffect;const experimentalLocalised=engineering.ExperimentalEffect_Localised;const modifiers=engineering.Modifiers;return{BlueprintName:engineering.BlueprintName,Level:engineering.Level,Quality:engineering.Quality,...experimental===void 0?{}:{ExperimentalEffect:experimental},...experimentalLocalised===void 0?{}:{ExperimentalEffect_Localised:experimentalLocalised},...modifiers===void 0?{}:{Modifiers:Array.isArray(modifiers)?captureEach(modifiers,modifier=>modifier!==null&&typeof modifier==="object"?{...modifier}:modifier):modifiers}}}function normalizeLoadoutEvent(rawEvent){const event=captureLoadoutEvent(rawEvent);requireStringIfPresent(event.Ship,"ShipLoadout.fromLoadout: event.Ship");if(!Array.isArray(event.Modules)){throw new TypeError(`ShipLoadout.fromLoadout: event.Modules must be an array, received ${describeValue(event.Modules)}`)}const modules=/* @__PURE__ */new Map;const slots=/* @__PURE__ */new Set;for(const module of event.Modules){if(module===null||typeof module!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: event.Modules[] must hold module objects, received ${describeValue(module)}`)}requireString(module.Slot,"ShipLoadout.fromLoadout: module.Slot");requireString(module.Item,"ShipLoadout.fromLoadout: module.Item");if(module.Engineering!==void 0){if(module.Engineering===null||typeof module.Engineering!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: module.Engineering must be an object, received ${describeValue(module.Engineering)}`)}requireStringIfPresent(module.Engineering.BlueprintName,"ShipLoadout.fromLoadout: module.Engineering.BlueprintName");requireStringIfPresent(module.Engineering.ExperimentalEffect,"ShipLoadout.fromLoadout: module.Engineering.ExperimentalEffect");if(module.Engineering.Modifiers!==void 0&&!Array.isArray(module.Engineering.Modifiers)){throw new TypeError(`ShipLoadout.fromLoadout: module.Engineering.Modifiers must be an array, received ${describeValue(module.Engineering.Modifiers)}`)}for(const[index,modifier]of(module.Engineering.Modifiers??[]).entries()){if(modifier===null||typeof modifier!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: module.Engineering.Modifiers[${index}] must be an object, received ${describeValue(modifier)}`)}requireString(modifier.Label,`ShipLoadout.fromLoadout: module.Engineering.Modifiers[${index}].Label`)}}const normalizedSlot=module.Slot.toLowerCase();if(slots.has(normalizedSlot)){throw new TypeError(`ShipLoadout.fromLoadout: duplicate slot "${truncate(module.Slot)}"`)}slots.add(normalizedSlot);modules.set(module.Slot,cloneLoadoutModule(module))}const top={};if(event.ShipName!==void 0)top.ShipName=event.ShipName;if(event.ShipIdent!==void 0)top.ShipIdent=event.ShipIdent;if(event.HullValue!==void 0)top.HullValue=event.HullValue;if(event.ModulesValue!==void 0)top.ModulesValue=event.ModulesValue;if(event.Rebuy!==void 0)top.Rebuy=event.Rebuy;if(event.UnladenMass!==void 0)top.UnladenMass=event.UnladenMass;if(event.CargoCapacity!==void 0)top.CargoCapacity=event.CargoCapacity;if(event.FuelCapacity!==void 0)top.FuelCapacity={...event.FuelCapacity};const moduleStats=/* @__PURE__ */new Map;for(const module of modules.values()){const engineering=module.Engineering;const variant=identifyPreEngineeredVariant(module);const variantStats=variant?getPreEngineeredStats(variant):null;if(variantStats)moduleStats.set(module.Slot,cloneModuleStats(variantStats));if(variantStats?.engineeringLocked||typeof engineering?.BlueprintName!=="string"||!isFinalGuardianWeaponEngineering(module.Item,engineering.BlueprintName)){continue}const normalizedBlueprint=normalizeKey(engineering.BlueprintName,"ShipLoadout.fromLoadout: module.Engineering.BlueprintName");const normalizedExperimental=normalizeKey(engineering.ExperimentalEffect,"ShipLoadout.fromLoadout: module.Engineering.ExperimentalEffect");const exact=getPreEngineeredVariants(module.Item).find(candidate=>candidate.blueprint.toLowerCase()===normalizedBlueprint&&candidate.grade===engineering.Level&&candidate.experimental?.toLowerCase()===normalizedExperimental);const stats=exact?getPreEngineeredStats(exact):builtInModuleBySymbol(module.Item,"ShipLoadout.fromLoadout: module.Item");if(stats){moduleStats.set(module.Slot,cloneModuleStats({...stats,engineeringLocked:true}))}}return{shipSymbol:event.Ship,modules:modules,moduleStats:moduleStats,top:top,sourcePurchase:sourcePurchaseFromLoadout(event)}}var SLOT_KEY="ShipLoadout: slotKey";var requireLoadOptions=(scope,options)=>{for(const field of["fuel","cargo"]){const value=options[field];if(value!==void 0&&(!Number.isFinite(value)||value<0)){throw new RangeError(`${scope}: ${field} must be a finite non-negative number`)}}};var LoadoutEditError=class extends TypeError{code;constraint;params;constructor(message,code,params,constraint){super(message);this.code=code;this.params=deepFreeze(Object.fromEntries(Object.entries(params).map(([key,value])=>[key,Array.isArray(value)?[...value]:value])));if(constraint!==void 0)this.constraint=constraint}};var FSD_PREFIX="int_hyperdrive";var BOOSTER_PREFIX="int_guardianfsdbooster";var FUEL_TANK_PREFIX="int_fueltank";var ShipLoadout=class _ShipLoadout{#shipSymbol;#modules;#moduleStats;#primitiveModifiers=/* @__PURE__ */new Map;#top;#sourcePurchase;#version=0;#viewVersion=0;#layoutCache;#calculationCache=null;#validationCache=null;#fittedModuleCache=null;#slotCache=null;constructor(shipSymbol,modules,top,sourcePurchase=null,moduleStats=/* @__PURE__ */new Map){this.#shipSymbol=shipSymbol;this.#modules=modules;this.#top=top;this.#sourcePurchase=sourcePurchase;this.#moduleStats=moduleStats}static fromSlef(input,index=0){const entries=parseSlef(input);const entry=entries[index];if(!entry){throw new TypeError(`ShipLoadout.fromSlef: no entry at index ${truncate(index)} (have ${entries.length})`)}return _ShipLoadout.fromLoadout(entry.data)}static fromLoadout(event){if(event===null||typeof event!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: event must be a Loadout event, received ${describeValue(event)}`)}const imported=normalizeLoadoutEvent(event);return new _ShipLoadout(imported.shipSymbol,imported.modules,imported.top,imported.sourcePurchase,imported.moduleStats)}static empty(shipSymbol){const layout=getShipSlots(requireString(shipSymbol,"ShipLoadout.empty: shipSymbol"));if(!layout){throw new TypeError(`ShipLoadout.empty: no slot layout for hull "${truncate(shipSymbol)}"`)}return new _ShipLoadout(layout.symbol,/* @__PURE__ */new Map,{})}static default(shipSymbol){const requested=requireString(shipSymbol,"ShipLoadout.default: shipSymbol");const loadout=getDefaultLoadout(requested);if(!loadout){throw new TypeError(`ShipLoadout.default: no default loadout for hull "${truncate(shipSymbol)}"`)}return new _ShipLoadout(loadout.symbol,new Map(loadout.modules.map(module=>[module.slot,{Slot:module.slot,Item:module.symbol}])),{})}get shipSymbol(){return this.#shipSymbol}get shipName(){return this.#top.ShipName??null}get shipIdent(){return this.#top.ShipIdent??null}get unladenMass(){return this.unladenMassResult.value}get unladenMassResult(){return this.#top.UnladenMass===void 0?this.#computedUnladenMass():completeResult(this.#top.UnladenMass)}#computedUnladenMass(){return calculateUnladenMass(getShipBySymbol(this.#shipSymbol)?.hullMass??null,this.#calculationModules())}get fuelCapacity(){return this.fuelCapacityResult.value}get fuelCapacityResult(){const cap=this.#top.FuelCapacity;if(cap?.Main!==void 0&&cap.Reserve!==void 0){return completeResult(Object.freeze({main:cap.Main,reserve:cap.Reserve}))}const computed=this.#computedFuelCapacity();if(computed.value===null)return computed;return completeResult(Object.freeze({main:cap?.Main??computed.value.main,reserve:cap?.Reserve??computed.value.reserve}))}get cargoCapacity(){return this.cargoCapacityResult.value}get cargoCapacityResult(){return this.#top.CargoCapacity===void 0?this.#computedCargoCapacity():completeResult(this.#top.CargoCapacity)}#computedCargoCapacity(){return calculateCargoCapacity(this.#calculationModules())}#computedFuelCapacity(){return calculateFuelCapacity(getShipBySymbol(this.#shipSymbol)?.reserveFuelCapacity??null,this.#calculationModules())}get hullValue(){return this.#top.HullValue??null}get modulesValue(){return this.#top.ModulesValue??null}get rebuy(){return this.#top.Rebuy??null}get sourcePurchase(){return this.#sourcePurchase}get validation(){const cached=this.#validationCache;if(cached!==null&&cached.version===this.#version)return cached.value;const slots=this.#layoutOrNull();const byKey=new Map(slots?.map(slot=>[slot.key.toLowerCase(),slot])??[]);const modules=[...this.#modules.values()].map(module=>{const stats=this.#statsFor(module);const slot=byKey.get(module.Slot.toLowerCase());const builtIn=stats===null&&isNonOutfittingSlot(module.Slot)||isBuiltInHullModule(module);const fitProblem=stats&&slot&&!builtIn?moduleFitProblem(this.#shipSymbol,slot,stats):null;return{slot:module.Slot,symbol:module.Item,known:stats!==null||builtIn,requiresKnownSlot:!builtIn,fitError:fitProblem?.message??null,...fitProblem===null?{}:{fitConstraint:fitProblem.constraint},...fitProblem?.params===void 0?{}:{fitParams:fitProblem.params},...stats?.exclusionGroup===void 0?{}:{exclusionGroup:stats.exclusionGroup},...stats?.limitGroup===void 0?{}:{limitGroup:stats.limitGroup},...stats?.limitIncrease===void 0?{}:{limitIncrease:stats.limitIncrease}}});const value=validateLoadout({shipSymbol:this.#shipSymbol,slots:slots,modules:modules});this.#validationCache={version:this.#version,value:value};return value}slots(kind){let cached=this.#slotCache;if(cached===null||cached.version!==this.#viewVersion){cached={version:this.#viewVersion,value:/* @__PURE__ */new Map};this.#slotCache=cached}const existing=cached.value.get(kind);if(existing!==void 0)return existing;const slots=kind===void 0?this.#layout():this.#layout().filter(slot=>slot.kind===kind);const currentLimits=this.#moduleLimits();const value=deepFreeze(slots.map(slot=>{const stats=this.#moduleStatsAt(slot.key);const immovableReason=slot.key.toLowerCase()==="cargohatch"?"cargoHatch":stats?.limitIncrease!==void 0&&this.#moduleLimitRegression(slot.key,null,currentLimits,stats)!==null?"moduleLimit":null;return{...slot,name:loadoutSlotName(slot),module:this.fittedModuleAt(slot.key),removable:immovableReason===null,...immovableReason===null?{}:{immovableReason:immovableReason}}}));cached.value.set(kind,value);return value}fittedModuleAt(slotKey){const module=this.#fittedModuleFor(slotKey);if(!module)return null;let cached=this.#fittedModuleCache;if(cached===null||cached.version!==this.#viewVersion){cached={version:this.#viewVersion,value:/* @__PURE__ */new Map};this.#fittedModuleCache=cached}const existing=cached.value.get(module.Slot);if(existing!==void 0)return existing;const raw=cloneLoadoutModule(module);const stats=this.#statsFor(module);const effective=effectiveModule(this.#moduleForEffectiveStats(module),stats);const value=deepFreeze({slot:module.Slot,symbol:raw.Item,on:raw.On,priority:raw.Priority,health:raw.Health,value:raw.Value,engineering:raw.Engineering,raw:raw,stats:stats===null?null:cloneModuleStats(stats),effectiveStats:effective===null?null:cloneModuleStats(effective),ammunition:ammunitionCapacity(effective),preEngineeredVariant:identifyPreEngineeredVariant(raw)});cached.value.set(module.Slot,value);return value}fittedModules(){return deepFreeze([...this.#modules.keys()].flatMap(key=>{const fitted=this.fittedModuleAt(key);return fitted===null?[]:[fitted]}))}availableBlueprints(slotKey){const module=this.#fittedModuleFor(slotKey);return deepFreeze(module?availableBlueprintsFor(module.Item,this.#statsFor(module)):[])}availableExperimentalEffects(slotKey){const module=this.#fittedModuleFor(slotKey);return deepFreeze(module?availableExperimentalsFor(module.Item,this.#statsFor(module)):[])}modulesForSlot(slotKey){const slot=this.#requireSlot(slotKey);const occupied=new Set([...this.#modules.values()].flatMap(fitted=>{if(fitted.Slot.toLowerCase()===slot.key.toLowerCase())return[];const group=this.#statsFor(fitted)?.exclusionGroup;return group===void 0?[]:[group]}));const currentLimits=this.#moduleLimits();const currentStats=this.#moduleStatsAt(slot.key);return ALL_MODULES.filter(module=>moduleFitError(this.#shipSymbol,slot,module)===null&&(module.exclusionGroup===void 0||!occupied.has(module.exclusionGroup))&&this.#moduleLimitRegression(slot.key,module,currentLimits,currentStats)===null)}setModule(slotKey,module){const slot=this.#requireSlot(slotKey);if(module===null||module===void 0){throw new TypeError(`ShipLoadout.setModule: no module supplied for "${truncate(slotKey)}" (did the module lookup return undefined?)`)}if(typeof module.symbol!=="string"){throw new TypeError(`ShipLoadout.setModule: module for "${truncate(slotKey)}" must be an outfitting module, received ${describeValue(module)}`)}const problem2=moduleFitProblem(this.#shipSymbol,slot,module);if(problem2){if(problem2.constraint==="immutableSlot"){throw new LoadoutEditError(`ShipLoadout.setModule: ${truncate(module.symbol)} → ${truncate(slotKey)}: ${problem2.message}`,"immutableSlot",{slot:slot.key})}throw new LoadoutEditError(`ShipLoadout.setModule: ${truncate(module.symbol)} → ${truncate(slotKey)}: ${problem2.message}`,"incompatibleModule",{...problem2.params,slot:slot.key,symbol:module.symbol,constraint:problem2.constraint},problem2.constraint)}if(module.exclusionGroup!==void 0){const conflict=[...this.#modules.values()].find(fitted=>fitted.Slot.toLowerCase()!==slot.key.toLowerCase()&&this.#statsFor(fitted)?.exclusionGroup===module.exclusionGroup);if(conflict){throw new LoadoutEditError(`ShipLoadout.setModule: ${truncate(module.symbol)} → ${truncate(slotKey)}: ${module.exclusionGroup} is limited to one per ship (already fitted in ${truncate(conflict.Slot)})`,"duplicateExclusiveModule",{exclusionGroup:module.exclusionGroup,slot:slot.key,symbol:module.symbol,previousSlot:conflict.Slot,previousSymbol:conflict.Item})}}const limitProblem=this.#moduleLimitRegression(slot.key,module);if(limitProblem!==null){throw new LoadoutEditError(`ShipLoadout.setModule: ${truncate(module.symbol)} → ${truncate(slotKey)}: ${limitProblem.group} would have ${limitProblem.count} modules but the ship allows ${limitProblem.limit}`,"moduleLimitExceeded",{group:limitProblem.group,count:limitProblem.count,limit:limitProblem.limit,slot:slot.key,symbol:module.symbol})}const key=this.#fittedKey(slotKey)??slot.key;this.#replaceModule(key,{Slot:key,Item:module.symbol},cloneModuleStats(module));return this}removeModule(slotKey){if(requireString(slotKey,SLOT_KEY).toLowerCase()==="cargohatch"){throw new LoadoutEditError("ShipLoadout.removeModule: the cargoHatch slot cannot be changed","immutableSlot",{slot:"CargoHatch"})}const key=this.#fittedKey(slotKey);if(key!==null){const limitProblem=this.#moduleLimitRegression(key,null);if(limitProblem!==null){const fitted=this.#modules.get(key);throw new LoadoutEditError(`ShipLoadout.removeModule: ${truncate(slotKey)}: ${limitProblem.group} would have ${limitProblem.count} modules but the ship allows ${limitProblem.limit}`,"moduleLimitExceeded",{group:limitProblem.group,count:limitProblem.count,limit:limitProblem.limit,slot:key,...fitted===void 0?{}:{symbol:fitted.Item}})}this.#replaceModule(key,null)}return this}applyBlueprint(slotKey,fdname,options){requireString(fdname,"ShipLoadout.applyBlueprint: fdname");if(options===null||typeof options!=="object"){throw new TypeError(`ShipLoadout.applyBlueprint: options must be an object with a grade, received ${describeValue(options)}`)}const wantedGrade=options.grade;const wantedQuality=options.quality;const wantedExperimental=options.experimental??void 0;requireStringIfPresent(wantedExperimental,"ShipLoadout.applyBlueprint: options.experimental");const module=this.#fittedModuleFor(slotKey);if(!module){throw new RangeError(`ShipLoadout.applyBlueprint: slot "${truncate(slotKey)}" is empty`)}const fittedStats=this.#statsFor(module);if(!fittedStats){throw new TypeError(`ShipLoadout.applyBlueprint: no stats for module "${truncate(module.Item)}"`)}const recipe=resolveBlueprintForModule(module.Item,fdname);const named=recipe===fdname?`"${truncate(fdname)}"`:`"${truncate(fdname)}" (${truncate(recipe)} on this module)`;const written=fdname.trim().toLowerCase();const resolved=recipe.trim().toLowerCase();if(getPreEngineeredVariants(module.Item).some(variant=>variant.acquisition==="eventReward"&&(variant.blueprint.toLowerCase()===written||variant.blueprint.toLowerCase()===resolved))){throw new TypeError(`ShipLoadout.applyBlueprint: ${named} is a fixed pre-engineered identity, not a craftable blueprint; use setPreEngineeredVariant to fit its fixed article`)}if(!Number.isInteger(wantedGrade)||wantedGrade<1||wantedGrade>5){throw new RangeError(`ShipLoadout.applyBlueprint: no blueprint ${named} grade ${truncate(wantedGrade)}`)}const grade=getBlueprintGrade(recipe,wantedGrade);if(!grade){throw new RangeError(`ShipLoadout.applyBlueprint: no blueprint ${named} grade ${truncate(wantedGrade)}`)}let experimental;if(wantedExperimental!==void 0){experimental=getExperimentalEffect(wantedExperimental);if(!experimental){throw new RangeError(`ShipLoadout.applyBlueprint: unknown experimental effect "${truncate(wantedExperimental)}"`)}}const quality=wantedQuality??1;if(!Number.isFinite(quality)||quality<0||quality>1){throw new RangeError(`ShipLoadout.applyBlueprint: quality must be a finite number in [0, 1]`)}if(fittedStats.engineeringLocked){throw new TypeError(`ShipLoadout.applyBlueprint: module "${truncate(module.Item)}" is a final pre-engineered article and accepts no further engineering`)}if(!blueprintAvailableFor(module.Item,fdname)){const offered=[...blueprintRoutesFor(module.Item)].map(([blueprint,route])=>`${blueprint} (${route})`);throw new TypeError(offered.length>0?`ShipLoadout.applyBlueprint: module "${truncate(module.Item)}" is not offered blueprint ${named}; available candidates are ${offered.join(", ")}`:`ShipLoadout.applyBlueprint: no registry lists an engineering menu for module "${truncate(module.Item)}"`)}if(wantedExperimental!==void 0&&!experimentalAvailableFor(module.Item,wantedExperimental)){const offered=getExperimentalsForModule(module.Item);throw new TypeError(`ShipLoadout.applyBlueprint: module "${truncate(module.Item)}" is not offered experimental effect "${truncate(wantedExperimental)}"; it takes ${offered.length>0?offered.join(", "):"no experimental effect"}`)}const stats=this.#engineeringBaseStats(module)??fittedStats;const base=baseStats(stats);const canonical=primitiveEngineeringInputsFor(stats,grade,experimental);const missing=missingBaseLabels(stats,base,canonical.grade.features,canonical.experimental?.modifiers);if(missing.length>0){throw new TypeError(`ShipLoadout.applyBlueprint: cannot compute ${named} for module "${truncate(module.Item)}"; missing base stats for ${missing.join(", ")}`)}const damageDistribution=experimental?.damageDistribution??grade.damageDistribution;const primitiveModifiers=computeModifiers(base,canonical.grade,quality,canonical.experimental);const modifiers=journalModifiersFor(stats,primitiveModifiers);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;const damageModifier={Label:label,Value:value*scaleForLabel(label),OriginalValue:(stats.damageDistribution?.[type]??0)*scaleForLabel(label)};modifiers.push(damageModifier);primitiveModifiers.push(damageModifier)}}const engineering={BlueprintName:fdname,Level:wantedGrade,Quality:quality,...wantedExperimental!==void 0?{ExperimentalEffect:wantedExperimental}:{},Modifiers:modifiers};this.#replaceModule(module.Slot,{...module,Engineering:engineering},stats,primitiveModifiers);return this}setPreEngineeredVariant(slotKey,variant){if(variant===null||typeof variant!=="object"){throw new TypeError(`ShipLoadout.setPreEngineeredVariant: variant must be a pre-engineered variant, received ${describeValue(variant)}`)}requireString(variant.symbol,"ShipLoadout.setPreEngineeredVariant: variant.symbol");requireString(variant.blueprint,"ShipLoadout.setPreEngineeredVariant: variant.blueprint");requireString(variant.acquisition,"ShipLoadout.setPreEngineeredVariant: variant.acquisition");requireStringIfPresent(variant.experimental,"ShipLoadout.setPreEngineeredVariant: variant.experimental");const known=getPreEngineeredVariants(variant.symbol).find(candidate=>candidate.blueprint.toLowerCase()===variant.blueprint.toLowerCase()&&candidate.grade===variant.grade&&(candidate.experimental?.toLowerCase()??"")===(variant.experimental?.toLowerCase()??"")&&candidate.acquisition===variant.acquisition);if(!known){throw new RangeError(`ShipLoadout.setPreEngineeredVariant: no catalogued variant "${truncate(variant.blueprint)}" for module "${truncate(variant.symbol)}"`)}const stats=getPreEngineeredStats(known);const unresolved=unresolvedModifiers(known);if(unresolved.length>0){throw new TypeError(`ShipLoadout.setPreEngineeredVariant: cannot resolve "${truncate(variant.blueprint)}" for module "${truncate(variant.symbol)}"; missing base stats for ${unresolved.join(", ")}`)}this.setModule(slotKey,stats);const module=this.#fittedModuleFor(slotKey);const engineering={BlueprintName:known.blueprint,Level:known.grade,Quality:1,...known.experimental===void 0?{}:{ExperimentalEffect:known.experimental},...known.modifiers?.length?{Modifiers:getPreEngineeredJournalModifiers(known)}:{}};this.#replaceModule(module.Slot,{...module,Engineering:engineering},cloneModuleStats(stats),getPreEngineeredModifiers(known));return this}clearEngineering(slotKey){const module=this.#fittedModuleFor(slotKey);if(module&&this.#statsFor(module)?.engineeringLocked){throw new TypeError(`ShipLoadout.clearEngineering: module "${truncate(module.Item)}" is a final pre-engineered article and its engineering cannot be removed`)}if(module?.Engineering){const baseStats2=this.#engineeringBaseStats(module);const bare={Slot:module.Slot,Item:module.Item};if(module.On!==void 0)bare.On=module.On;if(module.Priority!==void 0){bare.Priority=module.Priority}if(module.Health!==void 0)bare.Health=module.Health;if(module.Value!==void 0)bare.Value=module.Value;this.#replaceModule(module.Slot,bare,baseStats2??void 0)}return this}setModuleEnabled(slotKey,on){this.#patchModule(slotKey,{On:on});return this}setModulePriority(slotKey,priority){if(!Number.isInteger(priority)||priority<0||priority>4){throw new RangeError(`ShipLoadout: power priority must be an integer 0-4, got ${truncate(priority)}`)}this.#patchModule(slotKey,{Priority:priority});return this}#patchModule(slotKey,patch){const module=this.#fittedModuleFor(slotKey);if(!module){throw new RangeError(`ShipLoadout: slot "${truncate(slotKey)}" is empty`)}this.#modules.set(module.Slot,cloneLoadoutModule({...module,...patch}));this.#viewVersion++}toLoadoutEvent(options={}){const hull=getShipBySymbol(this.#shipSymbol);const unladenMass=this.#computedUnladenMass().value;const cargoCapacity=this.#computedCargoCapacity().value;const fuel=this.#computedFuelCapacity().value;const maxJumpRange=this.#exportableJumpRange(unladenMass);return exportLoadoutEvent({shipSymbol:this.#shipSymbol,...this.#top.ShipName===void 0?{}:{shipName:this.#top.ShipName},...this.#top.ShipIdent===void 0?{}:{shipIdent:this.#top.ShipIdent},modules:this.#modules,...options.moduleOrder==="slots"?{layout:this.#layoutOrNull()}:{},sourcePurchase:this.#sourcePurchase,retailHullValue:hull?.hullCost??null,unladenMass:unladenMass,cargoCapacity:cargoCapacity,fuelCapacity:fuel,maxJumpRange:maxJumpRange,statsFor:module=>this.#statsFor(module)},options)}toSlef(options){return toSlef(this.toLoadoutEvent(options),options.header)}toSlefString(options){return stringifySlef(this.toSlef(options),{indent:options.indent??0})}#exportableJumpRange(unladenMass){if(unladenMass===null)return null;let drive;try{drive=this.#resolveDrive()}catch{return null}if(drive===null)return null;const tank=this.#computedFuelCapacity().value;if(tank===null)return null;return singleJumpRange(unladenMass,Math.min(tank.main,drive.maxFuel),drive)}get frameShiftDrive(){const drive=this.#resolveDrive();if(drive===null)throw new TypeError("ShipLoadout: build has no frame shift drive");return drive}#maxJumpFuel(fsd){return Math.min(this.#requireFuelCapacity().main,fsd.maxFuel)}frameShiftDriveMassFactor(options={}){requireLoadOptions("ShipLoadout.frameShiftDriveMassFactor",options);const fuel=options.fuel??this.#requireFuelCapacity().main;return frameShiftDriveMassFactor(this.#requireMass(options.cargo??0),fuel,this.frameShiftDrive)}maxJumpRange(){const fsd=this.frameShiftDrive;return singleJumpRange(this.#requireMass(0),this.#maxJumpFuel(fsd),fsd)}jumpRange(options={}){requireLoadOptions("ShipLoadout.jumpRange",options);const fsd=this.frameShiftDrive;const fuel=options.fuel??this.#requireFuelCapacity().main;return singleJumpRange(this.#requireMass(options.cargo??0),fuel,fsd)}ladenJumpRange(){return this.jumpRange({cargo:this.#requireCargoCapacity()})}fuelPerJump(distance,options={}){requireLoadOptions("ShipLoadout.fuelPerJump",options);const fsd=this.frameShiftDrive;const fuel=options.fuel??this.#requireFuelCapacity().main;return fuelPerJump(distance,this.#requireMass(options.cargo??0),fuel,fsd)}totalRange(options={}){requireLoadOptions("ShipLoadout.totalRange",options);return totalRange(this.#requireMass(options.cargo??0),options.fuel??this.#requireFuelCapacity().main,this.frameShiftDrive)}jumpRangeSummary(){const cargo=this.#requireCargoCapacity();const fsd=this.frameShiftDrive;const maxFuel=this.#maxJumpFuel(fsd);return{max:this.maxJumpRange(),unladen:this.jumpRange(),laden:this.jumpRange({cargo:cargo}),totalMax:this.totalRange({fuel:maxFuel}),totalUnladen:this.totalRange(),totalLaden:this.totalRange({cargo:cargo})}}powerBudget(){const modules=[...this.#modules.values()];const consumers=[];for(const module of modules){const consumer=powerConsumerFor(module,this.#statsFor(module));if(consumer)consumers.push(consumer)}return powerBudget(powerAvailable(modules,module=>this.#statsFor(module)),consumers)}heatMetrics(){const input=heatInputFor(this.#shipSymbol,this.#modulesForEffectiveStats(),this.powerBudget(),module=>this.#statsFor(module));return input?heatMetrics(input):null}mobilityMetrics(options={}){const enginesPips=options.enginesPips??4;if(!Number.isFinite(enginesPips)||enginesPips<0||enginesPips>4){throw new RangeError("ShipLoadout.mobilityMetrics: enginesPips must be a finite number from 0 to 4")}requireLoadOptions("ShipLoadout.mobilityMetrics",options);const input=mobilityInputFor(this.#shipSymbol,[...this.#modules.values()],()=>{const main=options.fuel??this.#top.FuelCapacity?.Main??this.#requireFuelCapacity().main;return this.#requireMass(options.cargo??0)+main},enginesPips,module=>this.#statsFor(module));return input?mobilityMetrics(input):null}shieldMetrics(options={}){const input=shieldInputFor(this.#shipSymbol,[...this.#modules.values()],options.systemsPips??0,module=>this.#statsFor(module));if(!input.generator)return null;return shieldMetrics(input)}shieldRecovery(options={}){const systemsPips=options.systemsPips??4;if(!Number.isFinite(systemsPips)||systemsPips<0||systemsPips>4){throw new RangeError("ShipLoadout.shieldRecovery: systemsPips must be a finite number from 0 to 4")}const input=shieldRecoveryInputFor(this.#shipSymbol,[...this.#modules.values()],systemsPips,module=>this.#statsFor(module));return input?shieldRecovery(input):null}cellBanks(){const banks=cellBankInputsFor([...this.#modules.values()],module=>this.#statsFor(module));const layout=this.#layoutOrNull();if(layout){const order=new Map(layout.map((slot,index)=>[slot.key.toLowerCase(),index]));banks.sort((left,right)=>(order.get(left.slot.toLowerCase())??Number.MAX_SAFE_INTEGER)-(order.get(right.slot.toLowerCase())??Number.MAX_SAFE_INTEGER))}return cellBankSummary(banks)}retailCredits(){const hull=getShipBySymbol(this.#shipSymbol)?.hullCost??null;let modules=0;const unpriced=[];for(const module of this.#modules.values()){const stats=this.#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})}}return deepFreeze({hull:hull,modules:modules,rebuy:hull===null?null:Math.trunc((hull+modules)*.05),unpriced:unpriced})}armourMetrics(){return armourMetrics(armourInputFor(this.#shipSymbol,[...this.#modules.values()],module=>this.#statsFor(module)))}weaponMetrics(){const weapons=[];for(const module of this.#modules.values()){const record=this.#statsFor(module);const stats=weaponStatsFor(this.#moduleForEffectiveStats(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)})}return{weapons:weapons,total:sumWeaponMetrics(weapons.filter(weapon=>weapon.enabled).map(weapon=>weapon.metrics))}}weaponsCapacitorMetrics(options={}){const weaponsPips=options.weaponsPips??4;if(!Number.isFinite(weaponsPips)||weaponsPips<0||weaponsPips>4){throw new RangeError("ShipLoadout.weaponsCapacitorMetrics: weaponsPips must be a finite number from 0 to 4")}return weaponsCapacitorMetrics(weaponsCapacitorInputFor(this.#modulesForEffectiveStats(),weaponsPips,this.powerBudget(),module=>this.#statsFor(module)))}distributorMetrics(options={}){const pips={systemsPips:options.systemsPips??4,enginesPips:options.enginesPips??4,weaponsPips:options.weaponsPips??4};for(const field of["systemsPips","enginesPips","weaponsPips"]){const value=pips[field];if(!Number.isFinite(value)||value<0||value>4){throw new RangeError(`ShipLoadout.distributorMetrics: ${field} must be a finite number from 0 to 4`)}}const input=distributorInputFor(this.#modulesForEffectiveStats(),pips,this.powerBudget(),module=>this.#statsFor(module));return input?distributorMetrics(input):null}#layoutOrNull(){if(this.#layoutCache===void 0){const layout=getShipSlots(this.#shipSymbol);this.#layoutCache=layout===null?null:Object.freeze(enumerateSlots(layout))}return this.#layoutCache}#invalidate(){this.#version++;this.#viewVersion++}#layout(){const layout=this.#layoutOrNull();if(!layout){throw new TypeError(`ShipLoadout: no slot layout for hull "${truncate(this.#shipSymbol)}"`)}return layout}#requireSlot(slotKey){const wanted=requireString(slotKey,SLOT_KEY).toLowerCase();const slot=this.#layout().find(s=>s.key.toLowerCase()===wanted);if(!slot){throw new RangeError(`ShipLoadout: hull "${truncate(this.#shipSymbol)}" has no slot "${truncate(slotKey)}"`)}return slot}#fittedKey(slotKey){return matchingKeyIn(this.#modules,requireString(slotKey,SLOT_KEY))}#fittedModuleFor(slotKey){const key=this.#fittedKey(slotKey);return key===null?void 0:this.#modules.get(key)}#require(result,what){if(result.value===null){throw new TypeError(`ShipLoadout: cannot determine ${what} (${result.issues.map(i=>i.message).join("; ")})`)}return result.value}#requireMass(cargo){return this.#require(this.unladenMassResult,"mass")+cargo}#requireFuelCapacity(){return this.#require(this.fuelCapacityResult,"fuel capacity")}#requireCargoCapacity(){return this.#require(this.cargoCapacityResult,"cargo capacity")}#calculationModules(){const cached=this.#calculationCache;if(cached!==null&&cached.version===this.#version)return cached.value;const value=this.#resolveCalculationModules();this.#calculationCache={version:this.#version,value:value};return value}#resolveCalculationModules(){return[...this.#modules.values()].map(module=>{const stats=this.#statsFor(module);const symbol=module.Item.toLowerCase();const parsedSlot=parseSlotName(module.Slot);const unresolvedOutfitting=stats===null&&!isNonOutfittingSlot(module.Slot)&&!isBuiltInHullModule(module);const isCargoRack=stats?.cargoCapacity!==void 0||stats?.engineeringGroup==="cargoRacks"||symbol.includes("cargorack");const isFuelTank=stats?.fuelCapacity!==void 0||stats?.slot==="fuelTank"||symbol.startsWith(FUEL_TANK_PREFIX);const mayCarryCapacity=unresolvedOutfitting&&(parsedSlot===null||parsedSlot.kind==="optional");const mayCarryFuel=mayCarryCapacity||unresolvedOutfitting&&parsedSlot?.kind==="core"&&parsedSlot.core==="fuelTank";return{slot:module.Slot,symbol:module.Item,mass:this.#moduleMass(module),...isCargoRack||mayCarryCapacity?{cargoCapacity:isCargoRack?this.#moduleCapacity(module,"CargoCapacity","cargoCapacity"):null}:{},...isFuelTank||mayCarryFuel?{fuelCapacity:isFuelTank?this.#moduleCapacity(module,"FuelCapacity","fuelCapacity"):null}:{}}})}#moduleLimits(){const entries=[...this.#modules.values()].flatMap(module=>{const stats=this.#statsFor(module);return stats===null?[]:[stats]});return calculateModuleLimits(entries)}#moduleStatsAt(slotKey){const fitted=this.#fittedModuleFor(slotKey);return fitted===void 0?null:this.#statsFor(fitted)}#engineeringBaseStats(module){const fitted=this.#statsFor(module);if(!module.Engineering||identifyPreEngineeredVariant(module)===null)return fitted;const stock=builtInModuleBySymbol(module.Item,FITTED_ITEM);if(!stock)return fitted;return fitted?.engineeringLocked?cloneModuleStats({...stock,engineeringLocked:true}):stock}#moduleForEffectiveStats(module){const modifiers=this.#primitiveModifiers.get(module.Slot);if(modifiers===void 0||module.Engineering===void 0)return module;return{...module,Engineering:{...module.Engineering,Modifiers:modifiers}}}#modulesForEffectiveStats(){return[...this.#modules.values()].map(module=>this.#moduleForEffectiveStats(module))}#moduleLimitRegression(slotKey,replacement,current=this.#moduleLimits(),previous=this.#moduleStatsAt(slotKey)){if(previous?.limitGroup===void 0&&previous?.limitIncrease===void 0&&replacement?.limitGroup===void 0&&replacement?.limitIncrease===void 0){return null}for(const usage of current){const count=usage.count-Number(previous?.limitGroup===usage.group)+Number(replacement?.limitGroup===usage.group);const increase=usage.increase-(previous?.limitIncrease?.group===usage.group?previous.limitIncrease.amount:0)+(replacement?.limitIncrease?.group===usage.group?replacement.limitIncrease.amount:0);const limit=usage.baseLimit+increase;const excess=Math.max(0,count-limit);if(excess>usage.excess){return{...usage,increase:increase,limit:limit,count:count,excess:excess}}}return null}#replaceModule(slotKey,replacement,replacementStats,primitiveModifiers){const previous=this.#modules.get(slotKey)??null;this.#adjustImportedFigures(previous,replacement,replacementStats);if(replacement===null){this.#modules.delete(slotKey);this.#moduleStats.delete(slotKey);this.#primitiveModifiers.delete(slotKey)}else{this.#modules.set(slotKey,cloneLoadoutModule(replacement));if(replacementStats!==void 0)this.#moduleStats.set(slotKey,replacementStats);if(primitiveModifiers===void 0)this.#primitiveModifiers.delete(slotKey);else this.#primitiveModifiers.set(slotKey,primitiveModifiers)}this.#invalidate()}#adjustImportedFigures(previous,next,nextStats){const previousMass=this.#moduleMass(previous);const nextMass=this.#moduleMass(next,nextStats);if(this.#top.UnladenMass!==void 0){if(previousMass===null||nextMass===null)delete this.#top.UnladenMass;else this.#top.UnladenMass+=nextMass-previousMass}const previousCargo=this.#moduleCapacity(previous,"CargoCapacity","cargoCapacity");const nextCargo=this.#moduleCapacity(next,"CargoCapacity","cargoCapacity",nextStats);if(this.#top.CargoCapacity!==void 0){if(previousCargo===null||nextCargo===null)delete this.#top.CargoCapacity;else this.#top.CargoCapacity+=nextCargo-previousCargo}const previousFuel=this.#moduleCapacity(previous,"FuelCapacity","fuelCapacity");const nextFuel=this.#moduleCapacity(next,"FuelCapacity","fuelCapacity",nextStats);if(this.#top.FuelCapacity?.Main!==void 0){const reserve=this.#top.FuelCapacity.Reserve;if(previousFuel===null||nextFuel===null){if(reserve===void 0)delete this.#top.FuelCapacity;else this.#top.FuelCapacity={Reserve:reserve}}else{this.#top.FuelCapacity={Main:this.#top.FuelCapacity.Main+nextFuel-previousFuel,...reserve===void 0?{}:{Reserve:reserve}}}}if(normalizeKey(previous?.Item,FITTED_ITEM)===normalizeKey(next?.Item,FITTED_ITEM)){return}delete this.#top.ModulesValue;delete this.#top.Rebuy}#moduleMass(module,statsOverride){if(module===null)return 0;const modified=getLoadoutModifier(module,"Mass");if(modified!==null)return modified;const stats=statsOverride??this.#statsFor(module);if(stats?.mass!==void 0)return stats.mass;if(isBuiltInHullModule(module))return 0;return stats===null&&isNonOutfittingSlot(module.Slot)?0:null}#moduleCapacity(module,modifierLabel,field,statsOverride){if(module===null)return 0;const modified=getLoadoutModifier(module,modifierLabel);if(modified!==null)return modified;const stats=statsOverride??this.#statsFor(module);if(stats?.[field]!==void 0)return stats[field];const symbol=module.Item.toLowerCase();const isFuelTank=stats?.slot?stats.slot==="fuelTank":symbol.startsWith(FUEL_TANK_PREFIX);const shouldCarryCapacity=field==="cargoCapacity"?symbol.includes("cargorack"):isFuelTank;return shouldCarryCapacity?null:0}#resolveDrive(){let fsdModule;for(const m of this.#modules.values()){const stats=this.#statsFor(m);const isDrive=stats?.slot?stats.slot==="frameShiftDrive":m.Item.toLowerCase().startsWith(FSD_PREFIX);if(isDrive){fsdModule=m;break}}if(!fsdModule)return null;const base=this.#statsFor(fsdModule);if(!base||base.fuelMul===void 0||base.fuelPower===void 0){throw new TypeError(`ShipLoadout: no jump constants in the stats catalogue for frame shift drive "${truncate(fsdModule.Item)}"`)}const optMass=getLoadoutModifier(fsdModule,"FSDOptimalMass")??base.optMass;const maxFuel=getLoadoutModifier(fsdModule,"MaxFuelPerJump")??base.maxFuel;if(optMass===void 0||maxFuel===void 0){const missing=[...optMass===void 0?["optMass"]:[],...maxFuel===void 0?["maxFuel"]:[]];throw new TypeError(`ShipLoadout: frame shift drive "${truncate(fsdModule.Item)}" has no ${missing.join(" or ")} in the stats catalogue`)}return{optMass:optMass,maxFuel:maxFuel,fuelMul:base.fuelMul,fuelPower:base.fuelPower,jumpBoost:this.#resolveJumpBoost()}}#resolveJumpBoost(){for(const m of this.#modules.values()){const stats=this.#statsFor(m);if(stats?.engineeringGroup!=="fsdBoosters"&&!m.Item.toLowerCase().startsWith(BOOSTER_PREFIX)){continue}if(m.On===false)continue;if(stats?.jumpBoost===void 0){throw new TypeError(`ShipLoadout: FSD booster "${truncate(m.Item)}" has no jumpBoost in the stats catalogue`)}return stats.jumpBoost}return 0}#statsFor(module){if(module===null)return null;const stats=this.#moduleStats.get(module.Slot)??builtInModuleBySymbol(module.Item,FITTED_ITEM);if(stats)return stats;return isBuiltInHullModule(module)?builtInModuleBySymbol("ModularCargoBayDoor","ShipLoadout: built-in module"):null}};export{LoadoutEditError,ShipLoadout};//# sourceMappingURL=chunk-BYBT5XSW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/internal/loadout-metrics.ts","../src/ships/internal/loadout-views.ts","../src/ships/internal/loadout-fitting.ts","../src/ships/internal/loadout-export.ts","../src/ships/internal/loadout-import.ts","../src/ships/ship-loadout.ts"],"names":["weaponsCapacitorMetrics","shieldRecovery","cellBankSummary","shieldMetrics","getShipSlots","getShipBySymbol","getShipByName","parseSlef","toSlef","stringifySlef","getLoadoutModifier","enumerateSlots","parseSlotName","SLOT_RESTRICTION_LABELS","sourcePurchaseFromLoadout","getSourceModuleValue","powerBudget","isNonOutfittingSlot","isBuiltInHullModule","cloneLoadoutModule","identifyPreEngineeredVariant","cloneModuleStats","availableBlueprintsFor","availableExperimentalsFor","blueprintAvailableFor","blueprintRoutesFor","experimentalAvailableFor","primitiveEngineeringInputsFor","missingBaseLabels","journalModifiersFor","getPreEngineeredStats","unresolvedModifiers","getPreEngineeredJournalModifiers","getPreEngineeredModifiers","matchingKeyIn","FITTED_ITEM","isFinalGuardianWeaponEngineering","scaleDamageComponents","weaponMetrics","sumWeaponMetrics","combinedRateOfFire","builtInModuleBySymbol","getBulkheadsForShip","getPreEngineeredVariants","singleJumpRange","frameShiftDriveMassFactor","fuelPerJump","totalRange","completeResult","calculateUnladenMass","calculateCargoCapacity","calculateFuelCapacity","validateLoadout","mobilityMetrics","calculateModuleLimits","ALL_MODULES","CORE_MODULES","getDefaultLoadout","distributorMetrics","getExperimentalEffect","heatMetrics","ammunitionCapacity","armourMetrics","baseStats","computeModifiers","labelsForDamageType","scaleForLabel","fieldForLabel","labelsForField","capabilityValueForLabel","damageTypeForLabel","resolveBlueprintForModule","getExperimentalsForModule","getBlueprintGrade","normalizeKey","truncate","describeValue","requireString","requireStringIfPresent","deepFreeze","PREFIX","powerPlant","thrusters","frameShiftDrive","powerDistributor","shieldGenerator","shieldCellBank","shieldBooster","shieldReinforcement","hullReinforcement","moduleReinforcement","startsWithAny","symbol","prefixes","some","prefix","toLowerCase","startsWith","isPowerDistributor","module","stats","slot","Item","isEnabled","On","priorityOf","Priority","effectiveStat","field","stated","statedModifier","base","label","modified","effectiveCapability","Engineering","Modifiers","modifier","Label","effectiveDamageDistribution","fromEffect","ExperimentalEffect","damageDistribution","distribution","resolved","Value","type","convertsDamage","modifierRatio","effective","relatedStat","ratio","effectiveModule","merged","fields","Set","Object","keys","add","key","capability","value","engineeringGroup","massRatio","minMass","maxMass","performanceRatio","minMultiplier","maxMultiplier","category","normalizeEffectiveWeapon","damageComponents","damage","powerConsumerFor","draw","parsedSlot","Slot","mounted","deployedOnly","alwaysPowered","kind","common","priority","enabled","inherentlyPassiveSlot","core","drawUnknown","powerAvailable","modules","statsFor","isPlant","mapResistanceFields","read","kineticResistance","thermalResistance","explosiveResistance","causticResistance","resistancesOf","shieldInputFor","shipSymbol","systemsPips","hull","generator","boosters","reinforcement","strengthRatio","optMass","Math","max","optMultiplier","push","shieldBoost","hullMass","baseShieldStrength","mobilityInputFor","mass","enginesPips","isThruster","optSpeedMultiplier","speedCurve","minSpeedMultiplier","maxSpeedMultiplier","optRotationMultiplier","rotationCurve","minRotationMultiplier","maxRotationMultiplier","minimumSpeed","maximumSpeed","boost","minPitch","pitch","minRoll","roll","minYaw","yaw","shieldRecoveryInputFor","distributor","generatorStats","distributorStats","strength","regenRate","brokenRegenRate","distributorDraw","systemsCapacity","systemsRecharge","weaponsCapacitorInputFor","weaponsPips","budget","weaponsCapacity","weaponsRecharge","sustainedEnergyPerSecond","poweredStates","deployed","weapon","weaponStatsFor","distributorInputFor","pips","retracted","enginesCapacity","enginesRecharge","heatInputFor","heatEfficiency","thrusterHeatRate","deployedThrusterHeatRate","fsdHeatRate","weapons","running","heat","heatPerSecond","sustainedHeatPerSecond","heatCapacity","heatDissipation","retractedPowerDraw","poweredDraw","deployedPowerDraw","unknownDraws","map","consumer","state","powered","bands","reduce","total","band","min","length","poweredRetracted","poweredDeployed","cellBankInputsFor","banks","ammunition","reinforcementRate","shieldBankReinforcement","cells","spinUp","shieldBankSpinUp","duration","shieldBankDuration","shieldBankHeat","stockBulkhead","variants","name","find","v","endsWith","armourInputFor","reinforcements","moduleReinforcements","bulkhead","hullBoost","moduleProtection","integrity","stock","baseArmour","WEAPON_FIELDS","projectileRange","burstAdjustedRateOfFire","touched","rate","rateOfFire","statedDamagePerSecond","firingFactor","Number","roundsPerShot","maximumRange","falloffRange","CORE_NAMES","lifeSupport","sensors","fuelTank","RESTRICTED_OPTIONAL_NAMES","military","cargo","limpetController","vesselHangar","passenger","trailingDigits","start","code","charCodeAt","slice","loadoutSlotName","match","exec","restriction","numbered","optional","size","MILITARY_PREFIXES","MINING_PREFIXES","CARGO_PREFIXES","RESTRICTED_SLOT_PREFIXES","mining","planetaryApproachSuite","problem","constraint","message","params","restrictionProblem","moduleSlotProblem","required","restrictedToSlot","moduleFitProblem","ship","armourHull","armourShipName","armourShipSymbol","shipName","restricted","restrictedToShips","allowedShipNames","labels","index","join","allowedShipSymbols","wrongMount","moduleSlot","requiredCore","isFuelTank","class","moduleClass","slotSize","moduleFitError","REBUY_FRACTION","exportLoadoutEvent","input","options","fromSource","credits","source","sourcePurchase","totals","sourceTotalsHold","hullValue","retailHullValue","modulesValue","computedModulesValue","rebuy","trunc","event","Ship","ShipName","shipIdent","ShipIdent","HullValue","ModulesValue","unladenMass","UnladenMass","cargoCapacity","CargoCapacity","maxJumpRange","MaxJumpRange","fuelCapacity","FuelCapacity","Main","main","Reserve","reserve","Rebuy","Modules","exportModules","ordered","moduleOrder","slotOrderedModules","layout","values","on","explicitPower","sourceModuleValue","moduleValue","Health","TypeError","remaining","Map","get","delete","sum","cost","SOURCE_ITEM","entry","item","moduleValues","fitted","captureLoadoutEvent","Array","isArray","captureEach","captureModule","capture","captured","health","engineering","captureEngineering","experimental","experimentalLocalised","ExperimentalEffect_Localised","modifiers","BlueprintName","Level","Quality","normalizeLoadoutEvent","rawEvent","slots","entries","normalizedSlot","has","set","top","moduleStats","variant","variantStats","engineeringLocked","normalizedBlueprint","normalizedExperimental","exact","candidate","blueprint","grade","SLOT_KEY","requireLoadOptions","scope","isFinite","RangeError","LoadoutEditError","constructor","super","this","fromEntries","FSD_PREFIX","BOOSTER_PREFIX","FUEL_TANK_PREFIX","ShipLoadout","_ShipLoadout","primitiveModifiers","version","viewVersion","layoutCache","calculationCache","validationCache","fittedModuleCache","slotCache","fromSlef","fromLoadout","data","imported","empty","requested","loadout","unladenMassResult","computedUnladenMass","calculationModules","fuelCapacityResult","cap","freeze","computed","computedFuelCapacity","cargoCapacityResult","computedCargoCapacity","reserveFuelCapacity","validation","cached","layoutOrNull","byKey","builtIn","fitProblem","known","requiresKnownSlot","fitError","fitConstraint","fitParams","exclusionGroup","limitGroup","limitIncrease","existing","filter","currentLimits","moduleLimits","moduleStatsAt","immovableReason","moduleLimitRegression","fittedModuleAt","removable","slotKey","fittedModuleFor","raw","moduleForEffectiveStats","effectiveStats","preEngineeredVariant","fittedModules","flatMap","availableBlueprints","availableExperimentalEffects","modulesForSlot","requireSlot","occupied","group","currentStats","setModule","conflict","previousSlot","previousSymbol","limitProblem","count","limit","fittedKey","replaceModule","removeModule","applyBlueprint","fdname","wantedGrade","wantedQuality","quality","wantedExperimental","fittedStats","recipe","named","written","trim","acquisition","isInteger","offered","route","engineeringBaseStats","canonical","missing","features","damageModifier","OriginalValue","setPreEngineeredVariant","unresolved","clearEngineering","bare","setModuleEnabled","patchModule","setModulePriority","patch","toLoadoutEvent","fuel","exportableJumpRange","hullCost","header","toSlefString","indent","drive","resolveDrive","tank","maxFuel","maxJumpFuel","fsd","requireFuelCapacity","requireMass","jumpRange","ladenJumpRange","requireCargoCapacity","distance","jumpRangeSummary","unladen","laden","totalMax","totalUnladen","totalLaden","consumers","modulesForEffectiveStats","cellBanks","order","sort","left","right","MAX_SAFE_INTEGER","retailCredits","unpriced","record","metrics","invalidate","wanted","s","require","result","what","issues","i","resolveCalculationModules","unresolvedOutfitting","isCargoRack","includes","mayCarryCapacity","mayCarryFuel","moduleMass","moduleCapacity","replacement","current","previous","usage","increase","amount","baseLimit","excess","replacementStats","adjustImportedFigures","next","nextStats","previousMass","nextMass","previousCargo","nextCargo","previousFuel","nextFuel","statsOverride","modifierLabel","shouldCarryCapacity","fsdModule","m","isDrive","fuelMul","fuelPower","jumpBoost","resolveJumpBoost"],"mappings":"O,89EAkEA,IAAMgF,OAAS,CACXC,WAAY,CAAC,iBAAkB,0BAC/BC,UAAW,CAAC,aAAc,6BAC1BC,gBAAiB,CAAC,kBAClBC,iBAAkB,CAAC,uBAAwB,gCAC3CC,gBAAiB,CAAC,uBAClBC,eAAgB,CAAC,sBACjBC,cAAe,CAAC,qBAChBC,oBAAqB,CAAC,mCACtBC,kBAAmB,CACf,wBACA,gCACA,kCAEJC,oBAAqB,CAAC,0BAA2B,oCAGrD,IAAMC,cAAgB,CAACC,OAAgBC,WACnCA,SAASC,KAAMC,QAAWH,OAAOI,cAAcC,WAAWF,SAG9D,SAASG,mBAAmBC,OAAuBC,OAC/C,OAAOA,OAAOC,KACRD,MAAMC,OAAS,mBACfV,cAAcQ,OAAOG,KAAMtB,OAAOI,iBAC5C,CAGA,SAASmB,UAAUJ,QACf,OAAOA,OAAOK,KAAO,KACzB,CAGA,SAASC,WAAWN,QAEhB,OAAQA,OAAOO,UAAY,GAAK,CACpC,CASA,SAASC,cACLR,OACAS,MACAR,OAEA,MAAMS,OAASC,eAAeX,OAAQS,OACtC,GAAIC,cAAW,EAAW,OAAOA,OACjC,MAAME,KAAOX,QAAQQ,OACrB,cAAcG,OAAS,SAAWA,UAAO,CAC7C,CAWA,SAASD,eAAeX,OAAuBS,OAC3C,IAAA,MAAWI,SAAS5C,eAAewC,OAAQ,CACvC,GAAIvC,wBAAwB2C,SAAW,KAAM,SAC7C,MAAMC,SAAWvG,mBAAmByF,OAAQa,OAC5C,GAAIC,WAAa,KAAM,OAAOA,SAAW/C,cAAc8C,MAC3D,CACA,YAAO,CACX,CAGA,SAASE,oBACLf,OACAS,MACAR,OAEA,IAAA,MAAWY,SAAS5C,eAAewC,OAAQ,CACvC,GAAIvC,wBAAwB2C,SAAW,KAAM,SAC7C,GACIb,OAAOgB,aAAaC,WAAWtB,KAC1BuB,UAAaA,SAASC,MAAMtB,gBAAkBgB,MAAMhB,eAE3D,CACE,OAAO,IACX,CACJ,CACA,MAAMe,KAAOX,MAAMQ,OACnB,cAAcG,OAAS,UAAYA,UAAO,CAC9C,CAGA,SAASQ,4BACLpB,OACAC,OAEA,MAAMoB,WAAarB,OAAOgB,aAAaM,mBACjC9D,sBAAsBwC,OAAOgB,YAAYM,qBAAqBC,wBAC9D,EACN,MAAMC,aAAuC,IACrCH,YAAcpB,MAAMsB,oBAE5B,IAAIE,SAAWJ,kBAAe,GAAapB,MAAMsB,0BAAuB,EACxE,IAAA,MAAWL,YAAYlB,OAAOgB,aAAaC,WAAa,GAAI,CACxD,GAAIC,SAASQ,aAAU,EAAW,SAClC,MAAMC,KAAOxD,mBAAmB+C,SAASC,OACzC,GAAIQ,OAAS,KAAM,SACnBH,aAAaG,MAAQT,SAASQ,MAAQ3D,cAAcmD,SAASC,OAC7DM,SAAW,IACf,CACA,OAAOA,SAAYD,kBAAsC,CAC7D,CAGA,SAASI,eAAe5B,QACpB,GACIA,OAAOgB,aAAaM,oBACpB9D,sBAAsBwC,OAAOgB,YAAYM,qBAAqBC,mBAChE,CACE,OAAO,IACX,CACA,OAAQvB,OAAOgB,aAAaC,WAAa,IAAItB,KACxCuB,UAAa/C,mBAAmB+C,SAASC,SAAW,KAE7D,CAMA,SAASU,cACL7B,OACAC,MACAQ,OAEA,MAAMG,KAAOX,QAAQQ,OACrB,UAAWG,OAAS,UAAYA,OAAS,EAAG,OAAO,EACnD,MAAMkB,UAAYtB,cAAcR,OAAQS,MAAOR,OAC/C,OAAO6B,iBAAc,EAAY,EAAIA,UAAYlB,IACrD,CAaA,SAASmB,YACL/B,OACAC,MACAQ,MACAuB,OAEA,MAAMtB,OAASC,eAAeX,OAAQS,OACtC,GAAIC,cAAW,EAAW,OAAOA,OACjC,MAAME,KAAOX,QAAQQ,OACrB,cAAcG,OAAS,SAAWA,KAAOoB,WAAQ,CACrD,CAMO,SAASC,gBACZjC,OACAC,OAEA,IAAKA,QAAUD,OAAOgB,YAAa,OAAOf,MAC1C,MAAMiC,OAAkC,IAAKjC,OAG7C,MAAMkC,OAAS,IAAIC,IACfC,OAAOC,KAAKrC,QAIhB,IAAA,MAAWiB,YAAYlB,OAAOgB,YAAYC,WAAa,GAAI,CACvD,MAAMR,MAAQzC,cAAckD,SAASC,MAAOlB,OAC5C,GAAIQ,MAAO0B,OAAOI,IAAI9B,MAC1B,CACA,IAAA,MAAW+B,OAAOL,OAAQ,CACtB,MAAMM,WAAa1B,oBAAoBf,OAAQwC,IAAKvC,OACpD,GAAIwC,kBAAe,EAAW,CAC1BP,OAAOM,KAAOC,WACd,QACJ,CACA,MAAMC,MAAQlC,cAAcR,OAAQwC,IAAKvC,OACzC,GAAIyC,aAAU,EAAWR,OAAOM,KAAOE,KAC3C,CACA,GAAIzC,MAAM0C,mBAAqB,YAAa,CACxC,MAAMC,UAAYf,cAAc7B,OAAQC,MAAO,WAC/C,MAAM4C,QAAUd,YAAY/B,OAAQC,MAAO,UAAW2C,WACtD,MAAME,QAAUf,YAAY/B,OAAQC,MAAO,UAAW2C,WACtD,GAAIC,eAAY,EAAWX,OAAOW,QAAUA,QAC5C,GAAIC,eAAY,EAAWZ,OAAOY,QAAUA,OAChD,CACA,GAAI7C,MAAM0C,mBAAqB,aAAe1C,MAAM0C,mBAAqB,mBAAoB,CACzF,MAAMI,iBAAmBlB,cAAc7B,OAAQC,MAAO,iBACtD,MAAM+C,cAAgBjB,YAAY/B,OAAQC,MAAO,gBAAiB8C,kBAClE,MAAME,cAAgBlB,YAAY/B,OAAQC,MAAO,gBAAiB8C,kBAClE,GAAIC,qBAAkB,EAAWd,OAAOc,cAAgBA,cACxD,GAAIC,qBAAkB,EAAWf,OAAOe,cAAgBA,cACxD,GAAIhD,MAAM0C,mBAAqB,YAAa,CACxC,IAAA,MAAWlC,QAAS,CAChB,qBACA,qBACA,qBACA,wBACA,wBACA,yBACQ,CACR,MAAMiC,MAAQzC,MAAMQ,OACpB,GAAIiC,aAAU,EAAWR,OAAOzB,OAASiC,MAAQK,gBACrD,CACJ,CACJ,CACA,MAAMxB,mBAAqBH,4BAA4BpB,OAAQC,OAC/D,GAAIsB,mBAAAW,OAA2BX,mBAAqBA,mBACpD,GAAItB,MAAMiD,WAAa,YAAaC,yBAAyBnD,OAAQkC,QAGrE,GAAIN,eAAe5B,QAAS,QACjBkC,OAAOkB,gBAClB,MAAA,GAAWnD,MAAMmD,iBAAkB,CAC/BlB,OAAOkB,iBAAmBlH,sBACtB+D,MAAMmD,iBACNnD,MAAMoD,cACCnB,OAAOmB,SAAW,SAAWnB,OAAOmB,YAAS,EAE5D,CACA,OAAOnB,MACX,CAGO,SAASoB,iBACZtD,OACAC,OAEA,MAAMsD,KAAO/C,cAAcR,OAAQ,YAAaC,OAChD,MAAMuD,WAAa/I,cAAcuF,OAAOyD,MAGxC,MAAMC,QAAUzD,OAAOiD,WAAa,aAAejD,OAAOiD,WAAa,UACvE,MAAMS,aACF1D,QAAU,KACJyD,SAAWzD,MAAM2D,gBAAkB,KACnCJ,YAAYK,OAAS,YACnB,KACAL,YAAYK,OAAS,eACnB,EACA,MACd,MAAMC,OAAS,CACXC,SAAUzD,WAAWN,QACrBgE,QAAS5D,UAAUJ,WACf2D,oBAAiB,EAAY,CAAA,EAAK,CAAEA,2BACxC9C,MAAOb,OAAOyD,MAElB,GAAIF,YAAS,EAAW,CAIpB,MAAMU,sBACFT,YAAYK,OAAS,UACpBL,YAAYK,OAAS,SACjBL,WAAWU,OAAS,cAAgBV,WAAWU,OAAS,YACjE,GAAIjE,QAAU,MAAQgE,uBAAyBnJ,oBAAoBkF,OAAOyD,MACtE,OAAO,KACX,MAAO,CAAEU,YAAa,QAASL,OACnC,CACA,GAAIP,OAAS,EAAG,OAAO,KACvB,MAAO,CAAEA,aAASO,OACtB,CAGO,SAASM,eACZC,QACAC,UAEA,IAAA,MAAWtE,UAAUqE,QAAS,CAC1B,MAAMpE,MAAQqE,SAAStE,QAKvB,MAAMuE,QAAUtE,OAAOC,KACjBD,MAAMC,OAAS,aACfV,cAAcQ,OAAOG,KAAMtB,OAAOC,YACxC,IAAKyF,QAAS,SACd,IAAKnE,UAAUJ,QAAS,OAAO,EAC/B,OAAOQ,cAAcR,OAAQ,gBAAiBC,QAAU,CAC5D,CACA,OAAO,CACX,CAWA,SAASuE,oBACLC,MAEA,MAAO,CACHC,kBAAmBD,KAAK,sBAAwB,EAChDE,kBAAmBF,KAAK,sBAAwB,EAChDG,oBAAqBH,KAAK,wBAA0B,EACpDI,kBAAmBJ,KAAK,sBAAwB,EAExD,CAMA,SAASK,cAAc9E,OAAuBC,OAC1C,OAAOuE,oBAAqB/D,OAAUD,cAAcR,OAAQS,MAAOR,OACvE,CAGO,SAAS8E,eACZC,WACAX,QACAY,YACAX,UAEA,MAAMY,KAAOhL,gBAAgB8K,YAC7B,IAAIG,UAA0C,KAC9C,MAAMC,SAAkC,GACxC,IAAIC,cAAgB,EAEpB,IAAA,MAAWrF,UAAUqE,QAAS,CAC1B,IAAKjE,UAAUJ,QAAS,SACxB,MAAMC,MAAQqE,SAAStE,QACvB,IAAKmF,WAAa3F,cAAcQ,OAAOG,KAAMtB,OAAOK,iBAAkB,CAClE,MAAM0D,UAAYf,cAAc7B,OAAQC,MAAO,WAC/C,MAAMqF,cAAgBzD,cAAc7B,OAAQC,MAAO,iBACnD,MAAMsF,QAAU/E,cAAcR,OAAQ,UAAWC,OACjD,MAAM4C,QAAUd,YAAY/B,OAAQC,MAAO,UAAW2C,WAEtD,MAAME,QAAUf,YAAY/B,OAAQC,MAAO,UAAWuF,KAAKC,IAAI,EAAG7C,YAClE,MAAM8C,cAAgBlF,cAAcR,OAAQ,gBAAiBC,OAC7D,MAAM+C,cAAgBjB,YAAY/B,OAAQC,MAAO,gBAAiBqF,eAClE,MAAMrC,cAAgBlB,YAAY/B,OAAQC,MAAO,gBAAiBqF,eAIlEH,UAAY,IACJI,eAAY,EAAY,CAAA,EAAK,CAAEA,oBAC/B1C,eAAY,EAAY,CAAA,EAAK,CAAEA,oBAC/BC,eAAY,EAAY,CAAA,EAAK,CAAEA,oBAC/B4C,qBAAkB,EAAY,CAAA,EAAK,CAAEA,gCACrC1C,qBAAkB,EAAY,CAAA,EAAK,CAAEA,gCACrCC,qBAAkB,EAAY,CAAA,EAAK,CAAEA,gCACtC6B,cAAc9E,OAAQC,OAEjC,MAAA,GAAWT,cAAcQ,OAAOG,KAAMtB,OAAOO,eAAgB,CACzDgG,SAASO,KAAK,CACVC,YAAapF,cAAcR,OAAQ,cAAeC,QAAU,KACzD6E,cAAc9E,OAAQC,QAEjC,MAAA,GAAWT,cAAcQ,OAAOG,KAAMtB,OAAOQ,qBAAsB,CAC/DgG,eAAiB7E,cAAcR,OAAQ,iBAAkBC,QAAU,CACvE,CACJ,CAEA,MAAO,CACH4F,SAAUX,MAAMW,UAAY,EAC5BC,mBAAoBZ,MAAMY,oBAAsB,EAChDX,oBACAC,kBACAC,4BACAJ,wBAER,CAGO,SAASc,iBACZf,WACAX,QACA2B,KACAC,YACA3B,UAEA,MAAMY,KAAOhL,gBAAgB8K,YAC7B,IAAKE,KAAM,OAAO,KAClB,IAAInG,UAAmC,KACvC,IAAA,MAAWiB,UAAUqE,QAAS,CAC1B,MAAMpE,MAAQqE,SAAStE,QACvB,MAAMkG,WAAajG,OAAOC,KACpBD,MAAMC,OAAS,YACfV,cAAcQ,OAAOG,KAAMtB,OAAOE,WACxC,IAAKmH,WAAY,SACjB,IAAK9F,UAAUJ,QAAS,OAAO,KAC/B,MAAM8B,UAAYG,gBAAgBjC,OAAQC,OAC1C,MAAM4C,QAAUf,WAAWe,QAC3B,MAAM0C,QAAUzD,WAAWyD,QAC3B,MAAMzC,QAAUhB,WAAWgB,QAC3B,MAAME,cAAgBlB,WAAWkB,cACjC,MAAM0C,cAAgB5D,WAAW4D,cACjC,MAAMzC,cAAgBnB,WAAWmB,cACjC,GACIJ,eAAY,GACZ0C,eAAY,GACZzC,eAAY,GACZE,qBAAkB,GAClB0C,qBAAkB,GAClBzC,qBAAkB,EACpB,CACE,OAAO,IACX,CACAlE,UAAY,CACR8D,gBACA0C,gBACAzC,gBACAE,4BACA0C,4BACAzC,+BACInB,WAAWqE,0BAAuB,EAChC,CAAA,EACA,CACIC,WAAY,CACRvD,gBACA0C,gBACAzC,gBACAE,cAAelB,UAAUuE,oBAAsBrD,cAC/C0C,cAAe5D,UAAUqE,mBACzBlD,cAAenB,UAAUwE,oBAAsBrD,mBAGzDnB,WAAWyE,6BAA0B,EACnC,CAAA,EACA,CACIC,cAAe,CACX3D,gBACA0C,gBACAzC,gBACAE,cAAelB,UAAU2E,uBAAyBzD,cAClD0C,cAAe5D,UAAUyE,sBACzBtD,cAAenB,UAAU4E,uBAAyBzD,iBAIpE,KACJ,CACA,IAAKlE,UAAW,OAAO,KACvB,MAAO,CACH4H,aAAczB,KAAKyB,aACnBC,aAAc1B,KAAK0B,aACnBC,MAAO3B,KAAK2B,MACZC,SAAU5B,KAAK4B,SACfC,MAAO7B,KAAK6B,MACZC,QAAS9B,KAAK8B,QACdC,KAAM/B,KAAK+B,KACXC,OAAQhC,KAAKgC,OACbC,IAAKjC,KAAKiC,IACVnB,YAAaA,OAAS,WAAaA,OAASA,KAC5CjH,oBACAkH,wBAER,CAGO,SAASmB,uBACZpC,WACAX,QACAY,YACAX,UAEA,IAAIa,UAAkC,KACtC,IAAIkC,YAAoC,KACxC,IAAA,MAAWrH,UAAUqE,QAAS,CAC1B,MAAMpE,MAAQqE,SAAStE,QACvB,IAAKmF,WAAa3F,cAAcQ,OAAOG,KAAMtB,OAAOK,iBAAkB,CAClE,IAAKkB,UAAUJ,QAAS,OAAO,KAC/BmF,UAAYnF,MAChB,CACA,GAAID,mBAAmBC,OAAQC,QAAUG,UAAUJ,QAASqH,YAAcrH,MAC9E,CACA,IAAKmF,UAAW,OAAO,KACvB,MAAMmC,eAAiBhD,SAASa,WAChC,MAAMoC,iBAAmBF,YAAc/C,SAAS+C,aAAe,KAC/D,MAAMG,SAAWxN,cAAc+K,eAAeC,WAAYX,QAAS,EAAGC,WAAWkD,SACjF,MAAO,CACHA,kBACAC,UAAWjH,cAAc2E,UAAW,kBAAmBmC,iBAAmB,EAC1EI,gBAAiBlH,cAAc2E,UAAW,wBAAyBmC,iBAAmB,EACtFK,gBAAiBnH,cAAc2E,UAAW,kBAAmBmC,iBAAmB,GAChFM,gBAAiBP,YACV7G,cAAc6G,YAAa,kBAAmBE,mBAAqB,EACpE,EACNM,gBAAiBR,YACV7G,cAAc6G,YAAa,kBAAmBE,mBAAqB,EACpE,EACNtC,wBAER,CAGO,SAAS6C,yBACZzD,QACA0D,YACAC,OACA1D,UAEA,IAAI2D,gBAAkB,EACtB,IAAIC,gBAAkB,EACtB,IAAIC,yBAA2B,EAC/B,IAAA,MAAWnI,UAAUqE,QAAS,CAC1B,IAAKjE,UAAUJ,QAAS,SACxB,MAAMC,MAAQqE,SAAStE,QACvB,IAAKoI,cAAcpI,OAAQC,MAAO+H,QAAQK,SAAU,SACpD,GAAItI,mBAAmBC,OAAQC,OAAQ,CACnCgI,gBAAkBzH,cAAcR,OAAQ,kBAAmBC,QAAU,EACrEiI,gBAAkB1H,cAAcR,OAAQ,kBAAmBC,QAAU,CACzE,CACA,MAAMqI,OAASC,eAAevI,OAAQC,OACtC,GAAIqI,OAAQ,CACRH,0BAA4BhM,cAAcmM,QAAQH,wBACtD,CACJ,CACA,MAAO,CAAEF,gCAAiBC,gCAAiBC,kDAA0BJ,wBACzE,CAGO,SAASS,oBACZnE,QACAoE,KAKAT,OACA1D,UAEA,IAAA,MAAWtE,UAAUqE,QAAS,CAC1B,IAAKjE,UAAUJ,QAAS,SACxB,MAAMC,MAAQqE,SAAStE,QACvB,IAAKD,mBAAmBC,OAAQC,OAAQ,SACxC,IAAKmI,cAAcpI,OAAQC,MAAO+H,QAAQU,UAAW,OAAO,KAC5D,MAAMd,gBAAkBpH,cAAcR,OAAQ,kBAAmBC,OACjE,MAAM4H,gBAAkBrH,cAAcR,OAAQ,kBAAmBC,OACjE,MAAM0I,gBAAkBnI,cAAcR,OAAQ,kBAAmBC,OACjE,MAAM2I,gBAAkBpI,cAAcR,OAAQ,kBAAmBC,OACjE,MAAMgI,gBAAkBzH,cAAcR,OAAQ,kBAAmBC,OACjE,MAAMiI,gBAAkB1H,cAAcR,OAAQ,kBAAmBC,OACjE,GACI2H,uBAAoB,GACpBC,uBAAoB,GACpBc,uBAAoB,GACpBC,uBAAoB,GACpBX,uBAAoB,GACpBC,uBAAoB,EACtB,CACE,OAAO,IACX,CACA,MAAO,CACHN,gCACAC,gCACAc,gCACAC,gCACAX,gCACAC,mCACGO,KAEX,CACA,OAAO,IACX,CAYO,SAASI,aACZ7D,WACAX,QACA2D,OACA1D,UAEA,MAAMY,KAAOhL,gBAAgB8K,YAC7B,IAAKE,KAAM,OAAO,KAElB,IAAI4D,eACJ,IAAIC,iBAAmB,EACvB,IAAIC,yBAA2B,EAC/B,IAAIC,YAAc,EAClB,IAAIhB,gBAAkB,EACtB,MAAMiB,QAAwB,GAE9B,IAAA,MAAWlJ,UAAUqE,QAAS,CAC1B,MAAMpE,MAAQqE,SAAStE,QACvB,MAAMuE,QAAUtE,OAAOC,KACjBD,MAAMC,OAAS,aACfV,cAAcQ,OAAOG,KAAMtB,OAAOC,YACxC,GAAIyF,QAAS,CAET,IAAKnE,UAAUJ,QAAS,OAAO,KAC/B8I,eAAiBtI,cAAcR,OAAQ,iBAAkBC,OACzD,QACJ,CACA,IAAKG,UAAUJ,QAAS,SACxB,MAAMmJ,QAAUf,cAAcpI,OAAQC,MAAO+H,QAC7C,GACI/H,OAAOC,KAAOD,MAAMC,OAAS,YAAcV,cAAcQ,OAAOG,KAAMtB,OAAOE,WAC/E,CACE,MAAMqK,KAAO5I,cAAcR,OAAQ,iBAAkBC,QAAU,EAC/D,GAAIkJ,QAAQT,UAAWK,kBAAoBK,KAC3C,GAAID,QAAQd,SAAUW,0BAA4BI,IACtD,MAAA,GACInJ,OAAOC,KACDD,MAAMC,OAAS,kBACfV,cAAcQ,OAAOG,KAAMtB,OAAOG,iBAC1C,CAEE,GAAImK,QAAQT,UAAWO,aAAezI,cAAcR,OAAQ,cAAeC,QAAU,CACzF,MAAA,GAAWF,mBAAmBC,OAAQC,OAAQ,CAE1C,GAAIkJ,QAAQd,SAAU,CAClBJ,gBAAkBzH,cAAcR,OAAQ,kBAAmBC,QAAU,CACzE,CACJ,CACA,MAAMqI,OAASC,eAAevI,OAAQC,OAEtC,IAAKqI,SAAWa,QAAQd,SAAU,SAClCa,QAAQvD,KAAK,CACT0D,cAAelN,cAAcmM,QAAQgB,uBACrC3B,gBAAiBW,OAAOX,iBAAmB,GAEnD,CACA,GAAImB,sBAAmB,EAAW,OAAO,KAEzC,MAAO,CACHS,aAAcrE,KAAKqE,aACnBC,gBAAiBtE,KAAKsE,gBACtBV,8BACAW,mBAAoBC,YAAY1B,OAAQ,aACxC2B,kBAAmBD,YAAY1B,OAAQ,YACvCe,kCACAC,kDACAC,wBACAhB,gCACAiB,gBACAU,aAAc5B,OAAO4B,aAAaC,IAAKC,UAAaA,SAASjJ,OAAS,oBAE9E,CAGA,SAAS6I,YAAY1B,OAAqB+B,OACtC,MAAMC,QAAUD,QAAU,YAAc,mBAAqB,kBAC7D,OAAO/B,OAAOiC,MAAMC,OAAO,CAACC,MAAOC,OAAUA,KAAKJ,SAAWG,MAAQC,KAAKL,OAASI,MAAQ,EAC/F,CAcA,SAAS/B,cACLpI,OACAC,MACA+H,QAEA,MAAMzE,KAAO/C,cAAcR,OAAQ,YAAaC,OAChD,GAAIsD,YAAS,GAAaA,OAAS,EAAA,MAAU,CAAEmF,UAAW,KAAML,SAAU,MAC1E,MAAM+B,KAAOpC,OAAOiC,MAAMzE,KAAK6E,IAAIrC,OAAOiC,MAAMK,OAAQ9E,KAAKC,IAAI,EAAGnF,WAAWN,UAAY,GAC3F,IAAKoK,KAAM,MAAO,CAAE1B,UAAW,KAAML,SAAU,MAC/C,MAAO,CAAEK,UAAW0B,KAAKG,iBAAkBlC,SAAU+B,KAAKI,gBAC9D,CAGO,SAASC,kBACZpG,QACAC,UAEA,MAAMoG,MAAyB,GAC/B,IAAA,MAAW1K,UAAUqE,QAAS,CAC1B,IAAK7E,cAAcQ,OAAOG,KAAMtB,OAAOM,gBAAiB,SACxD,MAAM2C,UAAYG,gBAAgBjC,OAAQsE,SAAStE,SACnD,MAAM2K,WAAa7I,UAAYpE,mBAAmBoE,WAAa,KAC/D4I,MAAM/E,KAAK,CACPzF,KAAMF,OAAOyD,KACbhE,OAAQO,OAAOG,KACfyK,kBAAmB9I,WAAW+I,yBAA2B,EACzDC,MAAOH,YAAYR,OAAS,EAC5BY,OAAQjJ,WAAWkJ,kBAAoB,EACvCC,SAAUnJ,WAAWoJ,oBAAsB,EAC3C9B,KAAMtH,WAAWqJ,gBAAkB,GAE3C,CACA,OAAOT,KACX,CAMA,SAASU,cAAcpG,YACnB,MAAME,KAAOhL,gBAAgB8K,YAC7B,IAAKE,KAAM,OAAO,KAClB,MAAMmG,SAAW9O,oBAAoB2I,KAAKoG,KAAMjO,cAGhD,OACIgO,SAASE,KAAMC,GAAMA,EAAE/L,OAAOI,cAAc4L,SAAS,cACrDJ,SAASE,KAAMC,GAAMA,EAAExF,OAAS,IAChCqF,SAAS,IACT,IAER,CAGO,SAASK,eACZ1G,WACAX,QACAC,UAEA,MAAMY,KAAOhL,gBAAgB8K,YAC7B,MAAM2G,eAA4C,GAClD,MAAMC,qBAAoD,GAC1D,IAAIC,SAAkC,KAEtC,IAAA,MAAW7L,UAAUqE,QAAS,CAC1B,IAAKjE,UAAUJ,QAAS,SACxB,MAAMC,MAAQqE,SAAStE,QAGvB,GAAIA,OAAOyD,KAAK5D,gBAAkB,SAAU,CACxCgM,SAAW,CACPC,UAAWtL,cAAcR,OAAQ,YAAaC,QAAU,KACrD6E,cAAc9E,OAAQC,OAEjC,MAAA,GAAWT,cAAcQ,OAAOG,KAAMtB,OAAOS,mBAAoB,CAI7D,MAAMuH,MAAQtM,mBAAmByF,OAAQ,mCACzC2L,eAAehG,KAAK,CAChBrG,kBAAmBkB,cAAcR,OAAQ,oBAAqBC,QAAU,EACxE6L,UACIjF,QAAU,KAAO,EAAIA,MAAQ9I,cAAc,sCAC5C+G,cAAc9E,OAAQC,QAEjC,MAAA,GAAWT,cAAcQ,OAAOG,KAAMtB,OAAOU,qBAAsB,CAC/DqM,qBAAqBjG,KAAK,CACtBoG,iBAAkBvL,cAAcR,OAAQ,mBAAoBC,QAAU,EACtE+L,UAAWxL,cAAcR,OAAQ,YAAaC,QAAU,GAEhE,CACJ,CAEA,IAAK4L,SAAU,CACX,MAAMI,MAAQb,cAAcpG,YAC5B6G,SAAWI,MACL,CACIH,UAAWG,MAAMH,WAAa,KAC3BtH,oBAAqB/D,OAAUwL,MAAMxL,SAE5C,IACV,CAEA,MAAO,CACHyL,WAAYhH,MAAMgH,YAAc,EAChCL,kBACAF,8BACAC,0CAER,CAGA,IAAMO,cAAgB,CAClB,SACA,gBACA,aACA,gBACA,cACA,kBACA,aACA,WACA,cACA,aACA,kBACA,cACA,YACA,eACA,eACA,kBAsBG,SAAS5D,eACZvI,OACAC,OAEA,IAAKA,OAASA,MAAMiD,WAAa,YAAa,OAAO,KACrD,MAAMoF,OAAkC,CAAA,EACxC,IAAA,MAAW7H,SAAS0L,cAAe,CAC/B,MAAMzJ,MAAQlC,cAAcR,OAAQS,MAAOR,OAC3C,GAAIyC,aAAU,EAAW4F,OAAO7H,OAASiC,KAC7C,CAEAS,yBAAyBnD,OAAQsI,QAEjC,MAAM/G,mBAAqBH,4BAA4BpB,OAAQC,OAC/D,GAAIsB,mBAAA+G,OAA2B/G,mBAAqBA,mBACpD,GAAItB,MAAMmD,mBAAqBxB,eAAe5B,QAAS,CACnDsI,OAAOlF,iBAAmBlH,sBACtB+D,MAAMmD,iBACNnD,MAAMoD,cACCiF,OAAOjF,SAAW,SAAWiF,OAAOjF,YAAS,EAE5D,CACA,GAAIpD,MAAMmM,gBAAiB9D,OAAO8D,gBAAkB,IAAKnM,MAAMmM,iBAC/D,OAAO9D,MACX,CAUA,SAAS+D,wBACLrM,OACAsI,QAEA,GAAI/N,mBAAmByF,OAAQ,gBAAkB,KAAM,YAAO,EAC9D,MAAMsM,QAAU,CAAC,YAAa,kBAAmB,iBAAiB3M,KAC7DkB,OAAUtG,mBAAmByF,OAAQa,SAAW,MAErD,IAAKyL,QAAS,YAAO,EACrB,OAAOjQ,mBAAmBiM,OAC9B,CAWA,SAASnF,yBAAyBnD,OAAuBsI,QACrD,MAAMiE,KAAOF,wBAAwBrM,OAAQsI,QAC7C,GAAIiE,YAAS,EAAWjE,OAAOkE,WAAaD,KAE5C,MAAME,sBAAwBlS,mBAAmByF,OAAQ,mBACzD,MAAM0M,aAAeC,OAAOrE,OAAOsE,eAAiB,GAAKD,OAAOrE,OAAOkE,YAAc,GACrF,GAAIC,wBAA0B,MAAQC,aAAe,EAAG,CACpDpE,OAAOjF,OAASoJ,sBAAwBC,YAC5C,CAEA,MAAMG,aAAEA,aAAAC,aAAcA,cAAiBxE,OACvC,GAAIuE,oBAAiB,GAAaC,oBAAiB,GAAaA,aAAeD,aAAc,CACzFvE,OAAOwE,aAAeD,YAC1B,CACJ,CCl8BA,IAAME,WAA2C,CAC7CjO,WAAY,cACZC,UAAW,YACXC,gBAAiB,oBACjBgO,YAAa,eACb/N,iBAAkB,oBAClBgO,QAAS,UACTC,SAAU,aAGd,IAAMC,0BAAsE,CACxEC,SAAU,gBACVC,MAAO,aACPC,iBAAkB,yBAClBC,aAAc,qBACdC,UAAW,kBAGf,SAASC,eAAejL,KACpB,IAAIkL,MAAQlL,IAAI8H,OAChB,MAAOoD,MAAQ,EAAG,CACd,MAAMC,KAAOnL,IAAIoL,WAAWF,MAAQ,GACpC,GAAIC,KAAO,IAAQA,KAAO,GAAM,MAChCD,OACJ,CACA,OAAOA,QAAUlL,IAAI8H,OAAS,KAAO9H,IAAIqL,MAAMH,MACnD,CAGO,SAASI,gBAAgB5N,MAC5B,OAAQA,KAAK2D,MACT,IAAK,OACD,OAAOkJ,WAAW7M,KAAKgE,MAC3B,IAAK,YAAa,CACd,MAAM6J,MAAQ,qDAAqDC,KAAK9N,KAAKsC,KAC7E,IAAKuL,MAAO,OAAO7N,KAAKsC,IACxB,MAAO,GAAGuL,MAAM,KAAKA,MAAM,GAAK,UAAY,gBAAgBpB,OAAOoB,MAAM,KAC7E,CACA,IAAK,UAAW,CACZ,MAAMA,MAAQ,uBAAuBC,KAAK9N,KAAKsC,KAC/C,OAAOuL,MAAQ,iBAAiBpB,OAAOoB,MAAM,MAAQ7N,KAAKsC,GAC9D,CACA,IAAK,WAAY,CACb,GAAItC,KAAK+N,cAAgB,yBAA0B,MAAO,2BAC1D,GAAI/N,KAAK+N,YAAa,CAClB,MAAMC,SAAWT,eAAevN,KAAKsC,KACrC,MAAM3B,MAAQsM,0BAA0BjN,KAAK+N,aAC7C,OAAOpN,OAASqN,SAAW,GAAGrN,SAAS8L,OAAOuB,YAAchO,KAAKsC,GACrE,CACA,MAAM2L,SAAW,wBAAwBH,KAAK9N,KAAKsC,KACnD,OAAO2L,SACD,qBAAqBxB,OAAOwB,SAAS,aAAajO,KAAKkO,QACvDlO,KAAKsC,GACf,CACA,IAAK,SACD,MAAO,SACX,IAAK,aACD,MAAO,cAEnB,CCtDA,IAAM6L,kBAAuC,CACzC,wBACA,iCACA,0BACA,qBACA,gCACA,kCACA,mCAUJ,IAAMC,gBAAqC,CACvC,kBACA,sBACA,4BACA,8BACA,uBACA,oBAOJ,IAAMC,eAAoC,CACtC,gBACA,qBACA,8BACA,gBAUJ,IAAMC,yBAAuE,CACzEC,OAAQH,gBACRlB,SAAUiB,kBACVhB,MAAOkB,eAEPjB,iBAAkB,CAAC,mBAAoB,yBAEvCC,aAAc,CAAC,kBAEfC,UAAW,CAAC,qBAAsB,2BAElCkB,uBAAwB,CAAC,4BAU7B,IAAMC,QAAU,CACZC,WACAC,QACAC,UAAA,CACsBF,sBAAYC,mBAAaC,cAAW,EAAY,CAAA,EAAK,CAAEA,iBAEjF,SAASC,mBAAmB7O,KAAiBT,QACzC,MAAMwO,YAAc/N,KAAK+N,YACzB,IAAKA,YAAa,OAAO,KACzB,GAAIO,yBAAyBP,aAAatO,KAAMC,QAAWH,OAAOK,WAAWF,SAAU,CACnF,OAAO,IACX,CACA,OAAO+O,QAAQ,kBAAmB,mBAAmBjU,wBAAwBuT,eAAgB,CACzFA,yBAER,CAEA,SAASe,kBAAkB9O,KAAiBF,QACxC,MAAMiP,SAAWjP,OAAOkP,iBACxB,IAAKD,UAAY/O,KAAK+N,cAAgBgB,SAAU,OAAO,KACvD,OAAON,QACH,kBACA,uCAAuCjU,wBAAwBuU,YAC/D,CAAEhB,YAAagB,UAEvB,CASO,SAASE,iBACZnK,WACA9E,KACAF,QAEA,GAAIE,KAAK2D,OAAS,aAAc,CAC5B,OAAO8K,QAAQ,gBAAiB,wCACpC,CACA,GAAIzO,KAAK2D,OAAS,SAAU,CACxB,MAAMqB,KAAOhL,gBAAgB8K,YAC7B,GAAIhF,OAAOE,OAAS,UAAYF,OAAOoP,YAAS,EAAW,CACvD,OAAOT,QAAQ,iBAAkB,2BACrC,CACA,IAAKzJ,MAAQlF,OAAOoP,KAAKvP,gBAAkBqF,KAAKoG,KAAKzL,cAAe,CAChE,MAAMwP,WAAalV,cAAc6F,OAAOoP,MACxC,OAAOT,QACH,kBACA,qBAAqBnQ,SAASwB,OAAOoP,cAAc5Q,SAAS0G,MAAMoG,MAAQtG,cAC1E,CACIsK,eAAgBtP,OAAOoP,QACnBC,aAAe,KAAO,CAAA,EAAK,CAAEE,iBAAkBF,WAAW5P,QAC9DuF,yBACIE,OAAS,KAAO,CAAA,EAAK,CAAEsK,SAAUtK,KAAKoG,OAGtD,CACA,OAAO,IACX,CAKA,MAAMmE,WAAazP,OAAO0P,kBAC1B,GACID,aACCA,WAAW9P,KAAMF,SAAWA,QAAOI,gBAAkBmF,WAAWnF,eACnE,CACE,MAAM8P,iBAAmBF,WAAW5F,IAAKpK,UACrC,MAAMyF,KAAOhL,gBAAgBuF,SAC7B,OAAOyF,MAAMoG,MAAQ7L,UAEzB,MAAMmQ,OAASH,WAAW5F,IAAI,CAACpK,QAAQoQ,SACnC,MAAMvE,KAAOqE,iBAAiBE,OAC9B,OAAOvE,OAAS7L,QAASA,QAAS,GAAG6L,SAAS7L,aAElD,OAAOkP,QAAQ,iBAAkB,2BAA2BnQ,SAASoR,OAAOE,KAAK,SAAU,CACvFH,kCACAI,mBAAoB,IAAIN,YACxBzK,uBAER,CAIA,MAAMgL,WAAahB,kBAAkB9O,KAAMF,QAC3C,GAAIgQ,WAAY,OAAOA,WACvB,MAAMvQ,OAASO,OAAOP,OAAOI,cAG7B,MAAMoQ,WAAajQ,OAAOE,KAE1B,OAAQA,KAAK2D,MACT,IAAK,OACD,GAAIoM,aAAe/P,KAAKgE,KAAM,CAC1B,OAAOyK,QAAQ,gBAAiB,SAASzO,KAAKgE,cAAe,CACzDgM,aAAchQ,KAAKgE,KACnB+L,WAAYA,YAAc,QAElC,CACA,MACJ,IAAK,YAAa,CACd,GAAIjQ,OAAOkD,WAAa,YAAa,CACjC,OAAOyL,QAAQ,oBAAqB,yBACxC,CACA,MAAMc,YAAaV,mBAAmB7O,KAAMT,QAC5C,GAAIgQ,YAAY,OAAOA,YACvB,KACJ,CACA,IAAK,UACD,GAAIzP,OAAOkD,WAAa,UAAW,CAC/B,OAAOyL,QAAQ,kBAAmB,uBACtC,CACA,OAAO,KACX,IAAK,WAAY,CACb,MAAMwB,WAAaF,aAAe,WAClC,GAAIjQ,OAAOkD,WAAa,aAAeiN,WAAY,CAC/C,OAAOxB,QAAQ,2BAA4B,kCAC/C,CACA,GAAIsB,aAAeE,WAAY,CAC3B,OAAOxB,QAAQ,2BAA4B,wCAC/C,CACA,MAAMc,YAAaV,mBAAmB7O,KAAMT,QAC5C,GAAIgQ,YAAY,OAAOA,YACvB,KACJ,EAGJ,OAAOzP,OAAOoQ,MAAQlQ,KAAKkO,KACrBO,QACI,YACA,eAAenQ,SAASwB,OAAOoQ,4BAA4BlQ,KAAKkO,OAChE,CAAEiC,YAAarQ,OAAOoQ,MAAOE,SAAUpQ,KAAKkO,OAEhD,IACV,CAGO,SAASmC,eACZvL,WACA9E,KACAF,QAEA,OAAOmP,iBAAiBnK,WAAY9E,KAAMF,SAAS6O,SAAW,IAClE,CCrLA,IAAM2B,eAAiB,IAGhB,SAASC,mBACZC,MACAC,SAEA,MAAMC,WAAaD,QAAQE,UAAY,SACvC,MAAMC,OAASF,WAAaF,MAAMK,eAAiB,KACnD,MAAMC,OAASF,SAAW,MAAQG,iBAAiBP,MAAMrM,QAASyM,QAAUA,OAAS,KACrF,MAAMI,UAAYN,WAAcE,QAAQI,WAAa,KAAQR,MAAMS,gBACnE,MAAMC,aAAeR,WACdI,QAAQI,cAAgB,KACzBC,qBAAqBX,MAAMrM,QAASqM,MAAMpM,UAChD,MAAMgN,MAAQV,WACPI,QAAQM,OAAS,KAClBJ,YAAc,MAAQE,eAAiB,KACrC,KACA5L,KAAK+L,OAAOL,UAAYE,cAAgBZ,gBAEhD,MAAO,CACHgB,MAAO,UACPC,KAAMf,MAAM1L,WAAWnF,iBACnB6Q,MAAMlB,gBAAa,EAAY,CAAA,EAAK,CAAEkC,SAAUhB,MAAMlB,aACtDkB,MAAMiB,iBAAc,EAAY,CAAA,EAAK,CAAEC,UAAWlB,MAAMiB,cACxDT,YAAc,KAAO,CAAA,EAAK,CAAEW,UAAWX,cACvCE,eAAiB,KAAO,CAAA,EAAK,CAAEU,aAAcV,iBAC7CV,MAAMqB,cAAgB,KAAO,CAAA,EAAK,CAAEC,YAAatB,MAAMqB,gBACvDrB,MAAMuB,gBAAkB,KAAO,CAAA,EAAK,CAAEC,cAAexB,MAAMuB,kBAC3DvB,MAAMyB,eAAiB,KAAO,CAAA,EAAK,CAAEC,aAAc1B,MAAMyB,iBACzDzB,MAAM2B,eAAiB,KACrB,CAAA,EACA,CACIC,aAAc,CACVC,KAAM7B,MAAM2B,aAAaG,KACzBC,QAAS/B,MAAM2B,aAAaK,aAGtCpB,QAAU,KAAO,CAAA,EAAK,CAAEqB,MAAOrB,OACnCsB,QAASC,cAAcnC,MAAOC,QAASC,YAE/C,CAEA,SAASiC,cACLnC,MACAC,QACAC,YAEA,MAAMkC,QACFnC,QAAQoC,cAAgB,QAClBC,mBAAmBtC,MAAM1L,WAAY0L,MAAMrM,QAASqM,MAAMuC,QAC1D,IAAIvC,MAAMrM,QAAQ6O,UAC5B,OAAOJ,QAAQjJ,IAAK7J,SAChB,MAAMmT,GAAKnT,OAAOK,KAAOsQ,QAAQyC,cAAgB,UAAO,GACxD,MAAMrP,SAAW/D,OAAOO,WAAaoQ,QAAQyC,cAAgB,OAAI,GACjE,MAAM1Q,MAAQkO,WACRyC,kBAAkBrT,OAAQ0Q,MAAMK,gBAChCuC,YAAYtT,OAAQ0Q,MAAMpM,UAChC,MAAO,CACHb,KAAMzD,OAAOyD,KACbtD,KAAMH,OAAOG,KAAKN,iBACdsT,UAAO,EAAY,CAAA,EAAK,CAAE9S,GAAI8S,OAC9BpP,gBAAa,EAAY,CAAA,EAAK,CAAExD,SAAUwD,aAC1C/D,OAAOuT,cAAW,EAAY,CAAA,EAAK,CAAEA,OAAQvT,OAAOuT,kBAC7C7Q,QAAU,SAAW,CAAEhB,MAAOgB,OAAU,CAAA,KAC/C1C,OAAOgB,mBAAgB,EACrB,CAAA,EACA,CAAEA,YAAahG,mBAAmBgF,QAAQgB,eAG5D,CAEA,SAASgS,mBACLhO,WACAX,QACA4O,QAEA,IAAKA,OAAQ,CACT,MAAM,IAAIO,UACN,wDAAwDhV,SAASwG,qDAEzE,CACA,MAAMyO,UAAY,IAAIC,IAAIrP,SAC1B,MAAMyO,QAA2B,GACjC,IAAA,MAAW5S,QAAQ+S,OAAQ,CACvB,MAAMzQ,IAAMzG,cAAc0X,UAAWvT,KAAKsC,KAC1C,MAAMxC,OAASwC,MAAQ,UAAO,EAAYiR,UAAUE,IAAInR,KACxD,GAAIxC,QAAUwC,MAAQ,KAAM,CACxBsQ,QAAQnN,KAAK3F,QACbyT,UAAUG,OAAOpR,IACrB,CACJ,CACA,MAAO,IAAIsQ,WAAYW,UAAUP,SACrC,CAEA,SAAS7B,qBACLhN,QACAC,UAEA,IAAIuP,IAAM,EACV,IAAA,MAAW7T,UAAUqE,QAAQ6O,SAAU,CACnC,MAAMxQ,MAAQ4Q,YAAYtT,OAAQsE,UAClC,GAAI5B,QAAU,UAAW,OAAO,KAChC,GAAIA,QAAU,OAAQmR,KAAOnR,KACjC,CACA,OAAOmR,GACX,CAEA,SAASP,YACLtT,OACAsE,UAEA,MAAMrE,MAAQqE,SAAStE,QACvB,GAAIC,QAAU,KAAM,OAAOA,MAAM6T,MAAQ,UACzC,OAAOhZ,oBAAoBkF,OAAOyD,OAAS1I,oBAAoBiF,QAAU,OAAS,SACtF,CAGA,IAAM+T,YAAc,kDAEpB,SAASV,kBACLrT,OACA8Q,QAEA,MAAMkD,MAAQlD,SAAW,KAAO,KAAOlW,qBAAqBkW,OAAQ9Q,OAAOyD,MAC3E,GAAIuQ,QAAU,KAAM,MAAO,UAC3B,OAAOzV,aAAayV,MAAMC,KAAMF,eAAiBxV,aAAayB,OAAOG,KAAMnE,aACrEgY,MAAMtR,MACN,SACV,CAEA,SAASuO,iBACL5M,QACAyM,QAEA,IAAA,MAAWkD,SAASlD,OAAOoD,aAAc,CACrC,MAAM1R,IAAMzG,cAAcsI,QAAS2P,MAAM9T,MACzC,MAAMiU,OAAS3R,MAAQ,UAAO,EAAY6B,QAAQsP,IAAInR,KACtD,IACK2R,QACD5V,aAAa4V,OAAOhU,KAAMnE,eAAiBuC,aAAayV,MAAMC,KAAMF,aACtE,CACE,OAAO,KACX,CACJ,CACA,OAAO,IACX,CCrIA,SAASK,oBAAoB5C,OACzB,MAAMnN,QAAUmN,MAAMoB,QACtB,MAAMpD,SAAWgC,MAAME,SACvB,MAAMC,UAAYH,MAAMI,UACxB,MAAMV,UAAYM,MAAMK,UACxB,MAAMT,aAAeI,MAAMM,aAC3B,MAAMR,MAAQE,MAAMmB,MACpB,MAAMZ,YAAcP,MAAMQ,YAC1B,MAAMC,cAAgBT,MAAMU,cAC5B,MAAMG,aAAeb,MAAMc,aAC3B,MAAO,CACHb,KAAMD,MAAMC,KACZmB,QAASyB,MAAMC,QAAQjQ,SAAWkQ,YAAYlQ,QAASmQ,eAAiBnQ,WACpEmL,gBAAa,EAAY,CAAA,EAAK,CAAEkC,SAAUlC,aAC1CmC,iBAAc,EAAY,CAAA,EAAK,CAAEC,UAAWD,cAC5CT,iBAAc,EAAY,CAAA,EAAK,CAAEW,UAAWX,cAC5CE,oBAAiB,EAAY,CAAA,EAAK,CAAEU,aAAcV,iBAClDE,aAAU,EAAY,CAAA,EAAK,CAAEqB,MAAOrB,UACpCS,mBAAgB,EAAY,CAAA,EAAK,CAAEC,YAAaD,gBAChDE,qBAAkB,EAAY,CAAA,EAAK,CAAEC,cAAeD,kBACpDI,oBAAiB,EAAY,CAAA,EAAK,CAAEC,aAAc,IAAKD,eAEnE,CAUA,SAASkC,YAAkBrB,OAAsBuB,SAC7C,MAAMC,SAAgB,GACtB,MAAMpK,OAAEA,QAAW4I,OACnB,IAAA,IAASrD,MAAQ,EAAGA,MAAQvF,OAAQuF,QAAS6E,SAAS/O,KAAK8O,QAAQvB,OAAOrD,SAC1E,OAAO6E,QACX,CAGA,SAASF,cAAcxU,QACnB,GAAIA,SAAW,aAAeA,SAAW,SAAU,OAAOA,OAC1D,MAAMmT,GAAKnT,OAAOK,GAClB,MAAM0D,SAAW/D,OAAOO,SACxB,MAAMoU,OAAS3U,OAAOuT,OACtB,MAAM7Q,MAAQ1C,OAAO0B,MACrB,MAAMkT,YAAc5U,OAAOgB,YAC3B,MAAO,CACHyC,KAAMzD,OAAOyD,KACbtD,KAAMH,OAAOG,QACTgT,UAAO,EAAY,CAAA,EAAK,CAAE9S,GAAI8S,OAC9BpP,gBAAa,EAAY,CAAA,EAAK,CAAExD,SAAUwD,aAC1C4Q,cAAW,EAAY,CAAA,EAAK,CAAEpB,OAAQoB,WACtCjS,aAAU,EAAY,CAAA,EAAK,CAAEhB,MAAOgB,UACpCkS,mBAAgB,EAAY,CAAA,EAAK,CAAE5T,YAAa6T,mBAAmBD,cAE/E,CAGA,SAASC,mBAAmBD,aACxB,GAAIA,cAAgB,aAAeA,cAAgB,SAAU,OAAOA,YACpE,MAAME,aAAeF,YAAYtT,mBACjC,MAAMyT,sBAAwBH,YAAYI,6BAC1C,MAAMC,UAAYL,YAAY3T,UAC9B,MAAO,CACHiU,cAAeN,YAAYM,cAC3BC,MAAOP,YAAYO,MACnBC,QAASR,YAAYQ,WACjBN,oBAAiB,EAAY,CAAA,EAAK,CAAExT,mBAAoBwT,iBACxDC,6BAA0B,EACxB,CAAA,EACA,CAAEC,6BAA8BD,0BAClCE,iBAAc,EACZ,CAAA,EACA,CACIhU,UAAWoT,MAAMC,QAAQW,WACnBV,YAAYU,UAAY/T,UACpBA,WAAa,aAAeA,WAAa,SACnC,IAAKA,UACLA,UAEV+T,WAGxB,CAGO,SAASI,sBAAsBC,UAClC,MAAM9D,MAAQ4C,oBAAoBkB,UAClC3W,uBAAuB6S,MAAMC,KAAM,uCACnC,IAAK4C,MAAMC,QAAQ9C,MAAMoB,SAAU,CAC/B,MAAM,IAAIY,UACN,qEAAqE/U,cAAc+S,MAAMoB,WAEjG,CACA,MAAMvO,uBAAA,IAAcqP,IACpB,MAAM6B,qBAAA,IAAYnT,IAClB,IAAA,MAAWpC,UAAUwR,MAAMoB,QAAS,CAMhC,GAAI5S,SAAW,aAAeA,SAAW,SAAU,CAC/C,MAAM,IAAIwT,UACN,+EAA+E/U,cAAcuB,UAErG,CACAtB,cAAcsB,OAAOyD,KAAM,wCAC3B/E,cAAcsB,OAAOG,KAAM,wCAC3B,GAAIH,OAAOgB,mBAAgB,EAAW,CAOlC,GAAIhB,OAAOgB,cAAgB,aAAehB,OAAOgB,cAAgB,SAAU,CACvE,MAAM,IAAIwS,UACN,2EAA2E/U,cAAcuB,OAAOgB,eAExG,CACArC,uBACIqB,OAAOgB,YAAYkU,cACnB,6DAEJvW,uBACIqB,OAAOgB,YAAYM,mBACnB,kEAKJ,GACItB,OAAOgB,YAAYC,iBAAc,IAChCoT,MAAMC,QAAQtU,OAAOgB,YAAYC,WACpC,CACE,MAAM,IAAIuS,UACN,oFAAoF/U,cAAcuB,OAAOgB,YAAYC,aAE7H,CAQA,IAAA,MAAY4O,MAAO3O,YAAclB,OAAOgB,YAAYC,WAAa,IAAIuU,UAAW,CAC5E,GAAItU,WAAa,aAAeA,WAAa,SAAU,CACnD,MAAM,IAAIsS,UACN,yDAAyD3D,sCAAsCpR,cAAcyC,YAErH,CACAxC,cACKwC,SAAiCC,MAClC,yDAAyD0O,eAEjE,CACJ,CACA,MAAM4F,eAAiBzV,OAAOyD,KAAK5D,cACnC,GAAI0V,MAAMG,IAAID,gBAAiB,CAC3B,MAAM,IAAIjC,UACN,4CAA4ChV,SAASwB,OAAOyD,SAEpE,CACA8R,MAAMhT,IAAIkT,gBACVpR,QAAQsR,IAAI3V,OAAOyD,KAAMzI,mBAAmBgF,QAChD,CAEA,MAAM4V,IAA0B,CAAA,EAChC,GAAIpE,MAAME,gBAAa,EAAWkE,IAAIlE,SAAWF,MAAME,SACvD,GAAIF,MAAMI,iBAAc,EAAWgE,IAAIhE,UAAYJ,MAAMI,UACzD,GAAIJ,MAAMK,iBAAc,EAAW+D,IAAI/D,UAAYL,MAAMK,UACzD,GAAIL,MAAMM,oBAAiB,EAAW8D,IAAI9D,aAAeN,MAAMM,aAC/D,GAAIN,MAAMmB,aAAU,EAAWiD,IAAIjD,MAAQnB,MAAMmB,MACjD,GAAInB,MAAMQ,mBAAgB,EAAW4D,IAAI5D,YAAcR,MAAMQ,YAC7D,GAAIR,MAAMU,qBAAkB,EAAW0D,IAAI1D,cAAgBV,MAAMU,cACjE,GAAIV,MAAMc,oBAAiB,EAAWsD,IAAItD,aAAe,IAAKd,MAAMc,cAEpE,MAAMuD,2BAAA,IAAkBnC,IAKxB,IAAA,MAAW1T,UAAUqE,QAAQ6O,SAAU,CACnC,MAAM0B,YAAc5U,OAAOgB,YAC3B,MAAM8U,QAAU7a,6BAA6B+E,QAC7C,MAAM+V,aAAeD,QAAUna,sBAAsBma,SAAW,KAChE,GAAIC,aAAcF,YAAYF,IAAI3V,OAAOyD,KAAMvI,iBAAiB6a,eAChE,GACIA,cAAcC,0BAGPpB,aAAaM,gBAAkB,WACrCjZ,iCAAiC+D,OAAOG,KAAMyU,YAAYM,eAC7D,CACE,QACJ,CAEA,MAAMe,oBAAsB1X,aACxBqW,YAAYM,cACZ,6DAEJ,MAAMgB,uBAAyB3X,aAC3BqW,YAAYtT,mBACZ,kEAEJ,MAAM6U,MAAQ3Z,yBAAyBwD,OAAOG,MAAMoL,KAC/C6K,WACGA,UAAUC,UAAUxW,gBAAkBoW,qBACtCG,UAAUE,QAAU1B,YAAYO,OAChCiB,UAAUtB,cAAcjV,gBAAkBqW,wBAElD,MAAMjW,MAAQkW,MACRxa,sBAAsBwa,OACtB7Z,sBAAsB0D,OAAOG,KAAM,wCACzC,GAAIF,MAAO,CACP4V,YAAYF,IAAI3V,OAAOyD,KAAMvI,iBAAiB,IAAK+E,MAAO+V,kBAAmB,OACjF,CACJ,CAEA,MAAO,CACHhR,WAAYwM,MAAMC,KAClBpN,gBACAwR,wBACAD,QACA7E,eAAgBpW,0BAA0B6W,OAElD,CCpFA,IAAM+E,SAAW,uBAGjB,IAAMC,mBAAqB,CAACC,MAAe9F,WACvC,IAAA,MAAWlQ,QAAS,CAAC,OAAQ,SAAmB,CAC5C,MAAMiC,MAAQiO,QAAQlQ,OACtB,GAAIiC,aAAU,KAAeiK,OAAO+J,SAAShU,QAAUA,MAAQ,GAAI,CAC/D,MAAM,IAAIiU,WAAW,GAAGF,UAAUhW,6CACtC,CACJ,GAqCG,IAAMmW,iBAAN,cAA+BpD,UAEzB7F,KAEAiB,WAEAE,OAUT,WAAA+H,CACIhI,QACAlB,KACAmB,OACAF,YAEAkI,MAAMjI,SACNkI,KAAKpJ,KAAOA,KACZoJ,KAAKjI,OAASlQ,WACVyD,OAAO2U,YACH3U,OAAOmT,QAAQ1G,QAAQjF,IAAI,EAAErH,IAAKE,SAAW,CACzCF,IACA6R,MAAMC,QAAQ5R,OAAS,IAAIA,OAASA,UAIhD,GAAIkM,kBAAe,EAAWmI,KAAKnI,WAAaA,UACpD,GAgMJ,IAAMqI,WAAa,iBACnB,IAAMC,eAAiB,yBACvB,IAAMC,iBAAmB,eAsElB,IAAMC,YAAN,MAAMC,aACArS,YACAX,SACAwR,aAEAyB,mCAAA,IAA0B5D,IAC1BkC,KACA7E,gBAWTwG,SAAW,EAEXC,aAAe,EAMfC,aACAC,kBACI,KACJC,iBAAyE,KACzEC,mBAAmF,KACnFC,WAGW,KAEH,WAAAhB,CACJ7R,WACAX,QACAuR,IACA7E,eAA8C,KAC9C8E,2BAAc,IAAInC,KAElBqD,MAAK/R,WAAcA,WACnB+R,MAAK1S,QAAWA,QAChB0S,MAAKnB,IAAOA,IACZmB,MAAKhG,eAAkBA,eACvBgG,MAAKlB,YAAeA,WACxB,CAcA,eAAOiC,CAASpH,MAAgBb,MAAQ,GACpC,MAAM2F,QAAUpb,UAAUsW,OAC1B,MAAMsD,MAAQwB,QAAQ3F,OACtB,IAAKmE,MAAO,CACR,MAAM,IAAIR,UACN,2CAA2ChV,SAASqR,gBAAgB2F,QAAQlL,UAEpF,CACA,OAAO+M,aAAYU,YAAY/D,MAAMgE,KACzC,CAuDA,kBAAOD,CAAYvG,OASf,GAAIA,QAAU,aAAeA,QAAU,SAAU,CAC7C,MAAM,IAAIgC,UACN,oEAAoE/U,cAAc+S,SAE1F,CACA,MAAMyG,SAAW5C,sBAAsB7D,OACvC,OAAO,IAAI6F,aACPY,SAASjT,WACTiT,SAAS5T,QACT4T,SAASrC,IACTqC,SAASlH,eACTkH,SAASpC,YAEjB,CAkBA,YAAOqC,CAAMlT,YACT,MAAMiO,OAAShZ,aAAayE,cAAcsG,WAAY,kCACtD,IAAKiO,OAAQ,CAKT,MAAM,IAAIO,UACN,+CAA+ChV,SAASwG,eAEhE,CACA,OAAO,IAAIqS,aAAYpE,OAAOxT,sBAAA,IAAYiU,IAAO,CAAA,EACrD,CAyBA,cAAO,CAAQ1O,YACX,MAAMmT,UAAYzZ,cAAcsG,WAAY,mCAC5C,MAAMoT,QAAU9a,kBAAkB6a,WAClC,IAAKC,QAAS,CACV,MAAM,IAAI5E,UACN,qDAAqDhV,SAASwG,eAEtE,CACA,OAAO,IAAIqS,aACPe,QAAQ3Y,OACR,IAAIiU,IACA0E,QAAQ/T,QAAQwF,IAAK7J,QAAW,CAC5BA,OAAOE,KACP,CAAEuD,KAAMzD,OAAOE,KAAMC,KAAMH,OAAOP,WAG1C,CAAA,EAER,CAGA,cAAIuF,GACA,OAAO+R,MAAK/R,UAChB,CAGA,YAAIwK,GACA,OAAOuH,MAAKnB,IAAKlE,UAAY,IACjC,CAGA,aAAIC,GACA,OAAOoF,MAAKnB,IAAKhE,WAAa,IAClC,CAYA,eAAIG,GACA,OAAOgF,KAAKsB,kBAAkB3V,KAClC,CAQA,qBAAI2V,GACA,OAAOtB,MAAKnB,IAAK5D,mBAAgB,EAC3B+E,MAAKuB,sBACLzb,eAAeka,MAAKnB,IAAK5D,YACnC,CAMA,oBAAAsG,GACI,OAAOxb,qBACH5C,gBAAgB6c,MAAK/R,aAAca,UAAY,KAC/CkR,MAAKwB,qBAEb,CAQA,gBAAIlG,GACA,OAAO0E,KAAKyB,mBAAmB9V,KACnC,CAGA,sBAAI8V,GACA,MAAMC,IAAM1B,MAAKnB,IAAKtD,aACtB,GAAImG,KAAKlG,YAAS,GAAakG,IAAIhG,eAAY,EAAW,CACtD,OAAO5V,eAAewF,OAAOqW,OAAO,CAAElG,KAAMiG,IAAIlG,KAAMG,QAAS+F,IAAIhG,UACvE,CACA,MAAMkG,SAAW5B,MAAK6B,uBACtB,GAAID,SAASjW,QAAU,KAAM,OAAOiW,SACpC,OAAO9b,eACHwF,OAAOqW,OAAO,CACVlG,KAAMiG,KAAKlG,MAAQoG,SAASjW,MAAM8P,KAClCE,QAAS+F,KAAKhG,SAAWkG,SAASjW,MAAMgQ,UAGpD,CAOA,iBAAIT,GACA,OAAO8E,KAAK8B,oBAAoBnW,KACpC,CAGA,uBAAImW,GACA,OAAO9B,MAAKnB,IAAK1D,qBAAkB,EAC7B6E,MAAK+B,wBACLjc,eAAeka,MAAKnB,IAAK1D,cACnC,CAOA,sBAAA4G,GACI,OAAO/b,uBAAuBga,MAAKwB,qBACvC,CAMA,qBAAAK,GACI,OAAO5b,sBACH9C,gBAAgB6c,MAAK/R,aAAc+T,qBAAuB,KAC1DhC,MAAKwB,qBAEb,CAUA,aAAIrH,GACA,OAAO6F,MAAKnB,IAAK/D,WAAa,IAClC,CAQA,gBAAIT,GACA,OAAO2F,MAAKnB,IAAK9D,cAAgB,IACrC,CAOA,SAAIR,GACA,OAAOyF,MAAKnB,IAAKjD,OAAS,IAC9B,CAqCA,kBAAI5B,GACA,OAAOgG,MAAKhG,cAChB,CAWA,cAAIiI,GACA,MAAMC,OAASlC,MAAKY,gBACpB,GAAIsB,SAAW,MAAQA,OAAO1B,UAAYR,MAAKQ,QAAA,OAAiB0B,OAAOvW,MACvE,MAAM6S,MAAQwB,MAAKmC,eACnB,MAAMC,MAAQ,IAAIzF,IAAI6B,OAAO1L,IAAK3J,MAAS,CAACA,KAAKsC,IAAI3C,cAAeK,QAAU,IAC9E,MAAMmE,QAA8B,IAAI0S,MAAK1S,QAAS6O,UAAUrJ,IAAK7J,SACjE,MAAMC,MAAQ8W,MAAKzS,SAAUtE,QAC7B,MAAME,KAAOiZ,MAAMxF,IAAI3T,OAAOyD,KAAK5D,eACnC,MAAMuZ,QACDnZ,QAAU,MAAQnF,oBAAoBkF,OAAOyD,OAAU1I,oBAAoBiF,QAChF,MAAMqZ,WACFpZ,OAASC,OAASkZ,QAAUjK,iBAAiB4H,MAAK/R,WAAa9E,KAAMD,OAAS,KAClF,MAAO,CACHC,KAAMF,OAAOyD,KACbhE,OAAQO,OAAOG,KACfmZ,MAAOrZ,QAAU,MAAQmZ,QACzBG,mBAAoBH,QACpBI,SAAUH,YAAYxK,SAAW,QAC7BwK,aAAe,KAAO,CAAA,EAAK,CAAEI,cAAeJ,WAAWzK,eACvDyK,YAAYvK,cAAW,EAAY,CAAA,EAAK,CAAE4K,UAAWL,WAAWvK,WAChE7O,OAAO0Z,sBAAmB,EACxB,CAAA,EACA,CAAEA,eAAgB1Z,MAAM0Z,mBAC1B1Z,OAAO2Z,kBAAe,EAAY,CAAA,EAAK,CAAEA,WAAY3Z,MAAM2Z,eAC3D3Z,OAAO4Z,qBAAkB,EACvB,CAAA,EACA,CAAEA,cAAe5Z,MAAM4Z,kBAGrC,MAAMnX,MAAQzF,gBAAgB,CAAE+H,WAAY+R,MAAK/R,WAAauQ,YAAOlR,kBACrE0S,MAAKY,gBAAmB,CAAEJ,QAASR,MAAKQ,QAAU7U,aAClD,OAAOA,KACX,CAkBA,KAAA6S,CAAM1R,MACF,IAAIoV,OAASlC,MAAKc,UAClB,GAAIoB,SAAW,MAAQA,OAAO1B,UAAYR,MAAKS,YAAc,CACzDyB,OAAS,CAAE1B,QAASR,MAAKS,YAAc9U,qBAAO,IAAIgR,KAClDqD,MAAKc,UAAaoB,MACtB,CACA,MAAMa,SAAWb,OAAOvW,MAAMiR,IAAI9P,MAClC,GAAIiW,gBAAa,EAAW,OAAOA,SAEnC,MAAMvE,MACF1R,YAAS,EACHkT,MAAK9D,SACL8D,MAAK9D,SAAU8G,OAAQ7Z,MAASA,KAAK2D,OAASA,MACxD,MAAMmW,cAAgBjD,MAAKkD,eAC3B,MAAMvX,MAAQ9D,WACV2W,MAAM1L,IAAK3J,OACP,MAAMD,MAAQ8W,MAAKmD,cAAeha,KAAKsC,KACvC,MAAM2X,gBACFja,KAAKsC,IAAI3C,gBAAkB,aACpB,aACDI,OAAO4Z,qBAAkB,GACvB9C,MAAKqD,sBAAuBla,KAAKsC,IAAK,KAAMwX,cAAe/Z,SACvD,KACH,cACD,KACZ,MAAO,IACAC,KACHoL,KAAMwC,gBAAgB5N,MACtBF,OAAQ+W,KAAKsD,eAAena,KAAKsC,KACjC8X,UAAWH,kBAAoB,QAC3BA,kBAAoB,KAAO,CAAA,EAAK,CAAEA,qCAIlDlB,OAAOvW,MAAMiT,IAAI9R,KAAMnB,OACvB,OAAOA,KACX,CAWA,cAAA2X,CAAeE,SACX,MAAMva,OAAS+W,MAAKyD,gBAAiBD,SACrC,IAAKva,OAAQ,OAAO,KACpB,IAAIiZ,OAASlC,MAAKa,kBAClB,GAAIqB,SAAW,MAAQA,OAAO1B,UAAYR,MAAKS,YAAc,CACzDyB,OAAS,CAAE1B,QAASR,MAAKS,YAAc9U,qBAAO,IAAIgR,KAClDqD,MAAKa,kBAAqBqB,MAC9B,CACA,MAAMa,SAAWb,OAAOvW,MAAMiR,IAAI3T,OAAOyD,MACzC,GAAIqW,gBAAa,EAAW,OAAOA,SACnC,MAAMW,IAAMzf,mBAAmBgF,QAC/B,MAAMC,MAAQ8W,MAAKzS,SAAUtE,QAC7B,MAAM8B,UAAYG,gBAAgB8U,MAAK2D,wBAAyB1a,QAASC,OACzE,MAAMyC,MAAQ9D,WAAW,CACrBsB,KAAMF,OAAOyD,KACbhE,OAAQgb,IAAIta,KACZgT,GAAIsH,IAAIpa,GACR0D,SAAU0W,IAAIla,SACdoU,OAAQ8F,IAAIlH,OACZ7Q,MAAO+X,IAAI/Y,MACXkT,YAAa6F,IAAIzZ,YACjByZ,QACAxa,MAAOA,QAAU,KAAO,KAAO/E,iBAAiB+E,OAChD0a,eAAgB7Y,YAAc,KAAO,KAAO5G,iBAAiB4G,WAC7D6I,WAAYjN,mBAAmBoE,WAC/B8Y,qBAAsB3f,6BAA6Bwf,OAEvDxB,OAAOvW,MAAMiT,IAAI3V,OAAOyD,KAAMf,OAC9B,OAAOA,KACX,CAgBA,aAAAmY,GACI,OAAOjc,WACH,IAAImY,MAAK1S,QAAS/B,QAAQwY,QAAStY,MAC/B,MAAM2R,OAAS4C,KAAKsD,eAAe7X,KACnC,OAAO2R,SAAW,KAAO,GAAK,CAACA,UAG3C,CAsBA,mBAAA4G,CAAoBR,SAChB,MAAMva,OAAS+W,MAAKyD,gBAAiBD,SACrC,OAAO3b,WACHoB,OAAS7E,uBAAuB6E,OAAOG,KAAM4W,MAAKzS,SAAUtE,SAAW,GAE/E,CAmBA,4BAAAgb,CAA6BT,SACzB,MAAMva,OAAS+W,MAAKyD,gBAAiBD,SACrC,OAAO3b,WACHoB,OAAS5E,0BAA0B4E,OAAOG,KAAM4W,MAAKzS,SAAUtE,SAAW,GAElF,CAmBA,cAAAib,CAAeV,SACX,MAAMra,KAAO6W,MAAKmE,YAAaX,SAC/B,MAAMY,SAAW,IAAI/Y,IACjB,IAAI2U,MAAK1S,QAAS6O,UAAU4H,QAAS3G,SACjC,GAAIA,OAAO1Q,KAAK5D,gBAAkBK,KAAKsC,IAAI3C,cAAe,MAAO,GACjE,MAAMub,MAAQrE,MAAKzS,SAAU6P,SAASwF,eACtC,OAAOyB,aAAU,EAAY,GAAK,CAACA,UAG3C,MAAMpB,cAAgBjD,MAAKkD,eAC3B,MAAMoB,aAAetE,MAAKmD,cAAeha,KAAKsC,KAC9C,OAAOpF,YAAY2c,OACd/Z,QACGuQ,eAAewG,MAAK/R,WAAa9E,KAAMF,UAAY,OAClDA,OAAO2Z,sBAAmB,IAAcwB,SAASzF,IAAI1V,OAAO2Z,kBAC7D5C,MAAKqD,sBAAuBla,KAAKsC,IAAKxC,OAAQga,cAAeqB,gBAAkB,KAE3F,CAsCA,SAAAC,CAAUf,QAAiBva,QACvB,MAAME,KAAO6W,MAAKmE,YAAaX,SAC/B,GAAIva,SAAW,MAAQA,cAAW,EAAW,CAIzC,MAAM,IAAIwT,UACN,kDAAkDhV,SAAS+b,sDAEnE,CAGA,UAAYva,OAAgCP,SAAW,SAAU,CAC7D,MAAM,IAAI+T,UACN,sCAAsChV,SAAS+b,oDAAoD9b,cAAcuB,UAEzH,CACA,MAAM2O,SAAUQ,iBAAiB4H,MAAK/R,WAAa9E,KAAMF,QACzD,GAAI2O,SAAS,CACT,GAAIA,SAAQC,aAAe,gBAAiB,CACxC,MAAM,IAAIgI,iBACN,0BAA0BpY,SAASwB,OAAOP,aAAajB,SAAS+b,aAAa5L,SAAQE,UACrF,gBACA,CAAE3O,KAAMA,KAAKsC,KAErB,CACA,MAAM,IAAIoU,iBACN,0BAA0BpY,SAASwB,OAAOP,aAAajB,SAAS+b,aAAa5L,SAAQE,UACrF,qBACA,IACOF,SAAQG,OACX5O,KAAMA,KAAKsC,IACX/C,OAAQO,OAAOP,OACfmP,WAAYD,SAAQC,YAExBD,SAAQC,WAEhB,CACA,GAAI5O,OAAO2Z,sBAAmB,EAAW,CACrC,MAAM4B,SAAW,IAAIxE,MAAK1S,QAAS6O,UAAU3H,KACxC4I,QACGA,OAAO1Q,KAAK5D,gBAAkBK,KAAKsC,IAAI3C,eACvCkX,MAAKzS,SAAU6P,SAASwF,iBAAmB3Z,OAAO2Z,gBAE1D,GAAI4B,SAAU,CACV,MAAM,IAAI3E,iBACN,0BAA0BpY,SAASwB,OAAOP,aAAajB,SAAS+b,aAAava,OAAO2Z,gEAAgEnb,SAAS+c,SAAS9X,SACtK,2BACA,CACIkW,eAAgB3Z,OAAO2Z,eACvBzZ,KAAMA,KAAKsC,IACX/C,OAAQO,OAAOP,OACf+b,aAAcD,SAAS9X,KACvBgY,eAAgBF,SAASpb,MAGrC,CACJ,CACA,MAAMub,aAAe3E,MAAKqD,sBAAuBla,KAAKsC,IAAKxC,QAC3D,GAAI0b,eAAiB,KAAM,CACvB,MAAM,IAAI9E,iBACN,0BAA0BpY,SAASwB,OAAOP,aAAajB,SAAS+b,aAAamB,aAAaN,oBAAoBM,aAAaC,qCAAqCD,aAAaE,QAC7K,sBACA,CACIR,MAAOM,aAAaN,MACpBO,MAAOD,aAAaC,MACpBC,MAAOF,aAAaE,MACpB1b,KAAMA,KAAKsC,IACX/C,OAAQO,OAAOP,QAG3B,CAGA,MAAM+C,IAAMuU,MAAK8E,UAAWtB,UAAYra,KAAKsC,IAC7CuU,MAAK+E,cAAetZ,IAAK,CAAEiB,KAAMjB,IAAKrC,KAAMH,OAAOP,QAAUvE,iBAAiB8E,SAC9E,OAAO+W,IACX,CAaA,YAAAgF,CAAaxB,SAET,GAAI7b,cAAc6b,QAAShE,UAAU1W,gBAAkB,aAAc,CACjE,MAAM,IAAI+W,iBACN,kEACA,gBACA,CAAE1W,KAAM,cAEhB,CACA,MAAMsC,IAAMuU,MAAK8E,UAAWtB,SAC5B,GAAI/X,MAAQ,KAAM,CACd,MAAMkZ,aAAe3E,MAAKqD,sBAAuB5X,IAAK,MACtD,GAAIkZ,eAAiB,KAAM,CACvB,MAAMvH,OAAS4C,MAAK1S,QAASsP,IAAInR,KACjC,MAAM,IAAIoU,iBACN,6BAA6BpY,SAAS+b,aAAamB,aAAaN,oBAAoBM,aAAaC,qCAAqCD,aAAaE,QACnJ,sBACA,CACIR,MAAOM,aAAaN,MACpBO,MAAOD,aAAaC,MACpBC,MAAOF,aAAaE,MACpB1b,KAAMsC,OACF2R,cAAW,EAAY,CAAA,EAAK,CAAE1U,OAAQ0U,OAAOhU,OAG7D,CACA4W,MAAK+E,cAAetZ,IAAK,KAC7B,CACA,OAAOuU,IACX,CAqEA,cAAAiF,CAAezB,QAAiB0B,OAAgBtL,SAI5CjS,cAAcud,OAAQ,sCACtB,GAAItL,UAAY,aAAeA,UAAY,SAAU,CACjD,MAAM,IAAI6C,UACN,gFAAgF/U,cAAckS,WAEtG,CAOA,MAAMuL,YAAcvL,QAAQ2F,MAC5B,MAAM6F,cAAgBxL,QAAQyL,QAG9B,MAAMC,mBAAqB1L,QAAQmE,mBAAgB,EACnDnW,uBACI0d,mBACA,oDAEJ,MAAMrc,OAAS+W,MAAKyD,gBAAiBD,SACrC,IAAKva,OAAQ,CACT,MAAM,IAAI2W,WACN,qCAAqCnY,SAAS+b,qBAEtD,CACA,MAAM+B,YAAcvF,MAAKzS,SAAUtE,QACnC,IAAKsc,YAAa,CACd,MAAM,IAAI9I,UACN,oDAAoDhV,SAASwB,OAAOG,SAE5E,CAKA,MAAMoc,OAASne,0BAA0B4B,OAAOG,KAAM8b,QAGtD,MAAMO,MACFD,SAAWN,OACL,IAAIzd,SAASyd,WACb,IAAIzd,SAASyd,aAAazd,SAAS+d,0BAI7C,MAAME,QAAUR,OAAOS,OAAO7c,cAC9B,MAAM4B,SAAW8a,OAAOG,OAAO7c,cAC/B,GACIrD,yBAAyBwD,OAAOG,MAAMR,KACjCmW,SACGA,QAAQ6G,cAAgB,gBACvB7G,QAAQO,UAAUxW,gBAAkB4c,SACjC3G,QAAQO,UAAUxW,gBAAkB4B,WAElD,CACE,MAAM,IAAI+R,UACN,+BAA+BgJ,4HAEvC,CACA,IAAK7P,OAAOiQ,UAAUV,cAAgBA,YAAc,GAAKA,YAAc,EAAG,CACtE,MAAM,IAAIvF,WACN,4CAA4C6F,eAAehe,SAAS0d,eAE5E,CACA,MAAM5F,MAAQhY,kBAAkBie,OAAQL,aACxC,IAAK5F,MAAO,CACR,MAAM,IAAIK,WACN,4CAA4C6F,eAAehe,SAAS0d,eAE5E,CACA,IAAIpH,aACJ,GAAIuH,0BAAuB,EAAW,CAClCvH,aAAetX,sBAAsB6e,oBACrC,IAAKvH,aAAc,CACf,MAAM,IAAI6B,WACN,4DAA4DnY,SAAS6d,uBAE7E,CACJ,CACA,MAAMD,QAAUD,eAAiB,EACjC,IAAKxP,OAAO+J,SAAS0F,UAAYA,QAAU,GAAKA,QAAU,EAAG,CACzD,MAAM,IAAIzF,WACN,wEAER,CACA,GAAI2F,YAAYtG,kBAAmB,CAC/B,MAAM,IAAIxC,UACN,uCAAuChV,SAASwB,OAAOG,8EAE/D,CAKA,IAAK9E,sBAAsB2E,OAAOG,KAAM8b,QAAS,CAC7C,MAAMY,QAAU,IAAIvhB,mBAAmB0E,OAAOG,OAAO0J,IACjD,EAAEwM,UAAWyG,SAAW,GAAGzG,cAAcyG,UAE7C,MAAM,IAAItJ,UACNqJ,QAAQvS,OAAS,EACX,uCAAuC9L,SAASwB,OAAOG,mCAAmCqc,mCAAmCK,QAAQ/M,KAAK,QAC1I,iFAAiFtR,SAASwB,OAAOG,SAE/G,CACA,GACIkc,0BAAuB,IACtB9gB,yBAAyByE,OAAOG,KAAMkc,oBACzC,CACE,MAAMQ,QAAUxe,0BAA0B2B,OAAOG,MACjD,MAAM,IAAIqT,UACN,uCAAuChV,SAASwB,OAAOG,8CAA8C3B,SAAS6d,kCAAkCQ,QAAQvS,OAAS,EAAIuS,QAAQ/M,KAAK,MAAQ,2BAElM,CAKA,MAAM7P,MAAQ8W,MAAKgG,qBAAsB/c,SAAWsc,YACpD,MAAM1b,KAAOhD,UAAUqC,OACvB,MAAM+c,UAAYxhB,8BAA8ByE,MAAOqW,MAAOxB,cAC9D,MAAMmI,QAAUxhB,kBACZwE,MACAW,KACAoc,UAAU1G,MAAM4G,SAChBF,UAAUlI,cAAcG,WAE5B,GAAIgI,QAAQ3S,OAAS,EAAG,CACpB,MAAM,IAAIkJ,UACN,8CAA8CgJ,qBAAqBhe,SAASwB,OAAOG,kCAAkC8c,QAAQnN,KAAK,QAE1I,CAIA,MAAMvO,mBAAqBuT,cAAcvT,oBAAsB+U,MAAM/U,mBACrE,MAAM+V,mBAAqBzZ,iBACvB+C,KACAoc,UAAU1G,MACV8F,QACAY,UAAUlI,cAEd,MAAMG,UAAYvZ,oBAAoBuE,MAAOqX,oBAC7C,GAAI/V,mBAAoB,CACpB,IAAA,MAAWI,OAAQ,CAAC,UAAW,UAAW,YAAa,YAAsB,CACzE,MAAMe,MAAQnB,mBAAmBI,MACjC,GAAIe,aAAU,EAAW,SACzB,MAAM7B,MAAQ/C,oBAAoB6D,MAAM,GACxC,GAAId,aAAU,EAAW,SACzB,MAAMsc,eAAiB,CACnBhc,MAAON,MACPa,MAAOgB,MAAQ3E,cAAc8C,OAC7Buc,eAAgBnd,MAAMsB,qBAAqBI,OAAS,GAAK5D,cAAc8C,QAE3EoU,UAAUtP,KAAKwX,gBACf7F,mBAAmB3R,KAAKwX,eAC5B,CACJ,CACA,MAAMvI,YAAiC,CACnCM,cAAe+G,OACf9G,MAAO+G,YACP9G,QAASgH,WACLC,0BAAuB,EAAY,CAAE/a,mBAAoB+a,oBAAuB,CAAA,EACpFpb,UAAWgU,WAEf8B,MAAK+E,cACD9b,OAAOyD,KACP,IAAKzD,OAAQgB,YAAa4T,aAC1B3U,MACAqX,oBAEJ,OAAOP,IACX,CAiCA,uBAAAsG,CAAwB9C,QAAiBzE,SACrC,GAAIA,UAAY,aAAeA,UAAY,SAAU,CACjD,MAAM,IAAItC,UACN,2FAA2F/U,cAAcqX,WAEjH,CACApX,cAAcoX,QAAQrW,OAAQ,uDAC9Bf,cAAcoX,QAAQO,UAAW,0DACjC3X,cACIoX,QAAQ6G,YACR,4DAEJhe,uBACImX,QAAQhB,aACR,6DAEJ,MAAMwE,MAAQ9c,yBAAyBsZ,QAAQrW,QAAQ8L,KAClD6K,WACGA,UAAUC,UAAUxW,gBAAkBiW,QAAQO,UAAUxW,eACxDuW,UAAUE,QAAUR,QAAQQ,QAC3BF,UAAUtB,cAAcjV,eAAiB,OACrCiW,QAAQhB,cAAcjV,eAAiB,KAC5CuW,UAAUuG,cAAgB7G,QAAQ6G,aAE1C,IAAKrD,MAAO,CACR,MAAM,IAAI3C,WACN,+DAA+DnY,SAASsX,QAAQO,2BAA2B7X,SAASsX,QAAQrW,WAEpI,CACA,MAAMQ,MAAQtE,sBAAsB2d,OACpC,MAAMgE,WAAa1hB,oBAAoB0d,OACvC,GAAIgE,WAAWhT,OAAS,EAAG,CACvB,MAAM,IAAIkJ,UACN,wDAAwDhV,SAASsX,QAAQO,2BAA2B7X,SAASsX,QAAQrW,oCAAoC6d,WAAWxN,KAAK,QAEjL,CACAiH,KAAKuE,UAAUf,QAASta,OACxB,MAAMD,OAAS+W,MAAKyD,gBAAiBD,SACrC,MAAM3F,YAAiC,CACnCM,cAAeoE,MAAMjD,UACrBlB,MAAOmE,MAAMhD,MACblB,QAAS,KACLkE,MAAMxE,oBAAiB,EAAY,CAAA,EAAK,CAAExT,mBAAoBgY,MAAMxE,iBACpEwE,MAAMrE,WAAW3K,OACf,CAAErJ,UAAWpF,iCAAiCyd,QAC9C,CAAA,GAEVvC,MAAK+E,cACD9b,OAAOyD,KACP,IAAKzD,OAAQgB,YAAa4T,aAC1B1Z,iBAAiB+E,OACjBnE,0BAA0Bwd,QAE9B,OAAOvC,IACX,CAYA,gBAAAwG,CAAiBhD,SACb,MAAMva,OAAS+W,MAAKyD,gBAAiBD,SACrC,GAAIva,QAAU+W,MAAKzS,SAAUtE,SAASgW,kBAAmB,CACrD,MAAM,IAAIxC,UACN,yCAAyChV,SAASwB,OAAOG,iFAEjE,CACA,GAAIH,QAAQgB,YAAa,CACrB,MAAMpD,WAAYmZ,MAAKgG,qBAAsB/c,QAC7C,MAAMwd,KAAsB,CAAE/Z,KAAMzD,OAAOyD,KAAMtD,KAAMH,OAAOG,MAC9D,GAAIH,OAAOK,UAAO,EAAYmd,KAA0Bnd,GAAKL,OAAOK,GACpE,GAAIL,OAAOO,gBAAa,EAAW,CAC9Bid,KAA+Bjd,SAAWP,OAAOO,QACtD,CACA,GAAIP,OAAOuT,cAAW,EAAYiK,KAA6BjK,OAASvT,OAAOuT,OAC/E,GAAIvT,OAAO0B,aAAU,EAAY8b,KAA4B9b,MAAQ1B,OAAO0B,MAC5EqV,MAAK+E,cAAe9b,OAAOyD,KAAM+Z,KAAM5f,iBAAa,EACxD,CACA,OAAOmZ,IACX,CAoBA,gBAAA0G,CAAiBlD,QAAiBpH,IAC9B4D,MAAK2G,YAAanD,QAAS,CAAEla,GAAI8S,KACjC,OAAO4D,IACX,CAaA,iBAAA4G,CAAkBpD,QAAiBxW,UAC/B,IAAK4I,OAAOiQ,UAAU7Y,WAAaA,SAAW,GAAKA,SAAW,EAAG,CAC7D,MAAM,IAAI4S,WACN,2DAA2DnY,SAASuF,YAE5E,CACAgT,MAAK2G,YAAanD,QAAS,CAAEha,SAAUwD,WACvC,OAAOgT,IACX,CAWA,YAAA2G,CAAanD,QAAiBqD,OAC1B,MAAM5d,OAAS+W,MAAKyD,gBAAiBD,SACrC,IAAKva,OAAQ,CACT,MAAM,IAAI2W,WAAW,sBAAsBnY,SAAS+b,qBACxD,CACAxD,MAAK1S,QAASsR,IAAI3V,OAAOyD,KAAMzI,mBAAmB,IAAKgF,UAAW4d,SAClE7G,MAAKS,aACT,CAgCA,cAAAqG,CAAelN,QAAgC,CAAA,GAC3C,MAAMzL,KAAOhL,gBAAgB6c,MAAK/R,YAClC,MAAM+M,YAAcgF,MAAKuB,sBAAuB5V,MAChD,MAAMuP,cAAgB8E,MAAK+B,wBAAyBpW,MACpD,MAAMob,KAAO/G,MAAK6B,uBAAwBlW,MAC1C,MAAMyP,aAAe4E,MAAKgH,oBAAqBhM,aAC/C,OAAOtB,mBACH,CACIzL,WAAY+R,MAAK/R,cACb+R,MAAKnB,IAAKlE,gBAAa,EAAY,CAAA,EAAK,CAAElC,SAAUuH,MAAKnB,IAAKlE,aAC9DqF,MAAKnB,IAAKhE,iBAAc,EAAY,CAAA,EAAK,CAAED,UAAWoF,MAAKnB,IAAKhE,WACpEvN,QAAS0S,MAAK1S,WACVsM,QAAQoC,cAAgB,QAAU,CAAEE,OAAQ8D,MAAKmC,gBAAoB,CAAA,EACzEnI,eAAgBgG,MAAKhG,eACrBI,gBAAiBjM,MAAM8Y,UAAY,KACnCjM,wBACAE,4BACAI,aAAcyL,KACd3L,0BACA7N,SAAWtE,QAAW+W,MAAKzS,SAAUtE,SAEzC2Q,QAER,CAUA,MAAAtW,CAAOsW,SACH,OAAOtW,OAAe0c,KAAK8G,eAAelN,SAAUA,QAAQsN,OAChE,CAeA,YAAAC,CAAavN,SACT,OAAOrW,cAAcyc,KAAK1c,OAAOsW,SAAU,CAAEwN,OAAQxN,QAAQwN,QAAU,GAC3E,CAGA,oBAAAJ,CAAqBhM,aACjB,GAAIA,cAAgB,KAAM,OAAO,KACjC,IAAIqM,MACJ,IACIA,MAAQrH,MAAKsH,cACjB,CAAA,MAEI,OAAO,IACX,CACA,GAAID,QAAU,KAAM,OAAO,KAG3B,MAAME,KAAOvH,MAAK6B,uBAAwBlW,MAC1C,GAAI4b,OAAS,KAAM,OAAO,KAC1B,OAAO7hB,gBAAgBsV,YAAavM,KAAK6E,IAAIiU,KAAK9L,KAAM4L,MAAMG,SAAUH,MAC5E,CASA,mBAAIpf,GACA,MAAMof,MAAQrH,MAAKsH,eACnB,GAAID,QAAU,KAAM,MAAM,IAAI5K,UAAU,+CACxC,OAAO4K,KACX,CAGA,YAAAI,CAAaC,KACT,OAAOjZ,KAAK6E,IAAI0M,MAAK2H,sBAAuBlM,KAAMiM,IAAIF,QAC1D,CA2BA,yBAAA7hB,CAA0BiU,QAAuB,CAAA,GAC7C6F,mBAAmB,wCAAyC7F,SAC5D,MAAMmN,KAAOnN,QAAQmN,MAAQ/G,MAAK2H,sBAAuBlM,KACzD,OAAO9V,0BACHqa,MAAK4H,YAAahO,QAAQtD,OAAS,GACnCyQ,KACA/G,KAAK/X,gBAEb,CAcA,YAAAmT,GACI,MAAMsM,IAAM1H,KAAK/X,gBACjB,OAAOvC,gBAAgBsa,MAAK4H,YAAa,GAAI5H,MAAKyH,YAAaC,KAAMA,IACzE,CAaA,SAAAG,CAAUjO,QAAuB,CAAA,GAC7B6F,mBAAmB,wBAAyB7F,SAC5C,MAAM8N,IAAM1H,KAAK/X,gBACjB,MAAM8e,KAAOnN,QAAQmN,MAAQ/G,MAAK2H,sBAAuBlM,KACzD,OAAO/V,gBAAgBsa,MAAK4H,YAAahO,QAAQtD,OAAS,GAAIyQ,KAAMW,IACxE,CASA,cAAAI,GACI,OAAO9H,KAAK6H,UAAU,CAAEvR,MAAO0J,MAAK+H,wBACxC,CAcA,WAAAniB,CAAYoiB,SAAkBpO,QAAuB,CAAA,GACjD6F,mBAAmB,0BAA2B7F,SAC9C,MAAM8N,IAAM1H,KAAK/X,gBACjB,MAAM8e,KAAOnN,QAAQmN,MAAQ/G,MAAK2H,sBAAuBlM,KACzD,OAAO7V,YAAYoiB,SAAUhI,MAAK4H,YAAahO,QAAQtD,OAAS,GAAIyQ,KAAMW,IAC9E,CAsBA,UAAA7hB,CAAW+T,QAAuB,CAAA,GAC9B6F,mBAAmB,yBAA0B7F,SAC7C,OAAO/T,WACHma,MAAK4H,YAAahO,QAAQtD,OAAS,GACnCsD,QAAQmN,MAAQ/G,MAAK2H,sBAAuBlM,KAC5CuE,KAAK/X,gBAEb,CA0BA,gBAAAggB,GACI,MAAM3R,MAAQ0J,MAAK+H,uBACnB,MAAML,IAAM1H,KAAK/X,gBACjB,MAAMuf,QAAUxH,MAAKyH,YAAaC,KAClC,MAAO,CACHhZ,IAAKsR,KAAK5E,eACV8M,QAASlI,KAAK6H,YACdM,MAAOnI,KAAK6H,UAAU,CAAEvR,cACxB8R,SAAUpI,KAAKna,WAAW,CAAEkhB,KAAMS,UAClCa,aAAcrI,KAAKna,aACnByiB,WAAYtI,KAAKna,WAAW,CAAEyQ,cAEtC,CA2BA,WAAAxS,GACI,MAAMwJ,QAAU,IAAI0S,MAAK1S,QAAS6O,UAClC,MAAMoM,UAA6B,GACnC,IAAA,MAAWtf,UAAUqE,QAAS,CAC1B,MAAMyF,SAAWxG,iBAAiBtD,OAAQ+W,MAAKzS,SAAUtE,SACzD,GAAI8J,SAAUwV,UAAU3Z,KAAKmE,SACjC,CACA,OAAOjP,YACHuJ,eAAeC,QAAUrE,QAAW+W,MAAKzS,SAAUtE,SACnDsf,UAER,CA4BA,WAAA7hB,GACI,MAAMiT,MAAQ7H,aACVkO,MAAK/R,WACL+R,MAAKwI,2BACLxI,KAAKlc,cACJmF,QAAW+W,MAAKzS,SAAUtE,SAE/B,OAAO0Q,MAAQjT,YAAYiT,OAAS,IACxC,CAyBA,eAAAxT,CAAgByT,QAA2B,CAAA,GACvC,MAAM1K,YAAc0K,QAAQ1K,aAAe,EAC3C,IAAK0G,OAAO+J,SAASzQ,cAAgBA,YAAc,GAAKA,YAAc,EAAG,CACrE,MAAM,IAAI0Q,WACN,+EAER,CACAH,mBAAmB,8BAA+B7F,SAClD,MAAMD,MAAQ3K,iBACVgR,MAAK/R,WACL,IAAI+R,MAAK1S,QAAS6O,UAClB,KACI,MAAMV,KACF7B,QAAQmN,MACR/G,MAAKnB,IAAKtD,cAAcC,MACxBwE,MAAK2H,sBAAuBlM,KAChC,OAAOuE,MAAK4H,YAAahO,QAAQtD,OAAS,GAAKmF,MAEnDvM,YACCjG,QAAW+W,MAAKzS,SAAUtE,SAE/B,OAAO0Q,MAAQxT,gBAAgBwT,OAAS,IAC5C,CA2BA,aAAA1W,CAAc2W,QAA0B,CAAA,GACpC,MAAMD,MAAQ3L,eACVgS,MAAK/R,WACL,IAAI+R,MAAK1S,QAAS6O,UAClBvC,QAAQ1L,aAAe,EACtBjF,QAAW+W,MAAKzS,SAAUtE,SAE/B,IAAK0Q,MAAMvL,UAAW,OAAO,KAC7B,OAAOnL,cAAc0W,MACzB,CAiBA,cAAA5W,CAAe6W,QAA0B,CAAA,GACrC,MAAM1L,YAAc0L,QAAQ1L,aAAe,EAC3C,IAAK0H,OAAO+J,SAASzR,cAAgBA,YAAc,GAAKA,YAAc,EAAG,CACrE,MAAM,IAAI0R,WACN,8EAER,CACA,MAAMjG,MAAQtJ,uBACV2P,MAAK/R,WACL,IAAI+R,MAAK1S,QAAS6O,UAClBjO,YACCjF,QAAW+W,MAAKzS,SAAUtE,SAE/B,OAAO0Q,MAAQ5W,eAAe4W,OAAS,IAC3C,CAcA,SAAA8O,GACI,MAAM9U,MAAQD,kBAAkB,IAAIsM,MAAK1S,QAAS6O,UAAYlT,QAC1D+W,MAAKzS,SAAUtE,SAEnB,MAAMiT,OAAS8D,MAAKmC,eACpB,GAAIjG,OAAQ,CACR,MAAMwM,MAAQ,IAAI/L,IACdT,OAAOpJ,IAAI,CAAC3J,KAAM2P,QAAU,CAAC3P,KAAKsC,IAAI3C,cAAegQ,SAEzDnF,MAAMgV,KACF,CAACC,KAAMC,SACFH,MAAM9L,IAAIgM,KAAKzf,KAAKL,gBAAkB8M,OAAOkT,mBAC7CJ,MAAM9L,IAAIiM,MAAM1f,KAAKL,gBAAkB8M,OAAOkT,kBAE3D,CACA,OAAO9lB,gBAAgB2Q,MAC3B,CAcA,aAAAoV,GACI,MAAM5a,KAAOhL,gBAAgB6c,MAAK/R,aAAcgZ,UAAY,KAC5D,IAAI3Z,QAAU,EACd,MAAM0b,SAA+C,GACrD,IAAA,MAAW/f,UAAU+W,MAAK1S,QAAS6O,SAAU,CACzC,MAAMjT,MAAQ8W,MAAKzS,SAAUtE,QAC7B,GAAIC,OAAO6T,YAAS,EAAW,CAC3BzP,SAAWpE,MAAM6T,IACrB,MAAA,GACI7T,QAAU,OACRnF,oBAAoBkF,OAAOyD,QAAU1I,oBAAoBiF,QAC7D,CACE+f,SAASpa,KAAK,CAAEzF,KAAMF,OAAOyD,KAAMhE,OAAQO,OAAOG,MACtD,CACJ,CACA,OAAOvB,WAAW,CACdsG,UACAb,gBACAiN,MAAOpM,OAAS,KAAO,KAAOM,KAAK+L,OAAOrM,KAAOb,SAAW,KAC5D0b,mBAER,CAqBA,aAAApiB,GACI,OAAOA,cACH+N,eAAeqL,MAAK/R,WAAa,IAAI+R,MAAK1S,QAAS6O,UAAYlT,QAC3D+W,MAAKzS,SAAUtE,SAG3B,CAyBA,aAAA7D,GACI,MAAM+M,QAAiC,GACvC,IAAA,MAAWlJ,UAAU+W,MAAK1S,QAAS6O,SAAU,CACzC,MAAM8M,OAASjJ,MAAKzS,SAAUtE,QAC9B,MAAMC,MAAQsI,eAAewO,MAAK2D,wBAAyB1a,QAASggB,QACpE,IAAK/f,MAAO,SACZiJ,QAAQvD,KAAK,CACTzF,KAAMF,OAAOyD,KACbhE,OAAQO,OAAOG,KACfmL,KAAM0U,QAAQ1U,MAAQtL,OAAOG,KAC7B6D,QAAShE,OAAOK,KAAO,MACvB4f,QAAS9jB,cAAc8D,OACvB0K,WAAYjN,mBAAmBuC,QAEvC,CACA,MAAO,CACHiJ,gBACAiB,MAAO/N,iBACH8M,QAAQ6Q,OAAQzR,QAAWA,OAAOtE,SAAS6F,IAAKvB,QAAWA,OAAO2X,UAG9E,CAsBA,uBAAApmB,CAAwB8W,QAA0B,CAAA,GAC9C,MAAM5I,YAAc4I,QAAQ5I,aAAe,EAC3C,IAAK4E,OAAO+J,SAAS3O,cAAgBA,YAAc,GAAKA,YAAc,EAAG,CACrE,MAAM,IAAI4O,WACN,uFAER,CACA,OAAO9c,wBACHiO,yBACIiP,MAAKwI,2BACLxX,YACAgP,KAAKlc,cACJmF,QAAW+W,MAAKzS,SAAUtE,SAGvC,CA6BA,kBAAAzC,CAAmBoT,QAA8B,CAAA,GAC7C,MAAMlI,KAAO,CACTxD,YAAa0L,QAAQ1L,aAAe,EACpCgB,YAAa0K,QAAQ1K,aAAe,EACpC8B,YAAa4I,QAAQ5I,aAAe,GAExC,IAAA,MAAWtH,QAAS,CAAC,cAAe,cAAe,eAAyB,CACxE,MAAMiC,MAAQ+F,KAAKhI,OACnB,IAAKkM,OAAO+J,SAAShU,QAAUA,MAAQ,GAAKA,MAAQ,EAAG,CACnD,MAAM,IAAIiU,WACN,mCAAmClW,4CAE3C,CACJ,CACA,MAAMiQ,MAAQlI,oBACVuO,MAAKwI,2BACL9W,KACAsO,KAAKlc,cACJmF,QAAW+W,MAAKzS,SAAUtE,SAE/B,OAAO0Q,MAAQnT,mBAAmBmT,OAAS,IAC/C,CASA,aAAAwI,GACI,GAAInC,MAAKU,mBAAiB,EAAW,CACjC,MAAMxE,OAAShZ,aAAa8c,MAAK/R,YACjC+R,MAAKU,YAAexE,SAAW,KAAO,KAAO5Q,OAAOqW,OAAOle,eAAeyY,QAC9E,CACA,OAAO8D,MAAKU,WAChB,CAGA,WAAAyI,GACInJ,MAAKQ,UACLR,MAAKS,aACT,CAEA,OAAAvE,GACI,MAAMA,OAAS8D,MAAKmC,eACpB,IAAKjG,OAAQ,CACT,MAAM,IAAIO,UACN,yCAAyChV,SAASuY,MAAK/R,eAE/D,CACA,OAAOiO,MACX,CAEA,YAAAiI,CAAaX,SACT,MAAM4F,OAASzhB,cAAc6b,QAAShE,UAAU1W,cAChD,MAAMK,KAAO6W,MAAK9D,SAAU1H,KAAM6U,GAAMA,EAAE5d,IAAI3C,gBAAkBsgB,QAChE,IAAKjgB,KAAM,CACP,MAAM,IAAIyW,WACN,sBAAsBnY,SAASuY,MAAK/R,6BAA8BxG,SAAS+b,YAEnF,CACA,OAAOra,IACX,CAMA,UAAA2b,CAAWtB,SACP,OAAOxe,cAAcgb,MAAK1S,QAAU3F,cAAc6b,QAAShE,UAC/D,CAGA,gBAAAiE,CAAiBD,SACb,MAAM/X,IAAMuU,MAAK8E,UAAWtB,SAC5B,OAAO/X,MAAQ,UAAO,EAAYuU,MAAK1S,QAASsP,IAAInR,IACxD,CAGA,QAAA6d,CAAYC,OAA8BC,MACtC,GAAID,OAAO5d,QAAU,KAAM,CACvB,MAAM,IAAI8Q,UACN,iCAAiC+M,SAASD,OAAOE,OAAO3W,IAAK4W,GAAMA,EAAE5R,SAASiB,KAAK,SAE3F,CACA,OAAOwQ,OAAO5d,KAClB,CAGA,YAAAic,CAAatR,OACT,OAAO0J,MAAKsJ,QAAStJ,KAAKsB,kBAAmB,QAAUhL,KAC3D,CAGA,oBAAAqR,GACI,OAAO3H,MAAKsJ,QAAStJ,KAAKyB,mBAAoB,gBAClD,CAGA,qBAAAsG,GACI,OAAO/H,MAAKsJ,QAAStJ,KAAK8B,oBAAqB,iBACnD,CAGA,mBAAAN,GACI,MAAMU,OAASlC,MAAKW,iBACpB,GAAIuB,SAAW,MAAQA,OAAO1B,UAAYR,MAAKQ,QAAA,OAAiB0B,OAAOvW,MACvE,MAAMA,MAAQqU,MAAK2J,4BACnB3J,MAAKW,iBAAoB,CAAEH,QAASR,MAAKQ,QAAU7U,aACnD,OAAOA,KACX,CAEA,0BAAAge,GACI,MAAO,IAAI3J,MAAK1S,QAAS6O,UAAUrJ,IAAK7J,SACpC,MAAMC,MAAQ8W,MAAKzS,SAAUtE,QAC7B,MAAMP,OAASO,OAAOG,KAAKN,cAC3B,MAAM2D,WAAa/I,cAAcuF,OAAOyD,MACxC,MAAMkd,qBACF1gB,QAAU,OAASnF,oBAAoBkF,OAAOyD,QAAU1I,oBAAoBiF,QAChF,MAAM4gB,YACF3gB,OAAOgS,qBAAkB,GACzBhS,OAAO0C,mBAAqB,cAC5BlD,OAAOohB,SAAS,aACpB,MAAM1Q,WACFlQ,OAAOoS,oBAAiB,GACxBpS,OAAOC,OAAS,YAChBT,OAAOK,WAAWqX,kBACtB,MAAM2J,iBACFH,uBAAyBnd,aAAe,MAAQA,WAAWK,OAAS,YACxE,MAAMkd,aACFD,kBACCH,sBACGnd,YAAYK,OAAS,QACrBL,WAAWU,OAAS,WAC5B,MAAO,CACHhE,KAAMF,OAAOyD,KACbhE,OAAQO,OAAOG,KACf6F,KAAM+Q,MAAKiK,WAAYhhB,WACnB4gB,aAAeE,iBACb,CACI7O,cAAe2O,YACT7J,MAAKkK,eAAgBjhB,OAAQ,gBAAiB,iBAC9C,MAEV,CAAA,KACFmQ,YAAc4Q,aACZ,CACI1O,aAAclC,WACR4G,MAAKkK,eAAgBjhB,OAAQ,eAAgB,gBAC7C,MAEV,CAAA,IAGlB,CAGA,aAAAia,GACI,MAAMzE,QAAU,IAAIuB,MAAK1S,QAAS6O,UAAU4H,QAAS9a,SACjD,MAAMC,MAAQ8W,MAAKzS,SAAUtE,QAC7B,OAAOC,QAAU,KAAO,GAAK,CAACA,SAElC,OAAO9C,sBAAsBqY,QACjC,CAGA,cAAA0E,CAAeK,SACX,MAAMpG,OAAS4C,MAAKyD,gBAAiBD,SACrC,OAAOpG,cAAW,EAAY,KAAO4C,MAAKzS,SAAU6P,OACxD,CAGA,qBAAA4I,CAAsB/c,QAClB,MAAMmU,OAAS4C,MAAKzS,SAAUtE,QAC9B,IAAKA,OAAOgB,aAAe/F,6BAA6B+E,UAAY,KAAM,OAAOmU,OACjF,MAAMlI,MAAQ3P,sBAAsB0D,OAAOG,KAAMnE,aACjD,IAAKiQ,MAAO,OAAOkI,OACnB,OAAOA,QAAQ6B,kBACT9a,iBAAiB,IAAK+Q,MAAO+J,kBAAmB,OAChD/J,KACV,CAGA,wBAAAyO,CAAyB1a,QACrB,MAAMiV,UAAY8B,MAAKO,mBAAoB3D,IAAI3T,OAAOyD,MACtD,GAAIwR,iBAAc,GAAajV,OAAOgB,mBAAgB,EAAW,OAAOhB,OACxE,MAAO,IACAA,OACHgB,YAAa,IAAKhB,OAAOgB,YAAaC,UAAWgU,WAEzD,CAGA,yBAAAsK,GACI,MAAO,IAAIxI,MAAK1S,QAAS6O,UAAUrJ,IAAK7J,QAAW+W,MAAK2D,wBAAyB1a,QACrF,CAGA,sBAAAoa,CACIG,QACA2G,YACAC,QAAUpK,MAAKkD,eACfmH,SAAWrK,MAAKmD,cAAeK,UAE/B,GACI6G,UAAUxH,kBAAe,GACzBwH,UAAUvH,qBAAkB,GAC5BqH,aAAatH,kBAAe,GAC5BsH,aAAarH,qBAAkB,EACjC,CACE,OAAO,IACX,CACA,IAAA,MAAWwH,SAASF,QAAS,CACzB,MAAMxF,MACF0F,MAAM1F,MACNhP,OAAOyU,UAAUxH,aAAeyH,MAAMjG,OACtCzO,OAAOuU,aAAatH,aAAeyH,MAAMjG,OAC7C,MAAMkG,SACFD,MAAMC,UACLF,UAAUvH,eAAeuB,QAAUiG,MAAMjG,MACpCgG,SAASvH,cAAc0H,OACvB,IACLL,aAAarH,eAAeuB,QAAUiG,MAAMjG,MACvC8F,YAAYrH,cAAc0H,OAC1B,GACV,MAAM3F,MAAQyF,MAAMG,UAAYF,SAChC,MAAMG,OAASjc,KAAKC,IAAI,EAAGkW,MAAQC,OACnC,GAAI6F,OAASJ,MAAMI,OAAQ,CACvB,MAAO,IAAKJ,MAAOC,kBAAU1F,YAAOD,YAAO8F,cAC/C,CACJ,CACA,OAAO,IACX,CAGA,cAAA3F,CACIvB,QACA2G,YACAQ,iBACApK,oBAEA,MAAM8J,SAAWrK,MAAK1S,QAASsP,IAAI4G,UAAY,KAC/CxD,MAAK4K,sBAAuBP,SAAUF,YAAaQ,kBACnD,GAAIR,cAAgB,KAAM,CACtBnK,MAAK1S,QAASuP,OAAO2G,SACrBxD,MAAKlB,YAAajC,OAAO2G,SACzBxD,MAAKO,mBAAoB1D,OAAO2G,QACpC,KAAO,CACHxD,MAAK1S,QAASsR,IAAI4E,QAASvf,mBAAmBkmB,cAC9C,GAAIQ,wBAAqB,EAAW3K,MAAKlB,YAAaF,IAAI4E,QAASmH,kBACnE,GAAIpK,0BAAuB,EAAWP,MAAKO,mBAAoB1D,OAAO2G,cACjExD,MAAKO,mBAAoB3B,IAAI4E,QAASjD,mBAC/C,CACAP,MAAKmJ,YACT,CAMA,sBAAAyB,CACIP,SACAQ,KACAC,WAEA,MAAMC,aAAe/K,MAAKiK,WAAYI,UACtC,MAAMW,SAAWhL,MAAKiK,WAAYY,KAAMC,WACxC,GAAI9K,MAAKnB,IAAK5D,mBAAgB,EAAW,CACrC,GAAI8P,eAAiB,MAAQC,WAAa,YAAahL,MAAKnB,IAAK5D,iBAC5D+E,MAAKnB,IAAK5D,aAAe+P,SAAWD,YAC7C,CAEA,MAAME,cAAgBjL,MAAKkK,eAAgBG,SAAU,gBAAiB,iBACtE,MAAMa,UAAYlL,MAAKkK,eAAgBW,KAAM,gBAAiB,gBAAiBC,WAC/E,GAAI9K,MAAKnB,IAAK1D,qBAAkB,EAAW,CACvC,GAAI8P,gBAAkB,MAAQC,YAAc,YAAalL,MAAKnB,IAAK1D,mBAC9D6E,MAAKnB,IAAK1D,eAAiB+P,UAAYD,aAChD,CAEA,MAAME,aAAenL,MAAKkK,eAAgBG,SAAU,eAAgB,gBACpE,MAAMe,SAAWpL,MAAKkK,eAAgBW,KAAM,eAAgB,eAAgBC,WAC5E,GAAI9K,MAAKnB,IAAKtD,cAAcC,YAAS,EAAW,CAC5C,MAAMG,QAAUqE,MAAKnB,IAAKtD,aAAaG,QACvC,GAAIyP,eAAiB,MAAQC,WAAa,KAAM,CAC5C,GAAIzP,eAAY,SAAkBqE,MAAKnB,IAAKtD,kBACvCyE,MAAKnB,IAAKtD,aAAe,CAAEG,QAASC,QAC7C,KAAO,CACHqE,MAAKnB,IAAKtD,aAAe,CACrBC,KAAMwE,MAAKnB,IAAKtD,aAAaC,KAAO4P,SAAWD,gBAC3CxP,eAAY,EAAY,CAAA,EAAK,CAAED,QAASC,SAEpD,CACJ,CAIA,GAAInU,aAAa6iB,UAAUjhB,KAAMnE,eAAiBuC,aAAaqjB,MAAMzhB,KAAMnE,aAAc,CACrF,MACJ,QAGO+a,MAAKnB,IAAK9D,oBACViF,MAAKnB,IAAKjD,KACrB,CASA,WAAAqO,CAAYhhB,OAA8BoiB,eACtC,GAAIpiB,SAAW,KAAM,OAAO,EAC5B,MAAMc,SAAWvG,mBAAmByF,OAAQ,QAC5C,GAAIc,WAAa,KAAM,OAAOA,SAC9B,MAAMb,MAAQmiB,eAAiBrL,MAAKzS,SAAUtE,QAC9C,GAAIC,OAAO+F,YAAS,EAAW,OAAO/F,MAAM+F,KAM5C,GAAIjL,oBAAoBiF,QAAS,OAAO,EACxC,OAAOC,QAAU,MAAQnF,oBAAoBkF,OAAOyD,MAAQ,EAAI,IACpE,CAMA,eAAAwd,CACIjhB,OACAqiB,cACA5hB,MACA2hB,eAEA,GAAIpiB,SAAW,KAAM,OAAO,EAC5B,MAAMc,SAAWvG,mBAAmByF,OAAQqiB,eAC5C,GAAIvhB,WAAa,KAAM,OAAOA,SAC9B,MAAMb,MAAQmiB,eAAiBrL,MAAKzS,SAAUtE,QAC9C,GAAIC,QAAQQ,cAAW,EAAW,OAAOR,MAAMQ,OAC/C,MAAMhB,OAASO,OAAOG,KAAKN,cAI3B,MAAMsQ,WAAalQ,OAAOC,KACpBD,MAAMC,OAAS,WACfT,OAAOK,WAAWqX,kBACxB,MAAMmL,oBACF7hB,QAAU,gBAAkBhB,OAAOohB,SAAS,aAAe1Q,WAC/D,OAAOmS,oBAAsB,KAAO,CACxC,CAEA,aAAAjE,GACI,IAAIkE,UACJ,IAAA,MAAWC,KAAKzL,MAAK1S,QAAS6O,SAAU,CAIpC,MAAMjT,MAAQ8W,MAAKzS,SAAUke,GAC7B,MAAMC,QAAUxiB,OAAOC,KACjBD,MAAMC,OAAS,kBACfsiB,EAAEriB,KAAKN,cAAcC,WAAWmX,YACtC,GAAIwL,QAAS,CACTF,UAAYC,EACZ,KACJ,CACJ,CACA,IAAKD,UAAW,OAAO,KACvB,MAAM3hB,KAAOmW,MAAKzS,SAAUie,WAC5B,IAAK3hB,MAAQA,KAAK8hB,eAAY,GAAa9hB,KAAK+hB,iBAAc,EAAW,CAIrE,MAAM,IAAInP,UACN,gFAAgFhV,SAAS+jB,UAAUpiB,SAE3G,CAEA,MAAMoF,QAAUhL,mBAAmBgoB,UAAW,mBAAqB3hB,KAAK2E,QACxE,MAAMgZ,QAAUhkB,mBAAmBgoB,UAAW,mBAAqB3hB,KAAK2d,QACxE,GAAIhZ,eAAY,GAAagZ,eAAY,EAAW,CAChD,MAAMtB,QAAU,IACR1X,eAAY,EAAY,CAAC,WAAa,MACtCgZ,eAAY,EAAY,CAAC,WAAa,IAE9C,MAAM,IAAI/K,UACN,mCAAmChV,SAAS+jB,UAAUpiB,iBAAiB8c,QAAQnN,KAAK,iCAE5F,CAEA,MAAO,CACHvK,gBACAgZ,gBACAmE,QAAS9hB,KAAK8hB,QACdC,UAAW/hB,KAAK+hB,UAChBC,UAAW7L,MAAK8L,mBAExB,CAGA,iBAAAA,GACI,IAAA,MAAWL,KAAKzL,MAAK1S,QAAS6O,SAAU,CACpC,MAAMjT,MAAQ8W,MAAKzS,SAAUke,GAC7B,GACIviB,OAAO0C,mBAAqB,gBAC3B6f,EAAEriB,KAAKN,cAAcC,WAAWoX,gBACnC,CACE,QACJ,CACA,GAAIsL,EAAEniB,KAAO,MAAO,SACpB,GAAIJ,OAAO2iB,iBAAc,EAAW,CAChC,MAAM,IAAIpP,UACN,6BAA6BhV,SAASgkB,EAAEriB,iDAEhD,CACA,OAAOF,MAAM2iB,SACjB,CACA,OAAO,CACX,CAGA,SAAAte,CAAUtE,QACN,GAAIA,SAAW,KAAM,OAAO,KAC5B,MAAMC,MACF8W,MAAKlB,YAAalC,IAAI3T,OAAOyD,OAASnH,sBAAsB0D,OAAOG,KAAMnE,aAC7E,GAAIiE,MAAO,OAAOA,MAIlB,OAAOlF,oBAAoBiF,QACrB1D,sBAAsB,sBAAuB,gCAC7C,IACV,UACJsa,iBAAAQ"}