@elite-dangerous-almanac/core 0.2.5 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PROVENANCE/i18n/SOURCES.md +199 -113
- package/PROVENANCE/materials/SOURCES.md +22 -0
- package/PROVENANCE/ships/SOURCES.md +254 -59
- package/README.md +17 -11
- package/assets/ships/LakonMiner/schematic-bottom.svg +5 -3
- package/assets/ships/LakonMiner/schematic-top.svg +2 -4
- package/dist/{chunk-XM4VA2WE.js → chunk-4U7KYQGK.js} +1 -1
- package/dist/{chunk-XM4VA2WE.js.map → chunk-4U7KYQGK.js.map} +1 -1
- package/dist/{chunk-7EWZGDWY.js → chunk-7S7ZTZZY.js} +1 -1
- package/dist/chunk-A5TCT2AJ.js +1 -0
- package/dist/{chunk-AIEC3LBT.js.map → chunk-A5TCT2AJ.js.map} +1 -1
- package/dist/chunk-A7IVMYNF.js +1 -0
- package/dist/chunk-A7IVMYNF.js.map +1 -0
- package/dist/{chunk-2OBUSQA7.js → chunk-AAU7OM47.js} +1 -1
- package/dist/{chunk-2OBUSQA7.js.map → chunk-AAU7OM47.js.map} +1 -1
- package/dist/{chunk-KPJ77VPS.js → chunk-BJU27V6C.js} +1 -1
- package/dist/{chunk-KPJ77VPS.js.map → chunk-BJU27V6C.js.map} +1 -1
- package/dist/{chunk-DSMLYA2M.js → chunk-BMQM4JBL.js} +1 -1
- package/dist/{chunk-DSMLYA2M.js.map → chunk-BMQM4JBL.js.map} +1 -1
- package/dist/chunk-C3LLPLLD.js +1 -0
- package/dist/chunk-C3LLPLLD.js.map +1 -0
- package/dist/chunk-EHFHRQEP.js +1 -0
- package/dist/{chunk-GLWPSVFV.js.map → chunk-EHFHRQEP.js.map} +1 -1
- package/dist/{chunk-YCGISPDR.js → chunk-ETWMPMZP.js} +1 -1
- package/dist/{chunk-3NPVWPOV.js → chunk-F7VWRDSL.js} +1 -1
- package/dist/chunk-F7VWRDSL.js.map +1 -0
- package/dist/{chunk-4CBMQULR.js → chunk-FMA36V6A.js} +1 -1
- package/dist/{chunk-4CBMQULR.js.map → chunk-FMA36V6A.js.map} +1 -1
- package/dist/chunk-IZIIGK3W.js +1 -0
- package/dist/{chunk-TW7LUBHD.js.map → chunk-IZIIGK3W.js.map} +1 -1
- package/dist/chunk-KBCA4GEZ.js +1 -0
- package/dist/chunk-KLC5XT6F.js +1 -0
- package/dist/chunk-KLC5XT6F.js.map +1 -0
- package/dist/chunk-M6J7KP7G.js +1 -0
- package/dist/chunk-M6J7KP7G.js.map +1 -0
- package/dist/chunk-MRLUWHGI.js +1 -0
- package/dist/{chunk-FF2X4K5P.js.map → chunk-MRLUWHGI.js.map} +1 -1
- package/dist/chunk-MVBVXK3G.js +1 -0
- package/dist/chunk-MVBVXK3G.js.map +1 -0
- package/dist/{chunk-HBQELOBY.js → chunk-NZXSIHAW.js} +1 -1
- package/dist/{chunk-HBQELOBY.js.map → chunk-NZXSIHAW.js.map} +1 -1
- package/dist/{chunk-IWFQ4ZKF.js → chunk-OFZGNWBT.js} +1 -1
- package/dist/chunk-PF3HZ73R.js +1 -0
- package/dist/{chunk-ITKZKREP.js.map → chunk-PF3HZ73R.js.map} +1 -1
- package/dist/chunk-QJECDMQQ.js +1 -0
- package/dist/{chunk-LZYHBFJC.js.map → chunk-QJECDMQQ.js.map} +1 -1
- package/dist/chunk-T7IQHFQ2.js +1 -0
- package/dist/chunk-T7IQHFQ2.js.map +1 -0
- package/dist/chunk-TSEDU73T.js +1 -0
- package/dist/chunk-TSEDU73T.js.map +1 -0
- package/dist/chunk-XFDMCPDW.js +1 -0
- package/dist/{chunk-GRSNX36B.js.map → chunk-XFDMCPDW.js.map} +1 -1
- package/dist/chunk-XRGECU7S.js +1 -0
- package/dist/chunk-XRGECU7S.js.map +1 -0
- package/dist/{chunk-OLKNYGGT.js → chunk-XSLPWM5N.js} +1 -1
- package/dist/chunk-XSN53F7W.js +1 -0
- package/dist/{chunk-DBGXZF7O.js.map → chunk-XSN53F7W.js.map} +1 -1
- package/dist/chunk-ZEN5K3GE.js +1 -0
- package/dist/{chunk-WR6ZFHTO.js.map → chunk-ZEN5K3GE.js.map} +1 -1
- package/dist/chunk-ZZTDEDXJ.js +1 -0
- package/dist/{chunk-FA5JVXVG.js.map → chunk-ZZTDEDXJ.js.map} +1 -1
- package/dist/equipment/index.js +1 -1
- package/dist/equipment/upgrade-costs.js +1 -1
- package/dist/equipment/upgrade-costs.js.map +1 -1
- package/dist/i18n/experimental-effect-descriptions.d.ts +21 -6
- package/dist/i18n/experimental-effect-descriptions.js +1 -1
- package/dist/i18n/experimental-effects.js +1 -1
- package/dist/i18n/index.d.ts +0 -2
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/materials.d.ts +7 -6
- package/dist/i18n/materials.js +1 -1
- package/dist/i18n/micro-resources.d.ts +7 -6
- package/dist/i18n/micro-resources.js +1 -1
- package/dist/i18n/modules.d.ts +10 -7
- package/dist/i18n/modules.js +1 -1
- package/dist/i18n/pre-engineered.js +1 -1
- package/dist/materials/index.js +1 -1
- package/dist/materials/materials-all.js +1 -1
- package/dist/materials/materials-encoded.js +1 -1
- package/dist/materials/materials-manufactured.js +1 -1
- package/dist/materials/materials.js +1 -1
- package/dist/materials/micro-resources-all.js +1 -1
- package/dist/materials/micro-resources.js +1 -1
- package/dist/ships/blueprint-costs.js +1 -1
- package/dist/ships/blueprint-journal.js +1 -1
- package/dist/ships/build-metrics.js +1 -1
- package/dist/ships/engineering-options.d.ts +12 -6
- package/dist/ships/engineering-options.js +1 -1
- package/dist/ships/engineering.js +1 -1
- package/dist/ships/gunsights.d.ts +2 -2
- package/dist/ships/gunsights.js +1 -1
- package/dist/ships/index.d.ts +5 -5
- package/dist/ships/index.js +1 -1
- package/dist/ships/loadout-calculations.d.ts +11 -2
- package/dist/ships/loadout-calculations.js +1 -1
- package/dist/ships/loadout-validation.js +1 -1
- package/dist/ships/modules-all.d.ts +2 -2
- package/dist/ships/modules-all.js +1 -1
- package/dist/ships/modules-core.d.ts +3 -3
- package/dist/ships/modules-core.js +1 -1
- package/dist/ships/modules-hardpoint.d.ts +1 -1
- package/dist/ships/modules-internal.d.ts +1 -1
- package/dist/ships/modules-internal.js +1 -1
- package/dist/ships/modules-utility.d.ts +1 -1
- package/dist/ships/modules.d.ts +9 -6
- package/dist/ships/modules.js +1 -1
- package/dist/ships/pre-engineered-stats.js +1 -1
- package/dist/ships/pre-engineered.js +1 -1
- package/dist/ships/ship-loadout.d.ts +65 -23
- package/dist/ships/ship-loadout.js +1 -1
- package/dist/ships/weapons.js +1 -1
- package/package.json +1 -9
- package/dist/chunk-3NPVWPOV.js.map +0 -1
- package/dist/chunk-5QSCLEEB.js +0 -1
- package/dist/chunk-5QSCLEEB.js.map +0 -1
- package/dist/chunk-5VBB5CTV.js +0 -1
- package/dist/chunk-5VBB5CTV.js.map +0 -1
- package/dist/chunk-5ZVYRX6Z.js +0 -1
- package/dist/chunk-5ZVYRX6Z.js.map +0 -1
- package/dist/chunk-AIEC3LBT.js +0 -1
- package/dist/chunk-DAQ3PJ4R.js +0 -1
- package/dist/chunk-DAQ3PJ4R.js.map +0 -1
- package/dist/chunk-DBGXZF7O.js +0 -1
- package/dist/chunk-DCB4COCL.js +0 -1
- package/dist/chunk-DCB4COCL.js.map +0 -1
- package/dist/chunk-FA5JVXVG.js +0 -1
- package/dist/chunk-FF2X4K5P.js +0 -1
- package/dist/chunk-G2VSQFD6.js +0 -1
- package/dist/chunk-G2VSQFD6.js.map +0 -1
- package/dist/chunk-GLWPSVFV.js +0 -1
- package/dist/chunk-GRSNX36B.js +0 -1
- package/dist/chunk-ITKZKREP.js +0 -1
- package/dist/chunk-J4PCK4RV.js +0 -1
- package/dist/chunk-J4PCK4RV.js.map +0 -1
- package/dist/chunk-JO52LYO3.js +0 -1
- package/dist/chunk-KJFUNIIY.js +0 -1
- package/dist/chunk-KJFUNIIY.js.map +0 -1
- package/dist/chunk-LZYHBFJC.js +0 -1
- package/dist/chunk-OJC6AUL7.js +0 -1
- package/dist/chunk-OJC6AUL7.js.map +0 -1
- package/dist/chunk-TW7LUBHD.js +0 -1
- package/dist/chunk-WR6ZFHTO.js +0 -1
- package/dist/i18n/engineering-groups.d.ts +0 -21
- package/dist/i18n/engineering-groups.js +0 -1
- package/dist/i18n/engineering-groups.js.map +0 -1
- package/dist/i18n/ships.d.ts +0 -36
- package/dist/i18n/ships.js +0 -1
- package/dist/i18n/ships.js.map +0 -1
- /package/dist/{chunk-7EWZGDWY.js.map → chunk-7S7ZTZZY.js.map} +0 -0
- /package/dist/{chunk-YCGISPDR.js.map → chunk-ETWMPMZP.js.map} +0 -0
- /package/dist/{chunk-JO52LYO3.js.map → chunk-KBCA4GEZ.js.map} +0 -0
- /package/dist/{chunk-IWFQ4ZKF.js.map → chunk-OFZGNWBT.js.map} +0 -0
- /package/dist/{chunk-OLKNYGGT.js.map → chunk-XSLPWM5N.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getLocalizedName,createDeduplicatedLocalizedNameIndex}from"./chunk-RVIYOHYF.js";var module_names_default={nameKeys:{SideWinder_Armour_Grade1:"Lightweight Alloy",SideWinder_Armour_Grade2:"Reinforced Alloy",SideWinder_Armour_Grade3:"Military Grade Composite",SideWinder_Armour_Mirrored:"Mirrored Surface Composite",SideWinder_Armour_Reactive:"Reactive Surface Composite",Eagle_Armour_Grade1:"Lightweight Alloy",Eagle_Armour_Grade2:"Reinforced Alloy",Eagle_Armour_Grade3:"Military Grade Composite",Eagle_Armour_Mirrored:"Mirrored Surface Composite",Eagle_Armour_Reactive:"Reactive Surface Composite",Hauler_Armour_Grade1:"Lightweight Alloy",Hauler_Armour_Grade2:"Reinforced Alloy",Hauler_Armour_Grade3:"Military Grade Composite",Hauler_Armour_Mirrored:"Mirrored Surface Composite",Hauler_Armour_Reactive:"Reactive Surface Composite",Adder_Armour_Grade1:"Lightweight Alloy",Adder_Armour_Grade2:"Reinforced Alloy",Adder_Armour_Grade3:"Military Grade Composite",Adder_Armour_Mirrored:"Mirrored Surface Composite",Adder_Armour_Reactive:"Reactive Surface Composite",Viper_Armour_Grade1:"Lightweight Alloy",Viper_Armour_Grade2:"Reinforced Alloy",Viper_Armour_Grade3:"Military Grade Composite",Viper_Armour_Mirrored:"Mirrored Surface Composite",Viper_Armour_Reactive:"Reactive Surface Composite",CobraMkIII_Armour_Grade1:"Lightweight Alloy",CobraMkIII_Armour_Grade2:"Reinforced Alloy",CobraMkIII_Armour_Grade3:"Military Grade Composite",CobraMkIII_Armour_Mirrored:"Mirrored Surface Composite",CobraMkIII_Armour_Reactive:"Reactive Surface Composite",Type6_Armour_Grade1:"Lightweight Alloy",Type6_Armour_Grade2:"Reinforced Alloy",Type6_Armour_Grade3:"Military Grade Composite",Type6_Armour_Mirrored:"Mirrored Surface Composite",Type6_Armour_Reactive:"Reactive Surface Composite",Dolphin_Armour_Grade1:"Lightweight Alloy",Dolphin_Armour_Grade2:"Reinforced Alloy",Dolphin_Armour_Grade3:"Military Grade Composite",Dolphin_Armour_Mirrored:"Mirrored Surface Composite",Dolphin_Armour_Reactive:"Reactive Surface Composite",Type7_Armour_Grade1:"Lightweight Alloy",Type7_Armour_Grade2:"Reinforced Alloy",Type7_Armour_Grade3:"Military Grade Composite",Type7_Armour_Mirrored:"Mirrored Surface Composite",Type7_Armour_Reactive:"Reactive Surface Composite",Asp_Armour_Grade1:"Lightweight Alloy",Asp_Armour_Grade2:"Reinforced Alloy",Asp_Armour_Grade3:"Military Grade Composite",Asp_Armour_Mirrored:"Mirrored Surface Composite",Asp_Armour_Reactive:"Reactive Surface Composite",Vulture_Armour_Grade1:"Lightweight Alloy",Vulture_Armour_Grade2:"Reinforced Alloy",Vulture_Armour_Grade3:"Military Grade Composite",Vulture_Armour_Mirrored:"Mirrored Surface Composite",Vulture_Armour_Reactive:"Reactive Surface Composite",Empire_Trader_Armour_Grade1:"Lightweight Alloy",Empire_Trader_Armour_Grade2:"Reinforced Alloy",Empire_Trader_Armour_Grade3:"Military Grade Composite",Empire_Trader_Armour_Mirrored:"Mirrored Surface Composite",Empire_Trader_Armour_Reactive:"Reactive Surface Composite",Federation_Dropship_Armour_Grade1:"Lightweight Alloy",Federation_Dropship_Armour_Grade2:"Reinforced Alloy",Federation_Dropship_Armour_Grade3:"Military Grade Composite",Federation_Dropship_Armour_Mirrored:"Mirrored Surface Composite",Federation_Dropship_Armour_Reactive:"Reactive Surface Composite",Orca_Armour_Grade1:"Lightweight Alloy",Orca_Armour_Grade2:"Reinforced Alloy",Orca_Armour_Grade3:"Military Grade Composite",Orca_Armour_Mirrored:"Mirrored Surface Composite",Orca_Armour_Reactive:"Reactive Surface Composite",Type9_Armour_Grade1:"Lightweight Alloy",Type9_Armour_Grade2:"Reinforced Alloy",Type9_Armour_Grade3:"Military Grade Composite",Type9_Armour_Mirrored:"Mirrored Surface Composite",Type9_Armour_Reactive:"Reactive Surface Composite",Python_Armour_Grade1:"Lightweight Alloy",Python_Armour_Grade2:"Reinforced Alloy",Python_Armour_Grade3:"Military Grade Composite",Python_Armour_Mirrored:"Mirrored Surface Composite",Python_Armour_Reactive:"Reactive Surface Composite",BelugaLiner_Armour_Grade1:"Lightweight Alloy",BelugaLiner_Armour_Grade2:"Reinforced Alloy",BelugaLiner_Armour_Grade3:"Military Grade Composite",BelugaLiner_Armour_Mirrored:"Mirrored Surface Composite",BelugaLiner_Armour_Reactive:"Reactive Surface Composite",FerDeLance_Armour_Grade1:"Lightweight Alloy",FerDeLance_Armour_Grade2:"Reinforced Alloy",FerDeLance_Armour_Grade3:"Military Grade Composite",FerDeLance_Armour_Mirrored:"Mirrored Surface Composite",FerDeLance_Armour_Reactive:"Reactive Surface Composite",Anaconda_Armour_Grade1:"Lightweight Alloy",Anaconda_Armour_Grade2:"Reinforced Alloy",Anaconda_Armour_Grade3:"Military Grade Composite",Anaconda_Armour_Mirrored:"Mirrored Surface Composite",Anaconda_Armour_Reactive:"Reactive Surface Composite",Federation_Corvette_Armour_Grade1:"Lightweight Alloy",Federation_Corvette_Armour_Grade2:"Reinforced Alloy",Federation_Corvette_Armour_Grade3:"Military Grade Composite",Federation_Corvette_Armour_Mirrored:"Mirrored Surface Composite",Federation_Corvette_Armour_Reactive:"Reactive Surface Composite",Cutter_Armour_Grade1:"Lightweight Alloy",Cutter_Armour_Grade2:"Reinforced Alloy",Cutter_Armour_Grade3:"Military Grade Composite",Cutter_Armour_Mirrored:"Mirrored Surface Composite",Cutter_Armour_Reactive:"Reactive Surface Composite",Int_Powerplant_Size2_Class1:"Power Plant",Int_Powerplant_Size2_Class2:"Power Plant",Int_Powerplant_Size2_Class3:"Power Plant",Int_Powerplant_Size2_Class4:"Power Plant",Int_Powerplant_Size2_Class5:"Power Plant",Int_Powerplant_Size3_Class1:"Power Plant",Int_Powerplant_Size3_Class2:"Power Plant",Int_Powerplant_Size3_Class3:"Power Plant",Int_Powerplant_Size3_Class4:"Power Plant",Int_Powerplant_Size3_Class5:"Power Plant",Int_Powerplant_Size4_Class1:"Power Plant",Int_Powerplant_Size4_Class2:"Power Plant",Int_Powerplant_Size4_Class3:"Power Plant",Int_Powerplant_Size4_Class4:"Power Plant",Int_Powerplant_Size4_Class5:"Power Plant",Int_Powerplant_Size5_Class1:"Power Plant",Int_Powerplant_Size5_Class2:"Power Plant",Int_Powerplant_Size5_Class3:"Power Plant",Int_Powerplant_Size5_Class4:"Power Plant",Int_Powerplant_Size5_Class5:"Power Plant",Int_Powerplant_Size6_Class1:"Power Plant",Int_Powerplant_Size6_Class2:"Power Plant",Int_Powerplant_Size6_Class3:"Power Plant",Int_Powerplant_Size6_Class4:"Power Plant",Int_Powerplant_Size6_Class5:"Power Plant",Int_Powerplant_Size7_Class1:"Power Plant",Int_Powerplant_Size7_Class2:"Power Plant",Int_Powerplant_Size7_Class3:"Power Plant",Int_Powerplant_Size7_Class4:"Power Plant",Int_Powerplant_Size7_Class5:"Power Plant",Int_Powerplant_Size8_Class1:"Power Plant",Int_Powerplant_Size8_Class2:"Power Plant",Int_Powerplant_Size8_Class3:"Power Plant",Int_Powerplant_Size8_Class4:"Power Plant",Int_Powerplant_Size8_Class5:"Power Plant",Int_Engine_Size2_Class1:"Thrusters",Int_Engine_Size2_Class2:"Thrusters",Int_Engine_Size2_Class3:"Thrusters",Int_Engine_Size2_Class4:"Thrusters",Int_Engine_Size2_Class5:"Thrusters",Int_Engine_Size3_Class1:"Thrusters",Int_Engine_Size3_Class2:"Thrusters",Int_Engine_Size3_Class3:"Thrusters",Int_Engine_Size3_Class4:"Thrusters",Int_Engine_Size3_Class5:"Thrusters",Int_Engine_Size4_Class1:"Thrusters",Int_Engine_Size4_Class2:"Thrusters",Int_Engine_Size4_Class3:"Thrusters",Int_Engine_Size4_Class4:"Thrusters",Int_Engine_Size4_Class5:"Thrusters",Int_Engine_Size5_Class1:"Thrusters",Int_Engine_Size5_Class2:"Thrusters",Int_Engine_Size5_Class3:"Thrusters",Int_Engine_Size5_Class4:"Thrusters",Int_Engine_Size5_Class5:"Thrusters",Int_Engine_Size6_Class1:"Thrusters",Int_Engine_Size6_Class2:"Thrusters",Int_Engine_Size6_Class3:"Thrusters",Int_Engine_Size6_Class4:"Thrusters",Int_Engine_Size6_Class5:"Thrusters",Int_Engine_Size7_Class1:"Thrusters",Int_Engine_Size7_Class2:"Thrusters",Int_Engine_Size7_Class3:"Thrusters",Int_Engine_Size7_Class4:"Thrusters",Int_Engine_Size7_Class5:"Thrusters",Int_Engine_Size8_Class1:"Thrusters",Int_Engine_Size8_Class2:"Thrusters",Int_Engine_Size8_Class3:"Thrusters",Int_Engine_Size8_Class4:"Thrusters",Int_Engine_Size8_Class5:"Thrusters",Int_Hyperdrive_Size2_Class1:"Frame Shift Drive",Int_Hyperdrive_Size2_Class2:"Frame Shift Drive",Int_Hyperdrive_Size2_Class3:"Frame Shift Drive",Int_Hyperdrive_Size2_Class4:"Frame Shift Drive",Int_Hyperdrive_Size2_Class5:"Frame Shift Drive",Int_Hyperdrive_Size3_Class1:"Frame Shift Drive",Int_Hyperdrive_Size3_Class2:"Frame Shift Drive",Int_Hyperdrive_Size3_Class3:"Frame Shift Drive",Int_Hyperdrive_Size3_Class4:"Frame Shift Drive",Int_Hyperdrive_Size3_Class5:"Frame Shift Drive",Int_Hyperdrive_Size4_Class1:"Frame Shift Drive",Int_Hyperdrive_Size4_Class2:"Frame Shift Drive",Int_Hyperdrive_Size4_Class3:"Frame Shift Drive",Int_Hyperdrive_Size4_Class4:"Frame Shift Drive",Int_Hyperdrive_Size4_Class5:"Frame Shift Drive",Int_Hyperdrive_Size5_Class1:"Frame Shift Drive",Int_Hyperdrive_Size5_Class2:"Frame Shift Drive",Int_Hyperdrive_Size5_Class3:"Frame Shift Drive",Int_Hyperdrive_Size5_Class4:"Frame Shift Drive",Int_Hyperdrive_Size5_Class5:"Frame Shift Drive",Int_Hyperdrive_Size6_Class1:"Frame Shift Drive",Int_Hyperdrive_Size6_Class2:"Frame Shift Drive",Int_Hyperdrive_Size6_Class3:"Frame Shift Drive",Int_Hyperdrive_Size6_Class4:"Frame Shift Drive",Int_Hyperdrive_Size6_Class5:"Frame Shift Drive",Int_Hyperdrive_Size7_Class1:"Frame Shift Drive",Int_Hyperdrive_Size7_Class2:"Frame Shift Drive",Int_Hyperdrive_Size7_Class3:"Frame Shift Drive",Int_Hyperdrive_Size7_Class4:"Frame Shift Drive",Int_Hyperdrive_Size7_Class5:"Frame Shift Drive",Int_LifeSupport_Size1_Class1:"Life Support",Int_LifeSupport_Size1_Class2:"Life Support",Int_LifeSupport_Size1_Class3:"Life Support",Int_LifeSupport_Size1_Class4:"Life Support",Int_LifeSupport_Size1_Class5:"Life Support",Int_LifeSupport_Size2_Class1:"Life Support",Int_LifeSupport_Size2_Class2:"Life Support",Int_LifeSupport_Size2_Class3:"Life Support",Int_LifeSupport_Size2_Class4:"Life Support",Int_LifeSupport_Size2_Class5:"Life Support",Int_LifeSupport_Size3_Class1:"Life Support",Int_LifeSupport_Size3_Class2:"Life Support",Int_LifeSupport_Size3_Class3:"Life Support",Int_LifeSupport_Size3_Class4:"Life Support",Int_LifeSupport_Size3_Class5:"Life Support",Int_LifeSupport_Size4_Class1:"Life Support",Int_LifeSupport_Size4_Class2:"Life Support",Int_LifeSupport_Size4_Class3:"Life Support",Int_LifeSupport_Size4_Class4:"Life Support",Int_LifeSupport_Size4_Class5:"Life Support",Int_LifeSupport_Size5_Class1:"Life Support",Int_LifeSupport_Size5_Class2:"Life Support",Int_LifeSupport_Size5_Class3:"Life Support",Int_LifeSupport_Size5_Class4:"Life Support",Int_LifeSupport_Size5_Class5:"Life Support",Int_LifeSupport_Size6_Class1:"Life Support",Int_LifeSupport_Size6_Class2:"Life Support",Int_LifeSupport_Size6_Class3:"Life Support",Int_LifeSupport_Size6_Class4:"Life Support",Int_LifeSupport_Size6_Class5:"Life Support",Int_LifeSupport_Size7_Class1:"Life Support",Int_LifeSupport_Size7_Class2:"Life Support",Int_LifeSupport_Size7_Class3:"Life Support",Int_LifeSupport_Size7_Class4:"Life Support",Int_LifeSupport_Size7_Class5:"Life Support",Int_LifeSupport_Size8_Class1:"Life Support",Int_LifeSupport_Size8_Class2:"Life Support",Int_LifeSupport_Size8_Class3:"Life Support",Int_LifeSupport_Size8_Class4:"Life Support",Int_LifeSupport_Size8_Class5:"Life Support",Int_PowerDistributor_Size1_Class1:"Power Distributor",Int_PowerDistributor_Size1_Class2:"Power Distributor",Int_PowerDistributor_Size1_Class3:"Power Distributor",Int_PowerDistributor_Size1_Class4:"Power Distributor",Int_PowerDistributor_Size1_Class5:"Power Distributor",Int_PowerDistributor_Size2_Class1:"Power Distributor",Int_PowerDistributor_Size2_Class2:"Power Distributor",Int_PowerDistributor_Size2_Class3:"Power Distributor",Int_PowerDistributor_Size2_Class4:"Power Distributor",Int_PowerDistributor_Size2_Class5:"Power Distributor",Int_PowerDistributor_Size3_Class1:"Power Distributor",Int_PowerDistributor_Size3_Class2:"Power Distributor",Int_PowerDistributor_Size3_Class3:"Power Distributor",Int_PowerDistributor_Size3_Class4:"Power Distributor",Int_PowerDistributor_Size3_Class5:"Power Distributor",Int_PowerDistributor_Size4_Class1:"Power Distributor",Int_PowerDistributor_Size4_Class2:"Power Distributor",Int_PowerDistributor_Size4_Class3:"Power Distributor",Int_PowerDistributor_Size4_Class4:"Power Distributor",Int_PowerDistributor_Size4_Class5:"Power Distributor",Int_PowerDistributor_Size5_Class1:"Power Distributor",Int_PowerDistributor_Size5_Class2:"Power Distributor",Int_PowerDistributor_Size5_Class3:"Power Distributor",Int_PowerDistributor_Size5_Class4:"Power Distributor",Int_PowerDistributor_Size5_Class5:"Power Distributor",Int_PowerDistributor_Size6_Class1:"Power Distributor",Int_PowerDistributor_Size6_Class2:"Power Distributor",Int_PowerDistributor_Size6_Class3:"Power Distributor",Int_PowerDistributor_Size6_Class4:"Power Distributor",Int_PowerDistributor_Size6_Class5:"Power Distributor",Int_PowerDistributor_Size7_Class1:"Power Distributor",Int_PowerDistributor_Size7_Class2:"Power Distributor",Int_PowerDistributor_Size7_Class3:"Power Distributor",Int_PowerDistributor_Size7_Class4:"Power Distributor",Int_PowerDistributor_Size7_Class5:"Power Distributor",Int_PowerDistributor_Size8_Class1:"Power Distributor",Int_PowerDistributor_Size8_Class2:"Power Distributor",Int_PowerDistributor_Size8_Class3:"Power Distributor",Int_PowerDistributor_Size8_Class4:"Power Distributor",Int_PowerDistributor_Size8_Class5:"Power Distributor",Int_Sensors_Size1_Class1:"Sensors",Int_Sensors_Size1_Class2:"Sensors",Int_Sensors_Size1_Class3:"Sensors",Int_Sensors_Size1_Class4:"Sensors",Int_Sensors_Size1_Class5:"Sensors",Int_Sensors_Size2_Class1:"Sensors",Int_Sensors_Size2_Class2:"Sensors",Int_Sensors_Size2_Class3:"Sensors",Int_Sensors_Size2_Class4:"Sensors",Int_Sensors_Size2_Class5:"Sensors",Int_Sensors_Size3_Class1:"Sensors",Int_Sensors_Size3_Class2:"Sensors",Int_Sensors_Size3_Class3:"Sensors",Int_Sensors_Size3_Class4:"Sensors",Int_Sensors_Size3_Class5:"Sensors",Int_Sensors_Size4_Class1:"Sensors",Int_Sensors_Size4_Class2:"Sensors",Int_Sensors_Size4_Class3:"Sensors",Int_Sensors_Size4_Class4:"Sensors",Int_Sensors_Size4_Class5:"Sensors",Int_Sensors_Size5_Class1:"Sensors",Int_Sensors_Size5_Class2:"Sensors",Int_Sensors_Size5_Class3:"Sensors",Int_Sensors_Size5_Class4:"Sensors",Int_Sensors_Size5_Class5:"Sensors",Int_Sensors_Size6_Class1:"Sensors",Int_Sensors_Size6_Class2:"Sensors",Int_Sensors_Size6_Class3:"Sensors",Int_Sensors_Size6_Class4:"Sensors",Int_Sensors_Size6_Class5:"Sensors",Int_Sensors_Size7_Class1:"Sensors",Int_Sensors_Size7_Class2:"Sensors",Int_Sensors_Size7_Class3:"Sensors",Int_Sensors_Size7_Class4:"Sensors",Int_Sensors_Size7_Class5:"Sensors",Int_Sensors_Size8_Class1:"Sensors",Int_Sensors_Size8_Class2:"Sensors",Int_Sensors_Size8_Class3:"Sensors",Int_Sensors_Size8_Class4:"Sensors",Int_Sensors_Size8_Class5:"Sensors",Int_FuelTank_Size1_Class3:"Fuel Tank",Int_FuelTank_Size2_Class3:"Fuel Tank",Int_FuelTank_Size3_Class3:"Fuel Tank",Int_FuelTank_Size4_Class3:"Fuel Tank",Int_FuelTank_Size5_Class3:"Fuel Tank",Int_FuelTank_Size6_Class3:"Fuel Tank",Int_FuelTank_Size7_Class3:"Fuel Tank",Int_FuelTank_Size8_Class3:"Fuel Tank",Int_PowerPlant_Size2_Class1_free:"Power Plant",Int_Engine_Size2_Class1_free:"Thrusters",Int_Hyperdrive_Size2_Class1_free:"Frame Shift Drive",Int_LifeSupport_Size1_Class1_free:"Life Support",Int_PowerDistributor_Size1_Class1_free:"Power Distributor",Int_Sensors_Size1_Class1_free:"Sensors",Int_FuelTank_Size1_Class3_free:"Fuel Tank",DiamondBack_Armour_Grade1:"Lightweight Alloy",DiamondBack_Armour_Grade2:"Reinforced Alloy",DiamondBack_Armour_Grade3:"Military Grade Composite",DiamondBack_Armour_Mirrored:"Mirrored Surface Composite",DiamondBack_Armour_Reactive:"Reactive Surface Composite",Empire_Courier_Armour_Grade1:"Lightweight Alloy",Empire_Courier_Armour_Grade2:"Reinforced Alloy",Empire_Courier_Armour_Grade3:"Military Grade Composite",Empire_Courier_Armour_Mirrored:"Mirrored Surface Composite",Empire_Courier_Armour_Reactive:"Reactive Surface Composite",DiamondBackXL_Armour_Grade1:"Lightweight Alloy",DiamondBackXL_Armour_Grade2:"Reinforced Alloy",DiamondBackXL_Armour_Grade3:"Military Grade Composite",DiamondBackXL_Armour_Mirrored:"Mirrored Surface Composite",DiamondBackXL_Armour_Reactive:"Reactive Surface Composite",Empire_Eagle_Armour_Grade1:"Lightweight Alloy",Empire_Eagle_Armour_Grade2:"Reinforced Alloy",Empire_Eagle_Armour_Grade3:"Military Grade Composite",Empire_Eagle_Armour_Mirrored:"Mirrored Surface Composite",Empire_Eagle_Armour_Reactive:"Reactive Surface Composite",Federation_Dropship_MkII_Armour_Grade1:"Lightweight Alloy",Federation_Dropship_MkII_Armour_Grade2:"Reinforced Alloy",Federation_Dropship_MkII_Armour_Grade3:"Military Grade Composite",Federation_Dropship_MkII_Armour_Mirrored:"Mirrored Surface Composite",Federation_Dropship_MkII_Armour_Reactive:"Reactive Surface Composite",Federation_Gunship_Armour_Grade1:"Lightweight Alloy",Federation_Gunship_Armour_Grade2:"Reinforced Alloy",Federation_Gunship_Armour_Grade3:"Military Grade Composite",Federation_Gunship_Armour_Mirrored:"Mirrored Surface Composite",Federation_Gunship_Armour_Reactive:"Reactive Surface Composite",Viper_MkIV_Armour_Grade1:"Lightweight Alloy",Viper_MkIV_Armour_Grade2:"Reinforced Alloy",Viper_MkIV_Armour_Grade3:"Military Grade Composite",Viper_MkIV_Armour_Mirrored:"Mirrored Surface Composite",Viper_MkIV_Armour_Reactive:"Reactive Surface Composite",CobraMkIV_Armour_Grade1:"Lightweight Alloy",CobraMkIV_Armour_Grade2:"Reinforced Alloy",CobraMkIV_Armour_Grade3:"Military Grade Composite",CobraMkIV_Armour_Mirrored:"Mirrored Surface Composite",CobraMkIV_Armour_Reactive:"Reactive Surface Composite",Independant_Trader_Armour_Grade1:"Lightweight Alloy",Independant_Trader_Armour_Grade2:"Reinforced Alloy",Independant_Trader_Armour_Grade3:"Military Grade Composite",Independant_Trader_Armour_Mirrored:"Mirrored Surface Composite",Independant_Trader_Armour_Reactive:"Reactive Surface Composite",Asp_Scout_Armour_Grade1:"Lightweight Alloy",Asp_Scout_Armour_Grade2:"Reinforced Alloy",Asp_Scout_Armour_Grade3:"Military Grade Composite",Asp_Scout_Armour_Mirrored:"Mirrored Surface Composite",Asp_Scout_Armour_Reactive:"Reactive Surface Composite",Int_Engine_Size3_Class5_Fast:"Enhanced Performance Thrusters",Int_Engine_Size2_Class5_Fast:"Enhanced Performance Thrusters",Type9_Military_Armour_Grade1:"Lightweight Alloy",Type9_Military_Armour_Grade2:"Reinforced Alloy",Type9_Military_Armour_Grade3:"Military Grade Composite",Type9_Military_Armour_Mirrored:"Mirrored Surface Composite",Type9_Military_Armour_Reactive:"Reactive Surface Composite",Krait_MkII_Armour_Grade1:"Lightweight Alloy",Krait_MkII_Armour_Grade2:"Reinforced Alloy",Krait_MkII_Armour_Grade3:"Military Grade Composite",Krait_MkII_Armour_Mirrored:"Mirrored Surface Composite",Krait_MkII_Armour_Reactive:"Reactive Surface Composite",TypeX_Armour_Grade1:"Lightweight Alloy",TypeX_Armour_Grade2:"Reinforced Alloy",TypeX_Armour_Grade3:"Military Grade Composite",TypeX_Armour_Mirrored:"Mirrored Surface Composite",TypeX_Armour_Reactive:"Reactive Surface Composite",TypeX_2_Armour_Grade1:"Lightweight Alloy",TypeX_2_Armour_Grade2:"Reinforced Alloy",TypeX_2_Armour_Grade3:"Military Grade Composite",TypeX_2_Armour_Mirrored:"Mirrored Surface Composite",TypeX_2_Armour_Reactive:"Reactive Surface Composite",TypeX_3_Armour_Grade1:"Lightweight Alloy",TypeX_3_Armour_Grade2:"Reinforced Alloy",TypeX_3_Armour_Grade3:"Military Grade Composite",TypeX_3_Armour_Mirrored:"Mirrored Surface Composite",TypeX_3_Armour_Reactive:"Reactive Surface Composite",Krait_Light_Armour_Grade1:"Lightweight Alloy",Krait_Light_Armour_Grade2:"Reinforced Alloy",Krait_Light_Armour_Grade3:"Military Grade Composite",Krait_Light_Armour_Mirrored:"Mirrored Surface Composite",Krait_Light_Armour_Reactive:"Reactive Surface Composite",Mamba_Armour_Grade1:"Lightweight Alloy",Mamba_Armour_Grade2:"Reinforced Alloy",Mamba_Armour_Grade3:"Military Grade Composite",Mamba_Armour_Mirrored:"Mirrored Surface Composite",Mamba_Armour_Reactive:"Reactive Surface Composite",Python_NX_Armour_Grade1:"Lightweight Alloy",Python_NX_Armour_Grade2:"Reinforced Alloy",Python_NX_Armour_Grade3:"Military Grade Composite",Python_NX_Armour_Mirrored:"Mirrored Surface Composite",Python_NX_Armour_Reactive:"Reactive Surface Composite",Int_Hyperdrive_Overcharge_Size5_Class3:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size7_Class3:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size6_Class3:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size4_Class3:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size3_Class3:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size2_Class3:"Frame Shift Drive (SCO)",Type8_Armour_Grade1:"Lightweight Alloy",Type8_Armour_Grade2:"Reinforced Alloy",Type8_Armour_Grade3:"Military Grade Composite",Type8_Armour_Mirrored:"Mirrored Surface Composite",Type8_Armour_Reactive:"Reactive Surface Composite",Int_Hyperdrive_Overcharge_Size2_Class1:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size2_Class2:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size2_Class4:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size2_Class5:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size3_Class1:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size3_Class2:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size3_Class4:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size3_Class5:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size4_Class1:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size4_Class2:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size4_Class4:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size4_Class5:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size5_Class1:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size5_Class2:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size5_Class4:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size5_Class5:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size6_Class1:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size6_Class2:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size6_Class4:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size6_Class5:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size7_Class1:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size7_Class2:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size7_Class4:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size7_Class5:"Frame Shift Drive (SCO)",Mandalay_Armour_Grade1:"Lightweight Alloy",Mandalay_Armour_Grade2:"Reinforced Alloy",Mandalay_Armour_Grade3:"Military Grade Composite",Mandalay_Armour_Mirrored:"Mirrored Surface Composite",Mandalay_Armour_Reactive:"Reactive Surface Composite",CobraMkV_Armour_Grade1:"Lightweight Alloy",CobraMkV_Armour_Grade2:"Reinforced Alloy",CobraMkV_Armour_Grade3:"Military Grade Composite",CobraMkV_Armour_Mirrored:"Mirrored Surface Composite",CobraMkV_Armour_Reactive:"Reactive Surface Composite",Corsair_Armour_Grade1:"Lightweight Alloy",Corsair_Armour_Grade2:"Reinforced Alloy",Corsair_Armour_Grade3:"Military Grade Composite",Corsair_Armour_Mirrored:"Mirrored Surface Composite",Corsair_Armour_Reactive:"Reactive Surface Composite",PantherMkII_Armour_Grade1:"Lightweight Alloy",PantherMkII_Armour_Grade2:"Reinforced Alloy",PantherMkII_Armour_Grade3:"Military Grade Composite",PantherMkII_Armour_Mirrored:"Mirrored Surface Composite",PantherMkII_Armour_Reactive:"Reactive Surface Composite",LakonMiner_Armour_Grade1:"Lightweight Alloy",LakonMiner_Armour_Grade2:"Reinforced Alloy",LakonMiner_Armour_Grade3:"Military Grade Composite",LakonMiner_Armour_Mirrored:"Mirrored Surface Composite",LakonMiner_Armour_Reactive:"Reactive Surface Composite",Explorer_NX_Armour_Grade1:"Mk II Ablative Lightweight Alloys",Explorer_NX_Armour_Grade2:"Mk II Ablative Reinforced Alloys",Explorer_NX_Armour_Grade3:"Mk II Ablative Military Grade Composite",Explorer_NX_Armour_Mirrored:"Mk II Ablative Mirrored Surface Composite",Explorer_NX_Armour_Reactive:"Mk II Ablative Reactive Surface Composite",Int_Hyperdrive_Overcharge_Size8_Class1:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size8_Class2:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size8_Class3:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size8_Class4:"Frame Shift Drive (SCO)",Int_Hyperdrive_Overcharge_Size8_Class5:"Frame Shift Drive (SCO)",Explorer_NX_Armour_Grade1_Default:"Lightweight Alloy",Int_Hyperdrive_Overcharge_Size8_Class5_OverchargeBooster_MkII:"Mk II Supercharge Optimised Frame Shift Drive (SCO)",Int_Engine_Size7_Class5_GravityOptimised_MkII:"Mk II Gravity Optimised Thrusters",SmallCombat01_NX_Armour_Grade1:"Lightweight Alloy",SmallCombat01_NX_Armour_Grade2:"Reinforced Alloy",SmallCombat01_NX_Armour_Grade3:"Military Grade Composite",SmallCombat01_NX_Armour_Mirrored:"Mirrored Surface Composite",SmallCombat01_NX_Armour_Reactive:"Reactive Surface Composite",Int_MkIIAgileBoost_Engine_Size5_Class5:"Mk II Agile Boost Thrusters",MediumTransport01_Armour_Grade1:"Lightweight Alloy",MediumTransport01_Armour_Grade2:"Reinforced Alloy",MediumTransport01_Armour_Grade3:"Military Grade Composite",MediumTransport01_Armour_Mirrored:"Mirrored Surface Composite",MediumTransport01_Armour_Reactive:"Reactive Surface Composite",Int_DockingComputer_Standard:"Standard Docking Computer",Int_ShieldGenerator_Size1_Class1:"Shield Generator",Int_ShieldGenerator_Size1_Class2:"Shield Generator",Int_ShieldGenerator_Size1_Class3:"Shield Generator",Int_ShieldGenerator_Size1_Class4:"Shield Generator",Int_ShieldGenerator_Size1_Class5:"Shield Generator",Int_ShieldGenerator_Size2_Class1:"Shield Generator",Int_ShieldGenerator_Size2_Class2:"Shield Generator",Int_ShieldGenerator_Size2_Class3:"Shield Generator",Int_ShieldGenerator_Size2_Class4:"Shield Generator",Int_ShieldGenerator_Size2_Class5:"Shield Generator",Int_ShieldGenerator_Size3_Class1:"Shield Generator",Int_ShieldGenerator_Size3_Class2:"Shield Generator",Int_ShieldGenerator_Size3_Class3:"Shield Generator",Int_ShieldGenerator_Size3_Class4:"Shield Generator",Int_ShieldGenerator_Size3_Class5:"Shield Generator",Int_ShieldGenerator_Size4_Class1:"Shield Generator",Int_ShieldGenerator_Size4_Class2:"Shield Generator",Int_ShieldGenerator_Size4_Class3:"Shield Generator",Int_ShieldGenerator_Size4_Class4:"Shield Generator",Int_ShieldGenerator_Size4_Class5:"Shield Generator",Int_ShieldGenerator_Size5_Class1:"Shield Generator",Int_ShieldGenerator_Size5_Class2:"Shield Generator",Int_ShieldGenerator_Size5_Class3:"Shield Generator",Int_ShieldGenerator_Size5_Class4:"Shield Generator",Int_ShieldGenerator_Size5_Class5:"Shield Generator",Int_ShieldGenerator_Size6_Class1:"Shield Generator",Int_ShieldGenerator_Size6_Class2:"Shield Generator",Int_ShieldGenerator_Size6_Class3:"Shield Generator",Int_ShieldGenerator_Size6_Class4:"Shield Generator",Int_ShieldGenerator_Size6_Class5:"Shield Generator",Int_ShieldGenerator_Size7_Class1:"Shield Generator",Int_ShieldGenerator_Size7_Class2:"Shield Generator",Int_ShieldGenerator_Size7_Class3:"Shield Generator",Int_ShieldGenerator_Size7_Class4:"Shield Generator",Int_ShieldGenerator_Size7_Class5:"Shield Generator",Int_ShieldGenerator_Size8_Class1:"Shield Generator",Int_ShieldGenerator_Size8_Class2:"Shield Generator",Int_ShieldGenerator_Size8_Class3:"Shield Generator",Int_ShieldGenerator_Size8_Class4:"Shield Generator",Int_ShieldGenerator_Size8_Class5:"Shield Generator",Int_ShieldCellBank_Size1_Class1:"Shield Cell Bank",Int_ShieldCellBank_Size1_Class2:"Shield Cell Bank",Int_ShieldCellBank_Size1_Class3:"Shield Cell Bank",Int_ShieldCellBank_Size1_Class4:"Shield Cell Bank",Int_ShieldCellBank_Size1_Class5:"Shield Cell Bank",Int_ShieldCellBank_Size2_Class1:"Shield Cell Bank",Int_ShieldCellBank_Size2_Class2:"Shield Cell Bank",Int_ShieldCellBank_Size2_Class3:"Shield Cell Bank",Int_ShieldCellBank_Size2_Class4:"Shield Cell Bank",Int_ShieldCellBank_Size2_Class5:"Shield Cell Bank",Int_ShieldCellBank_Size3_Class1:"Shield Cell Bank",Int_ShieldCellBank_Size3_Class2:"Shield Cell Bank",Int_ShieldCellBank_Size3_Class3:"Shield Cell Bank",Int_ShieldCellBank_Size3_Class4:"Shield Cell Bank",Int_ShieldCellBank_Size3_Class5:"Shield Cell Bank",Int_ShieldCellBank_Size4_Class1:"Shield Cell Bank",Int_ShieldCellBank_Size4_Class2:"Shield Cell Bank",Int_ShieldCellBank_Size4_Class3:"Shield Cell Bank",Int_ShieldCellBank_Size4_Class4:"Shield Cell Bank",Int_ShieldCellBank_Size4_Class5:"Shield Cell Bank",Int_ShieldCellBank_Size5_Class1:"Shield Cell Bank",Int_ShieldCellBank_Size5_Class2:"Shield Cell Bank",Int_ShieldCellBank_Size5_Class3:"Shield Cell Bank",Int_ShieldCellBank_Size5_Class4:"Shield Cell Bank",Int_ShieldCellBank_Size5_Class5:"Shield Cell Bank",Int_ShieldCellBank_Size6_Class1:"Shield Cell Bank",Int_ShieldCellBank_Size6_Class2:"Shield Cell Bank",Int_ShieldCellBank_Size6_Class3:"Shield Cell Bank",Int_ShieldCellBank_Size6_Class4:"Shield Cell Bank",Int_ShieldCellBank_Size6_Class5:"Shield Cell Bank",Int_ShieldCellBank_Size7_Class1:"Shield Cell Bank",Int_ShieldCellBank_Size7_Class2:"Shield Cell Bank",Int_ShieldCellBank_Size7_Class3:"Shield Cell Bank",Int_ShieldCellBank_Size7_Class4:"Shield Cell Bank",Int_ShieldCellBank_Size7_Class5:"Shield Cell Bank",Int_ShieldCellBank_Size8_Class1:"Shield Cell Bank",Int_ShieldCellBank_Size8_Class2:"Shield Cell Bank",Int_ShieldCellBank_Size8_Class3:"Shield Cell Bank",Int_ShieldCellBank_Size8_Class4:"Shield Cell Bank",Int_ShieldCellBank_Size8_Class5:"Shield Cell Bank",Int_CargoRack_Size1_Class1:"Cargo Rack",Int_CargoRack_Size2_Class1:"Cargo Rack",Int_CargoRack_Size3_Class1:"Cargo Rack",Int_CargoRack_Size4_Class1:"Cargo Rack",Int_CargoRack_Size5_Class1:"Cargo Rack",Int_CargoRack_Size6_Class1:"Cargo Rack",Int_CargoRack_Size7_Class1:"Cargo Rack",Int_CargoRack_Size8_Class1:"Cargo Rack",Int_DroneControl_ResourceSiphon:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size1_Class1:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size1_Class2:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size1_Class3:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size1_Class4:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size1_Class5:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size3_Class1:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size3_Class2:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size3_Class3:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size3_Class4:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size3_Class5:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size5_Class1:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size5_Class2:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size5_Class3:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size5_Class4:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size5_Class5:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size7_Class1:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size7_Class2:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size7_Class3:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size7_Class4:"Hatch Breaker Limpet Controller",Int_DroneControl_ResourceSiphon_Size7_Class5:"Hatch Breaker Limpet Controller",Int_DetailedSurfaceScanner_Tiny:"Detailed Surface Scanner",Int_ShieldGenerator_Size2_Class1_free:"Shield Generator",Int_CargoRack_Size2_Class1_free:"Cargo Rack",Int_FuelScoop_Size1_Class1:"Fuel Scoop",Int_FuelScoop_Size2_Class1:"Fuel Scoop",Int_FuelScoop_Size3_Class1:"Fuel Scoop",Int_FuelScoop_Size4_Class1:"Fuel Scoop",Int_FuelScoop_Size5_Class1:"Fuel Scoop",Int_FuelScoop_Size6_Class1:"Fuel Scoop",Int_FuelScoop_Size7_Class1:"Fuel Scoop",Int_FuelScoop_Size8_Class1:"Fuel Scoop",Int_FuelScoop_Size1_Class2:"Fuel Scoop",Int_FuelScoop_Size2_Class2:"Fuel Scoop",Int_FuelScoop_Size3_Class2:"Fuel Scoop",Int_FuelScoop_Size4_Class2:"Fuel Scoop",Int_FuelScoop_Size5_Class2:"Fuel Scoop",Int_FuelScoop_Size6_Class2:"Fuel Scoop",Int_FuelScoop_Size7_Class2:"Fuel Scoop",Int_FuelScoop_Size8_Class2:"Fuel Scoop",Int_FuelScoop_Size1_Class3:"Fuel Scoop",Int_FuelScoop_Size2_Class3:"Fuel Scoop",Int_FuelScoop_Size3_Class3:"Fuel Scoop",Int_FuelScoop_Size4_Class3:"Fuel Scoop",Int_FuelScoop_Size5_Class3:"Fuel Scoop",Int_FuelScoop_Size6_Class3:"Fuel Scoop",Int_FuelScoop_Size7_Class3:"Fuel Scoop",Int_FuelScoop_Size8_Class3:"Fuel Scoop",Int_FuelScoop_Size1_Class4:"Fuel Scoop",Int_FuelScoop_Size2_Class4:"Fuel Scoop",Int_FuelScoop_Size3_Class4:"Fuel Scoop",Int_FuelScoop_Size4_Class4:"Fuel Scoop",Int_FuelScoop_Size5_Class4:"Fuel Scoop",Int_FuelScoop_Size6_Class4:"Fuel Scoop",Int_FuelScoop_Size7_Class4:"Fuel Scoop",Int_FuelScoop_Size8_Class4:"Fuel Scoop",Int_FuelScoop_Size1_Class5:"Fuel Scoop",Int_FuelScoop_Size2_Class5:"Fuel Scoop",Int_FuelScoop_Size3_Class5:"Fuel Scoop",Int_FuelScoop_Size4_Class5:"Fuel Scoop",Int_FuelScoop_Size5_Class5:"Fuel Scoop",Int_FuelScoop_Size6_Class5:"Fuel Scoop",Int_FuelScoop_Size7_Class5:"Fuel Scoop",Int_FuelScoop_Size8_Class5:"Fuel Scoop",Int_Refinery_Size1_Class1:"Refinery",Int_Refinery_Size2_Class1:"Refinery",Int_Refinery_Size3_Class1:"Refinery",Int_Refinery_Size4_Class1:"Refinery",Int_Refinery_Size1_Class2:"Refinery",Int_Refinery_Size2_Class2:"Refinery",Int_Refinery_Size3_Class2:"Refinery",Int_Refinery_Size4_Class2:"Refinery",Int_Refinery_Size1_Class3:"Refinery",Int_Refinery_Size2_Class3:"Refinery",Int_Refinery_Size3_Class3:"Refinery",Int_Refinery_Size4_Class3:"Refinery",Int_Refinery_Size1_Class4:"Refinery",Int_Refinery_Size2_Class4:"Refinery",Int_Refinery_Size3_Class4:"Refinery",Int_Refinery_Size4_Class4:"Refinery",Int_Refinery_Size1_Class5:"Refinery",Int_Refinery_Size2_Class5:"Refinery",Int_Refinery_Size3_Class5:"Refinery",Int_Refinery_Size4_Class5:"Refinery",Int_FSDInterdictor_Size1_Class1:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size2_Class1:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size3_Class1:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size4_Class1:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size1_Class2:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size2_Class2:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size3_Class2:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size4_Class2:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size1_Class3:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size2_Class3:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size3_Class3:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size4_Class3:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size1_Class4:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size2_Class4:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size3_Class4:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size4_Class4:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size1_Class5:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size2_Class5:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size3_Class5:"Frame Shift Drive Interdictor",Int_FSDInterdictor_Size4_Class5:"Frame Shift Drive Interdictor",Int_Repairer_Size1_Class1:"Auto Field-Maintenance Unit",Int_Repairer_Size2_Class1:"Auto Field-Maintenance Unit",Int_Repairer_Size3_Class1:"Auto Field-Maintenance Unit",Int_Repairer_Size4_Class1:"Auto Field-Maintenance Unit",Int_Repairer_Size5_Class1:"Auto Field-Maintenance Unit",Int_Repairer_Size6_Class1:"Auto Field-Maintenance Unit",Int_Repairer_Size7_Class1:"Auto Field-Maintenance Unit",Int_Repairer_Size8_Class1:"Auto Field-Maintenance Unit",Int_Repairer_Size1_Class2:"Auto Field-Maintenance Unit",Int_Repairer_Size2_Class2:"Auto Field-Maintenance Unit",Int_Repairer_Size3_Class2:"Auto Field-Maintenance Unit",Int_Repairer_Size4_Class2:"Auto Field-Maintenance Unit",Int_Repairer_Size5_Class2:"Auto Field-Maintenance Unit",Int_Repairer_Size6_Class2:"Auto Field-Maintenance Unit",Int_Repairer_Size7_Class2:"Auto Field-Maintenance Unit",Int_Repairer_Size8_Class2:"Auto Field-Maintenance Unit",Int_Repairer_Size1_Class3:"Auto Field-Maintenance Unit",Int_Repairer_Size2_Class3:"Auto Field-Maintenance Unit",Int_Repairer_Size3_Class3:"Auto Field-Maintenance Unit",Int_Repairer_Size4_Class3:"Auto Field-Maintenance Unit",Int_Repairer_Size5_Class3:"Auto Field-Maintenance Unit",Int_Repairer_Size6_Class3:"Auto Field-Maintenance Unit",Int_Repairer_Size7_Class3:"Auto Field-Maintenance Unit",Int_Repairer_Size8_Class3:"Auto Field-Maintenance Unit",Int_Repairer_Size1_Class4:"Auto Field-Maintenance Unit",Int_Repairer_Size2_Class4:"Auto Field-Maintenance Unit",Int_Repairer_Size3_Class4:"Auto Field-Maintenance Unit",Int_Repairer_Size4_Class4:"Auto Field-Maintenance Unit",Int_Repairer_Size5_Class4:"Auto Field-Maintenance Unit",Int_Repairer_Size6_Class4:"Auto Field-Maintenance Unit",Int_Repairer_Size7_Class4:"Auto Field-Maintenance Unit",Int_Repairer_Size8_Class4:"Auto Field-Maintenance Unit",Int_Repairer_Size1_Class5:"Auto Field-Maintenance Unit",Int_Repairer_Size2_Class5:"Auto Field-Maintenance Unit",Int_Repairer_Size3_Class5:"Auto Field-Maintenance Unit",Int_Repairer_Size4_Class5:"Auto Field-Maintenance Unit",Int_Repairer_Size5_Class5:"Auto Field-Maintenance Unit",Int_Repairer_Size6_Class5:"Auto Field-Maintenance Unit",Int_Repairer_Size7_Class5:"Auto Field-Maintenance Unit",Int_Repairer_Size8_Class5:"Auto Field-Maintenance Unit",Int_HullReinforcement_Size1_Class1:"Hull Reinforcement Package",Int_HullReinforcement_Size1_Class2:"Hull Reinforcement Package",Int_HullReinforcement_Size2_Class1:"Hull Reinforcement Package",Int_HullReinforcement_Size2_Class2:"Hull Reinforcement Package",Int_HullReinforcement_Size3_Class1:"Hull Reinforcement Package",Int_HullReinforcement_Size3_Class2:"Hull Reinforcement Package",Int_HullReinforcement_Size4_Class1:"Hull Reinforcement Package",Int_HullReinforcement_Size4_Class2:"Hull Reinforcement Package",Int_HullReinforcement_Size5_Class1:"Hull Reinforcement Package",Int_HullReinforcement_Size5_Class2:"Hull Reinforcement Package",Int_DroneControl_Collection_Size1_Class1:"Collector Limpet Controller",Int_DroneControl_Collection_Size1_Class2:"Collector Limpet Controller",Int_DroneControl_Collection_Size1_Class3:"Collector Limpet Controller",Int_DroneControl_Collection_Size1_Class4:"Collector Limpet Controller",Int_DroneControl_Collection_Size1_Class5:"Collector Limpet Controller",Int_DroneControl_Collection_Size3_Class1:"Collector Limpet Controller",Int_DroneControl_Collection_Size3_Class2:"Collector Limpet Controller",Int_DroneControl_Collection_Size3_Class3:"Collector Limpet Controller",Int_DroneControl_Collection_Size3_Class4:"Collector Limpet Controller",Int_DroneControl_Collection_Size3_Class5:"Collector Limpet Controller",Int_DroneControl_Collection_Size5_Class1:"Collector Limpet Controller",Int_DroneControl_Collection_Size5_Class2:"Collector Limpet Controller",Int_DroneControl_Collection_Size5_Class3:"Collector Limpet Controller",Int_DroneControl_Collection_Size5_Class4:"Collector Limpet Controller",Int_DroneControl_Collection_Size5_Class5:"Collector Limpet Controller",Int_DroneControl_Collection_Size7_Class1:"Collector Limpet Controller",Int_DroneControl_Collection_Size7_Class2:"Collector Limpet Controller",Int_DroneControl_Collection_Size7_Class3:"Collector Limpet Controller",Int_DroneControl_Collection_Size7_Class4:"Collector Limpet Controller",Int_DroneControl_Collection_Size7_Class5:"Collector Limpet Controller",Int_DroneControl_FuelTransfer_Size1_Class1:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size1_Class2:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size1_Class3:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size1_Class4:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size1_Class5:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size3_Class1:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size3_Class2:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size3_Class3:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size3_Class4:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size3_Class5:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size5_Class1:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size5_Class2:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size5_Class3:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size5_Class4:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size5_Class5:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size7_Class1:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size7_Class2:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size7_Class3:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size7_Class4:"Fuel Transfer Limpet Controller",Int_DroneControl_FuelTransfer_Size7_Class5:"Fuel Transfer Limpet Controller",Int_DroneControl_Prospector_Size1_Class1:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size1_Class2:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size1_Class3:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size1_Class4:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size1_Class5:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size3_Class1:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size3_Class2:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size3_Class3:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size3_Class4:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size3_Class5:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size5_Class1:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size5_Class2:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size5_Class3:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size5_Class4:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size5_Class5:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size7_Class1:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size7_Class2:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size7_Class3:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size7_Class4:"Prospector Limpet Controller",Int_DroneControl_Prospector_Size7_Class5:"Prospector Limpet Controller",Int_ShieldGenerator_Size1_Class5_Strong:"Prismatic Shield Generator",Int_ShieldGenerator_Size2_Class5_Strong:"Prismatic Shield Generator",Int_ShieldGenerator_Size3_Class5_Strong:"Prismatic Shield Generator",Int_ShieldGenerator_Size4_Class5_Strong:"Prismatic Shield Generator",Int_ShieldGenerator_Size5_Class5_Strong:"Prismatic Shield Generator",Int_ShieldGenerator_Size6_Class5_Strong:"Prismatic Shield Generator",Int_ShieldGenerator_Size7_Class5_Strong:"Prismatic Shield Generator",Int_ShieldGenerator_Size8_Class5_Strong:"Prismatic Shield Generator",Int_ShieldGenerator_Size1_Class3_Fast:"Bi-Weave Shield Generator",Int_ShieldGenerator_Size2_Class3_Fast:"Bi-Weave Shield Generator",Int_ShieldGenerator_Size3_Class3_Fast:"Bi-Weave Shield Generator",Int_ShieldGenerator_Size4_Class3_Fast:"Bi-Weave Shield Generator",Int_ShieldGenerator_Size5_Class3_Fast:"Bi-Weave Shield Generator",Int_ShieldGenerator_Size6_Class3_Fast:"Bi-Weave Shield Generator",Int_ShieldGenerator_Size7_Class3_Fast:"Bi-Weave Shield Generator",Int_ShieldGenerator_Size8_Class3_Fast:"Bi-Weave Shield Generator",Int_BuggyBay_Size2_Class1:"Planetary Vehicle Hangar",Int_BuggyBay_Size2_Class2:"Planetary Vehicle Hangar",Int_BuggyBay_Size4_Class1:"Planetary Vehicle Hangar",Int_BuggyBay_Size4_Class2:"Planetary Vehicle Hangar",Int_BuggyBay_Size6_Class1:"Planetary Vehicle Hangar",Int_BuggyBay_Size6_Class2:"Planetary Vehicle Hangar",Int_PlanetApproachSuite:"Planetary Approach Suite",Int_CorrosionProofCargoRack_Size1_Class1:"Corrosion Resistant Cargo Rack",Int_CorrosionProofCargoRack_Size1_Class2:"Corrosion Resistant Cargo Rack",Int_CorrosionProofCargoRack_Size5_Class1:"Corrosion Resistant Cargo Rack",Int_CorrosionProofCargoRack_Size6_Class1:"Corrosion Resistant Cargo Rack",ModularCargoBayDoor:"Cargo Hatch",Int_PassengerCabin_Size4_Class1:"Economy Class Passenger Cabin",Int_PassengerCabin_Size4_Class2:"Business Class Passenger Cabin",Int_PassengerCabin_Size4_Class3:"First Class Passenger Cabin",Int_PassengerCabin_Size5_Class4:"Luxury Class Passenger Cabin",Int_PassengerCabin_Size6_Class1:"Economy Class Passenger Cabin",Int_PassengerCabin_Size6_Class2:"Business Class Passenger Cabin",Int_PassengerCabin_Size6_Class3:"First Class Passenger Cabin",Int_PassengerCabin_Size6_Class4:"Luxury Class Passenger Cabin",Int_FighterBay_Size5_Class1:"Mk I Vessel Hangar",Int_FighterBay_Size6_Class1:"Mk I Vessel Hangar",Int_FighterBay_Size7_Class1:"Mk I Vessel Hangar",Int_FighterBay_Size5_Class1_Free:"Mk I Vessel Hangar",Int_FighterBay_Size6_Class1_Free:"Mk I Vessel Hangar",Int_FighterBay_Size7_Class1_Free:"Mk I Vessel Hangar",Int_FighterBayMk2_Size5_Class1:"Mk II Vessel Hangar",Int_FighterBayMk2_Size6_Class1:"Mk II Vessel Hangar",Int_FighterBayMk2_Size7_Class1:"Mk II Vessel Hangar",Int_FighterBayMk2_Size5_Class1_Free:"Mk II Vessel Hangar",Int_FighterBayMk2_Size6_Class1_Free:"Mk II Vessel Hangar",Int_FighterBayMk2_Size7_Class1_Free:"Mk II Vessel Hangar",Int_PassengerCabin_Size2_Class1:"Economy Class Passenger Cabin",Int_PassengerCabin_Size3_Class1:"Economy Class Passenger Cabin",Int_PassengerCabin_Size3_Class2:"Business Class Passenger Cabin",Int_PassengerCabin_Size5_Class1:"Economy Class Passenger Cabin",Int_PassengerCabin_Size5_Class2:"Business Class Passenger Cabin",Int_PassengerCabin_Size5_Class3:"First Class Passenger Cabin",Int_ModuleReinforcement_Size1_Class1:"Module Reinforcement Package",Int_ModuleReinforcement_Size1_Class2:"Module Reinforcement Package",Int_ModuleReinforcement_Size2_Class1:"Module Reinforcement Package",Int_ModuleReinforcement_Size2_Class2:"Module Reinforcement Package",Int_ModuleReinforcement_Size3_Class1:"Module Reinforcement Package",Int_ModuleReinforcement_Size3_Class2:"Module Reinforcement Package",Int_ModuleReinforcement_Size4_Class1:"Module Reinforcement Package",Int_ModuleReinforcement_Size4_Class2:"Module Reinforcement Package",Int_ModuleReinforcement_Size5_Class1:"Module Reinforcement Package",Int_ModuleReinforcement_Size5_Class2:"Module Reinforcement Package",Int_DroneControl_Repair_Size1_Class1:"Repair Limpet Controller",Int_DroneControl_Repair_Size1_Class2:"Repair Limpet Controller",Int_DroneControl_Repair_Size1_Class3:"Repair Limpet Controller",Int_DroneControl_Repair_Size1_Class4:"Repair Limpet Controller",Int_DroneControl_Repair_Size1_Class5:"Repair Limpet Controller",Int_DroneControl_Repair_Size3_Class1:"Repair Limpet Controller",Int_DroneControl_Repair_Size3_Class2:"Repair Limpet Controller",Int_DroneControl_Repair_Size3_Class3:"Repair Limpet Controller",Int_DroneControl_Repair_Size3_Class4:"Repair Limpet Controller",Int_DroneControl_Repair_Size3_Class5:"Repair Limpet Controller",Int_DroneControl_Repair_Size5_Class1:"Repair Limpet Controller",Int_DroneControl_Repair_Size5_Class2:"Repair Limpet Controller",Int_DroneControl_Repair_Size5_Class3:"Repair Limpet Controller",Int_DroneControl_Repair_Size5_Class4:"Repair Limpet Controller",Int_DroneControl_Repair_Size5_Class5:"Repair Limpet Controller",Int_DroneControl_Repair_Size7_Class1:"Repair Limpet Controller",Int_DroneControl_Repair_Size7_Class2:"Repair Limpet Controller",Int_DroneControl_Repair_Size7_Class3:"Repair Limpet Controller",Int_DroneControl_Repair_Size7_Class4:"Repair Limpet Controller",Int_DroneControl_Repair_Size7_Class5:"Repair Limpet Controller",Int_DroneControl_UnkVesselResearch:"Research Limpet Controller",Int_MetaAlloyHullReinforcement_Size1_Class1:"Meta Alloy Hull Reinforcement",Int_MetaAlloyHullReinforcement_Size1_Class2:"Meta Alloy Hull Reinforcement",Int_MetaAlloyHullReinforcement_Size2_Class1:"Meta Alloy Hull Reinforcement",Int_MetaAlloyHullReinforcement_Size2_Class2:"Meta Alloy Hull Reinforcement",Int_MetaAlloyHullReinforcement_Size3_Class1:"Meta Alloy Hull Reinforcement",Int_MetaAlloyHullReinforcement_Size3_Class2:"Meta Alloy Hull Reinforcement",Int_MetaAlloyHullReinforcement_Size4_Class1:"Meta Alloy Hull Reinforcement",Int_MetaAlloyHullReinforcement_Size4_Class2:"Meta Alloy Hull Reinforcement",Int_MetaAlloyHullReinforcement_Size5_Class1:"Meta Alloy Hull Reinforcement",Int_MetaAlloyHullReinforcement_Size5_Class2:"Meta Alloy Hull Reinforcement",Int_DroneControl_Decontamination_Size1_Class1:"Decontamination Limpet Controller",Int_DroneControl_Decontamination_Size3_Class1:"Decontamination Limpet Controller",Int_DroneControl_Decontamination_Size5_Class1:"Decontamination Limpet Controller",Int_DroneControl_Decontamination_Size7_Class1:"Decontamination Limpet Controller",Int_CorrosionProofCargoRack_Size4_Class1:"Corrosion Resistant Cargo Rack",Int_GuardianHullReinforcement_Size1_Class1:"Guardian Hull Reinforcement",Int_GuardianHullReinforcement_Size1_Class2:"Guardian Hull Reinforcement",Int_GuardianHullReinforcement_Size2_Class1:"Guardian Hull Reinforcement",Int_GuardianHullReinforcement_Size2_Class2:"Guardian Hull Reinforcement",Int_GuardianHullReinforcement_Size3_Class1:"Guardian Hull Reinforcement",Int_GuardianHullReinforcement_Size3_Class2:"Guardian Hull Reinforcement",Int_GuardianHullReinforcement_Size4_Class1:"Guardian Hull Reinforcement",Int_GuardianHullReinforcement_Size4_Class2:"Guardian Hull Reinforcement",Int_GuardianHullReinforcement_Size5_Class1:"Guardian Hull Reinforcement",Int_GuardianHullReinforcement_Size5_Class2:"Guardian Hull Reinforcement",Int_GuardianModuleReinforcement_Size1_Class1:"Guardian Module Reinforcement",Int_GuardianModuleReinforcement_Size1_Class2:"Guardian Module Reinforcement",Int_GuardianModuleReinforcement_Size2_Class1:"Guardian Module Reinforcement",Int_GuardianModuleReinforcement_Size2_Class2:"Guardian Module Reinforcement",Int_GuardianModuleReinforcement_Size3_Class1:"Guardian Module Reinforcement",Int_GuardianModuleReinforcement_Size3_Class2:"Guardian Module Reinforcement",Int_GuardianModuleReinforcement_Size4_Class1:"Guardian Module Reinforcement",Int_GuardianModuleReinforcement_Size4_Class2:"Guardian Module Reinforcement",Int_GuardianModuleReinforcement_Size5_Class1:"Guardian Module Reinforcement",Int_GuardianModuleReinforcement_Size5_Class2:"Guardian Module Reinforcement",Int_GuardianShieldReinforcement_Size1_Class1:"Guardian Shield Reinforcement",Int_GuardianShieldReinforcement_Size1_Class2:"Guardian Shield Reinforcement",Int_GuardianShieldReinforcement_Size2_Class1:"Guardian Shield Reinforcement",Int_GuardianShieldReinforcement_Size2_Class2:"Guardian Shield Reinforcement",Int_GuardianShieldReinforcement_Size3_Class1:"Guardian Shield Reinforcement",Int_GuardianShieldReinforcement_Size3_Class2:"Guardian Shield Reinforcement",Int_GuardianShieldReinforcement_Size4_Class1:"Guardian Shield Reinforcement",Int_GuardianShieldReinforcement_Size4_Class2:"Guardian Shield Reinforcement",Int_GuardianShieldReinforcement_Size5_Class1:"Guardian Shield Reinforcement",Int_GuardianShieldReinforcement_Size5_Class2:"Guardian Shield Reinforcement",Int_GuardianFSDBooster_Size1:"Guardian FSD Booster",Int_GuardianFSDBooster_Size2:"Guardian FSD Booster",Int_GuardianFSDBooster_Size3:"Guardian FSD Booster",Int_GuardianFSDBooster_Size4:"Guardian FSD Booster",Int_GuardianFSDBooster_Size5:"Guardian FSD Booster",Int_GuardianPowerDistributor_Size1:"Guardian Hybrid Power Distributor",Int_GuardianPowerDistributor_Size2:"Guardian Hybrid Power Distributor",Int_GuardianPowerDistributor_Size3:"Guardian Hybrid Power Distributor",Int_GuardianPowerDistributor_Size4:"Guardian Hybrid Power Distributor",Int_GuardianPowerDistributor_Size5:"Guardian Hybrid Power Distributor",Int_GuardianPowerDistributor_Size6:"Guardian Hybrid Power Distributor",Int_GuardianPowerDistributor_Size7:"Guardian Hybrid Power Distributor",Int_GuardianPowerDistributor_Size8:"Guardian Hybrid Power Distributor",Int_GuardianPowerplant_Size2:"Guardian Hybrid Power Plant",Int_GuardianPowerplant_Size3:"Guardian Hybrid Power Plant",Int_GuardianPowerplant_Size4:"Guardian Hybrid Power Plant",Int_GuardianPowerplant_Size5:"Guardian Hybrid Power Plant",Int_GuardianPowerplant_Size6:"Guardian Hybrid Power Plant",Int_GuardianPowerplant_Size7:"Guardian Hybrid Power Plant",Int_GuardianPowerplant_Size8:"Guardian Hybrid Power Plant",Int_DroneControl_Recon_Size1_Class1:"Recon Limpet Controller",Int_DroneControl_Recon_Size3_Class1:"Recon Limpet Controller",Int_DroneControl_Recon_Size5_Class1:"Recon Limpet Controller",Int_DroneControl_Recon_Size7_Class1:"Recon Limpet Controller",Int_SupercruiseAssist:"Supercruise Assist",Int_DockingComputer_Advanced:"Advanced Docking Computer",Int_PlanetApproachSuite_Advanced:"Advanced Planetary Approach Suite",Int_MultiDroneControl_Mining_Size3_Class1:"Mining Multi Limpet Controller",Int_MultiDroneControl_Mining_Size3_Class3:"Mining Multi Limpet Controller",Int_MultiDroneControl_Operations_Size3_Class3:"Operations Multi Limpet Controller",Int_MultiDroneControl_Operations_Size3_Class4:"Operations Multi Limpet Controller",Int_MultiDroneControl_Rescue_Size3_Class2:"Rescue Multi Limpet Controller",Int_MultiDroneControl_Rescue_Size3_Class3:"Rescue Multi Limpet Controller",Int_MultiDroneControl_Xeno_Size3_Class3:"Xeno Multi Limpet Controller",Int_MultiDroneControl_Xeno_Size3_Class4:"Xeno Multi Limpet Controller",Int_MultiDroneControl_Universal_Size7_Class3:"Universal Multi Limpet Controller",Int_MultiDroneControl_Universal_Size7_Class5:"Universal Multi Limpet Controller",Int_ExpModuleStabiliser_Size3_Class3:"Experimental Weapon Stabiliser",Int_ExpModuleStabiliser_Size5_Class3:"Experimental Weapon Stabiliser",Int_LargeCargoRack_Size7_Class1:"Mk II Cargo Rack",Int_LargeCargoRack_Size8_class1:"Mk II Cargo Rack",Int_MultiDroneControl_MiningV2_Size5_Class5:"Mk II Mining Multi-Limpet Controller",Int_MkII_PassengerCabin_Size2_Class1:"MkII Economy Class Passenger Cabin",Int_MkII_PassengerCabin_Size3_Class1:"MkII Economy Class Passenger Cabin",Int_MkII_PassengerCabin_Size3_Class2:"MkII Business Class Passenger Cabin",Int_MkII_PassengerCabin_Size4_Class1:"MkII Economy Class Passenger Cabin",Int_MkII_PassengerCabin_Size4_Class2:"MkII Business Class Passenger Cabin",Int_MkII_PassengerCabin_Size5_Class1:"MkII Economy Class Passenger Cabin",Int_MkII_PassengerCabin_Size5_Class2:"MkII Business Class Passenger Cabin",Int_MkII_PassengerCabin_Size6_Class1:"MkII Economy Class Passenger Cabin",Int_MkII_PassengerCabin_Size6_Class2:"MkII Business Class Passenger Cabin",Hpt_PulseLaser_Fixed_Small:"Pulse Laser",Hpt_PulseLaser_Fixed_Medium:"Pulse Laser",Hpt_PulseLaser_Fixed_Large:"Pulse Laser",Hpt_PulseLaser_Fixed_Huge:"Pulse Laser",Hpt_PulseLaser_Gimbal_Small:"Pulse Laser",Hpt_PulseLaser_Gimbal_Medium:"Pulse Laser",Hpt_PulseLaser_Gimbal_Large:"Pulse Laser",Hpt_PulseLaser_Turret_Small:"Pulse Laser",Hpt_PulseLaser_Turret_Medium:"Pulse Laser",Hpt_PulseLaser_Turret_Large:"Pulse Laser",Hpt_PulseLaserBurst_Fixed_Small:"Burst Laser",Hpt_PulseLaserBurst_Fixed_Medium:"Burst Laser",Hpt_PulseLaserBurst_Fixed_Large:"Burst Laser",Hpt_PulseLaserBurst_Fixed_Huge:"Burst Laser",Hpt_PulseLaserBurst_Gimbal_Small:"Burst Laser",Hpt_PulseLaserBurst_Gimbal_Medium:"Burst Laser",Hpt_PulseLaserBurst_Gimbal_Large:"Burst Laser",Hpt_PulseLaserBurst_Turret_Small:"Burst Laser",Hpt_PulseLaserBurst_Turret_Medium:"Burst Laser",Hpt_PulseLaserBurst_Turret_Large:"Burst Laser",Hpt_BeamLaser_Fixed_Small:"Beam Laser",Hpt_BeamLaser_Fixed_Medium:"Beam Laser",Hpt_BeamLaser_Fixed_Large:"Beam Laser",Hpt_BeamLaser_Fixed_Huge:"Beam Laser",Hpt_BeamLaser_Gimbal_Small:"Beam Laser",Hpt_BeamLaser_Gimbal_Medium:"Beam Laser",Hpt_BeamLaser_Gimbal_Large:"Beam Laser",Hpt_BeamLaser_Turret_Small:"Beam Laser",Hpt_BeamLaser_Turret_Medium:"Beam Laser",Hpt_BeamLaser_Turret_Large:"Beam Laser",Hpt_Cannon_Fixed_Small:"Cannon",Hpt_Cannon_Fixed_Medium:"Cannon",Hpt_Cannon_Fixed_Large:"Cannon",Hpt_Cannon_Fixed_Huge:"Cannon",Hpt_Cannon_Gimbal_Small:"Cannon",Hpt_Cannon_Gimbal_Medium:"Cannon",Hpt_Cannon_Gimbal_Huge:"Cannon",Hpt_Cannon_Turret_Small:"Cannon",Hpt_Cannon_Turret_Medium:"Cannon",Hpt_Cannon_Turret_Large:"Cannon",Hpt_Slugshot_Fixed_Small:"Fragment Cannon",Hpt_Slugshot_Fixed_Medium:"Fragment Cannon",Hpt_Slugshot_Fixed_Large:"Fragment Cannon",Hpt_Slugshot_Gimbal_Small:"Fragment Cannon",Hpt_Slugshot_Gimbal_Medium:"Fragment Cannon",Hpt_Slugshot_Turret_Small:"Fragment Cannon",Hpt_Slugshot_Turret_Medium:"Fragment Cannon",Hpt_MultiCannon_Fixed_Small:"Multi-Cannon",Hpt_MultiCannon_Fixed_Medium:"Multi-Cannon",Hpt_MultiCannon_Fixed_Large:"Multi-Cannon",Hpt_MultiCannon_Fixed_Huge:"Multi-Cannon",Hpt_MultiCannon_Gimbal_Small:"Multi-Cannon",Hpt_MultiCannon_Gimbal_Medium:"Multi-Cannon",Hpt_MultiCannon_Gimbal_Large:"Multi-Cannon",Hpt_MultiCannon_Turret_Small:"Multi-Cannon",Hpt_MultiCannon_Turret_Medium:"Multi-Cannon",Hpt_MultiCannon_Turret_Large:"Multi-Cannon",Hpt_PlasmaAccelerator_Fixed_Medium:"Plasma Accelerator",Hpt_PlasmaAccelerator_Fixed_Large:"Plasma Accelerator",Hpt_PlasmaAccelerator_Fixed_Huge:"Plasma Accelerator",Hpt_Railgun_Fixed_Small:"Rail Gun",Hpt_Railgun_Fixed_Medium:"Rail Gun",Hpt_BasicMissileRack_Fixed_Small:"Seeker Missile Rack",Hpt_BasicMissileRack_Fixed_Medium:"Seeker Missile Rack",Hpt_BasicMissileRack_Fixed_Large:"Seeker Missile Rack",Hpt_MineLauncher_Fixed_Small:"Mine Launcher",Hpt_MineLauncher_Fixed_Medium:"Mine Launcher",Hpt_AdvancedTorpPylon_Fixed_Small:"Torpedo Pylon",Hpt_AdvancedTorpPylon_Fixed_Medium:"Torpedo Pylon",Hpt_AdvancedTorpPylon_Fixed_Large:"Torpedo Pylon",Hpt_MiningLaser_Fixed_Small:"Mining Laser",Hpt_MiningLaser_Fixed_Medium:"Mining Laser",Hpt_DumbfireMissileRack_Fixed_Small:"Missile Rack",Hpt_DumbfireMissileRack_Fixed_Medium:"Missile Rack",Hpt_Cannon_Gimbal_Large:"Cannon",Hpt_Slugshot_Gimbal_Large:"Fragment Cannon",Hpt_Slugshot_Turret_Large:"Fragment Cannon",Hpt_PlasmaAccelerator_Fixed_Large_Advanced:"Advanced Plasma Accelerator",Hpt_MiningLaser_Fixed_Small_Advanced:"Mining Lance",Hpt_Railgun_Fixed_Medium_Burst:"Imperial Hammer Rail Gun",Hpt_PulseLaser_Fixed_Medium_Disruptor:"Pulse Disruptor Laser",Hpt_Slugshot_Fixed_Large_Range:"Pacifier Frag-Cannon",Hpt_DrunkMissileRack_Fixed_Medium:"Pack-Hound Missile Rack",Hpt_MultiCannon_Fixed_Small_Strong:"Enforcer Cannon",Hpt_BeamLaser_Fixed_Small_Heat:"Retributor Beam Laser",Hpt_MineLauncher_Fixed_Small_Impulse:"Shock Mine Launcher",Hpt_PulseLaserBurst_Fixed_Small_Scatter:"Cytoscrambler Burst Laser",Hpt_BeamLaser_Gimbal_Huge:"Beam Laser",Hpt_PulseLaser_Gimbal_Huge:"Pulse Laser",Hpt_MultiCannon_Gimbal_Huge:"Multi-Cannon",Hpt_PulseLaserBurst_Gimbal_Huge:"Burst Laser",Hpt_DumbfireMissileRack_Fixed_Medium_Lasso:"Rocket Propelled FSD Disruptor",Hpt_MiningLaser_Turret_Small:"Mining Laser",Hpt_MiningLaser_Turret_Medium:"Mining Laser",Hpt_FlakMortar_Fixed_Medium:"Remote Release Flak Launcher",Hpt_ATDumbfireMissile_Fixed_Medium:"AX Missile Rack",Hpt_ATDumbfireMissile_Fixed_Large:"AX Missile Rack",Hpt_ATMultiCannon_Fixed_Medium:"AX Multi-Cannon",Hpt_ATMultiCannon_Fixed_Large:"AX Multi-Cannon",Hpt_ATDumbfireMissile_Turret_Medium:"AX Missile Rack",Hpt_ATDumbfireMissile_Turret_Large:"AX Missile Rack",Hpt_FlakMortar_Turret_Medium:"Remote Release Flak Launcher",Hpt_ATMultiCannon_Turret_Medium:"AX Multi-Cannon",Hpt_ATMultiCannon_Turret_Large:"AX Multi-Cannon",Hpt_Guardian_GaussCannon_Fixed_Medium:"Guardian Gauss Cannon",Hpt_CausticMissile_Fixed_Medium:"Enzyme Missile Rack",Hpt_FlechetteLauncher_Fixed_Medium:"Remote Release Flechette Launcher",Hpt_FlechetteLauncher_Turret_Medium:"Remote Release Flechette Launcher",Hpt_Guardian_PlasmaLauncher_Fixed_Medium:"Guardian Plasma Charger",Hpt_Guardian_PlasmaLauncher_Turret_Medium:"Guardian Plasma Charger",Hpt_Guardian_ShardCannon_Fixed_Medium:"Guardian Shard Cannon",Hpt_Guardian_ShardCannon_Turret_Medium:"Guardian Shard Cannon",Hpt_PlasmaShockCannon_Fixed_Medium:"Shock Cannon",Hpt_PlasmaShockCannon_Gimbal_Medium:"Shock Cannon",Hpt_PlasmaShockCannon_Turret_Medium:"Shock Cannon",Hpt_Guardian_ShardCannon_Fixed_Large:"Guardian Shard Cannon",Hpt_Guardian_ShardCannon_Turret_Large:"Guardian Shard Cannon",Hpt_PlasmaShockCannon_Fixed_Large:"Shock Cannon",Hpt_PlasmaShockCannon_Gimbal_Large:"Shock Cannon",Hpt_PlasmaShockCannon_Turret_Large:"Shock Cannon",Hpt_Guardian_PlasmaLauncher_Fixed_Large:"Guardian Plasma Charger",Hpt_Guardian_PlasmaLauncher_Turret_Large:"Guardian Plasma Charger",Hpt_DumbfireMissileRack_Fixed_Large:"Missile Rack",Hpt_PlasmaShockCannon_Turret_Small:"Shock Cannon",Hpt_PlasmaShockCannon_Gimbal_Small:"Shock Cannon",Hpt_PlasmaShockCannon_Fixed_Small:"Shock Cannon",Hpt_Guardian_PlasmaLauncher_Turret_Small:"Guardian Plasma Charger",Hpt_Guardian_PlasmaLauncher_Fixed_Small:"Guardian Plasma Charger",Hpt_Guardian_ShardCannon_Turret_Small:"Guardian Shard Cannon",Hpt_Guardian_ShardCannon_Fixed_Small:"Guardian Shard Cannon",Hpt_Guardian_GaussCannon_Fixed_Small:"Guardian Gauss Cannon",Hpt_Mining_SubSurfDispMisle_Fixed_Small:"Sub-Surface Displacement Missile",Hpt_Mining_SubSurfDispMisle_Turret_Small:"Sub-Surface Displacement Missile",Hpt_Mining_SubSurfDispMisle_Fixed_Medium:"Sub-Surface Displacement Missile",Hpt_Mining_SubSurfDispMisle_Turret_Medium:"Sub-Surface Displacement Missile",Hpt_Mining_AbrBlstr_Fixed_Small:"Abrasion Blaster",Hpt_Mining_AbrBlstr_Turret_Small:"Abrasion Blaster",Hpt_Mining_SeismChrgWarhd_Fixed_Medium:"Seismic Charge Launcher",Hpt_Mining_SeismChrgWarhd_Turret_Medium:"Seismic Charge Launcher",Hpt_MultiCannon_Fixed_Medium_Advanced:"Advanced Multi-Cannon",Hpt_MultiCannon_Fixed_Small_Advanced:"Advanced Multi-Cannon",Hpt_DumbfireMissileRack_Fixed_Small_Advanced:"Advanced Missile Rack",Hpt_DumbfireMissileRack_Fixed_Medium_Advanced:"Advanced Missile Rack",Hpt_ATDumbfireMissile_Fixed_Large_V2:"Enhanced AX Missile Rack",Hpt_ATMultiCannon_Fixed_Medium_V2:"Enhanced AX Multi-Cannon",Hpt_ATDumbfireMissile_Fixed_Medium_V2:"Enhanced AX Missile Rack",Hpt_ATDumbfireMissile_Turret_Large_V2:"Enhanced AX Missile Rack",Hpt_ATDumbfireMissile_Turret_Medium_V2:"Enhanced AX Missile Rack",Hpt_ATMultiCannon_Fixed_Large_V2:"Enhanced AX Multi-Cannon",Hpt_ATMultiCannon_Turret_Large_V2:"Enhanced AX Multi-Cannon",Hpt_ATMultiCannon_Turret_Medium_V2:"Enhanced AX Multi-Cannon",Hpt_ATMultiCannon_Gimbal_Large:"Enhanced AX Multi-Cannon",Hpt_ATMultiCannon_Gimbal_Medium:"Enhanced AX Multi-Cannon",Hpt_Human_Extraction_Fixed_Medium:"Sub-Surface Extraction Missile",Hpt_ATVentDisruptorPylon_Fixed_Medium:"Guardian Nanite Torpedo Pylon",Hpt_ATVentDisruptorPylon_Fixed_Large:"Guardian Nanite Torpedo Pylon",Hpt_Cannon_Gimbal_Medium_Burst:"Concord Cannon",Hpt_MiningToolV2_Fixed_Large:"Mining Volley Repeater",Hpt_MkIIPlasmaShockAutocannon_Fixed_Large:"Mk II Plasma Shock Accelerator",Hpt_ChaffLauncher_Tiny:"Chaff Launcher",Hpt_ElectronicCountermeasure_Tiny:"Electronic Countermeasure",Hpt_HeatSinkLauncher_Turret_Tiny:"Heat Sink Launcher",Hpt_PlasmaPointDefence_Turret_Tiny:"Point Defence",Hpt_CargoScanner_Size0_Class1:"Cargo Scanner",Hpt_CargoScanner_Size0_Class2:"Cargo Scanner",Hpt_CargoScanner_Size0_Class3:"Cargo Scanner",Hpt_CargoScanner_Size0_Class4:"Cargo Scanner",Hpt_CargoScanner_Size0_Class5:"Cargo Scanner",Hpt_CloudScanner_Size0_Class1:"Frame Shift Wake Scanner",Hpt_CloudScanner_Size0_Class2:"Frame Shift Wake Scanner",Hpt_CloudScanner_Size0_Class3:"Frame Shift Wake Scanner",Hpt_CloudScanner_Size0_Class4:"Frame Shift Wake Scanner",Hpt_CloudScanner_Size0_Class5:"Frame Shift Wake Scanner",Hpt_CrimeScanner_Size0_Class1:"Kill Warrant Scanner",Hpt_CrimeScanner_Size0_Class2:"Kill Warrant Scanner",Hpt_CrimeScanner_Size0_Class3:"Kill Warrant Scanner",Hpt_CrimeScanner_Size0_Class4:"Kill Warrant Scanner",Hpt_CrimeScanner_Size0_Class5:"Kill Warrant Scanner",Hpt_ShieldBooster_Size0_Class1:"Shield Booster",Hpt_ShieldBooster_Size0_Class2:"Shield Booster",Hpt_ShieldBooster_Size0_Class3:"Shield Booster",Hpt_ShieldBooster_Size0_Class4:"Shield Booster",Hpt_ShieldBooster_Size0_Class5:"Shield Booster",Hpt_AntiUnknownShutdown_Tiny:"Shutdown Field Neutraliser",Hpt_XenoScanner_Basic_Tiny:"Xeno Scanner",Hpt_XenoScannerMk2_Basic_Tiny:"Enhanced Xeno Scanner",Hpt_MRAScanner_Size0_Class1:"Pulse Wave Analyser",Hpt_MRAScanner_Size0_Class2:"Pulse Wave Analyser",Hpt_MRAScanner_Size0_Class3:"Pulse Wave Analyser",Hpt_MRAScanner_Size0_Class4:"Pulse Wave Analyser",Hpt_MRAScanner_Size0_Class5:"Pulse Wave Analyser",Hpt_CausticSinkLauncher_Turret_Tiny:"Caustic Sink Launcher",Hpt_AntiUnknownShutdown_Tiny_V2:"Thargoid Pulse Neutraliser",Hpt_XenoScanner_Advanced_Tiny:"Pulse Wave Xeno Scanner"},names:{"Lightweight Alloy":{en:"Lightweight Alloy",de:"Leichte Legierung",es:"Aleaciones ligeras",fr:"Alliage léger",pt:"Liga leve",ru:"Легкий сплав"},"Reinforced Alloy":{en:"Reinforced Alloy",de:"Verstärkte Legierung",es:"Aleaciones reforzadas",fr:"Alliage renforcé",pt:"Liga reforçada",ru:"Укрепленный сплав"},"Military Grade Composite":{en:"Military Grade Composite",de:"Militär-Komposit",es:"Compuesto de clase militar",fr:"Composite militaire",pt:"Composto de nível militar",ru:"Композит военного класса"},"Mirrored Surface Composite":{en:"Mirrored Surface Composite",de:"Gespiegelte-Oberfläche-Komposit",es:"Compuesto de superficie reflectante",fr:"Composite à surface miroir",pt:"Composto de superfície reflexiva",ru:"Композит с зеркальной поверхностью"},"Reactive Surface Composite":{en:"Reactive Surface Composite",de:"Reaktive-Oberfläche-Komposit",es:"Compuesto de superficie reactiva",fr:"Composite à surface réactive",pt:"Composto de superfície reativa",ru:"Композит с реактивной поверхностью"},"Power Plant":{en:"Power Plant",de:"Kraftwerk",es:"Núcleo de energía",fr:"Générateur",pt:"Gerador de energia",ru:"Силовая установка"},Thrusters:{en:"Thrusters",de:"Schubdüsen",es:"Impulsores",fr:"Propulseurs",pt:"Propulsores",ru:"Маневровые двигатели"},"Frame Shift Drive":{en:"Frame Shift Drive",de:"Frameshiftantrieb",es:"Motor de distorsión",fr:"Réacteur FSD",pt:"Motor de distorção de fase",ru:"Рамочно-сместительный двигатель (FSD)"},"Life Support":{en:"Life Support",de:"Lebenserhaltung",es:"Soporte vital",fr:"Systèmes de survie",pt:"Suporte de vida",ru:"Система жизнеобеспечения"},"Power Distributor":{en:"Power Distributor",de:"Energieverteiler",es:"Distribuidor de energía",fr:"Répartiteur de puissance",pt:"Distribuidor de energia",ru:"Распределитель питания"},Sensors:{en:"Sensors",de:"Sensoren",es:"Sensores",fr:"Capteurs",pt:"Sensores",ru:"Сенсоры"},"Fuel Tank":{en:"Fuel Tank",de:"Treibstofftank",es:"Tanque de combustible",fr:"Réservoir",pt:"Tanque de combustível",ru:"Топливный бак"},"Enhanced Performance Thrusters":{en:"Enhanced Performance Thrusters",de:"Schubdüsen mit verbesserter Leistung",es:"Propulsores de rendimiento mejorado",fr:"Propulseurs à performances améliorées",pt:"Propulsores de desempenho melhorado",ru:"Усиленные маневровые двигатели"},"Frame Shift Drive (SCO)":{en:"Frame Shift Drive (SCO)",de:"Frameshiftantrieb (SCÜ)",es:"Motor de distorsión (SdS)",fr:"Réacteur FSD (SSN)",pt:"Motor de distorção de fase (SSV)",ru:"Двигатель FSD (ПГР)"},"Mk II Ablative Lightweight Alloys":{en:"Mk II Ablative Lightweight Alloys",de:"Ablativ-Leichte Legierungen Mk II",es:"Aleaciones ligeras ablativas para Mk II",fr:"Alliages légers ablatifs Mk II",pt:"Ligas leves ablativas Mk II",ru:"Абляционные легкие сплавы Mk II"},"Mk II Ablative Reinforced Alloys":{en:"Mk II Ablative Reinforced Alloys",de:"Ablativ-Verstärkte Legierungen Mk II",es:"Aleaciones con refuerzo ablativo para Mk II",fr:"Alliages renforcés ablatifs Mk II",pt:"Ligas reforçadas ablativas Mk II",ru:"Абляционные укрепленные сплавы Mk II"},"Mk II Ablative Military Grade Composite":{en:"Mk II Ablative Military Grade Composite",de:"Ablativ-Militär-Komposit Mk II",es:"Compuesto de clase militar ablativo para Mk II",fr:"Composite militaire ablatif Mk II",pt:"Composto de nível militar ablativo Mk II",ru:"Абляционный композит военного класса Mk II"},"Mk II Ablative Mirrored Surface Composite":{en:"Mk II Ablative Mirrored Surface Composite",de:"Ablativ-Gespiegelte-Oberfläche-Komposit Mk II",es:"Compuesto de superficie reflectante ablativo para Mk II",fr:"Composite à surface miroir ablatif Mk II",pt:"Composto de superfície reflexiva ablativo Mk II",ru:"Абляционный композит с зеркальной поверхностью Mk II"},"Mk II Ablative Reactive Surface Composite":{en:"Mk II Ablative Reactive Surface Composite",de:"Ablativ-Reaktive-Oberfläche-Komposit Mk II",es:"Compuesto de superficie reactiva ablativo para Mk II",fr:"Composite à surface réactive ablatif Mk II",pt:"Composto de superfície reativa ablativo Mk II",ru:"Абляционный композит с реактивной поверхностью Mk II"},"Mk II Supercharge Optimised Frame Shift Drive (SCO)":{en:"Mk II Supercharge Optimised Frame Shift Drive (SCO)",de:"Superladungs-Opt. FSA (SCÜ) Mk II",es:"MDD (SdS) optimizado para sobrecarga de Mk II",fr:"FSD (SSN) à optimisation superchargée Mk II",pt:"MDD (SSV) otimizado para sobrecarga Mk II",ru:"Оптимизированный двигатель FSD (ПГР) Mk II"},"Mk II Gravity Optimised Thrusters":{en:"Mk II Gravity Optimised Thrusters",de:"Schwerkraft-Opt. Schubdüsen Mk II",es:"Impulsores grav. optimizados para Mk II",fr:"Propulseurs à optimisation grav. Mk II",pt:"Propulsores otimizados para grav. Mk II",ru:"Маневровые двигатели Mk II для полетов при действии гравитации"},"Mk II Agile Boost Thrusters":{en:"Mk II Agile Boost Thrusters",de:"Wendige Boost-Schubdüsen Mk II",es:"Impulsores ágiles con postquemador Mk II",fr:"Propulseurs de contrôle du turbo Mk II",pt:"Propulsores de aceleração ágil da Mk II",ru:"Маневровые двигатели ускорения Mk II"},"Standard Docking Computer":{en:"Standard Docking Computer",de:"Standard-Landecomputer",es:"Computadora de aterrizaje asistido",fr:"Ordinateur d'appontage standard",pt:"Computador de docagem padrão",ru:"Стыковочный компьютер"},"Shield Generator":{en:"Shield Generator",de:"Schildgenerator",es:"Generador de escudos",fr:"Générateur de bouclier",pt:"Gerador de escudo",ru:"Генератор щита"},"Shield Cell Bank":{en:"Shield Cell Bank",de:"Schildzellenbank",es:"Célula de refuerzo de escudo",fr:"Réserve de cellules d'énergie",pt:"Banco de célula de escudo",ru:"Щитонакопитель"},"Cargo Rack":{en:"Cargo Rack",de:"Frachtgestell",es:"Bodega de carga",fr:"Compartiment soute",pt:"Estante de carga",ru:"Грузовой стеллаж"},"Hatch Breaker Limpet Controller":{en:"Hatch Breaker Limpet Controller",de:"Steuerung Ladelukenöffner-Drohne",es:"Lanzador dron extractor",fr:"Contrôleur de drone perce-soute",pt:"Controlador de drone quebra-escotilha",ru:"Контроллер дрона-взломщика трюмов"},"Detailed Surface Scanner":{en:"Detailed Surface Scanner",de:"Detail-Oberflächen-Scanner",es:"Escáner de análisis de superficie",fr:"Détecteur de surface détaillé",pt:"Scanner de superfície detalhada",ru:"Подробный сканер поверхностей"},"Fuel Scoop":{en:"Fuel Scoop",de:"Treibstoffsammler",es:"Colector de combustible",fr:"Récupérateur de carburant",pt:"Coletor de combustível",ru:"Топливозаборник"},Refinery:{en:"Refinery",de:"Raffinerie",es:"Refinería",fr:"Raffinerie",pt:"Refinaria",ru:"Очиститель"},"Frame Shift Drive Interdictor":{en:"Frame Shift Drive Interdictor",de:"Frameshiftantrieb-Unterbrecher",es:"Interdictor de MDD",fr:"Intercepteur de réacteur FSD",pt:"Interditor de motor de distorção",ru:"Перехватчик FSD"},"Auto Field-Maintenance Unit":{en:"Auto Field-Maintenance Unit",de:"Automatische Feldwartungs-Einheit",es:"Unidad de automantenimiento",fr:"Unité maintenance terrain auto",pt:"Unidade de Manutenção",ru:"Блок автом. полевого ремонта"},"Hull Reinforcement Package":{en:"Hull Reinforcement Package",de:"Rumpfhüllen-Verstärkung",es:"Paquete de refuerzo estructural",fr:"Renforcement de coque",pt:"Pacote de reforço de casco",ru:"Набор для усиления корпуса"},"Collector Limpet Controller":{en:"Collector Limpet Controller",de:"Steuerung Sammeldrohne",es:"Lanzador dron colector",fr:"Contrôleur de collecteurs",pt:"Controlador de drone coletor",ru:"Контроллер дрона-сборщика"},"Fuel Transfer Limpet Controller":{en:"Fuel Transfer Limpet Controller",de:"Steuerung Treibstofftransferdrohnen",es:"Lanzador drón de combustible",fr:"Contrôleur de ravitailleur",pt:"Controlador de drone de combustível",ru:"Контроллер дрона-заправщика"},"Prospector Limpet Controller":{en:"Prospector Limpet Controller",de:"Steuerung Erzsuche-Drohne",es:"Lanzador dron prospector",fr:"Contrôleur de drone de prospection",pt:"Controlador de drone prospector",ru:"Контроллер дрона-геологоразведчика"},"Prismatic Shield Generator":{en:"Prismatic Shield Generator",de:"Prismaschildgenerator",es:"Generador de escudos prismáticos",fr:"Générateur de bouclier prismatique",pt:"Gerador de escudo prismático",ru:"Призматический щитогенератор"},"Bi-Weave Shield Generator":{en:"Bi-Weave Shield Generator",de:"Zwei-Schicht-Schildgenerator",es:"Generador de escudo entrelazados",fr:"Générateur de bouclier entrelacé",pt:"Gerador de escudo entrelaçado",ru:"Двухпоточный щитогенератор"},"Planetary Vehicle Hangar":{en:"Planetary Vehicle Hangar",de:"Planetenfahrzeug-Hangar",es:"Hangar de vehículo planetario",fr:"Hangar des véhicules planétaires",pt:"Hangar de veículo planetário",ru:"Гараж для планетарного транспорта"},"Planetary Approach Suite":{en:"Planetary Approach Suite",de:"Planetenanflug-Suite",es:"Equipo de aproximación planetaria",fr:"Installation d'approche planétaire",pt:"Instrumento de aproximação planetária",ru:"К-т для сближения с планетой"},"Corrosion Resistant Cargo Rack":{en:"Corrosion Resistant Cargo Rack",de:"Anti-Korrosions-Frachtgestell",es:"Bodega de carga anticorrosión",fr:"Compartiment de soute anticorrosion",pt:"Estante de carga anticorrosão",ru:"Антикоррозийный грузовой стеллаж"},"Cargo Hatch":{en:"Cargo Hatch",de:"Frachtluke",es:"Escotilla de carga",fr:"Écoutille de soute",pt:"Escotilha da carga",ru:"Грузовой люк"},"Economy Class Passenger Cabin":{en:"Economy Class Passenger Cabin",de:"Economy-Klasse-Passagierkabine",es:"Cabina de pasajero clase económica",fr:"Cabine passagers Économie",pt:"Cabine de Passageiro Classe Econômica",ru:"Каюта пассажира эконом-класса"},"Business Class Passenger Cabin":{en:"Business Class Passenger Cabin",de:"Business-Klasse-Passagierkabine",es:"Cabina de pasajero clase preferente",fr:"Cabine passagers Affaires",pt:"Cabine de Passageiro Classe Executiva",ru:"Каюта пассажира бизнес-класса"},"First Class Passenger Cabin":{en:"First Class Passenger Cabin",de:"Erste-Klasse-Passagierkabine",es:"Cabina de pasajero primera clase",fr:"Cabine passagers 1re",pt:"Cabine de Passageiro Primeira Classe",ru:"Каюта пассажира первого класса"},"Luxury Class Passenger Cabin":{en:"Luxury Class Passenger Cabin",de:"Luxus-Klasse-Passagierkabine",es:"Cabina de pasajero clase lujo",fr:"Cabine de passagers de luxe",pt:"Cabine de Passageiro Classe de Luxo",ru:"Каюта пассажира люкс-класса"},"Mk I Vessel Hangar":{en:"Mk I Vessel Hangar",de:"Schiffshangar",es:"Hangar de naves",fr:"Hangar à vaisseaux",pt:"Hangar de nave",ru:"Ангар для ЛА"},"Mk II Vessel Hangar":{en:"Mk II Vessel Hangar",de:"Mk-II-Schiffshangar",es:"Hangar de naves Mk II",fr:"Hangar à vaisseaux Mk II",pt:"Hangar de nave Mk II",ru:"Ангар для ЛА Mk II"},"Module Reinforcement Package":{en:"Module Reinforcement Package",de:"Modulverstärkung",es:"Paquete de refuerzo de módulo",fr:"Pack de renforcement de modules",pt:"Pacote de Reforço de módulo",ru:"Набор для усиления модуля"},"Repair Limpet Controller":{en:"Repair Limpet Controller",de:"Steuerung Reparaturdrohne",es:"Lanzador dron reparador",fr:"Contrôleur de drone réparateur",pt:"Controlador de drone de reparo",ru:"Контроллер дрона-ремонтника"},"Research Limpet Controller":{en:"Research Limpet Controller",de:"Steuerung Forschungsdrohne",es:"Lanzador dron de investigación",fr:"Contrôleur de drone de recherche",pt:"Controlador de drone de pesquisa",ru:"Контроллер дрона-исследователя"},"Meta Alloy Hull Reinforcement":{en:"Meta Alloy Hull Reinforcement",de:"Rumpfhüllenverstärkung (Meta-Legierung)",es:"Paquete de refuerzo estructural de aleaciones metálicas",fr:"Renforcement de coque en méta-alliage",pt:"Pacote de reforço de casco com meta-ligas",ru:"Набор для метасплавного усиления корпуса"},"Decontamination Limpet Controller":{en:"Decontamination Limpet Controller",de:"Steuerung Dekontaminationsdrohne",es:"Lanzador dron de descontaminación",fr:"Contrôleur de drone de décontamination",pt:"Controlador de drone de descontaminação",ru:"Контроллер дрона-очистителя"},"Guardian Hull Reinforcement":{en:"Guardian Hull Reinforcement",de:"Guardian-Rumpfhüllenverstärkung",es:"Paquete de refuerzo estructural guardián",fr:"Pack de renforcement de coque - Guardians",pt:"Pacote de reforço de casco Guardian",ru:"Набор для усиления корпуса Стражей"},"Guardian Module Reinforcement":{en:"Guardian Module Reinforcement",de:"Guardian-Modulverstärkung",es:"Paquete de refuerzo de módulo guardián",fr:"Pack de renforcement de modules - Guardians",pt:"Pacote de reforço de módulo Guardian",ru:"Набор для усиления модуля Стражей"},"Guardian Shield Reinforcement":{en:"Guardian Shield Reinforcement",de:"Guardian-Schildverstärkung",es:"Paquete de refuerzo de escudo guardián",fr:"Pack de renforcement de bouclier - Guardians",pt:"Pacote de reforço de escudo Guardian",ru:"Набор для усиления щита Стражей"},"Guardian FSD Booster":{en:"Guardian FSD Booster",de:"Guardian-Frameshiftantrieb-Booster",es:"Potenciador de motor de distorsión guardián",fr:"Survolteur de réacteur FSD - Guardians",pt:"Potenciador do motor de distorção de fase Guardian",ru:"Ускоритель FSD Стражей"},"Guardian Hybrid Power Distributor":{en:"Guardian Hybrid Power Distributor",de:"Guardian-Hybrid-Energieverteiler",es:"Distribuidor de energía híbrido guardián",fr:"Répartiteur de puissance hybride - Guardians",pt:"Distribuidor de energia híbrido Guardian",ru:"Гибридный распределитель питания Стражей"},"Guardian Hybrid Power Plant":{en:"Guardian Hybrid Power Plant",de:"Guardian-Hybrid-Kraftwerk",es:"Núcleo de energía híbrida guardián",fr:"Générateur hybride - Guardians",pt:"Gerador de energia híbrido Guardian",ru:"Гибридная силовая установка Стражей"},"Recon Limpet Controller":{en:"Recon Limpet Controller",de:"Steuerung Aufklärungsdrohne",es:"Lanzador dron de reconocimiento",fr:"Contrôleur de drone de reconnaissance",pt:"Controlador de drone de reconhecimento",ru:"Контроллер дрона-разведчика"},"Supercruise Assist":{en:"Supercruise Assist",de:"Supercruise-Assistent",es:"Asistencia de supercrucero",fr:"Super-navigation assistée",pt:"Assistência de supervelocidade",ru:"Помощь в гиперкрейсерском режиме"},"Advanced Docking Computer":{en:"Advanced Docking Computer",de:"Erweiterter Landecomputer",es:"Computadora de aterrizaje avanzada",fr:"Ordinateur d'appontage avancé",pt:"Computador de docagem avançado",ru:"Улучшенный стыковочный компьютер"},"Advanced Planetary Approach Suite":{en:"Advanced Planetary Approach Suite",de:"Fortgeschrittene Planetenanflug-Suite",es:"Eq. de aproximación planetaria avanzado",fr:"Inst. approche planétaire perfectionnés",pt:"Inst. avançado de aproximação planetária",ru:"Продвинутый комплект для сближения с планетой"},"Mining Multi Limpet Controller":{en:"Mining Multi Limpet Controller",de:"Abbau-Multi-Drohnensteuerung",es:"Multilanzador dron de minería",fr:"Contrôleur multi-drones de minage",pt:"Multi Controlador de Drone de Mineração",ru:"Мультиконтроллер дронов-добытчиков"},"Operations Multi Limpet Controller":{en:"Operations Multi Limpet Controller",de:"Operationen-Drohnensteuerung",es:"Lanzador dron de operaciones",fr:"Contrôleur de drones d'opérations",pt:"Controlador de drones operacionais",ru:"Контроллер операционных дронов"},"Rescue Multi Limpet Controller":{en:"Rescue Multi Limpet Controller",de:"Rettungs-Drohnensteuerung",es:"Lanzador dron de rescate",fr:"Contrôleur de drones de sauvetage",pt:"Controlador de drones de resgate",ru:"Контроллер дронов-спасателей"},"Xeno Multi Limpet Controller":{en:"Xeno Multi Limpet Controller",de:"Xeno-Drohnensteuerung",es:"Lanzador dron xeno",fr:"Contrôleur de drones xéno",pt:"Controlador de drones alienígenas",ru:"Контроллер дронов иных"},"Universal Multi Limpet Controller":{en:"Universal Multi Limpet Controller",de:"Universelle Multi-Drohnensteuerung",es:"Multilanzador dron universal",fr:"Contrôleur multi-drones universel",pt:"Controlador multidrones universal",ru:"Универсальный мультиконтроллер дронов"},"Experimental Weapon Stabiliser":{en:"Experimental Weapon Stabiliser",de:"Experimenteller Waffenstabilisator",es:"Estabilizador de armas experimentales",fr:"Stabilisateur d'armes expérimentales",pt:"Estabilizador de arma experimental",ru:"Стабилизатор экспериментального оружия"},"Mk II Cargo Rack":{en:"Mk II Cargo Rack",de:"Frachtgestell für Mk II",es:"Bodega de carga Mk II",fr:"Compartiment de soute Mk II",pt:"Estante de carga da Mk II",ru:"Грузовой стеллаж Mk II"},"Mk II Mining Multi-Limpet Controller":{en:"Mk II Mining Multi-Limpet Controller",de:"Mk II Abbau-Multi-Drohnensteuerung",es:"Multilanzador dron de minería Mk II",fr:"Contrôleur multi-drones de minage Mk II",pt:"Controlador multidrones de mineração da Mk II",ru:"Мультиконтроллер дронов-добытчиков Mk II"},"MkII Economy Class Passenger Cabin":{en:"MkII Economy Class Passenger Cabin",de:"Economy-Klasse-Passagierkabine Mk II",es:"Cabina de pasajero clase económica Mk II",fr:"Cabine passagers Économie Mk II",pt:"Cabine de Passageiro Classe Econômica Mk II",ru:"Каюта пассажира эконом-класса Mk II"},"MkII Business Class Passenger Cabin":{en:"MkII Business Class Passenger Cabin",de:"Business-Klasse-Passagierkabine Mk II",es:"Cabina de pasajero clase preferente Mk II",fr:"Cabine passagers Affaires Mk II",pt:"Cabine de Passageiro Classe Executiva Mk II",ru:"Каюта пассажира бизнес-класса Mk II"},"Pulse Laser":{en:"Pulse Laser",de:"Impulslaser",es:"Láser de pulsos",fr:"Laser à impulsion",pt:"Laser de pulso",ru:"Импульсный лазер"},"Burst Laser":{en:"Burst Laser",de:"Salvenlaser",es:"Láser de ráfagas",fr:"Laser à rafale",pt:"Laser de rajada",ru:"Пульсирующий лазер"},"Beam Laser":{en:"Beam Laser",de:"Strahlenlaser",es:"Láser de rayo",fr:"Rayon laser",pt:"Laser contínuo",ru:"Пучковый лазер"},Cannon:{en:"Cannon",de:"Kanone",es:"Cañón",fr:"Canon",pt:"Canhão",ru:"Орудие"},"Fragment Cannon":{en:"Fragment Cannon",de:"Splitterkanone",es:"Cañón de fragmentación",fr:"Canon à fragmentation",pt:"Canhão de fragmentos",ru:"Залповое орудие"},"Multi-Cannon":{en:"Multi-Cannon",de:"Mehrfachgeschütz",es:"Multicañón",fr:"Multi-canon",pt:"Canhão de repetição",ru:"Многоствольное орудие"},"Plasma Accelerator":{en:"Plasma Accelerator",de:"Plasma-beschleuniger",es:"Acelerador de plasma",fr:"Accélérateur à plasma",pt:"Acelerador de plasma",ru:"Ускоритель плазмы"},"Rail Gun":{en:"Rail Gun",de:"Schienenkanone",es:"Cañón de riel",fr:"Canon électrique",pt:"Canhão elétrico",ru:"Рельсотрон"},"Seeker Missile Rack":{en:"Seeker Missile Rack",de:"Suchraketenrampe",es:"Lanzamisiles guiados",fr:"Missiles TC",pt:"Estante de Míssil Guiado",ru:"Блок ракет с самонаведением"},"Mine Launcher":{en:"Mine Launcher",de:"Minenwerfer",es:"Lanzaminas",fr:"Lance-mines",pt:"Lança minas",ru:"Минирующее устройство"},"Torpedo Pylon":{en:"Torpedo Pylon",de:"Torpedopylon",es:"Lanzatorpedos",fr:"Tube lance-torpille",pt:"Pilone de torpedo",ru:"Торпедная установка"},"Mining Laser":{en:"Mining Laser",de:"Abbaulaser",es:"Láser de minería",fr:"Laser minier",pt:"Laser de mineração",ru:"Проходочный лазер"},"Missile Rack":{en:"Missile Rack",de:"Raketenrampe",es:"Lanzamisiles",fr:"Batterie de missiles",pt:"Estante de mísseis",ru:"Блок ракет"},"Advanced Plasma Accelerator":{en:"Advanced Plasma Accelerator",de:"Optimierter Plasmabeschleuniger",es:"Acelerador de plasma avanzado",fr:"Accélérateur à plasma perfectionné",pt:"Acelerador de plasma avançado",ru:"Улучшенный ускоритель плазмы"},"Mining Lance":{en:"Mining Lance",de:"Lanzenstrahlabbaulaser",es:"Láser de rayo Lanza Perforadora",fr:"Lance de minage laser",pt:"Laser contínuo lança mineradora",ru:"Пучковый лазер «Копье шахтера»"},"Imperial Hammer Rail Gun":{en:"Imperial Hammer Rail Gun",de:"Der Imperiale Hammer",es:"Cañón de riel Martillo Imperial",fr:"Canon électrique marteleur impérial",pt:"Canhão elétrico martelo imperial",ru:"Рельсотрон «Имперский молот»"},"Pulse Disruptor Laser":{en:"Pulse Disruptor Laser",de:"Impulsunterbrecherlaser",es:"Láser de pulsos disruptores",fr:"Laser à impulsion foudroyant",pt:"Laser de pulso disruptor",ru:"Импульсный лазер «Диверсант»"},"Pacifier Frag-Cannon":{en:"Pacifier Frag-Cannon",de:"Friedensstifter-Splitterkanone",es:"Cañón de fragmentación Pacificador",fr:"Pacificateur à fragmentation",pt:"Canhão de fragmentos pacificador",ru:"Залповое орудие «Миротворец»"},"Pack-Hound Missile Rack":{en:"Pack-Hound Missile Rack",de:"Schwarmraketenwerfer",es:"Lanzamisiles Jauría de Sabuesos",fr:"Batterie de missiles essaim",pt:"Lança-mísseis de enxame",ru:"Блок ракет «Гончие»"},"Enforcer Cannon":{en:"Enforcer Cannon",de:"Vollstreckerkanone",es:"Multicañón Ejecutor",fr:"Canon exécuteur",pt:"Canhão executor",ru:"Пушка «Убийца»"},"Retributor Beam Laser":{en:"Retributor Beam Laser",de:"Vergeltungsstrahlenlaser",es:"Láser de rayo Vengador",fr:"Rayon laser calorifique",pt:"Laser contínuo retaliador",ru:"Пучковый лазер «Каратель»"},"Shock Mine Launcher":{en:"Shock Mine Launcher",de:"Schockminenwerfer",es:"Lanzaminas de impacto",fr:"Lance-mines électriques",pt:"Lança minas de impacto",ru:"Установщик шоковых мин"},"Cytoscrambler Burst Laser":{en:"Cytoscrambler Burst Laser",de:"Zytostreusalvenlaser",es:"Láser de ráfagas de citodistorsión",fr:"Laser à rafale cytobrouilleur",pt:"Laser de rajada cito-espalhador",ru:"Пульсирующий лазер «Дезинтегратор»"},"Rocket Propelled FSD Disruptor":{en:"Rocket Propelled FSD Disruptor",de:"Raketengetriebene Eindämmungsrakete",es:"Misil de contención propulsado por cohetes",fr:"Missile de confinement à propulsion",pt:"Míssil de contenção propulsado",ru:"Реактивная сдерживающая ракета"},"Remote Release Flak Launcher":{en:"Remote Release Flak Launcher",de:"Flakwerfer mit Fernzündung",es:"Lanzador antiaéreo remoto",fr:"Lanceur antiaérien déclenché à distance",pt:"Lançador de Flak Remoto",ru:"Зенитная установка (снаряды с дистанционным подрывом)"},"AX Missile Rack":{en:"AX Missile Rack",de:"AX-Raketenrampe",es:"Lanzamisiles AX",fr:"Batterie de missiles AX",pt:"Estante de Mísseis AX",ru:"Блок ракет АИ"},"AX Multi-Cannon":{en:"AX Multi-Cannon",de:"AX-Mehrfachgeschütz",es:"Multicañón AX",fr:"Multi-canon AX",pt:"Canhão de Repetição AX",ru:"Многоствольное орудие АИ"},"Guardian Gauss Cannon":{en:"Guardian Gauss Cannon",de:"Guardian-Gausskanone",es:"Cañón gauss guardián",fr:"Canon de Gauss - Guardians",pt:"Canhão gauss Guardian",ru:"Пушка Гаусса Стражей"},"Enzyme Missile Rack":{en:"Enzyme Missile Rack",de:"Enzymraketenrampe",es:"Lanzamisiles de enzimas",fr:"Batterie de missiles enzymatiques",pt:"Estante de Mísseis Enzimáticos",ru:"Блок энзимных ракет"},"Remote Release Flechette Launcher":{en:"Remote Release Flechette Launcher",de:"Flechettewerfer mit Fernzündung",es:"Lanzador de flechettes remoto",fr:"Lanceur de fléchettes déclenchées à distance",pt:"Lançador de Dardos de Liberação Remota",ru:"Установка для стрельбы стреловидными снарядами с дистанционным подрывом"},"Guardian Plasma Charger":{en:"Guardian Plasma Charger",de:"Guardian-Plasmawerfer",es:"Cargador de plasma guardián",fr:"Chargeur à plasma - Guardians",pt:"Carregador de plasma Guardian",ru:"Плазменная пушка Стражей"},"Guardian Shard Cannon":{en:"Guardian Shard Cannon",de:"Guardian-Fragmentkanone",es:"Cañón de esquirlas guardián",fr:"Canon à éclats - Guardians",pt:"Canhão de fragmentos Guardian",ru:"Осколочное орудие Стражей"},"Shock Cannon":{en:"Shock Cannon",de:"Schockkanone",es:"Cañón de impacto",fr:"Canon de choc",pt:"Canhão de impacto",ru:"Шоковое орудие"},"Sub-Surface Displacement Missile":{en:"Sub-Surface Displacement Missile",de:"Untergrund-Verdrängungsrakete",es:"Misil de desplazamiento",fr:"Missile à charge pénétrante souterraine",pt:"Míssil de deslocamento",ru:"Вытесняющая ракета для добычи глубинных залежей"},"Abrasion Blaster":{en:"Abrasion Blaster",de:"Abrasionsblaster",es:"Destructor de abrasión",fr:"Surfaceur abrasif",pt:"Detonador de abrasão",ru:"Абразивный бластер"},"Seismic Charge Launcher":{en:"Seismic Charge Launcher",de:"Seismischer Ladungswerfer",es:"Lanzador de carga sísmica",fr:"Lanceur à charge sismique",pt:"Lançador de carga sísmica",ru:"Пусковая установка для сейсмических зарядов"},"Advanced Multi-Cannon":{en:"Advanced Multi-Cannon",de:"Optimiertes Mehrfachgeschütz",es:"Multicañón avanzado",fr:"Multi-canon perfectionné",pt:"Multicanhão avançado",ru:"Продвинутое многоствольное орудие"},"Advanced Missile Rack":{en:"Advanced Missile Rack",de:"Optimierte Raketenrampe",es:"Lanzamisiles avanzado",fr:"Batterie de missiles perfectionnée",pt:"Estante de mísseis avançada",ru:"Продвинутый ракетный лоток"},"Enhanced AX Missile Rack":{en:"Enhanced AX Missile Rack",de:"Verbesserte AX-Raketenrampe",es:"Lanzamisiles AX mejorado",fr:"Batterie missiles AX améliorée",pt:"Estante de Mísseis AX melhorada",ru:"Улучшенный блок АИ-ракет"},"Enhanced AX Multi-Cannon":{en:"Enhanced AX Multi-Cannon",de:"Verbessertes AX-Mehrfachgeschütz",es:"Multicañón AX mejorado",fr:"Multi-canon AX amélioré",pt:"Canhão de Repetição AX melhorado",ru:"Улучшенное многоствольное АИ-орудие"},"Sub-Surface Extraction Missile":{en:"Sub-Surface Extraction Missile",de:"Untergrund-Förderungsrakete",es:"Misil de extracción subterránea",fr:"Missile d'extraction interne",pt:"Míssil de extração subterrâneo",ru:"Ракета для извлечения груза из-под корпуса"},"Guardian Nanite Torpedo Pylon":{en:"Guardian Nanite Torpedo Pylon",de:"Guardian-Nanobot-Torpedopylon",es:"Lanzatorpedos nanotecnológico guardián",fr:"Tube lance-torpille à nanites - Guardians",pt:"Pilone de torpedo de nanite Guardian",ru:"Торпедная нанитная установка Стражей"},"Concord Cannon":{en:"Concord Cannon",de:"Einklangkanone",es:"Cañón de concordia",fr:"Canon Concorde",pt:"Canhão Concord",ru:"Орудие «Конкорд»"},"Mining Volley Repeater":{en:"Mining Volley Repeater",de:"Schürfsalven-Repetierer",es:"Repetidor de ráfaga de minería",fr:"Lanceur de salves de minage",pt:"Repetidor de rajadas de mineração",ru:"Проходочная автопушка"},"Mk II Plasma Shock Accelerator":{en:"Mk II Plasma Shock Accelerator",de:"Plasma-Schockbeschleuniger Mk II",es:"Acelerador de descarga de plasma Mk II",fr:"Accélérateur de plasma Mk II",pt:"Acelerador de impacto de plasma da Mk II",ru:"Плазменный шоковый ускоритель Mk II"},"Chaff Launcher":{en:"Chaff Launcher",de:"Düppel-Werfer",es:"Lanzador de señuelos",fr:"Lanceur de paillettes",pt:"Lançador de chaff",ru:"Разбрасыватель дипольных отражателей"},"Electronic Countermeasure":{en:"Electronic Countermeasure",de:"Elektronische Gegenmaßnahme",es:"Contramedida electrónica",fr:"Contre-mesures électroniques",pt:"Contramedida eletrônica",ru:"Радиоэлектр. подавление"},"Heat Sink Launcher":{en:"Heat Sink Launcher",de:"Kühlkörperwerfer",es:"Lanzador de eyector térmico",fr:"Éjecteur de dissipateur thermique",pt:"Lançador de dissipador",ru:"Теплоотводная катапульта"},"Point Defence":{en:"Point Defence",de:"Punktverteidigungsgeschütz",es:"Torreta de defensa de punto",fr:"Tourelle de défense ponctuelle",pt:"Torreta de defesa de ponto",ru:"Турель точечной обороны"},"Cargo Scanner":{en:"Cargo Scanner",de:"Verzeichnisscanner",es:"Escáner de manifiesto",fr:"Détecteur de manifeste",pt:"Scanner de Manifesto",ru:"Сканер содержимого"},"Frame Shift Wake Scanner":{en:"Frame Shift Wake Scanner",de:"FS-Sogwolkenscanner",es:"Escáner de estelas de distorsión",fr:"Détecteur de sillage FSD",pt:"Scanner de rastro de distorção",ru:"Сканер следа FSD"},"Kill Warrant Scanner":{en:"Kill Warrant Scanner",de:"Tötungsbefehl-Scanner",es:"Escáner de registro criminal",fr:"Détecteur d'avis de recherche",pt:"Scanner de registro criminal",ru:"Сканер преступников"},"Shield Booster":{en:"Shield Booster",de:"Schild-Booster",es:"Potenciador de escudos",fr:"Survolteur de bouclier",pt:"Potenciador de escudo",ru:"Усилитель щита"},"Shutdown Field Neutraliser":{en:"Shutdown Field Neutraliser",de:"Abschalt-Feldneutralisator",es:"Neutralizador de campo de desactivación",fr:"Neutralisateur de champ incapacitant",pt:"Neutralizador de Campo de Desativação",ru:"Нейтрализатор отключающего поля"},"Xeno Scanner":{en:"Xeno Scanner",de:"Xeno-Scanner",es:"Escáner Xeno",fr:"Détecteur de xénomorphes",pt:"Scanner Xeno",ru:"Ксено-сканер"},"Enhanced Xeno Scanner":{en:"Enhanced Xeno Scanner",de:"Verbesserter Xeno-Scanner",es:"Escáner Xeno mejorado",fr:"Détecteur de xénomorphes amélioré",pt:"Scanner Xeno aprimorado",ru:"Улучшенный ксеносканер"},"Pulse Wave Analyser":{en:"Pulse Wave Analyser",de:"Impulswellen-Analysator",es:"Analizador de onda de pulsos",fr:"Analyseur à onde pulsée",pt:"Analisador de onda de pulso",ru:"Анализатор импульсных волн"},"Caustic Sink Launcher":{en:"Caustic Sink Launcher",de:"Säure-Absorptionswerfer",es:"Eyector cáustico",fr:"Lanceur de siphon caustique",pt:"Lançador de dissipador cáustico",ru:"Антикоррозийная катапульта"},"Thargoid Pulse Neutraliser":{en:"Thargoid Pulse Neutraliser",de:"Thargoiden-Impuls-Neutralisator",es:"Neutralizador de pulsos Thargoide",fr:"Neutralisateur d'impulsion thargoid",pt:"Neutralizador de pulso Thargoid",ru:"Нейтрализатор таргоидских импульсов"},"Pulse Wave Xeno Scanner":{en:"Pulse Wave Xeno Scanner",de:"Impulswellen-Xeno-Scanner",es:"Xenoescáner de onda de pulsos",fr:"Détecteur de xénomorphes à onde pulsée",pt:"Scanner xeno de onda de pulso",ru:"Ксено-сканер импульсных волн"}}};var MODULE_NAMES=/* @__PURE__ */createDeduplicatedLocalizedNameIndex(module_names_default);function getModuleName(symbol,locale){return getLocalizedName(MODULE_NAMES,symbol,locale,"getModuleName","symbol")}export{getModuleName};//# sourceMappingURL=chunk-QJECDMQQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n/modules.ts"],"names":["getLocalizedName","createDeduplicatedLocalizedNameIndex","module_names_default","MODULE_NAMES","getModuleName","symbol","locale"],"mappings":"O,
|
|
1
|
+
{"version":3,"sources":["../src/i18n/modules.ts"],"names":["getLocalizedName","createDeduplicatedLocalizedNameIndex","module_names_default","MODULE_NAMES","getModuleName","symbol","locale"],"mappings":"O,2u2FASA,IAAMG,4BAA+BF,qCACjCC,sBAiCG,SAASE,cAAcC,OAAgBC,QAC1C,OAAON,iBAAiBG,aAAcE,OAAQC,OAAQ,gBAAiB,SAC3E,QAAAF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getLocalizedName,createDeduplicatedLocalizedNameIndex}from"./chunk-RVIYOHYF.js";import{requireObject,requireString,requireStringIfPresent}from"./chunk-PKWVG2JY.js";var pre_engineered_variant_names_default={nameKeys:{"Hpt_Mining_AbrBlstr_Fixed_Small|AbrasionBlaster_FarReaching||mercenary":"Far-Reaching Abrasion Blaster","Hpt_CausticMissile_Fixed_Medium|EnzymeMissileRack_HighYield||mercenary":"High-Yield Enzyme Missile Rack","Hpt_Slugshot_Gimbal_Small|FragmentCannonSmall_DoubleScreaming|special_screening_shell|mercenary":"Double Screaming Fragment Cannon","Hpt_Slugshot_Gimbal_Large|FragmentCannonLarge_DoubleScreaming|special_screening_shell|mercenary":"Double Screaming Fragment Cannon","Hpt_MiningLaser_Fixed_Small|MiningLaser_LongRange|special_incendiary_rounds|mercenary":"Long Range Mining Laser","Hpt_MultiCannon_Fixed_Medium|MultiCannon_Rapid|special_phasing_sequence|mercenary":"Rapid Phase Multi-Cannon","Hpt_Railgun_Fixed_Medium|RailGun_LongShot|special_feedback_cascade_cooled|mercenary":"Enduring Feedback Rail Gun","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRack_Drag|special_drag_munitions|mercenary":"Drag Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|SeekerMissileRack_Drag|special_drag_munitions|mercenary":"Drag Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRack_LightWeightThermal|special_thermal_cascade|mercenary":"Lightweight Thermal Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRackMedium_Lockdown|special_fsd_interrupt|mercenary":"Lockdown Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|SeekerMissileRackLarge_Lockdown|special_fsd_interrupt|mercenary":"Lockdown Seeker Missile Rack","Int_CargoRack_Size5_Class1|CargoRackS5C1_Extended||mercenary":"Extended Cargo Rack","Int_CargoRack_Size6_Class1|CargoRackS6C1_Extended||mercenary":"Extended Cargo Rack","Int_DetailedSurfaceScanner_Tiny|DetailedSurfaceScanner_LongRange||mercenary":"Long Range Detailed Surface Scanner","Int_ModuleReinforcement_Size5_Class2|ModuleReinforcement_HeavyDuty||mercenary":"Heavy Duty Module Reinforcement Package","Int_PowerDistributor_Size3_Class2|PowerDistributorS3C2_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size3_Class5|PowerDistributorS3C5_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size4_Class2|PowerDistributorS4C2_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size4_Class5|PowerDistributorS4C5_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size5_Class5|PowerDistributor_Balanced||mercenary":"Balanced Power Distributor","Int_PowerDistributor_Size6_Class5|PowerDistributorS6C5_SupportFocused||mercenary":"Support Focused Power Distributor","Hpt_Mining_AbrBlstr_Fixed_Small|Weapon_LongRange||communityGoal":"Abrasion Blaster","Hpt_CausticMissile_Fixed_Medium|Weapon_HighCapacity||communityGoal":"Enzyme Missile Rack","Hpt_Slugshot_Gimbal_Small|Weapon_DoubleShot|special_screening_shell|communityGoal":"Fragment Cannon","Hpt_Slugshot_Gimbal_Large|Weapon_DoubleShot|special_screening_shell|communityGoal":"Fragment Cannon","Hpt_Guardian_ShardCannon_Fixed_Medium|Weapon_LongRange||communityGoal":"Guardian Shard Cannon","Hpt_MultiCannon_Fixed_Medium|Weapon_RapidFire|special_phasing_sequence|communityGoal":"Multi-Cannon","Hpt_Railgun_Fixed_Medium|Weapon_HighCapacity|special_feedback_cascade_cooled|communityGoal":"Rail Gun","Hpt_Railgun_Fixed_Medium_Burst|Weapon_HighCapacity|special_super_penetrator|communityGoal":"Imperial Hammer Rail Gun","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_drag_munitions|communityGoal":"Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_fsd_interrupt|communityGoal":"Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|Weapon_HighCapacity|special_fsd_interrupt|communityGoal":"Seeker Missile Rack","Hpt_ElectronicCountermeasure_Tiny|Misc_LightWeight||communityGoal":"Electronic Countermeasure","Hpt_CrimeScanner_Size0_Class5|Sensor_FastScan||communityGoal":"Kill Warrant Scanner","Hpt_CrimeScanner_Size0_Class3|Sensor_FastScan||communityGoal":"Kill Warrant Scanner","Hpt_PlasmaPointDefence_Turret_Tiny|Misc_LightWeight||communityGoal":"Point Defence","Int_PowerDistributor_Size3_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size3_Class2|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size4_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size4_Class2|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size6_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_Powerplant_Size3_Class5|PowerPlant_Armoured||communityGoal":"Power Plant","Int_Powerplant_Size3_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Powerplant_Size4_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Powerplant_Size5_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Hyperdrive_Size3_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_Hyperdrive_Size4_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_Hyperdrive_Size6_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_CargoRack_Size5_Class1|CargoRack_IncreasedCapacity||communityGoal":"Cargo Rack","Int_CargoRack_Size6_Class1|CargoRack_IncreasedCapacity||communityGoal":"Cargo Rack","Int_ShieldGenerator_Size3_Class5|ShieldGenerator_Kinetic||communityGoal":"Shield Generator","Hpt_ATDumbfireMissile_Fixed_Medium|Weapon_HighCapacity||techBroker":"Sirius AX Missile Rack","Hpt_ATDumbfireMissile_Fixed_Large|Weapon_HighCapacity||techBroker":"Sirius AX Missile Rack","Hpt_ATMultiCannon_Gimbal_Medium|Weapon_Overcharged|special_auto_loader|techBroker":"Azimuth Enhanced AX Multi-Cannon","Hpt_ATMultiCannon_Gimbal_Large|Weapon_Overcharged|special_auto_loader|techBroker":"Azimuth Enhanced AX Multi-Cannon","Hpt_Guardian_GaussCannon_Fixed_Small|Weapon_RapidFire||techBroker":"Modified Guardian Gauss Cannon","Hpt_Guardian_GaussCannon_Fixed_Medium|Weapon_RapidFire||techBroker":"Modified Guardian Gauss Cannon","Hpt_Guardian_PlasmaLauncher_Fixed_Small|Weapon_Overcharged||techBroker":"Modified Guardian Plasma Charger","Hpt_Guardian_PlasmaLauncher_Fixed_Medium|Weapon_Overcharged||techBroker":"Modified Guardian Plasma Charger","Hpt_Guardian_ShardCannon_Fixed_Small|Weapon_LongRange||techBroker":"Modified Guardian Shard Cannon","Hpt_Guardian_ShardCannon_Fixed_Medium|Weapon_LongRange||techBroker":"Modified Guardian Shard Cannon","Hpt_MiningLaser_Fixed_Small|Weapon_LongRange|special_incendiary_rounds|techBroker":"Mining Laser","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_thermal_cascade|techBroker":"Seeker Missile Rack V1","Hpt_HeatSinkLauncher_Turret_Tiny|Misc_HeatSinkCapacity||techBroker":"Sirius Heat Sink Launcher","Int_Hyperdrive_Size5_Class5|FSD_LongRange||techBroker":"Frame Shift Drive","Int_Hyperdrive_Overcharge_Size2_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO) V1","Int_Hyperdrive_Overcharge_Size3_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO) V1","Int_Hyperdrive_Overcharge_Size4_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO) V1","Int_Hyperdrive_Overcharge_Size5_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO) V1","Int_Hyperdrive_Overcharge_Size6_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO) V1","Int_Hyperdrive_Overcharge_Size7_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO) V1","Int_DetailedSurfaceScanner_Tiny|Sensor_Expanded||techBroker":"Detailed Surface Scanner V1","Hpt_FlakMortar_Turret_Medium|Decorative_Green||eventReward":"Festive Green Remote Release Flak Launcher","Hpt_FlakMortar_Turret_Medium|Decorative_Red||eventReward":"Festive Red Remote Release Flak Launcher","Hpt_FlakMortar_Turret_Medium|Decorative_Yellow||eventReward":"Festive Yellow Remote Release Flak Launcher"},names:{"Far-Reaching Abrasion Blaster":{en:"Far-Reaching Abrasion Blaster",de:"Abrasionsblaster mit großer Reichweite",es:"Destructor de abrasión de largo alcance",fr:"Surfaceur abrasif longue portée",pt:"Detonador de abrasão de longo alcance",ru:"Абразивный бластер с увеличенной дальностью"},"High-Yield Enzyme Missile Rack":{en:"High-Yield Enzyme Missile Rack",de:"Enzymraketenrampe mit hohen Erträgen",es:"Lanzamisiles de enzimas de alto rendimiento",fr:"Batterie de missiles enzymatiques à hauts rendements",pt:"Estante de mísseis enzimáticos de alta potência",ru:"Блок энзимных ракет высокой мощности"},"Double Screaming Fragment Cannon":{en:"Double Screaming Fragment Cannon",de:"Doppelschrei-Splitterkanone",es:"Cañón de fragmentación doble con proyectil de pantalla",fr:"Double canon à fragmentation Screaming",pt:"Canhão de fragmentos duplo de barragem",ru:"Залповое орудие «Двойной вой»"},"Long Range Mining Laser":{en:"Long Range Mining Laser",de:"Ferndistanz-Abbaulaser",es:"Láser de minería de largo alcance",fr:"Laser minier longue portée",pt:"Laser de mineração de longo alcance",ru:"Проходочный лазер с увеличенной дальностью"},"Rapid Phase Multi-Cannon":{en:"Rapid Phase Multi-Cannon",de:"Schnellfeuer-Mehrfachgeschütz",es:"Multicañón de fase con disparo rápido",fr:"Multi-canon à phase rapide",pt:"Canhão de repetição de tiro rápido",ru:"Скорострельное фазовое многоствольное орудие"},"Enduring Feedback Rail Gun":{en:"Enduring Feedback Rail Gun",de:"Robuste Feedback-Schienenkanone",es:"Cañón de riel Retroalimentación Soportable",fr:"Canon électrique énergétique résistant",pt:"Canhão elétrico de feedback duradouro",ru:"Электромагнитная пушка с постоянным откликом"},"Drag Seeker Missile Rack":{en:"Drag Seeker Missile Rack",de:"Suchraketenrampe ziehen",es:"Lanzamisiles guiado con lastre",fr:"Batterie de missiles TC à inertie",pt:"Estante de míssil guiado de arrasto",ru:"Блок ракет с самонаведением и замедляющими боеприпасами"},"Lightweight Thermal Seeker Missile Rack":{en:"Lightweight Thermal Seeker Missile Rack",de:"Leichte thermische Suchraketenrampe",es:"Lanzamisiles guiado térmico ligero",fr:"Batterie de missiles TC thermiques légers",pt:"Estante de míssil guiado leve",ru:"Легкий блок тепловых ракет с самонаведением"},"Lockdown Seeker Missile Rack":{en:"Lockdown Seeker Missile Rack",de:"Abriegelung-Suchraketenrampe",es:"Lanzamisiles guiado con bloqueo",fr:"Batterie de missiles TC à verrouillage",pt:"Estante de míssil guiado de precisão",ru:"Блок ракет с самонаведением и блокировкой"},"Extended Cargo Rack":{en:"Extended Cargo Rack",de:"Erweitertes Frachtgestell",es:"Bodega de carga extendida",fr:"Compartiment soute agrandi",pt:"Estante de carga estendido",ru:"Увеличенный грузовой стеллаж"},"Long Range Detailed Surface Scanner":{en:"Long Range Detailed Surface Scanner",de:"Ferndistanz-Detail-Oberflächenscanner",es:"Escáner de análisis de superficie detallado de largo alcance",fr:"Détecteur de surface détaillé longue portée",pt:"Scanner de superfície detalhada de Longo Alcance",ru:"Подробный сканер поверхностей с увеличенной дальностью"},"Heavy Duty Module Reinforcement Package":{en:"Heavy Duty Module Reinforcement Package",de:"Schwere Modulverstärkung (Paket)",es:"Paquete de refuerzo de módulo de alta resistencia",fr:"Pack de renforcement de modules lourds",pt:"Pacote de Reforço de módulo Pesado",ru:"Укрепленный набор для усиления модуля"},"Support Focused Power Distributor":{en:"Support Focused Power Distributor",de:"Unterstützungsfokussierter Energieverteiler",es:"Distribuidor de energía orientado al apoyo",fr:"Répartiteur de puissance optimisé Survie",pt:"Distribuidor de energia com foco no suporte",ru:"Вспомогательный распределитель питания"},"Balanced Power Distributor":{en:"Balanced Power Distributor",de:"Abgeglichener Energieverteiler",es:"Distribuidor de energía equilibrado",fr:"Répartiteur de puissance équilibré",pt:"Distribuidor de energia equilibrado",ru:"Сбалансированный распределитель энергии"},"Abrasion Blaster":{en:"Abrasion Blaster",de:"Abrasionsblaster",es:"Destructor de abrasión",fr:"Surfaceur abrasif",pt:"Detonador de Abrasão",ru:"Шлифовальный бластер"},"Enzyme Missile Rack":{en:"Enzyme Missile Rack",de:"Enzymraketenwerfer",es:"Lanzamisiles de Enzimas",fr:"Batterie de missile enzymatique",pt:"Estante de Míssel Enzimático",ru:"Пусковая энзимных ракет"},"Fragment Cannon":{en:"Fragment Cannon",de:"Splitterkanone",es:"Cañón de fragmentación",fr:"Canon à fragmentation",pt:"Canhão de Fragmentação",ru:"Залповое орудие"},"Guardian Shard Cannon":{en:"Guardian Shard Cannon",de:"Fragmentkanone",es:"Cañón de esquirlas",fr:"Canon à éclats",pt:"Canhão de fragmentos",ru:"Осколочное орудие"},"Multi-Cannon":{en:"Multi-Cannon",de:"Mehrfachgeschütz",es:"Multicañón",fr:"Multi-canon",pt:"Canhão de Repetição",ru:"Многоствольное орудие"},"Rail Gun":{en:"Rail Gun",de:"Schienenkanone",es:"Cañón de riel",fr:"Canon électrique",pt:"Canhão Elétrico",ru:"Электромагнитная пушка"},"Imperial Hammer Rail Gun":{en:"Imperial Hammer Rail Gun",de:"Hammer",es:"Martillo",fr:"Marteleur",pt:"Martelo",ru:"«Молот»"},"Seeker Missile Rack":{en:"Seeker Missile Rack",de:"Suchraketenrampe",es:"Lanzamisiles guiados",fr:"Missiles TC",pt:"Estante de Míssil Guiado",ru:"Блок ракет с самонаведением"},"Electronic Countermeasure":{en:"Electronic Countermeasure",de:"Elektronische Gegenmaßnahme",es:"Contramedidas electrónicas",fr:"Contre-mesures électroniques",pt:"Contramedida Eletrônica",ru:"Электр. противодействие"},"Kill Warrant Scanner":{en:"Kill Warrant Scanner",de:"Tötungsbefehl-Scanner",es:"Escáner de recompensas",fr:"Détecteur d'avis de recherche",pt:"Scanner de Registro Criminal",ru:"Сканер преступников"},"Point Defence":{en:"Point Defence",de:"Punktverteidigung",es:"Defensa de punto",fr:"Défense ponctuelle",pt:"Defesa de Ponto",ru:"Точечная оборона"},"Power Distributor":{en:"Power Distributor",de:"Energieverteiler",es:"Distribuidor de energía",fr:"Répartiteur de puissance",pt:"Distribuidor de Energia",ru:"Распределитель питания"},"Power Plant":{en:"Power Plant",de:"Kraftwerk",es:"Núcleo de energía",fr:"Générateur",pt:"Gerador de Energia",ru:"Силовая установка"},"Frame Shift Drive":{en:"Frame Shift Drive",de:"Frameshiftantrieb",es:"Motor de salto",fr:"Réacteur FSD",pt:"Motor de Distorção de Fase",ru:"Рамочно Сместительный двигатель"},"Cargo Rack":{en:"Cargo Rack",de:"Frachtgestell",es:"Bodega de carga",fr:"Compartiment de soute",pt:"Estante de Carga",ru:"Грузовой стеллаж"},"Shield Generator":{en:"Shield Generator",de:"Schildgenerator",es:"Generador de escudos",fr:"Générateur de bouclier",pt:"Gerador de Escudo",ru:"Щитогенератор"},"Sirius AX Missile Rack":{en:"Sirius AX Missile Rack",de:"Sirius AX-Raketenrampe",es:"Sirius Lanzamisiles AX",fr:"Sirius Batterie de missiles AX",pt:"Sirius Estante de Mísseis AX",ru:"Sirius Блок ракет АИ"},"Azimuth Enhanced AX Multi-Cannon":{en:"Azimuth Enhanced AX Multi-Cannon",de:"Azimuth Fortschrittliches AX Mehrfachgeschütz",pt:"Azimuth Canhão de Repetição AX Melhorado",ru:"Azimuth Улучш. многоствольное орудие АИ"},"Modified Guardian Gauss Cannon":{en:"Modified Guardian Gauss Cannon",de:"Modifizierte Guardian-Gausskanone",es:"Cañón Gauss Guardián modificado",fr:"Canon de Gauss - Guardians modifié",pt:"Canhão Gauss Guardian modificado",ru:"Модифицированная пушка Гаусса"},"Modified Guardian Plasma Charger":{en:"Modified Guardian Plasma Charger",de:"Modifizierter Guardian-Plasmalader",es:"Cargador de Plasma Guardián modificado",fr:"Chargeur à Plasma - Guardians modifié",pt:"Carregador de Plasma Guardian modificado",ru:"Модифицированная плазменная пушка"},"Modified Guardian Shard Cannon":{en:"Modified Guardian Shard Cannon",de:"Modifizierte Fragmentkanone",es:"Cañón de esquirlas modificado",fr:"Canon à éclats modifié",pt:"Canhão de fragmentos modificado",ru:"Модифицированное осколочное орудие"},"Mining Laser":{en:"Mining Laser",de:"Abbaulaser",es:"Láser de minería",fr:"Laser Minier",pt:"Laser de Mineração",ru:"Проходочный лазер"},"Seeker Missile Rack V1":{en:"Seeker Missile Rack V1",de:"Suchraketenrampe V1",es:"Lanzamisiles guiados V1",fr:"Missiles TC V1",pt:"Estante de Míssil Guiado V1",ru:"Блок ракет с самонаведением V1"},"Sirius Heat Sink Launcher":{en:"Sirius Heat Sink Launcher",de:"Sirius Kühlkörperabwurf",es:"Sirius Eyector térmico",fr:"Sirius Éjecteur de dissipateur thermique",pt:"Sirius Lançador de Dissipador Térmico",ru:"Sirius Теплоотводная катапульта"},"Frame Shift Drive (SCO) V1":{en:"Frame Shift Drive (SCO) V1",pt:"Motor de Distorção de Fase (SSV) V1",ru:"Двигатель FSD (ПГР) V1"},"Detailed Surface Scanner V1":{en:"Detailed Surface Scanner V1",de:"Detail-Oberflächenscanner V1",es:"Escáner de superficie detallado V1",fr:"Détecteur de surface détaillé V1",pt:"Scanner de Superfície V1",ru:"Сканер поверхностей V1"},"Festive Green Remote Release Flak Launcher":{en:"Festive Green Remote Release Flak Launcher",de:"Festlicher grüner Flakwerfer mit Fernzündung",es:"Lanzamisiles antiaéreo remoto festivo verde",fr:"Lanceur antiaérien déclenché à distance festif vert",pt:"Lançador de Flak Remoto festivo verde",ru:"Праздничный зелёный зенитный снаряд с дистанционным подрывом"},"Festive Red Remote Release Flak Launcher":{en:"Festive Red Remote Release Flak Launcher",de:"Festlicher roter Flakwerfer mit Fernzündung",es:"Lanzamisiles antiaéreo remoto festivo rojo",fr:"Lanceur antiaérien déclenché à distance festif rouge",pt:"Lançador de Flak Remoto festivo vermelho",ru:"Праздничный красный зенитный снаряд с дистанционным подрывом"},"Festive Yellow Remote Release Flak Launcher":{en:"Festive Yellow Remote Release Flak Launcher",de:"Festlicher gelber Flakwerfer mit Fernzündung",es:"Lanzamisiles antiaéreo remoto festivo amarillo",fr:"Lanceur antiaérien déclenché à distance festif jaune",pt:"Lançador de Flak Remoto festivo amarelo",ru:"Праздничный жёлтый зенитный снаряд с дистанционным подрывом"}}};var NAMES=/* @__PURE__ */createDeduplicatedLocalizedNameIndex(pre_engineered_variant_names_default);function identityKey(identity){const prefix="getPreEngineeredVariantName: variant";requireObject(identity,prefix);const symbol=requireString(identity.symbol,`${prefix}.symbol`).trim();const blueprint=requireString(identity.blueprintSymbol,`${prefix}.blueprintSymbol`).trim();requireStringIfPresent(identity.experimentalEffectSymbol,`${prefix}.experimentalEffectSymbol`);const experimental=identity.experimentalEffectSymbol?.trim()??"";const acquisition=requireString(identity.acquisition,`${prefix}.acquisition`).trim();return`${symbol}|${blueprint}|${experimental}|${acquisition}`}function getPreEngineeredVariantName(variant,locale){return getLocalizedName(NAMES,identityKey(variant),locale,"getPreEngineeredVariantName","variant")}export{getPreEngineeredVariantName};//# sourceMappingURL=chunk-T7IQHFQ2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n/pre-engineered.ts"],"names":["getLocalizedName","createDeduplicatedLocalizedNameIndex","requireObject","requireString","requireStringIfPresent","pre_engineered_variant_names_default","NAMES","identityKey","identity","prefix","symbol","trim","blueprint","blueprintSymbol","experimentalEffectSymbol","experimental","acquisition","getPreEngineeredVariantName","variant","locale"],"mappings":"O,g/iBAeA,IAAMM,qBAAwBL,qCAC1BI,sCAeJ,SAASE,YAAYC,UACjB,MAAMC,OAAS,uCACfP,cAAcM,SAAUC,QACxB,MAAMC,OAASP,cAAcK,SAASE,OAAQ,GAAGD,iBAAiBE,OAClE,MAAMC,UAAYT,cAAcK,SAASK,gBAAiB,GAAGJ,0BAA0BE,OACvFP,uBAAuBI,SAASM,yBAA0B,GAAGL,mCAC7D,MAAMM,aAAeP,SAASM,0BAA0BH,QAAU,GAClE,MAAMK,YAAcb,cAAcK,SAASQ,YAAa,GAAGP,sBAAsBE,OACjF,MAAO,GAAGD,UAAUE,aAAaG,gBAAgBC,aACrD,CAwBO,SAASC,4BACZC,QACAC,QAEA,OAAOnB,iBACHM,MACAC,YAAYW,SACZC,OACA,8BACA,UAER,QAAAF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{validateLoadout}from"./chunk-MVBVXK3G.js";import{calculateModuleLimits}from"./chunk-KPETDYQX.js";import{publishLoadoutInternals,normalizeLoadoutEvent,preEngineeredVariantFor,moduleFitProblem,effectiveModule,moduleFitError}from"./chunk-XRGECU7S.js";import{getShipBySymbol}from"./chunk-6UNAD74Z.js";import{parseSlef,toSlef,stringifySlef,getLoadoutModifier}from"./chunk-T4MKUKYS.js";import{getSourceModuleValue}from"./chunk-NIURLW2F.js";import{statesInertModifiers,rolledOverFixedArticle,isNonOutfittingSlot,isBuiltInHullModule,cloneLoadoutModule,cloneModuleStats,availableBlueprintsFor,availableExperimentalsFor,ownKeyIn,FITTED_ITEM,blueprintAvailableFor,blueprintRoutesFor,experimentalAvailableFor,primitiveEngineeringInputsFor,missingBaseLabels,journalModifiersFor,getPreEngineeredStats,getPreEngineeredJournalModifiers,getPreEngineeredModifiers,ordinaryEngineeringProof,unresolvedModifiers,matchingKeyIn,isCargoHatchSlot,orderBySlotLayout}from"./chunk-4U7KYQGK.js";import{builtInModuleBySymbol}from"./chunk-NZXSIHAW.js";import{getPreEngineeredVariants}from"./chunk-BJU27V6C.js";import{ALL_MODULES}from"./chunk-ZEN5K3GE.js";import{singleJumpRange}from"./chunk-VTMCSCXV.js";import{calculateUnladenMass,calculatePassengerCapacity,calculateCargoCapacity,calculateFuelCapacity}from"./chunk-C3LLPLLD.js";import{fixedSlotReason,stockedMountKind}from"./chunk-M6J7KP7G.js";import{getBlueprintGrade}from"./chunk-AYAKU4YA.js";import{getDefaultLoadout}from"./chunk-GRIK3EDH.js";import{getExperimentalEffect}from"./chunk-77I24V6B.js";import{ammunitionCapacity}from"./chunk-AA3K5XUE.js";import{baseStats,computeModifiers,labelsForDamageType,scaleForLabel}from"./chunk-A7IVMYNF.js";import{resolveBlueprintForModule}from"./chunk-XSLPWM5N.js";import{getExperimentalsForModule}from"./chunk-EHFHRQEP.js";import{loadoutSlotName}from"./chunk-KAA4VOOB.js";import{parseSlotName,enumerateSlots}from"./chunk-RAO35XDF.js";import{normalizeKey,CATALOGUE_KEY}from"./chunk-BKWLI44T.js";import{truncate,describeValue,requireString,requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var REBUY_FRACTION=.05;function exportLoadoutEvent(input,options){const fromSource=options.credits==="source";const source=fromSource?input.sourcePurchase:null;const totals=source!==null&&!input.sourceTotalsVoided&&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{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},UnladenMass:input.unladenMass,CargoCapacity:input.cargoCapacity,...input.maxJumpRange===null?{}:{MaxJumpRange:input.maxJumpRange},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.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(modules,layout){return orderBySlotLayout([...modules.values()],layout,module=>module.Slot)}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)return false;if(isCargoHatchSlot(entry.slot)&&entry.value===0)continue;if(normalizeKey(fitted.Item,FITTED_ITEM)!==normalizeKey(entry.item,SOURCE_ITEM)){return false}}return true}var SLOT_KEY="ShipLoadout: slotKey";var FITTED_SLOT="ShipLoadout: fitted module Slot";var LoadoutEditError=class extends TypeError{code;constraint;params;constructor(message,code,params,constraint){super(message);this.code=code;this.params=deepFreeze(structuredClone(params));if(constraint!==void 0)this.constraint=constraint}};var experimentalEffectUnsupported=(code,params)=>deepFreeze({kind:"unsupported",code:code,params:params});var engineeringNormalizationUnsupported=(code,params)=>deepFreeze({kind:"unsupported",code:code,params:params});function weighable(tonnes){return tonnes!==void 0&&Number.isFinite(tonnes)&&tonnes>=0?tonnes:void 0}var AGGREGATE_STATS=["mass","cargoCapacity","cabinCapacity","fuelCapacity"];var ShipLoadout=class _ShipLoadout{#ship;#shipSymbol;#modules;#moduleStats;#primitiveModifiers;#top;#sourcePurchase;#importOutcomes;#slotCache=/* @__PURE__ */new Map;#layoutCache;constructor(ship,shipSymbol,modules,top,sourcePurchase=null,moduleStats=/* @__PURE__ */new Map,primitiveModifiers=/* @__PURE__ */new Map,importOutcomes=deepFreeze([])){this.#ship=ship;this.#shipSymbol=shipSymbol;this.#modules=modules;this.#top=top;this.#sourcePurchase=sourcePurchase;this.#moduleStats=moduleStats;this.#primitiveModifiers=primitiveModifiers;this.#importOutcomes=importOutcomes;publishLoadoutInternals(this,{ship:ship,modules:()=>[...this.#modules.values()],effectiveModules:()=>this.#modulesForEffectiveStats(),effectiveModule:module=>this.#moduleForEffectiveStats(module),statsFor:module=>this.#statsFor(module),layout:()=>this.#layout(),resolveDrive:()=>this.#resolveDrive(),frameShiftDriveModule:()=>this.#frameShiftDrive()?.module,calculationModules:()=>this.#calculationModules(),statedMainFuel:()=>this.#top.FuelCapacity?.Main})}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})`)}const imported=normalizeLoadoutEvent(entry.data);const ship=getShipBySymbol(imported.shipSymbol);if(!ship){throw new TypeError(`ShipLoadout.fromSlef: unknown hull "${truncate(imported.shipSymbol)}"`)}return _ShipLoadout.#fromImported(imported,ship)}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);const ship=getShipBySymbol(imported.shipSymbol);if(!ship){throw new TypeError(`ShipLoadout.fromLoadout: unknown hull "${truncate(imported.shipSymbol)}"`)}return _ShipLoadout.#fromImported(imported,ship)}static#fromImported(imported,ship){const outcomes=[...imported.outcomes];const loadout=new _ShipLoadout(ship,imported.shipSymbol,imported.modules,imported.top,imported.sourcePurchase,imported.moduleStats,imported.primitiveModifiers,outcomes);const{UnladenMass:UnladenMass,CargoCapacity:CargoCapacity,FuelCapacity:FuelCapacity}=imported.top;for(const module of[...imported.modules.values()]){const unresolved=loadout.#rollStatedRecipe(module);if(unresolved!==null)outcomes.push(unresolved)}if(UnladenMass!==void 0)loadout.#top.UnladenMass=UnladenMass;if(CargoCapacity!==void 0)loadout.#top.CargoCapacity=CargoCapacity;if(FuelCapacity!==void 0)loadout.#top.FuelCapacity=FuelCapacity;deepFreeze(outcomes);return loadout}#rollStatedRecipe(module){const engineering=module.Engineering;if(!engineering||typeof engineering.BlueprintName!=="string")return null;const stated=engineering.Modifiers;const stats=this.#statsFor(module);if(stated!==void 0&&(this.#moduleStats.has(module.Slot)||stats===null||!statesInertModifiers(stats,stated))){return null}if(stated===void 0&&this.#moduleStats.has(module.Slot)){const variant=preEngineeredVariantFor(module);if(variant?.acquisition!=="mercenary"||engineering.Level<=variant.grade){return null}}try{this.applyBlueprint(module.Slot,engineering.BlueprintName,{grade:engineering.Level,quality:engineering.Quality??1,...typeof engineering.ExperimentalEffect==="string"?{experimentalEffectSymbol:engineering.ExperimentalEffect}:{}});if(stated!==void 0){return{action:"rerolledEngineering",slot:module.Slot,sourceSymbol:module.Item,blueprintSymbol:engineering.BlueprintName}}const passedOver=rolledOverFixedArticle(module.Item,engineering);return passedOver===null?null:{action:"ambiguousEngineering",slot:module.Slot,sourceSymbol:module.Item,blueprintSymbol:engineering.BlueprintName,preEngineeredVariant:passedOver}}catch(error){if(!(error instanceof TypeError)&&!(error instanceof RangeError))throw error;return{action:"unresolvedEngineering",slot:module.Slot,sourceSymbol:module.Item,blueprintSymbol:engineering.BlueprintName}}}static empty(shipSymbol){const requested=requireString(shipSymbol,"ShipLoadout.empty: shipSymbol");const ship=getShipBySymbol(requested);if(!ship){throw new TypeError(`ShipLoadout.empty: no slot layout for hull "${truncate(shipSymbol)}"`)}const fitted=(getDefaultLoadout(ship.symbol)?.modules??[]).filter(module=>{const parsed=parseSlotName(module.slot);return parsed!==null&&fixedSlotReason(parsed)!==null});return new _ShipLoadout(ship,ship.symbol,new Map(fitted.map(module=>[module.slot,{Slot:module.slot,Item:module.symbol}])),{})}static default(shipSymbol){const requested=requireString(shipSymbol,"ShipLoadout.default: shipSymbol");const ship=getShipBySymbol(requested);if(!ship){throw new TypeError(`ShipLoadout.default: no default loadout for hull "${truncate(shipSymbol)}"`)}const loadout=getDefaultLoadout(ship.symbol);return new _ShipLoadout(ship,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.#top.UnladenMass??this.#computedUnladenMass()}#computedUnladenMass(){return calculateUnladenMass(this.#ship.hullMass,this.#calculationModules())}get fuelCapacity(){const cap=this.#top.FuelCapacity;if(cap?.Main!==void 0&&cap.Reserve!==void 0){return Object.freeze({main:cap.Main,reserve:cap.Reserve})}const computed=this.#computedFuelCapacity();return Object.freeze({main:cap?.Main??computed.main,reserve:cap?.Reserve??computed.reserve})}get cargoCapacity(){return this.#top.CargoCapacity??this.#computedCargoCapacity()}get passengerCapacity(){return calculatePassengerCapacity(this.#calculationModules())}#computedCargoCapacity(){return calculateCargoCapacity(this.#calculationModules())}#computedFuelCapacity(){return calculateFuelCapacity(this.#ship.reserveFuelCapacity,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 importOutcomes(){return this.#importOutcomes}validation(){const slots=this.#layout();const byKey=new Map(slots.map(slot=>[normalizeKey(slot.key,CATALOGUE_KEY),slot]));const modules=[...this.#modules.values()].map(module=>{const stats=this.#statsFor(module);const slot=byKey.get(normalizeKey(module.Slot,FITTED_SLOT));const builtIn=stats===null&&isNonOutfittingSlot(module.Slot)||isBuiltInHullModule(module);const fitProblem=stats&&slot&&!builtIn?moduleFitProblem(this.#shipSymbol,slot,stats):null;const thrusterMaxMass=weighable(stats?.slot==="thrusters"?effectiveModule(this.#moduleForEffectiveStats(module),stats)?.maxMass:void 0);return{slot:module.Slot,symbol:module.Item,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},...thrusterMaxMass===void 0?{}:{thrusterMaxMass:thrusterMaxMass}}});const dry=weighable(this.unladenMass);const fuel=weighable(this.fuelCapacity.main);const cargo=weighable(this.cargoCapacity);const mass=dry===void 0?void 0:{dry:dry,...fuel===void 0?{}:{fuel:fuel},...fuel===void 0||cargo===void 0?{}:{cargo:cargo}};return validateLoadout({shipSymbol:this.#shipSymbol,slots:slots,modules:modules,...mass===void 0?{}:{mass:mass}})}slots(kind){const cached=this.#slotCache.get(kind);if(cached!==void 0)return cached;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 fixedReason=fixedSlotReason(slot);const immovableReason=fixedReason!==null?fixedReason: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}}}));this.#slotCache.set(kind,value);return value}fittedModuleAt(slotKey){const module=this.#fittedModuleFor(slotKey);if(!module)return null;const raw=cloneLoadoutModule(module);const stats=this.#statsFor(module);const effective=effectiveModule(this.#moduleForEffectiveStats(module),stats);return 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:preEngineeredVariantFor(raw)})}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(normalizeKey(fitted.Slot,FITTED_SLOT)===normalizeKey(slot.key,CATALOGUE_KEY))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=>module.grantOnly===void 0&&moduleFitError(this.#shipSymbol,slot,module)===null&&(module.exclusionGroup===void 0||!occupied.has(module.exclusionGroup))&&this.#moduleLimitRegression(slot.key,module,currentLimits,currentStats)===null)}repairFixedMount(slotKey){const requested=requireString(slotKey,SLOT_KEY);const wanted=normalizeKey(requested,SLOT_KEY);const slot=this.#requireSlot(requested);const fittedKey=this.#fittedKey(requested);const resultSlot=fittedKey??requested;const canonicalKey=slot.key;if(fixedSlotReason(slot)===null){return deepFreeze({status:"refused",slot:resultSlot,reason:"notFixedMount"})}const current=this.#fittedModuleFor(requested);const currentStats=current?this.#statsFor(current):null;const valid=current!==void 0&¤tStats!==null&&(slot.kind==="cargoHatch"?isBuiltInHullModule(current):moduleFitProblem(this.#shipSymbol,slot,currentStats)===null);if(valid){return deepFreeze({status:"unchanged",slot:current.Slot,symbol:current.Item})}const defaultModule=getDefaultLoadout(this.#shipSymbol)?.modules.find(module=>normalizeKey(module.slot,CATALOGUE_KEY)===wanted);if(!defaultModule){return deepFreeze({status:"defaultUnavailable",slot:resultSlot})}const ownKey=ownKeyIn(this.#modules,canonicalKey);const replacement={Slot:ownKey,Item:defaultModule.symbol,...current?.On===void 0?{}:{On:current.On},...current?.Priority===void 0?{}:{Priority:current.Priority},...current?.Health===void 0?{}:{Health:current.Health}};const replacementStats=builtInModuleBySymbol(defaultModule.symbol,"ShipLoadout.repairFixedMount")??(isBuiltInHullModule(replacement)?builtInModuleBySymbol("ModularCargoBayDoor","ShipLoadout.repairFixedMount"):null);if(!replacementStats){return deepFreeze({status:"defaultUnavailable",slot:resultSlot,symbol:defaultModule.symbol})}this.#replaceModule(ownKey,replacement,replacementStats);return deepFreeze({status:"repaired",slot:ownKey,symbol:defaultModule.symbol})}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)}`)}module=cloneModuleStats(module);const catalogued=builtInModuleBySymbol(module.symbol,FITTED_ITEM);if(catalogued===null){throw new TypeError(`ShipLoadout.setModule: no module is catalogued as "${truncate(module.symbol)}"`)}for(const field of AGGREGATE_STATS){const stated=module[field];if(stated===void 0){if(catalogued[field]===void 0)continue;throw new TypeError(`ShipLoadout.setModule: the supplied record for "${truncate(module.symbol)}" has no ${field}`)}if(typeof stated!=="number"||!Number.isFinite(stated)){throw new TypeError(`ShipLoadout.setModule: the supplied record for "${truncate(module.symbol)}" states a ${field} of ${describeValue(stated)}`)}}const problem=moduleFitProblem(this.#shipSymbol,slot,module);if(problem){if(problem.constraint==="immutableSlot"){throw new LoadoutEditError(`ShipLoadout.setModule: ${truncate(module.symbol)} → ${truncate(slotKey)}: ${problem.message}`,"immutableSlot",{slot:slot.key})}throw new LoadoutEditError(`ShipLoadout.setModule: ${truncate(module.symbol)} → ${truncate(slotKey)}: ${problem.message}`,"incompatibleModule",{...problem.params,slot:slot.key,symbol:module.symbol,constraint:problem.constraint},problem.constraint)}if(module.exclusionGroup!==void 0){const conflict=[...this.#modules.values()].find(fitted=>normalizeKey(fitted.Slot,FITTED_SLOT)!==normalizeKey(slot.key,CATALOGUE_KEY)&&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},module);return this}removeModule(slotKey){const wanted=normalizeKey(slotKey,SLOT_KEY);if(wanted==="cargohatch"){throw new LoadoutEditError("ShipLoadout.removeModule: the cargoHatch slot cannot be changed","immutableSlot",{slot:"CargoHatch"})}const parsed=parseSlotName(slotKey);const slot=this.#layout().find(candidate=>normalizeKey(candidate.key,CATALOGUE_KEY)===wanted);if(parsed!==null&&fixedSlotReason(parsed)==="requiredSlot"){const fittedKey=this.#fittedKey(slotKey);const key2=slot?.key??fittedKey??slotKey;throw new LoadoutEditError(`ShipLoadout.removeModule: the ${truncate(key2)} slot is required and cannot be emptied`,"requiredSlot",{slot:key2})}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,blueprintSymbol,options){requireString(blueprintSymbol,"ShipLoadout.applyBlueprint: blueprintSymbol");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.experimentalEffectSymbol??void 0;requireStringIfPresent(wantedExperimental,"ShipLoadout.applyBlueprint: options.experimentalEffectSymbol");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,blueprintSymbol);const named=recipe===blueprintSymbol?`"${truncate(blueprintSymbol)}"`:`"${truncate(blueprintSymbol)}" (${truncate(recipe)} on this module)`;const written=blueprintSymbol.trim().toLowerCase();const resolved=recipe.trim().toLowerCase();if(getPreEngineeredVariants(module.Item).some(variant=>variant.acquisition==="eventReward"&&(variant.blueprintSymbol.toLowerCase()===written||variant.blueprintSymbol.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,blueprintSymbol)){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:blueprintSymbol,Level:wantedGrade,Quality:quality,...wantedExperimental!==void 0?{ExperimentalEffect:wantedExperimental}:{},Modifiers:modifiers};this.#replaceModule(module.Slot,{...module,Engineering:engineering},stats,primitiveModifiers);return this}setExperimentalEffect(slotKey,experimental){if(experimental!==null){requireString(experimental,"ShipLoadout.setExperimentalEffect: experimental")}const wanted=experimental;const module=this.#fittedModuleFor(slotKey);if(!module)return experimentalEffectUnsupported("emptySlot",{slot:slotKey});const stats=this.#statsFor(module);if(!stats){return experimentalEffectUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const engineering=module.Engineering;if(!engineering){return experimentalEffectUnsupported("notEngineered",{slot:module.Slot,symbol:module.Item})}if(stats.engineeringLocked){return experimentalEffectUnsupported("finalArticle",{slot:module.Slot,symbol:module.Item})}const previous=engineering.ExperimentalEffect??null;if(previous===null&&wanted===null||previous!==null&&wanted!==null&&previous.trim().toLowerCase()===wanted.trim().toLowerCase()){return deepFreeze({kind:"unchanged",experimentalEffectSymbol:previous})}const variant=preEngineeredVariantFor(module);let effect;if(wanted!==null){effect=getExperimentalEffect(wanted);if(!effect){return experimentalEffectUnsupported("unknownExperimentalEffect",{slot:module.Slot,symbol:module.Item,experimental:wanted})}const restoresBakedEffect=variant?.experimentalEffectSymbol!==void 0&&variant.acquisition!=="mercenary"&&variant.experimentalEffectSymbol.trim().toLowerCase()===wanted.trim().toLowerCase();if(!experimentalAvailableFor(module.Item,wanted)&&!restoresBakedEffect){return experimentalEffectUnsupported("unsupportedExperimentalEffect",{slot:module.Slot,symbol:module.Item,experimental:wanted})}}if(variant&&variant.acquisition!=="mercenary"){const stock=this.#engineeringBaseStats(module);if(!stock){return experimentalEffectUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const missing=missingBaseLabels(stock,baseStats(stock),[],effect?.modifiers);if(missing.length>0){return experimentalEffectUnsupported("unresolvedModifiers",{slot:module.Slot,symbol:module.Item,labels:missing})}const{experimentalEffectSymbol:originalEffect,...withoutEffect}=variant;const adjusted=wanted===null?withoutEffect:{...withoutEffect,experimentalEffectSymbol:wanted};const resolved=getPreEngineeredStats(withoutEffect);if(!resolved){return experimentalEffectUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const replacement={BlueprintName:engineering.BlueprintName,Level:engineering.Level,Quality:engineering.Quality,...wanted===null?{}:{ExperimentalEffect:wanted},Modifiers:getPreEngineeredJournalModifiers(adjusted)};this.#replaceModule(module.Slot,{...module,Engineering:replacement},cloneModuleStats(resolved),getPreEngineeredModifiers(adjusted))}else{const blueprint=engineering.BlueprintName;const grade=engineering.Level;const quality=engineering.Quality;if(typeof blueprint!=="string"||!Number.isInteger(grade)||grade<1||grade>5){return experimentalEffectUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const currentEffect=previous===null?void 0:getExperimentalEffect(previous)??null;if(ordinaryEngineeringProof(module.Item,engineering,currentEffect)==="unproven"){return experimentalEffectUnsupported("unidentifiedPreEngineeredVariant",{slot:module.Slot,symbol:module.Item,blueprint:blueprint})}const recipe=resolveBlueprintForModule(module.Item,blueprint);const blueprintGrade=getBlueprintGrade(recipe,grade);if(!blueprintGrade||!blueprintAvailableFor(module.Item,blueprint)||!Number.isFinite(quality)||quality<0||quality>1){return experimentalEffectUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item,blueprint:blueprint,grade:grade})}const base=this.#engineeringBaseStats(module)??stats;const canonical=primitiveEngineeringInputsFor(base,blueprintGrade,effect);const missing=missingBaseLabels(base,baseStats(base),canonical.grade.features,canonical.experimental?.modifiers);if(missing.length>0){return experimentalEffectUnsupported("unresolvedModifiers",{slot:module.Slot,symbol:module.Item,labels:missing})}this.applyBlueprint(module.Slot,blueprint,{grade:grade,quality:quality,...wanted===null?{}:{experimentalEffectSymbol:wanted}})}return deepFreeze({kind:"updated",previousExperimentalEffectSymbol:previous,experimentalEffectSymbol:wanted})}completeEngineeringGrade(slotKey){const module=this.#fittedModuleFor(slotKey);if(!module)return engineeringNormalizationUnsupported("emptySlot",{slot:slotKey});const stats=this.#statsFor(module);if(!stats){return engineeringNormalizationUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const engineering=module.Engineering;if(!engineering){return engineeringNormalizationUnsupported("notEngineered",{slot:module.Slot,symbol:module.Item})}if(stats.engineeringLocked){return engineeringNormalizationUnsupported("finalArticle",{slot:module.Slot,symbol:module.Item})}if(engineering.Quality===1&&engineering.Modifiers!==void 0){return deepFreeze({kind:"unchanged"})}const previousQuality=engineering.Quality;if(!Number.isFinite(previousQuality)||previousQuality<0||previousQuality>1){return engineeringNormalizationUnsupported("invalidQuality",{slot:module.Slot,symbol:module.Item})}const experimental=engineering.ExperimentalEffect??null;const effect=experimental===null?void 0:getExperimentalEffect(experimental)??void 0;if(experimental!==null&&!effect){return engineeringNormalizationUnsupported("unknownExperimentalEffect",{slot:module.Slot,symbol:module.Item,experimental:experimental})}const blueprint=engineering.BlueprintName;const grade=engineering.Level;if(typeof blueprint!=="string"||!Number.isInteger(grade)||grade<1||grade>5){return engineeringNormalizationUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const variant=preEngineeredVariantFor(module);const restoresBakedEffect=variant?.experimentalEffectSymbol!==void 0&&variant.acquisition!=="mercenary"&&variant.experimentalEffectSymbol.trim().toLowerCase()===experimental?.trim().toLowerCase();if(experimental!==null&&!experimentalAvailableFor(module.Item,experimental)&&!restoresBakedEffect){return engineeringNormalizationUnsupported("unsupportedExperimentalEffect",{slot:module.Slot,symbol:module.Item,experimental:experimental})}if(variant&&variant.acquisition!=="mercenary"){const stock=this.#engineeringBaseStats(module);if(!stock){return engineeringNormalizationUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const missing=missingBaseLabels(stock,baseStats(stock),[],effect?.modifiers);if(missing.length>0){return engineeringNormalizationUnsupported("unresolvedModifiers",{slot:module.Slot,symbol:module.Item,labels:missing})}const{experimentalEffectSymbol:originalEffect,...withoutEffect}=variant;const adjusted=experimental===null?withoutEffect:{...withoutEffect,experimentalEffectSymbol:experimental};const resolved=getPreEngineeredStats(withoutEffect);if(!resolved){return engineeringNormalizationUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const replacement={BlueprintName:engineering.BlueprintName,Level:engineering.Level,Quality:1,...experimental===null?{}:{ExperimentalEffect:experimental},Modifiers:getPreEngineeredJournalModifiers(adjusted)};this.#replaceModule(module.Slot,{...module,Engineering:replacement},cloneModuleStats(resolved),getPreEngineeredModifiers(adjusted))}else{const proof=ordinaryEngineeringProof(module.Item,engineering,effect);if(proof==="unproven"||proof==="proven"&&!blueprintAvailableFor(module.Item,blueprint)){return engineeringNormalizationUnsupported("unidentifiedPreEngineeredVariant",{slot:module.Slot,symbol:module.Item,blueprint:blueprint})}const recipe=resolveBlueprintForModule(module.Item,blueprint);const blueprintGrade=getBlueprintGrade(recipe,grade);if(!blueprintGrade||!blueprintAvailableFor(module.Item,blueprint)){return engineeringNormalizationUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item,blueprint:blueprint,grade:grade})}const base=this.#engineeringBaseStats(module)??stats;const canonical=primitiveEngineeringInputsFor(base,blueprintGrade,effect);const missing=missingBaseLabels(base,baseStats(base),canonical.grade.features,canonical.experimental?.modifiers);if(missing.length>0){return engineeringNormalizationUnsupported("unresolvedModifiers",{slot:module.Slot,symbol:module.Item,labels:missing})}this.applyBlueprint(module.Slot,blueprint,{grade:grade,quality:1,...experimental===null?{}:{experimentalEffectSymbol:experimental}})}return deepFreeze({kind:"normalized",previousQuality:previousQuality,quality:1})}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.blueprintSymbol,"ShipLoadout.setPreEngineeredVariant: variant.blueprintSymbol");requireString(variant.acquisition,"ShipLoadout.setPreEngineeredVariant: variant.acquisition");requireStringIfPresent(variant.experimentalEffectSymbol,"ShipLoadout.setPreEngineeredVariant: variant.experimentalEffectSymbol");const known=getPreEngineeredVariants(variant.symbol).find(candidate=>candidate.blueprintSymbol.toLowerCase()===variant.blueprintSymbol.toLowerCase()&&candidate.grade===variant.grade&&(candidate.experimentalEffectSymbol?.toLowerCase()??"")===(variant.experimentalEffectSymbol?.toLowerCase()??"")&&candidate.acquisition===variant.acquisition);if(!known){throw new RangeError(`ShipLoadout.setPreEngineeredVariant: no catalogued variant "${truncate(variant.blueprintSymbol)}" 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.blueprintSymbol)}" for module "${truncate(variant.symbol)}"; missing base stats for ${unresolved.join(", ")}`)}this.setModule(slotKey,stats);const module=this.#fittedModuleFor(slotKey);const journalModifiers=getPreEngineeredJournalModifiers(known);const engineering={BlueprintName:known.blueprintSymbol,Level:known.grade,Quality:1,...known.experimentalEffectSymbol===void 0?{}:{ExperimentalEffect:known.experimentalEffectSymbol},...journalModifiers.length>0?{Modifiers:journalModifiers}:{}};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.#slotCache.clear()}toLoadoutEvent(options={}){const unladenMass=this.#computedUnladenMass();const cargoCapacity=this.#computedCargoCapacity();const fuel=this.#computedFuelCapacity();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,layout:this.#layout(),sourcePurchase:this.#sourcePurchase,retailHullValue:this.#ship.hullCost,unladenMass:unladenMass,cargoCapacity:cargoCapacity,fuelCapacity:fuel,maxJumpRange:maxJumpRange,sourceTotalsVoided:this.#importOutcomes.some(outcome=>{if(outcome.sourceSymbol!==null)return false;const parsed=parseSlotName(outcome.slot);return parsed!==null&&stockedMountKind(parsed)==="core"}),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){let drive;try{drive=this.#resolveDrive()}catch{return null}if(drive===null)return null;const tank=this.#computedFuelCapacity();return singleJumpRange(unladenMass,Math.min(tank.main,drive.maxFuel),drive)}#layout(){if(this.#layoutCache===void 0){this.#layoutCache=Object.freeze(enumerateSlots(this.#ship))}return this.#layoutCache}#requireSlot(slotKey){const wanted=normalizeKey(slotKey,SLOT_KEY);const slot=this.#layout().find(s=>normalizeKey(s.key,CATALOGUE_KEY)===wanted);if(!slot){throw new RangeError(`ShipLoadout: hull "${truncate(this.#shipSymbol)}" has no slot "${truncate(slotKey)}"`)}return slot}#fittedKey(slotKey){return matchingKeyIn(this.#modules,normalizeKey(slotKey,SLOT_KEY))}#fittedModuleFor(slotKey){const key=this.#fittedKey(slotKey);return key===null?void 0:this.#modules.get(key)}#calculationModules(){return[...this.#modules.values()].map(module=>({mass:this.#moduleMass(module),cargoCapacity:this.#moduleCapacity(module,"CargoCapacity","cargoCapacity"),cabinCapacity:this.#moduleCapacity(module,"CabinCapacity","cabinCapacity"),fuelCapacity:this.#moduleCapacity(module,"FuelCapacity","fuelCapacity")}))}#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||preEngineeredVariantFor(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.#slotCache.clear()}#adjustImportedFigures(previous,next,nextStats){if(this.#top.UnladenMass!==void 0){this.#top.UnladenMass+=this.#moduleMass(next,nextStats)-this.#moduleMass(previous)}if(this.#top.CargoCapacity!==void 0){this.#top.CargoCapacity+=this.#moduleCapacity(next,"CargoCapacity","cargoCapacity",nextStats)-this.#moduleCapacity(previous,"CargoCapacity","cargoCapacity")}if(this.#top.FuelCapacity?.Main!==void 0){const reserve=this.#top.FuelCapacity.Reserve;this.#top.FuelCapacity={Main:this.#top.FuelCapacity.Main+this.#moduleCapacity(next,"FuelCapacity","fuelCapacity",nextStats)-this.#moduleCapacity(previous,"FuelCapacity","fuelCapacity"),...reserve===void 0?{}:{Reserve:reserve}}}if(normalizeKey(previous?.Item,FITTED_ITEM)===normalizeKey(next?.Item,FITTED_ITEM)){return}if(previous!==null&&isCargoHatchSlot(previous.Slot)||next!==null&&isCargoHatchSlot(next.Slot)){return}delete this.#top.ModulesValue;delete this.#top.Rebuy}#moduleMass(module,statsOverride){if(module===null)return 0;if(isCargoHatchSlot(module.Slot))return 0;const modified=getLoadoutModifier(module,"Mass");if(modified!==null)return modified;return(statsOverride??this.#statsFor(module))?.mass??0}#moduleCapacity(module,modifierLabel,field,statsOverride){if(module===null)return 0;if(isCargoHatchSlot(module.Slot))return 0;const modified=getLoadoutModifier(module,modifierLabel);if(modified!==null)return modified;return(statsOverride??this.#statsFor(module))?.[field]??0}#frameShiftDrive(){for(const m of this.#modules.values()){const stats=this.#statsFor(m);if(stats?.slot==="frameShiftDrive")return{module:m,stats:stats}}return void 0}#resolveDrive(){const fsd=this.#frameShiftDrive();if(!fsd)return null;const{module:fsdModule,stats:base}=fsd;if(base.fuelMul===void 0||base.fuelPower===void 0){throw new TypeError(`ShipLoadout: the fitted record for frame shift drive "${truncate(fsdModule.Item)}" has no jump constants`)}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: the fitted record for frame shift drive "${truncate(fsdModule.Item)}" has no ${missing.join(" or ")}`)}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"&&(stats?.jumpBoost===void 0||stats.jumpBoost===0)){continue}if(m.On===false)continue;if(stats?.jumpBoost===void 0){throw new TypeError(`ShipLoadout: the fitted record for FSD booster "${truncate(m.Item)}" has no jumpBoost`)}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-TSEDU73T.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ships/internal/loadout-export.ts","../src/ships/ship-loadout.ts"],"names":["validateLoadout","calculateModuleLimits","publishLoadoutInternals","normalizeLoadoutEvent","preEngineeredVariantFor","moduleFitProblem","effectiveModule","moduleFitError","getShipBySymbol","parseSlef","toSlef","stringifySlef","getLoadoutModifier","getSourceModuleValue","statesInertModifiers","rolledOverFixedArticle","isNonOutfittingSlot","isBuiltInHullModule","cloneLoadoutModule","cloneModuleStats","availableBlueprintsFor","availableExperimentalsFor","ownKeyIn","FITTED_ITEM","blueprintAvailableFor","blueprintRoutesFor","experimentalAvailableFor","primitiveEngineeringInputsFor","missingBaseLabels","journalModifiersFor","getPreEngineeredStats","getPreEngineeredJournalModifiers","getPreEngineeredModifiers","ordinaryEngineeringProof","unresolvedModifiers","matchingKeyIn","isCargoHatchSlot","orderBySlotLayout","builtInModuleBySymbol","getPreEngineeredVariants","ALL_MODULES","singleJumpRange","calculateUnladenMass","calculatePassengerCapacity","calculateCargoCapacity","calculateFuelCapacity","fixedSlotReason","stockedMountKind","getBlueprintGrade","getDefaultLoadout","getExperimentalEffect","ammunitionCapacity","baseStats","computeModifiers","labelsForDamageType","scaleForLabel","resolveBlueprintForModule","getExperimentalsForModule","loadoutSlotName","parseSlotName","enumerateSlots","normalizeKey","CATALOGUE_KEY","truncate","describeValue","requireString","requireStringIfPresent","deepFreeze","REBUY_FRACTION","exportLoadoutEvent","input","options","fromSource","credits","source","sourcePurchase","totals","sourceTotalsVoided","sourceTotalsHold","modules","hullValue","retailHullValue","modulesValue","computedModulesValue","statsFor","rebuy","Math","trunc","Ship","shipSymbol","toLowerCase","shipName","ShipName","shipIdent","ShipIdent","HullValue","ModulesValue","UnladenMass","unladenMass","CargoCapacity","cargoCapacity","maxJumpRange","MaxJumpRange","FuelCapacity","Main","fuelCapacity","main","Reserve","reserve","Rebuy","Modules","exportModules","ordered","moduleOrder","slotOrderedModules","layout","values","map","module","on","On","explicitPower","priority","Priority","value","sourceModuleValue","moduleValue","Slot","Item","Health","Value","Engineering","sum","stats","cost","SOURCE_ITEM","entry","item","moduleValues","key","slot","fitted","get","SLOT_KEY","FITTED_SLOT","LoadoutEditError","TypeError","code","constraint","params","constructor","message","super","this","structuredClone","experimentalEffectUnsupported","kind","engineeringNormalizationUnsupported","weighable","tonnes","Number","isFinite","AGGREGATE_STATS","ShipLoadout","_ShipLoadout","ship","moduleStats","primitiveModifiers","top","importOutcomes","slotCache","Map","layoutCache","effectiveModules","modulesForEffectiveStats","moduleForEffectiveStats","resolveDrive","frameShiftDriveModule","frameShiftDrive","calculationModules","statedMainFuel","fromSlef","index","entries","length","imported","data","fromImported","fromLoadout","event","outcomes","loadout","unresolved","rollStatedRecipe","push","engineering","BlueprintName","stated","Modifiers","has","variant","acquisition","Level","grade","applyBlueprint","quality","Quality","ExperimentalEffect","experimentalEffectSymbol","action","sourceSymbol","blueprintSymbol","passedOver","preEngineeredVariant","error","RangeError","empty","requested","symbol","filter","parsed","computedUnladenMass","hullMass","cap","Object","freeze","computed","computedFuelCapacity","computedCargoCapacity","passengerCapacity","reserveFuelCapacity","validation","slots","byKey","builtIn","fitProblem","thrusterMaxMass","maxMass","requiresKnownSlot","fitError","fitConstraint","fitParams","exclusionGroup","limitGroup","limitIncrease","dry","fuel","cargo","mass","cached","currentLimits","moduleLimits","moduleStatsAt","fixedReason","immovableReason","moduleLimitRegression","name","fittedModuleAt","removable","set","slotKey","fittedModuleFor","raw","effective","health","effectiveStats","ammunition","fittedModules","keys","flatMap","availableBlueprints","availableExperimentalEffects","modulesForSlot","requireSlot","occupied","Set","group","currentStats","grantOnly","repairFixedMount","wanted","fittedKey","resultSlot","canonicalKey","status","reason","current","valid","defaultModule","find","ownKey","replacement","replacementStats","replaceModule","setModule","catalogued","field","problem","conflict","previousSlot","previousSymbol","limitProblem","count","limit","removeModule","candidate","wantedGrade","wantedQuality","wantedExperimental","fittedStats","recipe","named","written","trim","resolved","some","isInteger","experimental","engineeringLocked","offered","blueprint","route","join","engineeringBaseStats","base","canonical","missing","features","modifiers","damageDistribution","type","label","damageModifier","Label","OriginalValue","setExperimentalEffect","previous","effect","restoresBakedEffect","stock","labels","originalEffect","withoutEffect","adjusted","currentEffect","blueprintGrade","previousExperimentalEffectSymbol","completeEngineeringGrade","previousQuality","proof","setPreEngineeredVariant","known","journalModifiers","clearEngineering","bare","setModuleEnabled","patchModule","setModulePriority","patch","clear","toLoadoutEvent","exportableJumpRange","hullCost","outcome","header","toSlefString","indent","drive","tank","min","maxFuel","s","moduleMass","moduleCapacity","cabinCapacity","usage","increase","amount","baseLimit","excess","max","adjustImportedFigures","delete","next","nextStats","statsOverride","modified","modifierLabel","m","fsd","fsdModule","fuelMul","fuelPower","optMass","jumpBoost","resolveJumpBoost","engineeringGroup"],"mappings":"O,8iEAmDA,IAAMoE,eAAiB,IAGhB,SAASC,mBACZC,MACAC,SAEA,MAAMC,WAAaD,QAAQE,UAAY,SACvC,MAAMC,OAASF,WAAaF,MAAMK,eAAiB,KACnD,MAAMC,OACFF,SAAW,OAASJ,MAAMO,oBAAsBC,iBAAiBR,MAAMS,QAASL,QAC1EA,OACA,KACV,MAAMM,UAAYR,WAAcE,QAAQM,WAAa,KAAQV,MAAMW,gBACnE,MAAMC,aAAeV,WACdI,QAAQM,cAAgB,KACzBC,qBAAqBb,MAAMS,QAAST,MAAMc,UAChD,MAAMC,MAAQb,WACPI,QAAQS,OAAS,KAClBL,YAAc,MAAQE,eAAiB,KACrC,KACAI,KAAKC,OAAOP,UAAYE,cAAgBd,gBAEhD,MAAO,CACHoB,KAAMlB,MAAMmB,WAAWC,iBACnBpB,MAAMqB,gBAAa,EAAY,CAAA,EAAK,CAAEC,SAAUtB,MAAMqB,aACtDrB,MAAMuB,iBAAc,EAAY,CAAA,EAAK,CAAEC,UAAWxB,MAAMuB,cACxDb,YAAc,KAAO,CAAA,EAAK,CAAEe,UAAWf,cACvCE,eAAiB,KAAO,CAAA,EAAK,CAAEc,aAAcd,cACjDe,YAAa3B,MAAM4B,YACnBC,cAAe7B,MAAM8B,iBACjB9B,MAAM+B,eAAiB,KAAO,CAAA,EAAK,CAAEC,aAAchC,MAAM+B,cAC7DE,aAAc,CAAEC,KAAMlC,MAAMmC,aAAaC,KAAMC,QAASrC,MAAMmC,aAAaG,YACvEvB,QAAU,KAAO,CAAA,EAAK,CAAEwB,MAAOxB,OACnCyB,QAASC,cAAczC,MAAOC,QAASC,YAE/C,CAEA,SAASuC,cACLzC,MACAC,QACAC,YAEA,MAAMwC,QACFzC,QAAQ0C,cAAgB,QAClBC,mBAAmB5C,MAAMS,QAAST,MAAM6C,QACxC,IAAI7C,MAAMS,QAAQqC,UAC5B,OAAOJ,QAAQK,IAAKC,SAChB,MAAMC,GAAKD,OAAOE,KAAOjD,QAAQkD,cAAgB,UAAO,GACxD,MAAMC,SAAWJ,OAAOK,WAAapD,QAAQkD,cAAgB,OAAI,GACjE,MAAMG,MAAQpD,WACRqD,kBAAkBP,OAAQhD,MAAMK,gBAChCmD,YAAYR,OAAQhD,MAAMc,UAChC,MAAO,CACH2C,KAAMT,OAAOS,KACbC,KAAMV,OAAOU,KAAKtC,iBACd6B,UAAO,EAAY,CAAA,EAAK,CAAEC,GAAID,OAC9BG,gBAAa,EAAY,CAAA,EAAK,CAAEC,SAAUD,aAC1CJ,OAAOW,cAAW,EAAY,CAAA,EAAK,CAAEA,OAAQX,OAAOW,kBAC7CL,QAAU,SAAW,CAAEM,MAAON,OAAU,CAAA,KAC/CN,OAAOa,mBAAgB,EACrB,CAAA,EACA,CAAEA,YAAajH,mBAAmBoG,QAAQa,eAG5D,CAEA,SAASjB,mBACLnC,QACAoC,QAEA,OAAO9E,kBAAkB,IAAI0C,QAAQqC,UAAWD,OAASG,QAAWA,OAAOS,KAC/E,CAEA,SAAS5C,qBACLJ,QACAK,UAEA,IAAIgD,IAAM,EACV,IAAA,MAAWd,UAAUvC,QAAQqC,SAAU,CACnC,MAAMQ,MAAQE,YAAYR,OAAQlC,UAClC,GAAIwC,QAAU,UAAW,OAAO,KAChC,GAAIA,QAAU,OAAQQ,KAAOR,KACjC,CACA,OAAOQ,GACX,CAEA,SAASN,YACLR,OACAlC,UAEA,MAAMiD,MAAQjD,SAASkC,QACvB,GAAIe,QAAU,KAAM,OAAOA,MAAMC,MAAQ,UACzC,OAAOtH,oBAAoBsG,OAAOS,OAAS9G,oBAAoBqG,QAAU,OAAS,SACtF,CAGA,IAAMiB,YAAc,kDAEpB,SAASV,kBACLP,OACA5C,QAEA,MAAM8D,MAAQ9D,SAAW,KAAO,KAAO7D,qBAAqB6D,OAAQ4C,OAAOS,MAC3E,GAAIS,QAAU,KAAM,MAAO,UAC3B,OAAO3E,aAAa2E,MAAMC,KAAMF,eAAiB1E,aAAayD,OAAOU,KAAMzG,aACrEiH,MAAMZ,MACN,SACV,CAEA,SAAS9C,iBACLC,QACAL,QAEA,IAAA,MAAW8D,SAAS9D,OAAOgE,aAAc,CACrC,MAAMC,IAAMxG,cAAc4C,QAASyD,MAAMI,MACzC,MAAMC,OAASF,MAAQ,UAAO,EAAY5D,QAAQ+D,IAAIH,KACtD,IAAKE,OAAQ,OAAO,MACpB,GAAIzG,iBAAiBoG,MAAMI,OAASJ,MAAMZ,QAAU,EAAG,SACvD,GAAI/D,aAAagF,OAAOb,KAAMzG,eAAiBsC,aAAa2E,MAAMC,KAAMF,aAAc,CAClF,OAAO,KACX,CACJ,CACA,OAAO,IACX,CCzBA,IAAMQ,SAAW,uBAYjB,IAAMC,YAAc,kCA2Cb,IAAMC,iBAAN,cAA+BC,UAEzBC,KAEAC,WAEAC,OAUT,WAAAC,CACIC,QACAJ,KACAE,OACAD,YAEAI,MAAMD,SACNE,KAAKN,KAAOA,KACZM,KAAKJ,OAASlF,WAAWuF,gBAAgBL,SACzC,GAAID,kBAAe,EAAWK,KAAKL,WAAaA,UACpD,GAgGJ,IAAMO,8BAAgC,CAClCR,KACAE,SACgClF,WAAW,CAAEyF,KAAM,cAAeT,UAAME,gBAiD5E,IAAMQ,oCAAsC,CACxCV,KACAE,SACsClF,WAAW,CAAEyF,KAAM,cAAeT,UAAME,gBAiBlF,SAASS,UAAUC,QACf,OAAOA,cAAW,GAAaC,OAAOC,SAASF,SAAWA,QAAU,EAAIA,YAAS,CACrF,CAqEA,IAAMG,gBAAkB,CAAC,OAAQ,gBAAiB,gBAAiB,gBAyE5D,IAAMC,YAAN,MAAMC,aACAC,MACA5E,YACAV,SACAuF,aAEAC,oBACAC,KACA7F,gBACA8F,gBAEAC,0BAAA,IAAiBC,IAE1BC,aAEQ,WAAAtB,CACJe,KACA5E,WACAV,QACAyF,IACA7F,eAA8C,KAC9C2F,2BAAc,IAAIK,IAClBJ,kCAAA,IAAyBI,IACzBF,eAAkDtG,WAAW,KAE7DsF,MAAKY,KAAQA,KACbZ,MAAKhE,WAAcA,WACnBgE,MAAK1E,QAAWA,QAChB0E,MAAKe,IAAOA,IACZf,MAAK9E,eAAkBA,eACvB8E,MAAKa,YAAeA,YACpBb,MAAKc,mBAAsBA,mBAC3Bd,MAAKgB,eAAkBA,eAGvBvK,wBAAwBuJ,KAAM,CAC1BY,UACAtF,QAAS,IAAM,IAAI0E,MAAK1E,QAASqC,UACjCyD,iBAAkB,IAAMpB,MAAKqB,2BAC7BxK,gBAAkBgH,QAAWmC,MAAKsB,wBAAyBzD,QAC3DlC,SAAWkC,QAAWmC,MAAKrE,SAAUkC,QACrCH,OAAQ,IAAMsC,MAAKtC,SACnB6D,aAAc,IAAMvB,MAAKuB,eACzBC,sBAAuB,IAAMxB,MAAKyB,mBAAoB5D,OACtD6D,mBAAoB,IAAM1B,MAAK0B,qBAC/BC,eAAgB,IAAM3B,MAAKe,IAAKjE,cAAcC,MAEtD,CAiBA,eAAO6E,CAAS/G,MAAgBgH,MAAQ,GACpC,MAAMC,QAAU9K,UAAU6D,OAC1B,MAAMkE,MAAQ+C,QAAQD,OACtB,IAAK9C,MAAO,CACR,MAAM,IAAIU,UACN,2CAA2CnF,SAASuH,gBAAgBC,QAAQC,UAEpF,CACA,MAAMC,SAAWtL,sBAAsBqI,MAAMkD,MAC7C,MAAMrB,KAAO7J,gBAAgBiL,SAAShG,YACtC,IAAK4E,KAAM,CACP,MAAM,IAAInB,UACN,uCAAuCnF,SAAS0H,SAAShG,eAEjE,CACA,OAAO2E,cAAYuB,aAAcF,SAAUpB,KAC/C,CAoFA,kBAAOuB,CAAYC,OAIf,GAAIA,QAAU,aAAeA,QAAU,SAAU,CAC7C,MAAM,IAAI3C,UACN,oEAAoElF,cAAc6H,SAE1F,CACA,MAAMJ,SAAWtL,sBAAsB0L,OACvC,MAAMxB,KAAO7J,gBAAgBiL,SAAShG,YACtC,IAAK4E,KAAM,CACP,MAAM,IAAInB,UACN,0CAA0CnF,SAAS0H,SAAShG,eAEpE,CACA,OAAO2E,cAAYuB,aAAcF,SAAUpB,KAC/C,CAGA,mBAAOsB,CAAcF,SAAgCpB,MACjD,MAAMyB,SAAW,IAAIL,SAASK,UAC9B,MAAMC,QAAU,IAAI3B,aAChBC,KACAoB,SAAShG,WACTgG,SAAS1G,QACT0G,SAASjB,IACTiB,SAAS9G,eACT8G,SAASnB,YACTmB,SAASlB,mBACTuB,UAEJ,MAAM7F,YAAEA,YAAAE,cAAaA,cAAAI,aAAeA,cAAiBkF,SAASjB,IAG9D,IAAA,MAAWlD,SAAU,IAAImE,SAAS1G,QAAQqC,UAAW,CACjD,MAAM4E,WAAaD,SAAQE,iBAAkB3E,QAC7C,GAAI0E,aAAe,KAAMF,SAASI,KAAKF,WAC3C,CAKA,GAAI/F,mBAAgB,EAAW8F,SAAQvB,IAAKvE,YAAcA,YAC1D,GAAIE,qBAAkB,EAAW4F,SAAQvB,IAAKrE,cAAgBA,cAC9D,GAAII,oBAAiB,EAAWwF,SAAQvB,IAAKjE,aAAeA,aAC5DpC,WAAW2H,UACX,OAAOC,OACX,CAwBA,iBAAAE,CAAkB3E,QACd,MAAM6E,YAAc7E,OAAOa,YAC3B,IAAKgE,oBAAsBA,YAAYC,gBAAkB,SAAU,OAAO,KAC1E,MAAMC,OAASF,YAAYG,UAC3B,MAAMjE,MAAQoB,MAAKrE,SAAUkC,QAC7B,GACI+E,cAAW,IACV5C,MAAKa,YAAaiC,IAAIjF,OAAOS,OAC1BM,QAAU,OACTvH,qBAAqBuH,MAAOgE,SACnC,CACE,OAAO,IACX,CACA,GAAIA,cAAW,GAAa5C,MAAKa,YAAaiC,IAAIjF,OAAOS,MAAO,CAC5D,MAAMyE,QAAUpM,wBAAwBkH,QACxC,GAAIkF,SAASC,cAAgB,aAAeN,YAAYO,OAASF,QAAQG,MAAO,CAC5E,OAAO,IACX,CACJ,CACA,IACIlD,KAAKmD,eAAetF,OAAOS,KAAMoE,YAAYC,cAAe,CACxDO,MAAOR,YAAYO,MACnBG,QAASV,YAAYW,SAAW,YACrBX,YAAYY,qBAAuB,SACxC,CAAEC,yBAA0Bb,YAAYY,oBACxC,CAAA,IAEV,GAAIV,cAAW,EAAW,CACtB,MAAO,CACHY,OAAQ,sBACRrE,KAAMtB,OAAOS,KACbmF,aAAc5F,OAAOU,KACrBmF,gBAAiBhB,YAAYC,cAErC,CAKA,MAAMgB,WAAarM,uBAAuBuG,OAAOU,KAAMmE,aACvD,OAAOiB,aAAe,KAChB,KACA,CACIH,OAAQ,uBACRrE,KAAMtB,OAAOS,KACbmF,aAAc5F,OAAOU,KACrBmF,gBAAiBhB,YAAYC,cAC7BiB,qBAAsBD,WAEpC,CAAA,MAASE,OAOL,KAAMA,iBAAiBpE,cAAgBoE,iBAAiBC,YAAa,MAAMD,MAC3E,MAAO,CACHL,OAAQ,wBACRrE,KAAMtB,OAAOS,KACbmF,aAAc5F,OAAOU,KACrBmF,gBAAiBhB,YAAYC,cAErC,CACJ,CAoBA,YAAOoB,CAAM/H,YACT,MAAMgI,UAAYxJ,cAAcwB,WAAY,iCAC5C,MAAM4E,KAAO7J,gBAAgBiN,WAC7B,IAAKpD,KAAM,CAIP,MAAM,IAAInB,UACN,+CAA+CnF,SAAS0B,eAEhE,CAIA,MAAMoD,QAAU5F,kBAAkBoH,KAAKqD,SAAS3I,SAAW,IAAI4I,OAAQrG,SACnE,MAAMsG,OAASjK,cAAc2D,OAAOsB,MACpC,OAAOgF,SAAW,MAAQ9K,gBAAgB8K,UAAY,OAE1D,OAAO,IAAIxD,aACPC,KACAA,KAAKqD,OACL,IAAI/C,IACA9B,OAAOxB,IAAKC,QAAW,CAACA,OAAOsB,KAAM,CAAEb,KAAMT,OAAOsB,KAAMZ,KAAMV,OAAOoG,WAE3E,CAAA,EAER,CAyBA,cAAO,CAAQjI,YACX,MAAMgI,UAAYxJ,cAAcwB,WAAY,mCAC5C,MAAM4E,KAAO7J,gBAAgBiN,WAC7B,IAAKpD,KAAM,CACP,MAAM,IAAInB,UACN,qDAAqDnF,SAAS0B,eAEtE,CACA,MAAMsG,QAAU9I,kBAAkBoH,KAAKqD,QACvC,OAAO,IAAItD,aACPC,KACA0B,QAAQ2B,OACR,IAAI/C,IACAoB,QAAQhH,QAAQsC,IAAKC,QAAW,CAC5BA,OAAOsB,KACP,CAAEb,KAAMT,OAAOsB,KAAMZ,KAAMV,OAAOoG,WAG1C,CAAA,EAER,CAGA,cAAIjI,GACA,OAAOgE,MAAKhE,UAChB,CAGA,YAAIE,GACA,OAAO8D,MAAKe,IAAK5E,UAAY,IACjC,CAGA,aAAIC,GACA,OAAO4D,MAAKe,IAAK1E,WAAa,IAClC,CAWA,eAAII,GACA,OAAOuD,MAAKe,IAAKvE,aAAewD,MAAKoE,qBACzC,CAMA,oBAAAA,GACI,OAAOnL,qBAAqB+G,MAAKY,KAAMyD,SAAUrE,MAAK0B,qBAC1D,CAMA,gBAAI1E,GACA,MAAMsH,IAAMtE,MAAKe,IAAKjE,aACtB,GAAIwH,KAAKvH,YAAS,GAAauH,IAAIpH,eAAY,EAAW,CACtD,OAAOqH,OAAOC,OAAO,CAAEvH,KAAMqH,IAAIvH,KAAMI,QAASmH,IAAIpH,SACxD,CACA,MAAMuH,SAAWzE,MAAK0E,uBACtB,OAAOH,OAAOC,OAAO,CACjBvH,KAAMqH,KAAKvH,MAAQ0H,SAASxH,KAC5BE,QAASmH,KAAKpH,SAAWuH,SAAStH,SAE1C,CAMA,iBAAIR,GACA,OAAOqD,MAAKe,IAAKrE,eAAiBsD,MAAK2E,uBAC3C,CA8BA,qBAAIC,GACA,OAAO1L,2BAA2B8G,MAAK0B,qBAC3C,CAGA,sBAAAiD,GACI,OAAOxL,uBAAuB6G,MAAK0B,qBACvC,CAGA,qBAAAgD,GACI,OAAOtL,sBAAsB4G,MAAKY,KAAMiE,oBAAqB7E,MAAK0B,qBACtE,CAUA,aAAInG,GACA,OAAOyE,MAAKe,IAAKzE,WAAa,IAClC,CASA,gBAAIb,GACA,OAAOuE,MAAKe,IAAKxE,cAAgB,IACrC,CAQA,SAAIX,GACA,OAAOoE,MAAKe,IAAK3D,OAAS,IAC9B,CAmCA,kBAAIlC,GACA,OAAO8E,MAAK9E,cAChB,CA2BA,kBAAI8F,GACA,OAAOhB,MAAKgB,cAChB,CAiCA,UAAA8D,GACI,MAAMC,MAAQ/E,MAAKtC,SACnB,MAAMsH,MAAQ,IAAI9D,IAAI6D,MAAMnH,IAAKuB,MAAS,CAAC/E,aAAa+E,KAAKD,IAAK7E,eAAgB8E,QAClF,MAAM7D,QAA8B,IAAI0E,MAAK1E,QAASqC,UAAUC,IAAKC,SACjE,MAAMe,MAAQoB,MAAKrE,SAAUkC,QAC7B,MAAMsB,KAAO6F,MAAM3F,IAAIjF,aAAayD,OAAOS,KAAMiB,cACjD,MAAM0F,QACDrG,QAAU,MAAQrH,oBAAoBsG,OAAOS,OAAU9G,oBAAoBqG,QAChF,MAAMqH,WACFtG,OAASO,OAAS8F,QAAUrO,iBAAiBoJ,MAAKhE,WAAamD,KAAMP,OAAS,KAGlF,MAAMuG,gBAAkB9E,UACpBzB,OAAOO,OAAS,YACVtI,gBAAgBmJ,MAAKsB,wBAAyBzD,QAASe,QAAQwG,aAC/D,GAEV,MAAO,CACHjG,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,KACf8G,mBAAoBJ,QACpBK,SAAUJ,YAAYpF,SAAW,QAC7BoF,aAAe,KAAO,CAAA,EAAK,CAAEK,cAAeL,WAAWvF,eACvDuF,YAAYtF,cAAW,EAAY,CAAA,EAAK,CAAE4F,UAAWN,WAAWtF,WAChEhB,OAAO6G,sBAAmB,EACxB,CAAA,EACA,CAAEA,eAAgB7G,MAAM6G,mBAC1B7G,OAAO8G,kBAAe,EAAY,CAAA,EAAK,CAAEA,WAAY9G,MAAM8G,eAC3D9G,OAAO+G,qBAAkB,EACvB,CAAA,EACA,CAAEA,cAAe/G,MAAM+G,kBACzBR,uBAAoB,EAAY,CAAA,EAAK,CAAEA,oCAGnD,MAAMS,IAAMvF,UAAUL,KAAKvD,aAC3B,MAAMoJ,KAAOxF,UAAUL,KAAKhD,aAAaC,MACzC,MAAM6I,MAAQzF,UAAUL,KAAKrD,eAC7B,MAAMoJ,KACFH,WAAQ,OACF,EACA,CACIA,WACIC,YAAS,EAAY,CAAA,EAAK,CAAEA,cAC5BA,YAAS,GAAaC,aAAU,EAAY,CAAA,EAAK,CAAEA,cAErE,OAAOvP,gBAAgB,CACnByF,WAAYgE,MAAKhE,WACjB+I,YACAzJ,mBACIyK,YAAS,EAAY,CAAA,EAAK,CAAEA,YAExC,CAgBA,KAAAhB,CAAM5E,MACF,MAAM6F,OAAShG,MAAKiB,UAAW5B,IAAIc,MACnC,GAAI6F,cAAW,EAAW,OAAOA,OACjC,MAAMjB,MACF5E,YAAS,EACHH,MAAKtC,SACLsC,MAAKtC,SAAUwG,OAAQ/E,MAASA,KAAKgB,OAASA,MACxD,MAAM8F,cAAgBjG,MAAKkG,eAC3B,MAAM/H,MAAQzD,WACVqK,MAAMnH,IAAKuB,OACP,MAAMP,MAAQoB,MAAKmG,cAAehH,KAAKD,KACvC,MAAMkH,YAAc/M,gBAAgB8F,MACpC,MAAMkH,gBACFD,cAAgB,KACVA,YACAxH,OAAO+G,qBAAkB,GACvB3F,MAAKsG,sBAAuBnH,KAAKD,IAAK,KAAM+G,cAAerH,SACvD,KACH,cACD,KACZ,MAAO,IACAO,KACHoH,KAAMtM,gBAAgBkF,MACtBtB,OAAQmC,KAAKwG,eAAerH,KAAKD,KACjCuH,UAAWJ,kBAAoB,QAC3BA,kBAAoB,KAAO,CAAA,EAAK,CAAEA,qCAIlDrG,MAAKiB,UAAWyF,IAAIvG,KAAMhC,OAC1B,OAAOA,KACX,CASA,cAAAqI,CAAeG,SACX,MAAM9I,OAASmC,MAAK4G,gBAAiBD,SACrC,IAAK9I,OAAQ,OAAO,KACpB,MAAMgJ,IAAMpP,mBAAmBoG,QAC/B,MAAMe,MAAQoB,MAAKrE,SAAUkC,QAC7B,MAAMiJ,UAAYjQ,gBAAgBmJ,MAAKsB,wBAAyBzD,QAASe,OACzE,OAAOlE,WAAW,CACdyE,KAAMtB,OAAOS,KACb2F,OAAQ4C,IAAItI,KACZT,GAAI+I,IAAI9I,GACRE,SAAU4I,IAAI3I,SACd6I,OAAQF,IAAIrI,OACZL,MAAO0I,IAAIpI,MACXiE,YAAamE,IAAInI,YACjBmI,QACAjI,MAAOA,QAAU,KAAO,KAAOlH,iBAAiBkH,OAChDoI,eAAgBF,YAAc,KAAO,KAAOpP,iBAAiBoP,WAC7DG,WAAYvN,mBAAmBoN,WAC/BlD,qBAAsBjN,wBAAwBkQ,MAEtD,CAgBA,aAAAK,GACI,OAAOxM,WACH,IAAIsF,MAAK1E,QAAS6L,QAAQC,QAASlI,MAC/B,MAAME,OAASY,KAAKwG,eAAetH,KACnC,OAAOE,SAAW,KAAO,GAAK,CAACA,UAG3C,CAuBA,mBAAAiI,CAAoBV,SAChB,MAAM9I,OAASmC,MAAK4G,gBAAiBD,SACrC,OAAOjM,WACHmD,OAASlG,uBAAuBkG,OAAOU,KAAMyB,MAAKrE,SAAUkC,SAAW,GAE/E,CAmBA,4BAAAyJ,CAA6BX,SACzB,MAAM9I,OAASmC,MAAK4G,gBAAiBD,SACrC,OAAOjM,WACHmD,OAASjG,0BAA0BiG,OAAOU,KAAMyB,MAAKrE,SAAUkC,SAAW,GAElF,CAyBA,cAAA0J,CAAeZ,SACX,MAAMxH,KAAOa,MAAKwH,YAAab,SAC/B,MAAMc,SAAW,IAAIC,IACjB,IAAI1H,MAAK1E,QAASqC,UAAUyJ,QAAShI,SACjC,GACIhF,aAAagF,OAAOd,KAAMiB,eAAiBnF,aAAa+E,KAAKD,IAAK7E,eAElE,MAAO,GACX,MAAMsN,MAAQ3H,MAAKrE,SAAUyD,SAASqG,eACtC,OAAOkC,aAAU,EAAY,GAAK,CAACA,UAG3C,MAAM1B,cAAgBjG,MAAKkG,eAC3B,MAAM0B,aAAe5H,MAAKmG,cAAehH,KAAKD,KAC9C,OAAOnG,YAAYmL,OACdrG,QACGA,OAAOgK,iBAAc,GACrB/Q,eAAekJ,MAAKhE,WAAamD,KAAMtB,UAAY,OAClDA,OAAO4H,sBAAmB,IAAcgC,SAAS3E,IAAIjF,OAAO4H,kBAC7DzF,MAAKsG,sBAAuBnH,KAAKD,IAAKrB,OAAQoI,cAAe2B,gBAAkB,KAE3F,CAwBA,gBAAAE,CAAiBnB,SACb,MAAM3C,UAAYxJ,cAAcmM,QAASrH,UACzC,MAAMyI,OAAS3N,aAAa4J,UAAW1E,UACvC,MAAMH,KAAOa,MAAKwH,YAAaxD,WAC/B,MAAMgE,UAAYhI,MAAKgI,UAAWhE,WAClC,MAAMiE,WAAaD,WAAahE,UAChC,MAAMkE,aAAe/I,KAAKD,IAC1B,GAAI7F,gBAAgB8F,QAAU,KAAM,CAChC,OAAOzE,WAAW,CAAEyN,OAAQ,UAAWhJ,KAAM8I,WAAYG,OAAQ,iBACrE,CAEA,MAAMC,QAAUrI,MAAK4G,gBAAiB5C,WACtC,MAAM4D,aAAeS,QAAUrI,MAAKrE,SAAU0M,SAAW,KACzD,MAAMC,MACFD,eAAY,GACZT,eAAiB,OAChBzI,KAAKgB,OAAS,aACT3I,oBAAoB6Q,SACpBzR,iBAAiBoJ,MAAKhE,WAAamD,KAAMyI,gBAAkB,MACrE,GAAIU,MAAO,CACP,OAAO5N,WAAW,CACdyN,OAAQ,YACRhJ,KAAMkJ,QAAQ/J,KACd2F,OAAQoE,QAAQ9J,MAExB,CAEA,MAAMgK,cAAgB/O,kBAAkBwG,MAAKhE,aAAcV,QAAQkN,KAC9D3K,QAAWzD,aAAayD,OAAOsB,KAAM9E,iBAAmB0N,QAE7D,IAAKQ,cAAe,CAChB,OAAO7N,WAAW,CAAEyN,OAAQ,qBAAsBhJ,KAAM8I,YAC5D,CACA,MAAMQ,OAAS5Q,SAASmI,MAAK1E,QAAU4M,cACvC,MAAMQ,YAAc,CAChBpK,KAAMmK,OACNlK,KAAMgK,cAActE,UAChBoE,SAAStK,UAAO,EAAY,CAAA,EAAK,CAAEA,GAAIsK,QAAQtK,OAC/CsK,SAASnK,gBAAa,EAAY,CAAA,EAAK,CAAEA,SAAUmK,QAAQnK,aAC3DmK,SAAS7J,cAAW,EAAY,CAAA,EAAK,CAAEA,OAAQ6J,QAAQ7J,SAE/D,MAAMmK,iBACF9P,sBAAsB0P,cAActE,OAAQ,kCAC3CzM,oBAAoBkR,aACf7P,sBAAsB,sBAAuB,gCAC7C,MACV,IAAK8P,iBAAkB,CACnB,OAAOjO,WAAW,CACdyN,OAAQ,qBACRhJ,KAAM8I,WACNhE,OAAQsE,cAActE,QAE9B,CAEAjE,MAAK4I,cAAeH,OAAQC,YAAaC,kBACzC,OAAOjO,WAAW,CACdyN,OAAQ,WACRhJ,KAAMsJ,OACNxE,OAAQsE,cAActE,QAE9B,CA4CA,SAAA4E,CAAUlC,QAAiB9I,QACvB,MAAMsB,KAAOa,MAAKwH,YAAab,SAC/B,GAAI9I,SAAW,MAAQA,cAAW,EAAW,CAEzC,MAAM,IAAI4B,UACN,kDAAkDnF,SAASqM,sDAEnE,CAIA,UAAY9I,OAAgCoG,SAAW,SAAU,CAC7D,MAAM,IAAIxE,UACN,sCAAsCnF,SAASqM,oDAAoDpM,cAAcsD,UAEzH,CAGAA,OAASnG,iBAAiBmG,QAK1B,MAAMiL,WAAajQ,sBAAsBgF,OAAOoG,OAAQnM,aACxD,GAAIgR,aAAe,KAAM,CACrB,MAAM,IAAIrJ,UACN,sDAAsDnF,SAASuD,OAAOoG,WAE9E,CACA,IAAA,MAAW8E,SAAStI,gBAAiB,CACjC,MAAMmC,OAAkB/E,OAAOkL,OAC/B,GAAInG,cAAW,EAAW,CACtB,GAAIkG,WAAWC,cAAW,EAAW,SACrC,MAAM,IAAItJ,UACN,mDAAmDnF,SAASuD,OAAOoG,mBAAmB8E,QAE9F,CAEA,UAAWnG,SAAW,WAAarC,OAAOC,SAASoC,QAAS,CACxD,MAAM,IAAInD,UACN,mDAAmDnF,SAASuD,OAAOoG,qBAAqB8E,YAAYxO,cAAcqI,UAE1H,CACJ,CACA,MAAMoG,QAAUpS,iBAAiBoJ,MAAKhE,WAAamD,KAAMtB,QACzD,GAAImL,QAAS,CACT,GAAIA,QAAQrJ,aAAe,gBAAiB,CACxC,MAAM,IAAIH,iBACN,0BAA0BlF,SAASuD,OAAOoG,aAAa3J,SAASqM,aAAaqC,QAAQlJ,UACrF,gBACA,CAAEX,KAAMA,KAAKD,KAErB,CACA,MAAM,IAAIM,iBACN,0BAA0BlF,SAASuD,OAAOoG,aAAa3J,SAASqM,aAAaqC,QAAQlJ,UACrF,qBACA,IACOkJ,QAAQpJ,OACXT,KAAMA,KAAKD,IACX+E,OAAQpG,OAAOoG,OACftE,WAAYqJ,QAAQrJ,YAExBqJ,QAAQrJ,WAEhB,CACA,GAAI9B,OAAO4H,sBAAmB,EAAW,CACrC,MAAMwD,SAAW,IAAIjJ,MAAK1E,QAASqC,UAAU6K,KACxCpJ,QACGhF,aAAagF,OAAOd,KAAMiB,eACtBnF,aAAa+E,KAAKD,IAAK7E,gBAC3B2F,MAAKrE,SAAUyD,SAASqG,iBAAmB5H,OAAO4H,gBAE1D,GAAIwD,SAAU,CACV,MAAM,IAAIzJ,iBACN,0BAA0BlF,SAASuD,OAAOoG,aAAa3J,SAASqM,aAAa9I,OAAO4H,gEAAgEnL,SAAS2O,SAAS3K,SACtK,2BACA,CACImH,eAAgB5H,OAAO4H,eACvBtG,KAAMA,KAAKD,IACX+E,OAAQpG,OAAOoG,OACfiF,aAAcD,SAAS3K,KACvB6K,eAAgBF,SAAS1K,MAGrC,CACJ,CACA,MAAM6K,aAAepJ,MAAKsG,sBAAuBnH,KAAKD,IAAKrB,QAC3D,GAAIuL,eAAiB,KAAM,CACvB,MAAM,IAAI5J,iBACN,0BAA0BlF,SAASuD,OAAOoG,aAAa3J,SAASqM,aAAayC,aAAazB,oBAAoByB,aAAaC,qCAAqCD,aAAaE,QAC7K,sBACA,CACI3B,MAAOyB,aAAazB,MACpB0B,MAAOD,aAAaC,MACpBC,MAAOF,aAAaE,MACpBnK,KAAMA,KAAKD,IACX+E,OAAQpG,OAAOoG,QAG3B,CAGA,MAAM/E,IAAMc,MAAKgI,UAAWrB,UAAYxH,KAAKD,IAC7Cc,MAAK4I,cAAe1J,IAAK,CAAEZ,KAAMY,IAAKX,KAAMV,OAAOoG,QAAUpG,QAC7D,OAAOmC,IACX,CAcA,YAAAuJ,CAAa5C,SAET,MAAMoB,OAAS3N,aAAauM,QAASrH,UACrC,GAAIyI,SAAW,aAAc,CACzB,MAAM,IAAIvI,iBACN,kEACA,gBACA,CAAEL,KAAM,cAEhB,CACA,MAAMgF,OAASjK,cAAcyM,SAC7B,MAAMxH,KAAOa,MAAKtC,SAAU8K,KACvBgB,WAAcpP,aAAaoP,UAAUtK,IAAK7E,iBAAmB0N,QAElE,GAAI5D,SAAW,MAAQ9K,gBAAgB8K,UAAY,eAAgB,CAC/D,MAAM6D,UAAYhI,MAAKgI,UAAWrB,SAClC,MAAMzH,KAAMC,MAAMD,KAAO8I,WAAarB,QACtC,MAAM,IAAInH,iBACN,iCAAiClF,SAAS4E,+CAC1C,eACA,CAAEC,KAAMD,MAEhB,CACA,MAAMA,IAAMc,MAAKgI,UAAWrB,SAC5B,GAAIzH,MAAQ,KAAM,CACd,MAAMkK,aAAepJ,MAAKsG,sBAAuBpH,IAAK,MACtD,GAAIkK,eAAiB,KAAM,CACvB,MAAMhK,OAASY,MAAK1E,QAAS+D,IAAIH,KACjC,MAAM,IAAIM,iBACN,6BAA6BlF,SAASqM,aAAayC,aAAazB,oBAAoByB,aAAaC,qCAAqCD,aAAaE,QACnJ,sBACA,CACI3B,MAAOyB,aAAazB,MACpB0B,MAAOD,aAAaC,MACpBC,MAAOF,aAAaE,MACpBnK,KAAMD,OACFE,cAAW,EAAY,CAAA,EAAK,CAAE6E,OAAQ7E,OAAOb,OAG7D,CACAyB,MAAK4I,cAAe1J,IAAK,KAC7B,CACA,OAAOc,IACX,CA6DA,cAAAmD,CAAewD,QAAiBjD,gBAAyB5I,SAIrDN,cAAckJ,gBAAiB,+CAC/B,GAAI5I,UAAY,aAAeA,UAAY,SAAU,CACjD,MAAM,IAAI2E,UACN,gFAAgFlF,cAAcO,WAEtG,CAIA,MAAM2O,YAAc3O,QAAQoI,MAC5B,MAAMwG,cAAgB5O,QAAQsI,QAG9B,MAAMuG,mBAAqB7O,QAAQyI,+BAA4B,EAC/D9I,uBACIkP,mBACA,gEAEJ,MAAM9L,OAASmC,MAAK4G,gBAAiBD,SACrC,IAAK9I,OAAQ,CACT,MAAM,IAAIiG,WACN,qCAAqCxJ,SAASqM,qBAEtD,CACA,MAAMiD,YAAc5J,MAAKrE,SAAUkC,QACnC,IAAK+L,YAAa,CACd,MAAM,IAAInK,UACN,oDAAoDnF,SAASuD,OAAOU,SAE5E,CAGA,MAAMsL,OAAS9P,0BAA0B8D,OAAOU,KAAMmF,iBAGtD,MAAMoG,MACFD,SAAWnG,gBACL,IAAIpJ,SAASoJ,oBACb,IAAIpJ,SAASoJ,sBAAsBpJ,SAASuP,0BAItD,MAAME,QAAUrG,gBAAgBsG,OAAO/N,cACvC,MAAMgO,SAAWJ,OAAOG,OAAO/N,cAC/B,GACInD,yBAAyB+E,OAAOU,MAAM2L,KACjCnH,SACGA,QAAQC,cAAgB,gBACvBD,QAAQW,gBAAgBzH,gBAAkB8N,SACvChH,QAAQW,gBAAgBzH,gBAAkBgO,WAExD,CACE,MAAM,IAAIxK,UACN,+BAA+BqK,4HAEvC,CACA,IAAKvJ,OAAO4J,UAAUV,cAAgBA,YAAc,GAAKA,YAAc,EAAG,CACtE,MAAM,IAAI3F,WACN,4CAA4CgG,eAAexP,SAASmP,eAE5E,CACA,MAAMvG,MAAQ3J,kBAAkBsQ,OAAQJ,aACxC,IAAKvG,MAAO,CACR,MAAM,IAAIY,WACN,4CAA4CgG,eAAexP,SAASmP,eAE5E,CACA,IAAIW,aACJ,GAAIT,0BAAuB,EAAW,CAClCS,aAAe3Q,sBAAsBkQ,oBACrC,IAAKS,aAAc,CACf,MAAM,IAAItG,WACN,4DAA4DxJ,SAASqP,uBAE7E,CACJ,CACA,MAAMvG,QAAUsG,eAAiB,EACjC,IAAKnJ,OAAOC,SAAS4C,UAAYA,QAAU,GAAKA,QAAU,EAAG,CACzD,MAAM,IAAIU,WACN,wEAER,CACA,GAAI8F,YAAYS,kBAAmB,CAC/B,MAAM,IAAI5K,UACN,uCAAuCnF,SAASuD,OAAOU,8EAE/D,CAKA,IAAKxG,sBAAsB8F,OAAOU,KAAMmF,iBAAkB,CACtD,MAAM4G,QAAU,IAAItS,mBAAmB6F,OAAOU,OAAOX,IACjD,EAAE2M,UAAWC,SAAW,GAAGD,cAAcC,UAE7C,MAAM,IAAI/K,UACN6K,QAAQvI,OAAS,EACX,uCAAuCzH,SAASuD,OAAOU,mCAAmCuL,mCAAmCQ,QAAQG,KAAK,QAC1I,iFAAiFnQ,SAASuD,OAAOU,SAE/G,CACA,GACIoL,0BAAuB,IACtB1R,yBAAyB4F,OAAOU,KAAMoL,oBACzC,CACE,MAAMW,QAAUtQ,0BAA0B6D,OAAOU,MACjD,MAAM,IAAIkB,UACN,uCAAuCnF,SAASuD,OAAOU,8CAA8CjE,SAASqP,kCAAkCW,QAAQvI,OAAS,EAAIuI,QAAQG,KAAK,MAAQ,2BAElM,CAKA,MAAM7L,MAAQoB,MAAK0K,qBAAsB7M,SAAW+L,YACpD,MAAMe,KAAOhR,UAAUiF,OACvB,MAAMgM,UAAY1S,8BAA8B0G,MAAOsE,MAAOkH,cAC9D,MAAMS,QAAU1S,kBACZyG,MACA+L,KACAC,UAAU1H,MAAM4H,SAChBF,UAAUR,cAAcW,WAE5B,GAAIF,QAAQ9I,OAAS,EAAG,CACpB,MAAM,IAAItC,UACN,8CAA8CqK,qBAAqBxP,SAASuD,OAAOU,kCAAkCsM,QAAQJ,KAAK,QAE1I,CAIA,MAAMO,mBAAqBZ,cAAcY,oBAAsB9H,MAAM8H,mBACrE,MAAMlK,mBAAqBlH,iBACvB+Q,KACAC,UAAU1H,MACVE,QACAwH,UAAUR,cAEd,MAAMW,UAAY3S,oBAAoBwG,MAAOkC,oBAC7C,GAAIkK,mBAAoB,CACpB,IAAA,MAAWC,OAAQ,CAAC,UAAW,UAAW,YAAa,YAAsB,CACzE,MAAM9M,MAAQ6M,mBAAmBC,MACjC,GAAI9M,aAAU,EAAW,SACzB,MAAM+M,MAAQrR,oBAAoBoR,MAAM,GACxC,GAAIC,aAAU,EAAW,SACzB,MAAMC,eAAiB,CACnBC,MAAOF,MACPzM,MAAON,MAAQrE,cAAcoR,OAC7BG,eAAgBzM,MAAMoM,qBAAqBC,OAAS,GAAKnR,cAAcoR,QAE3EH,UAAUtI,KAAK0I,gBACfrK,mBAAmB2B,KAAK0I,eAC5B,CACJ,CACA,MAAMzI,YAAiC,CACnCC,cAAee,gBACfT,MAAOwG,YACPpG,QAASD,WACLuG,0BAAuB,EAAY,CAAErG,mBAAoBqG,oBAAuB,CAAA,EACpF9G,UAAWkI,WAEf/K,MAAK4I,cACD/K,OAAOS,KACP,IAAKT,OAAQa,YAAagE,aAC1B9D,MACAkC,oBAEJ,OAAOd,IACX,CAiCA,qBAAAsL,CACI3E,QACAyD,cAEA,GAAIA,eAAiB,KAAM,CACvB5P,cAAc4P,aAAc,kDAChC,CACA,MAAMrC,OAASqC,aACf,MAAMvM,OAASmC,MAAK4G,gBAAiBD,SACrC,IAAK9I,OAAQ,OAAOqC,8BAA8B,YAAa,CAAEf,KAAMwH,UAEvE,MAAM/H,MAAQoB,MAAKrE,SAAUkC,QAC7B,IAAKe,MAAO,CACR,OAAOsB,8BAA8B,yBAA0B,CAC3Df,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,MAEvB,CACA,MAAMmE,YAAc7E,OAAOa,YAC3B,IAAKgE,YAAa,CACd,OAAOxC,8BAA8B,gBAAiB,CAClDf,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,MAEvB,CACA,GAAIK,MAAMyL,kBAAmB,CACzB,OAAOnK,8BAA8B,eAAgB,CACjDf,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,MAEvB,CAEA,MAAMgN,SAAW7I,YAAYY,oBAAsB,KACnD,GACKiI,WAAa,MAAQxD,SAAW,MAChCwD,WAAa,MACVxD,SAAW,MACXwD,SAASvB,OAAO/N,gBAAkB8L,OAAOiC,OAAO/N,cACtD,CACE,OAAOvB,WAAW,CAAEyF,KAAM,YAAaoD,yBAA0BgI,UACrE,CAEA,MAAMxI,QAAUpM,wBAAwBkH,QACxC,IAAI2N,OACJ,GAAIzD,SAAW,KAAM,CACjByD,OAAS/R,sBAAsBsO,QAC/B,IAAKyD,OAAQ,CACT,OAAOtL,8BAA8B,4BAA6B,CAC9Df,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,KACf6L,aAAcrC,QAEtB,CAKA,MAAM0D,oBACF1I,SAASQ,gCAA6B,GACtCR,QAAQC,cAAgB,aACxBD,QAAQQ,yBAAyByG,OAAO/N,gBACpC8L,OAAOiC,OAAO/N,cACtB,IAAKhE,yBAAyB4F,OAAOU,KAAMwJ,UAAY0D,oBAAqB,CACxE,OAAOvL,8BAA8B,gCAAiC,CAClEf,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,KACf6L,aAAcrC,QAEtB,CACJ,CACA,GAAIhF,SAAWA,QAAQC,cAAgB,YAAa,CAChD,MAAM0I,MAAQ1L,MAAK0K,qBAAsB7M,QACzC,IAAK6N,MAAO,CACR,OAAOxL,8BAA8B,yBAA0B,CAC3Df,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,MAEvB,CACA,MAAMsM,QAAU1S,kBAAkBuT,MAAO/R,UAAU+R,OAAQ,GAAIF,QAAQT,WACvE,GAAIF,QAAQ9I,OAAS,EAAG,CACpB,OAAO7B,8BAA8B,sBAAuB,CACxDf,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,KACfoN,OAAQd,SAEhB,CAEA,MAAQtH,yBAA0BqI,kBAAmBC,eAAkB9I,QAEvE,MAAM+I,SACF/D,SAAW,KACL8D,cACA,IAAKA,cAAetI,yBAA0BwE,QACxD,MAAMkC,SAAW5R,sBAAsBwT,eACvC,IAAK5B,SAAU,CACX,OAAO/J,8BAA8B,yBAA0B,CAC3Df,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,MAEvB,CACA,MAAMmK,YAAiC,CACnC/F,cAAeD,YAAYC,cAC3BM,MAAOP,YAAYO,MACnBI,QAASX,YAAYW,WACjB0E,SAAW,KAAO,CAAA,EAAK,CAAEzE,mBAAoByE,QACjDlF,UAAWvK,iCAAiCwT,WAEhD9L,MAAK4I,cACD/K,OAAOS,KACP,IAAKT,OAAQa,YAAagK,aAC1BhR,iBAAiBuS,UACjB1R,0BAA0BuT,UAElC,KAAO,CACH,MAAMvB,UAAY7H,YAAYC,cAC9B,MAAMO,MAAQR,YAAYO,MAC1B,MAAMG,QAAUV,YAAYW,QAC5B,UACWkH,YAAc,WACpBhK,OAAO4J,UAAUjH,QAClBA,MAAQ,GACRA,MAAQ,EACV,CACE,OAAOhD,8BAA8B,yBAA0B,CAC3Df,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,MAEvB,CACA,MAAMwN,cACFR,WAAa,UAAO,EAAa9R,sBAAsB8R,WAAa,KACxE,GAAI/S,yBAAyBqF,OAAOU,KAAMmE,YAAaqJ,iBAAmB,WAAY,CAClF,OAAO7L,8BAA8B,mCAAoC,CACrEf,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,KACfgM,qBAER,CACA,MAAMV,OAAS9P,0BAA0B8D,OAAOU,KAAMgM,WACtD,MAAMyB,eAAiBzS,kBAAkBsQ,OAAQ3G,OACjD,IACK8I,iBACAjU,sBAAsB8F,OAAOU,KAAMgM,aACnChK,OAAOC,SAAS4C,UACjBA,QAAU,GACVA,QAAU,EACZ,CACE,OAAOlD,8BAA8B,yBAA0B,CAC3Df,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,KACfgM,oBACArH,aAER,CACA,MAAMyH,KAAO3K,MAAK0K,qBAAsB7M,SAAWe,MACnD,MAAMgM,UAAY1S,8BAA8ByS,KAAMqB,eAAgBR,QACtE,MAAMX,QAAU1S,kBACZwS,KACAhR,UAAUgR,MACVC,UAAU1H,MAAM4H,SAChBF,UAAUR,cAAcW,WAE5B,GAAIF,QAAQ9I,OAAS,EAAG,CACpB,OAAO7B,8BAA8B,sBAAuB,CACxDf,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,KACfoN,OAAQd,SAEhB,CACA7K,KAAKmD,eAAetF,OAAOS,KAAMiM,UAAW,CACxCrH,YACAE,mBACI2E,SAAW,KAAO,CAAA,EAAK,CAAExE,yBAA0BwE,SAE/D,CAEA,OAAOrN,WAAW,CACdyF,KAAM,UACN8L,iCAAkCV,SAClChI,yBAA0BwE,QAElC,CAsCA,wBAAAmE,CAAyBvF,SACrB,MAAM9I,OAASmC,MAAK4G,gBAAiBD,SACrC,IAAK9I,OAAQ,OAAOuC,oCAAoC,YAAa,CAAEjB,KAAMwH,UAE7E,MAAM/H,MAAQoB,MAAKrE,SAAUkC,QAC7B,IAAKe,MAAO,CACR,OAAOwB,oCAAoC,yBAA0B,CACjEjB,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,MAEvB,CACA,MAAMmE,YAAc7E,OAAOa,YAC3B,IAAKgE,YAAa,CACd,OAAOtC,oCAAoC,gBAAiB,CACxDjB,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,MAEvB,CACA,GAAIK,MAAMyL,kBAAmB,CACzB,OAAOjK,oCAAoC,eAAgB,CACvDjB,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,MAEvB,CAIA,GAAImE,YAAYW,UAAY,GAAKX,YAAYG,iBAAc,EAAW,CAClE,OAAOnI,WAAW,CAAEyF,KAAM,aAC9B,CACA,MAAMgM,gBAAkBzJ,YAAYW,QACpC,IAAK9C,OAAOC,SAAS2L,kBAAoBA,gBAAkB,GAAKA,gBAAkB,EAAG,CACjF,OAAO/L,oCAAoC,iBAAkB,CACzDjB,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,MAEvB,CAEA,MAAM6L,aAAe1H,YAAYY,oBAAsB,KACvD,MAAMkI,OACFpB,eAAiB,UAAO,EAAa3Q,sBAAsB2Q,oBAAiB,EAChF,GAAIA,eAAiB,OAASoB,OAAQ,CAClC,OAAOpL,oCAAoC,4BAA6B,CACpEjB,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,KACf6L,2BAER,CACA,MAAMG,UAAY7H,YAAYC,cAC9B,MAAMO,MAAQR,YAAYO,MAC1B,UAAWsH,YAAc,WAAahK,OAAO4J,UAAUjH,QAAUA,MAAQ,GAAKA,MAAQ,EAAG,CACrF,OAAO9C,oCAAoC,yBAA0B,CACjEjB,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,MAEvB,CACA,MAAMwE,QAAUpM,wBAAwBkH,QAGxC,MAAM4N,oBACF1I,SAASQ,gCAA6B,GACtCR,QAAQC,cAAgB,aACxBD,QAAQQ,yBAAyByG,OAAO/N,gBACpCmO,cAAcJ,OAAO/N,cAC7B,GACImO,eAAiB,OAChBnS,yBAAyB4F,OAAOU,KAAM6L,gBACtCqB,oBACH,CACE,OAAOrL,oCAAoC,gCAAiC,CACxEjB,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,KACf6L,2BAER,CAEA,GAAIrH,SAAWA,QAAQC,cAAgB,YAAa,CAChD,MAAM0I,MAAQ1L,MAAK0K,qBAAsB7M,QACzC,IAAK6N,MAAO,CACR,OAAOtL,oCAAoC,yBAA0B,CACjEjB,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,MAEvB,CACA,MAAMsM,QAAU1S,kBAAkBuT,MAAO/R,UAAU+R,OAAQ,GAAIF,QAAQT,WACvE,GAAIF,QAAQ9I,OAAS,EAAG,CACpB,OAAO3B,oCAAoC,sBAAuB,CAC9DjB,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,KACfoN,OAAQd,SAEhB,CAEA,MAAQtH,yBAA0BqI,kBAAmBC,eAAkB9I,QAEvE,MAAM+I,SACF1B,eAAiB,KACXyB,cACA,IAAKA,cAAetI,yBAA0B6G,cACxD,MAAMH,SAAW5R,sBAAsBwT,eACvC,IAAK5B,SAAU,CACX,OAAO7J,oCAAoC,yBAA0B,CACjEjB,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,MAEvB,CACA,MAAMmK,YAAiC,CACnC/F,cAAeD,YAAYC,cAC3BM,MAAOP,YAAYO,MACnBI,QAAS,KACL+G,eAAiB,KAAO,CAAA,EAAK,CAAE9G,mBAAoB8G,cACvDvH,UAAWvK,iCAAiCwT,WAEhD9L,MAAK4I,cACD/K,OAAOS,KACP,IAAKT,OAAQa,YAAagK,aAC1BhR,iBAAiBuS,UACjB1R,0BAA0BuT,UAElC,KAAO,CACH,MAAMM,MAAQ5T,yBAAyBqF,OAAOU,KAAMmE,YAAa8I,QACjE,GACIY,QAAU,YACTA,QAAU,WAAarU,sBAAsB8F,OAAOU,KAAMgM,WAC7D,CACE,OAAOnK,oCAAoC,mCAAoC,CAC3EjB,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,KACfgM,qBAER,CACA,MAAMV,OAAS9P,0BAA0B8D,OAAOU,KAAMgM,WACtD,MAAMyB,eAAiBzS,kBAAkBsQ,OAAQ3G,OACjD,IAAK8I,iBAAmBjU,sBAAsB8F,OAAOU,KAAMgM,WAAY,CACnE,OAAOnK,oCAAoC,yBAA0B,CACjEjB,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,KACfgM,oBACArH,aAER,CACA,MAAMyH,KAAO3K,MAAK0K,qBAAsB7M,SAAWe,MACnD,MAAMgM,UAAY1S,8BAA8ByS,KAAMqB,eAAgBR,QACtE,MAAMX,QAAU1S,kBACZwS,KACAhR,UAAUgR,MACVC,UAAU1H,MAAM4H,SAChBF,UAAUR,cAAcW,WAE5B,GAAIF,QAAQ9I,OAAS,EAAG,CACpB,OAAO3B,oCAAoC,sBAAuB,CAC9DjB,KAAMtB,OAAOS,KACb2F,OAAQpG,OAAOU,KACfoN,OAAQd,SAEhB,CACA7K,KAAKmD,eAAetF,OAAOS,KAAMiM,UAAW,CACxCrH,YACAE,QAAS,KACLgH,eAAiB,KAAO,CAAA,EAAK,CAAE7G,yBAA0B6G,eAErE,CAEA,OAAO1P,WAAW,CAAEyF,KAAM,aAAcgM,gCAAiB/I,QAAS,GACtE,CAwCA,uBAAAiJ,CAAwB1F,QAAiB5D,SACrC,GAAIA,UAAY,aAAeA,UAAY,SAAU,CACjD,MAAM,IAAItD,UACN,2FAA2FlF,cAAcwI,WAEjH,CACAvI,cAAcuI,QAAQkB,OAAQ,uDAC9BzJ,cACIuI,QAAQW,gBACR,gEAEJlJ,cACIuI,QAAQC,YACR,4DAEJvI,uBACIsI,QAAQQ,yBACR,yEAEJ,MAAM+I,MAAQxT,yBAAyBiK,QAAQkB,QAAQuE,KAClDgB,WACGA,UAAU9F,gBAAgBzH,gBAAkB8G,QAAQW,gBAAgBzH,eACpEuN,UAAUtG,QAAUH,QAAQG,QAC3BsG,UAAUjG,0BAA0BtH,eAAiB,OACjD8G,QAAQQ,0BAA0BtH,eAAiB,KACxDuN,UAAUxG,cAAgBD,QAAQC,aAE1C,IAAKsJ,MAAO,CACR,MAAM,IAAIxI,WACN,+DAA+DxJ,SAASyI,QAAQW,iCAAiCpJ,SAASyI,QAAQkB,WAE1I,CACA,MAAMrF,MAAQvG,sBAAsBiU,OACpC,MAAM/J,WAAa9J,oBAAoB6T,OACvC,GAAI/J,WAAWR,OAAS,EAAG,CACvB,MAAM,IAAItC,UACN,wDAAwDnF,SAASyI,QAAQW,iCAAiCpJ,SAASyI,QAAQkB,oCAAoC1B,WAAWkI,KAAK,QAEvL,CACAzK,KAAK6I,UAAUlC,QAAS/H,OACxB,MAAMf,OAASmC,MAAK4G,gBAAiBD,SAMrC,MAAM4F,iBAAmBjU,iCAAiCgU,OAC1D,MAAM5J,YAAiC,CACnCC,cAAe2J,MAAM5I,gBACrBT,MAAOqJ,MAAMpJ,MACbG,QAAS,KACLiJ,MAAM/I,gCAA6B,EACjC,CAAA,EACA,CAAED,mBAAoBgJ,MAAM/I,6BAC9BgJ,iBAAiBxK,OAAS,EAAI,CAAEc,UAAW0J,kBAAqB,CAAA,GAExEvM,MAAK4I,cACD/K,OAAOS,KACP,IAAKT,OAAQa,YAAagE,aAC1BhL,iBAAiBkH,OACjBrG,0BAA0B+T,QAE9B,OAAOtM,IACX,CAeA,gBAAAwM,CAAiB7F,SACb,MAAM9I,OAASmC,MAAK4G,gBAAiBD,SACrC,GAAI9I,QAAUmC,MAAKrE,SAAUkC,SAASwM,kBAAmB,CACrD,MAAM,IAAI5K,UACN,yCAAyCnF,SAASuD,OAAOU,iFAEjE,CACA,GAAIV,QAAQa,YAAa,CACrB,MAAM/E,WAAYqG,MAAK0K,qBAAsB7M,QAC7C,MAAM4O,KAAsB,CAAEnO,KAAMT,OAAOS,KAAMC,KAAMV,OAAOU,MAC9D,GAAIV,OAAOE,UAAO,EAAY0O,KAA0B1O,GAAKF,OAAOE,GACpE,GAAIF,OAAOK,gBAAa,EAAW,CAC9BuO,KAA+BvO,SAAWL,OAAOK,QACtD,CACA,GAAIL,OAAOW,cAAW,EAAYiO,KAA6BjO,OAASX,OAAOW,OAC/E,GAAIX,OAAOY,aAAU,EAAYgO,KAA4BhO,MAAQZ,OAAOY,MAC5EuB,MAAK4I,cAAe/K,OAAOS,KAAMmO,KAAM9S,iBAAa,EACxD,CACA,OAAOqG,IACX,CAoBA,gBAAA0M,CAAiB/F,QAAiB7I,IAC9BkC,MAAK2M,YAAahG,QAAS,CAAE5I,GAAID,KACjC,OAAOkC,IACX,CAaA,iBAAA4M,CAAkBjG,QAAiB1I,UAC/B,IAAKsC,OAAO4J,UAAUlM,WAAaA,SAAW,GAAKA,SAAW,EAAG,CAC7D,MAAM,IAAI6F,WACN,2DAA2DxJ,SAAS2D,YAE5E,CACA+B,MAAK2M,YAAahG,QAAS,CAAEzI,SAAUD,WACvC,OAAO+B,IACX,CAWA,YAAA2M,CAAahG,QAAiBkG,OAC1B,MAAMhP,OAASmC,MAAK4G,gBAAiBD,SACrC,IAAK9I,OAAQ,CACT,MAAM,IAAIiG,WAAW,sBAAsBxJ,SAASqM,qBACxD,CACA3G,MAAK1E,QAASoL,IAAI7I,OAAOS,KAAM7G,mBAAmB,IAAKoG,UAAWgP,SAClE7M,MAAKiB,UAAW6L,OACpB,CAgCA,cAAAC,CAAejS,QAAgC,CAAA,GAC3C,MAAM2B,YAAcuD,MAAKoE,sBACzB,MAAMzH,cAAgBqD,MAAK2E,wBAC3B,MAAMkB,KAAO7F,MAAK0E,uBAClB,MAAM9H,aAAeoD,MAAKgN,oBAAqBvQ,aAC/C,OAAO7B,mBACH,CACIoB,WAAYgE,MAAKhE,cACbgE,MAAKe,IAAK5E,gBAAa,EAAY,CAAA,EAAK,CAAED,SAAU8D,MAAKe,IAAK5E,aAC9D6D,MAAKe,IAAK1E,iBAAc,EAAY,CAAA,EAAK,CAAED,UAAW4D,MAAKe,IAAK1E,WACpEf,QAAS0E,MAAK1E,QACdoC,OAAQsC,MAAKtC,SACbxC,eAAgB8E,MAAK9E,eACrBM,gBAAiBwE,MAAKY,KAAMqM,SAC5BxQ,wBACAE,4BACAK,aAAc6I,KACdjJ,0BAMAxB,mBAAoB4E,MAAKgB,eAAgBkJ,KAAMgD,UAC3C,GAAIA,QAAQzJ,eAAiB,KAAM,OAAO,MAC1C,MAAMU,OAASjK,cAAcgT,QAAQ/N,MAGrC,OAAOgF,SAAW,MAAQ7K,iBAAiB6K,UAAY,SAE3DxI,SAAWkC,QAAWmC,MAAKrE,SAAUkC,SAEzC/C,QAER,CAUA,MAAA7D,CAAO6D,SACH,OAAO7D,OAAe+I,KAAK+M,eAAejS,SAAUA,QAAQqS,OAChE,CAeA,YAAAC,CAAatS,SACT,OAAO5D,cAAc8I,KAAK/I,OAAO6D,SAAU,CAAEuS,OAAQvS,QAAQuS,QAAU,GAC3E,CAGA,oBAAAL,CAAqBvQ,aACjB,IAAI6Q,MACJ,IACIA,MAAQtN,MAAKuB,cACjB,CAAA,MAGI,OAAO,IACX,CACA,GAAI+L,QAAU,KAAM,OAAO,KAG3B,MAAMC,KAAOvN,MAAK0E,uBAClB,OAAO1L,gBAAgByD,YAAaZ,KAAK2R,IAAID,KAAKtQ,KAAMqQ,MAAMG,SAAUH,MAC5E,CAGA,OAAA5P,GACI,GAAIsC,MAAKmB,mBAAiB,EAAW,CACjCnB,MAAKmB,YAAeoD,OAAOC,OAAOrK,eAAe6F,MAAKY,MAC1D,CACA,OAAOZ,MAAKmB,WAChB,CAEA,YAAAqG,CAAab,SACT,MAAMoB,OAAS3N,aAAauM,QAASrH,UACrC,MAAMH,KAAOa,MAAKtC,SAAU8K,KAAMkF,GAAMtT,aAAasT,EAAExO,IAAK7E,iBAAmB0N,QAC/E,IAAK5I,KAAM,CACP,MAAM,IAAI2E,WACN,sBAAsBxJ,SAAS0F,MAAKhE,6BAA8B1B,SAASqM,YAEnF,CACA,OAAOxH,IACX,CAMA,UAAA6I,CAAWrB,SACP,OAAOjO,cAAcsH,MAAK1E,QAAUlB,aAAauM,QAASrH,UAC9D,CAGA,gBAAAsH,CAAiBD,SACb,MAAMzH,IAAMc,MAAKgI,UAAWrB,SAC5B,OAAOzH,MAAQ,UAAO,EAAYc,MAAK1E,QAAS+D,IAAIH,IACxD,CAGA,mBAAAwC,GACI,MAAO,IAAI1B,MAAK1E,QAASqC,UAAUC,IAAKC,SAAA,CACpCkI,KAAM/F,MAAK2N,WAAY9P,QACvBlB,cAAeqD,MAAK4N,eAAgB/P,OAAQ,gBAAiB,iBAC7DgQ,cAAe7N,MAAK4N,eAAgB/P,OAAQ,gBAAiB,iBAC7Db,aAAcgD,MAAK4N,eAAgB/P,OAAQ,eAAgB,kBAEnE,CAGA,aAAAqI,GACI,MAAMpE,QAAU,IAAI9B,MAAK1E,QAASqC,UAAUyJ,QAASvJ,SACjD,MAAMe,MAAQoB,MAAKrE,SAAUkC,QAC7B,OAAOe,QAAU,KAAO,GAAK,CAACA,SAElC,OAAOpI,sBAAsBsL,QACjC,CAGA,cAAAqE,CAAeQ,SACX,MAAMvH,OAASY,MAAK4G,gBAAiBD,SACrC,OAAOvH,cAAW,EAAY,KAAOY,MAAKrE,SAAUyD,OACxD,CAGA,qBAAAsL,CAAsB7M,QAClB,MAAMuB,OAASY,MAAKrE,SAAUkC,QAC9B,IAAKA,OAAOa,aAAe/H,wBAAwBkH,UAAY,KAAM,OAAOuB,OAC5E,MAAMsM,MAAQ7S,sBAAsBgF,OAAOU,KAAMzG,aACjD,IAAK4T,MAAO,OAAOtM,OACnB,OAAOA,QAAQiL,kBACT3S,iBAAiB,IAAKgU,MAAOrB,kBAAmB,OAChDqB,KACV,CAGA,wBAAApK,CAAyBzD,QACrB,MAAMkN,UAAY/K,MAAKc,mBAAoBzB,IAAIxB,OAAOS,MACtD,GAAIyM,iBAAc,GAAalN,OAAOa,mBAAgB,EAAW,OAAOb,OACxE,MAAO,IACAA,OACHa,YAAa,IAAKb,OAAOa,YAAamE,UAAWkI,WAEzD,CAGA,yBAAA1J,GACI,MAAO,IAAIrB,MAAK1E,QAASqC,UAAUC,IAAKC,QAAWmC,MAAKsB,wBAAyBzD,QACrF,CAGA,sBAAAyI,CACIK,QACA+B,YACAL,QAAUrI,MAAKkG,eACfqF,SAAWvL,MAAKmG,cAAeQ,UAE/B,GACI4E,UAAU7F,kBAAe,GACzB6F,UAAU5F,qBAAkB,GAC5B+C,aAAahD,kBAAe,GAC5BgD,aAAa/C,qBAAkB,EACjC,CACE,OAAO,IACX,CACA,IAAA,MAAWmI,SAASzF,QAAS,CACzB,MAAMgB,MACFyE,MAAMzE,MACN9I,OAAOgL,UAAU7F,aAAeoI,MAAMnG,OACtCpH,OAAOmI,aAAahD,aAAeoI,MAAMnG,OAC7C,MAAMoG,SACFD,MAAMC,UACLxC,UAAU5F,eAAegC,QAAUmG,MAAMnG,MACpC4D,SAAS5F,cAAcqI,OACvB,IACLtF,aAAa/C,eAAegC,QAAUmG,MAAMnG,MACvCe,YAAY/C,cAAcqI,OAC1B,GACV,MAAM1E,MAAQwE,MAAMG,UAAYF,SAChC,MAAMG,OAASrS,KAAKsS,IAAI,EAAG9E,MAAQC,OACnC,GAAI4E,OAASJ,MAAMI,OAAQ,CACvB,MAAO,IAAKJ,MAAOC,kBAAUzE,YAAOD,YAAO6E,cAC/C,CACJ,CACA,OAAO,IACX,CAGA,cAAAtF,CACIjC,QACA+B,YACAC,iBACA7H,oBAEA,MAAMyK,SAAWvL,MAAK1E,QAAS+D,IAAIsH,UAAY,KAC/C3G,MAAKoO,sBAAuB7C,SAAU7C,YAAaC,kBACnD,GAAID,cAAgB,KAAM,CACtB1I,MAAK1E,QAAS+S,OAAO1H,SACrB3G,MAAKa,YAAawN,OAAO1H,SACzB3G,MAAKc,mBAAoBuN,OAAO1H,QACpC,KAAO,CACH3G,MAAK1E,QAASoL,IAAIC,QAASlP,mBAAmBiR,cAC9C,GAAIC,wBAAqB,EAAW3I,MAAKa,YAAa6F,IAAIC,QAASgC,kBACnE,GAAI7H,0BAAuB,EAAWd,MAAKc,mBAAoBuN,OAAO1H,cACjE3G,MAAKc,mBAAoB4F,IAAIC,QAAS7F,mBAC/C,CACAd,MAAKiB,UAAW6L,OACpB,CAGA,sBAAAsB,CACI7C,SACA+C,KACAC,WAEA,GAAIvO,MAAKe,IAAKvE,mBAAgB,EAAW,CACrCwD,MAAKe,IAAKvE,aAAewD,MAAK2N,WAAYW,KAAMC,WAAavO,MAAK2N,WAAYpC,SAClF,CAEA,GAAIvL,MAAKe,IAAKrE,qBAAkB,EAAW,CACvCsD,MAAKe,IAAKrE,eACNsD,MAAK4N,eAAgBU,KAAM,gBAAiB,gBAAiBC,WAC7DvO,MAAK4N,eAAgBrC,SAAU,gBAAiB,gBACxD,CAEA,GAAIvL,MAAKe,IAAKjE,cAAcC,YAAS,EAAW,CAC5C,MAAMI,QAAU6C,MAAKe,IAAKjE,aAAaI,QACvC8C,MAAKe,IAAKjE,aAAe,CACrBC,KACIiD,MAAKe,IAAKjE,aAAaC,KACvBiD,MAAK4N,eAAgBU,KAAM,eAAgB,eAAgBC,WAC3DvO,MAAK4N,eAAgBrC,SAAU,eAAgB,mBAC/CpO,eAAY,EAAY,CAAA,EAAK,CAAED,QAASC,SAEpD,CAIA,GAAI/C,aAAamR,UAAUhN,KAAMzG,eAAiBsC,aAAakU,MAAM/P,KAAMzG,aAAc,CACrF,MACJ,CAIA,GACKyT,WAAa,MAAQ5S,iBAAiB4S,SAASjN,OAC/CgQ,OAAS,MAAQ3V,iBAAiB2V,KAAKhQ,MAC1C,CACE,MACJ,QAGO0B,MAAKe,IAAKxE,oBACVyD,MAAKe,IAAK3D,KACrB,CAWA,WAAAuQ,CAAY9P,OAA8B2Q,eACtC,GAAI3Q,SAAW,KAAM,OAAO,EAC5B,GAAIlF,iBAAiBkF,OAAOS,MAAO,OAAO,EAC1C,MAAMmQ,SAAWtX,mBAAmB0G,OAAQ,QAC5C,GAAI4Q,WAAa,KAAM,OAAOA,SAC9B,OAAQD,eAAiBxO,MAAKrE,SAAUkC,UAAUkI,MAAQ,CAC9D,CAOA,eAAA6H,CACI/P,OACA6Q,cACA3F,MACAyF,eAEA,GAAI3Q,SAAW,KAAM,OAAO,EAC5B,GAAIlF,iBAAiBkF,OAAOS,MAAO,OAAO,EAC1C,MAAMmQ,SAAWtX,mBAAmB0G,OAAQ6Q,eAC5C,GAAID,WAAa,KAAM,OAAOA,SAC9B,OAAQD,eAAiBxO,MAAKrE,SAAUkC,WAAWkL,QAAU,CACjE,CAGA,gBAAAtH,GACI,IAAA,MAAWkN,KAAK3O,MAAK1E,QAASqC,SAAU,CACpC,MAAMiB,MAAQoB,MAAKrE,SAAUgT,GAC7B,GAAI/P,OAAOO,OAAS,kBAAA,MAA0B,CAAEtB,OAAQ8Q,EAAG/P,YAC/D,CACA,YAAO,CACX,CAEA,aAAA2C,GACI,MAAMqN,IAAM5O,MAAKyB,kBACjB,IAAKmN,IAAK,OAAO,KACjB,MAAQ/Q,OAAQgR,UAAWjQ,MAAO+L,MAASiE,IAC3C,GAAIjE,KAAKmE,eAAY,GAAanE,KAAKoE,iBAAc,EAAW,CAI5D,MAAM,IAAItP,UACN,yDAAyDnF,SAASuU,UAAUtQ,+BAEpF,CAEA,MAAMyQ,QAAU7X,mBAAmB0X,UAAW,mBAAqBlE,KAAKqE,QACxE,MAAMvB,QAAUtW,mBAAmB0X,UAAW,mBAAqBlE,KAAK8C,QACxE,GAAIuB,eAAY,GAAavB,eAAY,EAAW,CAChD,MAAM5C,QAAU,IACRmE,eAAY,EAAY,CAAC,WAAa,MACtCvB,eAAY,EAAY,CAAC,WAAa,IAE9C,MAAM,IAAIhO,UACN,yDAAyDnF,SAASuU,UAAUtQ,iBAAiBsM,QAAQJ,KAAK,UAElH,CAEA,MAAO,CACHuE,gBACAvB,gBACAqB,QAASnE,KAAKmE,QACdC,UAAWpE,KAAKoE,UAChBE,UAAWjP,MAAKkP,mBAExB,CAGA,iBAAAA,GACI,IAAA,MAAWP,KAAK3O,MAAK1E,QAASqC,SAAU,CACpC,MAAMiB,MAAQoB,MAAKrE,SAAUgT,GAO7B,GACI/P,OAAOuQ,mBAAqB,gBAC3BvQ,OAAOqQ,iBAAc,GAAarQ,MAAMqQ,YAAc,GACzD,CACE,QACJ,CACA,GAAIN,EAAE5Q,KAAO,MAAO,SACpB,GAAIa,OAAOqQ,iBAAc,EAAW,CAChC,MAAM,IAAIxP,UACN,mDAAmDnF,SAASqU,EAAEpQ,0BAEtE,CACA,OAAOK,MAAMqQ,SACjB,CACA,OAAO,CACX,CAGA,SAAAtT,CAAUkC,QACN,GAAIA,SAAW,KAAM,OAAO,KAC5B,MAAMe,MACFoB,MAAKa,YAAaxB,IAAIxB,OAAOS,OAASzF,sBAAsBgF,OAAOU,KAAMzG,aAC7E,GAAI8G,MAAO,OAAOA,MAIlB,OAAOpH,oBAAoBqG,QACrBhF,sBAAsB,sBAAuB,gCAC7C,IACV,UACJ2G,iBAAAkB"}
|