@loro-dev/flock-sqlite 0.1.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +7 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +50 -4
- package/dist/index.d.ts +50 -4
- package/dist/index.mjs +7 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +657 -71
- package/src/types.ts +22 -4
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["textEncoder","out: number[]","parseMetadata","parseData","encode_key","decode_key","structuredCloneFn: (<T>(value: T) => T) | undefined","buf: Uint8Array","result: ExportPayload","record: ExportRecord","batch: EventBatch","basePayload: ExportPayload","values: Value[]","lower: { value: Uint8Array; inclusive: boolean } | undefined","upper: { value: Uint8Array; inclusive: boolean } | undefined","prefixFilter: Uint8Array | undefined","where: string[]","params: unknown[]","result: ScanRow[]","clock: EntryClock","payload: ExportPayload","vv: VersionVector","entries: Record<string, ExportRecord>","peersToExport: Array<{ peer: string; fromEntry?: VersionVectorEntry }>","result: ExportBundle","skipped: Array<{ key: KeyPart[]; reason: string }>","appliedEvents: Array<{ key: KeyPart[]; payload: ExportPayload; source: string }>","keyParts: KeyPart[]"],"sources":["../src/digest.ts","../src/memcomparable.ts","../src/key-encoding.ts","../src/index.ts"],"sourcesContent":["import type { EntryClock, MetadataMap, Value } from \"./types\";\n\nconst TAG_RAW_VALUE = 0x10;\nconst TAG_RAW_CLOCK = 0x11;\nconst TAG_RAW_METADATA = 0x12;\nconst TAG_JSON_NULL = 0x20;\nconst TAG_JSON_BOOL = 0x21;\nconst TAG_JSON_NUMBER = 0x22;\nconst TAG_JSON_STRING = 0x23;\nconst TAG_JSON_ARRAY = 0x24;\nconst TAG_JSON_OBJECT = 0x25;\n\ntype RawValue = {\n data?: Value;\n metadata?: MetadataMap;\n clock: EntryClock;\n};\n\nexport type DigestRow = {\n key: Uint8Array;\n data: string | null;\n metadata: string | null;\n physical: number;\n logical: number;\n peer: string;\n};\n\nconst textEncoder = new TextEncoder();\n\nfunction toHex(bytes: Uint8Array): string {\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction encodeU64(value: number | bigint): Uint8Array {\n let remaining = BigInt(value);\n const out: number[] = [];\n do {\n let byte = Number(remaining & 0x7fn);\n remaining >>= 7n;\n if (remaining !== 0n) {\n byte |= 0x80;\n }\n out.push(byte);\n } while (remaining !== 0n);\n return new Uint8Array(out);\n}\n\nfunction encodeI64(value: number | bigint): Uint8Array {\n let remaining = BigInt(value);\n const out: number[] = [];\n let more = true;\n while (more) {\n let byte = Number(remaining & 0x7fn);\n remaining >>= 7n;\n const signBitSet = (byte & 0x40) !== 0;\n if (\n (remaining === 0n && !signBitSet) ||\n (remaining === -1n && signBitSet)\n ) {\n more = false;\n } else {\n byte |= 0x80;\n }\n out.push(byte);\n }\n return new Uint8Array(out);\n}\n\nexport async function sha256(bytes: Uint8Array): Promise<Uint8Array> {\n const cryptoMaybe = typeof crypto !== \"undefined\" ? crypto : undefined;\n if (cryptoMaybe?.subtle) {\n const digestInput = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(digestInput).set(bytes);\n const digest = await cryptoMaybe.subtle.digest(\"SHA-256\", digestInput);\n return new Uint8Array(digest);\n }\n try {\n const { createHash } = await import(\"crypto\");\n const hash = createHash(\"sha256\");\n hash.update(bytes);\n return new Uint8Array(hash.digest());\n } catch {\n throw new Error(\"No crypto implementation available for digest\");\n }\n}\n\nclass DigestWriter {\n private chunks: number[] = [];\n\n writeTag(tag: number): void {\n this.chunks.push(tag & 0xff);\n }\n\n writeBool(value: boolean): void {\n this.chunks.push(value ? 1 : 0);\n }\n\n writeBytes(bytes: Uint8Array): void {\n this.writeLen(bytes.length);\n for (let i = 0; i < bytes.length; i += 1) {\n this.chunks.push(bytes[i]);\n }\n }\n\n writeRawBytes(bytes: Uint8Array): void {\n for (let i = 0; i < bytes.length; i += 1) {\n this.chunks.push(bytes[i]);\n }\n }\n\n writeLen(length: number): void {\n this.writeRawBytes(encodeU64(length));\n }\n\n writeI64(value: number): void {\n this.writeRawBytes(encodeI64(value));\n }\n\n writeF64(value: number): void {\n const view = new DataView(new ArrayBuffer(8));\n view.setFloat64(0, value, false);\n const bytes = new Uint8Array(view.buffer);\n this.writeRawBytes(bytes);\n }\n\n writeString(value: string): void {\n this.writeBytes(textEncoder.encode(value));\n }\n\n writeJson(value: Value): void {\n if (value === null) {\n this.writeTag(TAG_JSON_NULL);\n return;\n }\n if (typeof value === \"boolean\") {\n this.writeTag(TAG_JSON_BOOL);\n this.writeBool(value);\n return;\n }\n if (typeof value === \"number\") {\n this.writeTag(TAG_JSON_NUMBER);\n this.writeF64(value);\n return;\n }\n if (typeof value === \"string\") {\n this.writeTag(TAG_JSON_STRING);\n this.writeString(value);\n return;\n }\n if (Array.isArray(value)) {\n this.writeTag(TAG_JSON_ARRAY);\n this.writeLen(value.length);\n for (const entry of value) {\n this.writeJson(entry);\n }\n return;\n }\n if (value && typeof value === \"object\") {\n const entries = Object.entries(value as Record<string, Value>).sort(\n ([a], [b]) => (a < b ? -1 : a > b ? 1 : 0),\n );\n this.writeTag(TAG_JSON_OBJECT);\n this.writeLen(entries.length);\n for (const [name, entry] of entries) {\n this.writeString(name);\n this.writeJson(entry);\n }\n return;\n }\n throw new TypeError(\"Unsupported JSON value in digest\");\n }\n\n writeRawValue(value: RawValue): void {\n this.writeTag(TAG_RAW_VALUE);\n if (value.data === undefined) {\n this.writeBool(false);\n } else {\n this.writeBool(true);\n this.writeJson(value.data);\n }\n this.writeTag(TAG_RAW_METADATA);\n if (!value.metadata || typeof value.metadata !== \"object\") {\n this.writeBool(false);\n } else {\n const entries = Object.entries(value.metadata).sort(\n ([a], [b]) => (a < b ? -1 : a > b ? 1 : 0),\n );\n this.writeBool(true);\n this.writeLen(entries.length);\n for (const [name, entry] of entries) {\n this.writeString(name);\n this.writeJson(entry as Value);\n }\n }\n this.writeTag(TAG_RAW_CLOCK);\n this.writeF64(value.clock.physicalTime);\n this.writeI64(Math.trunc(value.clock.logicalCounter));\n this.writeBytes(textEncoder.encode(value.clock.peerId));\n }\n\n async finish(): Promise<Uint8Array> {\n const data = new Uint8Array(this.chunks);\n return sha256(data);\n }\n}\n\nfunction parseMetadata(json: string | null): MetadataMap | undefined {\n if (!json) return undefined;\n try {\n const value = JSON.parse(json);\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n return value as MetadataMap;\n } catch {\n return undefined;\n }\n}\n\nfunction parseData(json: string | null): Value | undefined {\n if (json === null || json === undefined) {\n return undefined;\n }\n return JSON.parse(json) as Value;\n}\n\nasync function digestEntry(row: DigestRow): Promise<Uint8Array | null> {\n const data = parseData(row.data);\n if (data === undefined) {\n return null;\n }\n const metadata = parseMetadata(row.metadata);\n const writer = new DigestWriter();\n writer.writeBytes(row.key);\n writer.writeRawValue({\n data,\n metadata,\n clock: {\n physicalTime: Number(row.physical),\n logicalCounter: Number(row.logical),\n peerId: String(row.peer),\n },\n });\n return writer.finish();\n}\n\nexport async function computeDigest(rows: DigestRow[]): Promise<string> {\n const acc = new Uint8Array(32);\n for (const row of rows) {\n const digest = await digestEntry(row);\n if (!digest) {\n continue;\n }\n for (let i = 0; i < acc.length; i += 1) {\n acc[i] ^= digest[i];\n }\n }\n return toHex(acc);\n}\n","// @ts-nocheck\n// NOTE: generated from moon/memcomparable; intentionally skips type checking.\nconst $9221120237041090561L = { hi: 2146959360, lo: 1 };\nclass $PanicError extends Error {}\nfunction $panic() {\n throw new $PanicError();\n}\nconst moonbitlang$core$bigint$$BigInt$compare = (x, y) => x < y ? -1 : x > y ? 1 : 0;\nconst moonbitlang$core$bigint$$BigInt$equal = (x, y) => x === y;\nconst moonbitlang$core$bigint$$BigInt$from_int64 = (x) => BigInt(x.hi) * 0x100000000n + BigInt(x.lo >>> 0);\nconst moonbitlang$core$bigint$$BigInt$op_neg_ffi = (x) => -x;\nconst moonbitlang$core$bigint$$BigInt$op_add_ffi = (x, y) => x + y;\nconst moonbitlang$core$bigint$$BigInt$op_mul_ffi = (x, y) => x * y;\nconst moonbitlang$core$bigint$$BigInt$op_div_ffi = (x, y) => x / y;\nconst moonbitlang$core$bigint$$BigInt$op_mod_ffi = (x, y) => x % y;\nconst moonbitlang$core$bigint$$BigInt$js_shr = (x, y) => x >> BigInt(y);\nconst moonbitlang$core$bigint$$BigInt$to_uint = (x) => Number(BigInt.asUintN(32, x)) | 0;\nconst moonbitlang$core$bigint$$BigInt$to_int = (x) => Number(BigInt.asIntN(32, x));\nfunction $bound_check(arr, index) {\n if (index < 0 || index >= arr.length) throw new Error(\"Index out of bounds\");\n}\nconst moonbitlang$core$builtin$$int_to_string_js = (x, radix) => {\n return x.toString(radix);\n};\nfunction $makebytes(a, b) {\n const arr = new Uint8Array(a);\n if (b !== 0) {\n arr.fill(b);\n }\n return arr;\n}\nconst moonbitlang$core$builtin$$JSArray$push = (arr, val) => { arr.push(val); };\nconst $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Continue$0$ = { $tag: 0 };\nfunction $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Break$0$(param0) {\n this._0 = param0;\n}\n$64$moonbitlang$47$core$47$builtin$46$ForeachResult$Break$0$.prototype.$tag = 1;\nfunction $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Return$0$(param0) {\n this._0 = param0;\n}\n$64$moonbitlang$47$core$47$builtin$46$ForeachResult$Return$0$.prototype.$tag = 2;\nfunction $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Error$0$(param0) {\n this._0 = param0;\n}\n$64$moonbitlang$47$core$47$builtin$46$ForeachResult$Error$0$.prototype.$tag = 3;\nfunction $64$moonbitlang$47$core$47$builtin$46$ForeachResult$JumpOuter$0$(param0) {\n this._0 = param0;\n}\n$64$moonbitlang$47$core$47$builtin$46$ForeachResult$JumpOuter$0$.prototype.$tag = 4;\nconst moonbitlang$core$builtin$$MyInt64$reinterpret_as_double = function f(a) {\n let view = f._view;\n if (view === undefined) {\n view = f._view = new DataView(new ArrayBuffer(8));\n }\n view.setUint32(0, a.hi);\n view.setUint32(4, a.lo);\n return view.getFloat64(0);\n};\nconst moonbitlang$core$builtin$$MyInt64$reinterpret_double = function f(a) {\n let view = f._view;\n if (view === undefined) {\n view = f._view = new DataView(new ArrayBuffer(8));\n }\n view.setFloat64(0, a);\n const hi = view.getInt32(0);\n const lo = view.getInt32(4);\n return { hi, lo };\n};\nconst moonbitlang$core$builtin$$MyInt64$convert_to_double = (a) => a.hi * 4294967296.0 + (a.lo >>> 0);\nconst moonbitlang$core$builtin$$MyInt64$from_double = (a) => {\n if (isNaN(a)) {\n return { hi: 0, lo: 0 };\n }\n if (a >= 9223372036854775807) {\n return { hi: 0x7fffffff, lo: 0xffffffff };\n }\n if (a <= -9223372036854775808) {\n return { hi: -2147483648, lo: 0 };\n }\n let neg = false;\n if (a < 0) {\n neg = true;\n a = -a;\n }\n let hi = (a * (1 / 0x100000000)) | 0;\n let lo = a >>> 0;\n if (neg) {\n if (lo === 0) {\n hi = ~hi + 1;\n } else {\n hi = ~hi;\n lo = ~lo + 1;\n }\n }\n return { hi, lo };\n};\nconst $bytes_literal$0 = new Uint8Array();\nconst $255L = { hi: 0, lo: 255 };\nconst $0L = { hi: 0, lo: 0 };\nconst $_1L = { hi: -1, lo: -1 };\nconst $_9223372036854775808L = { hi: -2147483648, lo: 0 };\nfunction Result$Err$1$(param0) {\n this._0 = param0;\n}\nResult$Err$1$.prototype.$tag = 0;\nfunction Result$Ok$1$(param0) {\n this._0 = param0;\n}\nResult$Ok$1$.prototype.$tag = 1;\nfunction Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidTag(param0) {\n this._0 = param0;\n}\nError$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidTag.prototype.$tag = 2;\nconst Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF = { $tag: 1 };\nconst Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidUTF8 = { $tag: 0 };\nconst $1L = { hi: 0, lo: 1 };\nconst $256L = { hi: 0, lo: 256 };\nfunction Result$Err$2$(param0) {\n this._0 = param0;\n}\nResult$Err$2$.prototype.$tag = 0;\nfunction Result$Ok$2$(param0) {\n this._0 = param0;\n}\nResult$Ok$2$.prototype.$tag = 1;\nfunction Result$Err$3$(param0) {\n this._0 = param0;\n}\nResult$Err$3$.prototype.$tag = 0;\nfunction Result$Ok$3$(param0) {\n this._0 = param0;\n}\nResult$Ok$3$.prototype.$tag = 1;\nfunction KeyPart$Bytes(param0) {\n this._0 = param0;\n}\nKeyPart$Bytes.prototype.$tag = 0;\nfunction KeyPart$String(param0) {\n this._0 = param0;\n}\nKeyPart$String.prototype.$tag = 1;\nfunction KeyPart$Int(param0) {\n this._0 = param0;\n}\nKeyPart$Int.prototype.$tag = 2;\nfunction KeyPart$Float(param0) {\n this._0 = param0;\n}\nKeyPart$Float.prototype.$tag = 3;\nconst KeyPart$False = { $tag: 4 };\nconst KeyPart$True = { $tag: 5 };\nfunction Result$Err$4$(param0) {\n this._0 = param0;\n}\nResult$Err$4$.prototype.$tag = 0;\nfunction Result$Ok$4$(param0) {\n this._0 = param0;\n}\nResult$Ok$4$.prototype.$tag = 1;\nfunction KeyJsPart$Number(param0) {\n this._0 = param0;\n}\nKeyJsPart$Number.prototype.$tag = 0;\nfunction KeyJsPart$String(param0) {\n this._0 = param0;\n}\nKeyJsPart$String.prototype.$tag = 1;\nfunction KeyJsPart$Bytes(param0) {\n this._0 = param0;\n}\nKeyJsPart$Bytes.prototype.$tag = 2;\nconst KeyJsPart$True = { $tag: 3 };\nconst KeyJsPart$False = { $tag: 4 };\nconst zxch3n$expect$$to_string$46$42$bind$124$178 = \";\";\nconst zxch3n$expect$$red$46$constr$47$350 = 1;\nconst zxch3n$expect$$yellow$46$constr$47$352 = 3;\nconst zxch3n$expect$$blue$46$constr$47$354 = 4;\nconst moonbitlang$core$double$$not_a_number = moonbitlang$core$int64$$Int64$reinterpret_as_double($9221120237041090561L);\nfunction moonbitlang$core$abort$$abort$0$(msg) {\n return $panic();\n}\nfunction moonbitlang$core$abort$$abort$1$(msg) {\n return $panic();\n}\nfunction moonbitlang$core$abort$$abort$2$(msg) {\n return $panic();\n}\nfunction moonbitlang$core$abort$$abort$3$(msg) {\n $panic();\n}\nfunction moonbitlang$core$abort$$abort$4$(msg) {\n return $panic();\n}\nfunction moonbitlang$core$uint$$UInt$to_int64(self) {\n return moonbitlang$core$uint$$UInt$to_uint64(self);\n}\nfunction moonbitlang$core$array$$ArrayView$join$5$(self, separator) {\n if ((self.end - self.start | 0) === 0) {\n return \"\";\n } else {\n const _hd = self.buf[self.start];\n const _bind = self.buf;\n const _bind$2 = 1 + self.start | 0;\n const _bind$3 = self.end;\n const _x = { buf: _bind, start: _bind$2, end: _bind$3 };\n const hd = moonbitlang$core$string$$ToStringView$to_string_view$5$(_hd);\n let size_hint = hd.end - hd.start | 0;\n const _len = _x.end - _x.start | 0;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const s = _bind[_bind$2 + _i | 0];\n const _tmp$2 = size_hint;\n const _p = moonbitlang$core$string$$ToStringView$to_string_view$5$(s);\n size_hint = _tmp$2 + ((_p.end - _p.start | 0) + (separator.end - separator.start | 0) | 0) | 0;\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n size_hint = size_hint << 1;\n const buf = moonbitlang$core$builtin$$StringBuilder$new$46$inner(size_hint);\n moonbitlang$core$builtin$$Logger$write_substring$6$(buf, hd.str, hd.start, hd.end - hd.start | 0);\n if (moonbitlang$core$string$$String$char_length_eq$46$inner(separator.str, 0, separator.start, separator.end)) {\n const _len$2 = _x.end - _x.start | 0;\n let _tmp$2 = 0;\n while (true) {\n const _i = _tmp$2;\n if (_i < _len$2) {\n const s = _bind[_bind$2 + _i | 0];\n const s$2 = moonbitlang$core$string$$ToStringView$to_string_view$5$(s);\n moonbitlang$core$builtin$$Logger$write_substring$6$(buf, s$2.str, s$2.start, s$2.end - s$2.start | 0);\n _tmp$2 = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n } else {\n const _len$2 = _x.end - _x.start | 0;\n let _tmp$2 = 0;\n while (true) {\n const _i = _tmp$2;\n if (_i < _len$2) {\n const s = _bind[_bind$2 + _i | 0];\n const s$2 = moonbitlang$core$string$$ToStringView$to_string_view$5$(s);\n moonbitlang$core$builtin$$Logger$write_substring$6$(buf, separator.str, separator.start, separator.end - separator.start | 0);\n moonbitlang$core$builtin$$Logger$write_substring$6$(buf, s$2.str, s$2.start, s$2.end - s$2.start | 0);\n _tmp$2 = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n }\n return buf.val;\n }\n}\nfunction moonbitlang$core$array$$Array$push_iter$7$(self, iter) {\n iter((x) => {\n moonbitlang$core$array$$Array$push$7$(self, x);\n return 1;\n });\n}\nfunction moonbitlang$core$array$$Array$join$5$(self, separator) {\n return moonbitlang$core$array$$ArrayView$join$5$({ buf: self, start: 0, end: self.length }, separator);\n}\nfunction moonbitlang$core$builtin$$Compare$compare$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$compare(self, other);\n}\nfunction moonbitlang$core$builtin$$Eq$equal$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$equal(self, other);\n}\nfunction moonbitlang$core$builtin$$Neg$neg$8$(self) {\n return moonbitlang$core$bigint$$BigInt$op_neg_ffi(self);\n}\nfunction moonbitlang$core$builtin$$Add$add$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$op_add_ffi(self, other);\n}\nfunction moonbitlang$core$builtin$$Mul$mul$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$op_mul_ffi(self, other);\n}\nfunction moonbitlang$core$builtin$$Div$div$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$op_div_ffi(self, other);\n}\nfunction moonbitlang$core$builtin$$Mod$mod$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$op_mod_ffi(self, other);\n}\nfunction moonbitlang$core$builtin$$Shr$shr$8$(self, n) {\n if (n < 0) {\n moonbitlang$core$abort$$abort$3$(\"negative shift count\");\n }\n return moonbitlang$core$bigint$$BigInt$js_shr(self, n);\n}\nfunction moonbitlang$core$bigint$$BigInt$to_int64(self) {\n const hi = moonbitlang$core$bigint$$BigInt$to_uint(moonbitlang$core$builtin$$Shr$shr$8$(self, 32));\n const lo = moonbitlang$core$bigint$$BigInt$to_uint(self);\n return moonbitlang$core$builtin$$BitOr$lor$9$(moonbitlang$core$builtin$$Shl$shl$9$(moonbitlang$core$uint$$UInt$to_int64(hi), 32), moonbitlang$core$uint$$UInt$to_int64(lo));\n}\nfunction moonbitlang$core$bytes$$BytesView$at(self, index) {\n if (index >= 0 && index < (self.end - self.start | 0)) {\n const _tmp = self.bytes;\n const _tmp$2 = self.start + index | 0;\n $bound_check(_tmp, _tmp$2);\n return _tmp[_tmp$2];\n } else {\n return moonbitlang$core$abort$$abort$2$(`index out of bounds: the len is from 0 to ${moonbitlang$core$builtin$$Show$to_string$10$(self.end - self.start | 0)} but the index is ${moonbitlang$core$builtin$$Show$to_string$10$(index)}`);\n }\n}\nfunction moonbitlang$core$bytes$$Bytes$sub$46$inner(self, start, end) {\n const len = self.length;\n let end$2;\n if (end === undefined) {\n end$2 = len;\n } else {\n const _Some = end;\n const _end = _Some;\n end$2 = _end < 0 ? len + _end | 0 : _end;\n }\n const start$2 = start < 0 ? len + start | 0 : start;\n return start$2 >= 0 && (start$2 <= end$2 && end$2 <= len) ? { bytes: self, start: start$2, end: end$2 } : moonbitlang$core$abort$$abort$1$(\"Invalid index for View\");\n}\nfunction moonbitlang$core$bytes$$BytesView$sub$46$inner(self, start, end) {\n const len = self.end - self.start | 0;\n let end$2;\n if (end === undefined) {\n end$2 = len;\n } else {\n const _Some = end;\n const _end = _Some;\n end$2 = _end < 0 ? len + _end | 0 : _end;\n }\n const start$2 = start < 0 ? len + start | 0 : start;\n return start$2 >= 0 && (start$2 <= end$2 && end$2 <= len) ? { bytes: self.bytes, start: self.start + start$2 | 0, end: (self.start + start$2 | 0) + (end$2 - start$2 | 0) | 0 } : moonbitlang$core$abort$$abort$1$(\"Invalid index for View\");\n}\nfunction moonbitlang$core$bytes$$BytesView$iter(self) {\n const _p = (yield_) => {\n const _end383 = self.end - self.start | 0;\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < _end383) {\n const _bind = yield_(moonbitlang$core$bytes$$BytesView$at(self, i));\n if (_bind === 1) {\n } else {\n return 0;\n }\n _tmp = i + 1 | 0;\n continue;\n } else {\n return 1;\n }\n }\n };\n return _p;\n}\nfunction moonbitlang$core$bytes$$BytesView$iterator(self) {\n const i = { val: 0 };\n const len = self.end - self.start | 0;\n const _p = () => {\n if (i.val < len) {\n const _p$2 = i.val;\n const _tmp = self.bytes;\n const _tmp$2 = self.start + _p$2 | 0;\n $bound_check(_tmp, _tmp$2);\n const result = _tmp[_tmp$2];\n i.val = i.val + 1 | 0;\n return result;\n } else {\n return -1;\n }\n };\n return _p;\n}\nfunction moonbitlang$core$bytes$$Bytes$from_array(arr) {\n return moonbitlang$core$bytes$$Bytes$makei$11$(arr.end - arr.start | 0, (i) => moonbitlang$core$array$$ArrayView$at$2$(arr, i));\n}\nfunction moonbitlang$core$bytes$$Bytes$from_iter(iter) {\n const _bind = moonbitlang$core$builtin$$Iter$collect$2$(iter);\n return moonbitlang$core$bytes$$Bytes$from_array({ buf: _bind, start: 0, end: _bind.length });\n}\nfunction moonbitlang$core$byte$$Byte$to_uint64(self) {\n return moonbitlang$core$uint$$UInt$to_uint64(self);\n}\nfunction moonbitlang$core$string$$ToStringView$to_string_view$5$(self) {\n return { str: self, start: 0, end: self.length };\n}\nfunction moonbitlang$core$array$$FixedArray$unsafe_blit$2$(dst, dst_offset, src, src_offset, len) {\n if (dst === src && dst_offset < src_offset) {\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < len) {\n const _tmp$2 = dst_offset + i | 0;\n const _tmp$3 = src_offset + i | 0;\n $bound_check(src, _tmp$3);\n $bound_check(dst, _tmp$2);\n dst[_tmp$2] = src[_tmp$3];\n _tmp = i + 1 | 0;\n continue;\n } else {\n return;\n }\n }\n } else {\n let _tmp = len - 1 | 0;\n while (true) {\n const i = _tmp;\n if (i >= 0) {\n const _tmp$2 = dst_offset + i | 0;\n const _tmp$3 = src_offset + i | 0;\n $bound_check(src, _tmp$3);\n $bound_check(dst, _tmp$2);\n dst[_tmp$2] = src[_tmp$3];\n _tmp = i - 1 | 0;\n continue;\n } else {\n return;\n }\n }\n }\n}\nfunction moonbitlang$core$builtin$$StringBuilder$new$46$inner(size_hint) {\n return { val: \"\" };\n}\nfunction moonbitlang$core$builtin$$Logger$write_char$6$(self, ch) {\n const _bind = self;\n _bind.val = `${_bind.val}${String.fromCodePoint(ch)}`;\n}\nfunction moonbitlang$core$builtin$$Logger$write_string$6$(self, str) {\n const _bind = self;\n _bind.val = `${_bind.val}${str}`;\n}\nfunction moonbitlang$core$builtin$$Compare$op_gt$12$(x, y) {\n return moonbitlang$core$builtin$$Compare$compare$8$(x, y) > 0;\n}\nfunction moonbitlang$core$builtin$$Show$to_string$10$(self) {\n const logger = moonbitlang$core$builtin$$StringBuilder$new$46$inner(0);\n moonbitlang$core$builtin$$Show$output$13$(self, { self: logger, method_0: moonbitlang$core$builtin$$Logger$write_string$6$, method_1: moonbitlang$core$builtin$$Logger$write_substring$6$, method_2: moonbitlang$core$builtin$$Logger$write_char$6$ });\n return logger.val;\n}\nfunction moonbitlang$core$int$$Int$to_string$46$inner(self, radix) {\n return moonbitlang$core$builtin$$int_to_string_js(self, radix);\n}\nfunction moonbitlang$core$string$$String$char_length_eq$46$inner(self, len, start_offset, end_offset) {\n let end_offset$2;\n if (end_offset === undefined) {\n end_offset$2 = self.length;\n } else {\n const _Some = end_offset;\n end_offset$2 = _Some;\n }\n let _tmp = start_offset;\n let _tmp$2 = 0;\n while (true) {\n const index = _tmp;\n const count = _tmp$2;\n if (index < end_offset$2 && count < len) {\n const c1 = self.charCodeAt(index);\n if (55296 <= c1 && c1 <= 56319 && (index + 1 | 0) < end_offset$2) {\n const _tmp$3 = index + 1 | 0;\n const c2 = self.charCodeAt(_tmp$3);\n if (56320 <= c2 && c2 <= 57343) {\n _tmp = index + 2 | 0;\n _tmp$2 = count + 1 | 0;\n continue;\n } else {\n moonbitlang$core$abort$$abort$3$(\"invalid surrogate pair\");\n }\n }\n _tmp = index + 1 | 0;\n _tmp$2 = count + 1 | 0;\n continue;\n } else {\n return count === len && index === end_offset$2;\n }\n }\n}\nfunction moonbitlang$core$string$$String$substring$46$inner(self, start, end) {\n const len = self.length;\n let end$2;\n if (end === undefined) {\n end$2 = len;\n } else {\n const _Some = end;\n end$2 = _Some;\n }\n return start >= 0 && (start <= end$2 && end$2 <= len) ? self.substring(start, end$2) : $panic();\n}\nfunction moonbitlang$core$builtin$$Logger$write_substring$6$(self, str, start, len) {\n const _bind = self;\n _bind.val = `${_bind.val}${moonbitlang$core$string$$String$substring$46$inner(str, start, start + len | 0)}`;\n}\nfunction moonbitlang$core$array$$Array$new$46$inner$14$(capacity) {\n return [];\n}\nfunction moonbitlang$core$array$$Array$new$46$inner$15$(capacity) {\n return [];\n}\nfunction moonbitlang$core$array$$Array$new$46$inner$2$(capacity) {\n return [];\n}\nfunction moonbitlang$core$array$$Array$push$15$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$array$$Array$push$14$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$array$$Array$push$2$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$array$$Array$push$5$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$array$$Array$push$7$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$builtin$$Show$to_string$16$(self) {\n return String.fromCodePoint(self);\n}\nfunction moonbitlang$core$builtin$$Iter$each$17$(self, f) {\n const _foreach_result = { val: $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Continue$0$ };\n self((a) => {\n f(a);\n return 1;\n });\n const _tmp = _foreach_result.val;\n switch (_tmp.$tag) {\n case 0: {\n return;\n }\n case 1: {\n const _break = _tmp;\n _break._0;\n return;\n }\n case 2: {\n const _return = _tmp;\n return _return._0;\n }\n case 3: {\n $panic();\n return;\n }\n default: {\n $panic();\n return;\n }\n }\n}\nfunction moonbitlang$core$builtin$$Iter$collect$2$(self) {\n const result = [];\n moonbitlang$core$builtin$$Iter$each$17$(self, (e) => {\n moonbitlang$core$array$$Array$push$2$(result, e);\n });\n return result;\n}\nfunction moonbitlang$core$builtin$$Iterator$next$2$(self) {\n const _func = self;\n return _func();\n}\nfunction moonbitlang$core$builtin$$Show$output$13$(self, logger) {\n logger.method_0(logger.self, moonbitlang$core$int$$Int$to_string$46$inner(self, 10));\n}\nfunction moonbitlang$core$array$$Array$iter$7$(self) {\n const _p = (yield_) => {\n const _len = self.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const v = self[_i];\n const _bind = yield_(v);\n if (_bind === 1) {\n } else {\n return 0;\n }\n _tmp = _i + 1 | 0;\n continue;\n } else {\n return 1;\n }\n }\n };\n return _p;\n}\nfunction moonbitlang$core$array$$FixedArray$sub$46$inner$2$(self, start, end) {\n const len = self.length;\n let end$2;\n if (end === undefined) {\n end$2 = len;\n } else {\n const _Some = end;\n const _end = _Some;\n end$2 = _end < 0 ? len + _end | 0 : _end;\n }\n const start$2 = start < 0 ? len + start | 0 : start;\n return start$2 >= 0 && (start$2 <= end$2 && end$2 <= len) ? { buf: self, start: start$2, end: end$2 } : moonbitlang$core$abort$$abort$4$(\"View index out of bounds\");\n}\nfunction moonbitlang$core$builtin$$MyInt64$extend_i32_u(value) {\n return { hi: 0, lo: value };\n}\nfunction moonbitlang$core$uint64$$UInt64$extend_uint(value) {\n return moonbitlang$core$builtin$$MyInt64$extend_i32_u(value);\n}\nfunction moonbitlang$core$uint$$UInt$to_uint64(self) {\n return moonbitlang$core$uint64$$UInt64$extend_uint(self);\n}\nfunction moonbitlang$core$int64$$Int64$reinterpret_as_double(self) {\n return moonbitlang$core$builtin$$MyInt64$reinterpret_as_double(self);\n}\nfunction moonbitlang$core$builtin$$MyInt64$from_int(value) {\n return { hi: value >> 31 & -1, lo: value | 0 };\n}\nfunction moonbitlang$core$int$$Int$to_int64(self) {\n return moonbitlang$core$builtin$$MyInt64$from_int(self);\n}\nfunction moonbitlang$core$uint64$$UInt64$to_int(self) {\n const _p = self;\n return _p.lo;\n}\nfunction moonbitlang$core$uint64$$UInt64$to_byte(self) {\n return moonbitlang$core$uint64$$UInt64$to_int(self) & 255;\n}\nfunction moonbitlang$core$builtin$$MyInt64$land(self, other) {\n return { hi: self.hi & other.hi, lo: self.lo & other.lo };\n}\nfunction moonbitlang$core$builtin$$MyInt64$lor(self, other) {\n return { hi: self.hi | other.hi, lo: self.lo | other.lo };\n}\nfunction moonbitlang$core$builtin$$MyInt64$lxor(self, other) {\n return { hi: self.hi ^ other.hi, lo: self.lo ^ other.lo };\n}\nfunction moonbitlang$core$builtin$$MyInt64$lsl(self, shift) {\n const shift$2 = shift & 63;\n if (shift$2 === 0) {\n return self;\n } else {\n if (shift$2 < 32) {\n const _hi = self.hi;\n const _lo = self.lo;\n const hi = _hi;\n const lo = _lo;\n const hi$2 = hi << shift$2 | (lo >>> (32 - shift$2 | 0) | 0);\n const lo$2 = lo << shift$2;\n return { hi: hi$2, lo: lo$2 };\n } else {\n return { hi: self.lo << (shift$2 - 32 | 0), lo: 0 };\n }\n }\n}\nfunction moonbitlang$core$builtin$$MyInt64$lsr(self, shift) {\n const shift$2 = shift & 63;\n return shift$2 === 0 ? self : shift$2 < 32 ? { hi: self.hi >>> shift$2 | 0, lo: self.lo >>> shift$2 | self.hi << (32 - shift$2 | 0) } : { hi: 0, lo: self.hi >>> (shift$2 - 32 | 0) | 0 };\n}\nfunction moonbitlang$core$builtin$$BitOr$lor$9$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$lor(self, other);\n}\nfunction moonbitlang$core$builtin$$Shl$shl$9$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$lsl(self, other);\n}\nfunction moonbitlang$core$double$$Double$convert_int64(value) {\n return moonbitlang$core$builtin$$MyInt64$convert_to_double(value);\n}\nfunction moonbitlang$core$int64$$Int64$to_double(self) {\n return moonbitlang$core$double$$Double$convert_int64(self);\n}\nfunction moonbitlang$core$uint64$$UInt64$reinterpret_as_double(self) {\n return moonbitlang$core$builtin$$MyInt64$reinterpret_as_double(self);\n}\nfunction moonbitlang$core$double$$Double$reinterpret_as_uint64(self) {\n return moonbitlang$core$builtin$$MyInt64$reinterpret_double(self);\n}\nfunction moonbitlang$core$builtin$$Eq$equal$18$(self, other) {\n const _p = self;\n const _p$2 = other;\n return _p.hi === _p$2.hi && _p.lo === _p$2.lo;\n}\nfunction moonbitlang$core$builtin$$BitAnd$land$18$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$land(self, other);\n}\nfunction moonbitlang$core$builtin$$BitOr$lor$18$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$lor(self, other);\n}\nfunction moonbitlang$core$builtin$$BitXOr$lxor$18$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$lxor(self, other);\n}\nfunction moonbitlang$core$builtin$$Shl$shl$18$(self, shift) {\n return moonbitlang$core$builtin$$MyInt64$lsl(self, shift);\n}\nfunction moonbitlang$core$builtin$$Shr$shr$18$(self, shift) {\n return moonbitlang$core$builtin$$MyInt64$lsr(self, shift);\n}\nfunction moonbitlang$core$double$$Double$to_int64(self) {\n return moonbitlang$core$builtin$$MyInt64$from_double(self);\n}\nfunction moonbitlang$core$bytes$$Bytes$makei$11$(length, value) {\n if (length <= 0) {\n return $bytes_literal$0;\n }\n const arr = $makebytes(length, value(0));\n let _tmp = 1;\n while (true) {\n const i = _tmp;\n if (i < length) {\n $bound_check(arr, i);\n arr[i] = value(i);\n _tmp = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return arr;\n}\nfunction moonbitlang$core$builtin$$println$5$(input) {\n console.log(input);\n}\nfunction moonbitlang$core$array$$FixedArray$blit_from_bytes(self, bytes_offset, src, src_offset, length) {\n const e1 = (bytes_offset + length | 0) - 1 | 0;\n const e2 = (src_offset + length | 0) - 1 | 0;\n const len1 = self.length;\n const len2 = src.length;\n if (length >= 0 && (bytes_offset >= 0 && (e1 < len1 && (src_offset >= 0 && e2 < len2)))) {\n moonbitlang$core$array$$FixedArray$unsafe_blit$2$(self, bytes_offset, src, src_offset, length);\n return;\n } else {\n $panic();\n return;\n }\n}\nfunction moonbitlang$core$array$$ArrayView$at$2$(self, index) {\n if (index >= 0 && index < (self.end - self.start | 0)) {\n const _tmp = self.buf;\n const _tmp$2 = self.start + index | 0;\n $bound_check(_tmp, _tmp$2);\n return _tmp[_tmp$2];\n } else {\n return moonbitlang$core$abort$$abort$2$(`index out of bounds: the len is from 0 to ${moonbitlang$core$builtin$$Show$to_string$10$(self.end - self.start | 0)} but the index is ${moonbitlang$core$builtin$$Show$to_string$10$(index)}`);\n }\n}\nfunction moonbitlang$core$array$$Array$rev$2$(self) {\n const len = self.length;\n const arr = new Array(len);\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < len) {\n arr[i] = self[(len - i | 0) - 1 | 0];\n _tmp = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return arr;\n}\nfunction moonbitlang$core$buffer$$Buffer$grow_if_necessary(self, required) {\n const start = self.data.length <= 0 ? 1 : self.data.length;\n let enough_space;\n let _tmp = start;\n while (true) {\n const space = _tmp;\n if (space >= required) {\n enough_space = space;\n break;\n }\n _tmp = Math.imul(space, 2) | 0;\n continue;\n }\n if (enough_space !== self.data.length) {\n const new_data = $makebytes(enough_space, 0);\n moonbitlang$core$array$$FixedArray$unsafe_blit$2$(new_data, 0, self.data, 0, self.len);\n self.data = new_data;\n return;\n } else {\n return;\n }\n}\nfunction moonbitlang$core$buffer$$Buffer$write_byte(self, value) {\n moonbitlang$core$buffer$$Buffer$grow_if_necessary(self, self.len + 1 | 0);\n const _tmp = self.data;\n const _tmp$2 = self.len;\n $bound_check(_tmp, _tmp$2);\n _tmp[_tmp$2] = value;\n self.len = self.len + 1 | 0;\n}\nfunction moonbitlang$core$buffer$$Buffer$contents(self) {\n return moonbitlang$core$bytes$$Bytes$from_array(moonbitlang$core$array$$FixedArray$sub$46$inner$2$(self.data, 0, self.len));\n}\nfunction moonbitlang$core$buffer$$new$46$inner(size_hint) {\n const initial = size_hint < 1 ? 1 : size_hint;\n const data = $makebytes(initial, 0);\n return { data: data, len: 0 };\n}\nfunction moonbitlang$core$buffer$$Buffer$write_bytes(self, value) {\n const val_len = value.length;\n moonbitlang$core$buffer$$Buffer$grow_if_necessary(self, self.len + val_len | 0);\n moonbitlang$core$array$$FixedArray$blit_from_bytes(self.data, self.len, value, 0, val_len);\n self.len = self.len + val_len | 0;\n}\nfunction zxch3n$expect$$Color$to_bg_color_code(self) {\n switch (self) {\n case 0: {\n return \"40\";\n }\n case 1: {\n return \"41\";\n }\n case 2: {\n return \"42\";\n }\n case 3: {\n return \"43\";\n }\n case 4: {\n return \"44\";\n }\n case 5: {\n return \"45\";\n }\n case 6: {\n return \"46\";\n }\n case 7: {\n return \"47\";\n }\n default: {\n return \"49\";\n }\n }\n}\nfunction zxch3n$expect$$Color$to_color_code(self) {\n switch (self) {\n case 0: {\n return \"30\";\n }\n case 1: {\n return \"31\";\n }\n case 2: {\n return \"32\";\n }\n case 3: {\n return \"33\";\n }\n case 4: {\n return \"34\";\n }\n case 5: {\n return \"35\";\n }\n case 6: {\n return \"36\";\n }\n case 7: {\n return \"37\";\n }\n default: {\n return \"39\";\n }\n }\n}\nfunction zxch3n$expect$$Formated$to_string(self) {\n const styles = [];\n const _bind = self.color;\n if (_bind === undefined) {\n } else {\n const _Some = _bind;\n const _color = _Some;\n moonbitlang$core$array$$Array$push$5$(styles, zxch3n$expect$$Color$to_color_code(_color));\n }\n const _bind$2 = self.bg_color;\n if (_bind$2 === undefined) {\n } else {\n const _Some = _bind$2;\n const _bg_color = _Some;\n moonbitlang$core$array$$Array$push$5$(styles, zxch3n$expect$$Color$to_bg_color_code(_bg_color));\n }\n const _arr = self.formats;\n const _len = _arr.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const format = _arr[_i];\n switch (format) {\n case 0: {\n moonbitlang$core$array$$Array$push$5$(styles, \"1\");\n break;\n }\n case 1: {\n moonbitlang$core$array$$Array$push$5$(styles, \"4\");\n break;\n }\n case 2: {\n moonbitlang$core$array$$Array$push$5$(styles, \"5\");\n break;\n }\n case 3: {\n moonbitlang$core$array$$Array$push$5$(styles, \"7\");\n break;\n }\n case 4: {\n moonbitlang$core$array$$Array$push$5$(styles, \"8\");\n break;\n }\n case 5: {\n moonbitlang$core$array$$Array$push$5$(styles, \"9\");\n break;\n }\n default: {\n moonbitlang$core$array$$Array$push$5$(styles, \"3\");\n }\n }\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n if (styles.length > 0) {\n const style_string = moonbitlang$core$array$$Array$join$5$(styles, { str: zxch3n$expect$$to_string$46$42$bind$124$178, start: 0, end: zxch3n$expect$$to_string$46$42$bind$124$178.length });\n return `[${style_string}m${self.str}[0m`;\n } else {\n return self.str;\n }\n}\nfunction zxch3n$expect$$Formated$format(str) {\n return { str: str, bg_color: undefined, color: undefined, formats: [] };\n}\nfunction zxch3n$expect$$Formated$red(self) {\n return { str: self.str, bg_color: self.bg_color, color: zxch3n$expect$$red$46$constr$47$350, formats: self.formats };\n}\nfunction zxch3n$expect$$Formated$yellow(self) {\n return { str: self.str, bg_color: self.bg_color, color: zxch3n$expect$$yellow$46$constr$47$352, formats: self.formats };\n}\nfunction zxch3n$expect$$Formated$blue(self) {\n return { str: self.str, bg_color: self.bg_color, color: zxch3n$expect$$blue$46$constr$47$354, formats: self.formats };\n}\nfunction zxch3n$expect$$Formated$bold(self) {\n const _tmp = self.str;\n const _tmp$2 = self.bg_color;\n const _tmp$3 = self.color;\n const _self = [];\n moonbitlang$core$array$$Array$push$7$(_self, 0);\n moonbitlang$core$array$$Array$push_iter$7$(_self, moonbitlang$core$array$$Array$iter$7$(self.formats));\n return { str: _tmp, bg_color: _tmp$2, color: _tmp$3, formats: _self };\n}\nfunction zxch3n$expect$$panic$46$inner$3$(reason, loc) {\n const msg = `${zxch3n$expect$$Formated$to_string(zxch3n$expect$$Formated$red(zxch3n$expect$$Formated$bold(zxch3n$expect$$Formated$format(\"Panic: \"))))}${zxch3n$expect$$Formated$to_string(zxch3n$expect$$Formated$yellow(zxch3n$expect$$Formated$format(reason)))} at ${zxch3n$expect$$Formated$to_string(zxch3n$expect$$Formated$blue(zxch3n$expect$$Formated$format(loc)))}`;\n moonbitlang$core$builtin$$println$5$(msg);\n moonbitlang$core$abort$$abort$3$(msg);\n}\nfunction zxch3n$flock$types$$string_to_utf8(str) {\n const bytes = moonbitlang$core$array$$Array$new$46$inner$2$(0);\n let i = 0;\n while (true) {\n if (i < str.length) {\n const _tmp = i;\n $bound_check(str, _tmp);\n const code = str.charCodeAt(_tmp);\n if (code >= 55296 && (code <= 56319 && (i + 1 | 0) < str.length)) {\n const _tmp$2 = i + 1 | 0;\n $bound_check(str, _tmp$2);\n const low = str.charCodeAt(_tmp$2);\n if (low >= 56320 && low <= 57343) {\n const code_point = (65536 + (code - 55296 << 10) | 0) + (low - 56320 | 0) | 0;\n moonbitlang$core$array$$Array$push$2$(bytes, (240 | code_point >> 18) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code_point >> 12 & 63) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code_point >> 6 & 63) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code_point & 63) & 255);\n i = i + 1 | 0;\n } else {\n moonbitlang$core$array$$Array$push$2$(bytes, (224 | code >> 12) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code >> 6 & 63) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code & 63) & 255);\n }\n } else {\n if (code < 128) {\n moonbitlang$core$array$$Array$push$2$(bytes, code & 255);\n } else {\n if (code < 2048) {\n moonbitlang$core$array$$Array$push$2$(bytes, (192 | code >> 6) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code & 63) & 255);\n } else {\n moonbitlang$core$array$$Array$push$2$(bytes, (224 | code >> 12) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code >> 6 & 63) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code & 63) & 255);\n }\n }\n }\n i = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return moonbitlang$core$bytes$$Bytes$from_array({ buf: bytes, start: 0, end: bytes.length });\n}\nfunction zxch3n$flock$types$$Utf8Str$from_string(str) {\n return { bytes: zxch3n$flock$types$$string_to_utf8(str) };\n}\nfunction zxch3n$flock$types$$is_valid_utf8(utf8Arr) {\n let i = 0;\n while (true) {\n if (i < (utf8Arr.end - utf8Arr.start | 0)) {\n const byte = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i);\n const _p = 128;\n const _p$2 = byte & _p & 255;\n const _p$3 = 0;\n if (_p$2 === _p$3) {\n i = i + 1 | 0;\n } else {\n const _p$4 = 224;\n const _p$5 = byte & _p$4 & 255;\n const _p$6 = 192;\n if (_p$5 === _p$6) {\n if ((i + 1 | 0) >= (utf8Arr.end - utf8Arr.start | 0)) {\n return false;\n }\n const byte2 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 1 | 0);\n const _p$7 = 192;\n if ((byte2 & _p$7 & 255) !== 128) {\n return false;\n }\n i = i + 2 | 0;\n } else {\n const _p$7 = 240;\n const _p$8 = byte & _p$7 & 255;\n const _p$9 = 224;\n if (_p$8 === _p$9) {\n if ((i + 2 | 0) >= (utf8Arr.end - utf8Arr.start | 0)) {\n return false;\n }\n const byte2 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 1 | 0);\n const byte3 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 2 | 0);\n let _tmp;\n const _p$10 = 192;\n if ((byte2 & _p$10 & 255) !== 128) {\n _tmp = true;\n } else {\n const _p$11 = 192;\n _tmp = (byte3 & _p$11 & 255) !== 128;\n }\n if (_tmp) {\n return false;\n }\n i = i + 3 | 0;\n } else {\n const _p$10 = 248;\n const _p$11 = byte & _p$10 & 255;\n const _p$12 = 240;\n if (_p$11 === _p$12) {\n if ((i + 3 | 0) >= (utf8Arr.end - utf8Arr.start | 0)) {\n return false;\n }\n const byte2 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 1 | 0);\n const byte3 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 2 | 0);\n const byte4 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 3 | 0);\n let _tmp;\n const _p$13 = 192;\n if ((byte2 & _p$13 & 255) !== 128) {\n _tmp = true;\n } else {\n let _tmp$2;\n const _p$14 = 192;\n if ((byte3 & _p$14 & 255) !== 128) {\n _tmp$2 = true;\n } else {\n const _p$15 = 192;\n _tmp$2 = (byte4 & _p$15 & 255) !== 128;\n }\n _tmp = _tmp$2;\n }\n if (_tmp) {\n return false;\n }\n i = i + 4 | 0;\n } else {\n return false;\n }\n }\n }\n }\n continue;\n } else {\n break;\n }\n }\n return true;\n}\nfunction zxch3n$flock$types$$Utf8Str$from_bytes_view(bytes) {\n if (!zxch3n$flock$types$$is_valid_utf8(moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 0, undefined))) {\n return undefined;\n }\n return { bytes: moonbitlang$core$bytes$$Bytes$from_iter(moonbitlang$core$bytes$$BytesView$iter(bytes)) };\n}\nfunction zxch3n$flock$types$$new_string_from_utf8(utf8Arr) {\n let i = 0;\n let result = \"\";\n while (true) {\n if (i < utf8Arr.length) {\n const _tmp = i;\n $bound_check(utf8Arr, _tmp);\n const byte = utf8Arr[_tmp];\n let code_point;\n const _p = 128;\n const _p$2 = byte & _p & 255;\n const _p$3 = 0;\n if (_p$2 === _p$3) {\n code_point = byte;\n } else {\n const _p$4 = 224;\n const _p$5 = byte & _p$4 & 255;\n const _p$6 = 192;\n if (_p$5 === _p$6) {\n if ((i + 1 | 0) >= utf8Arr.length) {\n return undefined;\n }\n const _tmp$2 = i + 1 | 0;\n $bound_check(utf8Arr, _tmp$2);\n const byte2 = utf8Arr[_tmp$2];\n const _p$7 = 192;\n if ((byte2 & _p$7 & 255) !== 128) {\n return undefined;\n }\n i = i + 1 | 0;\n const _p$8 = 31;\n const _tmp$3 = (byte & _p$8 & 255) << 6;\n const _p$9 = 63;\n code_point = _tmp$3 | byte2 & _p$9 & 255;\n } else {\n const _p$7 = 240;\n const _p$8 = byte & _p$7 & 255;\n const _p$9 = 224;\n if (_p$8 === _p$9) {\n if ((i + 2 | 0) >= utf8Arr.length) {\n return undefined;\n }\n const _tmp$2 = i + 1 | 0;\n $bound_check(utf8Arr, _tmp$2);\n const byte2 = utf8Arr[_tmp$2];\n const _tmp$3 = i + 2 | 0;\n $bound_check(utf8Arr, _tmp$3);\n const byte3 = utf8Arr[_tmp$3];\n let _tmp$4;\n const _p$10 = 192;\n if ((byte2 & _p$10 & 255) !== 128) {\n _tmp$4 = true;\n } else {\n const _p$11 = 192;\n _tmp$4 = (byte3 & _p$11 & 255) !== 128;\n }\n if (_tmp$4) {\n return undefined;\n }\n i = i + 2 | 0;\n const _p$11 = 15;\n const _tmp$5 = (byte & _p$11 & 255) << 12;\n const _p$12 = 63;\n const _tmp$6 = _tmp$5 | (byte2 & _p$12 & 255) << 6;\n const _p$13 = 63;\n code_point = _tmp$6 | byte3 & _p$13 & 255;\n } else {\n const _p$10 = 248;\n const _p$11 = byte & _p$10 & 255;\n const _p$12 = 240;\n if (_p$11 === _p$12) {\n if ((i + 3 | 0) >= utf8Arr.length) {\n return undefined;\n }\n const _tmp$2 = i + 1 | 0;\n $bound_check(utf8Arr, _tmp$2);\n const byte2 = utf8Arr[_tmp$2];\n const _tmp$3 = i + 2 | 0;\n $bound_check(utf8Arr, _tmp$3);\n const byte3 = utf8Arr[_tmp$3];\n const _tmp$4 = i + 3 | 0;\n $bound_check(utf8Arr, _tmp$4);\n const byte4 = utf8Arr[_tmp$4];\n let _tmp$5;\n const _p$13 = 192;\n if ((byte2 & _p$13 & 255) !== 128) {\n _tmp$5 = true;\n } else {\n let _tmp$6;\n const _p$14 = 192;\n if ((byte3 & _p$14 & 255) !== 128) {\n _tmp$6 = true;\n } else {\n const _p$15 = 192;\n _tmp$6 = (byte4 & _p$15 & 255) !== 128;\n }\n _tmp$5 = _tmp$6;\n }\n if (_tmp$5) {\n return undefined;\n }\n i = i + 3 | 0;\n const _p$14 = 7;\n const _tmp$6 = (byte & _p$14 & 255) << 18;\n const _p$15 = 63;\n const _tmp$7 = _tmp$6 | (byte2 & _p$15 & 255) << 12;\n const _p$16 = 63;\n const _tmp$8 = _tmp$7 | (byte3 & _p$16 & 255) << 6;\n const _p$17 = 63;\n code_point = _tmp$8 | byte4 & _p$17 & 255;\n } else {\n return undefined;\n }\n }\n }\n }\n result = `${result}${moonbitlang$core$builtin$$Show$to_string$16$(code_point)}`;\n i = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return result;\n}\nfunction zxch3n$flock$types$$Utf8Str$to_string(self) {\n const _p = zxch3n$flock$types$$new_string_from_utf8(self.bytes);\n if (_p === undefined) {\n return $panic();\n } else {\n const _p$2 = _p;\n return _p$2;\n }\n}\nfunction zxch3n$flock$memcomparable$$double_to_bits(d) {\n return moonbitlang$core$double$$Double$reinterpret_as_uint64(d);\n}\nfunction zxch3n$flock$memcomparable$$double_from_bits(bits) {\n return moonbitlang$core$uint64$$UInt64$reinterpret_as_double(bits);\n}\nfunction zxch3n$flock$memcomparable$$uint64_to_be_bytes(n) {\n const bytes = moonbitlang$core$array$$Array$new$46$inner$2$(0);\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 56), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 48), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 40), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 32), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 24), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 16), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 8), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(n, $255L)));\n return moonbitlang$core$bytes$$Bytes$from_array({ buf: bytes, start: 0, end: bytes.length });\n}\nfunction zxch3n$flock$memcomparable$$uint64_from_be_bytes(bytes) {\n if (bytes.length !== 8) {\n zxch3n$expect$$panic$46$inner$3$(\"Invalid byte array length\", \"/Users/zxch3n/Code/flock/moon/memcomparable/utils.mbt:28:5-28:54\");\n }\n let result = $0L;\n const _tmp = result;\n $bound_check(bytes, 0);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[0]), 56));\n const _tmp$2 = result;\n $bound_check(bytes, 1);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$2, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[1]), 48));\n const _tmp$3 = result;\n $bound_check(bytes, 2);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$3, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[2]), 40));\n const _tmp$4 = result;\n $bound_check(bytes, 3);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$4, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[3]), 32));\n const _tmp$5 = result;\n $bound_check(bytes, 4);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$5, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[4]), 24));\n const _tmp$6 = result;\n $bound_check(bytes, 5);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$6, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[5]), 16));\n const _tmp$7 = result;\n $bound_check(bytes, 6);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$7, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[6]), 8));\n const _tmp$8 = result;\n $bound_check(bytes, 7);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$8, moonbitlang$core$byte$$Byte$to_uint64(bytes[7]));\n return result;\n}\nfunction zxch3n$flock$memcomparable$$Key$new() {\n return { parts: moonbitlang$core$array$$Array$new$46$inner$15$(0) };\n}\nfunction zxch3n$flock$memcomparable$$Key$push(self, part) {\n moonbitlang$core$array$$Array$push$15$(self.parts, part);\n}\nfunction zxch3n$flock$memcomparable$$canonicalize_f64(n) {\n return n !== n ? (n < 0 ? -moonbitlang$core$double$$not_a_number : moonbitlang$core$double$$not_a_number) : n;\n}\nfunction zxch3n$flock$memcomparable$$encode_bytes(bytes, output) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 1);\n const _it = moonbitlang$core$bytes$$BytesView$iterator(bytes);\n while (true) {\n const _bind = moonbitlang$core$builtin$$Iterator$next$2$(_it);\n if (_bind === -1) {\n break;\n } else {\n const _Some = _bind;\n const _b = _Some;\n moonbitlang$core$buffer$$Buffer$write_byte(output, _b);\n const _p = 0;\n if (_b === _p) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 255);\n }\n continue;\n }\n }\n moonbitlang$core$buffer$$Buffer$write_byte(output, 0);\n}\nfunction zxch3n$flock$memcomparable$$encode_string(s, output) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 2);\n const bytes = s.bytes;\n const _len = bytes.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const b = bytes[_i];\n moonbitlang$core$buffer$$Buffer$write_byte(output, b);\n const _p = 0;\n if (b === _p) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 255);\n }\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n moonbitlang$core$buffer$$Buffer$write_byte(output, 0);\n}\nfunction zxch3n$flock$memcomparable$$encode_float(f, output) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 33);\n const f$2 = zxch3n$flock$memcomparable$$canonicalize_f64(f);\n const bits = f$2 < 0 ? moonbitlang$core$builtin$$BitXOr$lxor$18$(zxch3n$flock$memcomparable$$double_to_bits(f$2), $_1L) : moonbitlang$core$builtin$$BitXOr$lxor$18$(zxch3n$flock$memcomparable$$double_to_bits(f$2), $_9223372036854775808L);\n const bytes = zxch3n$flock$memcomparable$$uint64_to_be_bytes(bits);\n const _len = bytes.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const b = bytes[_i];\n moonbitlang$core$buffer$$Buffer$write_byte(output, b);\n _tmp = _i + 1 | 0;\n continue;\n } else {\n return;\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$biguint_to_be_bytes(n) {\n const bytes = [];\n let x = n;\n while (true) {\n if (moonbitlang$core$builtin$$Compare$op_gt$12$(x, 0n)) {\n const byte = moonbitlang$core$bigint$$BigInt$to_int(moonbitlang$core$builtin$$Mod$mod$8$(x, 256n));\n moonbitlang$core$array$$Array$push$2$(bytes, byte & 255);\n x = moonbitlang$core$builtin$$Div$div$8$(x, 256n);\n continue;\n } else {\n break;\n }\n }\n const _bind = moonbitlang$core$array$$Array$rev$2$(bytes);\n return moonbitlang$core$bytes$$Bytes$from_array({ buf: _bind, start: 0, end: _bind.length });\n}\nfunction zxch3n$flock$memcomparable$$bigint_to_be_bytes(n, output) {\n if (moonbitlang$core$builtin$$Eq$equal$8$(n, 0n)) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 20);\n return undefined;\n }\n const sign = moonbitlang$core$builtin$$Compare$op_gt$12$(n, 0n);\n const bytes = sign ? zxch3n$flock$memcomparable$$biguint_to_be_bytes(n) : zxch3n$flock$memcomparable$$biguint_to_be_bytes(moonbitlang$core$builtin$$Neg$neg$8$(n));\n const n$2 = bytes.length;\n if (sign === false) {\n if (n$2 <= 8) {\n const _p = 20;\n const _p$2 = n$2 & 255;\n moonbitlang$core$buffer$$Buffer$write_byte(output, (_p - _p$2 | 0) & 255);\n } else {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 11);\n if (n$2 > 255) {\n moonbitlang$core$abort$$abort$3$(\"n is too large\");\n }\n const _p = n$2 & 255;\n const _p$2 = 255;\n moonbitlang$core$buffer$$Buffer$write_byte(output, (_p ^ _p$2) & 255);\n }\n const inverted = moonbitlang$core$buffer$$new$46$inner(0);\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < bytes.length) {\n $bound_check(bytes, i);\n const _p = bytes[i];\n const _p$2 = 255;\n moonbitlang$core$buffer$$Buffer$write_byte(inverted, (_p ^ _p$2) & 255);\n _tmp = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n moonbitlang$core$buffer$$Buffer$write_bytes(output, moonbitlang$core$buffer$$Buffer$contents(inverted));\n return;\n } else {\n if (n$2 <= 8) {\n const _p = 20;\n const _p$2 = n$2 & 255;\n moonbitlang$core$buffer$$Buffer$write_byte(output, (_p + _p$2 | 0) & 255);\n } else {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 29);\n if (n$2 > 255) {\n moonbitlang$core$abort$$abort$3$(\"n is too large\");\n }\n moonbitlang$core$buffer$$Buffer$write_byte(output, n$2 & 255);\n }\n moonbitlang$core$buffer$$Buffer$write_bytes(output, bytes);\n return;\n }\n}\nfunction zxch3n$flock$memcomparable$$KeyPart$encode_with_output(self, output) {\n switch (self.$tag) {\n case 0: {\n const _Bytes = self;\n const _bytes = _Bytes._0;\n const _bind = _bytes;\n zxch3n$flock$memcomparable$$encode_bytes(moonbitlang$core$bytes$$Bytes$sub$46$inner(_bind, 0, _bind.length), output);\n return;\n }\n case 1: {\n const _String = self;\n const _s = _String._0;\n zxch3n$flock$memcomparable$$encode_string(_s, output);\n return;\n }\n case 2: {\n const _Int = self;\n const _n = _Int._0;\n zxch3n$flock$memcomparable$$bigint_to_be_bytes(_n, output);\n return;\n }\n case 3: {\n const _Float = self;\n const _f = _Float._0;\n zxch3n$flock$memcomparable$$encode_float(_f, output);\n return;\n }\n case 4: {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 38);\n return;\n }\n default: {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 39);\n return;\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$Key$encode(self) {\n const output = moonbitlang$core$buffer$$new$46$inner(0);\n const _arr = self.parts;\n const _len = _arr.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const part = _arr[_i];\n zxch3n$flock$memcomparable$$KeyPart$encode_with_output(part, output);\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return moonbitlang$core$buffer$$Buffer$contents(output);\n}\nfunction zxch3n$flock$memcomparable$$parse_slice(bytes, start) {\n const output = moonbitlang$core$buffer$$new$46$inner(0);\n let i = start;\n while (true) {\n if (i < (bytes.end - bytes.start | 0)) {\n const b = moonbitlang$core$bytes$$BytesView$at(bytes, i);\n i = i + 1 | 0;\n const _p = 0;\n if (b === _p) {\n let _tmp;\n if (i < (bytes.end - bytes.start | 0)) {\n const _p$2 = moonbitlang$core$bytes$$BytesView$at(bytes, i);\n const _p$3 = 255;\n _tmp = _p$2 === _p$3;\n } else {\n _tmp = false;\n }\n if (_tmp) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 0);\n i = i + 1 | 0;\n continue;\n } else {\n const _bind = moonbitlang$core$buffer$$Buffer$contents(output);\n return new Result$Ok$1$({ _0: moonbitlang$core$bytes$$Bytes$sub$46$inner(_bind, 0, _bind.length), _1: i });\n }\n }\n moonbitlang$core$buffer$$Buffer$write_byte(output, b);\n continue;\n } else {\n break;\n }\n }\n return new Result$Err$1$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n}\nfunction zxch3n$flock$memcomparable$$bytes_to_bigint(bytes) {\n let n = moonbitlang$core$bigint$$BigInt$from_int64($0L);\n let base = moonbitlang$core$bigint$$BigInt$from_int64($1L);\n let _tmp = (bytes.end - bytes.start | 0) - 1 | 0;\n while (true) {\n const i = _tmp;\n if (i >= 0) {\n const byte_val = moonbitlang$core$bigint$$BigInt$from_int64(moonbitlang$core$int$$Int$to_int64(moonbitlang$core$bytes$$BytesView$at(bytes, i)));\n n = moonbitlang$core$builtin$$Add$add$8$(n, moonbitlang$core$builtin$$Mul$mul$8$(base, byte_val));\n base = moonbitlang$core$builtin$$Mul$mul$8$(base, moonbitlang$core$bigint$$BigInt$from_int64($256L));\n _tmp = i - 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return n;\n}\nfunction zxch3n$flock$memcomparable$$bigint_from_be_bytes_with_tag(bytes, tag) {\n let _tmp;\n if (20 <= tag) {\n const _p = 20;\n const _p$2 = 8 & 255;\n _tmp = tag <= ((_p + _p$2 | 0) & 255);\n } else {\n _tmp = false;\n }\n if (_tmp) {\n const _p = 20;\n const n = (tag - _p | 0) & 255;\n if ((bytes.end - bytes.start | 0) < n) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const num_bytes = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 0, n);\n const rest = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, n, undefined);\n return new Result$Ok$2$({ _0: rest, _1: zxch3n$flock$memcomparable$$bytes_to_bigint(num_bytes) });\n } else {\n let _tmp$2;\n const _p = 20;\n const _p$2 = 8 & 255;\n if (((_p - _p$2 | 0) & 255) <= tag) {\n _tmp$2 = tag < 20;\n } else {\n _tmp$2 = false;\n }\n if (_tmp$2) {\n const _p$3 = 20;\n const n = (_p$3 - tag | 0) & 255;\n if ((bytes.end - bytes.start | 0) < n) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const num_bytes = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 0, n);\n const rest = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, n, undefined);\n const inverted = moonbitlang$core$buffer$$new$46$inner(0);\n let _tmp$3 = 0;\n while (true) {\n const i = _tmp$3;\n if (i < (num_bytes.end - num_bytes.start | 0)) {\n const _p$4 = moonbitlang$core$bytes$$BytesView$at(num_bytes, i);\n const _p$5 = 255;\n moonbitlang$core$buffer$$Buffer$write_byte(inverted, (_p$4 ^ _p$5) & 255);\n _tmp$3 = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n const _bind = moonbitlang$core$buffer$$Buffer$contents(inverted);\n return new Result$Ok$2$({ _0: rest, _1: moonbitlang$core$builtin$$Neg$neg$8$(zxch3n$flock$memcomparable$$bytes_to_bigint(moonbitlang$core$bytes$$Bytes$sub$46$inner(_bind, 0, _bind.length))) });\n } else {\n const _p$3 = 11;\n if (tag === _p$3) {\n if ((bytes.end - bytes.start | 0) < 1) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const raw_length = moonbitlang$core$bytes$$BytesView$at(bytes, 0);\n const _p$4 = 255;\n const n = (raw_length ^ _p$4) & 255;\n if ((bytes.end - bytes.start | 0) < (n + 1 | 0)) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const num_bytes = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 1, n + 1 | 0);\n const rest = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, n + 1 | 0, undefined);\n const inverted = moonbitlang$core$buffer$$new$46$inner(0);\n let _tmp$3 = 0;\n while (true) {\n const i = _tmp$3;\n if (i < (num_bytes.end - num_bytes.start | 0)) {\n const _p$5 = moonbitlang$core$bytes$$BytesView$at(num_bytes, i);\n const _p$6 = 255;\n moonbitlang$core$buffer$$Buffer$write_byte(inverted, (_p$5 ^ _p$6) & 255);\n _tmp$3 = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n const _bind = moonbitlang$core$buffer$$Buffer$contents(inverted);\n return new Result$Ok$2$({ _0: rest, _1: moonbitlang$core$builtin$$Neg$neg$8$(zxch3n$flock$memcomparable$$bytes_to_bigint(moonbitlang$core$bytes$$Bytes$sub$46$inner(_bind, 0, _bind.length))) });\n } else {\n const _p$4 = 29;\n if (tag === _p$4) {\n if ((bytes.end - bytes.start | 0) < 1) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const raw_length = moonbitlang$core$bytes$$BytesView$at(bytes, 0);\n const n = raw_length;\n if ((bytes.end - bytes.start | 0) < (n + 1 | 0)) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const num_bytes = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 1, n + 1 | 0);\n const rest = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, n + 1 | 0, undefined);\n return new Result$Ok$2$({ _0: rest, _1: zxch3n$flock$memcomparable$$bytes_to_bigint(num_bytes) });\n } else {\n return new Result$Err$2$(new Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidTag(tag));\n }\n }\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$decode_float(bytes, start) {\n if ((start + 8 | 0) > (bytes.end - bytes.start | 0)) {\n return new Result$Err$3$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const data = moonbitlang$core$array$$Array$new$46$inner$2$(0);\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < 8) {\n moonbitlang$core$array$$Array$push$2$(data, moonbitlang$core$bytes$$BytesView$at(bytes, start + i | 0));\n _tmp = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n const bits = zxch3n$flock$memcomparable$$uint64_from_be_bytes(moonbitlang$core$bytes$$Bytes$from_array({ buf: data, start: 0, end: data.length }));\n const f = moonbitlang$core$builtin$$Eq$equal$18$(moonbitlang$core$builtin$$BitAnd$land$18$(bits, $_9223372036854775808L), $0L) ? zxch3n$flock$memcomparable$$double_from_bits(moonbitlang$core$builtin$$BitXOr$lxor$18$(bits, $_1L)) : zxch3n$flock$memcomparable$$double_from_bits(moonbitlang$core$builtin$$BitXOr$lxor$18$(bits, $_9223372036854775808L));\n return new Result$Ok$3$({ _0: f, _1: start + 8 | 0 });\n}\nfunction zxch3n$flock$memcomparable$$Key$decode(bytes) {\n const key = zxch3n$flock$memcomparable$$Key$new();\n let i = 0;\n while (true) {\n if (i < (bytes.end - bytes.start | 0)) {\n const tag = moonbitlang$core$bytes$$BytesView$at(bytes, i);\n i = i + 1 | 0;\n if (tag === 2) {\n const _bind = zxch3n$flock$memcomparable$$parse_slice(bytes, i);\n let _bind$2;\n if (_bind.$tag === 1) {\n const _ok = _bind;\n _bind$2 = _ok._0;\n } else {\n return _bind;\n }\n const _data = _bind$2._0;\n const _next_i = _bind$2._1;\n const _bind$3 = zxch3n$flock$types$$Utf8Str$from_bytes_view(_data);\n if (_bind$3 === undefined) {\n return new Result$Err$4$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidUTF8);\n } else {\n const _Some = _bind$3;\n const _s = _Some;\n zxch3n$flock$memcomparable$$Key$push(key, new KeyPart$String(_s));\n }\n i = _next_i;\n } else {\n if (tag === 1) {\n const _bind = zxch3n$flock$memcomparable$$parse_slice(bytes, i);\n let _bind$2;\n if (_bind.$tag === 1) {\n const _ok = _bind;\n _bind$2 = _ok._0;\n } else {\n return _bind;\n }\n const _data = _bind$2._0;\n const _next_i = _bind$2._1;\n zxch3n$flock$memcomparable$$Key$push(key, new KeyPart$Bytes(moonbitlang$core$bytes$$Bytes$from_iter(moonbitlang$core$bytes$$BytesView$iter(_data))));\n i = _next_i;\n } else {\n if (tag >= 11 && tag <= 29) {\n const _bind = zxch3n$flock$memcomparable$$bigint_from_be_bytes_with_tag(moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, i, undefined), tag);\n let _bind$2;\n if (_bind.$tag === 1) {\n const _ok = _bind;\n _bind$2 = _ok._0;\n } else {\n return _bind;\n }\n const _view = _bind$2._0;\n const _data = _bind$2._1;\n zxch3n$flock$memcomparable$$Key$push(key, new KeyPart$Int(_data));\n i = (bytes.end - bytes.start | 0) - (_view.end - _view.start | 0) | 0;\n } else {\n if (tag === 33) {\n const _bind = zxch3n$flock$memcomparable$$decode_float(bytes, i);\n let _bind$2;\n if (_bind.$tag === 1) {\n const _ok = _bind;\n _bind$2 = _ok._0;\n } else {\n return _bind;\n }\n const _data = _bind$2._0;\n const _next_i = _bind$2._1;\n zxch3n$flock$memcomparable$$Key$push(key, new KeyPart$Float(_data));\n i = _next_i;\n } else {\n if (tag === 38) {\n zxch3n$flock$memcomparable$$Key$push(key, KeyPart$False);\n } else {\n if (tag === 39) {\n zxch3n$flock$memcomparable$$Key$push(key, KeyPart$True);\n } else {\n return new Result$Err$4$(new Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidTag(tag));\n }\n }\n }\n }\n }\n }\n continue;\n } else {\n break;\n }\n }\n return new Result$Ok$4$(key);\n}\nfunction zxch3n$flock$memcomparable$$key_part_to_js_part(part) {\n switch (part.$tag) {\n case 0: {\n const _Bytes = part;\n const _bytes = _Bytes._0;\n return new KeyJsPart$Bytes(_bytes);\n }\n case 1: {\n const _String = part;\n const _s = _String._0;\n return new KeyJsPart$String(zxch3n$flock$types$$Utf8Str$to_string(_s));\n }\n case 2: {\n const _Int = part;\n const _n = _Int._0;\n return new KeyJsPart$Number(moonbitlang$core$int64$$Int64$to_double(moonbitlang$core$bigint$$BigInt$to_int64(_n)));\n }\n case 3: {\n const _Float = part;\n const _f = _Float._0;\n return new KeyJsPart$Number(_f);\n }\n case 4: {\n return KeyJsPart$False;\n }\n default: {\n return KeyJsPart$True;\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$js_part_to_key_part(part) {\n switch (part.$tag) {\n case 2: {\n const _Bytes = part;\n const _bytes = _Bytes._0;\n return new KeyPart$Bytes(_bytes);\n }\n case 1: {\n const _String = part;\n const _s = _String._0;\n return new KeyPart$String(zxch3n$flock$types$$Utf8Str$from_string(_s));\n }\n case 0: {\n const _Number = part;\n const _n = _Number._0;\n return moonbitlang$core$int64$$Int64$to_double(moonbitlang$core$double$$Double$to_int64(_n)) === _n ? new KeyPart$Int(moonbitlang$core$bigint$$BigInt$from_int64(moonbitlang$core$double$$Double$to_int64(_n))) : new KeyPart$Float(_n);\n }\n case 3: {\n return KeyPart$True;\n }\n default: {\n return KeyPart$False;\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$encode_key(parts) {\n const key = zxch3n$flock$memcomparable$$Key$new();\n const _len = parts.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const part = parts[_i];\n moonbitlang$core$array$$Array$push$15$(key.parts, zxch3n$flock$memcomparable$$js_part_to_key_part(part));\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return zxch3n$flock$memcomparable$$Key$encode(key);\n}\nfunction zxch3n$flock$memcomparable$$decode_key(bytes) {\n let key;\n let _try_err;\n _L: {\n _L$2: {\n const _bind = zxch3n$flock$memcomparable$$Key$decode(moonbitlang$core$bytes$$Bytes$sub$46$inner(bytes, 0, bytes.length));\n if (_bind.$tag === 1) {\n const _ok = _bind;\n key = _ok._0;\n } else {\n const _err = _bind;\n const _tmp = _err._0;\n _try_err = _tmp;\n break _L$2;\n }\n break _L;\n }\n key = moonbitlang$core$abort$$abort$0$(\"Failed to decode key\");\n }\n const parts = moonbitlang$core$array$$Array$new$46$inner$14$(0);\n const _arr = key.parts;\n const _len = _arr.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const part = _arr[_i];\n moonbitlang$core$array$$Array$push$14$(parts, zxch3n$flock$memcomparable$$key_part_to_js_part(part));\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return parts;\n}\nexport { zxch3n$flock$memcomparable$$encode_key as encode_key, zxch3n$flock$memcomparable$$decode_key as decode_key }\n","import { decode_key, encode_key } from \"./memcomparable\";\nimport type { KeyPart } from \"./types\";\n\ntype EncodedKey = Uint8Array;\n\ntype KeyJsPart =\n | { $tag: 0; _0: number }\n | { $tag: 1; _0: string }\n | { $tag: 2; _0: unknown }\n | { $tag: 3 }\n | { $tag: 4 };\n\nfunction assertValidKeyPart(part: KeyPart): KeyJsPart {\n if (typeof part === \"number\") {\n if (!Number.isFinite(part)) {\n throw new TypeError(\"Key parts must be finite numbers\");\n }\n return { $tag: 0, _0: part };\n }\n if (typeof part === \"string\") {\n return { $tag: 1, _0: part };\n }\n if (part === true) {\n return { $tag: 3 };\n }\n if (part === false) {\n return { $tag: 4 };\n }\n throw new TypeError(\"Key parts must be strings, numbers, or booleans\");\n}\n\nfunction parseBytesLike(value: unknown): Uint8Array {\n if (value instanceof Uint8Array) {\n return value;\n }\n if (value && typeof value === \"object\") {\n const buf = (value as { buf?: unknown }).buf;\n if (buf instanceof Uint8Array) {\n const start = (value as { start?: number }).start ?? 0;\n const end = (value as { end?: number }).end ?? buf.length;\n return buf.subarray(start, end);\n }\n }\n throw new TypeError(\"Invalid bytes payload in memcomparable decode\");\n}\n\nfunction fromJsPart(part: unknown): KeyPart {\n const tag = (part as { $tag?: number } | null)?.$tag;\n switch (tag) {\n case 0:\n return (part as { _0: number })._0;\n case 1:\n return (part as { _0: string })._0;\n case 3:\n return true;\n case 4:\n return false;\n case 2:\n // Bytes are not part of the public key surface; surface them as a binary blob for diagnostics.\n return parseBytesLike((part as { _0: unknown })._0) as unknown as KeyPart;\n default:\n throw new TypeError(\"Unsupported memcomparable key part\");\n }\n}\n\nexport function encodeKeyParts(parts: KeyPart[]): EncodedKey {\n const normalized = parts.map(assertValidKeyPart);\n return encode_key(normalized) as EncodedKey;\n}\n\nexport function decodeKeyParts(bytes: EncodedKey): KeyPart[] {\n const decoded = decode_key(bytes as unknown as Uint8Array) as Array<unknown>;\n return decoded.map((part) => fromJsPart(part));\n}\n\nexport function compareBytes(a: Uint8Array, b: Uint8Array): number {\n const min = Math.min(a.length, b.length);\n for (let i = 0; i < min; i += 1) {\n if (a[i] !== b[i]) {\n return a[i] < b[i] ? -1 : 1;\n }\n }\n if (a.length === b.length) {\n return 0;\n }\n return a.length < b.length ? -1 : 1;\n}\n\nexport function prefixUpperBound(bytes: Uint8Array): Uint8Array | undefined {\n if (bytes.length === 0) {\n return undefined;\n }\n const data = Array.from(bytes);\n for (let i = data.length - 1; i >= 0; i -= 1) {\n const current = data[i];\n if (current < 0xff) {\n data[i] = current + 1;\n return new Uint8Array(data.slice(0, i + 1));\n }\n }\n return undefined;\n}\n\nexport function keyToString(parts: KeyPart[]): string {\n return JSON.stringify(parts);\n}\n","import { openStore, type UniStoreConnection } from \"@loro-dev/unisqlite\";\nimport { computeDigest, type DigestRow } from \"./digest\";\nimport {\n compareBytes,\n decodeKeyParts,\n encodeKeyParts,\n keyToString,\n prefixUpperBound,\n} from \"./key-encoding\";\nimport type {\n EntryClock,\n Event,\n EventBatch,\n ExportBundle,\n ExportHooks,\n ExportOptions,\n ExportPayload,\n ExportRecord,\n ImportDecision,\n ImportHooks,\n ImportOptions,\n ImportReport,\n KeyPart,\n MetadataMap,\n PutHooks,\n PutWithMetaOptions,\n EventListener,\n ScanBound,\n ScanOptions,\n ScanRow,\n Value,\n VersionVector,\n VersionVectorEntry,\n} from \"./types\";\n\ntype ClockRow = {\n physical: number;\n logical: number;\n peer: string;\n};\n\ntype KvRow = {\n key: Uint8Array;\n data: string | null;\n metadata: string | null;\n physical: number;\n logical: number;\n peer: string;\n};\n\ntype ExportQueryRow = KvRow;\n\ntype PutOperation = {\n key: KeyPart[];\n payload: ExportPayload;\n now?: number;\n skipSameValue: boolean;\n source: string;\n clock?: EntryClock;\n eventSink?: Array<{ key: KeyPart[]; payload: ExportPayload; source: string }>;\n};\n\nconst textEncoder = new TextEncoder();\nconst structuredCloneFn: (<T>(value: T) => T) | undefined =\n (globalThis as typeof globalThis & { structuredClone?: <T>(value: T) => T }).structuredClone;\n\nfunction utf8ByteLength(value: string): number {\n return textEncoder.encode(value).length;\n}\n\nfunction isValidPeerId(peerId: unknown): peerId is string {\n return typeof peerId === \"string\" && utf8ByteLength(peerId) < 128;\n}\n\nfunction createRandomPeerId(): string {\n const id = new Uint8Array(32);\n const cryptoAny = typeof crypto !== \"undefined\" ? (crypto as any) : undefined;\n if (cryptoAny?.getRandomValues) {\n cryptoAny.getRandomValues(id);\n } else if (cryptoAny?.randomBytes) {\n const buf: Uint8Array = cryptoAny.randomBytes(32);\n id.set(buf);\n } else {\n for (let i = 0; i < 32; i += 1) {\n id[i] = Math.floor(Math.random() * 256);\n }\n }\n return Array.from(id, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction normalizePeerId(peerId?: string): string {\n if (peerId === undefined) {\n return createRandomPeerId();\n }\n if (!isValidPeerId(peerId)) {\n throw new TypeError(\"peerId must be a UTF-8 string under 128 bytes\");\n }\n return peerId;\n}\n\nfunction cloneJson<T>(value: T): T {\n if (value === undefined) {\n return value;\n }\n if (structuredCloneFn) {\n return structuredCloneFn(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction cloneMetadata(metadata: unknown): MetadataMap | undefined {\n if (!metadata || typeof metadata !== \"object\" || Array.isArray(metadata)) {\n return undefined;\n }\n return cloneJson(metadata as MetadataMap);\n}\n\nfunction assignPayload(target: ExportPayload, source?: ExportPayload | void): void {\n if (!source || typeof source !== \"object\") {\n return;\n }\n if (\"data\" in source) {\n const value = source.data;\n target.data = value === undefined ? undefined : cloneJson(value);\n }\n if (\"metadata\" in source) {\n target.metadata = cloneMetadata(source.metadata);\n }\n}\n\nfunction clonePayload(payload: ExportPayload | undefined): ExportPayload {\n const result: ExportPayload = {};\n assignPayload(result, payload);\n return result;\n}\n\nfunction mergePayload(base: ExportPayload, update?: ExportPayload | void): ExportPayload {\n const result = clonePayload(base);\n assignPayload(result, update);\n return result;\n}\n\nfunction buildRecord(clock: EntryClock, payload: ExportPayload): ExportRecord {\n const record: ExportRecord = {\n c: formatClock(clock),\n };\n if (payload.data !== undefined) {\n record.d = cloneJson(payload.data);\n }\n const metadata = cloneMetadata(payload.metadata);\n if (metadata !== undefined) {\n record.m = metadata;\n }\n return record;\n}\n\nfunction normalizeImportDecision(decision: ImportDecision): { accept: boolean; reason?: string } {\n if (!decision || typeof decision !== \"object\") {\n return { accept: true };\n }\n if (\"accept\" in decision) {\n if (!decision.accept) {\n return { accept: false, reason: decision.reason ?? \"rejected\" };\n }\n return { accept: true };\n }\n return { accept: true };\n}\n\nfunction isExportOptions(arg: VersionVector | ExportOptions | undefined): arg is ExportOptions {\n return (\n typeof arg === \"object\" &&\n arg !== null &&\n (Object.prototype.hasOwnProperty.call(arg, \"hooks\") ||\n Object.prototype.hasOwnProperty.call(arg, \"from\") ||\n Object.prototype.hasOwnProperty.call(arg, \"pruneTombstonesBefore\") ||\n Object.prototype.hasOwnProperty.call(arg, \"peerId\"))\n );\n}\n\nfunction isImportOptions(arg: ExportBundle | ImportOptions): arg is ImportOptions {\n return typeof arg === \"object\" && arg !== null && Object.prototype.hasOwnProperty.call(arg, \"bundle\");\n}\n\nfunction parseMetadata(json: string | null): MetadataMap | undefined {\n if (!json) {\n return undefined;\n }\n try {\n const parsed = JSON.parse(json);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n return parsed as MetadataMap;\n }\n } catch {\n // ignored\n }\n return undefined;\n}\n\nfunction parseData(json: string | null): Value | undefined {\n if (json === null || json === undefined) {\n return undefined;\n }\n return JSON.parse(json) as Value;\n}\n\nfunction parseClockString(raw: string): EntryClock {\n const parts = raw.split(\",\");\n if (parts.length < 3) {\n return { physicalTime: 0, logicalCounter: 0, peerId: \"\" };\n }\n const physical = Number(parts[0]);\n const logical = Number(parts[1]);\n const peerId = parts.slice(2).join(\",\");\n return {\n physicalTime: Number.isFinite(physical) ? physical : 0,\n logicalCounter: Number.isFinite(logical) ? Math.trunc(logical) : 0,\n peerId: isValidPeerId(peerId) ? peerId : \"\",\n };\n}\n\nfunction formatClock(clock: EntryClock): string {\n return `${clock.physicalTime},${clock.logicalCounter},${clock.peerId}`;\n}\n\nfunction compareClock(a: EntryClock, b: EntryClock): number {\n if (a.physicalTime !== b.physicalTime) {\n return a.physicalTime > b.physicalTime ? 1 : -1;\n }\n if (a.logicalCounter !== b.logicalCounter) {\n return a.logicalCounter > b.logicalCounter ? 1 : -1;\n }\n if (a.peerId === b.peerId) {\n return 0;\n }\n return a.peerId > b.peerId ? 1 : -1;\n}\n\nfunction normalizeVersionEntry(entry?: VersionVectorEntry): VersionVectorEntry | undefined {\n if (!entry) return undefined;\n const { physicalTime, logicalCounter } = entry;\n if (!Number.isFinite(physicalTime) || !Number.isFinite(logicalCounter)) {\n return undefined;\n }\n return {\n physicalTime: physicalTime,\n logicalCounter: Math.trunc(logicalCounter),\n };\n}\n\nfunction keyMatchesPrefix(key: Uint8Array, prefix: Uint8Array): boolean {\n if (prefix.length === 0) {\n return true;\n }\n if (key.length < prefix.length) {\n return false;\n }\n for (let i = 0; i < prefix.length; i += 1) {\n if (key[i] !== prefix[i]) {\n return false;\n }\n }\n return true;\n}\n\nasync function toDigestRows(rows: KvRow[]): Promise<DigestRow[]> {\n return rows.map((row) => ({\n key: row.key,\n data: row.data,\n metadata: row.metadata,\n physical: row.physical,\n logical: row.logical,\n peer: row.peer,\n }));\n}\n\nexport type FlockSQLiteOptions = {\n path: string;\n peerId?: string;\n connection?: UniStoreConnection;\n tablePrefix?: string;\n};\n\ntype TableNames = {\n kv: string;\n overridden: string;\n meta: string;\n idxKvPeerClock: string;\n idxOverriddenKey: string;\n idxOverriddenSupersededAt: string;\n};\n\nfunction normalizeTablePrefix(prefix?: string): string {\n if (!prefix) return \"\";\n if (typeof prefix !== \"string\") {\n throw new TypeError(\"tablePrefix must be a string\");\n }\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(prefix)) {\n throw new TypeError(\"tablePrefix must start with a letter/underscore and use only letters, digits, or underscores\");\n }\n return prefix;\n}\n\nfunction buildTableNames(prefix: string): TableNames {\n return {\n kv: `${prefix}kv`,\n overridden: `${prefix}overridden`,\n meta: `${prefix}meta`,\n idxKvPeerClock: `${prefix}idx_kv_peer_clock_key`,\n idxOverriddenKey: `${prefix}idx_overridden_key`,\n idxOverriddenSupersededAt: `${prefix}idx_overridden_superseded_at`,\n };\n}\n\nexport class FlockSQLite {\n private db: UniStoreConnection;\n private peerIdValue: string;\n private vv: Map<string, VersionVectorEntry>;\n private maxHlc: { physicalTime: number; logicalCounter: number };\n private listeners: Set<EventListener>;\n private tables: TableNames;\n\n private constructor(db: UniStoreConnection, peerId: string, vv: Map<string, VersionVectorEntry>, maxHlc: { physicalTime: number; logicalCounter: number }, tables: TableNames) {\n this.db = db;\n this.peerIdValue = peerId;\n this.vv = vv;\n this.maxHlc = maxHlc;\n this.listeners = new Set();\n this.tables = tables;\n }\n\n static async open(options: FlockSQLiteOptions): Promise<FlockSQLite> {\n const db = options.connection ?? (await openStore({ path: options.path }));\n const prefix = normalizeTablePrefix(options.tablePrefix);\n const tables = buildTableNames(prefix);\n await FlockSQLite.ensureSchema(db, tables);\n const peerId = await FlockSQLite.resolvePeerId(db, tables, options.peerId);\n const { vv, maxHlc } = await FlockSQLite.loadVersionState(db, tables);\n return new FlockSQLite(db, peerId, vv, maxHlc, tables);\n }\n\n static async fromJson(options: FlockSQLiteOptions & { bundle: ExportBundle }): Promise<FlockSQLite> {\n const flock = await FlockSQLite.open(options);\n await flock.importJson(options.bundle);\n return flock;\n }\n\n async close(): Promise<void> {\n await this.db.close();\n }\n\n private static async ensureSchema(db: UniStoreConnection, tables: TableNames): Promise<void> {\n await db.exec(`\n CREATE TABLE IF NOT EXISTS ${tables.kv} (\n key BLOB PRIMARY KEY,\n data TEXT NULL,\n metadata TEXT NULL,\n physical REAL NOT NULL,\n logical INTEGER NOT NULL,\n peer TEXT NOT NULL\n )`);\n await db.exec(`\n CREATE TABLE IF NOT EXISTS ${tables.overridden} (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n key BLOB,\n data TEXT NULL,\n metadata TEXT NULL,\n physical REAL NOT NULL,\n logical INTEGER NOT NULL,\n peer TEXT NOT NULL,\n superseded_at INTEGER DEFAULT (unixepoch())\n )`);\n await db.exec(`CREATE TABLE IF NOT EXISTS ${tables.meta} (peer_id TEXT)`);\n await db.exec(\n `CREATE INDEX IF NOT EXISTS ${tables.idxKvPeerClock} ON ${tables.kv}(peer, physical, logical, key)`,\n );\n await db.exec(\n `CREATE INDEX IF NOT EXISTS ${tables.idxOverriddenKey} ON ${tables.overridden}(key)`,\n );\n await db.exec(\n `CREATE INDEX IF NOT EXISTS ${tables.idxOverriddenSupersededAt} ON ${tables.overridden}(superseded_at)`,\n );\n }\n\n private static async resolvePeerId(db: UniStoreConnection, tables: TableNames, provided?: string): Promise<string> {\n const normalized = normalizePeerId(provided);\n const rows = await db.query<{ peer_id: string }>(`SELECT peer_id FROM ${tables.meta} LIMIT 1`);\n if (rows.length > 0 && typeof rows[0]?.peer_id === \"string\") {\n const existing = rows[0].peer_id;\n if (provided && existing !== normalized) {\n await db.run(`UPDATE ${tables.meta} SET peer_id = ?`, [normalized]);\n return normalized;\n }\n return normalizePeerId(existing);\n }\n await db.exec(`DELETE FROM ${tables.meta}`);\n await db.run(`INSERT INTO ${tables.meta}(peer_id) VALUES (?)`, [normalized]);\n return normalized;\n }\n\n private static async loadVersionState(db: UniStoreConnection, tables: TableNames): Promise<{ vv: Map<string, VersionVectorEntry>; maxHlc: { physicalTime: number; logicalCounter: number } }> {\n const vv = new Map<string, VersionVectorEntry>();\n const rows = await db.query<ClockRow>(\n `SELECT peer, MAX(physical) AS physical, MAX(logical) AS logical FROM ${tables.kv} GROUP BY peer`,\n );\n for (const row of rows) {\n if (!row || typeof row.peer !== \"string\") continue;\n const entry = normalizeVersionEntry({\n physicalTime: Number(row.physical ?? 0),\n logicalCounter: Number(row.logical ?? 0),\n });\n if (entry) {\n vv.set(row.peer, entry);\n }\n }\n const maxRow = await db.query<ClockRow>(\n `SELECT physical, logical FROM ${tables.kv} ORDER BY physical DESC, logical DESC LIMIT 1`,\n );\n const first = maxRow[0];\n const maxHlc =\n first && Number.isFinite(first.physical) && Number.isFinite(first.logical)\n ? { physicalTime: Number(first.physical), logicalCounter: Number(first.logical) }\n : { physicalTime: 0, logicalCounter: 0 };\n return { vv, maxHlc };\n }\n\n private bumpVersion(clock: EntryClock): void {\n const current = this.vv.get(clock.peerId);\n if (!current || compareClock(clock, { ...current, peerId: clock.peerId }) > 0) {\n this.vv.set(clock.peerId, {\n physicalTime: clock.physicalTime,\n logicalCounter: clock.logicalCounter,\n });\n }\n if (\n this.maxHlc.physicalTime < clock.physicalTime ||\n (this.maxHlc.physicalTime === clock.physicalTime &&\n this.maxHlc.logicalCounter < clock.logicalCounter)\n ) {\n this.maxHlc = { physicalTime: clock.physicalTime, logicalCounter: clock.logicalCounter };\n }\n }\n\n private allocateClock(now?: number): EntryClock {\n const timestamp = now ?? Date.now();\n let physical = this.maxHlc.physicalTime;\n let logical = this.maxHlc.logicalCounter;\n if (timestamp > physical) {\n physical = timestamp;\n logical = 0;\n } else {\n logical = logical + 1;\n }\n return { physicalTime: physical, logicalCounter: logical, peerId: this.peerIdValue };\n }\n\n private async applyOperation(operation: PutOperation): Promise<boolean> {\n const keyBytes = encodeKeyParts(operation.key);\n const clock = operation.clock ?? this.allocateClock(operation.now);\n const payload = mergePayload(operation.payload, {});\n const dataJson = payload.data === undefined ? null : JSON.stringify(payload.data);\n const metadataJson = payload.metadata === undefined ? null : JSON.stringify(payload.metadata);\n let applied = false;\n\n await this.db.asyncTransaction(async (tx) => {\n const existingRows = await tx.query<KvRow>(\n `SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,\n [keyBytes],\n );\n if (existingRows.length > 0) {\n const existing = existingRows[0];\n const existingClock: EntryClock = {\n physicalTime: Number(existing.physical ?? 0),\n logicalCounter: Number(existing.logical ?? 0),\n peerId: String(existing.peer ?? \"\"),\n };\n const cmp = compareClock(clock, existingClock);\n const existingData = existing.data ?? null;\n const existingMeta = existing.metadata ?? null;\n const samePayload =\n operation.skipSameValue &&\n dataJson === existingData &&\n metadataJson === existingMeta;\n if (samePayload) {\n return;\n }\n if (cmp < 0) {\n await tx.run(\n `INSERT INTO ${this.tables.overridden}(key, data, metadata, physical, logical, peer) VALUES (?, ?, ?, ?, ?, ?)`,\n [keyBytes, dataJson, metadataJson, clock.physicalTime, clock.logicalCounter, clock.peerId],\n );\n return;\n }\n if (cmp > 0) {\n await tx.run(\n `INSERT INTO ${this.tables.overridden}(key, data, metadata, physical, logical, peer) VALUES (?, ?, ?, ?, ?, ?)`,\n [\n keyBytes,\n existing.data ?? null,\n existing.metadata ?? null,\n existing.physical ?? 0,\n existing.logical ?? 0,\n existing.peer ?? \"\",\n ],\n );\n } else {\n return;\n }\n }\n await tx.run(\n `INSERT INTO ${this.tables.kv}(key, data, metadata, physical, logical, peer)\n VALUES (?, ?, ?, ?, ?, ?)\n ON CONFLICT(key) DO UPDATE SET\n data=excluded.data,\n metadata=excluded.metadata,\n physical=excluded.physical,\n logical=excluded.logical,\n peer=excluded.peer`,\n [keyBytes, dataJson, metadataJson, clock.physicalTime, clock.logicalCounter, clock.peerId],\n );\n applied = true;\n });\n\n this.bumpVersion(clock);\n if (applied) {\n const eventPayload = {\n key: operation.key.slice(),\n payload,\n source: operation.source,\n };\n if (operation.eventSink) {\n operation.eventSink.push(eventPayload);\n } else {\n this.emitEvents(operation.source, [eventPayload]);\n }\n }\n return applied;\n }\n\n private emitEvents(\n source: string,\n events: Array<{ key: KeyPart[]; payload: ExportPayload }>,\n ): void {\n if (this.listeners.size === 0 || events.length === 0) {\n return;\n }\n const batch: EventBatch = {\n source,\n events: events.map((event): Event => ({\n key: cloneJson(event.key),\n value: event.payload.data !== undefined ? cloneJson(event.payload.data) : undefined,\n metadata: cloneMetadata(event.payload.metadata),\n payload: clonePayload(event.payload),\n })),\n };\n this.listeners.forEach((listener) => {\n listener(batch);\n });\n }\n\n async put(key: KeyPart[], value: Value, now?: number): Promise<void> {\n await this.applyOperation({\n key,\n payload: { data: cloneJson(value) },\n now,\n skipSameValue: true,\n source: \"local\",\n });\n }\n\n async putWithMeta(key: KeyPart[], value: Value, options: PutWithMetaOptions = {}): Promise<void> {\n const basePayload: ExportPayload = { data: cloneJson(value) };\n if (options.metadata) {\n basePayload.metadata = cloneMetadata(options.metadata);\n }\n const hooks = options.hooks?.transform;\n if (hooks) {\n const working = clonePayload(basePayload);\n const transformed = await hooks({ key: key.slice(), now: options.now }, working);\n const finalPayload = mergePayload(basePayload, transformed ?? working);\n if (finalPayload.data === undefined) {\n throw new TypeError(\"putWithMeta requires a data value\");\n }\n await this.applyOperation({\n key,\n payload: finalPayload,\n now: options.now,\n skipSameValue: true,\n source: \"local\",\n });\n return;\n }\n await this.applyOperation({\n key,\n payload: basePayload,\n now: options.now,\n skipSameValue: true,\n source: \"local\",\n });\n }\n\n async delete(key: KeyPart[], now?: number): Promise<void> {\n await this.applyOperation({\n key,\n payload: {},\n now,\n skipSameValue: true,\n source: \"local\",\n });\n }\n\n async set(key: KeyPart[], value: Value, now?: number): Promise<void> {\n await this.put(key, value, now);\n }\n\n async setPeerId(peerId: string): Promise<void> {\n const normalized = normalizePeerId(peerId);\n await this.db.exec(`DELETE FROM ${this.tables.meta}`);\n await this.db.run(`INSERT INTO ${this.tables.meta}(peer_id) VALUES (?)`, [normalized]);\n this.peerIdValue = normalized;\n }\n\n async get(key: KeyPart[]): Promise<Value | undefined> {\n const keyBytes = encodeKeyParts(key);\n const rows = await this.db.query<KvRow>(\n `SELECT data FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,\n [keyBytes],\n );\n const row = rows[0];\n if (!row) return undefined;\n return parseData(row.data);\n }\n\n async getMvr(key: KeyPart[]): Promise<Value[]> {\n const rows = await this.scan({ prefix: key });\n const values: Value[] = [];\n for (const row of rows) {\n if (row.raw.d !== true) continue;\n if (row.key.length !== key.length + 1) continue;\n values.push(row.key[row.key.length - 1]);\n }\n return values;\n }\n\n async putMvr(key: KeyPart[], value: Value, now?: number): Promise<void> {\n if (value === null || typeof value === \"object\") {\n throw new TypeError(\"putMvr only accepts scalar values\");\n }\n const existing = await this.scan({ prefix: key });\n for (const row of existing) {\n if (row.raw.d === true) {\n await this.delete(row.key, now);\n }\n }\n const composite = key.slice();\n composite.push(value);\n await this.put(composite, true, now);\n }\n\n private buildScanBounds(\n options: ScanOptions,\n ): { where: string[]; params: unknown[]; empty?: boolean; postFilter?: (bytes: Uint8Array) => boolean } {\n let lower: { value: Uint8Array; inclusive: boolean } | undefined;\n let upper: { value: Uint8Array; inclusive: boolean } | undefined;\n let prefixFilter: Uint8Array | undefined;\n\n const applyLower = (candidate: { value: Uint8Array; inclusive: boolean }) => {\n if (!lower) {\n lower = candidate;\n return;\n }\n const cmp = compareBytes(candidate.value, lower.value);\n if (cmp > 0) {\n lower = candidate;\n } else if (cmp === 0) {\n lower = { value: lower.value, inclusive: lower.inclusive && candidate.inclusive };\n }\n };\n\n const applyUpper = (candidate: { value: Uint8Array; inclusive: boolean }) => {\n if (!upper) {\n upper = candidate;\n return;\n }\n const cmp = compareBytes(candidate.value, upper.value);\n if (cmp < 0) {\n upper = candidate;\n } else if (cmp === 0) {\n upper = { value: upper.value, inclusive: upper.inclusive && candidate.inclusive };\n }\n };\n\n try {\n if (options.prefix) {\n const prefixBytes = encodeKeyParts(options.prefix);\n prefixFilter = prefixBytes;\n applyLower({ value: prefixBytes, inclusive: true });\n const upperPrefix = prefixUpperBound(prefixBytes);\n if (upperPrefix) {\n applyUpper({ value: upperPrefix, inclusive: false });\n }\n }\n if (options.start && options.start.kind !== \"unbounded\") {\n applyLower({\n value: encodeKeyParts(options.start.key),\n inclusive: options.start.kind === \"inclusive\",\n });\n }\n if (options.end && options.end.kind !== \"unbounded\") {\n applyUpper({\n value: encodeKeyParts(options.end.key),\n inclusive: options.end.kind === \"inclusive\",\n });\n }\n } catch {\n return { where: [], params: [], empty: true };\n }\n\n const where: string[] = [];\n const params: unknown[] = [];\n if (lower) {\n where.push(`key ${lower.inclusive ? \">=\" : \">\"} ?`);\n params.push(lower.value);\n }\n if (upper) {\n where.push(`key ${upper.inclusive ? \"<=\" : \"<\"} ?`);\n params.push(upper.value);\n }\n const postFilter = prefixFilter\n ? ((pf: Uint8Array) => (bytes: Uint8Array) => keyMatchesPrefix(bytes, pf))(prefixFilter)\n : undefined;\n return { where, params, postFilter };\n }\n\n async scan(options: ScanOptions = {}): Promise<ScanRow[]> {\n const bounds = this.buildScanBounds(options);\n if (bounds.empty) {\n return [];\n }\n const clauses = bounds.where.length > 0 ? `WHERE ${bounds.where.join(\" AND \")}` : \"\";\n const rows = await this.db.query<KvRow>(\n `SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ${clauses} ORDER BY key ASC`,\n bounds.params as [],\n );\n const result: ScanRow[] = [];\n for (const row of rows) {\n const keyBytes = row.key;\n if (bounds.postFilter && !bounds.postFilter(keyBytes)) {\n continue;\n }\n const key = decodeKeyParts(keyBytes);\n const clock: EntryClock = {\n physicalTime: Number(row.physical ?? 0),\n logicalCounter: Number(row.logical ?? 0),\n peerId: String(row.peer ?? \"\"),\n };\n const payload: ExportPayload = {};\n const data = parseData(row.data);\n if (data !== undefined) payload.data = data;\n const metadata = parseMetadata(row.metadata);\n if (metadata !== undefined) payload.metadata = metadata;\n const raw = buildRecord(clock, payload);\n result.push({ key, raw, value: payload.data });\n }\n return result;\n }\n\n version(): VersionVector {\n const vv: VersionVector = {};\n for (const [peer, clock] of this.vv.entries()) {\n vv[peer] = { ...clock };\n }\n return vv;\n }\n\n peerId(): string {\n return this.peerIdValue;\n }\n\n getMaxPhysicalTime(): number {\n return this.maxHlc.physicalTime;\n }\n\n private async exportInternal(from?: VersionVector, pruneTombstonesBefore?: number, peerId?: string): Promise<ExportBundle> {\n const normalizedFrom = new Map<string, VersionVectorEntry>();\n if (from) {\n for (const [peer, entry] of Object.entries(from)) {\n const normalized = normalizeVersionEntry(entry);\n if (normalized) {\n normalizedFrom.set(peer, normalized);\n }\n }\n }\n\n const entries: Record<string, ExportRecord> = {};\n\n const peers = peerId ? [peerId] : Array.from(this.vv.keys());\n const peersToExport: Array<{ peer: string; fromEntry?: VersionVectorEntry }> = [];\n for (const peer of peers) {\n const localEntry = this.vv.get(peer);\n const fromEntry = normalizedFrom.get(peer);\n if (\n localEntry &&\n fromEntry &&\n (localEntry.physicalTime < fromEntry.physicalTime ||\n (localEntry.physicalTime === fromEntry.physicalTime &&\n localEntry.logicalCounter <= fromEntry.logicalCounter))\n ) {\n // Remote is already up to date for this peer.\n continue;\n }\n peersToExport.push({ peer, fromEntry });\n }\n\n if (peerId && peersToExport.every((p) => p.peer !== peerId)) {\n peersToExport.push({ peer: peerId, fromEntry: normalizedFrom.get(peerId) });\n }\n\n if (peersToExport.length === 0) {\n return { version: 0, entries };\n }\n\n for (const target of peersToExport) {\n const params: unknown[] = [target.peer];\n let clause = \"WHERE peer = ?\";\n if (target.fromEntry) {\n clause += \" AND physical >= ?\";\n params.push(target.fromEntry.physicalTime);\n }\n const rows = await this.db.query<ExportQueryRow>(\n `SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ${clause} ORDER BY physical, logical, key`,\n params as [],\n );\n for (const row of rows) {\n const clock: EntryClock = {\n physicalTime: Number(row.physical ?? 0),\n logicalCounter: Number(row.logical ?? 0),\n peerId: String(row.peer ?? \"\"),\n };\n const fromEntry = target.fromEntry;\n if (\n fromEntry &&\n (clock.physicalTime < fromEntry.physicalTime ||\n (clock.physicalTime === fromEntry.physicalTime &&\n clock.logicalCounter <= fromEntry.logicalCounter))\n ) {\n continue;\n }\n if (\n pruneTombstonesBefore !== undefined &&\n Number.isFinite(pruneTombstonesBefore) &&\n row.data === null &&\n clock.physicalTime < pruneTombstonesBefore\n ) {\n continue;\n }\n const payload: ExportPayload = {};\n const data = parseData(row.data);\n if (data !== undefined) payload.data = data;\n const metadata = parseMetadata(row.metadata);\n if (metadata !== undefined) payload.metadata = metadata;\n const keyParts = decodeKeyParts(row.key);\n entries[keyToString(keyParts)] = buildRecord(clock, payload);\n }\n }\n return { version: 0, entries };\n }\n\n private async exportWithHooks(options: ExportOptions): Promise<ExportBundle> {\n const base = await this.exportInternal(options.from, options.pruneTombstonesBefore, options.peerId);\n const transform = options.hooks?.transform;\n if (!transform) {\n return base;\n }\n const result: ExportBundle = { version: base.version, entries: {} };\n for (const [key, record] of Object.entries(base.entries)) {\n const clock = parseClockString(record.c);\n const context = {\n key: JSON.parse(key) as KeyPart[],\n clock,\n raw: { ...record },\n };\n const basePayload: ExportPayload = {};\n if (record.d !== undefined) basePayload.data = cloneJson(record.d);\n const meta = cloneMetadata(record.m);\n if (meta !== undefined) basePayload.metadata = meta;\n const working = clonePayload(basePayload);\n const transformed = await transform(context, working);\n const finalPayload = mergePayload(basePayload, transformed ?? working);\n result.entries[key] = buildRecord(clock, finalPayload);\n }\n return result;\n }\n\n exportJson(): Promise<ExportBundle>;\n exportJson(from: VersionVector): Promise<ExportBundle>;\n exportJson(from: VersionVector, pruneTombstonesBefore: number): Promise<ExportBundle>;\n exportJson(options: ExportOptions): Promise<ExportBundle>;\n exportJson(arg?: VersionVector | ExportOptions, pruneTombstonesBefore?: number): Promise<ExportBundle> {\n if (isExportOptions(arg)) {\n return this.exportWithHooks(arg);\n }\n return this.exportInternal(arg, pruneTombstonesBefore);\n }\n\n private async importInternal(bundle: ExportBundle): Promise<ImportReport> {\n if (bundle.version !== 0) {\n throw new TypeError(\"Unsupported bundle version\");\n }\n let accepted = 0;\n const skipped: Array<{ key: KeyPart[]; reason: string }> = [];\n const appliedEvents: Array<{ key: KeyPart[]; payload: ExportPayload; source: string }> = [];\n for (const [keyString, record] of Object.entries(bundle.entries)) {\n let keyParts: KeyPart[];\n try {\n const parsed = JSON.parse(keyString);\n keyParts = Array.isArray(parsed) ? (parsed as KeyPart[]) : [];\n } catch {\n skipped.push({ key: [], reason: \"invalid key\" });\n continue;\n }\n const clock = parseClockString(record.c);\n const payload: ExportPayload = {};\n if (record.d !== undefined) payload.data = cloneJson(record.d);\n const metadata = cloneMetadata(record.m);\n if (metadata !== undefined) payload.metadata = metadata;\n accepted += 1;\n await this.applyOperation({\n key: keyParts,\n payload,\n clock,\n skipSameValue: false,\n source: \"import\",\n eventSink: appliedEvents,\n });\n }\n if (appliedEvents.length > 0) {\n this.emitEvents(\"import\", appliedEvents);\n }\n return { accepted, skipped };\n }\n\n async importJson(bundle: ExportBundle): Promise<ImportReport>;\n async importJson(options: ImportOptions): Promise<ImportReport>;\n async importJson(arg: ExportBundle | ImportOptions): Promise<ImportReport> {\n if (isImportOptions(arg)) {\n const preprocess = arg.hooks?.preprocess;\n const working = preprocess ? { version: arg.bundle.version, entries: { ...arg.bundle.entries } } : arg.bundle;\n const skipped: Array<{ key: KeyPart[]; reason: string }> = [];\n if (preprocess) {\n for (const [key, record] of Object.entries(working.entries)) {\n const contextKey = JSON.parse(key) as KeyPart[];\n const clock = parseClockString(record.c);\n const payload: ExportPayload = {};\n if (record.d !== undefined) payload.data = cloneJson(record.d);\n const metadata = cloneMetadata(record.m);\n if (metadata !== undefined) payload.metadata = metadata;\n const decision = await preprocess(\n { key: contextKey, clock, raw: record },\n clonePayload(payload),\n );\n const normalized = normalizeImportDecision(decision);\n if (!normalized.accept) {\n skipped.push({ key: contextKey, reason: normalized.reason ?? \"rejected\" });\n delete working.entries[key];\n } else {\n working.entries[key] = buildRecord(clock, payload);\n }\n }\n }\n const baseReport = await this.importInternal(working);\n return { accepted: baseReport.accepted, skipped: skipped.concat(baseReport.skipped) };\n }\n return this.importInternal(arg);\n }\n\n async importJsonStr(json: string): Promise<ImportReport> {\n const parsed = JSON.parse(json) as ExportBundle;\n return this.importJson(parsed);\n }\n\n async digest(): Promise<string> {\n const rows = await this.db.query<KvRow>(\n `SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ORDER BY key ASC`,\n );\n const digestRows = await toDigestRows(rows);\n return computeDigest(digestRows);\n }\n\n async kvToJson(): Promise<ExportBundle> {\n return this.exportInternal();\n }\n\n async merge(other: FlockSQLite): Promise<void> {\n const bundle = await other.exportJson();\n await this.importJson(bundle);\n }\n\n static async checkConsistency(a: FlockSQLite, b: FlockSQLite): Promise<boolean> {\n const [digestA, digestB] = await Promise.all([a.digest(), b.digest()]);\n return digestA === digestB;\n }\n\n checkInvariants(): void {\n // Placeholder: SQLite-backed implementation does not yet expose internal invariants.\n }\n\n subscribe(listener: (batch: EventBatch) => void): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n}\n\nexport type {\n Event,\n EventBatch,\n ExportBundle,\n ExportHooks,\n ExportOptions,\n ExportPayload,\n ExportRecord,\n ImportHooks,\n ImportOptions,\n ImportReport,\n KeyPart,\n MetadataMap,\n PutHooks,\n PutWithMetaOptions,\n ScanBound,\n ScanOptions,\n ScanRow,\n Value,\n VersionVector,\n VersionVectorEntry,\n};\n\nexport { FlockSQLite as Flock };\nexport type { EventListener };\n"],"mappings":"gDAEA,MAyBMA,EAAc,IAAI,YAExB,SAAS,EAAM,EAA2B,CACxC,OAAO,MAAM,KAAK,EAAQ,GAAS,EAAK,SAAS,GAAG,CAAC,SAAS,EAAG,IAAI,CAAC,CAAC,KAAK,GAAG,CAGjF,SAAS,EAAU,EAAoC,CACrD,IAAI,EAAY,OAAO,EAAM,CACvBC,EAAgB,EAAE,CACxB,EAAG,CACD,IAAI,EAAO,OAAO,EAAY,KAAM,CACpC,IAAc,GACV,IAAc,KAChB,GAAQ,KAEV,EAAI,KAAK,EAAK,OACP,IAAc,IACvB,OAAO,IAAI,WAAW,EAAI,CAG5B,SAAS,EAAU,EAAoC,CACrD,IAAI,EAAY,OAAO,EAAM,CACvBA,EAAgB,EAAE,CACpB,EAAO,GACX,KAAO,GAAM,CACX,IAAI,EAAO,OAAO,EAAY,KAAM,CACpC,IAAc,GACd,IAAM,GAAc,EAAO,KAAU,EAElC,IAAc,IAAM,CAAC,GACrB,IAAc,CAAC,IAAM,EAEtB,EAAO,GAEP,GAAQ,IAEV,EAAI,KAAK,EAAK,CAEhB,OAAO,IAAI,WAAW,EAAI,CAG5B,eAAsB,EAAO,EAAwC,CACnE,IAAM,EAAc,OAAO,OAAW,IAAc,OAAS,IAAA,GAC7D,GAAI,GAAa,OAAQ,CACvB,IAAM,EAAc,IAAI,YAAY,EAAM,WAAW,CACrD,IAAI,WAAW,EAAY,CAAC,IAAI,EAAM,CACtC,IAAM,EAAS,MAAM,EAAY,OAAO,OAAO,UAAW,EAAY,CACtE,OAAO,IAAI,WAAW,EAAO,CAE/B,GAAI,CACF,GAAM,CAAE,cAAe,MAAM,OAAO,UAC9B,EAAO,EAAW,SAAS,CAEjC,OADA,EAAK,OAAO,EAAM,CACX,IAAI,WAAW,EAAK,QAAQ,CAAC,MAC9B,CACN,MAAU,MAAM,gDAAgD,EAIpE,IAAM,EAAN,KAAmB,CACjB,OAA2B,EAAE,CAE7B,SAAS,EAAmB,CAC1B,KAAK,OAAO,KAAK,EAAM,IAAK,CAG9B,UAAU,EAAsB,CAC9B,KAAK,OAAO,KAAK,EAAQ,EAAI,EAAE,CAGjC,WAAW,EAAyB,CAClC,KAAK,SAAS,EAAM,OAAO,CAC3B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,GAAK,EACrC,KAAK,OAAO,KAAK,EAAM,GAAG,CAI9B,cAAc,EAAyB,CACrC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,GAAK,EACrC,KAAK,OAAO,KAAK,EAAM,GAAG,CAI9B,SAAS,EAAsB,CAC7B,KAAK,cAAc,EAAU,EAAO,CAAC,CAGvC,SAAS,EAAqB,CAC5B,KAAK,cAAc,EAAU,EAAM,CAAC,CAGtC,SAAS,EAAqB,CAC5B,IAAM,EAAO,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC,CAC7C,EAAK,WAAW,EAAG,EAAO,GAAM,CAChC,IAAM,EAAQ,IAAI,WAAW,EAAK,OAAO,CACzC,KAAK,cAAc,EAAM,CAG3B,YAAY,EAAqB,CAC/B,KAAK,WAAWD,EAAY,OAAO,EAAM,CAAC,CAG5C,UAAU,EAAoB,CAC5B,GAAI,IAAU,KAAM,CAClB,KAAK,SAAS,GAAc,CAC5B,OAEF,GAAI,OAAO,GAAU,UAAW,CAC9B,KAAK,SAAS,GAAc,CAC5B,KAAK,UAAU,EAAM,CACrB,OAEF,GAAI,OAAO,GAAU,SAAU,CAC7B,KAAK,SAAS,GAAgB,CAC9B,KAAK,SAAS,EAAM,CACpB,OAEF,GAAI,OAAO,GAAU,SAAU,CAC7B,KAAK,SAAS,GAAgB,CAC9B,KAAK,YAAY,EAAM,CACvB,OAEF,GAAI,MAAM,QAAQ,EAAM,CAAE,CACxB,KAAK,SAAS,GAAe,CAC7B,KAAK,SAAS,EAAM,OAAO,CAC3B,IAAK,IAAM,KAAS,EAClB,KAAK,UAAU,EAAM,CAEvB,OAEF,GAAI,GAAS,OAAO,GAAU,SAAU,CACtC,IAAM,EAAU,OAAO,QAAQ,EAA+B,CAAC,MAC5D,CAAC,GAAI,CAAC,KAAQ,EAAI,EAAI,GAAK,EAAI,EAAI,EAAI,EACzC,CACD,KAAK,SAAS,GAAgB,CAC9B,KAAK,SAAS,EAAQ,OAAO,CAC7B,IAAK,GAAM,CAAC,EAAM,KAAU,EAC1B,KAAK,YAAY,EAAK,CACtB,KAAK,UAAU,EAAM,CAEvB,OAEF,MAAU,UAAU,mCAAmC,CAGzD,cAAc,EAAuB,CASnC,GARA,KAAK,SAAS,GAAc,CACxB,EAAM,OAAS,IAAA,GACjB,KAAK,UAAU,GAAM,EAErB,KAAK,UAAU,GAAK,CACpB,KAAK,UAAU,EAAM,KAAK,EAE5B,KAAK,SAAS,GAAiB,CAC3B,CAAC,EAAM,UAAY,OAAO,EAAM,UAAa,SAC/C,KAAK,UAAU,GAAM,KAChB,CACL,IAAM,EAAU,OAAO,QAAQ,EAAM,SAAS,CAAC,MAC5C,CAAC,GAAI,CAAC,KAAQ,EAAI,EAAI,GAAK,EAAI,EAAI,EAAI,EACzC,CACD,KAAK,UAAU,GAAK,CACpB,KAAK,SAAS,EAAQ,OAAO,CAC7B,IAAK,GAAM,CAAC,EAAM,KAAU,EAC1B,KAAK,YAAY,EAAK,CACtB,KAAK,UAAU,EAAe,CAGlC,KAAK,SAAS,GAAc,CAC5B,KAAK,SAAS,EAAM,MAAM,aAAa,CACvC,KAAK,SAAS,KAAK,MAAM,EAAM,MAAM,eAAe,CAAC,CACrD,KAAK,WAAWA,EAAY,OAAO,EAAM,MAAM,OAAO,CAAC,CAGzD,MAAM,QAA8B,CAElC,OAAO,EADM,IAAI,WAAW,KAAK,OAAO,CACrB,GAIvB,SAASE,EAAc,EAA8C,CAC9D,KACL,GAAI,CACF,IAAM,EAAQ,KAAK,MAAM,EAAK,CAI9B,MAHI,CAAC,GAAS,OAAO,GAAU,UAAY,MAAM,QAAQ,EAAM,CAC7D,OAEK,OACD,CACN,QAIJ,SAASC,EAAU,EAAwC,CACrD,MAAS,KAGb,OAAO,KAAK,MAAM,EAAK,CAGzB,eAAe,EAAY,EAA4C,CACrE,IAAM,EAAOA,EAAU,EAAI,KAAK,CAChC,GAAI,IAAS,IAAA,GACX,OAAO,KAET,IAAM,EAAWD,EAAc,EAAI,SAAS,CACtC,EAAS,IAAI,EAWnB,OAVA,EAAO,WAAW,EAAI,IAAI,CAC1B,EAAO,cAAc,CACnB,OACA,WACA,MAAO,CACL,aAAc,OAAO,EAAI,SAAS,CAClC,eAAgB,OAAO,EAAI,QAAQ,CACnC,OAAQ,OAAO,EAAI,KAAK,CACzB,CACF,CAAC,CACK,EAAO,QAAQ,CAGxB,eAAsB,EAAc,EAAoC,CACtE,IAAM,EAAM,IAAI,WAAW,GAAG,CAC9B,IAAK,IAAM,KAAO,EAAM,CACtB,IAAM,EAAS,MAAM,EAAY,EAAI,CAChC,KAGL,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,GAAK,EACnC,EAAI,IAAM,EAAO,GAGrB,OAAO,EAAM,EAAI,CC/PnB,MAAM,GAAwB,CAAE,GAAI,WAAY,GAAI,EAAG,CACvD,IAAM,GAAN,cAA0B,KAAM,GAChC,SAAS,GAAS,CAChB,MAAM,IAAI,GAEZ,MAAM,IAA2C,EAAG,IAAM,EAAI,EAAI,GAAK,EAAI,EAAI,EAAI,EAC7E,IAAyC,EAAG,IAAM,IAAM,EACxD,EAA8C,GAAM,OAAO,EAAE,GAAG,CAAG,YAAe,OAAO,EAAE,KAAO,EAAE,CACpG,GAA8C,GAAM,CAAC,EACrD,IAA8C,EAAG,IAAM,EAAI,EAC3D,IAA8C,EAAG,IAAM,EAAI,EAC3D,IAA8C,EAAG,IAAM,EAAI,EAC3D,IAA8C,EAAG,IAAM,EAAI,EAC3D,IAA0C,EAAG,IAAM,GAAK,OAAO,EAAE,CACjE,GAA2C,GAAM,OAAO,OAAO,QAAQ,GAAI,EAAE,CAAC,CAAG,EACjF,GAA0C,GAAM,OAAO,OAAO,OAAO,GAAI,EAAE,CAAC,CAClF,SAAS,EAAa,EAAK,EAAO,CAChC,GAAI,EAAQ,GAAK,GAAS,EAAI,OAAQ,MAAU,MAAM,sBAAsB,CAE9E,MAAM,IAA8C,EAAG,IAC9C,EAAE,SAAS,EAAM,CAE1B,SAAS,EAAW,EAAG,EAAG,CACxB,IAAM,EAAM,IAAI,WAAW,EAAE,CAI7B,OAHI,IAAM,GACR,EAAI,KAAK,EAAE,CAEN,EAET,MAAM,GAA0C,EAAK,IAAQ,CAAE,EAAI,KAAK,EAAI,EACtE,GAAkE,CAAE,KAAM,EAAG,CACnF,SAAS,GAA6D,EAAQ,CAC5E,KAAK,GAAK,EAEZ,GAA6D,UAAU,KAAO,EAC9E,SAAS,GAA8D,EAAQ,CAC7E,KAAK,GAAK,EAEZ,GAA8D,UAAU,KAAO,EAC/E,SAAS,GAA6D,EAAQ,CAC5E,KAAK,GAAK,EAEZ,GAA6D,UAAU,KAAO,EAC9E,SAAS,GAAiE,EAAQ,CAChF,KAAK,GAAK,EAEZ,GAAiE,UAAU,KAAO,EAClF,MAAM,GAA0D,SAAS,EAAE,EAAG,CAC5E,IAAI,EAAO,EAAE,MAMb,OALI,IAAS,IAAA,KACX,EAAO,EAAE,MAAQ,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC,EAEnD,EAAK,UAAU,EAAG,EAAE,GAAG,CACvB,EAAK,UAAU,EAAG,EAAE,GAAG,CAChB,EAAK,WAAW,EAAE,EAErB,GAAuD,SAAS,EAAE,EAAG,CACzE,IAAI,EAAO,EAAE,MAOb,OANI,IAAS,IAAA,KACX,EAAO,EAAE,MAAQ,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC,EAEnD,EAAK,WAAW,EAAG,EAAE,CAGd,CAAE,GAFE,EAAK,SAAS,EAAE,CAEd,GADF,EAAK,SAAS,EAAE,CACV,EAEb,GAAuD,GAAM,EAAE,GAAK,YAAgB,EAAE,KAAO,GAC7F,GAAiD,GAAM,CAC3D,GAAI,MAAM,EAAE,CACV,MAAO,CAAE,GAAI,EAAG,GAAI,EAAG,CAEzB,GAAI,GAAK,mBACP,MAAO,CAAE,GAAI,WAAY,GAAI,WAAY,CAE3C,GAAI,GAAK,oBACP,MAAO,CAAE,GAAI,YAAa,GAAI,EAAG,CAEnC,IAAI,EAAM,GACN,EAAI,IACN,EAAM,GACN,EAAI,CAAC,GAEP,IAAI,EAAW,EAAI,WAAT,EAAyB,EAC/B,EAAK,IAAM,EASf,OARI,IACE,IAAO,EACT,EAAK,CAAC,EAAK,GAEX,EAAK,CAAC,EACN,EAAK,CAAC,EAAK,IAGR,CAAE,KAAI,KAAI,EAEb,GAAmB,IAAI,WACvB,EAAQ,CAAE,GAAI,EAAG,GAAI,IAAK,CAC1B,EAAM,CAAE,GAAI,EAAG,GAAI,EAAG,CACtB,GAAO,CAAE,GAAI,GAAI,GAAI,GAAI,CACzB,GAAyB,CAAE,GAAI,YAAa,GAAI,EAAG,CACzD,SAAS,GAAc,EAAQ,CAC7B,KAAK,GAAK,EAEZ,GAAc,UAAU,KAAO,EAC/B,SAAS,GAAa,EAAQ,CAC5B,KAAK,GAAK,EAEZ,GAAa,UAAU,KAAO,EAC9B,SAAS,EAAiE,EAAQ,CAChF,KAAK,GAAK,EAEZ,EAAiE,UAAU,KAAO,EAClF,MAAM,EAAsE,CAAE,KAAM,EAAG,CACjF,GAAoE,CAAE,KAAM,EAAG,CAC/E,GAAM,CAAE,GAAI,EAAG,GAAI,EAAG,CACtB,GAAQ,CAAE,GAAI,EAAG,GAAI,IAAK,CAChC,SAAS,EAAc,EAAQ,CAC7B,KAAK,GAAK,EAEZ,EAAc,UAAU,KAAO,EAC/B,SAAS,EAAa,EAAQ,CAC5B,KAAK,GAAK,EAEZ,EAAa,UAAU,KAAO,EAC9B,SAAS,GAAc,EAAQ,CAC7B,KAAK,GAAK,EAEZ,GAAc,UAAU,KAAO,EAC/B,SAAS,GAAa,EAAQ,CAC5B,KAAK,GAAK,EAEZ,GAAa,UAAU,KAAO,EAC9B,SAAS,EAAc,EAAQ,CAC7B,KAAK,GAAK,EAEZ,EAAc,UAAU,KAAO,EAC/B,SAAS,EAAe,EAAQ,CAC9B,KAAK,GAAK,EAEZ,EAAe,UAAU,KAAO,EAChC,SAAS,EAAY,EAAQ,CAC3B,KAAK,GAAK,EAEZ,EAAY,UAAU,KAAO,EAC7B,SAAS,EAAc,EAAQ,CAC7B,KAAK,GAAK,EAEZ,EAAc,UAAU,KAAO,EAC/B,MAAM,GAAgB,CAAE,KAAM,EAAG,CAC3B,GAAe,CAAE,KAAM,EAAG,CAChC,SAAS,GAAc,EAAQ,CAC7B,KAAK,GAAK,EAEZ,GAAc,UAAU,KAAO,EAC/B,SAAS,GAAa,EAAQ,CAC5B,KAAK,GAAK,EAEZ,GAAa,UAAU,KAAO,EAC9B,SAAS,GAAiB,EAAQ,CAChC,KAAK,GAAK,EAEZ,GAAiB,UAAU,KAAO,EAClC,SAAS,GAAiB,EAAQ,CAChC,KAAK,GAAK,EAEZ,GAAiB,UAAU,KAAO,EAClC,SAAS,GAAgB,EAAQ,CAC/B,KAAK,GAAK,EAEZ,GAAgB,UAAU,KAAO,EACjC,MAAM,GAAiB,CAAE,KAAM,EAAG,CAC5B,GAAkB,CAAE,KAAM,EAAG,CAK7B,GAAwC,GAAoD,GAAsB,CACxH,SAAS,GAAiC,EAAK,CAC7C,OAAO,GAAQ,CAEjB,SAAS,GAAiC,EAAK,CAC7C,OAAO,GAAQ,CAEjB,SAAS,GAAiC,EAAK,CAC7C,OAAO,GAAQ,CAEjB,SAAS,EAAiC,EAAK,CAC7C,GAAQ,CAEV,SAAS,GAAiC,EAAK,CAC7C,OAAO,GAAQ,CAEjB,SAAS,GAAqC,EAAM,CAClD,OAAO,GAAsC,EAAK,CAEpD,SAAS,GAA0C,EAAM,EAAW,CAClE,GAAK,EAAK,IAAM,EAAK,MAAQ,EAEtB,CACL,IAAM,EAAM,EAAK,IAAI,EAAK,OACpB,EAAQ,EAAK,IACb,EAAU,EAAI,EAAK,MAAQ,EAE3B,EAAK,CAAE,IAAK,EAAO,MAAO,EAAS,IADzB,EAAK,IACkC,CACjD,EAAK,EAAwD,EAAI,CACnE,EAAY,EAAG,IAAM,EAAG,MAAQ,EAC9B,EAAO,EAAG,IAAM,EAAG,MAAQ,EAC7B,EAAO,EACX,OAAa,CACX,IAAM,EAAK,EACX,GAAI,EAAK,EAAM,CACb,IAAM,EAAI,EAAM,EAAU,EAAK,GACzB,EAAS,EACT,EAAK,EAAwD,EAAE,CACrE,EAAY,IAAW,EAAG,IAAM,EAAG,MAAQ,IAAM,EAAU,IAAM,EAAU,MAAQ,GAAK,GAAK,EAC7F,EAAO,EAAK,EAAI,EAChB,cAEA,MAGJ,IAAyB,EACzB,IAAM,EAAM,GAAqD,EAAU,CAE3E,GADA,EAAoD,EAAK,EAAG,IAAK,EAAG,MAAO,EAAG,IAAM,EAAG,MAAQ,EAAE,CAC7F,GAAwD,EAAU,IAAK,EAAG,EAAU,MAAO,EAAU,IAAI,CAAE,CAC7G,IAAM,EAAS,EAAG,IAAM,EAAG,MAAQ,EAC/B,EAAS,EACb,OAAa,CACX,IAAM,EAAK,EACX,GAAI,EAAK,EAAQ,CACf,IAAM,EAAI,EAAM,EAAU,EAAK,GACzB,EAAM,EAAwD,EAAE,CACtE,EAAoD,EAAK,EAAI,IAAK,EAAI,MAAO,EAAI,IAAM,EAAI,MAAQ,EAAE,CACrG,EAAS,EAAK,EAAI,EAClB,cAEA,WAGC,CACL,IAAM,EAAS,EAAG,IAAM,EAAG,MAAQ,EAC/B,EAAS,EACb,OAAa,CACX,IAAM,EAAK,EACX,GAAI,EAAK,EAAQ,CACf,IAAM,EAAI,EAAM,EAAU,EAAK,GACzB,EAAM,EAAwD,EAAE,CACtE,EAAoD,EAAK,EAAU,IAAK,EAAU,MAAO,EAAU,IAAM,EAAU,MAAQ,EAAE,CAC7H,EAAoD,EAAK,EAAI,IAAK,EAAI,MAAO,EAAI,IAAM,EAAI,MAAQ,EAAE,CACrG,EAAS,EAAK,EAAI,EAClB,cAEA,OAIN,OAAO,EAAI,SA3DX,MAAO,GA8DX,SAAS,GAA2C,EAAM,EAAM,CAC9D,EAAM,IACJ,GAAsC,EAAM,EAAE,CACvC,GACP,CAEJ,SAAS,GAAsC,EAAM,EAAW,CAC9D,OAAO,GAA0C,CAAE,IAAK,EAAM,MAAO,EAAG,IAAK,EAAK,OAAQ,CAAE,EAAU,CAExG,SAAS,GAA6C,EAAM,EAAO,CACjE,OAAO,GAAwC,EAAM,EAAM,CAE7D,SAAS,GAAsC,EAAM,EAAO,CAC1D,OAAO,GAAsC,EAAM,EAAM,CAE3D,SAAS,GAAqC,EAAM,CAClD,OAAO,GAA2C,EAAK,CAEzD,SAAS,GAAqC,EAAM,EAAO,CACzD,OAAO,GAA2C,EAAM,EAAM,CAEhE,SAAS,GAAqC,EAAM,EAAO,CACzD,OAAO,GAA2C,EAAM,EAAM,CAEhE,SAAS,GAAqC,EAAM,EAAO,CACzD,OAAO,GAA2C,EAAM,EAAM,CAEhE,SAAS,GAAqC,EAAM,EAAO,CACzD,OAAO,GAA2C,EAAM,EAAM,CAEhE,SAAS,GAAqC,EAAM,EAAG,CAIrD,OAHI,EAAI,GACN,EAAiC,uBAAuB,CAEnD,GAAuC,EAAM,EAAE,CAExD,SAAS,GAAyC,EAAM,CACtD,IAAM,EAAK,GAAwC,GAAqC,EAAM,GAAG,CAAC,CAC5F,EAAK,GAAwC,EAAK,CACxD,OAAO,GAAuC,GAAqC,GAAqC,EAAG,CAAE,GAAG,CAAE,GAAqC,EAAG,CAAC,CAE7K,SAAS,EAAqC,EAAM,EAAO,CACzD,GAAI,GAAS,GAAK,GAAS,EAAK,IAAM,EAAK,MAAQ,GAAI,CACrD,IAAM,EAAO,EAAK,MACZ,EAAS,EAAK,MAAQ,EAAQ,EAEpC,OADA,EAAa,EAAM,EAAO,CACnB,EAAK,QAEZ,OAAO,GAAiC,6CAA6C,EAA6C,EAAK,IAAM,EAAK,MAAQ,EAAE,CAAC,oBAAoB,EAA6C,EAAM,GAAG,CAG3O,SAAS,EAA2C,EAAM,EAAO,EAAK,CACpE,IAAM,EAAM,EAAK,OACb,EACJ,GAAI,IAAQ,IAAA,GACV,EAAQ,MACH,CAEL,IAAM,EADQ,EAEd,EAAQ,EAAO,EAAI,EAAM,EAAO,EAAI,EAEtC,IAAM,EAAU,EAAQ,EAAI,EAAM,EAAQ,EAAI,EAC9C,OAAO,GAAW,GAAM,GAAW,GAAS,GAAS,EAAO,CAAE,MAAO,EAAM,MAAO,EAAS,IAAK,EAAO,CAAG,GAAiC,yBAAyB,CAEtK,SAAS,EAA+C,EAAM,EAAO,EAAK,CACxE,IAAM,EAAM,EAAK,IAAM,EAAK,MAAQ,EAChC,EACJ,GAAI,IAAQ,IAAA,GACV,EAAQ,MACH,CAEL,IAAM,EADQ,EAEd,EAAQ,EAAO,EAAI,EAAM,EAAO,EAAI,EAEtC,IAAM,EAAU,EAAQ,EAAI,EAAM,EAAQ,EAAI,EAC9C,OAAO,GAAW,GAAM,GAAW,GAAS,GAAS,EAAO,CAAE,MAAO,EAAK,MAAO,MAAO,EAAK,MAAQ,EAAU,EAAG,KAAM,EAAK,MAAQ,EAAU,IAAM,EAAQ,EAAU,GAAK,EAAG,CAAG,GAAiC,yBAAyB,CAE9O,SAAS,GAAuC,EAAM,CAmBpD,MAlBY,IAAW,CACrB,IAAM,EAAU,EAAK,IAAM,EAAK,MAAQ,EACpC,EAAO,EACX,OAAa,CACX,IAAM,EAAI,EACV,GAAI,EAAI,EAAS,CAEf,GADc,EAAO,EAAqC,EAAM,EAAE,CAAC,GACrD,EAEZ,MAAO,GAET,EAAO,EAAI,EAAI,EACf,cAEA,MAAO,KAMf,SAAS,GAA2C,EAAM,CACxD,IAAM,EAAI,CAAE,IAAK,EAAG,CACd,EAAM,EAAK,IAAM,EAAK,MAAQ,EAcpC,UAbiB,CACf,GAAI,EAAE,IAAM,EAAK,CACf,IAAM,EAAO,EAAE,IACT,EAAO,EAAK,MACZ,EAAS,EAAK,MAAQ,EAAO,EACnC,EAAa,EAAM,EAAO,CAC1B,IAAM,EAAS,EAAK,GAEpB,MADA,GAAE,IAAM,EAAE,IAAM,EAAI,EACb,OAEP,MAAO,IAKb,SAAS,EAAyC,EAAK,CACrD,OAAO,GAAwC,EAAI,IAAM,EAAI,MAAQ,EAAI,GAAM,GAAwC,EAAK,EAAE,CAAC,CAEjI,SAAS,GAAwC,EAAM,CACrD,IAAM,EAAQ,GAA0C,EAAK,CAC7D,OAAO,EAAyC,CAAE,IAAK,EAAO,MAAO,EAAG,IAAK,EAAM,OAAQ,CAAC,CAE9F,SAAS,EAAsC,EAAM,CACnD,OAAO,GAAsC,EAAK,CAEpD,SAAS,EAAwD,EAAM,CACrE,MAAO,CAAE,IAAK,EAAM,MAAO,EAAG,IAAK,EAAK,OAAQ,CAElD,SAAS,GAAkD,EAAK,EAAY,EAAK,EAAY,EAAK,CAChG,GAAI,IAAQ,GAAO,EAAa,EAAY,CAC1C,IAAI,EAAO,EACX,OAAa,CACX,IAAM,EAAI,EACV,GAAI,EAAI,EAAK,CACX,IAAM,EAAS,EAAa,EAAI,EAC1B,EAAS,EAAa,EAAI,EAChC,EAAa,EAAK,EAAO,CACzB,EAAa,EAAK,EAAO,CACzB,EAAI,GAAU,EAAI,GAClB,EAAO,EAAI,EAAI,EACf,cAEA,YAGC,CACL,IAAI,EAAO,EAAM,EAAI,EACrB,OAAa,CACX,IAAM,EAAI,EACV,GAAI,GAAK,EAAG,CACV,IAAM,EAAS,EAAa,EAAI,EAC1B,EAAS,EAAa,EAAI,EAChC,EAAa,EAAK,EAAO,CACzB,EAAa,EAAK,EAAO,CACzB,EAAI,GAAU,EAAI,GAClB,EAAO,EAAI,EAAI,EACf,cAEA,SAKR,SAAS,GAAqD,EAAW,CACvE,MAAO,CAAE,IAAK,GAAI,CAEpB,SAAS,GAA+C,EAAM,EAAI,CAChE,IAAM,EAAQ,EACd,EAAM,IAAM,GAAG,EAAM,MAAM,OAAO,cAAc,EAAG,GAErD,SAAS,GAAiD,EAAM,EAAK,CACnE,IAAM,EAAQ,EACd,EAAM,IAAM,GAAG,EAAM,MAAM,IAE7B,SAAS,GAA4C,EAAG,EAAG,CACzD,OAAO,GAA6C,EAAG,EAAE,CAAG,EAE9D,SAAS,EAA6C,EAAM,CAC1D,IAAM,EAAS,GAAqD,EAAE,CAEtE,OADA,GAA0C,EAAM,CAAE,KAAM,EAAQ,SAAU,GAAkD,SAAU,EAAqD,SAAU,GAAgD,CAAC,CAC/O,EAAO,IAEhB,SAAS,GAA6C,EAAM,EAAO,CACjE,OAAO,GAA2C,EAAM,EAAM,CAEhE,SAAS,GAAwD,EAAM,EAAK,EAAc,EAAY,CACpG,IAAI,EACJ,AAIE,EAJE,IAAe,IAAA,GACF,EAAK,OAEN,EAGhB,IAAI,EAAO,EACP,EAAS,EACb,OAAa,CACX,IAAM,EAAQ,EACR,EAAQ,EACd,GAAI,EAAQ,GAAgB,EAAQ,EAAK,CACvC,IAAM,EAAK,EAAK,WAAW,EAAM,CACjC,GAAI,OAAS,GAAM,GAAM,QAAU,EAAQ,EAAI,GAAK,EAAc,CAChE,IAAM,EAAS,EAAQ,EAAI,EACrB,EAAK,EAAK,WAAW,EAAO,CAClC,GAAI,OAAS,GAAM,GAAM,MAAO,CAC9B,EAAO,EAAQ,EAAI,EACnB,EAAS,EAAQ,EAAI,EACrB,cAEA,EAAiC,yBAAyB,CAG9D,EAAO,EAAQ,EAAI,EACnB,EAAS,EAAQ,EAAI,EACrB,cAEA,OAAO,IAAU,GAAO,IAAU,GAIxC,SAAS,GAAmD,EAAM,EAAO,EAAK,CAC5E,IAAM,EAAM,EAAK,OACb,EAOJ,MANA,CAIE,EAJE,IAAQ,IAAA,GACF,EAEM,EAGT,GAAS,GAAM,GAAS,GAAS,GAAS,EAAO,EAAK,UAAU,EAAO,EAAM,CAAG,GAAQ,CAEjG,SAAS,EAAoD,EAAM,EAAK,EAAO,EAAK,CAClF,IAAM,EAAQ,EACd,EAAM,IAAM,GAAG,EAAM,MAAM,GAAmD,EAAK,EAAO,EAAQ,EAAM,EAAE,GAE5G,SAAS,GAA+C,EAAU,CAChE,MAAO,EAAE,CAEX,SAAS,GAA+C,EAAU,CAChE,MAAO,EAAE,CAEX,SAAS,EAA8C,EAAU,CAC/D,MAAO,EAAE,CAEX,SAAS,GAAuC,EAAM,EAAO,CAC3D,EAAuC,EAAM,EAAM,CAErD,SAAS,GAAuC,EAAM,EAAO,CAC3D,EAAuC,EAAM,EAAM,CAErD,SAAS,EAAsC,EAAM,EAAO,CAC1D,EAAuC,EAAM,EAAM,CAErD,SAAS,EAAsC,EAAM,EAAO,CAC1D,EAAuC,EAAM,EAAM,CAErD,SAAS,GAAsC,EAAM,EAAO,CAC1D,EAAuC,EAAM,EAAM,CAErD,SAAS,GAA6C,EAAM,CAC1D,OAAO,OAAO,cAAc,EAAK,CAEnC,SAAS,GAAwC,EAAM,EAAG,CACxD,IAAM,EAAkB,CAAE,IAAK,GAAiE,CAChG,EAAM,IACJ,EAAE,EAAE,CACG,GACP,CACF,IAAM,EAAO,EAAgB,IAC7B,OAAQ,EAAK,KAAb,CACE,IAAK,GACH,OAEF,IAAK,GACY,EACR,GACP,OAEF,IAAK,GAEH,OADgB,EACD,GAEjB,IAAK,GACH,GAAQ,CACR,OAEF,QACE,GAAQ,CACR,QAIN,SAAS,GAA0C,EAAM,CACvD,IAAM,EAAS,EAAE,CAIjB,OAHA,GAAwC,EAAO,GAAM,CACnD,EAAsC,EAAQ,EAAE,EAChD,CACK,EAET,SAAS,GAA2C,EAAM,CAExD,OADc,GACA,CAEhB,SAAS,GAA0C,EAAM,EAAQ,CAC/D,EAAO,SAAS,EAAO,KAAM,GAA6C,EAAM,GAAG,CAAC,CAEtF,SAAS,GAAsC,EAAM,CAoBnD,MAnBY,IAAW,CACrB,IAAM,EAAO,EAAK,OACd,EAAO,EACX,OAAa,CACX,IAAM,EAAK,EACX,GAAI,EAAK,EAAM,CACb,IAAM,EAAI,EAAK,GAEf,GADc,EAAO,EAAE,GACT,EAEZ,MAAO,GAET,EAAO,EAAK,EAAI,EAChB,cAEA,MAAO,KAMf,SAAS,GAAmD,EAAM,EAAO,EAAK,CAC5E,IAAM,EAAM,EAAK,OACb,EACJ,GAAI,IAAQ,IAAA,GACV,EAAQ,MACH,CAEL,IAAM,EADQ,EAEd,EAAQ,EAAO,EAAI,EAAM,EAAO,EAAI,EAEtC,IAAM,EAAU,EAAQ,EAAI,EAAM,EAAQ,EAAI,EAC9C,OAAO,GAAW,GAAM,GAAW,GAAS,GAAS,EAAO,CAAE,IAAK,EAAM,MAAO,EAAS,IAAK,EAAO,CAAG,GAAiC,2BAA2B,CAEtK,SAAS,GAA+C,EAAO,CAC7D,MAAO,CAAE,GAAI,EAAG,GAAI,EAAO,CAE7B,SAAS,GAA4C,EAAO,CAC1D,OAAO,GAA+C,EAAM,CAE9D,SAAS,GAAsC,EAAM,CACnD,OAAO,GAA4C,EAAK,CAE1D,SAAS,GAAoD,EAAM,CACjE,OAAO,GAAwD,EAAK,CAEtE,SAAS,GAA2C,EAAO,CACzD,MAAO,CAAE,GAAI,GAAS,GAAK,GAAI,GAAI,EAAQ,EAAG,CAEhD,SAAS,GAAmC,EAAM,CAChD,OAAO,GAA2C,EAAK,CAEzD,SAAS,GAAuC,EAAM,CAEpD,OADW,EACD,GAEZ,SAAS,EAAwC,EAAM,CACrD,OAAO,GAAuC,EAAK,CAAG,IAExD,SAAS,GAAuC,EAAM,EAAO,CAC3D,MAAO,CAAE,GAAI,EAAK,GAAK,EAAM,GAAI,GAAI,EAAK,GAAK,EAAM,GAAI,CAE3D,SAAS,GAAsC,EAAM,EAAO,CAC1D,MAAO,CAAE,GAAI,EAAK,GAAK,EAAM,GAAI,GAAI,EAAK,GAAK,EAAM,GAAI,CAE3D,SAAS,GAAuC,EAAM,EAAO,CAC3D,MAAO,CAAE,GAAI,EAAK,GAAK,EAAM,GAAI,GAAI,EAAK,GAAK,EAAM,GAAI,CAE3D,SAAS,GAAsC,EAAM,EAAO,CAC1D,IAAM,EAAU,EAAQ,GACxB,GAAI,IAAY,EACd,OAAO,KAEH,EAAU,GAAI,CAChB,IAAM,EAAM,EAAK,GACX,EAAM,EAAK,GACX,EAAK,EACL,EAAK,EAGX,MAAO,CAAE,GAFI,GAAM,EAAW,KAAQ,GAAK,EAAU,GAAK,EAEvC,GADN,GAAM,EACU,MAE7B,MAAO,CAAE,GAAI,EAAK,KAAO,EAAU,GAAK,GAAI,GAAI,EAAG,CAIzD,SAAS,GAAsC,EAAM,EAAO,CAC1D,IAAM,EAAU,EAAQ,GACxB,OAAO,IAAY,EAAI,EAAO,EAAU,GAAK,CAAE,GAAI,EAAK,KAAO,EAAU,EAAG,GAAI,EAAK,KAAO,EAAU,EAAK,KAAO,GAAK,EAAU,GAAI,CAAG,CAAE,GAAI,EAAG,GAAI,EAAK,MAAQ,EAAU,GAAK,GAAK,EAAG,CAE3L,SAAS,GAAuC,EAAM,EAAO,CAC3D,OAAO,GAAsC,EAAM,EAAM,CAE3D,SAAS,GAAqC,EAAM,EAAO,CACzD,OAAO,GAAsC,EAAM,EAAM,CAE3D,SAAS,GAA8C,EAAO,CAC5D,OAAO,GAAoD,EAAM,CAEnE,SAAS,GAAwC,EAAM,CACrD,OAAO,GAA8C,EAAK,CAE5D,SAAS,GAAsD,EAAM,CACnE,OAAO,GAAwD,EAAK,CAEtE,SAAS,GAAsD,EAAM,CACnE,OAAO,GAAqD,EAAK,CAEnE,SAAS,GAAuC,EAAM,EAAO,CAC3D,IAAM,EAAK,EACL,EAAO,EACb,OAAO,EAAG,KAAO,EAAK,IAAM,EAAG,KAAO,EAAK,GAE7C,SAAS,EAA0C,EAAM,EAAO,CAC9D,OAAO,GAAuC,EAAM,EAAM,CAE5D,SAAS,EAAwC,EAAM,EAAO,CAC5D,OAAO,GAAsC,EAAM,EAAM,CAE3D,SAAS,EAA0C,EAAM,EAAO,CAC9D,OAAO,GAAuC,EAAM,EAAM,CAE5D,SAAS,EAAsC,EAAM,EAAO,CAC1D,OAAO,GAAsC,EAAM,EAAM,CAE3D,SAAS,EAAsC,EAAM,EAAO,CAC1D,OAAO,GAAsC,EAAM,EAAM,CAE3D,SAAS,GAAyC,EAAM,CACtD,OAAO,GAA8C,EAAK,CAE5D,SAAS,GAAwC,EAAQ,EAAO,CAC9D,GAAI,GAAU,EACZ,OAAO,GAET,IAAM,EAAM,EAAW,EAAQ,EAAM,EAAE,CAAC,CACpC,EAAO,EACX,OAAa,CACX,IAAM,EAAI,EACV,GAAI,EAAI,EAAQ,CACd,EAAa,EAAK,EAAE,CACpB,EAAI,GAAK,EAAM,EAAE,CACjB,EAAO,EAAI,EAAI,EACf,cAEA,MAGJ,OAAO,EAET,SAAS,GAAqC,EAAO,CACnD,QAAQ,IAAI,EAAM,CAEpB,SAAS,GAAmD,EAAM,EAAc,EAAK,EAAY,EAAQ,CACvG,IAAM,GAAM,EAAe,EAAS,GAAK,EAAI,EACvC,GAAM,EAAa,EAAS,GAAK,EAAI,EACrC,EAAO,EAAK,OACZ,EAAO,EAAI,OACjB,GAAI,GAAU,GAAM,GAAgB,GAAM,EAAK,GAAS,GAAc,GAAK,EAAK,EAAS,CACvF,GAAkD,EAAM,EAAc,EAAK,EAAY,EAAO,CAC9F,WACK,CACL,GAAQ,CACR,QAGJ,SAAS,GAAwC,EAAM,EAAO,CAC5D,GAAI,GAAS,GAAK,GAAS,EAAK,IAAM,EAAK,MAAQ,GAAI,CACrD,IAAM,EAAO,EAAK,IACZ,EAAS,EAAK,MAAQ,EAAQ,EAEpC,OADA,EAAa,EAAM,EAAO,CACnB,EAAK,QAEZ,OAAO,GAAiC,6CAA6C,EAA6C,EAAK,IAAM,EAAK,MAAQ,EAAE,CAAC,oBAAoB,EAA6C,EAAM,GAAG,CAG3O,SAAS,GAAqC,EAAM,CAClD,IAAM,EAAM,EAAK,OACX,EAAU,MAAM,EAAI,CACtB,EAAO,EACX,OAAa,CACX,IAAM,EAAI,EACV,GAAI,EAAI,EAAK,CACX,EAAI,GAAK,GAAM,EAAM,EAAI,GAAK,EAAI,GAClC,EAAO,EAAI,EAAI,EACf,cAEA,MAGJ,OAAO,EAET,SAAS,GAAkD,EAAM,EAAU,CACzE,IAAM,EAAQ,EAAK,KAAK,QAAU,EAAI,EAAI,EAAK,KAAK,OAChD,EACA,EAAO,EACX,OAAa,CACX,IAAM,EAAQ,EACd,GAAI,GAAS,EAAU,CACrB,EAAe,EACf,MAEF,EAAO,KAAK,KAAK,EAAO,EAAE,CAAG,EAG/B,GAAI,IAAiB,EAAK,KAAK,OAAQ,CACrC,IAAM,EAAW,EAAW,EAAc,EAAE,CAC5C,GAAkD,EAAU,EAAG,EAAK,KAAM,EAAG,EAAK,IAAI,CACtF,EAAK,KAAO,EACZ,YAEA,OAGJ,SAAS,EAA2C,EAAM,EAAO,CAC/D,GAAkD,EAAM,EAAK,IAAM,EAAI,EAAE,CACzE,IAAM,EAAO,EAAK,KACZ,EAAS,EAAK,IACpB,EAAa,EAAM,EAAO,CAC1B,EAAK,GAAU,EACf,EAAK,IAAM,EAAK,IAAM,EAAI,EAE5B,SAAS,EAAyC,EAAM,CACtD,OAAO,EAAyC,GAAmD,EAAK,KAAM,EAAG,EAAK,IAAI,CAAC,CAE7H,SAAS,EAAsC,EAAW,CAGxD,MAAO,CAAE,KADI,EADG,EAAY,EAAI,EAAI,EACH,EAAE,CACd,IAAK,EAAG,CAE/B,SAAS,GAA4C,EAAM,EAAO,CAChE,IAAM,EAAU,EAAM,OACtB,GAAkD,EAAM,EAAK,IAAM,EAAU,EAAE,CAC/E,GAAmD,EAAK,KAAM,EAAK,IAAK,EAAO,EAAG,EAAQ,CAC1F,EAAK,IAAM,EAAK,IAAM,EAAU,EAElC,SAAS,GAAsC,EAAM,CACnD,OAAQ,EAAR,CACE,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,QACE,MAAO,MAIb,SAAS,GAAmC,EAAM,CAChD,OAAQ,EAAR,CACE,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,IAAK,GACH,MAAO,KAET,QACE,MAAO,MAIb,SAAS,GAAkC,EAAM,CAC/C,IAAM,EAAS,EAAE,CACX,EAAQ,EAAK,MACf,IAAU,IAAA,IAIZ,EAAsC,EAAQ,GAFhC,EAE0E,CAAC,CAE3F,IAAM,EAAU,EAAK,SACjB,IAAY,IAAA,IAId,EAAsC,EAAQ,GAFhC,EAEgF,CAAC,CAEjG,IAAM,EAAO,EAAK,QACZ,EAAO,EAAK,OACd,EAAO,EACX,OAAa,CACX,IAAM,EAAK,EACX,GAAI,EAAK,EAAM,CAEb,OADe,EAAK,GACpB,CACE,IAAK,GACH,EAAsC,EAAQ,IAAI,CAClD,MAEF,IAAK,GACH,EAAsC,EAAQ,IAAI,CAClD,MAEF,IAAK,GACH,EAAsC,EAAQ,IAAI,CAClD,MAEF,IAAK,GACH,EAAsC,EAAQ,IAAI,CAClD,MAEF,IAAK,GACH,EAAsC,EAAQ,IAAI,CAClD,MAEF,IAAK,GACH,EAAsC,EAAQ,IAAI,CAClD,MAEF,QACE,EAAsC,EAAQ,IAAI,CAGtD,EAAO,EAAK,EAAI,EAChB,cAEA,MAOF,OAJE,EAAO,OAAS,EAEX,IADc,GAAsC,EAAQ,CAAE,IAAK,IAA6C,MAAO,EAAG,IAAK,EAAoD,CAAC,CACnK,GAAG,EAAK,IAAI,KAE7B,EAAK,IAGhB,SAAS,GAA+B,EAAK,CAC3C,MAAO,CAAO,MAAK,SAAU,IAAA,GAAW,MAAO,IAAA,GAAW,QAAS,EAAE,CAAE,CAEzE,SAAS,GAA4B,EAAM,CACzC,MAAO,CAAE,IAAK,EAAK,IAAK,SAAU,EAAK,SAAU,MAAO,EAAqC,QAAS,EAAK,QAAS,CAEtH,SAAS,GAA+B,EAAM,CAC5C,MAAO,CAAE,IAAK,EAAK,IAAK,SAAU,EAAK,SAAU,MAAO,EAAwC,QAAS,EAAK,QAAS,CAEzH,SAAS,GAA6B,EAAM,CAC1C,MAAO,CAAE,IAAK,EAAK,IAAK,SAAU,EAAK,SAAU,MAAO,EAAsC,QAAS,EAAK,QAAS,CAEvH,SAAS,GAA6B,EAAM,CAC1C,IAAM,EAAO,EAAK,IACZ,EAAS,EAAK,SACd,EAAS,EAAK,MACd,EAAQ,EAAE,CAGhB,OAFA,GAAsC,EAAO,EAAE,CAC/C,GAA2C,EAAO,GAAsC,EAAK,QAAQ,CAAC,CAC/F,CAAE,IAAK,EAAM,SAAU,EAAQ,MAAO,EAAQ,QAAS,EAAO,CAEvE,SAAS,GAAiC,EAAQ,EAAK,CACrD,IAAM,EAAM,GAAG,GAAkC,GAA4B,GAA6B,GAA+B,UAAU,CAAC,CAAC,CAAC,GAAG,GAAkC,GAA+B,GAA+B,EAAO,CAAC,CAAC,CAAC,MAAM,GAAkC,GAA6B,GAA+B,EAAI,CAAC,CAAC,GAC7W,GAAqC,EAAI,CACzC,EAAiC,EAAI,CAEvC,SAAS,GAAmC,EAAK,CAC/C,IAAM,EAAQ,EAA8C,EAAE,CAC1D,EAAI,EACR,KACM,EAAI,EAAI,QAAQ,CAClB,IAAM,EAAO,EACb,EAAa,EAAK,EAAK,CACvB,IAAM,EAAO,EAAI,WAAW,EAAK,CACjC,GAAI,GAAQ,OAAU,GAAQ,QAAU,EAAI,EAAI,GAAK,EAAI,OAAS,CAChE,IAAM,EAAS,EAAI,EAAI,EACvB,EAAa,EAAK,EAAO,CACzB,IAAM,EAAM,EAAI,WAAW,EAAO,CAClC,GAAI,GAAO,OAAS,GAAO,MAAO,CAChC,IAAM,GAAc,OAAS,EAAO,OAAS,IAAM,IAAM,EAAM,MAAQ,GAAK,EAC5E,EAAsC,GAAQ,IAAM,GAAc,IAAM,IAAI,CAC5E,EAAsC,GAAQ,IAAM,GAAc,GAAK,IAAM,IAAI,CACjF,EAAsC,GAAQ,IAAM,GAAc,EAAI,IAAM,IAAI,CAChF,EAAsC,GAAQ,IAAM,EAAa,IAAM,IAAI,CAC3E,EAAI,EAAI,EAAI,OAEZ,EAAsC,GAAQ,IAAM,GAAQ,IAAM,IAAI,CACtE,EAAsC,GAAQ,IAAM,GAAQ,EAAI,IAAM,IAAI,CAC1E,EAAsC,GAAQ,IAAM,EAAO,IAAM,IAAI,MAGnE,EAAO,IACT,EAAsC,EAAO,EAAO,IAAI,CAEpD,EAAO,MACT,EAAsC,GAAQ,IAAM,GAAQ,GAAK,IAAI,CACrE,EAAsC,GAAQ,IAAM,EAAO,IAAM,IAAI,GAErE,EAAsC,GAAQ,IAAM,GAAQ,IAAM,IAAI,CACtE,EAAsC,GAAQ,IAAM,GAAQ,EAAI,IAAM,IAAI,CAC1E,EAAsC,GAAQ,IAAM,EAAO,IAAM,IAAI,EAI3E,EAAI,EAAI,EAAI,EAMhB,OAAO,EAAyC,CAAE,IAAK,EAAO,MAAO,EAAG,IAAK,EAAM,OAAQ,CAAC,CAE9F,SAAS,GAAwC,EAAK,CACpD,MAAO,CAAE,MAAO,GAAmC,EAAI,CAAE,CAE3D,SAAS,GAAkC,EAAS,CAClD,IAAI,EAAI,EACR,KACM,GAAK,EAAQ,IAAM,EAAQ,MAAQ,IAAI,CACzC,IAAM,EAAO,EAAqC,EAAS,EAAE,CAI7D,GAAA,EAFa,EAAO,KAGlB,EAAI,EAAI,EAAI,WAGC,EAAO,MACP,IACM,CAMjB,IALK,EAAI,EAAI,KAAO,EAAQ,IAAM,EAAQ,MAAQ,KAGpC,EAAqC,EAAS,EAAI,EAAI,EAAE,CAEzD,MAAgB,IAC3B,MAAO,GAET,EAAI,EAAI,EAAI,WAGC,EAAO,MACP,IACM,CACjB,IAAK,EAAI,EAAI,KAAO,EAAQ,IAAM,EAAQ,MAAQ,GAChD,MAAO,GAET,IAAM,EAAQ,EAAqC,EAAS,EAAI,EAAI,EAAE,CAChE,EAAQ,EAAqC,EAAS,EAAI,EAAI,EAAE,CAClE,EAQJ,GANA,AACE,GADG,EAAQ,MAAiB,KAIpB,EAAQ,MAAiB,IAH1B,GAKL,EACF,MAAO,GAET,EAAI,EAAI,EAAI,WAGE,EAAO,MACP,IACO,CACnB,IAAK,EAAI,EAAI,KAAO,EAAQ,IAAM,EAAQ,MAAQ,GAChD,MAAO,GAET,IAAM,EAAQ,EAAqC,EAAS,EAAI,EAAI,EAAE,CAChE,EAAQ,EAAqC,EAAS,EAAI,EAAI,EAAE,CAChE,EAAQ,EAAqC,EAAS,EAAI,EAAI,EAAE,CAClE,EAEJ,IAAK,EAAQ,MAAiB,IAC5B,EAAO,OACF,CACL,IAAI,EAEJ,AACE,GADG,EAAQ,MAAiB,KAIlB,EAAQ,MAAiB,IAH1B,GAKX,EAAO,EAET,GAAI,EACF,MAAO,GAET,EAAI,EAAI,EAAI,OAEZ,MAAO,GAUnB,MAAO,GAET,SAAS,GAA4C,EAAO,CACrD,MAAkC,EAA+C,EAAO,EAAG,IAAA,GAAU,CAAC,CAG3G,MAAO,CAAE,MAAO,GAAwC,GAAuC,EAAM,CAAC,CAAE,CAE1G,SAAS,GAAyC,EAAS,CACzD,IAAI,EAAI,EACJ,EAAS,GACb,KACM,EAAI,EAAQ,QAAQ,CACtB,IAAM,EAAO,EACb,EAAa,EAAS,EAAK,CAC3B,IAAM,EAAO,EAAQ,GACjB,EAIJ,GAAA,EAFa,EAAO,KAGlB,EAAa,WAGA,EAAO,MACP,IACM,CACjB,IAAK,EAAI,EAAI,IAAM,EAAQ,OACzB,OAEF,IAAM,EAAS,EAAI,EAAI,EACvB,EAAa,EAAS,EAAO,CAC7B,IAAM,EAAQ,EAAQ,GAEtB,IAAK,EAAQ,MAAgB,IAC3B,OAEF,EAAI,EAAI,EAAI,EAIZ,GAFgB,EAAO,KAAe,EAEhB,EAAQ,YAGjB,EAAO,MACP,IACM,CACjB,IAAK,EAAI,EAAI,IAAM,EAAQ,OACzB,OAEF,IAAM,EAAS,EAAI,EAAI,EACvB,EAAa,EAAS,EAAO,CAC7B,IAAM,EAAQ,EAAQ,GAChB,EAAS,EAAI,EAAI,EACvB,EAAa,EAAS,EAAO,CAC7B,IAAM,EAAQ,EAAQ,GAClB,EAQJ,GANA,AACE,GADG,EAAQ,MAAiB,KAIlB,EAAQ,MAAiB,IAH1B,GAKP,EACF,OAEF,EAAI,EAAI,EAAI,EAMZ,GAJgB,EAAO,KAAgB,IAEd,EAAQ,KAAgB,EAE3B,EAAQ,YAGhB,EAAO,MACP,IACO,CACnB,IAAK,EAAI,EAAI,IAAM,EAAQ,OACzB,OAEF,IAAM,EAAS,EAAI,EAAI,EACvB,EAAa,EAAS,EAAO,CAC7B,IAAM,EAAQ,EAAQ,GAChB,EAAS,EAAI,EAAI,EACvB,EAAa,EAAS,EAAO,CAC7B,IAAM,EAAQ,EAAQ,GAChB,EAAS,EAAI,EAAI,EACvB,EAAa,EAAS,EAAO,CAC7B,IAAM,EAAQ,EAAQ,GAClB,EAEJ,IAAK,EAAQ,MAAiB,IAC5B,EAAS,OACJ,CACL,IAAI,EAEJ,AACE,GADG,EAAQ,MAAiB,KAIlB,EAAQ,MAAiB,IAH1B,GAKX,EAAS,EAEX,GAAI,EACF,OAEF,EAAI,EAAI,EAAI,EAQZ,GANgB,EAAO,IAAgB,IAEd,EAAQ,KAAgB,IAExB,EAAQ,KAAgB,EAE3B,EAAQ,QAE9B,OAKR,EAAS,GAAG,IAAS,GAA6C,EAAW,GAC7E,EAAI,EAAI,EAAI,EAMhB,OAAO,EAET,SAAS,GAAsC,EAAM,CACnD,IAAM,EAAK,GAAyC,EAAK,MAAM,CAK7D,OAJE,IAAO,IAAA,GACF,GAAQ,CAEF,EAIjB,SAAS,GAA2C,EAAG,CACrD,OAAO,GAAsD,EAAE,CAEjE,SAAS,GAA6C,EAAM,CAC1D,OAAO,GAAsD,EAAK,CAEpE,SAAS,GAA+C,EAAG,CACzD,IAAM,EAAQ,EAA8C,EAAE,CAS9D,OARA,EAAsC,EAAO,EAAwC,EAA0C,EAAsC,EAAG,GAAG,CAAE,EAAM,CAAC,CAAC,CACrL,EAAsC,EAAO,EAAwC,EAA0C,EAAsC,EAAG,GAAG,CAAE,EAAM,CAAC,CAAC,CACrL,EAAsC,EAAO,EAAwC,EAA0C,EAAsC,EAAG,GAAG,CAAE,EAAM,CAAC,CAAC,CACrL,EAAsC,EAAO,EAAwC,EAA0C,EAAsC,EAAG,GAAG,CAAE,EAAM,CAAC,CAAC,CACrL,EAAsC,EAAO,EAAwC,EAA0C,EAAsC,EAAG,GAAG,CAAE,EAAM,CAAC,CAAC,CACrL,EAAsC,EAAO,EAAwC,EAA0C,EAAsC,EAAG,GAAG,CAAE,EAAM,CAAC,CAAC,CACrL,EAAsC,EAAO,EAAwC,EAA0C,EAAsC,EAAG,EAAE,CAAE,EAAM,CAAC,CAAC,CACpL,EAAsC,EAAO,EAAwC,EAA0C,EAAG,EAAM,CAAC,CAAC,CACnI,EAAyC,CAAE,IAAK,EAAO,MAAO,EAAG,IAAK,EAAM,OAAQ,CAAC,CAE9F,SAAS,GAAiD,EAAO,CAC3D,EAAM,SAAW,GACnB,GAAiC,4BAA6B,mEAAmE,CAEnI,IAAI,EAAS,EACP,EAAO,EACb,EAAa,EAAO,EAAE,CACtB,EAAS,EAAwC,EAAM,EAAsC,EAAsC,EAAM,GAAG,CAAE,GAAG,CAAC,CAClJ,IAAM,EAAS,EACf,EAAa,EAAO,EAAE,CACtB,EAAS,EAAwC,EAAQ,EAAsC,EAAsC,EAAM,GAAG,CAAE,GAAG,CAAC,CACpJ,IAAM,EAAS,EACf,EAAa,EAAO,EAAE,CACtB,EAAS,EAAwC,EAAQ,EAAsC,EAAsC,EAAM,GAAG,CAAE,GAAG,CAAC,CACpJ,IAAM,EAAS,EACf,EAAa,EAAO,EAAE,CACtB,EAAS,EAAwC,EAAQ,EAAsC,EAAsC,EAAM,GAAG,CAAE,GAAG,CAAC,CACpJ,IAAM,EAAS,EACf,EAAa,EAAO,EAAE,CACtB,EAAS,EAAwC,EAAQ,EAAsC,EAAsC,EAAM,GAAG,CAAE,GAAG,CAAC,CACpJ,IAAM,EAAS,EACf,EAAa,EAAO,EAAE,CACtB,EAAS,EAAwC,EAAQ,EAAsC,EAAsC,EAAM,GAAG,CAAE,GAAG,CAAC,CACpJ,IAAM,EAAS,EACf,EAAa,EAAO,EAAE,CACtB,EAAS,EAAwC,EAAQ,EAAsC,EAAsC,EAAM,GAAG,CAAE,EAAE,CAAC,CACnJ,IAAM,EAAS,EAGf,OAFA,EAAa,EAAO,EAAE,CACtB,EAAS,EAAwC,EAAQ,EAAsC,EAAM,GAAG,CAAC,CAClG,EAET,SAAS,IAAsC,CAC7C,MAAO,CAAE,MAAO,GAA+C,EAAE,CAAE,CAErE,SAAS,EAAqC,EAAM,EAAM,CACxD,GAAuC,EAAK,MAAO,EAAK,CAE1D,SAAS,GAA6C,EAAG,CACvD,OAAO,IAAM,EAA+F,EAA1F,EAAI,EAAI,CAAC,GAAwC,GAErE,SAAS,GAAyC,EAAO,EAAQ,CAC/D,EAA2C,EAAQ,EAAE,CACrD,IAAM,EAAM,GAA2C,EAAM,CAC7D,OAAa,CACX,IAAM,EAAQ,GAA2C,EAAI,CAC7D,GAAI,IAAU,GACZ,MACK,CAEL,IAAM,EADQ,EAEd,EAA2C,EAAQ,EAAG,CAElD,IADO,GAET,EAA2C,EAAQ,IAAI,CAEzD,UAGJ,EAA2C,EAAQ,EAAE,CAEvD,SAAS,GAA0C,EAAG,EAAQ,CAC5D,EAA2C,EAAQ,EAAE,CACrD,IAAM,EAAQ,EAAE,MACV,EAAO,EAAM,OACf,EAAO,EACX,OAAa,CACX,IAAM,EAAK,EACX,GAAI,EAAK,EAAM,CACb,IAAM,EAAI,EAAM,GAChB,EAA2C,EAAQ,EAAE,CAEjD,IADO,GAET,EAA2C,EAAQ,IAAI,CAEzD,EAAO,EAAK,EAAI,EAChB,cAEA,MAGJ,EAA2C,EAAQ,EAAE,CAEvD,SAAS,GAAyC,EAAG,EAAQ,CAC3D,EAA2C,EAAQ,GAAG,CACtD,IAAM,EAAM,GAA6C,EAAE,CAErD,EAAQ,GADD,EAAM,EAAI,EAA0C,GAA2C,EAAI,CAAE,GAAK,CAAG,EAA0C,GAA2C,EAAI,CAAE,GAAuB,CAC1K,CAC5D,EAAO,EAAM,OACf,EAAO,EACX,OAAa,CACX,IAAM,EAAK,EACX,GAAI,EAAK,EAAM,CACb,IAAM,EAAI,EAAM,GAChB,EAA2C,EAAQ,EAAE,CACrD,EAAO,EAAK,EAAI,EAChB,cAEA,QAIN,SAAS,GAAgD,EAAG,CAC1D,IAAM,EAAQ,EAAE,CACZ,EAAI,EACR,KACM,GAA4C,EAAG,GAAG,EAEpD,EAAsC,EADzB,GAAuC,GAAqC,EAAG,KAAK,CAAC,CAC9C,IAAI,CACxD,EAAI,GAAqC,EAAG,KAAK,CAMrD,IAAM,EAAQ,GAAqC,EAAM,CACzD,OAAO,EAAyC,CAAE,IAAK,EAAO,MAAO,EAAG,IAAK,EAAM,OAAQ,CAAC,CAE9F,SAAS,GAA+C,EAAG,EAAQ,CACjE,GAAI,GAAsC,EAAG,GAAG,CAAE,CAChD,EAA2C,EAAQ,GAAG,CACtD,OAEF,IAAM,EAAO,GAA4C,EAAG,GAAG,CACzD,EAAe,GAAP,EAAuD,EAAqD,GAAqC,EAAE,CAAC,CAC5J,EAAM,EAAM,OAClB,GAAI,IAAS,GAAO,CACd,GAAO,EAGT,EAA2C,GAFhC,IACE,EAAM,KAC6C,GAAK,IAAI,EAEzE,EAA2C,EAAQ,GAAG,CAClD,EAAM,KACR,EAAiC,iBAAiB,CAIpD,EAA2C,GAFhC,EAAM,IACJ,KACoD,IAAI,EAEvE,IAAM,EAAW,EAAsC,EAAE,CACrD,EAAO,EACX,OAAa,CACX,IAAM,EAAI,EACV,GAAI,EAAI,EAAM,OAAQ,CACpB,EAAa,EAAO,EAAE,CACtB,IAAM,EAAK,EAAM,GAEjB,EAA2C,GAAW,EADzC,KACsD,IAAI,CACvE,EAAO,EAAI,EAAI,EACf,cAEA,MAGJ,GAA4C,EAAQ,EAAyC,EAAS,CAAC,CACvG,WACK,CACD,GAAO,EAGT,EAA2C,GAFhC,IACE,EAAM,KAC6C,GAAK,IAAI,EAEzE,EAA2C,EAAQ,GAAG,CAClD,EAAM,KACR,EAAiC,iBAAiB,CAEpD,EAA2C,EAAQ,EAAM,IAAI,EAE/D,GAA4C,EAAQ,EAAM,CAC1D,QAGJ,SAAS,GAAuD,EAAM,EAAQ,CAC5E,OAAQ,EAAK,KAAb,CACE,IAAK,GAAG,CAGN,IAAM,EAFS,EACO,GAEtB,GAAyC,EAA2C,EAAO,EAAG,EAAM,OAAO,CAAE,EAAO,CACpH,OAEF,IAAK,GAAG,CAEN,IAAM,EADU,EACG,GACnB,GAA0C,EAAI,EAAO,CACrD,OAEF,IAAK,GAAG,CAEN,IAAM,EADO,EACG,GAChB,GAA+C,EAAI,EAAO,CAC1D,OAEF,IAAK,GAAG,CAEN,IAAM,EADS,EACG,GAClB,GAAyC,EAAI,EAAO,CACpD,OAEF,IAAK,GACH,EAA2C,EAAQ,GAAG,CACtD,OAEF,QACE,EAA2C,EAAQ,GAAG,CACtD,QAIN,SAAS,GAAuC,EAAM,CACpD,IAAM,EAAS,EAAsC,EAAE,CACjD,EAAO,EAAK,MACZ,EAAO,EAAK,OACd,EAAO,EACX,OAAa,CACX,IAAM,EAAK,EACX,GAAI,EAAK,EAAM,CACb,IAAM,EAAO,EAAK,GAClB,GAAuD,EAAM,EAAO,CACpE,EAAO,EAAK,EAAI,EAChB,cAEA,MAGJ,OAAO,EAAyC,EAAO,CAEzD,SAAS,GAAwC,EAAO,EAAO,CAC7D,IAAM,EAAS,EAAsC,EAAE,CACnD,EAAI,EACR,KACM,GAAK,EAAM,IAAM,EAAM,MAAQ,IAAI,CACrC,IAAM,EAAI,EAAqC,EAAO,EAAE,CAGxD,GAFA,EAAI,EAAI,EAAI,EAER,IADO,EACG,CACZ,IAAI,EAQJ,GAPA,AAKE,EALE,GAAK,EAAM,IAAM,EAAM,MAAQ,GACpB,EAAqC,EAAO,EAAE,GAC9C,IAGN,GAEL,EAAM,CACR,EAA2C,EAAQ,EAAE,CACrD,EAAI,EAAI,EAAI,EACZ,aACK,CACL,IAAM,EAAQ,EAAyC,EAAO,CAC9D,OAAO,IAAI,GAAa,CAAE,GAAI,EAA2C,EAAO,EAAG,EAAM,OAAO,CAAE,GAAI,EAAG,CAAC,EAG9G,EAA2C,EAAQ,EAAE,CAMzD,OAAO,IAAI,GAAc,EAAoE,CAE/F,SAAS,EAA4C,EAAO,CAC1D,IAAI,EAAI,EAA2C,EAAI,CACnD,EAAO,EAA2C,GAAI,CACtD,GAAQ,EAAM,IAAM,EAAM,MAAQ,GAAK,EAAI,EAC/C,OAAa,CACX,IAAM,EAAI,EACV,GAAI,GAAK,EAAG,CACV,IAAM,EAAW,EAA2C,GAAmC,EAAqC,EAAO,EAAE,CAAC,CAAC,CAC/I,EAAI,GAAqC,EAAG,GAAqC,EAAM,EAAS,CAAC,CACjG,EAAO,GAAqC,EAAM,EAA2C,GAAM,CAAC,CACpG,EAAO,EAAI,EAAI,EACf,cAEA,MAGJ,OAAO,EAET,SAAS,GAA0D,EAAO,EAAK,CAC7E,IAAI,EAQJ,GAPA,AAKE,EALE,IAAM,EAGD,GAAQ,GAER,GAEL,EAAM,CAER,IAAM,GAAK,EADA,GACW,GAAK,IAC3B,IAAK,EAAM,IAAM,EAAM,MAAQ,GAAK,EAClC,OAAO,IAAI,EAAc,EAAoE,CAE/F,IAAM,EAAY,EAA+C,EAAO,EAAG,EAAE,CAE7E,OAAO,IAAI,EAAa,CAAE,GADb,EAA+C,EAAO,EAAG,IAAA,GAAU,CAC5C,GAAI,EAA4C,EAAU,CAAE,CAAC,KAC5F,CACL,IAAI,EAQJ,GALA,AAGE,EAHG,IAA0B,EACpB,EAAM,GAEN,GAEP,EAAQ,CAEV,IAAM,GADO,GACK,EAAM,GAAK,IAC7B,IAAK,EAAM,IAAM,EAAM,MAAQ,GAAK,EAClC,OAAO,IAAI,EAAc,EAAoE,CAE/F,IAAM,EAAY,EAA+C,EAAO,EAAG,EAAE,CACvE,EAAO,EAA+C,EAAO,EAAG,IAAA,GAAU,CAC1E,EAAW,EAAsC,EAAE,CACrD,EAAS,EACb,OAAa,CACX,IAAM,EAAI,EACV,GAAI,GAAK,EAAU,IAAM,EAAU,MAAQ,GAAI,CAG7C,EAA2C,GAF9B,EAAqC,EAAW,EAAE,CAClD,KACwD,IAAI,CACzE,EAAS,EAAI,EAAI,EACjB,cAEA,MAGJ,IAAM,EAAQ,EAAyC,EAAS,CAChE,OAAO,IAAI,EAAa,CAAE,GAAI,EAAM,GAAI,GAAqC,EAA4C,EAA2C,EAAO,EAAG,EAAM,OAAO,CAAC,CAAC,CAAE,CAAC,SAG5L,IADS,GACK,CAChB,IAAK,EAAM,IAAM,EAAM,MAAQ,GAAK,EAClC,OAAO,IAAI,EAAc,EAAoE,CAI/F,IAAM,GAFa,EAAqC,EAAO,EAAE,CACpD,KACmB,IAChC,IAAK,EAAM,IAAM,EAAM,MAAQ,IAAM,EAAI,EAAI,GAC3C,OAAO,IAAI,EAAc,EAAoE,CAE/F,IAAM,EAAY,EAA+C,EAAO,EAAG,EAAI,EAAI,EAAE,CAC/E,EAAO,EAA+C,EAAO,EAAI,EAAI,EAAG,IAAA,GAAU,CAClF,EAAW,EAAsC,EAAE,CACrD,EAAS,EACb,OAAa,CACX,IAAM,EAAI,EACV,GAAI,GAAK,EAAU,IAAM,EAAU,MAAQ,GAAI,CAG7C,EAA2C,GAF9B,EAAqC,EAAW,EAAE,CAClD,KACwD,IAAI,CACzE,EAAS,EAAI,EAAI,EACjB,cAEA,MAGJ,IAAM,EAAQ,EAAyC,EAAS,CAChE,OAAO,IAAI,EAAa,CAAE,GAAI,EAAM,GAAI,GAAqC,EAA4C,EAA2C,EAAO,EAAG,EAAM,OAAO,CAAC,CAAC,CAAE,CAAC,SAG5L,IADS,GACK,CAChB,IAAK,EAAM,IAAM,EAAM,MAAQ,GAAK,EAClC,OAAO,IAAI,EAAc,EAAoE,CAG/F,IAAM,EADa,EAAqC,EAAO,EAAE,CAEjE,IAAK,EAAM,IAAM,EAAM,MAAQ,IAAM,EAAI,EAAI,GAC3C,OAAO,IAAI,EAAc,EAAoE,CAE/F,IAAM,EAAY,EAA+C,EAAO,EAAG,EAAI,EAAI,EAAE,CAErF,OAAO,IAAI,EAAa,CAAE,GADb,EAA+C,EAAO,EAAI,EAAI,EAAG,IAAA,GAAU,CACpD,GAAI,EAA4C,EAAU,CAAE,CAAC,MAEjG,OAAO,IAAI,EAAc,IAAI,EAAiE,EAAI,CAAC,EAM7G,SAAS,GAAyC,EAAO,EAAO,CAC9D,IAAK,EAAQ,EAAI,IAAM,EAAM,IAAM,EAAM,MAAQ,GAC/C,OAAO,IAAI,GAAc,EAAoE,CAE/F,IAAM,EAAO,EAA8C,EAAE,CACzD,EAAO,EACX,OAAa,CACX,IAAM,EAAI,EACV,GAAI,EAAI,EAAG,CACT,EAAsC,EAAM,EAAqC,EAAO,EAAQ,EAAI,EAAE,CAAC,CACvG,EAAO,EAAI,EAAI,EACf,cAEA,MAGJ,IAAM,EAAO,GAAiD,EAAyC,CAAE,IAAK,EAAM,MAAO,EAAG,IAAK,EAAK,OAAQ,CAAC,CAAC,CAElJ,OAAO,IAAI,GAAa,CAAE,GADhB,GAAuC,EAA0C,EAAM,GAAuB,CAAE,EAAI,CAAG,GAA6C,EAA0C,EAAM,GAAK,CAAC,CAAG,GAA6C,EAA0C,EAAM,GAAuB,CAAC,CAC3T,GAAI,EAAQ,EAAI,EAAG,CAAC,CAEvD,SAAS,GAAuC,EAAO,CACrD,IAAM,EAAM,IAAqC,CAC7C,EAAI,EACR,KACM,GAAK,EAAM,IAAM,EAAM,MAAQ,IAAI,CACrC,IAAM,EAAM,EAAqC,EAAO,EAAE,CAE1D,GADA,EAAI,EAAI,EAAI,EACR,IAAQ,EAAG,CACb,IAAM,EAAQ,GAAwC,EAAO,EAAE,CAC3D,EACJ,GAAI,EAAM,OAAS,EAEjB,EADY,EACE,QAEd,OAAO,EAET,IAAM,EAAQ,EAAQ,GAChB,EAAU,EAAQ,GAClB,EAAU,GAA4C,EAAM,CAClE,GAAI,IAAY,IAAA,GACd,OAAO,IAAI,GAAc,GAAkE,CAI3F,EAAqC,EAAK,IAAI,EAFhC,EAEkD,CAAC,CAEnE,EAAI,UAEA,IAAQ,EAAG,CACb,IAAM,EAAQ,GAAwC,EAAO,EAAE,CAC3D,EACJ,GAAI,EAAM,OAAS,EAEjB,EADY,EACE,QAEd,OAAO,EAET,IAAM,EAAQ,EAAQ,GAChB,EAAU,EAAQ,GACxB,EAAqC,EAAK,IAAI,EAAc,GAAwC,GAAuC,EAAM,CAAC,CAAC,CAAC,CACpJ,EAAI,UAEA,GAAO,IAAM,GAAO,GAAI,CAC1B,IAAM,EAAQ,GAA0D,EAA+C,EAAO,EAAG,IAAA,GAAU,CAAE,EAAI,CAC7I,EACJ,GAAI,EAAM,OAAS,EAEjB,EADY,EACE,QAEd,OAAO,EAET,IAAM,EAAQ,EAAQ,GAChB,EAAQ,EAAQ,GACtB,EAAqC,EAAK,IAAI,EAAY,EAAM,CAAC,CACjE,GAAK,EAAM,IAAM,EAAM,MAAQ,IAAM,EAAM,IAAM,EAAM,MAAQ,GAAK,UAEhE,IAAQ,GAAI,CACd,IAAM,EAAQ,GAAyC,EAAO,EAAE,CAC5D,EACJ,GAAI,EAAM,OAAS,EAEjB,EADY,EACE,QAEd,OAAO,EAET,IAAM,EAAQ,EAAQ,GAChB,EAAU,EAAQ,GACxB,EAAqC,EAAK,IAAI,EAAc,EAAM,CAAC,CACnE,EAAI,UAEA,IAAQ,GACV,EAAqC,EAAK,GAAc,SAEpD,IAAQ,GACV,EAAqC,EAAK,GAAa,MAEvD,OAAO,IAAI,GAAc,IAAI,EAAiE,EAAI,CAAC,CAYnH,OAAO,IAAI,GAAa,EAAI,CAE9B,SAAS,GAAgD,EAAM,CAC7D,OAAQ,EAAK,KAAb,CACE,IAAK,GAAG,CAEN,IAAM,EADS,EACO,GACtB,OAAO,IAAI,GAAgB,EAAO,CAEpC,IAAK,GAAG,CAEN,IAAM,EADU,EACG,GACnB,OAAO,IAAI,GAAiB,GAAsC,EAAG,CAAC,CAExE,IAAK,GAAG,CAEN,IAAM,EADO,EACG,GAChB,OAAO,IAAI,GAAiB,GAAwC,GAAyC,EAAG,CAAC,CAAC,CAEpH,IAAK,GAAG,CAEN,IAAM,EADS,EACG,GAClB,OAAO,IAAI,GAAiB,EAAG,CAEjC,IAAK,GACH,OAAO,GAET,QACE,OAAO,IAIb,SAAS,GAAgD,EAAM,CAC7D,OAAQ,EAAK,KAAb,CACE,IAAK,GAAG,CAEN,IAAM,EADS,EACO,GACtB,OAAO,IAAI,EAAc,EAAO,CAElC,IAAK,GAAG,CAEN,IAAM,EADU,EACG,GACnB,OAAO,IAAI,EAAe,GAAwC,EAAG,CAAC,CAExE,IAAK,GAAG,CAEN,IAAM,EADU,EACG,GACnB,OAAO,GAAwC,GAAyC,EAAG,CAAC,GAAK,EAAK,IAAI,EAAY,EAA2C,GAAyC,EAAG,CAAC,CAAC,CAAG,IAAI,EAAc,EAAG,CAEzO,IAAK,GACH,OAAO,GAET,QACE,OAAO,IAIb,SAAS,GAAuC,EAAO,CACrD,IAAM,EAAM,IAAqC,CAC3C,EAAO,EAAM,OACf,EAAO,EACX,OAAa,CACX,IAAM,EAAK,EACX,GAAI,EAAK,EAAM,CACb,IAAM,EAAO,EAAM,GACnB,GAAuC,EAAI,MAAO,GAAgD,EAAK,CAAC,CACxG,EAAO,EAAK,EAAI,EAChB,cAEA,MAGJ,OAAO,GAAuC,EAAI,CAEpD,SAAS,GAAuC,EAAO,CACrD,IAAI,EAEJ,GAAI,CACF,KAAM,CACJ,IAAM,EAAQ,GAAuC,EAA2C,EAAO,EAAG,EAAM,OAAO,CAAC,CACxH,GAAI,EAAM,OAAS,EAEjB,EADY,EACF,OACL,CACQ,EACK,GAElB,MAAM,KAER,MAAM,GAER,EAAM,GAAiC,uBAAuB,CAEhE,IAAM,EAAQ,GAA+C,EAAE,CACzD,EAAO,EAAI,MACX,EAAO,EAAK,OACd,EAAO,EACX,OAAa,CACX,IAAM,EAAK,EACX,GAAI,EAAK,EAAM,CACb,IAAM,EAAO,EAAK,GAClB,GAAuC,EAAO,GAAgD,EAAK,CAAC,CACpG,EAAO,EAAK,EAAI,EAChB,cAEA,MAGJ,OAAO,EC7yDT,SAAS,GAAmB,EAA0B,CACpD,GAAI,OAAO,GAAS,SAAU,CAC5B,GAAI,CAAC,OAAO,SAAS,EAAK,CACxB,MAAU,UAAU,mCAAmC,CAEzD,MAAO,CAAE,KAAM,EAAG,GAAI,EAAM,CAE9B,GAAI,OAAO,GAAS,SAClB,MAAO,CAAE,KAAM,EAAG,GAAI,EAAM,CAE9B,GAAI,IAAS,GACX,MAAO,CAAE,KAAM,EAAG,CAEpB,GAAI,IAAS,GACX,MAAO,CAAE,KAAM,EAAG,CAEpB,MAAU,UAAU,kDAAkD,CAGxE,SAAS,GAAe,EAA4B,CAClD,GAAI,aAAiB,WACnB,OAAO,EAET,GAAI,GAAS,OAAO,GAAU,SAAU,CACtC,IAAM,EAAO,EAA4B,IACzC,GAAI,aAAe,WAAY,CAC7B,IAAM,EAAS,EAA6B,OAAS,EAC/C,EAAO,EAA2B,KAAO,EAAI,OACnD,OAAO,EAAI,SAAS,EAAO,EAAI,EAGnC,MAAU,UAAU,gDAAgD,CAGtE,SAAS,GAAW,EAAwB,CAE1C,OADa,GAAmC,KAChD,CACE,IAAK,GACH,OAAQ,EAAwB,GAClC,IAAK,GACH,OAAQ,EAAwB,GAClC,IAAK,GACH,MAAO,GACT,IAAK,GACH,MAAO,GACT,IAAK,GAEH,OAAO,GAAgB,EAAyB,GAAG,CACrD,QACE,MAAU,UAAU,qCAAqC,EAI/D,SAAgB,EAAe,EAA8B,CAE3D,OAAOE,GADY,EAAM,IAAI,GAAmB,CACnB,CAG/B,SAAgB,GAAe,EAA8B,CAE3D,OADgBC,GAAW,EAA+B,CAC3C,IAAK,GAAS,GAAW,EAAK,CAAC,CAGhD,SAAgB,GAAa,EAAe,EAAuB,CACjE,IAAM,EAAM,KAAK,IAAI,EAAE,OAAQ,EAAE,OAAO,CACxC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,GAAK,EAC5B,GAAI,EAAE,KAAO,EAAE,GACb,OAAO,EAAE,GAAK,EAAE,GAAK,GAAK,EAM9B,OAHI,EAAE,SAAW,EAAE,OACV,EAEF,EAAE,OAAS,EAAE,OAAS,GAAK,EAGpC,SAAgB,GAAiB,EAA2C,CAC1E,GAAI,EAAM,SAAW,EACnB,OAEF,IAAM,EAAO,MAAM,KAAK,EAAM,CAC9B,IAAK,IAAI,EAAI,EAAK,OAAS,EAAG,GAAK,EAAG,IAAQ,CAC5C,IAAM,EAAU,EAAK,GACrB,GAAI,EAAU,IAEZ,MADA,GAAK,GAAK,EAAU,EACb,IAAI,WAAW,EAAK,MAAM,EAAG,EAAI,EAAE,CAAC,EAMjD,SAAgB,GAAY,EAA0B,CACpD,OAAO,KAAK,UAAU,EAAM,CC1C9B,MAAM,GAAc,IAAI,YAClBC,GACH,WAA4E,gBAE/E,SAAS,GAAe,EAAuB,CAC7C,OAAO,GAAY,OAAO,EAAM,CAAC,OAGnC,SAAS,GAAc,EAAmC,CACxD,OAAO,OAAO,GAAW,UAAY,GAAe,EAAO,CAAG,IAGhE,SAAS,IAA6B,CACpC,IAAM,EAAK,IAAI,WAAW,GAAG,CACvB,EAAY,OAAO,OAAW,IAAe,OAAiB,IAAA,GACpE,GAAI,GAAW,gBACb,EAAU,gBAAgB,EAAG,SACpB,GAAW,YAAa,CACjC,IAAMC,EAAkB,EAAU,YAAY,GAAG,CACjD,EAAG,IAAI,EAAI,MAEX,IAAK,IAAI,EAAI,EAAG,EAAI,GAAI,GAAK,EAC3B,EAAG,GAAK,KAAK,MAAM,KAAK,QAAQ,CAAG,IAAI,CAG3C,OAAO,MAAM,KAAK,EAAK,GAAS,EAAK,SAAS,GAAG,CAAC,SAAS,EAAG,IAAI,CAAC,CAAC,KAAK,GAAG,CAG9E,SAAS,GAAgB,EAAyB,CAChD,GAAI,IAAW,IAAA,GACb,OAAO,IAAoB,CAE7B,GAAI,CAAC,GAAc,EAAO,CACxB,MAAU,UAAU,gDAAgD,CAEtE,OAAO,EAGT,SAAS,EAAa,EAAa,CAOjC,OANI,IAAU,IAAA,GACL,EAEL,GACK,GAAkB,EAAM,CAE1B,KAAK,MAAM,KAAK,UAAU,EAAM,CAAC,CAG1C,SAAS,EAAc,EAA4C,CAC7D,MAAC,GAAY,OAAO,GAAa,UAAY,MAAM,QAAQ,EAAS,EAGxE,OAAO,EAAU,EAAwB,CAG3C,SAAS,GAAc,EAAuB,EAAqC,CAC7E,MAAC,GAAU,OAAO,GAAW,UAGjC,IAAI,SAAU,EAAQ,CACpB,IAAM,EAAQ,EAAO,KACrB,EAAO,KAAO,IAAU,IAAA,GAAY,IAAA,GAAY,EAAU,EAAM,CAE9D,aAAc,IAChB,EAAO,SAAW,EAAc,EAAO,SAAS,GAIpD,SAAS,EAAa,EAAmD,CACvE,IAAMC,EAAwB,EAAE,CAEhC,OADA,GAAc,EAAQ,EAAQ,CACvB,EAGT,SAAS,GAAa,EAAqB,EAA8C,CACvF,IAAM,EAAS,EAAa,EAAK,CAEjC,OADA,GAAc,EAAQ,EAAO,CACtB,EAGT,SAAS,EAAY,EAAmB,EAAsC,CAC5E,IAAMC,EAAuB,CAC3B,EAAG,GAAY,EAAM,CACtB,CACG,EAAQ,OAAS,IAAA,KACnB,EAAO,EAAI,EAAU,EAAQ,KAAK,EAEpC,IAAM,EAAW,EAAc,EAAQ,SAAS,CAIhD,OAHI,IAAa,IAAA,KACf,EAAO,EAAI,GAEN,EAGT,SAAS,GAAwB,EAAgE,CAU/F,MATI,CAAC,GAAY,OAAO,GAAa,SAC5B,CAAE,OAAQ,GAAM,CAErB,WAAY,EACT,EAAS,OAGP,CAAE,OAAQ,GAAM,CAFd,CAAE,OAAQ,GAAO,OAAQ,EAAS,QAAU,WAAY,CAI5D,CAAE,OAAQ,GAAM,CAGzB,SAAS,GAAgB,EAAsE,CAC7F,OACE,OAAO,GAAQ,YACf,IACC,OAAO,UAAU,eAAe,KAAK,EAAK,QAAQ,EACjD,OAAO,UAAU,eAAe,KAAK,EAAK,OAAO,EACjD,OAAO,UAAU,eAAe,KAAK,EAAK,wBAAwB,EAClE,OAAO,UAAU,eAAe,KAAK,EAAK,SAAS,EAIzD,SAAS,GAAgB,EAAyD,CAChF,OAAO,OAAO,GAAQ,YAAY,GAAgB,OAAO,UAAU,eAAe,KAAK,EAAK,SAAS,CAGvG,SAAS,GAAc,EAA8C,CAC9D,KAGL,GAAI,CACF,IAAM,EAAS,KAAK,MAAM,EAAK,CAC/B,GAAI,GAAU,OAAO,GAAW,UAAY,CAAC,MAAM,QAAQ,EAAO,CAChE,OAAO,OAEH,GAMV,SAAS,GAAU,EAAwC,CACrD,MAAS,KAGb,OAAO,KAAK,MAAM,EAAK,CAGzB,SAAS,GAAiB,EAAyB,CACjD,IAAM,EAAQ,EAAI,MAAM,IAAI,CAC5B,GAAI,EAAM,OAAS,EACjB,MAAO,CAAE,aAAc,EAAG,eAAgB,EAAG,OAAQ,GAAI,CAE3D,IAAM,EAAW,OAAO,EAAM,GAAG,CAC3B,EAAU,OAAO,EAAM,GAAG,CAC1B,EAAS,EAAM,MAAM,EAAE,CAAC,KAAK,IAAI,CACvC,MAAO,CACL,aAAc,OAAO,SAAS,EAAS,CAAG,EAAW,EACrD,eAAgB,OAAO,SAAS,EAAQ,CAAG,KAAK,MAAM,EAAQ,CAAG,EACjE,OAAQ,GAAc,EAAO,CAAG,EAAS,GAC1C,CAGH,SAAS,GAAY,EAA2B,CAC9C,MAAO,GAAG,EAAM,aAAa,GAAG,EAAM,eAAe,GAAG,EAAM,SAGhE,SAAS,GAAa,EAAe,EAAuB,CAU1D,OATI,EAAE,eAAiB,EAAE,aAGrB,EAAE,iBAAmB,EAAE,eAGvB,EAAE,SAAW,EAAE,OACV,EAEF,EAAE,OAAS,EAAE,OAAS,EAAI,GALxB,EAAE,eAAiB,EAAE,eAAiB,EAAI,GAH1C,EAAE,aAAe,EAAE,aAAe,EAAI,GAWjD,SAAS,GAAsB,EAA4D,CACzF,GAAI,CAAC,EAAO,OACZ,GAAM,CAAE,eAAc,kBAAmB,EACrC,MAAC,OAAO,SAAS,EAAa,EAAI,CAAC,OAAO,SAAS,EAAe,EAGtE,MAAO,CACS,eACd,eAAgB,KAAK,MAAM,EAAe,CAC3C,CAGH,SAAS,GAAiB,EAAiB,EAA6B,CACtE,GAAI,EAAO,SAAW,EACpB,MAAO,GAET,GAAI,EAAI,OAAS,EAAO,OACtB,MAAO,GAET,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,GAAK,EACtC,GAAI,EAAI,KAAO,EAAO,GACpB,MAAO,GAGX,MAAO,GAGT,eAAe,GAAa,EAAqC,CAC/D,OAAO,EAAK,IAAK,IAAS,CACxB,IAAK,EAAI,IACT,KAAM,EAAI,KACV,SAAU,EAAI,SACd,SAAU,EAAI,SACd,QAAS,EAAI,QACb,KAAM,EAAI,KACX,EAAE,CAmBL,SAAS,GAAqB,EAAyB,CACrD,GAAI,CAAC,EAAQ,MAAO,GACpB,GAAI,OAAO,GAAW,SACpB,MAAU,UAAU,+BAA+B,CAErD,GAAI,CAAC,2BAA2B,KAAK,EAAO,CAC1C,MAAU,UAAU,+FAA+F,CAErH,OAAO,EAGT,SAAS,GAAgB,EAA4B,CACnD,MAAO,CACL,GAAI,GAAG,EAAO,IACd,WAAY,GAAG,EAAO,YACtB,KAAM,GAAG,EAAO,MAChB,eAAgB,GAAG,EAAO,uBAC1B,iBAAkB,GAAG,EAAO,oBAC5B,0BAA2B,GAAG,EAAO,8BACtC,CAGH,IAAa,GAAb,MAAa,CAAY,CACvB,GACA,YACA,GACA,OACA,UACA,OAEA,YAAoB,EAAwB,EAAgB,EAAqC,EAA0D,EAAoB,CAC7K,KAAK,GAAK,EACV,KAAK,YAAc,EACnB,KAAK,GAAK,EACV,KAAK,OAAS,EACd,KAAK,UAAY,IAAI,IACrB,KAAK,OAAS,EAGhB,aAAa,KAAK,EAAmD,CACnE,IAAM,EAAK,EAAQ,YAAe,MAAM,EAAU,CAAE,KAAM,EAAQ,KAAM,CAAC,CAEnE,EAAS,GADA,GAAqB,EAAQ,YAAY,CAClB,CACtC,MAAM,EAAY,aAAa,EAAI,EAAO,CAC1C,IAAM,EAAS,MAAM,EAAY,cAAc,EAAI,EAAQ,EAAQ,OAAO,CACpE,CAAE,KAAI,UAAW,MAAM,EAAY,iBAAiB,EAAI,EAAO,CACrE,OAAO,IAAI,EAAY,EAAI,EAAQ,EAAI,EAAQ,EAAO,CAGxD,aAAa,SAAS,EAA8E,CAClG,IAAM,EAAQ,MAAM,EAAY,KAAK,EAAQ,CAE7C,OADA,MAAM,EAAM,WAAW,EAAQ,OAAO,CAC/B,EAGT,MAAM,OAAuB,CAC3B,MAAM,KAAK,GAAG,OAAO,CAGvB,aAAqB,aAAa,EAAwB,EAAmC,CAC3F,MAAM,EAAG,KAAK;mCACiB,EAAO,GAAG;;;;;;;SAOpC,CACL,MAAM,EAAG,KAAK;mCACiB,EAAO,WAAW;;;;;;;;;SAS5C,CACL,MAAM,EAAG,KAAK,8BAA8B,EAAO,KAAK,iBAAiB,CACzE,MAAM,EAAG,KACP,8BAA8B,EAAO,eAAe,MAAM,EAAO,GAAG,gCACrE,CACD,MAAM,EAAG,KACP,8BAA8B,EAAO,iBAAiB,MAAM,EAAO,WAAW,OAC/E,CACD,MAAM,EAAG,KACP,8BAA8B,EAAO,0BAA0B,MAAM,EAAO,WAAW,iBACxF,CAGH,aAAqB,cAAc,EAAwB,EAAoB,EAAoC,CACjH,IAAM,EAAa,GAAgB,EAAS,CACtC,EAAO,MAAM,EAAG,MAA2B,uBAAuB,EAAO,KAAK,UAAU,CAC9F,GAAI,EAAK,OAAS,GAAK,OAAO,EAAK,IAAI,SAAY,SAAU,CAC3D,IAAM,EAAW,EAAK,GAAG,QAKzB,OAJI,GAAY,IAAa,GAC3B,MAAM,EAAG,IAAI,UAAU,EAAO,KAAK,kBAAmB,CAAC,EAAW,CAAC,CAC5D,GAEF,GAAgB,EAAS,CAIlC,OAFA,MAAM,EAAG,KAAK,eAAe,EAAO,OAAO,CAC3C,MAAM,EAAG,IAAI,eAAe,EAAO,KAAK,sBAAuB,CAAC,EAAW,CAAC,CACrE,EAGT,aAAqB,iBAAiB,EAAwB,EAAgI,CAC5L,IAAM,EAAK,IAAI,IACT,EAAO,MAAM,EAAG,MACpB,wEAAwE,EAAO,GAAG,gBACnF,CACD,IAAK,IAAM,KAAO,EAAM,CACtB,GAAI,CAAC,GAAO,OAAO,EAAI,MAAS,SAAU,SAC1C,IAAM,EAAQ,GAAsB,CAClC,aAAc,OAAO,EAAI,UAAY,EAAE,CACvC,eAAgB,OAAO,EAAI,SAAW,EAAE,CACzC,CAAC,CACE,GACF,EAAG,IAAI,EAAI,KAAM,EAAM,CAM3B,IAAM,GAHS,MAAM,EAAG,MACtB,iCAAiC,EAAO,GAAG,+CAC5C,EACoB,GAKrB,MAAO,CAAE,KAAI,OAHX,GAAS,OAAO,SAAS,EAAM,SAAS,EAAI,OAAO,SAAS,EAAM,QAAQ,CACtE,CAAE,aAAc,OAAO,EAAM,SAAS,CAAE,eAAgB,OAAO,EAAM,QAAQ,CAAE,CAC/E,CAAE,aAAc,EAAG,eAAgB,EAAG,CACvB,CAGvB,YAAoB,EAAyB,CAC3C,IAAM,EAAU,KAAK,GAAG,IAAI,EAAM,OAAO,EACrC,CAAC,GAAW,GAAa,EAAO,CAAE,GAAG,EAAS,OAAQ,EAAM,OAAQ,CAAC,CAAG,IAC1E,KAAK,GAAG,IAAI,EAAM,OAAQ,CACxB,aAAc,EAAM,aACpB,eAAgB,EAAM,eACvB,CAAC,EAGF,KAAK,OAAO,aAAe,EAAM,cAChC,KAAK,OAAO,eAAiB,EAAM,cAClC,KAAK,OAAO,eAAiB,EAAM,kBAErC,KAAK,OAAS,CAAE,aAAc,EAAM,aAAc,eAAgB,EAAM,eAAgB,EAI5F,cAAsB,EAA0B,CAC9C,IAAM,EAAY,GAAO,KAAK,KAAK,CAC/B,EAAW,KAAK,OAAO,aACvB,EAAU,KAAK,OAAO,eAO1B,OANI,EAAY,GACd,EAAW,EACX,EAAU,GAEV,GAAoB,EAEf,CAAE,aAAc,EAAU,eAAgB,EAAS,OAAQ,KAAK,YAAa,CAGtF,MAAc,eAAe,EAA2C,CACtE,IAAM,EAAW,EAAe,EAAU,IAAI,CACxC,EAAQ,EAAU,OAAS,KAAK,cAAc,EAAU,IAAI,CAC5D,EAAU,GAAa,EAAU,QAAS,EAAE,CAAC,CAC7C,EAAW,EAAQ,OAAS,IAAA,GAAY,KAAO,KAAK,UAAU,EAAQ,KAAK,CAC3E,EAAe,EAAQ,WAAa,IAAA,GAAY,KAAO,KAAK,UAAU,EAAQ,SAAS,CACzF,EAAU,GA8Dd,GA5DA,MAAM,KAAK,GAAG,iBAAiB,KAAO,IAAO,CAC3C,IAAM,EAAe,MAAM,EAAG,MAC5B,4DAA4D,KAAK,OAAO,GAAG,wBAC3E,CAAC,EAAS,CACX,CACD,GAAI,EAAa,OAAS,EAAG,CAC3B,IAAM,EAAW,EAAa,GAMxB,EAAM,GAAa,EALS,CAChC,aAAc,OAAO,EAAS,UAAY,EAAE,CAC5C,eAAgB,OAAO,EAAS,SAAW,EAAE,CAC7C,OAAQ,OAAO,EAAS,MAAQ,GAAG,CACpC,CAC6C,CACxC,EAAe,EAAS,MAAQ,KAChC,EAAe,EAAS,UAAY,KAK1C,GAHE,EAAU,eACV,IAAa,GACb,IAAiB,EAEjB,OAEF,GAAI,EAAM,EAAG,CACX,MAAM,EAAG,IACP,eAAe,KAAK,OAAO,WAAW,0EACtC,CAAC,EAAU,EAAU,EAAc,EAAM,aAAc,EAAM,eAAgB,EAAM,OAAO,CAC3F,CACD,OAEF,GAAI,EAAM,EACR,MAAM,EAAG,IACP,eAAe,KAAK,OAAO,WAAW,0EACtC,CACE,EACA,EAAS,MAAQ,KACjB,EAAS,UAAY,KACrB,EAAS,UAAY,EACrB,EAAS,SAAW,EACpB,EAAS,MAAQ,GAClB,CACF,MAED,OAGJ,MAAM,EAAG,IACP,eAAe,KAAK,OAAO,GAAG;;;;;;;+BAQ9B,CAAC,EAAU,EAAU,EAAc,EAAM,aAAc,EAAM,eAAgB,EAAM,OAAO,CAC3F,CACD,EAAU,IACV,CAEF,KAAK,YAAY,EAAM,CACnB,EAAS,CACX,IAAM,EAAe,CACnB,IAAK,EAAU,IAAI,OAAO,CAC1B,UACA,OAAQ,EAAU,OACnB,CACG,EAAU,UACZ,EAAU,UAAU,KAAK,EAAa,CAEtC,KAAK,WAAW,EAAU,OAAQ,CAAC,EAAa,CAAC,CAGrD,OAAO,EAGT,WACE,EACA,EACM,CACN,GAAI,KAAK,UAAU,OAAS,GAAK,EAAO,SAAW,EACjD,OAEF,IAAMC,EAAoB,CACxB,SACA,OAAQ,EAAO,IAAK,IAAkB,CACpC,IAAK,EAAU,EAAM,IAAI,CACzB,MAAO,EAAM,QAAQ,OAAS,IAAA,GAA4C,IAAA,GAAhC,EAAU,EAAM,QAAQ,KAAK,CACvE,SAAU,EAAc,EAAM,QAAQ,SAAS,CAC/C,QAAS,EAAa,EAAM,QAAQ,CACrC,EAAE,CACJ,CACD,KAAK,UAAU,QAAS,GAAa,CACnC,EAAS,EAAM,EACf,CAGJ,MAAM,IAAI,EAAgB,EAAc,EAA6B,CACnE,MAAM,KAAK,eAAe,CACxB,MACA,QAAS,CAAE,KAAM,EAAU,EAAM,CAAE,CACnC,MACA,cAAe,GACf,OAAQ,QACT,CAAC,CAGJ,MAAM,YAAY,EAAgB,EAAc,EAA8B,EAAE,CAAiB,CAC/F,IAAMC,EAA6B,CAAE,KAAM,EAAU,EAAM,CAAE,CACzD,EAAQ,WACV,EAAY,SAAW,EAAc,EAAQ,SAAS,EAExD,IAAM,EAAQ,EAAQ,OAAO,UAC7B,GAAI,EAAO,CACT,IAAM,EAAU,EAAa,EAAY,CAEnC,EAAe,GAAa,EADd,MAAM,EAAM,CAAE,IAAK,EAAI,OAAO,CAAE,IAAK,EAAQ,IAAK,CAAE,EAAQ,EAClB,EAAQ,CACtE,GAAI,EAAa,OAAS,IAAA,GACxB,MAAU,UAAU,oCAAoC,CAE1D,MAAM,KAAK,eAAe,CACxB,MACA,QAAS,EACT,IAAK,EAAQ,IACb,cAAe,GACf,OAAQ,QACT,CAAC,CACF,OAEF,MAAM,KAAK,eAAe,CACxB,MACA,QAAS,EACT,IAAK,EAAQ,IACb,cAAe,GACf,OAAQ,QACT,CAAC,CAGJ,MAAM,OAAO,EAAgB,EAA6B,CACxD,MAAM,KAAK,eAAe,CACxB,MACA,QAAS,EAAE,CACX,MACA,cAAe,GACf,OAAQ,QACT,CAAC,CAGJ,MAAM,IAAI,EAAgB,EAAc,EAA6B,CACnE,MAAM,KAAK,IAAI,EAAK,EAAO,EAAI,CAGjC,MAAM,UAAU,EAA+B,CAC7C,IAAM,EAAa,GAAgB,EAAO,CAC1C,MAAM,KAAK,GAAG,KAAK,eAAe,KAAK,OAAO,OAAO,CACrD,MAAM,KAAK,GAAG,IAAI,eAAe,KAAK,OAAO,KAAK,sBAAuB,CAAC,EAAW,CAAC,CACtF,KAAK,YAAc,EAGrB,MAAM,IAAI,EAA4C,CACpD,IAAM,EAAW,EAAe,EAAI,CAK9B,GAJO,MAAM,KAAK,GAAG,MACzB,oBAAoB,KAAK,OAAO,GAAG,wBACnC,CAAC,EAAS,CACX,EACgB,GACZ,KACL,OAAO,GAAU,EAAI,KAAK,CAG5B,MAAM,OAAO,EAAkC,CAC7C,IAAM,EAAO,MAAM,KAAK,KAAK,CAAE,OAAQ,EAAK,CAAC,CACvCC,EAAkB,EAAE,CAC1B,IAAK,IAAM,KAAO,EACZ,EAAI,IAAI,IAAM,IACd,EAAI,IAAI,SAAW,EAAI,OAAS,GACpC,EAAO,KAAK,EAAI,IAAI,EAAI,IAAI,OAAS,GAAG,CAE1C,OAAO,EAGT,MAAM,OAAO,EAAgB,EAAc,EAA6B,CACtE,GAAI,IAAU,MAAQ,OAAO,GAAU,SACrC,MAAU,UAAU,oCAAoC,CAE1D,IAAM,EAAW,MAAM,KAAK,KAAK,CAAE,OAAQ,EAAK,CAAC,CACjD,IAAK,IAAM,KAAO,EACZ,EAAI,IAAI,IAAM,IAChB,MAAM,KAAK,OAAO,EAAI,IAAK,EAAI,CAGnC,IAAM,EAAY,EAAI,OAAO,CAC7B,EAAU,KAAK,EAAM,CACrB,MAAM,KAAK,IAAI,EAAW,GAAM,EAAI,CAGtC,gBACE,EACsG,CACtG,IAAIC,EACAC,EACAC,EAEE,EAAc,GAAyD,CAC3E,GAAI,CAAC,EAAO,CACV,EAAQ,EACR,OAEF,IAAM,EAAM,GAAa,EAAU,MAAO,EAAM,MAAM,CAClD,EAAM,EACR,EAAQ,EACC,IAAQ,IACjB,EAAQ,CAAE,MAAO,EAAM,MAAO,UAAW,EAAM,WAAa,EAAU,UAAW,GAI/E,EAAc,GAAyD,CAC3E,GAAI,CAAC,EAAO,CACV,EAAQ,EACR,OAEF,IAAM,EAAM,GAAa,EAAU,MAAO,EAAM,MAAM,CAClD,EAAM,EACR,EAAQ,EACC,IAAQ,IACjB,EAAQ,CAAE,MAAO,EAAM,MAAO,UAAW,EAAM,WAAa,EAAU,UAAW,GAIrF,GAAI,CACF,GAAI,EAAQ,OAAQ,CAClB,IAAM,EAAc,EAAe,EAAQ,OAAO,CAClD,EAAe,EACf,EAAW,CAAE,MAAO,EAAa,UAAW,GAAM,CAAC,CACnD,IAAM,EAAc,GAAiB,EAAY,CAC7C,GACF,EAAW,CAAE,MAAO,EAAa,UAAW,GAAO,CAAC,CAGpD,EAAQ,OAAS,EAAQ,MAAM,OAAS,aAC1C,EAAW,CACT,MAAO,EAAe,EAAQ,MAAM,IAAI,CACxC,UAAW,EAAQ,MAAM,OAAS,YACnC,CAAC,CAEA,EAAQ,KAAO,EAAQ,IAAI,OAAS,aACtC,EAAW,CACT,MAAO,EAAe,EAAQ,IAAI,IAAI,CACtC,UAAW,EAAQ,IAAI,OAAS,YACjC,CAAC,MAEE,CACN,MAAO,CAAE,MAAO,EAAE,CAAE,OAAQ,EAAE,CAAE,MAAO,GAAM,CAG/C,IAAMC,EAAkB,EAAE,CACpBC,EAAoB,EAAE,CAY5B,OAXI,IACF,EAAM,KAAK,OAAO,EAAM,UAAY,KAAO,IAAI,IAAI,CACnD,EAAO,KAAK,EAAM,MAAM,EAEtB,IACF,EAAM,KAAK,OAAO,EAAM,UAAY,KAAO,IAAI,IAAI,CACnD,EAAO,KAAK,EAAM,MAAM,EAKnB,CAAE,QAAO,SAAQ,WAHL,GACb,GAAoB,GAAsB,GAAiB,EAAO,EAAG,EAAE,EAAa,CACtF,IAAA,GACgC,CAGtC,MAAM,KAAK,EAAuB,EAAE,CAAsB,CACxD,IAAM,EAAS,KAAK,gBAAgB,EAAQ,CAC5C,GAAI,EAAO,MACT,MAAO,EAAE,CAEX,IAAM,EAAU,EAAO,MAAM,OAAS,EAAI,SAAS,EAAO,MAAM,KAAK,QAAQ,GAAK,GAC5E,EAAO,MAAM,KAAK,GAAG,MACzB,4DAA4D,KAAK,OAAO,GAAG,GAAG,EAAQ,mBACtF,EAAO,OACR,CACKC,EAAoB,EAAE,CAC5B,IAAK,IAAM,KAAO,EAAM,CACtB,IAAM,EAAW,EAAI,IACrB,GAAI,EAAO,YAAc,CAAC,EAAO,WAAW,EAAS,CACnD,SAEF,IAAM,EAAM,GAAe,EAAS,CAC9BC,EAAoB,CACxB,aAAc,OAAO,EAAI,UAAY,EAAE,CACvC,eAAgB,OAAO,EAAI,SAAW,EAAE,CACxC,OAAQ,OAAO,EAAI,MAAQ,GAAG,CAC/B,CACKC,EAAyB,EAAE,CAC3B,EAAO,GAAU,EAAI,KAAK,CAC5B,IAAS,IAAA,KAAW,EAAQ,KAAO,GACvC,IAAM,EAAW,GAAc,EAAI,SAAS,CACxC,IAAa,IAAA,KAAW,EAAQ,SAAW,GAC/C,IAAM,EAAM,EAAY,EAAO,EAAQ,CACvC,EAAO,KAAK,CAAE,MAAK,MAAK,MAAO,EAAQ,KAAM,CAAC,CAEhD,OAAO,EAGT,SAAyB,CACvB,IAAMC,EAAoB,EAAE,CAC5B,IAAK,GAAM,CAAC,EAAM,KAAU,KAAK,GAAG,SAAS,CAC3C,EAAG,GAAQ,CAAE,GAAG,EAAO,CAEzB,OAAO,EAGT,QAAiB,CACf,OAAO,KAAK,YAGd,oBAA6B,CAC3B,OAAO,KAAK,OAAO,aAGrB,MAAc,eAAe,EAAsB,EAAgC,EAAwC,CACzH,IAAM,EAAiB,IAAI,IAC3B,GAAI,EACF,IAAK,GAAM,CAAC,EAAM,KAAU,OAAO,QAAQ,EAAK,CAAE,CAChD,IAAM,EAAa,GAAsB,EAAM,CAC3C,GACF,EAAe,IAAI,EAAM,EAAW,CAK1C,IAAMC,EAAwC,EAAE,CAE1C,EAAQ,EAAS,CAAC,EAAO,CAAG,MAAM,KAAK,KAAK,GAAG,MAAM,CAAC,CACtDC,EAAyE,EAAE,CACjF,IAAK,IAAM,KAAQ,EAAO,CACxB,IAAM,EAAa,KAAK,GAAG,IAAI,EAAK,CAC9B,EAAY,EAAe,IAAI,EAAK,CAExC,GACA,IACC,EAAW,aAAe,EAAU,cAClC,EAAW,eAAiB,EAAU,cACrC,EAAW,gBAAkB,EAAU,iBAK7C,EAAc,KAAK,CAAE,OAAM,YAAW,CAAC,CAOzC,GAJI,GAAU,EAAc,MAAO,GAAM,EAAE,OAAS,EAAO,EACzD,EAAc,KAAK,CAAE,KAAM,EAAQ,UAAW,EAAe,IAAI,EAAO,CAAE,CAAC,CAGzE,EAAc,SAAW,EAC3B,MAAO,CAAE,QAAS,EAAG,UAAS,CAGhC,IAAK,IAAM,KAAU,EAAe,CAClC,IAAMN,EAAoB,CAAC,EAAO,KAAK,CACnC,EAAS,iBACT,EAAO,YACT,GAAU,qBACV,EAAO,KAAK,EAAO,UAAU,aAAa,EAE5C,IAAM,EAAO,MAAM,KAAK,GAAG,MACzB,4DAA4D,KAAK,OAAO,GAAG,GAAG,EAAO,kCACrF,EACD,CACD,IAAK,IAAM,KAAO,EAAM,CACtB,IAAME,EAAoB,CACxB,aAAc,OAAO,EAAI,UAAY,EAAE,CACvC,eAAgB,OAAO,EAAI,SAAW,EAAE,CACxC,OAAQ,OAAO,EAAI,MAAQ,GAAG,CAC/B,CACK,EAAY,EAAO,UASzB,GAPE,IACC,EAAM,aAAe,EAAU,cAC7B,EAAM,eAAiB,EAAU,cAChC,EAAM,gBAAkB,EAAU,iBAKtC,IAA0B,IAAA,IAC1B,OAAO,SAAS,EAAsB,EACtC,EAAI,OAAS,MACb,EAAM,aAAe,EAErB,SAEF,IAAMC,EAAyB,EAAE,CAC3B,EAAO,GAAU,EAAI,KAAK,CAC5B,IAAS,IAAA,KAAW,EAAQ,KAAO,GACvC,IAAM,EAAW,GAAc,EAAI,SAAS,CACxC,IAAa,IAAA,KAAW,EAAQ,SAAW,GAC/C,IAAM,EAAW,GAAe,EAAI,IAAI,CACxC,EAAQ,GAAY,EAAS,EAAI,EAAY,EAAO,EAAQ,EAGhE,MAAO,CAAE,QAAS,EAAG,UAAS,CAGhC,MAAc,gBAAgB,EAA+C,CAC3E,IAAM,EAAO,MAAM,KAAK,eAAe,EAAQ,KAAM,EAAQ,sBAAuB,EAAQ,OAAO,CAC7F,EAAY,EAAQ,OAAO,UACjC,GAAI,CAAC,EACH,OAAO,EAET,IAAMI,EAAuB,CAAE,QAAS,EAAK,QAAS,QAAS,EAAE,CAAE,CACnE,IAAK,GAAM,CAAC,EAAK,KAAW,OAAO,QAAQ,EAAK,QAAQ,CAAE,CACxD,IAAM,EAAQ,GAAiB,EAAO,EAAE,CAClC,EAAU,CACd,IAAK,KAAK,MAAM,EAAI,CACpB,QACA,IAAK,CAAE,GAAG,EAAQ,CACnB,CACKb,EAA6B,EAAE,CACjC,EAAO,IAAM,IAAA,KAAW,EAAY,KAAO,EAAU,EAAO,EAAE,EAClE,IAAM,EAAO,EAAc,EAAO,EAAE,CAChC,IAAS,IAAA,KAAW,EAAY,SAAW,GAC/C,IAAM,EAAU,EAAa,EAAY,CAEnC,EAAe,GAAa,EADd,MAAM,EAAU,EAAS,EAAQ,EACS,EAAQ,CACtE,EAAO,QAAQ,GAAO,EAAY,EAAO,EAAa,CAExD,OAAO,EAOT,WAAW,EAAqC,EAAuD,CAIrG,OAHI,GAAgB,EAAI,CACf,KAAK,gBAAgB,EAAI,CAE3B,KAAK,eAAe,EAAK,EAAsB,CAGxD,MAAc,eAAe,EAA6C,CACxE,GAAI,EAAO,UAAY,EACrB,MAAU,UAAU,6BAA6B,CAEnD,IAAI,EAAW,EACTc,EAAqD,EAAE,CACvDC,EAAmF,EAAE,CAC3F,IAAK,GAAM,CAAC,EAAW,KAAW,OAAO,QAAQ,EAAO,QAAQ,CAAE,CAChE,IAAIC,EACJ,GAAI,CACF,IAAM,EAAS,KAAK,MAAM,EAAU,CACpC,EAAW,MAAM,QAAQ,EAAO,CAAI,EAAuB,EAAE,MACvD,CACN,EAAQ,KAAK,CAAE,IAAK,EAAE,CAAE,OAAQ,cAAe,CAAC,CAChD,SAEF,IAAM,EAAQ,GAAiB,EAAO,EAAE,CAClCP,EAAyB,EAAE,CAC7B,EAAO,IAAM,IAAA,KAAW,EAAQ,KAAO,EAAU,EAAO,EAAE,EAC9D,IAAM,EAAW,EAAc,EAAO,EAAE,CACpC,IAAa,IAAA,KAAW,EAAQ,SAAW,GAC/C,GAAY,EACZ,MAAM,KAAK,eAAe,CACxB,IAAK,EACL,UACA,QACA,cAAe,GACf,OAAQ,SACR,UAAW,EACZ,CAAC,CAKJ,OAHI,EAAc,OAAS,GACzB,KAAK,WAAW,SAAU,EAAc,CAEnC,CAAE,WAAU,UAAS,CAK9B,MAAM,WAAW,EAA0D,CACzE,GAAI,GAAgB,EAAI,CAAE,CACxB,IAAM,EAAa,EAAI,OAAO,WACxB,EAAU,EAAa,CAAE,QAAS,EAAI,OAAO,QAAS,QAAS,CAAE,GAAG,EAAI,OAAO,QAAS,CAAE,CAAG,EAAI,OACjGK,EAAqD,EAAE,CAC7D,GAAI,EACF,IAAK,GAAM,CAAC,EAAK,KAAW,OAAO,QAAQ,EAAQ,QAAQ,CAAE,CAC3D,IAAM,EAAa,KAAK,MAAM,EAAI,CAC5B,EAAQ,GAAiB,EAAO,EAAE,CAClCL,EAAyB,EAAE,CAC7B,EAAO,IAAM,IAAA,KAAW,EAAQ,KAAO,EAAU,EAAO,EAAE,EAC9D,IAAM,EAAW,EAAc,EAAO,EAAE,CACpC,IAAa,IAAA,KAAW,EAAQ,SAAW,GAK/C,IAAM,EAAa,GAJF,MAAM,EACrB,CAAE,IAAK,EAAY,QAAO,IAAK,EAAQ,CACvC,EAAa,EAAQ,CACtB,CACmD,CAC/C,EAAW,OAId,EAAQ,QAAQ,GAAO,EAAY,EAAO,EAAQ,EAHlD,EAAQ,KAAK,CAAE,IAAK,EAAY,OAAQ,EAAW,QAAU,WAAY,CAAC,CAC1E,OAAO,EAAQ,QAAQ,IAM7B,IAAM,EAAa,MAAM,KAAK,eAAe,EAAQ,CACrD,MAAO,CAAE,SAAU,EAAW,SAAU,QAAS,EAAQ,OAAO,EAAW,QAAQ,CAAE,CAEvF,OAAO,KAAK,eAAe,EAAI,CAGjC,MAAM,cAAc,EAAqC,CACvD,IAAM,EAAS,KAAK,MAAM,EAAK,CAC/B,OAAO,KAAK,WAAW,EAAO,CAGhC,MAAM,QAA0B,CAK9B,OAAO,EADY,MAAM,GAHZ,MAAM,KAAK,GAAG,MACzB,4DAA4D,KAAK,OAAO,GAAG,mBAC5E,CAC0C,CACX,CAGlC,MAAM,UAAkC,CACtC,OAAO,KAAK,gBAAgB,CAG9B,MAAM,MAAM,EAAmC,CAC7C,IAAM,EAAS,MAAM,EAAM,YAAY,CACvC,MAAM,KAAK,WAAW,EAAO,CAG/B,aAAa,iBAAiB,EAAgB,EAAkC,CAC9E,GAAM,CAAC,EAAS,GAAW,MAAM,QAAQ,IAAI,CAAC,EAAE,QAAQ,CAAE,EAAE,QAAQ,CAAC,CAAC,CACtE,OAAO,IAAY,EAGrB,iBAAwB,EAIxB,UAAU,EAAmD,CAE3D,OADA,KAAK,UAAU,IAAI,EAAS,KACf,CACX,KAAK,UAAU,OAAO,EAAS"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["textEncoder","out: number[]","parseMetadata","parseData","encode_key","decode_key","structuredCloneFn: (<T>(value: T) => T) | undefined","cryptoLike: CryptoLike | undefined","buf: Uint8Array","result: ExportPayload","entries: EncodableVersionVectorEntry[]","buffer: number[]","vv: VersionVector","record: ExportRecord","usedClock: EntryClock | undefined","batch: EventBatch","basePayload: ExportPayload","keyBytes: Uint8Array","info: EntryInfo","values: Value[]","lower: { value: Uint8Array; inclusive: boolean } | undefined","upper: { value: Uint8Array; inclusive: boolean } | undefined","prefixFilter: Uint8Array | undefined","where: string[]","params: unknown[]","result: ScanRow[]","clock: EntryClock","payload: ExportPayload","entries: Record<string, ExportRecord>","peersToExport: Array<{\n peer: string;\n fromEntry?: VersionVectorEntry;\n }>","result: ExportBundle","skipped: Array<{ key: KeyPart[]; reason: string }>","appliedEvents: Array<{\n key: KeyPart[];\n payload: ExportPayload;\n source: string;\n }>","keyParts: KeyPart[]"],"sources":["../src/digest.ts","../src/memcomparable.ts","../src/key-encoding.ts","../src/index.ts"],"sourcesContent":["import type { EntryClock, MetadataMap, Value } from \"./types\";\n\nconst TAG_RAW_VALUE = 0x10;\nconst TAG_RAW_CLOCK = 0x11;\nconst TAG_RAW_METADATA = 0x12;\nconst TAG_JSON_NULL = 0x20;\nconst TAG_JSON_BOOL = 0x21;\nconst TAG_JSON_NUMBER = 0x22;\nconst TAG_JSON_STRING = 0x23;\nconst TAG_JSON_ARRAY = 0x24;\nconst TAG_JSON_OBJECT = 0x25;\n\ntype RawValue = {\n data?: Value;\n metadata?: MetadataMap;\n clock: EntryClock;\n};\n\nexport type DigestRow = {\n key: Uint8Array;\n data: string | null;\n metadata: string | null;\n physical: number;\n logical: number;\n peer: string;\n};\n\nconst textEncoder = new TextEncoder();\n\nfunction toHex(bytes: Uint8Array): string {\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction encodeU64(value: number | bigint): Uint8Array {\n let remaining = BigInt(value);\n const out: number[] = [];\n do {\n let byte = Number(remaining & 0x7fn);\n remaining >>= 7n;\n if (remaining !== 0n) {\n byte |= 0x80;\n }\n out.push(byte);\n } while (remaining !== 0n);\n return new Uint8Array(out);\n}\n\nfunction encodeI64(value: number | bigint): Uint8Array {\n let remaining = BigInt(value);\n const out: number[] = [];\n let more = true;\n while (more) {\n let byte = Number(remaining & 0x7fn);\n remaining >>= 7n;\n const signBitSet = (byte & 0x40) !== 0;\n if (\n (remaining === 0n && !signBitSet) ||\n (remaining === -1n && signBitSet)\n ) {\n more = false;\n } else {\n byte |= 0x80;\n }\n out.push(byte);\n }\n return new Uint8Array(out);\n}\n\nexport async function sha256(bytes: Uint8Array): Promise<Uint8Array> {\n const cryptoMaybe = typeof crypto !== \"undefined\" ? crypto : undefined;\n if (cryptoMaybe?.subtle) {\n const digestInput = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(digestInput).set(bytes);\n const digest = await cryptoMaybe.subtle.digest(\"SHA-256\", digestInput);\n return new Uint8Array(digest);\n }\n try {\n const { createHash } = await import(\"crypto\");\n const hash = createHash(\"sha256\");\n hash.update(bytes);\n return new Uint8Array(hash.digest());\n } catch {\n throw new Error(\"No crypto implementation available for digest\");\n }\n}\n\nclass DigestWriter {\n private chunks: number[] = [];\n\n writeTag(tag: number): void {\n this.chunks.push(tag & 0xff);\n }\n\n writeBool(value: boolean): void {\n this.chunks.push(value ? 1 : 0);\n }\n\n writeBytes(bytes: Uint8Array): void {\n this.writeLen(bytes.length);\n for (let i = 0; i < bytes.length; i += 1) {\n this.chunks.push(bytes[i]);\n }\n }\n\n writeRawBytes(bytes: Uint8Array): void {\n for (let i = 0; i < bytes.length; i += 1) {\n this.chunks.push(bytes[i]);\n }\n }\n\n writeLen(length: number): void {\n this.writeRawBytes(encodeU64(length));\n }\n\n writeI64(value: number): void {\n this.writeRawBytes(encodeI64(value));\n }\n\n writeF64(value: number): void {\n const view = new DataView(new ArrayBuffer(8));\n view.setFloat64(0, value, false);\n const bytes = new Uint8Array(view.buffer);\n this.writeRawBytes(bytes);\n }\n\n writeString(value: string): void {\n this.writeBytes(textEncoder.encode(value));\n }\n\n writeJson(value: Value): void {\n if (value === null) {\n this.writeTag(TAG_JSON_NULL);\n return;\n }\n if (typeof value === \"boolean\") {\n this.writeTag(TAG_JSON_BOOL);\n this.writeBool(value);\n return;\n }\n if (typeof value === \"number\") {\n this.writeTag(TAG_JSON_NUMBER);\n this.writeF64(value);\n return;\n }\n if (typeof value === \"string\") {\n this.writeTag(TAG_JSON_STRING);\n this.writeString(value);\n return;\n }\n if (Array.isArray(value)) {\n this.writeTag(TAG_JSON_ARRAY);\n this.writeLen(value.length);\n for (const entry of value) {\n this.writeJson(entry);\n }\n return;\n }\n if (value && typeof value === \"object\") {\n const entries = Object.entries(value as Record<string, Value>).sort(\n ([a], [b]) => (a < b ? -1 : a > b ? 1 : 0),\n );\n this.writeTag(TAG_JSON_OBJECT);\n this.writeLen(entries.length);\n for (const [name, entry] of entries) {\n this.writeString(name);\n this.writeJson(entry);\n }\n return;\n }\n throw new TypeError(\"Unsupported JSON value in digest\");\n }\n\n writeRawValue(value: RawValue): void {\n this.writeTag(TAG_RAW_VALUE);\n if (value.data === undefined) {\n this.writeBool(false);\n } else {\n this.writeBool(true);\n this.writeJson(value.data);\n }\n this.writeTag(TAG_RAW_METADATA);\n if (!value.metadata || typeof value.metadata !== \"object\") {\n this.writeBool(false);\n } else {\n const entries = Object.entries(value.metadata).sort(\n ([a], [b]) => (a < b ? -1 : a > b ? 1 : 0),\n );\n this.writeBool(true);\n this.writeLen(entries.length);\n for (const [name, entry] of entries) {\n this.writeString(name);\n this.writeJson(entry as Value);\n }\n }\n this.writeTag(TAG_RAW_CLOCK);\n this.writeF64(value.clock.physicalTime);\n this.writeI64(Math.trunc(value.clock.logicalCounter));\n this.writeBytes(textEncoder.encode(value.clock.peerId));\n }\n\n async finish(): Promise<Uint8Array> {\n const data = new Uint8Array(this.chunks);\n return sha256(data);\n }\n}\n\nfunction parseMetadata(json: string | null): MetadataMap | undefined {\n if (!json) return undefined;\n try {\n const value = JSON.parse(json);\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n return value as MetadataMap;\n } catch {\n return undefined;\n }\n}\n\nfunction parseData(json: string | null): Value | undefined {\n if (json === null || json === undefined) {\n return undefined;\n }\n return JSON.parse(json) as Value;\n}\n\nasync function digestEntry(row: DigestRow): Promise<Uint8Array | null> {\n const data = parseData(row.data);\n if (data === undefined) {\n return null;\n }\n const metadata = parseMetadata(row.metadata);\n const writer = new DigestWriter();\n writer.writeBytes(row.key);\n writer.writeRawValue({\n data,\n metadata,\n clock: {\n physicalTime: Number(row.physical),\n logicalCounter: Number(row.logical),\n peerId: String(row.peer),\n },\n });\n return writer.finish();\n}\n\nexport async function computeDigest(rows: DigestRow[]): Promise<string> {\n const acc = new Uint8Array(32);\n for (const row of rows) {\n const digest = await digestEntry(row);\n if (!digest) {\n continue;\n }\n for (let i = 0; i < acc.length; i += 1) {\n acc[i] ^= digest[i];\n }\n }\n return toHex(acc);\n}\n","// @ts-nocheck\n// NOTE: generated from moon/memcomparable; intentionally skips type checking.\nconst $9221120237041090561L = { hi: 2146959360, lo: 1 };\nclass $PanicError extends Error {}\nfunction $panic() {\n throw new $PanicError();\n}\nconst moonbitlang$core$bigint$$BigInt$compare = (x, y) => x < y ? -1 : x > y ? 1 : 0;\nconst moonbitlang$core$bigint$$BigInt$equal = (x, y) => x === y;\nconst moonbitlang$core$bigint$$BigInt$from_int64 = (x) => BigInt(x.hi) * 0x100000000n + BigInt(x.lo >>> 0);\nconst moonbitlang$core$bigint$$BigInt$op_neg_ffi = (x) => -x;\nconst moonbitlang$core$bigint$$BigInt$op_add_ffi = (x, y) => x + y;\nconst moonbitlang$core$bigint$$BigInt$op_mul_ffi = (x, y) => x * y;\nconst moonbitlang$core$bigint$$BigInt$op_div_ffi = (x, y) => x / y;\nconst moonbitlang$core$bigint$$BigInt$op_mod_ffi = (x, y) => x % y;\nconst moonbitlang$core$bigint$$BigInt$js_shr = (x, y) => x >> BigInt(y);\nconst moonbitlang$core$bigint$$BigInt$to_uint = (x) => Number(BigInt.asUintN(32, x)) | 0;\nconst moonbitlang$core$bigint$$BigInt$to_int = (x) => Number(BigInt.asIntN(32, x));\nfunction $bound_check(arr, index) {\n if (index < 0 || index >= arr.length) throw new Error(\"Index out of bounds\");\n}\nconst moonbitlang$core$builtin$$int_to_string_js = (x, radix) => {\n return x.toString(radix);\n};\nfunction $makebytes(a, b) {\n const arr = new Uint8Array(a);\n if (b !== 0) {\n arr.fill(b);\n }\n return arr;\n}\nconst moonbitlang$core$builtin$$JSArray$push = (arr, val) => { arr.push(val); };\nconst $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Continue$0$ = { $tag: 0 };\nfunction $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Break$0$(param0) {\n this._0 = param0;\n}\n$64$moonbitlang$47$core$47$builtin$46$ForeachResult$Break$0$.prototype.$tag = 1;\nfunction $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Return$0$(param0) {\n this._0 = param0;\n}\n$64$moonbitlang$47$core$47$builtin$46$ForeachResult$Return$0$.prototype.$tag = 2;\nfunction $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Error$0$(param0) {\n this._0 = param0;\n}\n$64$moonbitlang$47$core$47$builtin$46$ForeachResult$Error$0$.prototype.$tag = 3;\nfunction $64$moonbitlang$47$core$47$builtin$46$ForeachResult$JumpOuter$0$(param0) {\n this._0 = param0;\n}\n$64$moonbitlang$47$core$47$builtin$46$ForeachResult$JumpOuter$0$.prototype.$tag = 4;\nconst moonbitlang$core$builtin$$MyInt64$reinterpret_as_double = function f(a) {\n let view = f._view;\n if (view === undefined) {\n view = f._view = new DataView(new ArrayBuffer(8));\n }\n view.setUint32(0, a.hi);\n view.setUint32(4, a.lo);\n return view.getFloat64(0);\n};\nconst moonbitlang$core$builtin$$MyInt64$reinterpret_double = function f(a) {\n let view = f._view;\n if (view === undefined) {\n view = f._view = new DataView(new ArrayBuffer(8));\n }\n view.setFloat64(0, a);\n const hi = view.getInt32(0);\n const lo = view.getInt32(4);\n return { hi, lo };\n};\nconst moonbitlang$core$builtin$$MyInt64$convert_to_double = (a) => a.hi * 4294967296.0 + (a.lo >>> 0);\nconst moonbitlang$core$builtin$$MyInt64$from_double = (a) => {\n if (isNaN(a)) {\n return { hi: 0, lo: 0 };\n }\n if (a >= 9223372036854775807) {\n return { hi: 0x7fffffff, lo: 0xffffffff };\n }\n if (a <= -9223372036854775808) {\n return { hi: -2147483648, lo: 0 };\n }\n let neg = false;\n if (a < 0) {\n neg = true;\n a = -a;\n }\n let hi = (a * (1 / 0x100000000)) | 0;\n let lo = a >>> 0;\n if (neg) {\n if (lo === 0) {\n hi = ~hi + 1;\n } else {\n hi = ~hi;\n lo = ~lo + 1;\n }\n }\n return { hi, lo };\n};\nconst $bytes_literal$0 = new Uint8Array();\nconst $255L = { hi: 0, lo: 255 };\nconst $0L = { hi: 0, lo: 0 };\nconst $_1L = { hi: -1, lo: -1 };\nconst $_9223372036854775808L = { hi: -2147483648, lo: 0 };\nfunction Result$Err$1$(param0) {\n this._0 = param0;\n}\nResult$Err$1$.prototype.$tag = 0;\nfunction Result$Ok$1$(param0) {\n this._0 = param0;\n}\nResult$Ok$1$.prototype.$tag = 1;\nfunction Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidTag(param0) {\n this._0 = param0;\n}\nError$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidTag.prototype.$tag = 2;\nconst Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF = { $tag: 1 };\nconst Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidUTF8 = { $tag: 0 };\nconst $1L = { hi: 0, lo: 1 };\nconst $256L = { hi: 0, lo: 256 };\nfunction Result$Err$2$(param0) {\n this._0 = param0;\n}\nResult$Err$2$.prototype.$tag = 0;\nfunction Result$Ok$2$(param0) {\n this._0 = param0;\n}\nResult$Ok$2$.prototype.$tag = 1;\nfunction Result$Err$3$(param0) {\n this._0 = param0;\n}\nResult$Err$3$.prototype.$tag = 0;\nfunction Result$Ok$3$(param0) {\n this._0 = param0;\n}\nResult$Ok$3$.prototype.$tag = 1;\nfunction KeyPart$Bytes(param0) {\n this._0 = param0;\n}\nKeyPart$Bytes.prototype.$tag = 0;\nfunction KeyPart$String(param0) {\n this._0 = param0;\n}\nKeyPart$String.prototype.$tag = 1;\nfunction KeyPart$Int(param0) {\n this._0 = param0;\n}\nKeyPart$Int.prototype.$tag = 2;\nfunction KeyPart$Float(param0) {\n this._0 = param0;\n}\nKeyPart$Float.prototype.$tag = 3;\nconst KeyPart$False = { $tag: 4 };\nconst KeyPart$True = { $tag: 5 };\nfunction Result$Err$4$(param0) {\n this._0 = param0;\n}\nResult$Err$4$.prototype.$tag = 0;\nfunction Result$Ok$4$(param0) {\n this._0 = param0;\n}\nResult$Ok$4$.prototype.$tag = 1;\nfunction KeyJsPart$Number(param0) {\n this._0 = param0;\n}\nKeyJsPart$Number.prototype.$tag = 0;\nfunction KeyJsPart$String(param0) {\n this._0 = param0;\n}\nKeyJsPart$String.prototype.$tag = 1;\nfunction KeyJsPart$Bytes(param0) {\n this._0 = param0;\n}\nKeyJsPart$Bytes.prototype.$tag = 2;\nconst KeyJsPart$True = { $tag: 3 };\nconst KeyJsPart$False = { $tag: 4 };\nconst zxch3n$expect$$to_string$46$42$bind$124$178 = \";\";\nconst zxch3n$expect$$red$46$constr$47$350 = 1;\nconst zxch3n$expect$$yellow$46$constr$47$352 = 3;\nconst zxch3n$expect$$blue$46$constr$47$354 = 4;\nconst moonbitlang$core$double$$not_a_number = moonbitlang$core$int64$$Int64$reinterpret_as_double($9221120237041090561L);\nfunction moonbitlang$core$abort$$abort$0$(msg) {\n return $panic();\n}\nfunction moonbitlang$core$abort$$abort$1$(msg) {\n return $panic();\n}\nfunction moonbitlang$core$abort$$abort$2$(msg) {\n return $panic();\n}\nfunction moonbitlang$core$abort$$abort$3$(msg) {\n $panic();\n}\nfunction moonbitlang$core$abort$$abort$4$(msg) {\n return $panic();\n}\nfunction moonbitlang$core$uint$$UInt$to_int64(self) {\n return moonbitlang$core$uint$$UInt$to_uint64(self);\n}\nfunction moonbitlang$core$array$$ArrayView$join$5$(self, separator) {\n if ((self.end - self.start | 0) === 0) {\n return \"\";\n } else {\n const _hd = self.buf[self.start];\n const _bind = self.buf;\n const _bind$2 = 1 + self.start | 0;\n const _bind$3 = self.end;\n const _x = { buf: _bind, start: _bind$2, end: _bind$3 };\n const hd = moonbitlang$core$string$$ToStringView$to_string_view$5$(_hd);\n let size_hint = hd.end - hd.start | 0;\n const _len = _x.end - _x.start | 0;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const s = _bind[_bind$2 + _i | 0];\n const _tmp$2 = size_hint;\n const _p = moonbitlang$core$string$$ToStringView$to_string_view$5$(s);\n size_hint = _tmp$2 + ((_p.end - _p.start | 0) + (separator.end - separator.start | 0) | 0) | 0;\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n size_hint = size_hint << 1;\n const buf = moonbitlang$core$builtin$$StringBuilder$new$46$inner(size_hint);\n moonbitlang$core$builtin$$Logger$write_substring$6$(buf, hd.str, hd.start, hd.end - hd.start | 0);\n if (moonbitlang$core$string$$String$char_length_eq$46$inner(separator.str, 0, separator.start, separator.end)) {\n const _len$2 = _x.end - _x.start | 0;\n let _tmp$2 = 0;\n while (true) {\n const _i = _tmp$2;\n if (_i < _len$2) {\n const s = _bind[_bind$2 + _i | 0];\n const s$2 = moonbitlang$core$string$$ToStringView$to_string_view$5$(s);\n moonbitlang$core$builtin$$Logger$write_substring$6$(buf, s$2.str, s$2.start, s$2.end - s$2.start | 0);\n _tmp$2 = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n } else {\n const _len$2 = _x.end - _x.start | 0;\n let _tmp$2 = 0;\n while (true) {\n const _i = _tmp$2;\n if (_i < _len$2) {\n const s = _bind[_bind$2 + _i | 0];\n const s$2 = moonbitlang$core$string$$ToStringView$to_string_view$5$(s);\n moonbitlang$core$builtin$$Logger$write_substring$6$(buf, separator.str, separator.start, separator.end - separator.start | 0);\n moonbitlang$core$builtin$$Logger$write_substring$6$(buf, s$2.str, s$2.start, s$2.end - s$2.start | 0);\n _tmp$2 = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n }\n return buf.val;\n }\n}\nfunction moonbitlang$core$array$$Array$push_iter$7$(self, iter) {\n iter((x) => {\n moonbitlang$core$array$$Array$push$7$(self, x);\n return 1;\n });\n}\nfunction moonbitlang$core$array$$Array$join$5$(self, separator) {\n return moonbitlang$core$array$$ArrayView$join$5$({ buf: self, start: 0, end: self.length }, separator);\n}\nfunction moonbitlang$core$builtin$$Compare$compare$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$compare(self, other);\n}\nfunction moonbitlang$core$builtin$$Eq$equal$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$equal(self, other);\n}\nfunction moonbitlang$core$builtin$$Neg$neg$8$(self) {\n return moonbitlang$core$bigint$$BigInt$op_neg_ffi(self);\n}\nfunction moonbitlang$core$builtin$$Add$add$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$op_add_ffi(self, other);\n}\nfunction moonbitlang$core$builtin$$Mul$mul$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$op_mul_ffi(self, other);\n}\nfunction moonbitlang$core$builtin$$Div$div$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$op_div_ffi(self, other);\n}\nfunction moonbitlang$core$builtin$$Mod$mod$8$(self, other) {\n return moonbitlang$core$bigint$$BigInt$op_mod_ffi(self, other);\n}\nfunction moonbitlang$core$builtin$$Shr$shr$8$(self, n) {\n if (n < 0) {\n moonbitlang$core$abort$$abort$3$(\"negative shift count\");\n }\n return moonbitlang$core$bigint$$BigInt$js_shr(self, n);\n}\nfunction moonbitlang$core$bigint$$BigInt$to_int64(self) {\n const hi = moonbitlang$core$bigint$$BigInt$to_uint(moonbitlang$core$builtin$$Shr$shr$8$(self, 32));\n const lo = moonbitlang$core$bigint$$BigInt$to_uint(self);\n return moonbitlang$core$builtin$$BitOr$lor$9$(moonbitlang$core$builtin$$Shl$shl$9$(moonbitlang$core$uint$$UInt$to_int64(hi), 32), moonbitlang$core$uint$$UInt$to_int64(lo));\n}\nfunction moonbitlang$core$bytes$$BytesView$at(self, index) {\n if (index >= 0 && index < (self.end - self.start | 0)) {\n const _tmp = self.bytes;\n const _tmp$2 = self.start + index | 0;\n $bound_check(_tmp, _tmp$2);\n return _tmp[_tmp$2];\n } else {\n return moonbitlang$core$abort$$abort$2$(`index out of bounds: the len is from 0 to ${moonbitlang$core$builtin$$Show$to_string$10$(self.end - self.start | 0)} but the index is ${moonbitlang$core$builtin$$Show$to_string$10$(index)}`);\n }\n}\nfunction moonbitlang$core$bytes$$Bytes$sub$46$inner(self, start, end) {\n const len = self.length;\n let end$2;\n if (end === undefined) {\n end$2 = len;\n } else {\n const _Some = end;\n const _end = _Some;\n end$2 = _end < 0 ? len + _end | 0 : _end;\n }\n const start$2 = start < 0 ? len + start | 0 : start;\n return start$2 >= 0 && (start$2 <= end$2 && end$2 <= len) ? { bytes: self, start: start$2, end: end$2 } : moonbitlang$core$abort$$abort$1$(\"Invalid index for View\");\n}\nfunction moonbitlang$core$bytes$$BytesView$sub$46$inner(self, start, end) {\n const len = self.end - self.start | 0;\n let end$2;\n if (end === undefined) {\n end$2 = len;\n } else {\n const _Some = end;\n const _end = _Some;\n end$2 = _end < 0 ? len + _end | 0 : _end;\n }\n const start$2 = start < 0 ? len + start | 0 : start;\n return start$2 >= 0 && (start$2 <= end$2 && end$2 <= len) ? { bytes: self.bytes, start: self.start + start$2 | 0, end: (self.start + start$2 | 0) + (end$2 - start$2 | 0) | 0 } : moonbitlang$core$abort$$abort$1$(\"Invalid index for View\");\n}\nfunction moonbitlang$core$bytes$$BytesView$iter(self) {\n const _p = (yield_) => {\n const _end383 = self.end - self.start | 0;\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < _end383) {\n const _bind = yield_(moonbitlang$core$bytes$$BytesView$at(self, i));\n if (_bind === 1) {\n } else {\n return 0;\n }\n _tmp = i + 1 | 0;\n continue;\n } else {\n return 1;\n }\n }\n };\n return _p;\n}\nfunction moonbitlang$core$bytes$$BytesView$iterator(self) {\n const i = { val: 0 };\n const len = self.end - self.start | 0;\n const _p = () => {\n if (i.val < len) {\n const _p$2 = i.val;\n const _tmp = self.bytes;\n const _tmp$2 = self.start + _p$2 | 0;\n $bound_check(_tmp, _tmp$2);\n const result = _tmp[_tmp$2];\n i.val = i.val + 1 | 0;\n return result;\n } else {\n return -1;\n }\n };\n return _p;\n}\nfunction moonbitlang$core$bytes$$Bytes$from_array(arr) {\n return moonbitlang$core$bytes$$Bytes$makei$11$(arr.end - arr.start | 0, (i) => moonbitlang$core$array$$ArrayView$at$2$(arr, i));\n}\nfunction moonbitlang$core$bytes$$Bytes$from_iter(iter) {\n const _bind = moonbitlang$core$builtin$$Iter$collect$2$(iter);\n return moonbitlang$core$bytes$$Bytes$from_array({ buf: _bind, start: 0, end: _bind.length });\n}\nfunction moonbitlang$core$byte$$Byte$to_uint64(self) {\n return moonbitlang$core$uint$$UInt$to_uint64(self);\n}\nfunction moonbitlang$core$string$$ToStringView$to_string_view$5$(self) {\n return { str: self, start: 0, end: self.length };\n}\nfunction moonbitlang$core$array$$FixedArray$unsafe_blit$2$(dst, dst_offset, src, src_offset, len) {\n if (dst === src && dst_offset < src_offset) {\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < len) {\n const _tmp$2 = dst_offset + i | 0;\n const _tmp$3 = src_offset + i | 0;\n $bound_check(src, _tmp$3);\n $bound_check(dst, _tmp$2);\n dst[_tmp$2] = src[_tmp$3];\n _tmp = i + 1 | 0;\n continue;\n } else {\n return;\n }\n }\n } else {\n let _tmp = len - 1 | 0;\n while (true) {\n const i = _tmp;\n if (i >= 0) {\n const _tmp$2 = dst_offset + i | 0;\n const _tmp$3 = src_offset + i | 0;\n $bound_check(src, _tmp$3);\n $bound_check(dst, _tmp$2);\n dst[_tmp$2] = src[_tmp$3];\n _tmp = i - 1 | 0;\n continue;\n } else {\n return;\n }\n }\n }\n}\nfunction moonbitlang$core$builtin$$StringBuilder$new$46$inner(size_hint) {\n return { val: \"\" };\n}\nfunction moonbitlang$core$builtin$$Logger$write_char$6$(self, ch) {\n const _bind = self;\n _bind.val = `${_bind.val}${String.fromCodePoint(ch)}`;\n}\nfunction moonbitlang$core$builtin$$Logger$write_string$6$(self, str) {\n const _bind = self;\n _bind.val = `${_bind.val}${str}`;\n}\nfunction moonbitlang$core$builtin$$Compare$op_gt$12$(x, y) {\n return moonbitlang$core$builtin$$Compare$compare$8$(x, y) > 0;\n}\nfunction moonbitlang$core$builtin$$Show$to_string$10$(self) {\n const logger = moonbitlang$core$builtin$$StringBuilder$new$46$inner(0);\n moonbitlang$core$builtin$$Show$output$13$(self, { self: logger, method_0: moonbitlang$core$builtin$$Logger$write_string$6$, method_1: moonbitlang$core$builtin$$Logger$write_substring$6$, method_2: moonbitlang$core$builtin$$Logger$write_char$6$ });\n return logger.val;\n}\nfunction moonbitlang$core$int$$Int$to_string$46$inner(self, radix) {\n return moonbitlang$core$builtin$$int_to_string_js(self, radix);\n}\nfunction moonbitlang$core$string$$String$char_length_eq$46$inner(self, len, start_offset, end_offset) {\n let end_offset$2;\n if (end_offset === undefined) {\n end_offset$2 = self.length;\n } else {\n const _Some = end_offset;\n end_offset$2 = _Some;\n }\n let _tmp = start_offset;\n let _tmp$2 = 0;\n while (true) {\n const index = _tmp;\n const count = _tmp$2;\n if (index < end_offset$2 && count < len) {\n const c1 = self.charCodeAt(index);\n if (55296 <= c1 && c1 <= 56319 && (index + 1 | 0) < end_offset$2) {\n const _tmp$3 = index + 1 | 0;\n const c2 = self.charCodeAt(_tmp$3);\n if (56320 <= c2 && c2 <= 57343) {\n _tmp = index + 2 | 0;\n _tmp$2 = count + 1 | 0;\n continue;\n } else {\n moonbitlang$core$abort$$abort$3$(\"invalid surrogate pair\");\n }\n }\n _tmp = index + 1 | 0;\n _tmp$2 = count + 1 | 0;\n continue;\n } else {\n return count === len && index === end_offset$2;\n }\n }\n}\nfunction moonbitlang$core$string$$String$substring$46$inner(self, start, end) {\n const len = self.length;\n let end$2;\n if (end === undefined) {\n end$2 = len;\n } else {\n const _Some = end;\n end$2 = _Some;\n }\n return start >= 0 && (start <= end$2 && end$2 <= len) ? self.substring(start, end$2) : $panic();\n}\nfunction moonbitlang$core$builtin$$Logger$write_substring$6$(self, str, start, len) {\n const _bind = self;\n _bind.val = `${_bind.val}${moonbitlang$core$string$$String$substring$46$inner(str, start, start + len | 0)}`;\n}\nfunction moonbitlang$core$array$$Array$new$46$inner$14$(capacity) {\n return [];\n}\nfunction moonbitlang$core$array$$Array$new$46$inner$15$(capacity) {\n return [];\n}\nfunction moonbitlang$core$array$$Array$new$46$inner$2$(capacity) {\n return [];\n}\nfunction moonbitlang$core$array$$Array$push$15$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$array$$Array$push$14$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$array$$Array$push$2$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$array$$Array$push$5$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$array$$Array$push$7$(self, value) {\n moonbitlang$core$builtin$$JSArray$push(self, value);\n}\nfunction moonbitlang$core$builtin$$Show$to_string$16$(self) {\n return String.fromCodePoint(self);\n}\nfunction moonbitlang$core$builtin$$Iter$each$17$(self, f) {\n const _foreach_result = { val: $64$moonbitlang$47$core$47$builtin$46$ForeachResult$Continue$0$ };\n self((a) => {\n f(a);\n return 1;\n });\n const _tmp = _foreach_result.val;\n switch (_tmp.$tag) {\n case 0: {\n return;\n }\n case 1: {\n const _break = _tmp;\n _break._0;\n return;\n }\n case 2: {\n const _return = _tmp;\n return _return._0;\n }\n case 3: {\n $panic();\n return;\n }\n default: {\n $panic();\n return;\n }\n }\n}\nfunction moonbitlang$core$builtin$$Iter$collect$2$(self) {\n const result = [];\n moonbitlang$core$builtin$$Iter$each$17$(self, (e) => {\n moonbitlang$core$array$$Array$push$2$(result, e);\n });\n return result;\n}\nfunction moonbitlang$core$builtin$$Iterator$next$2$(self) {\n const _func = self;\n return _func();\n}\nfunction moonbitlang$core$builtin$$Show$output$13$(self, logger) {\n logger.method_0(logger.self, moonbitlang$core$int$$Int$to_string$46$inner(self, 10));\n}\nfunction moonbitlang$core$array$$Array$iter$7$(self) {\n const _p = (yield_) => {\n const _len = self.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const v = self[_i];\n const _bind = yield_(v);\n if (_bind === 1) {\n } else {\n return 0;\n }\n _tmp = _i + 1 | 0;\n continue;\n } else {\n return 1;\n }\n }\n };\n return _p;\n}\nfunction moonbitlang$core$array$$FixedArray$sub$46$inner$2$(self, start, end) {\n const len = self.length;\n let end$2;\n if (end === undefined) {\n end$2 = len;\n } else {\n const _Some = end;\n const _end = _Some;\n end$2 = _end < 0 ? len + _end | 0 : _end;\n }\n const start$2 = start < 0 ? len + start | 0 : start;\n return start$2 >= 0 && (start$2 <= end$2 && end$2 <= len) ? { buf: self, start: start$2, end: end$2 } : moonbitlang$core$abort$$abort$4$(\"View index out of bounds\");\n}\nfunction moonbitlang$core$builtin$$MyInt64$extend_i32_u(value) {\n return { hi: 0, lo: value };\n}\nfunction moonbitlang$core$uint64$$UInt64$extend_uint(value) {\n return moonbitlang$core$builtin$$MyInt64$extend_i32_u(value);\n}\nfunction moonbitlang$core$uint$$UInt$to_uint64(self) {\n return moonbitlang$core$uint64$$UInt64$extend_uint(self);\n}\nfunction moonbitlang$core$int64$$Int64$reinterpret_as_double(self) {\n return moonbitlang$core$builtin$$MyInt64$reinterpret_as_double(self);\n}\nfunction moonbitlang$core$builtin$$MyInt64$from_int(value) {\n return { hi: value >> 31 & -1, lo: value | 0 };\n}\nfunction moonbitlang$core$int$$Int$to_int64(self) {\n return moonbitlang$core$builtin$$MyInt64$from_int(self);\n}\nfunction moonbitlang$core$uint64$$UInt64$to_int(self) {\n const _p = self;\n return _p.lo;\n}\nfunction moonbitlang$core$uint64$$UInt64$to_byte(self) {\n return moonbitlang$core$uint64$$UInt64$to_int(self) & 255;\n}\nfunction moonbitlang$core$builtin$$MyInt64$land(self, other) {\n return { hi: self.hi & other.hi, lo: self.lo & other.lo };\n}\nfunction moonbitlang$core$builtin$$MyInt64$lor(self, other) {\n return { hi: self.hi | other.hi, lo: self.lo | other.lo };\n}\nfunction moonbitlang$core$builtin$$MyInt64$lxor(self, other) {\n return { hi: self.hi ^ other.hi, lo: self.lo ^ other.lo };\n}\nfunction moonbitlang$core$builtin$$MyInt64$lsl(self, shift) {\n const shift$2 = shift & 63;\n if (shift$2 === 0) {\n return self;\n } else {\n if (shift$2 < 32) {\n const _hi = self.hi;\n const _lo = self.lo;\n const hi = _hi;\n const lo = _lo;\n const hi$2 = hi << shift$2 | (lo >>> (32 - shift$2 | 0) | 0);\n const lo$2 = lo << shift$2;\n return { hi: hi$2, lo: lo$2 };\n } else {\n return { hi: self.lo << (shift$2 - 32 | 0), lo: 0 };\n }\n }\n}\nfunction moonbitlang$core$builtin$$MyInt64$lsr(self, shift) {\n const shift$2 = shift & 63;\n return shift$2 === 0 ? self : shift$2 < 32 ? { hi: self.hi >>> shift$2 | 0, lo: self.lo >>> shift$2 | self.hi << (32 - shift$2 | 0) } : { hi: 0, lo: self.hi >>> (shift$2 - 32 | 0) | 0 };\n}\nfunction moonbitlang$core$builtin$$BitOr$lor$9$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$lor(self, other);\n}\nfunction moonbitlang$core$builtin$$Shl$shl$9$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$lsl(self, other);\n}\nfunction moonbitlang$core$double$$Double$convert_int64(value) {\n return moonbitlang$core$builtin$$MyInt64$convert_to_double(value);\n}\nfunction moonbitlang$core$int64$$Int64$to_double(self) {\n return moonbitlang$core$double$$Double$convert_int64(self);\n}\nfunction moonbitlang$core$uint64$$UInt64$reinterpret_as_double(self) {\n return moonbitlang$core$builtin$$MyInt64$reinterpret_as_double(self);\n}\nfunction moonbitlang$core$double$$Double$reinterpret_as_uint64(self) {\n return moonbitlang$core$builtin$$MyInt64$reinterpret_double(self);\n}\nfunction moonbitlang$core$builtin$$Eq$equal$18$(self, other) {\n const _p = self;\n const _p$2 = other;\n return _p.hi === _p$2.hi && _p.lo === _p$2.lo;\n}\nfunction moonbitlang$core$builtin$$BitAnd$land$18$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$land(self, other);\n}\nfunction moonbitlang$core$builtin$$BitOr$lor$18$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$lor(self, other);\n}\nfunction moonbitlang$core$builtin$$BitXOr$lxor$18$(self, other) {\n return moonbitlang$core$builtin$$MyInt64$lxor(self, other);\n}\nfunction moonbitlang$core$builtin$$Shl$shl$18$(self, shift) {\n return moonbitlang$core$builtin$$MyInt64$lsl(self, shift);\n}\nfunction moonbitlang$core$builtin$$Shr$shr$18$(self, shift) {\n return moonbitlang$core$builtin$$MyInt64$lsr(self, shift);\n}\nfunction moonbitlang$core$double$$Double$to_int64(self) {\n return moonbitlang$core$builtin$$MyInt64$from_double(self);\n}\nfunction moonbitlang$core$bytes$$Bytes$makei$11$(length, value) {\n if (length <= 0) {\n return $bytes_literal$0;\n }\n const arr = $makebytes(length, value(0));\n let _tmp = 1;\n while (true) {\n const i = _tmp;\n if (i < length) {\n $bound_check(arr, i);\n arr[i] = value(i);\n _tmp = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return arr;\n}\nfunction moonbitlang$core$builtin$$println$5$(input) {\n console.log(input);\n}\nfunction moonbitlang$core$array$$FixedArray$blit_from_bytes(self, bytes_offset, src, src_offset, length) {\n const e1 = (bytes_offset + length | 0) - 1 | 0;\n const e2 = (src_offset + length | 0) - 1 | 0;\n const len1 = self.length;\n const len2 = src.length;\n if (length >= 0 && (bytes_offset >= 0 && (e1 < len1 && (src_offset >= 0 && e2 < len2)))) {\n moonbitlang$core$array$$FixedArray$unsafe_blit$2$(self, bytes_offset, src, src_offset, length);\n return;\n } else {\n $panic();\n return;\n }\n}\nfunction moonbitlang$core$array$$ArrayView$at$2$(self, index) {\n if (index >= 0 && index < (self.end - self.start | 0)) {\n const _tmp = self.buf;\n const _tmp$2 = self.start + index | 0;\n $bound_check(_tmp, _tmp$2);\n return _tmp[_tmp$2];\n } else {\n return moonbitlang$core$abort$$abort$2$(`index out of bounds: the len is from 0 to ${moonbitlang$core$builtin$$Show$to_string$10$(self.end - self.start | 0)} but the index is ${moonbitlang$core$builtin$$Show$to_string$10$(index)}`);\n }\n}\nfunction moonbitlang$core$array$$Array$rev$2$(self) {\n const len = self.length;\n const arr = new Array(len);\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < len) {\n arr[i] = self[(len - i | 0) - 1 | 0];\n _tmp = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return arr;\n}\nfunction moonbitlang$core$buffer$$Buffer$grow_if_necessary(self, required) {\n const start = self.data.length <= 0 ? 1 : self.data.length;\n let enough_space;\n let _tmp = start;\n while (true) {\n const space = _tmp;\n if (space >= required) {\n enough_space = space;\n break;\n }\n _tmp = Math.imul(space, 2) | 0;\n continue;\n }\n if (enough_space !== self.data.length) {\n const new_data = $makebytes(enough_space, 0);\n moonbitlang$core$array$$FixedArray$unsafe_blit$2$(new_data, 0, self.data, 0, self.len);\n self.data = new_data;\n return;\n } else {\n return;\n }\n}\nfunction moonbitlang$core$buffer$$Buffer$write_byte(self, value) {\n moonbitlang$core$buffer$$Buffer$grow_if_necessary(self, self.len + 1 | 0);\n const _tmp = self.data;\n const _tmp$2 = self.len;\n $bound_check(_tmp, _tmp$2);\n _tmp[_tmp$2] = value;\n self.len = self.len + 1 | 0;\n}\nfunction moonbitlang$core$buffer$$Buffer$contents(self) {\n return moonbitlang$core$bytes$$Bytes$from_array(moonbitlang$core$array$$FixedArray$sub$46$inner$2$(self.data, 0, self.len));\n}\nfunction moonbitlang$core$buffer$$new$46$inner(size_hint) {\n const initial = size_hint < 1 ? 1 : size_hint;\n const data = $makebytes(initial, 0);\n return { data: data, len: 0 };\n}\nfunction moonbitlang$core$buffer$$Buffer$write_bytes(self, value) {\n const val_len = value.length;\n moonbitlang$core$buffer$$Buffer$grow_if_necessary(self, self.len + val_len | 0);\n moonbitlang$core$array$$FixedArray$blit_from_bytes(self.data, self.len, value, 0, val_len);\n self.len = self.len + val_len | 0;\n}\nfunction zxch3n$expect$$Color$to_bg_color_code(self) {\n switch (self) {\n case 0: {\n return \"40\";\n }\n case 1: {\n return \"41\";\n }\n case 2: {\n return \"42\";\n }\n case 3: {\n return \"43\";\n }\n case 4: {\n return \"44\";\n }\n case 5: {\n return \"45\";\n }\n case 6: {\n return \"46\";\n }\n case 7: {\n return \"47\";\n }\n default: {\n return \"49\";\n }\n }\n}\nfunction zxch3n$expect$$Color$to_color_code(self) {\n switch (self) {\n case 0: {\n return \"30\";\n }\n case 1: {\n return \"31\";\n }\n case 2: {\n return \"32\";\n }\n case 3: {\n return \"33\";\n }\n case 4: {\n return \"34\";\n }\n case 5: {\n return \"35\";\n }\n case 6: {\n return \"36\";\n }\n case 7: {\n return \"37\";\n }\n default: {\n return \"39\";\n }\n }\n}\nfunction zxch3n$expect$$Formated$to_string(self) {\n const styles = [];\n const _bind = self.color;\n if (_bind === undefined) {\n } else {\n const _Some = _bind;\n const _color = _Some;\n moonbitlang$core$array$$Array$push$5$(styles, zxch3n$expect$$Color$to_color_code(_color));\n }\n const _bind$2 = self.bg_color;\n if (_bind$2 === undefined) {\n } else {\n const _Some = _bind$2;\n const _bg_color = _Some;\n moonbitlang$core$array$$Array$push$5$(styles, zxch3n$expect$$Color$to_bg_color_code(_bg_color));\n }\n const _arr = self.formats;\n const _len = _arr.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const format = _arr[_i];\n switch (format) {\n case 0: {\n moonbitlang$core$array$$Array$push$5$(styles, \"1\");\n break;\n }\n case 1: {\n moonbitlang$core$array$$Array$push$5$(styles, \"4\");\n break;\n }\n case 2: {\n moonbitlang$core$array$$Array$push$5$(styles, \"5\");\n break;\n }\n case 3: {\n moonbitlang$core$array$$Array$push$5$(styles, \"7\");\n break;\n }\n case 4: {\n moonbitlang$core$array$$Array$push$5$(styles, \"8\");\n break;\n }\n case 5: {\n moonbitlang$core$array$$Array$push$5$(styles, \"9\");\n break;\n }\n default: {\n moonbitlang$core$array$$Array$push$5$(styles, \"3\");\n }\n }\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n if (styles.length > 0) {\n const style_string = moonbitlang$core$array$$Array$join$5$(styles, { str: zxch3n$expect$$to_string$46$42$bind$124$178, start: 0, end: zxch3n$expect$$to_string$46$42$bind$124$178.length });\n return `[${style_string}m${self.str}[0m`;\n } else {\n return self.str;\n }\n}\nfunction zxch3n$expect$$Formated$format(str) {\n return { str: str, bg_color: undefined, color: undefined, formats: [] };\n}\nfunction zxch3n$expect$$Formated$red(self) {\n return { str: self.str, bg_color: self.bg_color, color: zxch3n$expect$$red$46$constr$47$350, formats: self.formats };\n}\nfunction zxch3n$expect$$Formated$yellow(self) {\n return { str: self.str, bg_color: self.bg_color, color: zxch3n$expect$$yellow$46$constr$47$352, formats: self.formats };\n}\nfunction zxch3n$expect$$Formated$blue(self) {\n return { str: self.str, bg_color: self.bg_color, color: zxch3n$expect$$blue$46$constr$47$354, formats: self.formats };\n}\nfunction zxch3n$expect$$Formated$bold(self) {\n const _tmp = self.str;\n const _tmp$2 = self.bg_color;\n const _tmp$3 = self.color;\n const _self = [];\n moonbitlang$core$array$$Array$push$7$(_self, 0);\n moonbitlang$core$array$$Array$push_iter$7$(_self, moonbitlang$core$array$$Array$iter$7$(self.formats));\n return { str: _tmp, bg_color: _tmp$2, color: _tmp$3, formats: _self };\n}\nfunction zxch3n$expect$$panic$46$inner$3$(reason, loc) {\n const msg = `${zxch3n$expect$$Formated$to_string(zxch3n$expect$$Formated$red(zxch3n$expect$$Formated$bold(zxch3n$expect$$Formated$format(\"Panic: \"))))}${zxch3n$expect$$Formated$to_string(zxch3n$expect$$Formated$yellow(zxch3n$expect$$Formated$format(reason)))} at ${zxch3n$expect$$Formated$to_string(zxch3n$expect$$Formated$blue(zxch3n$expect$$Formated$format(loc)))}`;\n moonbitlang$core$builtin$$println$5$(msg);\n moonbitlang$core$abort$$abort$3$(msg);\n}\nfunction zxch3n$flock$types$$string_to_utf8(str) {\n const bytes = moonbitlang$core$array$$Array$new$46$inner$2$(0);\n let i = 0;\n while (true) {\n if (i < str.length) {\n const _tmp = i;\n $bound_check(str, _tmp);\n const code = str.charCodeAt(_tmp);\n if (code >= 55296 && (code <= 56319 && (i + 1 | 0) < str.length)) {\n const _tmp$2 = i + 1 | 0;\n $bound_check(str, _tmp$2);\n const low = str.charCodeAt(_tmp$2);\n if (low >= 56320 && low <= 57343) {\n const code_point = (65536 + (code - 55296 << 10) | 0) + (low - 56320 | 0) | 0;\n moonbitlang$core$array$$Array$push$2$(bytes, (240 | code_point >> 18) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code_point >> 12 & 63) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code_point >> 6 & 63) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code_point & 63) & 255);\n i = i + 1 | 0;\n } else {\n moonbitlang$core$array$$Array$push$2$(bytes, (224 | code >> 12) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code >> 6 & 63) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code & 63) & 255);\n }\n } else {\n if (code < 128) {\n moonbitlang$core$array$$Array$push$2$(bytes, code & 255);\n } else {\n if (code < 2048) {\n moonbitlang$core$array$$Array$push$2$(bytes, (192 | code >> 6) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code & 63) & 255);\n } else {\n moonbitlang$core$array$$Array$push$2$(bytes, (224 | code >> 12) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code >> 6 & 63) & 255);\n moonbitlang$core$array$$Array$push$2$(bytes, (128 | code & 63) & 255);\n }\n }\n }\n i = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return moonbitlang$core$bytes$$Bytes$from_array({ buf: bytes, start: 0, end: bytes.length });\n}\nfunction zxch3n$flock$types$$Utf8Str$from_string(str) {\n return { bytes: zxch3n$flock$types$$string_to_utf8(str) };\n}\nfunction zxch3n$flock$types$$is_valid_utf8(utf8Arr) {\n let i = 0;\n while (true) {\n if (i < (utf8Arr.end - utf8Arr.start | 0)) {\n const byte = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i);\n const _p = 128;\n const _p$2 = byte & _p & 255;\n const _p$3 = 0;\n if (_p$2 === _p$3) {\n i = i + 1 | 0;\n } else {\n const _p$4 = 224;\n const _p$5 = byte & _p$4 & 255;\n const _p$6 = 192;\n if (_p$5 === _p$6) {\n if ((i + 1 | 0) >= (utf8Arr.end - utf8Arr.start | 0)) {\n return false;\n }\n const byte2 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 1 | 0);\n const _p$7 = 192;\n if ((byte2 & _p$7 & 255) !== 128) {\n return false;\n }\n i = i + 2 | 0;\n } else {\n const _p$7 = 240;\n const _p$8 = byte & _p$7 & 255;\n const _p$9 = 224;\n if (_p$8 === _p$9) {\n if ((i + 2 | 0) >= (utf8Arr.end - utf8Arr.start | 0)) {\n return false;\n }\n const byte2 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 1 | 0);\n const byte3 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 2 | 0);\n let _tmp;\n const _p$10 = 192;\n if ((byte2 & _p$10 & 255) !== 128) {\n _tmp = true;\n } else {\n const _p$11 = 192;\n _tmp = (byte3 & _p$11 & 255) !== 128;\n }\n if (_tmp) {\n return false;\n }\n i = i + 3 | 0;\n } else {\n const _p$10 = 248;\n const _p$11 = byte & _p$10 & 255;\n const _p$12 = 240;\n if (_p$11 === _p$12) {\n if ((i + 3 | 0) >= (utf8Arr.end - utf8Arr.start | 0)) {\n return false;\n }\n const byte2 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 1 | 0);\n const byte3 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 2 | 0);\n const byte4 = moonbitlang$core$bytes$$BytesView$at(utf8Arr, i + 3 | 0);\n let _tmp;\n const _p$13 = 192;\n if ((byte2 & _p$13 & 255) !== 128) {\n _tmp = true;\n } else {\n let _tmp$2;\n const _p$14 = 192;\n if ((byte3 & _p$14 & 255) !== 128) {\n _tmp$2 = true;\n } else {\n const _p$15 = 192;\n _tmp$2 = (byte4 & _p$15 & 255) !== 128;\n }\n _tmp = _tmp$2;\n }\n if (_tmp) {\n return false;\n }\n i = i + 4 | 0;\n } else {\n return false;\n }\n }\n }\n }\n continue;\n } else {\n break;\n }\n }\n return true;\n}\nfunction zxch3n$flock$types$$Utf8Str$from_bytes_view(bytes) {\n if (!zxch3n$flock$types$$is_valid_utf8(moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 0, undefined))) {\n return undefined;\n }\n return { bytes: moonbitlang$core$bytes$$Bytes$from_iter(moonbitlang$core$bytes$$BytesView$iter(bytes)) };\n}\nfunction zxch3n$flock$types$$new_string_from_utf8(utf8Arr) {\n let i = 0;\n let result = \"\";\n while (true) {\n if (i < utf8Arr.length) {\n const _tmp = i;\n $bound_check(utf8Arr, _tmp);\n const byte = utf8Arr[_tmp];\n let code_point;\n const _p = 128;\n const _p$2 = byte & _p & 255;\n const _p$3 = 0;\n if (_p$2 === _p$3) {\n code_point = byte;\n } else {\n const _p$4 = 224;\n const _p$5 = byte & _p$4 & 255;\n const _p$6 = 192;\n if (_p$5 === _p$6) {\n if ((i + 1 | 0) >= utf8Arr.length) {\n return undefined;\n }\n const _tmp$2 = i + 1 | 0;\n $bound_check(utf8Arr, _tmp$2);\n const byte2 = utf8Arr[_tmp$2];\n const _p$7 = 192;\n if ((byte2 & _p$7 & 255) !== 128) {\n return undefined;\n }\n i = i + 1 | 0;\n const _p$8 = 31;\n const _tmp$3 = (byte & _p$8 & 255) << 6;\n const _p$9 = 63;\n code_point = _tmp$3 | byte2 & _p$9 & 255;\n } else {\n const _p$7 = 240;\n const _p$8 = byte & _p$7 & 255;\n const _p$9 = 224;\n if (_p$8 === _p$9) {\n if ((i + 2 | 0) >= utf8Arr.length) {\n return undefined;\n }\n const _tmp$2 = i + 1 | 0;\n $bound_check(utf8Arr, _tmp$2);\n const byte2 = utf8Arr[_tmp$2];\n const _tmp$3 = i + 2 | 0;\n $bound_check(utf8Arr, _tmp$3);\n const byte3 = utf8Arr[_tmp$3];\n let _tmp$4;\n const _p$10 = 192;\n if ((byte2 & _p$10 & 255) !== 128) {\n _tmp$4 = true;\n } else {\n const _p$11 = 192;\n _tmp$4 = (byte3 & _p$11 & 255) !== 128;\n }\n if (_tmp$4) {\n return undefined;\n }\n i = i + 2 | 0;\n const _p$11 = 15;\n const _tmp$5 = (byte & _p$11 & 255) << 12;\n const _p$12 = 63;\n const _tmp$6 = _tmp$5 | (byte2 & _p$12 & 255) << 6;\n const _p$13 = 63;\n code_point = _tmp$6 | byte3 & _p$13 & 255;\n } else {\n const _p$10 = 248;\n const _p$11 = byte & _p$10 & 255;\n const _p$12 = 240;\n if (_p$11 === _p$12) {\n if ((i + 3 | 0) >= utf8Arr.length) {\n return undefined;\n }\n const _tmp$2 = i + 1 | 0;\n $bound_check(utf8Arr, _tmp$2);\n const byte2 = utf8Arr[_tmp$2];\n const _tmp$3 = i + 2 | 0;\n $bound_check(utf8Arr, _tmp$3);\n const byte3 = utf8Arr[_tmp$3];\n const _tmp$4 = i + 3 | 0;\n $bound_check(utf8Arr, _tmp$4);\n const byte4 = utf8Arr[_tmp$4];\n let _tmp$5;\n const _p$13 = 192;\n if ((byte2 & _p$13 & 255) !== 128) {\n _tmp$5 = true;\n } else {\n let _tmp$6;\n const _p$14 = 192;\n if ((byte3 & _p$14 & 255) !== 128) {\n _tmp$6 = true;\n } else {\n const _p$15 = 192;\n _tmp$6 = (byte4 & _p$15 & 255) !== 128;\n }\n _tmp$5 = _tmp$6;\n }\n if (_tmp$5) {\n return undefined;\n }\n i = i + 3 | 0;\n const _p$14 = 7;\n const _tmp$6 = (byte & _p$14 & 255) << 18;\n const _p$15 = 63;\n const _tmp$7 = _tmp$6 | (byte2 & _p$15 & 255) << 12;\n const _p$16 = 63;\n const _tmp$8 = _tmp$7 | (byte3 & _p$16 & 255) << 6;\n const _p$17 = 63;\n code_point = _tmp$8 | byte4 & _p$17 & 255;\n } else {\n return undefined;\n }\n }\n }\n }\n result = `${result}${moonbitlang$core$builtin$$Show$to_string$16$(code_point)}`;\n i = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return result;\n}\nfunction zxch3n$flock$types$$Utf8Str$to_string(self) {\n const _p = zxch3n$flock$types$$new_string_from_utf8(self.bytes);\n if (_p === undefined) {\n return $panic();\n } else {\n const _p$2 = _p;\n return _p$2;\n }\n}\nfunction zxch3n$flock$memcomparable$$double_to_bits(d) {\n return moonbitlang$core$double$$Double$reinterpret_as_uint64(d);\n}\nfunction zxch3n$flock$memcomparable$$double_from_bits(bits) {\n return moonbitlang$core$uint64$$UInt64$reinterpret_as_double(bits);\n}\nfunction zxch3n$flock$memcomparable$$uint64_to_be_bytes(n) {\n const bytes = moonbitlang$core$array$$Array$new$46$inner$2$(0);\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 56), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 48), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 40), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 32), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 24), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 16), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(moonbitlang$core$builtin$$Shr$shr$18$(n, 8), $255L)));\n moonbitlang$core$array$$Array$push$2$(bytes, moonbitlang$core$uint64$$UInt64$to_byte(moonbitlang$core$builtin$$BitAnd$land$18$(n, $255L)));\n return moonbitlang$core$bytes$$Bytes$from_array({ buf: bytes, start: 0, end: bytes.length });\n}\nfunction zxch3n$flock$memcomparable$$uint64_from_be_bytes(bytes) {\n if (bytes.length !== 8) {\n zxch3n$expect$$panic$46$inner$3$(\"Invalid byte array length\", \"/Users/zxch3n/Code/flock/moon/memcomparable/utils.mbt:28:5-28:54\");\n }\n let result = $0L;\n const _tmp = result;\n $bound_check(bytes, 0);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[0]), 56));\n const _tmp$2 = result;\n $bound_check(bytes, 1);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$2, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[1]), 48));\n const _tmp$3 = result;\n $bound_check(bytes, 2);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$3, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[2]), 40));\n const _tmp$4 = result;\n $bound_check(bytes, 3);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$4, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[3]), 32));\n const _tmp$5 = result;\n $bound_check(bytes, 4);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$5, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[4]), 24));\n const _tmp$6 = result;\n $bound_check(bytes, 5);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$6, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[5]), 16));\n const _tmp$7 = result;\n $bound_check(bytes, 6);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$7, moonbitlang$core$builtin$$Shl$shl$18$(moonbitlang$core$byte$$Byte$to_uint64(bytes[6]), 8));\n const _tmp$8 = result;\n $bound_check(bytes, 7);\n result = moonbitlang$core$builtin$$BitOr$lor$18$(_tmp$8, moonbitlang$core$byte$$Byte$to_uint64(bytes[7]));\n return result;\n}\nfunction zxch3n$flock$memcomparable$$Key$new() {\n return { parts: moonbitlang$core$array$$Array$new$46$inner$15$(0) };\n}\nfunction zxch3n$flock$memcomparable$$Key$push(self, part) {\n moonbitlang$core$array$$Array$push$15$(self.parts, part);\n}\nfunction zxch3n$flock$memcomparable$$canonicalize_f64(n) {\n return n !== n ? (n < 0 ? -moonbitlang$core$double$$not_a_number : moonbitlang$core$double$$not_a_number) : n;\n}\nfunction zxch3n$flock$memcomparable$$encode_bytes(bytes, output) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 1);\n const _it = moonbitlang$core$bytes$$BytesView$iterator(bytes);\n while (true) {\n const _bind = moonbitlang$core$builtin$$Iterator$next$2$(_it);\n if (_bind === -1) {\n break;\n } else {\n const _Some = _bind;\n const _b = _Some;\n moonbitlang$core$buffer$$Buffer$write_byte(output, _b);\n const _p = 0;\n if (_b === _p) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 255);\n }\n continue;\n }\n }\n moonbitlang$core$buffer$$Buffer$write_byte(output, 0);\n}\nfunction zxch3n$flock$memcomparable$$encode_string(s, output) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 2);\n const bytes = s.bytes;\n const _len = bytes.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const b = bytes[_i];\n moonbitlang$core$buffer$$Buffer$write_byte(output, b);\n const _p = 0;\n if (b === _p) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 255);\n }\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n moonbitlang$core$buffer$$Buffer$write_byte(output, 0);\n}\nfunction zxch3n$flock$memcomparable$$encode_float(f, output) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 33);\n const f$2 = zxch3n$flock$memcomparable$$canonicalize_f64(f);\n const bits = f$2 < 0 ? moonbitlang$core$builtin$$BitXOr$lxor$18$(zxch3n$flock$memcomparable$$double_to_bits(f$2), $_1L) : moonbitlang$core$builtin$$BitXOr$lxor$18$(zxch3n$flock$memcomparable$$double_to_bits(f$2), $_9223372036854775808L);\n const bytes = zxch3n$flock$memcomparable$$uint64_to_be_bytes(bits);\n const _len = bytes.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const b = bytes[_i];\n moonbitlang$core$buffer$$Buffer$write_byte(output, b);\n _tmp = _i + 1 | 0;\n continue;\n } else {\n return;\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$biguint_to_be_bytes(n) {\n const bytes = [];\n let x = n;\n while (true) {\n if (moonbitlang$core$builtin$$Compare$op_gt$12$(x, 0n)) {\n const byte = moonbitlang$core$bigint$$BigInt$to_int(moonbitlang$core$builtin$$Mod$mod$8$(x, 256n));\n moonbitlang$core$array$$Array$push$2$(bytes, byte & 255);\n x = moonbitlang$core$builtin$$Div$div$8$(x, 256n);\n continue;\n } else {\n break;\n }\n }\n const _bind = moonbitlang$core$array$$Array$rev$2$(bytes);\n return moonbitlang$core$bytes$$Bytes$from_array({ buf: _bind, start: 0, end: _bind.length });\n}\nfunction zxch3n$flock$memcomparable$$bigint_to_be_bytes(n, output) {\n if (moonbitlang$core$builtin$$Eq$equal$8$(n, 0n)) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 20);\n return undefined;\n }\n const sign = moonbitlang$core$builtin$$Compare$op_gt$12$(n, 0n);\n const bytes = sign ? zxch3n$flock$memcomparable$$biguint_to_be_bytes(n) : zxch3n$flock$memcomparable$$biguint_to_be_bytes(moonbitlang$core$builtin$$Neg$neg$8$(n));\n const n$2 = bytes.length;\n if (sign === false) {\n if (n$2 <= 8) {\n const _p = 20;\n const _p$2 = n$2 & 255;\n moonbitlang$core$buffer$$Buffer$write_byte(output, (_p - _p$2 | 0) & 255);\n } else {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 11);\n if (n$2 > 255) {\n moonbitlang$core$abort$$abort$3$(\"n is too large\");\n }\n const _p = n$2 & 255;\n const _p$2 = 255;\n moonbitlang$core$buffer$$Buffer$write_byte(output, (_p ^ _p$2) & 255);\n }\n const inverted = moonbitlang$core$buffer$$new$46$inner(0);\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < bytes.length) {\n $bound_check(bytes, i);\n const _p = bytes[i];\n const _p$2 = 255;\n moonbitlang$core$buffer$$Buffer$write_byte(inverted, (_p ^ _p$2) & 255);\n _tmp = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n moonbitlang$core$buffer$$Buffer$write_bytes(output, moonbitlang$core$buffer$$Buffer$contents(inverted));\n return;\n } else {\n if (n$2 <= 8) {\n const _p = 20;\n const _p$2 = n$2 & 255;\n moonbitlang$core$buffer$$Buffer$write_byte(output, (_p + _p$2 | 0) & 255);\n } else {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 29);\n if (n$2 > 255) {\n moonbitlang$core$abort$$abort$3$(\"n is too large\");\n }\n moonbitlang$core$buffer$$Buffer$write_byte(output, n$2 & 255);\n }\n moonbitlang$core$buffer$$Buffer$write_bytes(output, bytes);\n return;\n }\n}\nfunction zxch3n$flock$memcomparable$$KeyPart$encode_with_output(self, output) {\n switch (self.$tag) {\n case 0: {\n const _Bytes = self;\n const _bytes = _Bytes._0;\n const _bind = _bytes;\n zxch3n$flock$memcomparable$$encode_bytes(moonbitlang$core$bytes$$Bytes$sub$46$inner(_bind, 0, _bind.length), output);\n return;\n }\n case 1: {\n const _String = self;\n const _s = _String._0;\n zxch3n$flock$memcomparable$$encode_string(_s, output);\n return;\n }\n case 2: {\n const _Int = self;\n const _n = _Int._0;\n zxch3n$flock$memcomparable$$bigint_to_be_bytes(_n, output);\n return;\n }\n case 3: {\n const _Float = self;\n const _f = _Float._0;\n zxch3n$flock$memcomparable$$encode_float(_f, output);\n return;\n }\n case 4: {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 38);\n return;\n }\n default: {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 39);\n return;\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$Key$encode(self) {\n const output = moonbitlang$core$buffer$$new$46$inner(0);\n const _arr = self.parts;\n const _len = _arr.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const part = _arr[_i];\n zxch3n$flock$memcomparable$$KeyPart$encode_with_output(part, output);\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return moonbitlang$core$buffer$$Buffer$contents(output);\n}\nfunction zxch3n$flock$memcomparable$$parse_slice(bytes, start) {\n const output = moonbitlang$core$buffer$$new$46$inner(0);\n let i = start;\n while (true) {\n if (i < (bytes.end - bytes.start | 0)) {\n const b = moonbitlang$core$bytes$$BytesView$at(bytes, i);\n i = i + 1 | 0;\n const _p = 0;\n if (b === _p) {\n let _tmp;\n if (i < (bytes.end - bytes.start | 0)) {\n const _p$2 = moonbitlang$core$bytes$$BytesView$at(bytes, i);\n const _p$3 = 255;\n _tmp = _p$2 === _p$3;\n } else {\n _tmp = false;\n }\n if (_tmp) {\n moonbitlang$core$buffer$$Buffer$write_byte(output, 0);\n i = i + 1 | 0;\n continue;\n } else {\n const _bind = moonbitlang$core$buffer$$Buffer$contents(output);\n return new Result$Ok$1$({ _0: moonbitlang$core$bytes$$Bytes$sub$46$inner(_bind, 0, _bind.length), _1: i });\n }\n }\n moonbitlang$core$buffer$$Buffer$write_byte(output, b);\n continue;\n } else {\n break;\n }\n }\n return new Result$Err$1$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n}\nfunction zxch3n$flock$memcomparable$$bytes_to_bigint(bytes) {\n let n = moonbitlang$core$bigint$$BigInt$from_int64($0L);\n let base = moonbitlang$core$bigint$$BigInt$from_int64($1L);\n let _tmp = (bytes.end - bytes.start | 0) - 1 | 0;\n while (true) {\n const i = _tmp;\n if (i >= 0) {\n const byte_val = moonbitlang$core$bigint$$BigInt$from_int64(moonbitlang$core$int$$Int$to_int64(moonbitlang$core$bytes$$BytesView$at(bytes, i)));\n n = moonbitlang$core$builtin$$Add$add$8$(n, moonbitlang$core$builtin$$Mul$mul$8$(base, byte_val));\n base = moonbitlang$core$builtin$$Mul$mul$8$(base, moonbitlang$core$bigint$$BigInt$from_int64($256L));\n _tmp = i - 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return n;\n}\nfunction zxch3n$flock$memcomparable$$bigint_from_be_bytes_with_tag(bytes, tag) {\n let _tmp;\n if (20 <= tag) {\n const _p = 20;\n const _p$2 = 8 & 255;\n _tmp = tag <= ((_p + _p$2 | 0) & 255);\n } else {\n _tmp = false;\n }\n if (_tmp) {\n const _p = 20;\n const n = (tag - _p | 0) & 255;\n if ((bytes.end - bytes.start | 0) < n) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const num_bytes = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 0, n);\n const rest = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, n, undefined);\n return new Result$Ok$2$({ _0: rest, _1: zxch3n$flock$memcomparable$$bytes_to_bigint(num_bytes) });\n } else {\n let _tmp$2;\n const _p = 20;\n const _p$2 = 8 & 255;\n if (((_p - _p$2 | 0) & 255) <= tag) {\n _tmp$2 = tag < 20;\n } else {\n _tmp$2 = false;\n }\n if (_tmp$2) {\n const _p$3 = 20;\n const n = (_p$3 - tag | 0) & 255;\n if ((bytes.end - bytes.start | 0) < n) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const num_bytes = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 0, n);\n const rest = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, n, undefined);\n const inverted = moonbitlang$core$buffer$$new$46$inner(0);\n let _tmp$3 = 0;\n while (true) {\n const i = _tmp$3;\n if (i < (num_bytes.end - num_bytes.start | 0)) {\n const _p$4 = moonbitlang$core$bytes$$BytesView$at(num_bytes, i);\n const _p$5 = 255;\n moonbitlang$core$buffer$$Buffer$write_byte(inverted, (_p$4 ^ _p$5) & 255);\n _tmp$3 = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n const _bind = moonbitlang$core$buffer$$Buffer$contents(inverted);\n return new Result$Ok$2$({ _0: rest, _1: moonbitlang$core$builtin$$Neg$neg$8$(zxch3n$flock$memcomparable$$bytes_to_bigint(moonbitlang$core$bytes$$Bytes$sub$46$inner(_bind, 0, _bind.length))) });\n } else {\n const _p$3 = 11;\n if (tag === _p$3) {\n if ((bytes.end - bytes.start | 0) < 1) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const raw_length = moonbitlang$core$bytes$$BytesView$at(bytes, 0);\n const _p$4 = 255;\n const n = (raw_length ^ _p$4) & 255;\n if ((bytes.end - bytes.start | 0) < (n + 1 | 0)) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const num_bytes = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 1, n + 1 | 0);\n const rest = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, n + 1 | 0, undefined);\n const inverted = moonbitlang$core$buffer$$new$46$inner(0);\n let _tmp$3 = 0;\n while (true) {\n const i = _tmp$3;\n if (i < (num_bytes.end - num_bytes.start | 0)) {\n const _p$5 = moonbitlang$core$bytes$$BytesView$at(num_bytes, i);\n const _p$6 = 255;\n moonbitlang$core$buffer$$Buffer$write_byte(inverted, (_p$5 ^ _p$6) & 255);\n _tmp$3 = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n const _bind = moonbitlang$core$buffer$$Buffer$contents(inverted);\n return new Result$Ok$2$({ _0: rest, _1: moonbitlang$core$builtin$$Neg$neg$8$(zxch3n$flock$memcomparable$$bytes_to_bigint(moonbitlang$core$bytes$$Bytes$sub$46$inner(_bind, 0, _bind.length))) });\n } else {\n const _p$4 = 29;\n if (tag === _p$4) {\n if ((bytes.end - bytes.start | 0) < 1) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const raw_length = moonbitlang$core$bytes$$BytesView$at(bytes, 0);\n const n = raw_length;\n if ((bytes.end - bytes.start | 0) < (n + 1 | 0)) {\n return new Result$Err$2$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const num_bytes = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, 1, n + 1 | 0);\n const rest = moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, n + 1 | 0, undefined);\n return new Result$Ok$2$({ _0: rest, _1: zxch3n$flock$memcomparable$$bytes_to_bigint(num_bytes) });\n } else {\n return new Result$Err$2$(new Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidTag(tag));\n }\n }\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$decode_float(bytes, start) {\n if ((start + 8 | 0) > (bytes.end - bytes.start | 0)) {\n return new Result$Err$3$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$UnexpectedEOF);\n }\n const data = moonbitlang$core$array$$Array$new$46$inner$2$(0);\n let _tmp = 0;\n while (true) {\n const i = _tmp;\n if (i < 8) {\n moonbitlang$core$array$$Array$push$2$(data, moonbitlang$core$bytes$$BytesView$at(bytes, start + i | 0));\n _tmp = i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n const bits = zxch3n$flock$memcomparable$$uint64_from_be_bytes(moonbitlang$core$bytes$$Bytes$from_array({ buf: data, start: 0, end: data.length }));\n const f = moonbitlang$core$builtin$$Eq$equal$18$(moonbitlang$core$builtin$$BitAnd$land$18$(bits, $_9223372036854775808L), $0L) ? zxch3n$flock$memcomparable$$double_from_bits(moonbitlang$core$builtin$$BitXOr$lxor$18$(bits, $_1L)) : zxch3n$flock$memcomparable$$double_from_bits(moonbitlang$core$builtin$$BitXOr$lxor$18$(bits, $_9223372036854775808L));\n return new Result$Ok$3$({ _0: f, _1: start + 8 | 0 });\n}\nfunction zxch3n$flock$memcomparable$$Key$decode(bytes) {\n const key = zxch3n$flock$memcomparable$$Key$new();\n let i = 0;\n while (true) {\n if (i < (bytes.end - bytes.start | 0)) {\n const tag = moonbitlang$core$bytes$$BytesView$at(bytes, i);\n i = i + 1 | 0;\n if (tag === 2) {\n const _bind = zxch3n$flock$memcomparable$$parse_slice(bytes, i);\n let _bind$2;\n if (_bind.$tag === 1) {\n const _ok = _bind;\n _bind$2 = _ok._0;\n } else {\n return _bind;\n }\n const _data = _bind$2._0;\n const _next_i = _bind$2._1;\n const _bind$3 = zxch3n$flock$types$$Utf8Str$from_bytes_view(_data);\n if (_bind$3 === undefined) {\n return new Result$Err$4$(Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidUTF8);\n } else {\n const _Some = _bind$3;\n const _s = _Some;\n zxch3n$flock$memcomparable$$Key$push(key, new KeyPart$String(_s));\n }\n i = _next_i;\n } else {\n if (tag === 1) {\n const _bind = zxch3n$flock$memcomparable$$parse_slice(bytes, i);\n let _bind$2;\n if (_bind.$tag === 1) {\n const _ok = _bind;\n _bind$2 = _ok._0;\n } else {\n return _bind;\n }\n const _data = _bind$2._0;\n const _next_i = _bind$2._1;\n zxch3n$flock$memcomparable$$Key$push(key, new KeyPart$Bytes(moonbitlang$core$bytes$$Bytes$from_iter(moonbitlang$core$bytes$$BytesView$iter(_data))));\n i = _next_i;\n } else {\n if (tag >= 11 && tag <= 29) {\n const _bind = zxch3n$flock$memcomparable$$bigint_from_be_bytes_with_tag(moonbitlang$core$bytes$$BytesView$sub$46$inner(bytes, i, undefined), tag);\n let _bind$2;\n if (_bind.$tag === 1) {\n const _ok = _bind;\n _bind$2 = _ok._0;\n } else {\n return _bind;\n }\n const _view = _bind$2._0;\n const _data = _bind$2._1;\n zxch3n$flock$memcomparable$$Key$push(key, new KeyPart$Int(_data));\n i = (bytes.end - bytes.start | 0) - (_view.end - _view.start | 0) | 0;\n } else {\n if (tag === 33) {\n const _bind = zxch3n$flock$memcomparable$$decode_float(bytes, i);\n let _bind$2;\n if (_bind.$tag === 1) {\n const _ok = _bind;\n _bind$2 = _ok._0;\n } else {\n return _bind;\n }\n const _data = _bind$2._0;\n const _next_i = _bind$2._1;\n zxch3n$flock$memcomparable$$Key$push(key, new KeyPart$Float(_data));\n i = _next_i;\n } else {\n if (tag === 38) {\n zxch3n$flock$memcomparable$$Key$push(key, KeyPart$False);\n } else {\n if (tag === 39) {\n zxch3n$flock$memcomparable$$Key$push(key, KeyPart$True);\n } else {\n return new Result$Err$4$(new Error$zxch3n$47$flock$47$memcomparable$46$KeyError$46$InvalidTag(tag));\n }\n }\n }\n }\n }\n }\n continue;\n } else {\n break;\n }\n }\n return new Result$Ok$4$(key);\n}\nfunction zxch3n$flock$memcomparable$$key_part_to_js_part(part) {\n switch (part.$tag) {\n case 0: {\n const _Bytes = part;\n const _bytes = _Bytes._0;\n return new KeyJsPart$Bytes(_bytes);\n }\n case 1: {\n const _String = part;\n const _s = _String._0;\n return new KeyJsPart$String(zxch3n$flock$types$$Utf8Str$to_string(_s));\n }\n case 2: {\n const _Int = part;\n const _n = _Int._0;\n return new KeyJsPart$Number(moonbitlang$core$int64$$Int64$to_double(moonbitlang$core$bigint$$BigInt$to_int64(_n)));\n }\n case 3: {\n const _Float = part;\n const _f = _Float._0;\n return new KeyJsPart$Number(_f);\n }\n case 4: {\n return KeyJsPart$False;\n }\n default: {\n return KeyJsPart$True;\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$js_part_to_key_part(part) {\n switch (part.$tag) {\n case 2: {\n const _Bytes = part;\n const _bytes = _Bytes._0;\n return new KeyPart$Bytes(_bytes);\n }\n case 1: {\n const _String = part;\n const _s = _String._0;\n return new KeyPart$String(zxch3n$flock$types$$Utf8Str$from_string(_s));\n }\n case 0: {\n const _Number = part;\n const _n = _Number._0;\n return moonbitlang$core$int64$$Int64$to_double(moonbitlang$core$double$$Double$to_int64(_n)) === _n ? new KeyPart$Int(moonbitlang$core$bigint$$BigInt$from_int64(moonbitlang$core$double$$Double$to_int64(_n))) : new KeyPart$Float(_n);\n }\n case 3: {\n return KeyPart$True;\n }\n default: {\n return KeyPart$False;\n }\n }\n}\nfunction zxch3n$flock$memcomparable$$encode_key(parts) {\n const key = zxch3n$flock$memcomparable$$Key$new();\n const _len = parts.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const part = parts[_i];\n moonbitlang$core$array$$Array$push$15$(key.parts, zxch3n$flock$memcomparable$$js_part_to_key_part(part));\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return zxch3n$flock$memcomparable$$Key$encode(key);\n}\nfunction zxch3n$flock$memcomparable$$decode_key(bytes) {\n let key;\n let _try_err;\n _L: {\n _L$2: {\n const _bind = zxch3n$flock$memcomparable$$Key$decode(moonbitlang$core$bytes$$Bytes$sub$46$inner(bytes, 0, bytes.length));\n if (_bind.$tag === 1) {\n const _ok = _bind;\n key = _ok._0;\n } else {\n const _err = _bind;\n const _tmp = _err._0;\n _try_err = _tmp;\n break _L$2;\n }\n break _L;\n }\n key = moonbitlang$core$abort$$abort$0$(\"Failed to decode key\");\n }\n const parts = moonbitlang$core$array$$Array$new$46$inner$14$(0);\n const _arr = key.parts;\n const _len = _arr.length;\n let _tmp = 0;\n while (true) {\n const _i = _tmp;\n if (_i < _len) {\n const part = _arr[_i];\n moonbitlang$core$array$$Array$push$14$(parts, zxch3n$flock$memcomparable$$key_part_to_js_part(part));\n _tmp = _i + 1 | 0;\n continue;\n } else {\n break;\n }\n }\n return parts;\n}\nexport { zxch3n$flock$memcomparable$$encode_key as encode_key, zxch3n$flock$memcomparable$$decode_key as decode_key }\n","import { decode_key, encode_key } from \"./memcomparable\";\nimport type { KeyPart } from \"./types\";\n\ntype EncodedKey = Uint8Array;\n\ntype KeyJsPart =\n | { $tag: 0; _0: number }\n | { $tag: 1; _0: string }\n | { $tag: 2; _0: unknown }\n | { $tag: 3 }\n | { $tag: 4 };\n\nfunction assertValidKeyPart(part: KeyPart): KeyJsPart {\n if (typeof part === \"number\") {\n if (!Number.isFinite(part)) {\n throw new TypeError(\"Key parts must be finite numbers\");\n }\n return { $tag: 0, _0: part };\n }\n if (typeof part === \"string\") {\n return { $tag: 1, _0: part };\n }\n if (part === true) {\n return { $tag: 3 };\n }\n if (part === false) {\n return { $tag: 4 };\n }\n throw new TypeError(\"Key parts must be strings, numbers, or booleans\");\n}\n\nfunction parseBytesLike(value: unknown): Uint8Array {\n if (value instanceof Uint8Array) {\n return value;\n }\n if (value && typeof value === \"object\") {\n const buf = (value as { buf?: unknown }).buf;\n if (buf instanceof Uint8Array) {\n const start = (value as { start?: number }).start ?? 0;\n const end = (value as { end?: number }).end ?? buf.length;\n return buf.subarray(start, end);\n }\n }\n throw new TypeError(\"Invalid bytes payload in memcomparable decode\");\n}\n\nfunction fromJsPart(part: unknown): KeyPart {\n const tag = (part as { $tag?: number } | null)?.$tag;\n switch (tag) {\n case 0:\n return (part as { _0: number })._0;\n case 1:\n return (part as { _0: string })._0;\n case 3:\n return true;\n case 4:\n return false;\n case 2:\n // Bytes are not part of the public key surface; surface them as a binary blob for diagnostics.\n return parseBytesLike((part as { _0: unknown })._0) as unknown as KeyPart;\n default:\n throw new TypeError(\"Unsupported memcomparable key part\");\n }\n}\n\nexport function encodeKeyParts(parts: KeyPart[]): EncodedKey {\n const normalized = parts.map(assertValidKeyPart);\n return encode_key(normalized) as EncodedKey;\n}\n\nexport function decodeKeyParts(bytes: EncodedKey): KeyPart[] {\n const decoded = decode_key(bytes as unknown as Uint8Array) as Array<unknown>;\n return decoded.map((part) => fromJsPart(part));\n}\n\nexport function compareBytes(a: Uint8Array, b: Uint8Array): number {\n const min = Math.min(a.length, b.length);\n for (let i = 0; i < min; i += 1) {\n if (a[i] !== b[i]) {\n return a[i] < b[i] ? -1 : 1;\n }\n }\n if (a.length === b.length) {\n return 0;\n }\n return a.length < b.length ? -1 : 1;\n}\n\nexport function prefixUpperBound(bytes: Uint8Array): Uint8Array | undefined {\n if (bytes.length === 0) {\n return undefined;\n }\n const data = Array.from(bytes);\n for (let i = data.length - 1; i >= 0; i -= 1) {\n const current = data[i];\n if (current < 0xff) {\n data[i] = current + 1;\n return new Uint8Array(data.slice(0, i + 1));\n }\n }\n return undefined;\n}\n\nexport function keyToString(parts: KeyPart[]): string {\n return JSON.stringify(parts);\n}\n","import { openStore, type UniStoreConnection } from \"@loro-dev/unisqlite\";\nimport { computeDigest, type DigestRow } from \"./digest\";\nimport {\n compareBytes,\n decodeKeyParts,\n encodeKeyParts,\n keyToString,\n prefixUpperBound,\n} from \"./key-encoding\";\nimport type {\n EntryClock,\n Event,\n EventBatch,\n ExportBundle,\n ExportHooks,\n ExportOptions,\n ExportPayload,\n ExportRecord,\n ImportDecision,\n ImportHooks,\n ImportOptions,\n ImportReport,\n KeyPart,\n MetadataMap,\n PutHooks,\n PutWithMetaOptions,\n EventListener,\n ScanBound,\n ScanOptions,\n ScanRow,\n Value,\n VersionVector as VersionVectorType,\n VersionVectorEntry,\n EntryInfo,\n} from \"./types\";\n\ntype ClockRow = {\n physical: number;\n logical: number;\n peer: string;\n};\n\ntype KvRow = {\n key: Uint8Array;\n data: string | null;\n metadata: string | null;\n physical: number;\n logical: number;\n peer: string;\n};\n\ntype ExportQueryRow = KvRow;\n\ntype PutOperation = {\n key: KeyPart[];\n payload: ExportPayload;\n now?: number;\n skipSameValue: boolean;\n source: string;\n clock?: EntryClock;\n eventSink?: Array<{ key: KeyPart[]; payload: ExportPayload; source: string }>;\n};\n\ntype EncodableVersionVectorEntry = {\n peer: string;\n peerBytes: Uint8Array;\n timestamp: number;\n counter: number;\n};\n\nexport interface VersionVector extends VersionVectorType {}\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\nconst structuredCloneFn: (<T>(value: T) => T) | undefined = (\n globalThis as typeof globalThis & { structuredClone?: <T>(value: T) => T }\n).structuredClone;\n\nfunction utf8ByteLength(value: string): number {\n return textEncoder.encode(value).length;\n}\n\nfunction isValidPeerId(peerId: unknown): peerId is string {\n return typeof peerId === \"string\" && utf8ByteLength(peerId) < 128;\n}\n\nfunction createRandomPeerId(): string {\n const id = new Uint8Array(32);\n type CryptoLike = {\n getRandomValues?: (buffer: Uint8Array) => Uint8Array;\n randomBytes?: (len: number) => Uint8Array;\n };\n const cryptoLike: CryptoLike | undefined =\n typeof crypto !== \"undefined\"\n ? (crypto as unknown as CryptoLike)\n : undefined;\n if (cryptoLike?.getRandomValues) {\n cryptoLike.getRandomValues(id);\n } else if (cryptoLike?.randomBytes) {\n const buf: Uint8Array = cryptoLike.randomBytes(32);\n id.set(buf);\n } else {\n for (let i = 0; i < 32; i += 1) {\n id[i] = Math.floor(Math.random() * 256);\n }\n }\n return Array.from(id, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction normalizePeerId(peerId?: string): string {\n if (peerId === undefined) {\n return createRandomPeerId();\n }\n if (!isValidPeerId(peerId)) {\n throw new TypeError(\"peerId must be a UTF-8 string under 128 bytes\");\n }\n return peerId;\n}\n\nfunction cloneJson<T>(value: T): T {\n if (value === undefined) {\n return value;\n }\n if (structuredCloneFn) {\n return structuredCloneFn(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction cloneMetadata(metadata: unknown): MetadataMap | undefined {\n if (!metadata || typeof metadata !== \"object\" || Array.isArray(metadata)) {\n return undefined;\n }\n return cloneJson(metadata as MetadataMap);\n}\n\nfunction normalizeMetadataMap(metadata: unknown): MetadataMap {\n const cloned = cloneMetadata(metadata);\n return cloned ?? {};\n}\n\nfunction assignPayload(\n target: ExportPayload,\n source?: ExportPayload | void,\n): void {\n if (!source || typeof source !== \"object\") {\n return;\n }\n if (\"data\" in source) {\n const value = source.data;\n target.data = value === undefined ? undefined : cloneJson(value);\n }\n if (\"metadata\" in source) {\n target.metadata = cloneMetadata(source.metadata);\n }\n}\n\nfunction clonePayload(payload: ExportPayload | undefined): ExportPayload {\n const result: ExportPayload = {};\n assignPayload(result, payload);\n return result;\n}\n\nfunction mergePayload(\n base: ExportPayload,\n update?: ExportPayload | void,\n): ExportPayload {\n const result = clonePayload(base);\n assignPayload(result, update);\n return result;\n}\n\nfunction comparePeerBytes(a: Uint8Array, b: Uint8Array): number {\n if (a === b) {\n return 0;\n }\n const limit = Math.min(a.length, b.length);\n for (let i = 0; i < limit; i += 1) {\n const diff = a[i] - b[i];\n if (diff !== 0) {\n return diff;\n }\n }\n return a.length - b.length;\n}\n\nfunction collectEncodableVersionVectorEntries(\n vv?: VersionVector,\n): EncodableVersionVectorEntry[] {\n if (!vv || typeof vv !== \"object\") {\n return [];\n }\n const entries: EncodableVersionVectorEntry[] = [];\n for (const [peer, entry] of Object.entries(vv)) {\n if (!entry || !isValidPeerId(peer)) {\n continue;\n }\n const { physicalTime, logicalCounter } = entry;\n if (\n typeof physicalTime !== \"number\" ||\n !Number.isFinite(physicalTime) ||\n typeof logicalCounter !== \"number\" ||\n !Number.isFinite(logicalCounter)\n ) {\n continue;\n }\n const peerBytes = textEncoder.encode(peer);\n entries.push({\n peer,\n peerBytes,\n timestamp: Math.trunc(physicalTime),\n counter: Math.max(0, Math.trunc(logicalCounter)),\n });\n }\n entries.sort((a, b) => {\n if (a.timestamp !== b.timestamp) {\n return a.timestamp - b.timestamp;\n }\n const peerCmp = comparePeerBytes(a.peerBytes, b.peerBytes);\n if (peerCmp !== 0) {\n return peerCmp;\n }\n return a.counter - b.counter;\n });\n return entries;\n}\n\nfunction writeUnsignedLeb128(value: number, target: number[]): void {\n if (!Number.isFinite(value) || value < 0) {\n throw new TypeError(\"leb128 values must be finite and non-negative\");\n }\n let remaining = Math.trunc(value);\n if (remaining === 0) {\n target.push(0);\n return;\n }\n while (remaining > 0) {\n const byte = remaining % 0x80;\n remaining = Math.floor(remaining / 0x80);\n target.push(remaining > 0 ? byte | 0x80 : byte);\n }\n}\n\nfunction writeVarStringBytes(bytes: Uint8Array, target: number[]): void {\n writeUnsignedLeb128(bytes.length, target);\n for (let i = 0; i < bytes.length; i += 1) {\n target.push(bytes[i]);\n }\n}\n\nconst VERSION_VECTOR_MAGIC = new Uint8Array([86, 69, 86, 69]); // \"VEVE\"\n\nfunction encodeVersionVectorBinary(vv?: VersionVector): Uint8Array {\n const entries = collectEncodableVersionVectorEntries(vv);\n const buffer: number[] = Array.from(VERSION_VECTOR_MAGIC);\n if (entries.length === 0) {\n return Uint8Array.from(buffer);\n }\n\n let lastTimestamp = 0;\n for (let i = 0; i < entries.length; i += 1) {\n const entry = entries[i];\n if (entry.timestamp < 0) {\n throw new TypeError(\"timestamp must be non-negative\");\n }\n if (i === 0) {\n writeUnsignedLeb128(entry.timestamp, buffer);\n lastTimestamp = entry.timestamp;\n } else {\n const delta = entry.timestamp - lastTimestamp;\n if (delta < 0) {\n throw new TypeError(\"version vector timestamps must be non-decreasing\");\n }\n writeUnsignedLeb128(delta, buffer);\n lastTimestamp = entry.timestamp;\n }\n\n writeUnsignedLeb128(entry.counter, buffer);\n writeVarStringBytes(entry.peerBytes, buffer);\n }\n\n return Uint8Array.from(buffer);\n}\n\nfunction decodeUnsignedLeb128(\n bytes: Uint8Array,\n offset: number,\n): [number, number] {\n let result = 0;\n let multiplier = 1;\n let consumed = 0;\n while (offset + consumed < bytes.length) {\n const byte = bytes[offset + consumed];\n consumed += 1;\n // Use arithmetic instead of bitwise operations to avoid 32-bit overflow.\n // JavaScript bitwise operators convert to 32-bit signed integers,\n // which breaks for values >= 2^31.\n result += (byte & 0x7f) * multiplier;\n if ((byte & 0x80) === 0) {\n break;\n }\n multiplier *= 128;\n }\n return [result, consumed];\n}\n\nfunction decodeVarString(bytes: Uint8Array, offset: number): [string, number] {\n const [length, used] = decodeUnsignedLeb128(bytes, offset);\n const start = offset + used;\n const end = start + length;\n if (end > bytes.length) {\n throw new TypeError(\"varString length exceeds buffer\");\n }\n const slice = bytes.subarray(start, end);\n return [textDecoder.decode(slice), used + length];\n}\n\nfunction hasMagic(bytes: Uint8Array): boolean {\n return (\n bytes.length >= 4 &&\n bytes[0] === VERSION_VECTOR_MAGIC[0] &&\n bytes[1] === VERSION_VECTOR_MAGIC[1] &&\n bytes[2] === VERSION_VECTOR_MAGIC[2] &&\n bytes[3] === VERSION_VECTOR_MAGIC[3]\n );\n}\n\nfunction decodeLegacyVersionVector(bytes: Uint8Array): VersionVector {\n let offset = 0;\n const [count, usedCount] = decodeUnsignedLeb128(bytes, offset);\n offset += usedCount;\n const [baseTimestamp, usedBase] = decodeUnsignedLeb128(bytes, offset);\n offset += usedBase;\n const vv: VersionVector = {};\n for (let i = 0; i < count; i += 1) {\n const [peer, usedPeer] = decodeVarString(bytes, offset);\n offset += usedPeer;\n if (!isValidPeerId(peer)) {\n throw new TypeError(\"invalid peer id in encoded version vector\");\n }\n const [delta, usedDelta] = decodeUnsignedLeb128(bytes, offset);\n offset += usedDelta;\n const [counter, usedCounter] = decodeUnsignedLeb128(bytes, offset);\n offset += usedCounter;\n vv[peer] = {\n physicalTime: baseTimestamp + delta,\n logicalCounter: counter,\n };\n }\n return vv;\n}\n\nfunction decodeNewVersionVector(bytes: Uint8Array): VersionVector {\n let offset = 4;\n const vv: VersionVector = {};\n if (offset === bytes.length) {\n return vv;\n }\n\n const [firstTimestamp, usedTs] = decodeUnsignedLeb128(bytes, offset);\n offset += usedTs;\n const [firstCounter, usedCounter] = decodeUnsignedLeb128(bytes, offset);\n offset += usedCounter;\n const [firstPeer, usedPeer] = decodeVarString(bytes, offset);\n offset += usedPeer;\n if (!isValidPeerId(firstPeer)) {\n throw new TypeError(\"invalid peer id in encoded version vector\");\n }\n vv[firstPeer] = {\n physicalTime: firstTimestamp,\n logicalCounter: firstCounter,\n };\n\n let lastTimestamp = firstTimestamp;\n while (offset < bytes.length) {\n const [delta, usedDelta] = decodeUnsignedLeb128(bytes, offset);\n offset += usedDelta;\n const [counter, usedCtr] = decodeUnsignedLeb128(bytes, offset);\n offset += usedCtr;\n const [peer, usedPeerLen] = decodeVarString(bytes, offset);\n offset += usedPeerLen;\n if (!isValidPeerId(peer)) {\n throw new TypeError(\"invalid peer id in encoded version vector\");\n }\n const timestamp = lastTimestamp + delta;\n if (timestamp < lastTimestamp) {\n throw new TypeError(\"version vector timestamps must be non-decreasing\");\n }\n vv[peer] = { physicalTime: timestamp, logicalCounter: counter };\n lastTimestamp = timestamp;\n }\n\n return vv;\n}\n\nfunction decodeVersionVectorBinary(bytes: Uint8Array): VersionVector {\n if (hasMagic(bytes)) {\n return decodeNewVersionVector(bytes);\n }\n return decodeLegacyVersionVector(bytes);\n}\n\nexport function encodeVersionVector(vector: VersionVector): Uint8Array {\n return encodeVersionVectorBinary(vector);\n}\n\nexport function decodeVersionVector(bytes: Uint8Array): VersionVector {\n return decodeVersionVectorBinary(bytes);\n}\n\nfunction buildRecord(clock: EntryClock, payload: ExportPayload): ExportRecord {\n const record: ExportRecord = {\n c: formatClock(clock),\n };\n if (payload.data !== undefined) {\n record.d = cloneJson(payload.data);\n }\n const metadata = cloneMetadata(payload.metadata);\n if (metadata !== undefined) {\n record.m = metadata;\n }\n return record;\n}\n\nfunction normalizeImportDecision(decision: ImportDecision): {\n accept: boolean;\n reason?: string;\n} {\n if (!decision || typeof decision !== \"object\") {\n return { accept: true };\n }\n if (\"accept\" in decision) {\n if (!decision.accept) {\n return { accept: false, reason: decision.reason ?? \"rejected\" };\n }\n return { accept: true };\n }\n return { accept: true };\n}\n\nfunction isExportOptions(\n arg: VersionVector | ExportOptions | undefined,\n): arg is ExportOptions {\n return (\n typeof arg === \"object\" &&\n arg !== null &&\n (Object.prototype.hasOwnProperty.call(arg, \"hooks\") ||\n Object.prototype.hasOwnProperty.call(arg, \"from\") ||\n Object.prototype.hasOwnProperty.call(arg, \"pruneTombstonesBefore\") ||\n Object.prototype.hasOwnProperty.call(arg, \"peerId\"))\n );\n}\n\nfunction isImportOptions(\n arg: ExportBundle | ImportOptions,\n): arg is ImportOptions {\n return (\n typeof arg === \"object\" &&\n arg !== null &&\n Object.prototype.hasOwnProperty.call(arg, \"bundle\")\n );\n}\n\nfunction parseMetadata(json: string | null): MetadataMap | undefined {\n if (!json) {\n return undefined;\n }\n try {\n const parsed = JSON.parse(json);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n return parsed as MetadataMap;\n }\n } catch {\n // ignored\n }\n return undefined;\n}\n\nfunction parseData(json: string | null): Value | undefined {\n if (json === null || json === undefined) {\n return undefined;\n }\n return JSON.parse(json) as Value;\n}\n\nfunction parseClockString(raw: string): EntryClock {\n const parts = raw.split(\",\");\n if (parts.length < 3) {\n return { physicalTime: 0, logicalCounter: 0, peerId: \"\" };\n }\n const physical = Number(parts[0]);\n const logical = Number(parts[1]);\n const peerId = parts.slice(2).join(\",\");\n return {\n physicalTime: Number.isFinite(physical) ? physical : 0,\n logicalCounter: Number.isFinite(logical) ? Math.trunc(logical) : 0,\n peerId: isValidPeerId(peerId) ? peerId : \"\",\n };\n}\n\nfunction normalizeRowClock(\n physical: unknown,\n logical: unknown,\n peer: unknown,\n): EntryClock | undefined {\n if (\n typeof physical !== \"number\" ||\n typeof logical !== \"number\" ||\n typeof peer !== \"string\"\n ) {\n return undefined;\n }\n if (!isValidPeerId(peer)) {\n return undefined;\n }\n if (!Number.isFinite(physical) || !Number.isFinite(logical)) {\n return undefined;\n }\n return {\n physicalTime: physical,\n logicalCounter: Math.trunc(logical),\n peerId: peer,\n };\n}\n\nfunction formatClock(clock: EntryClock): string {\n return `${clock.physicalTime},${clock.logicalCounter},${clock.peerId}`;\n}\n\nfunction compareClock(a: EntryClock, b: EntryClock): number {\n if (a.physicalTime !== b.physicalTime) {\n return a.physicalTime > b.physicalTime ? 1 : -1;\n }\n if (a.logicalCounter !== b.logicalCounter) {\n return a.logicalCounter > b.logicalCounter ? 1 : -1;\n }\n if (a.peerId === b.peerId) {\n return 0;\n }\n return a.peerId > b.peerId ? 1 : -1;\n}\n\nfunction normalizeVersionEntry(\n entry?: VersionVectorEntry,\n): VersionVectorEntry | undefined {\n if (!entry) return undefined;\n const { physicalTime, logicalCounter } = entry;\n if (!Number.isFinite(physicalTime) || !Number.isFinite(logicalCounter)) {\n return undefined;\n }\n return {\n physicalTime: physicalTime,\n logicalCounter: Math.trunc(logicalCounter),\n };\n}\n\nfunction keyMatchesPrefix(key: Uint8Array, prefix: Uint8Array): boolean {\n if (prefix.length === 0) {\n return true;\n }\n if (key.length < prefix.length) {\n return false;\n }\n for (let i = 0; i < prefix.length; i += 1) {\n if (key[i] !== prefix[i]) {\n return false;\n }\n }\n return true;\n}\n\nasync function toDigestRows(rows: KvRow[]): Promise<DigestRow[]> {\n return rows.map((row) => ({\n key: row.key,\n data: row.data,\n metadata: row.metadata,\n physical: row.physical,\n logical: row.logical,\n peer: row.peer,\n }));\n}\n\nexport type FlockSQLiteOptions = {\n path: string;\n peerId?: string;\n connection?: UniStoreConnection;\n tablePrefix?: string;\n};\n\ntype TableNames = {\n kv: string;\n overridden: string;\n meta: string;\n idxKvPeerClock: string;\n idxOverriddenKey: string;\n idxOverriddenSupersededAt: string;\n};\n\nfunction normalizeTablePrefix(prefix?: string): string {\n if (!prefix) return \"\";\n if (typeof prefix !== \"string\") {\n throw new TypeError(\"tablePrefix must be a string\");\n }\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(prefix)) {\n throw new TypeError(\n \"tablePrefix must start with a letter/underscore and use only letters, digits, or underscores\",\n );\n }\n return prefix;\n}\n\nfunction buildTableNames(prefix: string): TableNames {\n return {\n kv: `${prefix}kv`,\n overridden: `${prefix}overridden`,\n meta: `${prefix}meta`,\n idxKvPeerClock: `${prefix}idx_kv_peer_clock_key`,\n idxOverriddenKey: `${prefix}idx_overridden_key`,\n idxOverriddenSupersededAt: `${prefix}idx_overridden_superseded_at`,\n };\n}\n\nexport class FlockSQLite {\n private db: UniStoreConnection;\n private peerIdValue: string;\n private vv: Map<string, VersionVectorEntry>;\n private maxHlc: { physicalTime: number; logicalCounter: number };\n private listeners: Set<EventListener>;\n private tables: TableNames;\n\n private constructor(\n db: UniStoreConnection,\n peerId: string,\n vv: Map<string, VersionVectorEntry>,\n maxHlc: { physicalTime: number; logicalCounter: number },\n tables: TableNames,\n ) {\n this.db = db;\n this.peerIdValue = peerId;\n this.vv = vv;\n this.maxHlc = maxHlc;\n this.listeners = new Set();\n this.tables = tables;\n }\n\n static async open(options: FlockSQLiteOptions): Promise<FlockSQLite> {\n const db = options.connection ?? (await openStore({ path: options.path }));\n const prefix = normalizeTablePrefix(options.tablePrefix);\n const tables = buildTableNames(prefix);\n await FlockSQLite.ensureSchema(db, tables);\n const peerId = await FlockSQLite.resolvePeerId(db, tables, options.peerId);\n const { vv, maxHlc } = await FlockSQLite.loadVersionState(db, tables);\n return new FlockSQLite(db, peerId, vv, maxHlc, tables);\n }\n\n static async fromJson(\n options: FlockSQLiteOptions & { bundle: ExportBundle },\n ): Promise<FlockSQLite> {\n const flock = await FlockSQLite.open(options);\n await flock.importJson(options.bundle);\n return flock;\n }\n\n async close(): Promise<void> {\n await this.db.close();\n }\n\n private static async ensureSchema(\n db: UniStoreConnection,\n tables: TableNames,\n ): Promise<void> {\n await db.exec(`\n CREATE TABLE IF NOT EXISTS ${tables.kv} (\n key BLOB PRIMARY KEY,\n data TEXT NULL,\n metadata TEXT NULL,\n physical REAL NOT NULL,\n logical INTEGER NOT NULL,\n peer TEXT NOT NULL\n )`);\n await db.exec(`\n CREATE TABLE IF NOT EXISTS ${tables.overridden} (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n key BLOB,\n data TEXT NULL,\n metadata TEXT NULL,\n physical REAL NOT NULL,\n logical INTEGER NOT NULL,\n peer TEXT NOT NULL,\n superseded_at INTEGER DEFAULT (unixepoch())\n )`);\n await db.exec(`CREATE TABLE IF NOT EXISTS ${tables.meta} (peer_id TEXT)`);\n await db.exec(\n `CREATE INDEX IF NOT EXISTS ${tables.idxKvPeerClock} ON ${tables.kv}(peer, physical, logical, key)`,\n );\n await db.exec(\n `CREATE INDEX IF NOT EXISTS ${tables.idxOverriddenKey} ON ${tables.overridden}(key)`,\n );\n await db.exec(\n `CREATE INDEX IF NOT EXISTS ${tables.idxOverriddenSupersededAt} ON ${tables.overridden}(superseded_at)`,\n );\n }\n\n private static async resolvePeerId(\n db: UniStoreConnection,\n tables: TableNames,\n provided?: string,\n ): Promise<string> {\n const normalized = normalizePeerId(provided);\n const rows = await db.query<{ peer_id: string }>(\n `SELECT peer_id FROM ${tables.meta} LIMIT 1`,\n );\n if (rows.length > 0 && typeof rows[0]?.peer_id === \"string\") {\n const existing = rows[0].peer_id;\n if (provided && existing !== normalized) {\n await db.run(`UPDATE ${tables.meta} SET peer_id = ?`, [normalized]);\n return normalized;\n }\n return normalizePeerId(existing);\n }\n await db.exec(`DELETE FROM ${tables.meta}`);\n await db.run(`INSERT INTO ${tables.meta}(peer_id) VALUES (?)`, [\n normalized,\n ]);\n return normalized;\n }\n\n private static async loadVersionState(\n db: UniStoreConnection,\n tables: TableNames,\n ): Promise<{\n vv: Map<string, VersionVectorEntry>;\n maxHlc: { physicalTime: number; logicalCounter: number };\n }> {\n const vv = new Map<string, VersionVectorEntry>();\n const rows = await db.query<ClockRow>(\n `SELECT peer, MAX(physical) AS physical, MAX(logical) AS logical FROM ${tables.kv} GROUP BY peer`,\n );\n for (const row of rows) {\n if (!row || typeof row.peer !== \"string\") continue;\n const entry = normalizeVersionEntry({\n physicalTime: Number(row.physical ?? 0),\n logicalCounter: Number(row.logical ?? 0),\n });\n if (entry) {\n vv.set(row.peer, entry);\n }\n }\n const maxRow = await db.query<ClockRow>(\n `SELECT physical, logical FROM ${tables.kv} ORDER BY physical DESC, logical DESC LIMIT 1`,\n );\n const first = maxRow[0];\n const maxHlc =\n first && Number.isFinite(first.physical) && Number.isFinite(first.logical)\n ? {\n physicalTime: Number(first.physical),\n logicalCounter: Number(first.logical),\n }\n : { physicalTime: 0, logicalCounter: 0 };\n return { vv, maxHlc };\n }\n\n private bumpVersion(clock: EntryClock): void {\n const current = this.vv.get(clock.peerId);\n if (\n !current ||\n compareClock(clock, { ...current, peerId: clock.peerId }) > 0\n ) {\n this.vv.set(clock.peerId, {\n physicalTime: clock.physicalTime,\n logicalCounter: clock.logicalCounter,\n });\n }\n if (\n this.maxHlc.physicalTime < clock.physicalTime ||\n (this.maxHlc.physicalTime === clock.physicalTime &&\n this.maxHlc.logicalCounter < clock.logicalCounter)\n ) {\n this.maxHlc = {\n physicalTime: clock.physicalTime,\n logicalCounter: clock.logicalCounter,\n };\n }\n }\n\n private allocateClock(now?: number): EntryClock {\n const timestamp = now ?? Date.now();\n let physical = this.maxHlc.physicalTime;\n let logical = this.maxHlc.logicalCounter;\n if (timestamp > physical) {\n physical = timestamp;\n logical = 0;\n } else {\n logical = logical + 1;\n }\n return {\n physicalTime: physical,\n logicalCounter: logical,\n peerId: this.peerIdValue,\n };\n }\n\n private async applyOperation(operation: PutOperation): Promise<boolean> {\n const keyBytes = encodeKeyParts(operation.key);\n const payload = mergePayload(operation.payload, {});\n const dataJson =\n payload.data === undefined ? null : JSON.stringify(payload.data);\n const metadataJson =\n payload.metadata === undefined ? null : JSON.stringify(payload.metadata);\n let applied = false;\n let usedClock: EntryClock | undefined;\n\n await this.db.asyncTransaction(async (tx) => {\n const existingRows = await tx.query<KvRow>(\n `SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,\n [keyBytes],\n );\n if (existingRows.length > 0) {\n const existing = existingRows[0];\n const existingData = existing.data ?? null;\n const existingMeta = existing.metadata ?? null;\n const samePayload =\n operation.skipSameValue &&\n dataJson === existingData &&\n metadataJson === existingMeta;\n if (samePayload) {\n return;\n }\n } else if (\n operation.skipSameValue &&\n dataJson === null &&\n metadataJson === null\n ) {\n // Key doesn't exist and we're trying to delete - skip\n return;\n }\n\n // Now allocate clock only if we're going to apply the operation\n const clock = operation.clock ?? this.allocateClock(operation.now);\n usedClock = clock;\n\n if (existingRows.length > 0) {\n const existing = existingRows[0];\n const existingClock: EntryClock = {\n physicalTime: Number(existing.physical ?? 0),\n logicalCounter: Number(existing.logical ?? 0),\n peerId: String(existing.peer ?? \"\"),\n };\n const cmp = compareClock(clock, existingClock);\n if (cmp < 0) {\n await tx.run(\n `INSERT INTO ${this.tables.overridden}(key, data, metadata, physical, logical, peer) VALUES (?, ?, ?, ?, ?, ?)`,\n [\n keyBytes,\n dataJson,\n metadataJson,\n clock.physicalTime,\n clock.logicalCounter,\n clock.peerId,\n ],\n );\n return;\n }\n if (cmp > 0) {\n await tx.run(\n `INSERT INTO ${this.tables.overridden}(key, data, metadata, physical, logical, peer) VALUES (?, ?, ?, ?, ?, ?)`,\n [\n keyBytes,\n existing.data ?? null,\n existing.metadata ?? null,\n existing.physical ?? 0,\n existing.logical ?? 0,\n existing.peer ?? \"\",\n ],\n );\n } else {\n return;\n }\n }\n await tx.run(\n `INSERT INTO ${this.tables.kv}(key, data, metadata, physical, logical, peer)\n VALUES (?, ?, ?, ?, ?, ?)\n ON CONFLICT(key) DO UPDATE SET\n data=excluded.data,\n metadata=excluded.metadata,\n physical=excluded.physical,\n logical=excluded.logical,\n peer=excluded.peer`,\n [\n keyBytes,\n dataJson,\n metadataJson,\n clock.physicalTime,\n clock.logicalCounter,\n clock.peerId,\n ],\n );\n applied = true;\n });\n\n if (usedClock) {\n this.bumpVersion(usedClock);\n }\n if (applied) {\n const eventPayload = {\n key: operation.key.slice(),\n payload,\n source: operation.source,\n };\n if (operation.eventSink) {\n operation.eventSink.push(eventPayload);\n } else {\n this.emitEvents(operation.source, [eventPayload]);\n }\n }\n return applied;\n }\n\n private emitEvents(\n source: string,\n events: Array<{ key: KeyPart[]; payload: ExportPayload }>,\n ): void {\n if (this.listeners.size === 0 || events.length === 0) {\n return;\n }\n const batch: EventBatch = {\n source,\n events: events.map(\n (event): Event => ({\n key: cloneJson(event.key),\n value:\n event.payload.data !== undefined\n ? cloneJson(event.payload.data)\n : undefined,\n metadata: cloneMetadata(event.payload.metadata),\n payload: clonePayload(event.payload),\n }),\n ),\n };\n this.listeners.forEach((listener) => {\n listener(batch);\n });\n }\n\n async put(key: KeyPart[], value: Value, now?: number): Promise<void> {\n await this.applyOperation({\n key,\n payload: { data: cloneJson(value) },\n now,\n skipSameValue: true,\n source: \"local\",\n });\n }\n\n async putWithMeta(\n key: KeyPart[],\n value: Value,\n options: PutWithMetaOptions = {},\n ): Promise<void> {\n const basePayload: ExportPayload = { data: cloneJson(value) };\n if (options.metadata) {\n basePayload.metadata = cloneMetadata(options.metadata);\n }\n const hooks = options.hooks?.transform;\n if (hooks) {\n const working = clonePayload(basePayload);\n const transformed = await hooks(\n { key: key.slice(), now: options.now },\n working,\n );\n const finalPayload = mergePayload(basePayload, transformed ?? working);\n if (finalPayload.data === undefined) {\n throw new TypeError(\"putWithMeta requires a data value\");\n }\n await this.applyOperation({\n key,\n payload: finalPayload,\n now: options.now,\n skipSameValue: true,\n source: \"local\",\n });\n return;\n }\n await this.applyOperation({\n key,\n payload: basePayload,\n now: options.now,\n skipSameValue: true,\n source: \"local\",\n });\n }\n\n async delete(key: KeyPart[], now?: number): Promise<void> {\n await this.applyOperation({\n key,\n payload: {},\n now,\n skipSameValue: true,\n source: \"local\",\n });\n }\n\n /**\n * Force put a value even if it's the same as the current value.\n * This will refresh the timestamp.\n */\n async forcePut(key: KeyPart[], value: Value, now?: number): Promise<void> {\n await this.applyOperation({\n key,\n payload: { data: cloneJson(value) },\n now,\n skipSameValue: false,\n source: \"local\",\n });\n }\n\n /**\n * Force put a value with metadata even if it's the same as the current value.\n * This will refresh the timestamp.\n */\n async forcePutWithMeta(\n key: KeyPart[],\n value: Value,\n options: PutWithMetaOptions = {},\n ): Promise<void> {\n const basePayload: ExportPayload = { data: cloneJson(value) };\n if (options.metadata) {\n basePayload.metadata = cloneMetadata(options.metadata);\n }\n const hooks = options.hooks?.transform;\n if (hooks) {\n const working = clonePayload(basePayload);\n const transformed = await hooks(\n { key: key.slice(), now: options.now },\n working,\n );\n const finalPayload = mergePayload(basePayload, transformed ?? working);\n if (finalPayload.data === undefined) {\n throw new TypeError(\"forcePutWithMeta requires a data value\");\n }\n await this.applyOperation({\n key,\n payload: finalPayload,\n now: options.now,\n skipSameValue: false,\n source: \"local\",\n });\n return;\n }\n await this.applyOperation({\n key,\n payload: basePayload,\n now: options.now,\n skipSameValue: false,\n source: \"local\",\n });\n }\n\n /**\n * Force delete a key even if it's already deleted.\n * This will refresh the timestamp.\n */\n async forceDelete(key: KeyPart[], now?: number): Promise<void> {\n await this.applyOperation({\n key,\n payload: {},\n now,\n skipSameValue: false,\n source: \"local\",\n });\n }\n\n async set(key: KeyPart[], value: Value, now?: number): Promise<void> {\n await this.put(key, value, now);\n }\n\n async setPeerId(peerId: string): Promise<void> {\n const normalized = normalizePeerId(peerId);\n await this.db.exec(`DELETE FROM ${this.tables.meta}`);\n await this.db.run(`INSERT INTO ${this.tables.meta}(peer_id) VALUES (?)`, [\n normalized,\n ]);\n this.peerIdValue = normalized;\n }\n\n async get(key: KeyPart[]): Promise<Value | undefined> {\n const keyBytes = encodeKeyParts(key);\n const rows = await this.db.query<KvRow>(\n `SELECT data FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,\n [keyBytes],\n );\n const row = rows[0];\n if (!row) return undefined;\n return parseData(row.data);\n }\n\n /**\n * Returns the full entry payload (data, metadata, and clock) for a key.\n *\n * Compared to `get`, this preserves tombstone information: a deleted entry\n * still returns its clock and an empty metadata object with `data` omitted.\n * Missing or invalid keys return `undefined`. Metadata is cloned and\n * normalized to `{}` when absent.\n */\n async getEntry(key: KeyPart[]): Promise<EntryInfo | undefined> {\n let keyBytes: Uint8Array;\n try {\n keyBytes = encodeKeyParts(key);\n } catch {\n return undefined;\n }\n const rows = await this.db.query<KvRow>(\n `SELECT data, metadata, physical, logical, peer FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,\n [keyBytes],\n );\n const row = rows[0];\n if (!row) return undefined;\n const clock = normalizeRowClock(row.physical, row.logical, row.peer);\n if (!clock) return undefined;\n const metadata = normalizeMetadataMap(parseMetadata(row.metadata));\n const data = parseData(row.data);\n const info: EntryInfo = { metadata, clock };\n if (data !== undefined) {\n info.data = data;\n }\n return info;\n }\n\n async getMvr(key: KeyPart[]): Promise<Value[]> {\n const rows = await this.scan({ prefix: key });\n const values: Value[] = [];\n for (const row of rows) {\n if (row.raw.d !== true) continue;\n if (row.key.length !== key.length + 1) continue;\n values.push(row.key[row.key.length - 1]);\n }\n return values;\n }\n\n async putMvr(key: KeyPart[], value: Value, now?: number): Promise<void> {\n if (value === null || typeof value === \"object\") {\n throw new TypeError(\"putMvr only accepts scalar values\");\n }\n const existing = await this.scan({ prefix: key });\n for (const row of existing) {\n if (row.raw.d === true) {\n await this.delete(row.key, now);\n }\n }\n const composite = key.slice();\n composite.push(value);\n await this.put(composite, true, now);\n }\n\n private buildScanBounds(options: ScanOptions): {\n where: string[];\n params: unknown[];\n empty?: boolean;\n postFilter?: (bytes: Uint8Array) => boolean;\n } {\n let lower: { value: Uint8Array; inclusive: boolean } | undefined;\n let upper: { value: Uint8Array; inclusive: boolean } | undefined;\n let prefixFilter: Uint8Array | undefined;\n\n const applyLower = (candidate: {\n value: Uint8Array;\n inclusive: boolean;\n }) => {\n if (!lower) {\n lower = candidate;\n return;\n }\n const cmp = compareBytes(candidate.value, lower.value);\n if (cmp > 0) {\n lower = candidate;\n } else if (cmp === 0) {\n lower = {\n value: lower.value,\n inclusive: lower.inclusive && candidate.inclusive,\n };\n }\n };\n\n const applyUpper = (candidate: {\n value: Uint8Array;\n inclusive: boolean;\n }) => {\n if (!upper) {\n upper = candidate;\n return;\n }\n const cmp = compareBytes(candidate.value, upper.value);\n if (cmp < 0) {\n upper = candidate;\n } else if (cmp === 0) {\n upper = {\n value: upper.value,\n inclusive: upper.inclusive && candidate.inclusive,\n };\n }\n };\n\n try {\n if (options.prefix) {\n const prefixBytes = encodeKeyParts(options.prefix);\n prefixFilter = prefixBytes;\n applyLower({ value: prefixBytes, inclusive: true });\n const upperPrefix = prefixUpperBound(prefixBytes);\n if (upperPrefix) {\n applyUpper({ value: upperPrefix, inclusive: false });\n }\n }\n if (options.start && options.start.kind !== \"unbounded\") {\n applyLower({\n value: encodeKeyParts(options.start.key),\n inclusive: options.start.kind === \"inclusive\",\n });\n }\n if (options.end && options.end.kind !== \"unbounded\") {\n applyUpper({\n value: encodeKeyParts(options.end.key),\n inclusive: options.end.kind === \"inclusive\",\n });\n }\n } catch {\n return { where: [], params: [], empty: true };\n }\n\n const where: string[] = [];\n const params: unknown[] = [];\n if (lower) {\n where.push(`key ${lower.inclusive ? \">=\" : \">\"} ?`);\n params.push(lower.value);\n }\n if (upper) {\n where.push(`key ${upper.inclusive ? \"<=\" : \"<\"} ?`);\n params.push(upper.value);\n }\n const postFilter = prefixFilter\n ? (\n (pf: Uint8Array) => (bytes: Uint8Array) =>\n keyMatchesPrefix(bytes, pf)\n )(prefixFilter)\n : undefined;\n return { where, params, postFilter };\n }\n\n async scan(options: ScanOptions = {}): Promise<ScanRow[]> {\n const bounds = this.buildScanBounds(options);\n if (bounds.empty) {\n return [];\n }\n const clauses =\n bounds.where.length > 0 ? `WHERE ${bounds.where.join(\" AND \")}` : \"\";\n const rows = await this.db.query<KvRow>(\n `SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ${clauses} ORDER BY key ASC`,\n bounds.params as [],\n );\n const result: ScanRow[] = [];\n for (const row of rows) {\n const keyBytes = row.key;\n if (bounds.postFilter && !bounds.postFilter(keyBytes)) {\n continue;\n }\n const key = decodeKeyParts(keyBytes);\n const clock: EntryClock = {\n physicalTime: Number(row.physical ?? 0),\n logicalCounter: Number(row.logical ?? 0),\n peerId: String(row.peer ?? \"\"),\n };\n const payload: ExportPayload = {};\n const data = parseData(row.data);\n if (data !== undefined) payload.data = data;\n const metadata = parseMetadata(row.metadata);\n if (metadata !== undefined) payload.metadata = metadata;\n const raw = buildRecord(clock, payload);\n result.push({ key, raw, value: payload.data });\n }\n return result;\n }\n\n /**\n * Returns the exclusive version vector, which only includes peers that have\n * at least one entry in the current state. This is consistent with the state\n * after export and re-import.\n *\n * Use this version when sending to other peers for incremental sync.\n */\n async version(): Promise<VersionVector> {\n // Find the maximum clock per peer. The clock ordering is (physical, logical).\n // We need the row with the highest (physical, logical) pair for each peer,\n // not MAX(physical) and MAX(logical) independently which could mix values from different rows.\n // Use a window function with lexicographic ordering to avoid floating-point precision issues.\n const rows = await this.db.query<{ peer: string; physical: number; logical: number }>(\n `SELECT peer, physical, logical FROM (\n SELECT peer, physical, logical,\n ROW_NUMBER() OVER (PARTITION BY peer ORDER BY physical DESC, logical DESC) as rn\n FROM ${this.tables.kv}\n ) WHERE rn = 1`,\n );\n const vv: VersionVector = {};\n for (const row of rows) {\n vv[row.peer] = {\n physicalTime: row.physical,\n logicalCounter: row.logical,\n };\n }\n return vv;\n }\n\n /**\n * Returns the inclusive version vector, which includes all peers ever seen,\n * even if their entries have been overridden by other peers.\n *\n * Use this version when checking if you have received all data from another peer.\n */\n inclusiveVersion(): VersionVector {\n const vv: VersionVector = {};\n for (const [peer, clock] of this.vv.entries()) {\n vv[peer] = { ...clock };\n }\n return vv;\n }\n\n peerId(): string {\n return this.peerIdValue;\n }\n\n getMaxPhysicalTime(): number {\n return this.maxHlc.physicalTime;\n }\n\n private async exportInternal(\n from?: VersionVector,\n pruneTombstonesBefore?: number,\n peerId?: string,\n ): Promise<ExportBundle> {\n const normalizedFrom = new Map<string, VersionVectorEntry>();\n if (from) {\n for (const [peer, entry] of Object.entries(from)) {\n const normalized = normalizeVersionEntry(entry);\n if (normalized) {\n normalizedFrom.set(peer, normalized);\n }\n }\n }\n\n const entries: Record<string, ExportRecord> = {};\n\n const peers = peerId ? [peerId] : Array.from(this.vv.keys());\n const peersToExport: Array<{\n peer: string;\n fromEntry?: VersionVectorEntry;\n }> = [];\n for (const peer of peers) {\n const localEntry = this.vv.get(peer);\n const fromEntry = normalizedFrom.get(peer);\n if (\n localEntry &&\n fromEntry &&\n (localEntry.physicalTime < fromEntry.physicalTime ||\n (localEntry.physicalTime === fromEntry.physicalTime &&\n localEntry.logicalCounter <= fromEntry.logicalCounter))\n ) {\n // Remote is already up to date for this peer.\n continue;\n }\n peersToExport.push({ peer, fromEntry });\n }\n\n if (peerId && peersToExport.every((p) => p.peer !== peerId)) {\n peersToExport.push({\n peer: peerId,\n fromEntry: normalizedFrom.get(peerId),\n });\n }\n\n if (peersToExport.length === 0) {\n return { version: 0, entries };\n }\n\n for (const target of peersToExport) {\n const params: unknown[] = [target.peer];\n let clause = \"WHERE peer = ?\";\n if (target.fromEntry) {\n clause += \" AND physical >= ?\";\n params.push(target.fromEntry.physicalTime);\n }\n const rows = await this.db.query<ExportQueryRow>(\n `SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ${clause} ORDER BY physical, logical, key`,\n params as [],\n );\n for (const row of rows) {\n const clock: EntryClock = {\n physicalTime: Number(row.physical ?? 0),\n logicalCounter: Number(row.logical ?? 0),\n peerId: String(row.peer ?? \"\"),\n };\n const fromEntry = target.fromEntry;\n if (\n fromEntry &&\n (clock.physicalTime < fromEntry.physicalTime ||\n (clock.physicalTime === fromEntry.physicalTime &&\n clock.logicalCounter <= fromEntry.logicalCounter))\n ) {\n continue;\n }\n if (\n pruneTombstonesBefore !== undefined &&\n Number.isFinite(pruneTombstonesBefore) &&\n row.data === null &&\n clock.physicalTime < pruneTombstonesBefore\n ) {\n continue;\n }\n const payload: ExportPayload = {};\n const data = parseData(row.data);\n if (data !== undefined) payload.data = data;\n const metadata = parseMetadata(row.metadata);\n if (metadata !== undefined) payload.metadata = metadata;\n const keyParts = decodeKeyParts(row.key);\n entries[keyToString(keyParts)] = buildRecord(clock, payload);\n }\n }\n return { version: 0, entries };\n }\n\n private async exportWithHooks(options: ExportOptions): Promise<ExportBundle> {\n const base = await this.exportInternal(\n options.from,\n options.pruneTombstonesBefore,\n options.peerId,\n );\n const transform = options.hooks?.transform;\n if (!transform) {\n return base;\n }\n const result: ExportBundle = { version: base.version, entries: {} };\n for (const [key, record] of Object.entries(base.entries)) {\n const clock = parseClockString(record.c);\n const context = {\n key: JSON.parse(key) as KeyPart[],\n clock,\n raw: { ...record },\n };\n const basePayload: ExportPayload = {};\n if (record.d !== undefined) basePayload.data = cloneJson(record.d);\n const meta = cloneMetadata(record.m);\n if (meta !== undefined) basePayload.metadata = meta;\n const working = clonePayload(basePayload);\n const transformed = await transform(context, working);\n const finalPayload = mergePayload(basePayload, transformed ?? working);\n result.entries[key] = buildRecord(clock, finalPayload);\n }\n return result;\n }\n\n exportJson(): Promise<ExportBundle>;\n exportJson(from: VersionVector): Promise<ExportBundle>;\n exportJson(\n from: VersionVector,\n pruneTombstonesBefore: number,\n ): Promise<ExportBundle>;\n exportJson(options: ExportOptions): Promise<ExportBundle>;\n exportJson(\n arg?: VersionVector | ExportOptions,\n pruneTombstonesBefore?: number,\n ): Promise<ExportBundle> {\n if (isExportOptions(arg)) {\n return this.exportWithHooks(arg);\n }\n return this.exportInternal(arg, pruneTombstonesBefore);\n }\n\n private async importInternal(bundle: ExportBundle): Promise<ImportReport> {\n if (bundle.version !== 0) {\n throw new TypeError(\"Unsupported bundle version\");\n }\n let accepted = 0;\n const skipped: Array<{ key: KeyPart[]; reason: string }> = [];\n const appliedEvents: Array<{\n key: KeyPart[];\n payload: ExportPayload;\n source: string;\n }> = [];\n for (const [keyString, record] of Object.entries(bundle.entries)) {\n let keyParts: KeyPart[];\n try {\n const parsed = JSON.parse(keyString);\n keyParts = Array.isArray(parsed) ? (parsed as KeyPart[]) : [];\n } catch {\n skipped.push({ key: [], reason: \"invalid key\" });\n continue;\n }\n const clock = parseClockString(record.c);\n const payload: ExportPayload = {};\n if (record.d !== undefined) payload.data = cloneJson(record.d);\n const metadata = cloneMetadata(record.m);\n if (metadata !== undefined) payload.metadata = metadata;\n accepted += 1;\n await this.applyOperation({\n key: keyParts,\n payload,\n clock,\n skipSameValue: false,\n source: \"import\",\n eventSink: appliedEvents,\n });\n }\n if (appliedEvents.length > 0) {\n this.emitEvents(\"import\", appliedEvents);\n }\n return { accepted, skipped };\n }\n\n async importJson(bundle: ExportBundle): Promise<ImportReport>;\n async importJson(options: ImportOptions): Promise<ImportReport>;\n async importJson(arg: ExportBundle | ImportOptions): Promise<ImportReport> {\n if (isImportOptions(arg)) {\n const preprocess = arg.hooks?.preprocess;\n const working = preprocess\n ? { version: arg.bundle.version, entries: { ...arg.bundle.entries } }\n : arg.bundle;\n const skipped: Array<{ key: KeyPart[]; reason: string }> = [];\n if (preprocess) {\n for (const [key, record] of Object.entries(working.entries)) {\n const contextKey = JSON.parse(key) as KeyPart[];\n const clock = parseClockString(record.c);\n const payload: ExportPayload = {};\n if (record.d !== undefined) {\n payload.data = cloneJson(record.d);\n }\n const metadata = cloneMetadata(record.m);\n if (metadata !== undefined) payload.metadata = metadata;\n const decision = await preprocess(\n { key: contextKey, clock, raw: record },\n clonePayload(payload),\n );\n const normalized = normalizeImportDecision(decision);\n if (!normalized.accept) {\n skipped.push({\n key: contextKey,\n reason: normalized.reason ?? \"rejected\",\n });\n delete working.entries[key];\n } else {\n working.entries[key] = buildRecord(clock, payload);\n }\n }\n }\n const baseReport = await this.importInternal(working);\n return {\n accepted: baseReport.accepted,\n skipped: skipped.concat(baseReport.skipped),\n };\n }\n return this.importInternal(arg);\n }\n\n async importJsonStr(json: string): Promise<ImportReport> {\n const parsed = JSON.parse(json) as ExportBundle;\n return this.importJson(parsed);\n }\n\n async digest(): Promise<string> {\n const rows = await this.db.query<KvRow>(\n `SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ORDER BY key ASC`,\n );\n const digestRows = await toDigestRows(rows);\n return computeDigest(digestRows);\n }\n\n async kvToJson(): Promise<ExportBundle> {\n return this.exportInternal();\n }\n\n async merge(other: FlockSQLite): Promise<void> {\n const bundle = await other.exportJson();\n await this.importJson(bundle);\n }\n\n static async checkConsistency(\n a: FlockSQLite,\n b: FlockSQLite,\n ): Promise<boolean> {\n const [digestA, digestB] = await Promise.all([a.digest(), b.digest()]);\n return digestA === digestB;\n }\n\n checkInvariants(): void {\n // Placeholder: SQLite-backed implementation does not yet expose internal invariants.\n }\n\n subscribe(listener: (batch: EventBatch) => void): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n}\n\nexport type {\n Event,\n EventBatch,\n ExportBundle,\n ExportHooks,\n ExportOptions,\n ExportPayload,\n ExportRecord,\n ImportHooks,\n ImportOptions,\n ImportReport,\n KeyPart,\n MetadataMap,\n PutHooks,\n PutWithMetaOptions,\n ScanBound,\n ScanOptions,\n ScanRow,\n Value,\n VersionVectorEntry,\n EntryInfo,\n};\n\nexport { FlockSQLite as Flock };\nexport type { EventListener };\n"],"mappings":"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"}
|