@reifydb/core 0.4.0 → 0.4.2

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.d.ts CHANGED
@@ -570,8 +570,8 @@ declare class DurationValue implements Value {
570
570
  */
571
571
  toIsoString(): string;
572
572
  /**
573
- * Format as human-readable duration string
574
- * Examples: "1 year 2 mons 3 days 04:05:06.789", "3 days", "00:00:01.5"
573
+ * Format as compact human-readable duration string
574
+ * Examples: "1y2mo3d4h5m6s", "1d2h", "30s", "500ms", "0s"
575
575
  */
576
576
  toString(): string;
577
577
  valueOf(): {
@@ -588,9 +588,17 @@ declare class DurationValue implements Value {
588
588
  nanos: bigint;
589
589
  } | undefined;
590
590
  /**
591
- * Helper to parse ISO 8601 duration format
591
+ * Helper to parse duration format (human-readable or ISO 8601)
592
592
  */
593
593
  private static parseDuration;
594
+ /**
595
+ * Parse ISO 8601 duration format: P[n]Y[n]M[n]DT[n]H[n]M[n.n]S
596
+ */
597
+ private static parseIsoDuration;
598
+ /**
599
+ * Parse human-readable duration format: 1y2mo3d4h5m6s500ms100us50ns
600
+ */
601
+ private static parseHumanDuration;
594
602
  /**
595
603
  * Compare two durations for equality
596
604
  */
package/dist/index.js CHANGED
@@ -1199,7 +1199,11 @@ var Float8Value = class _Float8Value {
1199
1199
  return false;
1200
1200
  }
1201
1201
  const otherFloat = other;
1202
- return this.value === otherFloat.value;
1202
+ if (this.value === void 0 || otherFloat.value === void 0) {
1203
+ return this.value === otherFloat.value;
1204
+ }
1205
+ const epsilon = 1e-14;
1206
+ return Math.abs(this.value - otherFloat.value) <= epsilon;
1203
1207
  }
1204
1208
  encode() {
1205
1209
  return {
@@ -1750,25 +1754,19 @@ var DurationValue = class _DurationValue {
1750
1754
  return result;
1751
1755
  }
1752
1756
  /**
1753
- * Format as human-readable duration string
1754
- * Examples: "1 year 2 mons 3 days 04:05:06.789", "3 days", "00:00:01.5"
1757
+ * Format as compact human-readable duration string
1758
+ * Examples: "1y2mo3d4h5m6s", "1d2h", "30s", "500ms", "0s"
1755
1759
  */
1756
1760
  toString() {
1757
1761
  if (this.months === void 0 || this.days === void 0 || this.nanos === void 0) {
1758
1762
  return "none";
1759
1763
  }
1760
1764
  if (this.months === 0 && this.days === 0 && this.nanos === 0n) {
1761
- return "00:00:00";
1765
+ return "0s";
1762
1766
  }
1763
- const parts = [];
1767
+ let result = "";
1764
1768
  const years = Math.floor(this.months / 12);
1765
1769
  const months = this.months % 12;
1766
- if (years !== 0) {
1767
- parts.push(years === 1 ? "1 year" : `${years} years`);
1768
- }
1769
- if (months !== 0) {
1770
- parts.push(months === 1 ? "1 mon" : `${months} mons`);
1771
- }
1772
1770
  const totalSeconds = this.nanos / 1000000000n;
1773
1771
  const remainingNanos = this.nanos % 1000000000n;
1774
1772
  const extraDays = totalSeconds / 86400n;
@@ -1777,31 +1775,25 @@ var DurationValue = class _DurationValue {
1777
1775
  const hours = remainingSeconds / 3600n;
1778
1776
  const minutes = remainingSeconds % 3600n / 60n;
1779
1777
  const seconds = remainingSeconds % 60n;
1780
- if (displayDays !== 0) {
1781
- parts.push(displayDays === 1 ? "1 day" : `${displayDays} days`);
1782
- }
1783
- if (hours !== 0n || minutes !== 0n || seconds !== 0n || remainingNanos !== 0n || parts.length === 0) {
1784
- const hoursStr = String(hours).padStart(2, "0");
1785
- const minutesStr = String(minutes).padStart(2, "0");
1786
- let secondsStr;
1787
- if (remainingNanos !== 0n) {
1788
- const fractional = Number(remainingNanos) / 1e9;
1789
- const totalSecondsFloat = Number(seconds) + fractional;
1790
- const formatted = totalSecondsFloat.toFixed(9).replace(/0+$/, "").replace(/\.$/, "");
1791
- const dotIndex = formatted.indexOf(".");
1792
- if (dotIndex >= 0) {
1793
- const wholePart = formatted.substring(0, dotIndex).padStart(2, "0");
1794
- const fractionalPart = formatted.substring(dotIndex);
1795
- secondsStr = wholePart + fractionalPart;
1796
- } else {
1797
- secondsStr = formatted.padStart(2, "0");
1798
- }
1799
- } else {
1800
- secondsStr = String(seconds).padStart(2, "0");
1778
+ const absRemaining = remainingNanos < 0n ? -remainingNanos : remainingNanos;
1779
+ const ms = absRemaining / 1000000n;
1780
+ const us = absRemaining % 1000000n / 1000n;
1781
+ const ns = absRemaining % 1000n;
1782
+ if (years !== 0) result += `${years}y`;
1783
+ if (months !== 0) result += `${months}mo`;
1784
+ if (displayDays !== 0) result += `${displayDays}d`;
1785
+ if (hours !== 0n) result += `${hours}h`;
1786
+ if (minutes !== 0n) result += `${minutes}m`;
1787
+ if (seconds !== 0n) result += `${seconds}s`;
1788
+ if (ms !== 0n || us !== 0n || ns !== 0n) {
1789
+ if (remainingNanos < 0n && seconds === 0n && hours === 0n && minutes === 0n && displayDays === 0 && years === 0 && months === 0) {
1790
+ result += "-";
1801
1791
  }
1802
- parts.push(`${hoursStr}:${minutesStr}:${secondsStr}`);
1792
+ if (ms !== 0n) result += `${ms}ms`;
1793
+ if (us !== 0n) result += `${us}us`;
1794
+ if (ns !== 0n) result += `${ns}ns`;
1803
1795
  }
1804
- return parts.join(" ");
1796
+ return result;
1805
1797
  }
1806
1798
  valueOf() {
1807
1799
  if (this.months === void 0 || this.days === void 0 || this.nanos === void 0) {
@@ -1816,15 +1808,21 @@ var DurationValue = class _DurationValue {
1816
1808
  return this.valueOf();
1817
1809
  }
1818
1810
  /**
1819
- * Helper to parse ISO 8601 duration format
1811
+ * Helper to parse duration format (human-readable or ISO 8601)
1820
1812
  */
1821
1813
  static parseDuration(str) {
1822
1814
  const negative = str.startsWith("-");
1823
1815
  const cleanStr = negative ? str.substring(1) : str;
1824
- if (!cleanStr.startsWith("P")) {
1825
- return null;
1816
+ if (cleanStr.startsWith("P")) {
1817
+ return _DurationValue.parseIsoDuration(cleanStr, negative);
1826
1818
  }
1827
- const match = cleanStr.match(/^P(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$/);
1819
+ return _DurationValue.parseHumanDuration(cleanStr, negative);
1820
+ }
1821
+ /**
1822
+ * Parse ISO 8601 duration format: P[n]Y[n]M[n]DT[n]H[n]M[n.n]S
1823
+ */
1824
+ static parseIsoDuration(str, negative) {
1825
+ const match = str.match(/^P(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$/);
1828
1826
  if (!match) {
1829
1827
  return null;
1830
1828
  }
@@ -1847,18 +1845,37 @@ var DurationValue = class _DurationValue {
1847
1845
  const totalNanos = BigInt(hours) * 3600n * 1000000000n + BigInt(minutes) * 60n * 1000000000n + BigInt(wholeSeconds) * 1000000000n + fracNanos;
1848
1846
  const totalMonths = years * 12 + months;
1849
1847
  if (negative) {
1850
- return {
1851
- months: -totalMonths,
1852
- days: -days,
1853
- nanos: -totalNanos
1854
- };
1855
- } else {
1856
- return {
1857
- months: totalMonths,
1858
- days,
1859
- nanos: totalNanos
1860
- };
1848
+ return { months: -totalMonths, days: -days, nanos: -totalNanos };
1849
+ }
1850
+ return { months: totalMonths, days, nanos: totalNanos };
1851
+ }
1852
+ /**
1853
+ * Parse human-readable duration format: 1y2mo3d4h5m6s500ms100us50ns
1854
+ */
1855
+ static parseHumanDuration(str, negative) {
1856
+ const pattern = /^(?:(\d+)y)?(?:(\d+)mo)?(?:(\d+)d)?(?:(\d+)h)?(?:(\d+)m(?!s|o))?(?:(\d+)s(?!$)?)?(?:(\d+)ms)?(?:(\d+)us)?(?:(\d+)ns)?$/;
1857
+ const match = str.match(pattern);
1858
+ if (!match) {
1859
+ return null;
1860
+ }
1861
+ if (!match[1] && !match[2] && !match[3] && !match[4] && !match[5] && !match[6] && !match[7] && !match[8] && !match[9]) {
1862
+ return null;
1863
+ }
1864
+ const years = parseInt(match[1] || "0", 10);
1865
+ const months = parseInt(match[2] || "0", 10);
1866
+ const days = parseInt(match[3] || "0", 10);
1867
+ const hours = parseInt(match[4] || "0", 10);
1868
+ const minutes = parseInt(match[5] || "0", 10);
1869
+ const seconds = parseInt(match[6] || "0", 10);
1870
+ const ms = parseInt(match[7] || "0", 10);
1871
+ const us = parseInt(match[8] || "0", 10);
1872
+ const ns = parseInt(match[9] || "0", 10);
1873
+ const totalNanos = BigInt(hours) * 3600n * 1000000000n + BigInt(minutes) * 60n * 1000000000n + BigInt(seconds) * 1000000000n + BigInt(ms) * 1000000n + BigInt(us) * 1000n + BigInt(ns);
1874
+ const totalMonths = years * 12 + months;
1875
+ if (negative) {
1876
+ return { months: -totalMonths, days: -days, nanos: -totalNanos };
1861
1877
  }
1878
+ return { months: totalMonths, days, nanos: totalNanos };
1862
1879
  }
1863
1880
  /**
1864
1881
  * Compare two durations for equality
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constant.ts","../src/value/blob.ts","../src/value/boolean.ts","../src/value/date.ts","../src/value/time.ts","../src/value/datetime.ts","../src/value/decimal.ts","../src/value/float4.ts","../src/value/float8.ts","../src/value/int1.ts","../src/value/int2.ts","../src/value/int4.ts","../src/value/int8.ts","../src/value/int16.ts","../src/value/duration.ts","../src/value/uint1.ts","../src/value/uint2.ts","../src/value/uint4.ts","../src/value/uint8.ts","../src/value/uint16.ts","../src/value/none.ts","../src/value/utf8.ts","../src/value/uuid4.ts","../src/value/uuid7.ts","../src/value/identityid.ts","../src/value/index.ts","../src/decoder.ts","../src/schema/builder.ts","../src/schema/parser.ts","../src/schema/validator.ts","../src/types.ts"],"sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nexport const NONE_VALUE = \"⟪none⟫\";","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\n/**\n * A binary large object (BLOB) value that can hold arbitrary byte data.\n */\nexport class BlobValue implements Value {\n readonly type: Type = \"Blob\" as const;\n private readonly bytes?: Uint8Array;\n\n constructor(value?: Uint8Array | ArrayBuffer | string | number[]) {\n if (value !== undefined) {\n if (value instanceof Uint8Array) {\n this.bytes = new Uint8Array(value);\n } else if (value instanceof ArrayBuffer) {\n this.bytes = new Uint8Array(value);\n } else if (typeof value === 'string') {\n // Try to parse as hex or base64\n const parsed = BlobValue.parseString(value);\n if (parsed === null) {\n throw new Error(`Invalid blob string: ${value}`);\n }\n this.bytes = parsed;\n } else if (Array.isArray(value)) {\n // Array of numbers (bytes)\n for (const byte of value) {\n if (!Number.isInteger(byte) || byte < 0 || byte > 255) {\n throw new Error(`Invalid byte value: ${byte}`);\n }\n }\n this.bytes = new Uint8Array(value);\n } else {\n throw new Error(`Blob value must be a Uint8Array, ArrayBuffer, string, or number[], got ${typeof value}`);\n }\n } else {\n this.bytes = undefined;\n }\n }\n\n /**\n * Create a new BLOB from raw bytes\n */\n static new(bytes: Uint8Array | number[]): BlobValue {\n return new BlobValue(bytes);\n }\n\n /**\n * Create an empty BLOB\n */\n static empty(): BlobValue {\n return new BlobValue(new Uint8Array(0));\n }\n\n /**\n * Create a BLOB from a byte array\n */\n static fromBytes(bytes: number[]): BlobValue {\n return new BlobValue(bytes);\n }\n\n /**\n * Create a BLOB from a hex string\n */\n static fromHex(hex: string): BlobValue {\n // Remove 0x prefix if present\n const cleanHex = hex.startsWith('0x') || hex.startsWith('0X')\n ? hex.substring(2)\n : hex;\n\n if (cleanHex.length % 2 !== 0) {\n throw new Error(`Invalid hex string: odd length`);\n }\n\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n const byte = parseInt(cleanHex.substring(i, i + 2), 16);\n if (isNaN(byte)) {\n throw new Error(`Invalid hex string: ${hex}`);\n }\n bytes[i / 2] = byte;\n }\n return new BlobValue(bytes);\n }\n\n /**\n * Create a BLOB from a base64 string\n */\n static fromBase64(base64: string): BlobValue {\n // Validate base64 format\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(base64)) {\n throw new Error(`Invalid base64 string: ${base64}`);\n }\n\n try {\n if (typeof Buffer !== 'undefined') {\n // Node.js environment\n const buffer = Buffer.from(base64, 'base64');\n return new BlobValue(new Uint8Array(buffer));\n } else {\n // Browser environment\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return new BlobValue(bytes);\n }\n } catch (e) {\n throw new Error(`Invalid base64 string: ${base64}`);\n }\n }\n\n /**\n * Create a BLOB from a UTF-8 string\n */\n static fromUtf8(str: string): BlobValue {\n const encoder = new TextEncoder();\n return new BlobValue(encoder.encode(str));\n }\n\n /**\n * Parse a blob string (hex or undefined)\n */\n static parse(str: string): BlobValue {\n const trimmed = str.trim();\n\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new BlobValue(undefined);\n }\n\n const parsed = BlobValue.parseString(trimmed);\n if (parsed === null) {\n throw new Error(`Cannot parse \"${str}\" as Blob`);\n }\n\n return new BlobValue(parsed);\n }\n\n /**\n * Get the raw bytes\n */\n asBytes(): Uint8Array | undefined {\n return this.bytes ? new Uint8Array(this.bytes) : undefined;\n }\n\n /**\n * Get the length in bytes\n */\n length(): number {\n return this.bytes?.length ?? 0;\n }\n\n /**\n * Check if the BLOB is empty\n */\n isEmpty(): boolean {\n return this.bytes?.length === 0;\n }\n\n /**\n * Convert to hex string with 0x prefix\n */\n toHex(): string | undefined {\n if (this.bytes === undefined) return undefined;\n\n const hex = Array.from(this.bytes)\n .map(byte => byte.toString(16).padStart(2, '0'))\n .join('');\n return '0x' + hex;\n }\n\n /**\n * Convert to base64 string\n */\n toBase64(): string | undefined {\n if (this.bytes === undefined) return undefined;\n\n if (typeof Buffer !== 'undefined') {\n // Node.js environment\n return Buffer.from(this.bytes).toString('base64');\n } else {\n // Browser environment\n const binaryString = Array.from(this.bytes)\n .map(byte => String.fromCharCode(byte))\n .join('');\n return btoa(binaryString);\n }\n }\n\n /**\n * Convert to UTF-8 string\n */\n toUtf8(): string | undefined {\n if (this.bytes === undefined) return undefined;\n\n const decoder = new TextDecoder();\n return decoder.decode(this.bytes);\n }\n\n /**\n * Format as hex string with 0x prefix\n */\n toString(): string {\n if (this.bytes === undefined) {\n return 'none';\n }\n return this.toHex()!;\n }\n\n valueOf(): Uint8Array | undefined {\n return this.bytes ? new Uint8Array(this.bytes) : undefined;\n }\n\n /**\n * Get the internal representation\n */\n get value(): Uint8Array | undefined {\n return this.valueOf();\n }\n\n /**\n * Compare two blobs for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherBlob = other as BlobValue;\n if (this.bytes === undefined || otherBlob.bytes === undefined) {\n return this.bytes === otherBlob.bytes;\n }\n\n if (this.bytes.length !== otherBlob.bytes.length) {\n return false;\n }\n\n for (let i = 0; i < this.bytes.length; i++) {\n if (this.bytes[i] !== otherBlob.bytes[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Helper to parse a string as hex\n */\n private static parseString(str: string): Uint8Array | null {\n // Try hex first (with or without 0x prefix)\n if (str.startsWith('0x') || str.startsWith('0X')) {\n try {\n return BlobValue.fromHex(str).bytes!;\n } catch {\n return null;\n }\n }\n\n // Check if it looks like hex (all hex digits)\n if (/^[0-9a-fA-F]+$/.test(str) && str.length % 2 === 0) {\n try {\n return BlobValue.fromHex(str).bytes!;\n } catch {\n return null;\n }\n }\n\n return null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class BooleanValue implements Value {\n readonly type: Type = \"Boolean\" as const;\n public readonly value?: boolean;\n\n constructor(value?: boolean) {\n if (value !== undefined) {\n if (typeof value !== 'boolean') {\n throw new Error(`Boolean value must be a boolean, got ${typeof value}`);\n }\n this.value = value;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): BooleanValue {\n const trimmed = str.trim().toLowerCase();\n\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new BooleanValue(undefined);\n }\n\n if (trimmed === 'true') {\n return new BooleanValue(true);\n }\n\n if (trimmed === 'false') {\n return new BooleanValue(false);\n }\n\n throw new Error(`Cannot parse \"${str}\" as Boolean`);\n }\n\n valueOf(): boolean | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two boolean values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherBoolean = other as BooleanValue;\n return this.value === otherBoolean.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\n/**\n * A date value representing a calendar date (year, month, day) without time information.\n * Always interpreted in UTC.\n * Internally stored as months and days.\n */\nexport class DateValue implements Value {\n readonly type: Type = \"Date\" as const;\n private readonly months?: number; // years*12 + months\n private readonly days?: number; // day of month (1-31)\n\n constructor(value?: Date | string | number) {\n if (value !== undefined) {\n if (value instanceof Date) {\n // Remove time component - set to UTC midnight\n const year = value.getUTCFullYear();\n const month = value.getUTCMonth() + 1; // Convert to 1-based\n const day = value.getUTCDate();\n \n this.months = year * 12 + (month - 1);\n this.days = day;\n } else if (typeof value === 'string') {\n // Parse YYYY-MM-DD format\n const parsed = DateValue.parseDate(value);\n if (!parsed) {\n throw new Error(`Invalid date string: ${value}`);\n }\n this.months = parsed.months;\n this.days = parsed.days;\n } else if (typeof value === 'number') {\n // Interpret as days since epoch\n const date = DateValue.fromDaysSinceEpochToComponents(value);\n if (!date) {\n throw new Error(`Invalid days since epoch: ${value}`);\n }\n this.months = date.months;\n this.days = date.days;\n } else {\n throw new Error(`Date value must be a Date, string, or number, got ${typeof value}`);\n }\n } else {\n this.months = undefined;\n this.days = undefined;\n }\n }\n\n /**\n * Create a DateValue from year, month (1-12), and day (1-31)\n */\n static fromYMD(year: number, month: number, day: number): DateValue {\n // Validate the date is valid\n if (!DateValue.isValidDate(year, month, day)) {\n throw new Error(`Invalid date: ${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`);\n }\n \n const result = new DateValue(undefined);\n (result as any).months = year * 12 + (month - 1);\n (result as any).days = day;\n return result;\n }\n\n /**\n * Get today's date (in UTC)\n */\n static today(): DateValue {\n const now = new Date();\n return DateValue.fromYMD(\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate()\n );\n }\n\n /**\n * Parse a date string in YYYY-MM-DD format\n */\n static parse(str: string): DateValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new DateValue(undefined);\n }\n\n const parsed = DateValue.parseDate(trimmed);\n if (!parsed) {\n throw new Error(`Cannot parse \"${str}\" as Date`);\n }\n\n const result = new DateValue(undefined);\n (result as any).months = parsed.months;\n (result as any).days = parsed.days;\n return result;\n }\n\n /**\n * Convert to days since Unix epoch (1970-01-01) for storage\n */\n toDaysSinceEpoch(): number | undefined {\n if (this.months === undefined || this.days === undefined) {\n return undefined;\n }\n \n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n \n // Create date with special handling for years < 100\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, this.days));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, this.days));\n }\n \n const epoch = new Date(Date.UTC(1970, 0, 1));\n const diffMs = date.getTime() - epoch.getTime();\n return Math.floor(diffMs / (1000 * 60 * 60 * 24));\n }\n\n /**\n * Create from days since Unix epoch\n */\n static fromDaysSinceEpochToComponents(days: number): { months: number; days: number } | null {\n const epoch = new Date(Date.UTC(1970, 0, 1));\n const ms = days * 24 * 60 * 60 * 1000;\n const date = new Date(epoch.getTime() + ms);\n \n // Check for valid date\n if (!isFinite(date.getTime())) {\n return null;\n }\n \n const year = date.getUTCFullYear();\n const month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n \n return {\n months: year * 12 + (month - 1),\n days: day\n };\n }\n\n /**\n * Get the year component\n */\n year(): number | undefined {\n if (this.months === undefined) return undefined;\n return Math.floor(this.months / 12);\n }\n\n /**\n * Get the month component (1-12)\n */\n month(): number | undefined {\n if (this.months === undefined) return undefined;\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n return m + 1;\n }\n\n /**\n * Get the day component (1-31)\n */\n day(): number | undefined {\n return this.days;\n }\n\n /**\n * Format as YYYY-MM-DD string\n */\n toString(): string {\n if (this.months === undefined || this.days === undefined) {\n return 'none';\n }\n\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = String(m + 1).padStart(2, '0');\n const day = String(this.days).padStart(2, '0');\n \n // Handle negative years (BC dates)\n if (year < 0) {\n const absYear = Math.abs(year);\n return `-${String(absYear).padStart(4, '0')}-${month}-${day}`;\n } else {\n return `${String(year).padStart(4, '0')}-${month}-${day}`;\n }\n }\n\n valueOf(): Date | undefined {\n if (this.months === undefined || this.days === undefined) {\n return undefined;\n }\n \n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n \n // Handle years < 100 specially\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, this.days));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, this.days));\n }\n \n return date;\n }\n \n /**\n * Get the internal representation\n */\n get value(): Date | undefined {\n return this.valueOf();\n }\n\n /**\n * Helper to parse YYYY-MM-DD format\n */\n private static parseDate(str: string): { months: number; days: number } | null {\n // Match YYYY-MM-DD format, including negative years\n const match = str.match(/^(-?\\d{1,4})-(\\d{2})-(\\d{2})$/);\n if (!match) {\n return null;\n }\n\n const year = parseInt(match[1], 10);\n const month = parseInt(match[2], 10);\n const day = parseInt(match[3], 10);\n\n // Validate month and day ranges\n if (month < 1 || month > 12) {\n return null;\n }\n if (day < 1 || day > 31) {\n return null;\n }\n\n // Validate the date is valid (e.g., no Feb 30)\n if (!DateValue.isValidDate(year, month, day)) {\n return null;\n }\n\n return {\n months: year * 12 + (month - 1),\n days: day\n };\n }\n \n /**\n * Helper to validate a date\n */\n private static isValidDate(year: number, month: number, day: number): boolean {\n // Create a date and check if components match\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, day));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, day));\n }\n \n return date.getUTCFullYear() === year &&\n date.getUTCMonth() === month - 1 &&\n date.getUTCDate() === day;\n }\n\n /**\n * Compare two dates for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDate = other as DateValue;\n if (this.months === undefined || otherDate.months === undefined) {\n return this.months === otherDate.months && this.days === otherDate.days;\n }\n \n return this.months === otherDate.months && this.days === otherDate.days;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A time value representing time of day (hour, minute, second, nanosecond) without date information.\n * Internally stored as nanoseconds since midnight.\n */\nexport class TimeValue implements Value {\n readonly type: Type = \"Time\" as const;\n public readonly value?: bigint; // nanoseconds since midnight\n\n private static readonly NANOS_PER_SECOND = 1_000_000_000n;\n private static readonly NANOS_PER_MINUTE = 60_000_000_000n;\n private static readonly NANOS_PER_HOUR = 3_600_000_000_000n;\n private static readonly NANOS_PER_DAY = 86_400_000_000_000n;\n\n constructor(value?: bigint | string | number) {\n if (value !== undefined) {\n if (typeof value === 'bigint') {\n // Validate range (0 to 24 hours in nanoseconds)\n if (value < 0n || value >= TimeValue.NANOS_PER_DAY) {\n throw new Error(`Time value must be between 0 and ${TimeValue.NANOS_PER_DAY - 1n} nanoseconds`);\n }\n this.value = value;\n } else if (typeof value === 'string') {\n // Parse HH:MM:SS[.nnnnnnnnn] format\n const parsed = TimeValue.parseTime(value);\n if (parsed === null) {\n throw new Error(`Invalid time string: ${value}`);\n }\n this.value = parsed;\n } else if (typeof value === 'number') {\n // Accept number as nanoseconds since midnight\n const bigintValue = BigInt(Math.floor(value));\n if (bigintValue < 0n || bigintValue >= TimeValue.NANOS_PER_DAY) {\n throw new Error(`Time value must be between 0 and ${TimeValue.NANOS_PER_DAY - 1n} nanoseconds`);\n }\n this.value = bigintValue;\n } else {\n throw new Error(`Time value must be a bigint, string, or number, got ${typeof value}`);\n }\n } else {\n this.value = undefined;\n }\n }\n\n /**\n * Create a TimeValue from hour, minute, second, and nanosecond\n */\n static fromHMSN(hour: number, minute: number, second: number, nano: number = 0): TimeValue {\n // Validate inputs\n if (hour < 0 || hour > 23) {\n throw new Error(`Invalid hour: ${hour}`);\n }\n if (minute < 0 || minute > 59) {\n throw new Error(`Invalid minute: ${minute}`);\n }\n if (second < 0 || second > 59) {\n throw new Error(`Invalid second: ${second}`);\n }\n if (nano < 0 || nano > 999_999_999) {\n throw new Error(`Invalid nanosecond: ${nano}`);\n }\n\n const nanos = BigInt(hour) * TimeValue.NANOS_PER_HOUR +\n BigInt(minute) * TimeValue.NANOS_PER_MINUTE +\n BigInt(second) * TimeValue.NANOS_PER_SECOND +\n BigInt(nano);\n\n return new TimeValue(nanos);\n }\n\n /**\n * Create a TimeValue from hour, minute, and second (no fractional seconds)\n */\n static fromHMS(hour: number, minute: number, second: number): TimeValue {\n return TimeValue.fromHMSN(hour, minute, second, 0);\n }\n\n /**\n * Create midnight (00:00:00.000000000)\n */\n static midnight(): TimeValue {\n return new TimeValue(0n);\n }\n\n /**\n * Create noon (12:00:00.000000000)\n */\n static noon(): TimeValue {\n return new TimeValue(12n * TimeValue.NANOS_PER_HOUR);\n }\n\n /**\n * Parse a time string in HH:MM:SS[.nnnnnnnnn] format\n */\n static parse(str: string): TimeValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new TimeValue(undefined);\n }\n\n const parsed = TimeValue.parseTime(trimmed);\n if (parsed === null) {\n throw new Error(`Cannot parse \"${str}\" as Time`);\n }\n\n return new TimeValue(parsed);\n }\n\n /**\n * Get the hour component (0-23)\n */\n hour(): number | undefined {\n if (this.value === undefined) return undefined;\n return Number(this.value / TimeValue.NANOS_PER_HOUR);\n }\n\n /**\n * Get the minute component (0-59)\n */\n minute(): number | undefined {\n if (this.value === undefined) return undefined;\n const remainingAfterHours = this.value % TimeValue.NANOS_PER_HOUR;\n return Number(remainingAfterHours / TimeValue.NANOS_PER_MINUTE);\n }\n\n /**\n * Get the second component (0-59)\n */\n second(): number | undefined {\n if (this.value === undefined) return undefined;\n const remainingAfterHours = this.value % TimeValue.NANOS_PER_HOUR;\n const remainingAfterMinutes = remainingAfterHours % TimeValue.NANOS_PER_MINUTE;\n return Number(remainingAfterMinutes / TimeValue.NANOS_PER_SECOND);\n }\n\n /**\n * Get the nanosecond component (0-999999999)\n */\n nanosecond(): number | undefined {\n if (this.value === undefined) return undefined;\n return Number(this.value % TimeValue.NANOS_PER_SECOND);\n }\n\n /**\n * Convert to nanoseconds since midnight for storage\n */\n toNanosSinceMidnight(): bigint | undefined {\n return this.value;\n }\n\n /**\n * Create from nanoseconds since midnight\n */\n static fromNanosSinceMidnight(nanos: bigint | number): TimeValue {\n return new TimeValue(typeof nanos === 'number' ? BigInt(nanos) : nanos);\n }\n\n /**\n * Format as HH:MM:SS.nnnnnnnnn string\n */\n toString(): string {\n if (this.value === undefined) {\n return 'none';\n }\n\n const hour = this.hour()!;\n const minute = this.minute()!;\n const second = this.second()!;\n const nano = this.nanosecond()!;\n\n const hourStr = String(hour).padStart(2, '0');\n const minuteStr = String(minute).padStart(2, '0');\n const secondStr = String(second).padStart(2, '0');\n const nanoStr = String(nano).padStart(9, '0');\n\n return `${hourStr}:${minuteStr}:${secondStr}.${nanoStr}`;\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n /**\n * Helper to parse HH:MM:SS[.nnnnnnnnn] format\n */\n private static parseTime(str: string): bigint | null {\n // Match HH:MM:SS or HH:MM:SS.fractional\n const match = str.match(/^(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,9}))?$/);\n if (!match) {\n return null;\n }\n\n const hour = parseInt(match[1], 10);\n const minute = parseInt(match[2], 10);\n const second = parseInt(match[3], 10);\n \n // Parse fractional seconds if present\n let nano = 0;\n if (match[4]) {\n // Pad or truncate to 9 digits\n const fracStr = match[4].padEnd(9, '0').substring(0, 9);\n nano = parseInt(fracStr, 10);\n }\n\n // Validate ranges\n if (hour < 0 || hour > 23) {\n return null;\n }\n if (minute < 0 || minute > 59) {\n return null;\n }\n if (second < 0 || second > 59) {\n return null;\n }\n\n const nanos = BigInt(hour) * TimeValue.NANOS_PER_HOUR +\n BigInt(minute) * TimeValue.NANOS_PER_MINUTE +\n BigInt(second) * TimeValue.NANOS_PER_SECOND +\n BigInt(nano);\n\n return nanos;\n }\n\n /**\n * Compare two Time values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherTime = other as TimeValue;\n return this.value === otherTime.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\nimport {DateValue} from \"./date\";\nimport {TimeValue} from \"./time\";\n\n/**\n * A date and time value with nanosecond precision.\n * Always in UTC timezone.\n * Internally stored as months, days, and nanoseconds.\n */\nexport class DateTimeValue implements Value {\n readonly type: Type = \"DateTime\" as const;\n private readonly months?: number; // years*12 + months \n private readonly days?: number; // day of month (1-31)\n private readonly nanos?: bigint; // nanoseconds since midnight\n\n constructor(value?: Date | string | number | bigint) {\n if (value !== undefined) {\n if (value instanceof Date) {\n // Store as UTC with millisecond precision from Date\n const year = value.getUTCFullYear();\n const month = value.getUTCMonth() + 1;\n const day = value.getUTCDate();\n const hour = value.getUTCHours();\n const minute = value.getUTCMinutes();\n const second = value.getUTCSeconds();\n const millis = value.getUTCMilliseconds();\n\n this.months = year * 12 + (month - 1);\n this.days = day;\n this.nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(millis) * 1_000_000n;\n } else if (typeof value === 'string') {\n // Parse ISO 8601 format\n const parsed = DateTimeValue.parseDateTime(value);\n if (!parsed) {\n throw new Error(`Invalid datetime string: ${value}`);\n }\n this.months = parsed.months;\n this.days = parsed.days;\n this.nanos = parsed.nanos;\n } else if (typeof value === 'number') {\n // Interpret as milliseconds since epoch\n const date = new Date(value);\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n const hour = date.getUTCHours();\n const minute = date.getUTCMinutes();\n const second = date.getUTCSeconds();\n const millis = date.getUTCMilliseconds();\n\n this.months = year * 12 + (month - 1);\n this.days = day;\n this.nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(millis) * 1_000_000n;\n } else if (typeof value === 'bigint') {\n // Interpret as nanoseconds since epoch\n const millis = Number(value / 1_000_000n);\n const extraNanos = value % 1_000_000n;\n const date = new Date(millis);\n\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n const hour = date.getUTCHours();\n const minute = date.getUTCMinutes();\n const second = date.getUTCSeconds();\n const dateMillis = date.getUTCMilliseconds();\n\n this.months = year * 12 + (month - 1);\n this.days = day;\n this.nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(dateMillis) * 1_000_000n +\n extraNanos;\n } else {\n throw new Error(`DateTime value must be a Date, string, number, or bigint, got ${typeof value}`);\n }\n } else {\n this.months = undefined;\n this.days = undefined;\n this.nanos = undefined;\n }\n }\n\n /**\n * Create a DateTimeValue from year, month, day, hour, minute, second, nanosecond\n */\n static fromYMDHMSN(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number,\n nano: number = 0\n ): DateTimeValue {\n // Validate inputs\n if (hour < 0 || hour > 23) {\n throw new Error(`Invalid hour: ${hour}`);\n }\n if (minute < 0 || minute > 59) {\n throw new Error(`Invalid minute: ${minute}`);\n }\n if (second < 0 || second > 59) {\n throw new Error(`Invalid second: ${second}`);\n }\n if (nano < 0 || nano > 999_999_999) {\n throw new Error(`Invalid nanosecond: ${nano}`);\n }\n\n // Validate the date\n if (!DateTimeValue.isValidDate(year, month, day)) {\n throw new Error(`Invalid datetime: ${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')} ${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}:${String(second).padStart(2, '0')}`);\n }\n\n const result = new DateTimeValue(undefined);\n (result as any).months = year * 12 + (month - 1);\n (result as any).days = day;\n (result as any).nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(nano);\n return result;\n }\n\n /**\n * Create a DateTimeValue from year, month, day, hour, minute, second (no fractional)\n */\n static fromYMDHMS(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number\n ): DateTimeValue {\n return DateTimeValue.fromYMDHMSN(year, month, day, hour, minute, second, 0);\n }\n\n /**\n * Create from Unix timestamp in seconds\n */\n static fromTimestamp(seconds: number): DateTimeValue {\n return new DateTimeValue(seconds * 1000);\n }\n\n /**\n * Create from Unix timestamp in milliseconds\n */\n static fromTimestampMillis(millis: number): DateTimeValue {\n return new DateTimeValue(millis);\n }\n\n /**\n * Create from nanoseconds since Unix epoch\n */\n static fromNanosSinceEpoch(nanos: bigint): DateTimeValue {\n return new DateTimeValue(nanos);\n }\n\n /**\n * Create from separate seconds and nanoseconds\n */\n static fromParts(seconds: number, nanos: number): DateTimeValue {\n if (nanos < 0 || nanos > 999_999_999) {\n throw new Error(`Invalid nanoseconds: ${nanos}`);\n }\n const millis = seconds * 1000 + Math.floor(nanos / 1_000_000);\n const extraNanos = nanos % 1_000_000;\n const result = new DateTimeValue(millis);\n\n // Add the extra nanoseconds\n if (result.nanos !== undefined) {\n (result as any).nanos = result.nanos + BigInt(extraNanos);\n }\n return result;\n }\n\n /**\n * Get current datetime\n */\n static now(): DateTimeValue {\n return new DateTimeValue(new Date());\n }\n\n /**\n * Get default datetime (Unix epoch)\n */\n static default(): DateTimeValue {\n return DateTimeValue.fromYMDHMS(1970, 1, 1, 0, 0, 0);\n }\n\n /**\n * Parse a datetime string in ISO 8601 format\n */\n static parse(str: string): DateTimeValue {\n const trimmed = str.trim();\n\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new DateTimeValue(undefined);\n }\n\n const parsed = DateTimeValue.parseDateTime(trimmed);\n if (!parsed) {\n throw new Error(`Cannot parse \"${str}\" as DateTime`);\n }\n\n const result = new DateTimeValue(undefined);\n (result as any).months = parsed.months;\n (result as any).days = parsed.days;\n (result as any).nanos = parsed.nanos;\n return result;\n }\n\n /**\n * Get Unix timestamp in seconds\n */\n timestamp(): number | undefined {\n const date = this.valueOf();\n if (date === undefined) return undefined;\n return Math.floor(date.getTime() / 1000);\n }\n\n /**\n * Get Unix timestamp in nanoseconds\n */\n timestampNanos(): bigint | undefined {\n const date = this.valueOf();\n if (date === undefined || this.nanos === undefined) return undefined;\n\n // Convert date to epoch nanoseconds\n const epochNanos = BigInt(date.getTime()) * 1_000_000n;\n\n // The nanos field stores time-of-day, but we already included millis in epochNanos\n // So we need to add only the sub-millisecond portion\n const subMillisNanos = this.nanos % 1_000_000n;\n\n return epochNanos + subMillisNanos;\n }\n\n /**\n * Convert to nanoseconds since Unix epoch for storage\n */\n toNanosSinceEpoch(): bigint | undefined {\n return this.timestampNanos();\n }\n\n /**\n * Get separate seconds and nanoseconds for storage\n */\n toParts(): [number, number] | undefined {\n const date = this.valueOf();\n if (date === undefined || this.nanos === undefined) return undefined;\n\n const seconds = Math.floor(date.getTime() / 1000);\n const millis = date.getTime() % 1000;\n const subMillisNanos = Number(this.nanos % 1_000_000n);\n const nanos = millis * 1_000_000 + subMillisNanos;\n return [seconds, nanos];\n }\n\n /**\n * Get the date component\n */\n date(): DateValue | undefined {\n if (this.months === undefined || this.days === undefined) return undefined;\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n return DateValue.fromYMD(year, month, this.days);\n }\n\n /**\n * Get the time component\n */\n time(): TimeValue | undefined {\n if (this.nanos === undefined) return undefined;\n return new TimeValue(this.nanos);\n }\n\n /**\n * Format as ISO 8601 string with nanosecond precision and Z suffix\n */\n toString(): string {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return 'none';\n }\n\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = String(m + 1).padStart(2, '0');\n const day = String(this.days).padStart(2, '0');\n\n // Extract time components from nanos\n const totalNanos = this.nanos;\n const hours = totalNanos / 3_600_000_000_000n;\n const remainingAfterHours = totalNanos % 3_600_000_000_000n;\n const minutes = remainingAfterHours / 60_000_000_000n;\n const remainingAfterMinutes = remainingAfterHours % 60_000_000_000n;\n const seconds = remainingAfterMinutes / 1_000_000_000n;\n const nanosFraction = remainingAfterMinutes % 1_000_000_000n;\n\n const hour = String(Number(hours)).padStart(2, '0');\n const minute = String(Number(minutes)).padStart(2, '0');\n const second = String(Number(seconds)).padStart(2, '0');\n const nanoStr = String(Number(nanosFraction)).padStart(9, '0');\n\n // Handle negative years (BC dates)\n let yearStr: string;\n if (year < 0) {\n const absYear = Math.abs(year);\n yearStr = `-${String(absYear).padStart(4, '0')}`;\n } else {\n yearStr = String(year).padStart(4, '0');\n }\n\n return `${yearStr}-${month}-${day}T${hour}:${minute}:${second}.${nanoStr}Z`;\n }\n\n valueOf(): Date | undefined {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return undefined;\n }\n\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n\n // Extract time components\n const totalNanos = this.nanos;\n const hours = Number(totalNanos / 3_600_000_000_000n);\n const remainingAfterHours = totalNanos % 3_600_000_000_000n;\n const minutes = Number(remainingAfterHours / 60_000_000_000n);\n const remainingAfterMinutes = remainingAfterHours % 60_000_000_000n;\n const seconds = Number(remainingAfterMinutes / 1_000_000_000n);\n const nanosFraction = remainingAfterMinutes % 1_000_000_000n;\n const millis = Number(nanosFraction / 1_000_000n);\n\n // Handle years < 100 specially\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, this.days, hours, minutes, seconds, millis));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, this.days, hours, minutes, seconds, millis));\n }\n\n return date;\n }\n\n /**\n * Get the internal representation as a Date\n */\n get value(): Date | undefined {\n return this.valueOf();\n }\n\n /**\n * Helper to parse ISO 8601 datetime format\n */\n private static parseDateTime(str: string): { months: number; days: number; nanos: bigint } | null {\n // Match ISO 8601 format: YYYY-MM-DDTHH:MM:SS[.nnnnnnnnn]Z\n const match = str.match(/^(-?\\d{1,4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,9}))?Z$/);\n if (!match) {\n return null;\n }\n\n const year = parseInt(match[1], 10);\n const month = parseInt(match[2], 10);\n const day = parseInt(match[3], 10);\n const hour = parseInt(match[4], 10);\n const minute = parseInt(match[5], 10);\n const second = parseInt(match[6], 10);\n\n // Parse fractional seconds if present\n let nanosFraction = 0n;\n if (match[7]) {\n // Pad or truncate to 9 digits\n const fracStr = match[7].padEnd(9, '0').substring(0, 9);\n nanosFraction = BigInt(fracStr);\n }\n\n // Validate ranges\n if (month < 1 || month > 12) {\n return null;\n }\n if (day < 1 || day > 31) {\n return null;\n }\n if (hour < 0 || hour > 23) {\n return null;\n }\n if (minute < 0 || minute > 59) {\n return null;\n }\n if (second < 0 || second > 59) {\n return null;\n }\n\n // Validate the date is valid\n if (!DateTimeValue.isValidDate(year, month, day)) {\n return null;\n }\n\n const months = year * 12 + (month - 1);\n const nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n nanosFraction;\n\n return {months, days: day, nanos};\n }\n\n /**\n * Helper to validate a date\n */\n private static isValidDate(year: number, month: number, day: number): boolean {\n // Create a date and check if components match\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, day));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, day));\n }\n\n return date.getUTCFullYear() === year &&\n date.getUTCMonth() === month - 1 &&\n date.getUTCDate() === day;\n }\n\n /**\n * Compare two datetimes for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDateTime = other as DateTimeValue;\n if (this.months === undefined || otherDateTime.months === undefined) {\n return this.months === otherDateTime.months && \n this.days === otherDateTime.days && \n this.nanos === otherDateTime.nanos;\n }\n \n return this.months === otherDateTime.months && \n this.days === otherDateTime.days && \n this.nanos === otherDateTime.nanos;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class DecimalValue implements Value {\n readonly type: Type = \"Decimal\" as const;\n public readonly value?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`Decimal value must be a string, got ${typeof value}`);\n }\n this.value = value;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): DecimalValue {\n if (str === NONE_VALUE) {\n return new DecimalValue(undefined);\n }\n \n return new DecimalValue(str);\n }\n\n valueOf(): string | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value;\n }\n\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDecimal = other as DecimalValue;\n return this.value === otherDecimal.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Float4Value implements Value {\n\n private static readonly MAX_VALUE = 3.4028235e+38;\n private static readonly MIN_VALUE = -3.4028235e+38;\n private static readonly MIN_POSITIVE = 1.175494e-38;\n\n readonly type: Type = \"Float4\" as const;\n public readonly value?: number;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (typeof value !== 'number') {\n throw new Error(`Float4 value must be a number, got ${typeof value}`);\n }\n\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n this.value = undefined;\n } else {\n // Clamp to Float32 range\n if (value !== 0 && Math.abs(value) < Float4Value.MIN_POSITIVE) {\n // Underflow to zero\n this.value = 0;\n } else if (value > Float4Value.MAX_VALUE) {\n throw new Error(`Float4 overflow: value ${value} exceeds maximum ${Float4Value.MAX_VALUE}`);\n } else if (value < Float4Value.MIN_VALUE) {\n throw new Error(`Float4 underflow: value ${value} exceeds minimum ${Float4Value.MIN_VALUE}`);\n } else {\n // Convert to Float32 precision\n const float32Array = new Float32Array(1);\n float32Array[0] = value;\n this.value = float32Array[0];\n }\n }\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Float4Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Float4Value(undefined);\n }\n\n const num = Number(trimmed);\n\n if (Number.isNaN(num) && trimmed.toLowerCase() !== 'nan') {\n throw new Error(`Cannot parse \"${str}\" as Float4`);\n }\n\n return new Float4Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Float4 values for equality with limited precision\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherFloat = other as Float4Value;\n if (this.value === undefined || otherFloat.value === undefined) {\n return this.value === otherFloat.value;\n }\n \n // For Float4, use approximate comparison due to limited precision\n const epsilon = 1e-6; // Float32 has about 7 decimal digits of precision\n return Math.abs(this.value - otherFloat.value) <= epsilon;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Float8Value implements Value {\n readonly type: Type = \"Float8\" as const;\n public readonly value?: number;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (typeof value !== 'number') {\n throw new Error(`Float8 value must be a number, got ${typeof value}`);\n }\n this.value = value;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Float8Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Float8Value(undefined);\n }\n\n const num = Number(trimmed);\n\n if (Number.isNaN(num) && trimmed.toLowerCase() !== 'nan') {\n throw new Error(`Cannot parse \"${str}\" as Float8`);\n }\n\n return new Float8Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Float8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherFloat = other as Float8Value;\n return this.value === otherFloat.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int1Value implements Value {\n readonly type: Type = \"Int1\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = -128;\n private static readonly MAX_VALUE = 127;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Int1 value must be an integer, got ${value}`);\n }\n if (value < Int1Value.MIN_VALUE || value > Int1Value.MAX_VALUE) {\n throw new Error(`Int1 value must be between ${Int1Value.MIN_VALUE} and ${Int1Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Int1Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int1Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Int1`);\n }\n \n return new Int1Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int1 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int1Value;\n return this.value === otherInt.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int2Value implements Value {\n readonly type: Type = \"Int2\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = -32768;\n private static readonly MAX_VALUE = 32767;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Int2 value must be an integer, got ${value}`);\n }\n if (value < Int2Value.MIN_VALUE || value > Int2Value.MAX_VALUE) {\n throw new Error(`Int2 value must be between ${Int2Value.MIN_VALUE} and ${Int2Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Int2Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int2Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Int2`);\n }\n \n return new Int2Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int2 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int2Value;\n return this.value === otherInt.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int4Value implements Value {\n readonly type: Type = \"Int4\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = -2147483648;\n private static readonly MAX_VALUE = 2147483647;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Int4 value must be an integer, got ${value}`);\n }\n if (value < Int4Value.MIN_VALUE || value > Int4Value.MAX_VALUE) {\n throw new Error(`Int4 value must be between ${Int4Value.MIN_VALUE} and ${Int4Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Int4Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int4Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Int4`);\n }\n \n return new Int4Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int4 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int4Value;\n return this.value === otherInt.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int8Value implements Value {\n readonly type: Type = \"Int8\" as const;\n public readonly value?: bigint;\n\n private static readonly MIN_VALUE = BigInt(\"-9223372036854775808\");\n private static readonly MAX_VALUE = BigInt(\"9223372036854775807\");\n\n constructor(value?: bigint | number) {\n if (value !== undefined) {\n const bigintValue = typeof value === 'number' ? BigInt(Math.trunc(value)) : value;\n \n if (bigintValue < Int8Value.MIN_VALUE || bigintValue > Int8Value.MAX_VALUE) {\n throw new Error(`Int8 value must be between ${Int8Value.MIN_VALUE} and ${Int8Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Int8Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int8Value(undefined);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Int8`);\n }\n \n if (value < Int8Value.MIN_VALUE || value > Int8Value.MAX_VALUE) {\n throw new Error(`Int8 value must be between ${Int8Value.MIN_VALUE} and ${Int8Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Int8Value(value);\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int8Value;\n return this.value === otherInt.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int16Value implements Value {\n readonly type: Type = \"Int16\" as const;\n public readonly value?: bigint;\n\n private static readonly MIN_VALUE = BigInt(\"-170141183460469231731687303715884105728\");\n private static readonly MAX_VALUE = BigInt(\"170141183460469231731687303715884105727\");\n\n constructor(value?: bigint | number | string) {\n if (value !== undefined) {\n let bigintValue: bigint;\n \n if (typeof value === 'string') {\n try {\n bigintValue = BigInt(value);\n } catch (e) {\n throw new Error(`Int16 value must be a valid integer, got ${value}`);\n }\n } else if (typeof value === 'number') {\n bigintValue = BigInt(Math.trunc(value));\n } else {\n bigintValue = value;\n }\n \n if (bigintValue < Int16Value.MIN_VALUE || bigintValue > Int16Value.MAX_VALUE) {\n throw new Error(`Int16 value must be between ${Int16Value.MIN_VALUE} and ${Int16Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Int16Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int16Value(undefined);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Int16`);\n }\n \n if (value < Int16Value.MIN_VALUE || value > Int16Value.MAX_VALUE) {\n throw new Error(`Int16 value must be between ${Int16Value.MIN_VALUE} and ${Int16Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Int16Value(value);\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int16 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int16Value;\n return this.value === otherInt.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A duration value representing a time span or elapsed time.\n * Internally stored as months, days, and nanoseconds.\n */\nexport class DurationValue implements Value {\n readonly type: Type = \"Duration\" as const;\n private readonly months?: number; // years*12 + months\n private readonly days?: number; // separate days (don't normalize due to variable month length)\n private readonly nanos?: bigint; // all time components as nanoseconds\n\n constructor(value?: { months: number; days: number; nanos: bigint } | string) {\n if (value !== undefined) {\n if (typeof value === 'string') {\n // Parse ISO 8601 duration format\n const parsed = DurationValue.parseDuration(value);\n if (!parsed) {\n throw new Error(`Invalid duration string: ${value}`);\n }\n this.months = parsed.months;\n this.days = parsed.days;\n this.nanos = parsed.nanos;\n } else if (typeof value === 'object' && value !== null) {\n this.months = value.months;\n this.days = value.days;\n this.nanos = value.nanos;\n } else {\n throw new Error(`Duration value must be an object or string, got ${typeof value}`);\n }\n } else {\n this.months = undefined;\n this.days = undefined;\n this.nanos = undefined;\n }\n }\n\n /**\n * Create a new duration from months, days, and nanoseconds\n */\n static new(months: number, days: number, nanos: bigint): DurationValue {\n return new DurationValue({ months, days, nanos });\n }\n\n /**\n * Create a duration from seconds\n */\n static fromSeconds(seconds: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(seconds) * 1_000_000_000n });\n }\n\n /**\n * Create a duration from milliseconds\n */\n static fromMilliseconds(milliseconds: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(milliseconds) * 1_000_000n });\n }\n\n /**\n * Create a duration from microseconds\n */\n static fromMicroseconds(microseconds: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(microseconds) * 1_000n });\n }\n\n /**\n * Create a duration from nanoseconds\n */\n static fromNanoseconds(nanoseconds: bigint): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: nanoseconds });\n }\n\n /**\n * Create a duration from minutes\n */\n static fromMinutes(minutes: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(minutes) * 60n * 1_000_000_000n });\n }\n\n /**\n * Create a duration from hours\n */\n static fromHours(hours: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(hours) * 60n * 60n * 1_000_000_000n });\n }\n\n /**\n * Create a duration from days\n */\n static fromDays(days: number): DurationValue {\n return new DurationValue({ months: 0, days, nanos: 0n });\n }\n\n /**\n * Create a duration from weeks\n */\n static fromWeeks(weeks: number): DurationValue {\n return new DurationValue({ months: 0, days: weeks * 7, nanos: 0n });\n }\n\n /**\n * Create a duration from months\n */\n static fromMonths(months: number): DurationValue {\n return new DurationValue({ months, days: 0, nanos: 0n });\n }\n\n /**\n * Create a duration from years\n */\n static fromYears(years: number): DurationValue {\n return new DurationValue({ months: years * 12, days: 0, nanos: 0n });\n }\n\n /**\n * Create a zero duration\n */\n static zero(): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: 0n });\n }\n\n /**\n * Get default duration (zero)\n */\n static default(): DurationValue {\n return DurationValue.zero();\n }\n\n /**\n * Parse a duration string in ISO 8601 duration format\n */\n static parse(str: string): DurationValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new DurationValue(undefined);\n }\n\n const parsed = DurationValue.parseDuration(trimmed);\n if (!parsed) {\n throw new Error(`Cannot parse \"${str}\" as Duration`);\n }\n\n return new DurationValue({ months: parsed.months, days: parsed.days, nanos: parsed.nanos });\n }\n\n /**\n * Get total seconds (truncated)\n */\n seconds(): bigint | undefined {\n if (this.nanos === undefined) return undefined;\n return this.nanos / 1_000_000_000n;\n }\n\n /**\n * Get total milliseconds (truncated)\n */\n milliseconds(): bigint | undefined {\n if (this.nanos === undefined) return undefined;\n return this.nanos / 1_000_000n;\n }\n\n /**\n * Get total microseconds (truncated)\n */\n microseconds(): bigint | undefined {\n if (this.nanos === undefined) return undefined;\n return this.nanos / 1_000n;\n }\n\n /**\n * Get total nanoseconds\n */\n nanoseconds(): bigint | undefined {\n return this.nanos;\n }\n\n /**\n * Get months component\n */\n getMonths(): number | undefined {\n return this.months;\n }\n\n /**\n * Get days component\n */\n getDays(): number | undefined {\n return this.days;\n }\n\n /**\n * Get nanoseconds component\n */\n getNanos(): bigint | undefined {\n return this.nanos;\n }\n\n /**\n * Check if duration is positive (any component > 0)\n */\n isPositive(): boolean {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return false;\n }\n return this.months > 0 || this.days > 0 || this.nanos > 0n;\n }\n\n /**\n * Check if duration is negative (any component < 0)\n */\n isNegative(): boolean {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return false;\n }\n return this.months < 0 || this.days < 0 || this.nanos < 0n;\n }\n\n /**\n * Get absolute value of duration\n */\n abs(): DurationValue {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return new DurationValue(undefined);\n }\n return new DurationValue({\n months: Math.abs(this.months),\n days: Math.abs(this.days),\n nanos: this.nanos < 0n ? -this.nanos : this.nanos\n });\n }\n\n /**\n * Negate the duration\n */\n negate(): DurationValue {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return new DurationValue(undefined);\n }\n return new DurationValue({\n months: -this.months,\n days: -this.days,\n nanos: -this.nanos\n });\n }\n\n /**\n * Format as ISO 8601 duration string\n */\n toIsoString(): string {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return 'none';\n }\n\n // Handle zero duration\n if (this.months === 0 && this.days === 0 && this.nanos === 0n) {\n return 'PT0S';\n }\n\n let result = 'P';\n\n // Extract years and months\n const years = Math.floor(this.months / 12);\n const months = this.months % 12;\n\n if (years !== 0) {\n result += `${years}Y`;\n }\n\n if (months !== 0) {\n result += `${months}M`;\n }\n\n // Time components from nanos with normalization\n const totalSeconds = this.nanos / 1_000_000_000n;\n const remainingNanos = this.nanos % 1_000_000_000n;\n\n // Normalize to days if hours >= 24\n const extraDays = totalSeconds / 86400n; // 24 * 60 * 60\n const remainingSeconds = totalSeconds % 86400n;\n\n const displayDays = this.days + Number(extraDays);\n const hours = remainingSeconds / 3600n;\n const minutes = (remainingSeconds % 3600n) / 60n;\n const seconds = remainingSeconds % 60n;\n\n if (displayDays !== 0) {\n result += `${displayDays}D`;\n }\n\n // Add time components if any\n if (hours !== 0n || minutes !== 0n || seconds !== 0n || remainingNanos !== 0n) {\n result += 'T';\n\n if (hours !== 0n) {\n result += `${hours}H`;\n }\n\n if (minutes !== 0n) {\n result += `${minutes}M`;\n }\n\n if (seconds !== 0n || remainingNanos !== 0n) {\n if (remainingNanos !== 0n) {\n // Format fractional seconds with trailing zeros removed\n const fractional = Number(remainingNanos) / 1_000_000_000;\n const totalSecondsFloat = Number(seconds) + fractional;\n // Format with 9 decimal places then remove trailing zeros\n const formatted = totalSecondsFloat.toFixed(9).replace(/0+$/, '').replace(/\\.$/, '');\n result += `${formatted}S`;\n } else {\n result += `${seconds}S`;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Format as human-readable duration string\n * Examples: \"1 year 2 mons 3 days 04:05:06.789\", \"3 days\", \"00:00:01.5\"\n */\n toString(): string {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return 'none';\n }\n\n // Handle zero duration\n if (this.months === 0 && this.days === 0 && this.nanos === 0n) {\n return '00:00:00';\n }\n\n const parts: string[] = [];\n\n // Extract years and months\n const years = Math.floor(this.months / 12);\n const months = this.months % 12;\n\n if (years !== 0) {\n parts.push(years === 1 ? '1 year' : `${years} years`);\n }\n\n if (months !== 0) {\n parts.push(months === 1 ? '1 mon' : `${months} mons`);\n }\n\n // Time components from nanos with normalization\n const totalSeconds = this.nanos / 1_000_000_000n;\n const remainingNanos = this.nanos % 1_000_000_000n;\n\n // Normalize to days if hours >= 24\n const extraDays = totalSeconds / 86400n; // 24 * 60 * 60\n const remainingSeconds = totalSeconds % 86400n;\n\n const displayDays = this.days + Number(extraDays);\n const hours = remainingSeconds / 3600n;\n const minutes = (remainingSeconds % 3600n) / 60n;\n const seconds = remainingSeconds % 60n;\n\n if (displayDays !== 0) {\n parts.push(displayDays === 1 ? '1 day' : `${displayDays} days`);\n }\n\n // Format time components as HH:MM:SS[.ffffff]\n if (hours !== 0n || minutes !== 0n || seconds !== 0n || remainingNanos !== 0n || parts.length === 0) {\n const hoursStr = String(hours).padStart(2, '0');\n const minutesStr = String(minutes).padStart(2, '0');\n\n let secondsStr: string;\n if (remainingNanos !== 0n) {\n // Format fractional seconds with trailing zeros removed\n const fractional = Number(remainingNanos) / 1_000_000_000;\n const totalSecondsFloat = Number(seconds) + fractional;\n // Format with 9 decimal places then remove trailing zeros\n const formatted = totalSecondsFloat.toFixed(9).replace(/0+$/, '').replace(/\\.$/, '');\n // Split into whole and fractional parts to pad the whole part correctly\n const dotIndex = formatted.indexOf('.');\n if (dotIndex >= 0) {\n const wholePart = formatted.substring(0, dotIndex).padStart(2, '0');\n const fractionalPart = formatted.substring(dotIndex);\n secondsStr = wholePart + fractionalPart;\n } else {\n secondsStr = formatted.padStart(2, '0');\n }\n } else {\n secondsStr = String(seconds).padStart(2, '0');\n }\n\n parts.push(`${hoursStr}:${minutesStr}:${secondsStr}`);\n }\n\n return parts.join(' ');\n }\n\n valueOf(): { months: number; days: number; nanos: bigint } | undefined {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return undefined;\n }\n return { months: this.months, days: this.days, nanos: this.nanos };\n }\n\n /**\n * Get the internal representation\n */\n get value(): { months: number; days: number; nanos: bigint } | undefined {\n return this.valueOf();\n }\n\n /**\n * Helper to parse ISO 8601 duration format\n */\n private static parseDuration(str: string): { months: number; days: number; nanos: bigint } | null {\n // Match ISO 8601 duration format: P[n]Y[n]M[n]DT[n]H[n]M[n.n]S\n // Also handle negative durations\n const negative = str.startsWith('-');\n const cleanStr = negative ? str.substring(1) : str;\n \n if (!cleanStr.startsWith('P')) {\n return null;\n }\n\n const match = cleanStr.match(/^P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?)?$/);\n if (!match) {\n return null;\n }\n \n // Check if the match has at least one value\n if (!match[1] && !match[2] && !match[3] && !match[4] && !match[5] && !match[6]) {\n return null; // Invalid: P without any values\n }\n\n const years = parseInt(match[1] || '0', 10);\n const months = parseInt(match[2] || '0', 10);\n const days = parseInt(match[3] || '0', 10);\n const hours = parseInt(match[4] || '0', 10);\n const minutes = parseInt(match[5] || '0', 10);\n const secondsStr = match[6] || '0';\n\n // Parse seconds and fractional seconds\n const secondsParts = secondsStr.split('.');\n const wholeSeconds = parseInt(secondsParts[0] || '0', 10);\n let fracNanos = 0n;\n if (secondsParts.length > 1) {\n // Pad fractional part to 9 digits\n const fracStr = secondsParts[1].padEnd(9, '0').substring(0, 9);\n fracNanos = BigInt(fracStr);\n }\n\n // Calculate total nanoseconds\n const totalNanos = BigInt(hours) * 3600n * 1_000_000_000n +\n BigInt(minutes) * 60n * 1_000_000_000n +\n BigInt(wholeSeconds) * 1_000_000_000n +\n fracNanos;\n\n const totalMonths = years * 12 + months;\n\n if (negative) {\n return {\n months: -totalMonths,\n days: -days,\n nanos: -totalNanos\n };\n } else {\n return {\n months: totalMonths,\n days: days,\n nanos: totalNanos\n };\n }\n }\n\n /**\n * Compare two durations for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDuration = other as DurationValue;\n if (this.months === undefined || otherDuration.months === undefined) {\n return this.months === otherDuration.months && \n this.days === otherDuration.days && \n this.nanos === otherDuration.nanos;\n }\n \n return this.months === otherDuration.months && \n this.days === otherDuration.days && \n this.nanos === otherDuration.nanos;\n }\n\n toJSON(): string {\n return this.value === undefined ? NONE_VALUE : this.toIsoString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toIsoString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint1Value implements Value {\n readonly type: Type = \"Uint1\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = 0;\n private static readonly MAX_VALUE = 255;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Uint1 value must be an integer, got ${value}`);\n }\n if (value < Uint1Value.MIN_VALUE || value > Uint1Value.MAX_VALUE) {\n throw new Error(`Uint1 value must be between ${Uint1Value.MIN_VALUE} and ${Uint1Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Uint1Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint1Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Uint1`);\n }\n \n return new Uint1Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint1 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint1Value;\n return this.value === otherUint.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint2Value implements Value {\n readonly type: Type = \"Uint2\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = 0;\n private static readonly MAX_VALUE = 65535;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Uint2 value must be an integer, got ${value}`);\n }\n if (value < Uint2Value.MIN_VALUE || value > Uint2Value.MAX_VALUE) {\n throw new Error(`Uint2 value must be between ${Uint2Value.MIN_VALUE} and ${Uint2Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Uint2Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint2Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Uint2`);\n }\n \n return new Uint2Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint2 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint2Value;\n return this.value === otherUint.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint4Value implements Value {\n readonly type: Type = \"Uint4\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = 0;\n private static readonly MAX_VALUE = 4294967295;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Uint4 value must be an integer, got ${value}`);\n }\n if (value < Uint4Value.MIN_VALUE || value > Uint4Value.MAX_VALUE) {\n throw new Error(`Uint4 value must be between ${Uint4Value.MIN_VALUE} and ${Uint4Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Uint4Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint4Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Uint4`);\n }\n \n return new Uint4Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint4 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint4Value;\n return this.value === otherUint.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint8Value implements Value {\n readonly type: Type = \"Uint8\" as const;\n public readonly value?: bigint;\n\n private static readonly MIN_VALUE = BigInt(0);\n private static readonly MAX_VALUE = BigInt(\"18446744073709551615\");\n\n constructor(value?: bigint | number) {\n if (value !== undefined) {\n const bigintValue = typeof value === 'number' ? BigInt(Math.trunc(value)) : value;\n \n if (bigintValue < Uint8Value.MIN_VALUE || bigintValue > Uint8Value.MAX_VALUE) {\n throw new Error(`Uint8 value must be between ${Uint8Value.MIN_VALUE} and ${Uint8Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Uint8Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint8Value(undefined);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Uint8`);\n }\n \n if (value < Uint8Value.MIN_VALUE || value > Uint8Value.MAX_VALUE) {\n throw new Error(`Uint8 value must be between ${Uint8Value.MIN_VALUE} and ${Uint8Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Uint8Value(value);\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n toNumber(): number | undefined {\n if (this.value === undefined) return undefined;\n return Number(this.value);\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint8Value;\n return this.value === otherUint.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint16Value implements Value {\n readonly type: Type = \"Uint16\" as const;\n public readonly value?: bigint;\n\n private static readonly MIN_VALUE = BigInt(0);\n private static readonly MAX_VALUE = BigInt(\"340282366920938463463374607431768211455\");\n\n constructor(value?: bigint | number | string) {\n if (value !== undefined) {\n let bigintValue: bigint;\n \n if (typeof value === 'string') {\n try {\n bigintValue = BigInt(value);\n } catch (e) {\n throw new Error(`Uint16 value must be a valid integer, got ${value}`);\n }\n } else if (typeof value === 'number') {\n bigintValue = BigInt(Math.trunc(value));\n } else {\n bigintValue = value;\n }\n \n if (bigintValue < Uint16Value.MIN_VALUE || bigintValue > Uint16Value.MAX_VALUE) {\n throw new Error(`Uint16 value must be between ${Uint16Value.MIN_VALUE} and ${Uint16Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Uint16Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint16Value(undefined);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Uint16`);\n }\n \n if (value < Uint16Value.MIN_VALUE || value > Uint16Value.MAX_VALUE) {\n throw new Error(`Uint16 value must be between ${Uint16Value.MIN_VALUE} and ${Uint16Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Uint16Value(value);\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint16 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint16Value;\n return this.value === otherUint.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {BaseType, Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class NoneValue implements Value {\n readonly type: Type = \"None\" as const;\n public readonly innerType: BaseType;\n\n constructor(innerType?: BaseType) {\n this.innerType = innerType ?? \"None\";\n }\n\n static parse(str: string, innerType?: BaseType): NoneValue {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE || trimmed === 'none') {\n return new NoneValue(innerType);\n }\n throw new Error(`Cannot parse \"${str}\" as None`);\n }\n\n isNone(): boolean {\n return true;\n }\n\n toString(): string {\n return 'none';\n }\n\n valueOf(): undefined {\n return undefined;\n }\n\n get value(): undefined {\n return undefined;\n }\n\n equals(other: Value): boolean {\n if (!(other instanceof NoneValue)) {\n return false;\n }\n return true;\n }\n\n compare(other: NoneValue): number {\n return 0;\n }\n\n encode(): TypeValuePair {\n return {\n type: \"None\",\n value: NONE_VALUE\n };\n }\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Utf8Value implements Value {\n readonly type: Type = \"Utf8\" as const;\n public readonly value?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`Utf8 value must be a string, got ${typeof value}`);\n }\n this.value = value;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Utf8Value {\n if (str === NONE_VALUE) {\n return new Utf8Value(undefined);\n }\n \n return new Utf8Value(str);\n }\n\n valueOf(): string | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value;\n }\n\n /**\n * Compare two Utf8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUtf8 = other as Utf8Value;\n return this.value === otherUtf8.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport { v4 as uuidv4, NIL as NIL_UUID, validate, version } from 'uuid';\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A UUID version 4 (random) value type\n */\nexport class Uuid4Value implements Value {\n readonly type: Type = \"Uuid4\" as const;\n private readonly uuid?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`Uuid4 value must be a string, got ${typeof value}`);\n }\n \n // Validate UUID format\n if (!validate(value)) {\n throw new Error(`Invalid UUID format: ${value}`);\n }\n \n // Check version (allow v4 or nil UUID)\n const ver = version(value);\n if (value !== NIL_UUID && ver !== 4) {\n throw new Error(`Invalid UUID version for Uuid4: expected v4, got v${ver}`);\n }\n \n this.uuid = value.toLowerCase();\n } else {\n this.uuid = undefined;\n }\n }\n\n /**\n * Generate a new random UUID v4\n */\n static generate(): Uuid4Value {\n return new Uuid4Value(uuidv4());\n }\n\n /**\n * Create a new Uuid4Value from a string\n */\n static new(uuid: string): Uuid4Value {\n return new Uuid4Value(uuid);\n }\n\n /**\n * Get the nil UUID (all zeros)\n */\n static nil(): Uuid4Value {\n return new Uuid4Value(NIL_UUID);\n }\n\n /**\n * Get default Uuid4Value (nil UUID)\n */\n static default(): Uuid4Value {\n return Uuid4Value.nil();\n }\n\n /**\n * Parse a UUID string\n */\n static parse(str: string): Uuid4Value {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uuid4Value(undefined);\n }\n\n // Try to parse as UUID\n if (!validate(trimmed)) {\n throw new Error(`Cannot parse \"${str}\" as Uuid4`);\n }\n\n const ver = version(trimmed);\n if (trimmed !== NIL_UUID && ver !== 4) {\n throw new Error(`Cannot parse \"${str}\" as Uuid4: wrong version (v${ver})`);\n }\n\n return new Uuid4Value(trimmed);\n }\n\n /**\n * Get the UUID string\n */\n asString(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the UUID as bytes (16-byte array)\n */\n asBytes(): Uint8Array | undefined {\n if (this.uuid === undefined) return undefined;\n \n // Remove hyphens and convert hex to bytes\n const hex = this.uuid.replace(/-/g, '');\n const bytes = new Uint8Array(16);\n for (let i = 0; i < 16; i++) {\n bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n }\n\n /**\n * Check if this is the nil UUID\n */\n isNil(): boolean {\n return this.uuid === NIL_UUID;\n }\n\n /**\n * Get the UUID version\n */\n getVersion(): number | undefined {\n if (this.uuid === undefined) return undefined;\n return version(this.uuid);\n }\n\n /**\n * Format as string\n */\n toString(): string {\n if (this.uuid === undefined) {\n return 'none';\n }\n return this.uuid;\n }\n\n valueOf(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the internal representation\n */\n get value(): string | undefined {\n return this.valueOf();\n }\n\n /**\n * Compare two UUID4 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUuid = other as Uuid4Value;\n return this.uuid === otherUuid.uuid;\n }\n\n /**\n * Compare two UUID4 values (for ordering)\n */\n compare(other: Uuid4Value): number {\n if (this.uuid === undefined || other.uuid === undefined) {\n if (this.uuid === other.uuid) return 0;\n if (this.uuid === undefined) return -1;\n return 1;\n }\n \n // Compare as bytes for consistent ordering\n const thisBytes = this.asBytes()!;\n const otherBytes = other.asBytes()!;\n \n for (let i = 0; i < 16; i++) {\n if (thisBytes[i] < otherBytes[i]) return -1;\n if (thisBytes[i] > otherBytes[i]) return 1;\n }\n \n return 0;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport { v7 as uuidv7, NIL as NIL_UUID, validate, version } from 'uuid';\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A UUID version 7 (timestamp-based) value type\n */\nexport class Uuid7Value implements Value {\n readonly type: Type = \"Uuid7\" as const;\n private readonly uuid?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`Uuid7 value must be a string, got ${typeof value}`);\n }\n \n // Validate UUID format\n if (!validate(value)) {\n throw new Error(`Invalid UUID format: ${value}`);\n }\n \n // Check version (allow v7 or nil UUID)\n const ver = version(value);\n if (value !== NIL_UUID && ver !== 7) {\n throw new Error(`Invalid UUID version for Uuid7: expected v7, got v${ver}`);\n }\n \n this.uuid = value.toLowerCase();\n } else {\n this.uuid = undefined;\n }\n }\n\n /**\n * Generate a new timestamp-based UUID v7\n */\n static generate(): Uuid7Value {\n return new Uuid7Value(uuidv7());\n }\n\n /**\n * Create a new Uuid7Value from a string\n */\n static new(uuid: string): Uuid7Value {\n return new Uuid7Value(uuid);\n }\n\n /**\n * Get the nil UUID (all zeros)\n */\n static nil(): Uuid7Value {\n return new Uuid7Value(NIL_UUID);\n }\n\n /**\n * Get default Uuid7Value (nil UUID)\n */\n static default(): Uuid7Value {\n return Uuid7Value.nil();\n }\n\n /**\n * Parse a UUID string\n */\n static parse(str: string): Uuid7Value {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uuid7Value(undefined);\n }\n\n // Try to parse as UUID\n if (!validate(trimmed)) {\n throw new Error(`Cannot parse \"${str}\" as Uuid7`);\n }\n\n const ver = version(trimmed);\n if (trimmed !== NIL_UUID && ver !== 7) {\n throw new Error(`Cannot parse \"${str}\" as Uuid7: wrong version (v${ver})`);\n }\n\n return new Uuid7Value(trimmed);\n }\n\n /**\n * Get the UUID string\n */\n asString(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the UUID as bytes (16-byte array)\n */\n asBytes(): Uint8Array | undefined {\n if (this.uuid === undefined) return undefined;\n \n // Remove hyphens and convert hex to bytes\n const hex = this.uuid.replace(/-/g, '');\n const bytes = new Uint8Array(16);\n for (let i = 0; i < 16; i++) {\n bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n }\n\n /**\n * Extract the timestamp from UUID v7 (milliseconds since Unix epoch)\n */\n getTimestamp(): number | undefined {\n if (this.uuid === undefined || this.uuid === NIL_UUID) return undefined;\n \n // UUID v7 has a 48-bit timestamp in the first 6 bytes\n const hex = this.uuid.replace(/-/g, '');\n const timestampHex = hex.substring(0, 12);\n const timestamp = parseInt(timestampHex, 16);\n return timestamp;\n }\n\n /**\n * Check if this is the nil UUID\n */\n isNil(): boolean {\n return this.uuid === NIL_UUID;\n }\n\n /**\n * Get the UUID version\n */\n getVersion(): number | undefined {\n if (this.uuid === undefined) return undefined;\n return version(this.uuid);\n }\n\n /**\n * Format as string\n */\n toString(): string {\n if (this.uuid === undefined) {\n return 'none';\n }\n return this.uuid;\n }\n\n valueOf(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the internal representation\n */\n get value(): string | undefined {\n return this.valueOf();\n }\n\n /**\n * Compare two UUID7 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUuid = other as Uuid7Value;\n return this.uuid === otherUuid.uuid;\n }\n\n /**\n * Compare two UUID7 values (for ordering)\n * UUID v7 has timestamp-based ordering for UUIDs generated close in time\n */\n compare(other: Uuid7Value): number {\n if (this.uuid === undefined || other.uuid === undefined) {\n if (this.uuid === other.uuid) return 0;\n if (this.uuid === undefined) return -1;\n return 1;\n }\n \n // Compare as bytes for consistent ordering\n const thisBytes = this.asBytes()!;\n const otherBytes = other.asBytes()!;\n \n for (let i = 0; i < 16; i++) {\n if (thisBytes[i] < otherBytes[i]) return -1;\n if (thisBytes[i] > otherBytes[i]) return 1;\n }\n \n return 0;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport { v7 as uuidv7, NIL as NIL_UUID, validate, version } from 'uuid';\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * An IdentityId value type that wraps a UUID v7\n */\nexport class IdentityIdValue implements Value {\n readonly type: Type = \"IdentityId\" as const;\n public readonly value?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`IdentityId value must be a string, got ${typeof value}`);\n }\n \n // Validate UUID format\n if (!validate(value)) {\n throw new Error(`Invalid UUID format for IdentityId: ${value}`);\n }\n \n // Check version (allow v7 or nil UUID)\n const ver = version(value);\n if (value !== NIL_UUID && ver !== 7) {\n throw new Error(`Invalid UUID version for IdentityId: expected v7, got v${ver}`);\n }\n \n this.value = value.toLowerCase();\n } else {\n this.value = undefined;\n }\n }\n\n /**\n * Generate a new IdentityId with a UUID v7\n */\n static generate(): IdentityIdValue {\n return new IdentityIdValue(uuidv7());\n }\n\n /**\n * Get the nil IdentityId (all zeros)\n */\n static nil(): IdentityIdValue {\n return new IdentityIdValue(NIL_UUID);\n }\n\n /**\n * Parse a string as an IdentityId\n */\n static parse(str: string): IdentityIdValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new IdentityIdValue(undefined);\n }\n\n // Try to parse as UUID\n if (!validate(trimmed)) {\n throw new Error(`Cannot parse \"${str}\" as IdentityId`);\n }\n\n const ver = version(trimmed);\n if (trimmed !== NIL_UUID && ver !== 7) {\n throw new Error(`Cannot parse \"${str}\" as IdentityId: wrong UUID version (v${ver})`);\n }\n\n return new IdentityIdValue(trimmed);\n }\n\n /**\n * Get the UUID string value\n */\n valueOf(): string | undefined {\n return this.value;\n }\n\n /**\n * Format as string\n */\n toString(): string {\n return this.value === undefined ? 'none' : this.value;\n }\n\n /**\n * Extract the timestamp from the UUID v7 (milliseconds since Unix epoch)\n */\n getTimestamp(): number | undefined {\n if (this.value === undefined || this.value === NIL_UUID) return undefined;\n \n // UUID v7 has a 48-bit timestamp in the first 6 bytes\n const hex = this.value.replace(/-/g, '');\n const timestampHex = hex.substring(0, 12);\n const timestamp = parseInt(timestampHex, 16);\n return timestamp;\n }\n\n /**\n * Check if this is the nil UUID\n */\n isNil(): boolean {\n return this.value === NIL_UUID;\n }\n\n /**\n * Compare two IdentityId values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherIdentityId = other as IdentityIdValue;\n return this.value === otherIdentityId.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nexport {BlobValue} from './blob';\nexport {BooleanValue} from './boolean';\nexport {DateValue} from './date';\nexport {DateTimeValue} from './datetime';\nexport {DecimalValue} from './decimal';\nexport {Float4Value} from './float4';\nexport {Float8Value} from './float8';\nexport {Int1Value} from './int1';\nexport {Int2Value} from './int2';\nexport {Int4Value} from './int4';\nexport {Int8Value} from './int8';\nexport {Int16Value} from './int16';\nexport {DurationValue} from './duration';\nexport {TimeValue} from './time';\nexport {Uint1Value} from './uint1';\nexport {Uint2Value} from './uint2';\nexport {Uint4Value} from './uint4';\nexport {Uint8Value} from './uint8';\nexport {Uint16Value} from './uint16';\nexport {NoneValue} from './none';\nexport {Utf8Value} from './utf8';\nexport {Uuid4Value} from './uuid4';\nexport {Uuid7Value} from './uuid7';\nexport {IdentityIdValue} from './identityid';\n\nexport type BaseType =\n | \"Blob\"\n | \"Boolean\"\n | \"Decimal\"\n | \"Float4\" | \"Float8\"\n | \"Int1\" | \"Int2\" | \"Int4\" | \"Int8\" | \"Int16\"\n | \"Uint1\" | \"Uint2\" | \"Uint4\" | \"Uint8\" | \"Uint16\"\n | \"Utf8\"\n | \"Date\" | \"DateTime\" | \"Time\" | \"Duration\"\n | \"Uuid4\" | \"Uuid7\"\n | \"IdentityId\"\n | \"None\";\n\nexport interface OptionType { Option: Type }\nexport type Type = BaseType | OptionType;\n\nexport function isOptionType(t: Type): t is OptionType {\n return typeof t === 'object' && t !== null && 'Option' in t;\n}\n\nexport function unwrapOptionType(t: Type): BaseType {\n if (isOptionType(t)) return unwrapOptionType(t.Option);\n return t;\n}\n\nexport interface TypeValuePair {\n type: Type;\n value: string;\n}\n\nexport abstract class Value {\n abstract readonly type: Type;\n\n public abstract encode(): TypeValuePair;\n public abstract equals(other: Value): boolean;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {\n BlobValue, BooleanValue, DateValue, DateTimeValue, DecimalValue, Float4Value, Float8Value,\n Int1Value, Int2Value, Int4Value, Int8Value, Int16Value, DurationValue,\n TimeValue, Uint1Value, Uint2Value, Uint4Value, Uint8Value,\n Uint16Value, NoneValue, Utf8Value, Uuid4Value, Uuid7Value, IdentityIdValue,\n Value, TypeValuePair, isOptionType, unwrapOptionType\n} from './value';\nimport {NONE_VALUE} from './constant';\n\n\nexport function decode(pair: TypeValuePair): Value {\n if (isOptionType(pair.type)) {\n const innerType = unwrapOptionType(pair.type);\n if (pair.value === NONE_VALUE || pair.value === '') {\n return new NoneValue(innerType);\n }\n return decode({type: innerType, value: pair.value});\n }\n\n switch (pair.type) {\n case \"Blob\":\n return BlobValue.parse(pair.value);\n case \"Boolean\":\n return BooleanValue.parse(pair.value);\n case \"Date\":\n return DateValue.parse(pair.value);\n case \"DateTime\":\n return DateTimeValue.parse(pair.value);\n case \"Decimal\":\n return DecimalValue.parse(pair.value);\n case \"Float4\":\n return Float4Value.parse(pair.value);\n case \"Float8\":\n return Float8Value.parse(pair.value);\n case \"Int1\":\n return Int1Value.parse(pair.value);\n case \"Int2\":\n return Int2Value.parse(pair.value);\n case \"Int4\":\n return Int4Value.parse(pair.value);\n case \"Int8\":\n return Int8Value.parse(pair.value);\n case \"Int16\":\n return Int16Value.parse(pair.value);\n case \"Duration\":\n return DurationValue.parse(pair.value);\n case \"Time\":\n return TimeValue.parse(pair.value);\n case \"Uint1\":\n return Uint1Value.parse(pair.value);\n case \"Uint2\":\n return Uint2Value.parse(pair.value);\n case \"Uint4\":\n return Uint4Value.parse(pair.value);\n case \"Uint8\":\n return Uint8Value.parse(pair.value);\n case \"Uint16\":\n return Uint16Value.parse(pair.value);\n case \"None\":\n return NoneValue.parse(pair.value);\n case \"Utf8\":\n return Utf8Value.parse(pair.value);\n case \"Uuid4\":\n return Uuid4Value.parse(pair.value);\n case \"Uuid7\":\n return Uuid7Value.parse(pair.value);\n case \"IdentityId\":\n return IdentityIdValue.parse(pair.value);\n default:\n throw new Error(`Unsupported type: ${pair.type}`);\n }\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {\n PrimitiveSchemaNode, ObjectSchemaNode, ArraySchemaNode,\n OptionalSchemaNode, ValueSchemaNode, SchemaNode\n} from '.';\n\nexport class SchemaBuilder {\n\n static blob(): PrimitiveSchemaNode<'Blob'> {\n return {kind: 'primitive', type: 'Blob'};\n }\n\n static bool(): PrimitiveSchemaNode<'Boolean'> {\n return {kind: 'primitive', type: 'Boolean'};\n }\n\n static boolean(): PrimitiveSchemaNode<'Boolean'> {\n return {kind: 'primitive', type: 'Boolean'};\n }\n\n static decimal(): PrimitiveSchemaNode<'Decimal'> {\n return {kind: 'primitive', type: 'Decimal'};\n }\n\n static float4(): PrimitiveSchemaNode<'Float4'> {\n return {kind: 'primitive', type: 'Float4'};\n }\n\n static float8(): PrimitiveSchemaNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static float(): PrimitiveSchemaNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static double(): PrimitiveSchemaNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static int1(): PrimitiveSchemaNode<'Int1'> {\n return {kind: 'primitive', type: 'Int1'};\n }\n\n static int2(): PrimitiveSchemaNode<'Int2'> {\n return {kind: 'primitive', type: 'Int2'};\n }\n\n static int4(): PrimitiveSchemaNode<'Int4'> {\n return {kind: 'primitive', type: 'Int4'};\n }\n\n static int8(): PrimitiveSchemaNode<'Int8'> {\n return {kind: 'primitive', type: 'Int8'};\n }\n\n static int16(): PrimitiveSchemaNode<'Int16'> {\n return {kind: 'primitive', type: 'Int16'};\n }\n\n static int(): PrimitiveSchemaNode<'Int4'> {\n return {kind: 'primitive', type: 'Int4'};\n }\n\n static bigint(): PrimitiveSchemaNode<'Int8'> {\n return {kind: 'primitive', type: 'Int8'};\n }\n\n static uint1(): PrimitiveSchemaNode<'Uint1'> {\n return {kind: 'primitive', type: 'Uint1'};\n }\n\n static uint2(): PrimitiveSchemaNode<'Uint2'> {\n return {kind: 'primitive', type: 'Uint2'};\n }\n\n static uint4(): PrimitiveSchemaNode<'Uint4'> {\n return {kind: 'primitive', type: 'Uint4'};\n }\n\n static uint8(): PrimitiveSchemaNode<'Uint8'> {\n return {kind: 'primitive', type: 'Uint8'};\n }\n\n static uint16(): PrimitiveSchemaNode<'Uint16'> {\n return {kind: 'primitive', type: 'Uint16'};\n }\n\n static utf8(): PrimitiveSchemaNode<'Utf8'> {\n return {kind: 'primitive', type: 'Utf8'};\n }\n\n static string(): PrimitiveSchemaNode<'Utf8'> {\n return {kind: 'primitive', type: 'Utf8'};\n }\n\n static date(): PrimitiveSchemaNode<'Date'> {\n return {kind: 'primitive', type: 'Date'};\n }\n\n static datetime(): PrimitiveSchemaNode<'DateTime'> {\n return {kind: 'primitive', type: 'DateTime'};\n }\n\n static time(): PrimitiveSchemaNode<'Time'> {\n return {kind: 'primitive', type: 'Time'};\n }\n\n static duration(): PrimitiveSchemaNode<'Duration'> {\n return {kind: 'primitive', type: 'Duration'};\n }\n\n static uuid4(): PrimitiveSchemaNode<'Uuid4'> {\n return {kind: 'primitive', type: 'Uuid4'};\n }\n\n static uuid7(): PrimitiveSchemaNode<'Uuid7'> {\n return {kind: 'primitive', type: 'Uuid7'};\n }\n\n static uuid(): PrimitiveSchemaNode<'Uuid7'> {\n return {kind: 'primitive', type: 'Uuid7'};\n }\n\n static none(): PrimitiveSchemaNode<'None'> {\n return {kind: 'primitive', type: 'None'};\n }\n\n static identityid(): PrimitiveSchemaNode<'IdentityId'> {\n return {kind: 'primitive', type: 'IdentityId'};\n }\n\n static object<P extends Record<string, SchemaNode>>(properties: P): ObjectSchemaNode<P> {\n return {kind: 'object', properties};\n }\n\n static array<T extends SchemaNode>(items: T): ArraySchemaNode<T> {\n return {kind: 'array', items};\n }\n\n static optional<T extends SchemaNode>(schema: T): OptionalSchemaNode<T> {\n return {kind: 'optional', schema};\n }\n \n static number(): PrimitiveSchemaNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static booleanValue(): ValueSchemaNode<'Boolean'> {\n return {kind: 'value', type: 'Boolean'};\n }\n\n static decimalValue(): ValueSchemaNode<'Decimal'> {\n return {kind: 'value', type: 'Decimal'};\n }\n\n static int1Value(): ValueSchemaNode<'Int1'> {\n return {kind: 'value', type: 'Int1'};\n }\n\n static int2Value(): ValueSchemaNode<'Int2'> {\n return {kind: 'value', type: 'Int2'};\n }\n\n static int4Value(): ValueSchemaNode<'Int4'> {\n return {kind: 'value', type: 'Int4'};\n }\n\n static int8Value(): ValueSchemaNode<'Int8'> {\n return {kind: 'value', type: 'Int8'};\n }\n\n static int16Value(): ValueSchemaNode<'Int16'> {\n return {kind: 'value', type: 'Int16'};\n }\n\n static uint1Value(): ValueSchemaNode<'Uint1'> {\n return {kind: 'value', type: 'Uint1'};\n }\n\n static uint2Value(): ValueSchemaNode<'Uint2'> {\n return {kind: 'value', type: 'Uint2'};\n }\n\n static uint4Value(): ValueSchemaNode<'Uint4'> {\n return {kind: 'value', type: 'Uint4'};\n }\n\n static uint8Value(): ValueSchemaNode<'Uint8'> {\n return {kind: 'value', type: 'Uint8'};\n }\n\n static uint16Value(): ValueSchemaNode<'Uint16'> {\n return {kind: 'value', type: 'Uint16'};\n }\n\n static float4Value(): ValueSchemaNode<'Float4'> {\n return {kind: 'value', type: 'Float4'};\n }\n\n static float8Value(): ValueSchemaNode<'Float8'> {\n return {kind: 'value', type: 'Float8'};\n }\n\n static utf8Value(): ValueSchemaNode<'Utf8'> {\n return {kind: 'value', type: 'Utf8'};\n }\n\n static dateValue(): ValueSchemaNode<'Date'> {\n return {kind: 'value', type: 'Date'};\n }\n\n static dateTimeValue(): ValueSchemaNode<'DateTime'> {\n return {kind: 'value', type: 'DateTime'};\n }\n\n static timeValue(): ValueSchemaNode<'Time'> {\n return {kind: 'value', type: 'Time'};\n }\n\n static durationValue(): ValueSchemaNode<'Duration'> {\n return {kind: 'value', type: 'Duration'};\n }\n\n static uuid4Value(): ValueSchemaNode<'Uuid4'> {\n return {kind: 'value', type: 'Uuid4'};\n }\n\n static uuid7Value(): ValueSchemaNode<'Uuid7'> {\n return {kind: 'value', type: 'Uuid7'};\n }\n\n static noneValue(): ValueSchemaNode<'None'> {\n return {kind: 'value', type: 'None'};\n }\n\n static blobValue(): ValueSchemaNode<'Blob'> {\n return {kind: 'value', type: 'Blob'};\n }\n\n static identityIdValue(): ValueSchemaNode<'IdentityId'> {\n return {kind: 'value', type: 'IdentityId'};\n }\n}\n\nexport const Schema = SchemaBuilder;","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {\n BlobValue, BooleanValue, DateValue, DateTimeValue, DecimalValue,\n Float4Value, Float8Value,\n Int1Value, Int2Value, Int4Value, Int8Value, Int16Value,\n DurationValue, TimeValue,\n Uint1Value, Uint2Value, Uint4Value, Uint8Value, Uint16Value,\n NoneValue, Utf8Value,\n Uuid4Value, Uuid7Value, IdentityIdValue,\n BaseType\n} from '../value';\nimport {SchemaNode} from '.';\nimport {PrimitiveToValue} from './inference';\n\nfunction createValueInstance<T extends BaseType>(type: T, value: any): PrimitiveToValue<T> {\n switch (type) {\n case 'Blob':\n return new BlobValue(value) as PrimitiveToValue<T>;\n case 'Boolean':\n return new BooleanValue(value) as PrimitiveToValue<T>;\n case 'Float4':\n return new Float4Value(value) as PrimitiveToValue<T>;\n case 'Float8':\n return new Float8Value(value) as PrimitiveToValue<T>;\n case 'Int1':\n return new Int1Value(value) as PrimitiveToValue<T>;\n case 'Int2':\n return new Int2Value(value) as PrimitiveToValue<T>;\n case 'Int4':\n return new Int4Value(value) as PrimitiveToValue<T>;\n case 'Int8':\n return new Int8Value(value) as PrimitiveToValue<T>;\n case 'Int16':\n return new Int16Value(value) as PrimitiveToValue<T>;\n case 'Uint1':\n return new Uint1Value(value) as PrimitiveToValue<T>;\n case 'Uint2':\n return new Uint2Value(value) as PrimitiveToValue<T>;\n case 'Uint4':\n return new Uint4Value(value) as PrimitiveToValue<T>;\n case 'Uint8':\n return new Uint8Value(value) as PrimitiveToValue<T>;\n case 'Uint16':\n return new Uint16Value(value) as PrimitiveToValue<T>;\n case 'Utf8':\n return new Utf8Value(value) as PrimitiveToValue<T>;\n case 'Date':\n return new DateValue(value) as PrimitiveToValue<T>;\n case 'DateTime':\n return new DateTimeValue(value) as PrimitiveToValue<T>;\n case 'Time':\n return new TimeValue(value) as PrimitiveToValue<T>;\n case 'Duration':\n return new DurationValue(value) as PrimitiveToValue<T>;\n case 'Uuid4':\n return new Uuid4Value(value) as PrimitiveToValue<T>;\n case 'Uuid7':\n return new Uuid7Value(value) as PrimitiveToValue<T>;\n case 'Decimal':\n return new DecimalValue(value) as PrimitiveToValue<T>;\n case 'IdentityId':\n return new IdentityIdValue(value) as PrimitiveToValue<T>;\n case 'None':\n return new NoneValue() as PrimitiveToValue<T>;\n default:\n throw new Error(`Unknown type: ${type}`);\n }\n}\n\nexport function parseValue(schema: SchemaNode, value: any): any {\n if (schema.kind === 'primitive') {\n if (value === null || value === undefined) {\n return undefined;\n }\n return createValueInstance(schema.type as BaseType, value);\n }\n\n if (schema.kind === 'object') {\n if (value === null || value === undefined) {\n return undefined;\n }\n const result: Record<string, any> = {};\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n result[key] = parseValue(propSchema, value[key]);\n }\n return result;\n }\n\n if (schema.kind === 'array') {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.map(item => parseValue(schema.items, item));\n }\n\n if (schema.kind === 'optional') {\n if (value === undefined) {\n return undefined;\n }\n return parseValue(schema.schema, value);\n }\n\n if (schema.kind === 'value') {\n if (value === null || value === undefined) {\n return undefined;\n }\n return createValueInstance(schema.type as BaseType, value);\n }\n\n throw new Error(`Unknown schema kind: ${(schema as any).kind}`);\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type} from '../value';\nimport {SchemaNode} from '.';\n\nexport function validateSchema(schema: SchemaNode, value: any): boolean {\n if (schema.kind === 'primitive') {\n const schemaType = schema.type as Type;\n if (value === null || value === undefined) {\n return schemaType === 'None';\n }\n\n switch (schemaType) {\n case 'Boolean':\n return typeof value === 'boolean';\n case 'Float4':\n case 'Float8':\n case 'Int1':\n case 'Int2':\n case 'Int4':\n return typeof value === 'number';\n case 'Int8':\n case 'Int16':\n case 'Uint8':\n case 'Uint16':\n return typeof value === 'bigint' || typeof value === 'number';\n case 'Uint1':\n case 'Uint2':\n case 'Uint4':\n return typeof value === 'number' && value >= 0;\n case 'Utf8':\n case 'Time':\n case 'Duration':\n case 'Uuid4':\n case 'Uuid7':\n return typeof value === 'string';\n case 'Date':\n case 'DateTime':\n return value instanceof Date || typeof value === 'string';\n case 'Blob':\n return value instanceof Uint8Array || value instanceof ArrayBuffer;\n case 'None':\n return value === undefined;\n default:\n return false;\n }\n }\n\n if (schema.kind === 'object') {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n if (!validateSchema(propSchema, value[key])) {\n return false;\n }\n }\n return true;\n }\n\n if (schema.kind === 'array') {\n if (!Array.isArray(value)) {\n return false;\n }\n return value.every(item => validateSchema(schema.items, item));\n }\n\n if (schema.kind === 'optional') {\n if (value === undefined) {\n return true;\n }\n return validateSchema(schema.schema, value);\n }\n\n if (schema.kind === 'value') {\n if (value === null || value === undefined) {\n return schema.type === 'None';\n }\n if (typeof value === 'object' && value !== null && 'type' in value && 'encode' in value) {\n return value.type === schema.type;\n }\n return false;\n }\n\n return false;\n}","// SPDX-License-Identifier: MIT\n// Copyright (c) 2025 ReifyDB\nimport {Type, TypeValuePair} from './value';\nimport {SchemaNode, InferSchema} from './schema';\n\nexport type Params = (TypeValuePair | null)[] | Record<string, TypeValuePair | null>;\n\nexport interface Frame {\n columns: Column[];\n}\n\nexport interface DiagnosticColumn {\n name: string,\n type: Type,\n}\n\nexport interface Fragment {\n text: string\n line?: number,\n column?: number,\n}\n\nexport interface Diagnostic {\n code: string,\n statement?: string;\n message: string,\n column?: DiagnosticColumn,\n fragment?: Fragment,\n label?: string,\n help?: string,\n notes: Array<string>,\n cause?: Diagnostic,\n}\n\nexport interface Column {\n name: string;\n type: Type;\n data: string[];\n}\n\nexport interface ErrorResponse {\n id: string;\n type: \"Err\";\n payload: {\n diagnostic: Diagnostic;\n };\n}\n\nexport class ReifyError extends Error {\n public readonly code: string;\n public readonly statement?: string;\n public readonly column?: DiagnosticColumn;\n public readonly fragment?: Fragment;\n public readonly label?: string;\n public readonly help?: string;\n public readonly notes: string[];\n public readonly cause?: Diagnostic;\n\n constructor(response: ErrorResponse) {\n const diagnostic = response.payload.diagnostic;\n const message = `[${diagnostic.code}] ${diagnostic.message}` +\n (diagnostic.label ? ` — ${diagnostic.label}` : \"\");\n\n super(message);\n\n this.name = \"ReifyError\";\n this.code = diagnostic.code;\n this.statement = diagnostic.statement;\n this.column = diagnostic.column;\n this.fragment = diagnostic.fragment;\n this.label = diagnostic.label;\n this.help = diagnostic.help;\n this.notes = diagnostic.notes ?? [];\n this.cause = diagnostic.cause;\n\n // Required for instanceof checks to work properly\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n toString(): string {\n const position = this.fragment\n ? `line ${this.fragment.line}, offset ${this.fragment.column}`\n : \"unknown position\";\n\n const notes = this.notes.length\n ? `\\nNotes:\\n- ${this.notes.join(\"\\n- \")}`\n : \"\";\n\n const help = this.help\n ? `\\nHelp: ${this.help}`\n : \"\";\n\n return `${this.name}: ${this.message}\\nAt ${position}${help}${notes}`;\n }\n}\n\n/**\n * Simplified type for inferring frame results to avoid deep instantiation\n * This provides a workaround for TypeScript's limitation with deeply nested types\n */\nexport type FrameResults<S extends readonly SchemaNode[]> =\n S extends readonly [infer First, ...infer Rest]\n ? First extends SchemaNode\n ? Rest extends readonly SchemaNode[]\n ? [InferSchema<First>[], ...FrameResults<Rest>]\n : [InferSchema<First>[]]\n : never\n : [];\n\n/**\n * Helper type to extract a single frame result\n */\nexport type SingleFrameResult<S extends SchemaNode> = InferSchema<S>[];\n\n/**\n * Type-safe cast helper for frame results\n */\nexport function asFrameResults<S extends readonly SchemaNode[]>(\n results: any\n): FrameResults<S> {\n return results as FrameResults<S>;\n}"],"mappings":";AAEO,IAAM,aAAa;;;ACMnB,IAAM,YAAN,MAAM,WAA2B;AAAA,EAIpC,YAAY,OAAsD;AAHlE,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,iBAAiB,YAAY;AAC7B,aAAK,QAAQ,IAAI,WAAW,KAAK;AAAA,MACrC,WAAW,iBAAiB,aAAa;AACrC,aAAK,QAAQ,IAAI,WAAW,KAAK;AAAA,MACrC,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,SAAS,WAAU,YAAY,KAAK;AAC1C,YAAI,WAAW,MAAM;AACjB,gBAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,QACnD;AACA,aAAK,QAAQ;AAAA,MACjB,WAAW,MAAM,QAAQ,KAAK,GAAG;AAE7B,mBAAW,QAAQ,OAAO;AACtB,cAAI,CAAC,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK,OAAO,KAAK;AACnD,kBAAM,IAAI,MAAM,uBAAuB,IAAI,EAAE;AAAA,UACjD;AAAA,QACJ;AACA,aAAK,QAAQ,IAAI,WAAW,KAAK;AAAA,MACrC,OAAO;AACH,cAAM,IAAI,MAAM,0EAA0E,OAAO,KAAK,EAAE;AAAA,MAC5G;AAAA,IACJ,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAI,OAAyC;AAChD,WAAO,IAAI,WAAU,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAmB;AACtB,WAAO,IAAI,WAAU,IAAI,WAAW,CAAC,CAAC;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAU,OAA4B;AACzC,WAAO,IAAI,WAAU,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAQ,KAAwB;AAEnC,UAAM,WAAW,IAAI,WAAW,IAAI,KAAK,IAAI,WAAW,IAAI,IACtD,IAAI,UAAU,CAAC,IACf;AAEN,QAAI,SAAS,SAAS,MAAM,GAAG;AAC3B,YAAM,IAAI,MAAM,gCAAgC;AAAA,IACpD;AAEA,UAAM,QAAQ,IAAI,WAAW,SAAS,SAAS,CAAC;AAChD,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK,GAAG;AACzC,YAAM,OAAO,SAAS,SAAS,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE;AACtD,UAAI,MAAM,IAAI,GAAG;AACb,cAAM,IAAI,MAAM,uBAAuB,GAAG,EAAE;AAAA,MAChD;AACA,YAAM,IAAI,CAAC,IAAI;AAAA,IACnB;AACA,WAAO,IAAI,WAAU,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAW,QAA2B;AAEzC,QAAI,CAAC,yBAAyB,KAAK,MAAM,GAAG;AACxC,YAAM,IAAI,MAAM,0BAA0B,MAAM,EAAE;AAAA,IACtD;AAEA,QAAI;AACA,UAAI,OAAO,WAAW,aAAa;AAE/B,cAAM,SAAS,OAAO,KAAK,QAAQ,QAAQ;AAC3C,eAAO,IAAI,WAAU,IAAI,WAAW,MAAM,CAAC;AAAA,MAC/C,OAAO;AAEH,cAAM,eAAe,KAAK,MAAM;AAChC,cAAM,QAAQ,IAAI,WAAW,aAAa,MAAM;AAChD,iBAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,gBAAM,CAAC,IAAI,aAAa,WAAW,CAAC;AAAA,QACxC;AACA,eAAO,IAAI,WAAU,KAAK;AAAA,MAC9B;AAAA,IACJ,SAAS,GAAG;AACR,YAAM,IAAI,MAAM,0BAA0B,MAAM,EAAE;AAAA,IACtD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAS,KAAwB;AACpC,UAAM,UAAU,IAAI,YAAY;AAChC,WAAO,IAAI,WAAU,QAAQ,OAAO,GAAG,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,UAAM,SAAS,WAAU,YAAY,OAAO;AAC5C,QAAI,WAAW,MAAM;AACjB,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,WAAO,IAAI,WAAU,MAAM;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,UAAkC;AAC9B,WAAO,KAAK,QAAQ,IAAI,WAAW,KAAK,KAAK,IAAI;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,SAAiB;AACb,WAAO,KAAK,OAAO,UAAU;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAmB;AACf,WAAO,KAAK,OAAO,WAAW;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,QAA4B;AACxB,QAAI,KAAK,UAAU,OAAW,QAAO;AAErC,UAAM,MAAM,MAAM,KAAK,KAAK,KAAK,EAC5B,IAAI,UAAQ,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC9C,KAAK,EAAE;AACZ,WAAO,OAAO;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,WAA+B;AAC3B,QAAI,KAAK,UAAU,OAAW,QAAO;AAErC,QAAI,OAAO,WAAW,aAAa;AAE/B,aAAO,OAAO,KAAK,KAAK,KAAK,EAAE,SAAS,QAAQ;AAAA,IACpD,OAAO;AAEH,YAAM,eAAe,MAAM,KAAK,KAAK,KAAK,EACrC,IAAI,UAAQ,OAAO,aAAa,IAAI,CAAC,EACrC,KAAK,EAAE;AACZ,aAAO,KAAK,YAAY;AAAA,IAC5B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,SAA6B;AACzB,QAAI,KAAK,UAAU,OAAW,QAAO;AAErC,UAAM,UAAU,IAAI,YAAY;AAChC,WAAO,QAAQ,OAAO,KAAK,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,QAAI,KAAK,UAAU,QAAW;AAC1B,aAAO;AAAA,IACX;AACA,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,UAAkC;AAC9B,WAAO,KAAK,QAAQ,IAAI,WAAW,KAAK,KAAK,IAAI;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAAgC;AAChC,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,QAAI,KAAK,UAAU,UAAa,UAAU,UAAU,QAAW;AAC3D,aAAO,KAAK,UAAU,UAAU;AAAA,IACpC;AAEA,QAAI,KAAK,MAAM,WAAW,UAAU,MAAM,QAAQ;AAC9C,aAAO;AAAA,IACX;AAEA,aAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACxC,UAAI,KAAK,MAAM,CAAC,MAAM,UAAU,MAAM,CAAC,GAAG;AACtC,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,YAAY,KAAgC;AAEvD,QAAI,IAAI,WAAW,IAAI,KAAK,IAAI,WAAW,IAAI,GAAG;AAC9C,UAAI;AACA,eAAO,WAAU,QAAQ,GAAG,EAAE;AAAA,MAClC,QAAQ;AACJ,eAAO;AAAA,MACX;AAAA,IACJ;AAGA,QAAI,iBAAiB,KAAK,GAAG,KAAK,IAAI,SAAS,MAAM,GAAG;AACpD,UAAI;AACA,eAAO,WAAU,QAAQ,GAAG,EAAE;AAAA,MAClC,QAAQ;AACJ,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;AClRO,IAAM,eAAN,MAAM,cAA8B;AAAA,EAIvC,YAAY,OAAiB;AAH7B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,WAAW;AAC5B,cAAM,IAAI,MAAM,wCAAwC,OAAO,KAAK,EAAE;AAAA,MAC1E;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAA2B;AACpC,UAAM,UAAU,IAAI,KAAK,EAAE,YAAY;AAEvC,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,cAAa,MAAS;AAAA,IACrC;AAEA,QAAI,YAAY,QAAQ;AACpB,aAAO,IAAI,cAAa,IAAI;AAAA,IAChC;AAEA,QAAI,YAAY,SAAS;AACrB,aAAO,IAAI,cAAa,KAAK;AAAA,IACjC;AAEA,UAAM,IAAI,MAAM,iBAAiB,GAAG,cAAc;AAAA,EACtD;AAAA,EAEA,UAA+B;AAC3B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,eAAe;AACrB,WAAO,KAAK,UAAU,aAAa;AAAA,EACvC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;ACtDO,IAAM,YAAN,MAAM,WAA2B;AAAA;AAAA,EAKpC,YAAY,OAAgC;AAJ5C,SAAS,OAAa;AAKlB,QAAI,UAAU,QAAW;AACrB,UAAI,iBAAiB,MAAM;AAEvB,cAAM,OAAO,MAAM,eAAe;AAClC,cAAM,QAAQ,MAAM,YAAY,IAAI;AACpC,cAAM,MAAM,MAAM,WAAW;AAE7B,aAAK,SAAS,OAAO,MAAM,QAAQ;AACnC,aAAK,OAAO;AAAA,MAChB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,SAAS,WAAU,UAAU,KAAK;AACxC,YAAI,CAAC,QAAQ;AACT,gBAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,QACnD;AACA,aAAK,SAAS,OAAO;AACrB,aAAK,OAAO,OAAO;AAAA,MACvB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,OAAO,WAAU,+BAA+B,KAAK;AAC3D,YAAI,CAAC,MAAM;AACP,gBAAM,IAAI,MAAM,6BAA6B,KAAK,EAAE;AAAA,QACxD;AACA,aAAK,SAAS,KAAK;AACnB,aAAK,OAAO,KAAK;AAAA,MACrB,OAAO;AACH,cAAM,IAAI,MAAM,qDAAqD,OAAO,KAAK,EAAE;AAAA,MACvF;AAAA,IACJ,OAAO;AACH,WAAK,SAAS;AACd,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAQ,MAAc,OAAe,KAAwB;AAEhE,QAAI,CAAC,WAAU,YAAY,MAAM,OAAO,GAAG,GAAG;AAC1C,YAAM,IAAI,MAAM,iBAAiB,IAAI,IAAI,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE;AAAA,IAC7G;AAEA,UAAM,SAAS,IAAI,WAAU,MAAS;AACtC,IAAC,OAAe,SAAS,OAAO,MAAM,QAAQ;AAC9C,IAAC,OAAe,OAAO;AACvB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAmB;AACtB,UAAM,MAAM,oBAAI,KAAK;AACrB,WAAO,WAAU;AAAA,MACb,IAAI,eAAe;AAAA,MACnB,IAAI,YAAY,IAAI;AAAA,MACpB,IAAI,WAAW;AAAA,IACnB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,UAAM,SAAS,WAAU,UAAU,OAAO;AAC1C,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,UAAM,SAAS,IAAI,WAAU,MAAS;AACtC,IAAC,OAAe,SAAS,OAAO;AAChC,IAAC,OAAe,OAAO,OAAO;AAC9B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAuC;AACnC,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,QAAW;AACtD,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAExC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,UAAM,QAAQ,IAAI;AAGlB,QAAI;AACJ,QAAI,QAAQ,KAAK,OAAO,KAAK;AACzB,aAAO,IAAI,KAAK,KAAK,IAAI,KAAM,QAAQ,GAAG,KAAK,IAAI,CAAC;AACpD,WAAK,eAAe,IAAI;AAAA,IAC5B,OAAO;AACH,aAAO,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC;AAAA,IACxD;AAEA,UAAM,QAAQ,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC;AAC3C,UAAM,SAAS,KAAK,QAAQ,IAAI,MAAM,QAAQ;AAC9C,WAAO,KAAK,MAAM,UAAU,MAAO,KAAK,KAAK,GAAG;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,+BAA+B,MAAuD;AACzF,UAAM,QAAQ,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC;AAC3C,UAAM,KAAK,OAAO,KAAK,KAAK,KAAK;AACjC,UAAM,OAAO,IAAI,KAAK,MAAM,QAAQ,IAAI,EAAE;AAG1C,QAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,GAAG;AAC3B,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,eAAe;AACjC,UAAM,QAAQ,KAAK,YAAY,IAAI;AACnC,UAAM,MAAM,KAAK,WAAW;AAE5B,WAAO;AAAA,MACH,QAAQ,OAAO,MAAM,QAAQ;AAAA,MAC7B,MAAM;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAA2B;AACvB,QAAI,KAAK,WAAW,OAAW,QAAO;AACtC,WAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,QAA4B;AACxB,QAAI,KAAK,WAAW,OAAW,QAAO;AAEtC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,WAAO,IAAI;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,MAA0B;AACtB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,QAAW;AACtD,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAExC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,UAAM,QAAQ,OAAO,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AAC3C,UAAM,MAAM,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG,GAAG;AAG7C,QAAI,OAAO,GAAG;AACV,YAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,aAAO,IAAI,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG;AAAA,IAC/D,OAAO;AACH,aAAO,GAAG,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG;AAAA,IAC3D;AAAA,EACJ;AAAA,EAEA,UAA4B;AACxB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,QAAW;AACtD,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAExC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,UAAM,QAAQ,IAAI;AAGlB,QAAI;AACJ,QAAI,QAAQ,KAAK,OAAO,KAAK;AACzB,aAAO,IAAI,KAAK,KAAK,IAAI,KAAM,QAAQ,GAAG,KAAK,IAAI,CAAC;AACpD,WAAK,eAAe,IAAI;AAAA,IAC5B,OAAO;AACH,aAAO,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC;AAAA,IACxD;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAA0B;AAC1B,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,UAAU,KAAsD;AAE3E,UAAM,QAAQ,IAAI,MAAM,+BAA+B;AACvD,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAClC,UAAM,QAAQ,SAAS,MAAM,CAAC,GAAG,EAAE;AACnC,UAAM,MAAM,SAAS,MAAM,CAAC,GAAG,EAAE;AAGjC,QAAI,QAAQ,KAAK,QAAQ,IAAI;AACzB,aAAO;AAAA,IACX;AACA,QAAI,MAAM,KAAK,MAAM,IAAI;AACrB,aAAO;AAAA,IACX;AAGA,QAAI,CAAC,WAAU,YAAY,MAAM,OAAO,GAAG,GAAG;AAC1C,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,MACH,QAAQ,OAAO,MAAM,QAAQ;AAAA,MAC7B,MAAM;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,YAAY,MAAc,OAAe,KAAsB;AAE1E,QAAI;AACJ,QAAI,QAAQ,KAAK,OAAO,KAAK;AACzB,aAAO,IAAI,KAAK,KAAK,IAAI,KAAM,QAAQ,GAAG,GAAG,CAAC;AAC9C,WAAK,eAAe,IAAI;AAAA,IAC5B,OAAO;AACH,aAAO,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC;AAAA,IAClD;AAEA,WAAO,KAAK,eAAe,MAAM,QAC1B,KAAK,YAAY,MAAM,QAAQ,KAC/B,KAAK,WAAW,MAAM;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,QAAI,KAAK,WAAW,UAAa,UAAU,WAAW,QAAW;AAC7D,aAAO,KAAK,WAAW,UAAU,UAAU,KAAK,SAAS,UAAU;AAAA,IACvE;AAEA,WAAO,KAAK,WAAW,UAAU,UAAU,KAAK,SAAS,UAAU;AAAA,EACvE;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;ACrSO,IAAM,aAAN,MAAM,WAA2B;AAAA,EASpC,YAAY,OAAkC;AAR9C,SAAS,OAAa;AASlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAE3B,YAAI,QAAQ,MAAM,SAAS,WAAU,eAAe;AAChD,gBAAM,IAAI,MAAM,oCAAoC,WAAU,gBAAgB,EAAE,cAAc;AAAA,QAClG;AACA,aAAK,QAAQ;AAAA,MACjB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,SAAS,WAAU,UAAU,KAAK;AACxC,YAAI,WAAW,MAAM;AACjB,gBAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,QACnD;AACA,aAAK,QAAQ;AAAA,MACjB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,cAAc,OAAO,KAAK,MAAM,KAAK,CAAC;AAC5C,YAAI,cAAc,MAAM,eAAe,WAAU,eAAe;AAC5D,gBAAM,IAAI,MAAM,oCAAoC,WAAU,gBAAgB,EAAE,cAAc;AAAA,QAClG;AACA,aAAK,QAAQ;AAAA,MACjB,OAAO;AACH,cAAM,IAAI,MAAM,uDAAuD,OAAO,KAAK,EAAE;AAAA,MACzF;AAAA,IACJ,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAS,MAAc,QAAgB,QAAgB,OAAe,GAAc;AAEvF,QAAI,OAAO,KAAK,OAAO,IAAI;AACvB,YAAM,IAAI,MAAM,iBAAiB,IAAI,EAAE;AAAA,IAC3C;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,YAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAAA,IAC/C;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,YAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAAA,IAC/C;AACA,QAAI,OAAO,KAAK,OAAO,WAAa;AAChC,YAAM,IAAI,MAAM,uBAAuB,IAAI,EAAE;AAAA,IACjD;AAEA,UAAM,QAAQ,OAAO,IAAI,IAAI,WAAU,iBAC1B,OAAO,MAAM,IAAI,WAAU,mBAC3B,OAAO,MAAM,IAAI,WAAU,mBAC3B,OAAO,IAAI;AAExB,WAAO,IAAI,WAAU,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAQ,MAAc,QAAgB,QAA2B;AACpE,WAAO,WAAU,SAAS,MAAM,QAAQ,QAAQ,CAAC;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAsB;AACzB,WAAO,IAAI,WAAU,EAAE;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAkB;AACrB,WAAO,IAAI,WAAU,MAAM,WAAU,cAAc;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,UAAM,SAAS,WAAU,UAAU,OAAO;AAC1C,QAAI,WAAW,MAAM;AACjB,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,WAAO,IAAI,WAAU,MAAM;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,OAA2B;AACvB,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,OAAO,KAAK,QAAQ,WAAU,cAAc;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,SAA6B;AACzB,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,UAAM,sBAAsB,KAAK,QAAQ,WAAU;AACnD,WAAO,OAAO,sBAAsB,WAAU,gBAAgB;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA,EAKA,SAA6B;AACzB,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,UAAM,sBAAsB,KAAK,QAAQ,WAAU;AACnD,UAAM,wBAAwB,sBAAsB,WAAU;AAC9D,WAAO,OAAO,wBAAwB,WAAU,gBAAgB;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKA,aAAiC;AAC7B,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,OAAO,KAAK,QAAQ,WAAU,gBAAgB;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,uBAA2C;AACvC,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,uBAAuB,OAAmC;AAC7D,WAAO,IAAI,WAAU,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI,KAAK;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,QAAI,KAAK,UAAU,QAAW;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,KAAK;AACvB,UAAM,SAAS,KAAK,OAAO;AAC3B,UAAM,SAAS,KAAK,OAAO;AAC3B,UAAM,OAAO,KAAK,WAAW;AAE7B,UAAM,UAAU,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG;AAC5C,UAAM,YAAY,OAAO,MAAM,EAAE,SAAS,GAAG,GAAG;AAChD,UAAM,YAAY,OAAO,MAAM,EAAE,SAAS,GAAG,GAAG;AAChD,UAAM,UAAU,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG;AAE5C,WAAO,GAAG,OAAO,IAAI,SAAS,IAAI,SAAS,IAAI,OAAO;AAAA,EAC1D;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,UAAU,KAA4B;AAEjD,UAAM,QAAQ,IAAI,MAAM,2CAA2C;AACnE,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAClC,UAAM,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE;AACpC,UAAM,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE;AAGpC,QAAI,OAAO;AACX,QAAI,MAAM,CAAC,GAAG;AAEV,YAAM,UAAU,MAAM,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,UAAU,GAAG,CAAC;AACtD,aAAO,SAAS,SAAS,EAAE;AAAA,IAC/B;AAGA,QAAI,OAAO,KAAK,OAAO,IAAI;AACvB,aAAO;AAAA,IACX;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,aAAO;AAAA,IACX;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,aAAO;AAAA,IACX;AAEA,UAAM,QAAQ,OAAO,IAAI,IAAI,WAAU,iBAC1B,OAAO,MAAM,IAAI,WAAU,mBAC3B,OAAO,MAAM,IAAI,WAAU,mBAC3B,OAAO,IAAI;AAExB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AAAA;AA7Oa,WAIe,mBAAmB;AAJlC,WAKe,mBAAmB;AALlC,WAMe,iBAAiB;AANhC,WAOe,gBAAgB;AAPrC,IAAM,YAAN;;;ACGA,IAAM,gBAAN,MAAM,eAA+B;AAAA;AAAA,EAMxC,YAAY,OAAyC;AALrD,SAAS,OAAa;AAMlB,QAAI,UAAU,QAAW;AACrB,UAAI,iBAAiB,MAAM;AAEvB,cAAM,OAAO,MAAM,eAAe;AAClC,cAAM,QAAQ,MAAM,YAAY,IAAI;AACpC,cAAM,MAAM,MAAM,WAAW;AAC7B,cAAM,OAAO,MAAM,YAAY;AAC/B,cAAM,SAAS,MAAM,cAAc;AACnC,cAAM,SAAS,MAAM,cAAc;AACnC,cAAM,SAAS,MAAM,mBAAmB;AAExC,aAAK,SAAS,OAAO,MAAM,QAAQ;AACnC,aAAK,OAAO;AACZ,aAAK,QAAQ,OAAO,IAAI,IAAI,iBACxB,OAAO,MAAM,IAAI,eACjB,OAAO,MAAM,IAAI,cACjB,OAAO,MAAM,IAAI;AAAA,MACzB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,SAAS,eAAc,cAAc,KAAK;AAChD,YAAI,CAAC,QAAQ;AACT,gBAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,QACvD;AACA,aAAK,SAAS,OAAO;AACrB,aAAK,OAAO,OAAO;AACnB,aAAK,QAAQ,OAAO;AAAA,MACxB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,cAAM,OAAO,KAAK,eAAe;AACjC,cAAM,QAAQ,KAAK,YAAY,IAAI;AACnC,cAAM,MAAM,KAAK,WAAW;AAC5B,cAAM,OAAO,KAAK,YAAY;AAC9B,cAAM,SAAS,KAAK,cAAc;AAClC,cAAM,SAAS,KAAK,cAAc;AAClC,cAAM,SAAS,KAAK,mBAAmB;AAEvC,aAAK,SAAS,OAAO,MAAM,QAAQ;AACnC,aAAK,OAAO;AACZ,aAAK,QAAQ,OAAO,IAAI,IAAI,iBACxB,OAAO,MAAM,IAAI,eACjB,OAAO,MAAM,IAAI,cACjB,OAAO,MAAM,IAAI;AAAA,MACzB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,SAAS,OAAO,QAAQ,QAAU;AACxC,cAAM,aAAa,QAAQ;AAC3B,cAAM,OAAO,IAAI,KAAK,MAAM;AAE5B,cAAM,OAAO,KAAK,eAAe;AACjC,cAAM,QAAQ,KAAK,YAAY,IAAI;AACnC,cAAM,MAAM,KAAK,WAAW;AAC5B,cAAM,OAAO,KAAK,YAAY;AAC9B,cAAM,SAAS,KAAK,cAAc;AAClC,cAAM,SAAS,KAAK,cAAc;AAClC,cAAM,aAAa,KAAK,mBAAmB;AAE3C,aAAK,SAAS,OAAO,MAAM,QAAQ;AACnC,aAAK,OAAO;AACZ,aAAK,QAAQ,OAAO,IAAI,IAAI,iBACxB,OAAO,MAAM,IAAI,eACjB,OAAO,MAAM,IAAI,cACjB,OAAO,UAAU,IAAI,WACrB;AAAA,MACR,OAAO;AACH,cAAM,IAAI,MAAM,iEAAiE,OAAO,KAAK,EAAE;AAAA,MACnG;AAAA,IACJ,OAAO;AACH,WAAK,SAAS;AACd,WAAK,OAAO;AACZ,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,YACH,MACA,OACA,KACA,MACA,QACA,QACA,OAAe,GACF;AAEb,QAAI,OAAO,KAAK,OAAO,IAAI;AACvB,YAAM,IAAI,MAAM,iBAAiB,IAAI,EAAE;AAAA,IAC3C;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,YAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAAA,IAC/C;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,YAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAAA,IAC/C;AACA,QAAI,OAAO,KAAK,OAAO,WAAa;AAChC,YAAM,IAAI,MAAM,uBAAuB,IAAI,EAAE;AAAA,IACjD;AAGA,QAAI,CAAC,eAAc,YAAY,MAAM,OAAO,GAAG,GAAG;AAC9C,YAAM,IAAI,MAAM,qBAAqB,IAAI,IAAI,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE;AAAA,IACxN;AAEA,UAAM,SAAS,IAAI,eAAc,MAAS;AAC1C,IAAC,OAAe,SAAS,OAAO,MAAM,QAAQ;AAC9C,IAAC,OAAe,OAAO;AACvB,IAAC,OAAe,QAAQ,OAAO,IAAI,IAAI,iBACnC,OAAO,MAAM,IAAI,eACjB,OAAO,MAAM,IAAI,cACjB,OAAO,IAAI;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WACH,MACA,OACA,KACA,MACA,QACA,QACa;AACb,WAAO,eAAc,YAAY,MAAM,OAAO,KAAK,MAAM,QAAQ,QAAQ,CAAC;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,cAAc,SAAgC;AACjD,WAAO,IAAI,eAAc,UAAU,GAAI;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,oBAAoB,QAA+B;AACtD,WAAO,IAAI,eAAc,MAAM;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,oBAAoB,OAA8B;AACrD,WAAO,IAAI,eAAc,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAU,SAAiB,OAA8B;AAC5D,QAAI,QAAQ,KAAK,QAAQ,WAAa;AAClC,YAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,IACnD;AACA,UAAM,SAAS,UAAU,MAAO,KAAK,MAAM,QAAQ,GAAS;AAC5D,UAAM,aAAa,QAAQ;AAC3B,UAAM,SAAS,IAAI,eAAc,MAAM;AAGvC,QAAI,OAAO,UAAU,QAAW;AAC5B,MAAC,OAAe,QAAQ,OAAO,QAAQ,OAAO,UAAU;AAAA,IAC5D;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAqB;AACxB,WAAO,IAAI,eAAc,oBAAI,KAAK,CAAC;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAyB;AAC5B,WAAO,eAAc,WAAW,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAA4B;AACrC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,eAAc,MAAS;AAAA,IACtC;AAEA,UAAM,SAAS,eAAc,cAAc,OAAO;AAClD,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,MAAM,iBAAiB,GAAG,eAAe;AAAA,IACvD;AAEA,UAAM,SAAS,IAAI,eAAc,MAAS;AAC1C,IAAC,OAAe,SAAS,OAAO;AAChC,IAAC,OAAe,OAAO,OAAO;AAC9B,IAAC,OAAe,QAAQ,OAAO;AAC/B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,YAAgC;AAC5B,UAAM,OAAO,KAAK,QAAQ;AAC1B,QAAI,SAAS,OAAW,QAAO;AAC/B,WAAO,KAAK,MAAM,KAAK,QAAQ,IAAI,GAAI;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAqC;AACjC,UAAM,OAAO,KAAK,QAAQ;AAC1B,QAAI,SAAS,UAAa,KAAK,UAAU,OAAW,QAAO;AAG3D,UAAM,aAAa,OAAO,KAAK,QAAQ,CAAC,IAAI;AAI5C,UAAM,iBAAiB,KAAK,QAAQ;AAEpC,WAAO,aAAa;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAwC;AACpC,WAAO,KAAK,eAAe;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,UAAwC;AACpC,UAAM,OAAO,KAAK,QAAQ;AAC1B,QAAI,SAAS,UAAa,KAAK,UAAU,OAAW,QAAO;AAE3D,UAAM,UAAU,KAAK,MAAM,KAAK,QAAQ,IAAI,GAAI;AAChD,UAAM,SAAS,KAAK,QAAQ,IAAI;AAChC,UAAM,iBAAiB,OAAO,KAAK,QAAQ,QAAU;AACrD,UAAM,QAAQ,SAAS,MAAY;AACnC,WAAO,CAAC,SAAS,KAAK;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,OAA8B;AAC1B,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,OAAW,QAAO;AACjE,UAAM,OAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAExC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,UAAM,QAAQ,IAAI;AAClB,WAAO,UAAU,QAAQ,MAAM,OAAO,KAAK,IAAI;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKA,OAA8B;AAC1B,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,IAAI,UAAU,KAAK,KAAK;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAExC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,UAAM,QAAQ,OAAO,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AAC3C,UAAM,MAAM,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG,GAAG;AAG7C,UAAM,aAAa,KAAK;AACxB,UAAM,QAAQ,aAAa;AAC3B,UAAM,sBAAsB,aAAa;AACzC,UAAM,UAAU,sBAAsB;AACtC,UAAM,wBAAwB,sBAAsB;AACpD,UAAM,UAAU,wBAAwB;AACxC,UAAM,gBAAgB,wBAAwB;AAE9C,UAAM,OAAO,OAAO,OAAO,KAAK,CAAC,EAAE,SAAS,GAAG,GAAG;AAClD,UAAM,SAAS,OAAO,OAAO,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG;AACtD,UAAM,SAAS,OAAO,OAAO,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG;AACtD,UAAM,UAAU,OAAO,OAAO,aAAa,CAAC,EAAE,SAAS,GAAG,GAAG;AAG7D,QAAI;AACJ,QAAI,OAAO,GAAG;AACV,YAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,gBAAU,IAAI,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG,CAAC;AAAA,IAClD,OAAO;AACH,gBAAU,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG;AAAA,IAC1C;AAEA,WAAO,GAAG,OAAO,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO;AAAA,EAC5E;AAAA,EAEA,UAA4B;AACxB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAExC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,UAAM,QAAQ,IAAI;AAGlB,UAAM,aAAa,KAAK;AACxB,UAAM,QAAQ,OAAO,aAAa,cAAkB;AACpD,UAAM,sBAAsB,aAAa;AACzC,UAAM,UAAU,OAAO,sBAAsB,YAAe;AAC5D,UAAM,wBAAwB,sBAAsB;AACpD,UAAM,UAAU,OAAO,wBAAwB,WAAc;AAC7D,UAAM,gBAAgB,wBAAwB;AAC9C,UAAM,SAAS,OAAO,gBAAgB,QAAU;AAGhD,QAAI;AACJ,QAAI,QAAQ,KAAK,OAAO,KAAK;AACzB,aAAO,IAAI,KAAK,KAAK,IAAI,KAAM,QAAQ,GAAG,KAAK,MAAM,OAAO,SAAS,SAAS,MAAM,CAAC;AACrF,WAAK,eAAe,IAAI;AAAA,IAC5B,OAAO;AACH,aAAO,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,KAAK,MAAM,OAAO,SAAS,SAAS,MAAM,CAAC;AAAA,IACzF;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAA0B;AAC1B,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,cAAc,KAAqE;AAE9F,UAAM,QAAQ,IAAI,MAAM,wEAAwE;AAChG,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAClC,UAAM,QAAQ,SAAS,MAAM,CAAC,GAAG,EAAE;AACnC,UAAM,MAAM,SAAS,MAAM,CAAC,GAAG,EAAE;AACjC,UAAM,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAClC,UAAM,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE;AACpC,UAAM,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE;AAGpC,QAAI,gBAAgB;AACpB,QAAI,MAAM,CAAC,GAAG;AAEV,YAAM,UAAU,MAAM,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,UAAU,GAAG,CAAC;AACtD,sBAAgB,OAAO,OAAO;AAAA,IAClC;AAGA,QAAI,QAAQ,KAAK,QAAQ,IAAI;AACzB,aAAO;AAAA,IACX;AACA,QAAI,MAAM,KAAK,MAAM,IAAI;AACrB,aAAO;AAAA,IACX;AACA,QAAI,OAAO,KAAK,OAAO,IAAI;AACvB,aAAO;AAAA,IACX;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,aAAO;AAAA,IACX;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,aAAO;AAAA,IACX;AAGA,QAAI,CAAC,eAAc,YAAY,MAAM,OAAO,GAAG,GAAG;AAC9C,aAAO;AAAA,IACX;AAEA,UAAM,SAAS,OAAO,MAAM,QAAQ;AACpC,UAAM,QAAQ,OAAO,IAAI,IAAI,iBACzB,OAAO,MAAM,IAAI,eACjB,OAAO,MAAM,IAAI,cACjB;AAEJ,WAAO,EAAC,QAAQ,MAAM,KAAK,MAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,YAAY,MAAc,OAAe,KAAsB;AAE1E,QAAI;AACJ,QAAI,QAAQ,KAAK,OAAO,KAAK;AACzB,aAAO,IAAI,KAAK,KAAK,IAAI,KAAM,QAAQ,GAAG,GAAG,CAAC;AAC9C,WAAK,eAAe,IAAI;AAAA,IAC5B,OAAO;AACH,aAAO,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC;AAAA,IAClD;AAEA,WAAO,KAAK,eAAe,MAAM,QAC7B,KAAK,YAAY,MAAM,QAAQ,KAC/B,KAAK,WAAW,MAAM;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,gBAAgB;AACtB,QAAI,KAAK,WAAW,UAAa,cAAc,WAAW,QAAW;AACjE,aAAO,KAAK,WAAW,cAAc,UAC9B,KAAK,SAAS,cAAc,QAC5B,KAAK,UAAU,cAAc;AAAA,IACxC;AAEA,WAAO,KAAK,WAAW,cAAc,UAC9B,KAAK,SAAS,cAAc,QAC5B,KAAK,UAAU,cAAc;AAAA,EACxC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;ACndO,IAAM,eAAN,MAAM,cAA8B;AAAA,EAIvC,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,uCAAuC,OAAO,KAAK,EAAE;AAAA,MACzE;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAA2B;AACpC,QAAI,QAAQ,YAAY;AACpB,aAAO,IAAI,cAAa,MAAS;AAAA,IACrC;AAEA,WAAO,IAAI,cAAa,GAAG;AAAA,EAC/B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK;AAAA,EACpD;AAAA,EAEA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,eAAe;AACrB,WAAO,KAAK,UAAU,aAAa;AAAA,EACvC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;AC9CO,IAAM,eAAN,MAAM,aAA6B;AAAA,EAStC,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,sCAAsC,OAAO,KAAK,EAAE;AAAA,MACxE;AAEA,UAAI,OAAO,MAAM,KAAK,KAAK,CAAC,OAAO,SAAS,KAAK,GAAG;AAChD,aAAK,QAAQ;AAAA,MACjB,OAAO;AAEH,YAAI,UAAU,KAAK,KAAK,IAAI,KAAK,IAAI,aAAY,cAAc;AAE3D,eAAK,QAAQ;AAAA,QACjB,WAAW,QAAQ,aAAY,WAAW;AACtC,gBAAM,IAAI,MAAM,0BAA0B,KAAK,oBAAoB,aAAY,SAAS,EAAE;AAAA,QAC9F,WAAW,QAAQ,aAAY,WAAW;AACtC,gBAAM,IAAI,MAAM,2BAA2B,KAAK,oBAAoB,aAAY,SAAS,EAAE;AAAA,QAC/F,OAAO;AAEH,gBAAM,eAAe,IAAI,aAAa,CAAC;AACvC,uBAAa,CAAC,IAAI;AAClB,eAAK,QAAQ,aAAa,CAAC;AAAA,QAC/B;AAAA,MACJ;AAAA,IACJ,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAA0B;AACnC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,aAAY,MAAS;AAAA,IACpC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,OAAO,MAAM,GAAG,KAAK,QAAQ,YAAY,MAAM,OAAO;AACtD,YAAM,IAAI,MAAM,iBAAiB,GAAG,aAAa;AAAA,IACrD;AAEA,WAAO,IAAI,aAAY,GAAG;AAAA,EAC9B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,aAAa;AACnB,QAAI,KAAK,UAAU,UAAa,WAAW,UAAU,QAAW;AAC5D,aAAO,KAAK,UAAU,WAAW;AAAA,IACrC;AAGA,UAAM,UAAU;AAChB,WAAO,KAAK,IAAI,KAAK,QAAQ,WAAW,KAAK,KAAK;AAAA,EACtD;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AAEJ;AAtFa,aAEe,YAAY;AAF3B,aAGe,YAAY;AAH3B,aAIe,eAAe;AAJpC,IAAM,cAAN;;;ACAA,IAAM,cAAN,MAAM,aAA6B;AAAA,EAItC,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,sCAAsC,OAAO,KAAK,EAAE;AAAA,MACxE;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAA0B;AACnC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,aAAY,MAAS;AAAA,IACpC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,OAAO,MAAM,GAAG,KAAK,QAAQ,YAAY,MAAM,OAAO;AACtD,YAAM,IAAI,MAAM,iBAAiB,GAAG,aAAa;AAAA,IACrD;AAEA,WAAO,IAAI,aAAY,GAAG;AAAA,EAC9B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,aAAa;AACnB,WAAO,KAAK,UAAU,WAAW;AAAA,EACrC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;ACxDO,IAAM,aAAN,MAAM,WAA2B;AAAA,EAOpC,YAAY,OAAgB;AAN5B,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAC1B,cAAM,IAAI,MAAM,sCAAsC,KAAK,EAAE;AAAA,MACjE;AACA,UAAI,QAAQ,WAAU,aAAa,QAAQ,WAAU,WAAW;AAC5D,cAAM,IAAI,MAAM,8BAA8B,WAAU,SAAS,QAAQ,WAAU,SAAS,SAAS,KAAK,EAAE;AAAA,MAChH;AAAA,IACJ;AACA,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,WAAO,IAAI,WAAU,GAAG;AAAA,EAC5B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,WAAW;AACjB,WAAO,KAAK,UAAU,SAAS;AAAA,EACnC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA5Da,WAIe,YAAY;AAJ3B,WAKe,YAAY;AALjC,IAAM,YAAN;;;ACAA,IAAM,aAAN,MAAM,WAA2B;AAAA,EAOpC,YAAY,OAAgB;AAN5B,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAC1B,cAAM,IAAI,MAAM,sCAAsC,KAAK,EAAE;AAAA,MACjE;AACA,UAAI,QAAQ,WAAU,aAAa,QAAQ,WAAU,WAAW;AAC5D,cAAM,IAAI,MAAM,8BAA8B,WAAU,SAAS,QAAQ,WAAU,SAAS,SAAS,KAAK,EAAE;AAAA,MAChH;AAAA,IACJ;AACA,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,WAAO,IAAI,WAAU,GAAG;AAAA,EAC5B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,WAAW;AACjB,WAAO,KAAK,UAAU,SAAS;AAAA,EACnC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA5Da,WAIe,YAAY;AAJ3B,WAKe,YAAY;AALjC,IAAM,YAAN;;;ACAA,IAAM,aAAN,MAAM,WAA2B;AAAA,EAOpC,YAAY,OAAgB;AAN5B,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAC1B,cAAM,IAAI,MAAM,sCAAsC,KAAK,EAAE;AAAA,MACjE;AACA,UAAI,QAAQ,WAAU,aAAa,QAAQ,WAAU,WAAW;AAC5D,cAAM,IAAI,MAAM,8BAA8B,WAAU,SAAS,QAAQ,WAAU,SAAS,SAAS,KAAK,EAAE;AAAA,MAChH;AAAA,IACJ;AACA,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,WAAO,IAAI,WAAU,GAAG;AAAA,EAC5B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,WAAW;AACjB,WAAO,KAAK,UAAU,SAAS;AAAA,EACnC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA5Da,WAIe,YAAY;AAJ3B,WAKe,YAAY;AALjC,IAAM,YAAN;;;ACAA,IAAM,aAAN,MAAM,WAA2B;AAAA,EAOpC,YAAY,OAAyB;AANrC,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,YAAM,cAAc,OAAO,UAAU,WAAW,OAAO,KAAK,MAAM,KAAK,CAAC,IAAI;AAE5E,UAAI,cAAc,WAAU,aAAa,cAAc,WAAU,WAAW;AACxE,cAAM,IAAI,MAAM,8BAA8B,WAAU,SAAS,QAAQ,WAAU,SAAS,SAAS,WAAW,EAAE;AAAA,MACtH;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,QAAI;AACJ,QAAI;AACA,cAAQ,OAAO,OAAO;AAAA,IAC1B,SAAS,GAAG;AACR,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,QAAI,QAAQ,WAAU,aAAa,QAAQ,WAAU,WAAW;AAC5D,YAAM,IAAI,MAAM,8BAA8B,WAAU,SAAS,QAAQ,WAAU,SAAS,SAAS,KAAK,EAAE;AAAA,IAChH;AAEA,WAAO,IAAI,WAAU,KAAK;AAAA,EAC9B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,WAAW;AACjB,WAAO,KAAK,UAAU,SAAS;AAAA,EACnC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AAlEa,WAIe,YAAY,OAAO,sBAAsB;AAJxD,WAKe,YAAY,OAAO,qBAAqB;AAL7D,IAAM,YAAN;;;ACAA,IAAM,cAAN,MAAM,YAA4B;AAAA,EAOrC,YAAY,OAAkC;AAN9C,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI;AAEJ,UAAI,OAAO,UAAU,UAAU;AAC3B,YAAI;AACA,wBAAc,OAAO,KAAK;AAAA,QAC9B,SAAS,GAAG;AACR,gBAAM,IAAI,MAAM,4CAA4C,KAAK,EAAE;AAAA,QACvE;AAAA,MACJ,WAAW,OAAO,UAAU,UAAU;AAClC,sBAAc,OAAO,KAAK,MAAM,KAAK,CAAC;AAAA,MAC1C,OAAO;AACH,sBAAc;AAAA,MAClB;AAEA,UAAI,cAAc,YAAW,aAAa,cAAc,YAAW,WAAW;AAC1E,cAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,WAAW,EAAE;AAAA,MACzH;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAEA,QAAI;AACJ,QAAI;AACA,cAAQ,OAAO,OAAO;AAAA,IAC1B,SAAS,GAAG;AACR,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,QAAI,QAAQ,YAAW,aAAa,QAAQ,YAAW,WAAW;AAC9D,YAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,KAAK,EAAE;AAAA,IACnH;AAEA,WAAO,IAAI,YAAW,KAAK;AAAA,EAC/B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,WAAW;AACjB,WAAO,KAAK,UAAU,SAAS;AAAA,EACnC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA9Ea,YAIe,YAAY,OAAO,0CAA0C;AAJ5E,YAKe,YAAY,OAAO,yCAAyC;AALjF,IAAM,aAAN;;;ACIA,IAAM,gBAAN,MAAM,eAA+B;AAAA;AAAA,EAMxC,YAAY,OAAkE;AAL9E,SAAS,OAAa;AAMlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAE3B,cAAM,SAAS,eAAc,cAAc,KAAK;AAChD,YAAI,CAAC,QAAQ;AACT,gBAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,QACvD;AACA,aAAK,SAAS,OAAO;AACrB,aAAK,OAAO,OAAO;AACnB,aAAK,QAAQ,OAAO;AAAA,MACxB,WAAW,OAAO,UAAU,YAAY,UAAU,MAAM;AACpD,aAAK,SAAS,MAAM;AACpB,aAAK,OAAO,MAAM;AAClB,aAAK,QAAQ,MAAM;AAAA,MACvB,OAAO;AACH,cAAM,IAAI,MAAM,mDAAmD,OAAO,KAAK,EAAE;AAAA,MACrF;AAAA,IACJ,OAAO;AACH,WAAK,SAAS;AACd,WAAK,OAAO;AACZ,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAI,QAAgB,MAAc,OAA8B;AACnE,WAAO,IAAI,eAAc,EAAE,QAAQ,MAAM,MAAM,CAAC;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,YAAY,SAAgC;AAC/C,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,OAAO,OAAO,IAAI,YAAe,CAAC;AAAA,EAC5F;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,iBAAiB,cAAqC;AACzD,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,OAAO,YAAY,IAAI,SAAW,CAAC;AAAA,EAC7F;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,iBAAiB,cAAqC;AACzD,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,OAAO,YAAY,IAAI,MAAO,CAAC;AAAA,EACzF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,gBAAgB,aAAoC;AACvD,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,YAAY,CAAC;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,YAAY,SAAgC;AAC/C,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,OAAO,OAAO,IAAI,MAAM,YAAe,CAAC;AAAA,EAClG;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAU,OAA8B;AAC3C,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,OAAO,KAAK,IAAI,MAAM,MAAM,YAAe,CAAC;AAAA,EACtG;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAS,MAA6B;AACzC,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,OAAO,GAAG,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAU,OAA8B;AAC3C,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAW,QAA+B;AAC7C,WAAO,IAAI,eAAc,EAAE,QAAQ,MAAM,GAAG,OAAO,GAAG,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAU,OAA8B;AAC3C,WAAO,IAAI,eAAc,EAAE,QAAQ,QAAQ,IAAI,MAAM,GAAG,OAAO,GAAG,CAAC;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAsB;AACzB,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAyB;AAC5B,WAAO,eAAc,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAA4B;AACrC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,eAAc,MAAS;AAAA,IACtC;AAEA,UAAM,SAAS,eAAc,cAAc,OAAO;AAClD,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,MAAM,iBAAiB,GAAG,eAAe;AAAA,IACvD;AAEA,WAAO,IAAI,eAAc,EAAE,QAAQ,OAAO,QAAQ,MAAM,OAAO,MAAM,OAAO,OAAO,MAAM,CAAC;AAAA,EAC9F;AAAA;AAAA;AAAA;AAAA,EAKA,UAA8B;AAC1B,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,eAAmC;AAC/B,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,eAAmC;AAC/B,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,cAAkC;AAC9B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAgC;AAC5B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,WAA+B;AAC3B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAsB;AAClB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AACA,WAAO,KAAK,SAAS,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,aAAsB;AAClB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AACA,WAAO,KAAK,SAAS,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAqB;AACjB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO,IAAI,eAAc,MAAS;AAAA,IACtC;AACA,WAAO,IAAI,eAAc;AAAA,MACrB,QAAQ,KAAK,IAAI,KAAK,MAAM;AAAA,MAC5B,MAAM,KAAK,IAAI,KAAK,IAAI;AAAA,MACxB,OAAO,KAAK,QAAQ,KAAK,CAAC,KAAK,QAAQ,KAAK;AAAA,IAChD,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,SAAwB;AACpB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO,IAAI,eAAc,MAAS;AAAA,IACtC;AACA,WAAO,IAAI,eAAc;AAAA,MACrB,QAAQ,CAAC,KAAK;AAAA,MACd,MAAM,CAAC,KAAK;AAAA,MACZ,OAAO,CAAC,KAAK;AAAA,IACjB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,cAAsB;AAClB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AAGA,QAAI,KAAK,WAAW,KAAK,KAAK,SAAS,KAAK,KAAK,UAAU,IAAI;AAC3D,aAAO;AAAA,IACX;AAEA,QAAI,SAAS;AAGb,UAAM,QAAQ,KAAK,MAAM,KAAK,SAAS,EAAE;AACzC,UAAM,SAAS,KAAK,SAAS;AAE7B,QAAI,UAAU,GAAG;AACb,gBAAU,GAAG,KAAK;AAAA,IACtB;AAEA,QAAI,WAAW,GAAG;AACd,gBAAU,GAAG,MAAM;AAAA,IACvB;AAGA,UAAM,eAAe,KAAK,QAAQ;AAClC,UAAM,iBAAiB,KAAK,QAAQ;AAGpC,UAAM,YAAY,eAAe;AACjC,UAAM,mBAAmB,eAAe;AAExC,UAAM,cAAc,KAAK,OAAO,OAAO,SAAS;AAChD,UAAM,QAAQ,mBAAmB;AACjC,UAAM,UAAW,mBAAmB,QAAS;AAC7C,UAAM,UAAU,mBAAmB;AAEnC,QAAI,gBAAgB,GAAG;AACnB,gBAAU,GAAG,WAAW;AAAA,IAC5B;AAGA,QAAI,UAAU,MAAM,YAAY,MAAM,YAAY,MAAM,mBAAmB,IAAI;AAC3E,gBAAU;AAEV,UAAI,UAAU,IAAI;AACd,kBAAU,GAAG,KAAK;AAAA,MACtB;AAEA,UAAI,YAAY,IAAI;AAChB,kBAAU,GAAG,OAAO;AAAA,MACxB;AAEA,UAAI,YAAY,MAAM,mBAAmB,IAAI;AACzC,YAAI,mBAAmB,IAAI;AAEvB,gBAAM,aAAa,OAAO,cAAc,IAAI;AAC5C,gBAAM,oBAAoB,OAAO,OAAO,IAAI;AAE5C,gBAAM,YAAY,kBAAkB,QAAQ,CAAC,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,EAAE;AACnF,oBAAU,GAAG,SAAS;AAAA,QAC1B,OAAO;AACH,oBAAU,GAAG,OAAO;AAAA,QACxB;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAmB;AACf,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AAGA,QAAI,KAAK,WAAW,KAAK,KAAK,SAAS,KAAK,KAAK,UAAU,IAAI;AAC3D,aAAO;AAAA,IACX;AAEA,UAAM,QAAkB,CAAC;AAGzB,UAAM,QAAQ,KAAK,MAAM,KAAK,SAAS,EAAE;AACzC,UAAM,SAAS,KAAK,SAAS;AAE7B,QAAI,UAAU,GAAG;AACb,YAAM,KAAK,UAAU,IAAI,WAAW,GAAG,KAAK,QAAQ;AAAA,IACxD;AAEA,QAAI,WAAW,GAAG;AACd,YAAM,KAAK,WAAW,IAAI,UAAU,GAAG,MAAM,OAAO;AAAA,IACxD;AAGA,UAAM,eAAe,KAAK,QAAQ;AAClC,UAAM,iBAAiB,KAAK,QAAQ;AAGpC,UAAM,YAAY,eAAe;AACjC,UAAM,mBAAmB,eAAe;AAExC,UAAM,cAAc,KAAK,OAAO,OAAO,SAAS;AAChD,UAAM,QAAQ,mBAAmB;AACjC,UAAM,UAAW,mBAAmB,QAAS;AAC7C,UAAM,UAAU,mBAAmB;AAEnC,QAAI,gBAAgB,GAAG;AACnB,YAAM,KAAK,gBAAgB,IAAI,UAAU,GAAG,WAAW,OAAO;AAAA,IAClE;AAGA,QAAI,UAAU,MAAM,YAAY,MAAM,YAAY,MAAM,mBAAmB,MAAM,MAAM,WAAW,GAAG;AACjG,YAAM,WAAW,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG;AAC9C,YAAM,aAAa,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG;AAElD,UAAI;AACJ,UAAI,mBAAmB,IAAI;AAEvB,cAAM,aAAa,OAAO,cAAc,IAAI;AAC5C,cAAM,oBAAoB,OAAO,OAAO,IAAI;AAE5C,cAAM,YAAY,kBAAkB,QAAQ,CAAC,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,EAAE;AAEnF,cAAM,WAAW,UAAU,QAAQ,GAAG;AACtC,YAAI,YAAY,GAAG;AACf,gBAAM,YAAY,UAAU,UAAU,GAAG,QAAQ,EAAE,SAAS,GAAG,GAAG;AAClE,gBAAM,iBAAiB,UAAU,UAAU,QAAQ;AACnD,uBAAa,YAAY;AAAA,QAC7B,OAAO;AACH,uBAAa,UAAU,SAAS,GAAG,GAAG;AAAA,QAC1C;AAAA,MACJ,OAAO;AACH,qBAAa,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG;AAAA,MAChD;AAEA,YAAM,KAAK,GAAG,QAAQ,IAAI,UAAU,IAAI,UAAU,EAAE;AAAA,IACxD;AAEA,WAAO,MAAM,KAAK,GAAG;AAAA,EACzB;AAAA,EAEA,UAAuE;AACnE,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AACA,WAAO,EAAE,QAAQ,KAAK,QAAQ,MAAM,KAAK,MAAM,OAAO,KAAK,MAAM;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAAqE;AACrE,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,cAAc,KAAqE;AAG9F,UAAM,WAAW,IAAI,WAAW,GAAG;AACnC,UAAM,WAAW,WAAW,IAAI,UAAU,CAAC,IAAI;AAE/C,QAAI,CAAC,SAAS,WAAW,GAAG,GAAG;AAC3B,aAAO;AAAA,IACX;AAEA,UAAM,QAAQ,SAAS,MAAM,uFAAuF;AACpH,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AAGA,QAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AAC5E,aAAO;AAAA,IACX;AAEA,UAAM,QAAQ,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC1C,UAAM,SAAS,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC3C,UAAM,OAAO,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AACzC,UAAM,QAAQ,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC1C,UAAM,UAAU,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC5C,UAAM,aAAa,MAAM,CAAC,KAAK;AAG/B,UAAM,eAAe,WAAW,MAAM,GAAG;AACzC,UAAM,eAAe,SAAS,aAAa,CAAC,KAAK,KAAK,EAAE;AACxD,QAAI,YAAY;AAChB,QAAI,aAAa,SAAS,GAAG;AAEzB,YAAM,UAAU,aAAa,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,UAAU,GAAG,CAAC;AAC7D,kBAAY,OAAO,OAAO;AAAA,IAC9B;AAGA,UAAM,aAAa,OAAO,KAAK,IAAI,QAAQ,cACzB,OAAO,OAAO,IAAI,MAAM,cACxB,OAAO,YAAY,IAAI,cACvB;AAElB,UAAM,cAAc,QAAQ,KAAK;AAEjC,QAAI,UAAU;AACV,aAAO;AAAA,QACH,QAAQ,CAAC;AAAA,QACT,MAAM,CAAC;AAAA,QACP,OAAO,CAAC;AAAA,MACZ;AAAA,IACJ,OAAO;AACH,aAAO;AAAA,QACH,QAAQ;AAAA,QACR;AAAA,QACA,OAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,gBAAgB;AACtB,QAAI,KAAK,WAAW,UAAa,cAAc,WAAW,QAAW;AACjE,aAAO,KAAK,WAAW,cAAc,UAC9B,KAAK,SAAS,cAAc,QAC5B,KAAK,UAAU,cAAc;AAAA,IACxC;AAEA,WAAO,KAAK,WAAW,cAAc,UAC9B,KAAK,SAAS,cAAc,QAC5B,KAAK,UAAU,cAAc;AAAA,EACxC;AAAA,EAEA,SAAiB;AACb,WAAO,KAAK,UAAU,SAAY,aAAa,KAAK,YAAY;AAAA,EACpE;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,YAAY;AAAA,IACpE;AAAA,EACJ;AACJ;;;ACpfO,IAAM,cAAN,MAAM,YAA4B;AAAA,EAOrC,YAAY,OAAgB;AAN5B,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAC1B,cAAM,IAAI,MAAM,uCAAuC,KAAK,EAAE;AAAA,MAClE;AACA,UAAI,QAAQ,YAAW,aAAa,QAAQ,YAAW,WAAW;AAC9D,cAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,KAAK,EAAE;AAAA,MACnH;AAAA,IACJ;AACA,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,WAAO,IAAI,YAAW,GAAG;AAAA,EAC7B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA5Da,YAIe,YAAY;AAJ3B,YAKe,YAAY;AALjC,IAAM,aAAN;;;ACAA,IAAM,cAAN,MAAM,YAA4B;AAAA,EAOrC,YAAY,OAAgB;AAN5B,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAC1B,cAAM,IAAI,MAAM,uCAAuC,KAAK,EAAE;AAAA,MAClE;AACA,UAAI,QAAQ,YAAW,aAAa,QAAQ,YAAW,WAAW;AAC9D,cAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,KAAK,EAAE;AAAA,MACnH;AAAA,IACJ;AACA,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,WAAO,IAAI,YAAW,GAAG;AAAA,EAC7B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA5Da,YAIe,YAAY;AAJ3B,YAKe,YAAY;AALjC,IAAM,aAAN;;;ACAA,IAAM,cAAN,MAAM,YAA4B;AAAA,EAOrC,YAAY,OAAgB;AAN5B,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAC1B,cAAM,IAAI,MAAM,uCAAuC,KAAK,EAAE;AAAA,MAClE;AACA,UAAI,QAAQ,YAAW,aAAa,QAAQ,YAAW,WAAW;AAC9D,cAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,KAAK,EAAE;AAAA,MACnH;AAAA,IACJ;AACA,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,WAAO,IAAI,YAAW,GAAG;AAAA,EAC7B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA5Da,YAIe,YAAY;AAJ3B,YAKe,YAAY;AALjC,IAAM,aAAN;;;ACAA,IAAM,cAAN,MAAM,YAA4B;AAAA,EAOrC,YAAY,OAAyB;AANrC,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,YAAM,cAAc,OAAO,UAAU,WAAW,OAAO,KAAK,MAAM,KAAK,CAAC,IAAI;AAE5E,UAAI,cAAc,YAAW,aAAa,cAAc,YAAW,WAAW;AAC1E,cAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,WAAW,EAAE;AAAA,MACzH;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAEA,QAAI;AACJ,QAAI;AACA,cAAQ,OAAO,OAAO;AAAA,IAC1B,SAAS,GAAG;AACR,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,QAAI,QAAQ,YAAW,aAAa,QAAQ,YAAW,WAAW;AAC9D,YAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,KAAK,EAAE;AAAA,IACnH;AAEA,WAAO,IAAI,YAAW,KAAK;AAAA,EAC/B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAA+B;AAC3B,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,OAAO,KAAK,KAAK;AAAA,EAC5B;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AAvEa,YAIe,YAAY,OAAO,CAAC;AAJnC,YAKe,YAAY,OAAO,sBAAsB;AAL9D,IAAM,aAAN;;;ACAA,IAAM,eAAN,MAAM,aAA6B;AAAA,EAOtC,YAAY,OAAkC;AAN9C,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI;AAEJ,UAAI,OAAO,UAAU,UAAU;AAC3B,YAAI;AACA,wBAAc,OAAO,KAAK;AAAA,QAC9B,SAAS,GAAG;AACR,gBAAM,IAAI,MAAM,6CAA6C,KAAK,EAAE;AAAA,QACxE;AAAA,MACJ,WAAW,OAAO,UAAU,UAAU;AAClC,sBAAc,OAAO,KAAK,MAAM,KAAK,CAAC;AAAA,MAC1C,OAAO;AACH,sBAAc;AAAA,MAClB;AAEA,UAAI,cAAc,aAAY,aAAa,cAAc,aAAY,WAAW;AAC5E,cAAM,IAAI,MAAM,gCAAgC,aAAY,SAAS,QAAQ,aAAY,SAAS,SAAS,WAAW,EAAE;AAAA,MAC5H;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAA0B;AACnC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,aAAY,MAAS;AAAA,IACpC;AAEA,QAAI;AACJ,QAAI;AACA,cAAQ,OAAO,OAAO;AAAA,IAC1B,SAAS,GAAG;AACR,YAAM,IAAI,MAAM,iBAAiB,GAAG,aAAa;AAAA,IACrD;AAEA,QAAI,QAAQ,aAAY,aAAa,QAAQ,aAAY,WAAW;AAChE,YAAM,IAAI,MAAM,gCAAgC,aAAY,SAAS,QAAQ,aAAY,SAAS,SAAS,KAAK,EAAE;AAAA,IACtH;AAEA,WAAO,IAAI,aAAY,KAAK;AAAA,EAChC;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA9Ea,aAIe,YAAY,OAAO,CAAC;AAJnC,aAKe,YAAY,OAAO,yCAAyC;AALjF,IAAM,cAAN;;;ACAA,IAAM,YAAN,MAAM,WAA2B;AAAA,EAIpC,YAAY,WAAsB;AAHlC,SAAS,OAAa;AAIlB,SAAK,YAAY,aAAa;AAAA,EAClC;AAAA,EAEA,OAAO,MAAM,KAAa,WAAiC;AACvD,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,cAAc,YAAY,QAAQ;AAChE,aAAO,IAAI,WAAU,SAAS;AAAA,IAClC;AACA,UAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,EACnD;AAAA,EAEA,SAAkB;AACd,WAAO;AAAA,EACX;AAAA,EAEA,WAAmB;AACf,WAAO;AAAA,EACX;AAAA,EAEA,UAAqB;AACjB,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,QAAmB;AACnB,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,OAAuB;AAC1B,QAAI,EAAE,iBAAiB,aAAY;AAC/B,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EAEA,QAAQ,OAA0B;AAC9B,WAAO;AAAA,EACX;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM;AAAA,MACN,OAAO;AAAA,IACX;AAAA,EACJ;AACJ;;;ACjDO,IAAM,YAAN,MAAM,WAA2B;AAAA,EAIpC,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,oCAAoC,OAAO,KAAK,EAAE;AAAA,MACtE;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAAwB;AACjC,QAAI,QAAQ,YAAY;AACpB,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,WAAO,IAAI,WAAU,GAAG;AAAA,EAC5B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;ACpDA,SAAS,MAAM,QAAQ,OAAO,UAAU,UAAU,eAAe;AAO1D,IAAM,aAAN,MAAM,YAA4B;AAAA,EAIrC,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,qCAAqC,OAAO,KAAK,EAAE;AAAA,MACvE;AAGA,UAAI,CAAC,SAAS,KAAK,GAAG;AAClB,cAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,MACnD;AAGA,YAAM,MAAM,QAAQ,KAAK;AACzB,UAAI,UAAU,YAAY,QAAQ,GAAG;AACjC,cAAM,IAAI,MAAM,qDAAqD,GAAG,EAAE;AAAA,MAC9E;AAEA,WAAK,OAAO,MAAM,YAAY;AAAA,IAClC,OAAO;AACH,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAuB;AAC1B,WAAO,IAAI,YAAW,OAAO,CAAC;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAI,MAA0B;AACjC,WAAO,IAAI,YAAW,IAAI;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAkB;AACrB,WAAO,IAAI,YAAW,QAAQ;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAsB;AACzB,WAAO,YAAW,IAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAGA,QAAI,CAAC,SAAS,OAAO,GAAG;AACpB,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,UAAM,MAAM,QAAQ,OAAO;AAC3B,QAAI,YAAY,YAAY,QAAQ,GAAG;AACnC,YAAM,IAAI,MAAM,iBAAiB,GAAG,+BAA+B,GAAG,GAAG;AAAA,IAC7E;AAEA,WAAO,IAAI,YAAW,OAAO;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,WAA+B;AAC3B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAkC;AAC9B,QAAI,KAAK,SAAS,OAAW,QAAO;AAGpC,UAAM,MAAM,KAAK,KAAK,QAAQ,MAAM,EAAE;AACtC,UAAM,QAAQ,IAAI,WAAW,EAAE;AAC/B,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,YAAM,CAAC,IAAI,SAAS,IAAI,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;AAAA,IAC3D;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,QAAiB;AACb,WAAO,KAAK,SAAS;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAiC;AAC7B,QAAI,KAAK,SAAS,OAAW,QAAO;AACpC,WAAO,QAAQ,KAAK,IAAI;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,QAAI,KAAK,SAAS,QAAW;AACzB,aAAO;AAAA,IACX;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAA4B;AAC5B,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,SAAS,UAAU;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,OAA2B;AAC/B,QAAI,KAAK,SAAS,UAAa,MAAM,SAAS,QAAW;AACrD,UAAI,KAAK,SAAS,MAAM,KAAM,QAAO;AACrC,UAAI,KAAK,SAAS,OAAW,QAAO;AACpC,aAAO;AAAA,IACX;AAGA,UAAM,YAAY,KAAK,QAAQ;AAC/B,UAAM,aAAa,MAAM,QAAQ;AAEjC,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,UAAI,UAAU,CAAC,IAAI,WAAW,CAAC,EAAG,QAAO;AACzC,UAAI,UAAU,CAAC,IAAI,WAAW,CAAC,EAAG,QAAO;AAAA,IAC7C;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;ACvLA,SAAS,MAAM,QAAQ,OAAOA,WAAU,YAAAC,WAAU,WAAAC,gBAAe;AAO1D,IAAM,aAAN,MAAM,YAA4B;AAAA,EAIrC,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,qCAAqC,OAAO,KAAK,EAAE;AAAA,MACvE;AAGA,UAAI,CAACC,UAAS,KAAK,GAAG;AAClB,cAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,MACnD;AAGA,YAAM,MAAMC,SAAQ,KAAK;AACzB,UAAI,UAAUC,aAAY,QAAQ,GAAG;AACjC,cAAM,IAAI,MAAM,qDAAqD,GAAG,EAAE;AAAA,MAC9E;AAEA,WAAK,OAAO,MAAM,YAAY;AAAA,IAClC,OAAO;AACH,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAuB;AAC1B,WAAO,IAAI,YAAW,OAAO,CAAC;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAI,MAA0B;AACjC,WAAO,IAAI,YAAW,IAAI;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAkB;AACrB,WAAO,IAAI,YAAWA,SAAQ;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAsB;AACzB,WAAO,YAAW,IAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAGA,QAAI,CAACF,UAAS,OAAO,GAAG;AACpB,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,UAAM,MAAMC,SAAQ,OAAO;AAC3B,QAAI,YAAYC,aAAY,QAAQ,GAAG;AACnC,YAAM,IAAI,MAAM,iBAAiB,GAAG,+BAA+B,GAAG,GAAG;AAAA,IAC7E;AAEA,WAAO,IAAI,YAAW,OAAO;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,WAA+B;AAC3B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAkC;AAC9B,QAAI,KAAK,SAAS,OAAW,QAAO;AAGpC,UAAM,MAAM,KAAK,KAAK,QAAQ,MAAM,EAAE;AACtC,UAAM,QAAQ,IAAI,WAAW,EAAE;AAC/B,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,YAAM,CAAC,IAAI,SAAS,IAAI,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;AAAA,IAC3D;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,eAAmC;AAC/B,QAAI,KAAK,SAAS,UAAa,KAAK,SAASA,UAAU,QAAO;AAG9D,UAAM,MAAM,KAAK,KAAK,QAAQ,MAAM,EAAE;AACtC,UAAM,eAAe,IAAI,UAAU,GAAG,EAAE;AACxC,UAAM,YAAY,SAAS,cAAc,EAAE;AAC3C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,QAAiB;AACb,WAAO,KAAK,SAASA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAiC;AAC7B,QAAI,KAAK,SAAS,OAAW,QAAO;AACpC,WAAOD,SAAQ,KAAK,IAAI;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,QAAI,KAAK,SAAS,QAAW;AACzB,aAAO;AAAA,IACX;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAA4B;AAC5B,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,SAAS,UAAU;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,OAA2B;AAC/B,QAAI,KAAK,SAAS,UAAa,MAAM,SAAS,QAAW;AACrD,UAAI,KAAK,SAAS,MAAM,KAAM,QAAO;AACrC,UAAI,KAAK,SAAS,OAAW,QAAO;AACpC,aAAO;AAAA,IACX;AAGA,UAAM,YAAY,KAAK,QAAQ;AAC/B,UAAM,aAAa,MAAM,QAAQ;AAEjC,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,UAAI,UAAU,CAAC,IAAI,WAAW,CAAC,EAAG,QAAO;AACzC,UAAI,UAAU,CAAC,IAAI,WAAW,CAAC,EAAG,QAAO;AAAA,IAC7C;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;ACrMA,SAAS,MAAME,SAAQ,OAAOC,WAAU,YAAAC,WAAU,WAAAC,gBAAe;AAO1D,IAAM,kBAAN,MAAM,iBAAiC;AAAA,EAI1C,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,0CAA0C,OAAO,KAAK,EAAE;AAAA,MAC5E;AAGA,UAAI,CAACC,UAAS,KAAK,GAAG;AAClB,cAAM,IAAI,MAAM,uCAAuC,KAAK,EAAE;AAAA,MAClE;AAGA,YAAM,MAAMC,SAAQ,KAAK;AACzB,UAAI,UAAUC,aAAY,QAAQ,GAAG;AACjC,cAAM,IAAI,MAAM,0DAA0D,GAAG,EAAE;AAAA,MACnF;AAEA,WAAK,QAAQ,MAAM,YAAY;AAAA,IACnC,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAA4B;AAC/B,WAAO,IAAI,iBAAgBC,QAAO,CAAC;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAuB;AAC1B,WAAO,IAAI,iBAAgBD,SAAQ;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAA8B;AACvC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,iBAAgB,MAAS;AAAA,IACxC;AAGA,QAAI,CAACF,UAAS,OAAO,GAAG;AACpB,YAAM,IAAI,MAAM,iBAAiB,GAAG,iBAAiB;AAAA,IACzD;AAEA,UAAM,MAAMC,SAAQ,OAAO;AAC3B,QAAI,YAAYC,aAAY,QAAQ,GAAG;AACnC,YAAM,IAAI,MAAM,iBAAiB,GAAG,yCAAyC,GAAG,GAAG;AAAA,IACvF;AAEA,WAAO,IAAI,iBAAgB,OAAO;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,eAAmC;AAC/B,QAAI,KAAK,UAAU,UAAa,KAAK,UAAUA,UAAU,QAAO;AAGhE,UAAM,MAAM,KAAK,MAAM,QAAQ,MAAM,EAAE;AACvC,UAAM,eAAe,IAAI,UAAU,GAAG,EAAE;AACxC,UAAM,YAAY,SAAS,cAAc,EAAE;AAC3C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,QAAiB;AACb,WAAO,KAAK,UAAUA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,kBAAkB;AACxB,WAAO,KAAK,UAAU,gBAAgB;AAAA,EAC1C;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;AClFO,SAAS,aAAa,GAA0B;AACnD,SAAO,OAAO,MAAM,YAAY,MAAM,QAAQ,YAAY;AAC9D;AAEO,SAAS,iBAAiB,GAAmB;AAChD,MAAI,aAAa,CAAC,EAAG,QAAO,iBAAiB,EAAE,MAAM;AACrD,SAAO;AACX;AAOO,IAAe,QAAf,MAAqB;AAK5B;;;AClDO,SAAS,OAAO,MAA4B;AAC/C,MAAI,aAAa,KAAK,IAAI,GAAG;AACzB,UAAM,YAAY,iBAAiB,KAAK,IAAI;AAC5C,QAAI,KAAK,UAAU,cAAc,KAAK,UAAU,IAAI;AAChD,aAAO,IAAI,UAAU,SAAS;AAAA,IAClC;AACA,WAAO,OAAO,EAAC,MAAM,WAAW,OAAO,KAAK,MAAK,CAAC;AAAA,EACtD;AAEA,UAAQ,KAAK,MAAM;AAAA,IACf,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,aAAa,MAAM,KAAK,KAAK;AAAA,IACxC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,cAAc,MAAM,KAAK,KAAK;AAAA,IACzC,KAAK;AACD,aAAO,aAAa,MAAM,KAAK,KAAK;AAAA,IACxC,KAAK;AACD,aAAO,YAAY,MAAM,KAAK,KAAK;AAAA,IACvC,KAAK;AACD,aAAO,YAAY,MAAM,KAAK,KAAK;AAAA,IACvC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,cAAc,MAAM,KAAK,KAAK;AAAA,IACzC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,YAAY,MAAM,KAAK,KAAK;AAAA,IACvC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,gBAAgB,MAAM,KAAK,KAAK;AAAA,IAC3C;AACI,YAAM,IAAI,MAAM,qBAAqB,KAAK,IAAI,EAAE;AAAA,EACxD;AACJ;;;AClEO,IAAM,gBAAN,MAAoB;AAAA,EAEvB,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,OAAuC;AAC1C,WAAO,EAAC,MAAM,aAAa,MAAM,UAAS;AAAA,EAC9C;AAAA,EAEA,OAAO,UAA0C;AAC7C,WAAO,EAAC,MAAM,aAAa,MAAM,UAAS;AAAA,EAC9C;AAAA,EAEA,OAAO,UAA0C;AAC7C,WAAO,EAAC,MAAM,aAAa,MAAM,UAAS;AAAA,EAC9C;AAAA,EAEA,OAAO,SAAwC;AAC3C,WAAO,EAAC,MAAM,aAAa,MAAM,SAAQ;AAAA,EAC7C;AAAA,EAEA,OAAO,SAAwC;AAC3C,WAAO,EAAC,MAAM,aAAa,MAAM,SAAQ;AAAA,EAC7C;AAAA,EAEA,OAAO,QAAuC;AAC1C,WAAO,EAAC,MAAM,aAAa,MAAM,SAAQ;AAAA,EAC7C;AAAA,EAEA,OAAO,SAAwC;AAC3C,WAAO,EAAC,MAAM,aAAa,MAAM,SAAQ;AAAA,EAC7C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,MAAmC;AACtC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,SAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,SAAwC;AAC3C,WAAO,EAAC,MAAM,aAAa,MAAM,SAAQ;AAAA,EAC7C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,SAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,WAA4C;AAC/C,WAAO,EAAC,MAAM,aAAa,MAAM,WAAU;AAAA,EAC/C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,WAA4C;AAC/C,WAAO,EAAC,MAAM,aAAa,MAAM,WAAU;AAAA,EAC/C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,OAAqC;AACxC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,aAAgD;AACnD,WAAO,EAAC,MAAM,aAAa,MAAM,aAAY;AAAA,EACjD;AAAA,EAEA,OAAO,OAA6C,YAAoC;AACpF,WAAO,EAAC,MAAM,UAAU,WAAU;AAAA,EACtC;AAAA,EAEA,OAAO,MAA4B,OAA8B;AAC7D,WAAO,EAAC,MAAM,SAAS,MAAK;AAAA,EAChC;AAAA,EAEA,OAAO,SAA+B,QAAkC;AACpE,WAAO,EAAC,MAAM,YAAY,OAAM;AAAA,EACpC;AAAA,EAEA,OAAO,SAAwC;AAC3C,WAAO,EAAC,MAAM,aAAa,MAAM,SAAQ;AAAA,EAC7C;AAAA,EAEA,OAAO,eAA2C;AAC9C,WAAO,EAAC,MAAM,SAAS,MAAM,UAAS;AAAA,EAC1C;AAAA,EAEA,OAAO,eAA2C;AAC9C,WAAO,EAAC,MAAM,SAAS,MAAM,UAAS;AAAA,EAC1C;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,cAAyC;AAC5C,WAAO,EAAC,MAAM,SAAS,MAAM,SAAQ;AAAA,EACzC;AAAA,EAEA,OAAO,cAAyC;AAC5C,WAAO,EAAC,MAAM,SAAS,MAAM,SAAQ;AAAA,EACzC;AAAA,EAEA,OAAO,cAAyC;AAC5C,WAAO,EAAC,MAAM,SAAS,MAAM,SAAQ;AAAA,EACzC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,gBAA6C;AAChD,WAAO,EAAC,MAAM,SAAS,MAAM,WAAU;AAAA,EAC3C;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,gBAA6C;AAChD,WAAO,EAAC,MAAM,SAAS,MAAM,WAAU;AAAA,EAC3C;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,kBAAiD;AACpD,WAAO,EAAC,MAAM,SAAS,MAAM,aAAY;AAAA,EAC7C;AACJ;AAEO,IAAM,SAAS;;;ACvOtB,SAAS,oBAAwC,MAAS,OAAiC;AACvF,UAAQ,MAAM;AAAA,IACV,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,aAAa,KAAK;AAAA,IACjC,KAAK;AACD,aAAO,IAAI,YAAY,KAAK;AAAA,IAChC,KAAK;AACD,aAAO,IAAI,YAAY,KAAK;AAAA,IAChC,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,YAAY,KAAK;AAAA,IAChC,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,cAAc,KAAK;AAAA,IAClC,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,cAAc,KAAK;AAAA,IAClC,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,aAAa,KAAK;AAAA,IACjC,KAAK;AACD,aAAO,IAAI,gBAAgB,KAAK;AAAA,IACpC,KAAK;AACD,aAAO,IAAI,UAAU;AAAA,IACzB;AACI,YAAM,IAAI,MAAM,iBAAiB,IAAI,EAAE;AAAA,EAC/C;AACJ;AAEO,SAAS,WAAW,QAAoB,OAAiB;AAC5D,MAAI,OAAO,SAAS,aAAa;AAC7B,QAAI,UAAU,QAAQ,UAAU,QAAW;AACvC,aAAO;AAAA,IACX;AACA,WAAO,oBAAoB,OAAO,MAAkB,KAAK;AAAA,EAC7D;AAEA,MAAI,OAAO,SAAS,UAAU;AAC1B,QAAI,UAAU,QAAQ,UAAU,QAAW;AACvC,aAAO;AAAA,IACX;AACA,UAAM,SAA8B,CAAC;AACrC,eAAW,CAAC,KAAK,UAAU,KAAK,OAAO,QAAQ,OAAO,UAAU,GAAG;AAC/D,aAAO,GAAG,IAAI,WAAW,YAAY,MAAM,GAAG,CAAC;AAAA,IACnD;AACA,WAAO;AAAA,EACX;AAEA,MAAI,OAAO,SAAS,SAAS;AACzB,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,aAAO,CAAC;AAAA,IACZ;AACA,WAAO,MAAM,IAAI,UAAQ,WAAW,OAAO,OAAO,IAAI,CAAC;AAAA,EAC3D;AAEA,MAAI,OAAO,SAAS,YAAY;AAC5B,QAAI,UAAU,QAAW;AACrB,aAAO;AAAA,IACX;AACA,WAAO,WAAW,OAAO,QAAQ,KAAK;AAAA,EAC1C;AAEA,MAAI,OAAO,SAAS,SAAS;AACzB,QAAI,UAAU,QAAQ,UAAU,QAAW;AACvC,aAAO;AAAA,IACX;AACA,WAAO,oBAAoB,OAAO,MAAkB,KAAK;AAAA,EAC7D;AAEA,QAAM,IAAI,MAAM,wBAAyB,OAAe,IAAI,EAAE;AAClE;;;AC1GO,SAAS,eAAe,QAAoB,OAAqB;AACpE,MAAI,OAAO,SAAS,aAAa;AAC7B,UAAM,aAAa,OAAO;AAC1B,QAAI,UAAU,QAAQ,UAAU,QAAW;AACvC,aAAO,eAAe;AAAA,IAC1B;AAEA,YAAQ,YAAY;AAAA,MAChB,KAAK;AACD,eAAO,OAAO,UAAU;AAAA,MAC5B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,eAAO,OAAO,UAAU;AAAA,MAC5B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,eAAO,OAAO,UAAU,YAAY,OAAO,UAAU;AAAA,MACzD,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,eAAO,OAAO,UAAU,YAAY,SAAS;AAAA,MACjD,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,eAAO,OAAO,UAAU;AAAA,MAC5B,KAAK;AAAA,MACL,KAAK;AACD,eAAO,iBAAiB,QAAQ,OAAO,UAAU;AAAA,MACrD,KAAK;AACD,eAAO,iBAAiB,cAAc,iBAAiB;AAAA,MAC3D,KAAK;AACD,eAAO,UAAU;AAAA,MACrB;AACI,eAAO;AAAA,IACf;AAAA,EACJ;AAEA,MAAI,OAAO,SAAS,UAAU;AAC1B,QAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC7C,aAAO;AAAA,IACX;AACA,eAAW,CAAC,KAAK,UAAU,KAAK,OAAO,QAAQ,OAAO,UAAU,GAAG;AAC/D,UAAI,CAAC,eAAe,YAAY,MAAM,GAAG,CAAC,GAAG;AACzC,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAEA,MAAI,OAAO,SAAS,SAAS;AACzB,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,aAAO;AAAA,IACX;AACA,WAAO,MAAM,MAAM,UAAQ,eAAe,OAAO,OAAO,IAAI,CAAC;AAAA,EACjE;AAEA,MAAI,OAAO,SAAS,YAAY;AAC5B,QAAI,UAAU,QAAW;AACrB,aAAO;AAAA,IACX;AACA,WAAO,eAAe,OAAO,QAAQ,KAAK;AAAA,EAC9C;AAEA,MAAI,OAAO,SAAS,SAAS;AACzB,QAAI,UAAU,QAAQ,UAAU,QAAW;AACvC,aAAO,OAAO,SAAS;AAAA,IAC3B;AACA,QAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,SAAS,YAAY,OAAO;AACrF,aAAO,MAAM,SAAS,OAAO;AAAA,IACjC;AACA,WAAO;AAAA,EACX;AAEA,SAAO;AACX;;;ACrCO,IAAM,aAAN,cAAyB,MAAM;AAAA,EAUlC,YAAY,UAAyB;AACjC,UAAM,aAAa,SAAS,QAAQ;AACpC,UAAM,UAAU,IAAI,WAAW,IAAI,KAAK,WAAW,OAAO,MACrD,WAAW,QAAQ,WAAM,WAAW,KAAK,KAAK;AAEnD,UAAM,OAAO;AAEb,SAAK,OAAO;AACZ,SAAK,OAAO,WAAW;AACvB,SAAK,YAAY,WAAW;AAC5B,SAAK,SAAS,WAAW;AACzB,SAAK,WAAW,WAAW;AAC3B,SAAK,QAAQ,WAAW;AACxB,SAAK,OAAO,WAAW;AACvB,SAAK,QAAQ,WAAW,SAAS,CAAC;AAClC,SAAK,QAAQ,WAAW;AAGxB,WAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EACpD;AAAA,EAEA,WAAmB;AACf,UAAM,WAAW,KAAK,WAChB,QAAQ,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,MAAM,KAC1D;AAEN,UAAM,QAAQ,KAAK,MAAM,SACnB;AAAA;AAAA,IAAe,KAAK,MAAM,KAAK,MAAM,CAAC,KACtC;AAEN,UAAM,OAAO,KAAK,OACZ;AAAA,QAAW,KAAK,IAAI,KACpB;AAEN,WAAO,GAAG,KAAK,IAAI,KAAK,KAAK,OAAO;AAAA,KAAQ,QAAQ,GAAG,IAAI,GAAG,KAAK;AAAA,EACvE;AACJ;AAuBO,SAAS,eACZ,SACe;AACf,SAAO;AACX;","names":["NIL_UUID","validate","version","validate","version","NIL_UUID","uuidv7","NIL_UUID","validate","version","validate","version","NIL_UUID","uuidv7"]}
1
+ {"version":3,"sources":["../src/constant.ts","../src/value/blob.ts","../src/value/boolean.ts","../src/value/date.ts","../src/value/time.ts","../src/value/datetime.ts","../src/value/decimal.ts","../src/value/float4.ts","../src/value/float8.ts","../src/value/int1.ts","../src/value/int2.ts","../src/value/int4.ts","../src/value/int8.ts","../src/value/int16.ts","../src/value/duration.ts","../src/value/uint1.ts","../src/value/uint2.ts","../src/value/uint4.ts","../src/value/uint8.ts","../src/value/uint16.ts","../src/value/none.ts","../src/value/utf8.ts","../src/value/uuid4.ts","../src/value/uuid7.ts","../src/value/identityid.ts","../src/value/index.ts","../src/decoder.ts","../src/schema/builder.ts","../src/schema/parser.ts","../src/schema/validator.ts","../src/types.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nexport const NONE_VALUE = \"⟪none⟫\";","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\n/**\n * A binary large object (BLOB) value that can hold arbitrary byte data.\n */\nexport class BlobValue implements Value {\n readonly type: Type = \"Blob\" as const;\n private readonly bytes?: Uint8Array;\n\n constructor(value?: Uint8Array | ArrayBuffer | string | number[]) {\n if (value !== undefined) {\n if (value instanceof Uint8Array) {\n this.bytes = new Uint8Array(value);\n } else if (value instanceof ArrayBuffer) {\n this.bytes = new Uint8Array(value);\n } else if (typeof value === 'string') {\n // Try to parse as hex or base64\n const parsed = BlobValue.parseString(value);\n if (parsed === null) {\n throw new Error(`Invalid blob string: ${value}`);\n }\n this.bytes = parsed;\n } else if (Array.isArray(value)) {\n // Array of numbers (bytes)\n for (const byte of value) {\n if (!Number.isInteger(byte) || byte < 0 || byte > 255) {\n throw new Error(`Invalid byte value: ${byte}`);\n }\n }\n this.bytes = new Uint8Array(value);\n } else {\n throw new Error(`Blob value must be a Uint8Array, ArrayBuffer, string, or number[], got ${typeof value}`);\n }\n } else {\n this.bytes = undefined;\n }\n }\n\n /**\n * Create a new BLOB from raw bytes\n */\n static new(bytes: Uint8Array | number[]): BlobValue {\n return new BlobValue(bytes);\n }\n\n /**\n * Create an empty BLOB\n */\n static empty(): BlobValue {\n return new BlobValue(new Uint8Array(0));\n }\n\n /**\n * Create a BLOB from a byte array\n */\n static fromBytes(bytes: number[]): BlobValue {\n return new BlobValue(bytes);\n }\n\n /**\n * Create a BLOB from a hex string\n */\n static fromHex(hex: string): BlobValue {\n // Remove 0x prefix if present\n const cleanHex = hex.startsWith('0x') || hex.startsWith('0X')\n ? hex.substring(2)\n : hex;\n\n if (cleanHex.length % 2 !== 0) {\n throw new Error(`Invalid hex string: odd length`);\n }\n\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n const byte = parseInt(cleanHex.substring(i, i + 2), 16);\n if (isNaN(byte)) {\n throw new Error(`Invalid hex string: ${hex}`);\n }\n bytes[i / 2] = byte;\n }\n return new BlobValue(bytes);\n }\n\n /**\n * Create a BLOB from a base64 string\n */\n static fromBase64(base64: string): BlobValue {\n // Validate base64 format\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(base64)) {\n throw new Error(`Invalid base64 string: ${base64}`);\n }\n\n try {\n if (typeof Buffer !== 'undefined') {\n // Node.js environment\n const buffer = Buffer.from(base64, 'base64');\n return new BlobValue(new Uint8Array(buffer));\n } else {\n // Browser environment\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return new BlobValue(bytes);\n }\n } catch (e) {\n throw new Error(`Invalid base64 string: ${base64}`);\n }\n }\n\n /**\n * Create a BLOB from a UTF-8 string\n */\n static fromUtf8(str: string): BlobValue {\n const encoder = new TextEncoder();\n return new BlobValue(encoder.encode(str));\n }\n\n /**\n * Parse a blob string (hex or undefined)\n */\n static parse(str: string): BlobValue {\n const trimmed = str.trim();\n\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new BlobValue(undefined);\n }\n\n const parsed = BlobValue.parseString(trimmed);\n if (parsed === null) {\n throw new Error(`Cannot parse \"${str}\" as Blob`);\n }\n\n return new BlobValue(parsed);\n }\n\n /**\n * Get the raw bytes\n */\n asBytes(): Uint8Array | undefined {\n return this.bytes ? new Uint8Array(this.bytes) : undefined;\n }\n\n /**\n * Get the length in bytes\n */\n length(): number {\n return this.bytes?.length ?? 0;\n }\n\n /**\n * Check if the BLOB is empty\n */\n isEmpty(): boolean {\n return this.bytes?.length === 0;\n }\n\n /**\n * Convert to hex string with 0x prefix\n */\n toHex(): string | undefined {\n if (this.bytes === undefined) return undefined;\n\n const hex = Array.from(this.bytes)\n .map(byte => byte.toString(16).padStart(2, '0'))\n .join('');\n return '0x' + hex;\n }\n\n /**\n * Convert to base64 string\n */\n toBase64(): string | undefined {\n if (this.bytes === undefined) return undefined;\n\n if (typeof Buffer !== 'undefined') {\n // Node.js environment\n return Buffer.from(this.bytes).toString('base64');\n } else {\n // Browser environment\n const binaryString = Array.from(this.bytes)\n .map(byte => String.fromCharCode(byte))\n .join('');\n return btoa(binaryString);\n }\n }\n\n /**\n * Convert to UTF-8 string\n */\n toUtf8(): string | undefined {\n if (this.bytes === undefined) return undefined;\n\n const decoder = new TextDecoder();\n return decoder.decode(this.bytes);\n }\n\n /**\n * Format as hex string with 0x prefix\n */\n toString(): string {\n if (this.bytes === undefined) {\n return 'none';\n }\n return this.toHex()!;\n }\n\n valueOf(): Uint8Array | undefined {\n return this.bytes ? new Uint8Array(this.bytes) : undefined;\n }\n\n /**\n * Get the internal representation\n */\n get value(): Uint8Array | undefined {\n return this.valueOf();\n }\n\n /**\n * Compare two blobs for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherBlob = other as BlobValue;\n if (this.bytes === undefined || otherBlob.bytes === undefined) {\n return this.bytes === otherBlob.bytes;\n }\n\n if (this.bytes.length !== otherBlob.bytes.length) {\n return false;\n }\n\n for (let i = 0; i < this.bytes.length; i++) {\n if (this.bytes[i] !== otherBlob.bytes[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Helper to parse a string as hex\n */\n private static parseString(str: string): Uint8Array | null {\n // Try hex first (with or without 0x prefix)\n if (str.startsWith('0x') || str.startsWith('0X')) {\n try {\n return BlobValue.fromHex(str).bytes!;\n } catch {\n return null;\n }\n }\n\n // Check if it looks like hex (all hex digits)\n if (/^[0-9a-fA-F]+$/.test(str) && str.length % 2 === 0) {\n try {\n return BlobValue.fromHex(str).bytes!;\n } catch {\n return null;\n }\n }\n\n return null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class BooleanValue implements Value {\n readonly type: Type = \"Boolean\" as const;\n public readonly value?: boolean;\n\n constructor(value?: boolean) {\n if (value !== undefined) {\n if (typeof value !== 'boolean') {\n throw new Error(`Boolean value must be a boolean, got ${typeof value}`);\n }\n this.value = value;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): BooleanValue {\n const trimmed = str.trim().toLowerCase();\n\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new BooleanValue(undefined);\n }\n\n if (trimmed === 'true') {\n return new BooleanValue(true);\n }\n\n if (trimmed === 'false') {\n return new BooleanValue(false);\n }\n\n throw new Error(`Cannot parse \"${str}\" as Boolean`);\n }\n\n valueOf(): boolean | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two boolean values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherBoolean = other as BooleanValue;\n return this.value === otherBoolean.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\n/**\n * A date value representing a calendar date (year, month, day) without time information.\n * Always interpreted in UTC.\n * Internally stored as months and days.\n */\nexport class DateValue implements Value {\n readonly type: Type = \"Date\" as const;\n private readonly months?: number; // years*12 + months\n private readonly days?: number; // day of month (1-31)\n\n constructor(value?: Date | string | number) {\n if (value !== undefined) {\n if (value instanceof Date) {\n // Remove time component - set to UTC midnight\n const year = value.getUTCFullYear();\n const month = value.getUTCMonth() + 1; // Convert to 1-based\n const day = value.getUTCDate();\n \n this.months = year * 12 + (month - 1);\n this.days = day;\n } else if (typeof value === 'string') {\n // Parse YYYY-MM-DD format\n const parsed = DateValue.parseDate(value);\n if (!parsed) {\n throw new Error(`Invalid date string: ${value}`);\n }\n this.months = parsed.months;\n this.days = parsed.days;\n } else if (typeof value === 'number') {\n // Interpret as days since epoch\n const date = DateValue.fromDaysSinceEpochToComponents(value);\n if (!date) {\n throw new Error(`Invalid days since epoch: ${value}`);\n }\n this.months = date.months;\n this.days = date.days;\n } else {\n throw new Error(`Date value must be a Date, string, or number, got ${typeof value}`);\n }\n } else {\n this.months = undefined;\n this.days = undefined;\n }\n }\n\n /**\n * Create a DateValue from year, month (1-12), and day (1-31)\n */\n static fromYMD(year: number, month: number, day: number): DateValue {\n // Validate the date is valid\n if (!DateValue.isValidDate(year, month, day)) {\n throw new Error(`Invalid date: ${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`);\n }\n \n const result = new DateValue(undefined);\n (result as any).months = year * 12 + (month - 1);\n (result as any).days = day;\n return result;\n }\n\n /**\n * Get today's date (in UTC)\n */\n static today(): DateValue {\n const now = new Date();\n return DateValue.fromYMD(\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate()\n );\n }\n\n /**\n * Parse a date string in YYYY-MM-DD format\n */\n static parse(str: string): DateValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new DateValue(undefined);\n }\n\n const parsed = DateValue.parseDate(trimmed);\n if (!parsed) {\n throw new Error(`Cannot parse \"${str}\" as Date`);\n }\n\n const result = new DateValue(undefined);\n (result as any).months = parsed.months;\n (result as any).days = parsed.days;\n return result;\n }\n\n /**\n * Convert to days since Unix epoch (1970-01-01) for storage\n */\n toDaysSinceEpoch(): number | undefined {\n if (this.months === undefined || this.days === undefined) {\n return undefined;\n }\n \n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n \n // Create date with special handling for years < 100\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, this.days));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, this.days));\n }\n \n const epoch = new Date(Date.UTC(1970, 0, 1));\n const diffMs = date.getTime() - epoch.getTime();\n return Math.floor(diffMs / (1000 * 60 * 60 * 24));\n }\n\n /**\n * Create from days since Unix epoch\n */\n static fromDaysSinceEpochToComponents(days: number): { months: number; days: number } | null {\n const epoch = new Date(Date.UTC(1970, 0, 1));\n const ms = days * 24 * 60 * 60 * 1000;\n const date = new Date(epoch.getTime() + ms);\n \n // Check for valid date\n if (!isFinite(date.getTime())) {\n return null;\n }\n \n const year = date.getUTCFullYear();\n const month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n \n return {\n months: year * 12 + (month - 1),\n days: day\n };\n }\n\n /**\n * Get the year component\n */\n year(): number | undefined {\n if (this.months === undefined) return undefined;\n return Math.floor(this.months / 12);\n }\n\n /**\n * Get the month component (1-12)\n */\n month(): number | undefined {\n if (this.months === undefined) return undefined;\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n return m + 1;\n }\n\n /**\n * Get the day component (1-31)\n */\n day(): number | undefined {\n return this.days;\n }\n\n /**\n * Format as YYYY-MM-DD string\n */\n toString(): string {\n if (this.months === undefined || this.days === undefined) {\n return 'none';\n }\n\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = String(m + 1).padStart(2, '0');\n const day = String(this.days).padStart(2, '0');\n \n // Handle negative years (BC dates)\n if (year < 0) {\n const absYear = Math.abs(year);\n return `-${String(absYear).padStart(4, '0')}-${month}-${day}`;\n } else {\n return `${String(year).padStart(4, '0')}-${month}-${day}`;\n }\n }\n\n valueOf(): Date | undefined {\n if (this.months === undefined || this.days === undefined) {\n return undefined;\n }\n \n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n \n // Handle years < 100 specially\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, this.days));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, this.days));\n }\n \n return date;\n }\n \n /**\n * Get the internal representation\n */\n get value(): Date | undefined {\n return this.valueOf();\n }\n\n /**\n * Helper to parse YYYY-MM-DD format\n */\n private static parseDate(str: string): { months: number; days: number } | null {\n // Match YYYY-MM-DD format, including negative years\n const match = str.match(/^(-?\\d{1,4})-(\\d{2})-(\\d{2})$/);\n if (!match) {\n return null;\n }\n\n const year = parseInt(match[1], 10);\n const month = parseInt(match[2], 10);\n const day = parseInt(match[3], 10);\n\n // Validate month and day ranges\n if (month < 1 || month > 12) {\n return null;\n }\n if (day < 1 || day > 31) {\n return null;\n }\n\n // Validate the date is valid (e.g., no Feb 30)\n if (!DateValue.isValidDate(year, month, day)) {\n return null;\n }\n\n return {\n months: year * 12 + (month - 1),\n days: day\n };\n }\n \n /**\n * Helper to validate a date\n */\n private static isValidDate(year: number, month: number, day: number): boolean {\n // Create a date and check if components match\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, day));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, day));\n }\n \n return date.getUTCFullYear() === year &&\n date.getUTCMonth() === month - 1 &&\n date.getUTCDate() === day;\n }\n\n /**\n * Compare two dates for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDate = other as DateValue;\n if (this.months === undefined || otherDate.months === undefined) {\n return this.months === otherDate.months && this.days === otherDate.days;\n }\n \n return this.months === otherDate.months && this.days === otherDate.days;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A time value representing time of day (hour, minute, second, nanosecond) without date information.\n * Internally stored as nanoseconds since midnight.\n */\nexport class TimeValue implements Value {\n readonly type: Type = \"Time\" as const;\n public readonly value?: bigint; // nanoseconds since midnight\n\n private static readonly NANOS_PER_SECOND = 1_000_000_000n;\n private static readonly NANOS_PER_MINUTE = 60_000_000_000n;\n private static readonly NANOS_PER_HOUR = 3_600_000_000_000n;\n private static readonly NANOS_PER_DAY = 86_400_000_000_000n;\n\n constructor(value?: bigint | string | number) {\n if (value !== undefined) {\n if (typeof value === 'bigint') {\n // Validate range (0 to 24 hours in nanoseconds)\n if (value < 0n || value >= TimeValue.NANOS_PER_DAY) {\n throw new Error(`Time value must be between 0 and ${TimeValue.NANOS_PER_DAY - 1n} nanoseconds`);\n }\n this.value = value;\n } else if (typeof value === 'string') {\n // Parse HH:MM:SS[.nnnnnnnnn] format\n const parsed = TimeValue.parseTime(value);\n if (parsed === null) {\n throw new Error(`Invalid time string: ${value}`);\n }\n this.value = parsed;\n } else if (typeof value === 'number') {\n // Accept number as nanoseconds since midnight\n const bigintValue = BigInt(Math.floor(value));\n if (bigintValue < 0n || bigintValue >= TimeValue.NANOS_PER_DAY) {\n throw new Error(`Time value must be between 0 and ${TimeValue.NANOS_PER_DAY - 1n} nanoseconds`);\n }\n this.value = bigintValue;\n } else {\n throw new Error(`Time value must be a bigint, string, or number, got ${typeof value}`);\n }\n } else {\n this.value = undefined;\n }\n }\n\n /**\n * Create a TimeValue from hour, minute, second, and nanosecond\n */\n static fromHMSN(hour: number, minute: number, second: number, nano: number = 0): TimeValue {\n // Validate inputs\n if (hour < 0 || hour > 23) {\n throw new Error(`Invalid hour: ${hour}`);\n }\n if (minute < 0 || minute > 59) {\n throw new Error(`Invalid minute: ${minute}`);\n }\n if (second < 0 || second > 59) {\n throw new Error(`Invalid second: ${second}`);\n }\n if (nano < 0 || nano > 999_999_999) {\n throw new Error(`Invalid nanosecond: ${nano}`);\n }\n\n const nanos = BigInt(hour) * TimeValue.NANOS_PER_HOUR +\n BigInt(minute) * TimeValue.NANOS_PER_MINUTE +\n BigInt(second) * TimeValue.NANOS_PER_SECOND +\n BigInt(nano);\n\n return new TimeValue(nanos);\n }\n\n /**\n * Create a TimeValue from hour, minute, and second (no fractional seconds)\n */\n static fromHMS(hour: number, minute: number, second: number): TimeValue {\n return TimeValue.fromHMSN(hour, minute, second, 0);\n }\n\n /**\n * Create midnight (00:00:00.000000000)\n */\n static midnight(): TimeValue {\n return new TimeValue(0n);\n }\n\n /**\n * Create noon (12:00:00.000000000)\n */\n static noon(): TimeValue {\n return new TimeValue(12n * TimeValue.NANOS_PER_HOUR);\n }\n\n /**\n * Parse a time string in HH:MM:SS[.nnnnnnnnn] format\n */\n static parse(str: string): TimeValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new TimeValue(undefined);\n }\n\n const parsed = TimeValue.parseTime(trimmed);\n if (parsed === null) {\n throw new Error(`Cannot parse \"${str}\" as Time`);\n }\n\n return new TimeValue(parsed);\n }\n\n /**\n * Get the hour component (0-23)\n */\n hour(): number | undefined {\n if (this.value === undefined) return undefined;\n return Number(this.value / TimeValue.NANOS_PER_HOUR);\n }\n\n /**\n * Get the minute component (0-59)\n */\n minute(): number | undefined {\n if (this.value === undefined) return undefined;\n const remainingAfterHours = this.value % TimeValue.NANOS_PER_HOUR;\n return Number(remainingAfterHours / TimeValue.NANOS_PER_MINUTE);\n }\n\n /**\n * Get the second component (0-59)\n */\n second(): number | undefined {\n if (this.value === undefined) return undefined;\n const remainingAfterHours = this.value % TimeValue.NANOS_PER_HOUR;\n const remainingAfterMinutes = remainingAfterHours % TimeValue.NANOS_PER_MINUTE;\n return Number(remainingAfterMinutes / TimeValue.NANOS_PER_SECOND);\n }\n\n /**\n * Get the nanosecond component (0-999999999)\n */\n nanosecond(): number | undefined {\n if (this.value === undefined) return undefined;\n return Number(this.value % TimeValue.NANOS_PER_SECOND);\n }\n\n /**\n * Convert to nanoseconds since midnight for storage\n */\n toNanosSinceMidnight(): bigint | undefined {\n return this.value;\n }\n\n /**\n * Create from nanoseconds since midnight\n */\n static fromNanosSinceMidnight(nanos: bigint | number): TimeValue {\n return new TimeValue(typeof nanos === 'number' ? BigInt(nanos) : nanos);\n }\n\n /**\n * Format as HH:MM:SS.nnnnnnnnn string\n */\n toString(): string {\n if (this.value === undefined) {\n return 'none';\n }\n\n const hour = this.hour()!;\n const minute = this.minute()!;\n const second = this.second()!;\n const nano = this.nanosecond()!;\n\n const hourStr = String(hour).padStart(2, '0');\n const minuteStr = String(minute).padStart(2, '0');\n const secondStr = String(second).padStart(2, '0');\n const nanoStr = String(nano).padStart(9, '0');\n\n return `${hourStr}:${minuteStr}:${secondStr}.${nanoStr}`;\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n /**\n * Helper to parse HH:MM:SS[.nnnnnnnnn] format\n */\n private static parseTime(str: string): bigint | null {\n // Match HH:MM:SS or HH:MM:SS.fractional\n const match = str.match(/^(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,9}))?$/);\n if (!match) {\n return null;\n }\n\n const hour = parseInt(match[1], 10);\n const minute = parseInt(match[2], 10);\n const second = parseInt(match[3], 10);\n \n // Parse fractional seconds if present\n let nano = 0;\n if (match[4]) {\n // Pad or truncate to 9 digits\n const fracStr = match[4].padEnd(9, '0').substring(0, 9);\n nano = parseInt(fracStr, 10);\n }\n\n // Validate ranges\n if (hour < 0 || hour > 23) {\n return null;\n }\n if (minute < 0 || minute > 59) {\n return null;\n }\n if (second < 0 || second > 59) {\n return null;\n }\n\n const nanos = BigInt(hour) * TimeValue.NANOS_PER_HOUR +\n BigInt(minute) * TimeValue.NANOS_PER_MINUTE +\n BigInt(second) * TimeValue.NANOS_PER_SECOND +\n BigInt(nano);\n\n return nanos;\n }\n\n /**\n * Compare two Time values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherTime = other as TimeValue;\n return this.value === otherTime.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\nimport {DateValue} from \"./date\";\nimport {TimeValue} from \"./time\";\n\n/**\n * A date and time value with nanosecond precision.\n * Always in UTC timezone.\n * Internally stored as months, days, and nanoseconds.\n */\nexport class DateTimeValue implements Value {\n readonly type: Type = \"DateTime\" as const;\n private readonly months?: number; // years*12 + months \n private readonly days?: number; // day of month (1-31)\n private readonly nanos?: bigint; // nanoseconds since midnight\n\n constructor(value?: Date | string | number | bigint) {\n if (value !== undefined) {\n if (value instanceof Date) {\n // Store as UTC with millisecond precision from Date\n const year = value.getUTCFullYear();\n const month = value.getUTCMonth() + 1;\n const day = value.getUTCDate();\n const hour = value.getUTCHours();\n const minute = value.getUTCMinutes();\n const second = value.getUTCSeconds();\n const millis = value.getUTCMilliseconds();\n\n this.months = year * 12 + (month - 1);\n this.days = day;\n this.nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(millis) * 1_000_000n;\n } else if (typeof value === 'string') {\n // Parse ISO 8601 format\n const parsed = DateTimeValue.parseDateTime(value);\n if (!parsed) {\n throw new Error(`Invalid datetime string: ${value}`);\n }\n this.months = parsed.months;\n this.days = parsed.days;\n this.nanos = parsed.nanos;\n } else if (typeof value === 'number') {\n // Interpret as milliseconds since epoch\n const date = new Date(value);\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n const hour = date.getUTCHours();\n const minute = date.getUTCMinutes();\n const second = date.getUTCSeconds();\n const millis = date.getUTCMilliseconds();\n\n this.months = year * 12 + (month - 1);\n this.days = day;\n this.nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(millis) * 1_000_000n;\n } else if (typeof value === 'bigint') {\n // Interpret as nanoseconds since epoch\n const millis = Number(value / 1_000_000n);\n const extraNanos = value % 1_000_000n;\n const date = new Date(millis);\n\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n const hour = date.getUTCHours();\n const minute = date.getUTCMinutes();\n const second = date.getUTCSeconds();\n const dateMillis = date.getUTCMilliseconds();\n\n this.months = year * 12 + (month - 1);\n this.days = day;\n this.nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(dateMillis) * 1_000_000n +\n extraNanos;\n } else {\n throw new Error(`DateTime value must be a Date, string, number, or bigint, got ${typeof value}`);\n }\n } else {\n this.months = undefined;\n this.days = undefined;\n this.nanos = undefined;\n }\n }\n\n /**\n * Create a DateTimeValue from year, month, day, hour, minute, second, nanosecond\n */\n static fromYMDHMSN(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number,\n nano: number = 0\n ): DateTimeValue {\n // Validate inputs\n if (hour < 0 || hour > 23) {\n throw new Error(`Invalid hour: ${hour}`);\n }\n if (minute < 0 || minute > 59) {\n throw new Error(`Invalid minute: ${minute}`);\n }\n if (second < 0 || second > 59) {\n throw new Error(`Invalid second: ${second}`);\n }\n if (nano < 0 || nano > 999_999_999) {\n throw new Error(`Invalid nanosecond: ${nano}`);\n }\n\n // Validate the date\n if (!DateTimeValue.isValidDate(year, month, day)) {\n throw new Error(`Invalid datetime: ${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')} ${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}:${String(second).padStart(2, '0')}`);\n }\n\n const result = new DateTimeValue(undefined);\n (result as any).months = year * 12 + (month - 1);\n (result as any).days = day;\n (result as any).nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(nano);\n return result;\n }\n\n /**\n * Create a DateTimeValue from year, month, day, hour, minute, second (no fractional)\n */\n static fromYMDHMS(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number\n ): DateTimeValue {\n return DateTimeValue.fromYMDHMSN(year, month, day, hour, minute, second, 0);\n }\n\n /**\n * Create from Unix timestamp in seconds\n */\n static fromTimestamp(seconds: number): DateTimeValue {\n return new DateTimeValue(seconds * 1000);\n }\n\n /**\n * Create from Unix timestamp in milliseconds\n */\n static fromTimestampMillis(millis: number): DateTimeValue {\n return new DateTimeValue(millis);\n }\n\n /**\n * Create from nanoseconds since Unix epoch\n */\n static fromNanosSinceEpoch(nanos: bigint): DateTimeValue {\n return new DateTimeValue(nanos);\n }\n\n /**\n * Create from separate seconds and nanoseconds\n */\n static fromParts(seconds: number, nanos: number): DateTimeValue {\n if (nanos < 0 || nanos > 999_999_999) {\n throw new Error(`Invalid nanoseconds: ${nanos}`);\n }\n const millis = seconds * 1000 + Math.floor(nanos / 1_000_000);\n const extraNanos = nanos % 1_000_000;\n const result = new DateTimeValue(millis);\n\n // Add the extra nanoseconds\n if (result.nanos !== undefined) {\n (result as any).nanos = result.nanos + BigInt(extraNanos);\n }\n return result;\n }\n\n /**\n * Get current datetime\n */\n static now(): DateTimeValue {\n return new DateTimeValue(new Date());\n }\n\n /**\n * Get default datetime (Unix epoch)\n */\n static default(): DateTimeValue {\n return DateTimeValue.fromYMDHMS(1970, 1, 1, 0, 0, 0);\n }\n\n /**\n * Parse a datetime string in ISO 8601 format\n */\n static parse(str: string): DateTimeValue {\n const trimmed = str.trim();\n\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new DateTimeValue(undefined);\n }\n\n const parsed = DateTimeValue.parseDateTime(trimmed);\n if (!parsed) {\n throw new Error(`Cannot parse \"${str}\" as DateTime`);\n }\n\n const result = new DateTimeValue(undefined);\n (result as any).months = parsed.months;\n (result as any).days = parsed.days;\n (result as any).nanos = parsed.nanos;\n return result;\n }\n\n /**\n * Get Unix timestamp in seconds\n */\n timestamp(): number | undefined {\n const date = this.valueOf();\n if (date === undefined) return undefined;\n return Math.floor(date.getTime() / 1000);\n }\n\n /**\n * Get Unix timestamp in nanoseconds\n */\n timestampNanos(): bigint | undefined {\n const date = this.valueOf();\n if (date === undefined || this.nanos === undefined) return undefined;\n\n // Convert date to epoch nanoseconds\n const epochNanos = BigInt(date.getTime()) * 1_000_000n;\n\n // The nanos field stores time-of-day, but we already included millis in epochNanos\n // So we need to add only the sub-millisecond portion\n const subMillisNanos = this.nanos % 1_000_000n;\n\n return epochNanos + subMillisNanos;\n }\n\n /**\n * Convert to nanoseconds since Unix epoch for storage\n */\n toNanosSinceEpoch(): bigint | undefined {\n return this.timestampNanos();\n }\n\n /**\n * Get separate seconds and nanoseconds for storage\n */\n toParts(): [number, number] | undefined {\n const date = this.valueOf();\n if (date === undefined || this.nanos === undefined) return undefined;\n\n const seconds = Math.floor(date.getTime() / 1000);\n const millis = date.getTime() % 1000;\n const subMillisNanos = Number(this.nanos % 1_000_000n);\n const nanos = millis * 1_000_000 + subMillisNanos;\n return [seconds, nanos];\n }\n\n /**\n * Get the date component\n */\n date(): DateValue | undefined {\n if (this.months === undefined || this.days === undefined) return undefined;\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n return DateValue.fromYMD(year, month, this.days);\n }\n\n /**\n * Get the time component\n */\n time(): TimeValue | undefined {\n if (this.nanos === undefined) return undefined;\n return new TimeValue(this.nanos);\n }\n\n /**\n * Format as ISO 8601 string with nanosecond precision and Z suffix\n */\n toString(): string {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return 'none';\n }\n\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = String(m + 1).padStart(2, '0');\n const day = String(this.days).padStart(2, '0');\n\n // Extract time components from nanos\n const totalNanos = this.nanos;\n const hours = totalNanos / 3_600_000_000_000n;\n const remainingAfterHours = totalNanos % 3_600_000_000_000n;\n const minutes = remainingAfterHours / 60_000_000_000n;\n const remainingAfterMinutes = remainingAfterHours % 60_000_000_000n;\n const seconds = remainingAfterMinutes / 1_000_000_000n;\n const nanosFraction = remainingAfterMinutes % 1_000_000_000n;\n\n const hour = String(Number(hours)).padStart(2, '0');\n const minute = String(Number(minutes)).padStart(2, '0');\n const second = String(Number(seconds)).padStart(2, '0');\n const nanoStr = String(Number(nanosFraction)).padStart(9, '0');\n\n // Handle negative years (BC dates)\n let yearStr: string;\n if (year < 0) {\n const absYear = Math.abs(year);\n yearStr = `-${String(absYear).padStart(4, '0')}`;\n } else {\n yearStr = String(year).padStart(4, '0');\n }\n\n return `${yearStr}-${month}-${day}T${hour}:${minute}:${second}.${nanoStr}Z`;\n }\n\n valueOf(): Date | undefined {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return undefined;\n }\n\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n\n // Extract time components\n const totalNanos = this.nanos;\n const hours = Number(totalNanos / 3_600_000_000_000n);\n const remainingAfterHours = totalNanos % 3_600_000_000_000n;\n const minutes = Number(remainingAfterHours / 60_000_000_000n);\n const remainingAfterMinutes = remainingAfterHours % 60_000_000_000n;\n const seconds = Number(remainingAfterMinutes / 1_000_000_000n);\n const nanosFraction = remainingAfterMinutes % 1_000_000_000n;\n const millis = Number(nanosFraction / 1_000_000n);\n\n // Handle years < 100 specially\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, this.days, hours, minutes, seconds, millis));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, this.days, hours, minutes, seconds, millis));\n }\n\n return date;\n }\n\n /**\n * Get the internal representation as a Date\n */\n get value(): Date | undefined {\n return this.valueOf();\n }\n\n /**\n * Helper to parse ISO 8601 datetime format\n */\n private static parseDateTime(str: string): { months: number; days: number; nanos: bigint } | null {\n // Match ISO 8601 format: YYYY-MM-DDTHH:MM:SS[.nnnnnnnnn]Z\n const match = str.match(/^(-?\\d{1,4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,9}))?Z$/);\n if (!match) {\n return null;\n }\n\n const year = parseInt(match[1], 10);\n const month = parseInt(match[2], 10);\n const day = parseInt(match[3], 10);\n const hour = parseInt(match[4], 10);\n const minute = parseInt(match[5], 10);\n const second = parseInt(match[6], 10);\n\n // Parse fractional seconds if present\n let nanosFraction = 0n;\n if (match[7]) {\n // Pad or truncate to 9 digits\n const fracStr = match[7].padEnd(9, '0').substring(0, 9);\n nanosFraction = BigInt(fracStr);\n }\n\n // Validate ranges\n if (month < 1 || month > 12) {\n return null;\n }\n if (day < 1 || day > 31) {\n return null;\n }\n if (hour < 0 || hour > 23) {\n return null;\n }\n if (minute < 0 || minute > 59) {\n return null;\n }\n if (second < 0 || second > 59) {\n return null;\n }\n\n // Validate the date is valid\n if (!DateTimeValue.isValidDate(year, month, day)) {\n return null;\n }\n\n const months = year * 12 + (month - 1);\n const nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n nanosFraction;\n\n return {months, days: day, nanos};\n }\n\n /**\n * Helper to validate a date\n */\n private static isValidDate(year: number, month: number, day: number): boolean {\n // Create a date and check if components match\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, day));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, day));\n }\n\n return date.getUTCFullYear() === year &&\n date.getUTCMonth() === month - 1 &&\n date.getUTCDate() === day;\n }\n\n /**\n * Compare two datetimes for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDateTime = other as DateTimeValue;\n if (this.months === undefined || otherDateTime.months === undefined) {\n return this.months === otherDateTime.months && \n this.days === otherDateTime.days && \n this.nanos === otherDateTime.nanos;\n }\n \n return this.months === otherDateTime.months && \n this.days === otherDateTime.days && \n this.nanos === otherDateTime.nanos;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class DecimalValue implements Value {\n readonly type: Type = \"Decimal\" as const;\n public readonly value?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`Decimal value must be a string, got ${typeof value}`);\n }\n this.value = value;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): DecimalValue {\n if (str === NONE_VALUE) {\n return new DecimalValue(undefined);\n }\n \n return new DecimalValue(str);\n }\n\n valueOf(): string | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value;\n }\n\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDecimal = other as DecimalValue;\n return this.value === otherDecimal.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Float4Value implements Value {\n\n private static readonly MAX_VALUE = 3.4028235e+38;\n private static readonly MIN_VALUE = -3.4028235e+38;\n private static readonly MIN_POSITIVE = 1.175494e-38;\n\n readonly type: Type = \"Float4\" as const;\n public readonly value?: number;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (typeof value !== 'number') {\n throw new Error(`Float4 value must be a number, got ${typeof value}`);\n }\n\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n this.value = undefined;\n } else {\n // Clamp to Float32 range\n if (value !== 0 && Math.abs(value) < Float4Value.MIN_POSITIVE) {\n // Underflow to zero\n this.value = 0;\n } else if (value > Float4Value.MAX_VALUE) {\n throw new Error(`Float4 overflow: value ${value} exceeds maximum ${Float4Value.MAX_VALUE}`);\n } else if (value < Float4Value.MIN_VALUE) {\n throw new Error(`Float4 underflow: value ${value} exceeds minimum ${Float4Value.MIN_VALUE}`);\n } else {\n // Convert to Float32 precision\n const float32Array = new Float32Array(1);\n float32Array[0] = value;\n this.value = float32Array[0];\n }\n }\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Float4Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Float4Value(undefined);\n }\n\n const num = Number(trimmed);\n\n if (Number.isNaN(num) && trimmed.toLowerCase() !== 'nan') {\n throw new Error(`Cannot parse \"${str}\" as Float4`);\n }\n\n return new Float4Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Float4 values for equality with limited precision\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherFloat = other as Float4Value;\n if (this.value === undefined || otherFloat.value === undefined) {\n return this.value === otherFloat.value;\n }\n \n // For Float4, use approximate comparison due to limited precision\n const epsilon = 1e-6; // Float32 has about 7 decimal digits of precision\n return Math.abs(this.value - otherFloat.value) <= epsilon;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Float8Value implements Value {\n readonly type: Type = \"Float8\" as const;\n public readonly value?: number;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (typeof value !== 'number') {\n throw new Error(`Float8 value must be a number, got ${typeof value}`);\n }\n this.value = value;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Float8Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Float8Value(undefined);\n }\n\n const num = Number(trimmed);\n\n if (Number.isNaN(num) && trimmed.toLowerCase() !== 'nan') {\n throw new Error(`Cannot parse \"${str}\" as Float8`);\n }\n\n return new Float8Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Float8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n\n const otherFloat = other as Float8Value;\n if (this.value === undefined || otherFloat.value === undefined) {\n return this.value === otherFloat.value;\n }\n const epsilon = 1e-14;\n return Math.abs(this.value - otherFloat.value) <= epsilon;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int1Value implements Value {\n readonly type: Type = \"Int1\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = -128;\n private static readonly MAX_VALUE = 127;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Int1 value must be an integer, got ${value}`);\n }\n if (value < Int1Value.MIN_VALUE || value > Int1Value.MAX_VALUE) {\n throw new Error(`Int1 value must be between ${Int1Value.MIN_VALUE} and ${Int1Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Int1Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int1Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Int1`);\n }\n \n return new Int1Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int1 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int1Value;\n return this.value === otherInt.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int2Value implements Value {\n readonly type: Type = \"Int2\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = -32768;\n private static readonly MAX_VALUE = 32767;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Int2 value must be an integer, got ${value}`);\n }\n if (value < Int2Value.MIN_VALUE || value > Int2Value.MAX_VALUE) {\n throw new Error(`Int2 value must be between ${Int2Value.MIN_VALUE} and ${Int2Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Int2Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int2Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Int2`);\n }\n \n return new Int2Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int2 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int2Value;\n return this.value === otherInt.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int4Value implements Value {\n readonly type: Type = \"Int4\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = -2147483648;\n private static readonly MAX_VALUE = 2147483647;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Int4 value must be an integer, got ${value}`);\n }\n if (value < Int4Value.MIN_VALUE || value > Int4Value.MAX_VALUE) {\n throw new Error(`Int4 value must be between ${Int4Value.MIN_VALUE} and ${Int4Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Int4Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int4Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Int4`);\n }\n \n return new Int4Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int4 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int4Value;\n return this.value === otherInt.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int8Value implements Value {\n readonly type: Type = \"Int8\" as const;\n public readonly value?: bigint;\n\n private static readonly MIN_VALUE = BigInt(\"-9223372036854775808\");\n private static readonly MAX_VALUE = BigInt(\"9223372036854775807\");\n\n constructor(value?: bigint | number) {\n if (value !== undefined) {\n const bigintValue = typeof value === 'number' ? BigInt(Math.trunc(value)) : value;\n \n if (bigintValue < Int8Value.MIN_VALUE || bigintValue > Int8Value.MAX_VALUE) {\n throw new Error(`Int8 value must be between ${Int8Value.MIN_VALUE} and ${Int8Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Int8Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int8Value(undefined);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Int8`);\n }\n \n if (value < Int8Value.MIN_VALUE || value > Int8Value.MAX_VALUE) {\n throw new Error(`Int8 value must be between ${Int8Value.MIN_VALUE} and ${Int8Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Int8Value(value);\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int8Value;\n return this.value === otherInt.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int16Value implements Value {\n readonly type: Type = \"Int16\" as const;\n public readonly value?: bigint;\n\n private static readonly MIN_VALUE = BigInt(\"-170141183460469231731687303715884105728\");\n private static readonly MAX_VALUE = BigInt(\"170141183460469231731687303715884105727\");\n\n constructor(value?: bigint | number | string) {\n if (value !== undefined) {\n let bigintValue: bigint;\n \n if (typeof value === 'string') {\n try {\n bigintValue = BigInt(value);\n } catch (e) {\n throw new Error(`Int16 value must be a valid integer, got ${value}`);\n }\n } else if (typeof value === 'number') {\n bigintValue = BigInt(Math.trunc(value));\n } else {\n bigintValue = value;\n }\n \n if (bigintValue < Int16Value.MIN_VALUE || bigintValue > Int16Value.MAX_VALUE) {\n throw new Error(`Int16 value must be between ${Int16Value.MIN_VALUE} and ${Int16Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Int16Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int16Value(undefined);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Int16`);\n }\n \n if (value < Int16Value.MIN_VALUE || value > Int16Value.MAX_VALUE) {\n throw new Error(`Int16 value must be between ${Int16Value.MIN_VALUE} and ${Int16Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Int16Value(value);\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int16 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int16Value;\n return this.value === otherInt.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A duration value representing a time span or elapsed time.\n * Internally stored as months, days, and nanoseconds.\n */\nexport class DurationValue implements Value {\n readonly type: Type = \"Duration\" as const;\n private readonly months?: number; // years*12 + months\n private readonly days?: number; // separate days (don't normalize due to variable month length)\n private readonly nanos?: bigint; // all time components as nanoseconds\n\n constructor(value?: { months: number; days: number; nanos: bigint } | string) {\n if (value !== undefined) {\n if (typeof value === 'string') {\n // Parse ISO 8601 duration format\n const parsed = DurationValue.parseDuration(value);\n if (!parsed) {\n throw new Error(`Invalid duration string: ${value}`);\n }\n this.months = parsed.months;\n this.days = parsed.days;\n this.nanos = parsed.nanos;\n } else if (typeof value === 'object' && value !== null) {\n this.months = value.months;\n this.days = value.days;\n this.nanos = value.nanos;\n } else {\n throw new Error(`Duration value must be an object or string, got ${typeof value}`);\n }\n } else {\n this.months = undefined;\n this.days = undefined;\n this.nanos = undefined;\n }\n }\n\n /**\n * Create a new duration from months, days, and nanoseconds\n */\n static new(months: number, days: number, nanos: bigint): DurationValue {\n return new DurationValue({ months, days, nanos });\n }\n\n /**\n * Create a duration from seconds\n */\n static fromSeconds(seconds: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(seconds) * 1_000_000_000n });\n }\n\n /**\n * Create a duration from milliseconds\n */\n static fromMilliseconds(milliseconds: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(milliseconds) * 1_000_000n });\n }\n\n /**\n * Create a duration from microseconds\n */\n static fromMicroseconds(microseconds: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(microseconds) * 1_000n });\n }\n\n /**\n * Create a duration from nanoseconds\n */\n static fromNanoseconds(nanoseconds: bigint): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: nanoseconds });\n }\n\n /**\n * Create a duration from minutes\n */\n static fromMinutes(minutes: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(minutes) * 60n * 1_000_000_000n });\n }\n\n /**\n * Create a duration from hours\n */\n static fromHours(hours: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(hours) * 60n * 60n * 1_000_000_000n });\n }\n\n /**\n * Create a duration from days\n */\n static fromDays(days: number): DurationValue {\n return new DurationValue({ months: 0, days, nanos: 0n });\n }\n\n /**\n * Create a duration from weeks\n */\n static fromWeeks(weeks: number): DurationValue {\n return new DurationValue({ months: 0, days: weeks * 7, nanos: 0n });\n }\n\n /**\n * Create a duration from months\n */\n static fromMonths(months: number): DurationValue {\n return new DurationValue({ months, days: 0, nanos: 0n });\n }\n\n /**\n * Create a duration from years\n */\n static fromYears(years: number): DurationValue {\n return new DurationValue({ months: years * 12, days: 0, nanos: 0n });\n }\n\n /**\n * Create a zero duration\n */\n static zero(): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: 0n });\n }\n\n /**\n * Get default duration (zero)\n */\n static default(): DurationValue {\n return DurationValue.zero();\n }\n\n /**\n * Parse a duration string in ISO 8601 duration format\n */\n static parse(str: string): DurationValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new DurationValue(undefined);\n }\n\n const parsed = DurationValue.parseDuration(trimmed);\n if (!parsed) {\n throw new Error(`Cannot parse \"${str}\" as Duration`);\n }\n\n return new DurationValue({ months: parsed.months, days: parsed.days, nanos: parsed.nanos });\n }\n\n /**\n * Get total seconds (truncated)\n */\n seconds(): bigint | undefined {\n if (this.nanos === undefined) return undefined;\n return this.nanos / 1_000_000_000n;\n }\n\n /**\n * Get total milliseconds (truncated)\n */\n milliseconds(): bigint | undefined {\n if (this.nanos === undefined) return undefined;\n return this.nanos / 1_000_000n;\n }\n\n /**\n * Get total microseconds (truncated)\n */\n microseconds(): bigint | undefined {\n if (this.nanos === undefined) return undefined;\n return this.nanos / 1_000n;\n }\n\n /**\n * Get total nanoseconds\n */\n nanoseconds(): bigint | undefined {\n return this.nanos;\n }\n\n /**\n * Get months component\n */\n getMonths(): number | undefined {\n return this.months;\n }\n\n /**\n * Get days component\n */\n getDays(): number | undefined {\n return this.days;\n }\n\n /**\n * Get nanoseconds component\n */\n getNanos(): bigint | undefined {\n return this.nanos;\n }\n\n /**\n * Check if duration is positive (any component > 0)\n */\n isPositive(): boolean {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return false;\n }\n return this.months > 0 || this.days > 0 || this.nanos > 0n;\n }\n\n /**\n * Check if duration is negative (any component < 0)\n */\n isNegative(): boolean {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return false;\n }\n return this.months < 0 || this.days < 0 || this.nanos < 0n;\n }\n\n /**\n * Get absolute value of duration\n */\n abs(): DurationValue {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return new DurationValue(undefined);\n }\n return new DurationValue({\n months: Math.abs(this.months),\n days: Math.abs(this.days),\n nanos: this.nanos < 0n ? -this.nanos : this.nanos\n });\n }\n\n /**\n * Negate the duration\n */\n negate(): DurationValue {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return new DurationValue(undefined);\n }\n return new DurationValue({\n months: -this.months,\n days: -this.days,\n nanos: -this.nanos\n });\n }\n\n /**\n * Format as ISO 8601 duration string\n */\n toIsoString(): string {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return 'none';\n }\n\n // Handle zero duration\n if (this.months === 0 && this.days === 0 && this.nanos === 0n) {\n return 'PT0S';\n }\n\n let result = 'P';\n\n // Extract years and months\n const years = Math.floor(this.months / 12);\n const months = this.months % 12;\n\n if (years !== 0) {\n result += `${years}Y`;\n }\n\n if (months !== 0) {\n result += `${months}M`;\n }\n\n // Time components from nanos with normalization\n const totalSeconds = this.nanos / 1_000_000_000n;\n const remainingNanos = this.nanos % 1_000_000_000n;\n\n // Normalize to days if hours >= 24\n const extraDays = totalSeconds / 86400n; // 24 * 60 * 60\n const remainingSeconds = totalSeconds % 86400n;\n\n const displayDays = this.days + Number(extraDays);\n const hours = remainingSeconds / 3600n;\n const minutes = (remainingSeconds % 3600n) / 60n;\n const seconds = remainingSeconds % 60n;\n\n if (displayDays !== 0) {\n result += `${displayDays}D`;\n }\n\n // Add time components if any\n if (hours !== 0n || minutes !== 0n || seconds !== 0n || remainingNanos !== 0n) {\n result += 'T';\n\n if (hours !== 0n) {\n result += `${hours}H`;\n }\n\n if (minutes !== 0n) {\n result += `${minutes}M`;\n }\n\n if (seconds !== 0n || remainingNanos !== 0n) {\n if (remainingNanos !== 0n) {\n // Format fractional seconds with trailing zeros removed\n const fractional = Number(remainingNanos) / 1_000_000_000;\n const totalSecondsFloat = Number(seconds) + fractional;\n // Format with 9 decimal places then remove trailing zeros\n const formatted = totalSecondsFloat.toFixed(9).replace(/0+$/, '').replace(/\\.$/, '');\n result += `${formatted}S`;\n } else {\n result += `${seconds}S`;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Format as compact human-readable duration string\n * Examples: \"1y2mo3d4h5m6s\", \"1d2h\", \"30s\", \"500ms\", \"0s\"\n */\n toString(): string {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return 'none';\n }\n\n if (this.months === 0 && this.days === 0 && this.nanos === 0n) {\n return '0s';\n }\n\n let result = '';\n\n const years = Math.floor(this.months / 12);\n const months = this.months % 12;\n\n const totalSeconds = this.nanos / 1_000_000_000n;\n const remainingNanos = this.nanos % 1_000_000_000n;\n\n const extraDays = totalSeconds / 86400n;\n const remainingSeconds = totalSeconds % 86400n;\n\n const displayDays = this.days + Number(extraDays);\n const hours = remainingSeconds / 3600n;\n const minutes = (remainingSeconds % 3600n) / 60n;\n const seconds = remainingSeconds % 60n;\n\n const absRemaining = remainingNanos < 0n ? -remainingNanos : remainingNanos;\n const ms = absRemaining / 1_000_000n;\n const us = (absRemaining % 1_000_000n) / 1_000n;\n const ns = absRemaining % 1_000n;\n\n if (years !== 0) result += `${years}y`;\n if (months !== 0) result += `${months}mo`;\n if (displayDays !== 0) result += `${displayDays}d`;\n if (hours !== 0n) result += `${hours}h`;\n if (minutes !== 0n) result += `${minutes}m`;\n if (seconds !== 0n) result += `${seconds}s`;\n\n if (ms !== 0n || us !== 0n || ns !== 0n) {\n if (remainingNanos < 0n && seconds === 0n && hours === 0n && minutes === 0n\n && displayDays === 0 && years === 0 && months === 0) {\n result += '-';\n }\n if (ms !== 0n) result += `${ms}ms`;\n if (us !== 0n) result += `${us}us`;\n if (ns !== 0n) result += `${ns}ns`;\n }\n\n return result;\n }\n\n valueOf(): { months: number; days: number; nanos: bigint } | undefined {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return undefined;\n }\n return { months: this.months, days: this.days, nanos: this.nanos };\n }\n\n /**\n * Get the internal representation\n */\n get value(): { months: number; days: number; nanos: bigint } | undefined {\n return this.valueOf();\n }\n\n /**\n * Helper to parse duration format (human-readable or ISO 8601)\n */\n private static parseDuration(str: string): { months: number; days: number; nanos: bigint } | null {\n const negative = str.startsWith('-');\n const cleanStr = negative ? str.substring(1) : str;\n\n // Try ISO 8601 format first (starts with P)\n if (cleanStr.startsWith('P')) {\n return DurationValue.parseIsoDuration(cleanStr, negative);\n }\n\n // Try human-readable format: 1y2mo3d4h5m6s500ms100us50ns\n return DurationValue.parseHumanDuration(cleanStr, negative);\n }\n\n /**\n * Parse ISO 8601 duration format: P[n]Y[n]M[n]DT[n]H[n]M[n.n]S\n */\n private static parseIsoDuration(str: string, negative: boolean): { months: number; days: number; nanos: bigint } | null {\n const match = str.match(/^P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?)?$/);\n if (!match) {\n return null;\n }\n\n // Check if the match has at least one value\n if (!match[1] && !match[2] && !match[3] && !match[4] && !match[5] && !match[6]) {\n return null; // Invalid: P without any values\n }\n\n const years = parseInt(match[1] || '0', 10);\n const months = parseInt(match[2] || '0', 10);\n const days = parseInt(match[3] || '0', 10);\n const hours = parseInt(match[4] || '0', 10);\n const minutes = parseInt(match[5] || '0', 10);\n const secondsStr = match[6] || '0';\n\n // Parse seconds and fractional seconds\n const secondsParts = secondsStr.split('.');\n const wholeSeconds = parseInt(secondsParts[0] || '0', 10);\n let fracNanos = 0n;\n if (secondsParts.length > 1) {\n // Pad fractional part to 9 digits\n const fracStr = secondsParts[1].padEnd(9, '0').substring(0, 9);\n fracNanos = BigInt(fracStr);\n }\n\n // Calculate total nanoseconds\n const totalNanos = BigInt(hours) * 3600n * 1_000_000_000n +\n BigInt(minutes) * 60n * 1_000_000_000n +\n BigInt(wholeSeconds) * 1_000_000_000n +\n fracNanos;\n\n const totalMonths = years * 12 + months;\n\n if (negative) {\n return { months: -totalMonths, days: -days, nanos: -totalNanos };\n }\n return { months: totalMonths, days: days, nanos: totalNanos };\n }\n\n /**\n * Parse human-readable duration format: 1y2mo3d4h5m6s500ms100us50ns\n */\n private static parseHumanDuration(str: string, negative: boolean): { months: number; days: number; nanos: bigint } | null {\n // Match components: years, months, days, hours, minutes, seconds, ms, us, ns\n // Order matters: 'mo' before 'm', 'ms' before 'm', 'us' before 'u', 'ns' before 'n'\n const pattern = /^(?:(\\d+)y)?(?:(\\d+)mo)?(?:(\\d+)d)?(?:(\\d+)h)?(?:(\\d+)m(?!s|o))?(?:(\\d+)s(?!$)?)?(?:(\\d+)ms)?(?:(\\d+)us)?(?:(\\d+)ns)?$/;\n const match = str.match(pattern);\n if (!match) {\n return null;\n }\n\n // Check if the match has at least one value\n if (!match[1] && !match[2] && !match[3] && !match[4] && !match[5] && !match[6] && !match[7] && !match[8] && !match[9]) {\n return null;\n }\n\n const years = parseInt(match[1] || '0', 10);\n const months = parseInt(match[2] || '0', 10);\n const days = parseInt(match[3] || '0', 10);\n const hours = parseInt(match[4] || '0', 10);\n const minutes = parseInt(match[5] || '0', 10);\n const seconds = parseInt(match[6] || '0', 10);\n const ms = parseInt(match[7] || '0', 10);\n const us = parseInt(match[8] || '0', 10);\n const ns = parseInt(match[9] || '0', 10);\n\n const totalNanos = BigInt(hours) * 3600n * 1_000_000_000n +\n BigInt(minutes) * 60n * 1_000_000_000n +\n BigInt(seconds) * 1_000_000_000n +\n BigInt(ms) * 1_000_000n +\n BigInt(us) * 1_000n +\n BigInt(ns);\n\n const totalMonths = years * 12 + months;\n\n if (negative) {\n return { months: -totalMonths, days: -days, nanos: -totalNanos };\n }\n return { months: totalMonths, days: days, nanos: totalNanos };\n }\n\n /**\n * Compare two durations for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDuration = other as DurationValue;\n if (this.months === undefined || otherDuration.months === undefined) {\n return this.months === otherDuration.months && \n this.days === otherDuration.days && \n this.nanos === otherDuration.nanos;\n }\n \n return this.months === otherDuration.months && \n this.days === otherDuration.days && \n this.nanos === otherDuration.nanos;\n }\n\n toJSON(): string {\n return this.value === undefined ? NONE_VALUE : this.toIsoString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toIsoString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint1Value implements Value {\n readonly type: Type = \"Uint1\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = 0;\n private static readonly MAX_VALUE = 255;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Uint1 value must be an integer, got ${value}`);\n }\n if (value < Uint1Value.MIN_VALUE || value > Uint1Value.MAX_VALUE) {\n throw new Error(`Uint1 value must be between ${Uint1Value.MIN_VALUE} and ${Uint1Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Uint1Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint1Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Uint1`);\n }\n \n return new Uint1Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint1 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint1Value;\n return this.value === otherUint.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint2Value implements Value {\n readonly type: Type = \"Uint2\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = 0;\n private static readonly MAX_VALUE = 65535;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Uint2 value must be an integer, got ${value}`);\n }\n if (value < Uint2Value.MIN_VALUE || value > Uint2Value.MAX_VALUE) {\n throw new Error(`Uint2 value must be between ${Uint2Value.MIN_VALUE} and ${Uint2Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Uint2Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint2Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Uint2`);\n }\n \n return new Uint2Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint2 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint2Value;\n return this.value === otherUint.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint4Value implements Value {\n readonly type: Type = \"Uint4\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = 0;\n private static readonly MAX_VALUE = 4294967295;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Uint4 value must be an integer, got ${value}`);\n }\n if (value < Uint4Value.MIN_VALUE || value > Uint4Value.MAX_VALUE) {\n throw new Error(`Uint4 value must be between ${Uint4Value.MIN_VALUE} and ${Uint4Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Uint4Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint4Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Uint4`);\n }\n \n return new Uint4Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint4 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint4Value;\n return this.value === otherUint.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint8Value implements Value {\n readonly type: Type = \"Uint8\" as const;\n public readonly value?: bigint;\n\n private static readonly MIN_VALUE = BigInt(0);\n private static readonly MAX_VALUE = BigInt(\"18446744073709551615\");\n\n constructor(value?: bigint | number) {\n if (value !== undefined) {\n const bigintValue = typeof value === 'number' ? BigInt(Math.trunc(value)) : value;\n \n if (bigintValue < Uint8Value.MIN_VALUE || bigintValue > Uint8Value.MAX_VALUE) {\n throw new Error(`Uint8 value must be between ${Uint8Value.MIN_VALUE} and ${Uint8Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Uint8Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint8Value(undefined);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Uint8`);\n }\n \n if (value < Uint8Value.MIN_VALUE || value > Uint8Value.MAX_VALUE) {\n throw new Error(`Uint8 value must be between ${Uint8Value.MIN_VALUE} and ${Uint8Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Uint8Value(value);\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n toNumber(): number | undefined {\n if (this.value === undefined) return undefined;\n return Number(this.value);\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint8Value;\n return this.value === otherUint.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint16Value implements Value {\n readonly type: Type = \"Uint16\" as const;\n public readonly value?: bigint;\n\n private static readonly MIN_VALUE = BigInt(0);\n private static readonly MAX_VALUE = BigInt(\"340282366920938463463374607431768211455\");\n\n constructor(value?: bigint | number | string) {\n if (value !== undefined) {\n let bigintValue: bigint;\n \n if (typeof value === 'string') {\n try {\n bigintValue = BigInt(value);\n } catch (e) {\n throw new Error(`Uint16 value must be a valid integer, got ${value}`);\n }\n } else if (typeof value === 'number') {\n bigintValue = BigInt(Math.trunc(value));\n } else {\n bigintValue = value;\n }\n \n if (bigintValue < Uint16Value.MIN_VALUE || bigintValue > Uint16Value.MAX_VALUE) {\n throw new Error(`Uint16 value must be between ${Uint16Value.MIN_VALUE} and ${Uint16Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Uint16Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint16Value(undefined);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Uint16`);\n }\n \n if (value < Uint16Value.MIN_VALUE || value > Uint16Value.MAX_VALUE) {\n throw new Error(`Uint16 value must be between ${Uint16Value.MIN_VALUE} and ${Uint16Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Uint16Value(value);\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint16 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint16Value;\n return this.value === otherUint.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {BaseType, Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class NoneValue implements Value {\n readonly type: Type = \"None\" as const;\n public readonly innerType: BaseType;\n\n constructor(innerType?: BaseType) {\n this.innerType = innerType ?? \"None\";\n }\n\n static parse(str: string, innerType?: BaseType): NoneValue {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE || trimmed === 'none') {\n return new NoneValue(innerType);\n }\n throw new Error(`Cannot parse \"${str}\" as None`);\n }\n\n isNone(): boolean {\n return true;\n }\n\n toString(): string {\n return 'none';\n }\n\n valueOf(): undefined {\n return undefined;\n }\n\n get value(): undefined {\n return undefined;\n }\n\n equals(other: Value): boolean {\n if (!(other instanceof NoneValue)) {\n return false;\n }\n return true;\n }\n\n compare(other: NoneValue): number {\n return 0;\n }\n\n encode(): TypeValuePair {\n return {\n type: \"None\",\n value: NONE_VALUE\n };\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Utf8Value implements Value {\n readonly type: Type = \"Utf8\" as const;\n public readonly value?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`Utf8 value must be a string, got ${typeof value}`);\n }\n this.value = value;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Utf8Value {\n if (str === NONE_VALUE) {\n return new Utf8Value(undefined);\n }\n \n return new Utf8Value(str);\n }\n\n valueOf(): string | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value;\n }\n\n /**\n * Compare two Utf8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUtf8 = other as Utf8Value;\n return this.value === otherUtf8.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport { v4 as uuidv4, NIL as NIL_UUID, validate, version } from 'uuid';\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A UUID version 4 (random) value type\n */\nexport class Uuid4Value implements Value {\n readonly type: Type = \"Uuid4\" as const;\n private readonly uuid?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`Uuid4 value must be a string, got ${typeof value}`);\n }\n \n // Validate UUID format\n if (!validate(value)) {\n throw new Error(`Invalid UUID format: ${value}`);\n }\n \n // Check version (allow v4 or nil UUID)\n const ver = version(value);\n if (value !== NIL_UUID && ver !== 4) {\n throw new Error(`Invalid UUID version for Uuid4: expected v4, got v${ver}`);\n }\n \n this.uuid = value.toLowerCase();\n } else {\n this.uuid = undefined;\n }\n }\n\n /**\n * Generate a new random UUID v4\n */\n static generate(): Uuid4Value {\n return new Uuid4Value(uuidv4());\n }\n\n /**\n * Create a new Uuid4Value from a string\n */\n static new(uuid: string): Uuid4Value {\n return new Uuid4Value(uuid);\n }\n\n /**\n * Get the nil UUID (all zeros)\n */\n static nil(): Uuid4Value {\n return new Uuid4Value(NIL_UUID);\n }\n\n /**\n * Get default Uuid4Value (nil UUID)\n */\n static default(): Uuid4Value {\n return Uuid4Value.nil();\n }\n\n /**\n * Parse a UUID string\n */\n static parse(str: string): Uuid4Value {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uuid4Value(undefined);\n }\n\n // Try to parse as UUID\n if (!validate(trimmed)) {\n throw new Error(`Cannot parse \"${str}\" as Uuid4`);\n }\n\n const ver = version(trimmed);\n if (trimmed !== NIL_UUID && ver !== 4) {\n throw new Error(`Cannot parse \"${str}\" as Uuid4: wrong version (v${ver})`);\n }\n\n return new Uuid4Value(trimmed);\n }\n\n /**\n * Get the UUID string\n */\n asString(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the UUID as bytes (16-byte array)\n */\n asBytes(): Uint8Array | undefined {\n if (this.uuid === undefined) return undefined;\n \n // Remove hyphens and convert hex to bytes\n const hex = this.uuid.replace(/-/g, '');\n const bytes = new Uint8Array(16);\n for (let i = 0; i < 16; i++) {\n bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n }\n\n /**\n * Check if this is the nil UUID\n */\n isNil(): boolean {\n return this.uuid === NIL_UUID;\n }\n\n /**\n * Get the UUID version\n */\n getVersion(): number | undefined {\n if (this.uuid === undefined) return undefined;\n return version(this.uuid);\n }\n\n /**\n * Format as string\n */\n toString(): string {\n if (this.uuid === undefined) {\n return 'none';\n }\n return this.uuid;\n }\n\n valueOf(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the internal representation\n */\n get value(): string | undefined {\n return this.valueOf();\n }\n\n /**\n * Compare two UUID4 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUuid = other as Uuid4Value;\n return this.uuid === otherUuid.uuid;\n }\n\n /**\n * Compare two UUID4 values (for ordering)\n */\n compare(other: Uuid4Value): number {\n if (this.uuid === undefined || other.uuid === undefined) {\n if (this.uuid === other.uuid) return 0;\n if (this.uuid === undefined) return -1;\n return 1;\n }\n \n // Compare as bytes for consistent ordering\n const thisBytes = this.asBytes()!;\n const otherBytes = other.asBytes()!;\n \n for (let i = 0; i < 16; i++) {\n if (thisBytes[i] < otherBytes[i]) return -1;\n if (thisBytes[i] > otherBytes[i]) return 1;\n }\n \n return 0;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport { v7 as uuidv7, NIL as NIL_UUID, validate, version } from 'uuid';\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A UUID version 7 (timestamp-based) value type\n */\nexport class Uuid7Value implements Value {\n readonly type: Type = \"Uuid7\" as const;\n private readonly uuid?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`Uuid7 value must be a string, got ${typeof value}`);\n }\n \n // Validate UUID format\n if (!validate(value)) {\n throw new Error(`Invalid UUID format: ${value}`);\n }\n \n // Check version (allow v7 or nil UUID)\n const ver = version(value);\n if (value !== NIL_UUID && ver !== 7) {\n throw new Error(`Invalid UUID version for Uuid7: expected v7, got v${ver}`);\n }\n \n this.uuid = value.toLowerCase();\n } else {\n this.uuid = undefined;\n }\n }\n\n /**\n * Generate a new timestamp-based UUID v7\n */\n static generate(): Uuid7Value {\n return new Uuid7Value(uuidv7());\n }\n\n /**\n * Create a new Uuid7Value from a string\n */\n static new(uuid: string): Uuid7Value {\n return new Uuid7Value(uuid);\n }\n\n /**\n * Get the nil UUID (all zeros)\n */\n static nil(): Uuid7Value {\n return new Uuid7Value(NIL_UUID);\n }\n\n /**\n * Get default Uuid7Value (nil UUID)\n */\n static default(): Uuid7Value {\n return Uuid7Value.nil();\n }\n\n /**\n * Parse a UUID string\n */\n static parse(str: string): Uuid7Value {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uuid7Value(undefined);\n }\n\n // Try to parse as UUID\n if (!validate(trimmed)) {\n throw new Error(`Cannot parse \"${str}\" as Uuid7`);\n }\n\n const ver = version(trimmed);\n if (trimmed !== NIL_UUID && ver !== 7) {\n throw new Error(`Cannot parse \"${str}\" as Uuid7: wrong version (v${ver})`);\n }\n\n return new Uuid7Value(trimmed);\n }\n\n /**\n * Get the UUID string\n */\n asString(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the UUID as bytes (16-byte array)\n */\n asBytes(): Uint8Array | undefined {\n if (this.uuid === undefined) return undefined;\n \n // Remove hyphens and convert hex to bytes\n const hex = this.uuid.replace(/-/g, '');\n const bytes = new Uint8Array(16);\n for (let i = 0; i < 16; i++) {\n bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n }\n\n /**\n * Extract the timestamp from UUID v7 (milliseconds since Unix epoch)\n */\n getTimestamp(): number | undefined {\n if (this.uuid === undefined || this.uuid === NIL_UUID) return undefined;\n \n // UUID v7 has a 48-bit timestamp in the first 6 bytes\n const hex = this.uuid.replace(/-/g, '');\n const timestampHex = hex.substring(0, 12);\n const timestamp = parseInt(timestampHex, 16);\n return timestamp;\n }\n\n /**\n * Check if this is the nil UUID\n */\n isNil(): boolean {\n return this.uuid === NIL_UUID;\n }\n\n /**\n * Get the UUID version\n */\n getVersion(): number | undefined {\n if (this.uuid === undefined) return undefined;\n return version(this.uuid);\n }\n\n /**\n * Format as string\n */\n toString(): string {\n if (this.uuid === undefined) {\n return 'none';\n }\n return this.uuid;\n }\n\n valueOf(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the internal representation\n */\n get value(): string | undefined {\n return this.valueOf();\n }\n\n /**\n * Compare two UUID7 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUuid = other as Uuid7Value;\n return this.uuid === otherUuid.uuid;\n }\n\n /**\n * Compare two UUID7 values (for ordering)\n * UUID v7 has timestamp-based ordering for UUIDs generated close in time\n */\n compare(other: Uuid7Value): number {\n if (this.uuid === undefined || other.uuid === undefined) {\n if (this.uuid === other.uuid) return 0;\n if (this.uuid === undefined) return -1;\n return 1;\n }\n \n // Compare as bytes for consistent ordering\n const thisBytes = this.asBytes()!;\n const otherBytes = other.asBytes()!;\n \n for (let i = 0; i < 16; i++) {\n if (thisBytes[i] < otherBytes[i]) return -1;\n if (thisBytes[i] > otherBytes[i]) return 1;\n }\n \n return 0;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport { v7 as uuidv7, NIL as NIL_UUID, validate, version } from 'uuid';\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * An IdentityId value type that wraps a UUID v7\n */\nexport class IdentityIdValue implements Value {\n readonly type: Type = \"IdentityId\" as const;\n public readonly value?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`IdentityId value must be a string, got ${typeof value}`);\n }\n \n // Validate UUID format\n if (!validate(value)) {\n throw new Error(`Invalid UUID format for IdentityId: ${value}`);\n }\n \n // Check version (allow v7 or nil UUID)\n const ver = version(value);\n if (value !== NIL_UUID && ver !== 7) {\n throw new Error(`Invalid UUID version for IdentityId: expected v7, got v${ver}`);\n }\n \n this.value = value.toLowerCase();\n } else {\n this.value = undefined;\n }\n }\n\n /**\n * Generate a new IdentityId with a UUID v7\n */\n static generate(): IdentityIdValue {\n return new IdentityIdValue(uuidv7());\n }\n\n /**\n * Get the nil IdentityId (all zeros)\n */\n static nil(): IdentityIdValue {\n return new IdentityIdValue(NIL_UUID);\n }\n\n /**\n * Parse a string as an IdentityId\n */\n static parse(str: string): IdentityIdValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new IdentityIdValue(undefined);\n }\n\n // Try to parse as UUID\n if (!validate(trimmed)) {\n throw new Error(`Cannot parse \"${str}\" as IdentityId`);\n }\n\n const ver = version(trimmed);\n if (trimmed !== NIL_UUID && ver !== 7) {\n throw new Error(`Cannot parse \"${str}\" as IdentityId: wrong UUID version (v${ver})`);\n }\n\n return new IdentityIdValue(trimmed);\n }\n\n /**\n * Get the UUID string value\n */\n valueOf(): string | undefined {\n return this.value;\n }\n\n /**\n * Format as string\n */\n toString(): string {\n return this.value === undefined ? 'none' : this.value;\n }\n\n /**\n * Extract the timestamp from the UUID v7 (milliseconds since Unix epoch)\n */\n getTimestamp(): number | undefined {\n if (this.value === undefined || this.value === NIL_UUID) return undefined;\n \n // UUID v7 has a 48-bit timestamp in the first 6 bytes\n const hex = this.value.replace(/-/g, '');\n const timestampHex = hex.substring(0, 12);\n const timestamp = parseInt(timestampHex, 16);\n return timestamp;\n }\n\n /**\n * Check if this is the nil UUID\n */\n isNil(): boolean {\n return this.value === NIL_UUID;\n }\n\n /**\n * Compare two IdentityId values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherIdentityId = other as IdentityIdValue;\n return this.value === otherIdentityId.value;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nexport {BlobValue} from './blob';\nexport {BooleanValue} from './boolean';\nexport {DateValue} from './date';\nexport {DateTimeValue} from './datetime';\nexport {DecimalValue} from './decimal';\nexport {Float4Value} from './float4';\nexport {Float8Value} from './float8';\nexport {Int1Value} from './int1';\nexport {Int2Value} from './int2';\nexport {Int4Value} from './int4';\nexport {Int8Value} from './int8';\nexport {Int16Value} from './int16';\nexport {DurationValue} from './duration';\nexport {TimeValue} from './time';\nexport {Uint1Value} from './uint1';\nexport {Uint2Value} from './uint2';\nexport {Uint4Value} from './uint4';\nexport {Uint8Value} from './uint8';\nexport {Uint16Value} from './uint16';\nexport {NoneValue} from './none';\nexport {Utf8Value} from './utf8';\nexport {Uuid4Value} from './uuid4';\nexport {Uuid7Value} from './uuid7';\nexport {IdentityIdValue} from './identityid';\n\nexport type BaseType =\n | \"Blob\"\n | \"Boolean\"\n | \"Decimal\"\n | \"Float4\" | \"Float8\"\n | \"Int1\" | \"Int2\" | \"Int4\" | \"Int8\" | \"Int16\"\n | \"Uint1\" | \"Uint2\" | \"Uint4\" | \"Uint8\" | \"Uint16\"\n | \"Utf8\"\n | \"Date\" | \"DateTime\" | \"Time\" | \"Duration\"\n | \"Uuid4\" | \"Uuid7\"\n | \"IdentityId\"\n | \"None\";\n\nexport interface OptionType { Option: Type }\nexport type Type = BaseType | OptionType;\n\nexport function isOptionType(t: Type): t is OptionType {\n return typeof t === 'object' && t !== null && 'Option' in t;\n}\n\nexport function unwrapOptionType(t: Type): BaseType {\n if (isOptionType(t)) return unwrapOptionType(t.Option);\n return t;\n}\n\nexport interface TypeValuePair {\n type: Type;\n value: string;\n}\n\nexport abstract class Value {\n abstract readonly type: Type;\n\n public abstract encode(): TypeValuePair;\n public abstract equals(other: Value): boolean;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {\n BlobValue, BooleanValue, DateValue, DateTimeValue, DecimalValue, Float4Value, Float8Value,\n Int1Value, Int2Value, Int4Value, Int8Value, Int16Value, DurationValue,\n TimeValue, Uint1Value, Uint2Value, Uint4Value, Uint8Value,\n Uint16Value, NoneValue, Utf8Value, Uuid4Value, Uuid7Value, IdentityIdValue,\n Value, TypeValuePair, isOptionType, unwrapOptionType\n} from './value';\nimport {NONE_VALUE} from './constant';\n\n\nexport function decode(pair: TypeValuePair): Value {\n if (isOptionType(pair.type)) {\n const innerType = unwrapOptionType(pair.type);\n if (pair.value === NONE_VALUE || pair.value === '') {\n return new NoneValue(innerType);\n }\n return decode({type: innerType, value: pair.value});\n }\n\n switch (pair.type) {\n case \"Blob\":\n return BlobValue.parse(pair.value);\n case \"Boolean\":\n return BooleanValue.parse(pair.value);\n case \"Date\":\n return DateValue.parse(pair.value);\n case \"DateTime\":\n return DateTimeValue.parse(pair.value);\n case \"Decimal\":\n return DecimalValue.parse(pair.value);\n case \"Float4\":\n return Float4Value.parse(pair.value);\n case \"Float8\":\n return Float8Value.parse(pair.value);\n case \"Int1\":\n return Int1Value.parse(pair.value);\n case \"Int2\":\n return Int2Value.parse(pair.value);\n case \"Int4\":\n return Int4Value.parse(pair.value);\n case \"Int8\":\n return Int8Value.parse(pair.value);\n case \"Int16\":\n return Int16Value.parse(pair.value);\n case \"Duration\":\n return DurationValue.parse(pair.value);\n case \"Time\":\n return TimeValue.parse(pair.value);\n case \"Uint1\":\n return Uint1Value.parse(pair.value);\n case \"Uint2\":\n return Uint2Value.parse(pair.value);\n case \"Uint4\":\n return Uint4Value.parse(pair.value);\n case \"Uint8\":\n return Uint8Value.parse(pair.value);\n case \"Uint16\":\n return Uint16Value.parse(pair.value);\n case \"None\":\n return NoneValue.parse(pair.value);\n case \"Utf8\":\n return Utf8Value.parse(pair.value);\n case \"Uuid4\":\n return Uuid4Value.parse(pair.value);\n case \"Uuid7\":\n return Uuid7Value.parse(pair.value);\n case \"IdentityId\":\n return IdentityIdValue.parse(pair.value);\n default:\n throw new Error(`Unsupported type: ${pair.type}`);\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {\n PrimitiveSchemaNode, ObjectSchemaNode, ArraySchemaNode,\n OptionalSchemaNode, ValueSchemaNode, SchemaNode\n} from '.';\n\nexport class SchemaBuilder {\n\n static blob(): PrimitiveSchemaNode<'Blob'> {\n return {kind: 'primitive', type: 'Blob'};\n }\n\n static bool(): PrimitiveSchemaNode<'Boolean'> {\n return {kind: 'primitive', type: 'Boolean'};\n }\n\n static boolean(): PrimitiveSchemaNode<'Boolean'> {\n return {kind: 'primitive', type: 'Boolean'};\n }\n\n static decimal(): PrimitiveSchemaNode<'Decimal'> {\n return {kind: 'primitive', type: 'Decimal'};\n }\n\n static float4(): PrimitiveSchemaNode<'Float4'> {\n return {kind: 'primitive', type: 'Float4'};\n }\n\n static float8(): PrimitiveSchemaNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static float(): PrimitiveSchemaNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static double(): PrimitiveSchemaNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static int1(): PrimitiveSchemaNode<'Int1'> {\n return {kind: 'primitive', type: 'Int1'};\n }\n\n static int2(): PrimitiveSchemaNode<'Int2'> {\n return {kind: 'primitive', type: 'Int2'};\n }\n\n static int4(): PrimitiveSchemaNode<'Int4'> {\n return {kind: 'primitive', type: 'Int4'};\n }\n\n static int8(): PrimitiveSchemaNode<'Int8'> {\n return {kind: 'primitive', type: 'Int8'};\n }\n\n static int16(): PrimitiveSchemaNode<'Int16'> {\n return {kind: 'primitive', type: 'Int16'};\n }\n\n static int(): PrimitiveSchemaNode<'Int4'> {\n return {kind: 'primitive', type: 'Int4'};\n }\n\n static bigint(): PrimitiveSchemaNode<'Int8'> {\n return {kind: 'primitive', type: 'Int8'};\n }\n\n static uint1(): PrimitiveSchemaNode<'Uint1'> {\n return {kind: 'primitive', type: 'Uint1'};\n }\n\n static uint2(): PrimitiveSchemaNode<'Uint2'> {\n return {kind: 'primitive', type: 'Uint2'};\n }\n\n static uint4(): PrimitiveSchemaNode<'Uint4'> {\n return {kind: 'primitive', type: 'Uint4'};\n }\n\n static uint8(): PrimitiveSchemaNode<'Uint8'> {\n return {kind: 'primitive', type: 'Uint8'};\n }\n\n static uint16(): PrimitiveSchemaNode<'Uint16'> {\n return {kind: 'primitive', type: 'Uint16'};\n }\n\n static utf8(): PrimitiveSchemaNode<'Utf8'> {\n return {kind: 'primitive', type: 'Utf8'};\n }\n\n static string(): PrimitiveSchemaNode<'Utf8'> {\n return {kind: 'primitive', type: 'Utf8'};\n }\n\n static date(): PrimitiveSchemaNode<'Date'> {\n return {kind: 'primitive', type: 'Date'};\n }\n\n static datetime(): PrimitiveSchemaNode<'DateTime'> {\n return {kind: 'primitive', type: 'DateTime'};\n }\n\n static time(): PrimitiveSchemaNode<'Time'> {\n return {kind: 'primitive', type: 'Time'};\n }\n\n static duration(): PrimitiveSchemaNode<'Duration'> {\n return {kind: 'primitive', type: 'Duration'};\n }\n\n static uuid4(): PrimitiveSchemaNode<'Uuid4'> {\n return {kind: 'primitive', type: 'Uuid4'};\n }\n\n static uuid7(): PrimitiveSchemaNode<'Uuid7'> {\n return {kind: 'primitive', type: 'Uuid7'};\n }\n\n static uuid(): PrimitiveSchemaNode<'Uuid7'> {\n return {kind: 'primitive', type: 'Uuid7'};\n }\n\n static none(): PrimitiveSchemaNode<'None'> {\n return {kind: 'primitive', type: 'None'};\n }\n\n static identityid(): PrimitiveSchemaNode<'IdentityId'> {\n return {kind: 'primitive', type: 'IdentityId'};\n }\n\n static object<P extends Record<string, SchemaNode>>(properties: P): ObjectSchemaNode<P> {\n return {kind: 'object', properties};\n }\n\n static array<T extends SchemaNode>(items: T): ArraySchemaNode<T> {\n return {kind: 'array', items};\n }\n\n static optional<T extends SchemaNode>(schema: T): OptionalSchemaNode<T> {\n return {kind: 'optional', schema};\n }\n \n static number(): PrimitiveSchemaNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static booleanValue(): ValueSchemaNode<'Boolean'> {\n return {kind: 'value', type: 'Boolean'};\n }\n\n static decimalValue(): ValueSchemaNode<'Decimal'> {\n return {kind: 'value', type: 'Decimal'};\n }\n\n static int1Value(): ValueSchemaNode<'Int1'> {\n return {kind: 'value', type: 'Int1'};\n }\n\n static int2Value(): ValueSchemaNode<'Int2'> {\n return {kind: 'value', type: 'Int2'};\n }\n\n static int4Value(): ValueSchemaNode<'Int4'> {\n return {kind: 'value', type: 'Int4'};\n }\n\n static int8Value(): ValueSchemaNode<'Int8'> {\n return {kind: 'value', type: 'Int8'};\n }\n\n static int16Value(): ValueSchemaNode<'Int16'> {\n return {kind: 'value', type: 'Int16'};\n }\n\n static uint1Value(): ValueSchemaNode<'Uint1'> {\n return {kind: 'value', type: 'Uint1'};\n }\n\n static uint2Value(): ValueSchemaNode<'Uint2'> {\n return {kind: 'value', type: 'Uint2'};\n }\n\n static uint4Value(): ValueSchemaNode<'Uint4'> {\n return {kind: 'value', type: 'Uint4'};\n }\n\n static uint8Value(): ValueSchemaNode<'Uint8'> {\n return {kind: 'value', type: 'Uint8'};\n }\n\n static uint16Value(): ValueSchemaNode<'Uint16'> {\n return {kind: 'value', type: 'Uint16'};\n }\n\n static float4Value(): ValueSchemaNode<'Float4'> {\n return {kind: 'value', type: 'Float4'};\n }\n\n static float8Value(): ValueSchemaNode<'Float8'> {\n return {kind: 'value', type: 'Float8'};\n }\n\n static utf8Value(): ValueSchemaNode<'Utf8'> {\n return {kind: 'value', type: 'Utf8'};\n }\n\n static dateValue(): ValueSchemaNode<'Date'> {\n return {kind: 'value', type: 'Date'};\n }\n\n static dateTimeValue(): ValueSchemaNode<'DateTime'> {\n return {kind: 'value', type: 'DateTime'};\n }\n\n static timeValue(): ValueSchemaNode<'Time'> {\n return {kind: 'value', type: 'Time'};\n }\n\n static durationValue(): ValueSchemaNode<'Duration'> {\n return {kind: 'value', type: 'Duration'};\n }\n\n static uuid4Value(): ValueSchemaNode<'Uuid4'> {\n return {kind: 'value', type: 'Uuid4'};\n }\n\n static uuid7Value(): ValueSchemaNode<'Uuid7'> {\n return {kind: 'value', type: 'Uuid7'};\n }\n\n static noneValue(): ValueSchemaNode<'None'> {\n return {kind: 'value', type: 'None'};\n }\n\n static blobValue(): ValueSchemaNode<'Blob'> {\n return {kind: 'value', type: 'Blob'};\n }\n\n static identityIdValue(): ValueSchemaNode<'IdentityId'> {\n return {kind: 'value', type: 'IdentityId'};\n }\n}\n\nexport const Schema = SchemaBuilder;","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {\n BlobValue, BooleanValue, DateValue, DateTimeValue, DecimalValue,\n Float4Value, Float8Value,\n Int1Value, Int2Value, Int4Value, Int8Value, Int16Value,\n DurationValue, TimeValue,\n Uint1Value, Uint2Value, Uint4Value, Uint8Value, Uint16Value,\n NoneValue, Utf8Value,\n Uuid4Value, Uuid7Value, IdentityIdValue,\n BaseType\n} from '../value';\nimport {SchemaNode} from '.';\nimport {PrimitiveToValue} from './inference';\n\nfunction createValueInstance<T extends BaseType>(type: T, value: any): PrimitiveToValue<T> {\n switch (type) {\n case 'Blob':\n return new BlobValue(value) as PrimitiveToValue<T>;\n case 'Boolean':\n return new BooleanValue(value) as PrimitiveToValue<T>;\n case 'Float4':\n return new Float4Value(value) as PrimitiveToValue<T>;\n case 'Float8':\n return new Float8Value(value) as PrimitiveToValue<T>;\n case 'Int1':\n return new Int1Value(value) as PrimitiveToValue<T>;\n case 'Int2':\n return new Int2Value(value) as PrimitiveToValue<T>;\n case 'Int4':\n return new Int4Value(value) as PrimitiveToValue<T>;\n case 'Int8':\n return new Int8Value(value) as PrimitiveToValue<T>;\n case 'Int16':\n return new Int16Value(value) as PrimitiveToValue<T>;\n case 'Uint1':\n return new Uint1Value(value) as PrimitiveToValue<T>;\n case 'Uint2':\n return new Uint2Value(value) as PrimitiveToValue<T>;\n case 'Uint4':\n return new Uint4Value(value) as PrimitiveToValue<T>;\n case 'Uint8':\n return new Uint8Value(value) as PrimitiveToValue<T>;\n case 'Uint16':\n return new Uint16Value(value) as PrimitiveToValue<T>;\n case 'Utf8':\n return new Utf8Value(value) as PrimitiveToValue<T>;\n case 'Date':\n return new DateValue(value) as PrimitiveToValue<T>;\n case 'DateTime':\n return new DateTimeValue(value) as PrimitiveToValue<T>;\n case 'Time':\n return new TimeValue(value) as PrimitiveToValue<T>;\n case 'Duration':\n return new DurationValue(value) as PrimitiveToValue<T>;\n case 'Uuid4':\n return new Uuid4Value(value) as PrimitiveToValue<T>;\n case 'Uuid7':\n return new Uuid7Value(value) as PrimitiveToValue<T>;\n case 'Decimal':\n return new DecimalValue(value) as PrimitiveToValue<T>;\n case 'IdentityId':\n return new IdentityIdValue(value) as PrimitiveToValue<T>;\n case 'None':\n return new NoneValue() as PrimitiveToValue<T>;\n default:\n throw new Error(`Unknown type: ${type}`);\n }\n}\n\nexport function parseValue(schema: SchemaNode, value: any): any {\n if (schema.kind === 'primitive') {\n if (value === null || value === undefined) {\n return undefined;\n }\n return createValueInstance(schema.type as BaseType, value);\n }\n\n if (schema.kind === 'object') {\n if (value === null || value === undefined) {\n return undefined;\n }\n const result: Record<string, any> = {};\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n result[key] = parseValue(propSchema, value[key]);\n }\n return result;\n }\n\n if (schema.kind === 'array') {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.map(item => parseValue(schema.items, item));\n }\n\n if (schema.kind === 'optional') {\n if (value === undefined) {\n return undefined;\n }\n return parseValue(schema.schema, value);\n }\n\n if (schema.kind === 'value') {\n if (value === null || value === undefined) {\n return undefined;\n }\n return createValueInstance(schema.type as BaseType, value);\n }\n\n throw new Error(`Unknown schema kind: ${(schema as any).kind}`);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type} from '../value';\nimport {SchemaNode} from '.';\n\nexport function validateSchema(schema: SchemaNode, value: any): boolean {\n if (schema.kind === 'primitive') {\n const schemaType = schema.type as Type;\n if (value === null || value === undefined) {\n return schemaType === 'None';\n }\n\n switch (schemaType) {\n case 'Boolean':\n return typeof value === 'boolean';\n case 'Float4':\n case 'Float8':\n case 'Int1':\n case 'Int2':\n case 'Int4':\n return typeof value === 'number';\n case 'Int8':\n case 'Int16':\n case 'Uint8':\n case 'Uint16':\n return typeof value === 'bigint' || typeof value === 'number';\n case 'Uint1':\n case 'Uint2':\n case 'Uint4':\n return typeof value === 'number' && value >= 0;\n case 'Utf8':\n case 'Time':\n case 'Duration':\n case 'Uuid4':\n case 'Uuid7':\n return typeof value === 'string';\n case 'Date':\n case 'DateTime':\n return value instanceof Date || typeof value === 'string';\n case 'Blob':\n return value instanceof Uint8Array || value instanceof ArrayBuffer;\n case 'None':\n return value === undefined;\n default:\n return false;\n }\n }\n\n if (schema.kind === 'object') {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n if (!validateSchema(propSchema, value[key])) {\n return false;\n }\n }\n return true;\n }\n\n if (schema.kind === 'array') {\n if (!Array.isArray(value)) {\n return false;\n }\n return value.every(item => validateSchema(schema.items, item));\n }\n\n if (schema.kind === 'optional') {\n if (value === undefined) {\n return true;\n }\n return validateSchema(schema.schema, value);\n }\n\n if (schema.kind === 'value') {\n if (value === null || value === undefined) {\n return schema.type === 'None';\n }\n if (typeof value === 'object' && value !== null && 'type' in value && 'encode' in value) {\n return value.type === schema.type;\n }\n return false;\n }\n\n return false;\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {Type, TypeValuePair} from './value';\nimport {SchemaNode, InferSchema} from './schema';\n\nexport type Params = (TypeValuePair | null)[] | Record<string, TypeValuePair | null>;\n\nexport interface Frame {\n columns: Column[];\n}\n\nexport interface DiagnosticColumn {\n name: string,\n type: Type,\n}\n\nexport interface Fragment {\n text: string\n line?: number,\n column?: number,\n}\n\nexport interface Diagnostic {\n code: string,\n statement?: string;\n message: string,\n column?: DiagnosticColumn,\n fragment?: Fragment,\n label?: string,\n help?: string,\n notes: Array<string>,\n cause?: Diagnostic,\n}\n\nexport interface Column {\n name: string;\n type: Type;\n data: string[];\n}\n\nexport interface ErrorResponse {\n id: string;\n type: \"Err\";\n payload: {\n diagnostic: Diagnostic;\n };\n}\n\nexport class ReifyError extends Error {\n public readonly code: string;\n public readonly statement?: string;\n public readonly column?: DiagnosticColumn;\n public readonly fragment?: Fragment;\n public readonly label?: string;\n public readonly help?: string;\n public readonly notes: string[];\n public readonly cause?: Diagnostic;\n\n constructor(response: ErrorResponse) {\n const diagnostic = response.payload.diagnostic;\n const message = `[${diagnostic.code}] ${diagnostic.message}` +\n (diagnostic.label ? ` — ${diagnostic.label}` : \"\");\n\n super(message);\n\n this.name = \"ReifyError\";\n this.code = diagnostic.code;\n this.statement = diagnostic.statement;\n this.column = diagnostic.column;\n this.fragment = diagnostic.fragment;\n this.label = diagnostic.label;\n this.help = diagnostic.help;\n this.notes = diagnostic.notes ?? [];\n this.cause = diagnostic.cause;\n\n // Required for instanceof checks to work properly\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n toString(): string {\n const position = this.fragment\n ? `line ${this.fragment.line}, offset ${this.fragment.column}`\n : \"unknown position\";\n\n const notes = this.notes.length\n ? `\\nNotes:\\n- ${this.notes.join(\"\\n- \")}`\n : \"\";\n\n const help = this.help\n ? `\\nHelp: ${this.help}`\n : \"\";\n\n return `${this.name}: ${this.message}\\nAt ${position}${help}${notes}`;\n }\n}\n\n/**\n * Simplified type for inferring frame results to avoid deep instantiation\n * This provides a workaround for TypeScript's limitation with deeply nested types\n */\nexport type FrameResults<S extends readonly SchemaNode[]> =\n S extends readonly [infer First, ...infer Rest]\n ? First extends SchemaNode\n ? Rest extends readonly SchemaNode[]\n ? [InferSchema<First>[], ...FrameResults<Rest>]\n : [InferSchema<First>[]]\n : never\n : [];\n\n/**\n * Helper type to extract a single frame result\n */\nexport type SingleFrameResult<S extends SchemaNode> = InferSchema<S>[];\n\n/**\n * Type-safe cast helper for frame results\n */\nexport function asFrameResults<S extends readonly SchemaNode[]>(\n results: any\n): FrameResults<S> {\n return results as FrameResults<S>;\n}"],"mappings":";AAEO,IAAM,aAAa;;;ACMnB,IAAM,YAAN,MAAM,WAA2B;AAAA,EAIpC,YAAY,OAAsD;AAHlE,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,iBAAiB,YAAY;AAC7B,aAAK,QAAQ,IAAI,WAAW,KAAK;AAAA,MACrC,WAAW,iBAAiB,aAAa;AACrC,aAAK,QAAQ,IAAI,WAAW,KAAK;AAAA,MACrC,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,SAAS,WAAU,YAAY,KAAK;AAC1C,YAAI,WAAW,MAAM;AACjB,gBAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,QACnD;AACA,aAAK,QAAQ;AAAA,MACjB,WAAW,MAAM,QAAQ,KAAK,GAAG;AAE7B,mBAAW,QAAQ,OAAO;AACtB,cAAI,CAAC,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK,OAAO,KAAK;AACnD,kBAAM,IAAI,MAAM,uBAAuB,IAAI,EAAE;AAAA,UACjD;AAAA,QACJ;AACA,aAAK,QAAQ,IAAI,WAAW,KAAK;AAAA,MACrC,OAAO;AACH,cAAM,IAAI,MAAM,0EAA0E,OAAO,KAAK,EAAE;AAAA,MAC5G;AAAA,IACJ,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAI,OAAyC;AAChD,WAAO,IAAI,WAAU,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAmB;AACtB,WAAO,IAAI,WAAU,IAAI,WAAW,CAAC,CAAC;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAU,OAA4B;AACzC,WAAO,IAAI,WAAU,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAQ,KAAwB;AAEnC,UAAM,WAAW,IAAI,WAAW,IAAI,KAAK,IAAI,WAAW,IAAI,IACtD,IAAI,UAAU,CAAC,IACf;AAEN,QAAI,SAAS,SAAS,MAAM,GAAG;AAC3B,YAAM,IAAI,MAAM,gCAAgC;AAAA,IACpD;AAEA,UAAM,QAAQ,IAAI,WAAW,SAAS,SAAS,CAAC;AAChD,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK,GAAG;AACzC,YAAM,OAAO,SAAS,SAAS,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE;AACtD,UAAI,MAAM,IAAI,GAAG;AACb,cAAM,IAAI,MAAM,uBAAuB,GAAG,EAAE;AAAA,MAChD;AACA,YAAM,IAAI,CAAC,IAAI;AAAA,IACnB;AACA,WAAO,IAAI,WAAU,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAW,QAA2B;AAEzC,QAAI,CAAC,yBAAyB,KAAK,MAAM,GAAG;AACxC,YAAM,IAAI,MAAM,0BAA0B,MAAM,EAAE;AAAA,IACtD;AAEA,QAAI;AACA,UAAI,OAAO,WAAW,aAAa;AAE/B,cAAM,SAAS,OAAO,KAAK,QAAQ,QAAQ;AAC3C,eAAO,IAAI,WAAU,IAAI,WAAW,MAAM,CAAC;AAAA,MAC/C,OAAO;AAEH,cAAM,eAAe,KAAK,MAAM;AAChC,cAAM,QAAQ,IAAI,WAAW,aAAa,MAAM;AAChD,iBAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,gBAAM,CAAC,IAAI,aAAa,WAAW,CAAC;AAAA,QACxC;AACA,eAAO,IAAI,WAAU,KAAK;AAAA,MAC9B;AAAA,IACJ,SAAS,GAAG;AACR,YAAM,IAAI,MAAM,0BAA0B,MAAM,EAAE;AAAA,IACtD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAS,KAAwB;AACpC,UAAM,UAAU,IAAI,YAAY;AAChC,WAAO,IAAI,WAAU,QAAQ,OAAO,GAAG,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,UAAM,SAAS,WAAU,YAAY,OAAO;AAC5C,QAAI,WAAW,MAAM;AACjB,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,WAAO,IAAI,WAAU,MAAM;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,UAAkC;AAC9B,WAAO,KAAK,QAAQ,IAAI,WAAW,KAAK,KAAK,IAAI;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,SAAiB;AACb,WAAO,KAAK,OAAO,UAAU;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAmB;AACf,WAAO,KAAK,OAAO,WAAW;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,QAA4B;AACxB,QAAI,KAAK,UAAU,OAAW,QAAO;AAErC,UAAM,MAAM,MAAM,KAAK,KAAK,KAAK,EAC5B,IAAI,UAAQ,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC9C,KAAK,EAAE;AACZ,WAAO,OAAO;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,WAA+B;AAC3B,QAAI,KAAK,UAAU,OAAW,QAAO;AAErC,QAAI,OAAO,WAAW,aAAa;AAE/B,aAAO,OAAO,KAAK,KAAK,KAAK,EAAE,SAAS,QAAQ;AAAA,IACpD,OAAO;AAEH,YAAM,eAAe,MAAM,KAAK,KAAK,KAAK,EACrC,IAAI,UAAQ,OAAO,aAAa,IAAI,CAAC,EACrC,KAAK,EAAE;AACZ,aAAO,KAAK,YAAY;AAAA,IAC5B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,SAA6B;AACzB,QAAI,KAAK,UAAU,OAAW,QAAO;AAErC,UAAM,UAAU,IAAI,YAAY;AAChC,WAAO,QAAQ,OAAO,KAAK,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,QAAI,KAAK,UAAU,QAAW;AAC1B,aAAO;AAAA,IACX;AACA,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,UAAkC;AAC9B,WAAO,KAAK,QAAQ,IAAI,WAAW,KAAK,KAAK,IAAI;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAAgC;AAChC,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,QAAI,KAAK,UAAU,UAAa,UAAU,UAAU,QAAW;AAC3D,aAAO,KAAK,UAAU,UAAU;AAAA,IACpC;AAEA,QAAI,KAAK,MAAM,WAAW,UAAU,MAAM,QAAQ;AAC9C,aAAO;AAAA,IACX;AAEA,aAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACxC,UAAI,KAAK,MAAM,CAAC,MAAM,UAAU,MAAM,CAAC,GAAG;AACtC,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,YAAY,KAAgC;AAEvD,QAAI,IAAI,WAAW,IAAI,KAAK,IAAI,WAAW,IAAI,GAAG;AAC9C,UAAI;AACA,eAAO,WAAU,QAAQ,GAAG,EAAE;AAAA,MAClC,QAAQ;AACJ,eAAO;AAAA,MACX;AAAA,IACJ;AAGA,QAAI,iBAAiB,KAAK,GAAG,KAAK,IAAI,SAAS,MAAM,GAAG;AACpD,UAAI;AACA,eAAO,WAAU,QAAQ,GAAG,EAAE;AAAA,MAClC,QAAQ;AACJ,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;AClRO,IAAM,eAAN,MAAM,cAA8B;AAAA,EAIvC,YAAY,OAAiB;AAH7B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,WAAW;AAC5B,cAAM,IAAI,MAAM,wCAAwC,OAAO,KAAK,EAAE;AAAA,MAC1E;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAA2B;AACpC,UAAM,UAAU,IAAI,KAAK,EAAE,YAAY;AAEvC,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,cAAa,MAAS;AAAA,IACrC;AAEA,QAAI,YAAY,QAAQ;AACpB,aAAO,IAAI,cAAa,IAAI;AAAA,IAChC;AAEA,QAAI,YAAY,SAAS;AACrB,aAAO,IAAI,cAAa,KAAK;AAAA,IACjC;AAEA,UAAM,IAAI,MAAM,iBAAiB,GAAG,cAAc;AAAA,EACtD;AAAA,EAEA,UAA+B;AAC3B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,eAAe;AACrB,WAAO,KAAK,UAAU,aAAa;AAAA,EACvC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;ACtDO,IAAM,YAAN,MAAM,WAA2B;AAAA;AAAA,EAKpC,YAAY,OAAgC;AAJ5C,SAAS,OAAa;AAKlB,QAAI,UAAU,QAAW;AACrB,UAAI,iBAAiB,MAAM;AAEvB,cAAM,OAAO,MAAM,eAAe;AAClC,cAAM,QAAQ,MAAM,YAAY,IAAI;AACpC,cAAM,MAAM,MAAM,WAAW;AAE7B,aAAK,SAAS,OAAO,MAAM,QAAQ;AACnC,aAAK,OAAO;AAAA,MAChB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,SAAS,WAAU,UAAU,KAAK;AACxC,YAAI,CAAC,QAAQ;AACT,gBAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,QACnD;AACA,aAAK,SAAS,OAAO;AACrB,aAAK,OAAO,OAAO;AAAA,MACvB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,OAAO,WAAU,+BAA+B,KAAK;AAC3D,YAAI,CAAC,MAAM;AACP,gBAAM,IAAI,MAAM,6BAA6B,KAAK,EAAE;AAAA,QACxD;AACA,aAAK,SAAS,KAAK;AACnB,aAAK,OAAO,KAAK;AAAA,MACrB,OAAO;AACH,cAAM,IAAI,MAAM,qDAAqD,OAAO,KAAK,EAAE;AAAA,MACvF;AAAA,IACJ,OAAO;AACH,WAAK,SAAS;AACd,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAQ,MAAc,OAAe,KAAwB;AAEhE,QAAI,CAAC,WAAU,YAAY,MAAM,OAAO,GAAG,GAAG;AAC1C,YAAM,IAAI,MAAM,iBAAiB,IAAI,IAAI,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE;AAAA,IAC7G;AAEA,UAAM,SAAS,IAAI,WAAU,MAAS;AACtC,IAAC,OAAe,SAAS,OAAO,MAAM,QAAQ;AAC9C,IAAC,OAAe,OAAO;AACvB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAmB;AACtB,UAAM,MAAM,oBAAI,KAAK;AACrB,WAAO,WAAU;AAAA,MACb,IAAI,eAAe;AAAA,MACnB,IAAI,YAAY,IAAI;AAAA,MACpB,IAAI,WAAW;AAAA,IACnB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,UAAM,SAAS,WAAU,UAAU,OAAO;AAC1C,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,UAAM,SAAS,IAAI,WAAU,MAAS;AACtC,IAAC,OAAe,SAAS,OAAO;AAChC,IAAC,OAAe,OAAO,OAAO;AAC9B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAuC;AACnC,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,QAAW;AACtD,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAExC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,UAAM,QAAQ,IAAI;AAGlB,QAAI;AACJ,QAAI,QAAQ,KAAK,OAAO,KAAK;AACzB,aAAO,IAAI,KAAK,KAAK,IAAI,KAAM,QAAQ,GAAG,KAAK,IAAI,CAAC;AACpD,WAAK,eAAe,IAAI;AAAA,IAC5B,OAAO;AACH,aAAO,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC;AAAA,IACxD;AAEA,UAAM,QAAQ,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC;AAC3C,UAAM,SAAS,KAAK,QAAQ,IAAI,MAAM,QAAQ;AAC9C,WAAO,KAAK,MAAM,UAAU,MAAO,KAAK,KAAK,GAAG;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,+BAA+B,MAAuD;AACzF,UAAM,QAAQ,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC;AAC3C,UAAM,KAAK,OAAO,KAAK,KAAK,KAAK;AACjC,UAAM,OAAO,IAAI,KAAK,MAAM,QAAQ,IAAI,EAAE;AAG1C,QAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,GAAG;AAC3B,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,eAAe;AACjC,UAAM,QAAQ,KAAK,YAAY,IAAI;AACnC,UAAM,MAAM,KAAK,WAAW;AAE5B,WAAO;AAAA,MACH,QAAQ,OAAO,MAAM,QAAQ;AAAA,MAC7B,MAAM;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAA2B;AACvB,QAAI,KAAK,WAAW,OAAW,QAAO;AACtC,WAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,QAA4B;AACxB,QAAI,KAAK,WAAW,OAAW,QAAO;AAEtC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,WAAO,IAAI;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,MAA0B;AACtB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,QAAW;AACtD,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAExC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,UAAM,QAAQ,OAAO,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AAC3C,UAAM,MAAM,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG,GAAG;AAG7C,QAAI,OAAO,GAAG;AACV,YAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,aAAO,IAAI,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG;AAAA,IAC/D,OAAO;AACH,aAAO,GAAG,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG;AAAA,IAC3D;AAAA,EACJ;AAAA,EAEA,UAA4B;AACxB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,QAAW;AACtD,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAExC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,UAAM,QAAQ,IAAI;AAGlB,QAAI;AACJ,QAAI,QAAQ,KAAK,OAAO,KAAK;AACzB,aAAO,IAAI,KAAK,KAAK,IAAI,KAAM,QAAQ,GAAG,KAAK,IAAI,CAAC;AACpD,WAAK,eAAe,IAAI;AAAA,IAC5B,OAAO;AACH,aAAO,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC;AAAA,IACxD;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAA0B;AAC1B,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,UAAU,KAAsD;AAE3E,UAAM,QAAQ,IAAI,MAAM,+BAA+B;AACvD,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAClC,UAAM,QAAQ,SAAS,MAAM,CAAC,GAAG,EAAE;AACnC,UAAM,MAAM,SAAS,MAAM,CAAC,GAAG,EAAE;AAGjC,QAAI,QAAQ,KAAK,QAAQ,IAAI;AACzB,aAAO;AAAA,IACX;AACA,QAAI,MAAM,KAAK,MAAM,IAAI;AACrB,aAAO;AAAA,IACX;AAGA,QAAI,CAAC,WAAU,YAAY,MAAM,OAAO,GAAG,GAAG;AAC1C,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,MACH,QAAQ,OAAO,MAAM,QAAQ;AAAA,MAC7B,MAAM;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,YAAY,MAAc,OAAe,KAAsB;AAE1E,QAAI;AACJ,QAAI,QAAQ,KAAK,OAAO,KAAK;AACzB,aAAO,IAAI,KAAK,KAAK,IAAI,KAAM,QAAQ,GAAG,GAAG,CAAC;AAC9C,WAAK,eAAe,IAAI;AAAA,IAC5B,OAAO;AACH,aAAO,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC;AAAA,IAClD;AAEA,WAAO,KAAK,eAAe,MAAM,QAC1B,KAAK,YAAY,MAAM,QAAQ,KAC/B,KAAK,WAAW,MAAM;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,QAAI,KAAK,WAAW,UAAa,UAAU,WAAW,QAAW;AAC7D,aAAO,KAAK,WAAW,UAAU,UAAU,KAAK,SAAS,UAAU;AAAA,IACvE;AAEA,WAAO,KAAK,WAAW,UAAU,UAAU,KAAK,SAAS,UAAU;AAAA,EACvE;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;ACrSO,IAAM,aAAN,MAAM,WAA2B;AAAA,EASpC,YAAY,OAAkC;AAR9C,SAAS,OAAa;AASlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAE3B,YAAI,QAAQ,MAAM,SAAS,WAAU,eAAe;AAChD,gBAAM,IAAI,MAAM,oCAAoC,WAAU,gBAAgB,EAAE,cAAc;AAAA,QAClG;AACA,aAAK,QAAQ;AAAA,MACjB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,SAAS,WAAU,UAAU,KAAK;AACxC,YAAI,WAAW,MAAM;AACjB,gBAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,QACnD;AACA,aAAK,QAAQ;AAAA,MACjB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,cAAc,OAAO,KAAK,MAAM,KAAK,CAAC;AAC5C,YAAI,cAAc,MAAM,eAAe,WAAU,eAAe;AAC5D,gBAAM,IAAI,MAAM,oCAAoC,WAAU,gBAAgB,EAAE,cAAc;AAAA,QAClG;AACA,aAAK,QAAQ;AAAA,MACjB,OAAO;AACH,cAAM,IAAI,MAAM,uDAAuD,OAAO,KAAK,EAAE;AAAA,MACzF;AAAA,IACJ,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAS,MAAc,QAAgB,QAAgB,OAAe,GAAc;AAEvF,QAAI,OAAO,KAAK,OAAO,IAAI;AACvB,YAAM,IAAI,MAAM,iBAAiB,IAAI,EAAE;AAAA,IAC3C;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,YAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAAA,IAC/C;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,YAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAAA,IAC/C;AACA,QAAI,OAAO,KAAK,OAAO,WAAa;AAChC,YAAM,IAAI,MAAM,uBAAuB,IAAI,EAAE;AAAA,IACjD;AAEA,UAAM,QAAQ,OAAO,IAAI,IAAI,WAAU,iBAC1B,OAAO,MAAM,IAAI,WAAU,mBAC3B,OAAO,MAAM,IAAI,WAAU,mBAC3B,OAAO,IAAI;AAExB,WAAO,IAAI,WAAU,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAQ,MAAc,QAAgB,QAA2B;AACpE,WAAO,WAAU,SAAS,MAAM,QAAQ,QAAQ,CAAC;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAsB;AACzB,WAAO,IAAI,WAAU,EAAE;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAkB;AACrB,WAAO,IAAI,WAAU,MAAM,WAAU,cAAc;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,UAAM,SAAS,WAAU,UAAU,OAAO;AAC1C,QAAI,WAAW,MAAM;AACjB,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,WAAO,IAAI,WAAU,MAAM;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,OAA2B;AACvB,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,OAAO,KAAK,QAAQ,WAAU,cAAc;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,SAA6B;AACzB,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,UAAM,sBAAsB,KAAK,QAAQ,WAAU;AACnD,WAAO,OAAO,sBAAsB,WAAU,gBAAgB;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA,EAKA,SAA6B;AACzB,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,UAAM,sBAAsB,KAAK,QAAQ,WAAU;AACnD,UAAM,wBAAwB,sBAAsB,WAAU;AAC9D,WAAO,OAAO,wBAAwB,WAAU,gBAAgB;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKA,aAAiC;AAC7B,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,OAAO,KAAK,QAAQ,WAAU,gBAAgB;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,uBAA2C;AACvC,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,uBAAuB,OAAmC;AAC7D,WAAO,IAAI,WAAU,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI,KAAK;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,QAAI,KAAK,UAAU,QAAW;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,KAAK;AACvB,UAAM,SAAS,KAAK,OAAO;AAC3B,UAAM,SAAS,KAAK,OAAO;AAC3B,UAAM,OAAO,KAAK,WAAW;AAE7B,UAAM,UAAU,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG;AAC5C,UAAM,YAAY,OAAO,MAAM,EAAE,SAAS,GAAG,GAAG;AAChD,UAAM,YAAY,OAAO,MAAM,EAAE,SAAS,GAAG,GAAG;AAChD,UAAM,UAAU,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG;AAE5C,WAAO,GAAG,OAAO,IAAI,SAAS,IAAI,SAAS,IAAI,OAAO;AAAA,EAC1D;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,UAAU,KAA4B;AAEjD,UAAM,QAAQ,IAAI,MAAM,2CAA2C;AACnE,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAClC,UAAM,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE;AACpC,UAAM,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE;AAGpC,QAAI,OAAO;AACX,QAAI,MAAM,CAAC,GAAG;AAEV,YAAM,UAAU,MAAM,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,UAAU,GAAG,CAAC;AACtD,aAAO,SAAS,SAAS,EAAE;AAAA,IAC/B;AAGA,QAAI,OAAO,KAAK,OAAO,IAAI;AACvB,aAAO;AAAA,IACX;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,aAAO;AAAA,IACX;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,aAAO;AAAA,IACX;AAEA,UAAM,QAAQ,OAAO,IAAI,IAAI,WAAU,iBAC1B,OAAO,MAAM,IAAI,WAAU,mBAC3B,OAAO,MAAM,IAAI,WAAU,mBAC3B,OAAO,IAAI;AAExB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AAAA;AA7Oa,WAIe,mBAAmB;AAJlC,WAKe,mBAAmB;AALlC,WAMe,iBAAiB;AANhC,WAOe,gBAAgB;AAPrC,IAAM,YAAN;;;ACGA,IAAM,gBAAN,MAAM,eAA+B;AAAA;AAAA,EAMxC,YAAY,OAAyC;AALrD,SAAS,OAAa;AAMlB,QAAI,UAAU,QAAW;AACrB,UAAI,iBAAiB,MAAM;AAEvB,cAAM,OAAO,MAAM,eAAe;AAClC,cAAM,QAAQ,MAAM,YAAY,IAAI;AACpC,cAAM,MAAM,MAAM,WAAW;AAC7B,cAAM,OAAO,MAAM,YAAY;AAC/B,cAAM,SAAS,MAAM,cAAc;AACnC,cAAM,SAAS,MAAM,cAAc;AACnC,cAAM,SAAS,MAAM,mBAAmB;AAExC,aAAK,SAAS,OAAO,MAAM,QAAQ;AACnC,aAAK,OAAO;AACZ,aAAK,QAAQ,OAAO,IAAI,IAAI,iBACxB,OAAO,MAAM,IAAI,eACjB,OAAO,MAAM,IAAI,cACjB,OAAO,MAAM,IAAI;AAAA,MACzB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,SAAS,eAAc,cAAc,KAAK;AAChD,YAAI,CAAC,QAAQ;AACT,gBAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,QACvD;AACA,aAAK,SAAS,OAAO;AACrB,aAAK,OAAO,OAAO;AACnB,aAAK,QAAQ,OAAO;AAAA,MACxB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,cAAM,OAAO,KAAK,eAAe;AACjC,cAAM,QAAQ,KAAK,YAAY,IAAI;AACnC,cAAM,MAAM,KAAK,WAAW;AAC5B,cAAM,OAAO,KAAK,YAAY;AAC9B,cAAM,SAAS,KAAK,cAAc;AAClC,cAAM,SAAS,KAAK,cAAc;AAClC,cAAM,SAAS,KAAK,mBAAmB;AAEvC,aAAK,SAAS,OAAO,MAAM,QAAQ;AACnC,aAAK,OAAO;AACZ,aAAK,QAAQ,OAAO,IAAI,IAAI,iBACxB,OAAO,MAAM,IAAI,eACjB,OAAO,MAAM,IAAI,cACjB,OAAO,MAAM,IAAI;AAAA,MACzB,WAAW,OAAO,UAAU,UAAU;AAElC,cAAM,SAAS,OAAO,QAAQ,QAAU;AACxC,cAAM,aAAa,QAAQ;AAC3B,cAAM,OAAO,IAAI,KAAK,MAAM;AAE5B,cAAM,OAAO,KAAK,eAAe;AACjC,cAAM,QAAQ,KAAK,YAAY,IAAI;AACnC,cAAM,MAAM,KAAK,WAAW;AAC5B,cAAM,OAAO,KAAK,YAAY;AAC9B,cAAM,SAAS,KAAK,cAAc;AAClC,cAAM,SAAS,KAAK,cAAc;AAClC,cAAM,aAAa,KAAK,mBAAmB;AAE3C,aAAK,SAAS,OAAO,MAAM,QAAQ;AACnC,aAAK,OAAO;AACZ,aAAK,QAAQ,OAAO,IAAI,IAAI,iBACxB,OAAO,MAAM,IAAI,eACjB,OAAO,MAAM,IAAI,cACjB,OAAO,UAAU,IAAI,WACrB;AAAA,MACR,OAAO;AACH,cAAM,IAAI,MAAM,iEAAiE,OAAO,KAAK,EAAE;AAAA,MACnG;AAAA,IACJ,OAAO;AACH,WAAK,SAAS;AACd,WAAK,OAAO;AACZ,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,YACH,MACA,OACA,KACA,MACA,QACA,QACA,OAAe,GACF;AAEb,QAAI,OAAO,KAAK,OAAO,IAAI;AACvB,YAAM,IAAI,MAAM,iBAAiB,IAAI,EAAE;AAAA,IAC3C;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,YAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAAA,IAC/C;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,YAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAAA,IAC/C;AACA,QAAI,OAAO,KAAK,OAAO,WAAa;AAChC,YAAM,IAAI,MAAM,uBAAuB,IAAI,EAAE;AAAA,IACjD;AAGA,QAAI,CAAC,eAAc,YAAY,MAAM,OAAO,GAAG,GAAG;AAC9C,YAAM,IAAI,MAAM,qBAAqB,IAAI,IAAI,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE;AAAA,IACxN;AAEA,UAAM,SAAS,IAAI,eAAc,MAAS;AAC1C,IAAC,OAAe,SAAS,OAAO,MAAM,QAAQ;AAC9C,IAAC,OAAe,OAAO;AACvB,IAAC,OAAe,QAAQ,OAAO,IAAI,IAAI,iBACnC,OAAO,MAAM,IAAI,eACjB,OAAO,MAAM,IAAI,cACjB,OAAO,IAAI;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WACH,MACA,OACA,KACA,MACA,QACA,QACa;AACb,WAAO,eAAc,YAAY,MAAM,OAAO,KAAK,MAAM,QAAQ,QAAQ,CAAC;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,cAAc,SAAgC;AACjD,WAAO,IAAI,eAAc,UAAU,GAAI;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,oBAAoB,QAA+B;AACtD,WAAO,IAAI,eAAc,MAAM;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,oBAAoB,OAA8B;AACrD,WAAO,IAAI,eAAc,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAU,SAAiB,OAA8B;AAC5D,QAAI,QAAQ,KAAK,QAAQ,WAAa;AAClC,YAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,IACnD;AACA,UAAM,SAAS,UAAU,MAAO,KAAK,MAAM,QAAQ,GAAS;AAC5D,UAAM,aAAa,QAAQ;AAC3B,UAAM,SAAS,IAAI,eAAc,MAAM;AAGvC,QAAI,OAAO,UAAU,QAAW;AAC5B,MAAC,OAAe,QAAQ,OAAO,QAAQ,OAAO,UAAU;AAAA,IAC5D;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAqB;AACxB,WAAO,IAAI,eAAc,oBAAI,KAAK,CAAC;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAyB;AAC5B,WAAO,eAAc,WAAW,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAA4B;AACrC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,eAAc,MAAS;AAAA,IACtC;AAEA,UAAM,SAAS,eAAc,cAAc,OAAO;AAClD,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,MAAM,iBAAiB,GAAG,eAAe;AAAA,IACvD;AAEA,UAAM,SAAS,IAAI,eAAc,MAAS;AAC1C,IAAC,OAAe,SAAS,OAAO;AAChC,IAAC,OAAe,OAAO,OAAO;AAC9B,IAAC,OAAe,QAAQ,OAAO;AAC/B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,YAAgC;AAC5B,UAAM,OAAO,KAAK,QAAQ;AAC1B,QAAI,SAAS,OAAW,QAAO;AAC/B,WAAO,KAAK,MAAM,KAAK,QAAQ,IAAI,GAAI;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAqC;AACjC,UAAM,OAAO,KAAK,QAAQ;AAC1B,QAAI,SAAS,UAAa,KAAK,UAAU,OAAW,QAAO;AAG3D,UAAM,aAAa,OAAO,KAAK,QAAQ,CAAC,IAAI;AAI5C,UAAM,iBAAiB,KAAK,QAAQ;AAEpC,WAAO,aAAa;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAwC;AACpC,WAAO,KAAK,eAAe;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,UAAwC;AACpC,UAAM,OAAO,KAAK,QAAQ;AAC1B,QAAI,SAAS,UAAa,KAAK,UAAU,OAAW,QAAO;AAE3D,UAAM,UAAU,KAAK,MAAM,KAAK,QAAQ,IAAI,GAAI;AAChD,UAAM,SAAS,KAAK,QAAQ,IAAI;AAChC,UAAM,iBAAiB,OAAO,KAAK,QAAQ,QAAU;AACrD,UAAM,QAAQ,SAAS,MAAY;AACnC,WAAO,CAAC,SAAS,KAAK;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,OAA8B;AAC1B,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,OAAW,QAAO;AACjE,UAAM,OAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAExC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,UAAM,QAAQ,IAAI;AAClB,WAAO,UAAU,QAAQ,MAAM,OAAO,KAAK,IAAI;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKA,OAA8B;AAC1B,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,IAAI,UAAU,KAAK,KAAK;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAExC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,UAAM,QAAQ,OAAO,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AAC3C,UAAM,MAAM,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG,GAAG;AAG7C,UAAM,aAAa,KAAK;AACxB,UAAM,QAAQ,aAAa;AAC3B,UAAM,sBAAsB,aAAa;AACzC,UAAM,UAAU,sBAAsB;AACtC,UAAM,wBAAwB,sBAAsB;AACpD,UAAM,UAAU,wBAAwB;AACxC,UAAM,gBAAgB,wBAAwB;AAE9C,UAAM,OAAO,OAAO,OAAO,KAAK,CAAC,EAAE,SAAS,GAAG,GAAG;AAClD,UAAM,SAAS,OAAO,OAAO,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG;AACtD,UAAM,SAAS,OAAO,OAAO,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG;AACtD,UAAM,UAAU,OAAO,OAAO,aAAa,CAAC,EAAE,SAAS,GAAG,GAAG;AAG7D,QAAI;AACJ,QAAI,OAAO,GAAG;AACV,YAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,gBAAU,IAAI,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG,CAAC;AAAA,IAClD,OAAO;AACH,gBAAU,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG;AAAA,IAC1C;AAEA,WAAO,GAAG,OAAO,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO;AAAA,EAC5E;AAAA,EAEA,UAA4B;AACxB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,KAAK,MAAM,KAAK,SAAS,EAAE;AAExC,QAAI,IAAI,KAAK,SAAS;AACtB,QAAI,IAAI,EAAG,MAAK;AAChB,UAAM,QAAQ,IAAI;AAGlB,UAAM,aAAa,KAAK;AACxB,UAAM,QAAQ,OAAO,aAAa,cAAkB;AACpD,UAAM,sBAAsB,aAAa;AACzC,UAAM,UAAU,OAAO,sBAAsB,YAAe;AAC5D,UAAM,wBAAwB,sBAAsB;AACpD,UAAM,UAAU,OAAO,wBAAwB,WAAc;AAC7D,UAAM,gBAAgB,wBAAwB;AAC9C,UAAM,SAAS,OAAO,gBAAgB,QAAU;AAGhD,QAAI;AACJ,QAAI,QAAQ,KAAK,OAAO,KAAK;AACzB,aAAO,IAAI,KAAK,KAAK,IAAI,KAAM,QAAQ,GAAG,KAAK,MAAM,OAAO,SAAS,SAAS,MAAM,CAAC;AACrF,WAAK,eAAe,IAAI;AAAA,IAC5B,OAAO;AACH,aAAO,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,KAAK,MAAM,OAAO,SAAS,SAAS,MAAM,CAAC;AAAA,IACzF;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAA0B;AAC1B,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,cAAc,KAAqE;AAE9F,UAAM,QAAQ,IAAI,MAAM,wEAAwE;AAChG,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAClC,UAAM,QAAQ,SAAS,MAAM,CAAC,GAAG,EAAE;AACnC,UAAM,MAAM,SAAS,MAAM,CAAC,GAAG,EAAE;AACjC,UAAM,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAClC,UAAM,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE;AACpC,UAAM,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE;AAGpC,QAAI,gBAAgB;AACpB,QAAI,MAAM,CAAC,GAAG;AAEV,YAAM,UAAU,MAAM,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,UAAU,GAAG,CAAC;AACtD,sBAAgB,OAAO,OAAO;AAAA,IAClC;AAGA,QAAI,QAAQ,KAAK,QAAQ,IAAI;AACzB,aAAO;AAAA,IACX;AACA,QAAI,MAAM,KAAK,MAAM,IAAI;AACrB,aAAO;AAAA,IACX;AACA,QAAI,OAAO,KAAK,OAAO,IAAI;AACvB,aAAO;AAAA,IACX;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,aAAO;AAAA,IACX;AACA,QAAI,SAAS,KAAK,SAAS,IAAI;AAC3B,aAAO;AAAA,IACX;AAGA,QAAI,CAAC,eAAc,YAAY,MAAM,OAAO,GAAG,GAAG;AAC9C,aAAO;AAAA,IACX;AAEA,UAAM,SAAS,OAAO,MAAM,QAAQ;AACpC,UAAM,QAAQ,OAAO,IAAI,IAAI,iBACzB,OAAO,MAAM,IAAI,eACjB,OAAO,MAAM,IAAI,cACjB;AAEJ,WAAO,EAAC,QAAQ,MAAM,KAAK,MAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,YAAY,MAAc,OAAe,KAAsB;AAE1E,QAAI;AACJ,QAAI,QAAQ,KAAK,OAAO,KAAK;AACzB,aAAO,IAAI,KAAK,KAAK,IAAI,KAAM,QAAQ,GAAG,GAAG,CAAC;AAC9C,WAAK,eAAe,IAAI;AAAA,IAC5B,OAAO;AACH,aAAO,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC;AAAA,IAClD;AAEA,WAAO,KAAK,eAAe,MAAM,QAC7B,KAAK,YAAY,MAAM,QAAQ,KAC/B,KAAK,WAAW,MAAM;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,gBAAgB;AACtB,QAAI,KAAK,WAAW,UAAa,cAAc,WAAW,QAAW;AACjE,aAAO,KAAK,WAAW,cAAc,UAC9B,KAAK,SAAS,cAAc,QAC5B,KAAK,UAAU,cAAc;AAAA,IACxC;AAEA,WAAO,KAAK,WAAW,cAAc,UAC9B,KAAK,SAAS,cAAc,QAC5B,KAAK,UAAU,cAAc;AAAA,EACxC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;ACndO,IAAM,eAAN,MAAM,cAA8B;AAAA,EAIvC,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,uCAAuC,OAAO,KAAK,EAAE;AAAA,MACzE;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAA2B;AACpC,QAAI,QAAQ,YAAY;AACpB,aAAO,IAAI,cAAa,MAAS;AAAA,IACrC;AAEA,WAAO,IAAI,cAAa,GAAG;AAAA,EAC/B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK;AAAA,EACpD;AAAA,EAEA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,eAAe;AACrB,WAAO,KAAK,UAAU,aAAa;AAAA,EACvC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;AC9CO,IAAM,eAAN,MAAM,aAA6B;AAAA,EAStC,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,sCAAsC,OAAO,KAAK,EAAE;AAAA,MACxE;AAEA,UAAI,OAAO,MAAM,KAAK,KAAK,CAAC,OAAO,SAAS,KAAK,GAAG;AAChD,aAAK,QAAQ;AAAA,MACjB,OAAO;AAEH,YAAI,UAAU,KAAK,KAAK,IAAI,KAAK,IAAI,aAAY,cAAc;AAE3D,eAAK,QAAQ;AAAA,QACjB,WAAW,QAAQ,aAAY,WAAW;AACtC,gBAAM,IAAI,MAAM,0BAA0B,KAAK,oBAAoB,aAAY,SAAS,EAAE;AAAA,QAC9F,WAAW,QAAQ,aAAY,WAAW;AACtC,gBAAM,IAAI,MAAM,2BAA2B,KAAK,oBAAoB,aAAY,SAAS,EAAE;AAAA,QAC/F,OAAO;AAEH,gBAAM,eAAe,IAAI,aAAa,CAAC;AACvC,uBAAa,CAAC,IAAI;AAClB,eAAK,QAAQ,aAAa,CAAC;AAAA,QAC/B;AAAA,MACJ;AAAA,IACJ,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAA0B;AACnC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,aAAY,MAAS;AAAA,IACpC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,OAAO,MAAM,GAAG,KAAK,QAAQ,YAAY,MAAM,OAAO;AACtD,YAAM,IAAI,MAAM,iBAAiB,GAAG,aAAa;AAAA,IACrD;AAEA,WAAO,IAAI,aAAY,GAAG;AAAA,EAC9B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,aAAa;AACnB,QAAI,KAAK,UAAU,UAAa,WAAW,UAAU,QAAW;AAC5D,aAAO,KAAK,UAAU,WAAW;AAAA,IACrC;AAGA,UAAM,UAAU;AAChB,WAAO,KAAK,IAAI,KAAK,QAAQ,WAAW,KAAK,KAAK;AAAA,EACtD;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AAEJ;AAtFa,aAEe,YAAY;AAF3B,aAGe,YAAY;AAH3B,aAIe,eAAe;AAJpC,IAAM,cAAN;;;ACAA,IAAM,cAAN,MAAM,aAA6B;AAAA,EAItC,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,sCAAsC,OAAO,KAAK,EAAE;AAAA,MACxE;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAA0B;AACnC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,aAAY,MAAS;AAAA,IACpC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,OAAO,MAAM,GAAG,KAAK,QAAQ,YAAY,MAAM,OAAO;AACtD,YAAM,IAAI,MAAM,iBAAiB,GAAG,aAAa;AAAA,IACrD;AAEA,WAAO,IAAI,aAAY,GAAG;AAAA,EAC9B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,aAAa;AACnB,QAAI,KAAK,UAAU,UAAa,WAAW,UAAU,QAAW;AAC5D,aAAO,KAAK,UAAU,WAAW;AAAA,IACrC;AACA,UAAM,UAAU;AAChB,WAAO,KAAK,IAAI,KAAK,QAAQ,WAAW,KAAK,KAAK;AAAA,EACtD;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;AC5DO,IAAM,aAAN,MAAM,WAA2B;AAAA,EAOpC,YAAY,OAAgB;AAN5B,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAC1B,cAAM,IAAI,MAAM,sCAAsC,KAAK,EAAE;AAAA,MACjE;AACA,UAAI,QAAQ,WAAU,aAAa,QAAQ,WAAU,WAAW;AAC5D,cAAM,IAAI,MAAM,8BAA8B,WAAU,SAAS,QAAQ,WAAU,SAAS,SAAS,KAAK,EAAE;AAAA,MAChH;AAAA,IACJ;AACA,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,WAAO,IAAI,WAAU,GAAG;AAAA,EAC5B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,WAAW;AACjB,WAAO,KAAK,UAAU,SAAS;AAAA,EACnC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA5Da,WAIe,YAAY;AAJ3B,WAKe,YAAY;AALjC,IAAM,YAAN;;;ACAA,IAAM,aAAN,MAAM,WAA2B;AAAA,EAOpC,YAAY,OAAgB;AAN5B,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAC1B,cAAM,IAAI,MAAM,sCAAsC,KAAK,EAAE;AAAA,MACjE;AACA,UAAI,QAAQ,WAAU,aAAa,QAAQ,WAAU,WAAW;AAC5D,cAAM,IAAI,MAAM,8BAA8B,WAAU,SAAS,QAAQ,WAAU,SAAS,SAAS,KAAK,EAAE;AAAA,MAChH;AAAA,IACJ;AACA,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,WAAO,IAAI,WAAU,GAAG;AAAA,EAC5B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,WAAW;AACjB,WAAO,KAAK,UAAU,SAAS;AAAA,EACnC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA5Da,WAIe,YAAY;AAJ3B,WAKe,YAAY;AALjC,IAAM,YAAN;;;ACAA,IAAM,aAAN,MAAM,WAA2B;AAAA,EAOpC,YAAY,OAAgB;AAN5B,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAC1B,cAAM,IAAI,MAAM,sCAAsC,KAAK,EAAE;AAAA,MACjE;AACA,UAAI,QAAQ,WAAU,aAAa,QAAQ,WAAU,WAAW;AAC5D,cAAM,IAAI,MAAM,8BAA8B,WAAU,SAAS,QAAQ,WAAU,SAAS,SAAS,KAAK,EAAE;AAAA,MAChH;AAAA,IACJ;AACA,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,WAAO,IAAI,WAAU,GAAG;AAAA,EAC5B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,WAAW;AACjB,WAAO,KAAK,UAAU,SAAS;AAAA,EACnC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA5Da,WAIe,YAAY;AAJ3B,WAKe,YAAY;AALjC,IAAM,YAAN;;;ACAA,IAAM,aAAN,MAAM,WAA2B;AAAA,EAOpC,YAAY,OAAyB;AANrC,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,YAAM,cAAc,OAAO,UAAU,WAAW,OAAO,KAAK,MAAM,KAAK,CAAC,IAAI;AAE5E,UAAI,cAAc,WAAU,aAAa,cAAc,WAAU,WAAW;AACxE,cAAM,IAAI,MAAM,8BAA8B,WAAU,SAAS,QAAQ,WAAU,SAAS,SAAS,WAAW,EAAE;AAAA,MACtH;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAAwB;AACjC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,QAAI;AACJ,QAAI;AACA,cAAQ,OAAO,OAAO;AAAA,IAC1B,SAAS,GAAG;AACR,YAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,IACnD;AAEA,QAAI,QAAQ,WAAU,aAAa,QAAQ,WAAU,WAAW;AAC5D,YAAM,IAAI,MAAM,8BAA8B,WAAU,SAAS,QAAQ,WAAU,SAAS,SAAS,KAAK,EAAE;AAAA,IAChH;AAEA,WAAO,IAAI,WAAU,KAAK;AAAA,EAC9B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,WAAW;AACjB,WAAO,KAAK,UAAU,SAAS;AAAA,EACnC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AAlEa,WAIe,YAAY,OAAO,sBAAsB;AAJxD,WAKe,YAAY,OAAO,qBAAqB;AAL7D,IAAM,YAAN;;;ACAA,IAAM,cAAN,MAAM,YAA4B;AAAA,EAOrC,YAAY,OAAkC;AAN9C,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI;AAEJ,UAAI,OAAO,UAAU,UAAU;AAC3B,YAAI;AACA,wBAAc,OAAO,KAAK;AAAA,QAC9B,SAAS,GAAG;AACR,gBAAM,IAAI,MAAM,4CAA4C,KAAK,EAAE;AAAA,QACvE;AAAA,MACJ,WAAW,OAAO,UAAU,UAAU;AAClC,sBAAc,OAAO,KAAK,MAAM,KAAK,CAAC;AAAA,MAC1C,OAAO;AACH,sBAAc;AAAA,MAClB;AAEA,UAAI,cAAc,YAAW,aAAa,cAAc,YAAW,WAAW;AAC1E,cAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,WAAW,EAAE;AAAA,MACzH;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAEA,QAAI;AACJ,QAAI;AACA,cAAQ,OAAO,OAAO;AAAA,IAC1B,SAAS,GAAG;AACR,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,QAAI,QAAQ,YAAW,aAAa,QAAQ,YAAW,WAAW;AAC9D,YAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,KAAK,EAAE;AAAA,IACnH;AAEA,WAAO,IAAI,YAAW,KAAK;AAAA,EAC/B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,WAAW;AACjB,WAAO,KAAK,UAAU,SAAS;AAAA,EACnC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA9Ea,YAIe,YAAY,OAAO,0CAA0C;AAJ5E,YAKe,YAAY,OAAO,yCAAyC;AALjF,IAAM,aAAN;;;ACIA,IAAM,gBAAN,MAAM,eAA+B;AAAA;AAAA,EAMxC,YAAY,OAAkE;AAL9E,SAAS,OAAa;AAMlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAE3B,cAAM,SAAS,eAAc,cAAc,KAAK;AAChD,YAAI,CAAC,QAAQ;AACT,gBAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,QACvD;AACA,aAAK,SAAS,OAAO;AACrB,aAAK,OAAO,OAAO;AACnB,aAAK,QAAQ,OAAO;AAAA,MACxB,WAAW,OAAO,UAAU,YAAY,UAAU,MAAM;AACpD,aAAK,SAAS,MAAM;AACpB,aAAK,OAAO,MAAM;AAClB,aAAK,QAAQ,MAAM;AAAA,MACvB,OAAO;AACH,cAAM,IAAI,MAAM,mDAAmD,OAAO,KAAK,EAAE;AAAA,MACrF;AAAA,IACJ,OAAO;AACH,WAAK,SAAS;AACd,WAAK,OAAO;AACZ,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAI,QAAgB,MAAc,OAA8B;AACnE,WAAO,IAAI,eAAc,EAAE,QAAQ,MAAM,MAAM,CAAC;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,YAAY,SAAgC;AAC/C,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,OAAO,OAAO,IAAI,YAAe,CAAC;AAAA,EAC5F;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,iBAAiB,cAAqC;AACzD,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,OAAO,YAAY,IAAI,SAAW,CAAC;AAAA,EAC7F;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,iBAAiB,cAAqC;AACzD,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,OAAO,YAAY,IAAI,MAAO,CAAC;AAAA,EACzF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,gBAAgB,aAAoC;AACvD,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,YAAY,CAAC;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,YAAY,SAAgC;AAC/C,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,OAAO,OAAO,IAAI,MAAM,YAAe,CAAC;AAAA,EAClG;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAU,OAA8B;AAC3C,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,OAAO,KAAK,IAAI,MAAM,MAAM,YAAe,CAAC;AAAA,EACtG;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAS,MAA6B;AACzC,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,OAAO,GAAG,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAU,OAA8B;AAC3C,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAW,QAA+B;AAC7C,WAAO,IAAI,eAAc,EAAE,QAAQ,MAAM,GAAG,OAAO,GAAG,CAAC;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAU,OAA8B;AAC3C,WAAO,IAAI,eAAc,EAAE,QAAQ,QAAQ,IAAI,MAAM,GAAG,OAAO,GAAG,CAAC;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAsB;AACzB,WAAO,IAAI,eAAc,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAyB;AAC5B,WAAO,eAAc,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAA4B;AACrC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,eAAc,MAAS;AAAA,IACtC;AAEA,UAAM,SAAS,eAAc,cAAc,OAAO;AAClD,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,MAAM,iBAAiB,GAAG,eAAe;AAAA,IACvD;AAEA,WAAO,IAAI,eAAc,EAAE,QAAQ,OAAO,QAAQ,MAAM,OAAO,MAAM,OAAO,OAAO,MAAM,CAAC;AAAA,EAC9F;AAAA;AAAA;AAAA;AAAA,EAKA,UAA8B;AAC1B,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,eAAmC;AAC/B,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,eAAmC;AAC/B,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,cAAkC;AAC9B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAgC;AAC5B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,WAA+B;AAC3B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAsB;AAClB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AACA,WAAO,KAAK,SAAS,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,aAAsB;AAClB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AACA,WAAO,KAAK,SAAS,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAqB;AACjB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO,IAAI,eAAc,MAAS;AAAA,IACtC;AACA,WAAO,IAAI,eAAc;AAAA,MACrB,QAAQ,KAAK,IAAI,KAAK,MAAM;AAAA,MAC5B,MAAM,KAAK,IAAI,KAAK,IAAI;AAAA,MACxB,OAAO,KAAK,QAAQ,KAAK,CAAC,KAAK,QAAQ,KAAK;AAAA,IAChD,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,SAAwB;AACpB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO,IAAI,eAAc,MAAS;AAAA,IACtC;AACA,WAAO,IAAI,eAAc;AAAA,MACrB,QAAQ,CAAC,KAAK;AAAA,MACd,MAAM,CAAC,KAAK;AAAA,MACZ,OAAO,CAAC,KAAK;AAAA,IACjB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,cAAsB;AAClB,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AAGA,QAAI,KAAK,WAAW,KAAK,KAAK,SAAS,KAAK,KAAK,UAAU,IAAI;AAC3D,aAAO;AAAA,IACX;AAEA,QAAI,SAAS;AAGb,UAAM,QAAQ,KAAK,MAAM,KAAK,SAAS,EAAE;AACzC,UAAM,SAAS,KAAK,SAAS;AAE7B,QAAI,UAAU,GAAG;AACb,gBAAU,GAAG,KAAK;AAAA,IACtB;AAEA,QAAI,WAAW,GAAG;AACd,gBAAU,GAAG,MAAM;AAAA,IACvB;AAGA,UAAM,eAAe,KAAK,QAAQ;AAClC,UAAM,iBAAiB,KAAK,QAAQ;AAGpC,UAAM,YAAY,eAAe;AACjC,UAAM,mBAAmB,eAAe;AAExC,UAAM,cAAc,KAAK,OAAO,OAAO,SAAS;AAChD,UAAM,QAAQ,mBAAmB;AACjC,UAAM,UAAW,mBAAmB,QAAS;AAC7C,UAAM,UAAU,mBAAmB;AAEnC,QAAI,gBAAgB,GAAG;AACnB,gBAAU,GAAG,WAAW;AAAA,IAC5B;AAGA,QAAI,UAAU,MAAM,YAAY,MAAM,YAAY,MAAM,mBAAmB,IAAI;AAC3E,gBAAU;AAEV,UAAI,UAAU,IAAI;AACd,kBAAU,GAAG,KAAK;AAAA,MACtB;AAEA,UAAI,YAAY,IAAI;AAChB,kBAAU,GAAG,OAAO;AAAA,MACxB;AAEA,UAAI,YAAY,MAAM,mBAAmB,IAAI;AACzC,YAAI,mBAAmB,IAAI;AAEvB,gBAAM,aAAa,OAAO,cAAc,IAAI;AAC5C,gBAAM,oBAAoB,OAAO,OAAO,IAAI;AAE5C,gBAAM,YAAY,kBAAkB,QAAQ,CAAC,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,EAAE;AACnF,oBAAU,GAAG,SAAS;AAAA,QAC1B,OAAO;AACH,oBAAU,GAAG,OAAO;AAAA,QACxB;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAmB;AACf,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AAEA,QAAI,KAAK,WAAW,KAAK,KAAK,SAAS,KAAK,KAAK,UAAU,IAAI;AAC3D,aAAO;AAAA,IACX;AAEA,QAAI,SAAS;AAEb,UAAM,QAAQ,KAAK,MAAM,KAAK,SAAS,EAAE;AACzC,UAAM,SAAS,KAAK,SAAS;AAE7B,UAAM,eAAe,KAAK,QAAQ;AAClC,UAAM,iBAAiB,KAAK,QAAQ;AAEpC,UAAM,YAAY,eAAe;AACjC,UAAM,mBAAmB,eAAe;AAExC,UAAM,cAAc,KAAK,OAAO,OAAO,SAAS;AAChD,UAAM,QAAQ,mBAAmB;AACjC,UAAM,UAAW,mBAAmB,QAAS;AAC7C,UAAM,UAAU,mBAAmB;AAEnC,UAAM,eAAe,iBAAiB,KAAK,CAAC,iBAAiB;AAC7D,UAAM,KAAK,eAAe;AAC1B,UAAM,KAAM,eAAe,WAAc;AACzC,UAAM,KAAK,eAAe;AAE1B,QAAI,UAAU,EAAG,WAAU,GAAG,KAAK;AACnC,QAAI,WAAW,EAAG,WAAU,GAAG,MAAM;AACrC,QAAI,gBAAgB,EAAG,WAAU,GAAG,WAAW;AAC/C,QAAI,UAAU,GAAI,WAAU,GAAG,KAAK;AACpC,QAAI,YAAY,GAAI,WAAU,GAAG,OAAO;AACxC,QAAI,YAAY,GAAI,WAAU,GAAG,OAAO;AAExC,QAAI,OAAO,MAAM,OAAO,MAAM,OAAO,IAAI;AACrC,UAAI,iBAAiB,MAAM,YAAY,MAAM,UAAU,MAAM,YAAY,MAClE,gBAAgB,KAAK,UAAU,KAAK,WAAW,GAAG;AACrD,kBAAU;AAAA,MACd;AACA,UAAI,OAAO,GAAI,WAAU,GAAG,EAAE;AAC9B,UAAI,OAAO,GAAI,WAAU,GAAG,EAAE;AAC9B,UAAI,OAAO,GAAI,WAAU,GAAG,EAAE;AAAA,IAClC;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,UAAuE;AACnE,QAAI,KAAK,WAAW,UAAa,KAAK,SAAS,UAAa,KAAK,UAAU,QAAW;AAClF,aAAO;AAAA,IACX;AACA,WAAO,EAAE,QAAQ,KAAK,QAAQ,MAAM,KAAK,MAAM,OAAO,KAAK,MAAM;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAAqE;AACrE,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,cAAc,KAAqE;AAC9F,UAAM,WAAW,IAAI,WAAW,GAAG;AACnC,UAAM,WAAW,WAAW,IAAI,UAAU,CAAC,IAAI;AAG/C,QAAI,SAAS,WAAW,GAAG,GAAG;AAC1B,aAAO,eAAc,iBAAiB,UAAU,QAAQ;AAAA,IAC5D;AAGA,WAAO,eAAc,mBAAmB,UAAU,QAAQ;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,iBAAiB,KAAa,UAA2E;AACpH,UAAM,QAAQ,IAAI,MAAM,uFAAuF;AAC/G,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AAGA,QAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AAC5E,aAAO;AAAA,IACX;AAEA,UAAM,QAAQ,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC1C,UAAM,SAAS,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC3C,UAAM,OAAO,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AACzC,UAAM,QAAQ,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC1C,UAAM,UAAU,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC5C,UAAM,aAAa,MAAM,CAAC,KAAK;AAG/B,UAAM,eAAe,WAAW,MAAM,GAAG;AACzC,UAAM,eAAe,SAAS,aAAa,CAAC,KAAK,KAAK,EAAE;AACxD,QAAI,YAAY;AAChB,QAAI,aAAa,SAAS,GAAG;AAEzB,YAAM,UAAU,aAAa,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,UAAU,GAAG,CAAC;AAC7D,kBAAY,OAAO,OAAO;AAAA,IAC9B;AAGA,UAAM,aAAa,OAAO,KAAK,IAAI,QAAQ,cACzB,OAAO,OAAO,IAAI,MAAM,cACxB,OAAO,YAAY,IAAI,cACvB;AAElB,UAAM,cAAc,QAAQ,KAAK;AAEjC,QAAI,UAAU;AACV,aAAO,EAAE,QAAQ,CAAC,aAAa,MAAM,CAAC,MAAM,OAAO,CAAC,WAAW;AAAA,IACnE;AACA,WAAO,EAAE,QAAQ,aAAa,MAAY,OAAO,WAAW;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,mBAAmB,KAAa,UAA2E;AAGtH,UAAM,UAAU;AAChB,UAAM,QAAQ,IAAI,MAAM,OAAO;AAC/B,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AAGA,QAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AACnH,aAAO;AAAA,IACX;AAEA,UAAM,QAAQ,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC1C,UAAM,SAAS,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC3C,UAAM,OAAO,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AACzC,UAAM,QAAQ,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC1C,UAAM,UAAU,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC5C,UAAM,UAAU,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC5C,UAAM,KAAK,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AACvC,UAAM,KAAK,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AACvC,UAAM,KAAK,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAEvC,UAAM,aAAa,OAAO,KAAK,IAAI,QAAQ,cACzB,OAAO,OAAO,IAAI,MAAM,cACxB,OAAO,OAAO,IAAI,cAClB,OAAO,EAAE,IAAI,WACb,OAAO,EAAE,IAAI,QACb,OAAO,EAAE;AAE3B,UAAM,cAAc,QAAQ,KAAK;AAEjC,QAAI,UAAU;AACV,aAAO,EAAE,QAAQ,CAAC,aAAa,MAAM,CAAC,MAAM,OAAO,CAAC,WAAW;AAAA,IACnE;AACA,WAAO,EAAE,QAAQ,aAAa,MAAY,OAAO,WAAW;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,gBAAgB;AACtB,QAAI,KAAK,WAAW,UAAa,cAAc,WAAW,QAAW;AACjE,aAAO,KAAK,WAAW,cAAc,UAC9B,KAAK,SAAS,cAAc,QAC5B,KAAK,UAAU,cAAc;AAAA,IACxC;AAEA,WAAO,KAAK,WAAW,cAAc,UAC9B,KAAK,SAAS,cAAc,QAC5B,KAAK,UAAU,cAAc;AAAA,EACxC;AAAA,EAEA,SAAiB;AACb,WAAO,KAAK,UAAU,SAAY,aAAa,KAAK,YAAY;AAAA,EACpE;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,YAAY;AAAA,IACpE;AAAA,EACJ;AACJ;;;ACtgBO,IAAM,cAAN,MAAM,YAA4B;AAAA,EAOrC,YAAY,OAAgB;AAN5B,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAC1B,cAAM,IAAI,MAAM,uCAAuC,KAAK,EAAE;AAAA,MAClE;AACA,UAAI,QAAQ,YAAW,aAAa,QAAQ,YAAW,WAAW;AAC9D,cAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,KAAK,EAAE;AAAA,MACnH;AAAA,IACJ;AACA,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,WAAO,IAAI,YAAW,GAAG;AAAA,EAC7B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA5Da,YAIe,YAAY;AAJ3B,YAKe,YAAY;AALjC,IAAM,aAAN;;;ACAA,IAAM,cAAN,MAAM,YAA4B;AAAA,EAOrC,YAAY,OAAgB;AAN5B,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAC1B,cAAM,IAAI,MAAM,uCAAuC,KAAK,EAAE;AAAA,MAClE;AACA,UAAI,QAAQ,YAAW,aAAa,QAAQ,YAAW,WAAW;AAC9D,cAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,KAAK,EAAE;AAAA,MACnH;AAAA,IACJ;AACA,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,WAAO,IAAI,YAAW,GAAG;AAAA,EAC7B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA5Da,YAIe,YAAY;AAJ3B,YAKe,YAAY;AALjC,IAAM,aAAN;;;ACAA,IAAM,cAAN,MAAM,YAA4B;AAAA,EAOrC,YAAY,OAAgB;AAN5B,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAC1B,cAAM,IAAI,MAAM,uCAAuC,KAAK,EAAE;AAAA,MAClE;AACA,UAAI,QAAQ,YAAW,aAAa,QAAQ,YAAW,WAAW;AAC9D,cAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,KAAK,EAAE;AAAA,MACnH;AAAA,IACJ;AACA,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAEA,UAAM,MAAM,OAAO,OAAO;AAE1B,QAAI,MAAM,GAAG,GAAG;AACZ,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,WAAO,IAAI,YAAW,GAAG;AAAA,EAC7B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA5Da,YAIe,YAAY;AAJ3B,YAKe,YAAY;AALjC,IAAM,aAAN;;;ACAA,IAAM,cAAN,MAAM,YAA4B;AAAA,EAOrC,YAAY,OAAyB;AANrC,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,YAAM,cAAc,OAAO,UAAU,WAAW,OAAO,KAAK,MAAM,KAAK,CAAC,IAAI;AAE5E,UAAI,cAAc,YAAW,aAAa,cAAc,YAAW,WAAW;AAC1E,cAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,WAAW,EAAE;AAAA,MACzH;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAEA,QAAI;AACJ,QAAI;AACA,cAAQ,OAAO,OAAO;AAAA,IAC1B,SAAS,GAAG;AACR,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,QAAI,QAAQ,YAAW,aAAa,QAAQ,YAAW,WAAW;AAC9D,YAAM,IAAI,MAAM,+BAA+B,YAAW,SAAS,QAAQ,YAAW,SAAS,SAAS,KAAK,EAAE;AAAA,IACnH;AAEA,WAAO,IAAI,YAAW,KAAK;AAAA,EAC/B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAA+B;AAC3B,QAAI,KAAK,UAAU,OAAW,QAAO;AACrC,WAAO,OAAO,KAAK,KAAK;AAAA,EAC5B;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AAvEa,YAIe,YAAY,OAAO,CAAC;AAJnC,YAKe,YAAY,OAAO,sBAAsB;AAL9D,IAAM,aAAN;;;ACAA,IAAM,eAAN,MAAM,aAA6B;AAAA,EAOtC,YAAY,OAAkC;AAN9C,SAAS,OAAa;AAOlB,QAAI,UAAU,QAAW;AACrB,UAAI;AAEJ,UAAI,OAAO,UAAU,UAAU;AAC3B,YAAI;AACA,wBAAc,OAAO,KAAK;AAAA,QAC9B,SAAS,GAAG;AACR,gBAAM,IAAI,MAAM,6CAA6C,KAAK,EAAE;AAAA,QACxE;AAAA,MACJ,WAAW,OAAO,UAAU,UAAU;AAClC,sBAAc,OAAO,KAAK,MAAM,KAAK,CAAC;AAAA,MAC1C,OAAO;AACH,sBAAc;AAAA,MAClB;AAEA,UAAI,cAAc,aAAY,aAAa,cAAc,aAAY,WAAW;AAC5E,cAAM,IAAI,MAAM,gCAAgC,aAAY,SAAS,QAAQ,aAAY,SAAS,SAAS,WAAW,EAAE;AAAA,MAC5H;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAA0B;AACnC,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,aAAY,MAAS;AAAA,IACpC;AAEA,QAAI;AACJ,QAAI;AACA,cAAQ,OAAO,OAAO;AAAA,IAC1B,SAAS,GAAG;AACR,YAAM,IAAI,MAAM,iBAAiB,GAAG,aAAa;AAAA,IACrD;AAEA,QAAI,QAAQ,aAAY,aAAa,QAAQ,aAAY,WAAW;AAChE,YAAM,IAAI,MAAM,gCAAgC,aAAY,SAAS,QAAQ,aAAY,SAAS,SAAS,KAAK,EAAE;AAAA,IACtH;AAEA,WAAO,IAAI,aAAY,KAAK;AAAA,EAChC;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK,MAAM,SAAS;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;AA9Ea,aAIe,YAAY,OAAO,CAAC;AAJnC,aAKe,YAAY,OAAO,yCAAyC;AALjF,IAAM,cAAN;;;ACAA,IAAM,YAAN,MAAM,WAA2B;AAAA,EAIpC,YAAY,WAAsB;AAHlC,SAAS,OAAa;AAIlB,SAAK,YAAY,aAAa;AAAA,EAClC;AAAA,EAEA,OAAO,MAAM,KAAa,WAAiC;AACvD,UAAM,UAAU,IAAI,KAAK;AACzB,QAAI,YAAY,MAAM,YAAY,cAAc,YAAY,QAAQ;AAChE,aAAO,IAAI,WAAU,SAAS;AAAA,IAClC;AACA,UAAM,IAAI,MAAM,iBAAiB,GAAG,WAAW;AAAA,EACnD;AAAA,EAEA,SAAkB;AACd,WAAO;AAAA,EACX;AAAA,EAEA,WAAmB;AACf,WAAO;AAAA,EACX;AAAA,EAEA,UAAqB;AACjB,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,QAAmB;AACnB,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,OAAuB;AAC1B,QAAI,EAAE,iBAAiB,aAAY;AAC/B,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EAEA,QAAQ,OAA0B;AAC9B,WAAO;AAAA,EACX;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM;AAAA,MACN,OAAO;AAAA,IACX;AAAA,EACJ;AACJ;;;ACjDO,IAAM,YAAN,MAAM,WAA2B;AAAA,EAIpC,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,oCAAoC,OAAO,KAAK,EAAE;AAAA,MACtE;AACA,WAAK,QAAQ;AAAA,IACjB,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,KAAwB;AACjC,QAAI,QAAQ,YAAY;AACpB,aAAO,IAAI,WAAU,MAAS;AAAA,IAClC;AAEA,WAAO,IAAI,WAAU,GAAG;AAAA,EAC5B;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,UAAU,UAAU;AAAA,EACpC;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;ACpDA,SAAS,MAAM,QAAQ,OAAO,UAAU,UAAU,eAAe;AAO1D,IAAM,aAAN,MAAM,YAA4B;AAAA,EAIrC,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,qCAAqC,OAAO,KAAK,EAAE;AAAA,MACvE;AAGA,UAAI,CAAC,SAAS,KAAK,GAAG;AAClB,cAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,MACnD;AAGA,YAAM,MAAM,QAAQ,KAAK;AACzB,UAAI,UAAU,YAAY,QAAQ,GAAG;AACjC,cAAM,IAAI,MAAM,qDAAqD,GAAG,EAAE;AAAA,MAC9E;AAEA,WAAK,OAAO,MAAM,YAAY;AAAA,IAClC,OAAO;AACH,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAuB;AAC1B,WAAO,IAAI,YAAW,OAAO,CAAC;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAI,MAA0B;AACjC,WAAO,IAAI,YAAW,IAAI;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAkB;AACrB,WAAO,IAAI,YAAW,QAAQ;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAsB;AACzB,WAAO,YAAW,IAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAGA,QAAI,CAAC,SAAS,OAAO,GAAG;AACpB,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,UAAM,MAAM,QAAQ,OAAO;AAC3B,QAAI,YAAY,YAAY,QAAQ,GAAG;AACnC,YAAM,IAAI,MAAM,iBAAiB,GAAG,+BAA+B,GAAG,GAAG;AAAA,IAC7E;AAEA,WAAO,IAAI,YAAW,OAAO;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,WAA+B;AAC3B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAkC;AAC9B,QAAI,KAAK,SAAS,OAAW,QAAO;AAGpC,UAAM,MAAM,KAAK,KAAK,QAAQ,MAAM,EAAE;AACtC,UAAM,QAAQ,IAAI,WAAW,EAAE;AAC/B,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,YAAM,CAAC,IAAI,SAAS,IAAI,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;AAAA,IAC3D;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,QAAiB;AACb,WAAO,KAAK,SAAS;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAiC;AAC7B,QAAI,KAAK,SAAS,OAAW,QAAO;AACpC,WAAO,QAAQ,KAAK,IAAI;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,QAAI,KAAK,SAAS,QAAW;AACzB,aAAO;AAAA,IACX;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAA4B;AAC5B,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,SAAS,UAAU;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,OAA2B;AAC/B,QAAI,KAAK,SAAS,UAAa,MAAM,SAAS,QAAW;AACrD,UAAI,KAAK,SAAS,MAAM,KAAM,QAAO;AACrC,UAAI,KAAK,SAAS,OAAW,QAAO;AACpC,aAAO;AAAA,IACX;AAGA,UAAM,YAAY,KAAK,QAAQ;AAC/B,UAAM,aAAa,MAAM,QAAQ;AAEjC,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,UAAI,UAAU,CAAC,IAAI,WAAW,CAAC,EAAG,QAAO;AACzC,UAAI,UAAU,CAAC,IAAI,WAAW,CAAC,EAAG,QAAO;AAAA,IAC7C;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;ACvLA,SAAS,MAAM,QAAQ,OAAOA,WAAU,YAAAC,WAAU,WAAAC,gBAAe;AAO1D,IAAM,aAAN,MAAM,YAA4B;AAAA,EAIrC,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,qCAAqC,OAAO,KAAK,EAAE;AAAA,MACvE;AAGA,UAAI,CAACC,UAAS,KAAK,GAAG;AAClB,cAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,MACnD;AAGA,YAAM,MAAMC,SAAQ,KAAK;AACzB,UAAI,UAAUC,aAAY,QAAQ,GAAG;AACjC,cAAM,IAAI,MAAM,qDAAqD,GAAG,EAAE;AAAA,MAC9E;AAEA,WAAK,OAAO,MAAM,YAAY;AAAA,IAClC,OAAO;AACH,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAuB;AAC1B,WAAO,IAAI,YAAW,OAAO,CAAC;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAI,MAA0B;AACjC,WAAO,IAAI,YAAW,IAAI;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAkB;AACrB,WAAO,IAAI,YAAWA,SAAQ;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAsB;AACzB,WAAO,YAAW,IAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAAyB;AAClC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,YAAW,MAAS;AAAA,IACnC;AAGA,QAAI,CAACF,UAAS,OAAO,GAAG;AACpB,YAAM,IAAI,MAAM,iBAAiB,GAAG,YAAY;AAAA,IACpD;AAEA,UAAM,MAAMC,SAAQ,OAAO;AAC3B,QAAI,YAAYC,aAAY,QAAQ,GAAG;AACnC,YAAM,IAAI,MAAM,iBAAiB,GAAG,+BAA+B,GAAG,GAAG;AAAA,IAC7E;AAEA,WAAO,IAAI,YAAW,OAAO;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,WAA+B;AAC3B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAkC;AAC9B,QAAI,KAAK,SAAS,OAAW,QAAO;AAGpC,UAAM,MAAM,KAAK,KAAK,QAAQ,MAAM,EAAE;AACtC,UAAM,QAAQ,IAAI,WAAW,EAAE;AAC/B,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,YAAM,CAAC,IAAI,SAAS,IAAI,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;AAAA,IAC3D;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,eAAmC;AAC/B,QAAI,KAAK,SAAS,UAAa,KAAK,SAASA,UAAU,QAAO;AAG9D,UAAM,MAAM,KAAK,KAAK,QAAQ,MAAM,EAAE;AACtC,UAAM,eAAe,IAAI,UAAU,GAAG,EAAE;AACxC,UAAM,YAAY,SAAS,cAAc,EAAE;AAC3C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,QAAiB;AACb,WAAO,KAAK,SAASA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAiC;AAC7B,QAAI,KAAK,SAAS,OAAW,QAAO;AACpC,WAAOD,SAAQ,KAAK,IAAI;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,QAAI,KAAK,SAAS,QAAW;AACzB,aAAO;AAAA,IACX;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAA4B;AAC5B,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,YAAY;AAClB,WAAO,KAAK,SAAS,UAAU;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,OAA2B;AAC/B,QAAI,KAAK,SAAS,UAAa,MAAM,SAAS,QAAW;AACrD,UAAI,KAAK,SAAS,MAAM,KAAM,QAAO;AACrC,UAAI,KAAK,SAAS,OAAW,QAAO;AACpC,aAAO;AAAA,IACX;AAGA,UAAM,YAAY,KAAK,QAAQ;AAC/B,UAAM,aAAa,MAAM,QAAQ;AAEjC,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,UAAI,UAAU,CAAC,IAAI,WAAW,CAAC,EAAG,QAAO;AACzC,UAAI,UAAU,CAAC,IAAI,WAAW,CAAC,EAAG,QAAO;AAAA,IAC7C;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;ACrMA,SAAS,MAAME,SAAQ,OAAOC,WAAU,YAAAC,WAAU,WAAAC,gBAAe;AAO1D,IAAM,kBAAN,MAAM,iBAAiC;AAAA,EAI1C,YAAY,OAAgB;AAH5B,SAAS,OAAa;AAIlB,QAAI,UAAU,QAAW;AACrB,UAAI,OAAO,UAAU,UAAU;AAC3B,cAAM,IAAI,MAAM,0CAA0C,OAAO,KAAK,EAAE;AAAA,MAC5E;AAGA,UAAI,CAACC,UAAS,KAAK,GAAG;AAClB,cAAM,IAAI,MAAM,uCAAuC,KAAK,EAAE;AAAA,MAClE;AAGA,YAAM,MAAMC,SAAQ,KAAK;AACzB,UAAI,UAAUC,aAAY,QAAQ,GAAG;AACjC,cAAM,IAAI,MAAM,0DAA0D,GAAG,EAAE;AAAA,MACnF;AAEA,WAAK,QAAQ,MAAM,YAAY;AAAA,IACnC,OAAO;AACH,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAA4B;AAC/B,WAAO,IAAI,iBAAgBC,QAAO,CAAC;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAuB;AAC1B,WAAO,IAAI,iBAAgBD,SAAQ;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAM,KAA8B;AACvC,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,YAAY,MAAM,YAAY,YAAY;AAC1C,aAAO,IAAI,iBAAgB,MAAS;AAAA,IACxC;AAGA,QAAI,CAACF,UAAS,OAAO,GAAG;AACpB,YAAM,IAAI,MAAM,iBAAiB,GAAG,iBAAiB;AAAA,IACzD;AAEA,UAAM,MAAMC,SAAQ,OAAO;AAC3B,QAAI,YAAYC,aAAY,QAAQ,GAAG;AACnC,YAAM,IAAI,MAAM,iBAAiB,GAAG,yCAAyC,GAAG,GAAG;AAAA,IACvF;AAEA,WAAO,IAAI,iBAAgB,OAAO;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,UAA8B;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACf,WAAO,KAAK,UAAU,SAAY,SAAS,KAAK;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,eAAmC;AAC/B,QAAI,KAAK,UAAU,UAAa,KAAK,UAAUA,UAAU,QAAO;AAGhE,UAAM,MAAM,KAAK,MAAM,QAAQ,MAAM,EAAE;AACvC,UAAM,eAAe,IAAI,UAAU,GAAG,EAAE;AACxC,UAAM,YAAY,SAAS,cAAc,EAAE;AAC3C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,QAAiB;AACb,WAAO,KAAK,UAAUA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAuB;AAC1B,QAAI,MAAM,SAAS,KAAK,MAAM;AAC1B,aAAO;AAAA,IACX;AAEA,UAAM,kBAAkB;AACxB,WAAO,KAAK,UAAU,gBAAgB;AAAA,EAC1C;AAAA,EAEA,SAAwB;AACpB,WAAO;AAAA,MACH,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,UAAU,SAAY,aAAa,KAAK,SAAS;AAAA,IACjE;AAAA,EACJ;AACJ;;;AClFO,SAAS,aAAa,GAA0B;AACnD,SAAO,OAAO,MAAM,YAAY,MAAM,QAAQ,YAAY;AAC9D;AAEO,SAAS,iBAAiB,GAAmB;AAChD,MAAI,aAAa,CAAC,EAAG,QAAO,iBAAiB,EAAE,MAAM;AACrD,SAAO;AACX;AAOO,IAAe,QAAf,MAAqB;AAK5B;;;AClDO,SAAS,OAAO,MAA4B;AAC/C,MAAI,aAAa,KAAK,IAAI,GAAG;AACzB,UAAM,YAAY,iBAAiB,KAAK,IAAI;AAC5C,QAAI,KAAK,UAAU,cAAc,KAAK,UAAU,IAAI;AAChD,aAAO,IAAI,UAAU,SAAS;AAAA,IAClC;AACA,WAAO,OAAO,EAAC,MAAM,WAAW,OAAO,KAAK,MAAK,CAAC;AAAA,EACtD;AAEA,UAAQ,KAAK,MAAM;AAAA,IACf,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,aAAa,MAAM,KAAK,KAAK;AAAA,IACxC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,cAAc,MAAM,KAAK,KAAK;AAAA,IACzC,KAAK;AACD,aAAO,aAAa,MAAM,KAAK,KAAK;AAAA,IACxC,KAAK;AACD,aAAO,YAAY,MAAM,KAAK,KAAK;AAAA,IACvC,KAAK;AACD,aAAO,YAAY,MAAM,KAAK,KAAK;AAAA,IACvC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,cAAc,MAAM,KAAK,KAAK;AAAA,IACzC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,YAAY,MAAM,KAAK,KAAK;AAAA,IACvC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,UAAU,MAAM,KAAK,KAAK;AAAA,IACrC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,WAAW,MAAM,KAAK,KAAK;AAAA,IACtC,KAAK;AACD,aAAO,gBAAgB,MAAM,KAAK,KAAK;AAAA,IAC3C;AACI,YAAM,IAAI,MAAM,qBAAqB,KAAK,IAAI,EAAE;AAAA,EACxD;AACJ;;;AClEO,IAAM,gBAAN,MAAoB;AAAA,EAEvB,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,OAAuC;AAC1C,WAAO,EAAC,MAAM,aAAa,MAAM,UAAS;AAAA,EAC9C;AAAA,EAEA,OAAO,UAA0C;AAC7C,WAAO,EAAC,MAAM,aAAa,MAAM,UAAS;AAAA,EAC9C;AAAA,EAEA,OAAO,UAA0C;AAC7C,WAAO,EAAC,MAAM,aAAa,MAAM,UAAS;AAAA,EAC9C;AAAA,EAEA,OAAO,SAAwC;AAC3C,WAAO,EAAC,MAAM,aAAa,MAAM,SAAQ;AAAA,EAC7C;AAAA,EAEA,OAAO,SAAwC;AAC3C,WAAO,EAAC,MAAM,aAAa,MAAM,SAAQ;AAAA,EAC7C;AAAA,EAEA,OAAO,QAAuC;AAC1C,WAAO,EAAC,MAAM,aAAa,MAAM,SAAQ;AAAA,EAC7C;AAAA,EAEA,OAAO,SAAwC;AAC3C,WAAO,EAAC,MAAM,aAAa,MAAM,SAAQ;AAAA,EAC7C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,MAAmC;AACtC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,SAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,SAAwC;AAC3C,WAAO,EAAC,MAAM,aAAa,MAAM,SAAQ;AAAA,EAC7C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,SAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,WAA4C;AAC/C,WAAO,EAAC,MAAM,aAAa,MAAM,WAAU;AAAA,EAC/C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,WAA4C;AAC/C,WAAO,EAAC,MAAM,aAAa,MAAM,WAAU;AAAA,EAC/C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,QAAsC;AACzC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,OAAqC;AACxC,WAAO,EAAC,MAAM,aAAa,MAAM,QAAO;AAAA,EAC5C;AAAA,EAEA,OAAO,OAAoC;AACvC,WAAO,EAAC,MAAM,aAAa,MAAM,OAAM;AAAA,EAC3C;AAAA,EAEA,OAAO,aAAgD;AACnD,WAAO,EAAC,MAAM,aAAa,MAAM,aAAY;AAAA,EACjD;AAAA,EAEA,OAAO,OAA6C,YAAoC;AACpF,WAAO,EAAC,MAAM,UAAU,WAAU;AAAA,EACtC;AAAA,EAEA,OAAO,MAA4B,OAA8B;AAC7D,WAAO,EAAC,MAAM,SAAS,MAAK;AAAA,EAChC;AAAA,EAEA,OAAO,SAA+B,QAAkC;AACpE,WAAO,EAAC,MAAM,YAAY,OAAM;AAAA,EACpC;AAAA,EAEA,OAAO,SAAwC;AAC3C,WAAO,EAAC,MAAM,aAAa,MAAM,SAAQ;AAAA,EAC7C;AAAA,EAEA,OAAO,eAA2C;AAC9C,WAAO,EAAC,MAAM,SAAS,MAAM,UAAS;AAAA,EAC1C;AAAA,EAEA,OAAO,eAA2C;AAC9C,WAAO,EAAC,MAAM,SAAS,MAAM,UAAS;AAAA,EAC1C;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,cAAyC;AAC5C,WAAO,EAAC,MAAM,SAAS,MAAM,SAAQ;AAAA,EACzC;AAAA,EAEA,OAAO,cAAyC;AAC5C,WAAO,EAAC,MAAM,SAAS,MAAM,SAAQ;AAAA,EACzC;AAAA,EAEA,OAAO,cAAyC;AAC5C,WAAO,EAAC,MAAM,SAAS,MAAM,SAAQ;AAAA,EACzC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,gBAA6C;AAChD,WAAO,EAAC,MAAM,SAAS,MAAM,WAAU;AAAA,EAC3C;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,gBAA6C;AAChD,WAAO,EAAC,MAAM,SAAS,MAAM,WAAU;AAAA,EAC3C;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,aAAuC;AAC1C,WAAO,EAAC,MAAM,SAAS,MAAM,QAAO;AAAA,EACxC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,YAAqC;AACxC,WAAO,EAAC,MAAM,SAAS,MAAM,OAAM;AAAA,EACvC;AAAA,EAEA,OAAO,kBAAiD;AACpD,WAAO,EAAC,MAAM,SAAS,MAAM,aAAY;AAAA,EAC7C;AACJ;AAEO,IAAM,SAAS;;;ACvOtB,SAAS,oBAAwC,MAAS,OAAiC;AACvF,UAAQ,MAAM;AAAA,IACV,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,aAAa,KAAK;AAAA,IACjC,KAAK;AACD,aAAO,IAAI,YAAY,KAAK;AAAA,IAChC,KAAK;AACD,aAAO,IAAI,YAAY,KAAK;AAAA,IAChC,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,YAAY,KAAK;AAAA,IAChC,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,cAAc,KAAK;AAAA,IAClC,KAAK;AACD,aAAO,IAAI,UAAU,KAAK;AAAA,IAC9B,KAAK;AACD,aAAO,IAAI,cAAc,KAAK;AAAA,IAClC,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,WAAW,KAAK;AAAA,IAC/B,KAAK;AACD,aAAO,IAAI,aAAa,KAAK;AAAA,IACjC,KAAK;AACD,aAAO,IAAI,gBAAgB,KAAK;AAAA,IACpC,KAAK;AACD,aAAO,IAAI,UAAU;AAAA,IACzB;AACI,YAAM,IAAI,MAAM,iBAAiB,IAAI,EAAE;AAAA,EAC/C;AACJ;AAEO,SAAS,WAAW,QAAoB,OAAiB;AAC5D,MAAI,OAAO,SAAS,aAAa;AAC7B,QAAI,UAAU,QAAQ,UAAU,QAAW;AACvC,aAAO;AAAA,IACX;AACA,WAAO,oBAAoB,OAAO,MAAkB,KAAK;AAAA,EAC7D;AAEA,MAAI,OAAO,SAAS,UAAU;AAC1B,QAAI,UAAU,QAAQ,UAAU,QAAW;AACvC,aAAO;AAAA,IACX;AACA,UAAM,SAA8B,CAAC;AACrC,eAAW,CAAC,KAAK,UAAU,KAAK,OAAO,QAAQ,OAAO,UAAU,GAAG;AAC/D,aAAO,GAAG,IAAI,WAAW,YAAY,MAAM,GAAG,CAAC;AAAA,IACnD;AACA,WAAO;AAAA,EACX;AAEA,MAAI,OAAO,SAAS,SAAS;AACzB,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,aAAO,CAAC;AAAA,IACZ;AACA,WAAO,MAAM,IAAI,UAAQ,WAAW,OAAO,OAAO,IAAI,CAAC;AAAA,EAC3D;AAEA,MAAI,OAAO,SAAS,YAAY;AAC5B,QAAI,UAAU,QAAW;AACrB,aAAO;AAAA,IACX;AACA,WAAO,WAAW,OAAO,QAAQ,KAAK;AAAA,EAC1C;AAEA,MAAI,OAAO,SAAS,SAAS;AACzB,QAAI,UAAU,QAAQ,UAAU,QAAW;AACvC,aAAO;AAAA,IACX;AACA,WAAO,oBAAoB,OAAO,MAAkB,KAAK;AAAA,EAC7D;AAEA,QAAM,IAAI,MAAM,wBAAyB,OAAe,IAAI,EAAE;AAClE;;;AC1GO,SAAS,eAAe,QAAoB,OAAqB;AACpE,MAAI,OAAO,SAAS,aAAa;AAC7B,UAAM,aAAa,OAAO;AAC1B,QAAI,UAAU,QAAQ,UAAU,QAAW;AACvC,aAAO,eAAe;AAAA,IAC1B;AAEA,YAAQ,YAAY;AAAA,MAChB,KAAK;AACD,eAAO,OAAO,UAAU;AAAA,MAC5B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,eAAO,OAAO,UAAU;AAAA,MAC5B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,eAAO,OAAO,UAAU,YAAY,OAAO,UAAU;AAAA,MACzD,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,eAAO,OAAO,UAAU,YAAY,SAAS;AAAA,MACjD,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,eAAO,OAAO,UAAU;AAAA,MAC5B,KAAK;AAAA,MACL,KAAK;AACD,eAAO,iBAAiB,QAAQ,OAAO,UAAU;AAAA,MACrD,KAAK;AACD,eAAO,iBAAiB,cAAc,iBAAiB;AAAA,MAC3D,KAAK;AACD,eAAO,UAAU;AAAA,MACrB;AACI,eAAO;AAAA,IACf;AAAA,EACJ;AAEA,MAAI,OAAO,SAAS,UAAU;AAC1B,QAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC7C,aAAO;AAAA,IACX;AACA,eAAW,CAAC,KAAK,UAAU,KAAK,OAAO,QAAQ,OAAO,UAAU,GAAG;AAC/D,UAAI,CAAC,eAAe,YAAY,MAAM,GAAG,CAAC,GAAG;AACzC,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAEA,MAAI,OAAO,SAAS,SAAS;AACzB,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,aAAO;AAAA,IACX;AACA,WAAO,MAAM,MAAM,UAAQ,eAAe,OAAO,OAAO,IAAI,CAAC;AAAA,EACjE;AAEA,MAAI,OAAO,SAAS,YAAY;AAC5B,QAAI,UAAU,QAAW;AACrB,aAAO;AAAA,IACX;AACA,WAAO,eAAe,OAAO,QAAQ,KAAK;AAAA,EAC9C;AAEA,MAAI,OAAO,SAAS,SAAS;AACzB,QAAI,UAAU,QAAQ,UAAU,QAAW;AACvC,aAAO,OAAO,SAAS;AAAA,IAC3B;AACA,QAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,SAAS,YAAY,OAAO;AACrF,aAAO,MAAM,SAAS,OAAO;AAAA,IACjC;AACA,WAAO;AAAA,EACX;AAEA,SAAO;AACX;;;ACrCO,IAAM,aAAN,cAAyB,MAAM;AAAA,EAUlC,YAAY,UAAyB;AACjC,UAAM,aAAa,SAAS,QAAQ;AACpC,UAAM,UAAU,IAAI,WAAW,IAAI,KAAK,WAAW,OAAO,MACrD,WAAW,QAAQ,WAAM,WAAW,KAAK,KAAK;AAEnD,UAAM,OAAO;AAEb,SAAK,OAAO;AACZ,SAAK,OAAO,WAAW;AACvB,SAAK,YAAY,WAAW;AAC5B,SAAK,SAAS,WAAW;AACzB,SAAK,WAAW,WAAW;AAC3B,SAAK,QAAQ,WAAW;AACxB,SAAK,OAAO,WAAW;AACvB,SAAK,QAAQ,WAAW,SAAS,CAAC;AAClC,SAAK,QAAQ,WAAW;AAGxB,WAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EACpD;AAAA,EAEA,WAAmB;AACf,UAAM,WAAW,KAAK,WAChB,QAAQ,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,MAAM,KAC1D;AAEN,UAAM,QAAQ,KAAK,MAAM,SACnB;AAAA;AAAA,IAAe,KAAK,MAAM,KAAK,MAAM,CAAC,KACtC;AAEN,UAAM,OAAO,KAAK,OACZ;AAAA,QAAW,KAAK,IAAI,KACpB;AAEN,WAAO,GAAG,KAAK,IAAI,KAAK,KAAK,OAAO;AAAA,KAAQ,QAAQ,GAAG,IAAI,GAAG,KAAK;AAAA,EACvE;AACJ;AAuBO,SAAS,eACZ,SACe;AACf,SAAO;AACX;","names":["NIL_UUID","validate","version","validate","version","NIL_UUID","uuidv7","NIL_UUID","validate","version","validate","version","NIL_UUID","uuidv7"]}
package/license.md CHANGED
@@ -1,21 +1,16 @@
1
- The MIT License (MIT)
1
+ # License
2
2
 
3
- Copyright (c) 2025 The ReifyDB Developers <license@reifydb.com>
3
+ Copyright 2025 ReifyDB
4
4
 
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
11
8
 
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
14
16
 
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reifydb/core",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -32,7 +32,7 @@
32
32
  "publishConfig": {
33
33
  "access": "public"
34
34
  },
35
- "license": "MIT",
35
+ "license": "Apache-2.0",
36
36
  "repository": {
37
37
  "type": "git",
38
38
  "url": "https://github.com/reifydb/reifydb.git",