From 0ffcc0e90f99b4e0b00542830e514945984137ce Mon Sep 17 00:00:00 2001 From: carry0987 Date: Fri, 6 Feb 2026 17:18:07 +0800 Subject: [PATCH] Add incremental BLAKE3 hasher --- .../build/bundler/webbuf_blake3.d.ts | 46 +- .../build/bundler/webbuf_blake3.js | 3 +- .../build/bundler/webbuf_blake3_bg.js | 251 ++- .../build/bundler/webbuf_blake3_bg.wasm | Bin 30173 -> 34524 bytes .../build/bundler/webbuf_blake3_bg.wasm.d.ts | 20 +- rs/webbuf_blake3/src/lib.rs | 92 + ts/npm-webbuf-blake3/src/index.ts | 85 + .../webbuf_blake3.d.ts | 46 +- .../rs-webbuf_blake3-bundler/webbuf_blake3.js | 3 +- .../webbuf_blake3_bg.js | 251 ++- .../webbuf_blake3_bg.wasm | Bin 30173 -> 34524 bytes .../webbuf_blake3_bg.wasm.d.ts | 20 +- .../webbuf_blake3.d.ts | 46 +- .../webbuf_blake3.js | 3 +- .../webbuf_blake3_bg.js | 251 ++- .../webbuf_blake3_bg.wasm | Bin 30173 -> 34524 bytes .../webbuf_blake3_bg.wasm.js | 2 +- ts/npm-webbuf-blake3/test/index.test.ts | 122 +- ts/pnpm-lock.yaml | 2000 +++++++++++++++++ 19 files changed, 2867 insertions(+), 374 deletions(-) diff --git a/rs/webbuf_blake3/build/bundler/webbuf_blake3.d.ts b/rs/webbuf_blake3/build/bundler/webbuf_blake3.d.ts index 5d21967..bdd8485 100644 --- a/rs/webbuf_blake3/build/bundler/webbuf_blake3.d.ts +++ b/rs/webbuf_blake3/build/bundler/webbuf_blake3.d.ts @@ -1,18 +1,36 @@ /* tslint:disable */ /* eslint-disable */ -/** - * @param {Uint8Array} data - * @returns {Uint8Array} - */ + +export class Blake3Hasher { + free(): void; + [Symbol.dispose](): void; + /** + * Create a new incremental BLAKE3 hasher. + */ + constructor(); + /** + * Reset the hasher to its initial state, allowing reuse. + */ + reset(): void; + /** + * Feed data into the hasher. Can be called multiple times. + */ + update(data: Uint8Array): void; + /** + * Finalize the hash and return the 32-byte digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get an extended hash of the data fed so far. + */ + finalize(): Uint8Array; + /** + * Create a new incremental BLAKE3 keyed hasher (for MAC). + * Key must be exactly 32 bytes. + */ + static new_keyed(key: Uint8Array): Blake3Hasher; +} + export function blake3_hash(data: Uint8Array): Uint8Array; -/** - * @param {Uint8Array} data - * @returns {Uint8Array} - */ -export function double_blake3_hash(data: Uint8Array): Uint8Array; -/** - * @param {Uint8Array} key - * @param {Uint8Array} data - * @returns {Uint8Array} - */ + export function blake3_mac(key: Uint8Array, data: Uint8Array): Uint8Array; + +export function double_blake3_hash(data: Uint8Array): Uint8Array; diff --git a/rs/webbuf_blake3/build/bundler/webbuf_blake3.js b/rs/webbuf_blake3/build/bundler/webbuf_blake3.js index 25cd8f8..fe04c2d 100644 --- a/rs/webbuf_blake3/build/bundler/webbuf_blake3.js +++ b/rs/webbuf_blake3/build/bundler/webbuf_blake3.js @@ -1,4 +1,5 @@ import * as wasm from "./webbuf_blake3_bg.wasm"; export * from "./webbuf_blake3_bg.js"; import { __wbg_set_wasm } from "./webbuf_blake3_bg.js"; -__wbg_set_wasm(wasm); \ No newline at end of file +__wbg_set_wasm(wasm); +wasm.__wbindgen_start(); diff --git a/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.js b/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.js index 0e851bd..c678c23 100644 --- a/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.js +++ b/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.js @@ -3,15 +3,17 @@ export function __wbg_set_wasm(val) { wasm = val; } +function getArrayU8FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); +} -const lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder; - -let cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - -cachedTextDecoder.decode(); +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return decodeText(ptr, len); +} let cachedUint8ArrayMemory0 = null; - function getUint8ArrayMemory0() { if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); @@ -19,28 +21,6 @@ function getUint8ArrayMemory0() { return cachedUint8ArrayMemory0; } -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); -} - -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -let heap_next = heap.length; - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -let WASM_VECTOR_LEN = 0; - function passArray8ToWasm0(arg, malloc) { const ptr = malloc(arg.length * 1, 1) >>> 0; getUint8ArrayMemory0().set(arg, ptr / 1); @@ -48,81 +28,121 @@ function passArray8ToWasm0(arg, malloc) { return ptr; } -let cachedDataViewMemory0 = null; +function takeFromExternrefTable0(idx) { + const value = wasm.__wbindgen_externrefs.get(idx); + wasm.__externref_table_dealloc(idx); + return value; +} -function getDataViewMemory0() { - if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { - cachedDataViewMemory0 = new DataView(wasm.memory.buffer); +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); +cachedTextDecoder.decode(); +const MAX_SAFARI_DECODE_BYTES = 2146435072; +let numBytesDecoded = 0; +function decodeText(ptr, len) { + numBytesDecoded += len; + if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) { + cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + cachedTextDecoder.decode(); + numBytesDecoded = len; } - return cachedDataViewMemory0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); } -function getObject(idx) { return heap[idx]; } - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} +let WASM_VECTOR_LEN = 0; -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} +const Blake3HasherFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_blake3hasher_free(ptr >>> 0, 1)); -function getArrayU8FromWasm0(ptr, len) { - ptr = ptr >>> 0; - return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); -} /** - * @param {Uint8Array} data - * @returns {Uint8Array} + * Incremental BLAKE3 hasher that maintains state across multiple `update` calls. */ -export function blake3_hash(data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); +export class Blake3Hasher { + static __wrap(ptr) { + ptr = ptr >>> 0; + const obj = Object.create(Blake3Hasher.prototype); + obj.__wbg_ptr = ptr; + Blake3HasherFinalization.register(obj, obj.__wbg_ptr, obj); + return obj; + } + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + Blake3HasherFinalization.unregister(this); + return ptr; + } + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_blake3hasher_free(ptr, 0); + } + /** + * Create a new incremental BLAKE3 hasher. + */ + constructor() { + const ret = wasm.blake3hasher_new(); + this.__wbg_ptr = ret >>> 0; + Blake3HasherFinalization.register(this, this.__wbg_ptr, this); + return this; + } + /** + * Reset the hasher to its initial state, allowing reuse. + */ + reset() { + wasm.blake3hasher_reset(this.__wbg_ptr); + } + /** + * Feed data into the hasher. Can be called multiple times. + * @param {Uint8Array} data + */ + update(data) { const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); const len0 = WASM_VECTOR_LEN; - wasm.blake3_hash(retptr, ptr0, len0); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); + wasm.blake3hasher_update(this.__wbg_ptr, ptr0, len0); + } + /** + * Finalize the hash and return the 32-byte digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get an extended hash of the data fed so far. + * @returns {Uint8Array} + */ + finalize() { + const ret = wasm.blake3hasher_finalize(this.__wbg_ptr); + var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v1; + } + /** + * Create a new incremental BLAKE3 keyed hasher (for MAC). + * Key must be exactly 32 bytes. + * @param {Uint8Array} key + * @returns {Blake3Hasher} + */ + static new_keyed(key) { + const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.blake3hasher_new_keyed(ptr0, len0); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); + return Blake3Hasher.__wrap(ret[0]); } } +if (Symbol.dispose) Blake3Hasher.prototype[Symbol.dispose] = Blake3Hasher.prototype.free; /** * @param {Uint8Array} data * @returns {Uint8Array} */ -export function double_blake3_hash(data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.double_blake3_hash(retptr, ptr0, len0); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); - } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); +export function blake3_hash(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.blake3_hash(ptr0, len0); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); } + var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v2; } /** @@ -131,30 +151,51 @@ export function double_blake3_hash(data) { * @returns {Uint8Array} */ export function blake3_mac(key, data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - wasm.blake3_mac(retptr, ptr0, len0, ptr1, len1); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); - } - var v3 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v3; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); + const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len1 = WASM_VECTOR_LEN; + const ret = wasm.blake3_mac(ptr0, len0, ptr1, len1); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); } + var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v3; } -export function __wbindgen_string_new(arg0, arg1) { +/** + * @param {Uint8Array} data + * @returns {Uint8Array} + */ +export function double_blake3_hash(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.double_blake3_hash(ptr0, len0); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); + } + var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v2; +} + +export function __wbg___wbindgen_throw_dd24417ed36fc46e(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); +}; + +export function __wbindgen_cast_2241b6af4c4b2941(arg0, arg1) { + // Cast intrinsic for `Ref(String) -> Externref`. const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); + return ret; }; +export function __wbindgen_init_externref_table() { + const table = wasm.__wbindgen_externrefs; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); +}; diff --git a/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm b/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm index 345a4cea8a556994832da956ae7dcf3df299d667..c39d336d38b0ca5aa97666860777a2ae596d3be0 100644 GIT binary patch literal 34524 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 diff --git a/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm.d.ts b/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm.d.ts index 10eae96..730e46c 100644 --- a/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm.d.ts +++ b/rs/webbuf_blake3/build/bundler/webbuf_blake3_bg.wasm.d.ts @@ -1,9 +1,17 @@ /* tslint:disable */ /* eslint-disable */ export const memory: WebAssembly.Memory; -export function blake3_hash(a: number, b: number, c: number): void; -export function double_blake3_hash(a: number, b: number, c: number): void; -export function blake3_mac(a: number, b: number, c: number, d: number, e: number): void; -export function __wbindgen_add_to_stack_pointer(a: number): number; -export function __wbindgen_malloc(a: number, b: number): number; -export function __wbindgen_free(a: number, b: number, c: number): void; +export const __wbg_blake3hasher_free: (a: number, b: number) => void; +export const blake3_hash: (a: number, b: number) => [number, number, number, number]; +export const blake3_mac: (a: number, b: number, c: number, d: number) => [number, number, number, number]; +export const blake3hasher_finalize: (a: number) => [number, number]; +export const blake3hasher_new: () => number; +export const blake3hasher_new_keyed: (a: number, b: number) => [number, number, number]; +export const blake3hasher_reset: (a: number) => void; +export const blake3hasher_update: (a: number, b: number, c: number) => void; +export const double_blake3_hash: (a: number, b: number) => [number, number, number, number]; +export const __wbindgen_externrefs: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __externref_table_dealloc: (a: number) => void; +export const __wbindgen_start: () => void; diff --git a/rs/webbuf_blake3/src/lib.rs b/rs/webbuf_blake3/src/lib.rs index 3411b10..929f06d 100644 --- a/rs/webbuf_blake3/src/lib.rs +++ b/rs/webbuf_blake3/src/lib.rs @@ -28,6 +28,57 @@ pub fn blake3_mac(key: &[u8], data: &[u8]) -> Result, String> { Ok(hasher.finalize().as_bytes().to_vec()) } +/// Incremental BLAKE3 hasher that maintains state across multiple `update` calls. +#[cfg_attr(feature = "wasm", wasm_bindgen)] +pub struct Blake3Hasher { + inner: Hasher, +} + +#[cfg_attr(feature = "wasm", wasm_bindgen)] +impl Blake3Hasher { + /// Create a new incremental BLAKE3 hasher. + #[cfg_attr(feature = "wasm", wasm_bindgen(constructor))] + pub fn new() -> Self { + Self { + inner: Hasher::new(), + } + } + + /// Create a new incremental BLAKE3 keyed hasher (for MAC). + /// Key must be exactly 32 bytes. + pub fn new_keyed(key: &[u8]) -> Result { + let key32: [u8; 32] = key + .try_into() + .map_err(|_| "Key must be exactly 32 bytes".to_string())?; + Ok(Self { + inner: Hasher::new_keyed(&key32), + }) + } + + /// Feed data into the hasher. Can be called multiple times. + pub fn update(&mut self, data: &[u8]) { + self.inner.update(data); + } + + /// Finalize the hash and return the 32-byte digest. + /// This does NOT consume the hasher — you can continue calling `update` and + /// `finalize` again to get an extended hash of the data fed so far. + pub fn finalize(&self) -> Vec { + self.inner.finalize().as_bytes().to_vec() + } + + /// Reset the hasher to its initial state, allowing reuse. + pub fn reset(&mut self) { + self.inner.reset(); + } +} + +impl Default for Blake3Hasher { + fn default() -> Self { + Self::new() + } +} + #[cfg(test)] mod tests { use super::*; @@ -76,4 +127,45 @@ mod tests { assert_eq!(encode(mac), expected_mac_hex); } + + #[test] + fn test_incremental_hasher_matches_one_shot() { + let data = b"hello world this is a test of incremental hashing"; + let one_shot = blake3_hash(data).unwrap(); + + let mut hasher = Blake3Hasher::new(); + hasher.update(b"hello world "); + hasher.update(b"this is a test "); + hasher.update(b"of incremental hashing"); + let incremental = hasher.finalize(); + + assert_eq!(one_shot, incremental); + } + + #[test] + fn test_incremental_hasher_reset() { + let data = b"hello"; + let one_shot = blake3_hash(data).unwrap(); + + let mut hasher = Blake3Hasher::new(); + hasher.update(b"some garbage data"); + hasher.reset(); + hasher.update(b"hello"); + let result = hasher.finalize(); + + assert_eq!(one_shot, result); + } + + #[test] + fn test_incremental_keyed_hasher() { + let key_data = blake3_hash(b"key").unwrap(); + let mac_one_shot = blake3_mac(&key_data, b"data").unwrap(); + + let mut hasher = Blake3Hasher::new_keyed(&key_data).unwrap(); + hasher.update(b"da"); + hasher.update(b"ta"); + let mac_incremental = hasher.finalize(); + + assert_eq!(mac_one_shot, mac_incremental); + } } diff --git a/ts/npm-webbuf-blake3/src/index.ts b/ts/npm-webbuf-blake3/src/index.ts index bd00620..1ac743b 100644 --- a/ts/npm-webbuf-blake3/src/index.ts +++ b/ts/npm-webbuf-blake3/src/index.ts @@ -2,6 +2,7 @@ import { blake3_hash, double_blake3_hash, blake3_mac, + Blake3Hasher as WasmBlake3Hasher, } from "./rs-webbuf_blake3-inline-base64/webbuf_blake3.js"; import { WebBuf } from "@webbuf/webbuf"; import { FixedBuf } from "@webbuf/fixedbuf"; @@ -20,3 +21,87 @@ export function blake3Mac(key: FixedBuf<32>, message: WebBuf): FixedBuf<32> { const mac = blake3_mac(key.buf, message); return FixedBuf.fromBuf(32, WebBuf.fromUint8Array(mac)); } + +/** + * Incremental BLAKE3 hasher that maintains state across multiple `update` calls. + * Useful for hashing large files in chunks without loading the entire content + * into memory. + * + * @example + * ```ts + * const hasher = new Blake3Hasher(); + * hasher.update(chunk1); + * hasher.update(chunk2); + * const hash = hasher.finalize(); + * hasher.dispose(); // free WASM memory + * ``` + */ +export class Blake3Hasher { + private inner: WasmBlake3Hasher; + + constructor() { + this.inner = new WasmBlake3Hasher(); + } + + /** + * Create a new keyed (MAC) incremental hasher. + * Key must be exactly 32 bytes. + */ + static newKeyed(key: FixedBuf<32>): Blake3Hasher { + const hasher = Object.create(Blake3Hasher.prototype) as Blake3Hasher; + hasher.inner = WasmBlake3Hasher.new_keyed(key.buf); + return hasher; + } + + /** + * Feed data into the hasher. Can be called multiple times. + */ + update(data: WebBuf): this { + this.inner.update(data); + return this; + } + + /** + * Finalize and return the 32-byte BLAKE3 digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get the hash of all data fed so far. + */ + finalize(): FixedBuf<32> { + const hash = this.inner.finalize(); + return FixedBuf.fromBuf(32, WebBuf.fromUint8Array(hash)); + } + + /** + * Reset the hasher to its initial state for reuse. + */ + reset(): this { + this.inner.reset(); + return this; + } + + /** + * Free the underlying WASM memory. Call this when done with the hasher. + */ + dispose(): void { + this.inner.free(); + } + + [Symbol.dispose](): void { + this.dispose(); + } +} + +/** + * Create a new incremental BLAKE3 hasher. + */ +export function createBlake3Hasher(): Blake3Hasher { + return new Blake3Hasher(); +} + +/** + * Create a new keyed (MAC) incremental BLAKE3 hasher. + * Key must be exactly 32 bytes. + */ +export function createBlake3KeyedHasher(key: FixedBuf<32>): Blake3Hasher { + return Blake3Hasher.newKeyed(key); +} diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.d.ts b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.d.ts index 5d21967..bdd8485 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.d.ts +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.d.ts @@ -1,18 +1,36 @@ /* tslint:disable */ /* eslint-disable */ -/** - * @param {Uint8Array} data - * @returns {Uint8Array} - */ + +export class Blake3Hasher { + free(): void; + [Symbol.dispose](): void; + /** + * Create a new incremental BLAKE3 hasher. + */ + constructor(); + /** + * Reset the hasher to its initial state, allowing reuse. + */ + reset(): void; + /** + * Feed data into the hasher. Can be called multiple times. + */ + update(data: Uint8Array): void; + /** + * Finalize the hash and return the 32-byte digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get an extended hash of the data fed so far. + */ + finalize(): Uint8Array; + /** + * Create a new incremental BLAKE3 keyed hasher (for MAC). + * Key must be exactly 32 bytes. + */ + static new_keyed(key: Uint8Array): Blake3Hasher; +} + export function blake3_hash(data: Uint8Array): Uint8Array; -/** - * @param {Uint8Array} data - * @returns {Uint8Array} - */ -export function double_blake3_hash(data: Uint8Array): Uint8Array; -/** - * @param {Uint8Array} key - * @param {Uint8Array} data - * @returns {Uint8Array} - */ + export function blake3_mac(key: Uint8Array, data: Uint8Array): Uint8Array; + +export function double_blake3_hash(data: Uint8Array): Uint8Array; diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.js b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.js index 25cd8f8..fe04c2d 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.js +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3.js @@ -1,4 +1,5 @@ import * as wasm from "./webbuf_blake3_bg.wasm"; export * from "./webbuf_blake3_bg.js"; import { __wbg_set_wasm } from "./webbuf_blake3_bg.js"; -__wbg_set_wasm(wasm); \ No newline at end of file +__wbg_set_wasm(wasm); +wasm.__wbindgen_start(); diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.js b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.js index 0e851bd..c678c23 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.js +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.js @@ -3,15 +3,17 @@ export function __wbg_set_wasm(val) { wasm = val; } +function getArrayU8FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); +} -const lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder; - -let cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - -cachedTextDecoder.decode(); +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return decodeText(ptr, len); +} let cachedUint8ArrayMemory0 = null; - function getUint8ArrayMemory0() { if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); @@ -19,28 +21,6 @@ function getUint8ArrayMemory0() { return cachedUint8ArrayMemory0; } -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); -} - -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -let heap_next = heap.length; - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -let WASM_VECTOR_LEN = 0; - function passArray8ToWasm0(arg, malloc) { const ptr = malloc(arg.length * 1, 1) >>> 0; getUint8ArrayMemory0().set(arg, ptr / 1); @@ -48,81 +28,121 @@ function passArray8ToWasm0(arg, malloc) { return ptr; } -let cachedDataViewMemory0 = null; +function takeFromExternrefTable0(idx) { + const value = wasm.__wbindgen_externrefs.get(idx); + wasm.__externref_table_dealloc(idx); + return value; +} -function getDataViewMemory0() { - if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { - cachedDataViewMemory0 = new DataView(wasm.memory.buffer); +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); +cachedTextDecoder.decode(); +const MAX_SAFARI_DECODE_BYTES = 2146435072; +let numBytesDecoded = 0; +function decodeText(ptr, len) { + numBytesDecoded += len; + if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) { + cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + cachedTextDecoder.decode(); + numBytesDecoded = len; } - return cachedDataViewMemory0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); } -function getObject(idx) { return heap[idx]; } - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} +let WASM_VECTOR_LEN = 0; -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} +const Blake3HasherFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_blake3hasher_free(ptr >>> 0, 1)); -function getArrayU8FromWasm0(ptr, len) { - ptr = ptr >>> 0; - return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); -} /** - * @param {Uint8Array} data - * @returns {Uint8Array} + * Incremental BLAKE3 hasher that maintains state across multiple `update` calls. */ -export function blake3_hash(data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); +export class Blake3Hasher { + static __wrap(ptr) { + ptr = ptr >>> 0; + const obj = Object.create(Blake3Hasher.prototype); + obj.__wbg_ptr = ptr; + Blake3HasherFinalization.register(obj, obj.__wbg_ptr, obj); + return obj; + } + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + Blake3HasherFinalization.unregister(this); + return ptr; + } + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_blake3hasher_free(ptr, 0); + } + /** + * Create a new incremental BLAKE3 hasher. + */ + constructor() { + const ret = wasm.blake3hasher_new(); + this.__wbg_ptr = ret >>> 0; + Blake3HasherFinalization.register(this, this.__wbg_ptr, this); + return this; + } + /** + * Reset the hasher to its initial state, allowing reuse. + */ + reset() { + wasm.blake3hasher_reset(this.__wbg_ptr); + } + /** + * Feed data into the hasher. Can be called multiple times. + * @param {Uint8Array} data + */ + update(data) { const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); const len0 = WASM_VECTOR_LEN; - wasm.blake3_hash(retptr, ptr0, len0); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); + wasm.blake3hasher_update(this.__wbg_ptr, ptr0, len0); + } + /** + * Finalize the hash and return the 32-byte digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get an extended hash of the data fed so far. + * @returns {Uint8Array} + */ + finalize() { + const ret = wasm.blake3hasher_finalize(this.__wbg_ptr); + var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v1; + } + /** + * Create a new incremental BLAKE3 keyed hasher (for MAC). + * Key must be exactly 32 bytes. + * @param {Uint8Array} key + * @returns {Blake3Hasher} + */ + static new_keyed(key) { + const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.blake3hasher_new_keyed(ptr0, len0); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); + return Blake3Hasher.__wrap(ret[0]); } } +if (Symbol.dispose) Blake3Hasher.prototype[Symbol.dispose] = Blake3Hasher.prototype.free; /** * @param {Uint8Array} data * @returns {Uint8Array} */ -export function double_blake3_hash(data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.double_blake3_hash(retptr, ptr0, len0); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); - } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); +export function blake3_hash(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.blake3_hash(ptr0, len0); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); } + var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v2; } /** @@ -131,30 +151,51 @@ export function double_blake3_hash(data) { * @returns {Uint8Array} */ export function blake3_mac(key, data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - wasm.blake3_mac(retptr, ptr0, len0, ptr1, len1); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); - } - var v3 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v3; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); + const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len1 = WASM_VECTOR_LEN; + const ret = wasm.blake3_mac(ptr0, len0, ptr1, len1); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); } + var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v3; } -export function __wbindgen_string_new(arg0, arg1) { +/** + * @param {Uint8Array} data + * @returns {Uint8Array} + */ +export function double_blake3_hash(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.double_blake3_hash(ptr0, len0); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); + } + var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v2; +} + +export function __wbg___wbindgen_throw_dd24417ed36fc46e(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); +}; + +export function __wbindgen_cast_2241b6af4c4b2941(arg0, arg1) { + // Cast intrinsic for `Ref(String) -> Externref`. const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); + return ret; }; +export function __wbindgen_init_externref_table() { + const table = wasm.__wbindgen_externrefs; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); +}; diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm index 345a4cea8a556994832da956ae7dcf3df299d667..c39d336d38b0ca5aa97666860777a2ae596d3be0 100644 GIT binary patch literal 34524 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 diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm.d.ts b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm.d.ts index 10eae96..730e46c 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm.d.ts +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-bundler/webbuf_blake3_bg.wasm.d.ts @@ -1,9 +1,17 @@ /* tslint:disable */ /* eslint-disable */ export const memory: WebAssembly.Memory; -export function blake3_hash(a: number, b: number, c: number): void; -export function double_blake3_hash(a: number, b: number, c: number): void; -export function blake3_mac(a: number, b: number, c: number, d: number, e: number): void; -export function __wbindgen_add_to_stack_pointer(a: number): number; -export function __wbindgen_malloc(a: number, b: number): number; -export function __wbindgen_free(a: number, b: number, c: number): void; +export const __wbg_blake3hasher_free: (a: number, b: number) => void; +export const blake3_hash: (a: number, b: number) => [number, number, number, number]; +export const blake3_mac: (a: number, b: number, c: number, d: number) => [number, number, number, number]; +export const blake3hasher_finalize: (a: number) => [number, number]; +export const blake3hasher_new: () => number; +export const blake3hasher_new_keyed: (a: number, b: number) => [number, number, number]; +export const blake3hasher_reset: (a: number) => void; +export const blake3hasher_update: (a: number, b: number, c: number) => void; +export const double_blake3_hash: (a: number, b: number) => [number, number, number, number]; +export const __wbindgen_externrefs: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __externref_table_dealloc: (a: number) => void; +export const __wbindgen_start: () => void; diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.d.ts b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.d.ts index 5d21967..bdd8485 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.d.ts +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.d.ts @@ -1,18 +1,36 @@ /* tslint:disable */ /* eslint-disable */ -/** - * @param {Uint8Array} data - * @returns {Uint8Array} - */ + +export class Blake3Hasher { + free(): void; + [Symbol.dispose](): void; + /** + * Create a new incremental BLAKE3 hasher. + */ + constructor(); + /** + * Reset the hasher to its initial state, allowing reuse. + */ + reset(): void; + /** + * Feed data into the hasher. Can be called multiple times. + */ + update(data: Uint8Array): void; + /** + * Finalize the hash and return the 32-byte digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get an extended hash of the data fed so far. + */ + finalize(): Uint8Array; + /** + * Create a new incremental BLAKE3 keyed hasher (for MAC). + * Key must be exactly 32 bytes. + */ + static new_keyed(key: Uint8Array): Blake3Hasher; +} + export function blake3_hash(data: Uint8Array): Uint8Array; -/** - * @param {Uint8Array} data - * @returns {Uint8Array} - */ -export function double_blake3_hash(data: Uint8Array): Uint8Array; -/** - * @param {Uint8Array} key - * @param {Uint8Array} data - * @returns {Uint8Array} - */ + export function blake3_mac(key: Uint8Array, data: Uint8Array): Uint8Array; + +export function double_blake3_hash(data: Uint8Array): Uint8Array; diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.js b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.js index 11786ed..0df2dce 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.js +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3.js @@ -1,4 +1,5 @@ import { wasm } from "./webbuf_blake3_bg.wasm.js"; export * from "./webbuf_blake3_bg.js"; import { __wbg_set_wasm } from "./webbuf_blake3_bg.js"; -__wbg_set_wasm(wasm); \ No newline at end of file +__wbg_set_wasm(wasm); +wasm.__wbindgen_start(); diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.js b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.js index 0e851bd..c678c23 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.js +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.js @@ -3,15 +3,17 @@ export function __wbg_set_wasm(val) { wasm = val; } +function getArrayU8FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); +} -const lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder; - -let cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - -cachedTextDecoder.decode(); +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return decodeText(ptr, len); +} let cachedUint8ArrayMemory0 = null; - function getUint8ArrayMemory0() { if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); @@ -19,28 +21,6 @@ function getUint8ArrayMemory0() { return cachedUint8ArrayMemory0; } -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); -} - -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -let heap_next = heap.length; - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -let WASM_VECTOR_LEN = 0; - function passArray8ToWasm0(arg, malloc) { const ptr = malloc(arg.length * 1, 1) >>> 0; getUint8ArrayMemory0().set(arg, ptr / 1); @@ -48,81 +28,121 @@ function passArray8ToWasm0(arg, malloc) { return ptr; } -let cachedDataViewMemory0 = null; +function takeFromExternrefTable0(idx) { + const value = wasm.__wbindgen_externrefs.get(idx); + wasm.__externref_table_dealloc(idx); + return value; +} -function getDataViewMemory0() { - if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { - cachedDataViewMemory0 = new DataView(wasm.memory.buffer); +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); +cachedTextDecoder.decode(); +const MAX_SAFARI_DECODE_BYTES = 2146435072; +let numBytesDecoded = 0; +function decodeText(ptr, len) { + numBytesDecoded += len; + if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) { + cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + cachedTextDecoder.decode(); + numBytesDecoded = len; } - return cachedDataViewMemory0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); } -function getObject(idx) { return heap[idx]; } - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} +let WASM_VECTOR_LEN = 0; -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} +const Blake3HasherFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_blake3hasher_free(ptr >>> 0, 1)); -function getArrayU8FromWasm0(ptr, len) { - ptr = ptr >>> 0; - return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); -} /** - * @param {Uint8Array} data - * @returns {Uint8Array} + * Incremental BLAKE3 hasher that maintains state across multiple `update` calls. */ -export function blake3_hash(data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); +export class Blake3Hasher { + static __wrap(ptr) { + ptr = ptr >>> 0; + const obj = Object.create(Blake3Hasher.prototype); + obj.__wbg_ptr = ptr; + Blake3HasherFinalization.register(obj, obj.__wbg_ptr, obj); + return obj; + } + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + Blake3HasherFinalization.unregister(this); + return ptr; + } + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_blake3hasher_free(ptr, 0); + } + /** + * Create a new incremental BLAKE3 hasher. + */ + constructor() { + const ret = wasm.blake3hasher_new(); + this.__wbg_ptr = ret >>> 0; + Blake3HasherFinalization.register(this, this.__wbg_ptr, this); + return this; + } + /** + * Reset the hasher to its initial state, allowing reuse. + */ + reset() { + wasm.blake3hasher_reset(this.__wbg_ptr); + } + /** + * Feed data into the hasher. Can be called multiple times. + * @param {Uint8Array} data + */ + update(data) { const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); const len0 = WASM_VECTOR_LEN; - wasm.blake3_hash(retptr, ptr0, len0); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); + wasm.blake3hasher_update(this.__wbg_ptr, ptr0, len0); + } + /** + * Finalize the hash and return the 32-byte digest. + * This does NOT consume the hasher — you can continue calling `update` and + * `finalize` again to get an extended hash of the data fed so far. + * @returns {Uint8Array} + */ + finalize() { + const ret = wasm.blake3hasher_finalize(this.__wbg_ptr); + var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v1; + } + /** + * Create a new incremental BLAKE3 keyed hasher (for MAC). + * Key must be exactly 32 bytes. + * @param {Uint8Array} key + * @returns {Blake3Hasher} + */ + static new_keyed(key) { + const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.blake3hasher_new_keyed(ptr0, len0); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); + return Blake3Hasher.__wrap(ret[0]); } } +if (Symbol.dispose) Blake3Hasher.prototype[Symbol.dispose] = Blake3Hasher.prototype.free; /** * @param {Uint8Array} data * @returns {Uint8Array} */ -export function double_blake3_hash(data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.double_blake3_hash(retptr, ptr0, len0); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); - } - var v2 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); +export function blake3_hash(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.blake3_hash(ptr0, len0); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); } + var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v2; } /** @@ -131,30 +151,51 @@ export function double_blake3_hash(data) { * @returns {Uint8Array} */ export function blake3_mac(key, data) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - wasm.blake3_mac(retptr, ptr0, len0, ptr1, len1); - var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); - var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); - var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true); - var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true); - if (r3) { - throw takeObject(r2); - } - var v3 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - return v3; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); + const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len1 = WASM_VECTOR_LEN; + const ret = wasm.blake3_mac(ptr0, len0, ptr1, len1); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); } + var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v3; } -export function __wbindgen_string_new(arg0, arg1) { +/** + * @param {Uint8Array} data + * @returns {Uint8Array} + */ +export function double_blake3_hash(data) { + const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.double_blake3_hash(ptr0, len0); + if (ret[3]) { + throw takeFromExternrefTable0(ret[2]); + } + var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + return v2; +} + +export function __wbg___wbindgen_throw_dd24417ed36fc46e(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); +}; + +export function __wbindgen_cast_2241b6af4c4b2941(arg0, arg1) { + // Cast intrinsic for `Ref(String) -> Externref`. const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); + return ret; }; +export function __wbindgen_init_externref_table() { + const table = wasm.__wbindgen_externrefs; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); +}; diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm index 345a4cea8a556994832da956ae7dcf3df299d667..c39d336d38b0ca5aa97666860777a2ae596d3be0 100644 GIT binary patch literal 34524 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 diff --git a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm.js b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm.js index 8a12a22..b7dcf71 100644 --- a/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm.js +++ b/ts/npm-webbuf-blake3/src/rs-webbuf_blake3-inline-base64/webbuf_blake3_bg.wasm.js @@ -1,6 +1,6 @@ import * as webbuf_blake3_bg from './webbuf_blake3_bg.js'; -const wasmBase64 = "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AhQhCCADKAIMIQ8gAygCBCELIAMoAgAhDSAAIAApA4ABEAUgACgCkAEiDkE3SQRAIAAgDkEFdGoiBEGwAWogBzYCACAEQawBaiAGNgIAIARBqAFqIAg2AgAgBEGkAWogCTYCACAEQaABaiAPNgIAIARBnAFqIAw2AgAgBEGYAWogCzYCACAEQZQBaiANNgIAIAAgDkEBajYCkAEgE0IANwMAIBRCADcDACAVQgA3AwAgF0IANwMAIBhCADcDACAZQgA3AwAgGkIANwMAIBAgAEEIaikDADcDACARIABBEGopAwA3AwAgEiAAQRhqKQMANwMAIANCADcDcCADIAApAwA3A7ABIAApA4ABIRwgBSAbQeAAEDkaIABBADsBiAEgACAcQgF8NwOAASABIApqIQEMAQsgAyAHNgKMASADIAY2AogBIAMgCDYChAEgAyAJNgKAASADIA82AnwgAyAMNgJ4IAMgCzYCdCADIA02AnAgA0HwAGpBvITAAEGIg8AAEBoACyACQYEITwRAIABBlAFqIQ8gACkDgAEhHCADQUBrIQwgA0GwAWohCSADQZABaiEKA0AgHEIKhiEdQX8gAkEBdmd2QQFqIQQDQCAEIgVBAXYhBCAdIAVBAWutg0IAUg0ACyAFQQp2rSEdAkAgBUGBCE8EQCACIAVJDQUgA0HwAGohBiAALQCKASELIwBB4ABrIgQkACAEQThqIg1CADcDACAEQTBqIg5CADcDACAEQShqIhBCADcDACAEQSBqIhFCADcDACAEQRhqIhJCADcDACAEQRBqIhNCADcDACAEQQhqIhRCADcDACAEQgA3AwAgASAFIAAgHCALIARBwAAQBCEHIARB2ABqQgA3AwAgBEHQAGpCADcDACAEQcgAakIANwMAIARCADcDQAJAAkACQAJAIAdBA08EQANAIAdBBXQiB0HBAE8NAiAEIAcgACALIARBQGsiFUEgEAkiB0EFdCIIQcEATw0DIAhBIU8NBCAEIBUgCBA5GiAHQQJLDQALCyAGIAQpAwA3AAAgBkE4aiANKQMANwAAIAZBMGogDikDADcAACAGQShqIBApAwA3AAAgBkEgaiARKQMANwAAIAZBGGogEikDADcAACAGQRBqIBMpAwA3AAAgBkEIaiAUKQMANwAAIARB4ABqJAAMAwsgB0HAAEG4gsAAEB0ACyAIQcAAQciCwAAQHQALIAhBIEHYgsAAEB0ACyAAIAApA4ABEAUgACgCkAEiBkE3Tw0GIA8gBkEFdGoiBEEYaiADQYgBaikAADcAACAEQRBqIANBgAFqKQAANwAAIARBCGogA0H4AGopAAA3AAAgBCADKQBwNwAAIAAgBkEBajYCkAEgACAAKQOAASAdQgGIfBAFIAAoApABIgZBN08NByAPIAZBBXRqIgRBGGogCkEYaikAADcAACAEIAopAAA3AAAgBEEQaiAKQRBqKQAANwAAIARBCGogCkEIaikAADcAACAAIAZBAWo2ApABDAELIANB+ABqQgA3AwAgA0GAAWpCADcDACADQYgBakIANwMAIApCADcDACADQZgBakIANwMAIANBoAFqQgA3AwAgA0GoAWpCADcDACAJIAApAwA3AwAgCUEIaiIGIABBCGopAwA3AwAgCUEQaiIHIABBEGopAwA3AwAgCUEYaiIIIABBGGopAwA3AwAgA0IANwNwIANBADsB2AEgAyAcNwPQASADIAAtAIoBOgDaASADQfAAaiABIAUQCyEEIAwgCSkDADcDACAMQQhqIAYpAwA3AwAgDEEQaiAHKQMANwMAIAxBGGogCCkDADcDACADQQhqIARBCGopAwA3AwAgA0EQaiAEQRBqKQMANwMAIANBGGogBEEYaikDADcDACADQSBqIARBIGopAwA3AwAgA0EoaiAEQShqKQMANwMAIANBMGogBEEwaikDADcDACADQThqIARBOGopAwA3AwAgAyAEKQMANwMAIAMtANoBIQQgAy0A2QEhCyADIAMtANgBIg06AGggAyADKQPQASIcNwNgIAMgBCALRXJBAnIiBDoAaSADQfgBaiILIAgpAgA3AwAgA0HwAWoiCCAHKQIANwMAIANB6AFqIg4gBikCADcDACADIAkpAgA3A+ABIANB4AFqIAMgDSAcIAQQASALKAIAIQYgCCgCACEHIA4oAgAhCCADKAL8ASELIAMoAvQBIQ0gAygC7AEhDiADKALkASEQIAMoAuABIREgACAAKQOAARAFIAAoApABIhJBN08NByAPIBJBBXRqIgQgCzYCHCAEIAY2AhggBCANNgIUIAQgBzYCECAEIA42AgwgBCAINgIIIAQgEDYCBCAEIBE2AgAgACASQQFqNgKQAQsgACAAKQOAASAdfCIcNwOAASACIAVJDQcgASAFaiEBIAIgBWsiAkGACEsNAAsLIAJFDQAgFiABIAIQCxogACAAKQOAARAFCyADQYACaiQADwsgBSACQZiDwAAQHQALIANBGGogA0GIAWopAAA3AwAgA0EQaiADQYABaikAADcDACADQQhqIANB+ABqKQAANwMAIAMgAykAcDcDAAwDCyADQRhqIApBGGopAAA3AwAgA0EQaiAKQRBqKQAANwMAIANBCGogCkEIaikAADcDACADIAopAAA3AwAMAgsgAyALNgL8ASADIAY2AvgBIAMgDTYC9AEgAyAHNgLwASADIA42AuwBIAMgCDYC6AEgAyAQNgLkASADIBE2AuABIANB4AFqQbyEwABBiIPAABAaAAsgBSACQaiDwAAQGwALIANBvITAAEGIg8AAEBoAC8cNAg1/AX4jAEGgAmsiByQAAkACQAJAAkACQCABQYEITwRAIAFBgAhBfyABQQFrQQt2Z3ZBCnRBgAhqIAFBgRBJIg0bIglPDQEgB0EANgIYIAdBATYCDCAHQciAwAA2AgggB0IENwIQIAdBCGpBiILAABAgAAsgB0EANgKIASABQYAIcSIOBEAgByAANgKMASAHQQE2AogBQQEhCwsgB0GMAWohDCADIRQgBSEKIwBBIGsiCCQAIAsgBkEFdiIJIAkgC0sbIg0EQCAEQQJyIQ8gBEEBciEQA0AgDCgCACEJIAhBGGoiESACQRhqKQIANwMAIAhBEGoiEiACQRBqKQIANwMAIAhBCGoiEyACQQhqKQIANwMAIAggAikCADcDACAIIAlBwAAgFCAQEAEgCCAJQUBrQcAAIBQgBBABIAggCUGAAWpBwAAgFCAEEAEgCCAJQcABakHAACAUIAQQASAIIAlBgAJqQcAAIBQgBBABIAggCUHAAmpBwAAgFCAEEAEgCCAJQYADakHAACAUIAQQASAIIAlBwANqQcAAIBQgBBABIAggCUGABGpBwAAgFCAEEAEgCCAJQcAEakHAACAUIAQQASAIIAlBgAVqQcAAIBQgBBABIAggCUHABWpBwAAgFCAEEAEgCCAJQYAGakHAACAUIAQQASAIIAlBwAZqQcAAIBQgBBABIAggCUGAB2pBwAAgFCAEEAEgCCAJQcAHakHAACAUIA8QASAKQRhqIBEpAwA3AAAgCkEQaiASKQMANwAAIApBCGogEykDADcAACAKIAgpAwA3AAAgDEEEaiEMIApBIGohCiAUQgF8IRQgDUEBayINDQALCyAIQSBqJAAgAUH/B3EiCUUNASAHQcgBakIANwMAIAdBwAFqQgA3AwAgB0G4AWpCADcDACAHQbABakIANwMAIAdBqAFqQgA3AwAgB0GgAWpCADcDACAHQZgBakIANwMAIAdB2AFqIgEgAkEIaikCADcDACAHQeABaiIKIAJBEGopAgA3AwAgB0HoAWoiCCACQRhqKQIANwMAIAdCADcDkAEgByAEOgD6ASAHQQA7AfgBIAcgAikCADcD0AEgByALrSADfDcD8AEgB0GQAWogACAOaiAJEAshACAHQdAAaiABKQMANwMAIAdB2ABqIAopAwA3AwAgB0HgAGogCCkDADcDACAHQRBqIABBCGopAwA3AwAgB0EYaiAAQRBqKQMANwMAIAdBIGogAEEYaikDADcDACAHQShqIABBIGopAwA3AwAgB0EwaiAAQShqKQMANwMAIAdBOGogAEEwaikDADcDACAHQUBrIABBOGopAwA3AwAgByAHKQPQATcDSCAHIAApAwA3AwggBy0A+gEhACAHLQD5ASECIAcgBy0A+AEiBDoAcCAHIAcpA/ABIgM3A2ggByAAIAJFckECciIAOgBxIAdBmAJqIgIgCCkDADcDACAHQZACaiIIIAopAwA3AwAgB0GIAmoiCiABKQMANwMAIAcgBykD0AE3A4ACIAdBgAJqIAdBCGogBCADIAAQASALQQV0IgBBIGoiASAGSw0CIAIoAgAhASAIKAIAIQIgCigCACEEIAcoApQCIQYgBygCjAIhCiAHKAKEAiEIIAcoAoACIQkgACAFaiIAIAcoApwCNgAcIAAgATYAGCAAIAY2ABQgACACNgAQIAAgCjYADCAAIAQ2AAggACAINgAEIAAgCTYAACALQQFqIQsMAQtBACAHQQhqIgsiCmtBA3EiDCAKaiEIIAwEQANAIApBADoAACAKQQFqIgogCEkNAAsLIAhBgAEgDGsiDEF8cSIOaiEKIA5BAEoEQANAIAhBADYCACAIQQRqIgggCkkNAAsLIAxBA3EiCARAIAggCmohCANAIApBADoAACAKQQFqIgogCEkNAAsLIAAgCSACIAMgBCALQSBBwAAgDRsiChAEIQggACAJaiABIAlr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aSABQUBrIQEgAkFAaiICQcAASw0ACyAALQBoIQQLIARB/wFxIgNBwQBPDQILIAAgA2ogAUHAACADayIBIAIgASACSRsiARA5GiAAIAAtAGggAWo6AGggAA8LIANBwABBqIHAABAbAAsgA0HAAEGogcAAEBsAC5ADAgZ/A34jAEHgD2siAyQAIANBEGpBiIDAACkCACIJNwMAIANBGGpBkIDAACkCACIKNwMAIANBIGpBmIDAACkCACILNwMAIANBuA9qQgA3AwAgA0GwD2pCADcDACADQagPakIANwMAIANBoA9qQgA3AwAgA0GYD2oiBUIANwMAIANBkA9qIgZCADcDACADQYgPaiIHQgA3AwAgA0HID2ogCTcDACADQdAPaiAKNwMAIANB2A9qIAs3AwAgA0GAgMAAKQIAIgk3AwggA0IANwOADyADIAk3A8APIANBKGogA0GAD2oiBEHgABA5GiADQY8BakEANgAAIANCADcDiAEgA0EANgKYASADQQhqIgggASACEAMgBCAIEBhBoYzAAC0AABpBIEEBEC0iBARAIAQgAykAgA83AAAgBEEYaiAFKQAANwAAIARBEGogBikAADcAACAEQQhqIAcpAAA3AAAgAgRAIAEgAhAzCyAAQgA3AwggAEEgNgIEIAAgBDYCACADQeAPaiQADwtBAUEgECgAC+cCAQV/AkBBzf97QRAgACAAQRBNGyIAayABTQ0AIABBECABQQtqQXhxIAFBC0kbIgRqQQxqEAIiAkUNACACQQhrIQECQCAAQQFrIgMgAnFFBEAgASEADAELIAJBBGsiBSgCACIGQXhxIAIgA2pBACAAa3FBCGsiAiAAQQAgAiABa0EQTRtqIgAgAWsiAmshAyAGQQNxBEAgACADIAAoAgRBAXFyQQJyNgIEIAAgA2oiAyADKAIEQQFyNgIEIAUgAiAFKAIAQQFxckECcjYCACABIAJqIgMgAygCBEEBcjYCBCABIAIQCgwBCyABKAIAIQEgACADNgIEIAAgASACajYCAAsCQCAAKAIEIgFBA3FFDQAgAUF4cSICIARBEGpNDQAgACAEIAFBAXFyQQJyNgIEIAAgBGoiASACIARrIgRBA3I2AgQgACACaiICIAIoAgRBAXI2AgQgASAEEAoLIABBCGohAwsgAwvxAgEEfyAAKAIMIQICQAJAIAFB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NwMAIA1CADcDACAOQgA3AwAgD0IANwMAIAdCADcDACAIQgA3AwAgCUIANwMAIBAgGjcDACARIBs3AwAgEiAcNwMAIBMgGjcDACAUIBs3AwAgFSAcNwMAIANCADcDgA8gAyAdNwPADyADIB03AwggFiAEQeAAEDkaIBdBADYAACADQgA3A4gBIANBADYCmAEgCiAGQSAQAyAEIAoQGEGhjMAALQAAGkEgQQEQLSIERQ0BIAQgAykAgA83AAAgBUEgNgIMIAUgBDYCCCAFQoCAgICABDcCACAEQRhqIAcpAAA3AAAgBEEQaiAIKQAANwAAIARBCGogCSkAADcAACAGQSAQMyADQeAPaiQADAILQQFBIBAoAAtBAUEgECgACyACBEAgASACEDMLIAUoAgwhAiAFKAIIIQEgBSgCBCEDAkAgBSgCAEUEQCACIANPBEAgASELDAILIAJFBEBBASELIAEgAxAzDAILIAEgA0EBIAIQKSILDQFBASACECgACyABIAIQACEYQQEhGSADBEAgASADEDMLQQAhAgsgACAZNgIMIAAgGDYCCCAAIAI2AgQgACALNgIAIAVBEGokAAv4AQECfyMAQSBrIgUkAEHYjMAAQdiMwAAoAgAiBkEBajYCAAJAIAZBAEgNAEGkkMAALQAARQRAQaSQwABBAToAAEGgkMAAQaCQwAAoAgBBAWo2AgBBzIzAACgCACIGQQBIDQFBzIzAACAGQQFqNgIAQcyMwABB0IzAACgCAAR/IAUgACABKAIUEQEAIAUgBDoAHSAFIAM6ABwgBSACNgIYIAUgBSkDADcCEEHQjMAAKAIAIAVBEGpB1IzAACgCACgCFBEBAEHMjMAAKAIAQQFrBSAGCzYCAEGkkMAAQQA6AAAgA0UNAQALIAVBCGogACABKAIYEQEACwALtQEBA38jAEEgayIDJAAgASABIAJqIgJLBEBBAEEAECgAC0EBIQFBCCAAKAIAIgVBAXQiBCACIAIgBEkbIgIgAkEITRsiAkF/c0EfdiEEAkAgBUUEQEEAIQEMAQsgAyAFNgIcIAMgACgCBDYCFAsgAyABNgIYIANBCGogBCACIANBFGoQFyADKAIIBEAgAygCDCADKAIQECgACyADKAIMIQEgACACNgIAIAAgATYCBCADQSBqJAALvAECA38BfiMAQTBrIgIkACABKAIAQYCAgIB4RgRAIAEoAgwhAyACQRRqIgRBADYCACACQoCAgIAQNwIMIAJBKGogA0EQaikCADcDACACQSBqIANBCGopAgA3AwAgAiADKQIANwMYIAJBDGpB3ITAACACQRhqEAgaIAJBCGogBCgCACIDNgIAIAIgAikCDCIFNwMAIAFBCGogAzYCACABIAU3AgALIABB+IbAADYCBCAAIAE2AgAgAkEwaiQAC5kBAQF/AkACQCABBEAgAkEASA0BAn8gAygCBARAAkAgAygCCCIERQRADAELIAMoAgAgBCABIAIQKQwCCwsgASACRQ0AGkGhjMAALQAAGiACIAEQLQsiAwRAIAAgAjYCCCAAIAM2AgQgAEEANgIADwsgACACNgIIIAAgATYCBAwCCyAAQQA2AgQMAQsgAEEANgIECyAAQQE2AgALzQ0CE38IfiMAQZABayIDJAAjAEHQAWsiAiQAAkAgASgCkAEiBUUEQCADIAEpA2A3A0AgAyABKQMgNwMAIANByABqIAFB6ABqKQMANwMAIANB0ABqIAFB8ABqKQMANwMAIANB2ABqIAFB+ABqKQMANwMAIANBCGogAUEoaikDADcDACADQRBqIAFBMGopAwA3AwAgA0EYaiABQThqKQMANwMAIANBIGogAUFAaykDADcDACADQShqIAFByABqKQMANwMAIANBMGogAUHQAGopAwA3AwAgA0E4aiABQdgAaikDADcDACABLQCKASEEIAEtAIkBIQUgAyABLQCIAToAaCADIAEpA4ABNwNgIAMgBCAFRXJBAnI6AGkMAQsCQAJAAkACQEEAIAEtAIgBIglrIAEtAIkBIgZBBnRHBEAgAkG4AWogAUHoAGopAwA3AwAgAkHAAWogAUHwAGopAwA3AwAgAkHIAWogAUH4AGopAwA3AwAgAkH4AGogAUEoaikDADcDACACQYABaiABQTBqKQMANwMAIAJBiAFqIAFBOGopAwA3AwAgAkGQAWogAUFAaykDADcDACACQZgBaiABQcgAaikDADcDACACQaABaiABQdAAaikDADcDACACQagBaiABQdgAaikDADcDACACIAEpA2A3A7ABIAIgASkDIDcDcCABLQCKASEEIAEpA4ABIRUgAiACQfAAakHgABA5IgcgBCAGRXJBAnIiBjoAaSAHIAk6AGggByAVNwNgIARBBHIhByAFIQQMAQsgBUECayEEIAVBAUYNAyABLQCKASEIIAJBGGogAUGUAWoiBiAEQQV0aiIHQRhqKQAAIhU3AwAgAkEQaiAHQRBqKQAAIhY3AwAgAkEIaiAHQQhqKQAAIhc3AwAgAkEgaiAFQQV0IAZqQSBrIgYpAAAiGDcDACACQShqIAZBCGopAAAiGTcDACACQTBqIAZBEGopAAAiGjcDACACQThqIAZBGGopAAAiGzcDACACIAcpAAAiHDcDACACQagBaiAbNwMAIAJBoAFqIBo3AwAgAkGYAWogGTcDACACQZABaiAYNwMAIAJBiAFqIBU3AwAgAkGAAWogFjcDACACQfgAaiAXNwMAIAIgHDcDcCACQcgBaiABQRhqKQMANwMAIAJBwAFqIAFBEGopAwA3AwAgAkG4AWogAUEIaikDADcDACACIAEpAwA3A7ABIAIgAkHwAGpB4AAQOSIGIAhBBHIiBzoAaUHAACEJIAZBwAA6AGhCACEVIAZCADcDYCAHIQYgBEUNAQsgBEEBayIIIAVPDQEgAkGIAWoiCiACQUBrIgVBGGoiCykCADcDACACQYABaiIMIAVBEGoiDSkCADcDACACQfgAaiIOIAVBCGoiDykCADcDACACIAUpAgA3A3AgAkHwAGogAiAJIBUgBhABIA4pAwAhFSAMKQMAIRYgCikDACEXIAIpA3AhGCACQQhqIgkgAUGUAWogCEEFdGoiBkEIaikCADcDACACQRBqIhAgBkEQaikCADcDACACQRhqIhEgBkEYaikCADcDACAFIAEpAwA3AwAgDyABQQhqIhIpAwA3AwAgDSABQRBqIhMpAwA3AwAgCyABQRhqIhQpAwA3AwAgAiAXNwM4IAIgFjcDMCACIBU3AyggAiAYNwMgIAIgBikCADcDACACIAc6AGkgAkHAADoAaCACQgA3A2AgCEUNACAEQQV0IAFqQdQAaiEEA0AgCiALKQIANwMAIAwgDSkCADcDACAOIA8pAgA3AwAgAiAFKQIANwNwIAJB8ABqIAJBwABCACAHEAEgDikDACEVIAwpAwAhFiAKKQMAIRcgAikDcCEYIAkgBEEIaikCADcDACAQIARBEGopAgA3AwAgESAEQRhqKQIANwMAIAUgASkDADcDACAPIBIpAwA3AwAgDSATKQMANwMAIAsgFCkDADcDACACIBc3AzggAiAWNwMwIAIgFTcDKCACIBg3AyAgAiAEKQIANwMAIAIgBzoAaSACQcAAOgBoIAJCADcDYCAEQSBrIQQgCEEBayIIDQALCyADIAJB8AAQORoMAgsgCCAFQciDwAAQHAALIARBAUG4g8AAEBwACyACQdABaiQAIANBiAFqIgEgA0HYAGopAwA3AwAgA0GAAWoiBCADQdAAaikDADcDACADQfgAaiIFIANByABqKQMANwMAIAMgAykDQDcDcCADQfAAaiADIAMtAGhCACADLQBpQQhyEAEgACABKQMANwAYIAAgBCkDADcAECAAIAUpAwA3AAggACADKQNwNwAAIANBkAFqJAALdgEBfyMAQSBrIgIkAAJ/IAAoAgBBgICAgHhHBEAgASAAKAIEIAAoAggQKwwBCyACQRhqIAAoAgwiAEEQaikCADcDACACQRBqIABBCGopAgA3AwAgAiAAKQIANwMIIAEoAhQgASgCGCACQQhqEAgLIAJBIGokAAt+AQF/IwBBQGoiAyQAIANBKzYCDCADQZCEwAA2AgggAyABNgIUIAMgADYCECADQQI2AhwgA0GMicAANgIYIANCAjcCJCADIANBEGqtQoCAgIDQAoQ3AzggAyADQQhqrUKAgICA4AKENwMwIAMgA0EwajYCICADQRhqIAIQIAALaQIBfwF+IwBBMGsiAyQAIAMgADYCACADIAE2AgQgA0ECNgIMIANBmIvAADYCCCADQgI3AhQgA0KAgICAwAAiBCADQQRqrYQ3AyggAyAEIAOthDcDICADIANBIGo2AhAgA0EIaiACECAAC2kCAX8BfiMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQfiIwAA2AgggA0ICNwIUIANCgICAgMAAIgQgA62ENwMoIAMgBCADQQRqrYQ3AyAgAyADQSBqNgIQIANBCGogAhAgAAtpAgF/AX4jAEEwayIDJAAgAyAANgIAIAMgATYCBCADQQI2AgwgA0G4i8AANgIIIANCAjcCFCADQoCAgIDAACIEIANBBGqthDcDKCADIAQgA62ENwMgIAMgA0EgajYCECADQQhqIAIQIAALZgAjAEEwayIAJABBoIzAAC0AAARAIABBAjYCDCAAQcCGwAA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIDAAIQ3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"; +const wasmBase64 = "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ECAAQRBqKQMANwMAIBEgAEEYaikDADcDACADQgA3A4ABIAMgACkDADcDwAEgACkDgAEhGyAFIBpB4AD8CgAAIABBADsBiAEgACAbQgF8NwOAASABIApqIQELIAJBgQhPBEAgAEGcAWohDyAAKQOAASEbIANB0ABqIQwgA0HAAWohCSADQaABaiEKA0AgG0IKhiEcQX8gAkEBdmd2QQFqIQQDQCAEIgVBAXYhBCAcIAVBAWutg0IAUg0ACyAFQQp2rSEcAkACQCAFQYEITwRAIAIgBU8NAUEAIAUgAkHEi8AAECkACyADQYgBakIANwMAIANBkAFqQgA3AwAgA0GYAWpCADcDACAKQgA3AwAgA0GoAWpCADcDACADQbABakIANwMAIANBuAFqQgA3AwAgCSAAKQMANwMAIAlBCGoiByAAQQhqKQMANwMAIAlBEGoiBiAAQRBqKQMANwMAIAlBGGoiCCAAQRhqKQMANwMAIANCADcDgAEgA0EAOwHoASADIBs3A+ABIAMgAC0AigE6AOoBIANBgAFqIAEgBRAQIQQgDCAJKQMANwMAIAxBCGogBykDADcDACAMQRBqIAYpAwA3AwAgDEEYaiAIKQMANwMAIANBGGogBEEIaikDADcDACADQSBqIARBEGopAwA3AwAgA0EoaiAEQRhqKQMANwMAIANBMGogBEEgaikDADcDACADQThqIARBKGopAwA3AwAgA0FAayAEQTBqKQMANwMAIANByABqIARBOGopAwA3AwAgAyAEKQMANwMQIAMtAOoBIQQgAy0A6QEhCyADIAMtAOgBIg06AHggAyADKQPgASIbNwNwIAMgBCALRXJBAnIiBDoAeSADQYgCaiILIAgpAgA3AwAgA0GAAmoiCCAGKQIANwMAIANB+AFqIg4gBykCADcDACADIAkpAgA3A/ABIANB8AFqIANBEGogDSAbIAQQAyALKAIAIQcgCCgCACEGIA4oAgAhCCADKAKMAiELIAMoAoQCIQ0gAygC/AEhDiADKAL0ASEQIAMoAvABIREgACAAKQOAARAIIAAoApgBIgRBN08NByAAIARBAWo2ApgBIA8gBEEFdGoiBCALNgIcIAQgBzYCGCAEIA02AhQgBCAGNgIQIAQgDjYCDCAEIAg2AgggBCAQNgIEIAQgETYCAAwBCyADQYABaiEHIAAtAIoBIQsjAEHgAGsiBCQAIARBOGoiDUIANwMAIARBMGoiDkIANwMAIARBKGoiEEIANwMAIARBIGoiEUIANwMAIARBGGoiEkIANwMAIARBEGoiE0IANwMAIARBCGoiFEIANwMAIARCADcDACABIAUgACAbIAsgBEHAABAGIQggBEHYAGpCADcDACAEQdAAakIANwMAIARByABqQgA3AwAgBEIANwNAAkACQAJAAkAgCEEDTwRAA0AgCEEFdCIGQcEATw0CIAQgBiAAIAsgBEFAayIVQSAQDSIIQQV0IgZBwQBPDQMgBkEhTw0EIAYEQCAEIBUgBvwKAAALIAhBAksNAAsLIAcgBCkDADcAACAHQThqIA0pAwA3AAAgB0EwaiAOKQMANwAAIAdBKGogECkDADcAACAHQSBqIBEpAwA3AAAgB0EYaiASKQMANwAAIAdBEGogEykDADcAACAHQQhqIBQpAwA3AAAgBEHgAGokAAwDC0EAIAZBwABBsIrAABApAAtBACAGQcAAQaCKwAAQKQALQQAgBkEgQZCKwAAQKQALIAAgACkDgAEQCCAAKAKYASIEQTdPDQcgACAEQQFqNgKYASAPIARBBXRqIgQgAykAgAE3AAAgBEEYaiADQZgBaikAADcAACAEQRBqIANBkAFqKQAANwAAIARBCGogA0GIAWopAAA3AAAgACAAKQOAASAcQgGIfBAIIAAoApgBIgRBN08NCCAAIARBAWo2ApgBIA8gBEEFdGoiBCAKKQAANwAAIARBGGogCkEYaikAADcAACAEQRBqIApBEGopAAA3AAAgBEEIaiAKQQhqKQAANwAACyAAIAApA4ABIBx8Ihs3A4ABIAIgBUkNCCABIAVqIQEgAiAFayICQYAISw0ACwsgAkUNACAWIAEgAhAQGiAAIAApA4ABEAgLIANBkAJqJAAPCyADIBtCCoY3AxAgAyACNgLwASADIANB8AFqrUKAgICAIIQ3A5ABIAMgA0EIaq1CgICAgDCENwOIASADIANBEGqtQoCAgIAwhDcDgAFBh4jAACADQYABakG0i8AAECsACyADIAw2ApwBIAMgBzYCmAEgAyAINgKUASADIAk2ApABIAMgDzYCjAEgAyAGNgKIASADIAs2AoQBIAMgDTYCgAEgA0GAAWpBzIzAAEHki8AAECEACyADIAs2AowCIAMgBzYCiAIgAyANNgKEAiADIAY2AoACIAMgDjYC/AEgAyAINgL4ASADIBA2AvQBIAMgETYC8AEgA0HwAWpBzIzAAEHki8AAECEACyADQShqIANBmAFqKQAANwMAIANBIGogA0GQAWopAAA3AwAgA0EYaiADQYgBaikAADcDACADIAMpAIABNwMQDAILIANBKGogCkEYaikAADcDACADQSBqIApBEGopAAA3AwAgA0EYaiAKQQhqKQAANwMAIAMgCikAADcDEAwBCyAFIAIgAkHUi8AAECkACyADQRBqQcyMwABB5IvAABAhAAvCDAINfwF+IwBBoAJrIgckAAJAAkACQAJAAkACQCABQYEITwRAIAFCfyABQQFqQQF2rUIBfXmIpyIITQ0DIAdBCGoiCUEAQYAB/AsAIAAgCEEBaiIIIAIgAyAEIAlBIEHAACAIQYAIRhsiChAGIQsgACAIaiABIAhrIAIgAyAIQQp2rXwgBCAJIApqQYABIAprEAYgC0EBRg0CIAtqQQV0IgBBgQFJDQFBACAAQYABQaCJwAAQKQALIAdBADYCiAEgASABQQAgAUGACEcbIgxrIg1BgAhPBEAgB0EBNgKIASAHIAA2AowBQQEhCQsgB0GMAWohCiADIRQjAEEgayIBJAAgBkEFdiIIIAkgCCAJSRsiCARAIAhBBXQhDiAEQQJyIQ8gBEEBciEQA0AgCigCACEIIAFBGGoiESACQRhqKQIANwMAIAFBEGoiEiACQRBqKQIANwMAIAFBCGoiEyACQQhqKQIANwMAIAEgAikCADcDACABIAhBwAAgFCAQEAMgASAIQUBrQcAAIBQgBBADIAEgCEGAAWpBwAAgFCAEEAMgASAIQcABakHAACAUIAQQAyABIAhBgAJqQcAAIBQgBBADIAEgCEHAAmpBwAAgFCAEEAMgASAIQYADakHAACAUIAQQAyABIAhBwANqQcAAIBQgBBADIAEgCEGABGpBwAAgFCAEEAMgASAIQcAEakHAACAUIAQQAyABIAhBgAVqQcAAIBQgBBADIAEgCEHABWpBwAAgFCAEEAMgASAIQYAGakHAACAUIAQQAyABIAhBwAZqQcAAIBQgBBADIAEgCEGAB2pBwAAgFCAEEAMgASAIQcAHakHAACAUIA8QAyAFIAtqIghBGGogESkDADcAACAIQRBqIBIpAwA3AAAgCEEIaiATKQMANwAAIAggASkDADcAACAKQQRqIQogFEIBfCEUIA4gC0EgaiILRw0ACwsgAUEgaiQAIAxFDQUgB0HIAWpCADcDACAHQcABakIANwMAIAdBuAFqQgA3AwAgB0GwAWpCADcDACAHQagBakIANwMAIAdBoAFqQgA3AwAgB0GYAWpCADcDACAHQdgBaiIBIAJBCGopAgA3AwAgB0HgAWoiCCACQRBqKQIANwMAIAdB6AFqIgogAkEYaikCADcDACAHQgA3A5ABIAcgBDoA+gEgB0EAOwH4ASAHIAIpAgA3A9ABIAcgAyAJrXw3A/ABIAdBkAFqIAAgDWogDBAQIQAgB0HQAGogASkDADcDACAHQdgAaiAIKQMANwMAIAdB4ABqIAopAwA3AwAgB0EQaiAAQQhqKQMANwMAIAdBGGogAEEQaikDADcDACAHQSBqIABBGGopAwA3AwAgB0EoaiAAQSBqKQMANwMAIAdBMGogAEEoaikDADcDACAHQThqIABBMGopAwA3AwAgB0FAayAAQThqKQMANwMAIAcgBykD0AE3A0ggByAAKQMANwMIIActAPoBIQAgBy0A+QEhAiAHIActAPgBIgQ6AHAgByAHKQPwASIDNwNoIAcgACACRXJBAnIiADoAcSAHQZgCaiICIAopAwA3AwAgB0GQAmoiCiAIKQMANwMAIAdBiAJqIgggASkDADcDACAHIAcpA9ABNwOAAiAHQYACaiAHQQhqIAQgAyAAEAMgCUEFdCIAQR9yIAZPDQMgAigCACEBIAooAgAhAiAIKAIAIQQgBygClAIhBiAHKAKMAiEIIAcoAoQCIQogBygCgAIhCyAAIAVqIgAgBygCnAI2ABwgACABNgAYIAAgBjYAFCAAIAI2ABAgACAINgAMIAAgBDYACCAAIAo2AAQgACALNgAAIAlBAWohCQwFCyAHQQhqIAAgAiAEIAUgBhANIQkMBAsgBkE/TQ0CIAUgBykACDcAACAFQThqIAdBQGspAAA3AAAgBUEwaiAHQThqKQAANwAAIAVBKGogB0EwaikAADcAACAFQSBqIAdBKGopAAA3AAAgBUEYaiAHQSBqKQAANwAAIAVBEGogB0EYaikAADcAACAFQQhqIAdBEGopAAA3AABBAiEJDAMLQeiIwABBE0GQicAAECsACyAAIABBIGogBkHAicAAECkAC0EAQcAAIAZBsInAABApAAsgB0GgAmokACAJC8MGAQd/AkACQCABIABBA2pBfHEiBCAAayIHSQ0AIAEgB2siBkEESQ0AQQAhASAAIARHBEAgACAEayIEQXxNBEADQCABIAAgA2oiAiwAAEG/f0pqIAJBAWosAABBv39KaiACQQJqLAAAQb9/SmogAkEDaiwAAEG/f0pqIQEgA0EEaiIDDQALCyAAIANqIQIDQCABIAIsAABBv39KaiEBIAJBAWohAiAEQQFqIgQNAAsLIAAgB2ohBAJAIAZBA3EiAEUNACAEIAZB/P///wdxaiIDLAAAQb9/SiEFIABBAUYNACAFIAMsAAFBv39KaiEFIABBAkYNACAFIAMsAAJBv39KaiEFCyAGQQJ2IQYgASAFaiEDA0AgBCEAIAZFDQJBwAEgBiAGQcABTxsiBUEDcSEHAkAgBUECdCIIQfAHcSIERQRAQQAhAgwBC0EAIQIgACEBA0AgAiABKAIAIgJBf3NBB3YgAkEGdnJBgYKECHFqIAFBBGooAgAiAkF/c0EHdiACQQZ2ckGBgoQIcWogAUEIaigCACICQX9zQQd2IAJBBnZyQYGChAhxaiABQQxqKAIAIgJBf3NBB3YgAkEGdnJBgYKECHFqIQIgAUEQaiEBIARBEGsiBA0ACwsgBiAFayEGIAAgCGohBCACQQh2Qf+B/AdxIAJB/4H8B3FqQYGABGxBEHYgA2ohAyAHRQ0ACwJ/IAAgBUH8AXFBAnRqIgAoAgAiAUF/c0EHdiABQQZ2ckGBgoQIcSIBIAdBAUYNABogASAAKAIEIgFBf3NBB3YgAUEGdnJBgYKECHFqIgEgB0ECRg0AGiAAKAIIIgBBf3NBB3YgAEEGdnJBgYKECHEgAWoLIgFBCHZB/4EccSABQf+B/AdxakGBgARsQRB2IANqIQMMAQsgAUUEQEEADwsgAUEDcSEEAkAgAUEESQRADAELIAFBfHEhBQNAIAMgACACaiIBLAAAQb9/SmogAUEBaiwAAEG/f0pqIAFBAmosAABBv39KaiABQQNqLAAAQb9/SmohAyAFIAJBBGoiAkcNAAsLIARFDQAgACACaiEBA0AgAyABLAAAQb9/SmohAyABQQFqIQEgBEEBayIEDQALCyADC+gGAhl/A34jAEHQAWsiAiQAAkACQCAAKAKYASIEIAEgACkDkAF9e6ciFUsEQCAEQQV0IQ4gBEEBayEFIAAtAIoBQQRyIQ8gAkHgAGohCiACQbABaiEGIAJBCGohECACQRBqIREgAkEYaiESIARBAmtBN0khFgNAIAAgBTYCmAEgECAAIA5qIgNBhAFqKQAANwMAIBEgA0GMAWopAAA3AwAgEiADQZQBaikAADcDACACIANB/ABqKQAANwMAIAVFDQIgACAFQQFrIgQ2ApgBIAJBqAFqIgcgA0H0AGoiFykAACIBNwMAIAJBoAFqIgggA0HsAGoiGCkAACIbNwMAIAJBmAFqIgkgA0HkAGoiGSkAACIcNwMAIAIgA0HcAGoiGikAACIdNwOQASAGIAIpAwA3AAAgBkEIaiAQKQMANwAAIAZBEGogESkDADcAACAGQRhqIBIpAwA3AAAgAkEoaiAcNwMAIAJBMGogGzcDACACQThqIAE3AwAgAkFAayAGKQMANwMAIAJByABqIAJBuAFqKQMANwMAIAJB0ABqIAJBwAFqKQMANwMAIAJB2ABqIAJByAFqKQMANwMAIAIgHTcDICAKQRhqIABBGGoiCykDADcDACAKQRBqIABBEGoiDCkDADcDACAKQQhqIABBCGoiDSkDADcDACAKIAApAwA3AwAgAkHAADoAiAEgAiAPOgCJASACQgA3A4ABIAcgCykCADcDACAIIAwpAgA3AwAgCSANKQIANwMAIAIgACkCADcDkAEgAkGQAWogAkEgakHAAEIAIA8QAyAHKAIAIQcgCCgCACEIIAkoAgAhCSACKAKsASELIAIoAqQBIQwgAigCnAEhDSACKAKUASETIAIoApABIRQgFkUNAyAaIBQ2AgAgA0H4AGogCzYCACAXIAc2AgAgA0HwAGogDDYCACAYIAg2AgAgA0HoAGogDTYCACAZIAk2AgAgA0HgAGogEzYCACAAIAU2ApgBIA5BIGshDiAEIgUgFU8NAAsLIAJB0AFqJAAPC0GqkcAAQStBlIvAABA5AAsgAiALNgKsASACIAc2AqgBIAIgDDYCpAEgAiAINgKgASACIA02ApwBIAIgCTYCmAEgAiATNgKUASACIBQ2ApABIAJBkAFqQcyMwABBpIvAABAhAAuwBQIIfwF+QStBgIDEACAAKAIIIghBgICAAXEiBhshCyAGQRV2IARqIQYCQCAIQYCAgARxRQRAQQAhAQwBCwJAIAJBEE8EQCABIAIQByEFDAELIAJFBEAMAQsgAkEDcSEJAkAgAkEESQRADAELIAJBDHEhDANAIAUgASAHaiIKLAAAQb9/SmogCkEBaiwAAEG/f0pqIApBAmosAABBv39KaiAKQQNqLAAAQb9/SmohBSAMIAdBBGoiB0cNAAsLIAlFDQAgASAHaiEHA0AgBSAHLAAAQb9/SmohBSAHQQFqIQcgCUEBayIJDQALCyAFIAZqIQYLAkAgAC8BDCIJIAZLBEACQAJAIAhBgICACHFFBEAgCSAGayEJQQAhBUEAIQYCQAJAAkAgCEEddkEDcUEBaw4DAAEAAgsgCSEGDAELIAlB/v8DcUEBdiEGCyAIQf///wBxIQogACgCBCEIIAAoAgAhAANAIAVB//8DcSAGQf//A3FPDQJBASEHIAVBAWohBSAAIAogCCgCEBEAAEUNAAsMBAsgACAAKQIIIg2nQYCAgP95cUGwgICAAnI2AghBASEHIAAoAgAiCCAAKAIEIgogCyABIAIQLQ0DQQAhBSAJIAZrQf//A3EhAQNAIAVB//8DcSABTw0CIAVBAWohBSAIQTAgCigCEBEAAEUNAAsMAwtBASEHIAAgCCALIAEgAhAtDQIgACADIAQgCCgCDBECAA0CQQAhBSAJIAZrQf//A3EhAQNAIAVB//8DcSICIAFJIQcgASACTQ0DIAVBAWohBSAAIAogCCgCEBEAAEUNAAsMAgsgCCADIAQgCigCDBECAA0BIAAgDTcCCEEADwtBASEHIAAoAgAiBiAAKAIEIgAgCyABIAIQLQ0AIAYgAyAEIAAoAgwRAgAhBwsgBwuUBgEFfyAAQQhrIgEgAEEEaygCACIDQXhxIgBqIQICQAJAIANBAXENACADQQJxRQ0BIAEoAgAiAyAAaiEAIAEgA2siAUHslcAAKAIARgRAIAIoAgRBA3FBA0cNAUHklcAAIAA2AgAgAiACKAIEQX5xNgIEIAEgAEEBcjYCBCACIAA2AgAPCyABIAMQEgsCQAJAAkACQAJAIAIoAgQiA0ECcUUEQCACQfCVwAAoAgBGDQIgAkHslcAAKAIARg0DIAIgA0F4cSICEBIgASAAIAJqIgBBAXI2AgQgACABaiAANgIAIAFB7JXAACgCAEcNAUHklcAAIAA2AgAPCyACIANBfnE2AgQgASAAQQFyNgIEIAAgAWogADYCAAsgAEGAAkkNAiABIAAQFEEAIQFBhJbAAEGElsAAKAIAQQFrIgA2AgAgAA0EQcyTwAAoAgAiAARAA0AgAUEBaiEBIAAoAggiAA0ACwtBhJbAAEH/HyABIAFB/x9NGzYCAA8LQfCVwAAgATYCAEHolcAAQeiVwAAoAgAgAGoiADYCACABIABBAXI2AgRB7JXAACgCACABRgRAQeSVwABBADYCAEHslcAAQQA2AgALIABB/JXAACgCACIDTQ0DQfCVwAAoAgAiAkUNA0EAIQBB6JXAACgCACIEQSlJDQJBxJPAACEBA0AgAiABKAIAIgVPBEAgAiAFIAEoAgRqSQ0ECyABKAIIIQEMAAsAC0HslcAAIAE2AgBB5JXAAEHklcAAKAIAIABqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAA8LAkBB3JXAACgCACICQQEgAEEDdnQiA3FFBEBB3JXAACACIANyNgIAIABB+AFxQdSTwABqIgAhAgwBCyAAQfgBcSIAQdSTwABqIQIgAEHck8AAaigCACEACyACIAE2AgggACABNgIMIAEgAjYCDCABIAA2AggPC0HMk8AAKAIAIgEEQANAIABBAWohACABKAIIIgENAAsLQYSWwABB/x8gACAAQf8fTRs2AgAgAyAETw0AQfyVwABBfzYCAAsL3wQBBn8CQAJAIAAoAggiB0GAgIDAAXFFDQACQCAHQYCAgIABcUUEQCACQRBPBEAgASACEAchAwwCCyACRQRAQQAhAgwCCyACQQNxIQYCQCACQQRJBEAMAQsgAkEMcSEIA0AgAyABIAVqIgQsAABBv39KaiAEQQFqLAAAQb9/SmogBEECaiwAAEG/f0pqIARBA2osAABBv39KaiEDIAggBUEEaiIFRw0ACwsgBkUNASABIAVqIQQDQCADIAQsAABBv39KaiEDIARBAWohBCAGQQFrIgYNAAsMAQsCQAJAIAAvAQ4iA0UEQEEAIQIMAQsgASACaiEIQQAhAiABIQQgAyEFA0AgBCIGIAhGDQICfyAGQQFqIAYsAAAiBEEATg0AGiAGQQJqIARBYEkNABogBkEDaiAEQXBJDQAaIAZBBGoLIgQgBmsgAmohAiAFQQFrIgUNAAsLQQAhBQsgAyAFayEDCyADIAAvAQwiBE8NACAEIANrIQZBACEDQQAhBQJAAkACQCAHQR12QQNxQQFrDgIAAQILIAYhBQwBCyAGQf7/A3FBAXYhBQsgB0H///8AcSEIIAAoAgQhByAAKAIAIQADQCADQf//A3EgBUH//wNxSQRAQQEhBCADQQFqIQMgACAIIAcoAhARAABFDQEMAwsLQQEhBCAAIAEgAiAHKAIMEQIADQFBACEDIAYgBWtB//8DcSEBA0AgA0H//wNxIgIgAUkhBCABIAJNDQIgA0EBaiEDIAAgCCAHKAIQEQAARQ0ACwwBCyAAKAIAIAEgAiAAKAIEKAIMEQIAIQQLIAQLgQQBCH8jAEEQayIGJAACfwJAIANBAXFFBEAgAi0AACIFDQFBAAwCCyAAIAIgA0EBdiABKAIMEQIADAELIAEoAgwhCgNAIAJBAWohBAJAAkACfwJAAkACQCAFwEEASARAIAVB/wFxIghBgAFGDQEgCEHAAUYNAkGggICABiELIAVBAXEEQCACKAABIQsgAkEFaiEEC0EAIQkgBUECcQ0DIAQhAkEADAQLIAAgBCAFQf8BcSICIAoRAgBFBEAgAiAEaiECDAYLQQEMBwsgACACQQNqIgQgAi8AASICIAoRAgBFBEAgAiAEaiECDAULQQEMBgsgBiABNgIEIAYgADYCACAGQqCAgIAGNwIIIAMgB0EDdGoiAigCACAGIAIoAgQRAABFDQJBAQwFCyAEQQJqIQIgBC8AAAshBCAFQQRxBH8gAi8AACEJIAJBAmoFIAILIQggBUEIcQR/IAgvAAAhByAIQQJqBSAICyECIAVBEHEEQCADIARB//8DcUEDdGovAQQhBAsgBiAFQSBxBH8gAyAJQQN0ai8BBAUgCQs7AQ4gBiAEOwEMIAYgCzYCCCAGIAE2AgQgBiAANgIAQQEgAyAHQQN0aiIEKAIAIAYgBCgCBBEAAA0DGiAHQQFqIQcMAQsgB0EBaiEHIAQhAgsgAi0AACIFDQALQQALIAZBEGokAAuqBAEKfyMAQTBrIgYkAAJAIAFBwAFxIgpFDQAgBkEIaiAANgIAIApBwABGBEBBASEHDAELIAYgAEFAazYCDCAKQYABRgRAQQIhBwwBCyAGIABBgAFqNgIQIAZBEGpB3IzAAEGAisAAECEACyAFQQV2IgkgByAHIAlLGyIIBEAgBkEIaiEJIANBBHIhCyAIQQV0IQxBACEDA0AgCSgCACEIIAZBKGoiDSACQRhqKQIANwMAIAZBIGoiDiACQRBqKQIANwMAIAZBGGoiDyACQQhqKQIANwMAIAYgAikCADcDECAGQRBqIAhBwABCACALEAMgAyAEaiIIQRhqIA0pAwA3AAAgCEEQaiAOKQMANwAAIAhBCGogDykDADcAACAIIAYpAxA3AAAgCUEEaiEJIAwgA0EgaiIDRw0ACwsCQAJAAkAgAUE/cSICBEAgBSAHQQV0IgFJDQEgBSABayIDQR9NDQIgAkEgRw0DIAEgBGoiASAAIApqIgApAAA3AAAgAUEYaiAAQRhqKQAANwAAIAFBEGogAEEQaikAADcAACABQQhqIABBCGopAAA3AAAgB0EBaiEHCyAGQTBqJAAgBw8LIAEgBSAFQfCJwAAQKQALQQBBICADQdCJwAAQKQALIwBBIGsiACQAIABBIDYCDCAAIAI2AgggACAAQQxqrUKAgICAIIQ3AxggACAAQQhqrUKAgICAIIQ3AxBBr4fAACAAQRBqQeCJwAAQKwALgwQCCH8CfkEUIQIgACIKQugHWgRAIAFBBGshByAKIQsCQAJAA0AgCyALQpDOAIAiCkKQzgB+faciBkH//wNxQeQAbiEJAkAgA0EUaiIEQQRrQRRJBEAgB0EUaiIIIAlBAXQiBS0AsI9AOgAAIARBA2siAkEUSQ0BIAJBFEH4kMAAECMACyAEQQRrQRRB+JDAABAjAAsgCEEBaiAFQbGPwABqLQAAOgAAIARBAmtBFEkEQCAIQQJqIAYgCUHkAGxrQQF0Qf7/B3EiAi0AsI9AOgAAIARBAWtBFE8NAiAIQQNqIAJBsY/AAGotAAA6AAAgB0EEayEHIANBBGshAyALQv+s4gRWIAohC0UNAwwBCwsgBEECa0EUQfiQwAAQIwALIARBAWtBFEH4kMAAECMACyADQRRqIQILAkAgCkIJWARAIAIhAwwBCyAKpyIFQf//A3FB5ABuIQYCQCACQQJrIgNBFEkEQCABIANqIAUgBkHkAGxrQf//A3FBAXQiBS0AsI9AOgAAIAJBAWsiAkEUTw0BIAatIQogASACaiAFQbGPwABqLQAAOgAADAILIANBFEH4kMAAECMACyACQRRB+JDAABAjAAsCQCAAUEUgClBxRQRAIANBAWsiA0EUTw0BIAEgA2ogCqdBAXQtALGPQDoAAAsgAw8LIANBFEH4kMAAECMAC48EAQJ/IAAgAWohAgJAAkAgACgCBCIDQQFxDQAgA0ECcUUNASAAKAIAIgMgAWohASAAIANrIgBB7JXAACgCAEYEQCACKAIEQQNxQQNHDQFB5JXAACABNgIAIAIgAigCBEF+cTYCBCAAIAFBAXI2AgQgAiABNgIADwsgACADEBILAkACQAJAIAIoAgQiA0ECcUUEQCACQfCVwAAoAgBGDQIgAkHslcAAKAIARg0DIAIgA0F4cSICEBIgACABIAJqIgFBAXI2AgQgACABaiABNgIAIABB7JXAACgCAEcNAUHklcAAIAE2AgAPCyACIANBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAsgAUGAAk8EQCAAIAEQFAwDCwJAQdyVwAAoAgAiAkEBIAFBA3Z0IgNxRQRAQdyVwAAgAiADcjYCACABQfgBcUHUk8AAaiIBIQIMAQsgAUH4AXEiAUHUk8AAaiECIAFB3JPAAGooAgAhAQsgAiAANgIIIAEgADYCDCAAIAI2AgwgACABNgIIDwtB8JXAACAANgIAQeiVwABB6JXAACgCACABaiIBNgIAIAAgAUEBcjYCBCAAQeyVwAAoAgBHDQFB5JXAAEEANgIAQeyVwABBADYCAA8LQeyVwAAgADYCAEHklcAAQeSVwAAoAgAgAWoiATYCACAAIAFBAXI2AgQgACABaiABNgIACwuYAwECfwJAAkACQCAALQBoIgMEQCADQcEATw0DIAJBwAAgA2siBCACIARJGyIEBEAgACADaiABIAT8CgAACyAAIAAtAGggBGoiAzoAaCABIARqIQEgAiAEayICRQRAQQAhAgwCCyAAQUBrIABBwAAgACkDYCAALQBqIAAtAGlFchADIABCADcDACAAQQA6AGggAEEIakIANwMAIABBEGpCADcDACAAQRhqQgA3AwAgAEEgakIANwMAIABBKGpCADcDACAAQTBqQgA3AwAgAEE4akIANwMAIAAgAC0AaUEBajoAaQtBACEDIAJBwQBJDQEgAEFAayEEIAAtAGkhAwNAIAQgAUHAACAAKQNgIAAtAGogA0H/AXFFchADIAAgAC0AaUEBaiIDOgBpIAFBQGshASACQUBqIgJBwABLDQALIAAtAGghAwsgA0H/AXEiA0HBAE8NAQsgAkHAACADayIEIAIgBEkbIgIEQCAAIANqIAEgAvwKAAALIAAgAC0AaCACajoAaCAADwsgA0HAAEHAAEGAicAAECkAC+cCAQV/AkAgAUHN/3tBECAAIABBEE0bIgBrTw0AIABBECABQQtqQXhxIAFBC0kbIgRqQQxqEAQiAkUNACACQQhrIQECQCAAQQFrIgMgAnFFBEAgASEADAELIAJBBGsiBSgCACIGQXhxIAIgA2pBACAAa3FBCGsiAiAAQQAgAiABa0EQTRtqIgAgAWsiAmshAyAGQQNxBEAgACADIAAoAgRBAXFyQQJyNgIEIAAgA2oiAyADKAIEQQFyNgIEIAUgAiAFKAIAQQFxckECcjYCACABIAJqIgMgAygCBEEBcjYCBCABIAIQDwwBCyABKAIAIQEgACADNgIEIAAgASACajYCAAsCQCAAKAIEIgFBA3FFDQAgAUF4cSICIARBEGpNDQAgACAEIAFBAXFyQQJyNgIEIAAgBGoiASACIARrIgRBA3I2AgQgACACaiICIAIoAgRBAXI2AgQgASAEEA8LIABBCGohAwsgAwuCAwEEfyAAKAIMIQICQAJAAkAgAUGAAk8EQCAAKAIYIQMCQAJAIAAgAkYEQCAAQRRBECAAKAIUIgIbaigCACIBDQFBACECDAILIAAoAggiASACNgIMIAIgATYCCAwBCyAAQRRqIABBEGogAhshBANAIAQhBSABIgJBFGogAkEQaiACKAIUIgEbIQQgAkEUQRAgARtqKAIAIgENAAsgBUEANgIACyADRQ0CAkAgACgCHEECdEHEksAAaiIBKAIAIABHBEAgAygCECAARg0BIAMgAjYCFCACDQMMBAsgASACNgIAIAJFDQQMAgsgAyACNgIQIAINAQwCCyAAKAIIIgAgAkcEQCAAIAI2AgwgAiAANgIIDwtB3JXAAEHclcAAKAIAQX4gAUEDdndxNgIADwsgAiADNgIYIAAoAhAiAQRAIAIgATYCECABIAI2AhgLIAAoAhQiAEUNACACIAA2AhQgACACNgIYDwsPC0HglcAAQeCVwAAoAgBBfiAAKAIcd3E2AgAL3gICA38DfiMAQZACayIAJAAgAEHAAWpCADcDACAAQbgBakIANwMAIABBsAFqQgA3AwAgAEGoAWpCADcDACAAQaABakIANwMAIABBmAFqQgA3AwAgAEGQAWpCADcDACAAQdABakGkgMAAKQIAIgM3AwAgAEHYAWpBrIDAACkCACIENwMAIABB4AFqQbSAwAApAgAiBTcDACAAQSBqIAU3AwAgAEEYaiAENwMAIABBEGogAzcDACAAQgA3A4gBIABBnIDAACkCACIDNwPIASAAIAM3AwggAEEoaiAAQYgBaiICQeAA/AoAACAAQYwBaiAAQQhqQYAB/AoAAEGQD0EIEEYiAQRAIAFBADYCCCABQoGAgIAQNwMAIAFBDGogAkGEAfwKAAAgAUEANgKoASABQgA3A6ABIAFCADcDkAEgAUGXAWpBADYAACAAQZACaiQAIAFBCGoPC0EIQZAPEEsAC8QCAQR/IABCADcCECAAAn9BACABQYACSQ0AGkEfIAFB////B0sNABogAUEmIAFBCHZnIgNrdkEBcSADQQF0a0E+agsiAjYCHCACQQJ0QcSSwABqIQRBASACdCIDQeCVwAAoAgBxRQRAIAQgADYCACAAIAQ2AhggACAANgIMIAAgADYCCEHglcAAQeCVwAAoAgAgA3I2AgAPCwJAAkAgASAEKAIAIgMoAgRBeHFGBEAgAyECDAELIAFBGSACQQF2a0EAIAJBH0cbdCEFA0AgAyAFQR12QQRxaiIEKAIQIgJFDQIgBUEBdCEFIAIhAyACKAIEQXhxIAFHDQALCyACKAIIIgEgADYCDCACIAA2AgggAEEANgIYIAAgAjYCDCAAIAE2AggPCyAEQRBqIAA2AgAgACADNgIYIAAgADYCDCAAIAA2AggLigIBBn8gACgCCCIEIQICf0EBIAFBgAFJDQAaQQIgAUGAEEkNABpBA0EEIAFBgIAESRsLIgYgACgCACAEa0sEfyAAIAQgBhAdIAAoAggFIAILIAAoAgRqIQICQAJAIAFBgAFPBEAgAUE/cUGAf3IhBSABQQZ2IQMgAUGAEEkNASABQQx2IQcgA0E/cUGAf3IhAyABQYCABE8EQCACIAU6AAMgAiADOgACIAIgB0E/cUGAf3I6AAEgAiABQRJ2QXByOgAADAMLIAIgBToAAiACIAM6AAEgAiAHQeABcjoAAAwCCyACIAE6AAAMAQsgAiAFOgABIAIgA0HAAXI6AAALIAAgBCAGajYCCEEAC5QCAQd/IABCADcDICAAQQA2ApgBIABCADcDkAEgAEEQOgCKASAAQQA7AYgBIABCADcDgAEgAEEoakIANwMAIABBMGpCADcDACAAQThqQgA3AwAgAEFAa0IANwMAIABByABqQgA3AwAgAEHQAGpCADcDACAAQdgAakIANwMAIAAgASgAHCICNgJ8IAAgASgAGCIDNgJ4IAAgASgAFCIENgJ0IAAgASgAECIFNgJwIAAgASgADCIGNgJsIAAgASgACCIHNgJoIAAgASgABCIINgJkIAAgASgAACIBNgJgIAAgAjYCHCAAIAM2AhggACAENgIUIAAgBTYCECAAIAY2AgwgACAHNgIIIAAgCDYCBCAAIAE2AgAL+gECA38BfiMAQTBrIgIkACABKAIAQYCAgIB4RgRAIAEoAgwhAyACQSxqIgRBADYCACACQoCAgIAQNwIkIAJBJGpBnI3AACADKAIAIgMoAgAgAygCBBAMGiACQSBqIAQoAgAiAzYCACACIAIpAiQiBTcDGCABQQhqIAM2AgAgASAFNwIACyABKQIAIQUgAUKAgICAEDcCACACQRBqIgMgAUEIaiIBKAIANgIAIAFBADYCACACIAU3AwhBDEEEEEYiAUUEQEEEQQwQSwALIAEgAikDCDcCACABQQhqIAMoAgA2AgAgAEH8jsAANgIEIAAgATYCACACQTBqJAALlAIBAn8jAEEgayIFJABBmJbAAEGYlsAAKAIAIgZBAWo2AgACQAJ/QQAgBkEASA0AGkEBQZSWwAAtAAANABpBlJbAAEEBOgAAQZCWwABBkJbAACgCAEEBajYCAEECC0H/AXEiBkECRwRAIAZBAXFFDQEgBUEIaiAAIAEoAhgRAQAMAQtBnJbAACgCACIGQQBIDQBBnJbAACAGQQFqNgIAQaCWwAAoAgAEQCAFIAAgASgCFBEBACAFIAQ6AB0gBSADOgAcIAUgAjYCGCAFIAUpAwA3AhBBoJbAACgCACAFQRBqQaSWwAAoAgAoAhQRAQALQZyWwABBnJbAACgCAEEBazYCAEGUlsAAQQA6AAAgA0UNAAALAAuoAQICfwF+QQEhB0EEIQYCQCAEIAVqQQFrQQAgBGtxrSADrX4iCEIgiFBFBEBBACEDDAELIAinIgNBgICAgHggBGtLBEBBACEDDAELAkACQAJ/IAEEQCACIAEgBWwgBCADED8MAQsgA0UEQCAEIQYMAgsgAyAEEEYLIgYNACAAIAQ2AgQMAQsgACAGNgIEQQAhBwtBCCEGCyAAIAZqIAM2AgAgACAHNgIAC6sPAhN/CH4jAEGQAWsiAyQAIAEpA5ABUEUEQCMAQRBrIgQkACAEQfiIwAA2AgwgBCABQZABajYCCCMAQUBqIgAkACAAQdiRwAA2AgQgACAEQQhqNgIAIABB2JHAADYCDCAAIARBDGo2AgggAEGYksAAKAIANgIUIABBjJLAACgCADYCECAAQekANgIcIABB4IrAADYCGCAAIABBCGqtQoCAgICAA4Q3AzggACAArUKAgICAgAOENwMwIAAgAEEYaq1CgICAgKADhDcDKCAAIABBEGqtQoCAgICQA4Q3AyBB64PAACAAQSBqQfSLwAAQKwALIwBB0AFrIgIkAAJAIAEoApgBIgUEQAJAAkACQAJAIAEtAIgBIgkgAS0AiQEiB3JFBEAgBUECayEEIAVBAUcNASAEQQFBwIrAABAjAAsgAkG4AWogAUHoAGopAwA3AwAgAkHAAWogAUHwAGopAwA3AwAgAkHIAWogAUH4AGopAwA3AwAgAkH4AGogAUEoaikDADcDACACQYABaiABQTBqKQMANwMAIAJBiAFqIAFBOGopAwA3AwAgAkGQAWogAUFAaykDADcDACACQZgBaiABQcgAaikDADcDACACQaABaiABQdAAaikDADcDACACQagBaiABQdgAaikDADcDACACIAEpA2A3A7ABIAIgASkDIDcDcCABLQCKASEEIAEpA4ABIRUgAiACQfAAakHgAPwKAAAgAiAEIAdFckECciIGOgBpIAIgCToAaCACIBU3A2AgBEEEciEHIAUhBAwBCyABLQCKASEIIAJBGGogAUGcAWoiBiAEQQV0aiIHQRhqKQAAIhU3AwAgAkEQaiAHQRBqKQAAIhY3AwAgAkEIaiAHQQhqKQAAIhc3AwAgAkEgaiAGIAVBBXRqQSBrIgYpAAAiGDcDACACQShqIAZBCGopAAAiGTcDACACQTBqIAZBEGopAAAiGjcDACACQThqIAZBGGopAAAiGzcDACACIAcpAAAiHDcDACACQagBaiAbNwMAIAJBoAFqIBo3AwAgAkGYAWogGTcDACACQZABaiAYNwMAIAJBiAFqIBU3AwAgAkGAAWogFjcDACACQfgAaiAXNwMAIAIgHDcDcCACQcgBaiABQRhqKQMANwMAIAJBwAFqIAFBEGopAwA3AwAgAkG4AWogAUEIaikDADcDACACIAEpAwA3A7ABIAIgAkHwAGpB4AD8CgAAIAIgCEEEciIHOgBpQcAAIQkgAkHAADoAaEIAIRUgAkIANwNgIAchBiAERQ0BCyAEQQFrIgggBU8NASACQYgBaiIKIAJBQGsiBUEYaiILKQIANwMAIAJBgAFqIgwgBUEQaiINKQIANwMAIAJB+ABqIg4gBUEIaiIPKQIANwMAIAIgBSkCADcDcCACQfAAaiACIAkgFSAGEAMgDikDACEVIAwpAwAhFiAKKQMAIRcgAikDcCEYIAJBCGoiCSABQZwBaiAIQQV0aiIGQQhqKQIANwMAIAJBEGoiECAGQRBqKQIANwMAIAJBGGoiESAGQRhqKQIANwMAIAUgASkDADcDACAPIAFBCGoiEikDADcDACANIAFBEGoiEykDADcDACALIAFBGGoiFCkDADcDACACIBc3AzggAiAWNwMwIAIgFTcDKCACIBg3AyAgAiAGKQIANwMAIAIgBzoAaSACQcAAOgBoIAJCADcDYCAIRQ0AIARBBXQgAWpB3ABqIQQDQCAKIAspAgA3AwAgDCANKQIANwMAIA4gDykCADcDACACIAUpAgA3A3AgAkHwAGogAkHAAEIAIAcQAyAOKQMAIRUgDCkDACEWIAopAwAhFyACKQNwIRggCSAEQQhqKQIANwMAIBAgBEEQaikCADcDACARIARBGGopAgA3AwAgBSABKQMANwMAIA8gEikDADcDACANIBMpAwA3AwAgCyAUKQMANwMAIAIgFzcDOCACIBY3AzAgAiAVNwMoIAIgGDcDICACIAQpAgA3AwAgAiAHOgBpIAJBwAA6AGggAkIANwNgIARBIGshBCAIQQFrIggNAAsLIAMgAkHwAPwKAAAMAgsgCCAFQdCKwAAQIwALIAMgASkDYDcDQCADIAEpAyA3AwAgA0HIAGogAUHoAGopAwA3AwAgA0HQAGogAUHwAGopAwA3AwAgA0HYAGogAUH4AGopAwA3AwAgA0EIaiABQShqKQMANwMAIANBEGogAUEwaikDADcDACADQRhqIAFBOGopAwA3AwAgA0EgaiABQUBrKQMANwMAIANBKGogAUHIAGopAwA3AwAgA0EwaiABQdAAaikDADcDACADQThqIAFB2ABqKQMANwMAIAEtAIoBIQQgAS0AiQEhBSADIAEtAIgBOgBoIAMgASkDgAE3A2AgAyAEIAVFckECcjoAaQsgAkHQAWokACADQYgBaiIBIANB2ABqKQMANwMAIANBgAFqIgQgA0HQAGopAwA3AwAgA0H4AGoiBSADQcgAaikDADcDACADIAMpA0A3A3AgA0HwAGogAyADLQBoQgAgAy0AaUEIchADIAAgASkDADcAGCAAIAQpAwA3ABAgACAFKQMANwAIIAAgAykDcDcAACADQZABaiQAC5wBAQN/IwBBEGsiAyQAAkAgAARAIABBCGsiBCAEKAIAQQFqIgU2AgAgBQ0BAAsQSAALIAAoAgBFBEAgAEF/NgIAIAMgBDYCDCADIAA2AgggAyAAQQhqIgU2AgQgBSABIAIQBSACBEAgASACEEMLIABBADYCACAEIAQoAgBBAWsiADYCACAARQRAIANBDGoQKgsgA0EQaiQADwsQSQALoAEBAX8jAEEQayICJAACQAJAAkAgAUUEQCAARQ0BIABBCGsiASgCAEEBRw0CIAFBADYCACABQX9GDQMgAEEEayIAIAAoAgBBAWsiADYCACAADQMgAUGQDxBDDAMLIABFDQAgAiAAQQhrIgA2AgwgACAAKAIAQQFrIgA2AgAgAA0CIAJBDGoQKgwCCxBIAAtBvIDAAEE/EEcACyACQRBqJAALhwEBAX8jAEEQayIDJAAgAiABIAJqIgFLBEBBAEEAEDgACyADQQRqIAAoAgAiAiAAKAIEQQggASACQQF0IgIgASACSxsiASABQQhNGyIBQQFBARAZIAMoAgRBAUYEQCADKAIIIAMoAgwQOAALIAMoAgghAiAAIAE2AgAgACACNgIEIANBEGokAAvIAgEEfyMAQRBrIgMkAAJAIAAEQCAAQQhrIgQgBCgCAEEBaiICNgIAIAINAQALEEgACyAAKAIARQRAIABBfzYCACADIAQ2AgwgAyAANgIIIAMgAEEIaiICNgIEIwBB4ABrIgFBCGpCADcDACABQRBqQgA3AwAgAUEYakIANwMAIAFBIGpCADcDACABQShqQgA3AwAgAUEwakIANwMAIAFBOGpCADcDACABQdgAaiACQRhqKQMANwMAIAFB0ABqIAJBEGopAwA3AwAgAUHIAGogAkEIaikDADcDACABQgA3AwAgASACKQMANwNAIAJBIGogAUHgAPwKAAAgAkEAOwGIASACQgA3A4ABIAIoApgBBEAgAkEANgKYAQsgAEEANgIAIAQgBCgCAEEBayIANgIAIABFBEAgA0EMahAqCyADQRBqJAAPCxBJAAucAQIDfwF+IwBBIGsiAiQAIAEoAgBBgICAgHhGBEAgASgCDCEDIAJBHGoiBEEANgIAIAJCgICAgBA3AhQgAkEUakGcjcAAIAMoAgAiAygCACADKAIEEAwaIAJBEGogBCgCACIDNgIAIAIgAikCFCIFNwMIIAFBCGogAzYCACABIAU3AgALIABB/I7AADYCBCAAIAE2AgAgAkEgaiQAC40BAQF/AkACQCAAQYQBTwRAIADQbyYBQaSSwAAoAgANAUGkksAAQX82AgAgAEG4ksAAKAIAIgFJDQIgACABayIAQbCSwAAoAgBPDQJBrJLAACgCACAAQQJ0akG0ksAAKAIANgIAQbSSwAAgADYCAEGkksAAQaSSwAAoAgBBAWo2AgALDwtB2IjAABBOCwALXgEBfyMAQSBrIgMkACADQSs2AgQgA0GEjMAANgIAIAMgATYCDCADIAA2AgggAyADQQhqrUKAgICAgAOENwMYIAMgA61CgICAgJADhDcDEEG4hMAAIANBEGogAhArAAscACMAQRBrIgAkAEGIlsAAQQE6AAAgAEEQaiQAC04CAX8BfiMAQSBrIgMkACADIAE2AgwgAyAANgIIIANCgICAgCAiBCADQQhqrYQ3AxggAyAEIANBDGqthDcDEEGNgsAAIANBEGogAhArAAtHAQF/IAAoAgAgACgCCCIDayACSQRAIAAgAyACEB0gACgCCCEDCyACBEAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AghBAAusBAELfyMAQRBrIggkACABQQFBAAJ/IAhBBmohBUEKIQIgACgCACIKIgBB6AdPBEAgBUEEayEGIAAhAQJAAkADQCABIAFBkM4AbiIAQZDOAGxrIgtB//8DcUHkAG4hCQJAIANBCmoiBEEEa0EKSQRAIAZBCmoiByAJQQF0IgwtALCPQDoAACAEQQNrIgJBCkkNASACQQpB+JDAABAjAAsgBEEEa0EKQfiQwAAQIwALIAdBAWogDEGxj8AAai0AADoAACAEQQJrQQpJBEAgB0ECaiALIAlB5ABsa0EBdEH+/wdxIgItALCPQDoAACAEQQFrQQpPDQIgB0EDaiACQbGPwABqLQAAOgAAIAZBBGshBiADQQRrIQMgAUH/rOIESyAAIQFFDQMMAQsLIARBAmtBCkH4kMAAECMACyAEQQFrQQpB+JDAABAjAAsgA0EKaiECCwJAIABBCU0EQCAAIQMgAiEBDAELIABB//8DcUHkAG4hAwJAIAJBAmsiAUEKSQRAIAEgBWogACADQeQAbGtB//8DcUEBdCIALQCwj0A6AAAgAkEBayICQQpPDQEgAiAFaiAAQbGPwABqLQAAOgAADAILIAFBCkH4kMAAECMACyACQQpB+JDAABAjAAsCQEEAIAogAxtFBEAgAUEBayIBQQpPDQEgASAFaiADQQF0LQCxj0A6AAALIAEMAQsgAUEKQfiQwAAQIwALIgAgBWpBCiAAaxAJIAhBEGokAAs0AQF/IwBBIGsiAiQAIAFBAUEAIAApAwAgAkEMaiIBEA4iACABakEUIABrEAkgAkEgaiQACzQAIwBBEGsiACQAIABCxIzAgMAANwMIIAEoAgAgASgCBEGmhMAAIABBCGoQDCAAQRBqJAALRAECfyABKAIEIQIgASgCACEDQQhBBBBGIgFFBEBBBEEIEEsACyABIAI2AgQgASADNgIAIABB7I3AADYCBCAAIAE2AgAL+AEAAkAgACACTQRAIAAgAU0gASACS3INASMAQSBrIgIkACACIAE2AgwgAiAANgIIIAIgAkEMaq1CgICAgCCENwMYIAIgAkEIaq1CgICAgCCENwMQQeWBwAAgAkEQaiADECsACyMAQSBrIgEkACABIAI2AgwgASAANgIIIAEgAUEMaq1CgICAgCCENwMYIAEgAUEIaq1CgICAgCCENwMQQcSCwAAgAUEQaiADECsACyMAQSBrIgAkACAAIAI2AgwgACABNgIIIAAgAEEMaq1CgICAgCCENwMYIAAgAEEIaq1CgICAgCCENwMQQf2CwAAgAEEQaiADECsACz4BAX8gACgCACIAKAKoAQRAIABBADYCqAELAkAgAEF/Rg0AIAAgACgCBEEBayIBNgIEIAENACAAQZAPEEMLC98BAgF/AX4jAEEgayIDJAAgAyABNgIQIAMgADYCDCADQQE7ARwgAyACNgIYIAMgA0EMajYCFCMAQRBrIgEkACADQRRqIgApAgAhBCABIAA2AgwgASAENwIEIwBB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ACACQRhqIAo3AwAgAkIANwOADyACQZyAwAApAgAiCDcDwA8gAiAINwMAIAJBIGogAkGAD2oiBEHgAPwKAAAgAkGHAWpBADYAACACQQA2ApgBIAJCADcDkAEgAkIANwOAASACIAAgARAFIAQgAhAaAkBBIEEBEEYiBARAIAQgAikAgA83AAAgBEEYaiAFKQAANwAAIARBEGogBikAADcAACAEQQhqIAcpAAA3AAAgAQRAIAAgARBDCyADQQA2AgwgA0IgNwIEIAMgBDYCACACQeAPaiQADAELQQFBIBA4AAsgAygCACADKAIEIAMoAgggAygCDCADQRBqJAALLwACQCABaUEBRiAAQYCAgIB4IAFrTXFFDQAgAARAIAAgARBGIgFFDQELIAEPCwALpgMCA38BfiMAQRBrIgQkACMAQZAeayICJAACQAJAAkAgBAJ/IAFBIEcEQEEcQQEQRiIDRQ0CIANBGGpBmIDAACgAADYAACADQRBqQZCAwAApAAA3AAAgA0EIakGIgMAAKQAANwAAIANBgIDAACkAADcAACABBEAgACABEEMLIANBHBA7IQAgA0EcEENBAQwBCyACQY4PaiAAQQJqLQAAOgAAIAApAAMhBSAAKAALIQEgAC8AACEDIAJBqw9qIABBH2otAAA6AAAgAkGjD2ogAEEXaikAADcAACACIAM7AYwPIAIgACkADzcAmw8gAiABNgCXDyACIAU3AI8PIAJBCGoiASACQYwPaiIDEBYgAEEgEEMgAkGQD2ogAUGAD/wKAABBkA9BCBBGIgBFDQIgAEEANgIIIABCgYCAgBA3AwAgAEEMaiADQYQP/AoAACAAQQhqIQBBAAsiATYCCCAEIABBACABGzYCBCAEQQAgACABGzYCACACQZAeaiQADAILQQFBHBA4AAtBCEGQDxBLAAsgBCgCACAEKAIEIAQoAgggBEEQaiQAC5oCAQR/IwBBEGsiAyQAIwBBMGsiAiQAAkAgAARAIABBCGsiBCAEKAIAQQFqIgE2AgAgAQ0BAAsQSAALAkACQCAAKAIAIgFBf0cEQCAAIAFBAWo2AgAgAiAENgIMIAIgADYCCCACIABBCGoiATYCBCACQRBqIAEQGkEgQQEQRiIBRQ0BIAEgAikAEDcAACABQRhqIAJBKGopAAA3AAAgAUEQaiACQSBqKQAANwAAIAFBCGogAkEYaikAADcAACAAIAAoAgBBAWs2AgAgBCAEKAIAQQFrIgA2AgAgAEUEQCACQQxqECoLIANBIDYCBCADIAE2AgAgAkEwaiQADAILEEkAC0EBQSAQOAALIAMoAgAgAygCBCADQRBqJAALJQEBfyAAKAIAIgFBgICAgHhyQYCAgIB4RwRAIAAoAgQgARBDCwsXAQF/IAAoAgAiAQRAIAAoAgQgARBDCwsfACAAQQhqQfSMwAApAgA3AgAgAEHsjMAAKQIANwIACx8AIABBCGpBhI3AACkCADcCACAAQfyMwAApAgA3AgALHQAgAARAIAAgARBLAAtBjI/AAEEjQaCPwAAQKwALEQAgACABQQF0QQFyIAIQKwALGAAgASgCACABKAIEIAAoAgAgACgCBBAMC/4CAgN/AW8gACABEAIhBQJ/IwBBEGsiAyQAAkBBpJLAACgCAEUEQEGkksAAQX82AgBBtJLAACgCACIBQbCSwAAoAgAiAEYEQAJ/IAEgAUGoksAAKAIAIgBHDQAa0G9BgAEgASABQYABTRsiAvwPASIAQX9GDQMCQEG4ksAAKAIAIgQEQCABIARqIABGDQEMBQtBuJLAACAANgIACyABQaiSwAAoAgAiACABayACTw0AGiADQQRqIABBrJLAACgCACABIAJqIgBBBEEEEBkgAygCBEEBRg0DQaySwAAgAygCCDYCAEGoksAAIAA2AgBBsJLAACgCAAsiAiAATw0CQaySwAAoAgAgAkECdGogAUEBajYCAEGwksAAIAJBAWoiADYCAAsgACABTQ0BQbSSwABBrJLAACgCACABQQJ0aigCADYCAEGkksAAQaSSwAAoAgBBAWo2AgBBuJLAACgCACADQRBqJAAgAWoMAgtByIjAABBOAAsACyIAIAUmASAACw0AIAEEQCAAIAEQQwsLFgAgACgCACABIAIgACgCBCgCDBECAAsUACAAKAIAIAEgACgCBCgCDBEAAAvsBgEFfwJ/AkACQAJAAkACQAJAAkAgAEEEayIHKAIAIghBeHEiBEEEQQggCEEDcSIFGyABak8EQCAFQQAgAUEnaiIGIARJGw0BAkAgAkEJTwRAIAIgAxARIgINAUEADAoLQQAhAiADQcz/e0sNCEEQIANBC2pBeHEgA0ELSRshASAAQQhrIQYCQAJAAkACQCAFBEAgBCAG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c2VydGlvbiBgbGVmdCDAFyByaWdodGAgZmFpbGVkCiAgbGVmdDogwAkKIHJpZ2h0OiDAABBhc3NlcnRpb24gYGxlZnQgwBAgcmlnaHRgIGZhaWxlZDogwAkKICBsZWZ0OiDACQogcmlnaHQ6IMAAD0NhcGFjaXR5RXJyb3I6IMAAwAI6IMAAbGlicmFyeS9jb3JlL3NyYy9mbXQvbnVtLnJzAC9Vc2Vycy9jYXJyeTA5ODcvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi93YXNtLWJpbmRnZW4tMC4yLjEwNi9zcmMvZXh0ZXJucmVmLnJzAGxpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMvbW9kLnJzAC9ydXN0L2RlcHMvZGxtYWxsb2MtMC4yLjExL3NyYy9kbG1hbGxvYy5ycwBsaWJyYXJ5L3N0ZC9zcmMvYWxsb2MucnMAL1VzZXJzL2NhcnJ5MDk4Ny8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2JsYWtlMy0xLjguMi9zcmMvbGliLnJzABVtZW1vcnkgYWxsb2NhdGlvbiBvZiDADSBieXRlcyBmYWlsZWQAJmNvcHlfZnJvbV9zbGljZTogc291cmNlIHNsaWNlIGxlbmd0aCAowCspIGRvZXMgbm90IG1hdGNoIGRlc3RpbmF0aW9uIHNsaWNlIGxlbmd0aCAowAEpABh0aGUgc3VidHJlZSBzdGFydGluZyBhdCDAEiBjb250YWlucyBhdCBtb3N0IMAOIGJ5dGVzIChmb3VuZCDAASkAWgIQAGsAAAB/AAAAEQAAAFoCEABrAAAAjAAAABEAAABtaWQgPiBsZW4AQYCJwAALoQkrAxAAXQAAAAsCAAARAAAAKwMQAF0AAAAYAwAAHwAAACsDEABdAAAAPAMAABIAAAArAxAAXQAAADUDAAAMAAAAKwMQAF0AAAC+AgAACgAAACsDEABdAAAA7AIAACgAAAArAxAAXQAAAOwCAAA0AAAAKwMQAF0AAADsAgAADAAAACsDEABdAAAA3AIAABcAAAArAxAAXQAAAGIDAABBAAAAKwMQAF0AAABiAwAAEQAAACsDEABdAAAAYAMAACEAAAArAxAAXQAAAFYFAAASAAAAKwMQAF0AAABgBQAAEgAAAHNldF9pbnB1dF9vZmZzZXQgbXVzdCBiZSB1c2VkIHdpdGggZmluYWxpemVfbm9uX3Jvb3QrAxAAXQAAAHUEAAAyAAAAKwMQAF0AAAB9BAAAGwAAACsDEABdAAAAtgQAAA0AAAArAxAAXQAAABMFAAAbAAAAKwMQAF0AAAAlBQAAGwAAACsDEABdAAAApAQAABcAAAArAxAAXQAAAHEFAAAJAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZWluc3VmZmljaWVudCBjYXBhY2l0eS8GEAAVAAAAAAAAACAAAAABAAAABQAAAAAAAAAEAAAABAAAAAYAAAAMkRtBRc1DSn6J8happJYRbV3L1ixQ62N4QaZXcRuLuRIDEAAYAAAAcAEAAAkAAAAIAAAADAAAAAQAAAAJAAAACgAAAAsAAAAMAAAAEAAAAAQAAAANAAAADgAAAA8AAAAQAAAAAAAAAAgAAAAEAAAAEQAAABIAAAATAAAAFAAAAAAAAAAIAAAABAAAABUAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAADnAhAAKgAAALEEAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPD0gc2l6ZSArIG1heF9vdmVyaGVhZAAA5wIQACoAAAC3BAAADQAAAAgAAAAMAAAABAAAABYAAABjYXBhY2l0eSBvdmVyZmxvdwAAAMYCEAAgAAAAHAAAAAUAAAAwMDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3MzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0NjU2NjY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5Njk3OTg5OT4CEAAbAAAAVwIAAAUAAAAwMTIzNDU2Nzg5YWJjZGVmMHgwMTIzNDU2Nzg5QUJDREVGY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZQAAAAAAAAAEAAAABAAAABsAAAA9PSE9bWF0Y2hlc1JlZkNlbGwgYWxyZWFkeSBib3Jyb3dlZADoCBAA6ggQAOwIEAACAAAAAgAAAAcAQaySwAALAQQAcAlwcm9kdWNlcnMCCGxhbmd1YWdlAQRSdXN0AAxwcm9jZXNzZWQtYnkDBXJ1c3RjHTEuOTMuMCAoMjU0YjU5NjA3IDIwMjYtMDEtMTkpBndhbHJ1cwYwLjI0LjUMd2FzbS1iaW5kZ2VuBzAuMi4xMDYAaw90YXJnZXRfZmVhdHVyZXMGKw9tdXRhYmxlLWdsb2JhbHMrE25vbnRyYXBwaW5nLWZwdG9pbnQrC2J1bGstbWVtb3J5KwhzaWduLWV4dCsPcmVmZXJlbmNlLXR5cGVzKwptdWx0aXZhbHVl"; const wasmBinary = Uint8Array.from(atob(wasmBase64), c => c.charCodeAt(0)); const wasmModule = new WebAssembly.Module(wasmBinary); const importObject = { './webbuf_blake3_bg.js': webbuf_blake3_bg }; diff --git a/ts/npm-webbuf-blake3/test/index.test.ts b/ts/npm-webbuf-blake3/test/index.test.ts index 7a301bb..20b935e 100644 --- a/ts/npm-webbuf-blake3/test/index.test.ts +++ b/ts/npm-webbuf-blake3/test/index.test.ts @@ -1,5 +1,12 @@ import { describe, it, expect } from "vitest"; -import { blake3Hash, doubleBlake3Hash, blake3Mac } from "../src/index.js"; +import { + blake3Hash, + doubleBlake3Hash, + blake3Mac, + Blake3Hasher, + createBlake3Hasher, + createBlake3KeyedHasher, +} from "../src/index.js"; import { WebBuf } from "@webbuf/webbuf"; import { FixedBuf } from "@webbuf/fixedbuf"; @@ -38,3 +45,116 @@ describe("Blake3", () => { expect(result.toHex()).toBe(expectedMacHex); }); }); + +describe("Blake3Hasher (incremental/streaming)", () => { + it("should produce the same hash as one-shot blake3Hash", () => { + const input = WebBuf.fromUtf8("test input"); + const expected = blake3Hash(input); + + const hasher = new Blake3Hasher(); + hasher.update(input); + const result = hasher.finalize(); + hasher.dispose(); + + expect(result.toHex()).toBe(expected.toHex()); + }); + + it("should produce correct hash when data is fed in chunks", () => { + const fullData = WebBuf.fromUtf8("hello world this is a streaming test"); + const expected = blake3Hash(fullData); + + const hasher = createBlake3Hasher(); + hasher.update(WebBuf.fromUtf8("hello world ")); + hasher.update(WebBuf.fromUtf8("this is a ")); + hasher.update(WebBuf.fromUtf8("streaming test")); + const result = hasher.finalize(); + hasher.dispose(); + + expect(result.toHex()).toBe(expected.toHex()); + }); + + it("should support method chaining on update", () => { + const fullData = WebBuf.fromUtf8("abcdef"); + const expected = blake3Hash(fullData); + + const hasher = createBlake3Hasher(); + const result = hasher + .update(WebBuf.fromUtf8("ab")) + .update(WebBuf.fromUtf8("cd")) + .update(WebBuf.fromUtf8("ef")) + .finalize(); + hasher.dispose(); + + expect(result.toHex()).toBe(expected.toHex()); + }); + + it("should support reset for reuse", () => { + const hasher = createBlake3Hasher(); + + // Hash some data + hasher.update(WebBuf.fromUtf8("garbage data")); + + // Reset and hash new data + hasher.reset(); + hasher.update(WebBuf.fromUtf8("test input")); + const result = hasher.finalize(); + hasher.dispose(); + + const expected = blake3Hash(WebBuf.fromUtf8("test input")); + expect(result.toHex()).toBe(expected.toHex()); + }); + + it("should support keyed hasher (MAC) in streaming mode", () => { + const key = blake3Hash(WebBuf.fromUtf8("key")); + const message = WebBuf.fromUtf8("message"); + const expected = blake3Mac(key, message); + + const hasher = createBlake3KeyedHasher(key); + hasher.update(WebBuf.fromUtf8("mes")); + hasher.update(WebBuf.fromUtf8("sage")); + const result = hasher.finalize(); + hasher.dispose(); + + expect(result.toHex()).toBe(expected.toHex()); + }); + + it("should support static newKeyed factory", () => { + const key = blake3Hash(WebBuf.fromUtf8("key")); + const message = WebBuf.fromUtf8("message"); + const expected = blake3Mac(key, message); + + const hasher = Blake3Hasher.newKeyed(key); + hasher.update(message); + const result = hasher.finalize(); + hasher.dispose(); + + expect(result.toHex()).toBe(expected.toHex()); + }); + + it("should allow finalize without consuming (can continue updating)", () => { + const hasher = createBlake3Hasher(); + hasher.update(WebBuf.fromUtf8("part1")); + const hash1 = hasher.finalize(); + + // Continue feeding data after finalize + hasher.update(WebBuf.fromUtf8("part2")); + const hash2 = hasher.finalize(); + hasher.dispose(); + + // hash1 should equal blake3Hash("part1") + expect(hash1.toHex()).toBe(blake3Hash(WebBuf.fromUtf8("part1")).toHex()); + + // hash2 should equal blake3Hash("part1part2") + expect(hash2.toHex()).toBe( + blake3Hash(WebBuf.fromUtf8("part1part2")).toHex(), + ); + }); + + it("should support Symbol.dispose", () => { + const hasher = createBlake3Hasher(); + hasher.update(WebBuf.fromUtf8("test")); + hasher.finalize(); + // Should not throw + hasher[Symbol.dispose](); + }); +}); diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index 9fe9e36..902b535 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -24,8 +24,975 @@ importers: specifier: ^8.21.0 version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + npm-webbuf: + dependencies: + '@webbuf/acb3': + specifier: workspace:^ + version: link:../npm-webbuf-acb3 + '@webbuf/acb3dh': + specifier: workspace:^ + version: link:../npm-webbuf-acb3dh + '@webbuf/acs2': + specifier: workspace:^ + version: link:../npm-webbuf-acs2 + '@webbuf/acs2dh': + specifier: workspace:^ + version: link:../npm-webbuf-acs2dh + '@webbuf/aescbc': + specifier: workspace:^ + version: link:../npm-webbuf-aescbc + '@webbuf/blake3': + specifier: workspace:^ + version: link:../npm-webbuf-blake3 + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/numbers': + specifier: workspace:^ + version: link:../npm-webbuf-numbers + '@webbuf/ripemd160': + specifier: workspace:^ + version: link:../npm-webbuf-ripemd160 + '@webbuf/rw': + specifier: workspace:^ + version: link:../npm-webbuf-rw + '@webbuf/secp256k1': + specifier: workspace:^ + version: link:../npm-webbuf-secp256k1 + '@webbuf/sha256': + specifier: workspace:^ + version: link:../npm-webbuf-sha256 + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-acb3: + dependencies: + '@webbuf/aescbc': + specifier: workspace:^ + version: link:../npm-webbuf-aescbc + '@webbuf/blake3': + specifier: workspace:^ + version: link:../npm-webbuf-blake3 + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-acb3dh: + dependencies: + '@webbuf/acb3': + specifier: workspace:^ + version: link:../npm-webbuf-acb3 + '@webbuf/aescbc': + specifier: workspace:^ + version: link:../npm-webbuf-aescbc + '@webbuf/blake3': + specifier: workspace:^ + version: link:../npm-webbuf-blake3 + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/secp256k1': + specifier: workspace:^ + version: link:../npm-webbuf-secp256k1 + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-acs2: + dependencies: + '@webbuf/aescbc': + specifier: workspace:^ + version: link:../npm-webbuf-aescbc + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/sha256': + specifier: workspace:^ + version: link:../npm-webbuf-sha256 + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-acs2dh: + dependencies: + '@webbuf/acs2': + specifier: workspace:^ + version: link:../npm-webbuf-acs2 + '@webbuf/aescbc': + specifier: workspace:^ + version: link:../npm-webbuf-aescbc + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/secp256k1': + specifier: workspace:^ + version: link:../npm-webbuf-secp256k1 + '@webbuf/sha256': + specifier: workspace:^ + version: link:../npm-webbuf-sha256 + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-aescbc: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + '@webbuf/blake3': + specifier: ^3.0.26 + version: 3.5.0(@webbuf/fixedbuf@npm-webbuf-fixedbuf)(@webbuf/webbuf@npm-webbuf-webbuf) + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-blake3: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-fixedbuf: + dependencies: + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-numbers: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-ripemd160: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + ripemd160-js: + specifier: ^3.0.4 + version: 3.0.4 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-rw: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/numbers': + specifier: workspace:^ + version: link:../npm-webbuf-numbers + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-secp256k1: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@noble/secp256k1': + specifier: ^3.0.0 + version: 3.0.0 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + '@webbuf/blake3': + specifier: workspace:^ + version: link:../npm-webbuf-blake3 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-sha256: + dependencies: + '@webbuf/fixedbuf': + specifier: workspace:^ + version: link:../npm-webbuf-fixedbuf + '@webbuf/webbuf': + specifier: workspace:^ + version: link:../npm-webbuf-webbuf + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + + npm-webbuf-webbuf: + devDependencies: + '@eslint/js': + specifier: ^9.18.0 + version: 9.39.1 + '@types/node': + specifier: ^22.13.2 + version: 22.19.9 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + eslint: + specifier: ^9.18.0 + version: 9.39.1 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + rimraf: + specifier: ^6.0.1 + version: 6.1.2 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + typescript: + specifier: ^5.7.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.48.1(eslint@9.39.1)(typescript@5.8.3) + vite: + specifier: ^6.1.0 + version: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vitest: + specifier: ^3.0.5 + version: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + packages: + '@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.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + 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'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@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.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@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.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@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.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@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.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + 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'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + 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'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@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.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@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.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@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.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@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.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@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.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@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.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.9.0': resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -80,12 +1047,173 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.1': + resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} + engines: {node: 20 || >=22} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@noble/secp256k1@3.0.0': + resolution: {integrity: sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg==} + + '@rollup/rollup-android-arm-eabi@4.57.1': + resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.57.1': + resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.57.1': + resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.57.1': + resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.57.1': + resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.57.1': + resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.57.1': + resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.57.1': + resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.57.1': + resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.57.1': + resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.57.1': + resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.57.1': + resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.57.1': + resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.57.1': + resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.57.1': + resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.57.1': + resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.57.1': + resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.57.1': + resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.57.1': + resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.57.1': + resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.57.1': + resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} + cpu: [x64] + os: [win32] + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/node@22.19.9': + resolution: {integrity: sha512-PD03/U8g1F9T9MI+1OBisaIARhSzeidsUjQaf51fOxrfjeiKN9bLVO06lHuHYjxdnqLWJijJHfqXPSJri2EM2A==} + '@typescript-eslint/eslint-plugin@8.48.1': resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -145,6 +1273,42 @@ packages: resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + 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.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + + '@webbuf/blake3@3.5.0': + resolution: {integrity: sha512-+QiV1Fo70aSzS2M/xyJwatOHwtpnqkUMLjIMd5Iom8UEHCiovfaxZM94yopCBYw5Lda0tMSXyKTcMcyqIWbRlg==} + engines: {node: '>=20.8.0'} + peerDependencies: + '@webbuf/fixedbuf': ^3.5.0 + '@webbuf/webbuf': ^3.5.0 + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -165,23 +1329,45 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + 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'} + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -205,9 +1391,26 @@ packages: supports-color: optional: true + 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==} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + engines: {node: '>=18'} + hasBin: true + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -250,10 +1453,17 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -287,10 +1497,22 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-tsconfig@4.13.5: + resolution: {integrity: sha512-v4/4xAEpBRp6SvCkWhnGCaLkJf9IwWzrsygJPxD/+p2/xPE3C5m2fA9FD0Ry9tG+Rqqq3gBzHSl6y1/T9V/tMQ==} + glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob@13.0.1: + resolution: {integrity: sha512-B7U/vJpE3DkJ5WXTgTpTRN63uV42DseiXXKMwG14LQBXmsdeIoHAPbU/MEo6II0k5ED74uc2ZGTC6MwHFQhF6w==} + engines: {node: 20 || >=22} + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -302,6 +1524,9 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -329,6 +1554,9 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -356,6 +1584,20 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + + lru-cache@11.2.5: + resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==} + engines: {node: 20 || >=22} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + minimatch@10.1.2: + resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -363,9 +1605,18 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -381,6 +1632,9 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -393,10 +1647,28 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-scurry@2.0.1: + resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} + engines: {node: 20 || >=22} + + 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'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -414,6 +1686,23 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + rimraf@6.1.2: + resolution: {integrity: sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==} + engines: {node: 20 || >=22} + hasBin: true + + ripemd160-js@3.0.4: + resolution: {integrity: sha512-lhDcLriFFscUr4yoqVCP2f8ZRpBnikW2TLfnGi2Fw+wSzmvrdSi6c13By8ZGLysrS0s8oLxNVbdodGCWhbPTYw==} + engines: {node: '>= 16', npm: '>=7.0.0'} + + rollup@4.57.1: + resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + semver@7.7.3: resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} @@ -427,24 +1716,63 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + strip-json-comments@3.1.1: 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'} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 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.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -461,14 +1789,95 @@ packages: engines: {node: '>=14.17'} hasBin: true + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + 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.1: + resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} + 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: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + 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.4 + '@vitest/ui': 3.2.4 + 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 + which@2.0.2: 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 + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -479,6 +1888,162 @@ packages: snapshots: + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/aix-ppc64@0.27.3': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.27.3': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-arm@0.27.3': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/android-x64@0.27.3': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.27.3': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.27.3': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.27.3': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.27.3': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.27.3': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-arm@0.27.3': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.27.3': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.27.3': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.27.3': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.27.3': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.27.3': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.27.3': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/linux-x64@0.27.3': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.27.3': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.27.3': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.27.3': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.27.3': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.27.3': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.27.3': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.27.3': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.27.3': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@esbuild/win32-x64@0.27.3': + optional: true + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)': dependencies: eslint: 9.39.1 @@ -536,10 +2101,106 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.1': + dependencies: + '@isaacs/balanced-match': 4.0.1 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@noble/secp256k1@3.0.0': {} + + '@rollup/rollup-android-arm-eabi@4.57.1': + optional: true + + '@rollup/rollup-android-arm64@4.57.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.57.1': + optional: true + + '@rollup/rollup-darwin-x64@4.57.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.57.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.57.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.57.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.57.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.57.1': + optional: true + + '@rollup/rollup-openbsd-x64@4.57.1': + optional: true + + '@rollup/rollup-openharmony-arm64@4.57.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.57.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.57.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.57.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.57.1': + optional: true + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + '@types/estree@1.0.8': {} '@types/json-schema@7.0.15': {} + '@types/node@22.19.9': + dependencies: + undici-types: 6.21.0 + '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.8.3))(eslint@9.39.1)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -632,6 +2293,53 @@ snapshots: '@typescript-eslint/types': 8.48.1 eslint-visitor-keys: 4.2.1 + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.2.4(vite@6.4.1(@types/node@22.19.9)(tsx@4.21.0))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/runner@3.2.4': + dependencies: + '@vitest/utils': 3.2.4 + pathe: 2.0.3 + strip-literal: 3.1.0 + + '@vitest/snapshot@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.4 + + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + + '@webbuf/blake3@3.5.0(@webbuf/fixedbuf@npm-webbuf-fixedbuf)(@webbuf/webbuf@npm-webbuf-webbuf)': + dependencies: + '@webbuf/fixedbuf': link:npm-webbuf-fixedbuf + '@webbuf/webbuf': link:npm-webbuf-webbuf + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -651,8 +2359,12 @@ snapshots: argparse@2.0.1: {} + assertion-error@2.0.1: {} + balanced-match@1.0.2: {} + base64-js@1.5.1: {} + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -662,13 +2374,30 @@ snapshots: dependencies: balanced-match: 1.0.2 + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + cac@6.7.14: {} + callsites@3.1.0: {} + 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 supports-color: 7.2.0 + check-error@2.1.3: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -687,8 +2416,70 @@ snapshots: dependencies: ms: 2.1.3 + deep-eql@5.0.2: {} + deep-is@0.1.4: {} + es-module-lexer@1.7.0: {} + + 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@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + escape-string-regexp@4.0.0: {} eslint-scope@8.4.0: @@ -755,8 +2546,14 @@ snapshots: estraverse@5.3.0: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + esutils@2.0.3: {} + expect-type@1.3.0: {} + fast-deep-equal@3.1.3: {} fast-json-stable-stringify@2.1.0: {} @@ -783,16 +2580,31 @@ snapshots: flatted@3.3.3: {} + fsevents@2.3.3: + optional: true + + get-tsconfig@4.13.5: + dependencies: + resolve-pkg-maps: 1.0.0 + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 + glob@13.0.1: + dependencies: + minimatch: 10.1.2 + minipass: 7.1.2 + path-scurry: 2.0.1 + globals@14.0.0: {} graphemer@1.4.0: {} has-flag@4.0.0: {} + ieee754@1.2.1: {} + ignore@5.3.2: {} ignore@7.0.5: {} @@ -812,6 +2624,8 @@ snapshots: isexe@2.0.0: {} + js-tokens@9.0.1: {} + js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -837,6 +2651,18 @@ snapshots: lodash.merge@4.6.2: {} + loupe@3.2.1: {} + + lru-cache@11.2.5: {} + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + minimatch@10.1.2: + dependencies: + '@isaacs/brace-expansion': 5.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -845,8 +2671,12 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minipass@7.1.2: {} + ms@2.1.3: {} + nanoid@3.3.11: {} + natural-compare@1.4.0: {} optionator@0.9.4: @@ -866,6 +2696,8 @@ snapshots: dependencies: p-limit: 3.1.0 + package-json-from-dist@1.0.1: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -874,8 +2706,25 @@ snapshots: path-key@3.1.1: {} + path-scurry@2.0.1: + dependencies: + lru-cache: 11.2.5 + minipass: 7.1.2 + + pathe@2.0.3: {} + + pathval@2.0.1: {} + + picocolors@1.1.1: {} + picomatch@4.0.3: {} + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} prettier@3.7.4: {} @@ -884,6 +2733,46 @@ snapshots: resolve-from@4.0.0: {} + resolve-pkg-maps@1.0.0: {} + + rimraf@6.1.2: + dependencies: + glob: 13.0.1 + package-json-from-dist: 1.0.1 + + ripemd160-js@3.0.4: {} + + rollup@4.57.1: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.57.1 + '@rollup/rollup-android-arm64': 4.57.1 + '@rollup/rollup-darwin-arm64': 4.57.1 + '@rollup/rollup-darwin-x64': 4.57.1 + '@rollup/rollup-freebsd-arm64': 4.57.1 + '@rollup/rollup-freebsd-x64': 4.57.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 + '@rollup/rollup-linux-arm-musleabihf': 4.57.1 + '@rollup/rollup-linux-arm64-gnu': 4.57.1 + '@rollup/rollup-linux-arm64-musl': 4.57.1 + '@rollup/rollup-linux-loong64-gnu': 4.57.1 + '@rollup/rollup-linux-loong64-musl': 4.57.1 + '@rollup/rollup-linux-ppc64-gnu': 4.57.1 + '@rollup/rollup-linux-ppc64-musl': 4.57.1 + '@rollup/rollup-linux-riscv64-gnu': 4.57.1 + '@rollup/rollup-linux-riscv64-musl': 4.57.1 + '@rollup/rollup-linux-s390x-gnu': 4.57.1 + '@rollup/rollup-linux-x64-gnu': 4.57.1 + '@rollup/rollup-linux-x64-musl': 4.57.1 + '@rollup/rollup-openbsd-x64': 4.57.1 + '@rollup/rollup-openharmony-arm64': 4.57.1 + '@rollup/rollup-win32-arm64-msvc': 4.57.1 + '@rollup/rollup-win32-ia32-msvc': 4.57.1 + '@rollup/rollup-win32-x64-gnu': 4.57.1 + '@rollup/rollup-win32-x64-msvc': 4.57.1 + fsevents: 2.3.3 + semver@7.7.3: {} shebang-command@2.0.0: @@ -892,21 +2781,50 @@ snapshots: shebang-regex@3.0.0: {} + siginfo@2.0.0: {} + + source-map-js@1.2.1: {} + + stackback@0.0.2: {} + + std-env@3.10.0: {} + 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 + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tinypool@1.1.1: {} + + tinyrainbow@2.0.0: {} + + tinyspy@4.0.4: {} + ts-api-utils@2.1.0(typescript@5.8.3): dependencies: typescript: 5.8.3 + tsx@4.21.0: + dependencies: + esbuild: 0.27.3 + get-tsconfig: 4.13.5 + optionalDependencies: + fsevents: 2.3.3 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -924,14 +2842,96 @@ snapshots: typescript@5.8.3: {} + undici-types@6.21.0: {} + uri-js@4.4.1: dependencies: punycode: 2.3.1 + vite-node@3.2.4(@types/node@22.19.9)(tsx@4.21.0): + dependencies: + cac: 6.7.14 + debug: 4.4.1 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite@6.4.1(@types/node@22.19.9)(tsx@4.21.0): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.57.1 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 22.19.9 + fsevents: 2.3.3 + tsx: 4.21.0 + + vitest@3.2.4(@types/node@22.19.9)(tsx@4.21.0): + dependencies: + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@6.4.1(@types/node@22.19.9)(tsx@4.21.0)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + debug: 4.4.1 + expect-type: 1.3.0 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 6.4.1(@types/node@22.19.9)(tsx@4.21.0) + vite-node: 3.2.4(@types/node@22.19.9)(tsx@4.21.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.19.9 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + which@2.0.2: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + word-wrap@1.2.5: {} yocto-queue@0.1.0: {}