@adatechnology/game-weapons 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/README.md +89 -2
- package/dist/index.d.ts +214 -0
- package/dist/index.global.js +1609 -0
- package/dist/index.global.js.map +1 -0
- package/dist/index.js +1586 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/data/calibers.json","../src/data/weapons.json","../src/locale.ts","../src/rng.ts","../src/weapon.ts","../src/arsenal.ts"],"sourcesContent":["export { createArsenal, CALIBERS, WEAPONS, DEFAULT_LOADOUT, muzzleEnergy } from './arsenal'\nexport { resolveStrings, locales } from './locale'\nexport type { WeaponsLocale, WeaponsStrings } from './locale'\nexport type * from './types'\n","[\n {\n \"id\": \"22lr\",\n \"label\": \".22 LR\",\n \"diameter\": 5.7,\n \"bulletGrams\": 2.6,\n \"muzzleSpeed\": 350,\n \"dragPer100m\": 0.15,\n \"kind\": \"rimfire\"\n },\n {\n \"id\": \"9x19\",\n \"label\": \"9×19 mm\",\n \"diameter\": 9,\n \"bulletGrams\": 7.5,\n \"muzzleSpeed\": 365,\n \"dragPer100m\": 0.2,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"38spl\",\n \"label\": \".38 Special\",\n \"diameter\": 9.1,\n \"bulletGrams\": 10.2,\n \"muzzleSpeed\": 247,\n \"dragPer100m\": 0.2,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"357mag\",\n \"label\": \".357 Magnum\",\n \"diameter\": 9.1,\n \"bulletGrams\": 10.2,\n \"muzzleSpeed\": 396,\n \"dragPer100m\": 0.18,\n \"kind\": \"hp\"\n },\n {\n \"id\": \"40sw\",\n \"label\": \".40 S&W\",\n \"diameter\": 10.2,\n \"bulletGrams\": 11.7,\n \"muzzleSpeed\": 310,\n \"dragPer100m\": 0.2,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"45acp\",\n \"label\": \".45 ACP\",\n \"diameter\": 11.5,\n \"bulletGrams\": 14.9,\n \"muzzleSpeed\": 254,\n \"dragPer100m\": 0.2,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"380acp\",\n \"label\": \".380 ACP\",\n \"diameter\": 9,\n \"bulletGrams\": 6.2,\n \"muzzleSpeed\": 295,\n \"dragPer100m\": 0.22,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"5_56x45\",\n \"label\": \"5.56×45 mm\",\n \"diameter\": 5.7,\n \"bulletGrams\": 4,\n \"muzzleSpeed\": 935,\n \"dragPer100m\": 0.1,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"7_62x39\",\n \"label\": \"7.62×39 mm\",\n \"diameter\": 7.9,\n \"bulletGrams\": 8,\n \"muzzleSpeed\": 725,\n \"dragPer100m\": 0.1,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"7_62x51\",\n \"label\": \"7.62×51 mm (.308)\",\n \"diameter\": 7.8,\n \"bulletGrams\": 9.7,\n \"muzzleSpeed\": 850,\n \"dragPer100m\": 0.08,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"338lapua\",\n \"label\": \".338 Lapua Magnum\",\n \"diameter\": 8.6,\n \"bulletGrams\": 16.2,\n \"muzzleSpeed\": 903,\n \"dragPer100m\": 0.06,\n \"kind\": \"fmj\"\n },\n {\n \"id\": \"50bmg\",\n \"label\": \".50 BMG\",\n \"diameter\": 12.7,\n \"bulletGrams\": 42,\n \"muzzleSpeed\": 925,\n \"dragPer100m\": 0.05,\n \"kind\": \"ap\"\n },\n {\n \"id\": \"12ga_00buck\",\n \"label\": \"12 ga 00 buck\",\n \"diameter\": 8.4,\n \"bulletGrams\": 3.5,\n \"muzzleSpeed\": 414,\n \"pellets\": 9,\n \"dragPer100m\": 0.45,\n \"kind\": \"buck\"\n },\n {\n \"id\": \"12ga_slug\",\n \"label\": \"12 ga slug\",\n \"diameter\": 18.5,\n \"bulletGrams\": 28,\n \"muzzleSpeed\": 463,\n \"dragPer100m\": 0.3,\n \"kind\": \"slug\"\n },\n {\n \"id\": \"12ga_birdshot\",\n \"label\": \"12 ga birdshot\",\n \"diameter\": 2.4,\n \"bulletGrams\": 0.2,\n \"muzzleSpeed\": 400,\n \"pellets\": 90,\n \"dragPer100m\": 0.6,\n \"kind\": \"birdshot\"\n },\n {\n \"id\": \"20ga_buck\",\n \"label\": \"20 ga buck\",\n \"diameter\": 6.9,\n \"bulletGrams\": 1.3,\n \"muzzleSpeed\": 400,\n \"pellets\": 20,\n \"dragPer100m\": 0.5,\n \"kind\": \"buck\"\n },\n {\n \"id\": \"arrow\",\n \"label\": \"Arrow (compound bow)\",\n \"diameter\": 7,\n \"bulletGrams\": 25,\n \"muzzleSpeed\": 90,\n \"dragPer100m\": 0.12,\n \"kind\": \"arrow\"\n },\n {\n \"id\": \"crossbow_bolt\",\n \"label\": \"Crossbow bolt\",\n \"diameter\": 8,\n \"bulletGrams\": 20,\n \"muzzleSpeed\": 122,\n \"dragPer100m\": 0.12,\n \"kind\": \"bolt\"\n }\n]\n","[\n {\n \"id\": \"hand\",\n \"name\": \"Hand\",\n \"category\": \"hand\",\n \"action\": {\n \"kind\": \"hand\",\n \"reach\": 2\n },\n \"mass\": 0,\n \"tags\": [\n \"grab\"\n ]\n },\n {\n \"id\": \"pistol_9mm\",\n \"name\": \"9 mm service pistol\",\n \"category\": \"pistol\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"9x19\",\n \"rpm\": 300,\n \"modes\": [\n \"semi\"\n ],\n \"magazine\": 15,\n \"reload\": 2,\n \"barrel\": 1,\n \"spreadDeg\": 1,\n \"bloomDeg\": 0.6,\n \"recoveryDegPerS\": 4,\n \"recoil\": [\n 1.2,\n 0.4\n ],\n \"range\": 50,\n \"noise\": 150\n },\n \"mass\": 0.9,\n \"tags\": [\n \"sidearm\"\n ]\n },\n {\n \"id\": \"pistol_45\",\n \"name\": \".45 ACP pistol\",\n \"category\": \"pistol\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"45acp\",\n \"rpm\": 280,\n \"modes\": [\n \"semi\"\n ],\n \"magazine\": 8,\n \"reload\": 2.2,\n \"barrel\": 1,\n \"spreadDeg\": 1.1,\n \"bloomDeg\": 0.8,\n \"recoveryDegPerS\": 4,\n \"recoil\": [\n 1.8,\n 0.6\n ],\n \"range\": 50,\n \"noise\": 160\n },\n \"mass\": 1.1,\n \"tags\": [\n \"sidearm\"\n ]\n },\n {\n \"id\": \"pistol_22\",\n \"name\": \".22 LR pistol\",\n \"category\": \"pistol\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"22lr\",\n \"rpm\": 360,\n \"modes\": [\n \"semi\"\n ],\n \"magazine\": 10,\n \"reload\": 1.8,\n \"barrel\": 1,\n \"spreadDeg\": 0.9,\n \"bloomDeg\": 0.3,\n \"recoveryDegPerS\": 5,\n \"recoil\": [\n 0.5,\n 0.2\n ],\n \"range\": 40,\n \"noise\": 90\n },\n \"mass\": 0.7,\n \"tags\": [\n \"sidearm\"\n ]\n },\n {\n \"id\": \"revolver_357\",\n \"name\": \".357 Magnum revolver\",\n \"category\": \"revolver\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"357mag\",\n \"rpm\": 150,\n \"modes\": [\n \"single\"\n ],\n \"magazine\": 6,\n \"reload\": 4,\n \"barrel\": 1.05,\n \"spreadDeg\": 0.8,\n \"bloomDeg\": 1,\n \"recoveryDegPerS\": 3,\n \"recoil\": [\n 3,\n 0.9\n ],\n \"range\": 60,\n \"noise\": 220\n },\n \"mass\": 1.2,\n \"tags\": [\n \"sidearm\"\n ]\n },\n {\n \"id\": \"revolver_38\",\n \"name\": \".38 Special revolver\",\n \"category\": \"revolver\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"38spl\",\n \"rpm\": 160,\n \"modes\": [\n \"single\"\n ],\n \"magazine\": 6,\n \"reload\": 3.8,\n \"barrel\": 0.95,\n \"spreadDeg\": 0.9,\n \"bloomDeg\": 0.7,\n \"recoveryDegPerS\": 3.5,\n \"recoil\": [\n 1.6,\n 0.5\n ],\n \"range\": 45,\n \"noise\": 170\n },\n \"mass\": 0.9,\n \"tags\": [\n \"sidearm\"\n ]\n },\n {\n \"id\": \"smg_9mm\",\n \"name\": \"9 mm submachine gun\",\n \"category\": \"smg\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"9x19\",\n \"rpm\": 800,\n \"modes\": [\n \"auto\",\n \"burst\",\n \"semi\"\n ],\n \"burst\": 3,\n \"magazine\": 30,\n \"reload\": 2.4,\n \"barrel\": 1.1,\n \"spreadDeg\": 1.5,\n \"bloomDeg\": 0.35,\n \"recoveryDegPerS\": 6,\n \"recoil\": [\n 0.9,\n 0.5\n ],\n \"range\": 80,\n \"noise\": 180\n },\n \"mass\": 2.6,\n \"tags\": [\n \"automatic\"\n ]\n },\n {\n \"id\": \"carbine_22\",\n \"name\": \".22 LR carbine\",\n \"category\": \"carbine\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"22lr\",\n \"rpm\": 300,\n \"modes\": [\n \"semi\"\n ],\n \"magazine\": 10,\n \"reload\": 2.2,\n \"barrel\": 1.4,\n \"spreadDeg\": 0.5,\n \"bloomDeg\": 0.15,\n \"recoveryDegPerS\": 5,\n \"recoil\": [\n 0.4,\n 0.15\n ],\n \"range\": 80,\n \"noise\": 100\n },\n \"mass\": 2.4,\n \"tags\": [\n \"small_game\"\n ]\n },\n {\n \"id\": \"rifle_5_56\",\n \"name\": \"5.56 mm assault rifle\",\n \"category\": \"rifle\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"5_56x45\",\n \"rpm\": 750,\n \"modes\": [\n \"auto\",\n \"burst\",\n \"semi\"\n ],\n \"burst\": 3,\n \"magazine\": 30,\n \"reload\": 2.5,\n \"barrel\": 1,\n \"spreadDeg\": 0.6,\n \"bloomDeg\": 0.25,\n \"recoveryDegPerS\": 5,\n \"recoil\": [\n 1,\n 0.6\n ],\n \"range\": 400,\n \"noise\": 300\n },\n \"mass\": 3.4,\n \"tags\": [\n \"automatic\"\n ]\n },\n {\n \"id\": \"rifle_7_62x39\",\n \"name\": \"7.62×39 mm assault rifle\",\n \"category\": \"rifle\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"7_62x39\",\n \"rpm\": 600,\n \"modes\": [\n \"auto\",\n \"semi\"\n ],\n \"magazine\": 30,\n \"reload\": 2.8,\n \"barrel\": 1,\n \"spreadDeg\": 0.8,\n \"bloomDeg\": 0.35,\n \"recoveryDegPerS\": 4.5,\n \"recoil\": [\n 1.5,\n 0.8\n ],\n \"range\": 350,\n \"noise\": 320\n },\n \"mass\": 3.8,\n \"tags\": [\n \"automatic\"\n ]\n },\n {\n \"id\": \"rifle_bolt_308\",\n \"name\": \".308 bolt-action rifle\",\n \"category\": \"rifle\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"7_62x51\",\n \"rpm\": 40,\n \"modes\": [\n \"bolt\"\n ],\n \"magazine\": 5,\n \"reload\": 3.5,\n \"barrel\": 1.05,\n \"spreadDeg\": 0.25,\n \"bloomDeg\": 0.3,\n \"recoveryDegPerS\": 3,\n \"recoil\": [\n 3,\n 0.5\n ],\n \"range\": 800,\n \"noise\": 350\n },\n \"mass\": 4,\n \"tags\": [\n \"hunting\"\n ]\n },\n {\n \"id\": \"sniper_338\",\n \"name\": \".338 Lapua sniper rifle\",\n \"category\": \"sniper\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"338lapua\",\n \"rpm\": 35,\n \"modes\": [\n \"bolt\"\n ],\n \"magazine\": 5,\n \"reload\": 4,\n \"barrel\": 1.05,\n \"spreadDeg\": 0.1,\n \"bloomDeg\": 0.3,\n \"recoveryDegPerS\": 2.5,\n \"recoil\": [\n 4.5,\n 0.7\n ],\n \"range\": 1500,\n \"noise\": 450\n },\n \"mass\": 6.5,\n \"tags\": [\n \"long_range\"\n ]\n },\n {\n \"id\": \"anti_materiel_50\",\n \"name\": \".50 BMG anti-materiel rifle\",\n \"category\": \"sniper\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"50bmg\",\n \"rpm\": 30,\n \"modes\": [\n \"semi\"\n ],\n \"magazine\": 10,\n \"reload\": 4.5,\n \"barrel\": 1.05,\n \"spreadDeg\": 0.15,\n \"bloomDeg\": 0.5,\n \"recoveryDegPerS\": 2,\n \"recoil\": [\n 7,\n 1.2\n ],\n \"range\": 1800,\n \"noise\": 600\n },\n \"mass\": 12.5,\n \"tags\": [\n \"long_range\",\n \"heavy\"\n ]\n },\n {\n \"id\": \"shotgun_pump_12\",\n \"name\": \"12 gauge pump-action shotgun\",\n \"category\": \"shotgun\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"12ga_00buck\",\n \"rpm\": 60,\n \"modes\": [\n \"pump\"\n ],\n \"magazine\": 6,\n \"reload\": 0.6,\n \"perRound\": true,\n \"barrel\": 1,\n \"spreadDeg\": 1,\n \"bloomDeg\": 0.5,\n \"recoveryDegPerS\": 3,\n \"pelletSpreadDeg\": 3,\n \"recoil\": [\n 4,\n 1\n ],\n \"range\": 40,\n \"noise\": 400\n },\n \"mass\": 3.2,\n \"tags\": [\n \"shotgun\"\n ]\n },\n {\n \"id\": \"shotgun_double_12\",\n \"name\": \"12 gauge double-barrel shotgun\",\n \"category\": \"shotgun\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"12ga_00buck\",\n \"rpm\": 120,\n \"modes\": [\n \"break\"\n ],\n \"magazine\": 2,\n \"reload\": 3.5,\n \"barrel\": 1,\n \"spreadDeg\": 1,\n \"bloomDeg\": 0.5,\n \"recoveryDegPerS\": 3,\n \"pelletSpreadDeg\": 3,\n \"recoil\": [\n 4.5,\n 1.2\n ],\n \"range\": 35,\n \"noise\": 400\n },\n \"mass\": 3,\n \"tags\": [\n \"shotgun\"\n ]\n },\n {\n \"id\": \"shotgun_semi_12\",\n \"name\": \"12 gauge semi-automatic shotgun\",\n \"category\": \"shotgun\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"12ga_00buck\",\n \"rpm\": 180,\n \"modes\": [\n \"semi\"\n ],\n \"magazine\": 5,\n \"reload\": 0.7,\n \"perRound\": true,\n \"barrel\": 1,\n \"spreadDeg\": 1,\n \"bloomDeg\": 0.5,\n \"recoveryDegPerS\": 3,\n \"pelletSpreadDeg\": 3,\n \"recoil\": [\n 3.4,\n 1\n ],\n \"range\": 40,\n \"noise\": 400\n },\n \"mass\": 3.4,\n \"tags\": [\n \"shotgun\"\n ]\n },\n {\n \"id\": \"bow_compound\",\n \"name\": \"Compound bow\",\n \"category\": \"bow\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"arrow\",\n \"rpm\": 20,\n \"modes\": [\n \"single\"\n ],\n \"magazine\": 1,\n \"reload\": 1.5,\n \"barrel\": 1,\n \"spreadDeg\": 0.4,\n \"bloomDeg\": 0.4,\n \"recoveryDegPerS\": 2,\n \"recoil\": [\n 0.3,\n 0.1\n ],\n \"range\": 60,\n \"noise\": 20\n },\n \"mass\": 1.8,\n \"tags\": [\n \"silent\"\n ]\n },\n {\n \"id\": \"crossbow\",\n \"name\": \"Crossbow\",\n \"category\": \"crossbow\",\n \"action\": {\n \"kind\": \"firearm\",\n \"caliber\": \"crossbow_bolt\",\n \"rpm\": 8,\n \"modes\": [\n \"single\"\n ],\n \"magazine\": 1,\n \"reload\": 4,\n \"barrel\": 1,\n \"spreadDeg\": 0.3,\n \"bloomDeg\": 0.3,\n \"recoveryDegPerS\": 2,\n \"recoil\": [\n 0.5,\n 0.1\n ],\n \"range\": 70,\n \"noise\": 25\n },\n \"mass\": 3,\n \"tags\": [\n \"silent\"\n ]\n },\n {\n \"id\": \"hammer\",\n \"name\": \"Hammer\",\n \"category\": \"melee_blunt\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"blunt\",\n \"energy\": 60,\n \"radius\": 0.08,\n \"reach\": 0.7,\n \"rpm\": 70,\n \"noise\": 6\n },\n \"mass\": 1\n },\n {\n \"id\": \"sledgehammer\",\n \"name\": \"Sledgehammer\",\n \"category\": \"melee_blunt\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"blunt\",\n \"energy\": 300,\n \"radius\": 0.15,\n \"reach\": 1.1,\n \"rpm\": 30,\n \"noise\": 8\n },\n \"mass\": 5.5,\n \"tags\": [\n \"heavy\"\n ]\n },\n {\n \"id\": \"baseball_bat\",\n \"name\": \"Baseball bat\",\n \"category\": \"melee_blunt\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"blunt\",\n \"energy\": 150,\n \"radius\": 0.1,\n \"reach\": 1,\n \"rpm\": 60,\n \"noise\": 7\n },\n \"mass\": 0.9\n },\n {\n \"id\": \"crowbar\",\n \"name\": \"Crowbar\",\n \"category\": \"melee_blunt\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"blunt\",\n \"energy\": 120,\n \"radius\": 0.08,\n \"reach\": 0.9,\n \"rpm\": 60,\n \"noise\": 7\n },\n \"mass\": 2,\n \"tags\": [\n \"pry\"\n ]\n },\n {\n \"id\": \"machete\",\n \"name\": \"Machete\",\n \"category\": \"melee_blade\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"slash\",\n \"energy\": 140,\n \"radius\": 0.06,\n \"reach\": 0.8,\n \"rpm\": 80,\n \"noise\": 6\n },\n \"mass\": 0.8\n },\n {\n \"id\": \"axe\",\n \"name\": \"Axe\",\n \"category\": \"melee_blade\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"slash\",\n \"energy\": 250,\n \"radius\": 0.08,\n \"reach\": 0.9,\n \"rpm\": 45,\n \"noise\": 8\n },\n \"mass\": 1.6\n },\n {\n \"id\": \"knife\",\n \"name\": \"Knife\",\n \"category\": \"melee_blade\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"slash\",\n \"energy\": 40,\n \"radius\": 0.03,\n \"reach\": 0.4,\n \"rpm\": 100,\n \"noise\": 5\n },\n \"mass\": 0.2\n },\n {\n \"id\": \"fists\",\n \"name\": \"Fists\",\n \"category\": \"melee_blunt\",\n \"action\": {\n \"kind\": \"melee\",\n \"damage\": \"blunt\",\n \"energy\": 25,\n \"radius\": 0.1,\n \"reach\": 0.6,\n \"rpm\": 120,\n \"noise\": 5\n },\n \"mass\": 0\n },\n {\n \"id\": \"lighter\",\n \"name\": \"Lighter\",\n \"category\": \"flame\",\n \"action\": {\n \"kind\": \"flame\",\n \"temperature\": 400,\n \"radius\": 0.03,\n \"range\": 0.15,\n \"fuelPerSecond\": 0.02,\n \"fuel\": 60,\n \"noise\": 0\n },\n \"mass\": 0.05,\n \"tags\": [\n \"fire\"\n ]\n },\n {\n \"id\": \"flamethrower\",\n \"name\": \"Flamethrower\",\n \"category\": \"flame\",\n \"action\": {\n \"kind\": \"flame\",\n \"temperature\": 900,\n \"radius\": 0.6,\n \"range\": 6,\n \"fuelPerSecond\": 1,\n \"fuel\": 20,\n \"cone\": true,\n \"noise\": 20\n },\n \"mass\": 15,\n \"tags\": [\n \"fire\"\n ]\n },\n {\n \"id\": \"molotov\",\n \"name\": \"Molotov cocktail\",\n \"category\": \"throwable\",\n \"action\": {\n \"kind\": \"throwable\",\n \"energy\": 500,\n \"radius\": 1.5,\n \"fuse\": 0,\n \"throwSpeed\": 12,\n \"fire\": {\n \"temperature\": 700,\n \"radius\": 1.5,\n \"seconds\": 12\n },\n \"noise\": 60\n },\n \"mass\": 0.8,\n \"tags\": [\n \"fire\",\n \"improvised\"\n ]\n },\n {\n \"id\": \"cutting_torch\",\n \"name\": \"Oxy-fuel cutting torch\",\n \"category\": \"heat\",\n \"action\": {\n \"kind\": \"heat\",\n \"temperature\": 3000,\n \"radius\": 0.02,\n \"range\": 0.25,\n \"fuelPerSecond\": 0.05,\n \"fuel\": 30,\n \"noise\": 15\n },\n \"mass\": 4,\n \"tags\": [\n \"fire\",\n \"cutting\"\n ]\n },\n {\n \"id\": \"blowtorch\",\n \"name\": \"Blowtorch\",\n \"category\": \"heat\",\n \"action\": {\n \"kind\": \"heat\",\n \"temperature\": 1300,\n \"radius\": 0.04,\n \"range\": 0.3,\n \"fuelPerSecond\": 0.04,\n \"fuel\": 30,\n \"noise\": 10\n },\n \"mass\": 0.6,\n \"tags\": [\n \"fire\"\n ]\n },\n {\n \"id\": \"frag_grenade\",\n \"name\": \"Fragmentation grenade\",\n \"category\": \"throwable\",\n \"action\": {\n \"kind\": \"throwable\",\n \"energy\": 200000,\n \"radius\": 6,\n \"fuse\": 4,\n \"throwSpeed\": 15,\n \"noise\": 400\n },\n \"mass\": 0.45,\n \"tags\": [\n \"explosive\"\n ]\n },\n {\n \"id\": \"pipe_bomb\",\n \"name\": \"Pipe bomb\",\n \"category\": \"throwable\",\n \"action\": {\n \"kind\": \"throwable\",\n \"energy\": 100000,\n \"radius\": 4,\n \"fuse\": 3,\n \"throwSpeed\": 13,\n \"noise\": 350\n },\n \"mass\": 0.7,\n \"tags\": [\n \"explosive\",\n \"improvised\"\n ]\n },\n {\n \"id\": \"screwdriver\",\n \"name\": \"Screwdriver\",\n \"category\": \"tool\",\n \"action\": {\n \"kind\": \"tool\",\n \"tool\": \"screwdriver\",\n \"reach\": 0.5,\n \"noise\": 5\n },\n \"mass\": 0.15\n },\n {\n \"id\": \"wrench\",\n \"name\": \"Wrench\",\n \"category\": \"tool\",\n \"action\": {\n \"kind\": \"tool\",\n \"tool\": \"wrench\",\n \"reach\": 0.6,\n \"noise\": 6\n },\n \"mass\": 0.5\n },\n {\n \"id\": \"pry_bar\",\n \"name\": \"Pry bar\",\n \"category\": \"tool\",\n \"action\": {\n \"kind\": \"tool\",\n \"tool\": \"pry_bar\",\n \"reach\": 0.8,\n \"noise\": 8\n },\n \"mass\": 0.8\n },\n {\n \"id\": \"hacksaw\",\n \"name\": \"Hacksaw\",\n \"category\": \"tool\",\n \"action\": {\n \"kind\": \"tool\",\n \"tool\": \"saw\",\n \"reach\": 0.7,\n \"noise\": 10\n },\n \"mass\": 0.6\n },\n {\n \"id\": \"utility_knife\",\n \"name\": \"Utility knife\",\n \"category\": \"tool\",\n \"action\": {\n \"kind\": \"tool\",\n \"tool\": \"knife\",\n \"reach\": 0.3,\n \"noise\": 3\n },\n \"mass\": 0.1\n },\n {\n \"id\": \"claw_hammer\",\n \"name\": \"Claw hammer\",\n \"category\": \"tool\",\n \"action\": {\n \"kind\": \"tool\",\n \"tool\": \"hammer\",\n \"reach\": 0.5,\n \"noise\": 8\n },\n \"mass\": 0.7\n },\n {\n \"id\": \"extinguisher\",\n \"name\": \"Fire extinguisher\",\n \"category\": \"extinguisher\",\n \"action\": {\n \"kind\": \"extinguisher\",\n \"range\": 4,\n \"coolC\": 300,\n \"charge\": 12,\n \"noise\": 25\n },\n \"mass\": 5,\n \"tags\": [\n \"safety\"\n ]\n }\n]\n","/** Locales shipped with the package. Unknown locales fall back to `en`. */\nexport type WeaponsLocale = 'en' | 'pt-BR'\n\nexport interface WeaponsStrings {\n /** Display name of each weapon id. */\n weapons: Record<string, string>\n /** Display name of each fire mode. */\n modes: Record<string, string>\n /** Display name of each weapon category. */\n categories: Record<string, string>\n}\n\nconst modesEn = { single: 'single action', semi: 'semi-automatic', burst: 'burst', auto: 'automatic', pump: 'pump action', bolt: 'bolt action', lever: 'lever action', break: 'break action' }\nconst categoriesEn = {\n pistol: 'pistol', revolver: 'revolver', smg: 'submachine gun', rifle: 'rifle', carbine: 'carbine', sniper: 'sniper rifle', shotgun: 'shotgun',\n bow: 'bow', crossbow: 'crossbow', melee_blunt: 'blunt melee', melee_blade: 'bladed melee', flame: 'flame', heat: 'heat', throwable: 'throwable',\n tool: 'tool', extinguisher: 'extinguisher', hand: 'hand',\n}\n\nexport const locales: Record<WeaponsLocale, WeaponsStrings> = {\n en: {\n weapons: {\n hand: 'Hand', pistol_9mm: '9 mm service pistol', pistol_45: '.45 ACP pistol', pistol_22: '.22 LR pistol', revolver_357: '.357 Magnum revolver',\n revolver_38: '.38 Special revolver', smg_9mm: '9 mm submachine gun', carbine_22: '.22 LR carbine', rifle_5_56: '5.56 mm assault rifle',\n rifle_7_62x39: '7.62×39 mm assault rifle', rifle_bolt_308: '.308 bolt-action rifle', sniper_338: '.338 Lapua sniper rifle',\n anti_materiel_50: '.50 BMG anti-materiel rifle', shotgun_pump_12: '12 gauge pump-action shotgun', shotgun_double_12: '12 gauge double-barrel shotgun',\n shotgun_semi_12: '12 gauge semi-automatic shotgun', bow_compound: 'Compound bow', crossbow: 'Crossbow', hammer: 'Hammer', sledgehammer: 'Sledgehammer',\n baseball_bat: 'Baseball bat', crowbar: 'Crowbar', machete: 'Machete', axe: 'Axe', knife: 'Knife', fists: 'Fists', lighter: 'Lighter',\n flamethrower: 'Flamethrower', molotov: 'Molotov cocktail', cutting_torch: 'Oxy-fuel cutting torch', blowtorch: 'Blowtorch',\n frag_grenade: 'Fragmentation grenade', pipe_bomb: 'Pipe bomb', screwdriver: 'Screwdriver', wrench: 'Wrench', pry_bar: 'Pry bar', hacksaw: 'Hacksaw',\n utility_knife: 'Utility knife', claw_hammer: 'Claw hammer', extinguisher: 'Fire extinguisher',\n },\n modes: modesEn,\n categories: categoriesEn,\n },\n 'pt-BR': {\n weapons: {\n hand: 'mão', pistol_9mm: 'pistola 9 mm', pistol_45: 'pistola .45', pistol_22: 'pistola .22', revolver_357: 'revólver .357', revolver_38: 'revólver .38',\n smg_9mm: 'submetralhadora 9 mm', carbine_22: 'carabina .22', rifle_5_56: 'fuzil 5,56', rifle_7_62x39: 'fuzil 7,62×39', rifle_bolt_308: 'fuzil de ferrolho .308',\n sniper_338: 'fuzil de precisão .338', anti_materiel_50: 'fuzil antimaterial .50', shotgun_pump_12: 'espingarda de repetição calibre 12',\n shotgun_double_12: 'espingarda de dois canos calibre 12', shotgun_semi_12: 'espingarda semiautomática calibre 12', bow_compound: 'arco composto',\n crossbow: 'besta', hammer: 'martelo', sledgehammer: 'marreta', baseball_bat: 'taco de beisebol', crowbar: 'pé de cabra', machete: 'facão', axe: 'machado',\n knife: 'faca', fists: 'punhos', lighter: 'isqueiro', flamethrower: 'lança-chamas', molotov: 'coquetel molotov', cutting_torch: 'maçarico de corte',\n blowtorch: 'maçarico', frag_grenade: 'granada de fragmentação', pipe_bomb: 'bomba caseira', screwdriver: 'chave de fenda', wrench: 'chave inglesa',\n pry_bar: 'alavanca', hacksaw: 'serra de arco', utility_knife: 'estilete', claw_hammer: 'martelo de unha', extinguisher: 'extintor',\n },\n modes: { single: 'tiro único', semi: 'semiautomático', burst: 'rajada', auto: 'automático', pump: 'repetição', bolt: 'ferrolho', lever: 'alavanca', break: 'basculante' },\n categories: {\n pistol: 'pistola', revolver: 'revólver', smg: 'submetralhadora', rifle: 'fuzil', carbine: 'carabina', sniper: 'fuzil de precisão', shotgun: 'espingarda',\n bow: 'arco', crossbow: 'besta', melee_blunt: 'corpo a corpo contundente', melee_blade: 'corpo a corpo cortante', flame: 'chama', heat: 'calor',\n throwable: 'arremessável', tool: 'ferramenta', extinguisher: 'extintor', hand: 'mão',\n },\n },\n}\n\nexport const resolveStrings = (locale: string | undefined): WeaponsStrings => locales[(locale as WeaponsLocale) ?? 'en'] ?? locales.en\n","import type { Vec3 } from './types'\n\n/** Deterministic mulberry32 generator; returns floats in [0, 1). */\nexport const createRng = (seed: number): (() => number) => {\n let a = seed >>> 0\n return () => {\n a = (a + 0x6d2b79f5) >>> 0\n let t = a\n t = Math.imul(t ^ (t >>> 15), t | 1)\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61)\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296\n }\n}\n\nexport const normalize = (v: Vec3): Vec3 => {\n const l = Math.hypot(v[0], v[1], v[2])\n return l > 1e-12 ? [v[0] / l, v[1] / l, v[2] / l] : [0, 0, -1]\n}\n\nconst cross = (a: Vec3, b: Vec3): Vec3 => [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]\n\n/** Uniform direction inside a cone of half-angle `deg` around the unit vector `dir` (uniform over the solid angle). */\nexport const sampleCone = (dir: Vec3, deg: number, rng: () => number): Vec3 => {\n if (deg <= 0) return dir\n const cosMax = Math.cos((deg * Math.PI) / 180)\n const cosT = 1 - rng() * (1 - cosMax)\n const sinT = Math.sqrt(Math.max(0, 1 - cosT * cosT))\n const phi = rng() * Math.PI * 2\n const helper: Vec3 = Math.abs(dir[1]) < 0.9 ? [0, 1, 0] : [1, 0, 0]\n const u = normalize(cross(helper, dir))\n const v = cross(dir, u)\n const cx = Math.cos(phi) * sinT\n const cy = Math.sin(phi) * sinT\n return normalize([\n u[0] * cx + v[0] * cy + dir[0] * cosT,\n u[1] * cx + v[1] * cy + dir[1] * cosT,\n u[2] * cx + v[2] * cy + dir[2] * cosT,\n ])\n}\n","import { createRng, normalize, sampleCone } from './rng'\nimport type {\n CaliberDef,\n FireMode,\n Shot,\n TriggerResult,\n Use,\n Vec3,\n WeaponAction,\n WeaponDef,\n WeaponState,\n} from './types'\n\nconst EPS = 1e-9\nconst DEFAULT_THROWABLES = 3\n/** Total spread (base + bloom) never exceeds this many times the base spread. */\nexport const BLOOM_CAP = 4\n/** Fraction of the throw speed added upwards so a throw arcs. */\nconst THROW_LIFT = 0.15\n\n/** Muzzle energy in joules of ONE projectile (a bullet, or one pellet): 0.5 × mass × speed², speed scaled by the barrel factor. */\nexport const muzzleEnergy = (caliber: CaliberDef, barrel = 1): number => {\n const v = caliber.muzzleSpeed * barrel\n return 0.5 * (caliber.bulletGrams / 1000) * v * v\n}\n\nexport interface WeaponStateInit {\n def: WeaponDef\n caliber: CaliberDef | null\n seed: number\n reserve?: number\n}\n\nconst result = (status: TriggerResult['status'], extra: Partial<TriggerResult> = {}): TriggerResult => ({\n shots: [],\n uses: [],\n status,\n recoil: [0, 0],\n noise: 0,\n ...extra,\n})\n\n/** Runtime of one weapon. See `WeaponState` for the contract. */\nexport class WeaponRuntime implements WeaponState {\n readonly def: WeaponDef\n readonly caliber: CaliberDef | null\n reserve: number\n mode: FireMode\n private _ammo: number\n private readonly _capacity: number\n private readonly action: WeaponAction\n private readonly rng: () => number\n private readonly initialReserve: number\n\n private clock = 0\n /** Time already advanced by the other of update / trigger in the same frame (so calling both does not count `dt` twice). */\n private pend: { src: 'update' | 'trigger'; amt: number } | null = null\n private readyAt = 0\n private latched = false\n\n private _reloading = false\n private reloadEnd = 0\n\n /** Bloom degrees at `extraClock`. */\n private extra = 0\n private extraClock = 0\n\n constructor(init: WeaponStateInit) {\n this.def = init.def\n this.caliber = init.caliber\n this.action = init.def.action\n this.rng = createRng(init.seed)\n const a = this.action\n this.mode = a.kind === 'firearm' ? a.modes[0] ?? 'single' : 'single'\n switch (a.kind) {\n case 'firearm':\n this._capacity = a.magazine\n break\n case 'flame':\n case 'heat':\n this._capacity = a.fuel\n break\n case 'extinguisher':\n this._capacity = a.charge\n break\n case 'throwable':\n this._capacity = a.count ?? DEFAULT_THROWABLES\n break\n default:\n this._capacity = 0\n }\n this._ammo = this._capacity\n this.initialReserve = init.reserve ?? (a.kind === 'firearm' ? a.magazine * 3 : 0)\n this.reserve = this.initialReserve\n }\n\n get ammo(): number {\n return this._ammo\n }\n get capacity(): number {\n return this._capacity\n }\n get reloading(): boolean {\n return this._reloading\n }\n get spread(): number {\n if (this.action.kind !== 'firearm') return 0\n return this.action.spreadDeg + this.extraAt(this.clock)\n }\n\n private extraAt(t: number): number {\n if (this.action.kind !== 'firearm') return 0\n const rec = this.action.recoveryDegPerS ?? 4\n return Math.max(0, this.extra - rec * Math.max(0, t - this.extraClock))\n }\n\n // --- time -----------------------------------------------------------------------------------------------------------------------\n\n update(dt: number): void {\n const d = Math.max(0, dt)\n let eff = d\n if (this.pend && this.pend.src === 'trigger') {\n eff = Math.max(0, d - this.pend.amt)\n this.pend = null\n } else {\n this.pend = { src: 'update', amt: d }\n }\n this.clock += eff\n this.settle(this.clock)\n }\n\n /** Complete the reload steps that finish at or before `t`. */\n private settle(t: number): void {\n const a = this.action\n if (a.kind !== 'firearm') return\n while (this._reloading && this.reloadEnd <= t + EPS) {\n if (a.perRound) {\n if (this.reserve > 0 && this._ammo < this._capacity) {\n this._ammo += 1\n this.reserve -= 1\n }\n if (this._ammo >= this._capacity || this.reserve <= 0) this._reloading = false\n else this.reloadEnd += a.reload\n } else {\n const take = Math.min(this._capacity - this._ammo, this.reserve)\n this._ammo += take\n this.reserve -= take\n this._reloading = false\n }\n }\n }\n\n // --- commands -------------------------------------------------------------------------------------------------------------------\n\n release(): void {\n this.latched = false\n }\n\n reload(): boolean {\n const a = this.action\n if (a.kind === 'throwable') {\n if (this._ammo >= this._capacity || this.reserve <= 0) return false\n this._ammo += 1\n this.reserve -= 1\n return true\n }\n if (a.kind !== 'firearm' || this._reloading) return false\n if (this._ammo >= this._capacity || this.reserve <= 0) return false\n this._reloading = true\n this.reloadEnd = this.clock + a.reload\n return true\n }\n\n cycleMode(): FireMode {\n if (this.action.kind !== 'firearm') return this.mode\n const modes = this.action.modes\n const i = modes.indexOf(this.mode)\n this.mode = modes[(i + 1) % modes.length] ?? this.mode\n return this.mode\n }\n\n refill(): void {\n this._ammo = this._capacity\n this.reserve = this.initialReserve\n this._reloading = false\n this.readyAt = this.clock\n this.latched = false\n this.extra = 0\n }\n\n // --- trigger --------------------------------------------------------------------------------------------------------------------\n\n trigger(origin: Vec3, direction: Vec3, dt: number, held = false, source?: string): TriggerResult {\n const d = Math.max(0, dt)\n let overlap = 0\n if (this.pend && this.pend.src === 'update') {\n overlap = Math.min(this.pend.amt, d)\n this.pend = null\n } else {\n this.pend = { src: 'trigger', amt: d }\n }\n const start = this.clock - overlap\n const end = start + d\n this.settle(start)\n\n const dir = normalize(direction)\n let res: TriggerResult\n const a = this.action\n switch (a.kind) {\n case 'firearm':\n res = this.fireFirearm(a, origin, dir, start, end, held, source)\n break\n case 'melee':\n res = this.fireMelee(a, origin, dir, start, end)\n break\n case 'flame':\n case 'heat':\n res = this.fireFuel(a, origin, dir, d)\n break\n case 'extinguisher':\n res = this.fireExtinguisher(a, origin, dir, d)\n break\n case 'throwable':\n res = this.fireThrowable(a, origin, dir, held)\n break\n case 'tool':\n res = d > 0 ? result('ok', { uses: [{ kind: 'tool', tool: a.tool, reach: a.reach, duration: d, origin, direction: dir }], noise: a.noise }) : result('ok')\n break\n case 'hand':\n res = this.oncePerPull(held)\n ? result('ok', { uses: [{ kind: 'hand', reach: a.reach, origin, direction: dir }] })\n : result('cooldown')\n break\n }\n this.clock = Math.max(this.clock, end)\n this.settle(this.clock)\n return res\n }\n\n /** Semi-style gating: a held trigger that already fired does nothing until `release()` or a new pull (`held` false). */\n private oncePerPull(held: boolean): boolean {\n if (!held) this.latched = false\n if (this.latched) return false\n this.latched = true\n return true\n }\n\n private fireFirearm(a: Extract<WeaponAction, { kind: 'firearm' }>, origin: Vec3, dir: Vec3, start: number, end: number, held: boolean, source?: string): TriggerResult {\n if (this._reloading) {\n if (a.perRound && this._ammo > 0) this._reloading = false // a tube reload is interrupted by the trigger\n else return result('reloading')\n }\n const auto = this.mode === 'auto'\n if (!auto && !this.oncePerPull(held)) return result('cooldown')\n if (this._ammo <= 0) return result('empty')\n\n const iv = 60 / a.rpm\n const t0 = Math.max(start, this.readyAt)\n if (t0 > end + EPS) return result('cooldown')\n\n const res = result('ok')\n const fire = (t: number): void => {\n this.fireOne(a, origin, dir, t, res, source)\n }\n if (auto) {\n for (let t = t0, n = 0; this._ammo > 0 && (n === 0 ? t <= end + EPS : t < end - EPS); t += iv, n++) fire(t)\n } else if (this.mode === 'burst') {\n const count = Math.min(a.burst ?? 3, this._ammo)\n for (let k = 0; k < count; k++) fire(t0 + k * iv)\n } else {\n fire(t0)\n }\n return res\n }\n\n private fireOne(a: Extract<WeaponAction, { kind: 'firearm' }>, origin: Vec3, dir: Vec3, t: number, res: TriggerResult, source?: string): void {\n const cal = this.caliber as CaliberDef\n const barrel = a.barrel ?? 1\n const speed = cal.muzzleSpeed * barrel\n const energy = muzzleEnergy(cal, barrel)\n const drag = cal.dragPer100m ?? 0.1\n const energyAt = (distance: number): number => {\n const f = Math.pow(1 - drag, Math.max(0, distance) / 100)\n return energy * f * f\n }\n const bloomNow = this.extraAt(t)\n const spread = a.spreadDeg + bloomNow\n const aim = sampleCone(dir, spread, this.rng)\n const pellets = cal.pellets ?? 1\n const pelletSpread = pellets > 1 ? a.pelletSpreadDeg ?? 3 : 0\n for (let p = 0; p < pellets; p++) {\n const shot: Shot = {\n origin: [origin[0], origin[1], origin[2]],\n direction: sampleCone(aim, pelletSpread, this.rng),\n energy,\n caliber: cal.diameter,\n caliberId: cal.id,\n speed,\n energyAt,\n pellet: p,\n weapon: this.def.id,\n }\n if (source !== undefined) shot.source = source\n res.shots.push(shot)\n }\n this._ammo -= 1\n this.readyAt = t + 60 / a.rpm\n this.extra = Math.min(bloomNow + (a.bloomDeg ?? 0), a.spreadDeg * (BLOOM_CAP - 1))\n this.extraClock = t\n res.recoil = [res.recoil[0] + a.recoil[0], res.recoil[1] + (this.rng() * 2 - 1) * a.recoil[1]]\n res.noise = a.noise\n }\n\n private fireMelee(a: Extract<WeaponAction, { kind: 'melee' }>, origin: Vec3, dir: Vec3, start: number, end: number): TriggerResult {\n const t0 = Math.max(start, this.readyAt)\n if (t0 > end + EPS) return result('cooldown')\n this.readyAt = t0 + 60 / a.rpm\n const use: Use = { kind: 'melee', damage: a.damage, energy: a.energy, radius: a.radius, reach: a.reach, origin, direction: dir }\n return result('ok', { uses: [use], noise: a.noise })\n }\n\n private fireFuel(a: Extract<WeaponAction, { kind: 'flame' | 'heat' }>, origin: Vec3, dir: Vec3, dt: number): TriggerResult {\n if (this._ammo <= EPS) return result('no_fuel')\n if (dt <= 0) return result('ok')\n const need = a.fuelPerSecond * dt\n let duration = dt\n if (need > this._ammo) {\n duration = dt * (this._ammo / need)\n this._ammo = 0\n } else {\n this._ammo -= need\n }\n const use: Use =\n a.kind === 'flame'\n ? { kind: 'flame', temperature: a.temperature, radius: a.radius, range: a.range, cone: a.cone ?? false, duration, origin, direction: dir }\n : { kind: 'heat', temperature: a.temperature, radius: a.radius, range: a.range, duration, origin, direction: dir }\n return result('ok', { uses: [use], noise: a.noise })\n }\n\n private fireExtinguisher(a: Extract<WeaponAction, { kind: 'extinguisher' }>, origin: Vec3, dir: Vec3, dt: number): TriggerResult {\n if (this._ammo <= EPS) return result('no_fuel')\n if (dt <= 0) return result('ok')\n const duration = Math.min(dt, this._ammo)\n this._ammo -= duration\n return result('ok', { uses: [{ kind: 'extinguish', range: a.range, coolC: a.coolC, duration, origin, direction: dir }], noise: a.noise })\n }\n\n private fireThrowable(a: Extract<WeaponAction, { kind: 'throwable' }>, origin: Vec3, dir: Vec3, held: boolean): TriggerResult {\n if (!this.oncePerPull(held)) return result('cooldown')\n if (this._ammo <= 0) return result('empty')\n this._ammo -= 1\n const velocity: Vec3 = [dir[0] * a.throwSpeed, dir[1] * a.throwSpeed + a.throwSpeed * THROW_LIFT, dir[2] * a.throwSpeed]\n const use: Use = { kind: 'throw', energy: a.energy, radius: a.radius, fuse: a.fuse, velocity, origin }\n if (a.fire) use.fire = { ...a.fire }\n return result('ok', { uses: [use], noise: a.noise })\n }\n}\n","import calibersJson from './data/calibers.json'\nimport weaponsJson from './data/weapons.json'\nimport { resolveStrings } from './locale'\nimport type { Arsenal, ArsenalOptions, CaliberDef, CaliberId, WeaponCategory, WeaponDef, WeaponId, WeaponState } from './types'\nimport { muzzleEnergy, WeaponRuntime } from './weapon'\n\nexport const CALIBERS = calibersJson as unknown as CaliberDef[]\nexport const WEAPONS = weaponsJson as unknown as WeaponDef[]\n\n/** A reasonable starting kit for a test room or a sandbox. */\nexport const DEFAULT_LOADOUT: WeaponId[] = [\n 'hand', 'pistol_9mm', 'revolver_357', 'shotgun_pump_12', 'rifle_5_56', 'rifle_bolt_308', 'hammer', 'axe', 'crowbar', 'lighter', 'flamethrower',\n 'cutting_torch', 'molotov', 'frag_grenade', 'screwdriver', 'wrench', 'pry_bar', 'hacksaw', 'extinguisher',\n]\n\nexport { muzzleEnergy }\n\n/** Create an arsenal: the built-in calibres and weapons merged (by id) with the ones in `options`. */\nexport const createArsenal = (options: ArsenalOptions = {}): Arsenal => {\n const calibers = new Map<CaliberId, CaliberDef>()\n for (const c of [...CALIBERS, ...(options.calibers ?? [])]) calibers.set(c.id, c)\n const weapons = new Map<WeaponId, WeaponDef>()\n for (const w of [...WEAPONS, ...(options.weapons ?? [])]) weapons.set(w.id, w)\n const strings = resolveStrings(options.locale)\n const baseSeed = options.seed ?? 1\n let counter = 0\n\n const create = (id: WeaponId, opts: { seed?: number; reserve?: number } = {}): WeaponState => {\n const def = weapons.get(id)\n if (!def) throw new Error(`game-weapons: unknown weapon \"${id}\"`)\n let caliber: CaliberDef | null = null\n if (def.action.kind === 'firearm') {\n caliber = calibers.get(def.action.caliber) ?? null\n if (!caliber) throw new Error(`game-weapons: weapon \"${id}\" uses unknown calibre \"${def.action.caliber}\"`)\n }\n counter += 1\n const seed = opts.seed ?? (baseSeed + Math.imul(counter, 0x9e3779b1)) >>> 0\n return new WeaponRuntime({ def, caliber, seed, reserve: opts.reserve })\n }\n\n return {\n calibers,\n weapons,\n create,\n muzzleEnergy(caliber, barrel = 1) {\n const c = calibers.get(caliber)\n if (!c) throw new Error(`game-weapons: unknown calibre \"${caliber}\"`)\n return muzzleEnergy(c, barrel)\n },\n name(id) {\n const w = weapons.get(id)\n if (w) return strings.weapons[id] ?? w.name ?? id\n return strings.modes[id] ?? strings.categories[id] ?? calibers.get(id)?.label ?? id\n },\n list(category?: WeaponCategory) {\n const all = [...weapons.values()]\n return category ? all.filter((w) => w.category === category) : all\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA,IACE;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,SAAW;AAAA,MACX,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,SAAW;AAAA,MACX,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,SAAW;AAAA,MACX,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,OAAS;AAAA,MACT,UAAY;AAAA,MACZ,aAAe;AAAA,MACf,aAAe;AAAA,MACf,aAAe;AAAA,MACf,MAAQ;AAAA,IACV;AAAA,EACF;;;ACtKA;AAAA,IACE;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,KAAO;AAAA,QACP,OAAS;AAAA,UACP;AAAA,QACF;AAAA,QACA,UAAY;AAAA,QACZ,QAAU;AAAA,QACV,QAAU;AAAA,QACV,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,iBAAmB;AAAA,QACnB,QAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,QAAU;AAAA,QACV,QAAU;AAAA,QACV,QAAU;AAAA,QACV,OAAS;AAAA,QACT,KAAO;AAAA,QACP,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,QAAU;AAAA,QACV,QAAU;AAAA,QACV,QAAU;AAAA,QACV,OAAS;AAAA,QACT,KAAO;AAAA,QACP,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,QAAU;AAAA,QACV,QAAU;AAAA,QACV,QAAU;AAAA,QACV,OAAS;AAAA,QACT,KAAO;AAAA,QACP,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,QAAU;AAAA,QACV,QAAU;AAAA,QACV,QAAU;AAAA,QACV,OAAS;AAAA,QACT,KAAO;AAAA,QACP,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,QAAU;AAAA,QACV,QAAU;AAAA,QACV,QAAU;AAAA,QACV,OAAS;AAAA,QACT,KAAO;AAAA,QACP,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,QAAU;AAAA,QACV,QAAU;AAAA,QACV,QAAU;AAAA,QACV,OAAS;AAAA,QACT,KAAO;AAAA,QACP,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,QAAU;AAAA,QACV,QAAU;AAAA,QACV,QAAU;AAAA,QACV,OAAS;AAAA,QACT,KAAO;AAAA,QACP,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,QAAU;AAAA,QACV,QAAU;AAAA,QACV,QAAU;AAAA,QACV,OAAS;AAAA,QACT,KAAO;AAAA,QACP,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,aAAe;AAAA,QACf,QAAU;AAAA,QACV,OAAS;AAAA,QACT,eAAiB;AAAA,QACjB,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,aAAe;AAAA,QACf,QAAU;AAAA,QACV,OAAS;AAAA,QACT,eAAiB;AAAA,QACjB,MAAQ;AAAA,QACR,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,QAAU;AAAA,QACV,QAAU;AAAA,QACV,MAAQ;AAAA,QACR,YAAc;AAAA,QACd,MAAQ;AAAA,UACN,aAAe;AAAA,UACf,QAAU;AAAA,UACV,SAAW;AAAA,QACb;AAAA,QACA,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,aAAe;AAAA,QACf,QAAU;AAAA,QACV,OAAS;AAAA,QACT,eAAiB;AAAA,QACjB,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,aAAe;AAAA,QACf,QAAU;AAAA,QACV,OAAS;AAAA,QACT,eAAiB;AAAA,QACjB,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,QAAU;AAAA,QACV,QAAU;AAAA,QACV,MAAQ;AAAA,QACR,YAAc;AAAA,QACd,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,QAAU;AAAA,QACV,QAAU;AAAA,QACV,MAAQ;AAAA,QACR,YAAc;AAAA,QACd,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,QACR,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,OAAS;AAAA,QACT,QAAU;AAAA,QACV,OAAS;AAAA,MACX;AAAA,MACA,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;ACt1BA,MAAM,UAAU,EAAE,QAAQ,iBAAiB,MAAM,kBAAkB,OAAO,SAAS,MAAM,aAAa,MAAM,eAAe,MAAM,eAAe,OAAO,gBAAgB,OAAO,eAAe;AAC7L,MAAM,eAAe;AAAA,IACnB,QAAQ;AAAA,IAAU,UAAU;AAAA,IAAY,KAAK;AAAA,IAAkB,OAAO;AAAA,IAAS,SAAS;AAAA,IAAW,QAAQ;AAAA,IAAgB,SAAS;AAAA,IACpI,KAAK;AAAA,IAAO,UAAU;AAAA,IAAY,aAAa;AAAA,IAAe,aAAa;AAAA,IAAgB,OAAO;AAAA,IAAS,MAAM;AAAA,IAAQ,WAAW;AAAA,IACpI,MAAM;AAAA,IAAQ,cAAc;AAAA,IAAgB,MAAM;AAAA,EACpD;AAEO,MAAM,UAAiD;AAAA,IAC5D,IAAI;AAAA,MACF,SAAS;AAAA,QACP,MAAM;AAAA,QAAQ,YAAY;AAAA,QAAuB,WAAW;AAAA,QAAkB,WAAW;AAAA,QAAiB,cAAc;AAAA,QACxH,aAAa;AAAA,QAAwB,SAAS;AAAA,QAAuB,YAAY;AAAA,QAAkB,YAAY;AAAA,QAC/G,eAAe;AAAA,QAA4B,gBAAgB;AAAA,QAA0B,YAAY;AAAA,QACjG,kBAAkB;AAAA,QAA+B,iBAAiB;AAAA,QAAgC,mBAAmB;AAAA,QACrH,iBAAiB;AAAA,QAAmC,cAAc;AAAA,QAAgB,UAAU;AAAA,QAAY,QAAQ;AAAA,QAAU,cAAc;AAAA,QACxI,cAAc;AAAA,QAAgB,SAAS;AAAA,QAAW,SAAS;AAAA,QAAW,KAAK;AAAA,QAAO,OAAO;AAAA,QAAS,OAAO;AAAA,QAAS,SAAS;AAAA,QAC3H,cAAc;AAAA,QAAgB,SAAS;AAAA,QAAoB,eAAe;AAAA,QAA0B,WAAW;AAAA,QAC/G,cAAc;AAAA,QAAyB,WAAW;AAAA,QAAa,aAAa;AAAA,QAAe,QAAQ;AAAA,QAAU,SAAS;AAAA,QAAW,SAAS;AAAA,QAC1I,eAAe;AAAA,QAAiB,aAAa;AAAA,QAAe,cAAc;AAAA,MAC5E;AAAA,MACA,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,QACP,MAAM;AAAA,QAAO,YAAY;AAAA,QAAgB,WAAW;AAAA,QAAe,WAAW;AAAA,QAAe,cAAc;AAAA,QAAiB,aAAa;AAAA,QACzI,SAAS;AAAA,QAAwB,YAAY;AAAA,QAAgB,YAAY;AAAA,QAAc,eAAe;AAAA,QAAiB,gBAAgB;AAAA,QACvI,YAAY;AAAA,QAA0B,kBAAkB;AAAA,QAA0B,iBAAiB;AAAA,QACnG,mBAAmB;AAAA,QAAuC,iBAAiB;AAAA,QAAwC,cAAc;AAAA,QACjI,UAAU;AAAA,QAAS,QAAQ;AAAA,QAAW,cAAc;AAAA,QAAW,cAAc;AAAA,QAAoB,SAAS;AAAA,QAAe,SAAS;AAAA,QAAS,KAAK;AAAA,QAChJ,OAAO;AAAA,QAAQ,OAAO;AAAA,QAAU,SAAS;AAAA,QAAY,cAAc;AAAA,QAAgB,SAAS;AAAA,QAAoB,eAAe;AAAA,QAC/H,WAAW;AAAA,QAAY,cAAc;AAAA,QAA2B,WAAW;AAAA,QAAiB,aAAa;AAAA,QAAkB,QAAQ;AAAA,QACnI,SAAS;AAAA,QAAY,SAAS;AAAA,QAAiB,eAAe;AAAA,QAAY,aAAa;AAAA,QAAmB,cAAc;AAAA,MAC1H;AAAA,MACA,OAAO,EAAE,QAAQ,iBAAc,MAAM,qBAAkB,OAAO,UAAU,MAAM,iBAAc,MAAM,mBAAa,MAAM,YAAY,OAAO,YAAY,OAAO,aAAa;AAAA,MACxK,YAAY;AAAA,QACV,QAAQ;AAAA,QAAW,UAAU;AAAA,QAAY,KAAK;AAAA,QAAmB,OAAO;AAAA,QAAS,SAAS;AAAA,QAAY,QAAQ;AAAA,QAAqB,SAAS;AAAA,QAC5I,KAAK;AAAA,QAAQ,UAAU;AAAA,QAAS,aAAa;AAAA,QAA6B,aAAa;AAAA,QAA0B,OAAO;AAAA,QAAS,MAAM;AAAA,QACvI,WAAW;AAAA,QAAgB,MAAM;AAAA,QAAc,cAAc;AAAA,QAAY,MAAM;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AAEO,MAAM,iBAAiB,CAAC,WAA+C,QAAS,UAA4B,IAAI,KAAK,QAAQ;;;ACpD7H,MAAM,YAAY,CAAC,SAAiC;AACzD,QAAI,IAAI,SAAS;AACjB,WAAO,MAAM;AACX,UAAK,IAAI,eAAgB;AACzB,UAAI,IAAI;AACR,UAAI,KAAK,KAAK,IAAK,MAAM,IAAK,IAAI,CAAC;AACnC,WAAK,IAAI,KAAK,KAAK,IAAK,MAAM,GAAI,IAAI,EAAE;AACxC,eAAS,IAAK,MAAM,QAAS,KAAK;AAAA,IACpC;AAAA,EACF;AAEO,MAAM,YAAY,CAAC,MAAkB;AAC1C,UAAM,IAAI,KAAK,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrC,WAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;AAAA,EAC/D;AAEA,MAAM,QAAQ,CAAC,GAAS,MAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAGnH,MAAM,aAAa,CAAC,KAAW,KAAa,QAA4B;AAC7E,QAAI,OAAO,EAAG,QAAO;AACrB,UAAM,SAAS,KAAK,IAAK,MAAM,KAAK,KAAM,GAAG;AAC7C,UAAM,OAAO,IAAI,IAAI,KAAK,IAAI;AAC9B,UAAM,OAAO,KAAK,KAAK,KAAK,IAAI,GAAG,IAAI,OAAO,IAAI,CAAC;AACnD,UAAM,MAAM,IAAI,IAAI,KAAK,KAAK;AAC9B,UAAM,SAAe,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAClE,UAAM,IAAI,UAAU,MAAM,QAAQ,GAAG,CAAC;AACtC,UAAM,IAAI,MAAM,KAAK,CAAC;AACtB,UAAM,KAAK,KAAK,IAAI,GAAG,IAAI;AAC3B,UAAM,KAAK,KAAK,IAAI,GAAG,IAAI;AAC3B,WAAO,UAAU;AAAA,MACf,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;AAAA,MACjC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;AAAA,MACjC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;AAAA,IACnC,CAAC;AAAA,EACH;;;ACzBA,MAAM,MAAM;AACZ,MAAM,qBAAqB;AAEpB,MAAM,YAAY;AAEzB,MAAM,aAAa;AAGZ,MAAM,eAAe,CAAC,SAAqB,SAAS,MAAc;AACvE,UAAM,IAAI,QAAQ,cAAc;AAChC,WAAO,OAAO,QAAQ,cAAc,OAAQ,IAAI;AAAA,EAClD;AASA,MAAM,SAAS,CAAC,QAAiC,QAAgC,CAAC,OAAsB;AAAA,IACtG,OAAO,CAAC;AAAA,IACR,MAAM,CAAC;AAAA,IACP;AAAA,IACA,QAAQ,CAAC,GAAG,CAAC;AAAA,IACb,OAAO;AAAA,IACP,GAAG;AAAA,EACL;AAGO,MAAM,gBAAN,MAA2C;AAAA,IAwBhD,YAAY,MAAuB;AAvBnC,0BAAS;AACT,0BAAS;AACT;AACA;AACA,0BAAQ;AACR,0BAAiB;AACjB,0BAAiB;AACjB,0BAAiB;AACjB,0BAAiB;AAEjB,0BAAQ,SAAQ;AAEhB;AAAA,0BAAQ,QAA0D;AAClE,0BAAQ,WAAU;AAClB,0BAAQ,WAAU;AAElB,0BAAQ,cAAa;AACrB,0BAAQ,aAAY;AAGpB;AAAA,0BAAQ,SAAQ;AAChB,0BAAQ,cAAa;AAGnB,WAAK,MAAM,KAAK;AAChB,WAAK,UAAU,KAAK;AACpB,WAAK,SAAS,KAAK,IAAI;AACvB,WAAK,MAAM,UAAU,KAAK,IAAI;AAC9B,YAAM,IAAI,KAAK;AACf,WAAK,OAAO,EAAE,SAAS,YAAY,EAAE,MAAM,CAAC,KAAK,WAAW;AAC5D,cAAQ,EAAE,MAAM;AAAA,QACd,KAAK;AACH,eAAK,YAAY,EAAE;AACnB;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,eAAK,YAAY,EAAE;AACnB;AAAA,QACF,KAAK;AACH,eAAK,YAAY,EAAE;AACnB;AAAA,QACF,KAAK;AACH,eAAK,YAAY,EAAE,SAAS;AAC5B;AAAA,QACF;AACE,eAAK,YAAY;AAAA,MACrB;AACA,WAAK,QAAQ,KAAK;AAClB,WAAK,iBAAiB,KAAK,YAAY,EAAE,SAAS,YAAY,EAAE,WAAW,IAAI;AAC/E,WAAK,UAAU,KAAK;AAAA,IACtB;AAAA,IAEA,IAAI,OAAe;AACjB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,WAAmB;AACrB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,YAAqB;AACvB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,SAAiB;AACnB,UAAI,KAAK,OAAO,SAAS,UAAW,QAAO;AAC3C,aAAO,KAAK,OAAO,YAAY,KAAK,QAAQ,KAAK,KAAK;AAAA,IACxD;AAAA,IAEQ,QAAQ,GAAmB;AACjC,UAAI,KAAK,OAAO,SAAS,UAAW,QAAO;AAC3C,YAAM,MAAM,KAAK,OAAO,mBAAmB;AAC3C,aAAO,KAAK,IAAI,GAAG,KAAK,QAAQ,MAAM,KAAK,IAAI,GAAG,IAAI,KAAK,UAAU,CAAC;AAAA,IACxE;AAAA;AAAA,IAIA,OAAO,IAAkB;AACvB,YAAM,IAAI,KAAK,IAAI,GAAG,EAAE;AACxB,UAAI,MAAM;AACV,UAAI,KAAK,QAAQ,KAAK,KAAK,QAAQ,WAAW;AAC5C,cAAM,KAAK,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AACnC,aAAK,OAAO;AAAA,MACd,OAAO;AACL,aAAK,OAAO,EAAE,KAAK,UAAU,KAAK,EAAE;AAAA,MACtC;AACA,WAAK,SAAS;AACd,WAAK,OAAO,KAAK,KAAK;AAAA,IACxB;AAAA;AAAA,IAGQ,OAAO,GAAiB;AAC9B,YAAM,IAAI,KAAK;AACf,UAAI,EAAE,SAAS,UAAW;AAC1B,aAAO,KAAK,cAAc,KAAK,aAAa,IAAI,KAAK;AACnD,YAAI,EAAE,UAAU;AACd,cAAI,KAAK,UAAU,KAAK,KAAK,QAAQ,KAAK,WAAW;AACnD,iBAAK,SAAS;AACd,iBAAK,WAAW;AAAA,UAClB;AACA,cAAI,KAAK,SAAS,KAAK,aAAa,KAAK,WAAW,EAAG,MAAK,aAAa;AAAA,cACpE,MAAK,aAAa,EAAE;AAAA,QAC3B,OAAO;AACL,gBAAM,OAAO,KAAK,IAAI,KAAK,YAAY,KAAK,OAAO,KAAK,OAAO;AAC/D,eAAK,SAAS;AACd,eAAK,WAAW;AAChB,eAAK,aAAa;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAIA,UAAgB;AACd,WAAK,UAAU;AAAA,IACjB;AAAA,IAEA,SAAkB;AAChB,YAAM,IAAI,KAAK;AACf,UAAI,EAAE,SAAS,aAAa;AAC1B,YAAI,KAAK,SAAS,KAAK,aAAa,KAAK,WAAW,EAAG,QAAO;AAC9D,aAAK,SAAS;AACd,aAAK,WAAW;AAChB,eAAO;AAAA,MACT;AACA,UAAI,EAAE,SAAS,aAAa,KAAK,WAAY,QAAO;AACpD,UAAI,KAAK,SAAS,KAAK,aAAa,KAAK,WAAW,EAAG,QAAO;AAC9D,WAAK,aAAa;AAClB,WAAK,YAAY,KAAK,QAAQ,EAAE;AAChC,aAAO;AAAA,IACT;AAAA,IAEA,YAAsB;AACpB,UAAI,KAAK,OAAO,SAAS,UAAW,QAAO,KAAK;AAChD,YAAM,QAAQ,KAAK,OAAO;AAC1B,YAAM,IAAI,MAAM,QAAQ,KAAK,IAAI;AACjC,WAAK,OAAO,OAAO,IAAI,KAAK,MAAM,MAAM,KAAK,KAAK;AAClD,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,SAAe;AACb,WAAK,QAAQ,KAAK;AAClB,WAAK,UAAU,KAAK;AACpB,WAAK,aAAa;AAClB,WAAK,UAAU,KAAK;AACpB,WAAK,UAAU;AACf,WAAK,QAAQ;AAAA,IACf;AAAA;AAAA,IAIA,QAAQ,QAAc,WAAiB,IAAY,OAAO,OAAO,QAAgC;AAC/F,YAAM,IAAI,KAAK,IAAI,GAAG,EAAE;AACxB,UAAI,UAAU;AACd,UAAI,KAAK,QAAQ,KAAK,KAAK,QAAQ,UAAU;AAC3C,kBAAU,KAAK,IAAI,KAAK,KAAK,KAAK,CAAC;AACnC,aAAK,OAAO;AAAA,MACd,OAAO;AACL,aAAK,OAAO,EAAE,KAAK,WAAW,KAAK,EAAE;AAAA,MACvC;AACA,YAAM,QAAQ,KAAK,QAAQ;AAC3B,YAAM,MAAM,QAAQ;AACpB,WAAK,OAAO,KAAK;AAEjB,YAAM,MAAM,UAAU,SAAS;AAC/B,UAAI;AACJ,YAAM,IAAI,KAAK;AACf,cAAQ,EAAE,MAAM;AAAA,QACd,KAAK;AACH,gBAAM,KAAK,YAAY,GAAG,QAAQ,KAAK,OAAO,KAAK,MAAM,MAAM;AAC/D;AAAA,QACF,KAAK;AACH,gBAAM,KAAK,UAAU,GAAG,QAAQ,KAAK,OAAO,GAAG;AAC/C;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,gBAAM,KAAK,SAAS,GAAG,QAAQ,KAAK,CAAC;AACrC;AAAA,QACF,KAAK;AACH,gBAAM,KAAK,iBAAiB,GAAG,QAAQ,KAAK,CAAC;AAC7C;AAAA,QACF,KAAK;AACH,gBAAM,KAAK,cAAc,GAAG,QAAQ,KAAK,IAAI;AAC7C;AAAA,QACF,KAAK;AACH,gBAAM,IAAI,IAAI,OAAO,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,QAAQ,MAAM,EAAE,MAAM,OAAO,EAAE,OAAO,UAAU,GAAG,QAAQ,WAAW,IAAI,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,IAAI,OAAO,IAAI;AACzJ;AAAA,QACF,KAAK;AACH,gBAAM,KAAK,YAAY,IAAI,IACvB,OAAO,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,QAAQ,OAAO,EAAE,OAAO,QAAQ,WAAW,IAAI,CAAC,EAAE,CAAC,IACjF,OAAO,UAAU;AACrB;AAAA,MACJ;AACA,WAAK,QAAQ,KAAK,IAAI,KAAK,OAAO,GAAG;AACrC,WAAK,OAAO,KAAK,KAAK;AACtB,aAAO;AAAA,IACT;AAAA;AAAA,IAGQ,YAAY,MAAwB;AAC1C,UAAI,CAAC,KAAM,MAAK,UAAU;AAC1B,UAAI,KAAK,QAAS,QAAO;AACzB,WAAK,UAAU;AACf,aAAO;AAAA,IACT;AAAA,IAEQ,YAAY,GAA+C,QAAc,KAAW,OAAe,KAAa,MAAe,QAAgC;AACrK,UAAI,KAAK,YAAY;AACnB,YAAI,EAAE,YAAY,KAAK,QAAQ,EAAG,MAAK,aAAa;AAAA,YAC/C,QAAO,OAAO,WAAW;AAAA,MAChC;AACA,YAAM,OAAO,KAAK,SAAS;AAC3B,UAAI,CAAC,QAAQ,CAAC,KAAK,YAAY,IAAI,EAAG,QAAO,OAAO,UAAU;AAC9D,UAAI,KAAK,SAAS,EAAG,QAAO,OAAO,OAAO;AAE1C,YAAM,KAAK,KAAK,EAAE;AAClB,YAAM,KAAK,KAAK,IAAI,OAAO,KAAK,OAAO;AACvC,UAAI,KAAK,MAAM,IAAK,QAAO,OAAO,UAAU;AAE5C,YAAM,MAAM,OAAO,IAAI;AACvB,YAAM,OAAO,CAAC,MAAoB;AAChC,aAAK,QAAQ,GAAG,QAAQ,KAAK,GAAG,KAAK,MAAM;AAAA,MAC7C;AACA,UAAI,MAAM;AACR,iBAAS,IAAI,IAAI,IAAI,GAAG,KAAK,QAAQ,MAAM,MAAM,IAAI,KAAK,MAAM,MAAM,IAAI,MAAM,MAAM,KAAK,IAAI,IAAK,MAAK,CAAC;AAAA,MAC5G,WAAW,KAAK,SAAS,SAAS;AAChC,cAAM,QAAQ,KAAK,IAAI,EAAE,SAAS,GAAG,KAAK,KAAK;AAC/C,iBAAS,IAAI,GAAG,IAAI,OAAO,IAAK,MAAK,KAAK,IAAI,EAAE;AAAA,MAClD,OAAO;AACL,aAAK,EAAE;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IAEQ,QAAQ,GAA+C,QAAc,KAAW,GAAW,KAAoB,QAAuB;AAC5I,YAAM,MAAM,KAAK;AACjB,YAAM,SAAS,EAAE,UAAU;AAC3B,YAAM,QAAQ,IAAI,cAAc;AAChC,YAAM,SAAS,aAAa,KAAK,MAAM;AACvC,YAAM,OAAO,IAAI,eAAe;AAChC,YAAM,WAAW,CAAC,aAA6B;AAC7C,cAAM,IAAI,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,GAAG,QAAQ,IAAI,GAAG;AACxD,eAAO,SAAS,IAAI;AAAA,MACtB;AACA,YAAM,WAAW,KAAK,QAAQ,CAAC;AAC/B,YAAM,SAAS,EAAE,YAAY;AAC7B,YAAM,MAAM,WAAW,KAAK,QAAQ,KAAK,GAAG;AAC5C,YAAM,UAAU,IAAI,WAAW;AAC/B,YAAM,eAAe,UAAU,IAAI,EAAE,mBAAmB,IAAI;AAC5D,eAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,cAAM,OAAa;AAAA,UACjB,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,UACxC,WAAW,WAAW,KAAK,cAAc,KAAK,GAAG;AAAA,UACjD;AAAA,UACA,SAAS,IAAI;AAAA,UACb,WAAW,IAAI;AAAA,UACf;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR,QAAQ,KAAK,IAAI;AAAA,QACnB;AACA,YAAI,WAAW,OAAW,MAAK,SAAS;AACxC,YAAI,MAAM,KAAK,IAAI;AAAA,MACrB;AACA,WAAK,SAAS;AACd,WAAK,UAAU,IAAI,KAAK,EAAE;AAC1B,WAAK,QAAQ,KAAK,IAAI,YAAY,EAAE,YAAY,IAAI,EAAE,aAAa,YAAY,EAAE;AACjF,WAAK,aAAa;AAClB,UAAI,SAAS,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7F,UAAI,QAAQ,EAAE;AAAA,IAChB;AAAA,IAEQ,UAAU,GAA6C,QAAc,KAAW,OAAe,KAA4B;AACjI,YAAM,KAAK,KAAK,IAAI,OAAO,KAAK,OAAO;AACvC,UAAI,KAAK,MAAM,IAAK,QAAO,OAAO,UAAU;AAC5C,WAAK,UAAU,KAAK,KAAK,EAAE;AAC3B,YAAM,MAAW,EAAE,MAAM,SAAS,QAAQ,EAAE,QAAQ,QAAQ,EAAE,QAAQ,QAAQ,EAAE,QAAQ,OAAO,EAAE,OAAO,QAAQ,WAAW,IAAI;AAC/H,aAAO,OAAO,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,OAAO,EAAE,MAAM,CAAC;AAAA,IACrD;AAAA,IAEQ,SAAS,GAAsD,QAAc,KAAW,IAA2B;AACzH,UAAI,KAAK,SAAS,IAAK,QAAO,OAAO,SAAS;AAC9C,UAAI,MAAM,EAAG,QAAO,OAAO,IAAI;AAC/B,YAAM,OAAO,EAAE,gBAAgB;AAC/B,UAAI,WAAW;AACf,UAAI,OAAO,KAAK,OAAO;AACrB,mBAAW,MAAM,KAAK,QAAQ;AAC9B,aAAK,QAAQ;AAAA,MACf,OAAO;AACL,aAAK,SAAS;AAAA,MAChB;AACA,YAAM,MACJ,EAAE,SAAS,UACP,EAAE,MAAM,SAAS,aAAa,EAAE,aAAa,QAAQ,EAAE,QAAQ,OAAO,EAAE,OAAO,MAAM,EAAE,QAAQ,OAAO,UAAU,QAAQ,WAAW,IAAI,IACvI,EAAE,MAAM,QAAQ,aAAa,EAAE,aAAa,QAAQ,EAAE,QAAQ,OAAO,EAAE,OAAO,UAAU,QAAQ,WAAW,IAAI;AACrH,aAAO,OAAO,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,OAAO,EAAE,MAAM,CAAC;AAAA,IACrD;AAAA,IAEQ,iBAAiB,GAAoD,QAAc,KAAW,IAA2B;AAC/H,UAAI,KAAK,SAAS,IAAK,QAAO,OAAO,SAAS;AAC9C,UAAI,MAAM,EAAG,QAAO,OAAO,IAAI;AAC/B,YAAM,WAAW,KAAK,IAAI,IAAI,KAAK,KAAK;AACxC,WAAK,SAAS;AACd,aAAO,OAAO,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,cAAc,OAAO,EAAE,OAAO,OAAO,EAAE,OAAO,UAAU,QAAQ,WAAW,IAAI,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1I;AAAA,IAEQ,cAAc,GAAiD,QAAc,KAAW,MAA8B;AAC5H,UAAI,CAAC,KAAK,YAAY,IAAI,EAAG,QAAO,OAAO,UAAU;AACrD,UAAI,KAAK,SAAS,EAAG,QAAO,OAAO,OAAO;AAC1C,WAAK,SAAS;AACd,YAAM,WAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,YAAY,IAAI,CAAC,IAAI,EAAE,UAAU;AACvH,YAAM,MAAW,EAAE,MAAM,SAAS,QAAQ,EAAE,QAAQ,QAAQ,EAAE,QAAQ,MAAM,EAAE,MAAM,UAAU,OAAO;AACrG,UAAI,EAAE,KAAM,KAAI,OAAO,EAAE,GAAG,EAAE,KAAK;AACnC,aAAO,OAAO,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,OAAO,EAAE,MAAM,CAAC;AAAA,IACrD;AAAA,EACF;;;AC9VO,MAAM,WAAW;AACjB,MAAM,UAAU;AAGhB,MAAM,kBAA8B;AAAA,IACzC;AAAA,IAAQ;AAAA,IAAc;AAAA,IAAgB;AAAA,IAAmB;AAAA,IAAc;AAAA,IAAkB;AAAA,IAAU;AAAA,IAAO;AAAA,IAAW;AAAA,IAAW;AAAA,IAChI;AAAA,IAAiB;AAAA,IAAW;AAAA,IAAgB;AAAA,IAAe;AAAA,IAAU;AAAA,IAAW;AAAA,IAAW;AAAA,EAC7F;AAKO,MAAM,gBAAgB,CAAC,UAA0B,CAAC,MAAe;AACtE,UAAM,WAAW,oBAAI,IAA2B;AAChD,eAAW,KAAK,CAAC,GAAG,UAAU,GAAI,QAAQ,YAAY,CAAC,CAAE,EAAG,UAAS,IAAI,EAAE,IAAI,CAAC;AAChF,UAAM,UAAU,oBAAI,IAAyB;AAC7C,eAAW,KAAK,CAAC,GAAG,SAAS,GAAI,QAAQ,WAAW,CAAC,CAAE,EAAG,SAAQ,IAAI,EAAE,IAAI,CAAC;AAC7E,UAAM,UAAU,eAAe,QAAQ,MAAM;AAC7C,UAAM,WAAW,QAAQ,QAAQ;AACjC,QAAI,UAAU;AAEd,UAAM,SAAS,CAAC,IAAc,OAA4C,CAAC,MAAmB;AAC5F,YAAM,MAAM,QAAQ,IAAI,EAAE;AAC1B,UAAI,CAAC,IAAK,OAAM,IAAI,MAAM,iCAAiC,EAAE,GAAG;AAChE,UAAI,UAA6B;AACjC,UAAI,IAAI,OAAO,SAAS,WAAW;AACjC,kBAAU,SAAS,IAAI,IAAI,OAAO,OAAO,KAAK;AAC9C,YAAI,CAAC,QAAS,OAAM,IAAI,MAAM,yBAAyB,EAAE,2BAA2B,IAAI,OAAO,OAAO,GAAG;AAAA,MAC3G;AACA,iBAAW;AACX,YAAM,OAAO,KAAK,QAAS,WAAW,KAAK,KAAK,SAAS,UAAU,MAAO;AAC1E,aAAO,IAAI,cAAc,EAAE,KAAK,SAAS,MAAM,SAAS,KAAK,QAAQ,CAAC;AAAA,IACxE;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,SAAS,SAAS,GAAG;AAChC,cAAM,IAAI,SAAS,IAAI,OAAO;AAC9B,YAAI,CAAC,EAAG,OAAM,IAAI,MAAM,kCAAkC,OAAO,GAAG;AACpE,eAAO,aAAa,GAAG,MAAM;AAAA,MAC/B;AAAA,MACA,KAAK,IAAI;AACP,cAAM,IAAI,QAAQ,IAAI,EAAE;AACxB,YAAI,EAAG,QAAO,QAAQ,QAAQ,EAAE,KAAK,EAAE,QAAQ;AAC/C,eAAO,QAAQ,MAAM,EAAE,KAAK,QAAQ,WAAW,EAAE,KAAK,SAAS,IAAI,EAAE,GAAG,SAAS;AAAA,MACnF;AAAA,MACA,KAAK,UAA2B;AAC9B,cAAM,MAAM,CAAC,GAAG,QAAQ,OAAO,CAAC;AAChC,eAAO,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,aAAa,QAAQ,IAAI;AAAA,MACjE;AAAA,IACF;AAAA,EACF;","names":[]}
|