From 3a5b9e150c6537d178895f06adb3e446933caf39 Mon Sep 17 00:00:00 2001 From: Dineth Hettiarachchi Date: Sun, 25 Oct 2026 17:14:19 +0530 Subject: [PATCH 1/3] feat: Phase 7 web visualizer (partial): presets, schedule, tile values, NAIVE P matrix /app runs the WASM engine in the browser: start, step, back, run to end, reset. Shows the tile schedule (FLASH and NAIVE), the current tile's values, HBM bytes, tile and K/V counters, controller state, the dequantized output with its deviation from float attention, and for NAIVE the probability matrix read back from HBM. Shared with the golden model: presets (generated presets.ts), quantization (quantize.ts checked against golden values), tile order (checked against tile counts in the fixtures). Engine harness gains the tile-state and probability readouts (32-bit values; BigInt avoided). Not yet built from the Phase 7 list: MatrixEditor, SramPanel, HbmMeter, FLASH heatmap, Playwright smoke test. See docs/ARCHITECTURE.md section 12. --- CONTEXT.md | 12 +- README.md | 2 +- docs/ARCHITECTURE.md | 24 + docs/PLAN.md | 2 +- sim/golden/export_fixtures.py | 15 +- sim/golden/export_web_data.py | 86 + sim/golden/test_golden.py | 10 + wasm/fixtures/flash_overlap_causal.json | 2 +- wasm/fixtures/flash_seq.json | 2 +- wasm/fixtures/naive_causal.json | 2 +- wasm/fixtures/quantize_cases.json | 1 + wasm/harness/bindings.cpp | 21 +- wasm/harness/harness.cpp | 76 + wasm/harness/harness.h | 18 + wasm/test.mjs | 21 +- web/eslint.config.js | 8 + web/package.json | 7 +- web/pnpm-lock.yaml | 7041 +++++++++-------------- web/src/components/Visualizer.tsx | 389 ++ web/src/lib/engine.ts | 21 + web/src/lib/presets.ts | 1832 ++++++ web/src/lib/quantize.test.ts | 42 + web/src/lib/quantize.ts | 46 + web/src/lib/reference.ts | 32 + web/src/lib/schedule.test.ts | 48 + web/src/lib/schedule.ts | 37 + web/src/lib/state-schema.ts | 58 + web/src/pages/app.astro | 17 + web/vitest.config.ts | 11 + 29 files changed, 5395 insertions(+), 4488 deletions(-) create mode 100644 sim/golden/export_web_data.py create mode 100644 wasm/fixtures/quantize_cases.json create mode 100644 web/src/components/Visualizer.tsx create mode 100644 web/src/lib/engine.ts create mode 100644 web/src/lib/presets.ts create mode 100644 web/src/lib/quantize.test.ts create mode 100644 web/src/lib/quantize.ts create mode 100644 web/src/lib/reference.ts create mode 100644 web/src/lib/schedule.test.ts create mode 100644 web/src/lib/schedule.ts create mode 100644 web/src/lib/state-schema.ts create mode 100644 web/src/pages/app.astro create mode 100644 web/vitest.config.ts diff --git a/CONTEXT.md b/CONTEXT.md index 28ab821..3c8715e 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -33,7 +33,17 @@ On a fresh machine delete the symlinks and run `.tools/setup.sh` and `.tools/ems pass; perf baseline in `sim/perf_baseline.json` (re-record with `PERF_RECORD=1 COCOTB_TEST_FILTER=perf_grid bash sim/run_e2e.sh`). - Phase 6 (WASM harness): DONE. `wasm/build.sh` builds `web/public/tiny_attn.{mjs,wasm}` (81 KB gzipped); `node wasm/test.mjs` checks three golden fixtures on interleaved instances, exactly. JS API in `docs/STATE_SCHEMA.md`. -- Next: Phase 7 (web UI). First: wide-signal access so the per-clock state carries per-PE values and softmax lanes. +- Phase 7 (web visualizer `/app`): PARTIAL. Built: presets and quantization shared with the golden model, schedule, tile values, + bytes, NAIVE probability matrix. Browser-checked on the production build. Missing from the plan: MatrixEditor, SramPanel, + HbmMeter, FLASH heatmap, Playwright smoke test (see ARCHITECTURE §12). +- Next: finish the Phase 7 list, then Phase 8 (L1, L2, L4). + +## Gotchas found in Phase 7 +- `wasm/fixtures/` holds engine runs and `quantize_cases.json`; the Node test must skip the quantization file (it did not for + a while and aborted in configure with no useful message). +- Embind gives 64-bit integers to JavaScript as BigInt, which breaks JSON comparison. Tile values are 32-bit for that reason. +- The tile core's debug S/Z/P registers are only written by FLASH. NAIVE views must not show them. +- `astro dev` hung without output in this environment; `astro build` + `astro preview` works for browser checks. ## Gotchas found in Phase 5 - The NAIVE tile operations reuse the online-softmax unit: OP_NM uses its m path, OP_NP uses its P and l path with alpha = 1 diff --git a/README.md b/README.md index bb2902f..276fb0c 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Fourth project in the series after [tiny-gpu](https://github.com/deaneeth/tiny-g [tiny-tpu](https://github.com/deaneeth/tiny-tpu) and tiny-cpu. Same rule as the others: nothing on screen is faked; every value comes from a `dbg_*` port on the compiled RTL. -**Status:** Phases 0-6 done: the engine (FLASH, NAIVE, K/V overlap) is bit-exact against the golden model and compiled to WebAssembly (81 KB gzipped), with a Node test over golden fixtures. Next is the web UI. See [`docs/PLAN.md`](docs/PLAN.md) for the roadmap. +**Status:** Phases 0-6 done, Phase 7 partly done: the engine (FLASH, NAIVE, K/V overlap) is bit-exact against the golden model, compiled to WebAssembly, and shown clock by clock in a browser visualizer at `/app`. Still open in Phase 7: matrix editor, SRAM panel, Playwright smoke test. See [`docs/PLAN.md`](docs/PLAN.md) for the roadmap. ## Quick start diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 656149c..bf3b60e 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -355,3 +355,27 @@ masking. A fresh instance reproduces the run, so no state leaks between instance Deviation from the plan: the per-clock state exported to JavaScript is a subset (controller state, counters, byte counts). Per-PE values, softmax lanes and SRAM tiles need wide-signal access and are the first item of Phase 7. + +## 12. Phase 7: web visualizer (as built) + +`/app` (`web/src/pages/app.astro`) runs the WASM engine in the browser and shows it clock by clock. + +- **Presets** (`sim/golden/presets.py` → `web/src/lib/presets.ts`, generated): six attention patterns with token labels. + Their Q/K/V are quantized in the browser by `web/src/lib/quantize.ts`, a mirror of `fixed.quantize`. Both are checked + against golden values in `pytest` (freshness) and `vitest` (values). +- **Controls**: schedule (FLASH / NAIVE), causal, overlap (FLASH), `cfg_qrows`, HBM latency. Start, Step, Back (rebuilds + the run from reset and advances N−1 clocks), Run to end, Reset. +- **Views**: the tile schedule (FLASH: row groups × K/V tiles, with the causal mask; NAIVE: pass-1 Z tiles), the current + tile's S, Z, P, m, l, α and O (FLASH; NAIVE shows m, l and O only, since its S/Z/P never enter the tile core), HBM bytes, + tile count, K/V loads, and controller state names (`FLASH_STATES` / `NAIVE_STATES`, matching the enums in the RTL). +- **Result**: the dequantized O, its maximum deviation from float attention (`web/src/lib/reference.ts`), and for NAIVE the + probability matrix read back from HBM, with token labels. + +Checks: `node wasm/test.mjs` (engine vs golden), `pnpm test` (quantization and tile order against the fixtures), +`pnpm typecheck`, `pnpm lint`, `pnpm build`. The browser run (built site, `astro preview`) showed no console errors; the +FLASH run and the NAIVE run both finished with max deviation 0.0049 on the toy preset; the phone width has no horizontal scroll. + +Not yet built from the Phase 7 list in `docs/PLAN.md`: `MatrixEditor` (edit Q/K/V in the page; presets only for now), +`SramPanel` (staging buffer contents), an `HbmMeter` bar, a FLASH attention heatmap (only NAIVE shows P), and the Playwright +smoke test. The dev-server path also needs a fix (`astro dev` hung without output in this environment); `astro build` + +`astro preview` works. The light/dark theme and 375 px checks are done for layout only; the theme check is not. diff --git a/docs/PLAN.md b/docs/PLAN.md index ffabe8d..d4cd595 100644 --- a/docs/PLAN.md +++ b/docs/PLAN.md @@ -447,7 +447,7 @@ The estimates assume one person part-time, at tiny-cpu's pace. - `harness.cpp`, `bindings.cpp`, `build.sh`, `STATE_SCHEMA.md`, `test.mjs` with golden fixtures. - **Exit:** `wasm.yml` is green; the size budget is met; two instances run independently in Node. -### Phase 7: Core UI + L3 Schedule (2 weeks) +### Phase 7: Core UI + L3 Schedule (2 weeks) — PARTIAL (visualizer built; see ARCHITECTURE §12 for what remains) - `useTinyAttn`, `Controls`, `MatrixEditor`, presets, `quantize.ts`, `AttentionHeatmap`, `SramPanel`, `HbmMeter`, and **L3 Schedule first**. - **Exit:** pick a preset, step forward and back, and watch tiles, buffers and bytes update; the Playwright smoke test passes. diff --git a/sim/golden/export_fixtures.py b/sim/golden/export_fixtures.py index eed5513..41307fc 100644 --- a/sim/golden/export_fixtures.py +++ b/sim/golden/export_fixtures.py @@ -48,9 +48,22 @@ def build_fixture(c): qz = case_inputs(c["seed"], c["n"]) naive = c["mode"] == "NAIVE" qblock = 4 if naive else c["qrows"] - res = fixed.naive(qz, c["n"], c["causal"]) if naive else fixed.flash(qz, c["n"], c["causal"], qblock=qblock) + res = (fixed.naive(qz, c["n"], c["causal"]) if naive + else fixed.flash(qz, c["n"], c["causal"], qblock=qblock, trace=True)) t = traffic(c["n"], c["causal"], c["mode"], qblock=qblock) + extra = {} + if naive: + extra["probs"] = res.probs.reshape(-1).astype(int).tolist() + else: + # the last tile the engine computes: largest kj, then largest group index + last = max(res.trace, key=lambda e: (e["kj"], e["qi"])) + extra["lastTile"] = dict( + qi=last["qi"], kj=last["kj"], + m=[int(x) for x in last["m"]], l=[int(x) for x in last["l"]], + alpha=[int(x) for x in last["alpha"]], o=last["O"].reshape(-1).astype(int).tolist(), + ) return dict( + **extra, name=c["name"], mode=c["mode"], n=c["n"], diff --git a/sim/golden/export_web_data.py b/sim/golden/export_web_data.py new file mode 100644 index 0000000..2ccf118 --- /dev/null +++ b/sim/golden/export_web_data.py @@ -0,0 +1,86 @@ +"""Export data the web app and its tests share with the golden model. + +- web/src/lib/presets.ts: the attention presets (presets.py), float Q/K/V with labels. +- wasm/fixtures/quantize_cases.json: float inputs and the quantized values and cfg_scale that fixed.quantize produces. + python sim/golden/export_web_data.py +""" + +import json +from pathlib import Path + +import numpy as np + +import fixed +import presets +from export_fixtures import ROOT + +WEB_PRESETS = ROOT / "web" / "src" / "lib" / "presets.ts" +QUANT_CASES = ROOT / "wasm" / "fixtures" / "quantize_cases.json" + + +def r(x): + return round(float(x), 6) + + +def preset_entries(): + out = [] + for make in presets.ALL: + p = make() + out.append(dict( + name=p["name"], + labels=list(p["labels"]), + causal=bool(p["causal"]), + q=[[r(x) for x in row] for row in p["q"]], + k=[[r(x) for x in row] for row in p["k"]], + v=[[r(x) for x in row] for row in p["v"]], + )) + return out + + +def presets_ts(entries): + body = json.dumps(entries, indent=1) + return ("// GENERATED by sim/golden/export_web_data.py from sim/golden/presets.py. Do not edit.\n" + "export interface Preset {\n" + " name: string;\n" + " labels: string[];\n" + " causal: boolean;\n" + " q: number[][];\n" + " k: number[][];\n" + " v: number[][];\n" + "}\n\n" + f"export const PRESETS: Preset[] = {body};\n") + + +def quant_cases(): + rng = np.random.default_rng(61) + cases = [] + for amp in (0.5, 2.5, 3.5): + n = 8 + qf, kf, vf = (np.round(rng.normal(0, amp, (n, 4)), 6) for _ in range(3)) # what the web app will see + z = fixed.quantize(qf, kf, vf) + cases.append(dict( + q=[[r(x) for x in row] for row in qf], + k=[[r(x) for x in row] for row in kf], + v=[[r(x) for x in row] for row in vf], + expQ=z.q.reshape(-1).tolist(), + expK=z.k.reshape(-1).tolist(), + expV=z.v.reshape(-1).tolist(), + expCfgScale=int(z.cfg_scale), + )) + # an all-zero tensor: scale falls back to 1.0 + z0 = np.zeros((4, 4)) + z = fixed.quantize(z0, z0, z0) + cases.append(dict(q=z0.tolist(), k=z0.tolist(), v=z0.tolist(), + expQ=z.q.reshape(-1).tolist(), expK=z.k.reshape(-1).tolist(), + expV=z.v.reshape(-1).tolist(), expCfgScale=int(z.cfg_scale))) + return cases + + +def main(): + WEB_PRESETS.write_text(presets_ts(preset_entries())) + QUANT_CASES.write_text(json.dumps(quant_cases()) + "\n") + print(f"wrote {WEB_PRESETS.name} ({len(presets.ALL)} presets) and {QUANT_CASES.name}") + + +if __name__ == "__main__": + main() diff --git a/sim/golden/test_golden.py b/sim/golden/test_golden.py index 456dde0..9fcb5bd 100644 --- a/sim/golden/test_golden.py +++ b/sim/golden/test_golden.py @@ -267,3 +267,13 @@ def test_wasm_fixtures_fresh(): for c in ef.CASES: path = ef.OUT / f"{c['name']}.json" assert path.read_text() == ef.fixture_text(c), f"{path.name} is stale: run sim/golden/export_fixtures.py" + + +def test_web_data_fresh(): + """web/src/lib/presets.ts and wasm/fixtures/quantize_cases.json must match the generator.""" + import json + + import export_web_data as ewd + + assert ewd.WEB_PRESETS.read_text() == ewd.presets_ts(ewd.preset_entries()), "presets.ts is stale" + assert ewd.QUANT_CASES.read_text() == json.dumps(ewd.quant_cases()) + "\n", "quantize_cases.json is stale" diff --git a/wasm/fixtures/flash_overlap_causal.json b/wasm/fixtures/flash_overlap_causal.json index d0c9228..abcdf8f 100644 --- a/wasm/fixtures/flash_overlap_causal.json +++ b/wasm/fixtures/flash_overlap_causal.json @@ -1 +1 @@ -{"name": "flash_overlap_causal", "mode": "FLASH", "n": 16, "causal": true, "qrows": 4, "overlap": true, "latency": 10, "cfgScale": 1780, "q": [-87, -67, -68, -18, -116, -9, -48, 45, 48, 70, 38, -3, 43, 75, -33, 31, -2, 72, -42, -15, 18, 13, -82, 18, -6, -12, -8, 11, -91, 78, -43, -112, -4, 73, -26, 78, 78, -43, -123, -62, 59, -41, -76, -67, 0, -1, 44, 49, -47, -8, -57, 4, -58, -60, 106, 2, 32, 127, 39, -6, 3, -37, 55, -17], "k": [94, -18, -19, -22, 33, 10, 73, -29, 15, 103, -13, 28, 83, 29, -34, -109, 127, 23, 67, -25, 97, 28, 3, -48, 20, -26, -12, -86, -26, 8, -66, 4, 35, -16, -33, -33, 50, -81, -16, -22, 8, -4, -59, 108, 9, -71, -47, 5, 33, -71, 38, -73, -42, 45, 90, -4, -16, 67, -57, 15, 12, 54, 16, -14], "v": [25, -45, 33, -27, -37, -15, 2, 29, -9, 30, 39, -4, -40, 37, 11, -85, -40, 6, -55, -27, -69, 16, 10, 7, 58, -14, -12, 81, -52, 29, -53, 10, 85, 11, -31, 96, -22, -8, 12, -54, 45, 65, 31, 13, -6, 36, -127, -5, 10, -80, 17, -5, -1, 4, 23, 18, -42, -5, -7, 2, -24, 39, 53, 61], "out": [6400, -11519, 8447, -6912, -8216, -4448, 1140, 6290, -2766, 6817, 9326, -464, -2304, 7680, 9983, -1024, -2687, 7766, 9637, -2026, -2846, 3410, 7471, -7763, 1010, -2319, 3089, 1805, -8336, 8409, 2015, -17765, -2304, 7680, 9983, -1024, -10111, 9309, 2860, -21645, -10061, 9296, 2816, -21507, 2772, 9415, 2634, 2012, -8948, 8810, -11825, 2467, -253, 418, 5807, 4474, -2477, 7514, 9419, -1137, 675, -16832, 3075, -612], "hbmRdBytes": 384, "hbmWrBytes": 128, "tiles": 10, "kvLoads": 10, "cycles": 611} +{"lastTile": {"qi": 3, "kj": 3, "m": [2145, 4027, 5599, 2632], "l": [5190, 4240, 4208, 5076], "alpha": [32768, 262, 32768, 3848], "o": [-181411, 178605, -239739, 50020, -4191, 6931, 96179, 74110, -40720, 123520, 154832, -18688, 13393, -333752, 60969, -12130]}, "name": "flash_overlap_causal", "mode": "FLASH", "n": 16, "causal": true, "qrows": 4, "overlap": true, "latency": 10, "cfgScale": 1780, "q": [-87, -67, -68, -18, -116, -9, -48, 45, 48, 70, 38, -3, 43, 75, -33, 31, -2, 72, -42, -15, 18, 13, -82, 18, -6, -12, -8, 11, -91, 78, -43, -112, -4, 73, -26, 78, 78, -43, -123, -62, 59, -41, -76, -67, 0, -1, 44, 49, -47, -8, -57, 4, -58, -60, 106, 2, 32, 127, 39, -6, 3, -37, 55, -17], "k": [94, -18, -19, -22, 33, 10, 73, -29, 15, 103, -13, 28, 83, 29, -34, -109, 127, 23, 67, -25, 97, 28, 3, -48, 20, -26, -12, -86, -26, 8, -66, 4, 35, -16, -33, -33, 50, -81, -16, -22, 8, -4, -59, 108, 9, -71, -47, 5, 33, -71, 38, -73, -42, 45, 90, -4, -16, 67, -57, 15, 12, 54, 16, -14], "v": [25, -45, 33, -27, -37, -15, 2, 29, -9, 30, 39, -4, -40, 37, 11, -85, -40, 6, -55, -27, -69, 16, 10, 7, 58, -14, -12, 81, -52, 29, -53, 10, 85, 11, -31, 96, -22, -8, 12, -54, 45, 65, 31, 13, -6, 36, -127, -5, 10, -80, 17, -5, -1, 4, 23, 18, -42, -5, -7, 2, -24, 39, 53, 61], "out": [6400, -11519, 8447, -6912, -8216, -4448, 1140, 6290, -2766, 6817, 9326, -464, -2304, 7680, 9983, -1024, -2687, 7766, 9637, -2026, -2846, 3410, 7471, -7763, 1010, -2319, 3089, 1805, -8336, 8409, 2015, -17765, -2304, 7680, 9983, -1024, -10111, 9309, 2860, -21645, -10061, 9296, 2816, -21507, 2772, 9415, 2634, 2012, -8948, 8810, -11825, 2467, -253, 418, 5807, 4474, -2477, 7514, 9419, -1137, 675, -16832, 3075, -612], "hbmRdBytes": 384, "hbmWrBytes": 128, "tiles": 10, "kvLoads": 10, "cycles": 611} diff --git a/wasm/fixtures/flash_seq.json b/wasm/fixtures/flash_seq.json index d9d36bc..f2497b2 100644 --- a/wasm/fixtures/flash_seq.json +++ b/wasm/fixtures/flash_seq.json @@ -1 +1 @@ -{"name": "flash_seq", "mode": "FLASH", "n": 16, "causal": false, "qrows": 8, "overlap": false, "latency": 10, "cfgScale": 1656, "q": [0, 15, -14, -45, -23, -50, 3, 68, -25, -31, 25, 18, 5, -47, -1, 35, -68, -23, -96, -65, -93, -12, -64, 14, 8, -9, -127, -27, -2, 6, -77, -24, -49, -41, 54, -41, -2, 45, -29, -6, 6, 3, -62, 4, 69, -78, 43, 6, -32, 101, 38, -61, 4, 29, -10, 34, -3, 34, 73, -34, 10, -23, 6, -60], "k": [-33, -11, 51, 65, -75, -45, 37, -113, -26, -6, 71, 39, -19, -21, -14, 86, -24, -17, 20, -7, -11, -63, -1, -25, 66, 37, -1, 38, -19, 60, 0, 33, -73, 20, -96, -115, -17, -51, 9, 127, -47, -35, 12, 28, -10, -12, 40, 29, -58, -4, 2, -60, 15, -49, 55, 11, 5, -33, -7, -113, -64, 21, -120, 48], "v": [-126, 55, -61, 56, 9, -111, 90, 104, -5, -20, -12, -70, 79, -39, -4, -57, -45, -92, 91, -11, 70, 1, -50, -24, -40, 1, -27, -22, -99, -58, 119, -48, -76, 24, 101, -105, -15, -46, -127, 53, -2, 5, -54, 33, -39, -10, -80, -88, 96, -37, 21, -2, -32, -37, 45, -22, -11, 2, 85, 49, 28, -41, -100, 68], "out": [-16809, 4267, 25180, -21357, -3681, -11710, -32198, 13316, -6644, -5700, -17150, 5840, -3052, -11228, -30137, 11818, -19455, 6144, 25854, -26878, 6177, -9878, -23686, 15760, -14265, 2900, 15824, -18245, -17001, 4610, 21112, -22797, 2304, -28414, 23039, 26622, -8871, -1900, 5151, -7939, 4955, -9115, -21290, 13686, -7432, -9175, 9662, -5171, -14326, -57, 24554, -17481, -3808, -8679, -9204, 2405, 1231, -22508, 17578, 17145, -1175, -11168, 22263, 16684], "hbmRdBytes": 320, "hbmWrBytes": 128, "tiles": 16, "kvLoads": 8, "cycles": 749} +{"lastTile": {"qi": 3, "kj": 3, "m": [3122, 1287, 2117, 3051], "l": [5266, 14053, 5504, 7523], "alpha": [32768, 21190, 32768, 24659], "o": [-294693, -1180, 505089, -359594, -209018, -476412, -505232, 132034, 26464, -483936, 377952, 368640, -34519, -328177, 654227, 490286]}, "name": "flash_seq", "mode": "FLASH", "n": 16, "causal": false, "qrows": 8, "overlap": false, "latency": 10, "cfgScale": 1656, "q": [0, 15, -14, -45, -23, -50, 3, 68, -25, -31, 25, 18, 5, -47, -1, 35, -68, -23, -96, -65, -93, -12, -64, 14, 8, -9, -127, -27, -2, 6, -77, -24, -49, -41, 54, -41, -2, 45, -29, -6, 6, 3, -62, 4, 69, -78, 43, 6, -32, 101, 38, -61, 4, 29, -10, 34, -3, 34, 73, -34, 10, -23, 6, -60], "k": [-33, -11, 51, 65, -75, -45, 37, -113, -26, -6, 71, 39, -19, -21, -14, 86, -24, -17, 20, -7, -11, -63, -1, -25, 66, 37, -1, 38, -19, 60, 0, 33, -73, 20, -96, -115, -17, -51, 9, 127, -47, -35, 12, 28, -10, -12, 40, 29, -58, -4, 2, -60, 15, -49, 55, 11, 5, -33, -7, -113, -64, 21, -120, 48], "v": [-126, 55, -61, 56, 9, -111, 90, 104, -5, -20, -12, -70, 79, -39, -4, -57, -45, -92, 91, -11, 70, 1, -50, -24, -40, 1, -27, -22, -99, -58, 119, -48, -76, 24, 101, -105, -15, -46, -127, 53, -2, 5, -54, 33, -39, -10, -80, -88, 96, -37, 21, -2, -32, -37, 45, -22, -11, 2, 85, 49, 28, -41, -100, 68], "out": [-16809, 4267, 25180, -21357, -3681, -11710, -32198, 13316, -6644, -5700, -17150, 5840, -3052, -11228, -30137, 11818, -19455, 6144, 25854, -26878, 6177, -9878, -23686, 15760, -14265, 2900, 15824, -18245, -17001, 4610, 21112, -22797, 2304, -28414, 23039, 26622, -8871, -1900, 5151, -7939, 4955, -9115, -21290, 13686, -7432, -9175, 9662, -5171, -14326, -57, 24554, -17481, -3808, -8679, -9204, 2405, 1231, -22508, 17578, 17145, -1175, -11168, 22263, 16684], "hbmRdBytes": 320, "hbmWrBytes": 128, "tiles": 16, "kvLoads": 8, "cycles": 749} diff --git a/wasm/fixtures/naive_causal.json b/wasm/fixtures/naive_causal.json index ebcdc23..1f65e40 100644 --- a/wasm/fixtures/naive_causal.json +++ b/wasm/fixtures/naive_causal.json @@ -1 +1 @@ -{"name": "naive_causal", "mode": "NAIVE", "n": 16, "causal": true, "qrows": 4, "overlap": false, "latency": 10, "cfgScale": 1754, "q": [-40, 12, -83, 33, 58, -23, 22, 13, -20, -43, -102, 71, -2, 127, 42, 14, -33, 70, -25, 79, -20, 9, -77, 118, -5, -19, 41, -45, 39, -59, 27, -53, -92, -30, -74, 28, 1, 26, 5, -18, 1, 53, -9, -38, -49, -11, -38, 95, -59, -54, -15, 33, -13, -48, -41, -18, 49, -49, -5, -31, 16, 20, -74, 120], "k": [10, -27, -48, -14, 2, 32, 0, 26, -86, -40, -54, 9, 25, -78, -9, 39, 49, -60, 30, 18, -23, 105, -60, -15, 24, 13, -9, 74, 77, 49, 54, -3, -62, 117, -51, 119, -7, 12, -9, 51, -27, 99, 29, 9, -31, 15, 0, 102, 50, -83, 82, -127, 82, -101, 0, 43, 0, -59, 66, -95, -78, 74, -46, 13], "v": [36, -5, 12, 5, 10, 53, 42, 14, 41, -24, -34, -45, 35, 72, 4, -88, -23, 21, 13, 4, 44, 41, -60, 19, -33, 10, 55, 82, 31, -23, -16, 24, -44, -3, 27, 41, -13, 16, 61, 14, -77, 10, 11, -19, 2, -66, 56, 19, -24, 11, 6, -39, -119, -127, 90, -50, -13, 25, -16, 53, -42, 25, -93, 32], "out": [9215, -1280, 3072, 1280, 6355, 5102, 6373, 2270, 10491, -6125, -8658, -11470, 2560, 13567, 10751, 3584, 3188, 12008, 9212, 2389, 10301, -3593, -8188, -10745, -3058, 5700, 2834, -1029, -4296, 6241, 3029, -871, 10327, -6102, -8583, -11349, 8381, 6241, -9540, 5392, 8534, 9667, -13660, 4068, -11127, -955, 6998, 10430, 10369, -6079, -8365, -11416, 7007, -5315, -4396, -10996, -7559, 759, 2776, -10063, -11263, -768, 6912, 10495], "hbmRdBytes": 1344, "hbmWrBytes": 768, "tiles": 10, "kvLoads": 10, "cycles": 1807} +{"probs": [256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 256, 14, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 7, 11, 23, 256, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 24, 256, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 18, 2, 0, 2, 256, 4, 80, 23, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 2, 1, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 3, 0, 0, 0, 0, 0, 0, 256, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 35, 0, 256, 25, 2, 0, 0, 0, 0, 0, 0, 0, 10, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0], "name": "naive_causal", "mode": "NAIVE", "n": 16, "causal": true, "qrows": 4, "overlap": false, "latency": 10, "cfgScale": 1754, "q": [-40, 12, -83, 33, 58, -23, 22, 13, -20, -43, -102, 71, -2, 127, 42, 14, -33, 70, -25, 79, -20, 9, -77, 118, -5, -19, 41, -45, 39, -59, 27, -53, -92, -30, -74, 28, 1, 26, 5, -18, 1, 53, -9, -38, -49, -11, -38, 95, -59, -54, -15, 33, -13, -48, -41, -18, 49, -49, -5, -31, 16, 20, -74, 120], "k": [10, -27, -48, -14, 2, 32, 0, 26, -86, -40, -54, 9, 25, -78, -9, 39, 49, -60, 30, 18, -23, 105, -60, -15, 24, 13, -9, 74, 77, 49, 54, -3, -62, 117, -51, 119, -7, 12, -9, 51, -27, 99, 29, 9, -31, 15, 0, 102, 50, -83, 82, -127, 82, -101, 0, 43, 0, -59, 66, -95, -78, 74, -46, 13], "v": [36, -5, 12, 5, 10, 53, 42, 14, 41, -24, -34, -45, 35, 72, 4, -88, -23, 21, 13, 4, 44, 41, -60, 19, -33, 10, 55, 82, 31, -23, -16, 24, -44, -3, 27, 41, -13, 16, 61, 14, -77, 10, 11, -19, 2, -66, 56, 19, -24, 11, 6, -39, -119, -127, 90, -50, -13, 25, -16, 53, -42, 25, -93, 32], "out": [9215, -1280, 3072, 1280, 6355, 5102, 6373, 2270, 10491, -6125, -8658, -11470, 2560, 13567, 10751, 3584, 3188, 12008, 9212, 2389, 10301, -3593, -8188, -10745, -3058, 5700, 2834, -1029, -4296, 6241, 3029, -871, 10327, -6102, -8583, -11349, 8381, 6241, -9540, 5392, 8534, 9667, -13660, 4068, -11127, -955, 6998, 10430, 10369, -6079, -8365, -11416, 7007, -5315, -4396, -10996, -7559, 759, 2776, -10063, -11263, -768, 6912, 10495], "hbmRdBytes": 1344, "hbmWrBytes": 768, "tiles": 10, "kvLoads": 10, "cycles": 1807} diff --git a/wasm/fixtures/quantize_cases.json b/wasm/fixtures/quantize_cases.json new file mode 100644 index 0000000..c32be73 --- /dev/null +++ b/wasm/fixtures/quantize_cases.json @@ -0,0 +1 @@ +[{"q": [[-0.283382, -0.528287, 0.53104, -0.564676], [-0.889703, 0.327478, 0.420626, -0.474555], [-0.282665, 1.389864, -0.508719, -0.252895], [0.589378, 0.372703, 0.805902, 0.408878], [-0.20384, 0.05922, -0.275064, 0.402878], [0.254178, -0.615399, 0.242264, -0.409669], [0.036095, -0.19051, 0.141526, -1.297803], [0.222198, -0.711613, 0.586022, -0.591239]], "k": [[-0.258982, -0.355042, 0.128625, 0.529619], [0.106616, -0.011143, 0.082325, -0.05232], [0.02737, -0.368699, -0.067171, 0.736028], [0.558802, -0.852443, -0.105564, 0.102639], [-0.260723, -0.325666, -0.019627, 0.507788], [0.541794, 0.03095, 0.429302, -0.0391], [0.206953, -0.094943, -0.756294, -0.331443], [0.199616, 0.5957, 0.178161, 1.051879]], "v": [[0.476465, 0.039031, -0.209254, 1.151797], [-0.098492, -0.550443, 0.21203, -0.268006], [0.314327, -0.766253, 0.466236, 0.506388], [-0.17127, -0.478641, 0.076218, 0.594245], [-0.291272, -0.085652, 0.59421, 0.310303], [-0.054603, 0.180169, 0.098134, -0.202423], [-0.067431, -1.331788, 0.065146, 0.446861], [0.341614, -0.213461, 0.842527, 0.691142]], "expQ": [-26, -48, 49, -52, -81, 30, 38, -43, -26, 127, -46, -23, 54, 34, 74, 37, -19, 5, -25, 37, 23, -56, 22, -37, 3, -17, 13, -119, 20, -65, 54, -54], "expK": [-31, -43, 16, 64, 13, -1, 10, -6, 3, -45, -8, 89, 67, -103, -13, 12, -31, -39, -2, 61, 65, 4, 52, -5, 25, -11, -91, -40, 24, 72, 22, 127], "expV": [45, 4, -20, 110, -9, -52, 20, -26, 30, -73, 44, 48, -16, -46, 7, 57, -28, -8, 57, 30, -5, 17, 9, -19, -6, -127, 6, 43, 33, -20, 80, 66], "expCfgScale": 69}, {"q": [[-2.056649, -0.047359, -1.087408, -2.058658], [2.635656, 2.575381, -1.680271, -0.355153], [1.053427, -0.748836, 2.462101, 0.883379], [0.908495, -3.783927, 3.045371, -5.659234], [-0.171903, 2.771732, 0.252231, -1.968889], [-1.11108, -3.155553, 3.103468, 1.046743], [-2.311308, 4.502568, -1.358009, 0.971165], [-4.611653, -0.167566, 1.59568, 0.278147]], "k": [[-2.017265, 2.628403, -2.703924, 3.408485], [-0.447122, -0.185045, 0.9227, 1.047163], [5.001091, 0.471143, -3.899314, 0.892074], [-2.428529, -1.16533, -1.134585, 0.242654], [3.057073, 0.200078, -1.107099, -2.129778], [-2.024844, -1.193911, 0.503258, 0.244857], [1.939474, -5.398214, 1.842933, 1.644157], [-5.854755, 2.803383, -0.021981, -3.603847]], "v": [[0.753819, -3.074964, -0.545236, 1.386018], [2.750589, 2.512518, -0.515279, -5.521], [-1.764904, 0.666069, 1.882274, 0.297612], [-2.724376, -1.014148, -2.807792, -0.178616], [-4.60532, -0.278917, 1.914031, -2.833585], [2.81099, -6.281983, 1.545965, -3.122019], [-0.886001, 0.693789, 1.555868, -4.551788], [0.499527, -4.512649, 0.27532, -0.785656]], "expQ": [-46, -1, -24, -46, 59, 58, -38, -8, 24, -17, 55, 20, 20, -85, 68, -127, -4, 62, 6, -44, -25, -71, 70, 23, -52, 101, -30, 22, -103, -4, 36, 6], "expK": [-44, 57, -59, 74, -10, -4, 20, 23, 108, 10, -85, 19, -53, -25, -25, 5, 66, 4, -24, -46, -44, -26, 11, 5, 42, -117, 40, 36, -127, 61, 0, -78], "expV": [15, -62, -11, 28, 56, 51, -10, -112, -36, 13, 38, 6, -55, -21, -57, -4, -93, -6, 39, -57, 57, -127, 31, -63, -18, 14, 31, -92, 10, -91, 6, -16], "expCfgScale": 1554}, {"q": [[1.090317, -3.757014, -1.257445, -4.259259], [-0.036944, 2.527921, 1.884185, -0.814758], [3.849769, 1.765065, 4.220668, 1.235085], [-1.128191, 1.639744, 4.001473, -0.788424], [1.151847, -2.82357, 3.65268, -2.313873], [-6.787784, 2.926778, -4.843418, 4.69381], [-2.395345, -4.592776, -3.52801, 2.174838], [-1.916329, 2.350211, -3.749646, 3.002868]], "k": [[0.424498, 0.345275, 11.758277, -4.716368], [2.853894, -5.588018, -1.450848, -3.865635], [-2.124826, 0.144249, -4.452726, 1.965483], [-3.283827, 2.954054, -2.400268, -0.7326], [0.025563, -0.712493, 3.481012, 10.565833], [-0.01839, -2.119482, 0.12094, 1.528964], [-1.852631, 9.120015, -3.914529, 1.159727], [-4.36861, 3.065346, 5.542812, -1.732951]], "v": [[0.862498, -2.300643, 5.553393, 2.245425], [0.211326, -0.640342, 2.949191, -1.857825], [0.490078, -5.515286, -0.225703, 1.858454], [-3.827547, 2.874842, -3.689508, -3.254598], [-2.313559, 1.837163, -0.178773, 4.774336], [-9.932058, -1.376386, 4.984517, -2.513448], [5.241198, -0.875534, 9.56697, -7.537974], [4.61322, 5.550102, 4.514831, -5.322662]], "expQ": [20, -70, -24, -80, -1, 47, 35, -15, 72, 33, 79, 23, -21, 31, 75, -15, 22, -53, 68, -43, -127, 55, -91, 88, -45, -86, -66, 41, -36, 44, -70, 56], "expK": [5, 4, 127, -51, 31, -60, -16, -42, -23, 2, -48, 21, -35, 32, -26, -8, 0, -8, 38, 114, 0, -23, 1, 17, -20, 99, -42, 13, -47, 33, 60, -19], "expV": [11, -29, 71, 29, 3, -8, 38, -24, 6, -71, -3, 24, -49, 37, -47, -42, -30, 23, -2, 61, -127, -18, 64, -32, 67, -11, 122, -96, 59, 71, 58, -68], "expCfgScale": 3743}, {"q": [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]], "k": [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]], "v": [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]], "expQ": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "expK": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "expV": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "expCfgScale": 756388}] diff --git a/wasm/harness/bindings.cpp b/wasm/harness/bindings.cpp index 13044a6..356ad27 100644 --- a/wasm/harness/bindings.cpp +++ b/wasm/harness/bindings.cpp @@ -12,6 +12,20 @@ using namespace emscripten; namespace { std::vector toI32(const val& arr) { return vecFromJSArray(arr); } +val tileToJs(const TileState& t) { + val o = val::object(); + o.set("curGrp", t.curGrp); + o.set("srow", t.srow); + o.set("s", val::array(t.s.begin(), t.s.end())); + o.set("z", val::array(t.z.begin(), t.z.end())); + o.set("p", val::array(t.p.begin(), t.p.end())); + o.set("alpha", val::array(t.alpha.begin(), t.alpha.end())); + o.set("m", val::array(t.m.begin(), t.m.end())); + o.set("l", val::array(t.l.begin(), t.l.end())); + o.set("o", val::array(t.o.begin(), t.o.end())); + return o; +} + val snapshotToJs(const Snapshot& s) { val o = val::object(); o.set("cycle", s.cycle); @@ -50,5 +64,10 @@ EMSCRIPTEN_BINDINGS(tiny_attn) { return val::array(words.begin(), words.end()); })) .function("snapshot", optional_override([](TinyAttnSim& self) { return snapshotToJs(self.snapshot()); })) - .function("isDone", &TinyAttnSim::isDone); + .function("isDone", &TinyAttnSim::isDone) + .function("getTile", optional_override([](TinyAttnSim& self) { return tileToJs(self.getTile()); })) + .function("readProbabilities", optional_override([](TinyAttnSim& self) { + auto p = self.readProbabilities(); + return val::array(p.begin(), p.end()); + })); } diff --git a/wasm/harness/harness.cpp b/wasm/harness/harness.cpp index 0e04126..c5892a1 100644 --- a/wasm/harness/harness.cpp +++ b/wasm/harness/harness.cpp @@ -2,6 +2,31 @@ #include +namespace { +// Bit extraction from Verilator's word storage (wide ports are arrays of 32-bit words). +template +const uint32_t* wordsOf(const W& w) { + return &w[0]; +} +inline const uint32_t* wordsOf(const uint64_t& v, uint32_t* tmp) { + tmp[0] = static_cast(v); + tmp[1] = static_cast(v >> 32); + return tmp; +} +uint64_t bitsAt(const uint32_t* words, int lsb, int width) { + uint64_t v = 0; + for (int b = 0; b < width; ++b) { + int bit = lsb + b; + if ((words[bit >> 5] >> (bit & 31)) & 1u) v |= 1ull << b; + } + return v; +} +int64_t signExtend(uint64_t v, int width) { + if (width < 64 && ((v >> (width - 1)) & 1u)) return static_cast(v) - (1ll << width); + return static_cast(v); +} +} // namespace + namespace { // HBM layout (rtl/tiny_attn_pkg.sv) constexpr uint32_t Q_BASE = 0, K_BASE = 32, V_BASE = 64, O_BASE = 96; @@ -59,6 +84,7 @@ void TinyAttnSim::configure(int n, int qrows, bool causal, int mode, bool overla if (scale >= (1u << 24)) throw std::invalid_argument("scale must fit 24 bits"); n_ = n; qrows_ = qrows; + causal_ = causal; top_->cfg_nb = static_cast(n / 4); top_->cfg_gg = static_cast(qrows / 4); top_->cfg_causal = causal ? 1 : 0; @@ -153,3 +179,53 @@ std::vector TinyAttnSim::readHbm(int addr, int len) { } return words; } + +TileState TinyAttnSim::getTile() const { + TileState t; + t.curGrp = top_->dbg_cur_grp; + t.srow = top_->dbg_srow; + uint32_t tmp[2]; + const uint32_t* sw = wordsOf(top_->dbg_s_tile); + const uint32_t* zw = wordsOf(top_->dbg_z_tile); + const uint32_t* pw = wordsOf(top_->dbg_p_tile); + const uint32_t* aw = wordsOf(top_->dbg_alpha, tmp); + uint32_t tmp2[2]; + const uint32_t* mw = wordsOf(top_->dbg_m, tmp2); + const uint32_t* lw = wordsOf(top_->dbg_l); + const uint32_t* ow = wordsOf(top_->dbg_o); + for (int i = 0; i < 16; ++i) { + t.s.push_back(static_cast(signExtend(bitsAt(sw, i * 17, 17), 17))); + t.z.push_back(static_cast(signExtend(bitsAt(zw, i * 16, 16), 16))); + t.p.push_back(static_cast(static_cast(bitsAt(pw, i * 9, 9)))); + t.o.push_back(static_cast(signExtend(bitsAt(ow, i * 26, 26), 26))); + } + for (int i = 0; i < 4; ++i) { + t.alpha.push_back(static_cast(static_cast(bitsAt(aw, i * 16, 16)))); + t.m.push_back(static_cast(signExtend(bitsAt(mw, i * 16, 16), 16))); + t.l.push_back(static_cast(static_cast(bitsAt(lw, i * 18, 18)))); + } + return t; +} + +std::vector TinyAttnSim::readProbabilities() { + const int nb = n_ / 4; + std::vector p(static_cast(n_) * n_, 0); + for (int qi = 0; qi < nb; ++qi) { + for (int kj = 0; kj < nb; ++kj) { + // Z tile at 256 + 64*qi + 8*kj, P tile at 768 + ...: 8 words, two 16-bit lanes per word + const int base = 768 + 64 * qi + 8 * kj; + if (causal_ && kj > qi) continue; // never computed: stays zero + for (int r = 0; r < 4; ++r) { + for (int c = 0; c < 4; ++c) { + int word = base + 2 * r + c / 2; + top_->o_rd_addr = word; + evalComb(); + uint32_t w = top_->o_rd_word; + int32_t v = static_cast((w >> (16 * (c % 2))) & 0xFFFFu); + p[static_cast(qi * 4 + r) * n_ + kj * 4 + c] = v; + } + } + } + } + return p; +} diff --git a/wasm/harness/harness.h b/wasm/harness/harness.h index fba0d6a..cd4a7c7 100644 --- a/wasm/harness/harness.h +++ b/wasm/harness/harness.h @@ -23,6 +23,20 @@ struct Snapshot { uint32_t kvLoads; }; +// Tile-core state of the most recent tile (see attn_tile.sv dbg_* ports). S, Z, P, m, l, alpha and O are for the +// group of that tile: 4 rows (S/Z/P: 4 x 4 lanes, O: 4 x 4 columns). Values are signed or unsigned as in the RTL. +struct TileState { + int curGrp; + int srow; + std::vector s; // 16, S_W = 17 bit signed + std::vector z; // 16, Q8.8 signed + std::vector p; // 16, UQ1.8 (0..256) + std::vector alpha; // 4, UQ1.15 + std::vector m; // 4, Q8.8 signed + std::vector l; // 4, 18 bit unsigned + std::vector o; // 16, 26 bit signed +}; + class TinyAttnSim { public: TinyAttnSim(); @@ -47,6 +61,9 @@ class TinyAttnSim { std::vector readHbm(int addr, int len); Snapshot snapshot() const; bool isDone() const; + TileState getTile() const; + // P tiles written by a NAIVE run (HBM words 768..): n x n probabilities (UQ1.8), row-major. Requires n known. + std::vector readProbabilities(); private: void clockEdge(); @@ -56,5 +73,6 @@ class TinyAttnSim { Vtiny_attn_top* top_; int n_ = 4; int qrows_ = 4; + bool causal_ = false; uint32_t cycle_ = 0; }; diff --git a/wasm/test.mjs b/wasm/test.mjs index 289135a..a1e7459 100644 --- a/wasm/test.mjs +++ b/wasm/test.mjs @@ -11,8 +11,9 @@ const root = join(dirname(fileURLToPath(import.meta.url)), ".."); const { default: createTinyAttn } = await import(join(root, "web/public/tiny_attn.mjs")); const mod = await createTinyAttn(); +// engine runs only; quantize_cases.json holds quantization references for the web tests const fixtures = readdirSync(join(root, "wasm/fixtures")) - .filter((f) => f.endsWith(".json")) + .filter((f) => f.endsWith(".json") && !f.startsWith("quantize_")) .sort() .map((f) => JSON.parse(readFileSync(join(root, "wasm/fixtures", f), "utf8"))); @@ -58,6 +59,24 @@ for (const { fx, sim, last, finished } of sims) { check(last.tiles === fx.tiles, `tiles ${last.tiles} != ${fx.tiles}`); check(last.kvLoads === fx.kvLoads, `K/V loads ${last.kvLoads} != ${fx.kvLoads}`); check(last.cycles === fx.cycles, `busy cycles ${last.cycles} != ${fx.cycles}`); + if (fx.lastTile) { + // tile state of the last computed tile, against the golden trace entry for that tile + const t = sim.getTile(); + const G = fx.qrows / 4; + const lt = fx.lastTile; + check(t.curGrp === lt.qi - Math.floor(lt.qi / G) * G, `tile group ${t.curGrp}`); + check(JSON.stringify(t.m) === JSON.stringify(lt.m), `tile m ${t.m} != ${lt.m}`); + check(JSON.stringify(t.l) === JSON.stringify(lt.l), `tile l ${t.l} != ${lt.l}`); + check(JSON.stringify(t.alpha) === JSON.stringify(lt.alpha), `tile alpha ${t.alpha} != ${lt.alpha}`); + check(JSON.stringify(t.o) === JSON.stringify(lt.o), "tile O differs from golden"); + console.log(` last tile (qi=${lt.qi}, kj=${lt.kj}) state checked`); + } + if (fx.probs) { + const probs = Array.from(sim.readProbabilities()); + const badP = probs.findIndex((v, i) => v !== fx.probs[i]); + check(badP < 0, `probability ${badP} differs: expected ${fx.probs[badP]}, got ${probs[badP]}`); + console.log(` probabilities (${fx.n}x${fx.n}) checked`); + } console.log(` cycles ${last.cycles} read ${last.hbmRdBytes} B write ${last.hbmWrBytes} B tiles ${last.tiles}`); sim.delete(); } diff --git a/web/eslint.config.js b/web/eslint.config.js index 647ded7..3ed0649 100644 --- a/web/eslint.config.js +++ b/web/eslint.config.js @@ -39,6 +39,14 @@ export default [ react: { version: "detect" }, }, }, + { + files: ["**/*.test.ts"], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, { files: ["scripts/**/*.mjs", "scripts/**/*.js"], languageOptions: { diff --git a/web/package.json b/web/package.json index 3ec04a7..58086dd 100644 --- a/web/package.json +++ b/web/package.json @@ -8,7 +8,8 @@ "preview": "astro preview", "lint": "eslint .", "typecheck": "astro check && tsc --noEmit", - "format": "prettier --write ." + "format": "prettier --write .", + "test": "vitest run" }, "dependencies": { "@astrojs/react": "^4.4.2", @@ -24,6 +25,7 @@ "devDependencies": { "@astrojs/check": "^0.9.4", "@eslint/js": "^9.13.0", + "@types/node": "^22.20.5", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", "@typescript-eslint/eslint-plugin": "^8.12.2", @@ -34,6 +36,7 @@ "globals": "^17.6.0", "prettier": "^3.3.3", "prettier-plugin-tailwindcss": "^0.6.8", - "typescript": "^5.6.3" + "typescript": "^5.6.3", + "vitest": "^3.2.7" } } diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 8128631..d01436f 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -1,24 +1,25 @@ -lockfileVersion: "9.0" +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false importers: + .: dependencies: - "@astrojs/react": + '@astrojs/react': specifier: ^4.4.2 - version: 4.4.2(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(jiti@2.7.0)(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(supports-color@7.2.0)(yaml@2.9.1) - "@fontsource-variable/inter": + version: 4.4.2(@types/node@22.20.5)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(jiti@2.7.0)(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(supports-color@7.2.0)(yaml@2.9.1) + '@fontsource-variable/inter': specifier: ^5.0.0 version: 5.3.0 - "@tailwindcss/vite": + '@tailwindcss/vite': specifier: ^4.0.0 - version: 4.3.3(vite@6.4.5(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1)) + version: 4.3.3(vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1)) astro: specifier: ^5.0.0 - version: 5.18.2(jiti@2.7.0)(lightningcss@1.32.0)(rollup@4.65.0)(supports-color@7.2.0)(typescript@5.9.3)(yaml@2.9.1) + version: 5.18.2(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(rollup@4.65.0)(supports-color@7.2.0)(typescript@5.9.3)(yaml@2.9.1) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -35,22 +36,25 @@ importers: specifier: ^4.0.0 version: 4.3.3 devDependencies: - "@astrojs/check": + '@astrojs/check': specifier: ^0.9.4 version: 0.9.12(@emnapi/runtime@1.11.3)(prettier@3.9.10)(typescript@5.9.3) - "@eslint/js": + '@eslint/js': specifier: ^9.13.0 version: 9.39.5 - "@types/react": + '@types/node': + specifier: ^22.20.5 + version: 22.20.5 + '@types/react': specifier: ^18.3.12 version: 18.3.31 - "@types/react-dom": + '@types/react-dom': specifier: ^18.3.1 version: 18.3.7(@types/react@18.3.31) - "@typescript-eslint/eslint-plugin": + '@typescript-eslint/eslint-plugin': specifier: ^8.12.2 version: 8.72.0(@typescript-eslint/parser@8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - "@typescript-eslint/parser": + '@typescript-eslint/parser': specifier: ^8.12.2 version: 8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) eslint: @@ -74,1855 +78,1213 @@ importers: typescript: specifier: ^5.6.3 version: 5.9.3 + vitest: + specifier: ^3.2.7 + version: 3.2.7(@types/debug@4.1.13)(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(supports-color@7.2.0)(yaml@2.9.1) packages: - "@astrojs/astro2tsx@0.1.3": - resolution: - { - integrity: sha512-GMDC7Eo0myBUA/QLBl0u+OcegJ8LiBhccmNZR34KmprQNP8gQUJlWlOOZWUsxNA2rNS6GuPYcGDyLoPnjmn4/Q==, - } - engines: { node: ^20.19.0 || >=22.12.0 } - - "@astrojs/check@0.9.12": - resolution: - { - integrity: sha512-hazpqxIfZWj2VhyPyR0pOEQ/IhFDM/2nIApL96zMXABdD8NrUKYDmhxTy7h+drTDl9MQG/Sd1ET/4amadVJUUA==, - } + + '@astrojs/astro2tsx@0.1.3': + resolution: {integrity: sha512-GMDC7Eo0myBUA/QLBl0u+OcegJ8LiBhccmNZR34KmprQNP8gQUJlWlOOZWUsxNA2rNS6GuPYcGDyLoPnjmn4/Q==} + engines: {node: ^20.19.0 || >=22.12.0} + + '@astrojs/check@0.9.12': + resolution: {integrity: sha512-hazpqxIfZWj2VhyPyR0pOEQ/IhFDM/2nIApL96zMXABdD8NrUKYDmhxTy7h+drTDl9MQG/Sd1ET/4amadVJUUA==} hasBin: true peerDependencies: typescript: ^5.0.0 || ^6.0.0 - "@astrojs/compiler@2.13.1": - resolution: - { - integrity: sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==, - } - - "@astrojs/internal-helpers@0.7.6": - resolution: - { - integrity: sha512-GOle7smBWKfMSP8osUIGOlB5kaHdQLV3foCsf+5Q9Wsuu+C6Fs3Ez/ttXmhjZ1HkSgsogcM1RXSjjOVieHq16Q==, - } - - "@astrojs/language-server@2.17.3": - resolution: - { - integrity: sha512-QIAFu1e/4quJMTPdmBOm+ZPXc5NDGZE4/YQjgR3EgjhGLl/tdidaWJDr5WmO2lesVc+BW1qN/xNBURmuePDG2A==, - } + '@astrojs/compiler@2.13.1': + resolution: {integrity: sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==} + + '@astrojs/internal-helpers@0.7.6': + resolution: {integrity: sha512-GOle7smBWKfMSP8osUIGOlB5kaHdQLV3foCsf+5Q9Wsuu+C6Fs3Ez/ttXmhjZ1HkSgsogcM1RXSjjOVieHq16Q==} + + '@astrojs/language-server@2.17.3': + resolution: {integrity: sha512-QIAFu1e/4quJMTPdmBOm+ZPXc5NDGZE4/YQjgR3EgjhGLl/tdidaWJDr5WmO2lesVc+BW1qN/xNBURmuePDG2A==} hasBin: true peerDependencies: prettier: ^3.0.0 - prettier-plugin-astro: ">=0.11.0" + prettier-plugin-astro: '>=0.11.0' peerDependenciesMeta: prettier: optional: true prettier-plugin-astro: optional: true - "@astrojs/markdown-remark@6.3.11": - resolution: - { - integrity: sha512-hcaxX/5aC6lQgHeGh1i+aauvSwIT6cfyFjKWvExYSxUhZZBBdvCliOtu06gbQyhbe0pGJNoNmqNlQZ5zYUuIyQ==, - } - - "@astrojs/prism@3.3.0": - resolution: - { - integrity: sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==, - } - engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0 } - - "@astrojs/react@4.4.2": - resolution: - { - integrity: sha512-1tl95bpGfuaDMDn8O3x/5Dxii1HPvzjvpL2YTuqOOrQehs60I2DKiDgh1jrKc7G8lv+LQT5H15V6QONQ+9waeQ==, - } - engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0 } + '@astrojs/markdown-remark@6.3.11': + resolution: {integrity: sha512-hcaxX/5aC6lQgHeGh1i+aauvSwIT6cfyFjKWvExYSxUhZZBBdvCliOtu06gbQyhbe0pGJNoNmqNlQZ5zYUuIyQ==} + + '@astrojs/prism@3.3.0': + resolution: {integrity: sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + + '@astrojs/react@4.4.2': + resolution: {integrity: sha512-1tl95bpGfuaDMDn8O3x/5Dxii1HPvzjvpL2YTuqOOrQehs60I2DKiDgh1jrKc7G8lv+LQT5H15V6QONQ+9waeQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} peerDependencies: - "@types/react": ^17.0.50 || ^18.0.21 || ^19.0.0 - "@types/react-dom": ^17.0.17 || ^18.0.6 || ^19.0.0 + '@types/react': ^17.0.50 || ^18.0.21 || ^19.0.0 + '@types/react-dom': ^17.0.17 || ^18.0.6 || ^19.0.0 react: ^17.0.2 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.2 || ^18.0.0 || ^19.0.0 - "@astrojs/telemetry@3.3.0": - resolution: - { - integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==, - } - engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0 } - - "@astrojs/yaml2ts@0.2.4": - resolution: - { - integrity: sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A==, - } - - "@babel/code-frame@7.29.7": - resolution: - { - integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==, - } - engines: { node: ">=6.9.0" } - - "@babel/compat-data@7.29.7": - resolution: - { - integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==, - } - engines: { node: ">=6.9.0" } - - "@babel/core@7.29.7": - resolution: - { - integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==, - } - engines: { node: ">=6.9.0" } - - "@babel/generator@7.29.8": - resolution: - { - integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==, - } - engines: { node: ">=6.9.0" } - - "@babel/helper-compilation-targets@7.29.7": - resolution: - { - integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==, - } - engines: { node: ">=6.9.0" } - - "@babel/helper-globals@7.29.7": - resolution: - { - integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==, - } - engines: { node: ">=6.9.0" } - - "@babel/helper-module-imports@7.29.7": - resolution: - { - integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==, - } - engines: { node: ">=6.9.0" } - - "@babel/helper-module-transforms@7.29.7": - resolution: - { - integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==, - } - engines: { node: ">=6.9.0" } + '@astrojs/telemetry@3.3.0': + resolution: {integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + + '@astrojs/yaml2ts@0.2.4': + resolution: {integrity: sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A==} + + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.8': + resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 - - "@babel/helper-plugin-utils@7.29.7": - resolution: - { - integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==, - } - engines: { node: ">=6.9.0" } - - "@babel/helper-string-parser@7.29.7": - resolution: - { - integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==, - } - engines: { node: ">=6.9.0" } - - "@babel/helper-validator-identifier@7.29.7": - resolution: - { - integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==, - } - engines: { node: ">=6.9.0" } - - "@babel/helper-validator-option@7.29.7": - resolution: - { - integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==, - } - engines: { node: ">=6.9.0" } - - "@babel/helpers@7.29.10": - resolution: - { - integrity: sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==, - } - engines: { node: ">=6.9.0" } - - "@babel/parser@7.29.9": - resolution: - { - integrity: sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==, - } - engines: { node: ">=6.0.0" } + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.10': + resolution: {integrity: sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.9': + resolution: {integrity: sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==} + engines: {node: '>=6.0.0'} hasBin: true - "@babel/plugin-transform-react-jsx-self@7.29.7": - resolution: - { - integrity: sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==, - } - engines: { node: ">=6.9.0" } + '@babel/plugin-transform-react-jsx-self@7.29.7': + resolution: {integrity: sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 - - "@babel/plugin-transform-react-jsx-source@7.29.7": - resolution: - { - integrity: sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==, - } - engines: { node: ">=6.9.0" } + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.29.7': + resolution: {integrity: sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 - - "@babel/template@7.29.7": - resolution: - { - integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==, - } - engines: { node: ">=6.9.0" } - - "@babel/traverse@7.29.10": - resolution: - { - integrity: sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==, - } - engines: { node: ">=6.9.0" } - - "@babel/types@7.29.8": - resolution: - { - integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==, - } - engines: { node: ">=6.9.0" } - - "@capsizecss/unpack@4.0.1": - resolution: - { - integrity: sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==, - } - engines: { node: ">=18" } - - "@emmetio/abbreviation@2.3.3": - resolution: - { - integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==, - } - - "@emmetio/css-abbreviation@2.1.8": - resolution: - { - integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==, - } - - "@emmetio/css-parser@0.4.1": - resolution: - { - integrity: sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==, - } - - "@emmetio/html-matcher@1.3.0": - resolution: - { - integrity: sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==, - } - - "@emmetio/scanner@1.0.4": - resolution: - { - integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==, - } - - "@emmetio/stream-reader-utils@0.1.0": - resolution: - { - integrity: sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==, - } - - "@emmetio/stream-reader@2.2.0": - resolution: - { - integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==, - } - - "@emnapi/core@1.11.3": - resolution: - { - integrity: sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==, - } - - "@emnapi/runtime@1.11.3": - resolution: - { - integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==, - } - - "@emnapi/wasi-threads@1.2.3": - resolution: - { - integrity: sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==, - } - - "@esbuild/aix-ppc64@0.25.12": - resolution: - { - integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==, - } - engines: { node: ">=18" } + '@babel/core': ^7.0.0-0 + + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.10': + resolution: {integrity: sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.8': + resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} + engines: {node: '>=6.9.0'} + + '@capsizecss/unpack@4.0.1': + resolution: {integrity: sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==} + engines: {node: '>=18'} + + '@emmetio/abbreviation@2.3.3': + resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} + + '@emmetio/css-abbreviation@2.1.8': + resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} + + '@emmetio/css-parser@0.4.1': + resolution: {integrity: sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ==} + + '@emmetio/html-matcher@1.3.0': + resolution: {integrity: sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==} + + '@emmetio/scanner@1.0.4': + resolution: {integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==} + + '@emmetio/stream-reader-utils@0.1.0': + resolution: {integrity: sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==} + + '@emmetio/stream-reader@2.2.0': + resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} + + '@emnapi/core@1.11.3': + resolution: {integrity: sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==} + + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} + + '@emnapi/wasi-threads@1.2.3': + resolution: {integrity: sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==} + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - "@esbuild/aix-ppc64@0.27.7": - resolution: - { - integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==, - } - engines: { node: ">=18" } + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - "@esbuild/android-arm64@0.25.12": - resolution: - { - integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==, - } - engines: { node: ">=18" } + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - "@esbuild/android-arm64@0.27.7": - resolution: - { - integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==, - } - engines: { node: ">=18" } + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - "@esbuild/android-arm@0.25.12": - resolution: - { - integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==, - } - engines: { node: ">=18" } + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} cpu: [arm] os: [android] - "@esbuild/android-arm@0.27.7": - resolution: - { - integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==, - } - engines: { node: ">=18" } + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} cpu: [arm] os: [android] - "@esbuild/android-x64@0.25.12": - resolution: - { - integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==, - } - engines: { node: ">=18" } + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} cpu: [x64] os: [android] - "@esbuild/android-x64@0.27.7": - resolution: - { - integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==, - } - engines: { node: ">=18" } + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} cpu: [x64] os: [android] - "@esbuild/darwin-arm64@0.25.12": - resolution: - { - integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==, - } - engines: { node: ">=18" } + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - "@esbuild/darwin-arm64@0.27.7": - resolution: - { - integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==, - } - engines: { node: ">=18" } + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - "@esbuild/darwin-x64@0.25.12": - resolution: - { - integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==, - } - engines: { node: ">=18" } + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - "@esbuild/darwin-x64@0.27.7": - resolution: - { - integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==, - } - engines: { node: ">=18" } + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - "@esbuild/freebsd-arm64@0.25.12": - resolution: - { - integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-arm64@0.27.7": - resolution: - { - integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-x64@0.25.12": - resolution: - { - integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - "@esbuild/freebsd-x64@0.27.7": - resolution: - { - integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - "@esbuild/linux-arm64@0.25.12": - resolution: - { - integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - "@esbuild/linux-arm64@0.27.7": - resolution: - { - integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - "@esbuild/linux-arm@0.25.12": - resolution: - { - integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - "@esbuild/linux-arm@0.27.7": - resolution: - { - integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - "@esbuild/linux-ia32@0.25.12": - resolution: - { - integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==, - } - engines: { node: ">=18" } + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - "@esbuild/linux-ia32@0.27.7": - resolution: - { - integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==, - } - engines: { node: ">=18" } + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - "@esbuild/linux-loong64@0.25.12": - resolution: - { - integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==, - } - engines: { node: ">=18" } + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - "@esbuild/linux-loong64@0.27.7": - resolution: - { - integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==, - } - engines: { node: ">=18" } + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - "@esbuild/linux-mips64el@0.25.12": - resolution: - { - integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==, - } - engines: { node: ">=18" } + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - "@esbuild/linux-mips64el@0.27.7": - resolution: - { - integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==, - } - engines: { node: ">=18" } + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - "@esbuild/linux-ppc64@0.25.12": - resolution: - { - integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==, - } - engines: { node: ">=18" } + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - "@esbuild/linux-ppc64@0.27.7": - resolution: - { - integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==, - } - engines: { node: ">=18" } + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - "@esbuild/linux-riscv64@0.25.12": - resolution: - { - integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==, - } - engines: { node: ">=18" } + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - "@esbuild/linux-riscv64@0.27.7": - resolution: - { - integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==, - } - engines: { node: ">=18" } + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - "@esbuild/linux-s390x@0.25.12": - resolution: - { - integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==, - } - engines: { node: ">=18" } + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - "@esbuild/linux-s390x@0.27.7": - resolution: - { - integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==, - } - engines: { node: ">=18" } + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - "@esbuild/linux-x64@0.25.12": - resolution: - { - integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==, - } - engines: { node: ">=18" } + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - "@esbuild/linux-x64@0.27.7": - resolution: - { - integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==, - } - engines: { node: ">=18" } + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - "@esbuild/netbsd-arm64@0.25.12": - resolution: - { - integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - "@esbuild/netbsd-arm64@0.27.7": - resolution: - { - integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - "@esbuild/netbsd-x64@0.25.12": - resolution: - { - integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - "@esbuild/netbsd-x64@0.27.7": - resolution: - { - integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - "@esbuild/openbsd-arm64@0.25.12": - resolution: - { - integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - "@esbuild/openbsd-arm64@0.27.7": - resolution: - { - integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - "@esbuild/openbsd-x64@0.25.12": - resolution: - { - integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - "@esbuild/openbsd-x64@0.27.7": - resolution: - { - integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - "@esbuild/openharmony-arm64@0.25.12": - resolution: - { - integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==, - } - engines: { node: ">=18" } + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - "@esbuild/openharmony-arm64@0.27.7": - resolution: - { - integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==, - } - engines: { node: ">=18" } + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - "@esbuild/sunos-x64@0.25.12": - resolution: - { - integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==, - } - engines: { node: ">=18" } + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - "@esbuild/sunos-x64@0.27.7": - resolution: - { - integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==, - } - engines: { node: ">=18" } + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - "@esbuild/win32-arm64@0.25.12": - resolution: - { - integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==, - } - engines: { node: ">=18" } + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - "@esbuild/win32-arm64@0.27.7": - resolution: - { - integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==, - } - engines: { node: ">=18" } + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - "@esbuild/win32-ia32@0.25.12": - resolution: - { - integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==, - } - engines: { node: ">=18" } + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - "@esbuild/win32-ia32@0.27.7": - resolution: - { - integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==, - } - engines: { node: ">=18" } + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - "@esbuild/win32-x64@0.25.12": - resolution: - { - integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==, - } - engines: { node: ">=18" } + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} cpu: [x64] os: [win32] - "@esbuild/win32-x64@0.27.7": - resolution: - { - integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==, - } - engines: { node: ">=18" } + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} cpu: [x64] os: [win32] - "@eslint-community/eslint-utils@4.10.1": - resolution: - { - integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + '@eslint-community/eslint-utils@4.10.1': + resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - "@eslint-community/regexpp@4.12.2": - resolution: - { - integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==, - } - engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } - - "@eslint/config-array@0.21.2": - resolution: - { - integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - "@eslint/config-helpers@0.4.2": - resolution: - { - integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - "@eslint/core@0.17.0": - resolution: - { - integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - "@eslint/eslintrc@3.3.7": - resolution: - { - integrity: sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - "@eslint/js@9.39.5": - resolution: - { - integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - "@eslint/object-schema@2.1.7": - resolution: - { - integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - "@eslint/plugin-kit@0.4.1": - resolution: - { - integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - "@fontsource-variable/inter@5.3.0": - resolution: - { - integrity: sha512-OupL48va4JNofb97w6NYeF9S7W/kHNKM0Er8Dem5nqi4jeOLrVJDoE8tZEpnMJmtkvNbB1EIPPwHcdkF6b1oUA==, - } - - "@humanfs/core@0.19.2": - resolution: - { - integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==, - } - engines: { node: ">=18.18.0" } - - "@humanfs/node@0.16.8": - resolution: - { - integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==, - } - engines: { node: ">=18.18.0" } - - "@humanfs/types@0.15.0": - resolution: - { - integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==, - } - engines: { node: ">=18.18.0" } - - "@humanwhocodes/module-importer@1.0.1": - resolution: - { - integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, - } - engines: { node: ">=12.22" } - - "@humanwhocodes/retry@0.4.3": - resolution: - { - integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, - } - engines: { node: ">=18.18" } - - "@img/colour@1.1.0": - resolution: - { - integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==, - } - engines: { node: ">=18" } - - "@img/sharp-darwin-arm64@0.34.5": - resolution: - { - integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.7': + resolution: {integrity: sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.5': + resolution: {integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@fontsource-variable/inter@5.3.0': + resolution: {integrity: sha512-OupL48va4JNofb97w6NYeF9S7W/kHNKM0Er8Dem5nqi4jeOLrVJDoE8tZEpnMJmtkvNbB1EIPPwHcdkF6b1oUA==} + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - "@img/sharp-darwin-x64@0.34.5": - resolution: - { - integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - "@img/sharp-libvips-darwin-arm64@1.2.4": - resolution: - { - integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==, - } + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] - "@img/sharp-libvips-darwin-x64@1.2.4": - resolution: - { - integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==, - } + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] - "@img/sharp-libvips-linux-arm64@1.2.4": - resolution: - { - integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==, - } + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] libc: [glibc] - "@img/sharp-libvips-linux-arm@1.2.4": - resolution: - { - integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==, - } + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] libc: [glibc] - "@img/sharp-libvips-linux-ppc64@1.2.4": - resolution: - { - integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==, - } + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] libc: [glibc] - "@img/sharp-libvips-linux-riscv64@1.2.4": - resolution: - { - integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==, - } + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] libc: [glibc] - "@img/sharp-libvips-linux-s390x@1.2.4": - resolution: - { - integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==, - } + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] libc: [glibc] - "@img/sharp-libvips-linux-x64@1.2.4": - resolution: - { - integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==, - } + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] libc: [glibc] - "@img/sharp-libvips-linuxmusl-arm64@1.2.4": - resolution: - { - integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==, - } + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] libc: [musl] - "@img/sharp-libvips-linuxmusl-x64@1.2.4": - resolution: - { - integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==, - } + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] libc: [musl] - "@img/sharp-linux-arm64@0.34.5": - resolution: - { - integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] libc: [glibc] - "@img/sharp-linux-arm@0.34.5": - resolution: - { - integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] libc: [glibc] - "@img/sharp-linux-ppc64@0.34.5": - resolution: - { - integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] libc: [glibc] - "@img/sharp-linux-riscv64@0.34.5": - resolution: - { - integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] libc: [glibc] - "@img/sharp-linux-s390x@0.34.5": - resolution: - { - integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] libc: [glibc] - "@img/sharp-linux-x64@0.34.5": - resolution: - { - integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] libc: [glibc] - "@img/sharp-linuxmusl-arm64@0.34.5": - resolution: - { - integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] libc: [musl] - "@img/sharp-linuxmusl-x64@0.34.5": - resolution: - { - integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] libc: [musl] - "@img/sharp-wasm32@0.34.5": - resolution: - { - integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - "@img/sharp-win32-arm64@0.34.5": - resolution: - { - integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - "@img/sharp-win32-ia32@0.34.5": - resolution: - { - integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - "@img/sharp-win32-x64@0.34.5": - resolution: - { - integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] - "@jridgewell/gen-mapping@0.3.13": - resolution: - { - integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, - } - - "@jridgewell/remapping@2.3.5": - resolution: - { - integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, - } - - "@jridgewell/resolve-uri@3.1.2": - resolution: - { - integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, - } - engines: { node: ">=6.0.0" } - - "@jridgewell/sourcemap-codec@1.6.0": - resolution: - { - integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==, - } - - "@jridgewell/trace-mapping@0.3.31": - resolution: - { - integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, - } - - "@napi-rs/lzma-linux-x64-gnu@1.5.1": - resolution: - { - integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==, - } - engines: { node: ^22.20 || ^24.12 || >=25 } + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@napi-rs/lzma-linux-x64-gnu@1.5.1': + resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==} + engines: {node: ^22.20 || ^24.12 || >=25} cpu: [x64] os: [linux] libc: [glibc] - "@napi-rs/wasm-runtime@1.2.4": - resolution: - { - integrity: sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=23.5.0 } + '@napi-rs/wasm-runtime@1.2.4': + resolution: {integrity: sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} peerDependencies: - "@emnapi/core": ^1.7.1 || ^2.0.0-alpha.4 - "@emnapi/runtime": ^1.7.1 || ^2.0.0-alpha.4 - - "@oslojs/encoding@1.1.0": - resolution: - { - integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==, - } - - "@rolldown/pluginutils@1.0.0-beta.27": - resolution: - { - integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==, - } - - "@rollup/pluginutils@5.5.1": - resolution: - { - integrity: sha512-P9ZvnfouRu4MSC+ilERaw6FmZs8zqKhpHxEs4aGDGWQAMzQGXnhvCSvoNwokfNvdt7t3Y5Y4p6gStQgezeIqug==, - } - engines: { node: ">=14.0.0" } + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 + + '@oslojs/encoding@1.1.0': + resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + + '@rollup/pluginutils@5.5.1': + resolution: {integrity: sha512-P9ZvnfouRu4MSC+ilERaw6FmZs8zqKhpHxEs4aGDGWQAMzQGXnhvCSvoNwokfNvdt7t3Y5Y4p6gStQgezeIqug==} + engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true - "@rollup/rollup-android-arm-eabi@4.65.0": - resolution: - { - integrity: sha512-t2AnVba25baFdq7gczzS13JyVcdubLVbFX1X04mxrggDrTQPUXNv3XM0k9H1hr5tqvg7AVvtQ720QHAj0iYqhg==, - } + '@rollup/rollup-android-arm-eabi@4.65.0': + resolution: {integrity: sha512-t2AnVba25baFdq7gczzS13JyVcdubLVbFX1X04mxrggDrTQPUXNv3XM0k9H1hr5tqvg7AVvtQ720QHAj0iYqhg==} cpu: [arm] os: [android] - "@rollup/rollup-android-arm64@4.65.0": - resolution: - { - integrity: sha512-dNONUaEwPGhl/nuO2KV8VABWlcjYyU6KtZGN8dQv5OS5JU7JSCxPijVNKXbRJd0iuTzTiJ4TjPt/4bbvDRNiMQ==, - } + '@rollup/rollup-android-arm64@4.65.0': + resolution: {integrity: sha512-dNONUaEwPGhl/nuO2KV8VABWlcjYyU6KtZGN8dQv5OS5JU7JSCxPijVNKXbRJd0iuTzTiJ4TjPt/4bbvDRNiMQ==} cpu: [arm64] os: [android] - "@rollup/rollup-darwin-arm64@4.65.0": - resolution: - { - integrity: sha512-zWQqUH+9zavr2Bxuzfpuv2SIF3X31cr58TvSQC9o1GhpOvkqRwr60GkZdQcudyT/BEgdpdSafjgd2I13MbTL7g==, - } + '@rollup/rollup-darwin-arm64@4.65.0': + resolution: {integrity: sha512-zWQqUH+9zavr2Bxuzfpuv2SIF3X31cr58TvSQC9o1GhpOvkqRwr60GkZdQcudyT/BEgdpdSafjgd2I13MbTL7g==} cpu: [arm64] os: [darwin] - "@rollup/rollup-darwin-x64@4.65.0": - resolution: - { - integrity: sha512-RQYreBFWtO4//hIuOaZkYUnF/lPU4lz35dveDimDshWCJvVisVtJ/shmT9bkXK8wFJY+FJF89X6F3Cq1qI3LCw==, - } + '@rollup/rollup-darwin-x64@4.65.0': + resolution: {integrity: sha512-RQYreBFWtO4//hIuOaZkYUnF/lPU4lz35dveDimDshWCJvVisVtJ/shmT9bkXK8wFJY+FJF89X6F3Cq1qI3LCw==} cpu: [x64] os: [darwin] - "@rollup/rollup-freebsd-arm64@4.65.0": - resolution: - { - integrity: sha512-A0NfMj6Cuh/9BE5k3awJKv6HoxFVXIcLAb6SZqAMoxUHPA1ZNNK4RsGuUPD/vL7nEAm9LG+ZzXWWTrnC0XtkpA==, - } + '@rollup/rollup-freebsd-arm64@4.65.0': + resolution: {integrity: sha512-A0NfMj6Cuh/9BE5k3awJKv6HoxFVXIcLAb6SZqAMoxUHPA1ZNNK4RsGuUPD/vL7nEAm9LG+ZzXWWTrnC0XtkpA==} cpu: [arm64] os: [freebsd] - "@rollup/rollup-freebsd-x64@4.65.0": - resolution: - { - integrity: sha512-BI6/H7q3aP0I7S7GOrjyxTjgEJlSnovXE38+bdxBpuKN6z+d//uF+T+VQ3Q7ltJL/71p17ufartARX9Ja5gOGQ==, - } + '@rollup/rollup-freebsd-x64@4.65.0': + resolution: {integrity: sha512-BI6/H7q3aP0I7S7GOrjyxTjgEJlSnovXE38+bdxBpuKN6z+d//uF+T+VQ3Q7ltJL/71p17ufartARX9Ja5gOGQ==} cpu: [x64] os: [freebsd] - "@rollup/rollup-linux-arm-gnueabihf@4.65.0": - resolution: - { - integrity: sha512-W1vUprf09RWaVWnsFP1vlUkEWJzTZlpObOEAYZXt9Fq0UVAOYEkeGr7wBX7McKqqIQskXdBnpiOMgwPujordgA==, - } + '@rollup/rollup-linux-arm-gnueabihf@4.65.0': + resolution: {integrity: sha512-W1vUprf09RWaVWnsFP1vlUkEWJzTZlpObOEAYZXt9Fq0UVAOYEkeGr7wBX7McKqqIQskXdBnpiOMgwPujordgA==} cpu: [arm] os: [linux] libc: [glibc] - "@rollup/rollup-linux-arm-musleabihf@4.65.0": - resolution: - { - integrity: sha512-s8QTcZWgrl9haFzEGIqyE5BWyo89pFDGLMBFZ752WYxk8DJwNU/O1X6pZgPw829d9/sm6CCHyrMP3aurt76p1Q==, - } + '@rollup/rollup-linux-arm-musleabihf@4.65.0': + resolution: {integrity: sha512-s8QTcZWgrl9haFzEGIqyE5BWyo89pFDGLMBFZ752WYxk8DJwNU/O1X6pZgPw829d9/sm6CCHyrMP3aurt76p1Q==} cpu: [arm] os: [linux] libc: [musl] - "@rollup/rollup-linux-arm64-gnu@4.65.0": - resolution: - { - integrity: sha512-ke1f6dLRzkqveyjjF2fkEwQYZvxHtNNwjegY8nJrwcO0Bdqr8CzFO/pKE0Bns13cx0qz2Ba2Y0Hs3dSwMdnHxA==, - } + '@rollup/rollup-linux-arm64-gnu@4.65.0': + resolution: {integrity: sha512-ke1f6dLRzkqveyjjF2fkEwQYZvxHtNNwjegY8nJrwcO0Bdqr8CzFO/pKE0Bns13cx0qz2Ba2Y0Hs3dSwMdnHxA==} cpu: [arm64] os: [linux] libc: [glibc] - "@rollup/rollup-linux-arm64-musl@4.65.0": - resolution: - { - integrity: sha512-926SMeUcy4y18Rz/w2aJiUKOnyAnm6czg72bXkQEaeemsll+Wr0hnsjb2BGRpHvWgwAMYy5ACJCotbvfLCfj0A==, - } + '@rollup/rollup-linux-arm64-musl@4.65.0': + resolution: {integrity: sha512-926SMeUcy4y18Rz/w2aJiUKOnyAnm6czg72bXkQEaeemsll+Wr0hnsjb2BGRpHvWgwAMYy5ACJCotbvfLCfj0A==} cpu: [arm64] os: [linux] libc: [musl] - "@rollup/rollup-linux-loong64-gnu@4.65.0": - resolution: - { - integrity: sha512-6T7JNRP1hc4hqF2dUsEoVLOt9K8tmODoCLldtQRYnrddGGQY8Gqe2pM/qMMUo7EMowpP7oa2N95k0/8sYK/ipw==, - } + '@rollup/rollup-linux-loong64-gnu@4.65.0': + resolution: {integrity: sha512-6T7JNRP1hc4hqF2dUsEoVLOt9K8tmODoCLldtQRYnrddGGQY8Gqe2pM/qMMUo7EMowpP7oa2N95k0/8sYK/ipw==} cpu: [loong64] os: [linux] libc: [glibc] - "@rollup/rollup-linux-loong64-musl@4.65.0": - resolution: - { - integrity: sha512-SImGFl1Je5kpyAgOCPONVT7h6ASV8mAUwGRjY7eZvVjPg//PfHOXgI+P241RF/+HqsA4PP3qD527ysWFKNQyhQ==, - } + '@rollup/rollup-linux-loong64-musl@4.65.0': + resolution: {integrity: sha512-SImGFl1Je5kpyAgOCPONVT7h6ASV8mAUwGRjY7eZvVjPg//PfHOXgI+P241RF/+HqsA4PP3qD527ysWFKNQyhQ==} cpu: [loong64] os: [linux] libc: [musl] - "@rollup/rollup-linux-ppc64-gnu@4.65.0": - resolution: - { - integrity: sha512-XeDTbmPF1Yu5asfXGPrMkWoxTDhgryQbmw5Q1+R582O51VNCk23J6f2pDrsAp5YkneBVBwtExx6ZGOb9D2aQ6A==, - } + '@rollup/rollup-linux-ppc64-gnu@4.65.0': + resolution: {integrity: sha512-XeDTbmPF1Yu5asfXGPrMkWoxTDhgryQbmw5Q1+R582O51VNCk23J6f2pDrsAp5YkneBVBwtExx6ZGOb9D2aQ6A==} cpu: [ppc64] os: [linux] libc: [glibc] - "@rollup/rollup-linux-ppc64-musl@4.65.0": - resolution: - { - integrity: sha512-VS55JUI/1nsljmV/jfqNkLZXFw8uMO8nNlfoHmSevNf6fO3neuhyDvx9dv3c/Ytt8r/431SL8Qax1dpYvOMZTg==, - } + '@rollup/rollup-linux-ppc64-musl@4.65.0': + resolution: {integrity: sha512-VS55JUI/1nsljmV/jfqNkLZXFw8uMO8nNlfoHmSevNf6fO3neuhyDvx9dv3c/Ytt8r/431SL8Qax1dpYvOMZTg==} cpu: [ppc64] os: [linux] libc: [musl] - "@rollup/rollup-linux-riscv64-gnu@4.65.0": - resolution: - { - integrity: sha512-Vblw84TbX7RS4la1Y4+yQ7aore/oSyaNtFbppuBr5Vs/4LfBeXKq9dIfoExw6zOvRERqd2rRAjnZRaMhH/0x5w==, - } + '@rollup/rollup-linux-riscv64-gnu@4.65.0': + resolution: {integrity: sha512-Vblw84TbX7RS4la1Y4+yQ7aore/oSyaNtFbppuBr5Vs/4LfBeXKq9dIfoExw6zOvRERqd2rRAjnZRaMhH/0x5w==} cpu: [riscv64] os: [linux] libc: [glibc] - "@rollup/rollup-linux-riscv64-musl@4.65.0": - resolution: - { - integrity: sha512-7+gHjtONvKgwR9InTKFaLq53f6YzBJkgeMRBENdWTsQr+spahGqQm8HF5aXpq8i4JaRrOqYyv6Zn1WltDTxaZQ==, - } + '@rollup/rollup-linux-riscv64-musl@4.65.0': + resolution: {integrity: sha512-7+gHjtONvKgwR9InTKFaLq53f6YzBJkgeMRBENdWTsQr+spahGqQm8HF5aXpq8i4JaRrOqYyv6Zn1WltDTxaZQ==} cpu: [riscv64] os: [linux] libc: [musl] - "@rollup/rollup-linux-s390x-gnu@4.65.0": - resolution: - { - integrity: sha512-KvNDC0J6s4vVHhtJ6KrDXU0Er0au/hmRIBq/+1maCV8TseGupeKizq0bWcrbp2HE1T8xoknvN0Q/KZ/YF0qX3w==, - } + '@rollup/rollup-linux-s390x-gnu@4.65.0': + resolution: {integrity: sha512-KvNDC0J6s4vVHhtJ6KrDXU0Er0au/hmRIBq/+1maCV8TseGupeKizq0bWcrbp2HE1T8xoknvN0Q/KZ/YF0qX3w==} cpu: [s390x] os: [linux] libc: [glibc] - "@rollup/rollup-linux-x64-gnu@4.65.0": - resolution: - { - integrity: sha512-GExdD15WPvu/x/drELjVam7vX8EsPgvTMOa/iJL/p/4m/oOqzbb7JXZg8fXR4hlXtg/sF2zyTZ3bR0AEtEMlhQ==, - } + '@rollup/rollup-linux-x64-gnu@4.65.0': + resolution: {integrity: sha512-GExdD15WPvu/x/drELjVam7vX8EsPgvTMOa/iJL/p/4m/oOqzbb7JXZg8fXR4hlXtg/sF2zyTZ3bR0AEtEMlhQ==} cpu: [x64] os: [linux] libc: [glibc] - "@rollup/rollup-linux-x64-musl@4.65.0": - resolution: - { - integrity: sha512-8sT9PemIZfIMED4Vd4KGoOXVDj5CMSWNcGdbheRUx9TYS03yOWdT2Q0lXPyEyNBB9YTilwewIQKNIBk6Nxi0Kg==, - } + '@rollup/rollup-linux-x64-musl@4.65.0': + resolution: {integrity: sha512-8sT9PemIZfIMED4Vd4KGoOXVDj5CMSWNcGdbheRUx9TYS03yOWdT2Q0lXPyEyNBB9YTilwewIQKNIBk6Nxi0Kg==} cpu: [x64] os: [linux] libc: [musl] - "@rollup/rollup-openbsd-x64@4.65.0": - resolution: - { - integrity: sha512-pO6Ehi0jo5yE0R6PltKhJhv9mlIiyzBJk5N5NUF2OF6xtVKI+1bdXxj/rb0jGXy3hck1ELVT0QPY3tzkAm360w==, - } + '@rollup/rollup-openbsd-x64@4.65.0': + resolution: {integrity: sha512-pO6Ehi0jo5yE0R6PltKhJhv9mlIiyzBJk5N5NUF2OF6xtVKI+1bdXxj/rb0jGXy3hck1ELVT0QPY3tzkAm360w==} cpu: [x64] os: [openbsd] - "@rollup/rollup-openharmony-arm64@4.65.0": - resolution: - { - integrity: sha512-vo7N3/+cjjPDYr8vtxC+qSNgWa9sDvJ7g8N8R5SWqFY4WiNH1ULcAU70SKVyHeiIZOYYwNP9pTipmhN5sl1NPw==, - } + '@rollup/rollup-openharmony-arm64@4.65.0': + resolution: {integrity: sha512-vo7N3/+cjjPDYr8vtxC+qSNgWa9sDvJ7g8N8R5SWqFY4WiNH1ULcAU70SKVyHeiIZOYYwNP9pTipmhN5sl1NPw==} cpu: [arm64] os: [openharmony] - "@rollup/rollup-win32-arm64-msvc@4.65.0": - resolution: - { - integrity: sha512-ArwvgFAbjKcDM7qqotZ4OVYf+UMT9xH2YzkCzK4+AuZSDihMlz1Ekoe4INwBVXzn2mnJzuIYOcSx07iTBijGRQ==, - } + '@rollup/rollup-win32-arm64-msvc@4.65.0': + resolution: {integrity: sha512-ArwvgFAbjKcDM7qqotZ4OVYf+UMT9xH2YzkCzK4+AuZSDihMlz1Ekoe4INwBVXzn2mnJzuIYOcSx07iTBijGRQ==} cpu: [arm64] os: [win32] - "@rollup/rollup-win32-ia32-msvc@4.65.0": - resolution: - { - integrity: sha512-QGMmK4/cxKE/36FoLMSHQBCyymv/eFTnsCvvsBF0rgmOvVbvX78VWZRerL3dHa77f4pM6Xcc2iGDhJ10w/svKQ==, - } + '@rollup/rollup-win32-ia32-msvc@4.65.0': + resolution: {integrity: sha512-QGMmK4/cxKE/36FoLMSHQBCyymv/eFTnsCvvsBF0rgmOvVbvX78VWZRerL3dHa77f4pM6Xcc2iGDhJ10w/svKQ==} cpu: [ia32] os: [win32] - "@rollup/rollup-win32-x64-gnu@4.65.0": - resolution: - { - integrity: sha512-XfKYFWHIPs4HPODIMsGF1IKlS3H1e3WokUZIgpmn4+uNnZBlnRDDHEylNyazbQXwhMKZre68OjtRYbKqb5+j8w==, - } + '@rollup/rollup-win32-x64-gnu@4.65.0': + resolution: {integrity: sha512-XfKYFWHIPs4HPODIMsGF1IKlS3H1e3WokUZIgpmn4+uNnZBlnRDDHEylNyazbQXwhMKZre68OjtRYbKqb5+j8w==} cpu: [x64] os: [win32] - "@rollup/rollup-win32-x64-msvc@4.65.0": - resolution: - { - integrity: sha512-wPWi++K4Bs1VR4XihOhfGi4IGX6Cub7FlerTf8X2v+2BtDHddgSqWCXwGD+h2yAe4/niIhNDwAltioOC+wEogQ==, - } + '@rollup/rollup-win32-x64-msvc@4.65.0': + resolution: {integrity: sha512-wPWi++K4Bs1VR4XihOhfGi4IGX6Cub7FlerTf8X2v+2BtDHddgSqWCXwGD+h2yAe4/niIhNDwAltioOC+wEogQ==} cpu: [x64] os: [win32] - "@shikijs/core@3.23.0": - resolution: - { - integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==, - } - - "@shikijs/engine-javascript@3.23.0": - resolution: - { - integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==, - } - - "@shikijs/engine-oniguruma@3.23.0": - resolution: - { - integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==, - } - - "@shikijs/langs@3.23.0": - resolution: - { - integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==, - } - - "@shikijs/themes@3.23.0": - resolution: - { - integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==, - } - - "@shikijs/types@3.23.0": - resolution: - { - integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==, - } - - "@shikijs/vscode-textmate@10.1.0": - resolution: - { - integrity: sha512-cVBuhDQjBZaNMTwBquYfPydrUP+E3hE6oYGasx8h6ZrODIM7/r+gxLDXdd66oszbrggZHEntdE6j+5gYIVyMWQ==, - } - - "@tailwindcss/node@4.3.3": - resolution: - { - integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==, - } - - "@tailwindcss/oxide-android-arm64@4.3.3": - resolution: - { - integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==, - } - engines: { node: ">= 20" } + '@shikijs/core@3.23.0': + resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==} + + '@shikijs/engine-javascript@3.23.0': + resolution: {integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==} + + '@shikijs/engine-oniguruma@3.23.0': + resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} + + '@shikijs/langs@3.23.0': + resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} + + '@shikijs/themes@3.23.0': + resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} + + '@shikijs/types@3.23.0': + resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} + + '@shikijs/vscode-textmate@10.1.0': + resolution: {integrity: sha512-cVBuhDQjBZaNMTwBquYfPydrUP+E3hE6oYGasx8h6ZrODIM7/r+gxLDXdd66oszbrggZHEntdE6j+5gYIVyMWQ==} + + '@tailwindcss/node@4.3.3': + resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==} + + '@tailwindcss/oxide-android-arm64@4.3.3': + resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==} + engines: {node: '>= 20'} cpu: [arm64] os: [android] - "@tailwindcss/oxide-darwin-arm64@4.3.3": - resolution: - { - integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-darwin-arm64@4.3.3': + resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==} + engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - "@tailwindcss/oxide-darwin-x64@4.3.3": - resolution: - { - integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-darwin-x64@4.3.3': + resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==} + engines: {node: '>= 20'} cpu: [x64] os: [darwin] - "@tailwindcss/oxide-freebsd-x64@4.3.3": - resolution: - { - integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-freebsd-x64@4.3.3': + resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==} + engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - "@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3": - resolution: - { - integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==} + engines: {node: '>= 20'} cpu: [arm] os: [linux] - "@tailwindcss/oxide-linux-arm64-gnu@4.3.3": - resolution: - { - integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [glibc] - "@tailwindcss/oxide-linux-arm64-musl@4.3.3": - resolution: - { - integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [musl] - "@tailwindcss/oxide-linux-x64-gnu@4.3.3": - resolution: - { - integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [glibc] - "@tailwindcss/oxide-linux-x64-musl@4.3.3": - resolution: - { - integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [musl] - "@tailwindcss/oxide-wasm32-wasi@4.3.3": - resolution: - { - integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==, - } - engines: { node: ">=14.0.0" } + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==} + engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: - - "@napi-rs/wasm-runtime" - - "@emnapi/core" - - "@emnapi/runtime" - - "@tybys/wasm-util" - - "@emnapi/wasi-threads" + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' - tslib - "@tailwindcss/oxide-win32-arm64-msvc@4.3.3": - resolution: - { - integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==} + engines: {node: '>= 20'} cpu: [arm64] os: [win32] - "@tailwindcss/oxide-win32-x64-msvc@4.3.3": - resolution: - { - integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==} + engines: {node: '>= 20'} cpu: [x64] os: [win32] - "@tailwindcss/oxide@4.3.3": - resolution: - { - integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==, - } - engines: { node: ">= 20" } - - "@tailwindcss/vite@4.3.3": - resolution: - { - integrity: sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==, - } + '@tailwindcss/oxide@4.3.3': + resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} + engines: {node: '>= 20'} + + '@tailwindcss/vite@4.3.3': + resolution: {integrity: sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - "@tybys/wasm-util@0.10.4": - resolution: - { - integrity: sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==, - } - - "@types/babel__core@7.20.5": - resolution: - { - integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, - } - - "@types/babel__generator@7.27.0": - resolution: - { - integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==, - } - - "@types/babel__template@7.4.4": - resolution: - { - integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, - } - - "@types/babel__traverse@7.28.0": - resolution: - { - integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==, - } - - "@types/debug@4.1.13": - resolution: - { - integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==, - } - - "@types/estree@1.0.9": - resolution: - { - integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==, - } - - "@types/hast@3.0.5": - resolution: - { - integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==, - } - - "@types/json-schema@7.0.15": - resolution: - { - integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, - } - - "@types/mdast@4.0.4": - resolution: - { - integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==, - } - - "@types/ms@2.1.0": - resolution: - { - integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==, - } - - "@types/nlcst@2.0.3": - resolution: - { - integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==, - } - - "@types/prop-types@15.7.15": - resolution: - { - integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==, - } - - "@types/react-dom@18.3.7": - resolution: - { - integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==, - } + '@tybys/wasm-util@0.10.4': + resolution: {integrity: sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/nlcst@2.0.3': + resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + + '@types/node@22.20.5': + resolution: {integrity: sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA==} + + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + + '@types/react-dom@18.3.7': + resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} peerDependencies: - "@types/react": ^18.0.0 - - "@types/react@18.3.31": - resolution: - { - integrity: sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==, - } - - "@types/unist@3.0.3": - resolution: - { - integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==, - } - - "@typescript-eslint/eslint-plugin@8.72.0": - resolution: - { - integrity: sha512-aysKgysPX9XOv/dk95UkvUDe++Q3n3dJPG9CEWT3RUccxfkPJ+Qn6nhKPDhZXU6Ofo9kgwGWwKyQCnZIXTgngg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@types/react': ^18.0.0 + + '@types/react@18.3.31': + resolution: {integrity: sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@typescript-eslint/eslint-plugin@8.72.0': + resolution: {integrity: sha512-aysKgysPX9XOv/dk95UkvUDe++Q3n3dJPG9CEWT3RUccxfkPJ+Qn6nhKPDhZXU6Ofo9kgwGWwKyQCnZIXTgngg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - "@typescript-eslint/parser": ^8.72.0 + '@typescript-eslint/parser': ^8.72.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.1.0" - - "@typescript-eslint/parser@8.72.0": - resolution: - { - integrity: sha512-0O+x3ynciD6zuXb1CKSu165haQV6ey53DKhHHUnujP7U+XlltJG+/keT0Xhd1HXCze+IHf7Tvt39ovyepX/LNw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/parser@8.72.0': + resolution: {integrity: sha512-0O+x3ynciD6zuXb1CKSu165haQV6ey53DKhHHUnujP7U+XlltJG+/keT0Xhd1HXCze+IHf7Tvt39ovyepX/LNw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.1.0" - - "@typescript-eslint/project-service@8.72.0": - resolution: - { - integrity: sha512-bzHngBbmIgzj6TsTjVUCntGx6FFLgE7mPjpO0PzHycOaZHXqS43XnrkFIHRS16LLr/xO6FHSXG3GJFo/F4bSBQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/project-service@8.72.0': + resolution: {integrity: sha512-bzHngBbmIgzj6TsTjVUCntGx6FFLgE7mPjpO0PzHycOaZHXqS43XnrkFIHRS16LLr/xO6FHSXG3GJFo/F4bSBQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: ">=4.8.4 <6.1.0" - - "@typescript-eslint/scope-manager@8.72.0": - resolution: - { - integrity: sha512-JewPyJOYcXBSAS7PIgufscHOwZqhTGyBRiQJhhuDln66tMchxvvt7nJ90JKKIoOelmdHA3kAQbm9cEUHc4JSEA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - "@typescript-eslint/tsconfig-utils@8.72.0": - resolution: - { - integrity: sha512-0vbxCf7xLVPSjcOdm6eQbgViH8EDJ8xnl1laLT9yoqSz2YmcSfSg5Vdl0JUvZf6rcuJ0ZivJIuMD4edTg8obaA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/scope-manager@8.72.0': + resolution: {integrity: sha512-JewPyJOYcXBSAS7PIgufscHOwZqhTGyBRiQJhhuDln66tMchxvvt7nJ90JKKIoOelmdHA3kAQbm9cEUHc4JSEA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.72.0': + resolution: {integrity: sha512-0vbxCf7xLVPSjcOdm6eQbgViH8EDJ8xnl1laLT9yoqSz2YmcSfSg5Vdl0JUvZf6rcuJ0ZivJIuMD4edTg8obaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: ">=4.8.4 <6.1.0" - - "@typescript-eslint/type-utils@8.72.0": - resolution: - { - integrity: sha512-gEXxmmbSTSOVTC37IYYvremOM31v+UN2W772bJxmVYPhAOPSUxtacyb7wkm1EhkYKU6KzFJsdU44DCV4to0LWw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.72.0': + resolution: {integrity: sha512-gEXxmmbSTSOVTC37IYYvremOM31v+UN2W772bJxmVYPhAOPSUxtacyb7wkm1EhkYKU6KzFJsdU44DCV4to0LWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.1.0" - - "@typescript-eslint/types@8.72.0": - resolution: - { - integrity: sha512-Adfoy59kxNEjT5E5fnyrp7GpHYuWs8ONbdohu4ez6IU46qDq8LltG90tLmkucZB2uhYL8mqBjtXqGd8yhfjXqQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - "@typescript-eslint/typescript-estree@8.72.0": - resolution: - { - integrity: sha512-gwLfFgWcw15tN2KXDCJvxEOQjPn+P3j/n3eSqkZ5sX4VpW9Cosodr+tWwBZRvJT3TcKx6HnPRGZMCNAiP1Xhug==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.72.0': + resolution: {integrity: sha512-Adfoy59kxNEjT5E5fnyrp7GpHYuWs8ONbdohu4ez6IU46qDq8LltG90tLmkucZB2uhYL8mqBjtXqGd8yhfjXqQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.72.0': + resolution: {integrity: sha512-gwLfFgWcw15tN2KXDCJvxEOQjPn+P3j/n3eSqkZ5sX4VpW9Cosodr+tWwBZRvJT3TcKx6HnPRGZMCNAiP1Xhug==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: ">=4.8.4 <6.1.0" - - "@typescript-eslint/utils@8.72.0": - resolution: - { - integrity: sha512-0up3oArJZBYnzOaEXKo8DmI43QvMZyPoFEt9LWzRJcyl/RcJjfKKPebknN1VbTgXBf3M/KggUh5uUMdURLnseg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.72.0': + resolution: {integrity: sha512-0up3oArJZBYnzOaEXKo8DmI43QvMZyPoFEt9LWzRJcyl/RcJjfKKPebknN1VbTgXBf3M/KggUh5uUMdURLnseg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.1.0" - - "@typescript-eslint/visitor-keys@8.72.0": - resolution: - { - integrity: sha512-E2mroviasaWecDzTGiGMtuEguuLVOeRggnrIn93CJuxYJzQBHbyymlT08aVQydbBal5538o+JkBKXh2sRuCyIA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - "@ungap/structured-clone@1.4.0": - resolution: - { - integrity: sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==, - } - - "@vitejs/plugin-react@4.7.0": - resolution: - { - integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.72.0': + resolution: {integrity: sha512-E2mroviasaWecDzTGiGMtuEguuLVOeRggnrIn93CJuxYJzQBHbyymlT08aVQydbBal5538o+JkBKXh2sRuCyIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.4.0': + resolution: {integrity: sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==} + + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - "@volar/kit@2.4.30": - resolution: - { - integrity: sha512-VocLtumfXnqnPQEWc9Yx7uC1uOh9gyjVNlrn2+6Zx/z9aM6yTLhPK8lSqM9Ilu81XRa48I00lcYJWLi2BLxx8Q==, - } + '@vitest/expect@3.2.7': + resolution: {integrity: sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==} + + '@vitest/mocker@3.2.7': + resolution: {integrity: sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.2.7': + resolution: {integrity: sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==} + + '@vitest/runner@3.2.7': + resolution: {integrity: sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==} + + '@vitest/snapshot@3.2.7': + resolution: {integrity: sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==} + + '@vitest/spy@3.2.7': + resolution: {integrity: sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==} + + '@vitest/utils@3.2.7': + resolution: {integrity: sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==} + + '@volar/kit@2.4.30': + resolution: {integrity: sha512-VocLtumfXnqnPQEWc9Yx7uC1uOh9gyjVNlrn2+6Zx/z9aM6yTLhPK8lSqM9Ilu81XRa48I00lcYJWLi2BLxx8Q==} peerDependencies: typescript: <7 - "@volar/language-core@2.4.30": - resolution: - { - integrity: sha512-73fjwEV8wat6aOZ6U/y/hqtE30ocrIWECg67b0txGczOMNw+MffLmvJ5fnFfN9drVUEYZzLdaNo6VAy6G6avMw==, - } - - "@volar/language-server@2.4.30": - resolution: - { - integrity: sha512-tcP9fzzUBbsLIFHhgnRU4ncQjMn9G9Vax0ffkQmdCrXVEYqRroUepmyC5AVgiju5bCiLD6a55qen5iOTQHkb3g==, - } + '@volar/language-core@2.4.30': + resolution: {integrity: sha512-73fjwEV8wat6aOZ6U/y/hqtE30ocrIWECg67b0txGczOMNw+MffLmvJ5fnFfN9drVUEYZzLdaNo6VAy6G6avMw==} + + '@volar/language-server@2.4.30': + resolution: {integrity: sha512-tcP9fzzUBbsLIFHhgnRU4ncQjMn9G9Vax0ffkQmdCrXVEYqRroUepmyC5AVgiju5bCiLD6a55qen5iOTQHkb3g==} peerDependencies: typescript: <7 peerDependenciesMeta: typescript: optional: true - "@volar/language-service@2.4.30": - resolution: - { - integrity: sha512-w/xDsASiqC71ggCOm7sTDXDNk/l72XEptodeRC68tgZ0e5QM4hM3zAqBGC7mBctvhrpYwKfMG+t9xcUo2hEFtA==, - } + '@volar/language-service@2.4.30': + resolution: {integrity: sha512-w/xDsASiqC71ggCOm7sTDXDNk/l72XEptodeRC68tgZ0e5QM4hM3zAqBGC7mBctvhrpYwKfMG+t9xcUo2hEFtA==} peerDependencies: typescript: <7 peerDependenciesMeta: typescript: optional: true - "@volar/source-map@2.4.30": - resolution: - { - integrity: sha512-zym1ob/KwDDyN+0jGVtxwbxJSRRnUvv5HspCtz3yEfVVdCG4/dzxJktMGPAgemqRuVs81O0o/y0q3qOUErR8kg==, - } - - "@volar/typescript@2.4.30": - resolution: - { - integrity: sha512-/DgA5tgYFPfrLFuSjIMXMGHk1LQv2+P8eny6+BhGNzFJELWIW7UZlc56ZLIRFhLsPpMfIFxM8/HvOPBggrjTZg==, - } + '@volar/source-map@2.4.30': + resolution: {integrity: sha512-zym1ob/KwDDyN+0jGVtxwbxJSRRnUvv5HspCtz3yEfVVdCG4/dzxJktMGPAgemqRuVs81O0o/y0q3qOUErR8kg==} + + '@volar/typescript@2.4.30': + resolution: {integrity: sha512-/DgA5tgYFPfrLFuSjIMXMGHk1LQv2+P8eny6+BhGNzFJELWIW7UZlc56ZLIRFhLsPpMfIFxM8/HvOPBggrjTZg==} peerDependencies: typescript: <7 peerDependenciesMeta: typescript: optional: true - "@vscode/emmet-helper@2.11.0": - resolution: - { - integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==, - } + '@vscode/emmet-helper@2.11.0': + resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} - "@vscode/l10n@0.0.18": - resolution: - { - integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==, - } + '@vscode/l10n@0.0.18': + resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} acorn-jsx@5.3.2: - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, - } + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn@8.19.0: - resolution: - { - integrity: sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==} + engines: {node: '>=0.4.0'} hasBin: true ajv-draft-04@1.0.0: - resolution: - { - integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==, - } + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: ajv: ^8.5.0 peerDependenciesMeta: @@ -1930,925 +1292,544 @@ packages: optional: true ajv-i18n@4.2.0: - resolution: - { - integrity: sha512-v/ei2UkCEeuKNXh8RToiFsUclmU+G57LO1Oo22OagNMENIw+Yb8eMwvHu7Vn9fmkjJyv6XclhJ8TbuigSglPkg==, - } + resolution: {integrity: sha512-v/ei2UkCEeuKNXh8RToiFsUclmU+G57LO1Oo22OagNMENIw+Yb8eMwvHu7Vn9fmkjJyv6XclhJ8TbuigSglPkg==} peerDependencies: ajv: ^8.0.0-beta.0 ajv@6.15.0: - resolution: - { - integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==, - } + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} ajv@8.20.0: - resolution: - { - integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==, - } + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} ansi-align@3.0.1: - resolution: - { - integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==, - } + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} ansi-regex@5.0.1: - resolution: - { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} ansi-regex@6.4.0: - resolution: - { - integrity: sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==} + engines: {node: '>=12'} ansi-styles@4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} ansi-styles@6.2.3: - resolution: - { - integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} anymatch@3.1.3: - resolution: - { - integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} argparse@2.0.1: - resolution: - { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, - } + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} aria-query@5.3.2: - resolution: - { - integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} array-buffer-byte-length@1.0.2: - resolution: - { - integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} array-includes@3.2.0: - resolution: - { - integrity: sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg==} + engines: {node: '>= 0.4'} array-iterate@2.0.1: - resolution: - { - integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==, - } + resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} array.prototype.findlast@1.2.5: - resolution: - { - integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} array.prototype.flat@1.3.3: - resolution: - { - integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} array.prototype.flatmap@1.3.3: - resolution: - { - integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} array.prototype.tosorted@1.1.4: - resolution: - { - integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} arraybuffer.prototype.slice@1.0.4: - resolution: - { - integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} astro@5.18.2: - resolution: - { - integrity: sha512-TnFwLnAXty5MXKPDGuKXqK4AMBXG+FH6RUdK7Oyc3gyfNoFIthT+4eRbzOK43bdRlLaZuxgciDSjgtggZ3OtGQ==, - } - engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: ">=9.6.5", pnpm: ">=7.1.0" } + resolution: {integrity: sha512-TnFwLnAXty5MXKPDGuKXqK4AMBXG+FH6RUdK7Oyc3gyfNoFIthT+4eRbzOK43bdRlLaZuxgciDSjgtggZ3OtGQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true async-function@1.0.0: - resolution: - { - integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} available-typed-arrays@1.0.7: - resolution: - { - integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} axobject-query@4.1.0: - resolution: - { - integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} bail@2.0.2: - resolution: - { - integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==, - } + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} balanced-match@1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, - } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} balanced-match@4.0.4: - resolution: - { - integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==, - } - engines: { node: 18 || 20 || >=22 } + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} base-64@1.0.0: - resolution: - { - integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==, - } + resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} baseline-browser-mapping@2.11.31: - resolution: - { - integrity: sha512-b0k7wXlWjpuL/Uxb/pYlpjY0ej5BjAmurtPUk3eRGuloI4yjK32m8TiKUQ81l1ptcLjKS/KH2+uqIolZti1x4Q==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-b0k7wXlWjpuL/Uxb/pYlpjY0ej5BjAmurtPUk3eRGuloI4yjK32m8TiKUQ81l1ptcLjKS/KH2+uqIolZti1x4Q==} + engines: {node: '>=6.0.0'} hasBin: true boolbase@1.0.0: - resolution: - { - integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, - } + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} boxen@8.0.1: - resolution: - { - integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} brace-expansion@1.1.21: - resolution: - { - integrity: sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==, - } + resolution: {integrity: sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==} brace-expansion@5.0.12: - resolution: - { - integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==, - } - engines: { node: 20 || >=22 } + resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==} + engines: {node: 20 || >=22} browserslist@4.29.4: - resolution: - { - integrity: sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==, - } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + resolution: {integrity: sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + call-bind-apply-helpers@1.0.2: - resolution: - { - integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} call-bind@1.0.9: - resolution: - { - integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} call-bound@1.0.4: - resolution: - { - integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} callsites@3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} camelcase@8.0.0: - resolution: - { - integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} caniuse-lite@1.0.30001819: - resolution: - { - integrity: sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg==, - } + resolution: {integrity: sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg==} ccount@2.0.1: - resolution: - { - integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==, - } + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} chalk@4.1.2: - resolution: - { - integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} chalk@5.6.2: - resolution: - { - integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==, - } - engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} character-entities-html4@2.1.0: - resolution: - { - integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==, - } + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} character-entities-legacy@3.0.0: - resolution: - { - integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==, - } + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} character-entities@2.0.2: - resolution: - { - integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==, - } + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} chokidar@5.0.0: - resolution: - { - integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==, - } - engines: { node: ">= 20.19.0" } + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} ci-info@4.4.0: - resolution: - { - integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} cli-boxes@3.0.0: - resolution: - { - integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} cliui@9.0.1: - resolution: - { - integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} clsx@2.1.1: - resolution: - { - integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} color-convert@2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, - } - engines: { node: ">=7.0.0" } + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} color-name@1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, - } + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} comma-separated-tokens@2.0.3: - resolution: - { - integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==, - } + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} commander@11.1.0: - resolution: - { - integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} common-ancestor-path@1.0.1: - resolution: - { - integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==, - } + resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} concat-map@0.0.1: - resolution: - { - integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, - } + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} convert-source-map@2.0.0: - resolution: - { - integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, - } + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} cookie-es@1.2.3: - resolution: - { - integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==, - } + resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==} cookie@1.1.1: - resolution: - { - integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} cross-spawn@7.0.6: - resolution: - { - integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} crossws@0.3.5: - resolution: - { - integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==, - } + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} css-select@6.0.0: - resolution: - { - integrity: sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==, - } + resolution: {integrity: sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==} css-tree@2.2.1: - resolution: - { - integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==, - } - engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: ">=7.0.0" } + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} css-tree@3.2.1: - resolution: - { - integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==, - } - engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0 } + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} css-what@7.0.0: - resolution: - { - integrity: sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==} + engines: {node: '>= 6'} cssesc@3.0.0: - resolution: - { - integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} hasBin: true csso@5.0.5: - resolution: - { - integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==, - } - engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: ">=7.0.0" } + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} csstype@3.2.3: - resolution: - { - integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==, - } + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} data-view-buffer@1.0.2: - resolution: - { - integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} data-view-byte-length@1.0.2: - resolution: - { - integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} data-view-byte-offset@1.0.1: - resolution: - { - integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} debug@4.4.3: - resolution: - { - integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true decode-named-character-reference@1.3.0: - resolution: - { - integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==, - } + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} deep-is@0.1.4: - resolution: - { - integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, - } + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} define-data-property@1.1.4: - resolution: - { - integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} define-properties@1.2.1: - resolution: - { - integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} defu@6.1.7: - resolution: - { - integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==, - } + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} dequal@2.0.3: - resolution: - { - integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} destr@2.0.5: - resolution: - { - integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==, - } + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} detect-libc@2.1.2: - resolution: - { - integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} deterministic-object-hash@2.0.2: - resolution: - { - integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} + engines: {node: '>=18'} devalue@5.9.4: - resolution: - { - integrity: sha512-sPAT4pztbu6586/hrhOnMKS17IJrvg12mXiSPSS3W5qDeN2RGgvZ0diZCm31dBbnevfVmujNO3IM2wrS4Y2Rhg==, - } + resolution: {integrity: sha512-sPAT4pztbu6586/hrhOnMKS17IJrvg12mXiSPSS3W5qDeN2RGgvZ0diZCm31dBbnevfVmujNO3IM2wrS4Y2Rhg==} devlop@1.1.0: - resolution: - { - integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==, - } + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} diff@8.0.4: - resolution: - { - integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==, - } - engines: { node: ">=0.3.1" } + resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} + engines: {node: '>=0.3.1'} dlv@1.1.3: - resolution: - { - integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==, - } + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} doctrine@2.1.0: - resolution: - { - integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} dom-serializer@2.0.0: - resolution: - { - integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==, - } + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} domelementtype@2.3.0: - resolution: - { - integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, - } + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} domhandler@5.0.3: - resolution: - { - integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} domutils@3.2.2: - resolution: - { - integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==, - } + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} dset@3.1.4: - resolution: - { - integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} dunder-proto@1.0.1: - resolution: - { - integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} electron-to-chromium@1.5.463: - resolution: - { - integrity: sha512-nVWNU6ltFjopvOdD44J4zoBkgO0M+WZiFKKFV7EjebOH9z0KNphk6bCEjplXtJofL21ARIuuwWOCsFkBVklm6w==, - } + resolution: {integrity: sha512-nVWNU6ltFjopvOdD44J4zoBkgO0M+WZiFKKFV7EjebOH9z0KNphk6bCEjplXtJofL21ARIuuwWOCsFkBVklm6w==} emmet@2.4.11: - resolution: - { - integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==, - } + resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} emoji-regex@10.6.0: - resolution: - { - integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==, - } + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} emoji-regex@8.0.0: - resolution: - { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, - } + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} enhanced-resolve@5.26.0: - resolution: - { - integrity: sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw==} + engines: {node: '>=10.13.0'} entities@4.5.0: - resolution: - { - integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, - } - engines: { node: ">=0.12" } + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} entities@6.0.1: - resolution: - { - integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==, - } - engines: { node: ">=0.12" } + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} es-abstract-get@1.0.0: - resolution: - { - integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==} + engines: {node: '>= 0.4'} es-abstract@1.24.2: - resolution: - { - integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} + engines: {node: '>= 0.4'} es-define-property@1.0.1: - resolution: - { - integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} es-errors@1.3.0: - resolution: - { - integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} es-iterator-helpers@1.4.0: - resolution: - { - integrity: sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==} + engines: {node: '>= 0.4'} es-module-lexer@1.7.0: - resolution: - { - integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==, - } + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} es-object-atoms@1.1.2: - resolution: - { - integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} es-set-tostringtag@2.1.0: - resolution: - { - integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} es-shim-unscopables@1.1.0: - resolution: - { - integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} es-to-primitive@1.3.4: - resolution: - { - integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} + engines: {node: '>= 0.4'} esbuild@0.25.12: - resolution: - { - integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} hasBin: true esbuild@0.27.7: - resolution: - { - integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} hasBin: true escalade@3.2.0: - resolution: - { - integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} escape-string-regexp@4.0.0: - resolution: - { - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} escape-string-regexp@5.0.0: - resolution: - { - integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} eslint-plugin-react-hooks@5.2.0: - resolution: - { - integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 eslint-plugin-react@7.37.5: - resolution: - { - integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} + engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 eslint-scope@8.4.0: - resolution: - { - integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: - resolution: - { - integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} eslint-visitor-keys@4.2.1: - resolution: - { - integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@5.0.1: - resolution: - { - integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint@9.39.5: - resolution: - { - integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true peerDependencies: - jiti: "*" + jiti: '*' peerDependenciesMeta: jiti: optional: true espree@10.4.0: - resolution: - { - integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esquery@1.7.0: - resolution: - { - integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} esrecurse@4.3.0: - resolution: - { - integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} estraverse@5.3.0: - resolution: - { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} estree-walker@2.0.2: - resolution: - { - integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, - } + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} estree-walker@3.0.3: - resolution: - { - integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, - } + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} esutils@2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} eventemitter3@5.0.4: - resolution: - { - integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==, - } + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} + engines: {node: '>=12.0.0'} extend@3.0.2: - resolution: - { - integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, - } + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} fast-deep-equal@3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, - } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-json-stable-stringify@2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, - } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: - resolution: - { - integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, - } + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} fast-uri@3.1.9: - resolution: - { - integrity: sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ==, - } + resolution: {integrity: sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ==} fdir@6.5.0: - resolution: - { - integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -2856,1494 +1837,853 @@ packages: optional: true file-entry-cache@8.0.0: - resolution: - { - integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, - } - engines: { node: ">=16.0.0" } + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} find-up@5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} flat-cache@4.0.1: - resolution: - { - integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatted@3.4.4: - resolution: - { - integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==, - } + resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} flattie@1.1.1: - resolution: - { - integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} + engines: {node: '>=8'} fontace@0.4.1: - resolution: - { - integrity: sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==, - } + resolution: {integrity: sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==} fontkitten@1.0.3: - resolution: - { - integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==} + engines: {node: '>=20'} for-each@0.3.5: - resolution: - { - integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} fsevents@2.3.3: - resolution: - { - integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] function-bind@1.1.2: - resolution: - { - integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, - } + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} function.prototype.name@1.2.0: - resolution: - { - integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==} + engines: {node: '>= 0.4'} functions-have-names@1.2.3: - resolution: - { - integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, - } + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} generator-function@2.0.1: - resolution: - { - integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} gensync@1.0.0-beta.2: - resolution: - { - integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} get-caller-file@2.0.5: - resolution: - { - integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, - } - engines: { node: 6.* || 8.* || >= 10.* } + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} get-east-asian-width@1.7.0: - resolution: - { - integrity: sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==} + engines: {node: '>=18'} get-intrinsic@1.3.0: - resolution: - { - integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} get-proto@1.0.1: - resolution: - { - integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} get-symbol-description@1.1.0: - resolution: - { - integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} github-slugger@2.0.0: - resolution: - { - integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==, - } + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} glob-parent@6.0.2: - resolution: - { - integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} globals@14.0.0: - resolution: - { - integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} globals@17.13.0: - resolution: - { - integrity: sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg==} + engines: {node: '>=18'} globalthis@1.0.4: - resolution: - { - integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} gopd@1.2.0: - resolution: - { - integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} graceful-fs@4.2.11: - resolution: - { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, - } + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} h3@1.15.11: - resolution: - { - integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==, - } + resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} has-bigints@1.1.0: - resolution: - { - integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} has-flag@4.0.0: - resolution: - { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} has-property-descriptors@1.0.2: - resolution: - { - integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, - } + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} has-proto@1.2.0: - resolution: - { - integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} has-symbols@1.1.0: - resolution: - { - integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} has-tostringtag@1.0.2: - resolution: - { - integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} hasown@2.0.4: - resolution: - { - integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} hast-util-from-html@2.0.3: - resolution: - { - integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==, - } + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} hast-util-from-parse5@8.0.3: - resolution: - { - integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==, - } + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} hast-util-is-element@3.0.0: - resolution: - { - integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==, - } + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} hast-util-parse-selector@4.0.0: - resolution: - { - integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==, - } + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} hast-util-raw@9.1.0: - resolution: - { - integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==, - } + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} hast-util-to-html@9.0.5: - resolution: - { - integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==, - } + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} hast-util-to-parse5@8.0.1: - resolution: - { - integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==, - } + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} hast-util-to-text@4.0.2: - resolution: - { - integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==, - } + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} hast-util-whitespace@3.0.0: - resolution: - { - integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==, - } + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} hastscript@9.0.1: - resolution: - { - integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==, - } + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} html-escaper@3.0.3: - resolution: - { - integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==, - } + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} html-void-elements@3.0.0: - resolution: - { - integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==, - } + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} http-cache-semantics@4.3.0: - resolution: - { - integrity: sha512-M5t5LlJpS1UHMjvwRQVdFHvPISGeLAxNcrWuJkeGh0KxsqCHZ1O3NXZU/8x7cD0BDcGW8kapxMKTvwlqrNkHkA==, - } + resolution: {integrity: sha512-M5t5LlJpS1UHMjvwRQVdFHvPISGeLAxNcrWuJkeGh0KxsqCHZ1O3NXZU/8x7cD0BDcGW8kapxMKTvwlqrNkHkA==} ignore@5.3.2: - resolution: - { - integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} ignore@7.0.13: - resolution: - { - integrity: sha512-2E8Q6rh+1RRSq/YdaGsNfXsEZy9FVqv6BSSrkmZJP7BnaoPnRfKL+YaofPvP+5rzdk144qSm6i4+hvPgUcbV4Q==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-2E8Q6rh+1RRSq/YdaGsNfXsEZy9FVqv6BSSrkmZJP7BnaoPnRfKL+YaofPvP+5rzdk144qSm6i4+hvPgUcbV4Q==} + engines: {node: '>= 4'} import-fresh@3.3.1: - resolution: - { - integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} import-meta-resolve@4.2.0: - resolution: - { - integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==, - } + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} imurmurhash@0.1.4: - resolution: - { - integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, - } - engines: { node: ">=0.8.19" } + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} internal-slot@1.1.0: - resolution: - { - integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} iron-webcrypto@1.2.1: - resolution: - { - integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==, - } + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} is-array-buffer@3.0.5: - resolution: - { - integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} is-async-function@2.1.1: - resolution: - { - integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} is-bigint@1.1.0: - resolution: - { - integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} is-boolean-object@1.2.2: - resolution: - { - integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} is-callable@1.2.7: - resolution: - { - integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} is-core-module@2.17.0: - resolution: - { - integrity: sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==} + engines: {node: '>= 0.4'} is-data-view@1.0.2: - resolution: - { - integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} is-date-object@1.1.0: - resolution: - { - integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} is-docker@3.0.0: - resolution: - { - integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true is-document.all@1.0.0: - resolution: - { - integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==} + engines: {node: '>= 0.4'} is-extglob@2.1.1: - resolution: - { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} is-finalizationregistry@1.1.1: - resolution: - { - integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} is-fullwidth-code-point@3.0.0: - resolution: - { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} is-generator-function@1.1.2: - resolution: - { - integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} is-glob@4.0.3: - resolution: - { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} is-inside-container@1.0.0: - resolution: - { - integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} hasBin: true is-map@2.0.3: - resolution: - { - integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} is-negative-zero@2.0.3: - resolution: - { - integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} is-number-object@1.1.1: - resolution: - { - integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} is-plain-obj@4.1.0: - resolution: - { - integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} is-regex@1.2.1: - resolution: - { - integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} is-set@2.0.3: - resolution: - { - integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} is-shared-array-buffer@1.0.4: - resolution: - { - integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} is-string@1.1.1: - resolution: - { - integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} is-symbol@1.1.1: - resolution: - { - integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} is-typed-array@1.1.15: - resolution: - { - integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} is-weakmap@2.0.2: - resolution: - { - integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} is-weakref@1.1.1: - resolution: - { - integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} is-weakset@2.0.4: - resolution: - { - integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} is-wsl@3.1.1: - resolution: - { - integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} isarray@2.0.5: - resolution: - { - integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, - } + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, - } + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} iterator.prototype@1.1.5: - resolution: - { - integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} jiti@2.7.0: - resolution: - { - integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==, - } + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true js-tokens@4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, - } + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} js-yaml@4.3.2: - resolution: - { - integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==, - } + resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} hasBin: true jsesc@3.1.0: - resolution: - { - integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} hasBin: true json-buffer@3.0.1: - resolution: - { - integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, - } + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} json-schema-traverse@0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, - } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} json-schema-traverse@1.0.0: - resolution: - { - integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, - } + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} json-stable-stringify-without-jsonify@1.0.1: - resolution: - { - integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, - } + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} json5@2.2.3: - resolution: - { - integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} hasBin: true jsonc-parser@2.3.1: - resolution: - { - integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==, - } + resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} jsonc-parser@3.3.1: - resolution: - { - integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==, - } + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} jsx-ast-utils@3.3.5: - resolution: - { - integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} keyv@4.5.4: - resolution: - { - integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, - } + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} kleur@3.0.3: - resolution: - { - integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} kleur@4.1.5: - resolution: - { - integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} levn@0.4.1: - resolution: - { - integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} lightningcss-android-arm64@1.32.0: - resolution: - { - integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] lightningcss-darwin-arm64@1.32.0: - resolution: - { - integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] lightningcss-darwin-x64@1.32.0: - resolution: - { - integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] lightningcss-freebsd-x64@1.32.0: - resolution: - { - integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] lightningcss-linux-arm-gnueabihf@1.32.0: - resolution: - { - integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] lightningcss-linux-arm64-gnu@1.32.0: - resolution: - { - integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [glibc] lightningcss-linux-arm64-musl@1.32.0: - resolution: - { - integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [musl] lightningcss-linux-x64-gnu@1.32.0: - resolution: - { - integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [glibc] lightningcss-linux-x64-musl@1.32.0: - resolution: - { - integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [musl] lightningcss-win32-arm64-msvc@1.32.0: - resolution: - { - integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] lightningcss-win32-x64-msvc@1.32.0: - resolution: - { - integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] lightningcss@1.32.0: - resolution: - { - integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} locate-path@6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} lodash.merge@4.6.2: - resolution: - { - integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, - } + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} longest-streak@3.1.0: - resolution: - { - integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==, - } + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} loose-envify@1.4.0: - resolution: - { - integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, - } + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lru-cache@11.5.3: - resolution: - { - integrity: sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==, - } - engines: { node: 20 || >=22 } + resolution: {integrity: sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==} + engines: {node: 20 || >=22} lru-cache@5.1.1: - resolution: - { - integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, - } + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} magic-string@0.30.21: - resolution: - { - integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, - } + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} magicast@0.5.5: - resolution: - { - integrity: sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==, - } + resolution: {integrity: sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==} markdown-table@3.0.4: - resolution: - { - integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==, - } + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} math-intrinsics@1.1.0: - resolution: - { - integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} mdast-util-definitions@6.0.0: - resolution: - { - integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==, - } + resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} mdast-util-find-and-replace@3.0.3: - resolution: - { - integrity: sha512-xPgpDNl0/OXHsI7TlaIs22lWnH3KlpvZdXG1ET/m/YT2Hhdkx8lJV4kLphE6l9simyM4KPDFBwas08BgEob6Jw==, - } + resolution: {integrity: sha512-xPgpDNl0/OXHsI7TlaIs22lWnH3KlpvZdXG1ET/m/YT2Hhdkx8lJV4kLphE6l9simyM4KPDFBwas08BgEob6Jw==} mdast-util-from-markdown@2.1.0: - resolution: - { - integrity: sha512-KRLgmPaP2H1ul2bpoJkOS+9pAcDAAj9Nu1mqLnh8NLeJG5tlvj42TH80PIGBpROWlRXLk0lDrWNuZCFy/tsB4A==, - } + resolution: {integrity: sha512-KRLgmPaP2H1ul2bpoJkOS+9pAcDAAj9Nu1mqLnh8NLeJG5tlvj42TH80PIGBpROWlRXLk0lDrWNuZCFy/tsB4A==} mdast-util-gfm-autolink-literal@2.0.1: - resolution: - { - integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==, - } + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} mdast-util-gfm-footnote@2.1.0: - resolution: - { - integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==, - } + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} mdast-util-gfm-strikethrough@2.0.1: - resolution: - { - integrity: sha512-OuJHqvr455pwu2OaOrir7dbzqs4jlWKOtlu9L6GjcIjjQwNyw02VntQsr/Ek6/A13vgnXfUhBekWRUP1OkNivw==, - } + resolution: {integrity: sha512-OuJHqvr455pwu2OaOrir7dbzqs4jlWKOtlu9L6GjcIjjQwNyw02VntQsr/Ek6/A13vgnXfUhBekWRUP1OkNivw==} mdast-util-gfm-table@2.0.0: - resolution: - { - integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==, - } + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} mdast-util-gfm-task-list-item@2.0.0: - resolution: - { - integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==, - } + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} mdast-util-gfm@3.1.0: - resolution: - { - integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==, - } + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} mdast-util-phrasing@4.1.0: - resolution: - { - integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==, - } + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} mdast-util-to-hast@13.2.1: - resolution: - { - integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==, - } + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} mdast-util-to-markdown@2.2.0: - resolution: - { - integrity: sha512-2Jn/ADrHFFyyniBMi0bncTbJqU78K3/TEYvzvwrWWzD9MYPUa/Gm4r3nOeKFQg/PDM5BsbDYdc8ackW4NTY6NA==, - } + resolution: {integrity: sha512-2Jn/ADrHFFyyniBMi0bncTbJqU78K3/TEYvzvwrWWzD9MYPUa/Gm4r3nOeKFQg/PDM5BsbDYdc8ackW4NTY6NA==} mdast-util-to-string@4.0.0: - resolution: - { - integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==, - } + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} mdn-data@2.0.28: - resolution: - { - integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==, - } + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} mdn-data@2.27.1: - resolution: - { - integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==, - } + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} micromark-core-commonmark@2.0.4: - resolution: - { - integrity: sha512-wxEeE8v8XVvOrxn1TZj74qYhAtTQsSqufHVS3uNVyT1MupXxhyaHk8/9xDNPh9BmL77QNDgWTkZ3RsYHB2ry7w==, - } + resolution: {integrity: sha512-wxEeE8v8XVvOrxn1TZj74qYhAtTQsSqufHVS3uNVyT1MupXxhyaHk8/9xDNPh9BmL77QNDgWTkZ3RsYHB2ry7w==} micromark-extension-gfm-autolink-literal@2.1.0: - resolution: - { - integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==, - } + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} micromark-extension-gfm-footnote@2.1.0: - resolution: - { - integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==, - } + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} micromark-extension-gfm-strikethrough@2.1.0: - resolution: - { - integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==, - } + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} micromark-extension-gfm-table@2.1.2: - resolution: - { - integrity: sha512-pRzm4kDTu0MjlmBkxmS9yYhw60nncfcEwu9NNdPFSQEFXS95ZKyIIyTSHu/o3ReBUrLKYEq+7YaXCRn/bPB4MA==, - } + resolution: {integrity: sha512-pRzm4kDTu0MjlmBkxmS9yYhw60nncfcEwu9NNdPFSQEFXS95ZKyIIyTSHu/o3ReBUrLKYEq+7YaXCRn/bPB4MA==} micromark-extension-gfm-tagfilter@2.0.0: - resolution: - { - integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==, - } + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} micromark-extension-gfm-task-list-item@2.1.0: - resolution: - { - integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==, - } + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} micromark-extension-gfm@3.0.0: - resolution: - { - integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==, - } + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} micromark-factory-destination@2.0.1: - resolution: - { - integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==, - } + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} micromark-factory-label@2.0.1: - resolution: - { - integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==, - } + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} micromark-factory-space@2.1.0: - resolution: - { - integrity: sha512-fS8hnLIjnjvdQIj39Geug8wWsR0HrYZ43KShKxNfwT7t2LOHo/LbWZEzEaSOjwtjdCsjoE6syHhonEzW0zv0+Q==, - } + resolution: {integrity: sha512-fS8hnLIjnjvdQIj39Geug8wWsR0HrYZ43KShKxNfwT7t2LOHo/LbWZEzEaSOjwtjdCsjoE6syHhonEzW0zv0+Q==} micromark-factory-title@2.0.1: - resolution: - { - integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==, - } + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} micromark-factory-whitespace@2.0.1: - resolution: - { - integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==, - } + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} micromark-util-character@2.1.1: - resolution: - { - integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==, - } + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} micromark-util-chunked@2.0.1: - resolution: - { - integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==, - } + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} micromark-util-classify-character@2.0.1: - resolution: - { - integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==, - } + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} micromark-util-combine-extensions@2.0.1: - resolution: - { - integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==, - } + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} micromark-util-decode-numeric-character-reference@2.0.2: - resolution: - { - integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==, - } + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} micromark-util-decode-string@2.0.1: - resolution: - { - integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==, - } + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} micromark-util-edit-map@1.0.0: - resolution: - { - integrity: sha512-Pa2ljlsEL6sVwFaYeyrOLSYbQt73JvGbPOYFq+9AElXiSnfI5Q4465RRZ1sHv7lDjDOnGRDDaqPXqClqWK/q1Q==, - } + resolution: {integrity: sha512-Pa2ljlsEL6sVwFaYeyrOLSYbQt73JvGbPOYFq+9AElXiSnfI5Q4465RRZ1sHv7lDjDOnGRDDaqPXqClqWK/q1Q==} micromark-util-encode@2.0.1: - resolution: - { - integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==, - } + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} micromark-util-html-tag-name@2.0.1: - resolution: - { - integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==, - } + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} micromark-util-normalize-identifier@2.0.1: - resolution: - { - integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==, - } + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} micromark-util-resolve-all@2.0.1: - resolution: - { - integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==, - } + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} micromark-util-sanitize-uri@2.0.1: - resolution: - { - integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==, - } + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} micromark-util-subtokenize@2.1.0: - resolution: - { - integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==, - } + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} micromark-util-symbol@2.0.1: - resolution: - { - integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==, - } + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} micromark-util-types@2.0.3: - resolution: - { - integrity: sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg==, - } + resolution: {integrity: sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg==} micromark@4.0.3: - resolution: - { - integrity: sha512-oGYfQzHSG5dOMovQcJ3fyTmZlWAWpi0XA0sJwJs+i6OT88o1+Jtw/8z0CmdowSLxGhhFK89rQ/oXph/wN02PNw==, - } + resolution: {integrity: sha512-oGYfQzHSG5dOMovQcJ3fyTmZlWAWpi0XA0sJwJs+i6OT88o1+Jtw/8z0CmdowSLxGhhFK89rQ/oXph/wN02PNw==} minimatch@10.2.6: - resolution: - { - integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==, - } - engines: { node: 18 || 20 || >=22 } + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} + engines: {node: 18 || 20 || >=22} minimatch@3.1.5: - resolution: - { - integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==, - } + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} mrmime@2.0.1: - resolution: - { - integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} ms@2.1.3: - resolution: - { - integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, - } + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} muggle-string@0.4.1: - resolution: - { - integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==, - } + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} nanoid@3.3.20: - resolution: - { - integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==, - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + resolution: {integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true natural-compare@1.4.0: - resolution: - { - integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, - } + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} neotraverse@0.6.18: - resolution: - { - integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==, - } - engines: { node: ">= 10" } + resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} + engines: {node: '>= 10'} nlcst-to-string@4.0.0: - resolution: - { - integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==, - } + resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} node-exports-info@1.6.2: - resolution: - { - integrity: sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==} + engines: {node: '>= 0.4'} node-fetch-native@1.6.7: - resolution: - { - integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==, - } + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} node-mock-http@1.0.5: - resolution: - { - integrity: sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==, - } + resolution: {integrity: sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==} node-releases@2.0.60: - resolution: - { - integrity: sha512-OmO8+GM1JUZqXET720VrJCwkjUCXmCMQm0Z3UDDRbfNLHS4NEAvY60j5jiFv0tkKw2PNNlqOLhahVmwJIOLDIQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-OmO8+GM1JUZqXET720VrJCwkjUCXmCMQm0Z3UDDRbfNLHS4NEAvY60j5jiFv0tkKw2PNNlqOLhahVmwJIOLDIQ==} + engines: {node: '>=18'} normalize-path@3.0.0: - resolution: - { - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} nth-check@2.1.1: - resolution: - { - integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, - } + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} object-assign@4.1.1: - resolution: - { - integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} object-inspect@1.13.4: - resolution: - { - integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} object-keys@1.1.1: - resolution: - { - integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} object.assign@4.1.7: - resolution: - { - integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} object.entries@1.1.9: - resolution: - { - integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} object.fromentries@2.0.8: - resolution: - { - integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} object.values@1.2.1: - resolution: - { - integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} ofetch@1.5.1: - resolution: - { - integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==, - } + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} ohash@2.0.12: - resolution: - { - integrity: sha512-65S/5gk9YSsaRjcyf7Nfa6h/d3E8/1gslpXfI4W7Dxn/oap8IKRuNT5VXkLQ1YFKIEg4apRY4Pj6aiwFzrDdmw==, - } + resolution: {integrity: sha512-65S/5gk9YSsaRjcyf7Nfa6h/d3E8/1gslpXfI4W7Dxn/oap8IKRuNT5VXkLQ1YFKIEg4apRY4Pj6aiwFzrDdmw==} oniguruma-parser@0.12.2: - resolution: - { - integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==, - } + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} oniguruma-to-es@4.3.6: - resolution: - { - integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==, - } + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} optionator@0.9.4: - resolution: - { - integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} own-keys@1.0.2: - resolution: - { - integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==} + engines: {node: '>= 0.4'} p-limit@3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} p-limit@6.2.0: - resolution: - { - integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} + engines: {node: '>=18'} p-locate@5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} p-queue@8.1.1: - resolution: - { - integrity: sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==} + engines: {node: '>=18'} p-timeout@6.1.4: - resolution: - { - integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} package-manager-detector@1.9.0: - resolution: - { - integrity: sha512-zAMfbta9nPA8AKkA4WdmNAT8R8s6Dk0/xwPsqNnRidMFcLo1YkLuPDTgs2f64XdzS8vbLNnoJ+uUIkgbz7oRHA==, - } + resolution: {integrity: sha512-zAMfbta9nPA8AKkA4WdmNAT8R8s6Dk0/xwPsqNnRidMFcLo1YkLuPDTgs2f64XdzS8vbLNnoJ+uUIkgbz7oRHA==} parent-module@1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} parse-latin@7.0.0: - resolution: - { - integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==, - } + resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} parse5@7.3.0: - resolution: - { - integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==, - } + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} path-browserify@1.0.1: - resolution: - { - integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==, - } + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} path-exists@4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} path-key@3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} path-parse@1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, - } + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} piccolore@0.1.3: - resolution: - { - integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==, - } + resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} picocolors@1.1.1: - resolution: - { - integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, - } + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.2: - resolution: - { - integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} picomatch@4.0.7: - resolution: - { - integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} possible-typed-array-names@1.1.0: - resolution: - { - integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} postcss@8.5.31: - resolution: - { - integrity: sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==} + engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: - resolution: - { - integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} prettier-plugin-tailwindcss@0.6.14: - resolution: - { - integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==, - } - engines: { node: ">=14.21.3" } + resolution: {integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==} + engines: {node: '>=14.21.3'} peerDependencies: - "@ianvs/prettier-plugin-sort-imports": "*" - "@prettier/plugin-hermes": "*" - "@prettier/plugin-oxc": "*" - "@prettier/plugin-pug": "*" - "@shopify/prettier-plugin-liquid": "*" - "@trivago/prettier-plugin-sort-imports": "*" - "@zackad/prettier-plugin-twig": "*" + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-hermes': '*' + '@prettier/plugin-oxc': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig': '*' prettier: ^3.0 - prettier-plugin-astro: "*" - prettier-plugin-css-order: "*" - prettier-plugin-import-sort: "*" - prettier-plugin-jsdoc: "*" - prettier-plugin-marko: "*" - prettier-plugin-multiline-arrays: "*" - prettier-plugin-organize-attributes: "*" - prettier-plugin-organize-imports: "*" - prettier-plugin-sort-imports: "*" - prettier-plugin-style-order: "*" - prettier-plugin-svelte: "*" + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' peerDependenciesMeta: - "@ianvs/prettier-plugin-sort-imports": + '@ianvs/prettier-plugin-sort-imports': optional: true - "@prettier/plugin-hermes": + '@prettier/plugin-hermes': optional: true - "@prettier/plugin-oxc": + '@prettier/plugin-oxc': optional: true - "@prettier/plugin-pug": + '@prettier/plugin-pug': optional: true - "@shopify/prettier-plugin-liquid": + '@shopify/prettier-plugin-liquid': optional: true - "@trivago/prettier-plugin-sort-imports": + '@trivago/prettier-plugin-sort-imports': optional: true - "@zackad/prettier-plugin-twig": + '@zackad/prettier-plugin-twig': optional: true prettier-plugin-astro: optional: true @@ -4369,568 +2709,346 @@ packages: optional: true prettier@3.9.10: - resolution: - { - integrity: sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==} + engines: {node: '>=14'} hasBin: true prismjs@1.30.0: - resolution: - { - integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} prompts@2.4.2: - resolution: - { - integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} prop-types@15.8.1: - resolution: - { - integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, - } + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} property-information@7.2.0: - resolution: - { - integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==, - } + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} punycode@2.3.1: - resolution: - { - integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} radix3@1.1.2: - resolution: - { - integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==, - } + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} react-dom@18.3.1: - resolution: - { - integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==, - } + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: react: ^18.3.1 react-is@16.13.1: - resolution: - { - integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, - } + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} react-refresh@0.17.0: - resolution: - { - integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} react@18.3.1: - resolution: - { - integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} readdirp@5.1.1: - resolution: - { - integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==, - } - engines: { node: ">= 20.19.0" } + resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==} + engines: {node: '>= 20.19.0'} reflect.getprototypeof@1.0.10: - resolution: - { - integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} regex-recursion@6.0.2: - resolution: - { - integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==, - } + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} regex-utilities@2.3.0: - resolution: - { - integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==, - } + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} regex@6.1.0: - resolution: - { - integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==, - } + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} regexp.prototype.flags@1.5.4: - resolution: - { - integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} rehype-parse@9.0.1: - resolution: - { - integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==, - } + resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} rehype-raw@7.0.0: - resolution: - { - integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==, - } + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} rehype-stringify@10.0.1: - resolution: - { - integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==, - } + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} rehype@13.0.2: - resolution: - { - integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==, - } + resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} remark-gfm@4.0.1: - resolution: - { - integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==, - } + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} remark-parse@11.0.0: - resolution: - { - integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==, - } + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} remark-rehype@11.1.2: - resolution: - { - integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==, - } + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} remark-smartypants@3.0.3: - resolution: - { - integrity: sha512-gCaK+ndZ0hYezlqFegHFCVh2CQemsi0Npdh1qVM9bxlUFknjkbP6VmojWhddOCrbK0PbbacmYLWfTULRiT1eWA==, - } - engines: { node: ">=16.0.0" } + resolution: {integrity: sha512-gCaK+ndZ0hYezlqFegHFCVh2CQemsi0Npdh1qVM9bxlUFknjkbP6VmojWhddOCrbK0PbbacmYLWfTULRiT1eWA==} + engines: {node: '>=16.0.0'} remark-stringify@11.0.0: - resolution: - { - integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==, - } + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} request-light@0.5.8: - resolution: - { - integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==, - } + resolution: {integrity: sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==} request-light@0.7.0: - resolution: - { - integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==, - } + resolution: {integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==} require-from-string@2.0.2: - resolution: - { - integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} resolve-from@4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} resolve@2.0.0-next.7: - resolution: - { - integrity: sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==} + engines: {node: '>= 0.4'} hasBin: true retext-latin@4.0.0: - resolution: - { - integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==, - } + resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} retext-smartypants@6.2.0: - resolution: - { - integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==, - } + resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} retext-stringify@4.0.0: - resolution: - { - integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==, - } + resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} retext@9.0.0: - resolution: - { - integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==, - } + resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} rollup@4.65.0: - resolution: - { - integrity: sha512-QVCvQUTGDN6JRwi3jVGCY3H4aTHvi9rX0LyoBMkGUvdh/Z6O51CzcLz85BWZaTCDGhl6ySGqYZs+xI1jmPqGcw==, - } - engines: { node: ">=18.0.0", npm: ">=8.0.0" } + resolution: {integrity: sha512-QVCvQUTGDN6JRwi3jVGCY3H4aTHvi9rX0LyoBMkGUvdh/Z6O51CzcLz85BWZaTCDGhl6ySGqYZs+xI1jmPqGcw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true safe-array-concat@1.1.4: - resolution: - { - integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==, - } - engines: { node: ">=0.4" } + resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} + engines: {node: '>=0.4'} safe-push-apply@1.0.0: - resolution: - { - integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} safe-regex-test@1.1.0: - resolution: - { - integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} sax@1.6.1: - resolution: - { - integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==, - } - engines: { node: ">=11.0.0" } + resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} + engines: {node: '>=11.0.0'} scheduler@0.23.2: - resolution: - { - integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==, - } + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} semver@6.3.1: - resolution: - { - integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, - } + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true semver@7.8.5: - resolution: - { - integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} hasBin: true set-function-length@1.2.2: - resolution: - { - integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} set-function-name@2.0.2: - resolution: - { - integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} set-proto@1.0.0: - resolution: - { - integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} sharp@0.34.5: - resolution: - { - integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} shebang-regex@3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} shiki@3.23.0: - resolution: - { - integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==, - } + resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==} side-channel-list@1.0.1: - resolution: - { - integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} side-channel-map@1.0.1: - resolution: - { - integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} side-channel-weakmap@1.0.2: - resolution: - { - integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} side-channel@1.1.1: - resolution: - { - integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} sisteransi@1.0.5: - resolution: - { - integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, - } + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} smol-toml@1.9.1: - resolution: - { - integrity: sha512-j7WyPdf0CJoutMzMoPLF/bVXHtKZIT9Rb4eGeEbWw8X2t5oirjPgpL+OpaENZrILYaXqYwnVH+qgUwVbl+pUJQ==, - } - engines: { node: ">= 18" } + resolution: {integrity: sha512-j7WyPdf0CJoutMzMoPLF/bVXHtKZIT9Rb4eGeEbWw8X2t5oirjPgpL+OpaENZrILYaXqYwnVH+qgUwVbl+pUJQ==} + engines: {node: '>= 18'} source-map-js@1.2.2: - resolution: - { - integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==} + engines: {node: '>=0.10.0'} space-separated-tokens@2.0.2: - resolution: - { - integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==, - } + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} stop-iteration-iterator@1.1.0: - resolution: - { - integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} string-width@4.2.3: - resolution: - { - integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} string-width@7.2.0: - resolution: - { - integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} string-width@8.3.0: - resolution: - { - integrity: sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==} + engines: {node: '>=20'} string.prototype.matchall@4.1.0: - resolution: - { - integrity: sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ==} + engines: {node: '>= 0.4'} string.prototype.repeat@1.0.0: - resolution: - { - integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==, - } + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} string.prototype.trim@1.2.11: - resolution: - { - integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} + engines: {node: '>= 0.4'} string.prototype.trimend@1.0.10: - resolution: - { - integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} + engines: {node: '>= 0.4'} string.prototype.trimstart@1.0.8: - resolution: - { - integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} stringify-entities@4.0.4: - resolution: - { - integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==, - } + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} strip-ansi@6.0.1: - resolution: - { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} strip-ansi@7.2.0: - resolution: - { - integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} strip-json-comments@3.1.1: - resolution: - { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} supports-color@7.2.0: - resolution: - { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} supports-preserve-symlinks-flag@1.0.0: - resolution: - { - integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} svgo@4.1.0: - resolution: - { - integrity: sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==} + engines: {node: '>=16'} hasBin: true tailwind-merge@2.6.1: - resolution: - { - integrity: sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==, - } + resolution: {integrity: sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==} tailwindcss@4.3.3: - resolution: - { - integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==, - } + resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} tapable@2.3.3: - resolution: - { - integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} tiny-inflate@1.0.3: - resolution: - { - integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==, - } + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} tinyexec@1.3.1: - resolution: - { - integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==} + engines: {node: '>=18'} tinyglobby@0.2.17: - resolution: - { - integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@4.0.6: + resolution: {integrity: sha512-u8KszXvGfU68hVcZpRHKG28T0krMuv2G5nDhiHaMLen/gIuFEgIJhaJuO69qjnXg5paSrbPMFfx3brNuN8eVSg==} + engines: {node: '>=14.0.0'} trim-lines@3.0.1: - resolution: - { - integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==, - } + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} trough@2.2.0: - resolution: - { - integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==, - } + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} ts-api-utils@2.5.0: - resolution: - { - integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==, - } - engines: { node: ">=18.12" } + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} peerDependencies: - typescript: ">=4.8.4" + typescript: '>=4.8.4' tsconfck@3.1.6: - resolution: - { - integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==, - } - engines: { node: ^18 || >=20 } + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} + engines: {node: ^18 || >=20} deprecated: unmaintained hasBin: true peerDependencies: @@ -4940,224 +3058,146 @@ packages: optional: true tslib@2.8.1: - resolution: - { - integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, - } + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} type-check@0.4.0: - resolution: - { - integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} type-fest@4.41.0: - resolution: - { - integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} typed-array-buffer@1.0.3: - resolution: - { - integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} typed-array-byte-length@1.0.3: - resolution: - { - integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} typed-array-byte-offset@1.0.5: - resolution: - { - integrity: sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ==} + engines: {node: '>= 0.4'} typed-array-length@1.0.8: - resolution: - { - integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} + engines: {node: '>= 0.4'} typesafe-path@0.2.2: - resolution: - { - integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==, - } + resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} typescript-auto-import-cache@0.3.6: - resolution: - { - integrity: sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==, - } + resolution: {integrity: sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==} typescript@5.9.3: - resolution: - { - integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==, - } - engines: { node: ">=14.17" } + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} hasBin: true ufo@1.6.4: - resolution: - { - integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==, - } + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} ultrahtml@1.7.0: - resolution: - { - integrity: sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==, - } + resolution: {integrity: sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==} unbox-primitive@1.1.0: - resolution: - { - integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} uncrypto@0.1.3: - resolution: - { - integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==, - } + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} undici@8.12.3: - resolution: - { - integrity: sha512-+fdndUTwBP86cVjihTp21hZHo7d6oj1c/47XPA3lL8mM0XHs+C4EkcjmgRsFnFk2f/UONGDy9ItBItmXsLOQHw==, - } - engines: { node: ">=22.19.0" } + resolution: {integrity: sha512-+fdndUTwBP86cVjihTp21hZHo7d6oj1c/47XPA3lL8mM0XHs+C4EkcjmgRsFnFk2f/UONGDy9ItBItmXsLOQHw==} + engines: {node: '>=22.19.0'} unified@11.0.5: - resolution: - { - integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==, - } + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} unifont@0.7.5: - resolution: - { - integrity: sha512-ULe/Cs+ZIsq+dcFofNkhqielCrUJnb5mr+Yc4EBM2VlL+6OZR6+cjtI2mT1bJvRBrVncqHAbLURxmPLcCXzWMg==, - } + resolution: {integrity: sha512-ULe/Cs+ZIsq+dcFofNkhqielCrUJnb5mr+Yc4EBM2VlL+6OZR6+cjtI2mT1bJvRBrVncqHAbLURxmPLcCXzWMg==} unist-util-find-after@5.0.0: - resolution: - { - integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==, - } + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} unist-util-is@6.0.1: - resolution: - { - integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==, - } + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} unist-util-modify-children@4.0.0: - resolution: - { - integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==, - } + resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} unist-util-position@5.0.0: - resolution: - { - integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==, - } + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} unist-util-remove-position@5.0.0: - resolution: - { - integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==, - } + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} unist-util-stringify-position@4.0.0: - resolution: - { - integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==, - } + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} unist-util-visit-children@3.0.0: - resolution: - { - integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==, - } + resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} unist-util-visit-parents@6.0.2: - resolution: - { - integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==, - } + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} unist-util-visit@5.1.0: - resolution: - { - integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==, - } + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} unstorage@1.17.6: - resolution: - { - integrity: sha512-gjKtcmn/KwZuJZO9o2sc0esAQnhmTw0LviDHwevTXbJMYs0dRTp8ZEEWXHU0vTpzbN3cA0yxlTeyXssMp3zDqw==, - } + resolution: {integrity: sha512-gjKtcmn/KwZuJZO9o2sc0esAQnhmTw0LviDHwevTXbJMYs0dRTp8ZEEWXHU0vTpzbN3cA0yxlTeyXssMp3zDqw==} peerDependencies: - "@azure/app-configuration": ^1.8.0 - "@azure/cosmos": ^4.2.0 - "@azure/data-tables": ^13.3.0 - "@azure/identity": ^4.6.0 - "@azure/keyvault-secrets": ^4.9.0 - "@azure/storage-blob": ^12.26.0 - "@capacitor/preferences": ^6 || ^7 || ^8 - "@deno/kv": ">=0.9.0" - "@netlify/blobs": ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 - "@planetscale/database": ^1.19.0 - "@upstash/redis": ^1.34.3 - "@vercel/blob": ">=0.27.1" - "@vercel/functions": ^2.2.12 || ^3.0.0 - "@vercel/kv": ^1 || ^2 || ^3 + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6 || ^7 || ^8 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/functions': ^2.2.12 || ^3.0.0 + '@vercel/kv': ^1 || ^2 || ^3 aws4fetch: ^1.0.20 - db0: ">=0.2.1" + db0: '>=0.2.1' idb-keyval: ^6.2.1 ioredis: ^5.4.2 uploadthing: ^7.4.4 peerDependenciesMeta: - "@azure/app-configuration": + '@azure/app-configuration': optional: true - "@azure/cosmos": + '@azure/cosmos': optional: true - "@azure/data-tables": + '@azure/data-tables': optional: true - "@azure/identity": + '@azure/identity': optional: true - "@azure/keyvault-secrets": + '@azure/keyvault-secrets': optional: true - "@azure/storage-blob": + '@azure/storage-blob': optional: true - "@capacitor/preferences": + '@capacitor/preferences': optional: true - "@deno/kv": + '@deno/kv': optional: true - "@netlify/blobs": + '@netlify/blobs': optional: true - "@planetscale/database": + '@planetscale/database': optional: true - "@upstash/redis": + '@upstash/redis': optional: true - "@vercel/blob": + '@vercel/blob': optional: true - "@vercel/functions": + '@vercel/functions': optional: true - "@vercel/kv": + '@vercel/kv': optional: true aws4fetch: optional: true @@ -5171,59 +3211,46 @@ packages: optional: true update-browserslist-db@1.3.4: - resolution: - { - integrity: sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==, - } + resolution: {integrity: sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==} hasBin: true peerDependencies: - browserslist: ">= 4.21.0" + browserslist: '>= 4.21.0' uri-js@4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, - } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} vfile-location@5.0.3: - resolution: - { - integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==, - } + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} vfile-message@4.0.3: - resolution: - { - integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==, - } + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} vfile@6.0.3: - resolution: - { - integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==, - } + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true vite@6.4.5: - resolution: - { - integrity: sha512-4enwjFfi4IwtEh0w+jPzpLVOFQiPHmmzPxcHXQOyEur47o6u0jE573DmGpjA+7irXoMLYRZD5ZaFUEneS3abPg==, - } - engines: { node: ^18.0.0 || ^20.0.0 || >=22.0.0 } + resolution: {integrity: sha512-4enwjFfi4IwtEh0w+jPzpLVOFQiPHmmzPxcHXQOyEur47o6u0jE573DmGpjA+7irXoMLYRZD5ZaFUEneS3abPg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: - "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: ">=1.21.0" - less: "*" + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 peerDependenciesMeta: - "@types/node": + '@types/node': optional: true jiti: optional: true @@ -5247,406 +3274,296 @@ packages: optional: true vitefu@1.1.3: - resolution: - { - integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==, - } + resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: vite: optional: true + vitest@3.2.7: + resolution: {integrity: sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.7 + '@vitest/ui': 3.2.7 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + volar-service-css@0.0.71: - resolution: - { - integrity: sha512-wRRFt9BpjMKCazcgOh67MSjUjiWUCAh99DyYSDIOTuxaRjEtDC7PpB0k1Y1wbJIW/pVtMUSVbpPo3UGSm0Byxw==, - } + resolution: {integrity: sha512-wRRFt9BpjMKCazcgOh67MSjUjiWUCAh99DyYSDIOTuxaRjEtDC7PpB0k1Y1wbJIW/pVtMUSVbpPo3UGSm0Byxw==} peerDependencies: - "@volar/language-service": ~2.4.0 + '@volar/language-service': ~2.4.0 peerDependenciesMeta: - "@volar/language-service": + '@volar/language-service': optional: true volar-service-emmet@0.0.71: - resolution: - { - integrity: sha512-zqjzt6bN95e3CUstBm0PBFAJnrfz0ZAARka87fart46/gNCLLuP3Vujy8V/J8HEziTFLnfkgIASLFYPUhonJcA==, - } + resolution: {integrity: sha512-zqjzt6bN95e3CUstBm0PBFAJnrfz0ZAARka87fart46/gNCLLuP3Vujy8V/J8HEziTFLnfkgIASLFYPUhonJcA==} peerDependencies: - "@volar/language-service": ~2.4.0 + '@volar/language-service': ~2.4.0 peerDependenciesMeta: - "@volar/language-service": + '@volar/language-service': optional: true volar-service-html@0.0.71: - resolution: - { - integrity: sha512-e8tHPhgQ7ooLfudAEIku+kgd9pWkq3SSz8RbnQDI1+Eb8wbenkLGHqoirLqz5ORLV6wIMr2Iv08RWBG5eOcgpw==, - } + resolution: {integrity: sha512-e8tHPhgQ7ooLfudAEIku+kgd9pWkq3SSz8RbnQDI1+Eb8wbenkLGHqoirLqz5ORLV6wIMr2Iv08RWBG5eOcgpw==} peerDependencies: - "@volar/language-service": ~2.4.0 + '@volar/language-service': ~2.4.0 peerDependenciesMeta: - "@volar/language-service": + '@volar/language-service': optional: true volar-service-prettier@0.0.71: - resolution: - { - integrity: sha512-Rz7JVH3qD108UCdmIEiZvOBNljMt2nLFdbN8AXcDfn7xD9F5I2aCIsDVqBbXw21PsnxG0b7MfwtNF+zPS/NKUg==, - } + resolution: {integrity: sha512-Rz7JVH3qD108UCdmIEiZvOBNljMt2nLFdbN8AXcDfn7xD9F5I2aCIsDVqBbXw21PsnxG0b7MfwtNF+zPS/NKUg==} peerDependencies: - "@volar/language-service": ~2.4.0 + '@volar/language-service': ~2.4.0 prettier: ^2.2 || ^3.0 peerDependenciesMeta: - "@volar/language-service": + '@volar/language-service': optional: true prettier: optional: true volar-service-typescript-twoslash-queries@0.0.71: - resolution: - { - integrity: sha512-9K2k72s4n7rV9s4bX0MyjbX9iBribvKZbBJKuEmTCZfeWJXs6Yh7bGpY4eoc7UufAjvpheBqwyZCOIPBvxCv0A==, - } + resolution: {integrity: sha512-9K2k72s4n7rV9s4bX0MyjbX9iBribvKZbBJKuEmTCZfeWJXs6Yh7bGpY4eoc7UufAjvpheBqwyZCOIPBvxCv0A==} peerDependencies: - "@volar/language-service": ~2.4.0 - typescript: "*" + '@volar/language-service': ~2.4.0 + typescript: '*' peerDependenciesMeta: - "@volar/language-service": + '@volar/language-service': optional: true typescript: optional: true volar-service-typescript@0.0.71: - resolution: - { - integrity: sha512-yTtM/BVT6hoyEYnDtaCyAtNhdNeS/mhTTABlBOdw3NNiRBUin3IznFJpgfjer4c6RYopiPjjQjc9VFhxVl1mLw==, - } + resolution: {integrity: sha512-yTtM/BVT6hoyEYnDtaCyAtNhdNeS/mhTTABlBOdw3NNiRBUin3IznFJpgfjer4c6RYopiPjjQjc9VFhxVl1mLw==} peerDependencies: - "@volar/language-service": ~2.4.0 - typescript: "*" + '@volar/language-service': ~2.4.0 + typescript: '*' peerDependenciesMeta: - "@volar/language-service": + '@volar/language-service': optional: true typescript: optional: true volar-service-yaml@0.0.71: - resolution: - { - integrity: sha512-qYGWGuVpUTnZGu5P/CR4KLK4aIR8RrcVnmfZ2eRcj9q/I8VZCoC5yy9FtEvfNvnDp4MU17yhdJcvpQPIqhJS2Q==, - } + resolution: {integrity: sha512-qYGWGuVpUTnZGu5P/CR4KLK4aIR8RrcVnmfZ2eRcj9q/I8VZCoC5yy9FtEvfNvnDp4MU17yhdJcvpQPIqhJS2Q==} peerDependencies: - "@volar/language-service": ~2.4.0 + '@volar/language-service': ~2.4.0 peerDependenciesMeta: - "@volar/language-service": + '@volar/language-service': optional: true vscode-css-languageservice@6.3.10: - resolution: - { - integrity: sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA==, - } + resolution: {integrity: sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA==} vscode-html-languageservice@5.6.2: - resolution: - { - integrity: sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg==, - } + resolution: {integrity: sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg==} vscode-json-languageservice@4.1.8: - resolution: - { - integrity: sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==, - } - engines: { npm: ">=7.0.0" } + resolution: {integrity: sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==} + engines: {npm: '>=7.0.0'} vscode-jsonrpc@10.0.0: - resolution: - { - integrity: sha512-USSfxg0vDIpTQqlQBGxF3mBARyoS8cU7LHLpbYNh6dOJt32dlskxPWB0Irrh5TllTmyf7oNLAvqDqzklbwwnpA==, - } - engines: { node: ">=14.17.0" } + resolution: {integrity: sha512-USSfxg0vDIpTQqlQBGxF3mBARyoS8cU7LHLpbYNh6dOJt32dlskxPWB0Irrh5TllTmyf7oNLAvqDqzklbwwnpA==} + engines: {node: '>=14.17.0'} vscode-jsonrpc@8.2.0: - resolution: - { - integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} vscode-languageserver-protocol@3.17.5: - resolution: - { - integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==, - } + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} vscode-languageserver-protocol@3.18.5: - resolution: - { - integrity: sha512-FW4fBMzZ99N8xeob4py0l050wgCoRgTpEq5Xcsb9lM1bc29UKGR/wSV+4knaqFxssFHajy7OzNiKP/m3U1ZEuA==, - } + resolution: {integrity: sha512-FW4fBMzZ99N8xeob4py0l050wgCoRgTpEq5Xcsb9lM1bc29UKGR/wSV+4knaqFxssFHajy7OzNiKP/m3U1ZEuA==} vscode-languageserver-textdocument@1.0.16: - resolution: - { - integrity: sha512-qeNEuOi9a3qkqRf7Gfez2WL2VwlBTLCNekHBGO9kxPVUp9XuY15yfTJ9jwvOwKI0I2MhUUfZq95NSp+LK1CLQg==, - } + resolution: {integrity: sha512-qeNEuOi9a3qkqRf7Gfez2WL2VwlBTLCNekHBGO9kxPVUp9XuY15yfTJ9jwvOwKI0I2MhUUfZq95NSp+LK1CLQg==} vscode-languageserver-types@3.17.5: - resolution: - { - integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==, - } + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} vscode-languageserver-types@3.18.5: - resolution: - { - integrity: sha512-kPd6+JQNz3HMJvjKlqUxERSlZHAntl/aGpsk7ImwIh0ewDKDcjgAEyVSYciPiOJD3ftbK9IrfiqUeTZLSbCizw==, - } + resolution: {integrity: sha512-kPd6+JQNz3HMJvjKlqUxERSlZHAntl/aGpsk7ImwIh0ewDKDcjgAEyVSYciPiOJD3ftbK9IrfiqUeTZLSbCizw==} vscode-languageserver@9.0.1: - resolution: - { - integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==, - } + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} hasBin: true vscode-nls@5.2.0: - resolution: - { - integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==, - } + resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} vscode-uri@3.2.0: - resolution: - { - integrity: sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==, - } + resolution: {integrity: sha512-m2gXo3bn0G1kT9InzMf07fTbqMbGtyckj3bH5ktLO+1Ssv+yiATZ4dhwaQv9UZWxJh6E9IFGnQyjgWVDWVBDrg==} web-namespaces@2.0.1: - resolution: - { - integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==, - } + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} which-boxed-primitive@1.1.1: - resolution: - { - integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} which-builtin-type@1.2.1: - resolution: - { - integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} which-collection@1.0.2: - resolution: - { - integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} which-pm-runs@1.1.0: - resolution: - { - integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} + engines: {node: '>=4'} which-typed-array@1.1.24: - resolution: - { - integrity: sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ==} + engines: {node: '>= 0.4'} which@2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} hasBin: true widest-line@5.0.0: - resolution: - { - integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} word-wrap@1.2.5: - resolution: - { - integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} wrap-ansi@9.0.2: - resolution: - { - integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} xxhash-wasm@1.1.0: - resolution: - { - integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==, - } + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} y18n@5.0.8: - resolution: - { - integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} yallist@3.1.1: - resolution: - { - integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, - } + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yaml-language-server@1.23.0: - resolution: - { - integrity: sha512-3qVyCOexLCWw06PQa5kRPwvMWMZ/eZeCRWUvgD6a0OkqL/4iCnxy2WumbWifa937Uo5xhyWJ0uxlU39ljhNh7A==, - } + resolution: {integrity: sha512-3qVyCOexLCWw06PQa5kRPwvMWMZ/eZeCRWUvgD6a0OkqL/4iCnxy2WumbWifa937Uo5xhyWJ0uxlU39ljhNh7A==} hasBin: true yaml@2.8.3: - resolution: - { - integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==, - } - engines: { node: ">= 14.6" } + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + engines: {node: '>= 14.6'} hasBin: true yaml@2.9.1: - resolution: - { - integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==, - } - engines: { node: ">= 14.6" } + resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==} + engines: {node: '>= 14.6'} hasBin: true yargs-parser@21.1.1: - resolution: - { - integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} yargs-parser@22.0.0: - resolution: - { - integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==, - } - engines: { node: ^20.19.0 || ^22.12.0 || >=23 } + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} yargs@18.2.0: - resolution: - { - integrity: sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w==, - } - engines: { node: ^20.19.0 || ^22.12.0 || >=23 } + resolution: {integrity: sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} yocto-queue@1.2.2: - resolution: - { - integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==, - } - engines: { node: ">=12.20" } + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} yocto-spinner@0.2.3: - resolution: - { - integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==, - } - engines: { node: ">=18.19" } + resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==} + engines: {node: '>=18.19'} yoctocolors@2.2.0: - resolution: - { - integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==} + engines: {node: '>=18'} zod-to-json-schema@3.25.2: - resolution: - { - integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==, - } + resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==} peerDependencies: zod: ^3.25.28 || ^4 zod-to-ts@1.2.0: - resolution: - { - integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==, - } + resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==} peerDependencies: typescript: ^4.9.4 || ^5.0.2 zod: ^3 zod@3.25.76: - resolution: - { - integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==, - } + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} zwitch@2.0.4: - resolution: - { - integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==, - } + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - "@astrojs/astro2tsx@0.1.3(@emnapi/runtime@1.11.3)": + + '@astrojs/astro2tsx@0.1.3(@emnapi/runtime@1.11.3)': dependencies: - "@emnapi/core": 1.11.3 - "@napi-rs/wasm-runtime": 1.2.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) + '@emnapi/core': 1.11.3 + '@napi-rs/wasm-runtime': 1.2.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) transitivePeerDependencies: - - "@emnapi/runtime" + - '@emnapi/runtime' - "@astrojs/check@0.9.12(@emnapi/runtime@1.11.3)(prettier@3.9.10)(typescript@5.9.3)": + '@astrojs/check@0.9.12(@emnapi/runtime@1.11.3)(prettier@3.9.10)(typescript@5.9.3)': dependencies: - "@astrojs/language-server": 2.17.3(@emnapi/runtime@1.11.3)(prettier@3.9.10)(typescript@5.9.3) + '@astrojs/language-server': 2.17.3(@emnapi/runtime@1.11.3)(prettier@3.9.10)(typescript@5.9.3) chokidar: 5.0.0 kleur: 4.1.5 typescript: 5.9.3 yargs: 18.2.0 transitivePeerDependencies: - - "@emnapi/runtime" + - '@emnapi/runtime' - prettier - prettier-plugin-astro - "@astrojs/compiler@2.13.1": {} + '@astrojs/compiler@2.13.1': {} - "@astrojs/internal-helpers@0.7.6": {} + '@astrojs/internal-helpers@0.7.6': {} - "@astrojs/language-server@2.17.3(@emnapi/runtime@1.11.3)(prettier@3.9.10)(typescript@5.9.3)": + '@astrojs/language-server@2.17.3(@emnapi/runtime@1.11.3)(prettier@3.9.10)(typescript@5.9.3)': dependencies: - "@astrojs/astro2tsx": 0.1.3(@emnapi/runtime@1.11.3) - "@astrojs/yaml2ts": 0.2.4 - "@volar/kit": 2.4.30(typescript@5.9.3) - "@volar/language-core": 2.4.30 - "@volar/language-server": 2.4.30(typescript@5.9.3) - "@volar/language-service": 2.4.30(typescript@5.9.3) + '@astrojs/astro2tsx': 0.1.3(@emnapi/runtime@1.11.3) + '@astrojs/yaml2ts': 0.2.4 + '@volar/kit': 2.4.30(typescript@5.9.3) + '@volar/language-core': 2.4.30 + '@volar/language-server': 2.4.30(typescript@5.9.3) + '@volar/language-service': 2.4.30(typescript@5.9.3) muggle-string: 0.4.1 tinyglobby: 0.2.17 volar-service-css: 0.0.71(@volar/language-service@2.4.30(typescript@5.9.3)) @@ -5661,13 +3578,13 @@ snapshots: optionalDependencies: prettier: 3.9.10 transitivePeerDependencies: - - "@emnapi/runtime" + - '@emnapi/runtime' - typescript - "@astrojs/markdown-remark@6.3.11(supports-color@7.2.0)": + '@astrojs/markdown-remark@6.3.11(supports-color@7.2.0)': dependencies: - "@astrojs/internal-helpers": 0.7.6 - "@astrojs/prism": 3.3.0 + '@astrojs/internal-helpers': 0.7.6 + '@astrojs/prism': 3.3.0 github-slugger: 2.0.0 hast-util-from-html: 2.0.3 hast-util-to-text: 4.0.2 @@ -5690,21 +3607,21 @@ snapshots: transitivePeerDependencies: - supports-color - "@astrojs/prism@3.3.0": + '@astrojs/prism@3.3.0': dependencies: prismjs: 1.30.0 - "@astrojs/react@4.4.2(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(jiti@2.7.0)(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(supports-color@7.2.0)(yaml@2.9.1)": + '@astrojs/react@4.4.2(@types/node@22.20.5)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(jiti@2.7.0)(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(supports-color@7.2.0)(yaml@2.9.1)': dependencies: - "@types/react": 18.3.31 - "@types/react-dom": 18.3.7(@types/react@18.3.31) - "@vitejs/plugin-react": 4.7.0(supports-color@7.2.0)(vite@6.4.5(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1)) + '@types/react': 18.3.31 + '@types/react-dom': 18.3.7(@types/react@18.3.31) + '@vitejs/plugin-react': 4.7.0(supports-color@7.2.0)(vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) ultrahtml: 1.7.0 - vite: 6.4.5(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1) + vite: 6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1) transitivePeerDependencies: - - "@types/node" + - '@types/node' - jiti - less - lightningcss @@ -5717,7 +3634,7 @@ snapshots: - tsx - yaml - "@astrojs/telemetry@3.3.0(supports-color@7.2.0)": + '@astrojs/telemetry@3.3.0(supports-color@7.2.0)': dependencies: ci-info: 4.4.0 debug: 4.4.3(supports-color@7.2.0) @@ -5729,30 +3646,30 @@ snapshots: transitivePeerDependencies: - supports-color - "@astrojs/yaml2ts@0.2.4": + '@astrojs/yaml2ts@0.2.4': dependencies: yaml: 2.9.1 - "@babel/code-frame@7.29.7": + '@babel/code-frame@7.29.7': dependencies: - "@babel/helper-validator-identifier": 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - "@babel/compat-data@7.29.7": {} + '@babel/compat-data@7.29.7': {} - "@babel/core@7.29.7(supports-color@7.2.0)": + '@babel/core@7.29.7(supports-color@7.2.0)': dependencies: - "@babel/code-frame": 7.29.7 - "@babel/generator": 7.29.8 - "@babel/helper-compilation-targets": 7.29.7 - "@babel/helper-module-transforms": 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) - "@babel/helpers": 7.29.10 - "@babel/parser": 7.29.9 - "@babel/template": 7.29.7 - "@babel/traverse": 7.29.10(supports-color@7.2.0) - "@babel/types": 7.29.8 - "@jridgewell/remapping": 2.3.5 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.8 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helpers': 7.29.10 + '@babel/parser': 7.29.9 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.10(supports-color@7.2.0) + '@babel/types': 7.29.8 + '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3(supports-color@7.2.0) gensync: 1.0.0-beta.2 @@ -5761,310 +3678,310 @@ snapshots: transitivePeerDependencies: - supports-color - "@babel/generator@7.29.8": + '@babel/generator@7.29.8': dependencies: - "@babel/parser": 7.29.9 - "@babel/types": 7.29.8 - "@jridgewell/gen-mapping": 0.3.13 - "@jridgewell/trace-mapping": 0.3.31 + '@babel/parser': 7.29.9 + '@babel/types': 7.29.8 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - "@babel/helper-compilation-targets@7.29.7": + '@babel/helper-compilation-targets@7.29.7': dependencies: - "@babel/compat-data": 7.29.7 - "@babel/helper-validator-option": 7.29.7 + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 browserslist: 4.29.4 lru-cache: 5.1.1 semver: 6.3.1 - "@babel/helper-globals@7.29.7": {} + '@babel/helper-globals@7.29.7': {} - "@babel/helper-module-imports@7.29.7(supports-color@7.2.0)": + '@babel/helper-module-imports@7.29.7(supports-color@7.2.0)': dependencies: - "@babel/traverse": 7.29.10(supports-color@7.2.0) - "@babel/types": 7.29.8 + '@babel/traverse': 7.29.10(supports-color@7.2.0) + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color - "@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)": + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - "@babel/core": 7.29.7(supports-color@7.2.0) - "@babel/helper-module-imports": 7.29.7(supports-color@7.2.0) - "@babel/helper-validator-identifier": 7.29.7 - "@babel/traverse": 7.29.10(supports-color@7.2.0) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.10(supports-color@7.2.0) transitivePeerDependencies: - supports-color - "@babel/helper-plugin-utils@7.29.7": {} + '@babel/helper-plugin-utils@7.29.7': {} - "@babel/helper-string-parser@7.29.7": {} + '@babel/helper-string-parser@7.29.7': {} - "@babel/helper-validator-identifier@7.29.7": {} + '@babel/helper-validator-identifier@7.29.7': {} - "@babel/helper-validator-option@7.29.7": {} + '@babel/helper-validator-option@7.29.7': {} - "@babel/helpers@7.29.10": + '@babel/helpers@7.29.10': dependencies: - "@babel/template": 7.29.7 - "@babel/types": 7.29.8 + '@babel/template': 7.29.7 + '@babel/types': 7.29.8 - "@babel/parser@7.29.9": + '@babel/parser@7.29.9': dependencies: - "@babel/types": 7.29.8 + '@babel/types': 7.29.8 - "@babel/plugin-transform-react-jsx-self@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))": + '@babel/plugin-transform-react-jsx-self@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - "@babel/core": 7.29.7(supports-color@7.2.0) - "@babel/helper-plugin-utils": 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 - "@babel/plugin-transform-react-jsx-source@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))": + '@babel/plugin-transform-react-jsx-source@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - "@babel/core": 7.29.7(supports-color@7.2.0) - "@babel/helper-plugin-utils": 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 - "@babel/template@7.29.7": + '@babel/template@7.29.7': dependencies: - "@babel/code-frame": 7.29.7 - "@babel/parser": 7.29.9 - "@babel/types": 7.29.8 + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.9 + '@babel/types': 7.29.8 - "@babel/traverse@7.29.10(supports-color@7.2.0)": + '@babel/traverse@7.29.10(supports-color@7.2.0)': dependencies: - "@babel/code-frame": 7.29.7 - "@babel/generator": 7.29.8 - "@babel/helper-globals": 7.29.7 - "@babel/parser": 7.29.9 - "@babel/template": 7.29.7 - "@babel/types": 7.29.8 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.8 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.9 + '@babel/template': 7.29.7 + '@babel/types': 7.29.8 debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color - "@babel/types@7.29.8": + '@babel/types@7.29.8': dependencies: - "@babel/helper-string-parser": 7.29.7 - "@babel/helper-validator-identifier": 7.29.7 + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 - "@capsizecss/unpack@4.0.1": + '@capsizecss/unpack@4.0.1': dependencies: fontkitten: 1.0.3 - "@emmetio/abbreviation@2.3.3": + '@emmetio/abbreviation@2.3.3': dependencies: - "@emmetio/scanner": 1.0.4 + '@emmetio/scanner': 1.0.4 - "@emmetio/css-abbreviation@2.1.8": + '@emmetio/css-abbreviation@2.1.8': dependencies: - "@emmetio/scanner": 1.0.4 + '@emmetio/scanner': 1.0.4 - "@emmetio/css-parser@0.4.1": + '@emmetio/css-parser@0.4.1': dependencies: - "@emmetio/stream-reader": 2.2.0 - "@emmetio/stream-reader-utils": 0.1.0 + '@emmetio/stream-reader': 2.2.0 + '@emmetio/stream-reader-utils': 0.1.0 - "@emmetio/html-matcher@1.3.0": + '@emmetio/html-matcher@1.3.0': dependencies: - "@emmetio/scanner": 1.0.4 + '@emmetio/scanner': 1.0.4 - "@emmetio/scanner@1.0.4": {} + '@emmetio/scanner@1.0.4': {} - "@emmetio/stream-reader-utils@0.1.0": {} + '@emmetio/stream-reader-utils@0.1.0': {} - "@emmetio/stream-reader@2.2.0": {} + '@emmetio/stream-reader@2.2.0': {} - "@emnapi/core@1.11.3": + '@emnapi/core@1.11.3': dependencies: - "@emnapi/wasi-threads": 1.2.3 + '@emnapi/wasi-threads': 1.2.3 tslib: 2.8.1 - "@emnapi/runtime@1.11.3": + '@emnapi/runtime@1.11.3': dependencies: tslib: 2.8.1 - "@emnapi/wasi-threads@1.2.3": + '@emnapi/wasi-threads@1.2.3': dependencies: tslib: 2.8.1 - "@esbuild/aix-ppc64@0.25.12": + '@esbuild/aix-ppc64@0.25.12': optional: true - "@esbuild/aix-ppc64@0.27.7": + '@esbuild/aix-ppc64@0.27.7': optional: true - "@esbuild/android-arm64@0.25.12": + '@esbuild/android-arm64@0.25.12': optional: true - "@esbuild/android-arm64@0.27.7": + '@esbuild/android-arm64@0.27.7': optional: true - "@esbuild/android-arm@0.25.12": + '@esbuild/android-arm@0.25.12': optional: true - "@esbuild/android-arm@0.27.7": + '@esbuild/android-arm@0.27.7': optional: true - "@esbuild/android-x64@0.25.12": + '@esbuild/android-x64@0.25.12': optional: true - "@esbuild/android-x64@0.27.7": + '@esbuild/android-x64@0.27.7': optional: true - "@esbuild/darwin-arm64@0.25.12": + '@esbuild/darwin-arm64@0.25.12': optional: true - "@esbuild/darwin-arm64@0.27.7": + '@esbuild/darwin-arm64@0.27.7': optional: true - "@esbuild/darwin-x64@0.25.12": + '@esbuild/darwin-x64@0.25.12': optional: true - "@esbuild/darwin-x64@0.27.7": + '@esbuild/darwin-x64@0.27.7': optional: true - "@esbuild/freebsd-arm64@0.25.12": + '@esbuild/freebsd-arm64@0.25.12': optional: true - "@esbuild/freebsd-arm64@0.27.7": + '@esbuild/freebsd-arm64@0.27.7': optional: true - "@esbuild/freebsd-x64@0.25.12": + '@esbuild/freebsd-x64@0.25.12': optional: true - "@esbuild/freebsd-x64@0.27.7": + '@esbuild/freebsd-x64@0.27.7': optional: true - "@esbuild/linux-arm64@0.25.12": + '@esbuild/linux-arm64@0.25.12': optional: true - "@esbuild/linux-arm64@0.27.7": + '@esbuild/linux-arm64@0.27.7': optional: true - "@esbuild/linux-arm@0.25.12": + '@esbuild/linux-arm@0.25.12': optional: true - "@esbuild/linux-arm@0.27.7": + '@esbuild/linux-arm@0.27.7': optional: true - "@esbuild/linux-ia32@0.25.12": + '@esbuild/linux-ia32@0.25.12': optional: true - "@esbuild/linux-ia32@0.27.7": + '@esbuild/linux-ia32@0.27.7': optional: true - "@esbuild/linux-loong64@0.25.12": + '@esbuild/linux-loong64@0.25.12': optional: true - "@esbuild/linux-loong64@0.27.7": + '@esbuild/linux-loong64@0.27.7': optional: true - "@esbuild/linux-mips64el@0.25.12": + '@esbuild/linux-mips64el@0.25.12': optional: true - "@esbuild/linux-mips64el@0.27.7": + '@esbuild/linux-mips64el@0.27.7': optional: true - "@esbuild/linux-ppc64@0.25.12": + '@esbuild/linux-ppc64@0.25.12': optional: true - "@esbuild/linux-ppc64@0.27.7": + '@esbuild/linux-ppc64@0.27.7': optional: true - "@esbuild/linux-riscv64@0.25.12": + '@esbuild/linux-riscv64@0.25.12': optional: true - "@esbuild/linux-riscv64@0.27.7": + '@esbuild/linux-riscv64@0.27.7': optional: true - "@esbuild/linux-s390x@0.25.12": + '@esbuild/linux-s390x@0.25.12': optional: true - "@esbuild/linux-s390x@0.27.7": + '@esbuild/linux-s390x@0.27.7': optional: true - "@esbuild/linux-x64@0.25.12": + '@esbuild/linux-x64@0.25.12': optional: true - "@esbuild/linux-x64@0.27.7": + '@esbuild/linux-x64@0.27.7': optional: true - "@esbuild/netbsd-arm64@0.25.12": + '@esbuild/netbsd-arm64@0.25.12': optional: true - "@esbuild/netbsd-arm64@0.27.7": + '@esbuild/netbsd-arm64@0.27.7': optional: true - "@esbuild/netbsd-x64@0.25.12": + '@esbuild/netbsd-x64@0.25.12': optional: true - "@esbuild/netbsd-x64@0.27.7": + '@esbuild/netbsd-x64@0.27.7': optional: true - "@esbuild/openbsd-arm64@0.25.12": + '@esbuild/openbsd-arm64@0.25.12': optional: true - "@esbuild/openbsd-arm64@0.27.7": + '@esbuild/openbsd-arm64@0.27.7': optional: true - "@esbuild/openbsd-x64@0.25.12": + '@esbuild/openbsd-x64@0.25.12': optional: true - "@esbuild/openbsd-x64@0.27.7": + '@esbuild/openbsd-x64@0.27.7': optional: true - "@esbuild/openharmony-arm64@0.25.12": + '@esbuild/openharmony-arm64@0.25.12': optional: true - "@esbuild/openharmony-arm64@0.27.7": + '@esbuild/openharmony-arm64@0.27.7': optional: true - "@esbuild/sunos-x64@0.25.12": + '@esbuild/sunos-x64@0.25.12': optional: true - "@esbuild/sunos-x64@0.27.7": + '@esbuild/sunos-x64@0.27.7': optional: true - "@esbuild/win32-arm64@0.25.12": + '@esbuild/win32-arm64@0.25.12': optional: true - "@esbuild/win32-arm64@0.27.7": + '@esbuild/win32-arm64@0.27.7': optional: true - "@esbuild/win32-ia32@0.25.12": + '@esbuild/win32-ia32@0.25.12': optional: true - "@esbuild/win32-ia32@0.27.7": + '@esbuild/win32-ia32@0.27.7': optional: true - "@esbuild/win32-x64@0.25.12": + '@esbuild/win32-x64@0.25.12': optional: true - "@esbuild/win32-x64@0.27.7": + '@esbuild/win32-x64@0.27.7': optional: true - "@eslint-community/eslint-utils@4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))": + '@eslint-community/eslint-utils@4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))': dependencies: eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) eslint-visitor-keys: 3.4.3 - "@eslint-community/regexpp@4.12.2": {} + '@eslint-community/regexpp@4.12.2': {} - "@eslint/config-array@0.21.2(supports-color@7.2.0)": + '@eslint/config-array@0.21.2(supports-color@7.2.0)': dependencies: - "@eslint/object-schema": 2.1.7 + '@eslint/object-schema': 2.1.7 debug: 4.4.3(supports-color@7.2.0) minimatch: 3.1.5 transitivePeerDependencies: - supports-color - "@eslint/config-helpers@0.4.2": + '@eslint/config-helpers@0.4.2': dependencies: - "@eslint/core": 0.17.0 + '@eslint/core': 0.17.0 - "@eslint/core@0.17.0": + '@eslint/core@0.17.0': dependencies: - "@types/json-schema": 7.0.15 + '@types/json-schema': 7.0.15 - "@eslint/eslintrc@3.3.7(supports-color@7.2.0)": + '@eslint/eslintrc@3.3.7(supports-color@7.2.0)': dependencies: ajv: 6.15.0 debug: 4.4.3(supports-color@7.2.0) @@ -6078,281 +3995,281 @@ snapshots: transitivePeerDependencies: - supports-color - "@eslint/js@9.39.5": {} + '@eslint/js@9.39.5': {} - "@eslint/object-schema@2.1.7": {} + '@eslint/object-schema@2.1.7': {} - "@eslint/plugin-kit@0.4.1": + '@eslint/plugin-kit@0.4.1': dependencies: - "@eslint/core": 0.17.0 + '@eslint/core': 0.17.0 levn: 0.4.1 - "@fontsource-variable/inter@5.3.0": {} + '@fontsource-variable/inter@5.3.0': {} - "@humanfs/core@0.19.2": + '@humanfs/core@0.19.2': dependencies: - "@humanfs/types": 0.15.0 + '@humanfs/types': 0.15.0 - "@humanfs/node@0.16.8": + '@humanfs/node@0.16.8': dependencies: - "@humanfs/core": 0.19.2 - "@humanfs/types": 0.15.0 - "@humanwhocodes/retry": 0.4.3 + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 - "@humanfs/types@0.15.0": {} + '@humanfs/types@0.15.0': {} - "@humanwhocodes/module-importer@1.0.1": {} + '@humanwhocodes/module-importer@1.0.1': {} - "@humanwhocodes/retry@0.4.3": {} + '@humanwhocodes/retry@0.4.3': {} - "@img/colour@1.1.0": + '@img/colour@1.1.0': optional: true - "@img/sharp-darwin-arm64@0.34.5": + '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: - "@img/sharp-libvips-darwin-arm64": 1.2.4 + '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true - "@img/sharp-darwin-x64@0.34.5": + '@img/sharp-darwin-x64@0.34.5': optionalDependencies: - "@img/sharp-libvips-darwin-x64": 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true - "@img/sharp-libvips-darwin-arm64@1.2.4": + '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true - "@img/sharp-libvips-darwin-x64@1.2.4": + '@img/sharp-libvips-darwin-x64@1.2.4': optional: true - "@img/sharp-libvips-linux-arm64@1.2.4": + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - "@img/sharp-libvips-linux-arm@1.2.4": + '@img/sharp-libvips-linux-arm@1.2.4': optional: true - "@img/sharp-libvips-linux-ppc64@1.2.4": + '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true - "@img/sharp-libvips-linux-riscv64@1.2.4": + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - "@img/sharp-libvips-linux-s390x@1.2.4": + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - "@img/sharp-libvips-linux-x64@1.2.4": + '@img/sharp-libvips-linux-x64@1.2.4': optional: true - "@img/sharp-libvips-linuxmusl-arm64@1.2.4": + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - "@img/sharp-libvips-linuxmusl-x64@1.2.4": + '@img/sharp-libvips-linuxmusl-x64@1.2.4': optional: true - "@img/sharp-linux-arm64@0.34.5": + '@img/sharp-linux-arm64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-arm64": 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true - "@img/sharp-linux-arm@0.34.5": + '@img/sharp-linux-arm@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-arm": 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 optional: true - "@img/sharp-linux-ppc64@0.34.5": + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-ppc64": 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 optional: true - "@img/sharp-linux-riscv64@0.34.5": + '@img/sharp-linux-riscv64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-riscv64": 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true - "@img/sharp-linux-s390x@0.34.5": + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-s390x": 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true - "@img/sharp-linux-x64@0.34.5": + '@img/sharp-linux-x64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-x64": 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 optional: true - "@img/sharp-linuxmusl-arm64@0.34.5": + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true - "@img/sharp-linuxmusl-x64@0.34.5": + '@img/sharp-linuxmusl-x64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linuxmusl-x64": 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 optional: true - "@img/sharp-wasm32@0.34.5": + '@img/sharp-wasm32@0.34.5': dependencies: - "@emnapi/runtime": 1.11.3 + '@emnapi/runtime': 1.11.3 optional: true - "@img/sharp-win32-arm64@0.34.5": + '@img/sharp-win32-arm64@0.34.5': optional: true - "@img/sharp-win32-ia32@0.34.5": + '@img/sharp-win32-ia32@0.34.5': optional: true - "@img/sharp-win32-x64@0.34.5": + '@img/sharp-win32-x64@0.34.5': optional: true - "@jridgewell/gen-mapping@0.3.13": + '@jridgewell/gen-mapping@0.3.13': dependencies: - "@jridgewell/sourcemap-codec": 1.6.0 - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/sourcemap-codec': 1.6.0 + '@jridgewell/trace-mapping': 0.3.31 - "@jridgewell/remapping@2.3.5": + '@jridgewell/remapping@2.3.5': dependencies: - "@jridgewell/gen-mapping": 0.3.13 - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 - "@jridgewell/resolve-uri@3.1.2": {} + '@jridgewell/resolve-uri@3.1.2': {} - "@jridgewell/sourcemap-codec@1.6.0": {} + '@jridgewell/sourcemap-codec@1.6.0': {} - "@jridgewell/trace-mapping@0.3.31": + '@jridgewell/trace-mapping@0.3.31': dependencies: - "@jridgewell/resolve-uri": 3.1.2 - "@jridgewell/sourcemap-codec": 1.6.0 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.6.0 - "@napi-rs/lzma-linux-x64-gnu@1.5.1": + '@napi-rs/lzma-linux-x64-gnu@1.5.1': optional: true - "@napi-rs/wasm-runtime@1.2.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)": + '@napi-rs/wasm-runtime@1.2.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': dependencies: - "@emnapi/core": 1.11.3 - "@emnapi/runtime": 1.11.3 - "@tybys/wasm-util": 0.10.4 + '@emnapi/core': 1.11.3 + '@emnapi/runtime': 1.11.3 + '@tybys/wasm-util': 0.10.4 - "@oslojs/encoding@1.1.0": {} + '@oslojs/encoding@1.1.0': {} - "@rolldown/pluginutils@1.0.0-beta.27": {} + '@rolldown/pluginutils@1.0.0-beta.27': {} - "@rollup/pluginutils@5.5.1(rollup@4.65.0)": + '@rollup/pluginutils@5.5.1(rollup@4.65.0)': dependencies: - "@types/estree": 1.0.9 + '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.7 optionalDependencies: rollup: 4.65.0 - "@rollup/rollup-android-arm-eabi@4.65.0": + '@rollup/rollup-android-arm-eabi@4.65.0': optional: true - "@rollup/rollup-android-arm64@4.65.0": + '@rollup/rollup-android-arm64@4.65.0': optional: true - "@rollup/rollup-darwin-arm64@4.65.0": + '@rollup/rollup-darwin-arm64@4.65.0': optional: true - "@rollup/rollup-darwin-x64@4.65.0": + '@rollup/rollup-darwin-x64@4.65.0': optional: true - "@rollup/rollup-freebsd-arm64@4.65.0": + '@rollup/rollup-freebsd-arm64@4.65.0': optional: true - "@rollup/rollup-freebsd-x64@4.65.0": + '@rollup/rollup-freebsd-x64@4.65.0': optional: true - "@rollup/rollup-linux-arm-gnueabihf@4.65.0": + '@rollup/rollup-linux-arm-gnueabihf@4.65.0': optional: true - "@rollup/rollup-linux-arm-musleabihf@4.65.0": + '@rollup/rollup-linux-arm-musleabihf@4.65.0': optional: true - "@rollup/rollup-linux-arm64-gnu@4.65.0": + '@rollup/rollup-linux-arm64-gnu@4.65.0': optional: true - "@rollup/rollup-linux-arm64-musl@4.65.0": + '@rollup/rollup-linux-arm64-musl@4.65.0': optional: true - "@rollup/rollup-linux-loong64-gnu@4.65.0": + '@rollup/rollup-linux-loong64-gnu@4.65.0': optional: true - "@rollup/rollup-linux-loong64-musl@4.65.0": + '@rollup/rollup-linux-loong64-musl@4.65.0': optional: true - "@rollup/rollup-linux-ppc64-gnu@4.65.0": + '@rollup/rollup-linux-ppc64-gnu@4.65.0': optional: true - "@rollup/rollup-linux-ppc64-musl@4.65.0": + '@rollup/rollup-linux-ppc64-musl@4.65.0': optional: true - "@rollup/rollup-linux-riscv64-gnu@4.65.0": + '@rollup/rollup-linux-riscv64-gnu@4.65.0': optional: true - "@rollup/rollup-linux-riscv64-musl@4.65.0": + '@rollup/rollup-linux-riscv64-musl@4.65.0': optional: true - "@rollup/rollup-linux-s390x-gnu@4.65.0": + '@rollup/rollup-linux-s390x-gnu@4.65.0': optional: true - "@rollup/rollup-linux-x64-gnu@4.65.0": + '@rollup/rollup-linux-x64-gnu@4.65.0': optional: true - "@rollup/rollup-linux-x64-musl@4.65.0": + '@rollup/rollup-linux-x64-musl@4.65.0': optional: true - "@rollup/rollup-openbsd-x64@4.65.0": + '@rollup/rollup-openbsd-x64@4.65.0': optional: true - "@rollup/rollup-openharmony-arm64@4.65.0": + '@rollup/rollup-openharmony-arm64@4.65.0': optional: true - "@rollup/rollup-win32-arm64-msvc@4.65.0": + '@rollup/rollup-win32-arm64-msvc@4.65.0': optional: true - "@rollup/rollup-win32-ia32-msvc@4.65.0": + '@rollup/rollup-win32-ia32-msvc@4.65.0': optional: true - "@rollup/rollup-win32-x64-gnu@4.65.0": + '@rollup/rollup-win32-x64-gnu@4.65.0': optional: true - "@rollup/rollup-win32-x64-msvc@4.65.0": + '@rollup/rollup-win32-x64-msvc@4.65.0': optional: true - "@shikijs/core@3.23.0": + '@shikijs/core@3.23.0': dependencies: - "@shikijs/types": 3.23.0 - "@shikijs/vscode-textmate": 10.1.0 - "@types/hast": 3.0.5 + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.1.0 + '@types/hast': 3.0.5 hast-util-to-html: 9.0.5 - "@shikijs/engine-javascript@3.23.0": + '@shikijs/engine-javascript@3.23.0': dependencies: - "@shikijs/types": 3.23.0 - "@shikijs/vscode-textmate": 10.1.0 + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.1.0 oniguruma-to-es: 4.3.6 - "@shikijs/engine-oniguruma@3.23.0": + '@shikijs/engine-oniguruma@3.23.0': dependencies: - "@shikijs/types": 3.23.0 - "@shikijs/vscode-textmate": 10.1.0 + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.1.0 - "@shikijs/langs@3.23.0": + '@shikijs/langs@3.23.0': dependencies: - "@shikijs/types": 3.23.0 + '@shikijs/types': 3.23.0 - "@shikijs/themes@3.23.0": + '@shikijs/themes@3.23.0': dependencies: - "@shikijs/types": 3.23.0 + '@shikijs/types': 3.23.0 - "@shikijs/types@3.23.0": + '@shikijs/types@3.23.0': dependencies: - "@shikijs/vscode-textmate": 10.1.0 - "@types/hast": 3.0.5 + '@shikijs/vscode-textmate': 10.1.0 + '@types/hast': 3.0.5 - "@shikijs/vscode-textmate@10.1.0": {} + '@shikijs/vscode-textmate@10.1.0': {} - "@tailwindcss/node@4.3.3": + '@tailwindcss/node@4.3.3': dependencies: - "@jridgewell/remapping": 2.3.5 + '@jridgewell/remapping': 2.3.5 enhanced-resolve: 5.26.0 jiti: 2.7.0 lightningcss: 1.32.0 @@ -6360,132 +4277,143 @@ snapshots: source-map-js: 1.2.2 tailwindcss: 4.3.3 - "@tailwindcss/oxide-android-arm64@4.3.3": + '@tailwindcss/oxide-android-arm64@4.3.3': optional: true - "@tailwindcss/oxide-darwin-arm64@4.3.3": + '@tailwindcss/oxide-darwin-arm64@4.3.3': optional: true - "@tailwindcss/oxide-darwin-x64@4.3.3": + '@tailwindcss/oxide-darwin-x64@4.3.3': optional: true - "@tailwindcss/oxide-freebsd-x64@4.3.3": + '@tailwindcss/oxide-freebsd-x64@4.3.3': optional: true - "@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3": + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': optional: true - "@tailwindcss/oxide-linux-arm64-gnu@4.3.3": + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': optional: true - "@tailwindcss/oxide-linux-arm64-musl@4.3.3": + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': optional: true - "@tailwindcss/oxide-linux-x64-gnu@4.3.3": + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': optional: true - "@tailwindcss/oxide-linux-x64-musl@4.3.3": + '@tailwindcss/oxide-linux-x64-musl@4.3.3': optional: true - "@tailwindcss/oxide-wasm32-wasi@4.3.3": + '@tailwindcss/oxide-wasm32-wasi@4.3.3': optional: true - "@tailwindcss/oxide-win32-arm64-msvc@4.3.3": + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': optional: true - "@tailwindcss/oxide-win32-x64-msvc@4.3.3": + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': optional: true - "@tailwindcss/oxide@4.3.3": + '@tailwindcss/oxide@4.3.3': optionalDependencies: - "@tailwindcss/oxide-android-arm64": 4.3.3 - "@tailwindcss/oxide-darwin-arm64": 4.3.3 - "@tailwindcss/oxide-darwin-x64": 4.3.3 - "@tailwindcss/oxide-freebsd-x64": 4.3.3 - "@tailwindcss/oxide-linux-arm-gnueabihf": 4.3.3 - "@tailwindcss/oxide-linux-arm64-gnu": 4.3.3 - "@tailwindcss/oxide-linux-arm64-musl": 4.3.3 - "@tailwindcss/oxide-linux-x64-gnu": 4.3.3 - "@tailwindcss/oxide-linux-x64-musl": 4.3.3 - "@tailwindcss/oxide-wasm32-wasi": 4.3.3 - "@tailwindcss/oxide-win32-arm64-msvc": 4.3.3 - "@tailwindcss/oxide-win32-x64-msvc": 4.3.3 - - "@tailwindcss/vite@4.3.3(vite@6.4.5(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1))": - dependencies: - "@tailwindcss/node": 4.3.3 - "@tailwindcss/oxide": 4.3.3 + '@tailwindcss/oxide-android-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-x64': 4.3.3 + '@tailwindcss/oxide-freebsd-x64': 4.3.3 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.3 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-x64-musl': 4.3.3 + '@tailwindcss/oxide-wasm32-wasi': 4.3.3 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 + + '@tailwindcss/vite@4.3.3(vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1))': + dependencies: + '@tailwindcss/node': 4.3.3 + '@tailwindcss/oxide': 4.3.3 tailwindcss: 4.3.3 - vite: 6.4.5(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1) + vite: 6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1) - "@tybys/wasm-util@0.10.4": + '@tybys/wasm-util@0.10.4': dependencies: tslib: 2.8.1 - "@types/babel__core@7.20.5": + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.29.9 + '@babel/types': 7.29.8 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': dependencies: - "@babel/parser": 7.29.9 - "@babel/types": 7.29.8 - "@types/babel__generator": 7.27.0 - "@types/babel__template": 7.4.4 - "@types/babel__traverse": 7.28.0 + '@babel/types': 7.29.8 - "@types/babel__generator@7.27.0": + '@types/babel__template@7.4.4': dependencies: - "@babel/types": 7.29.8 + '@babel/parser': 7.29.9 + '@babel/types': 7.29.8 - "@types/babel__template@7.4.4": + '@types/babel__traverse@7.28.0': dependencies: - "@babel/parser": 7.29.9 - "@babel/types": 7.29.8 + '@babel/types': 7.29.8 - "@types/babel__traverse@7.28.0": + '@types/chai@5.2.3': dependencies: - "@babel/types": 7.29.8 + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 - "@types/debug@4.1.13": + '@types/debug@4.1.13': dependencies: - "@types/ms": 2.1.0 + '@types/ms': 2.1.0 - "@types/estree@1.0.9": {} + '@types/deep-eql@4.0.2': {} - "@types/hast@3.0.5": + '@types/estree@1.0.9': {} + + '@types/hast@3.0.5': dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 - "@types/json-schema@7.0.15": {} + '@types/json-schema@7.0.15': {} - "@types/mdast@4.0.4": + '@types/mdast@4.0.4': dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 + + '@types/ms@2.1.0': {} - "@types/ms@2.1.0": {} + '@types/nlcst@2.0.3': + dependencies: + '@types/unist': 3.0.3 - "@types/nlcst@2.0.3": + '@types/node@22.20.5': dependencies: - "@types/unist": 3.0.3 + undici-types: 6.21.0 - "@types/prop-types@15.7.15": {} + '@types/prop-types@15.7.15': {} - "@types/react-dom@18.3.7(@types/react@18.3.31)": + '@types/react-dom@18.3.7(@types/react@18.3.31)': dependencies: - "@types/react": 18.3.31 + '@types/react': 18.3.31 - "@types/react@18.3.31": + '@types/react@18.3.31': dependencies: - "@types/prop-types": 15.7.15 + '@types/prop-types': 15.7.15 csstype: 3.2.3 - "@types/unist@3.0.3": {} + '@types/unist@3.0.3': {} - "@typescript-eslint/eslint-plugin@8.72.0(@typescript-eslint/parser@8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)": + '@typescript-eslint/eslint-plugin@8.72.0(@typescript-eslint/parser@8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - "@typescript-eslint/scope-manager": 8.72.0 - "@typescript-eslint/type-utils": 8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - "@typescript-eslint/utils": 8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 8.72.0 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.72.0 + '@typescript-eslint/type-utils': 8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.72.0 eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) ignore: 7.0.13 natural-compare: 1.4.0 @@ -6494,41 +4422,41 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)": + '@typescript-eslint/parser@8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - "@typescript-eslint/scope-manager": 8.72.0 - "@typescript-eslint/types": 8.72.0 - "@typescript-eslint/typescript-estree": 8.72.0(supports-color@7.2.0)(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 8.72.0 + '@typescript-eslint/scope-manager': 8.72.0 + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/typescript-estree': 8.72.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.72.0 debug: 4.4.3(supports-color@7.2.0) eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/project-service@8.72.0(supports-color@7.2.0)(typescript@5.9.3)": + '@typescript-eslint/project-service@8.72.0(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - "@typescript-eslint/tsconfig-utils": 8.72.0(typescript@5.9.3) - "@typescript-eslint/types": 8.72.0 + '@typescript-eslint/tsconfig-utils': 8.72.0(typescript@5.9.3) + '@typescript-eslint/types': 8.72.0 debug: 4.4.3(supports-color@7.2.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/scope-manager@8.72.0": + '@typescript-eslint/scope-manager@8.72.0': dependencies: - "@typescript-eslint/types": 8.72.0 - "@typescript-eslint/visitor-keys": 8.72.0 + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/visitor-keys': 8.72.0 - "@typescript-eslint/tsconfig-utils@8.72.0(typescript@5.9.3)": + '@typescript-eslint/tsconfig-utils@8.72.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - "@typescript-eslint/type-utils@8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)": + '@typescript-eslint/type-utils@8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - "@typescript-eslint/types": 8.72.0 - "@typescript-eslint/typescript-estree": 8.72.0(supports-color@7.2.0)(typescript@5.9.3) - "@typescript-eslint/utils": 8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/typescript-estree': 8.72.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) debug: 4.4.3(supports-color@7.2.0) eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) ts-api-utils: 2.5.0(typescript@5.9.3) @@ -6536,14 +4464,14 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/types@8.72.0": {} + '@typescript-eslint/types@8.72.0': {} - "@typescript-eslint/typescript-estree@8.72.0(supports-color@7.2.0)(typescript@5.9.3)": + '@typescript-eslint/typescript-estree@8.72.0(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - "@typescript-eslint/project-service": 8.72.0(supports-color@7.2.0)(typescript@5.9.3) - "@typescript-eslint/tsconfig-utils": 8.72.0(typescript@5.9.3) - "@typescript-eslint/types": 8.72.0 - "@typescript-eslint/visitor-keys": 8.72.0 + '@typescript-eslint/project-service': 8.72.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.72.0(typescript@5.9.3) + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/visitor-keys': 8.72.0 debug: 4.4.3(supports-color@7.2.0) minimatch: 10.2.6 semver: 7.8.5 @@ -6553,54 +4481,96 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)": + '@typescript-eslint/utils@8.72.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - "@eslint-community/eslint-utils": 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - "@typescript-eslint/scope-manager": 8.72.0 - "@typescript-eslint/types": 8.72.0 - "@typescript-eslint/typescript-estree": 8.72.0(supports-color@7.2.0)(typescript@5.9.3) + '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + '@typescript-eslint/scope-manager': 8.72.0 + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/typescript-estree': 8.72.0(supports-color@7.2.0)(typescript@5.9.3) eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/visitor-keys@8.72.0": + '@typescript-eslint/visitor-keys@8.72.0': dependencies: - "@typescript-eslint/types": 8.72.0 + '@typescript-eslint/types': 8.72.0 eslint-visitor-keys: 5.0.1 - "@ungap/structured-clone@1.4.0": {} + '@ungap/structured-clone@1.4.0': {} - "@vitejs/plugin-react@4.7.0(supports-color@7.2.0)(vite@6.4.5(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1))": + '@vitejs/plugin-react@4.7.0(supports-color@7.2.0)(vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1))': dependencies: - "@babel/core": 7.29.7(supports-color@7.2.0) - "@babel/plugin-transform-react-jsx-self": 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - "@babel/plugin-transform-react-jsx-source": 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) - "@rolldown/pluginutils": 1.0.0-beta.27 - "@types/babel__core": 7.20.5 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.4.5(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1) + vite: 6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1) transitivePeerDependencies: - supports-color - "@volar/kit@2.4.30(typescript@5.9.3)": + '@vitest/expect@3.2.7': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.7 + '@vitest/utils': 3.2.7 + chai: 5.3.3 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.2.7(vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1))': + dependencies: + '@vitest/spy': 3.2.7 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1) + + '@vitest/pretty-format@3.2.7': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/runner@3.2.7': + dependencies: + '@vitest/utils': 3.2.7 + pathe: 2.0.3 + strip-literal: 3.1.0 + + '@vitest/snapshot@3.2.7': + dependencies: + '@vitest/pretty-format': 3.2.7 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@3.2.7': + dependencies: + tinyspy: 4.0.6 + + '@vitest/utils@3.2.7': + dependencies: + '@vitest/pretty-format': 3.2.7 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + + '@volar/kit@2.4.30(typescript@5.9.3)': dependencies: - "@volar/language-service": 2.4.30(typescript@5.9.3) - "@volar/typescript": 2.4.30(typescript@5.9.3) + '@volar/language-service': 2.4.30(typescript@5.9.3) + '@volar/typescript': 2.4.30(typescript@5.9.3) typesafe-path: 0.2.2 typescript: 5.9.3 vscode-languageserver-textdocument: 1.0.16 vscode-uri: 3.2.0 - "@volar/language-core@2.4.30": + '@volar/language-core@2.4.30': dependencies: - "@volar/source-map": 2.4.30 + '@volar/source-map': 2.4.30 - "@volar/language-server@2.4.30(typescript@5.9.3)": + '@volar/language-server@2.4.30(typescript@5.9.3)': dependencies: - "@volar/language-core": 2.4.30 - "@volar/language-service": 2.4.30(typescript@5.9.3) - "@volar/typescript": 2.4.30(typescript@5.9.3) + '@volar/language-core': 2.4.30 + '@volar/language-service': 2.4.30(typescript@5.9.3) + '@volar/typescript': 2.4.30(typescript@5.9.3) path-browserify: 1.0.1 request-light: 0.7.0 vscode-languageserver: 9.0.1 @@ -6610,27 +4580,27 @@ snapshots: optionalDependencies: typescript: 5.9.3 - "@volar/language-service@2.4.30(typescript@5.9.3)": + '@volar/language-service@2.4.30(typescript@5.9.3)': dependencies: - "@volar/language-core": 2.4.30 + '@volar/language-core': 2.4.30 vscode-languageserver-protocol: 3.18.5 vscode-languageserver-textdocument: 1.0.16 vscode-uri: 3.2.0 optionalDependencies: typescript: 5.9.3 - "@volar/source-map@2.4.30": {} + '@volar/source-map@2.4.30': {} - "@volar/typescript@2.4.30(typescript@5.9.3)": + '@volar/typescript@2.4.30(typescript@5.9.3)': dependencies: - "@volar/language-core": 2.4.30 - "@volar/language-service": 2.4.30(typescript@5.9.3) + '@volar/language-core': 2.4.30 + '@volar/language-service': 2.4.30(typescript@5.9.3) path-browserify: 1.0.1 vscode-uri: 3.2.0 optionalDependencies: typescript: 5.9.3 - "@vscode/emmet-helper@2.11.0": + '@vscode/emmet-helper@2.11.0': dependencies: emmet: 2.4.11 jsonc-parser: 2.3.1 @@ -6638,7 +4608,7 @@ snapshots: vscode-languageserver-types: 3.18.5 vscode-uri: 3.2.0 - "@vscode/l10n@0.0.18": {} + '@vscode/l10n@0.0.18': {} acorn-jsx@5.3.2(acorn@8.19.0): dependencies: @@ -6750,15 +4720,17 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - astro@5.18.2(jiti@2.7.0)(lightningcss@1.32.0)(rollup@4.65.0)(supports-color@7.2.0)(typescript@5.9.3)(yaml@2.9.1): + assertion-error@2.0.1: {} + + astro@5.18.2(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(rollup@4.65.0)(supports-color@7.2.0)(typescript@5.9.3)(yaml@2.9.1): dependencies: - "@astrojs/compiler": 2.13.1 - "@astrojs/internal-helpers": 0.7.6 - "@astrojs/markdown-remark": 6.3.11(supports-color@7.2.0) - "@astrojs/telemetry": 3.3.0(supports-color@7.2.0) - "@capsizecss/unpack": 4.0.1 - "@oslojs/encoding": 1.1.0 - "@rollup/pluginutils": 5.5.1(rollup@4.65.0) + '@astrojs/compiler': 2.13.1 + '@astrojs/internal-helpers': 0.7.6 + '@astrojs/markdown-remark': 6.3.11(supports-color@7.2.0) + '@astrojs/telemetry': 3.3.0(supports-color@7.2.0) + '@capsizecss/unpack': 4.0.1 + '@oslojs/encoding': 1.1.0 + '@rollup/pluginutils': 5.5.1(rollup@4.65.0) acorn: 8.19.0 aria-query: 5.3.2 axobject-query: 4.1.0 @@ -6807,8 +4779,8 @@ snapshots: unist-util-visit: 5.1.0 unstorage: 1.17.6 vfile: 6.0.3 - vite: 6.4.5(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1) - vitefu: 1.1.3(vite@6.4.5(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1)) + vite: 6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1) + vitefu: 1.1.3(vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -6818,21 +4790,21 @@ snapshots: optionalDependencies: sharp: 0.34.5 transitivePeerDependencies: - - "@azure/app-configuration" - - "@azure/cosmos" - - "@azure/data-tables" - - "@azure/identity" - - "@azure/keyvault-secrets" - - "@azure/storage-blob" - - "@capacitor/preferences" - - "@deno/kv" - - "@netlify/blobs" - - "@planetscale/database" - - "@types/node" - - "@upstash/redis" - - "@vercel/blob" - - "@vercel/functions" - - "@vercel/kv" + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' - aws4fetch - db0 - idb-keyval @@ -6900,6 +4872,8 @@ snapshots: node-releases: 2.0.60 update-browserslist-db: 1.3.4(browserslist@4.29.4) + cac@6.7.14: {} + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -6925,6 +4899,14 @@ snapshots: ccount@2.0.1: {} + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -6938,6 +4920,8 @@ snapshots: character-entities@2.0.2: {} + check-error@2.1.3: {} + chokidar@5.0.0: dependencies: readdirp: 5.1.1 @@ -7040,6 +5024,8 @@ snapshots: dependencies: character-entities: 2.0.2 + deep-eql@5.0.2: {} + deep-is@0.1.4: {} define-data-property@1.1.4: @@ -7110,8 +5096,8 @@ snapshots: emmet@2.4.11: dependencies: - "@emmetio/abbreviation": 2.3.3 - "@emmetio/css-abbreviation": 2.1.8 + '@emmetio/abbreviation': 2.3.3 + '@emmetio/css-abbreviation': 2.1.8 emoji-regex@10.6.0: {} @@ -7241,61 +5227,61 @@ snapshots: esbuild@0.25.12: optionalDependencies: - "@esbuild/aix-ppc64": 0.25.12 - "@esbuild/android-arm": 0.25.12 - "@esbuild/android-arm64": 0.25.12 - "@esbuild/android-x64": 0.25.12 - "@esbuild/darwin-arm64": 0.25.12 - "@esbuild/darwin-x64": 0.25.12 - "@esbuild/freebsd-arm64": 0.25.12 - "@esbuild/freebsd-x64": 0.25.12 - "@esbuild/linux-arm": 0.25.12 - "@esbuild/linux-arm64": 0.25.12 - "@esbuild/linux-ia32": 0.25.12 - "@esbuild/linux-loong64": 0.25.12 - "@esbuild/linux-mips64el": 0.25.12 - "@esbuild/linux-ppc64": 0.25.12 - "@esbuild/linux-riscv64": 0.25.12 - "@esbuild/linux-s390x": 0.25.12 - "@esbuild/linux-x64": 0.25.12 - "@esbuild/netbsd-arm64": 0.25.12 - "@esbuild/netbsd-x64": 0.25.12 - "@esbuild/openbsd-arm64": 0.25.12 - "@esbuild/openbsd-x64": 0.25.12 - "@esbuild/openharmony-arm64": 0.25.12 - "@esbuild/sunos-x64": 0.25.12 - "@esbuild/win32-arm64": 0.25.12 - "@esbuild/win32-ia32": 0.25.12 - "@esbuild/win32-x64": 0.25.12 + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 esbuild@0.27.7: optionalDependencies: - "@esbuild/aix-ppc64": 0.27.7 - "@esbuild/android-arm": 0.27.7 - "@esbuild/android-arm64": 0.27.7 - "@esbuild/android-x64": 0.27.7 - "@esbuild/darwin-arm64": 0.27.7 - "@esbuild/darwin-x64": 0.27.7 - "@esbuild/freebsd-arm64": 0.27.7 - "@esbuild/freebsd-x64": 0.27.7 - "@esbuild/linux-arm": 0.27.7 - "@esbuild/linux-arm64": 0.27.7 - "@esbuild/linux-ia32": 0.27.7 - "@esbuild/linux-loong64": 0.27.7 - "@esbuild/linux-mips64el": 0.27.7 - "@esbuild/linux-ppc64": 0.27.7 - "@esbuild/linux-riscv64": 0.27.7 - "@esbuild/linux-s390x": 0.27.7 - "@esbuild/linux-x64": 0.27.7 - "@esbuild/netbsd-arm64": 0.27.7 - "@esbuild/netbsd-x64": 0.27.7 - "@esbuild/openbsd-arm64": 0.27.7 - "@esbuild/openbsd-x64": 0.27.7 - "@esbuild/openharmony-arm64": 0.27.7 - "@esbuild/sunos-x64": 0.27.7 - "@esbuild/win32-arm64": 0.27.7 - "@esbuild/win32-ia32": 0.27.7 - "@esbuild/win32-x64": 0.27.7 + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 escalade@3.2.0: {} @@ -7342,18 +5328,18 @@ snapshots: eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0): dependencies: - "@eslint-community/eslint-utils": 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - "@eslint-community/regexpp": 4.12.2 - "@eslint/config-array": 0.21.2(supports-color@7.2.0) - "@eslint/config-helpers": 0.4.2 - "@eslint/core": 0.17.0 - "@eslint/eslintrc": 3.3.7(supports-color@7.2.0) - "@eslint/js": 9.39.5 - "@eslint/plugin-kit": 0.4.1 - "@humanfs/node": 0.16.8 - "@humanwhocodes/module-importer": 1.0.1 - "@humanwhocodes/retry": 0.4.3 - "@types/estree": 1.0.9 + '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2(supports-color@7.2.0) + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.7(supports-color@7.2.0) + '@eslint/js': 9.39.5 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 ajv: 6.15.0 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -7401,12 +5387,14 @@ snapshots: estree-walker@3.0.3: dependencies: - "@types/estree": 1.0.9 + '@types/estree': 1.0.9 esutils@2.0.3: {} eventemitter3@5.0.4: {} + expect-type@1.4.0: {} + extend@3.0.2: {} fast-deep-equal@3.1.3: {} @@ -7557,7 +5545,7 @@ snapshots: hast-util-from-html@2.0.3: dependencies: - "@types/hast": 3.0.5 + '@types/hast': 3.0.5 devlop: 1.1.0 hast-util-from-parse5: 8.0.3 parse5: 7.3.0 @@ -7566,8 +5554,8 @@ snapshots: hast-util-from-parse5@8.0.3: dependencies: - "@types/hast": 3.0.5 - "@types/unist": 3.0.3 + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 9.0.1 property-information: 7.2.0 @@ -7577,17 +5565,17 @@ snapshots: hast-util-is-element@3.0.0: dependencies: - "@types/hast": 3.0.5 + '@types/hast': 3.0.5 hast-util-parse-selector@4.0.0: dependencies: - "@types/hast": 3.0.5 + '@types/hast': 3.0.5 hast-util-raw@9.1.0: dependencies: - "@types/hast": 3.0.5 - "@types/unist": 3.0.3 - "@ungap/structured-clone": 1.4.0 + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.4.0 hast-util-from-parse5: 8.0.3 hast-util-to-parse5: 8.0.1 html-void-elements: 3.0.0 @@ -7601,8 +5589,8 @@ snapshots: hast-util-to-html@9.0.5: dependencies: - "@types/hast": 3.0.5 - "@types/unist": 3.0.3 + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 ccount: 2.0.1 comma-separated-tokens: 2.0.3 hast-util-whitespace: 3.0.0 @@ -7615,7 +5603,7 @@ snapshots: hast-util-to-parse5@8.0.1: dependencies: - "@types/hast": 3.0.5 + '@types/hast': 3.0.5 comma-separated-tokens: 2.0.3 devlop: 1.1.0 property-information: 7.2.0 @@ -7625,18 +5613,18 @@ snapshots: hast-util-to-text@4.0.2: dependencies: - "@types/hast": 3.0.5 - "@types/unist": 3.0.3 + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 hast-util-is-element: 3.0.0 unist-util-find-after: 5.0.0 hast-util-whitespace@3.0.0: dependencies: - "@types/hast": 3.0.5 + '@types/hast': 3.0.5 hastscript@9.0.1: dependencies: - "@types/hast": 3.0.5 + '@types/hast': 3.0.5 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 property-information: 7.2.0 @@ -7810,6 +5798,8 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-yaml@4.3.2: dependencies: argparse: 2.0.1 @@ -7911,6 +5901,8 @@ snapshots: dependencies: js-tokens: 4.0.0 + loupe@3.2.1: {} + lru-cache@11.5.3: {} lru-cache@5.1.1: @@ -7919,12 +5911,12 @@ snapshots: magic-string@0.30.21: dependencies: - "@jridgewell/sourcemap-codec": 1.6.0 + '@jridgewell/sourcemap-codec': 1.6.0 magicast@0.5.5: dependencies: - "@babel/parser": 7.29.9 - "@babel/types": 7.29.8 + '@babel/parser': 7.29.9 + '@babel/types': 7.29.8 source-map-js: 1.2.2 markdown-table@3.0.4: {} @@ -7933,21 +5925,21 @@ snapshots: mdast-util-definitions@6.0.0: dependencies: - "@types/mdast": 4.0.4 - "@types/unist": 3.0.3 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 unist-util-visit: 5.1.0 mdast-util-find-and-replace@3.0.3: dependencies: - "@types/mdast": 4.0.4 + '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 mdast-util-from-markdown@2.1.0(supports-color@7.2.0): dependencies: - "@types/mdast": 4.0.4 - "@types/unist": 3.0.3 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 @@ -7963,7 +5955,7 @@ snapshots: mdast-util-gfm-autolink-literal@2.0.1: dependencies: - "@types/mdast": 4.0.4 + '@types/mdast': 4.0.4 ccount: 2.0.1 devlop: 1.1.0 mdast-util-find-and-replace: 3.0.3 @@ -7971,7 +5963,7 @@ snapshots: mdast-util-gfm-footnote@2.1.0(supports-color@7.2.0): dependencies: - "@types/mdast": 4.0.4 + '@types/mdast': 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.1.0(supports-color@7.2.0) mdast-util-to-markdown: 2.2.0 @@ -7981,7 +5973,7 @@ snapshots: mdast-util-gfm-strikethrough@2.0.1(supports-color@7.2.0): dependencies: - "@types/mdast": 4.0.4 + '@types/mdast': 4.0.4 mdast-util-from-markdown: 2.1.0(supports-color@7.2.0) mdast-util-to-markdown: 2.2.0 transitivePeerDependencies: @@ -7989,7 +5981,7 @@ snapshots: mdast-util-gfm-table@2.0.0(supports-color@7.2.0): dependencies: - "@types/mdast": 4.0.4 + '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.4 mdast-util-from-markdown: 2.1.0(supports-color@7.2.0) @@ -7999,7 +5991,7 @@ snapshots: mdast-util-gfm-task-list-item@2.0.0(supports-color@7.2.0): dependencies: - "@types/mdast": 4.0.4 + '@types/mdast': 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.1.0(supports-color@7.2.0) mdast-util-to-markdown: 2.2.0 @@ -8020,14 +6012,14 @@ snapshots: mdast-util-phrasing@4.1.0: dependencies: - "@types/mdast": 4.0.4 + '@types/mdast': 4.0.4 unist-util-is: 6.0.1 mdast-util-to-hast@13.2.1: dependencies: - "@types/hast": 3.0.5 - "@types/mdast": 4.0.4 - "@ungap/structured-clone": 1.4.0 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.4.0 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 @@ -8037,8 +6029,8 @@ snapshots: mdast-util-to-markdown@2.2.0: dependencies: - "@types/mdast": 4.0.4 - "@types/unist": 3.0.3 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 longest-streak: 3.1.0 mdast-util-phrasing: 4.1.0 mdast-util-to-string: 4.0.0 @@ -8051,7 +6043,7 @@ snapshots: mdast-util-to-string@4.0.0: dependencies: - "@types/mdast": 4.0.4 + '@types/mdast': 4.0.4 mdn-data@2.0.28: {} @@ -8233,7 +6225,7 @@ snapshots: micromark@4.0.3(supports-color@7.2.0): dependencies: - "@types/debug": 4.1.13 + '@types/debug': 4.1.13 debug: 4.4.3(supports-color@7.2.0) decode-named-character-reference: 1.3.0 devlop: 1.1.0 @@ -8276,7 +6268,7 @@ snapshots: nlcst-to-string@4.0.0: dependencies: - "@types/nlcst": 2.0.3 + '@types/nlcst': 2.0.3 node-exports-info@1.6.2: dependencies: @@ -8392,8 +6384,8 @@ snapshots: parse-latin@7.0.0: dependencies: - "@types/nlcst": 2.0.3 - "@types/unist": 3.0.3 + '@types/nlcst': 2.0.3 + '@types/unist': 3.0.3 nlcst-to-string: 4.0.0 unist-util-modify-children: 4.0.0 unist-util-visit-children: 3.0.0 @@ -8411,6 +6403,10 @@ snapshots: path-parse@1.0.7: {} + pathe@2.0.3: {} + + pathval@2.0.1: {} + piccolore@0.1.3: {} picocolors@1.1.1: {} @@ -8502,32 +6498,32 @@ snapshots: rehype-parse@9.0.1: dependencies: - "@types/hast": 3.0.5 + '@types/hast': 3.0.5 hast-util-from-html: 2.0.3 unified: 11.0.5 rehype-raw@7.0.0: dependencies: - "@types/hast": 3.0.5 + '@types/hast': 3.0.5 hast-util-raw: 9.1.0 vfile: 6.0.3 rehype-stringify@10.0.1: dependencies: - "@types/hast": 3.0.5 + '@types/hast': 3.0.5 hast-util-to-html: 9.0.5 unified: 11.0.5 rehype@13.0.2: dependencies: - "@types/hast": 3.0.5 + '@types/hast': 3.0.5 rehype-parse: 9.0.1 rehype-stringify: 10.0.1 unified: 11.0.5 remark-gfm@4.0.1(supports-color@7.2.0): dependencies: - "@types/mdast": 4.0.4 + '@types/mdast': 4.0.4 mdast-util-gfm: 3.1.0(supports-color@7.2.0) micromark-extension-gfm: 3.0.0 remark-parse: 11.0.0(supports-color@7.2.0) @@ -8538,7 +6534,7 @@ snapshots: remark-parse@11.0.0(supports-color@7.2.0): dependencies: - "@types/mdast": 4.0.4 + '@types/mdast': 4.0.4 mdast-util-from-markdown: 2.1.0(supports-color@7.2.0) micromark-util-types: 2.0.3 unified: 11.0.5 @@ -8547,8 +6543,8 @@ snapshots: remark-rehype@11.1.2: dependencies: - "@types/hast": 3.0.5 - "@types/mdast": 4.0.4 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 mdast-util-to-hast: 13.2.1 unified: 11.0.5 vfile: 6.0.3 @@ -8562,7 +6558,7 @@ snapshots: remark-stringify@11.0.0: dependencies: - "@types/mdast": 4.0.4 + '@types/mdast': 4.0.4 mdast-util-to-markdown: 2.2.0 unified: 11.0.5 @@ -8585,59 +6581,59 @@ snapshots: retext-latin@4.0.0: dependencies: - "@types/nlcst": 2.0.3 + '@types/nlcst': 2.0.3 parse-latin: 7.0.0 unified: 11.0.5 retext-smartypants@6.2.0: dependencies: - "@types/nlcst": 2.0.3 + '@types/nlcst': 2.0.3 nlcst-to-string: 4.0.0 unist-util-visit: 5.1.0 retext-stringify@4.0.0: dependencies: - "@types/nlcst": 2.0.3 + '@types/nlcst': 2.0.3 nlcst-to-string: 4.0.0 unified: 11.0.5 retext@9.0.0: dependencies: - "@types/nlcst": 2.0.3 + '@types/nlcst': 2.0.3 retext-latin: 4.0.0 retext-stringify: 4.0.0 unified: 11.0.5 rollup@4.65.0: dependencies: - "@types/estree": 1.0.9 + '@types/estree': 1.0.9 optionalDependencies: - "@napi-rs/lzma-linux-x64-gnu": 1.5.1 - "@rollup/rollup-android-arm-eabi": 4.65.0 - "@rollup/rollup-android-arm64": 4.65.0 - "@rollup/rollup-darwin-arm64": 4.65.0 - "@rollup/rollup-darwin-x64": 4.65.0 - "@rollup/rollup-freebsd-arm64": 4.65.0 - "@rollup/rollup-freebsd-x64": 4.65.0 - "@rollup/rollup-linux-arm-gnueabihf": 4.65.0 - "@rollup/rollup-linux-arm-musleabihf": 4.65.0 - "@rollup/rollup-linux-arm64-gnu": 4.65.0 - "@rollup/rollup-linux-arm64-musl": 4.65.0 - "@rollup/rollup-linux-loong64-gnu": 4.65.0 - "@rollup/rollup-linux-loong64-musl": 4.65.0 - "@rollup/rollup-linux-ppc64-gnu": 4.65.0 - "@rollup/rollup-linux-ppc64-musl": 4.65.0 - "@rollup/rollup-linux-riscv64-gnu": 4.65.0 - "@rollup/rollup-linux-riscv64-musl": 4.65.0 - "@rollup/rollup-linux-s390x-gnu": 4.65.0 - "@rollup/rollup-linux-x64-gnu": 4.65.0 - "@rollup/rollup-linux-x64-musl": 4.65.0 - "@rollup/rollup-openbsd-x64": 4.65.0 - "@rollup/rollup-openharmony-arm64": 4.65.0 - "@rollup/rollup-win32-arm64-msvc": 4.65.0 - "@rollup/rollup-win32-ia32-msvc": 4.65.0 - "@rollup/rollup-win32-x64-gnu": 4.65.0 - "@rollup/rollup-win32-x64-msvc": 4.65.0 + '@napi-rs/lzma-linux-x64-gnu': 1.5.1 + '@rollup/rollup-android-arm-eabi': 4.65.0 + '@rollup/rollup-android-arm64': 4.65.0 + '@rollup/rollup-darwin-arm64': 4.65.0 + '@rollup/rollup-darwin-x64': 4.65.0 + '@rollup/rollup-freebsd-arm64': 4.65.0 + '@rollup/rollup-freebsd-x64': 4.65.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.65.0 + '@rollup/rollup-linux-arm-musleabihf': 4.65.0 + '@rollup/rollup-linux-arm64-gnu': 4.65.0 + '@rollup/rollup-linux-arm64-musl': 4.65.0 + '@rollup/rollup-linux-loong64-gnu': 4.65.0 + '@rollup/rollup-linux-loong64-musl': 4.65.0 + '@rollup/rollup-linux-ppc64-gnu': 4.65.0 + '@rollup/rollup-linux-ppc64-musl': 4.65.0 + '@rollup/rollup-linux-riscv64-gnu': 4.65.0 + '@rollup/rollup-linux-riscv64-musl': 4.65.0 + '@rollup/rollup-linux-s390x-gnu': 4.65.0 + '@rollup/rollup-linux-x64-gnu': 4.65.0 + '@rollup/rollup-linux-x64-musl': 4.65.0 + '@rollup/rollup-openbsd-x64': 4.65.0 + '@rollup/rollup-openharmony-arm64': 4.65.0 + '@rollup/rollup-win32-arm64-msvc': 4.65.0 + '@rollup/rollup-win32-ia32-msvc': 4.65.0 + '@rollup/rollup-win32-x64-gnu': 4.65.0 + '@rollup/rollup-win32-x64-msvc': 4.65.0 fsevents: 2.3.3 safe-array-concat@1.1.4: @@ -8693,34 +6689,34 @@ snapshots: sharp@0.34.5: dependencies: - "@img/colour": 1.1.0 + '@img/colour': 1.1.0 detect-libc: 2.1.2 semver: 7.8.5 optionalDependencies: - "@img/sharp-darwin-arm64": 0.34.5 - "@img/sharp-darwin-x64": 0.34.5 - "@img/sharp-libvips-darwin-arm64": 1.2.4 - "@img/sharp-libvips-darwin-x64": 1.2.4 - "@img/sharp-libvips-linux-arm": 1.2.4 - "@img/sharp-libvips-linux-arm64": 1.2.4 - "@img/sharp-libvips-linux-ppc64": 1.2.4 - "@img/sharp-libvips-linux-riscv64": 1.2.4 - "@img/sharp-libvips-linux-s390x": 1.2.4 - "@img/sharp-libvips-linux-x64": 1.2.4 - "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 - "@img/sharp-libvips-linuxmusl-x64": 1.2.4 - "@img/sharp-linux-arm": 0.34.5 - "@img/sharp-linux-arm64": 0.34.5 - "@img/sharp-linux-ppc64": 0.34.5 - "@img/sharp-linux-riscv64": 0.34.5 - "@img/sharp-linux-s390x": 0.34.5 - "@img/sharp-linux-x64": 0.34.5 - "@img/sharp-linuxmusl-arm64": 0.34.5 - "@img/sharp-linuxmusl-x64": 0.34.5 - "@img/sharp-wasm32": 0.34.5 - "@img/sharp-win32-arm64": 0.34.5 - "@img/sharp-win32-ia32": 0.34.5 - "@img/sharp-win32-x64": 0.34.5 + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 optional: true shebang-command@2.0.0: @@ -8731,14 +6727,14 @@ snapshots: shiki@3.23.0: dependencies: - "@shikijs/core": 3.23.0 - "@shikijs/engine-javascript": 3.23.0 - "@shikijs/engine-oniguruma": 3.23.0 - "@shikijs/langs": 3.23.0 - "@shikijs/themes": 3.23.0 - "@shikijs/types": 3.23.0 - "@shikijs/vscode-textmate": 10.1.0 - "@types/hast": 3.0.5 + '@shikijs/core': 3.23.0 + '@shikijs/engine-javascript': 3.23.0 + '@shikijs/engine-oniguruma': 3.23.0 + '@shikijs/langs': 3.23.0 + '@shikijs/themes': 3.23.0 + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.1.0 + '@types/hast': 3.0.5 side-channel-list@1.0.1: dependencies: @@ -8768,6 +6764,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + sisteransi@1.0.5: {} smol-toml@1.9.1: {} @@ -8776,6 +6774,10 @@ snapshots: space-separated-tokens@2.0.2: {} + stackback@0.0.2: {} + + std-env@3.10.0: {} + stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 @@ -8858,6 +6860,10 @@ snapshots: strip-json-comments@3.1.1: {} + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -8882,6 +6888,10 @@ snapshots: tiny-inflate@1.0.3: {} + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + tinyexec@1.3.1: {} tinyglobby@0.2.17: @@ -8889,6 +6899,12 @@ snapshots: fdir: 6.5.0(picomatch@4.0.7) picomatch: 4.0.7 + tinypool@1.1.1: {} + + tinyrainbow@2.0.0: {} + + tinyspy@4.0.6: {} + trim-lines@3.0.1: {} trough@2.2.0: {} @@ -8962,11 +6978,13 @@ snapshots: uncrypto@0.1.3: {} + undici-types@6.21.0: {} + undici@8.12.3: {} unified@11.0.5: dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 bail: 2.0.2 devlop: 1.1.0 extend: 3.0.2 @@ -8982,43 +7000,43 @@ snapshots: unist-util-find-after@5.0.0: dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 unist-util-is: 6.0.1 unist-util-is@6.0.1: dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 unist-util-modify-children@4.0.0: dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 array-iterate: 2.0.1 unist-util-position@5.0.0: dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 unist-util-remove-position@5.0.0: dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 unist-util-visit: 5.1.0 unist-util-stringify-position@4.0.0: dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 unist-util-visit-children@3.0.0: dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 unist-util-visit-parents@6.0.2: dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 unist-util-is: 6.0.1 unist-util-visit@5.1.0: dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 @@ -9045,20 +7063,41 @@ snapshots: vfile-location@5.0.3: dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 vfile: 6.0.3 vfile-message@4.0.3: dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 vfile@6.0.3: dependencies: - "@types/unist": 3.0.3 + '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@6.4.5(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1): + vite-node@3.2.4(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(supports-color@7.2.0)(yaml@2.9.1): + dependencies: + cac: 6.7.14 + debug: 4.4.3(supports-color@7.2.0) + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.7) @@ -9067,14 +7106,57 @@ snapshots: rollup: 4.65.0 tinyglobby: 0.2.17 optionalDependencies: + '@types/node': 22.20.5 fsevents: 2.3.3 jiti: 2.7.0 lightningcss: 1.32.0 yaml: 2.9.1 - vitefu@1.1.3(vite@6.4.5(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1)): + vitefu@1.1.3(vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1)): + optionalDependencies: + vite: 6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1) + + vitest@3.2.7(@types/debug@4.1.13)(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(supports-color@7.2.0)(yaml@2.9.1): + dependencies: + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.7 + '@vitest/mocker': 3.2.7(vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1)) + '@vitest/pretty-format': 3.2.7 + '@vitest/runner': 3.2.7 + '@vitest/snapshot': 3.2.7 + '@vitest/spy': 3.2.7 + '@vitest/utils': 3.2.7 + chai: 5.3.3 + debug: 4.4.3(supports-color@7.2.0) + expect-type: 1.4.0 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.7 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.17 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 6.4.5(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1) + vite-node: 3.2.4(@types/node@22.20.5)(jiti@2.7.0)(lightningcss@1.32.0)(supports-color@7.2.0)(yaml@2.9.1) + why-is-node-running: 2.3.0 optionalDependencies: - vite: 6.4.5(jiti@2.7.0)(lightningcss@1.32.0)(yaml@2.9.1) + '@types/debug': 4.1.13 + '@types/node': 22.20.5 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml volar-service-css@0.0.71(@volar/language-service@2.4.30(typescript@5.9.3)): dependencies: @@ -9082,16 +7164,16 @@ snapshots: vscode-languageserver-textdocument: 1.0.16 vscode-uri: 3.2.0 optionalDependencies: - "@volar/language-service": 2.4.30(typescript@5.9.3) + '@volar/language-service': 2.4.30(typescript@5.9.3) volar-service-emmet@0.0.71(@volar/language-service@2.4.30(typescript@5.9.3)): dependencies: - "@emmetio/css-parser": 0.4.1 - "@emmetio/html-matcher": 1.3.0 - "@vscode/emmet-helper": 2.11.0 + '@emmetio/css-parser': 0.4.1 + '@emmetio/html-matcher': 1.3.0 + '@vscode/emmet-helper': 2.11.0 vscode-uri: 3.2.0 optionalDependencies: - "@volar/language-service": 2.4.30(typescript@5.9.3) + '@volar/language-service': 2.4.30(typescript@5.9.3) volar-service-html@0.0.71(@volar/language-service@2.4.30(typescript@5.9.3)): dependencies: @@ -9099,20 +7181,20 @@ snapshots: vscode-languageserver-textdocument: 1.0.16 vscode-uri: 3.2.0 optionalDependencies: - "@volar/language-service": 2.4.30(typescript@5.9.3) + '@volar/language-service': 2.4.30(typescript@5.9.3) volar-service-prettier@0.0.71(@volar/language-service@2.4.30(typescript@5.9.3))(prettier@3.9.10): dependencies: vscode-uri: 3.2.0 optionalDependencies: - "@volar/language-service": 2.4.30(typescript@5.9.3) + '@volar/language-service': 2.4.30(typescript@5.9.3) prettier: 3.9.10 volar-service-typescript-twoslash-queries@0.0.71(@volar/language-service@2.4.30(typescript@5.9.3))(typescript@5.9.3): dependencies: vscode-uri: 3.2.0 optionalDependencies: - "@volar/language-service": 2.4.30(typescript@5.9.3) + '@volar/language-service': 2.4.30(typescript@5.9.3) typescript: 5.9.3 volar-service-typescript@0.0.71(@volar/language-service@2.4.30(typescript@5.9.3))(typescript@5.9.3): @@ -9124,7 +7206,7 @@ snapshots: vscode-nls: 5.2.0 vscode-uri: 3.2.0 optionalDependencies: - "@volar/language-service": 2.4.30(typescript@5.9.3) + '@volar/language-service': 2.4.30(typescript@5.9.3) typescript: 5.9.3 volar-service-yaml@0.0.71(@volar/language-service@2.4.30(typescript@5.9.3)): @@ -9132,18 +7214,18 @@ snapshots: vscode-uri: 3.2.0 yaml-language-server: 1.23.0 optionalDependencies: - "@volar/language-service": 2.4.30(typescript@5.9.3) + '@volar/language-service': 2.4.30(typescript@5.9.3) vscode-css-languageservice@6.3.10: dependencies: - "@vscode/l10n": 0.0.18 + '@vscode/l10n': 0.0.18 vscode-languageserver-textdocument: 1.0.16 vscode-languageserver-types: 3.17.5 vscode-uri: 3.2.0 vscode-html-languageservice@5.6.2: dependencies: - "@vscode/l10n": 0.0.18 + '@vscode/l10n': 0.0.18 vscode-languageserver-textdocument: 1.0.16 vscode-languageserver-types: 3.18.5 vscode-uri: 3.2.0 @@ -9233,6 +7315,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + widest-line@5.0.0: dependencies: string-width: 7.2.0 @@ -9253,7 +7340,7 @@ snapshots: yaml-language-server@1.23.0: dependencies: - "@vscode/l10n": 0.0.18 + '@vscode/l10n': 0.0.18 ajv: 8.20.0 ajv-draft-04: 1.0.0(ajv@8.20.0) ajv-i18n: 4.2.0(ajv@8.20.0) diff --git a/web/src/components/Visualizer.tsx b/web/src/components/Visualizer.tsx new file mode 100644 index 0000000..35dcea9 --- /dev/null +++ b/web/src/components/Visualizer.tsx @@ -0,0 +1,389 @@ +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { loadEngine } from "@/lib/engine"; +import { PRESETS } from "@/lib/presets"; +import { quantize } from "@/lib/quantize"; +import { attention } from "@/lib/reference"; +import { flashTileOrder, naiveTileOrder, type TileRef } from "@/lib/schedule"; +import { + FLASH_STATES, + NAIVE_STATES, + type EngineInstance, + type EngineModule, + type Snapshot, + type TileState, +} from "@/lib/state-schema"; + +const MAX_STEPS = 400_000; + +interface Settings { + preset: number; + mode: 0 | 1; + causal: boolean; + overlap: boolean; + qrows: number; + latency: number; +} + +interface Result { + out: number[][]; + maxErr: number; + probs: number[][] | null; +} + +const panel = { background: "var(--panel)" } as const; +const muted = { color: "var(--muted)" } as const; + +function matrix(flat: number[], rows: number, cols: number): number[][] { + const m: number[][] = []; + for (let r = 0; r < rows; r++) m.push(flat.slice(r * cols, (r + 1) * cols)); + return m; +} + +export default function Visualizer() { + const [mod, setMod] = useState(null); + const [error, setError] = useState(null); + const [settings, setSettings] = useState({ + preset: 0, + mode: 0, + causal: PRESETS[0]?.causal ?? false, + overlap: false, + qrows: 4, + latency: 10, + }); + const [stepCount, setStepCount] = useState(0); + const [snap, setSnap] = useState(null); + const [tile, setTile] = useState(null); + const [finished, setFinished] = useState(false); + const [result, setResult] = useState(null); + const simRef = useRef(null); + + const preset = PRESETS[settings.preset] ?? PRESETS[0]; + const n = preset?.q.length ?? 4; + const labels: string[] = preset?.labels ?? []; + const qrowOptions = [4, 8, 16, 32].filter((q) => q <= n); + + useEffect(() => { + loadEngine().then(setMod).catch((e: unknown) => setError(e instanceof Error ? e.message : String(e))); + return () => simRef.current?.delete(); + }, []); + + const order: TileRef[] = useMemo(() => { + if (!preset) return []; + return settings.mode === 0 + ? flashTileOrder(n, settings.qrows, settings.causal) + : naiveTileOrder(n, settings.causal); + }, [preset, n, settings.mode, settings.qrows, settings.causal]); + + /** Advance one clock. The DONE edge is followed by one finalizing edge (counters are final after it). */ + const advance = useCallback((sim: EngineInstance, state: { count: number; finished: boolean }) => { + if (state.finished) return null; + let s = sim.step(); + state.count++; + if (s.done) { + s = sim.step(); + state.count++; + state.finished = true; + } + return s; + }, []); + + /** Publish the state of the engine to the view. Builds the result once the run has finished. */ + const commit = useCallback( + (sim: EngineInstance, count: number, done: boolean, last: Snapshot) => { + setStepCount(count); + setSnap(last); + setFinished(done); + setTile(sim.getTile()); + if (!done || !preset) { + setResult(null); + return; + } + const qz = quantize(preset.q, preset.k, preset.v); + const out = matrix(sim.readOutput(), n, 4).map((row) => row.map((v) => (v / 256) * qz.sv)); + const ref = attention(preset.q, preset.k, preset.v, settings.causal).out; + let maxErr = 0; + out.forEach((row, i) => row.forEach((v, c) => (maxErr = Math.max(maxErr, Math.abs(v - (ref[i]?.[c] ?? 0)))))); + const probs = + settings.mode === 1 ? matrix(sim.readProbabilities(), n, n).map((row) => row.map((v) => v / 256)) : null; + setResult({ out, maxErr, probs }); + }, + [preset, n, settings], + ); + + /** Rebuild the run from reset and advance `target` clocks. Used by Start and by step-back. */ + const seek = useCallback( + (target: number) => { + if (!mod || !preset) return; + simRef.current?.delete(); + const qz = quantize(preset.q, preset.k, preset.v); + const sim = new mod.TinyAttnSim(); + sim.configure(n, settings.qrows, settings.causal, settings.mode, settings.overlap, settings.latency, qz.cfgScale); + sim.loadQKV(qz.q, qz.k, qz.v); + sim.start(); + simRef.current = sim; + + const state = { count: 0, finished: false }; + let last: Snapshot = sim.snapshot(); + while (state.count < target && !state.finished) { + last = advance(sim, state) ?? last; + } + commit(sim, state.count, state.finished, last); + }, + [mod, preset, n, settings, advance, commit], + ); + + const stepOnce = () => { + const sim = simRef.current; + if (!sim) return seek(1); + const state = { count: stepCount, finished }; + const s = advance(sim, state); + if (!s) return; + commit(sim, state.count, state.finished, s); + }; + + const runToEnd = () => { + const sim = simRef.current; + if (!sim || finished) return; + const state = { count: stepCount, finished }; + let last: Snapshot | null = null; + while (!state.finished && state.count < MAX_STEPS) last = advance(sim, state) ?? last; + commit(sim, state.count, state.finished, last ?? sim.snapshot()); + }; + + const reset = () => { + simRef.current?.delete(); + simRef.current = null; + setStepCount(0); + setSnap(null); + setTile(null); + setFinished(false); + setResult(null); + }; + + const setPreset = (i: number) => { + reset(); + setSettings((s) => ({ ...s, preset: i, causal: PRESETS[i]?.causal ?? false, qrows: Math.min(s.qrows, PRESETS[i]?.q.length ?? 4) })); + }; + + // ---- derived view + const nb = n / 4; + const tilesStarted = snap?.tiles ?? 0; + const orderIndex = new Map(); + order.forEach((t, i) => orderIndex.set(`${t.qi},${t.kj}`, i)); + const stateNames = settings.mode === 0 ? FLASH_STATES : NAIVE_STATES; + const stateName = snap ? (stateNames[snap.ctrlState] ?? `#${snap.ctrlState}`) : "not started"; + const cellClass = (qi: number, kj: number) => { + if (settings.causal && kj > qi) return { bg: "transparent", label: "masked" }; + const idx = orderIndex.get(`${qi},${kj}`); + if (idx === undefined) return { bg: "transparent", label: "" }; + if (idx < tilesStarted - 1) return { bg: "var(--ok)", label: "done" }; + if (idx === tilesStarted - 1 && snap?.busy) return { bg: "var(--accent)", label: "in flight" }; + if (idx === tilesStarted - 1) return { bg: "var(--ok)", label: "done" }; + return { bg: "var(--panel)", label: "" }; + }; + + const fmt = (v: number, digits = 0) => (Number.isFinite(v) ? v.toFixed(digits) : "-"); + + if (error) return

{error}

; + if (!mod) return

Loading engine…

; + + return ( +
+ {/* controls */} +
+ + + + {settings.mode === 0 && ( + <> + + + + )} + +
+ +
+ + + + + +
+ + {/* status */} +
+
+
Clock
{stepCount}
+
+
+
Controller
{stateName}
+
+
+
HBM read / write
+
{snap?.hbmRdBytes ?? 0} B / {snap?.hbmWrBytes ?? 0} B
+
+
+
Tiles / K-V loads
+
{snap?.tiles ?? 0} / {snap?.kvLoads ?? 0}
+
+
+ +
+ {/* schedule */} +
+

+ {settings.mode === 0 ? "Tile schedule (row groups × K/V tiles)" : "Tile schedule, pass 1 (Z tiles)"} +

+
+
+ {Array.from({ length: nb }, (_, kj) => ( +
kv{kj}
+ ))} + {Array.from({ length: nb }, (_, qi) => ( +
+
q{qi}
+ {Array.from({ length: nb }, (_, kj) => { + const c = cellClass(qi, kj); + return ( +
+ {c.label === "in flight" ? "●" : ""} +
+ ); + })} +
+ ))} +
+

+ Green: finished. Blue: in flight. Faded: masked by the causal mask. + {settings.mode === 1 ? " NAIVE passes 2 to 4 reuse these tiles." : ""} +

+
+ + {/* current tile */} +
+

Current tile values

+ {tile && tilesStarted > 0 ? ( +
+ {settings.mode === 0 ? ( + <> +

Row group {tile.curGrp} (rows {tile.curGrp * 4}–{tile.curGrp * 4 + 3})

+ + + +
+ fmt(v)} /> + fmt(v)} /> + fmt(v)} /> +
+ + ) : ( +

+ NAIVE tiles go through HBM, not the tile core, so the per-element S, Z and P are not shown here. + The row max m and sum l are shown below; the final probabilities P are in the matrix after the run. +

+ )} + {settings.mode === 1 && ( +
+ fmt(v)} /> + fmt(v)} /> +
+ )} + +
+ ) : ( +

Press Start, then Step.

+ )} +
+
+ + {/* result */} + {result && ( +
+

Output

+

+ Max |engine − float attention| = {result.maxErr.toFixed(4)} (INT8 quantization of Q, K and V dominates). +

+ + {result.probs && ( +
+

Attention probabilities P (from HBM, NAIVE)

+
+ {result.probs.flatMap((row, i) => + row.map((p, j) => ( +
+ )), + )} +
+ {labels.length === n && ( +
+ {labels.map((l, i) => {i}:{l})} +
+ )} +
+ )} +
+ )} +
+ ); +} + +function Grid({ title, values, cols }: { title: string; values: number[]; cols: number }) { + const rows: number[][] = []; + for (let r = 0; r < values.length / cols; r++) rows.push(values.slice(r * cols, (r + 1) * cols)); + return ( +
+
{title}
+
+ {rows.flatMap((row, i) => row.map((v, j) => {v}))} +
+
+ ); +} + +function Vec({ title, values, fmt }: { title: string; values: number[]; fmt: (v: number) => string }) { + return ( +
+
{title}
+
{values.map((v) => fmt(v)).join(" ")}
+
+ ); +} diff --git a/web/src/lib/engine.ts b/web/src/lib/engine.ts new file mode 100644 index 0000000..735e882 --- /dev/null +++ b/web/src/lib/engine.ts @@ -0,0 +1,21 @@ +// Loads the engine module. Client only: called from a client:only island, never during SSR. +import type { EngineModule } from "@/lib/state-schema"; + +let modulePromise: Promise | null = null; + +export function loadEngine(): Promise { + if (typeof window === "undefined") { + return Promise.reject(new Error("loadEngine must only run in the browser")); + } + if (!modulePromise) { + // Built at runtime so Vite's import analysis never sees a literal public/ path (see astro.config.mjs). + const url = (import.meta.env.BASE_URL as string) + "tiny_attn.mjs"; + modulePromise = (import(/* @vite-ignore */ url) as Promise<{ default: () => Promise }>) + .then(({ default: factory }) => factory()) + .catch((e: unknown) => { + modulePromise = null; + throw new Error(`engine not found: run bash wasm/build.sh (${e instanceof Error ? e.message : String(e)})`); + }); + } + return modulePromise; +} diff --git a/web/src/lib/presets.ts b/web/src/lib/presets.ts new file mode 100644 index 0000000..af90bc4 --- /dev/null +++ b/web/src/lib/presets.ts @@ -0,0 +1,1832 @@ +// GENERATED by sim/golden/export_web_data.py from sim/golden/presets.py. Do not edit. +export interface Preset { + name: string; + labels: string[]; + causal: boolean; + q: number[][]; + k: number[][]; + v: number[][]; +} + +export const PRESETS: Preset[] = [ + { + "name": "toy_sentence", + "labels": [ + "", + "The", + "cat", + "chased", + "the", + "mouse", + "because", + "it", + "was", + "very", + "hungry", + "." + ], + "causal": true, + "q": [ + [ + 0.0, + 1.24322, + -1.566654, + 0.0 + ], + [ + 0.0, + 2.0, + 0.0, + 0.0 + ], + [ + 0.0, + 1.24322, + 1.566654, + 0.0 + ], + [ + 0.0, + -0.454404, + 1.947695, + 0.0 + ], + [ + 0.0, + -1.808144, + 0.85476, + 0.0 + ], + [ + 0.0, + -1.793517, + -0.885041, + 0.0 + ], + [ + 0.0, + -0.421592, + -1.95506, + 0.0 + ], + [ + 3.0, + 0.0, + 0.0, + 3.0 + ], + [ + 0.0, + 1.999717, + 0.033628, + 0.0 + ], + [ + 0.0, + 1.216703, + 1.587336, + 0.0 + ], + [ + 0.0, + -0.487088, + 1.93978, + 0.0 + ], + [ + 0.0, + -1.822261, + 0.824237, + 0.0 + ] + ], + "k": [ + [ + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.62161, + 0.783327, + 0.0 + ], + [ + 1.0, + -0.227202, + 0.973848, + 1.0 + ], + [ + 0.0, + -0.904072, + 0.42738, + 0.0 + ], + [ + 0.0, + -0.896758, + -0.44252, + 0.0 + ], + [ + 1.0, + -0.210796, + -0.97753, + 0.0 + ], + [ + 0.0, + 0.634693, + -0.772764, + 0.0 + ], + [ + 0.0, + 0.999859, + 0.016814, + 0.0 + ], + [ + 0.0, + 0.608351, + 0.793668, + 0.0 + ], + [ + 0.0, + -0.243544, + 0.96989, + 0.0 + ], + [ + 0.0, + -0.91113, + 0.412118, + 0.0 + ], + [ + 0.0, + -0.889191, + -0.457536, + 0.0 + ] + ], + "v": [ + [ + 0.00123, + 0.298746, + -0.274138, + -0.890592 + ], + [ + -0.454671, + -0.991647, + 0.060144, + 1.340215 + ], + [ + -0.492207, + -0.620475, + 0.489842, + 0.356887 + ], + [ + 0.105414, + -0.930468, + -0.029252, + 0.695303 + ], + [ + -1.344215, + -0.457616, + -1.901223, + -1.289538 + ], + [ + -1.841735, + -0.235091, + -1.267446, + 0.271264 + ], + [ + 0.156751, + -0.186931, + -2.51676, + -0.538693 + ], + [ + -0.048501, + 0.113309, + -1.530136, + -0.477753 + ], + [ + -0.978519, + -0.808837, + 1.060899, + -0.807535 + ], + [ + -0.032522, + 0.88439, + -0.5836, + -0.111702 + ], + [ + 0.110464, + 0.063782, + -1.225056, + 0.07614 + ], + [ + 1.358823, + -1.547145, + 0.859383, + 0.119354 + ] + ] + }, + { + "name": "previous_token", + "labels": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ], + "causal": true, + "q": [ + [ + 2.09012, + -2.152068, + 0.0, + 0.0 + ], + [ + 3.0, + 0.0, + 0.0, + 0.0 + ], + [ + 2.09012, + 2.152068, + 0.0, + 0.0 + ], + [ + -0.087599, + 2.998721, + 0.0, + 0.0 + ], + [ + -2.212181, + 2.02639, + 0.0, + 0.0 + ], + [ + -2.994884, + -0.175122, + 0.0, + 0.0 + ], + [ + -1.960931, + -2.270407, + 0.0, + 0.0 + ], + [ + 0.262497, + -2.988494, + 0.0, + 0.0 + ], + [ + 2.326698, + -1.8938, + 0.0, + 0.0 + ], + [ + 2.979555, + 0.349648, + 0.0, + 0.0 + ], + [ + 1.825054, + 2.381004, + 0.0, + 0.0 + ], + [ + -0.4365, + 2.968075, + 0.0, + 0.0 + ], + [ + -2.433279, + 1.754752, + 0.0, + 0.0 + ], + [ + -2.954064, + -0.52298, + 0.0, + 0.0 + ], + [ + -1.682953, + -2.483479, + 0.0, + 0.0 + ], + [ + 0.609015, + -2.937533, + 0.0, + 0.0 + ] + ], + "k": [ + [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.696707, + 0.717356, + 0.0, + 0.0 + ], + [ + -0.0292, + 0.999574, + 0.0, + 0.0 + ], + [ + -0.737394, + 0.675463, + 0.0, + 0.0 + ], + [ + -0.998295, + -0.058374, + 0.0, + 0.0 + ], + [ + -0.653644, + -0.756802, + 0.0, + 0.0 + ], + [ + 0.087499, + -0.996165, + 0.0, + 0.0 + ], + [ + 0.775566, + -0.631267, + 0.0, + 0.0 + ], + [ + 0.993185, + 0.116549, + 0.0, + 0.0 + ], + [ + 0.608351, + 0.793668, + 0.0, + 0.0 + ], + [ + -0.1455, + 0.989358, + 0.0, + 0.0 + ], + [ + -0.811093, + 0.584917, + 0.0, + 0.0 + ], + [ + -0.984688, + -0.174327, + 0.0, + 0.0 + ], + [ + -0.560984, + -0.827826, + 0.0, + 0.0 + ], + [ + 0.203005, + -0.979178, + 0.0, + 0.0 + ], + [ + 0.843854, + -0.536573, + 0.0, + 0.0 + ] + ], + "v": [ + [ + 0.345584, + 0.821618, + 0.330437, + -1.303157 + ], + [ + 0.905356, + 0.446375, + -0.536953, + 0.581118 + ], + [ + 0.364572, + 0.294132, + 0.028422, + 0.546713 + ], + [ + -0.736454, + -0.16291, + -0.482119, + 0.598846 + ], + [ + 0.039722, + -0.292457, + -0.781908, + -0.257192 + ], + [ + 0.008142, + -0.275603, + 1.294064, + 1.006724 + ], + [ + -2.711162, + -1.889013, + -0.174772, + -0.42219 + ], + [ + 0.213643, + 0.217322, + 2.117839, + -1.112021 + ], + [ + -0.377605, + 2.042772, + 0.646703, + 0.663063 + ], + [ + -0.514006, + -1.648075, + 0.167465, + 0.109014 + ], + [ + -1.227352, + -0.683227, + -0.072044, + -0.944752 + ], + [ + -0.09827, + 0.095483, + 0.035586, + -0.506292 + ], + [ + 0.593748, + 0.891167, + 0.320848, + -0.81823 + ], + [ + 0.731652, + -0.50144, + 0.879161, + -1.071787 + ], + [ + 0.914467, + -0.020063, + -1.248749, + -0.313899 + ], + [ + 0.054102, + 0.272791, + -0.982188, + -1.107373 + ] + ] + }, + { + "name": "attention_sink", + "labels": [ + "sink", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ], + "causal": true, + "q": [ + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ], + [ + 4.0, + 0.0, + 0.0, + 0.0 + ] + ], + "k": [ + [ + 2.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "v": [ + [ + 0.189053, + -0.522748, + -0.413064, + -2.441467 + ], + [ + 1.799707, + 1.144166, + -0.325423, + 0.773807 + ], + [ + 0.281211, + -0.553823, + 0.977567, + -0.310557 + ], + [ + -0.328824, + -0.792147, + 0.454958, + -0.099198 + ], + [ + 0.545289, + -0.607186, + 0.126828, + -0.892274 + ], + [ + 0.841465, + 0.188035, + 0.330571, + 0.410504 + ], + [ + -1.010758, + 0.783181, + 2.056703, + -1.638443 + ], + [ + -1.729411, + -1.504831, + 0.841459, + 0.128716 + ], + [ + 1.078342, + 0.722431, + 0.210572, + 0.284038 + ], + [ + -0.16976, + 0.86846, + -1.129716, + -0.421859 + ], + [ + 0.242939, + 1.801421, + -0.764464, + -1.07906 + ], + [ + -0.563287, + 0.969272, + -0.235006, + 1.324347 + ], + [ + -1.87253, + 1.128523, + 1.034866, + -1.418666 + ], + [ + 0.153582, + 1.215758, + 0.087919, + 0.999701 + ], + [ + 2.374887, + 0.273932, + -0.280382, + -0.771052 + ], + [ + 0.648065, + -0.19673, + -0.178746, + -0.10526 + ] + ] + }, + { + "name": "uniform", + "labels": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ], + "causal": false, + "q": [ + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "k": [ + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 0.0 + ] + ], + "v": [ + [ + 2.040919, + -2.555665, + 0.418099, + -0.56777 + ], + [ + -0.452649, + -0.215597, + -2.019986, + -0.231932 + ], + [ + -0.865213, + 3.323, + 0.225787, + -0.352631 + ], + [ + -0.281287, + -0.668046, + -1.055151, + -0.390801 + ], + [ + 0.481945, + -0.238554, + 0.957759, + -0.199802 + ], + [ + 0.02426, + 1.545821, + 0.545106, + -0.505229 + ], + [ + -0.182839, + 0.540525, + 1.935088, + -0.26962 + ], + [ + -0.243559, + 1.002314, + -0.88646, + -0.29172 + ], + [ + 0.882539, + 0.58035, + 0.091517, + 0.670104 + ], + [ + -2.828162, + 1.021307, + -0.959645, + -1.66862 + ], + [ + 0.276446, + 0.700545, + -0.444767, + -1.076406 + ], + [ + 0.026125, + -0.052747, + 1.405598, + 0.747408 + ], + [ + 0.193816, + 1.111633, + -0.205523, + -0.9259 + ], + [ + 0.584058, + 0.582538, + -0.214829, + -0.782809 + ], + [ + 0.229154, + -2.493894, + 0.690125, + 0.491368 + ], + [ + -1.638857, + 0.061354, + -0.9641, + 0.757221 + ] + ] + }, + { + "name": "self", + "labels": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ], + "causal": false, + "q": [ + [ + -1.363194, + -0.365414, + 3.479611, + 1.37858 + ], + [ + -3.725994, + -0.011811, + -1.415271, + 0.337396 + ], + [ + -2.825646, + 0.424802, + 0.413573, + 2.768434 + ], + [ + 0.457481, + 0.737626, + -2.157221, + 3.254691 + ], + [ + -3.190517, + 1.835056, + -0.549457, + -1.466721 + ], + [ + -2.575437, + -2.637164, + 1.491963, + -0.4319 + ], + [ + 2.354986, + -2.90623, + -0.004894, + -1.416984 + ], + [ + 1.354414, + -3.697429, + -0.599976, + 0.366892 + ], + [ + -2.890327, + 1.918518, + 0.34801, + 1.96066 + ], + [ + 2.398912, + -2.450607, + -1.99528, + -0.508533 + ], + [ + 2.037609, + 2.318225, + -1.93334, + -1.654141 + ], + [ + -3.111659, + -2.278639, + -0.927946, + -0.514103 + ], + [ + 3.763103, + -0.92592, + -0.52791, + 0.838474 + ], + [ + -2.973537, + -1.150096, + 0.041553, + 2.415291 + ], + [ + -2.712657, + 2.826964, + -0.726509, + 0.349212 + ], + [ + 2.231221, + 1.740521, + 2.790004, + 0.456201 + ] + ], + "k": [ + [ + -1.363194, + -0.365414, + 3.479611, + 1.37858 + ], + [ + -3.725994, + -0.011811, + -1.415271, + 0.337396 + ], + [ + -2.825646, + 0.424802, + 0.413573, + 2.768434 + ], + [ + 0.457481, + 0.737626, + -2.157221, + 3.254691 + ], + [ + -3.190517, + 1.835056, + -0.549457, + -1.466721 + ], + [ + -2.575437, + -2.637164, + 1.491963, + -0.4319 + ], + [ + 2.354986, + -2.90623, + -0.004894, + -1.416984 + ], + [ + 1.354414, + -3.697429, + -0.599976, + 0.366892 + ], + [ + -2.890327, + 1.918518, + 0.34801, + 1.96066 + ], + [ + 2.398912, + -2.450607, + -1.99528, + -0.508533 + ], + [ + 2.037609, + 2.318225, + -1.93334, + -1.654141 + ], + [ + -3.111659, + -2.278639, + -0.927946, + -0.514103 + ], + [ + 3.763103, + -0.92592, + -0.52791, + 0.838474 + ], + [ + -2.973537, + -1.150096, + 0.041553, + 2.415291 + ], + [ + -2.712657, + 2.826964, + -0.726509, + 0.349212 + ], + [ + 2.231221, + 1.740521, + 2.790004, + 0.456201 + ] + ], + "v": [ + [ + -0.801931, + -1.324359, + -0.248362, + 0.420445 + ], + [ + 1.136047, + 0.109706, + -0.552647, + -0.78478 + ], + [ + 0.748746, + 1.634783, + 0.272769, + -1.233329 + ], + [ + -0.958265, + 1.600019, + 0.202882, + -1.732135 + ], + [ + -0.083696, + -1.163226, + -0.629288, + -0.488006 + ], + [ + -0.713313, + 0.553378, + -0.063086, + -0.589431 + ], + [ + 0.409638, + 0.829855, + -1.643023, + -0.25673 + ], + [ + -0.980747, + -0.173155, + -1.289419, + 0.02069 + ], + [ + -0.037886, + -0.304338, + -1.047927, + -0.39619 + ], + [ + -1.091329, + -1.355209, + 0.224786, + -1.10935 + ], + [ + 1.170296, + 0.716588, + -1.997817, + 0.272129 + ], + [ + -1.101717, + 0.033057, + 0.043632, + -1.98843 + ], + [ + -0.233423, + -0.25579, + 0.962001, + -1.181447 + ], + [ + 0.738042, + -1.098973, + -0.331291, + -0.840473 + ], + [ + 1.448731, + 0.568213, + 2.431733, + 0.641916 + ], + [ + 0.844993, + 0.840683, + -0.606612, + -0.070028 + ] + ] + }, + { + "name": "random", + "labels": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ], + "causal": false, + "q": [ + [ + 0.25146, + -0.26421, + 1.280845, + 0.2098 + ], + [ + -1.071339, + 0.72319, + 2.608, + 1.894162 + ], + [ + -1.40747, + -2.530843, + -1.246549, + 0.082652 + ], + [ + -4.650062, + -0.437583, + -2.491822, + -1.464535 + ], + [ + -1.088518, + -0.6326, + 0.823261, + 2.085027 + ], + [ + -0.257069, + 2.732927, + -1.330389, + 0.70302 + ], + [ + 1.80694, + 0.188025, + -1.486998, + -1.843451 + ], + [ + -0.915452, + 0.44039, + -2.019236, + -0.418351 + ], + [ + -0.31845, + 1.081691, + 0.429318, + 0.710745 + ], + [ + -1.307657, + -0.259227, + 1.567951, + 2.986862 + ], + [ + -2.518131, + 3.027848, + 2.691751, + 1.562623 + ], + [ + 0.528911, + -0.627846, + 2.916041, + 3.920517 + ], + [ + 3.60327, + 2.630208, + 0.714761, + -2.416637 + ], + [ + -0.008908, + 1.31295, + -2.576723, + 0.790244 + ], + [ + 0.859727, + 1.392085, + -2.368236, + -1.323405 + ], + [ + -0.87287, + -2.339604, + 3.478736, + -0.991821 + ] + ], + "k": [ + [ + 0.657939, + -0.517145, + 3.166946, + 2.640722 + ], + [ + 1.266705, + -4.40702, + 0.104058, + 1.367372 + ], + [ + 2.007923, + -1.235814, + 3.644023, + -2.640862 + ], + [ + -1.323056, + 1.8701, + 0.098109, + 4.004785 + ], + [ + 0.377038, + -1.266388, + -0.755127, + -2.182292 + ], + [ + -2.55536, + 1.260823, + 1.162332, + 2.589118 + ], + [ + -1.509212, + 3.378215, + -0.574775, + 3.148817 + ], + [ + -0.865572, + -1.470967, + 0.499571, + 2.062906 + ], + [ + 0.322019, + -1.171058, + -2.682439, + -2.80304 + ], + [ + 1.005366, + 1.979426, + -0.328589, + -2.14873 + ], + [ + 1.746084, + -2.560788, + -1.426136, + 1.242036 + ], + [ + -4.500282, + 0.772739, + -1.163282, + 0.218559 + ], + [ + -0.151403, + 0.404229, + 1.388344, + -1.51674 + ], + [ + 2.841964, + 1.452188, + 1.687465, + 2.329728 + ], + [ + 1.575176, + 1.688157, + 0.151187, + -2.853548 + ], + [ + -0.27009, + -1.539029, + -2.845484, + 0.516906 + ] + ], + "v": [ + [ + -0.568549, + -1.029804, + -1.043001, + 0.268417 + ], + [ + 0.358672, + 1.322457, + -0.013915, + 1.04184 + ], + [ + 1.402265, + 1.150166, + -2.365304, + 1.228684 + ], + [ + 0.33962, + 0.423771, + 0.371227, + 0.382757 + ], + [ + 0.319414, + -0.358913, + -1.901635, + -0.108915 + ], + [ + -0.803732, + 1.080163, + -0.288767, + 0.083475 + ], + [ + -0.849606, + -0.510622, + -0.011533, + -1.485375 + ], + [ + 0.300685, + -0.106072, + -1.18572, + -2.398233 + ], + [ + 0.513052, + -0.297584, + -0.530008, + -0.236155 + ], + [ + 1.816476, + -0.049801, + 0.086619, + -1.487073 + ], + [ + 1.647339, + 0.917488, + 1.066935, + 0.047673 + ], + [ + 0.916655, + 0.370947, + 0.613189, + -0.152193 + ], + [ + -1.473888, + 1.028854, + -1.93496, + -0.239937 + ], + [ + -0.204522, + -1.04286, + 0.613123, + -0.20033 + ], + [ + -0.436868, + 0.519842, + -0.476579, + 1.38898 + ], + [ + 0.351455, + -0.474333, + -1.944265, + -1.307753 + ] + ] + } +]; diff --git a/web/src/lib/quantize.test.ts b/web/src/lib/quantize.test.ts new file mode 100644 index 0000000..b450a46 --- /dev/null +++ b/web/src/lib/quantize.test.ts @@ -0,0 +1,42 @@ +import { readFileSync } from "node:fs"; +import { join } from "node:path"; +import { describe, expect, it } from "vitest"; +import { quantize, roundHalfEven } from "@/lib/quantize"; + +const cases = JSON.parse( + readFileSync(join(process.cwd(), "..", "wasm", "fixtures", "quantize_cases.json"), "utf8"), +) as Array<{ + q: number[][]; + k: number[][]; + v: number[][]; + expQ: number[]; + expK: number[]; + expV: number[]; + expCfgScale: number; +}>; + +describe("roundHalfEven", () => { + it("matches numpy rint / Python round on halves", () => { + expect([0.5, 1.5, 2.5, -0.5, -1.5, 2.4999, 2.5001].map(roundHalfEven)).toEqual([0, 2, 2, 0, -2, 2, 3]); + }); +}); + +describe("quantize (mirror of sim/golden/fixed.py)", () => { + cases.forEach((c, i) => { + it(`case ${i} matches the golden values exactly`, () => { + const z = quantize(c.q, c.k, c.v); + expect(z.q).toEqual(c.expQ); + expect(z.k).toEqual(c.expK); + expect(z.v).toEqual(c.expV); + expect(z.cfgScale).toBe(c.expCfgScale); + }); + }); + + it("keeps values inside int8 and cfg_scale inside 24 bits", () => { + for (const c of cases) { + const z = quantize(c.q, c.k, c.v); + for (const x of [...z.q, ...z.k, ...z.v]) expect(Math.abs(x)).toBeLessThanOrEqual(127); + expect(z.cfgScale).toBeLessThan(2 ** 24); + } + }); +}); diff --git a/web/src/lib/quantize.ts b/web/src/lib/quantize.ts new file mode 100644 index 0000000..be4211b --- /dev/null +++ b/web/src/lib/quantize.ts @@ -0,0 +1,46 @@ +// Host-side quantization, a mirror of sim/golden/fixed.py quantize(): symmetric per-tensor INT8 and the folded +// cfg_scale (UQ4.20, 24 bits). Checked against wasm/fixtures/quantize_cases.json in quantize.test.ts. + +export const LOG2E = Math.log2(Math.E); +export const D = 4; + +/** numpy.rint / Python round: halves go to the even neighbour. */ +export function roundHalfEven(x: number): number { + const f = Math.floor(x); + const d = x - f; + if (d > 0.5) return f + 1; + if (d < 0.5) return f; + return f % 2 === 0 ? f : f + 1; +} + +export interface Quantized { + q: number[]; // int8, row-major + k: number[]; + v: number[]; + sq: number; + sk: number; + sv: number; + cfgScale: number; // 24-bit UQ4.20 +} + +function quantizeOne(x: number[][]): { values: number[]; scale: number } { + let maxAbs = 0; + for (const row of x) for (const value of row) maxAbs = Math.max(maxAbs, Math.abs(value)); + const scale = maxAbs / 127 || 1.0; + const values: number[] = []; + for (const row of x) { + for (const value of row) { + values.push(Math.min(127, Math.max(-127, roundHalfEven(value / scale)))); + } + } + return { values, scale }; +} + +export function quantize(q: number[][], k: number[][], v: number[][]): Quantized { + const Q = quantizeOne(q); + const K = quantizeOne(k); + const V = quantizeOne(v); + const cfgScale = roundHalfEven(Q.scale * K.scale * LOG2E / Math.sqrt(D) * 2 ** 20); + if (cfgScale < 0 || cfgScale >= 2 ** 24) throw new Error(`cfg_scale ${cfgScale} does not fit 24 bits`); + return { q: Q.values, k: K.values, v: V.values, sq: Q.scale, sk: K.scale, sv: V.scale, cfgScale }; +} diff --git a/web/src/lib/reference.ts b/web/src/lib/reference.ts new file mode 100644 index 0000000..20db972 --- /dev/null +++ b/web/src/lib/reference.ts @@ -0,0 +1,32 @@ +// Float64 attention, the reference the engine output is compared with (sim/golden/float_ref.py). + +export function attention(q: number[][], k: number[][], v: number[][], causal: boolean): { + out: number[][]; + probs: number[][]; +} { + const n = q.length; + const d = q[0]?.length ?? 0; + const probs: number[][] = []; + const out: number[][] = []; + for (let i = 0; i < n; i++) { + const s: number[] = []; + for (let j = 0; j < n; j++) { + if (causal && j > i) { + s.push(-Infinity); + continue; + } + let dot = 0; + for (let c = 0; c < d; c++) dot += (q[i]?.[c] ?? 0) * (k[j]?.[c] ?? 0); + s.push(dot / Math.sqrt(d)); + } + const mx = Math.max(...s); + const e = s.map((x) => (x === -Infinity ? 0 : Math.exp(x - mx))); + const sum = e.reduce((a, b) => a + b, 0); + const p = e.map((x) => x / sum); + probs.push(p); + const row: number[] = new Array(d).fill(0); + for (let j = 0; j < n; j++) for (let c = 0; c < d; c++) row[c] = (row[c] ?? 0) + (p[j] ?? 0) * (v[j]?.[c] ?? 0); + out.push(row); + } + return { out, probs }; +} diff --git a/web/src/lib/schedule.test.ts b/web/src/lib/schedule.test.ts new file mode 100644 index 0000000..92b471d --- /dev/null +++ b/web/src/lib/schedule.test.ts @@ -0,0 +1,48 @@ +import { readFileSync } from "node:fs"; +import { join } from "node:path"; +import { describe, expect, it } from "vitest"; +import { flashTileOrder, naiveTileOrder } from "@/lib/schedule"; + +const fixture = (name: string) => + JSON.parse(readFileSync(join(process.cwd(), "..", "wasm", "fixtures", `${name}.json`), "utf8")) as { + n: number; + qrows: number; + causal: boolean; + tiles: number; + }; + +describe("tile order matches the engine's tile counter", () => { + it("FLASH sequential", () => { + const f = fixture("flash_seq"); + expect(flashTileOrder(f.n, f.qrows, f.causal).length).toBe(f.tiles); + }); + it("FLASH causal with overlap (same order as without)", () => { + const f = fixture("flash_overlap_causal"); + expect(flashTileOrder(f.n, f.qrows, f.causal).length).toBe(f.tiles); + }); + it("NAIVE causal", () => { + const f = fixture("naive_causal"); + expect(naiveTileOrder(f.n, f.causal).length).toBe(f.tiles); + }); +}); + +describe("tile order invariants", () => { + it("no tile above the causal diagonal; row groups increase within a K/V tile", () => { + const order = flashTileOrder(32, 16, true); + for (const t of order) expect(t.kj).toBeLessThanOrEqual(t.qi); + for (let i = 1; i < order.length; i++) { + const a = order[i - 1]!; + const b = order[i]!; + if (a.kj === b.kj) { + expect(b.qi).toBeGreaterThan(a.qi); + } else if (b.kj > a.kj) { + // same Q block, next K/V tile + expect(b.qi).toBeGreaterThanOrEqual(a.qi - 3); + } else { + // next Q block starts again at K/V tile 0 with later row groups + expect(b.kj).toBe(0); + expect(b.qi).toBeGreaterThan(a.qi); + } + } + }); +}); diff --git a/web/src/lib/schedule.ts b/web/src/lib/schedule.ts new file mode 100644 index 0000000..fbe3211 --- /dev/null +++ b/web/src/lib/schedule.ts @@ -0,0 +1,37 @@ +// The order in which the FLASH controller computes tiles (flash_ctrl.sv): Q blocks outer; within a block, K/V tiles kj +// in order; within a K/V tile, the row groups of the block in order, skipping groups above the causal diagonal. +// The tiles counter counts tile starts, so tile k (0-based) in this order is the one in flight after k+1 starts. + +export interface TileRef { + qi: number; // row group (4 rows), global + kj: number; // K/V tile +} + +export function flashTileOrder(n: number, qrows: number, causal: boolean): TileRef[] { + const nb = n / 4; + const g = qrows / 4; + const order: TileRef[] = []; + for (let gb = 0; gb < nb; gb += g) { + const bg = Math.min(g, nb - gb); + const last = causal ? gb + bg - 1 : nb - 1; + for (let kj = 0; kj <= last; kj++) { + for (let gi = 0; gi < bg; gi++) { + const qi = gb + gi; + if (causal && kj > qi) continue; + order.push({ qi, kj }); + } + } + } + return order; +} + +/** NAIVE tile pairs, block by block (naive_ctrl.sv): every K/V tile of block qi, for each qi. */ +export function naiveTileOrder(n: number, causal: boolean): TileRef[] { + const nb = n / 4; + const order: TileRef[] = []; + for (let qi = 0; qi < nb; qi++) { + const last = causal ? qi : nb - 1; + for (let kj = 0; kj <= last; kj++) order.push({ qi, kj }); + } + return order; +} diff --git a/web/src/lib/state-schema.ts b/web/src/lib/state-schema.ts new file mode 100644 index 0000000..faf9270 --- /dev/null +++ b/web/src/lib/state-schema.ts @@ -0,0 +1,58 @@ +// Mirrors wasm/harness/harness.h and docs/STATE_SCHEMA.md. Change both together. + +/** Per-clock summary returned by step(), snapshot(). */ +export interface Snapshot { + cycle: number; + ctrlState: number; + busy: boolean; + done: boolean; + hbmRdBytes: number; + hbmWrBytes: number; + cycles: number; + tiles: number; + kvLoads: number; +} + +/** Tile-core state of the most recent tile (4 rows of one row group). */ +export interface TileState { + curGrp: number; + srow: number; + s: number[]; // 16 values, row-major (4 rows x 4 key columns) + z: number[]; + p: number[]; + alpha: number[]; // 4 rows + m: number[]; + l: number[]; + o: number[]; // 16 values, row-major (4 rows x 4 columns) +} + +export interface EngineInstance { + reset(): void; + configure(n: number, qrows: number, causal: boolean, mode: number, overlap: boolean, latency: number, scale: number): void; + loadQKV(q: number[], k: number[], v: number[]): void; + start(): void; + step(): Snapshot; + runToDone(maxCycles: number): number; + readOutput(): number[]; + readHbm(addr: number, len: number): number[]; + readProbabilities(): number[]; + snapshot(): Snapshot; + isDone(): boolean; + getTile(): TileState; + delete(): void; +} + +export interface EngineModule { + TinyAttnSim: new () => EngineInstance; +} + +/** Controller state names (flash_ctrl.sv and naive_ctrl.sv, the enum order). */ +export const FLASH_STATES = [ + "IDLE", "BLK", "LDQ", "LDQ_W", "LDK", "LDK_W", "LDV", "LDV_W", "WLOAD", + "TILE", "TILE_W", "WAITPF", "NORM", "NORM_W", "STO", "STO_W", "DONE", +] as const; + +export const NAIVE_STATES = [ + "IDLE", "BLK", "LDQ", "LDQ_W", "ISSUE", "WAIT", "WLOAD", "TILE", "TILE_W", + "STORE", "STORE_W", "NEXT", "NORM", "NORM_W", "STO", "STO_W", "DONE", +] as const; diff --git a/web/src/pages/app.astro b/web/src/pages/app.astro new file mode 100644 index 0000000..1551517 --- /dev/null +++ b/web/src/pages/app.astro @@ -0,0 +1,17 @@ +--- +import Layout from "@/layouts/Layout.astro"; +import Visualizer from "@/components/Visualizer"; +--- + + +
+

TinyAttention visualizer

+

+ Every number here is read from the compiled RTL, running in your browser. Pick a preset, press Start, then Step + through the clock. +

+
+ +
+
+
diff --git a/web/vitest.config.ts b/web/vitest.config.ts new file mode 100644 index 0000000..9167136 --- /dev/null +++ b/web/vitest.config.ts @@ -0,0 +1,11 @@ +import { fileURLToPath } from "node:url"; +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + resolve: { + alias: { "@": fileURLToPath(new URL("./src", import.meta.url)) }, + }, + test: { + include: ["src/**/*.test.ts"], + }, +}); From 6f0e1b035b364530880ec8b8ae7cc3ca532f6bba Mon Sep 17 00:00:00 2001 From: Dineth Hettiarachchi Date: Mon, 26 Oct 2026 06:32:20 +0530 Subject: [PATCH 2/3] feat: finish Phase 7 visualizer: editable inputs, K/V buffers, HBM meter, heatmap, smoke tests - Matrix editor: Q, K and V values are editable in the page; the browser quantizes them the same way as the golden model. Editing resets the run; "Reset to preset" restores the preset. - SRAM panel: the K and V tile buffers, read from the RTL (new debug ports dbg_kbuf, dbg_vbuf, dbg_kv_sel; no behavior change). The buffer in use is outlined. - HBM meter: bytes so far against the expected total for the configuration, from web/src/lib/traffic-table.ts, generated from sim/golden/traffic.py (freshness checked in pytest). - Attention heatmap: engine probabilities from HBM for NAIVE; float reference for FLASH, which never stores P (labelled as such). - Playwright smoke test (pnpm test:e2e, five tests) against the production build: FLASH output against the float reference, step and back, NAIVE probabilities, editing and re-running, phone width without horizontal scroll. - WASM harness: getKVBuffers(); the Node test checks the buffer in use holds the last K/V tile loaded. Phase 7 exit criteria in docs/PLAN.md are met. Docs updated: ARCHITECTURE section 12, STATE_SCHEMA, PLAN, CONTEXT, README. --- .gitignore | 4 + CONTEXT.md | 9 +- README.md | 2 +- docs/ARCHITECTURE.md | 15 +- docs/PLAN.md | 2 +- docs/STATE_SCHEMA.md | 9 + rtl/tiny_attn_top.sv | 13 +- sim/golden/export_web_data.py | 28 ++- sim/golden/test_golden.py | 1 + wasm/harness/bindings.cpp | 9 + wasm/harness/harness.cpp | 14 ++ wasm/harness/harness.h | 9 + wasm/test.mjs | 12 + web/e2e/smoke.spec.ts | 73 ++++++ web/eslint.config.js | 2 +- web/package.json | 4 +- web/playwright.config.ts | 20 ++ web/pnpm-lock.yaml | 28 +++ web/src/components/AttentionHeatmap.tsx | 38 +++ web/src/components/HbmMeter.tsx | 33 +++ web/src/components/MatrixEditor.tsx | 34 +++ web/src/components/SramPanel.tsx | 43 ++++ web/src/components/Visualizer.tsx | 190 ++++++++++----- web/src/lib/state-schema.ts | 8 + web/src/lib/traffic-table.ts | 300 ++++++++++++++++++++++++ 25 files changed, 821 insertions(+), 79 deletions(-) create mode 100644 web/e2e/smoke.spec.ts create mode 100644 web/playwright.config.ts create mode 100644 web/src/components/AttentionHeatmap.tsx create mode 100644 web/src/components/HbmMeter.tsx create mode 100644 web/src/components/MatrixEditor.tsx create mode 100644 web/src/components/SramPanel.tsx create mode 100644 web/src/lib/traffic-table.ts diff --git a/.gitignore b/.gitignore index c9d103e..a24903a 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,7 @@ web/public/spike/ # Agent scratch .agents/ .claude/ + +# Playwright output +web/test-results/ +web/playwright-report/ diff --git a/CONTEXT.md b/CONTEXT.md index 3c8715e..9f83467 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -33,16 +33,17 @@ On a fresh machine delete the symlinks and run `.tools/setup.sh` and `.tools/ems pass; perf baseline in `sim/perf_baseline.json` (re-record with `PERF_RECORD=1 COCOTB_TEST_FILTER=perf_grid bash sim/run_e2e.sh`). - Phase 6 (WASM harness): DONE. `wasm/build.sh` builds `web/public/tiny_attn.{mjs,wasm}` (81 KB gzipped); `node wasm/test.mjs` checks three golden fixtures on interleaved instances, exactly. JS API in `docs/STATE_SCHEMA.md`. -- Phase 7 (web visualizer `/app`): PARTIAL. Built: presets and quantization shared with the golden model, schedule, tile values, - bytes, NAIVE probability matrix. Browser-checked on the production build. Missing from the plan: MatrixEditor, SramPanel, - HbmMeter, FLASH heatmap, Playwright smoke test (see ARCHITECTURE §12). -- Next: finish the Phase 7 list, then Phase 8 (L1, L2, L4). +- Phase 7 (web visualizer `/app`): DONE. Presets, editable Q/K/V (quantized in the browser), schedule, tile values, K/V + buffers (read from the RTL), HBM meter against the golden traffic model, heatmap (engine P for NAIVE, float reference for + FLASH), Playwright smoke test (5 tests, production build). +- Next: Phase 8 (L1 softmax cell, L2 tile dataflow, L4 naive vs flash with two instances, N sweep, error panel). ## Gotchas found in Phase 7 - `wasm/fixtures/` holds engine runs and `quantize_cases.json`; the Node test must skip the quantization file (it did not for a while and aborted in configure with no useful message). - Embind gives 64-bit integers to JavaScript as BigInt, which breaks JSON comparison. Tile values are 32-bit for that reason. - The tile core's debug S/Z/P registers are only written by FLASH. NAIVE views must not show them. +- Playwright 1.64 needs its own Chromium build (`pnpm exec playwright install chromium`); the cache has other versions. - `astro dev` hung without output in this environment; `astro build` + `astro preview` works for browser checks. ## Gotchas found in Phase 5 diff --git a/README.md b/README.md index 276fb0c..abb9cbf 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Fourth project in the series after [tiny-gpu](https://github.com/deaneeth/tiny-g [tiny-tpu](https://github.com/deaneeth/tiny-tpu) and tiny-cpu. Same rule as the others: nothing on screen is faked; every value comes from a `dbg_*` port on the compiled RTL. -**Status:** Phases 0-6 done, Phase 7 partly done: the engine (FLASH, NAIVE, K/V overlap) is bit-exact against the golden model, compiled to WebAssembly, and shown clock by clock in a browser visualizer at `/app`. Still open in Phase 7: matrix editor, SRAM panel, Playwright smoke test. See [`docs/PLAN.md`](docs/PLAN.md) for the roadmap. +**Status:** Phases 0-7 done: the engine (FLASH, NAIVE, K/V overlap) is bit-exact against the golden model, compiled to WebAssembly, and shown clock by clock in a browser visualizer at `/app`, with editable inputs, K/V buffers, HBM traffic against the model, and a Playwright smoke test. Next: the L1, L2 and L4 views. See [`docs/PLAN.md`](docs/PLAN.md) for the roadmap. ## Quick start diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index bf3b60e..07302af 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -375,7 +375,14 @@ Checks: `node wasm/test.mjs` (engine vs golden), `pnpm test` (quantization and t `pnpm typecheck`, `pnpm lint`, `pnpm build`. The browser run (built site, `astro preview`) showed no console errors; the FLASH run and the NAIVE run both finished with max deviation 0.0049 on the toy preset; the phone width has no horizontal scroll. -Not yet built from the Phase 7 list in `docs/PLAN.md`: `MatrixEditor` (edit Q/K/V in the page; presets only for now), -`SramPanel` (staging buffer contents), an `HbmMeter` bar, a FLASH attention heatmap (only NAIVE shows P), and the Playwright -smoke test. The dev-server path also needs a fix (`astro dev` hung without output in this environment); `astro build` + -`astro preview` works. The light/dark theme and 375 px checks are done for layout only; the theme check is not. +Phase 7 items, all built: `MatrixEditor` (the Q, K and V values are editable; editing resets the run), `SramPanel` (the +K and V tile buffers, read from the RTL through `dbg_kbuf`, `dbg_vbuf`, `dbg_kv_sel`, with the buffer in use outlined), +`HbmMeter` (bytes so far against the expected total, from `web/src/lib/traffic-table.ts`, generated from +`sim/golden/traffic.py`), and `AttentionHeatmap` (engine probabilities from HBM for NAIVE; the float reference for FLASH, +which never stores P). The Playwright smoke test (`pnpm test:e2e`, five tests: FLASH output against float, step and back, +NAIVE probabilities, editing and re-running, phone width) runs against the production build. + +Checks: `node wasm/test.mjs` (engine vs golden, now including the K/V buffer in use against the last tile loaded), +`pnpm test` (quantization, tile order), `pnpm test:e2e`, `pnpm typecheck`, `pnpm lint`, `pnpm build`, `pytest sim/golden` +(fixture, web-data and traffic-table freshness). The `astro dev` server hangs without output in this environment, so +browser checks use `astro build` + `astro preview`. diff --git a/docs/PLAN.md b/docs/PLAN.md index d4cd595..f008036 100644 --- a/docs/PLAN.md +++ b/docs/PLAN.md @@ -447,7 +447,7 @@ The estimates assume one person part-time, at tiny-cpu's pace. - `harness.cpp`, `bindings.cpp`, `build.sh`, `STATE_SCHEMA.md`, `test.mjs` with golden fixtures. - **Exit:** `wasm.yml` is green; the size budget is met; two instances run independently in Node. -### Phase 7: Core UI + L3 Schedule (2 weeks) — PARTIAL (visualizer built; see ARCHITECTURE §12 for what remains) +### Phase 7: Core UI + L3 Schedule (2 weeks) ✅ DONE (see ARCHITECTURE §12) - `useTinyAttn`, `Controls`, `MatrixEditor`, presets, `quantize.ts`, `AttentionHeatmap`, `SramPanel`, `HbmMeter`, and **L3 Schedule first**. - **Exit:** pick a preset, step forward and back, and watch tiles, buffers and bytes update; the Playwright smoke test passes. diff --git a/docs/STATE_SCHEMA.md b/docs/STATE_SCHEMA.md index e633d51..9666bfb 100644 --- a/docs/STATE_SCHEMA.md +++ b/docs/STATE_SCHEMA.md @@ -39,6 +39,9 @@ class TinyAttnSim { readHbm(addr: number, len: number): number[]; // raw 32-bit words (Z/P tiles are at 256 and 768) snapshot(): Snapshot; isDone(): boolean; + getTile(): TileState; // tile-core values of the most recent tile (S, Z, P, m, l, alpha, O) + getKVBuffers(): KVBuffers; // K and V tile buffers (both), and the buffer in use + readProbabilities(): number[]; // NAIVE: P from HBM, n*n values (UQ1.8) delete(): void; } ``` @@ -55,6 +58,12 @@ Input validation throws: `n` must be a multiple of 4 in 4..32, `qrows` one of 4, Multiple instances are independent: each owns its Verilator context. Steps may be interleaved across instances. +## K/V buffers (`getKVBuffers`) + +`k[(buf*4 + row)*4 + col]` is K[row][col] of buffer `buf` (int8, sign-extended); `v` the same for V. `sel` is the buffer +the engine uses for the current tile. Buffer 1 is used only by the overlap schedule. Checked in `wasm/test.mjs`: after a +run, the buffer in use holds the last K/V tile loaded. + ## Address map of the HBM model (words) | Region | Base | Size | diff --git a/rtl/tiny_attn_top.sv b/rtl/tiny_attn_top.sv index 1bf89c1..3a4305a 100644 --- a/rtl/tiny_attn_top.sv +++ b/rtl/tiny_attn_top.sv @@ -54,7 +54,11 @@ module tiny_attn_top output logic [16*S_W-1:0] dbg_mm1_psum, output logic [16*Q_W-1:0] dbg_mm2_w, output logic [16*P_W-1:0] dbg_mm2_a, - output logic [16*PV_W-1:0] dbg_mm2_psum + output logic [16*PV_W-1:0] dbg_mm2_psum, + // K/V buffers: word (buf*4 + row) holds row `row` of buffer `buf` (4 int8 lanes); dbg_kv_sel is the buffer in use + output logic [2*4*32-1:0] dbg_kbuf, + output logic [2*4*32-1:0] dbg_vbuf, + output logic dbg_kv_sel ); // ---- controllers (only the one selected by cfg_naive is started) logic f_busy, f_done, n_busy, n_done; @@ -106,6 +110,13 @@ module tiny_attn_top // ---- K/V double buffers and the NAIVE tile input (Z or P tile: 8 words, 4 rows x 4 lanes x 16 bit) logic [31:0] kreg [2][4]; logic [31:0] vreg [2][4]; + for (genvar b = 0; b < 2; b++) begin : g_kvdbg + for (genvar r = 0; r < 4; r++) begin : g_row + assign dbg_kbuf[(b*4+r)*32 +: 32] = kreg[b][r]; + assign dbg_vbuf[(b*4+r)*32 +: 32] = vreg[b][r]; + end + end + assign dbg_kv_sel = kv_sel; logic [31:0] tin_words [8]; logic q_load_valid; diff --git a/sim/golden/export_web_data.py b/sim/golden/export_web_data.py index 2ccf118..c607394 100644 --- a/sim/golden/export_web_data.py +++ b/sim/golden/export_web_data.py @@ -12,10 +12,12 @@ import fixed import presets +from traffic import traffic from export_fixtures import ROOT WEB_PRESETS = ROOT / "web" / "src" / "lib" / "presets.ts" QUANT_CASES = ROOT / "wasm" / "fixtures" / "quantize_cases.json" +TRAFFIC_TS = ROOT / "web" / "src" / "lib" / "traffic-table.ts" def r(x): @@ -76,10 +78,34 @@ def quant_cases(): return cases +def traffic_entries(): + """Expected HBM bytes and tile counts for every (schedule, N, causal, Q block rows) the web app can run.""" + out = {} + for n in range(4, 33, 4): + for causal in (False, True): + for qrows in (4, 8, 16, 32): + if qrows > n: + continue + t = traffic(n, causal, "FLASH", qblock=qrows) + out[f"FLASH:{n}:{int(causal)}:{qrows}"] = dict(rd=t["rd"], wr=t["wr"], tiles=t["tiles"]) + t = traffic(n, causal, "NAIVE", qblock=4) + out[f"NAIVE:{n}:{int(causal)}:4"] = dict(rd=t["rd"], wr=t["wr"], tiles=t["tiles"]) + return out + + +def traffic_ts(entries): + body = json.dumps(entries, indent=1, sort_keys=True) + return ("// GENERATED by sim/golden/export_web_data.py from sim/golden/traffic.py. Do not edit.\n" + "// Key: `${mode}:${n}:${causal ? 1 : 0}:${qrows}`. rd / wr: HBM bytes; tiles: tile count.\n" + "export interface TrafficEntry {\n rd: number;\n wr: number;\n tiles: number;\n}\n\n" + f"export const TRAFFIC: Record = {body};\n") + + def main(): WEB_PRESETS.write_text(presets_ts(preset_entries())) QUANT_CASES.write_text(json.dumps(quant_cases()) + "\n") - print(f"wrote {WEB_PRESETS.name} ({len(presets.ALL)} presets) and {QUANT_CASES.name}") + TRAFFIC_TS.write_text(traffic_ts(traffic_entries())) + print(f"wrote {WEB_PRESETS.name} ({len(presets.ALL)} presets), {QUANT_CASES.name}, {TRAFFIC_TS.name}") if __name__ == "__main__": diff --git a/sim/golden/test_golden.py b/sim/golden/test_golden.py index 9fcb5bd..896842f 100644 --- a/sim/golden/test_golden.py +++ b/sim/golden/test_golden.py @@ -277,3 +277,4 @@ def test_web_data_fresh(): assert ewd.WEB_PRESETS.read_text() == ewd.presets_ts(ewd.preset_entries()), "presets.ts is stale" assert ewd.QUANT_CASES.read_text() == json.dumps(ewd.quant_cases()) + "\n", "quantize_cases.json is stale" + assert ewd.TRAFFIC_TS.read_text() == ewd.traffic_ts(ewd.traffic_entries()), "traffic-table.ts is stale" diff --git a/wasm/harness/bindings.cpp b/wasm/harness/bindings.cpp index 356ad27..3b1290e 100644 --- a/wasm/harness/bindings.cpp +++ b/wasm/harness/bindings.cpp @@ -12,6 +12,14 @@ using namespace emscripten; namespace { std::vector toI32(const val& arr) { return vecFromJSArray(arr); } +val kvToJs(const KVBuffers& kv) { + val o = val::object(); + o.set("sel", kv.sel); + o.set("k", val::array(kv.k.begin(), kv.k.end())); + o.set("v", val::array(kv.v.begin(), kv.v.end())); + return o; +} + val tileToJs(const TileState& t) { val o = val::object(); o.set("curGrp", t.curGrp); @@ -65,6 +73,7 @@ EMSCRIPTEN_BINDINGS(tiny_attn) { })) .function("snapshot", optional_override([](TinyAttnSim& self) { return snapshotToJs(self.snapshot()); })) .function("isDone", &TinyAttnSim::isDone) + .function("getKVBuffers", optional_override([](TinyAttnSim& self) { return kvToJs(self.getKVBuffers()); })) .function("getTile", optional_override([](TinyAttnSim& self) { return tileToJs(self.getTile()); })) .function("readProbabilities", optional_override([](TinyAttnSim& self) { auto p = self.readProbabilities(); diff --git a/wasm/harness/harness.cpp b/wasm/harness/harness.cpp index c5892a1..c261864 100644 --- a/wasm/harness/harness.cpp +++ b/wasm/harness/harness.cpp @@ -229,3 +229,17 @@ std::vector TinyAttnSim::readProbabilities() { } return p; } + +KVBuffers TinyAttnSim::getKVBuffers() const { + KVBuffers kv; + kv.sel = top_->dbg_kv_sel ? 1 : 0; + const uint32_t* kw = wordsOf(top_->dbg_kbuf); + const uint32_t* vw = wordsOf(top_->dbg_vbuf); + for (int word = 0; word < 8; ++word) { + for (int col = 0; col < 4; ++col) { + kv.k.push_back(static_cast(signExtend(bitsAt(kw, word * 32 + col * 8, 8), 8))); + kv.v.push_back(static_cast(signExtend(bitsAt(vw, word * 32 + col * 8, 8), 8))); + } + } + return kv; +} diff --git a/wasm/harness/harness.h b/wasm/harness/harness.h index cd4a7c7..3243752 100644 --- a/wasm/harness/harness.h +++ b/wasm/harness/harness.h @@ -37,6 +37,14 @@ struct TileState { std::vector o; // 16, 26 bit signed }; +// K and V tile buffers. k[(buf*4 + row)*4 + col] is K[row][col] of buffer buf (int8, sign-extended); same for v. +// sel is the buffer the engine is using for the current tile. +struct KVBuffers { + int sel; + std::vector k; // 32 + std::vector v; // 32 +}; + class TinyAttnSim { public: TinyAttnSim(); @@ -62,6 +70,7 @@ class TinyAttnSim { Snapshot snapshot() const; bool isDone() const; TileState getTile() const; + KVBuffers getKVBuffers() const; // P tiles written by a NAIVE run (HBM words 768..): n x n probabilities (UQ1.8), row-major. Requires n known. std::vector readProbabilities(); diff --git a/wasm/test.mjs b/wasm/test.mjs index a1e7459..bffdd99 100644 --- a/wasm/test.mjs +++ b/wasm/test.mjs @@ -71,6 +71,18 @@ for (const { fx, sim, last, finished } of sims) { check(JSON.stringify(t.o) === JSON.stringify(lt.o), "tile O differs from golden"); console.log(` last tile (qi=${lt.qi}, kj=${lt.kj}) state checked`); } + { + // The K/V buffer in use holds the last K/V tile loaded, which is K/V tile n/4-1 for every fixture (the last + // block's last tile). Its rows are the last four rows of the quantized K and V. + const kv = sim.getKVBuffers(); + const lastK = fx.k.slice((fx.n - 4) * 4, fx.n * 4); + const lastV = fx.v.slice((fx.n - 4) * 4, fx.n * 4); + const bufK = kv.k.slice(kv.sel * 16, kv.sel * 16 + 16); + const bufV = kv.v.slice(kv.sel * 16, kv.sel * 16 + 16); + check(JSON.stringify(bufK) === JSON.stringify(lastK), `K buffer ${kv.sel} != last K tile`); + check(JSON.stringify(bufV) === JSON.stringify(lastV), `V buffer ${kv.sel} != last V tile`); + console.log(` K/V buffer ${kv.sel} holds the last K/V tile`); + } if (fx.probs) { const probs = Array.from(sim.readProbabilities()); const badP = probs.findIndex((v, i) => v !== fx.probs[i]); diff --git a/web/e2e/smoke.spec.ts b/web/e2e/smoke.spec.ts new file mode 100644 index 0000000..5466029 --- /dev/null +++ b/web/e2e/smoke.spec.ts @@ -0,0 +1,73 @@ +import { expect, test } from "@playwright/test"; + +// The visualizer runs the compiled engine in the page; each test waits for the engine to load first. +async function openApp(page: import("@playwright/test").Page) { + await page.goto("/app"); + await expect(page.getByRole("button", { name: "Start" })).toBeVisible({ timeout: 30_000 }); +} + +const clock = (page: import("@playwright/test").Page) => + page.getByTestId("clock").textContent().then((t) => Number(t)); + +test("FLASH run to the end: output matches the float reference", async ({ page }) => { + await openApp(page); + await page.getByRole("button", { name: "Start" }).click(); + await page.getByRole("button", { name: "Run to end" }).click(); + + await expect(page.getByRole("heading", { name: "Output" })).toBeVisible(); + const text = await page.locator("main").innerText(); + const match = text.match(/Max \|engine − float attention\| = ([0-9.]+)/); + expect(match, "max deviation line").not.toBeNull(); + expect(Number(match?.[1])).toBeLessThan(0.02); + await expect(page.getByText("Float reference attention")).toBeVisible(); + await expect(page.getByText(/· in use/)).toBeVisible(); + await expect(page.getByText(/ B$/).first()).toBeVisible(); +}); + +test("step forward and back moves the clock", async ({ page }) => { + await openApp(page); + await page.getByRole("button", { name: "Start" }).click(); + expect(await clock(page)).toBe(0); + for (let i = 0; i < 3; i++) await page.getByRole("button", { name: "Step ▶" }).click(); + expect(await clock(page)).toBe(3); + await page.getByRole("button", { name: "◀ Back" }).click(); + expect(await clock(page)).toBe(2); +}); + +test("NAIVE run shows the engine's probability matrix from HBM", async ({ page }) => { + await openApp(page); + await page.getByLabel("Schedule").selectOption("1"); + await page.getByRole("button", { name: "Start" }).click(); + await page.getByRole("button", { name: "Run to end" }).click(); + + await expect(page.getByText("read back from HBM (NAIVE)")).toBeVisible(); + await expect(page.getByText("Read", { exact: true })).toBeVisible(); +}); + +test("editing a Q value resets the run and the result follows the new input", async ({ page }) => { + await openApp(page); + await page.getByRole("button", { name: "Start" }).click(); + await page.getByRole("button", { name: "Run to end" }).click(); + await expect(page.getByRole("heading", { name: "Output" })).toBeVisible(); + + await page.getByText(/Edit Q, K and V/).click(); + const cell = page.getByLabel("Q token 0 dimension 0"); + await cell.fill("2.5"); + expect(await clock(page)).toBe(0); + await expect(page.getByRole("heading", { name: "Output" })).toHaveCount(0); + await expect(page.getByRole("button", { name: "Reset to preset" })).toBeEnabled(); + + // the engine still matches the float reference for the edited inputs + await page.getByRole("button", { name: "Start" }).click(); + await page.getByRole("button", { name: "Run to end" }).click(); + const text = await page.locator("main").innerText(); + const match = text.match(/Max \|engine − float attention\| = ([0-9.]+)/); + expect(Number(match?.[1])).toBeLessThan(0.02); +}); + +test("no horizontal scroll at phone width", async ({ page }) => { + await page.setViewportSize({ width: 375, height: 812 }); + await openApp(page); + const overflow = await page.evaluate(() => document.documentElement.scrollWidth - document.documentElement.clientWidth); + expect(overflow).toBeLessThanOrEqual(0); +}); diff --git a/web/eslint.config.js b/web/eslint.config.js index 3ed0649..644dfab 100644 --- a/web/eslint.config.js +++ b/web/eslint.config.js @@ -40,7 +40,7 @@ export default [ }, }, { - files: ["**/*.test.ts"], + files: ["**/*.test.ts", "e2e/**/*.ts", "playwright.config.ts"], languageOptions: { globals: { ...globals.node, diff --git a/web/package.json b/web/package.json index 58086dd..2581ece 100644 --- a/web/package.json +++ b/web/package.json @@ -9,7 +9,8 @@ "lint": "eslint .", "typecheck": "astro check && tsc --noEmit", "format": "prettier --write .", - "test": "vitest run" + "test": "vitest run", + "test:e2e": "pnpm build && playwright test" }, "dependencies": { "@astrojs/react": "^4.4.2", @@ -25,6 +26,7 @@ "devDependencies": { "@astrojs/check": "^0.9.4", "@eslint/js": "^9.13.0", + "@playwright/test": "^1.64.1", "@types/node": "^22.20.5", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", diff --git a/web/playwright.config.ts b/web/playwright.config.ts new file mode 100644 index 0000000..9eb7edb --- /dev/null +++ b/web/playwright.config.ts @@ -0,0 +1,20 @@ +import { defineConfig, devices } from "@playwright/test"; + +// Runs against the production build (`pnpm test:e2e` builds first). +export default defineConfig({ + testDir: "e2e", + fullyParallel: true, + retries: process.env.CI ? 1 : 0, + reporter: "list", + use: { + baseURL: "http://localhost:4325", + trace: "retain-on-failure", + }, + projects: [{ name: "chromium", use: { ...devices["Desktop Chrome"] } }], + webServer: { + command: "pnpm exec astro preview --port 4325", + url: "http://localhost:4325/app", + reuseExistingServer: !process.env.CI, + timeout: 60_000, + }, +}); diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index d01436f..c0f610c 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -42,6 +42,9 @@ importers: '@eslint/js': specifier: ^9.13.0 version: 9.39.5 + '@playwright/test': + specifier: ^1.64.1 + version: 1.64.1 '@types/node': specifier: ^22.20.5 version: 22.20.5 @@ -811,6 +814,11 @@ packages: '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + '@playwright/test@1.64.1': + resolution: {integrity: sha512-IaYGml/nSOiZWROfPtuIL7neuu9qDOZ3TNvNljUIrhDMxiGTgPjzj/g9p9RxpS2tSepPDRY+UwAaEeiKtUvIAg==} + engines: {node: '>=20'} + hasBin: true + '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} @@ -2635,6 +2643,16 @@ packages: resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} engines: {node: '>=12'} + playwright-core@1.64.1: + resolution: {integrity: sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ==} + engines: {node: '>=20'} + hasBin: true + + playwright@1.64.1: + resolution: {integrity: sha512-HCrVhHr5QQuwYoswEUGTb7gGp522yflbv/ST8nF4sFWGuLjQCt17Q/EubpGGSNKYn1tsTCPZxqHhHCfVURu7UA==} + engines: {node: '>=20'} + hasBin: true + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -4149,6 +4167,10 @@ snapshots: '@oslojs/encoding@1.1.0': {} + '@playwright/test@1.64.1': + dependencies: + playwright: 1.64.1 + '@rolldown/pluginutils@1.0.0-beta.27': {} '@rollup/pluginutils@5.5.1(rollup@4.65.0)': @@ -6415,6 +6437,12 @@ snapshots: picomatch@4.0.7: {} + playwright-core@1.64.1: {} + + playwright@1.64.1: + dependencies: + playwright-core: 1.64.1 + possible-typed-array-names@1.1.0: {} postcss@8.5.31: diff --git a/web/src/components/AttentionHeatmap.tsx b/web/src/components/AttentionHeatmap.tsx new file mode 100644 index 0000000..45a485a --- /dev/null +++ b/web/src/components/AttentionHeatmap.tsx @@ -0,0 +1,38 @@ +// Attention probabilities P[i][j] (row i attends to column j). "engine" values are read from HBM after a NAIVE run; +// "float" values are the float reference, because FLASH never stores P. +interface Props { + probs: number[][]; + labels: string[]; + source: "engine" | "float"; +} + +export default function AttentionHeatmap({ probs, labels, source }: Props) { + const n = probs.length; + const caption = + source === "engine" + ? "Attention probabilities P, read back from HBM (NAIVE)" + : "Float reference attention (FLASH never stores P, so this is the float model)"; + return ( +
+

{caption}

+
+
+ {probs.flatMap((row, i) => + row.map((p, j) => ( +
+ )), + )} +
+
+ {labels.length === n && ( +
+ {labels.map((l, i) => {i}:{l})} +
+ )} +
+ ); +} diff --git a/web/src/components/HbmMeter.tsx b/web/src/components/HbmMeter.tsx new file mode 100644 index 0000000..a8abd00 --- /dev/null +++ b/web/src/components/HbmMeter.tsx @@ -0,0 +1,33 @@ +// HBM traffic so far against the expected total for this configuration (generated from sim/golden/traffic.py). +interface Props { + read: number; + write: number; + expected: { rd: number; wr: number } | null; +} + +function Bar({ label, value, total, color }: { label: string; value: number; total: number; color: string }) { + const pct = total > 0 ? Math.min(100, (value / total) * 100) : 0; + return ( +
+
+ {label} + {value} / {total} B +
+
+
+
+
+ ); +} + +export default function HbmMeter({ read, write, expected }: Props) { + if (!expected) { + return

No traffic reference for this configuration.

; + } + return ( +
+ + +
+ ); +} diff --git a/web/src/components/MatrixEditor.tsx b/web/src/components/MatrixEditor.tsx new file mode 100644 index 0000000..3595f65 --- /dev/null +++ b/web/src/components/MatrixEditor.tsx @@ -0,0 +1,34 @@ +// Editable Q, K or V matrix (one row per token, four columns). Values are the float inputs the browser quantizes. +interface Props { + title: string; + values: number[][]; + onChange: (row: number, col: number, value: number) => void; +} + +export default function MatrixEditor({ title, values, onChange }: Props) { + const cols = values[0]?.length ?? 4; + return ( +
+
{title}
+
+ {values.flatMap((row, r) => + row.map((value, c) => ( + { + const x = e.target.valueAsNumber; + if (Number.isFinite(x)) onChange(r, c, x); + }} + /> + )), + )} +
+
+ ); +} diff --git a/web/src/components/SramPanel.tsx b/web/src/components/SramPanel.tsx new file mode 100644 index 0000000..5e41f60 --- /dev/null +++ b/web/src/components/SramPanel.tsx @@ -0,0 +1,43 @@ +// The K and V tile buffers the engine holds, read from the RTL (dbg_kbuf, dbg_vbuf). Buffer 1 is only used by the +// overlap schedule; the buffer in use is outlined. +import type { KVBuffers } from "@/lib/state-schema"; + +interface Props { + kv: KVBuffers | null; +} + +function Tile({ title, values }: { title: string; values: number[] }) { + const rows: number[][] = []; + for (let r = 0; r < 4; r++) rows.push(values.slice(r * 4, r * 4 + 4)); + return ( +
+
{title}
+
+ {rows.flatMap((row, i) => row.map((v, j) => {v}))} +
+
+ ); +} + +export default function SramPanel({ kv }: Props) { + if (!kv) { + return

The buffers fill once a run starts.

; + } + return ( +
+ {[0, 1].map((b) => ( +
+
+ Buffer {b}{kv.sel === b ? " · in use" : ""} +
+ + +
+ ))} +
+ ); +} diff --git a/web/src/components/Visualizer.tsx b/web/src/components/Visualizer.tsx index 35dcea9..ca0ca80 100644 --- a/web/src/components/Visualizer.tsx +++ b/web/src/components/Visualizer.tsx @@ -1,14 +1,20 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import AttentionHeatmap from "@/components/AttentionHeatmap"; +import HbmMeter from "@/components/HbmMeter"; +import MatrixEditor from "@/components/MatrixEditor"; +import SramPanel from "@/components/SramPanel"; import { loadEngine } from "@/lib/engine"; import { PRESETS } from "@/lib/presets"; import { quantize } from "@/lib/quantize"; import { attention } from "@/lib/reference"; import { flashTileOrder, naiveTileOrder, type TileRef } from "@/lib/schedule"; +import { TRAFFIC } from "@/lib/traffic-table"; import { FLASH_STATES, NAIVE_STATES, type EngineInstance, type EngineModule, + type KVBuffers, type Snapshot, type TileState, } from "@/lib/state-schema"; @@ -24,10 +30,17 @@ interface Settings { latency: number; } +interface Inputs { + q: number[][]; + k: number[][]; + v: number[][]; +} + interface Result { out: number[][]; maxErr: number; - probs: number[][] | null; + probs: number[][]; + probsSource: "engine" | "float"; } const panel = { background: "var(--panel)" } as const; @@ -39,6 +52,12 @@ function matrix(flat: number[], rows: number, cols: number): number[][] { return m; } +function maxAbsDiff(a: number[][], b: number[][]): number { + let worst = 0; + a.forEach((row, i) => row.forEach((v, c) => (worst = Math.max(worst, Math.abs(v - (b[i]?.[c] ?? 0)))))); + return worst; +} + export default function Visualizer() { const [mod, setMod] = useState(null); const [error, setError] = useState(null); @@ -50,9 +69,12 @@ export default function Visualizer() { qrows: 4, latency: 10, }); + // Edited Q/K/V; null means the preset's values. + const [edits, setEdits] = useState(null); const [stepCount, setStepCount] = useState(0); const [snap, setSnap] = useState(null); const [tile, setTile] = useState(null); + const [kv, setKv] = useState(null); const [finished, setFinished] = useState(false); const [result, setResult] = useState(null); const simRef = useRef(null); @@ -60,19 +82,35 @@ export default function Visualizer() { const preset = PRESETS[settings.preset] ?? PRESETS[0]; const n = preset?.q.length ?? 4; const labels: string[] = preset?.labels ?? []; + const inputs: Inputs = useMemo( + () => edits ?? { q: preset?.q ?? [], k: preset?.k ?? [], v: preset?.v ?? [] }, + [edits, preset], + ); const qrowOptions = [4, 8, 16, 32].filter((q) => q <= n); + const reset = useCallback(() => { + simRef.current?.delete(); + simRef.current = null; + setStepCount(0); + setSnap(null); + setTile(null); + setKv(null); + setFinished(false); + setResult(null); + }, []); + useEffect(() => { loadEngine().then(setMod).catch((e: unknown) => setError(e instanceof Error ? e.message : String(e))); return () => simRef.current?.delete(); }, []); - const order: TileRef[] = useMemo(() => { - if (!preset) return []; - return settings.mode === 0 - ? flashTileOrder(n, settings.qrows, settings.causal) - : naiveTileOrder(n, settings.causal); - }, [preset, n, settings.mode, settings.qrows, settings.causal]); + const order: TileRef[] = useMemo( + () => + settings.mode === 0 + ? flashTileOrder(n, settings.qrows, settings.causal) + : naiveTileOrder(n, settings.causal), + [n, settings.mode, settings.qrows, settings.causal], + ); /** Advance one clock. The DONE edge is followed by one finalizing edge (counters are final after it). */ const advance = useCallback((sim: EngineInstance, state: { count: number; finished: boolean }) => { @@ -87,35 +125,38 @@ export default function Visualizer() { return s; }, []); - /** Publish the state of the engine to the view. Builds the result once the run has finished. */ + /** Publish the engine state to the view. Builds the result once the run has finished. */ const commit = useCallback( (sim: EngineInstance, count: number, done: boolean, last: Snapshot) => { setStepCount(count); setSnap(last); setFinished(done); setTile(sim.getTile()); - if (!done || !preset) { + setKv(sim.getKVBuffers()); + if (!done) { setResult(null); return; } - const qz = quantize(preset.q, preset.k, preset.v); + const qz = quantize(inputs.q, inputs.k, inputs.v); const out = matrix(sim.readOutput(), n, 4).map((row) => row.map((v) => (v / 256) * qz.sv)); - const ref = attention(preset.q, preset.k, preset.v, settings.causal).out; - let maxErr = 0; - out.forEach((row, i) => row.forEach((v, c) => (maxErr = Math.max(maxErr, Math.abs(v - (ref[i]?.[c] ?? 0)))))); - const probs = - settings.mode === 1 ? matrix(sim.readProbabilities(), n, n).map((row) => row.map((v) => v / 256)) : null; - setResult({ out, maxErr, probs }); + const ref = attention(inputs.q, inputs.k, inputs.v, settings.causal); + const naive = settings.mode === 1; + setResult({ + out, + maxErr: maxAbsDiff(out, ref.out), + probs: naive ? matrix(sim.readProbabilities(), n, n).map((row) => row.map((v) => v / 256)) : ref.probs, + probsSource: naive ? "engine" : "float", + }); }, - [preset, n, settings], + [inputs, n, settings], ); /** Rebuild the run from reset and advance `target` clocks. Used by Start and by step-back. */ const seek = useCallback( (target: number) => { - if (!mod || !preset) return; + if (!mod) return; simRef.current?.delete(); - const qz = quantize(preset.q, preset.k, preset.v); + const qz = quantize(inputs.q, inputs.k, inputs.v); const sim = new mod.TinyAttnSim(); sim.configure(n, settings.qrows, settings.causal, settings.mode, settings.overlap, settings.latency, qz.cfgScale); sim.loadQKV(qz.q, qz.k, qz.v); @@ -129,7 +170,7 @@ export default function Visualizer() { } commit(sim, state.count, state.finished, last); }, - [mod, preset, n, settings, advance, commit], + [mod, inputs, n, settings, advance, commit], ); const stepOnce = () => { @@ -150,19 +191,26 @@ export default function Visualizer() { commit(sim, state.count, state.finished, last ?? sim.snapshot()); }; - const reset = () => { - simRef.current?.delete(); - simRef.current = null; - setStepCount(0); - setSnap(null); - setTile(null); - setFinished(false); - setResult(null); + const setPreset = (i: number) => { + reset(); + setEdits(null); + setSettings((s) => ({ + ...s, + preset: i, + causal: PRESETS[i]?.causal ?? false, + qrows: Math.min(s.qrows, PRESETS[i]?.q.length ?? 4), + })); }; - const setPreset = (i: number) => { + const editValue = (name: keyof Inputs, row: number, col: number, value: number) => { reset(); - setSettings((s) => ({ ...s, preset: i, causal: PRESETS[i]?.causal ?? false, qrows: Math.min(s.qrows, PRESETS[i]?.q.length ?? 4) })); + setEdits((prev) => { + const base = prev ?? inputs; + const copy = base[name].map((r) => r.slice()); + const target = copy[row]; + if (target) target[col] = value; + return { ...base, [name]: copy }; + }); }; // ---- derived view @@ -172,13 +220,16 @@ export default function Visualizer() { order.forEach((t, i) => orderIndex.set(`${t.qi},${t.kj}`, i)); const stateNames = settings.mode === 0 ? FLASH_STATES : NAIVE_STATES; const stateName = snap ? (stateNames[snap.ctrlState] ?? `#${snap.ctrlState}`) : "not started"; + const qblock = settings.mode === 1 ? 4 : settings.qrows; + const expected = + TRAFFIC[`${settings.mode === 1 ? "NAIVE" : "FLASH"}:${n}:${settings.causal ? 1 : 0}:${qblock}`] ?? null; + const cellClass = (qi: number, kj: number) => { if (settings.causal && kj > qi) return { bg: "transparent", label: "masked" }; const idx = orderIndex.get(`${qi},${kj}`); if (idx === undefined) return { bg: "transparent", label: "" }; - if (idx < tilesStarted - 1) return { bg: "var(--ok)", label: "done" }; if (idx === tilesStarted - 1 && snap?.busy) return { bg: "var(--accent)", label: "in flight" }; - if (idx === tilesStarted - 1) return { bg: "var(--ok)", label: "done" }; + if (idx < tilesStarted) return { bg: "var(--ok)", label: "done" }; return { bg: "var(--panel)", label: "" }; }; @@ -236,6 +287,22 @@ export default function Visualizer() {
+
+ + Edit Q, K and V {edits ? "(edited)" : `(preset: ${preset?.name ?? ""})`} + +
+

+ Values are floats; the browser quantizes them to INT8 the same way as the golden model. Editing resets the run. +

+ editValue("q", r, c, x)} /> + editValue("k", r, c, x)} /> + editValue("v", r, c, x)} /> + +
+
+
+
+

HBM traffic

+ +
+
{/* schedule */}
@@ -315,16 +387,16 @@ export default function Visualizer() {
) : ( -

- NAIVE tiles go through HBM, not the tile core, so the per-element S, Z and P are not shown here. - The row max m and sum l are shown below; the final probabilities P are in the matrix after the run. -

- )} - {settings.mode === 1 && ( -
- fmt(v)} /> - fmt(v)} /> -
+ <> +

+ NAIVE tiles go through HBM, not the tile core, so the per-element S, Z and P are not shown here. + The row max m and sum l are shown below; the final probabilities are in the heatmap after the run. +

+
+ fmt(v)} /> + fmt(v)} /> +
+ )}
@@ -334,6 +406,11 @@ export default function Visualizer() { +
+

On-chip K/V buffers

+ +
+ {/* result */} {result && (
@@ -342,24 +419,7 @@ export default function Visualizer() { Max |engine − float attention| = {result.maxErr.toFixed(4)} (INT8 quantization of Q, K and V dominates).

- {result.probs && ( -
-

Attention probabilities P (from HBM, NAIVE)

-
- {result.probs.flatMap((row, i) => - row.map((p, j) => ( -
- )), - )} -
- {labels.length === n && ( -
- {labels.map((l, i) => {i}:{l})} -
- )} -
- )} +
)} diff --git a/web/src/lib/state-schema.ts b/web/src/lib/state-schema.ts index faf9270..70a5009 100644 --- a/web/src/lib/state-schema.ts +++ b/web/src/lib/state-schema.ts @@ -26,6 +26,13 @@ export interface TileState { o: number[]; // 16 values, row-major (4 rows x 4 columns) } +/** K and V tile buffers. k[(buf*4 + row)*4 + col] is K[row][col] of buffer buf (int8). sel: buffer in use. */ +export interface KVBuffers { + sel: number; + k: number[]; // 32 + v: number[]; // 32 +} + export interface EngineInstance { reset(): void; configure(n: number, qrows: number, causal: boolean, mode: number, overlap: boolean, latency: number, scale: number): void; @@ -39,6 +46,7 @@ export interface EngineInstance { snapshot(): Snapshot; isDone(): boolean; getTile(): TileState; + getKVBuffers(): KVBuffers; delete(): void; } diff --git a/web/src/lib/traffic-table.ts b/web/src/lib/traffic-table.ts new file mode 100644 index 0000000..65fb794 --- /dev/null +++ b/web/src/lib/traffic-table.ts @@ -0,0 +1,300 @@ +// GENERATED by sim/golden/export_web_data.py from sim/golden/traffic.py. Do not edit. +// Key: `${mode}:${n}:${causal ? 1 : 0}:${qrows}`. rd / wr: HBM bytes; tiles: tile count. +export interface TrafficEntry { + rd: number; + wr: number; + tiles: number; +} + +export const TRAFFIC: Record = { + "FLASH:12:0:4": { + "rd": 336, + "tiles": 9, + "wr": 96 + }, + "FLASH:12:0:8": { + "rd": 240, + "tiles": 9, + "wr": 96 + }, + "FLASH:12:1:4": { + "rd": 240, + "tiles": 6, + "wr": 96 + }, + "FLASH:12:1:8": { + "rd": 208, + "tiles": 6, + "wr": 96 + }, + "FLASH:16:0:16": { + "rd": 192, + "tiles": 16, + "wr": 128 + }, + "FLASH:16:0:4": { + "rd": 576, + "tiles": 16, + "wr": 128 + }, + "FLASH:16:0:8": { + "rd": 320, + "tiles": 16, + "wr": 128 + }, + "FLASH:16:1:16": { + "rd": 192, + "tiles": 10, + "wr": 128 + }, + "FLASH:16:1:4": { + "rd": 384, + "tiles": 10, + "wr": 128 + }, + "FLASH:16:1:8": { + "rd": 256, + "tiles": 10, + "wr": 128 + }, + "FLASH:20:0:16": { + "rd": 400, + "tiles": 25, + "wr": 160 + }, + "FLASH:20:0:4": { + "rd": 880, + "tiles": 25, + "wr": 160 + }, + "FLASH:20:0:8": { + "rd": 560, + "tiles": 25, + "wr": 160 + }, + "FLASH:20:1:16": { + "rd": 368, + "tiles": 15, + "wr": 160 + }, + "FLASH:20:1:4": { + "rd": 560, + "tiles": 15, + "wr": 160 + }, + "FLASH:20:1:8": { + "rd": 432, + "tiles": 15, + "wr": 160 + }, + "FLASH:24:0:16": { + "rd": 480, + "tiles": 36, + "wr": 192 + }, + "FLASH:24:0:4": { + "rd": 1248, + "tiles": 36, + "wr": 192 + }, + "FLASH:24:0:8": { + "rd": 672, + "tiles": 36, + "wr": 192 + }, + "FLASH:24:1:16": { + "rd": 416, + "tiles": 21, + "wr": 192 + }, + "FLASH:24:1:4": { + "rd": 768, + "tiles": 21, + "wr": 192 + }, + "FLASH:24:1:8": { + "rd": 480, + "tiles": 21, + "wr": 192 + }, + "FLASH:28:0:16": { + "rd": 560, + "tiles": 49, + "wr": 224 + }, + "FLASH:28:0:4": { + "rd": 1680, + "tiles": 49, + "wr": 224 + }, + "FLASH:28:0:8": { + "rd": 1008, + "tiles": 49, + "wr": 224 + }, + "FLASH:28:1:16": { + "rd": 464, + "tiles": 28, + "wr": 224 + }, + "FLASH:28:1:4": { + "rd": 1008, + "tiles": 28, + "wr": 224 + }, + "FLASH:28:1:8": { + "rd": 720, + "tiles": 28, + "wr": 224 + }, + "FLASH:32:0:16": { + "rd": 640, + "tiles": 64, + "wr": 256 + }, + "FLASH:32:0:32": { + "rd": 384, + "tiles": 64, + "wr": 256 + }, + "FLASH:32:0:4": { + "rd": 2176, + "tiles": 64, + "wr": 256 + }, + "FLASH:32:0:8": { + "rd": 1152, + "tiles": 64, + "wr": 256 + }, + "FLASH:32:1:16": { + "rd": 512, + "tiles": 36, + "wr": 256 + }, + "FLASH:32:1:32": { + "rd": 384, + "tiles": 36, + "wr": 256 + }, + "FLASH:32:1:4": { + "rd": 1280, + "tiles": 36, + "wr": 256 + }, + "FLASH:32:1:8": { + "rd": 768, + "tiles": 36, + "wr": 256 + }, + "FLASH:4:0:4": { + "rd": 48, + "tiles": 1, + "wr": 32 + }, + "FLASH:4:1:4": { + "rd": 48, + "tiles": 1, + "wr": 32 + }, + "FLASH:8:0:4": { + "rd": 160, + "tiles": 4, + "wr": 64 + }, + "FLASH:8:0:8": { + "rd": 96, + "tiles": 4, + "wr": 64 + }, + "FLASH:8:1:4": { + "rd": 128, + "tiles": 3, + "wr": 64 + }, + "FLASH:8:1:8": { + "rd": 96, + "tiles": 3, + "wr": 64 + }, + "NAIVE:12:0:4": { + "rd": 1200, + "tiles": 9, + "wr": 672 + }, + "NAIVE:12:1:4": { + "rd": 816, + "tiles": 6, + "wr": 480 + }, + "NAIVE:16:0:4": { + "rd": 2112, + "tiles": 16, + "wr": 1152 + }, + "NAIVE:16:1:4": { + "rd": 1344, + "tiles": 10, + "wr": 768 + }, + "NAIVE:20:0:4": { + "rd": 3280, + "tiles": 25, + "wr": 1760 + }, + "NAIVE:20:1:4": { + "rd": 2000, + "tiles": 15, + "wr": 1120 + }, + "NAIVE:24:0:4": { + "rd": 4704, + "tiles": 36, + "wr": 2496 + }, + "NAIVE:24:1:4": { + "rd": 2784, + "tiles": 21, + "wr": 1536 + }, + "NAIVE:28:0:4": { + "rd": 6384, + "tiles": 49, + "wr": 3360 + }, + "NAIVE:28:1:4": { + "rd": 3696, + "tiles": 28, + "wr": 2016 + }, + "NAIVE:32:0:4": { + "rd": 8320, + "tiles": 64, + "wr": 4352 + }, + "NAIVE:32:1:4": { + "rd": 4736, + "tiles": 36, + "wr": 2560 + }, + "NAIVE:4:0:4": { + "rd": 144, + "tiles": 1, + "wr": 96 + }, + "NAIVE:4:1:4": { + "rd": 144, + "tiles": 1, + "wr": 96 + }, + "NAIVE:8:0:4": { + "rd": 544, + "tiles": 4, + "wr": 320 + }, + "NAIVE:8:1:4": { + "rd": 416, + "tiles": 3, + "wr": 256 + } +}; From 02a2c0027df45947bea01118a46d8e026fc79366 Mon Sep 17 00:00:00 2001 From: Dineth Hettiarachchi Date: Mon, 26 Oct 2026 06:33:34 +0530 Subject: [PATCH 3/3] build: commit the engine WASM and run web tests in CI web/public/tiny_attn.{mjs,wasm} are tracked again: the Vercel build has no Emscripten, so /app needs them in git. web CI now runs Vitest and the Playwright smoke tests against the committed engine. .gitignore re-includes the two files. --- .github/workflows/web.yml | 13 +++++++++++++ .gitignore | 3 ++- docs/ARCHITECTURE.md | 5 +++++ web/public/tiny_attn.mjs | 2 ++ web/public/tiny_attn.wasm | Bin 0 -> 212397 bytes 5 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 web/public/tiny_attn.mjs create mode 100755 web/public/tiny_attn.wasm diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml index 0e3cae1..7833d3a 100644 --- a/.github/workflows/web.yml +++ b/.github/workflows/web.yml @@ -38,3 +38,16 @@ jobs: - name: Build working-directory: web run: pnpm build + + - name: Unit tests (Vitest) + working-directory: web + run: pnpm test + + # The engine (web/public/tiny_attn.{mjs,wasm}) is committed, built by wasm.yml's toolchain; no Emscripten here. + - name: Install Playwright Chromium + working-directory: web + run: pnpm exec playwright install --with-deps chromium + + - name: Smoke tests (Playwright, production build) + working-directory: web + run: pnpm exec playwright test diff --git a/.gitignore b/.gitignore index a24903a..664ef94 100644 --- a/.gitignore +++ b/.gitignore @@ -23,10 +23,11 @@ sim/results.xml # WASM build intermediates and generated artifacts wasm/build/ -web/public/tiny_attn.mjs +!web/public/tiny_attn.mjs web/public/spike/ *.o *.wasm +!web/public/tiny_attn.wasm # Toolchain checkouts (built by .tools/*.sh, or symlinked to a sibling project's) .tools/* diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 07302af..868d4cf 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -386,3 +386,8 @@ Checks: `node wasm/test.mjs` (engine vs golden, now including the K/V buffer in `pnpm test` (quantization, tile order), `pnpm test:e2e`, `pnpm typecheck`, `pnpm lint`, `pnpm build`, `pytest sim/golden` (fixture, web-data and traffic-table freshness). The `astro dev` server hangs without output in this environment, so browser checks use `astro build` + `astro preview`. + +**Committed engine build.** `web/public/tiny_attn.{mjs,wasm}` are tracked: the Vercel build has no Emscripten, so `/app` +needs the files in git. Rebuild with `bash wasm/build.sh` after any RTL or harness change and commit them with it. CI does +not yet check that the committed files match a fresh build; the wasm workflow's `node wasm/test.mjs` checks behavior, not +the files. diff --git a/web/public/tiny_attn.mjs b/web/public/tiny_attn.mjs new file mode 100644 index 0000000..420f4cf --- /dev/null +++ b/web/public/tiny_attn.mjs @@ -0,0 +1,2 @@ +async function createTinyAttn(moduleArg={}){var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(ENVIRONMENT_IS_NODE){const{createRequire}=await(import("node:module"));var require=createRequire(import.meta.url)}var thisProgram="./this.program";var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"])return Module["locateFile"](path,scriptDirectory);return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("node:fs");if(_scriptName.startsWith("file:"))scriptDirectory=require("node:path").dirname(require("node:url").fileURLToPath(_scriptName))+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?void 0:"utf8");return ret};if(process.argv.length>1)thisProgram=process.argv[1].replace(/\\/g,"/");process.argv.slice(2);0}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok)return response.arrayBuffer();throw new Error(response.status+" : "+response.url)}}var out=console.log.bind(console);var err=console.error.bind(console);var ABORT=false;var isFileURI=filename=>filename.startsWith("file://");function getMemoryBuffer(){return wasmMemory.buffer}function updateMemoryViews(){if(HEAP8?.buffer?.resizable)return;var b=getMemoryBuffer();HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){var preRun=Module["preRun"];if(preRun){if(typeof preRun==="function")preRun=[preRun];onPreRuns.push(...preRun)}callRuntimeCallbacks(onPreRuns)}function initRuntime(){0;if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function postRun(){var postRun=Module["postRun"];if(postRun){if(typeof postRun==="function")postRun=[postRun];onPostRuns.push(...postRun)}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";throw new WebAssembly.RuntimeError(what)}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"])return locateFile("tiny_attn.wasm");return new URL("tiny_attn.wasm",import.meta.url).href}function getBinarySync(file){if(readBinary)return readBinary(file);throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(true)try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!ENVIRONMENT_IS_NODE)try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}var HEAP8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0)callbacks.shift()(Module)};var onPostRuns=[];var onPreRuns=[];var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder)return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr));var str="";while(idx>10,56320|ch&1023)}}return str};var HEAPU8;var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):"";var HEAPU32;class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var uncaughtExceptionCount=0;var __Unwind_RaiseException=()=>{abort()};var HEAP32;var syscallGetVarargI=()=>{var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(filename).slice(1),normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===".")parts.splice(i,1);else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot)for(;up;up--)parts.unshift("..");return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute)path=".";if(path&&trailingSlash)path+="/";return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir)return".";if(dir)dir=dir.slice(0,-1);return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("node:crypto");return view=>(nodeCrypto.randomFillSync(view),0)}return view=>(crypto.getRandomValues(view),0)};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!=="string")throw new TypeError("Arguments to path.resolve must be strings");else if(!path)return"";resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--)if(arr[end]!=="")break;if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else len+=3}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var buf=Buffer.alloc(256);var bytesRead=0;try{bytesRead=fs.readSync(process.stdin.fd,buf,0,256)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0)result=buf.toString("utf-8",0,bytesRead)}else if(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null)result+="\n"}if(!result)return null;FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty)throw new FS.ErrnoError(43);stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char)throw new FS.ErrnoError(60);var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else if(val!=0)tty.output.push(val)},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=()=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode))throw new FS.ErrnoError(63);MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=MEMFS.emptyFileContents??=new Uint8Array(0)}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){return node.contents.subarray(0,node.usedBytes)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents.length;if(prevCapacity>=newCapacity)return;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<1048576?2:1.125)>>>0);if(prevCapacity)newCapacity=Math.max(newCapacity,256);var oldContents=MEMFS.getFileDataAsTypedArray(node);node.contents=new Uint8Array(newCapacity);node.contents.set(oldContents)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;var oldContents=node.contents;node.contents=new Uint8Array(newSize);node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)));node.usedBytes=newSize},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode))attr.size=4096;else if(FS.isFile(node.mode))attr.size=node.usedBytes;else if(FS.isLink(node.mode))attr.size=node.link.length;else attr.size=0;attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"])if(attr[key]!=null)node[key]=attr[key];if(attr.size!==void 0)MEMFS.resizeFileStorage(node,attr.size)},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack=""}throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node&&FS.isDir(old_node.mode))for(var i in new_node.contents)throw new FS.ErrnoError(55);delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents)throw new FS.ErrnoError(55);delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,41471,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode))throw new FS.ErrnoError(28);return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);buffer.set(contents.subarray(position,position+size),offset);return size},write(stream,buffer,offset,length,position,canOwn){if(buffer.buffer===HEAP8.buffer)canOwn=false;if(!length)return 0;var node=stream.node;node.mtime=node.ctime=Date.now();if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length}else if(!node.usedBytes&&!position){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length}else{MEMFS.expandFileStorage(node,position+length);node.contents.set(buffer.subarray(offset,offset+length),position);node.usedBytes=Math.max(node.usedBytes,position+length)}return length},llseek(stream,offset,whence){var position=offset;if(whence===1)position+=stream.position;else if(whence===2)if(FS.isFile(stream.node.mode))position+=stream.node.usedBytes;if(position<0)throw new FS.ErrnoError(28);return position},mmap(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode))throw new FS.ErrnoError(43);var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===HEAP8.buffer){allocated=false;ptr=contents.byteOffset}else{allocated=true;ptr=mmapAlloc();if(!ptr)throw new FS.ErrnoError(48);if(contents){if(position>0||position+length{if(typeof str!=="string")return str;var flags={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[str];if(typeof flags==="undefined")throw new Error(`Unknown file open mode: ${str}`);return flags};var FS_fileDataToTypedArray=data=>{if(typeof data==="string")data=intArrayFromString(data,true);if(!data.subarray)data=new Uint8Array(data);return data};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=365;if(canWrite)mode|=146;return mode};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var dependenciesPromise=null;var resolveRunDependencies=async()=>dependenciesPromise;var runDependencies=0;var dependenciesPromiseResolve=null;var removeRunDependency=()=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(!runDependencies)dependenciesPromiseResolve()};var addRunDependency=()=>{if(!runDependencies)dependenciesPromise=new Promise(resolve=>dependenciesPromiseResolve=resolve);runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!=="undefined")Browser.init();for(var plugin of preloadPlugins)if(plugin["canHandle"](fullname))return plugin["handle"](byteArray,fullname);return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;getUniqueRunDependency(`cp ${fullname}`);addRunDependency();try{var byteArray=url;if(typeof url==="string")byteArray=await asyncLoad(url);byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile)FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}finally{removeRunDependency()}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:[],currentPath:"/",initialized:false,ignorePermissions:true,syncFSRequests:0,ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=365;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent)parent=this;this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}addListener(cb,exclusive=false){var entry={cb,exclusive};var listeners=this.listeners??=new Set;listeners.add(entry);return{listeners,entry}}notifyListeners(flags){if(!this.listeners)return;var excl;for(var entry of this.listeners)if(entry.exclusive)(excl||=[]).push(entry);else entry.cb(flags);if(excl){var i=(this.exclTurn||0)%excl.length;this.exclTurn=i+1;excl[i].cb(flags)}}},lookupPath(path,opts={}){if(!path)throw new FS.ErrnoError(44);opts.follow_mount??=true;if(!PATH.isAbs(path))path=FS.cwd()+"/"+path;linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node)FS.nameTable[hash]=node.name_next;else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode)throw new FS.ErrnoError(errCode);var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name)return node}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512)perms+="w";return perms},nodePermissions(node,perms){if(FS.ignorePermissions)return 0;if(perms.includes("r")&&!(node.mode&292))return 2;if(perms.includes("w")&&!(node.mode&146))return 2;if(perms.includes("x")&&!(node.mode&73))return 2;return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode))return 54;try{FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode)return errCode;if(isdir){if(!FS.isDir(node.mode))return 54;if(FS.isRoot(node)||FS.getPath(node)===FS.cwd())return 10}else if(FS.isDir(node.mode))return 31;return 0},mayOpen(node,flags){if(!node)return 44;if(FS.isLink(node.mode))return 32;var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode))if(mode!=="r"||flags&576)return 31;return FS.nodePermissions(node,mode)},checkOpExists(op,err){if(!op)throw new FS.ErrnoError(err);return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++)if(!FS.streams[fd])return fd;throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1)fd=FS.nextfd();stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);try{setattr(arg,attr)}catch(e){if(e instanceof RangeError)throw new FS.ErrnoError(22);throw e}},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1)err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length)doCallback(null)}for(var mount of mounts)if(mount.type.syncfs)mount.type.syncfs(mount,populate,done);else done(null)},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root)throw new FS.ErrnoError(10);else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node))throw new FS.ErrnoError(10);if(!FS.isDir(node.mode))throw new FS.ErrnoError(54)}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root)FS.root=mountRoot;else if(node){node.mounted=mount;if(node.mount)node.mount.mounts.push(mount)}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node))throw new FS.ErrnoError(28);var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);for(var[hash,current]of Object.entries(FS.nameTable))while(current){var next=current.name_next;if(mounts.includes(current.mount))FS.destroyNode(current);current=next}node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name)throw new FS.ErrnoError(28);if(name==="."||name==="..")throw new FS.ErrnoError(20);var errCode=FS.mayCreate(parent,name);if(errCode)throw new FS.ErrnoError(errCode);if(!parent.node_ops.mknod)throw new FS.ErrnoError(63);return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs)Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root));return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=1023;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode=511){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath))throw new FS.ErrnoError(44);var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent)throw new FS.ErrnoError(44);var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode)throw new FS.ErrnoError(errCode);if(!parent.node_ops.symlink)throw new FS.ErrnoError(63);return parent.node_ops.symlink(parent,newname,oldpath)},link(oldpath,newpath,flags){var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent)throw new FS.ErrnoError(44);var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode)throw new FS.ErrnoError(errCode);if(!parent.node_ops.link)throw new FS.ErrnoError(34);return parent.node_ops.link(parent,newname,oldpath,flags)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount)throw new FS.ErrnoError(75);var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!==".")throw new FS.ErrnoError(28);relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!==".")throw new FS.ErrnoError(55);var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node)return;var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode)throw new FS.ErrnoError(errCode);errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode)throw new FS.ErrnoError(errCode);if(!old_dir.node_ops.rename)throw new FS.ErrnoError(63);if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node))throw new FS.ErrnoError(10);if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode)throw new FS.ErrnoError(errCode)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);if(new_node)FS.hashRemoveNode(new_node);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode)throw new FS.ErrnoError(errCode);if(!parent.node_ops.rmdir)throw new FS.ErrnoError(63);if(FS.isMountpoint(node))throw new FS.ErrnoError(10);parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent)throw new FS.ErrnoError(44);var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode)throw new FS.ErrnoError(errCode);if(!parent.node_ops.unlink)throw new FS.ErrnoError(63);if(FS.isMountpoint(node))throw new FS.ErrnoError(10);parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link)throw new FS.ErrnoError(44);if(!link.node_ops.readlink)throw new FS.ErrnoError(28);return link.node_ops.readlink(link)},stat(path,dontFollow=false){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow=false){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&-4096,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow=false){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else node=path;FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow=false){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow=false){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else node=path;FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode))throw new FS.ErrnoError(31);if(!FS.isFile(node.mode))throw new FS.ErrnoError(28);var errCode=FS.nodePermissions(node,"w");if(errCode)throw new FS.ErrnoError(errCode);FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0)throw new FS.ErrnoError(28);var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else node=path;FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0)throw new FS.ErrnoError(28);FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime,dontFollow=false){var lookup=FS.lookupPath(path,{follow:!dontFollow});FS.doSetAttr(null,lookup.node,{atime,mtime,dontFollow})},open(path,flags,mode=438){if(path==="")throw new FS.ErrnoError(44);flags=FS_modeStringToFlags(flags);if(flags&64)mode=mode&4095|32768;else mode=0;var node;var isDirPath;if(typeof path==="object")node=path;else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64)if(node){if(flags&128)throw new FS.ErrnoError(20)}else if(isDirPath)throw new FS.ErrnoError(31);else{node=FS.mknod(path,mode|511,0);created=true}if(!node)throw new FS.ErrnoError(44);if(FS.isChrdev(node.mode))flags&=-513;if(flags&65536&&!FS.isDir(node.mode))throw new FS.ErrnoError(54);if(!created){var errCode=FS.mayOpen(node,flags);if(errCode)throw new FS.ErrnoError(errCode)}if(flags&512&&!created)FS.truncate(node,0);flags&=-131713;var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open)stream.stream_ops.open(stream);if(created)FS.chmod(node,mode&511);return stream},close(stream){if(FS.isClosed(stream))throw new FS.ErrnoError(8);if(stream.getdents)stream.getdents=null;stream.node?.notifyListeners(32);try{if(stream.stream_ops.close)stream.stream_ops.close(stream)}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream))throw new FS.ErrnoError(8);if(!stream.seekable||!stream.stream_ops.llseek)throw new FS.ErrnoError(70);if(whence!=0&&whence!=1&&whence!=2)throw new FS.ErrnoError(28);stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){if(length<0||position<0)throw new FS.ErrnoError(28);if(FS.isClosed(stream))throw new FS.ErrnoError(8);if((stream.flags&2097155)===1)throw new FS.ErrnoError(8);if(FS.isDir(stream.node.mode))throw new FS.ErrnoError(31);if(!stream.stream_ops.read)throw new FS.ErrnoError(28);var seeking=typeof position!=="undefined";if(!seeking)position=stream.position;else if(!stream.seekable)throw new FS.ErrnoError(70);var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0)throw new FS.ErrnoError(28);if(FS.isClosed(stream))throw new FS.ErrnoError(8);if((stream.flags&2097155)===0)throw new FS.ErrnoError(8);if(FS.isDir(stream.node.mode))throw new FS.ErrnoError(31);if(!stream.stream_ops.write)throw new FS.ErrnoError(28);if(stream.seekable&&stream.flags&1024)FS.llseek(stream,0,2);var seeking=typeof position!=="undefined";if(!seeking)position=stream.position;else if(!stream.seekable)throw new FS.ErrnoError(70);var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if(prot&2&&!(flags&2)&&(stream.flags&2097155)!==2)throw new FS.ErrnoError(2);if((stream.flags&2097155)===1)throw new FS.ErrnoError(2);if(!stream.stream_ops.mmap)throw new FS.ErrnoError(43);if(!length)throw new FS.ErrnoError(28);return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){if(!stream.stream_ops.msync)return 0;return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl)throw new FS.ErrnoError(59);return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags??=0;opts.encoding??="binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary")abort(`Invalid encoding type "${opts.encoding}"`);var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8")buf=UTF8ArrayToString(buf);FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags??=577;var stream=FS.open(path,opts.flags,opts.mode);data=FS_fileDataToTypedArray(data);FS.write(stream,data,0,data.byteLength,void 0,opts.canOwn);FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null)throw new FS.ErrnoError(44);if(!FS.isDir(lookup.node.mode))throw new FS.ErrnoError(54);var errCode=FS.nodePermissions(lookup.node,"x");if(errCode)throw new FS.ErrnoError(errCode);FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(!randomLeft){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input)FS.createDevice("/dev","stdin",input);else FS.symlink("/dev/tty","/dev/stdin");if(output)FS.createDevice("/dev","stdout",null,output);else FS.symlink("/dev/tty","/dev/stdout");if(error)FS.createDevice("/dev","stderr",null,error);else FS.symlink("/dev/tty1","/dev/stderr");FS.open("/dev/stdin",0);FS.open("/dev/stdout",1);FS.open("/dev/stderr",1)},staticInit(){FS.nameTable.length=4096;FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories()},init(input,output,error){FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;for(var stream of FS.streams)if(stream)FS.close(stream)},analyzePath(path,dontResolveLastLink=false){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent==="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent==="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){data=FS_fileDataToTypedArray(data);FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}},createDevice(parent,name,input,output){var path=PATH.join2(typeof parent==="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);FS.createDevice.major??=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open(stream){stream.seekable=false},close(stream){if(output?.buffer?.length)output(10)},read(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;ithis.length-1||idx<0)return;var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort(`Couldn't load ${url}. Status: ${xhr.status}`);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1048576;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort(`invalid range (${from}, ${to}) or no bytes requested!`);if(to>datalength-1)abort(`only ${datalength} bytes available! programmer error!`);var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range",`bytes=${from}-${to}`);xhr.responseType="arraybuffer";if(xhr.overrideMimeType)xhr.overrideMimeType("text/plain; charset=x-user-defined");xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort(`Couldn't load ${url}. Status: ${xhr.status}`);if(xhr.response!==void 0)return new Uint8Array(xhr.response||[]);return intArrayFromString(xhr.responseText??"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined")lazyArray.chunks[chunkNum]=doXHR(start,end);if(typeof lazyArray.chunks[chunkNum]==="undefined")abort("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown)this.cacheLength();return this._length}get chunkSize(){if(!this.lengthKnown)this.cacheLength();return this._chunkSize}}if(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else properties={isDevice:false,url};var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents)node.contents=properties.contents;else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};for(const[key,fn]of Object.entries(node.stream_ops))stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)};function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice)for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position)=>{FS.forceLoadFile(node);var ptr=mmapAlloc();if(!ptr)throw new FS.ErrnoError(48);writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var HEAP64;var SYSCALLS={currentUmask:18,calculateAt(dirfd,path,allowEmpty=false){if(PATH.isAbs(path))return path;var dir;if(dirfd===-100)dir=FS.cwd();else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty)throw new FS.ErrnoError(44);return dir}return dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode))throw new FS.ErrnoError(43);if(flags&2)return 0;var buffer=HEAPU8.subarray(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:void 0,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};var HEAP16;var AsciiToString=ptr=>{var str="";while(1){var ch=HEAPU8[ptr++];if(!ch)return str;str+=String.fromCharCode(ch)}};var awaitingDependencies={};var registeredTypes={};var typeDependencies={};class BindingError extends Error{constructor(message){super(message);this.name="BindingError"}}var throwBindingError=message=>{throw new BindingError(message)};function sharedRegisterType(rawType,registeredInstance,options={}){var name=registeredInstance.name;if(!rawType)throwBindingError(`type "${name}" must have a positive integer typeid pointer`);if(registeredTypes.hasOwnProperty(rawType))if(options.ignoreDuplicateRegistrations)return;else throwBindingError(`Cannot register type '${name}' twice`);registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function registerType(rawType,registeredInstance,options={}){return sharedRegisterType(rawType,registeredInstance,options)}var HEAPU16;var HEAPU64;var integerReadValueFromPointer=(name,width,signed)=>{switch(width){case 1:return signed?pointer=>HEAP8[pointer]:pointer=>HEAPU8[pointer];case 2:return signed?pointer=>HEAP16[pointer>>1]:pointer=>HEAPU16[pointer>>1];case 4:return signed?pointer=>HEAP32[pointer>>2]:pointer=>HEAPU32[pointer>>2];case 8:return signed?pointer=>HEAP64[pointer>>3]:pointer=>HEAPU64[pointer>>3];default:throw new TypeError(`invalid integer width (${width}): ${name}`)}};var shallowCopyInternalPointer=o=>({count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType});var throwInstanceAlreadyDeleted=obj=>{throwBindingError(function(handle){return handle.$$.ptrType.registeredClass.name}(obj)+" instance already deleted")};var finalizationRegistry=false;var detachFinalizer=()=>{};var runDestructor=$$=>{if($$.smartPtr)$$.smartPtrType.rawDestructor($$.smartPtr);else $$.ptrType.registeredClass.rawDestructor($$.ptr)};var releaseClassHandle=$$=>{$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete)runDestructor($$)};var attachFinalizer=handle=>{if(!globalThis.FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)};var deletionQueue=[];var flushPendingDeletes=()=>{while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}};function ClassHandle(){}var createNamedFunction=(name,func)=>Object.defineProperty(func,"name",{value:name});var registeredPointers={};var ensureOverloadTable=(proto,methodName,humanName)=>{if(void 0===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(...args){if(!proto[methodName].overloadTable.hasOwnProperty(args.length))throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`);return proto[methodName].overloadTable[args.length].apply(this,args)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}};var exposePublicSymbol=(name,value,numArguments)=>{if(Module.hasOwnProperty(name)){if(void 0===numArguments||void 0!==Module[name].overloadTable&&void 0!==Module[name].overloadTable[numArguments])throwBindingError(`Cannot register public name '${name}' twice`);ensureOverloadTable(Module,name,name);if(Module[name].overloadTable.hasOwnProperty(numArguments))throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`);Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var makeLegalFunctionName=name=>{name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=48&&f<=57)return`_${name}`;return name};function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}var upcastPointer=(ptr,ptrClass,desiredClass)=>{while(ptrClass!==desiredClass){if(!ptrClass.upcast)throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`);ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr};var embindRepr=v=>{if(v===null)return"null";var t=typeof v;if(t==="object"||t==="array"||t==="function")return v.toString();else return""+v};function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference)throwBindingError(`null is not a valid ${this.name}`);return 0}if(!handle.$$)throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`);if(!handle.$$.ptr)throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`);var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference)throwBindingError(`null is not a valid ${this.name}`);if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null)destructors.push(this.rawDestructor,ptr);return ptr}else return 0}if(!handle||!handle.$$)throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`);if(!handle.$$.ptr)throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.isConst&&handle.$$.ptrType.isConst)throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`);var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(void 0===handle.$$.smartPtr)throwBindingError("Passing raw pointer to smart pointer is illegal");switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this)ptr=handle.$$.smartPtr;else throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this)ptr=handle.$$.smartPtr;else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(()=>clonedHandle["delete"]()));if(destructors!==null)destructors.push(this.rawDestructor,ptr)}break;default:throwBindingError("Unsupported sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference)throwBindingError(`null is not a valid ${this.name}`);return 0}if(!handle.$$)throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`);if(!handle.$$.ptr)throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`);if(handle.$$.ptrType.isConst)throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`);var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function readPointer(pointer){return this.fromWireType(HEAPU32[pointer>>2])}var downcastPointer=(ptr,ptrClass,desiredClass)=>{if(ptrClass===desiredClass)return ptr;if(void 0===desiredClass.baseClass)return null;var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null)return null;return desiredClass.downcast(rv)};var registeredInstances={};var getBasestPointer=(class_,ptr)=>{if(ptr===void 0)throwBindingError("ptr should not be undefined");while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr};var getInheritedInstance=(class_,ptr)=>{ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]};class InternalError extends Error{constructor(message){super(message);this.name="InternalError"}}var throwInternalError=message=>{throw new InternalError(message)};var makeClassHandle=(prototype,record)=>{if(!record.ptrType||!record.ptr)throwInternalError("makeClassHandle requires ptr and ptrType");var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr)throwInternalError("Both smartPtrType and smartPtr must be specified");record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record,writable:true}}))};function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(void 0!==registeredInstance)if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}function makeDefaultHandle(){if(this.isSmartPointer)return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr});else return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr})}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord)return makeDefaultHandle.call(this);var toType;if(this.isConst)toType=registeredPointerRecord.constPointerType;else toType=registeredPointerRecord.pointerType;var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null)return makeDefaultHandle.call(this);if(this.isSmartPointer)return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr});else return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===void 0)if(isConst){this.toWireType=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this.toWireType=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else this.toWireType=genericPointerToWireType}var replacePublicSymbol=(name,value,numArguments)=>{if(!Module.hasOwnProperty(name))throwInternalError("Replacing nonexistent public symbol");if(void 0!==Module[name].overloadTable&&void 0!==numArguments)Module[name].overloadTable[numArguments]=value;else{Module[name]=value;Module[name].argCount=numArguments}};var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func)wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr);return func};var embind__requireFunction=(signature,rawFunction)=>{signature=AsciiToString(signature);var fp=function(){var rtn=getWasmTableEntry(rawFunction);return rtn}();if(typeof fp!=="function")throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`);return fp};class UnboundTypeError extends Error{}var getTypeName=type=>{var ptr=___getTypeName(type);var rv=AsciiToString(ptr);_free(ptr);return rv};var throwUnboundTypeError=(message,types)=>{var unboundTypes=[];var seen={};types.forEach(function visit(type){if(seen[type])return;if(registeredTypes[type])return;if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true});throw new UnboundTypeError(`${message}: `+unboundTypes.map(getTypeName).join([", "]))};var whenDependentTypesAreResolved=(myTypes,dependentTypes,getTypeConverters)=>{myTypes.forEach(type=>typeDependencies[type]=dependentTypes);function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length)throwInternalError("Mismatched type converter count");for(var i=0;i{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length)onComplete(typeConverters)})}if(0===unregisteredTypes.length)onComplete(typeConverters)};var heap32VectorToArray=(count,firstElement)=>{var array=[];for(var i=0;i>2]);return array};var runDestructors=destructors=>{while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}};function usesDestructorStack(argTypes){for(var i=1;i{signature=signature.trim();const argsIndex=signature.indexOf("(");if(argsIndex===-1)return signature;return signature.slice(0,argsIndex)};var emval_freelist=[];var emval_handles=[0,1,,1,null,1,true,1,false,1];var __emval_decref=handle=>{if(handle>9&&0===--emval_handles[handle+1]){emval_handles[handle];emval_handles[handle]=void 0;emval_freelist.push(handle)}};var Emval={toValue:handle=>{if(!handle)throwBindingError(`Cannot use deleted val. handle = ${handle}`);return emval_handles[handle]},toHandle:value=>{switch(value){case void 0:return 2;case null:return 4;case true:return 6;case false:return 8;default:{const handle=emval_freelist.pop()||emval_handles.length;emval_handles[handle]=value;emval_handles[handle+1]=1;return handle}}}};var EmValType={name:"emscripten::val",fromWireType:handle=>{var rv=Emval.toValue(handle);__emval_decref(handle);return rv},toWireType:(destructors,value)=>Emval.toHandle(value),readValueFromPointer:readPointer,destructorFunction:null};var HEAPF32;var HEAPF64;var floatReadValueFromPointer=(name,width)=>{switch(width){case 4:return function(pointer){return this.fromWireType(HEAPF32[pointer>>2])};case 8:return function(pointer){return this.fromWireType(HEAPF64[pointer>>3])};default:throw new TypeError(`invalid float width (${width}): ${name}`)}};var installIndexedIterator=(proto,sizeMethodName,getMethodName)=>{const makeIterator=(size,getValue)=>{let index=0;return{next(){if(index>=size)return{done:true};const current=index;index++;const value=getValue(current);return{value,done:false}},[Symbol.iterator](){return this}}};if(!proto[Symbol.iterator])proto[Symbol.iterator]=function(){const size=this[sizeMethodName]();return makeIterator(size,i=>this[getMethodName](i))}};var EmValOptionalType=Object.assign({optional:true},EmValType);var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var UTF16Decoder=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0;var UTF16ToString=(ptr,maxBytesToRead,ignoreNul)=>{var idx=ptr>>1;var endIdx=findStringEnd(HEAPU16,idx,maxBytesToRead/2,ignoreNul);if(endIdx-idx>16&&UTF16Decoder)return UTF16Decoder.decode(HEAPU16.subarray(idx,endIdx));var str="";for(var i=idx;i{if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr};var lengthBytesUTF16=str=>str.length*2;var UTF32ToString=(ptr,maxBytesToRead,ignoreNul)=>{var str="";var startIdx=ptr>>2;for(var i=0;!(i>=maxBytesToRead/4);i++){var utf32=HEAPU32[startIdx+i];if(!utf32&&!ignoreNul)break;str+=String.fromCodePoint(utf32)}return str};var stringToUTF32=(str,outPtr,maxBytesToWrite=2147483647)=>{if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i65535)i++;HEAP32[outPtr>>2]=codePoint;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr};var lengthBytesUTF32=str=>{var len=0;for(var i=0;i65535)i++;len+=4}return len};var emval_methodCallers=[];var emval_addMethodCaller=caller=>{var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id};var requireRegisteredType=(rawType,humanName)=>{var impl=registeredTypes[rawType];if(void 0===impl)throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`);return impl};var emval_lookupTypes=(argCount,argTypes)=>{var a=new Array(argCount);for(var i=0;i>2],`parameter ${i}`);return a};var emval_returnValue=(toReturnWire,destructorsRef,handle)=>{var destructors=[];var result=toReturnWire(destructors,handle);if(destructors.length)HEAPU32[destructorsRef>>2]=Emval.toHandle(destructors);return result};var emval_symbols={};var getStringOrSymbol=address=>{var symbol=emval_symbols[address];if(symbol===void 0)return AsciiToString(address);return symbol};var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var bigintToI53Checked=num=>num<-9007199254740992||num>9007199254740992?NaN:Number(num);var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var ENV={};var getExecutableName=()=>thisProgram;var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV)if(ENV[x]===void 0)delete env[x];else env[x]=ENV[x];var strings=[];for(var x in env)strings.push(`${x}=${env[x]}`);getEnvStrings.strings=strings}return getEnvStrings.strings};var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;try{var curr=FS.read(stream,HEAP8,ptr,len,offset)}catch(e){if(ret>0&&e instanceof FS.ErrnoError&&(e.errno==6||e.errno==6))break;throw e}if(curr<0)return-1;ret+=curr;if(curr{if(iovcnt==1)return FS.write(stream,HEAP8,HEAPU32[iov>>2],HEAPU32[iov+4>>2],offset);var total=0;for(var i=0,p=iov;i>2];var view=new Uint8Array(total);var voff=0;for(i=0;i>2];var len=HEAPU32[iov+4>>2];view.set(HEAPU8.subarray(ptr,ptr+len),voff);voff+=len}return FS.write(stream,view,0,total,offset)};FS.createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};FS.preloadFile=FS_preloadFile;FS.staticInit();(()=>{let proto=ClassHandle.prototype;Object.assign(proto,{isAliasOf(other){if(!(this instanceof ClassHandle))return false;if(!(other instanceof ClassHandle))return false;var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;other.$$=other.$$;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right},clone(){if(!this.$$.ptr)throwInstanceAlreadyDeleted(this);if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}},delete(){if(!this.$$.ptr)throwInstanceAlreadyDeleted(this);if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete)throwBindingError("Object already scheduled for deletion");detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=void 0;this.$$.ptr=void 0}},isDeleted(){return!this.$$.ptr},deleteLater(){if(!this.$$.ptr)throwInstanceAlreadyDeleted(this);if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete)throwBindingError("Object already scheduled for deletion");deletionQueue.push(this);if(deletionQueue.length===1&&void 0)(void 0)(flushPendingDeletes);this.$$.deleteScheduled=true;return this}});const symbolDispose=Symbol.dispose;if(symbolDispose)proto[symbolDispose]=proto["delete"]})();(()=>{Object.assign(RegisteredPointer.prototype,{getPointee(ptr){if(this.rawGetPointee)ptr=this.rawGetPointee(ptr);return ptr},destructor(ptr){this.rawDestructor?.(ptr)},readValueFromPointer:readPointer,fromWireType:RegisteredPointer_fromWireType})})();if(Module["noExitRuntime"])Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["arguments"])Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var preInit=Module["preInit"];if(preInit){if(typeof preInit==="function")Module["preInit"]=preInit=[preInit];while(preInit.length>0)preInit.shift()()}var _free,___getTypeName,_malloc,__emscripten_stack_restore,_emscripten_stack_get_current,wasmMemory,wasmTable;function assignWasmExports(wasmExports){_free=wasmExports["free"];___getTypeName=wasmExports["__getTypeName"];_malloc=wasmExports["malloc"];wasmExports["setThrew"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];wasmMemory=wasmExports["memory"];wasmTable=wasmExports["__indirect_function_table"]}var wasmImports={__assert_fail:(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]),__cxa_throw:(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);uncaughtExceptionCount++;__Unwind_RaiseException()},__syscall_fcntl64:function(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:var arg=syscallGetVarargI();if(arg<0)return-28;while(FS.streams[arg])arg++;var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd;case 1:case 2:return 0;case 3:return stream.flags;case 4:arg=syscallGetVarargI();stream.flags=stream.flags&-289793|arg&289792;return 0;case 12:arg=syscallGetVarargP();HEAP16[arg+0>>1]=2;return 0;case 13:case 14:return 0}return-28}catch(e){if(typeof FS==="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}},__syscall_ioctl:function(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:if(!stream.tty)return-59;return 0;case 21505:if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++)HEAP8[argp+i+17]=termios.c_cc[i]||0;return 0}return 0;case 21510:case 21511:case 21512:if(!stream.tty)return-59;return 0;case 21506:case 21507:case 21508:if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(i=0;i<32;i++)c_cc.push(HEAP8[argp+i+17]);return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0;case 21519:if(!stream.tty)return-59;argp=syscallGetVarargP();HEAP32[argp>>2]=0;return 0;case 21520:if(!stream.tty)return-59;return-28;case 21537:case 21531:argp=syscallGetVarargP();return FS.ioctl(stream,op,argp);case 21523:if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0;case 21524:if(!stream.tty)return-59;return 0;case 21515:if(!stream.tty)return-59;return 0;default:return-28}}catch(e){if(typeof FS==="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}},__syscall_openat:function(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;if(flags&64)mode&=~SYSCALLS.currentUmask;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS==="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}},_abort_js:()=>abort(""),_embind_register_bigint:(primitiveType,name,size,minRange,maxRange)=>{name=AsciiToString(name);const isUnsignedType=minRange===0n;let fromWireType=value=>value;if(isUnsignedType){const bitSize=size*8;fromWireType=value=>BigInt.asUintN(bitSize,value);maxRange=fromWireType(maxRange)}registerType(primitiveType,{name,fromWireType,toWireType:(destructors,value)=>{if(typeof value==="number")value=BigInt(value);return value},readValueFromPointer:integerReadValueFromPointer(name,size,!isUnsignedType),destructorFunction:null})},_embind_register_bool:(rawType,name,trueValue,falseValue)=>{name=AsciiToString(name);registerType(rawType,{name,fromWireType:function(wt){return!!wt},toWireType:function(destructors,o){return o?trueValue:falseValue},readValueFromPointer:function(pointer){return this.fromWireType(HEAPU8[pointer])},destructorFunction:null})},_embind_register_class:(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor)=>{name=AsciiToString(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);upcast&&=embind__requireFunction(upcastSignature,upcast);downcast&&=embind__requireFunction(downcastSignature,downcast);rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(`Cannot construct ${name} due to unbound types`,[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],base=>{base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else basePrototype=ClassHandle.prototype;var constructor=createNamedFunction(name,function(...args){if(Object.getPrototypeOf(this)!==instancePrototype)throw new BindingError(`Use 'new' to construct ${name}`);if(void 0===registeredClass.constructor_body)throw new BindingError(`${name} has no accessible constructor`);var body=registeredClass.constructor_body[args.length];if(void 0===body)throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`);return body.apply(this,args)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);if(registeredClass.baseClass){registeredClass.baseClass.__derivedClasses??=[];registeredClass.baseClass.__derivedClasses.push(registeredClass)}var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})},_embind_register_class_constructor:(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor)=>{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`constructor ${classType.name}`;if(void 0===classType.registeredClass.constructor_body)classType.registeredClass.constructor_body=[];if(void 0!==classType.registeredClass.constructor_body[argCount-1])throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount-1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`,rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})},_embind_register_class_function:(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync)=>{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=AsciiToString(methodName);methodName=getFunctionName(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`${classType.name}.${methodName}`;if(methodName.startsWith("@@"))methodName=Symbol[methodName.substring(2)];if(isPureVirtual)classType.registeredClass.pureVirtualFunctions.push(methodName);function unboundTypesHandler(){throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`,rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(void 0===method||void 0===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(void 0===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else proto[methodName].overloadTable[argCount-2]=memberFunction;return[]});return[]})},_embind_register_emval:rawType=>registerType(rawType,EmValType),_embind_register_float:(rawType,name,size)=>{name=AsciiToString(name);registerType(rawType,{name,fromWireType:value=>value,toWireType:(destructors,value)=>value,readValueFromPointer:floatReadValueFromPointer(name,size),destructorFunction:null})},_embind_register_integer:(primitiveType,name,size,minRange,maxRange)=>{name=AsciiToString(name);const isUnsignedType=minRange===0;let fromWireType=value=>value;if(isUnsignedType){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift;maxRange=fromWireType(maxRange)}registerType(primitiveType,{name,fromWireType,toWireType:(destructors,value)=>value,readValueFromPointer:integerReadValueFromPointer(name,size,minRange!==0),destructorFunction:null})},_embind_register_iterable:(rawClassType,rawElementType,sizeMethodName,getMethodName)=>{sizeMethodName=AsciiToString(sizeMethodName);getMethodName=AsciiToString(getMethodName);whenDependentTypesAreResolved([],[rawClassType,rawElementType],types=>{const classType=types[0];installIndexedIterator(classType.registeredClass.instancePrototype,sizeMethodName,getMethodName);return[]})},_embind_register_memory_view:(rawType,dataTypeIndex,name)=>{var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){var size=HEAPU32[handle>>2];var data=HEAPU32[handle+4>>2];return new TA(HEAP8.buffer,data,size)}name=AsciiToString(name);registerType(rawType,{name,fromWireType:decodeMemoryView,readValueFromPointer:decodeMemoryView},{ignoreDuplicateRegistrations:true})},_embind_register_optional:rawOptionalType=>{registerType(rawOptionalType,EmValOptionalType)},_embind_register_std_string:(rawType,name)=>{name=AsciiToString(name);registerType(rawType,{name,fromWireType(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(true)str=UTF8ToString(payload,length,true);else{str="";for(var i=0;i>2]=length;if(valueIsOfTypeString)if(true)stringToUTF8(value,ptr,length+1);else for(var i=0;i255){_free(base);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}else HEAPU8.set(value,ptr);if(destructors!==null)destructors.push(_free,base);return base},readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})},_embind_register_std_wstring:(rawType,charSize,name)=>{name=AsciiToString(name);var decodeString,encodeString,lengthBytesUTF;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16}else{decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32}registerType(rawType,{name,fromWireType:value=>{var length=HEAPU32[value>>2];var str=decodeString(value+4,length*charSize,true);_free(value);return str},toWireType:(destructors,value)=>{if(!(typeof value==="string"))throwBindingError(`Cannot pass non-string to C++ string type ${name}`);var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length/charSize;encodeString(value,ptr+4,length+charSize);if(destructors!==null)destructors.push(_free,ptr);return ptr},readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})},_embind_register_void:(rawType,name)=>{name=AsciiToString(name);registerType(rawType,{isVoid:true,name,fromWireType:()=>{},toWireType:()=>{}})},_emval_create_invoker:(argCount,argTypesPtr,kind)=>{var[retType,...argTypes]=emval_lookupTypes(argCount,argTypesPtr);var toReturnWire=retType.toWireType.bind(retType);var argFromPtr=argTypes.map(type=>type.readValueFromPointer.bind(type));argCount--;var captures={toValue:Emval.toValue};var args=argFromPtr.map((argFromPtr,i)=>{var captureName=`argFromPtr${i}`;captures[captureName]=argFromPtr;return`${captureName}(args${i?"+"+i*8:""})`});var functionBody;switch(kind){case 0:functionBody="toValue(handle)";break;case 2:functionBody="new (toValue(handle))";break;case 3:functionBody="";break;case 1:captures["getStringOrSymbol"]=getStringOrSymbol;functionBody="toValue(handle)[getStringOrSymbol(methodName)]";break}functionBody+=`(${args})`;if(!retType.isVoid){captures["toReturnWire"]=toReturnWire;captures["emval_returnValue"]=emval_returnValue;functionBody=`return emval_returnValue(toReturnWire, destructorsRef, ${functionBody})`}functionBody=`return function (handle, methodName, destructorsRef, args) {\n${functionBody}\n}`;var invokerFunction=new Function(Object.keys(captures),functionBody)(...Object.values(captures));var functionName=`methodCaller<(${argTypes.map(t=>t.name)}) => ${retType.name}>`;return emval_addMethodCaller(createNamedFunction(functionName,invokerFunction))},_emval_decref:__emval_decref,_emval_get_property:(handle,key)=>{handle=Emval.toValue(handle);key=Emval.toValue(key);return Emval.toHandle(handle[key])},_emval_incref:handle=>{if(handle>9)emval_handles[handle+1]+=1},_emval_invoke:(caller,handle,methodName,destructorsRef,args)=>emval_methodCallers[caller](handle,methodName,destructorsRef,args),_emval_new_array:()=>Emval.toHandle([]),_emval_new_cstring:v=>Emval.toHandle(getStringOrSymbol(v)),_emval_new_object:()=>Emval.toHandle({}),_emval_run_destructors:handle=>{var destructors=Emval.toValue(handle);runDestructors(destructors);__emval_decref(handle)},_emval_set_property:(handle,key,value)=>{handle=Emval.toValue(handle);key=Emval.toValue(key);value=Emval.toValue(value);handle[key]=value},_tzset_js:(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset>3]=BigInt(nsec);return 0},emscripten_get_heap_max:()=>getHeapMax(),emscripten_resize_heap:requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize)return false;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement)return true}return false},environ_get:(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,1/0)+1;envp+=4}return 0},environ_sizes_get:(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings)bufSize+=lengthBytesUTF8(string)+1;HEAPU32[penviron_buf_size>>2]=bufSize;return 0},fd_close:function(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}},fd_read:function(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}},fd_seek:function(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 22;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&!offset&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}},fd_write:function(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}};var wasmExports;wasmExports=await async function(){function receiveInstance(instance){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}var info=getWasmImports();var instantiateWasm=Module["instantiateWasm"];if(instantiateWasm)return new Promise(resolve=>{instantiateWasm(info,inst=>resolve(receiveInstance(inst)))});wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(void 0,wasmBinaryFile,info);var exports=function(result){return receiveInstance(result["instance"])}(result);return exports}();await async function(){preRun();if(runDependencies)await resolveRunDependencies();var setStatus=Module["setStatus"];if(setStatus){setStatus("Running...");await new Promise(resolve=>setTimeout(resolve,1));setTimeout(setStatus,1,"")}if(ABORT)return;initRuntime();Module["onRuntimeInitialized"]?.();postRun()}(); +;return Module}export default createTinyAttn; diff --git a/web/public/tiny_attn.wasm b/web/public/tiny_attn.wasm new file mode 100755 index 0000000000000000000000000000000000000000..3b8f7914d1e47f2a13b4e7a083cb919911da4337 GIT binary patch literal 212397 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