@vibeorm/sql 4.1.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -24,7 +24,7 @@
24
24
  "import type { SqlDialect } from \"./dialect.ts\";\nimport { ParamCollector } from \"./params.ts\";\n\n/** Optional provenance storage on the existing migration journal. */\nexport const MODULE_JOURNAL_COLUMN: string = \"module_origin\";\n\n/** Journal operations use bound values; only dialects choose SQL spelling. */\nexport function renderModuleJournal(params: {\n dialect: SqlDialect;\n table: string;\n operation:\n | { kind: \"columns\" | \"addColumn\" | \"read\" }\n | { kind: \"insert\"; name: string; checksum: string; index: number; entry: string }\n | { kind: \"complete\"; name: string; entry: string };\n}): { text: string; values: unknown[] } {\n const { dialect, operation } = params;\n const q = (name: string): string => dialect.quoteIdent({ name });\n const table = q(params.table);\n const column = q(MODULE_JOURNAL_COLUMN);\n const collector = new ParamCollector(dialect);\n let text: string;\n switch (operation.kind) {\n case \"columns\":\n text = dialect.name === \"sqlite\" ? `PRAGMA table_info(${table})`\n : `SELECT column_name AS name FROM information_schema.columns WHERE table_schema = ${dialect.name === \"postgres\" ? \"current_schema()\" : \"DATABASE()\"} AND table_name = ${collector.add(params.table)}`;\n break;\n case \"addColumn\":\n text = `ALTER TABLE ${table} ADD COLUMN ${column} ${dialect.name === \"mysql\" ? \"LONGTEXT\" : \"TEXT\"}`;\n break;\n case \"read\": text = `SELECT * FROM ${table} ORDER BY ${q(\"id\")}`; break;\n case \"insert\":\n text = `INSERT INTO ${table} (${[\"name\", \"checksum\", \"statement_index\", MODULE_JOURNAL_COLUMN].map(q).join(\", \")}) VALUES (${collector.addMany([operation.name, operation.checksum, operation.index, operation.entry]).join(\", \")})`;\n break;\n case \"complete\": text = `UPDATE ${table} SET ${column} = ${collector.add(operation.entry)} WHERE ${q(\"name\")} = ${collector.add(operation.name)}`; break;\n }\n return { text, values: collector.values };\n}\n",
25
25
  "/** Same capability objects as schema validation, with no schema → SQL cycle. */\nexport {\n DIALECT_CAPABILITIES,\n POSTGRES_CAPABILITIES,\n SQLITE_CAPABILITIES,\n MYSQL_CAPABILITIES,\n} from \"@vibeorm/schema\";\n",
26
26
  "/**\n * Identifier hygiene shared by every dialect's `quoteIdent`.\n *\n * Quoting doubles the quote character, which is the whole grammar for every\n * other byte — except NUL: C-string servers stop reading an identifier at the\n * first NUL, so `\"users\\0x\"` would address `users`, and a quoted identifier\n * containing one is not an identifier at all. Refused at render time, the\n * earliest point every path (IR, raw `sql.ident`, extension DDL) shares.\n */\n\nimport { VibeError } from \"@vibeorm/schema\";\n\n/** Return `name` unchanged, or throw `VIBE_VALIDATION` when it contains a NUL. */\nexport function assertNoNul(params: { name: string }): string {\n if (params.name.includes(\"\\u0000\")) {\n throw new VibeError({\n code: \"VIBE_VALIDATION\",\n message: \"an SQL identifier cannot contain a NUL character — the server would stop reading it there and address a different object\",\n meta: { name: params.name.replaceAll(\"\\u0000\", \"\\\\0\") },\n });\n }\n return params.name;\n}\n",
27
- "/**\n * SQLite dialect (bun:sqlite adapter lands in P4).\n *\n * Notes pinned by catalog cases:\n * - OFFSET requires LIMIT → `LIMIT -1 OFFSET n`.\n * - LIKE has no default escape character → explicit ` ESCAPE '\\'` clause.\n * - Case-insensitive matching uses LOWER()/LOWER() (default LIKE is only\n * ASCII-case-insensitive, and we want deterministic semantics).\n */\n\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { SQLITE_CAPABILITIES } from \"../capabilities.ts\";\nimport { assertNoNul } from \"../identifiers.ts\";\n\nexport const sqliteDialect: SqlDialect = {\n name: \"sqlite\",\n capabilities: SQLITE_CAPABILITIES,\n\n inArrayStrategy: \"expand\",\n tupleInStrategy: \"rowValue\",\n timeOfDayInStrategy: \"in\",\n upsertForm: \"onConflict\",\n // Measured on sqlite 3.51 (notes-B.md): a batch proposing one conflict key\n // twice is applied row by row, so the second row UPDATES the first and the\n // statement reports no error — true even for byte-identical keys, and\n // `changes()` does not reveal the collapse (3 submitted rows, 3 changes,\n // 2 rows stored). Text compares as BINARY unless the column declares a\n // collation, and every scalar lands in TEXT/INTEGER/REAL/BLOB with no\n // scale or precision of its own, so Decimal ('1.0' vs '1.00') and DateTime\n // stay byte-comparable here.\n conflictKeyEquality: {\n foldingScalars: [],\n textIsBinaryByDefault: true,\n // Sqlite ships three collating sequences and only BINARY compares bytes:\n // NOCASE folds ASCII case, and RTRIM is case-SENSITIVE and still equates\n // 'x' with 'x ' (both measured in tests/catalog/conflict-key-equality.test.ts).\n duplicatesInOneStatement: \"lastWriteWins\",\n },\n excludedRowRef: { form: \"keyword\", name: \"excluded\" },\n doNothingForm: \"onConflictDoNothing\",\n insensitiveLike: \"lower\",\n // LIKE is ASCII-case-insensitive here — strict pattern matching rides GLOB\n // (byte-exact; its `*`/`?`/`[` metachars get their own escaping, like.ts).\n strictMatchStrategy: \"glob\",\n greatestForm: \"frame\",\n orderByNullsMode: \"native\",\n offsetRequiresLimit: { limitText: \"-1\" },\n likeEscapeClause: \" ESCAPE '\\\\'\",\n // json_extract covers scalar extraction + LIKE over extracted text; the\n // expressible array subset (N6, board #21) is wired: `$[0]` / `$[#-1]` path\n // elements for array_starts_with/array_ends_with (sqlite ≥3.31; bun:sqlite\n // bundles far newer) and json_each() EXISTS for SCALAR-element\n // array_contains. Deep structural jsonb-style containment (object/array/\n // null members) has no cheap faithful form — the renderer refuses those\n // ELEMENT shapes with VIBE_UNSUPPORTED_CAPABILITY even though the op itself\n // is listed here.\n jsonPathMode: \"sqliteExtract\",\n supportedJsonOps: [\n \"equals\",\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n ],\n // Json transport is already plain text here — no param cast needed.\n jsonParamCast: \"\",\n valueCastTypes: Object.freeze({ String: \"TEXT\", Boolean: \"INTEGER\", Int: \"INTEGER\", BigInt: \"INTEGER\", Float: \"REAL\", Decimal: \"TEXT\", DateTime: \"TEXT\", Json: \"TEXT\", Bytes: \"BLOB\" }),\n lastInsertIdSql: null,\n // No locking-read clause in sqlite: `SELECT … FOR UPDATE` is a syntax error\n // (verified on sqlite 3.51.0). None is needed for the overlays either — a\n // write transaction holds the single writer lock, so a read inside it cannot\n // race another writer.\n rowLockSyntax: null,\n advisoryLockFunctions: null,\n // No per-row DEFAULT keyword in VALUES — heterogeneous createMany rows are\n // grouped by column set into separate statements (M4).\n rowDefaultKeyword: false,\n // WITH accepts only SELECT here — no data-modifying steps.\n statementChain: null,\n paramBudget: 900,\n\n // No boolean type: the Boolean codec stores 0/1 in an INTEGER column, so a\n // DDL literal that must compare against stored values spells it the same way.\n booleanLiteral: { true: \"1\", false: \"0\" },\n\n quoteIdent({ name }) {\n return `\"${assertNoNul({ name }).replaceAll('\"', '\"\"')}\"`;\n },\n // Sqlite has no escape character inside a string literal at all: doubling the\n // quote is the whole grammar, and a backslash is an ordinary byte.\n quoteStringLiteral({ value }) {\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n },\n placeholder() {\n return \"?\";\n },\n jsonTextProjection({ expression }): string {\n return expression;\n },\n renderDbNow({ offsetSeconds, collector }) {\n // The format string mirrors Date#toISOString() (`%f` = SS.SSS), which is\n // exactly what the DateTime codec stores — lexicographic comparisons\n // against stored text stay correct. The offset rides sqlite's relative\n // modifier syntax (`'300 seconds'` / `'-300 seconds'`).\n if (offsetSeconds === 0) return `strftime('%Y-%m-%dT%H:%M:%fZ', 'now')`;\n return `strftime('%Y-%m-%dT%H:%M:%fZ', 'now', ${collector.add(offsetSeconds)} || ' seconds')`;\n },\n};\n",
27
+ "/**\n * SQLite dialect (bun:sqlite adapter lands in P4).\n *\n * Notes pinned by catalog cases:\n * - OFFSET requires LIMIT → `LIMIT -1 OFFSET n`.\n * - LIKE has no default escape character → explicit ` ESCAPE '\\'` clause.\n * - Case-insensitive matching uses LOWER()/LOWER() (default LIKE is only\n * ASCII-case-insensitive, and we want deterministic semantics).\n */\n\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { SQLITE_CAPABILITIES } from \"../capabilities.ts\";\nimport { assertNoNul } from \"../identifiers.ts\";\n\nexport const sqliteDialect: SqlDialect = {\n name: \"sqlite\",\n capabilities: SQLITE_CAPABILITIES,\n\n inArrayStrategy: \"expand\",\n tupleInStrategy: \"rowValue\",\n timeOfDayInStrategy: \"in\",\n upsertForm: \"onConflict\",\n // Measured on sqlite 3.51 (notes-B.md): a batch proposing one conflict key\n // twice is applied row by row, so the second row UPDATES the first and the\n // statement reports no error — true even for byte-identical keys, and\n // `changes()` does not reveal the collapse (3 submitted rows, 3 changes,\n // 2 rows stored). Text compares as BINARY unless the column declares a\n // collation, and every scalar lands in TEXT/INTEGER/REAL/BLOB with no\n // scale or precision of its own, so Decimal ('1.0' vs '1.00') and DateTime\n // stay byte-comparable here.\n conflictKeyEquality: {\n foldingScalars: [],\n textIsBinaryByDefault: true,\n // Sqlite ships three collating sequences and only BINARY compares bytes:\n // NOCASE folds ASCII case, and RTRIM is case-SENSITIVE and still equates\n // 'x' with 'x ' (both measured in tests/catalog/conflict-key-equality.test.ts).\n duplicatesInOneStatement: \"lastWriteWins\",\n },\n excludedRowRef: { form: \"keyword\", name: \"excluded\" },\n doNothingForm: \"onConflictDoNothing\",\n insensitiveLike: \"lower\",\n // LIKE is ASCII-case-insensitive here — strict pattern matching rides GLOB\n // (byte-exact; its `*`/`?`/`[` metachars get their own escaping, like.ts).\n strictMatchStrategy: \"glob\",\n greatestForm: \"frame\",\n orderByNullsMode: \"native\",\n offsetRequiresLimit: { limitText: \"-1\" },\n likeEscapeClause: \" ESCAPE '\\\\'\",\n // json_extract covers scalar extraction + LIKE over extracted text; the\n // expressible array subset (N6, board #21) is wired: `$[0]` / `$[#-1]` path\n // elements for array_starts_with/array_ends_with (sqlite ≥3.31; bun:sqlite\n // bundles far newer) and json_each() EXISTS for SCALAR-element\n // array_contains. Deep structural jsonb-style containment (object/array/\n // null members) has no cheap faithful form — the renderer refuses those\n // ELEMENT shapes with VIBE_UNSUPPORTED_CAPABILITY even though the op itself\n // is listed here.\n jsonPathMode: \"sqliteExtract\",\n supportedJsonOps: [\n \"equals\",\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n ],\n // Json transport is already plain text here — no param cast needed.\n jsonParamCast: \"\",\n valueCastTypes: Object.freeze({ String: \"TEXT\", Boolean: \"INTEGER\", Int: \"INTEGER\", BigInt: \"INTEGER\", Float: \"REAL\", Decimal: \"TEXT\", DateTime: \"TEXT\", Json: \"TEXT\", Bytes: \"BLOB\" }),\n lastInsertIdSql: null,\n // No locking-read clause in sqlite: `SELECT … FOR UPDATE` is a syntax error\n // (verified on sqlite 3.51.0). None is needed for the overlays either — a\n // write transaction holds the single writer lock, so a read inside it cannot\n // race another writer.\n rowLockSyntax: null,\n advisoryLockFunctions: null,\n // No per-row DEFAULT keyword in VALUES — heterogeneous createMany rows are\n // grouped by column set into separate statements (M4).\n rowDefaultKeyword: false,\n emptyInsert: { form: \"defaultValues\", conflictClause: false },\n // WITH accepts only SELECT here — no data-modifying steps.\n statementChain: null,\n paramBudget: 900,\n\n // No boolean type: the Boolean codec stores 0/1 in an INTEGER column, so a\n // DDL literal that must compare against stored values spells it the same way.\n booleanLiteral: { true: \"1\", false: \"0\" },\n\n quoteIdent({ name }) {\n return `\"${assertNoNul({ name }).replaceAll('\"', '\"\"')}\"`;\n },\n // Sqlite has no escape character inside a string literal at all: doubling the\n // quote is the whole grammar, and a backslash is an ordinary byte.\n quoteStringLiteral({ value }) {\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n },\n placeholder() {\n return \"?\";\n },\n jsonTextProjection({ expression }): string {\n return expression;\n },\n renderDbNow({ offsetSeconds, collector }) {\n // The format string mirrors Date#toISOString() (`%f` = SS.SSS), which is\n // exactly what the DateTime codec stores — lexicographic comparisons\n // against stored text stay correct. The offset rides sqlite's relative\n // modifier syntax (`'300 seconds'` / `'-300 seconds'`).\n if (offsetSeconds === 0) return `strftime('%Y-%m-%dT%H:%M:%fZ', 'now')`;\n return `strftime('%Y-%m-%dT%H:%M:%fZ', 'now', ${collector.add(offsetSeconds)} || ' seconds')`;\n },\n};\n",
28
28
  "import { VibeError } from \"@vibeorm/schema\";\n\n/** One preserved column clause; expressions are never interpreted or normalized. */\nexport type SqliteColumnClause = { readonly name: string; readonly sql: string };\n/** Exact slices of a database-produced CREATE TABLE's outer definition list. */\nexport type TableDefinitionParts = { readonly clauses: readonly string[]; readonly suffix: string };\n\n/** Extract a CREATE TABLE list with a quote-aware delimiter walk, not an expression parser. */\nexport function tableDefinitionParts(params: { sql: string }): TableDefinitionParts {\n const sql = params.sql;\n if (!/^\\s*CREATE\\s+(?:TEMP(?:ORARY)?\\s+)?TABLE\\b/i.test(sql)) throw unavailable();\n const parts: string[] = [];\n let start = -1;\n let depth = 0;\n let quote: string | undefined;\n for (let index = 0; index < sql.length; index++) {\n const char = sql[index]!;\n if (quote !== undefined) {\n if (char === quote) {\n if (quote !== \"]\" && sql[index + 1] === quote) index++;\n else quote = undefined;\n }\n continue;\n }\n if (char === \"'\" || char === '\"' || char === \"`\") { quote = char; continue; }\n if (char === \"[\") { quote = \"]\"; continue; }\n if (char === \"-\" && sql[index + 1] === \"-\") { const end = sql.indexOf(\"\\n\", index + 2); if (end < 0) break; index = end; continue; }\n if (char === \"/\" && sql[index + 1] === \"*\") { const end = sql.indexOf(\"*/\", index + 2); if (end < 0) break; index = end + 1; continue; }\n if (char === \"(\") { if (depth === 0) start = index + 1; depth++; }\n else if (char === \")\") {\n depth--;\n if (depth === 0 && start >= 0) { parts.push(sql.slice(start, index).trim()); return { clauses: parts, suffix: sql.slice(index + 1) }; }\n } else if (char === \",\" && depth === 1) { parts.push(sql.slice(start, index).trim()); start = index + 1; }\n }\n throw unavailable();\n}\nfunction unavailable(): VibeError {\n return new VibeError({ code: \"VIBE_MIGRATION\", message: \"Cannot preserve table definition\", meta: { reason: \"table-definition-unavailable\" } });\n}\n\n/** Return column clauses without rewriting any SQL inside them. */\nexport function sqliteColumnClauses(params: { sql: string }): readonly SqliteColumnClause[] {\n const columns: SqliteColumnClause[] = [];\n for (const part of tableDefinitionParts(params).clauses) {\n const token = /^(?:\"((?:[^\"]|\"\")+)\"|`((?:[^`]|``)+)`|\\[([^\\]]+)\\]|([A-Za-z_][A-Za-z_0-9]*))/.exec(part);\n if (token === null) throw unavailable();\n if (token[4] !== undefined && /^(?:CONSTRAINT|PRIMARY|UNIQUE|CHECK|FOREIGN)$/i.test(token[4])) continue;\n const name = token[1]?.replaceAll('\"\"', '\"') ?? token[2]?.replaceAll(\"``\", \"`\") ?? token[3] ?? token[4]!;\n columns.push({ name, sql: part });\n }\n return columns;\n}\n",
29
29
  "import { sqliteDialect } from \"./sqlite.ts\";\nimport { sqliteColumnClauses } from \"./sqlite-table-definition.ts\";\n\nfunction updateStatements(params: { table: string; ftsTable: string; columns: readonly string[] }): { create: string; definition: string; legacyDefinition: string } {\n const quote = (name: string): string => sqliteDialect.quoteIdent({ name });\n const columns = params.columns.map((column) => quote(column)).join(\", \");\n const oldValues = params.columns.map((column) => `old.${quote(column)}`).join(\", \");\n const newValues = params.columns.map((column) => `new.${quote(column)}`).join(\", \");\n const changes = [\n \"old.rowid IS NOT new.rowid\",\n ...params.columns.map((column) => `old.${quote(column)} COLLATE BINARY IS NOT new.${quote(column)} COLLATE BINARY`),\n ].join(\" OR \");\n const target = `${quote(`${params.ftsTable}_au`)} AFTER UPDATE ON ${quote(params.table)}`;\n const body = `BEGIN\\n INSERT INTO ${quote(params.ftsTable)}(${quote(params.ftsTable)}, rowid, ${columns}) VALUES ('delete', old.rowid, ${oldValues});\\n INSERT INTO ${quote(params.ftsTable)}(rowid, ${columns}) VALUES (new.rowid, ${newValues});\\nEND`;\n const tail = `${target} WHEN (${changes}) ${body}`;\n return {\n create: `CREATE TRIGGER IF NOT EXISTS ${tail};`,\n definition: `CREATE TRIGGER ${tail}`,\n legacyDefinition: `CREATE TRIGGER ${target} ${body}`,\n };\n}\n\n/** @internal SQLite FTS synchronization SQL and its independently verifiable catalog spelling. */\nexport function renderSqliteFtsUpdateTrigger(params: {\n table: string;\n ftsTable: string;\n columns: readonly string[];\n}): { readonly create: string; readonly definition: string } {\n const { create, definition } = updateStatements(params);\n return { create, definition };\n}\n\n/** @internal Recognize only complete generated legacy/current triggers and their external-content FTS5 table. */\nexport function sqliteFtsUpdateUpgrade(params: {\n create: string;\n installed: string;\n table: string;\n name: string;\n tableDefinition?: string;\n}): undefined | { readonly kind: \"tableRequired\"; readonly ftsTable: string } | {\n readonly kind: \"recognized\";\n readonly ftsTable: string;\n readonly legacyDefinition: string;\n readonly currentDefinition: string;\n readonly drop: string;\n readonly installed: \"legacy\" | \"current\";\n} {\n const quoted = '\"(?:[^\"]|\"\")+\"';\n // This only extracts candidates. Complete reconstruction equality below is\n // mandatory, so SQL text inside a quoted identifier cannot authorize a match.\n const body = new RegExp(`BEGIN\\\\n INSERT INTO (${quoted})\\\\((${quoted}), rowid, (${quoted}(?:, ${quoted})*)\\\\) VALUES \\\\('delete', old\\\\.rowid, `, \"g\");\n for (const match of params.create.matchAll(body)) {\n const ftsTable = sqliteColumnClauses({ sql: `CREATE TABLE x (${match[1]})` })[0]!.name;\n const columns = sqliteColumnClauses({ sql: `CREATE TABLE x (${match[3]})` }).map((column) => column.name);\n if (params.name !== `${ftsTable}_au`) continue;\n const statements = updateStatements({ table: params.table, ftsTable, columns });\n if (params.create !== statements.create) continue;\n const installed = params.installed === statements.legacyDefinition ? \"legacy\"\n : params.installed === statements.definition ? \"current\" : undefined;\n if (installed === undefined) continue;\n if (params.tableDefinition === undefined) return { kind: \"tableRequired\", ftsTable };\n const tableTail = `${sqliteDialect.quoteIdent({ name: ftsTable })} USING fts5(${columns.map((name) => sqliteDialect.quoteIdent({ name })).join(\", \")}, content=${sqliteDialect.quoteStringLiteral({ value: params.table })})`;\n if (params.tableDefinition !== `CREATE VIRTUAL TABLE ${tableTail}` && params.tableDefinition !== `CREATE VIRTUAL TABLE IF NOT EXISTS ${tableTail};`) continue;\n return { kind: \"recognized\", ftsTable, legacyDefinition: statements.legacyDefinition, currentDefinition: statements.definition, drop: `DROP TRIGGER IF EXISTS ${sqliteDialect.quoteIdent({ name: `${ftsTable}_au` })};`, installed };\n }\n return undefined;\n}\n",
30
30
  "/** SQLite session-control text shared by both native adapters. */\nexport const SQLITE_SESSION_SQL: Readonly<{\n lockingMode: string;\n exclusive: string;\n normal: string;\n acquire: string;\n commit: string;\n rollback: string;\n touch: string;\n foreignKeysOn: string;\n}> = Object.freeze({\n lockingMode: \"PRAGMA main.locking_mode\",\n exclusive: \"PRAGMA main.locking_mode = EXCLUSIVE\",\n normal: \"PRAGMA main.locking_mode = NORMAL\",\n acquire: \"BEGIN EXCLUSIVE\",\n commit: \"COMMIT\",\n rollback: \"ROLLBACK\",\n touch: \"SELECT name FROM main.sqlite_schema LIMIT 1\",\n foreignKeysOn: \"PRAGMA foreign_keys = ON\",\n});\n",
@@ -35,15 +35,15 @@
35
35
  "import type { NativeEnumArrayParameter } from \"./native-enum-parameter.ts\";\nimport type { JsonListParameter } from \"./json-list-parameter.ts\";\nimport type { SqlFragment } from \"./composable.ts\";\nimport type { RlsReadinessQuery } from \"./dialects/postgres-rls-readiness.ts\";\n/**\n * The SQL AST — the small statement language the runtime and migrate packages\n * build and dialects render.\n *\n * Deliberately minimal at P0 (single-table statements, no joins/subqueries);\n * grows with the runtime in P2/P3. Every shape added here needs a catalog case\n * (tests/catalog/cases.ts) in the same change.\n */\n\nimport type {\n AdvisoryLockMode,\n RlsContextIR,\n RowLockStrength,\n RowLockWaitPolicy,\n SchemaIR,\n SqlFragmentSpec,\n} from \"@vibeorm/schema\";\n\n// ─── References ───────────────────────────────────────────────────\n\n/** A column reference, optionally table-qualified. */\nexport type ColRef = {\n readonly table?: string;\n readonly name: string;\n /**\n * Projection-only wire transform. `jsonText` uses the dialect's JSON text\n * projection to preserve SQL NULL versus the JSON document `null` before\n * driver parsing, without converting a postgres `json` column to `jsonb`.\n * `castText` renders a dialect text cast and preserves `alias ?? name`,\n * including timestamp identity before driver Date truncation. PostgreSQL\n * uses `\"col\"::text`; SQLite/MySQL use CAST AS TEXT/CHAR. `encodeBase64`\n * is postgres-only and renders `encode(\"col\", 'base64')`. Other users:\n * the lateral subselect (SQL review B3: raw `to_jsonb` would ship BigInt/Decimal as float64 JSON\n * numbers and Bytes as `\\x` hex text), and every row projection of a\n * `Float[]`/`Json[]` column (bun:sql's array parser refuses float arrays\n * printed with an exponent and json arrays holding integers beyond int32;\n * the runtime parses the array literal text itself). Never set on\n * filter/order refs.\n */\n readonly transform?: \"castText\" | \"encodeBase64\" | \"jsonText\";\n /**\n * Comparison/order/aggregate cast, sqlite Decimal only (SQL review B4):\n * Decimal stores as exact TEXT there and text comparison is lexicographic —\n * compare, ORDER BY and aggregate sites render `CAST(\"col\" AS REAL)` (with\n * NUMBER operands) instead. Never set on projections or GROUP BY keys, so\n * storage and read-back stay the exact text.\n */\n readonly castReal?: boolean;\n /**\n * Order/distinct/compare cast, postgres `json` columns only (`Json @db.Json`,\n * release-3.0 D3): `json` has no ordering or equality operator, so ORDER BY,\n * DISTINCT ON and comparison sites render `\"col\"::jsonb` (`\"col\"::jsonb[]`\n * for a `json[]` list column) — the order and distinctness of a jsonb\n * column. Never set on projections, so read-back keeps the stored text.\n */\n readonly castJsonb?: \"jsonb\" | \"jsonb[]\";\n /**\n * Projection alias: renders `ref AS \"alias\"`. PROJECTION-ONLY — filter,\n * order and correlation refs never set it (the renderer ignores it outside\n * a projection list). Used by the single-statement M2M join to expose the\n * join table's parent-key column under a reserved name (`__vibe_parent`).\n */\n readonly alias?: string;\n};\n\nexport type TableRef = {\n readonly name: string;\n /** Explicit fixed PostgreSQL placement; absence preserves existing SQL. */\n readonly namespace?: string;\n readonly alias?: string;\n};\n\n// ─── Aggregates ───────────────────────────────────────────────────\n\n/** Aggregate functions applied to one column. */\nexport type AggFn = \"count\" | \"avg\" | \"sum\" | \"min\" | \"max\";\n\n/** Reference to an aggregate expression: `COUNT(*)` or `FN(\"col\")`. */\nexport type AggRef =\n | { readonly fn: \"countAll\" }\n | { readonly fn: AggFn; readonly column: ColRef };\n\n/**\n * One aggregate projection: `FN(\"col\") AS \"alias\"`. The alias is part of the\n * catalog contract — the runtime derives result keys from it deterministically\n * (`_count___all`, `_avg__score`), never by parsing the SQL text back.\n */\nexport type AggSelect = {\n readonly agg: AggRef;\n readonly alias: string;\n /** Projection-only result cast; native aggregate comparisons and ordering stay typed. */\n readonly castText?: true;\n};\n\n// ─── JSON filters ─────────────────────────────────────────────────\n\n/**\n * JSON path predicates (Prisma's Json filter surface). `not` is `equals` with\n * `negate` — there is no separate op. Which ops a dialect can express is\n * declared on `SqlDialect.supportedJsonOps` and enforced at render time too.\n */\nexport type JsonFilterOp =\n | \"equals\"\n | \"string_contains\"\n | \"string_starts_with\"\n | \"string_ends_with\"\n | \"array_contains\"\n | \"array_starts_with\"\n | \"array_ends_with\";\n\n// ─── Expressions ──────────────────────────────────────────────────\n\nexport type ComparisonOp = \"eq\" | \"ne\" | \"gt\" | \"gte\" | \"lt\" | \"lte\";\n\nexport type SqlExpr =\n | { readonly kind: \"composed\"; readonly fragment: SqlFragment }\n | { readonly kind: \"cmp\"; readonly op: ComparisonOp; readonly column: ColRef; readonly value: unknown }\n /** Column-to-column comparison — the correlation predicate of EXISTS/lateral subqueries. */\n | { readonly kind: \"cmpCol\"; readonly op: ComparisonOp; readonly left: ColRef; readonly right: ColRef }\n | { readonly kind: \"isNull\"; readonly column: ColRef; readonly negate?: boolean }\n | {\n readonly kind: \"inArray\";\n readonly column: ColRef;\n readonly values: readonly unknown[];\n readonly negate?: boolean;\n /**\n * The column holds a time of day (`@db.Time(n)` / `@db.Timetz(n)`): the\n * dialect renders the membership per `SqlDialect.timeOfDayInStrategy`.\n */\n readonly timeOfDay?: boolean;\n }\n /**\n * ORDERED-TUPLE membership: `(\"a\", \"b\") IN ((?, ?), (?, ?))`. The composite\n * relation predicate — `\"a\" IN (…) AND \"b\" IN (…)` is a Cartesian SUPERSET\n * and is never a substitute. Renders per `SqlDialect.tupleInStrategy`:\n * a native row-value `IN` where the dialect has row constructors, else an OR\n * of COMPLETE conjunctions. Arity 1 is expressed as {@link SqlExpr} `inArray`\n * instead, so single-key relations keep their existing SQL.\n */\n | {\n readonly kind: \"tupleIn\";\n /** Ordered tuple columns; `rows[i][j]` binds to `columns[j]`. */\n readonly columns: readonly ColRef[];\n /** Candidate tuples — every row carries exactly `columns.length` values. */\n readonly rows: readonly (readonly unknown[])[];\n readonly negate?: boolean;\n }\n | {\n readonly kind: \"like\";\n readonly column: ColRef;\n /** Pre-built pattern (see like.ts helpers for escaping). */\n readonly pattern: string;\n readonly insensitive?: boolean;\n /**\n * The column carries an explicit case-insensitive collation (@collation\n * `…_ci`, board #36): an insensitive match renders as PLAIN `LIKE` — the\n * collation already folds case, and skipping LOWER() keeps the column\n * indexable. Set by the builder for mysql only.\n */\n readonly ciCollation?: boolean;\n readonly negate?: boolean;\n }\n /**\n * Case-SENSITIVE string match (`mode: \"strict\"`, board #20). `value` is the\n * RAW operand — pattern building happens at render time because escaping\n * differs per strategy (LIKE's `%`/`_`/`\\` vs GLOB's `*`/`?`/`[`). Renders\n * per `SqlDialect.strictMatchStrategy`: plain `=`/`LIKE` on postgres\n * (already byte-sensitive — a deliberate, documented no-op), `=`/`GLOB` on\n * sqlite, `= CAST(? AS BINARY)`/`LIKE CAST(? AS BINARY)` on mysql. The\n * non-native forms defeat plain indexes; docs/dialect-notes.md carries the\n * cost and the functional/`_bin`-index mitigation.\n */\n | {\n readonly kind: \"strictMatch\";\n readonly column: ColRef;\n readonly op: \"equals\" | \"contains\" | \"startsWith\" | \"endsWith\";\n readonly value: string;\n readonly negate?: boolean;\n }\n | { readonly kind: \"and\"; readonly operands: readonly SqlExpr[] }\n | { readonly kind: \"or\"; readonly operands: readonly SqlExpr[] }\n | { readonly kind: \"not\"; readonly operand: SqlExpr }\n /**\n * Correlated subquery test: `[NOT] EXISTS (SELECT …)`. The inner select\n * correlates to the outer scope through table-qualified `cmpCol` predicates;\n * its parameters merge into the statement's single parameter sequence in\n * render order. Relation filters (`some`/`every`/`none`/`is`/`isNot`)\n * compile to this shape.\n */\n | { readonly kind: \"exists\"; readonly select: SelectStatement; readonly negate?: boolean }\n /** Aggregate comparison — the HAVING predicate: `COUNT(\"col\") > $n`. */\n | { readonly kind: \"aggCmp\"; readonly op: ComparisonOp; readonly agg: AggRef; readonly value: unknown }\n /**\n * Scalar-list membership: `$n = ANY(\"col\")` — Prisma's `has`. Postgres only\n * (`capabilities.scalarArrays`); other dialects refuse at render time.\n */\n | { readonly kind: \"arrayHas\"; readonly column: ColRef; readonly value: unknown; readonly negate?: boolean }\n /** Scalar-list superset: `\"col\" @> $n` (one array param) — Prisma's `hasEvery`. Postgres only. */\n | { readonly kind: \"arrayContainsAll\"; readonly column: ColRef; readonly values: readonly unknown[] | string | NativeEnumArrayParameter | JsonListParameter }\n /** Scalar-list overlap: `\"col\" && $n` (one array param) — Prisma's `hasSome`. Postgres only. */\n | { readonly kind: \"arrayOverlaps\"; readonly column: ColRef; readonly values: readonly unknown[] | string | NativeEnumArrayParameter | JsonListParameter }\n /**\n * Scalar-list emptiness via `array_length(\"col\", 1) IS [NOT] NULL` — the v1\n * semantics kept deliberately: `empty: true` matches NULL **and** empty\n * arrays, `empty: false` matches only rows with at least one element.\n */\n | { readonly kind: \"arrayIsEmpty\"; readonly column: ColRef; readonly empty: boolean }\n /**\n * JSON path predicate. The path is always BOUND as a parameter (a `text[]`\n * on postgres, a `$.a.b[0]` path string on sqlite/mysql) — path segments\n * never become SQL text. `value` is the RAW JS operand; each dialect decides\n * its wire form (JSON.stringify for jsonb/json comparisons, LIKE patterns\n * for the string ops). `insensitive` applies to the string ops only.\n */\n | {\n readonly kind: \"jsonFilter\";\n readonly column: ColRef;\n readonly path: readonly (string | number)[];\n readonly op: JsonFilterOp;\n readonly value: unknown;\n readonly insensitive?: boolean;\n readonly negate?: boolean;\n /**\n * The column's postgres type: absent (or `jsonb`) for the default\n * `jsonb`, `json` for `Json @db.Json`. Postgres defines `=`, `<>` and\n * `@>` for jsonb only, so on a `json` column every op casts the\n * EXTRACTED value to jsonb (the string ops then read it as text), which\n * gives a jsonb column's answer. Sqlite and mysql have one JSON type\n * and ignore it.\n */\n readonly storage?: \"jsonb\" | \"json\";\n }\n /**\n * A bound extension fragment: literal text, bound parameters and quoted\n * identifiers in order (extensions.md §3 sql plane — trgm operators, rank\n * and distance terms). Parameters flow through the shared ParamCollector,\n * identifiers through dialect.quoteIdent — never hand-written.\n */\n | { readonly kind: \"fragment\"; readonly fragment: SqlFragmentSpec }\n /** Escape hatch for dialect-reviewed fragments. Text only — no parameters. */\n | { readonly kind: \"raw\"; readonly text: string };\n\n// ─── Projections ──────────────────────────────────────────────────\n\n/**\n * An aggregate projection.\n *\n * `countAll` renders `COUNT(*)`. The alias matters for portability: postgres\n * names the bare column `count`, sqlite and mysql name it `COUNT(*)` — callers\n * that must read the value back always pass an alias. Combined with a\n * non-empty `columns` list (grouped counts, `SELECT \"fk\", COUNT(*) … GROUP\n * BY \"fk\"`), it renders AFTER the columns.\n *\n * `one` renders the constant `1` — the conventional EXISTS projection; it\n * cannot be combined with a column list.\n */\nexport type SelectExpr =\n | { readonly kind: \"countAll\"; readonly alias?: string }\n | { readonly kind: \"one\" };\n\n// ─── SET operations ───────────────────────────────────────────────\n\n/** Arithmetic applied to a column's current value in an UPDATE ... SET. */\nexport type SetOperator = \"increment\" | \"decrement\" | \"multiply\" | \"divide\";\n\n/**\n * An atomic update expression: `\"col\" = \"col\" <op> $n`.\n *\n * Recognised structurally inside `UpdateStatement.set`, so the marker key is\n * deliberately unlikely (`__op`). Three layers keep a user's JSON payload from\n * ever being mistaken for one: the Json codec stringifies JSON values before\n * they reach the AST, the query builder only emits this shape for numeric\n * fields, and {@link isSetOperation} demands only the documented marker keys.\n */\nexport type SetOperation = {\n readonly __op: SetOperator;\n readonly value: number | string | bigint;\n /** Decimal arithmetic needs a REAL operand on SQLite, even for integral text. */\n readonly numericType?: \"Decimal\";\n};\n\nconst SET_OPERATORS: readonly string[] = [\"increment\", \"decrement\", \"multiply\", \"divide\"];\n\n/** Narrow an UPDATE set value to an atomic {@link SetOperation}. */\nexport function isSetOperation(value: unknown): value is SetOperation {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n const keys = Object.keys(value);\n if (!keys.includes(\"__op\") || !keys.includes(\"value\")) return false;\n const candidate = value as { __op: unknown; value: unknown; numericType?: unknown };\n if (keys.length !== 2 && !(keys.length === 3 && keys.includes(\"numericType\") && candidate.numericType === \"Decimal\")) return false;\n return (\n typeof candidate.__op === \"string\" &&\n SET_OPERATORS.includes(candidate.__op) &&\n ((typeof candidate.value === \"number\" && Number.isFinite(candidate.value)) ||\n typeof candidate.value === \"string\" || typeof candidate.value === \"bigint\")\n );\n}\n\n/**\n * A scalar-list update expression (Prisma's `{ push: … }` on list columns):\n * `append` is one element (`\"col\" = array_append(\"col\", $n)`), `concat` an\n * array of elements (`\"col\" = \"col\" || $n`). Postgres only — the query builder\n * gates on `capabilities.scalarArrays` at build time and the renderer refuses\n * too. Same structural-marker discipline as {@link SetOperation}: the key is\n * unlikely, the shape exact, and Json payloads are stringified before they\n * could ever reach an UPDATE set.\n */\nexport type ListSetOperation = {\n readonly __listOp: \"append\" | \"concat\";\n readonly value: unknown;\n};\n\nconst LIST_SET_OPERATORS: readonly string[] = [\"append\", \"concat\"];\n\n/** Narrow an UPDATE set value to a {@link ListSetOperation}. */\nexport function isListSetOperation(value: unknown): value is ListSetOperation {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n const keys = Object.keys(value);\n if (keys.length !== 2 || !keys.includes(\"__listOp\") || !keys.includes(\"value\")) return false;\n const candidate = value as { __listOp: unknown };\n return typeof candidate.__listOp === \"string\" && LIST_SET_OPERATORS.includes(candidate.__listOp);\n}\n\n/**\n * Database-clock marker: renders the DIALECT's `now()` expression — plus an\n * optional offset in seconds (fractional OK) bound as a parameter — instead of binding a\n * client-side timestamp. Flows as a VALUES cell, an UPDATE SET value, or a\n * comparison operand; the runtime's public `dbNow()` sentinel compiles to\n * this marker for DateTime fields (leases, TTLs — anything that must trust\n * the database's clock, never the process's). Same structural-marker\n * discipline as {@link SetOperation}: unlikely key, exact shape.\n */\nexport type DbNowMarker = {\n readonly __dbNow: true;\n readonly offsetSeconds: number;\n};\n\n/** Build a {@link DbNowMarker}; `offsetSeconds` is finite seconds — fractional is legal (lease TTLs arrive as ttlMs / 1000). */\nexport function dbNowMarker(params: { offsetSeconds: number }): DbNowMarker {\n return { __dbNow: true, offsetSeconds: params.offsetSeconds };\n}\n\n/** Narrow a value to a {@link DbNowMarker}. */\nexport function isDbNowMarker(value: unknown): value is DbNowMarker {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n const keys = Object.keys(value);\n if (keys.length !== 2 || !keys.includes(\"__dbNow\") || !keys.includes(\"offsetSeconds\")) return false;\n const candidate = value as { __dbNow: unknown; offsetSeconds: unknown };\n return (\n candidate.__dbNow === true &&\n typeof candidate.offsetSeconds === \"number\" &&\n Number.isFinite(candidate.offsetSeconds)\n );\n}\n\n// ─── Ordering ─────────────────────────────────────────────────────\n\n/** ORDER BY a column, with optional NULLS placement (native or emulated per dialect). */\nexport type OrderByColumn = {\n readonly column: ColRef;\n readonly direction: \"asc\" | \"desc\";\n /** NULLS placement; rendered natively or emulated per dialect. */\n readonly nulls?: \"first\" | \"last\";\n};\n\n/** ORDER BY an aggregate expression — grouped selects ordering by `COUNT(\"col\")`. */\nexport type OrderByAggregate = {\n readonly agg: AggRef;\n readonly direction: \"asc\" | \"desc\";\n};\n\n/**\n * ORDER BY a correlated scalar subquery — relation orderBy\n * (`orderBy: { posts: { _count: \"desc\" } }` → `(SELECT COUNT(*) …)` /\n * `orderBy: { author: { email: \"asc\" } }` → `(SELECT \"email\" …)`).\n * Portable: all three dialects order by scalar subqueries. The subquery\n * correlates to the outer scope through table-qualified `cmpCol` predicates,\n * exactly like `exists`; its parameters merge into the statement's single\n * sequence in render order. NULLS placement is deliberately unsupported here\n * (emulating it would render the subquery twice and duplicate its params) —\n * missing relations sort at each engine's native NULL position.\n */\nexport type OrderBySubquery = {\n readonly select: SelectStatement;\n readonly direction: \"asc\" | \"desc\";\n};\n\nexport type OrderTerm = OrderByColumn | OrderByAggregate | OrderBySubquery;\n\n// ─── Statements ───────────────────────────────────────────────────\n\n/**\n * One `LEFT JOIN LATERAL (…) AS alias ON true` clause aggregating a correlated\n * subquery into a single JSON value per outer row — the \"join\" relation-loading\n * strategy (postgres/pglite only; gated on `capabilities.lateralJoin`).\n *\n * Renders (agg `jsonArray`):\n * `LEFT JOIN LATERAL (SELECT COALESCE(json_agg(to_json(\"__sub\".*)), '[]'::json)\n * AS \"columnAlias\" FROM (<select>) AS \"__sub\") AS \"alias\" ON true`\n * and (agg `jsonObject`):\n * `LEFT JOIN LATERAL (SELECT to_json(\"__sub\".*) AS \"columnAlias\"\n * FROM (<select>) AS \"__sub\") AS \"alias\" ON true`\n *\n * `to_json` over a subselect (not `json_build_object`) sidesteps postgres's\n * 100-argument function limit on wide models (v1 lesson); `json` rather than\n * `jsonb` because the value is transport only — jsonb's binary build + re-\n * serialization cost 2–3.7× the server time for identical decoded values.\n * The inner select's ORDER BY drives the aggregate's element order. Consumers\n * must run the codec table over the parsed JSON children: `to_json` turns\n * timestamps into strings and loses BigInt-ness (LEARNINGS).\n */\nexport type LateralJoin = {\n /** Join alias (`__lat_0`) — the outer projection selects `alias.columnAlias`. */\n readonly alias: string;\n /** Column the aggregated JSON value is exposed under (`__rel_posts`). */\n readonly columnAlias: string;\n /** jsonArray: many rows; jsonObject: one row or NULL; count: a scalar COUNT(*) lateral. */\n readonly agg: \"jsonArray\" | \"jsonObject\" | \"count\";\n /**\n * Object output is the SQL-layer default. Positional rows follow the exact\n * select.columns order, using explicit output names (never SELECT *).\n * Above JSON_TRANSPORT.chunkSize, a row is an array of fixed-size chunks;\n * the final chunk may be shorter. Scalar/list/Json field values stay in one\n * slot. Consumers must use the SAME projection to decode the payload.\n */\n readonly rowFormat?: \"object\" | \"positional\";\n /** The correlated child select — may reference outer columns via table-qualified refs. */\n readonly select: SelectStatement;\n};\n\n/**\n * One correlated scalar `COUNT(*)` projected into a select list:\n * `(SELECT COUNT(*) FROM … WHERE <correlation>) AS \"alias\"` — the relation\n * `_count` of the round-trip campaign's R-03b, which saves the separate grouped\n * count statement. Portable: postgres, sqlite and mysql all evaluate a\n * correlated scalar subquery once per output row; the runtime wraps a paged\n * root in a derived table first, so the subqueries run only for the page.\n * The select must be ONE ungrouped `COUNT(*)` (`columns: []`, `selectExpr`\n * countAll, no grouping, paging, distinct or lock) — anything else is refused\n * at render. Its parameters join the statement's single sequence in text order\n * (the select list renders before FROM).\n */\nexport type CountSubquery = {\n /** Output column the count is exposed under (`__vibe_count_0`). */\n readonly alias: string;\n /** The correlated count select — references outer columns via table-qualified refs. */\n readonly select: SelectStatement;\n};\n\n/**\n * One `INNER JOIN \"table\" AS alias ON left = right [AND …]` clause — plain\n * equality joins only, portable across all dialects. Added for the\n * single-statement implicit-M2M load (child rows joined to their join-table\n * membership rows); extra join-table columns project through the statement's\n * `columns` list with a table qualifier + `alias`.\n */\nexport type InnerJoin = {\n readonly table: TableRef;\n /** Equality pairs ANDed into the ON clause; never empty. */\n readonly on: readonly { readonly left: ColRef; readonly right: ColRef }[];\n};\n\n/**\n * How one member of a {@link KeyTableJoin} tuple binds inside the derived\n * table. `value` binds the parameter as it is: it stays COERCIBLE, so a text\n * column's OWN collation decides `=` — the equality `col IN (?, …)` uses.\n * `integer` and `decimal` cast the parameter into the column's numeric family:\n * BigInt and Decimal values travel as strings, and a derived-table string\n * compared with a numeric column goes through a double (measured on mysql:\n * `9007199254740993` matched `9007199254740992`).\n *\n * `integer` renders `CAST(? AS SIGNED)`. `decimal` renders\n * `CAST(? AS DECIMAL(65, scale))` with the tested column's own scale: 65 is\n * MySQL's maximum precision, so the cast holds every value a\n * `DECIMAL(p, scale)` column can hold. A fixed `DECIMAL(65,30)` held only 35\n * integer digits and clipped a `Decimal(65, 0)` key onto its maximum, which\n * matched nothing (review finding 1); the column's own precision would clip a\n * wider value onto the column's maximum and pair it with a row it does not\n * equal (measured: `CAST('100000' AS DECIMAL(5,0))` is `99999`). `scale` is\n * 0–30, MySQL's range.\n *\n * `citext` (postgres only) renders `CAST($n AS citext)`: a postgres `citext`\n * key compares case-insensitively, and a bare VALUES parameter would be\n * `text`, whose `=` against a citext column is the case-sensitive text\n * operator. A VALUES cell has no column to infer a type from, so every member\n * of a postgres key table binds typed: `citext`, `text` (`CAST($n AS text)`,\n * a text or varchar column) or `integer` (`CAST($n AS bigint)`, exact against\n * any integer column) — any other member refuses on postgres. `text` is\n * postgres-only; mysql binds text members as `value`.\n */\nexport type KeyTableMember =\n | { readonly kind: \"value\" }\n | { readonly kind: \"integer\" }\n | { readonly kind: \"decimal\"; readonly scale: number }\n /** MySQL-only lossless temporal operands in mixed collation-aware key tuples. */\n | { readonly kind: \"timestamp\" }\n | { readonly kind: \"time\" }\n | { readonly kind: \"citext\" }\n | { readonly kind: \"text\" };\n\n/**\n * The batch's key tuples as a derived table, each tagged with its ORDINAL\n * (row `i` carries `i`), INNER JOINed on the tested columns — mysql:\n * `INNER JOIN (VALUES ROW(?, 0), ROW(?, 1)) AS \\`alias\\` (\\`__vibe_k0\\`, \\`ordinal\\`)\n * ON col = \\`alias\\`.\\`__vibe_k0\\``; postgres only over `citext` members\n * (`(VALUES (CAST($1 AS citext), 0), …)`, release 3.0 nested writes).\n * Member columns are named `__vibe_k<i>` (a reserved prefix, so unqualified\n * child columns never collide with them).\n *\n * Why it exists (EPIC R): a relation load used to stitch children to parents\n * by comparing decoded keys in JavaScript, while mysql's collations equate\n * spellings (`acme` = `Acme` = `ACME`, `cafe` = `Café`, `x ` = `x`) that\n * JavaScript keeps apart — the foreign key and the `IN` filter accepted the\n * child, the stitch dropped it. Joined this way the DATABASE pairs every child\n * row with every batch key it considers equal, and the projected ordinal names\n * the key; the join is also the membership filter.\n */\nexport type KeyTableJoin = {\n /** Derived-table alias (`__vibe_keys`); the ordinal projects as `alias.ordinalAlias`. */\n readonly alias: string;\n /** The statement's columns, compared member by member (`=`), in tuple order. */\n readonly columns: readonly ColRef[];\n /** How each member binds, in tuple order — see {@link KeyTableMember}. */\n readonly members: readonly KeyTableMember[];\n /** Encoded key tuples; never empty, each as long as `columns`. */\n readonly rows: readonly (readonly unknown[])[];\n /** Output name of the ordinal column. */\n readonly ordinalAlias: string;\n};\n\n/**\n * A `ROW_NUMBER() OVER (PARTITION BY … [ORDER BY …]) AS \"alias\"` projection,\n * appended after `columns` — the distinct emulation on dialects without\n * `DISTINCT ON` (sqlite ≥3.25, mysql ≥8.0 both have window functions): the\n * outer statement filters `alias = 1` on the derived table, restoring\n * SQL-side take/skip and bounded transfer (N10).\n */\nexport type RowNumberProjection = {\n readonly partitionBy: readonly ColRef[];\n /** Intra-partition order picking the representative row; may be empty. */\n readonly orderBy: readonly OrderTerm[];\n readonly alias: string;\n};\n\nexport type SelectStatement = {\n readonly kind: \"select\";\n readonly table: TableRef;\n /** Empty array renders as `SELECT *` (unless `selectExpr` replaces it). */\n readonly columns: readonly ColRef[];\n /**\n * Aggregate projection. Replaces the column list when `columns` is empty;\n * a `countAll` with columns renders after them (grouped counts).\n */\n readonly selectExpr?: SelectExpr;\n /**\n * Aliased aggregate projections (`AVG(\"col\") AS \"_avg__col\"`), rendered\n * after `columns` — the aggregate/groupBy/count-select shapes. Cannot be\n * combined with `selectExpr`.\n */\n readonly aggregates?: readonly AggSelect[];\n /** Correlated `COUNT(*)` subqueries, rendered after `aggregates` — see {@link CountSubquery}. */\n readonly countSubqueries?: readonly CountSubquery[];\n /**\n * `SELECT DISTINCT ON (cols)` — postgres only (`capabilities.distinctOn`;\n * other dialects refuse at render time and the runtime emulates client-side\n * instead). ORDER BY must lead with these columns; the query builder\n * guarantees that arrangement.\n */\n readonly distinctOn?: readonly ColRef[];\n /**\n * Derived-table FROM: renders `FROM (<fromSelect>) AS \"<table.name>\"` —\n * `table.name` is the subquery ALIAS and `table.alias` must be unset. Used\n * by aggregate-over-a-subset shapes (`aggregate({ take, skip, orderBy })`).\n */\n readonly fromSelect?: SelectStatement;\n /** Lateral JSON-aggregation joins — postgres-only, see {@link LateralJoin}. */\n readonly lateralJoins?: readonly LateralJoin[];\n /** Plain equality INNER JOINs — portable, see {@link InnerJoin}. */\n readonly innerJoins?: readonly InnerJoin[];\n /** Key-table join, rendered after `innerJoins` — mysql only, see {@link KeyTableJoin}. */\n readonly keyTable?: KeyTableJoin;\n /** ROW_NUMBER window projection — see {@link RowNumberProjection}. */\n readonly rowNumber?: RowNumberProjection;\n readonly where?: SqlExpr;\n readonly groupBy?: readonly ColRef[];\n /** HAVING predicate — grouped selects; may contain `aggCmp` expressions. */\n readonly having?: SqlExpr;\n readonly orderBy?: readonly OrderTerm[];\n readonly limit?: number;\n readonly offset?: number;\n /**\n * Row-locking read (`SELECT … FOR UPDATE SKIP LOCKED`) — see {@link RowLock}.\n * The internal read-before-write overlays (dialects without RETURNING) set\n * the plain `{ strength: \"update\", wait: \"wait\" }` lock. Rendered only where\n * the dialect names the clause (`dialect.rowLockSyntax`); sqlite has none and\n * needs none — its write transactions already exclude each other.\n */\n readonly rowLock?: RowLock;\n};\n\n/**\n * The lock a locking read takes: one strength, one wait policy. Both members\n * are REQUIRED here — defaulting happens once, in the query builder, so the\n * rendered SQL is a function of the AST alone.\n */\nexport type RowLock = {\n readonly strength: RowLockStrength;\n readonly wait: RowLockWaitPolicy;\n};\n\n/**\n * Sentinel VALUES cell: render the `DEFAULT` keyword instead of a placeholder\n * (M4) — a heterogeneous createMany row that omits a field lets the COLUMN\n * default apply (or NULL on a defaultless nullable column), exactly like a\n * single-row insert that omits it. Postgres/mysql only\n * (`dialect.rowDefaultKeyword`); sqlite groups rows instead.\n */\nexport const SQL_DEFAULT_CELL: { readonly __sqlDefault: true } = Object.freeze({ __sqlDefault: true });\n\n/** Is this VALUES cell the {@link SQL_DEFAULT_CELL} sentinel? */\nexport function isSqlDefaultCell(value: unknown): boolean {\n return value === SQL_DEFAULT_CELL;\n}\n\n/**\n * VALUES/SET cell carrying a Json column's parameter (the codec's JSON text).\n *\n * Why it exists: OID-typed drivers (bun:sql) resolve each parameter's postgres\n * type and re-serialize the JS value AS that type — a pre-stringified Json\n * param bound straight into a bare jsonb slot arrives DOUBLE-ENCODED (a jsonb\n * string holding the document; live-proven on Bun 1.3.14). The postgres\n * renderer pins the parameter's type instead (`$n::text::jsonb`,\n * `SqlDialect.jsonParamCast`), so every driver sends the text through and the\n * SERVER parses it; text-param drivers (node-postgres, pglite) are unaffected.\n * Sqlite/mysql render the bare placeholder — their Json transport is already\n * plain text. The COLLECTED parameter is the plain text either way: this\n * wrapper never crosses the wire.\n *\n * `storage: \"json\"` marks a postgres `json` column (`Json @db.Json`): the cell\n * renders `$n::text::json`, so the column stores the text as written (key\n * order and spelling kept) instead of jsonb's normalized text (release-3.0\n * D3). Absent = jsonb; dialects without a param cast ignore it.\n */\nexport type JsonParamCell = { readonly __jsonParam: true; readonly text: string; readonly storage?: \"json\" };\n\n/** Wrap a Json column's encoded (stringified) parameter for cast-site rendering. */\nexport function jsonParamCell(params: { text: string; storage?: \"json\" }): JsonParamCell {\n return params.storage === \"json\" ? { __jsonParam: true, text: params.text, storage: \"json\" } : { __jsonParam: true, text: params.text };\n}\n\n/** Is this VALUES/SET cell a {@link JsonParamCell}? */\nexport function isJsonParamCell(value: unknown): value is JsonParamCell {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __jsonParam?: unknown }).__jsonParam === true\n );\n}\n\n/**\n * Reference to the row PROPOSED for insertion, inside an upsert's update arm:\n * `excluded.\"col\"` on postgres/sqlite, `` `new`.`col` `` on mysql's row-alias\n * form (`SqlDialect.excludedRowRef`). It is a COLUMN REFERENCE, not a\n * parameter — it names the value already bound in this statement's VALUES\n * list, which is what lets ONE batched upsert write each conflicting row's own\n * incoming values without binding them a second time.\n */\nexport type ExcludedRef = { readonly __excluded: true; readonly column: string };\n\n/** Reference the incoming row's `column` from inside an upsert update arm. */\nexport function excludedRef(params: { column: string }): ExcludedRef {\n return { __excluded: true, column: params.column };\n}\n\n/** Is this SET cell an {@link ExcludedRef}? */\nexport function isExcludedRef(value: unknown): value is ExcludedRef {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __excluded?: unknown }).__excluded === true\n );\n}\n\n/**\n * One RETURNING column: a bare column name renders `\"col\"`; `castText` renders\n * a dialect text cast (postgres `::text`, sqlite `CAST AS TEXT`) for lossless\n * transport, including timestamps and postgres arrays. `jsonText`\n * applies the dialect's JSON text projection, as {@link ColRef.transform} does\n * for SELECT. Dialects without RETURNING still omit the clause and flag it.\n */\nexport type ReturningColumn =\n | string\n | { readonly name: string; readonly castText: true }\n | { readonly name: string; readonly transform: \"jsonText\" };\n\n/** The column name a {@link ReturningColumn} exposes in the result row. */\nexport function returningColumnName(column: ReturningColumn): string {\n return typeof column === \"string\" ? column : column.name;\n}\n\nexport type InsertStatement = {\n readonly kind: \"insert\";\n readonly table: TableRef;\n readonly columns: readonly string[];\n /** Row values aligned to `columns` — deterministic parameter order. */\n readonly rows: readonly (readonly unknown[])[];\n /** Upsert clause: ON CONFLICT (pg/sqlite) or ON DUPLICATE KEY (mysql). */\n readonly onConflict?: OnConflictClause;\n /** Rendered as RETURNING where the dialect supports it, else omitted+flagged. */\n readonly returning?: readonly ReturningColumn[];\n};\n\n/** Conflicting rows are updated with these column values. */\nexport type OnConflictUpdate = {\n /** Conflict target columns (ignored by the mysql form). */\n readonly columns: readonly string[];\n /**\n * Named-constraint target: `ON CONFLICT ON CONSTRAINT \"name\" DO UPDATE`.\n * Postgres only; replaces the column-list target when present.\n */\n readonly constraint?: string;\n /**\n * Partial-index arbiter predicate, RAW SQL: `ON CONFLICT (cols) WHERE pred\n * DO UPDATE …` (postgres/sqlite; requires `columns`). Raw for the same\n * reason {@link OnConflictDoNothing.conflictWhere} is — both engines match\n * the clause against the index's OWN stored predicate structurally, so a\n * bound parameter could never match and the text mirrors the schema\n * declaration byte-for-byte. Mysql's ODKU names no target and refuses it.\n */\n readonly conflictWhere?: string;\n readonly update: Readonly<Record<string, unknown>>;\n /**\n * MySQL only (`upsertForm: \"onDuplicateKey\"`): append\n * `` `col` = LAST_INSERT_ID(`col`) `` to the update list so the UPDATE arm\n * records the addressed row's key — without it `LAST_INSERT_ID()` is stale\n * on the update arm and the read-back can resolve a wrong, unrelated row\n * (SQL review B2, live-proven on 8.4). Only meaningful for integer keys.\n */\n readonly lastInsertIdColumn?: string;\n};\n\n/**\n * Conflicting rows are skipped (`createMany({ skipDuplicates: true })`).\n * An empty/absent target means \"any conflict\" — the mysql form (INSERT IGNORE)\n * can only express that, so it ignores a bare `columns` target (documented\n * degradation) and REFUSES the refined targets below.\n */\nexport type OnConflictDoNothing = {\n readonly columns?: readonly string[];\n /**\n * Partial-index target predicate, RAW SQL: `ON CONFLICT (cols) WHERE pred\n * DO NOTHING` (postgres/sqlite; requires `columns`). Raw — and rendered\n * verbatim — because BOTH engines match the clause against the index's OWN\n * stored predicate structurally: a bound parameter could never match, so\n * the text mirrors the schema declaration's `where:` string byte-for-byte.\n */\n readonly conflictWhere?: string;\n /** Named-constraint target (`ON CONSTRAINT \"name\"`) — postgres only. */\n readonly constraint?: string;\n readonly doNothing: true;\n};\n\nexport type OnConflictClause = OnConflictUpdate | OnConflictDoNothing;\n\nexport type UpdateStatement = {\n readonly kind: \"update\";\n readonly table: TableRef;\n /** Column → parameter value, or an atomic {@link SetOperation}. */\n readonly set: Readonly<Record<string, unknown>>;\n readonly where?: SqlExpr;\n readonly returning?: readonly ReturningColumn[];\n};\n\nexport type DeleteStatement = {\n readonly kind: \"delete\";\n readonly table: TableRef;\n readonly where?: SqlExpr;\n readonly returning?: readonly ReturningColumn[];\n};\n\n/** Native RLS DDL, kept distinct from ordinary row-query expressions. */\nexport type RlsEnableStatement = { readonly kind: \"rlsEnable\"; readonly table: string };\nexport type RlsForceStatement = { readonly kind: \"rlsForce\"; readonly table: string };\n/** Disable native row policy enforcement on a physical table. */\nexport type RlsDisableStatement = { readonly kind: \"rlsDisable\"; readonly table: string };\n/** Remove forced owner enforcement on a physical table. */\nexport type RlsNoForceStatement = { readonly kind: \"rlsNoForce\"; readonly table: string };\n/** Drop the managed policy by default, or the supplied policy name. */\nexport type RlsDropPolicyStatement = { readonly kind: \"rlsDropPolicy\"; readonly table: string; readonly policyName?: string };\nexport type RlsPolicyStatement = {\n readonly kind: \"rlsPolicy\";\n readonly schema: SchemaIR;\n readonly model: string;\n /** Probe policies use a distinct identity without changing the predicate. */\n readonly policyName?: string;\n /** Only the probe target may be temporary; parent relations always remain public. */\n readonly targetSchema?: \"public\" | \"pg_temp\";\n};\n\n/** Values are validated/serialized by runtime; null is the absent setting sentinel. */\nexport type RlsContextStatement = {\n readonly kind: \"rlsContext\";\n readonly context: RlsContextIR;\n readonly values: Readonly<Record<string, string | null>>;\n};\n\n/** Trusted pre-existing PGlite execution role; never a request-supplied principal. */\nexport type RlsRoleStatement = { readonly kind: \"rlsRole\"; readonly role: string };\n\n// ─── Advisory locks ───────────────────────────────────────────────\n\n/**\n * An advisory lock's key: a lock space the APPLICATION defines, so a resource\n * with no row of its own can still be locked.\n *\n * Two forms, exactly as PostgreSQL offers them, and they are DIFFERENT lock\n * spaces — holding `{ classId: 11, objectId: 22 }` does not block the single\n * key `11 * 2^32 + 22` (probe-verified on PostgreSQL 18.6). Pick one form per\n * resource family and stay in it.\n */\nexport type AdvisoryLockKey =\n | { readonly key: bigint }\n | { readonly classId: number; readonly objectId: number };\n\n/**\n * Take a TRANSACTION-scoped advisory lock. Released by commit and by rollback\n * (including `ROLLBACK TO SAVEPOINT` when it was taken after the savepoint —\n * probe-verified), never by an explicit unlock call, so no leak can outlive the\n * transaction on a pooled connection.\n *\n * `wait: \"nowait\"` renders the `pg_try_advisory_xact_lock*` family, whose single\n * boolean column says whether the lock was taken; `\"wait\"` renders the blocking\n * family, which returns void.\n */\nexport type AdvisoryLockStatement = {\n readonly kind: \"advisoryLock\";\n readonly mode: AdvisoryLockMode;\n readonly wait: \"wait\" | \"nowait\";\n readonly key: AdvisoryLockKey;\n};\n\n/** The column an advisory try-lock projects its verdict into. */\nexport const ADVISORY_LOCK_RESULT_COLUMN: string = \"acquired\";\n\n// ─── Statement chains ────────────────────────────────────────────────\n\n/**\n * A cell of an {@link InsertSelectStatement} that reads a column of an EARLIER\n * chain step: `\"step\".\"column\"`. A column reference, not a parameter — the\n * value comes from the step's rows inside the same statement (a child row\n * taking its parent's key from the parent step, round-trip campaign EPIC F).\n * The step must be named in the insert's `from` list.\n */\nexport type StepColumnRef = { readonly __stepColumn: true; readonly step: string; readonly column: string };\n\n/** Reference `column` of the earlier chain step `step` from an INSERT … SELECT cell. */\nexport function stepColumnRef(params: { step: string; column: string }): StepColumnRef {\n return { __stepColumn: true, step: params.step, column: params.column };\n}\n\n/** Is this INSERT … SELECT cell a {@link StepColumnRef}? */\nexport function isStepColumnRef(value: unknown): value is StepColumnRef {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __stepColumn?: unknown }).__stepColumn === true\n );\n}\n\n/**\n * `INSERT INTO t (cols) SELECT <cells> [FROM \"step\", …] [WHERE <expr>]\n * [RETURNING …]` — an INSERT whose ONE row is a SELECT list instead of a\n * VALUES row, so a WHERE can veto the write inside the statement and cells can\n * read earlier steps. Valid ONLY as a {@link ChainStep} statement.\n *\n * Cells take the same forms as a VALUES cell — a codec-encoded value, a\n * {@link JsonParamCell}, a {@link DbNowMarker} — plus {@link StepColumnRef}.\n * The {@link SQL_DEFAULT_CELL} is refused: `DEFAULT` is not allowed in a SELECT\n * list; an omitted column takes its default by being absent from `columns`.\n *\n * Parameter typing (O-03, probed on PostgreSQL): a bare parameter in this\n * one-row SELECT list takes the TARGET column's type, exactly as in VALUES.\n */\nexport type InsertSelectStatement = {\n readonly kind: \"insertSelect\";\n readonly table: TableRef;\n readonly columns: readonly string[];\n /** One cell per column, aligned to `columns` — deterministic parameter order. */\n readonly cells: readonly unknown[];\n /** Earlier chain steps the SELECT reads FROM, in order (absent: a one-row SELECT without FROM). */\n readonly from?: readonly string[];\n /**\n * Several source rows (round-trip campaign EPIC F): the SELECT reads them\n * from a derived table `alias`, joined after the `from` steps, and the\n * `cells` read its columns through `stepColumnRef({ step: alias, column })`.\n * See {@link ChainRowSource} for how the rows are typed.\n */\n readonly source?: ChainRowSource;\n readonly where?: SqlExpr;\n readonly returning?: readonly ReturningColumn[];\n};\n\n/**\n * Rows an {@link InsertSelectStatement} inserts, as ONE derived table:\n * `(SELECT <cols> FROM (VALUES (<typed NULL row>), ($1, $2), …) AS \"alias\"\n * (<cols>) OFFSET 1) AS \"alias\"`.\n *\n * Why the typed NULL row (review O-03): a bare parameter outside the INSERT's\n * own VALUES has no type, and PostgreSQL resolves an all-parameter column of a\n * VALUES list or UNION in FROM as `text` (\"column is of type integer but\n * expression is of type text\"). The first row is one `(SELECT \"col\" FROM\n * <typedBy> WHERE FALSE)` per column — a NULL of the TARGET column's exact\n * type (enums, `numeric(p,s)`, `varchar(n)`, domains and arrays included) —\n * so every parameter below takes that type, with no cast map anywhere;\n * `OFFSET 1` drops the row. (A `UNION ALL` of one-row SELECTs types the same\n * way but costs ~10× the planning time at 1000 rows — EPIC F shape gate.)\n *\n * Cells take the VALUES forms: a codec-encoded value, a {@link JsonParamCell}\n * or a {@link DbNowMarker}; the DEFAULT cell is refused (a homogeneous row set\n * omits the column instead). A cell carrying its OWN type (the Json cast, the\n * clock) must agree with the column's type under VALUES' common-type rules,\n * which are stricter than INSERT's assignment casts — the builder keeps such\n * columns out (EPIC F eligibility). Rows are read in list order, which is the\n * order the INSERT consumes them.\n */\nexport type ChainRowSource = {\n readonly alias: string;\n /** The table whose columns type the rows — normally the INSERT's own table. */\n readonly typedBy: TableRef;\n readonly columns: readonly string[];\n /** At least one row, each aligned to `columns`. */\n readonly rows: readonly (readonly unknown[])[];\n};\n\n/** What one chain step may be: a read, or a data-modifying statement with RETURNING. */\nexport type ChainStepStatement =\n | SelectStatement\n | InsertStatement\n | InsertSelectStatement\n | UpdateStatement\n | DeleteStatement;\n\n/**\n * One named step: rendered `\"name\" AS (<statement>)`. Later steps and the\n * result read it as a table (`FROM \"name\"`, `EXISTS (SELECT 1 FROM \"name\" …)`,\n * a {@link StepColumnRef}). A data-modifying step contributes the rows its\n * RETURNING list names.\n */\nexport type ChainStep = {\n readonly name: string;\n readonly statement: ChainStepStatement;\n};\n\n/**\n * The chain's final SELECT: the rows of `rowsFrom` (in that order, `UNION\n * ALL`), each projecting `columns`.\n *\n * `verdict` adds one column `alias` = `expr` to every row, AND guarantees a\n * row: when the `rowsFrom` steps return nothing, the result is exactly ONE\n * verdict row whose `columns` are all NULL. A caller recognizes it by NULL in\n * a column the steps never return as NULL (a primary key). Accounting\n * consequence: such a statement returns one row per written row OR one\n * verdict row — a caller that counts returned rows as row changes must undo a\n * verdict-row outcome (the upsert fold always rolls it back).\n */\nexport type ChainResult = {\n readonly rowsFrom: readonly string[];\n readonly columns: readonly string[];\n readonly verdict?: { readonly alias: string; readonly expr: SqlExpr };\n /**\n * In-statement vetoes (round-trip campaign EPIC F), checked in order: when\n * `step` returned no row (fewer than `minRows`, EPIC W), the STATEMENT FAILS — so the database undoes every\n * effect of every step, trigger writes included — with an error whose\n * message carries `__vibe_veto:<token>:<nonce>:` ({@link CHAIN_VETO_PREFIX},\n * {@link chainVetoToken}). Requires `tally`: the veto is the tally column's\n * guard, so it is evaluated exactly once, on the one guaranteed result row.\n */\n readonly veto?: readonly ChainVeto[];\n /**\n * One column `alias` on every result row: the number of rows the listed\n * data-modifying steps returned (their RETURNING rows = their direct\n * effects). Guarantees one row like `verdict`. Row-change accounting reads\n * it instead of counting result rows (effect `writeTally`).\n */\n readonly tally?: ChainTally;\n};\n\n/**\n * Fail the statement when `step` returned no row; `token` names the veto in the\n * error. `nonce` is bound as a PARAMETER into the marker (never SQL text): a\n * per-call random value the caller requires back in the error, so a user value\n * that merely looks like a marker is never read as a veto.\n *\n * `minRows` (EPIC W) makes the veto count-sensitive: the statement fails when\n * `step` returned FEWER rows than that (a multi-row INSERT a trigger shortened).\n * Omitted or 1 = \"no row\". A positive safe integer, rendered as SQL text.\n */\nexport type ChainVeto = { readonly step: string; readonly token: string; readonly nonce: string; readonly minRows?: number };\n\n/** Count the RETURNING rows of `steps` into the result column `alias`. */\nexport type ChainTally = { readonly alias: string; readonly steps: readonly string[] };\n\n/** Marker every chain veto error message carries, followed by `<token>:<nonce>:`. */\nexport const CHAIN_VETO_PREFIX: string = \"__vibe_veto:\";\n\n/** Allowed veto tokens: lower-case words — they are rendered into SQL text. */\nexport const CHAIN_VETO_TOKEN_PATTERN: RegExp = /^[a-z][a-z0-9_]*$/;\n\n/**\n * The veto token a database error message carries for this `nonce`, or\n * `undefined`. Matches the marker anywhere in the text, so a localized server\n * message (`lc_messages`) still yields it: the marker is the invalid VALUE the\n * message quotes. A marker without the caller's nonce is not a veto.\n */\nexport function chainVetoToken(params: { message: string; nonce: string }): string | undefined {\n const { message, nonce } = params;\n if (nonce === \"\") return undefined;\n for (let start = message.indexOf(CHAIN_VETO_PREFIX); start >= 0; start = message.indexOf(CHAIN_VETO_PREFIX, start + 1)) {\n const rest = message.slice(start + CHAIN_VETO_PREFIX.length);\n const match = /^([a-z][a-z0-9_]*):/.exec(rest);\n if (match !== null && rest.startsWith(`${nonce}:`, match[0].length)) return match[1];\n }\n return undefined;\n}\n\n/**\n * ONE statement made of an ordered chain of named steps — reads (a locked\n * probe) and data-modifying statements with RETURNING — ending in a final\n * SELECT over them (round-trip campaign EPIC 4, reused by EPIC F). Renders as\n * `WITH \"a\" AS (…), \"b\" AS (…) SELECT …` on a dialect whose\n * `statementChain` strategy names the form (postgres); every other dialect\n * refuses at render time (`VIBE_UNSUPPORTED_CAPABILITY`) — callers gate on\n * the strategy first and keep their multi-statement path there.\n *\n * PostgreSQL semantics the builder relies on: every step sees ONE snapshot\n * (a step never sees another step's writes — only its RETURNING rows), steps\n * that reference a step run after it, and the statement is atomic: an error in\n * any step undoes every step's effects, trigger writes included.\n */\nexport type ChainStatement = {\n readonly kind: \"chain\";\n readonly steps: readonly ChainStep[];\n readonly result: ChainResult;\n};\n\nexport type SqlStatement = SelectStatement | InsertStatement | UpdateStatement | DeleteStatement |\n RlsEnableStatement | RlsForceStatement | RlsDisableStatement | RlsNoForceStatement | RlsDropPolicyStatement |\n RlsPolicyStatement | RlsContextStatement | RlsRoleStatement | AdvisoryLockStatement | ChainStatement;\n\n/** Readiness statements remain distinct from application queries. */\nexport type RlsReadinessStatement = { readonly kind: \"rlsReadiness\"; readonly query: RlsReadinessQuery; readonly searchPath?: string };\n/** Temporary clone lifecycle surrounding a desired-policy probe. */\nexport type RlsProbeTableStatement = { readonly kind: \"rlsProbeTable\"; readonly table: string; readonly action: \"create\" | \"drop\" };\n/** Migration transaction-local policy search-path scope. */\nexport type RlsPolicyPathStatement = { readonly kind: \"rlsPolicyPath\"; readonly stage: \"save\" | \"empty\" | \"restore\" };\n",
36
36
  "/**\n * Lock SQL: the row-locking clause appended to a SELECT, and the\n * transaction-scoped advisory-lock statement.\n *\n * Both are pure text decisions, so both live here rather than in the runtime —\n * and both REFUSE rather than degrade. A dialect that cannot express a strength\n * or a wait policy has no text for it (`SqlDialect.rowLockSyntax`), and the\n * refusal is a `VIBE_UNSUPPORTED_CAPABILITY`, never a weaker clause: silently\n * turning `skipLocked` into a blocking read hands two workers the same job.\n */\n\nimport { internalError, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { AdvisoryLockMode, RowLockStrength, RowLockWaitPolicy } from \"@vibeorm/schema\";\nimport type { AdvisoryLockKey, AdvisoryLockStatement, RowLock } from \"./ast.ts\";\nimport { ADVISORY_LOCK_RESULT_COLUMN } from \"./ast.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\nimport type { ParamCollector } from \"./params.ts\";\nimport type { RenderedQuery } from \"./render.ts\";\n\n// ─── Row locks ────────────────────────────────────────────────────\n\n/**\n * How each strength and wait policy READS in a refusal message. Typed as a\n * total record, so adding a member to either union fails to compile until this\n * table names it — an error message can never silently describe the wrong lock.\n */\nconst ROW_LOCK_PROSE: {\n readonly strengths: Readonly<Record<RowLockStrength, string>>;\n readonly wait: Readonly<Record<RowLockWaitPolicy, string>>;\n} = Object.freeze({\n strengths: Object.freeze({\n update: \"FOR UPDATE\",\n noKeyUpdate: \"FOR NO KEY UPDATE\",\n share: \"FOR SHARE\",\n keyShare: \"FOR KEY SHARE\",\n }),\n wait: Object.freeze({ wait: \"\", nowait: \" NOWAIT\", skipLocked: \" SKIP LOCKED\" }),\n});\n\n/** How a lock request reads in a refusal message (`FOR UPDATE SKIP LOCKED`). */\nexport function describeRowLock(params: { lock: RowLock }): string {\n const { strength, wait } = params.lock;\n return `${ROW_LOCK_PROSE.strengths[strength]}${ROW_LOCK_PROSE.wait[wait]}`;\n}\n\n/**\n * The clause for one row lock, or `null` when this dialect has NO locking-read\n * clause at all and the request is the historical `FOR UPDATE` no-op.\n *\n * sqlite is that case: it has no clause, and its write transactions are\n * mutually exclusive, so `lock: \"update\"` there is a documented no-op kept for\n * compatibility. Anything else on such a dialect — a different strength, or a\n * wait policy that changes behaviour — is refused by the caller BEFORE this\n * point (the query builder), and refused again here as a backstop.\n */\nexport function renderRowLockClause(params: { dialect: SqlDialect; lock: RowLock }): string | null {\n const { dialect, lock } = params;\n const syntax = dialect.rowLockSyntax;\n if (syntax === null) {\n if (lock.strength === \"update\" && lock.wait === \"wait\") return null;\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `a ${describeRowLock({ lock })} locking read`,\n hint: `${dialect.name} has no locking-read clause at all`,\n });\n }\n const strengthText = syntax.strengths[lock.strength];\n if (strengthText === undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `the ${describeRowLock({ lock: { ...lock, wait: \"wait\" } })} row-lock strength`,\n hint: `${dialect.name} can express: ${Object.keys(syntax.strengths).join(\", \")}`,\n });\n }\n const waitText = syntax.wait[lock.wait];\n if (waitText === undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `the \"${lock.wait}\" lock wait policy`,\n hint: `${dialect.name} can express: ${Object.keys(syntax.wait).join(\", \")}`,\n });\n }\n return `${strengthText}${waitText}`;\n}\n\n// ─── Advisory locks ───────────────────────────────────────────────\n\n/** Largest/smallest value each advisory key part may carry, per PostgreSQL's types. */\nexport const ADVISORY_KEY_BOUNDS: {\n readonly single: { readonly min: bigint; readonly max: bigint };\n readonly pair: { readonly min: number; readonly max: number };\n} = Object.freeze({\n single: Object.freeze({ min: -(2n ** 63n), max: 2n ** 63n - 1n }),\n pair: Object.freeze({ min: -(2 ** 31), max: 2 ** 31 - 1 }),\n});\n\n/** Is this key the single 64-bit form? (The alternative is the two 32-bit form.) */\nfunction isSingleKey(key: AdvisoryLockKey): key is { readonly key: bigint } {\n return \"key\" in key;\n}\n\n/**\n * `SELECT pg_advisory_xact_lock($1::bigint)` and friends.\n *\n * The key binds as TEXT with an explicit cast: PostgreSQL overloads these\n * functions on `(bigint)` and `(int4, int4)`, and an OID-typed driver resolves\n * a bound parameter's type itself — the trap `jsonParamCast` already exists for.\n * Casting in the SQL makes every driver send the same bytes.\n */\nexport function renderAdvisoryLock(params: {\n dialect: SqlDialect;\n statement: AdvisoryLockStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n const functions = dialect.advisoryLockFunctions;\n if (functions === null) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"advisory locks\",\n hint:\n dialect.name === \"mysql\"\n ? \"mysql's GET_LOCK is SESSION-scoped — it survives a rollback, so it cannot be released with the transaction\"\n : `${dialect.name} has no advisory-lock functions`,\n });\n }\n const mode: AdvisoryLockMode = statement.mode;\n const fn = (mode === \"exclusive\" ? functions.exclusive : functions.shared)[statement.wait];\n const key = statement.key;\n const args = isSingleKey(key)\n ? `${collector.add(key.key.toString())}${functions.keyCast.single}`\n : `${collector.add(String(assertInt32({ value: key.classId, part: \"classId\" })))}${functions.keyCast.pair}, ` +\n `${collector.add(String(assertInt32({ value: key.objectId, part: \"objectId\" })))}${functions.keyCast.pair}`;\n // The try-lock's boolean IS the result, so it is projected under a stable\n // name; the blocking form returns void and needs no alias.\n const projection =\n statement.wait === \"nowait\"\n ? ` AS ${dialect.quoteIdent({ name: ADVISORY_LOCK_RESULT_COLUMN })}`\n : \"\";\n return {\n text: `SELECT ${fn}(${args})${projection}`,\n values: collector.values,\n returning: \"none\",\n };\n}\n\n/** The AST is built by VibeORM code, so an out-of-range part is our bug. */\nfunction assertInt32(params: { value: number; part: string }): number {\n const { value, part } = params;\n if (\n !Number.isInteger(value) ||\n value < ADVISORY_KEY_BOUNDS.pair.min ||\n value > ADVISORY_KEY_BOUNDS.pair.max\n ) {\n throw internalError({\n message: `advisory lock ${part} must be a 32-bit integer, got ${String(value)}`,\n meta: { part, value },\n });\n }\n return value;\n}\n",
37
37
  "import type { ColRef } from \"./ast.ts\";\n\n/** PostgreSQL FUNC_MAX_ARGS: each json_build_array call accepts at most 100 values. */\nexport const JSON_TRANSPORT: Readonly<{ chunkSize: number }> = Object.freeze({ chunkSize: 100 });\n\n/** The name visible through a subselect, matching the projection renderer's alias rules. */\nexport function projectionOutputName(params: { column: ColRef }): string {\n const { column } = params;\n return column.alias ?? column.name;\n}\n",
38
- "/**\n * PostgreSQL dialect. Also serves PGlite — the differences are adapter-level\n * (single connection, bundled extension set), not SQL-text-level.\n */\n\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { POSTGRES_CAPABILITIES } from \"../capabilities.ts\";\nimport { assertNoNul } from \"../identifiers.ts\";\n\nexport const postgresDialect: SqlDialect = {\n name: \"postgres\",\n capabilities: POSTGRES_CAPABILITIES,\n\n inArrayStrategy: \"any\",\n tupleInStrategy: \"rowValue\",\n timeOfDayInStrategy: \"in\",\n upsertForm: \"onConflict\",\n // Measured on postgres 16.14 (notes-B.md): a batch proposing one conflict key\n // twice raises SQLSTATE 21000 (\"ON CONFLICT DO UPDATE command cannot affect\n // row a second time\") — including when the two keys are only equal under a\n // nondeterministic ICU collation, a char(n) trailing-space pad, `numeric`\n // scale or `uuid` case. The engine compares every proposed pair itself.\n // Text is byte-comparable by default because every collation postgres\n // creates is deterministic unless it was explicitly built with\n // `deterministic = false`: 'e' and 'E' stayed two rows on a default-collation\n // column. `numeric` is the exception the ORM cannot see from the encoded\n // value: '1.0' and '1.00' are one row.\n conflictKeyEquality: {\n foldingScalars: [\"Decimal\"],\n textIsBinaryByDefault: true,\n duplicatesInOneStatement: \"reject\",\n },\n excludedRowRef: { form: \"keyword\", name: \"excluded\" },\n doNothingForm: \"onConflictDoNothing\",\n insensitiveLike: \"ilike\",\n // Postgres `=`/`LIKE` are already byte-sensitive — strict mode is a no-op.\n strictMatchStrategy: \"native\",\n greatestForm: \"native\",\n orderByNullsMode: \"native\",\n offsetRequiresLimit: null,\n likeEscapeClause: null,\n jsonPathMode: \"operators\",\n supportedJsonOps: [\n \"equals\",\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n ],\n // Json params bind as TEXT and the server parses (`$n::text::jsonb`):\n // OID-typed drivers (bun:sql) would re-serialize a bare jsonb-slot param\n // and double-encode the document (JsonParamCell, ast.ts).\n jsonParamCast: \"::text::jsonb\",\n valueCastTypes: Object.freeze({ String: \"TEXT\", Boolean: \"BOOLEAN\", Int: \"INTEGER\", BigInt: \"BIGINT\", Float: \"DOUBLE PRECISION\", Decimal: \"NUMERIC\", DateTime: \"TIMESTAMPTZ\", Json: \"JSONB\", Bytes: \"BYTEA\" }),\n lastInsertIdSql: null,\n // All four strengths and all three wait policies parse and behave on\n // PostgreSQL 18.6 and on PGlite 0.5.4 (PostgreSQL 18.3) — probed, not assumed.\n rowLockSyntax: {\n strengths: Object.freeze({\n update: \"FOR UPDATE\",\n noKeyUpdate: \"FOR NO KEY UPDATE\",\n share: \"FOR SHARE\",\n keyShare: \"FOR KEY SHARE\",\n }),\n wait: Object.freeze({ wait: \"\", nowait: \" NOWAIT\", skipLocked: \" SKIP LOCKED\" }),\n },\n // Transaction-scoped only. The session-scoped family (pg_advisory_lock) is\n // deliberately absent: on a pooled connection its lock outlives the caller.\n advisoryLockFunctions: {\n exclusive: Object.freeze({\n wait: \"pg_catalog.pg_advisory_xact_lock\",\n nowait: \"pg_catalog.pg_try_advisory_xact_lock\",\n }),\n shared: Object.freeze({\n wait: \"pg_catalog.pg_advisory_xact_lock_shared\",\n nowait: \"pg_catalog.pg_try_advisory_xact_lock_shared\",\n }),\n keyCast: Object.freeze({ single: \"::bigint\", pair: \"::int4\" }),\n },\n rowDefaultKeyword: true,\n // Data-modifying CTEs (`WITH s AS (UPDATE … RETURNING …) SELECT …`) — one\n // snapshot, one atomic statement; PGlite runs the same engine.\n statementChain: \"dataModifyingCte\",\n paramBudget: 30000,\n\n // A real `boolean` type — `true`/`false` are the literals it stores.\n booleanLiteral: { true: \"true\", false: \"false\" },\n\n quoteIdent({ name }) {\n return `\"${assertNoNul({ name }).replaceAll('\"', '\"\"')}\"`;\n },\n // `standard_conforming_strings` has been on by default since postgres 9.1,\n // so a backslash is an ordinary character and only the quote is doubled.\n quoteStringLiteral({ value }) {\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n },\n placeholder({ index }) {\n return `$${index}`;\n },\n jsonTextProjection({ expression }): string {\n return `${expression}::text`;\n },\n renderDbNow({ offsetSeconds, collector }) {\n if (offsetSeconds === 0) return \"now()\";\n return `(now() + make_interval(secs => ${collector.add(offsetSeconds)}))`;\n },\n};\n",
39
- "/**\n * MySQL dialect (mysql2 adapter lands in P4).\n *\n * Notes pinned by catalog cases:\n * - No RETURNING → renderer omits it and flags `returning: \"omitted\"`; the\n * runtime re-selects by PK (app-generated ids) or insertId.\n * - Upserts use ON DUPLICATE KEY UPDATE (no conflict-target refinement).\n * - OFFSET requires LIMIT → the documented huge-limit idiom.\n * - No NULLS FIRST/LAST → `col IS NULL` emulation terms.\n * - No `ON CONFLICT ... DO NOTHING` → `INSERT IGNORE`, which is broader: it\n * downgrades other row-level errors to warnings too.\n */\n\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { MYSQL_CAPABILITIES } from \"../capabilities.ts\";\nimport { assertNoNul } from \"../identifiers.ts\";\n\nexport const mysqlDialect: SqlDialect = {\n name: \"mysql\",\n capabilities: MYSQL_CAPABILITIES,\n\n inArrayStrategy: \"expand\",\n tupleInStrategy: \"rowValue\",\n // 8.4.11: `time3_col IN (?, ?)` matches nothing; `=` per value works (26.7 both).\n timeOfDayInStrategy: \"equalities\",\n upsertForm: \"onDuplicateKey\",\n // Measured on mysql 8.4.11, server collation utf8mb4_0900_ai_ci (notes-B.md):\n // a batch proposing 'e' and 'E' stores ONE row and keeps the last one, with\n // no error. The same fold hits accents; `utf8mb4_general_ci` folds a trailing\n // space too (PAD SPACE), and a `DECIMAL(65,30)` key folds '1.0' into '1.00'.\n // A column declaring a `_bin` collation is byte-comparable again: 'e' and 'E'\n // stayed two rows there.\n conflictKeyEquality: {\n foldingScalars: [\"Decimal\"],\n defaultStringMaxLength: 191,\n textIsBinaryByDefault: false,\n // A declared `@collation` can make it byte-comparable again, but only a\n // measured NO PAD one: `SELECT COLLATION_NAME, PAD_ATTRIBUTE FROM\n // information_schema.COLLATIONS` reports 'NO PAD' for exactly `binary` and\n // `utf8mb4_0900_bin`, and 'PAD SPACE' for `utf8mb4_bin` and the 39 other\n // legacy `_bin` collations. Under PAD SPACE the ORM's own upsert statement\n // stored ONE row for a batch proposing 'x' and 'x '. The list the runtime\n // checks against lives in packages/runtime/src/bulk-upsert.ts.\n duplicatesInOneStatement: \"lastWriteWins\",\n },\n // 8.0.19+ row alias. The older `VALUES(col)` function answers with\n // deprecation warning 1287 on this project's 8.4.11 container.\n excludedRowRef: { form: \"rowAlias\", alias: \"new\" },\n doNothingForm: \"insertIgnore\",\n insensitiveLike: \"lower\",\n // `_ci` collations fold `=` and `LIKE` — strict mode casts the OPERAND to\n // BINARY (byte-wise comparison; CAST form, the unary BINARY operator is\n // deprecated since 8.0.27). Operand-side: no assumption about the column's\n // charset, and the cost (index defeat) is documented in dialect-notes.md.\n strictMatchStrategy: \"binary\",\n // Correlated derived tables need MySQL 8.0.14+ (outer references); 8.4\n // needs each operand in its own scalar subquery (dialect.ts).\n greatestForm: \"wrapped-frame\",\n orderByNullsMode: \"emulate\",\n offsetRequiresLimit: { limitText: \"18446744073709551615\" },\n likeEscapeClause: null,\n // JSON_EXTRACT/JSON_UNQUOTE for scalars and strings; JSON_CONTAINS for\n // array containment; `$[0]` / `$[last]` path elements for the edge ops.\n jsonPathMode: \"mysqlExtract\",\n supportedJsonOps: [\n \"equals\",\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n ],\n // Json transport is already plain text here — no param cast needed.\n jsonParamCast: \"\",\n valueCastTypes: Object.freeze({ String: \"CHAR\", Boolean: \"UNSIGNED\", Int: \"SIGNED\", BigInt: \"SIGNED\", Float: \"DOUBLE\", Decimal: \"DECIMAL(65, 30)\", DateTime: \"DATETIME(3)\", Json: \"JSON\", Bytes: \"BINARY\" }),\n lastInsertIdSql: \"SELECT LAST_INSERT_ID() AS `id`\",\n // Probed on mysql 26.7.0: FOR UPDATE / FOR SHARE, each with NOWAIT or SKIP\n // LOCKED. `FOR NO KEY UPDATE` and `FOR KEY SHARE` are PostgreSQL-only and\n // fail to parse here (errno 1064), so they are absent rather than aliased\n // onto a stronger lock.\n rowLockSyntax: {\n strengths: Object.freeze({ update: \"FOR UPDATE\", share: \"FOR SHARE\" }),\n wait: Object.freeze({ wait: \"\", nowait: \" NOWAIT\", skipLocked: \" SKIP LOCKED\" }),\n },\n // `GET_LOCK` is SESSION-scoped: the probe held one, rolled the transaction\n // back, and the lock was still held. It cannot deliver a transaction-scoped\n // advisory lock, so mysql declares none.\n advisoryLockFunctions: null,\n rowDefaultKeyword: true,\n // MySQL CTEs are read-only — no data-modifying steps.\n statementChain: null,\n paramBudget: 10000,\n\n // Booleans store as TINYINT(1); 1/0 is what a comparison against stored rows\n // actually meets, and `TRUE`/`FALSE` are only aliases for them.\n booleanLiteral: { true: \"1\", false: \"0\" },\n\n quoteIdent({ name }) {\n return `\\`${assertNoNul({ name }).replaceAll(\"`\", \"``\")}\\``;\n },\n // Mysql treats BOTH the doubled quote and the backslash as escapes unless the\n // server runs `NO_BACKSLASH_ESCAPES`, which VibeORM never assumes. Verified on\n // mysql 8.4.11: inserting the literal `'a\\\\b'` stores bytes `61 5C 62`, so a\n // single authored backslash MUST be doubled or it eats the next character.\n quoteStringLiteral({ value }) {\n return `'${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"'\", \"''\")}'`;\n },\n placeholder() {\n return \"?\";\n },\n jsonTextProjection({ expression }): string {\n return `CAST(${expression} AS CHAR)`;\n },\n renderDbNow({ offsetSeconds, collector }) {\n // NOW(6): microsecond precision — assignment to a lower-precision column\n // truncates, matching the driver's own Date serialization precision.\n if (offsetSeconds === 0) return \"NOW(6)\";\n return `DATE_ADD(NOW(6), INTERVAL ${collector.add(offsetSeconds)} SECOND)`;\n },\n};\n",
38
+ "/**\n * PostgreSQL dialect. Also serves PGlite — the differences are adapter-level\n * (single connection, bundled extension set), not SQL-text-level.\n */\n\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { POSTGRES_CAPABILITIES } from \"../capabilities.ts\";\nimport { assertNoNul } from \"../identifiers.ts\";\n\nexport const postgresDialect: SqlDialect = {\n name: \"postgres\",\n capabilities: POSTGRES_CAPABILITIES,\n\n inArrayStrategy: \"any\",\n tupleInStrategy: \"rowValue\",\n timeOfDayInStrategy: \"in\",\n upsertForm: \"onConflict\",\n // Measured on postgres 16.14 (notes-B.md): a batch proposing one conflict key\n // twice raises SQLSTATE 21000 (\"ON CONFLICT DO UPDATE command cannot affect\n // row a second time\") — including when the two keys are only equal under a\n // nondeterministic ICU collation, a char(n) trailing-space pad, `numeric`\n // scale or `uuid` case. The engine compares every proposed pair itself.\n // Text is byte-comparable by default because every collation postgres\n // creates is deterministic unless it was explicitly built with\n // `deterministic = false`: 'e' and 'E' stayed two rows on a default-collation\n // column. `numeric` is the exception the ORM cannot see from the encoded\n // value: '1.0' and '1.00' are one row.\n conflictKeyEquality: {\n foldingScalars: [\"Decimal\"],\n textIsBinaryByDefault: true,\n duplicatesInOneStatement: \"reject\",\n },\n excludedRowRef: { form: \"keyword\", name: \"excluded\" },\n doNothingForm: \"onConflictDoNothing\",\n insensitiveLike: \"ilike\",\n // Postgres `=`/`LIKE` are already byte-sensitive — strict mode is a no-op.\n strictMatchStrategy: \"native\",\n greatestForm: \"native\",\n orderByNullsMode: \"native\",\n offsetRequiresLimit: null,\n likeEscapeClause: null,\n jsonPathMode: \"operators\",\n supportedJsonOps: [\n \"equals\",\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n ],\n // Json params bind as TEXT and the server parses (`$n::text::jsonb`):\n // OID-typed drivers (bun:sql) would re-serialize a bare jsonb-slot param\n // and double-encode the document (JsonParamCell, ast.ts).\n jsonParamCast: \"::text::jsonb\",\n valueCastTypes: Object.freeze({ String: \"TEXT\", Boolean: \"BOOLEAN\", Int: \"INTEGER\", BigInt: \"BIGINT\", Float: \"DOUBLE PRECISION\", Decimal: \"NUMERIC\", DateTime: \"TIMESTAMPTZ\", Json: \"JSONB\", Bytes: \"BYTEA\" }),\n lastInsertIdSql: null,\n // All four strengths and all three wait policies parse and behave on\n // PostgreSQL 18.6 and on PGlite 0.5.4 (PostgreSQL 18.3) — probed, not assumed.\n rowLockSyntax: {\n strengths: Object.freeze({\n update: \"FOR UPDATE\",\n noKeyUpdate: \"FOR NO KEY UPDATE\",\n share: \"FOR SHARE\",\n keyShare: \"FOR KEY SHARE\",\n }),\n wait: Object.freeze({ wait: \"\", nowait: \" NOWAIT\", skipLocked: \" SKIP LOCKED\" }),\n },\n // Transaction-scoped only. The session-scoped family (pg_advisory_lock) is\n // deliberately absent: on a pooled connection its lock outlives the caller.\n advisoryLockFunctions: {\n exclusive: Object.freeze({\n wait: \"pg_catalog.pg_advisory_xact_lock\",\n nowait: \"pg_catalog.pg_try_advisory_xact_lock\",\n }),\n shared: Object.freeze({\n wait: \"pg_catalog.pg_advisory_xact_lock_shared\",\n nowait: \"pg_catalog.pg_try_advisory_xact_lock_shared\",\n }),\n keyCast: Object.freeze({ single: \"::bigint\", pair: \"::int4\" }),\n },\n rowDefaultKeyword: true,\n emptyInsert: { form: \"defaultValues\", conflictClause: true },\n // Data-modifying CTEs (`WITH s AS (UPDATE … RETURNING …) SELECT …`) — one\n // snapshot, one atomic statement; PGlite runs the same engine.\n statementChain: \"dataModifyingCte\",\n paramBudget: 30000,\n\n // A real `boolean` type — `true`/`false` are the literals it stores.\n booleanLiteral: { true: \"true\", false: \"false\" },\n\n quoteIdent({ name }) {\n return `\"${assertNoNul({ name }).replaceAll('\"', '\"\"')}\"`;\n },\n // `standard_conforming_strings` has been on by default since postgres 9.1,\n // so a backslash is an ordinary character and only the quote is doubled.\n quoteStringLiteral({ value }) {\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n },\n placeholder({ index }) {\n return `$${index}`;\n },\n jsonTextProjection({ expression }): string {\n return `${expression}::text`;\n },\n renderDbNow({ offsetSeconds, collector }) {\n if (offsetSeconds === 0) return \"now()\";\n return `(now() + make_interval(secs => ${collector.add(offsetSeconds)}))`;\n },\n};\n",
39
+ "/**\n * MySQL dialect (mysql2 adapter lands in P4).\n *\n * Notes pinned by catalog cases:\n * - No RETURNING → renderer omits it and flags `returning: \"omitted\"`; the\n * runtime re-selects by PK (app-generated ids) or insertId.\n * - Upserts use ON DUPLICATE KEY UPDATE (no conflict-target refinement).\n * - OFFSET requires LIMIT → the documented huge-limit idiom.\n * - No NULLS FIRST/LAST → `col IS NULL` emulation terms.\n * - No `ON CONFLICT ... DO NOTHING` → `INSERT IGNORE`, which is broader: it\n * downgrades other row-level errors to warnings too.\n */\n\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { MYSQL_CAPABILITIES } from \"../capabilities.ts\";\nimport { assertNoNul } from \"../identifiers.ts\";\n\nexport const mysqlDialect: SqlDialect = {\n name: \"mysql\",\n capabilities: MYSQL_CAPABILITIES,\n\n inArrayStrategy: \"expand\",\n tupleInStrategy: \"rowValue\",\n // 8.4.11: `time3_col IN (?, ?)` matches nothing; `=` per value works (26.7 both).\n timeOfDayInStrategy: \"equalities\",\n upsertForm: \"onDuplicateKey\",\n // Measured on mysql 8.4.11, server collation utf8mb4_0900_ai_ci (notes-B.md):\n // a batch proposing 'e' and 'E' stores ONE row and keeps the last one, with\n // no error. The same fold hits accents; `utf8mb4_general_ci` folds a trailing\n // space too (PAD SPACE), and a `DECIMAL(65,30)` key folds '1.0' into '1.00'.\n // A column declaring a `_bin` collation is byte-comparable again: 'e' and 'E'\n // stayed two rows there.\n conflictKeyEquality: {\n foldingScalars: [\"Decimal\"],\n defaultStringMaxLength: 191,\n textIsBinaryByDefault: false,\n // A declared `@collation` can make it byte-comparable again, but only a\n // measured NO PAD one: `SELECT COLLATION_NAME, PAD_ATTRIBUTE FROM\n // information_schema.COLLATIONS` reports 'NO PAD' for exactly `binary` and\n // `utf8mb4_0900_bin`, and 'PAD SPACE' for `utf8mb4_bin` and the 39 other\n // legacy `_bin` collations. Under PAD SPACE the ORM's own upsert statement\n // stored ONE row for a batch proposing 'x' and 'x '. The list the runtime\n // checks against lives in packages/runtime/src/bulk-upsert.ts.\n duplicatesInOneStatement: \"lastWriteWins\",\n },\n // 8.0.19+ row alias. The older `VALUES(col)` function answers with\n // deprecation warning 1287 on this project's 8.4.11 container.\n excludedRowRef: { form: \"rowAlias\", alias: \"new\" },\n doNothingForm: \"insertIgnore\",\n insensitiveLike: \"lower\",\n // `_ci` collations fold `=` and `LIKE` — strict mode casts the OPERAND to\n // BINARY (byte-wise comparison; CAST form, the unary BINARY operator is\n // deprecated since 8.0.27). Operand-side: no assumption about the column's\n // charset, and the cost (index defeat) is documented in dialect-notes.md.\n strictMatchStrategy: \"binary\",\n // Correlated derived tables need MySQL 8.0.14+ (outer references); 8.4\n // needs each operand in its own scalar subquery (dialect.ts).\n greatestForm: \"wrapped-frame\",\n orderByNullsMode: \"emulate\",\n offsetRequiresLimit: { limitText: \"18446744073709551615\" },\n likeEscapeClause: null,\n // JSON_EXTRACT/JSON_UNQUOTE for scalars and strings; JSON_CONTAINS for\n // array containment; `$[0]` / `$[last]` path elements for the edge ops.\n jsonPathMode: \"mysqlExtract\",\n supportedJsonOps: [\n \"equals\",\n \"string_contains\",\n \"string_starts_with\",\n \"string_ends_with\",\n \"array_contains\",\n \"array_starts_with\",\n \"array_ends_with\",\n ],\n // Json transport is already plain text here — no param cast needed.\n jsonParamCast: \"\",\n valueCastTypes: Object.freeze({ String: \"CHAR\", Boolean: \"UNSIGNED\", Int: \"SIGNED\", BigInt: \"SIGNED\", Float: \"DOUBLE\", Decimal: \"DECIMAL(65, 30)\", DateTime: \"DATETIME(3)\", Json: \"JSON\", Bytes: \"BINARY\" }),\n lastInsertIdSql: \"SELECT LAST_INSERT_ID() AS `id`\",\n // Probed on mysql 26.7.0: FOR UPDATE / FOR SHARE, each with NOWAIT or SKIP\n // LOCKED. `FOR NO KEY UPDATE` and `FOR KEY SHARE` are PostgreSQL-only and\n // fail to parse here (errno 1064), so they are absent rather than aliased\n // onto a stronger lock.\n rowLockSyntax: {\n strengths: Object.freeze({ update: \"FOR UPDATE\", share: \"FOR SHARE\" }),\n wait: Object.freeze({ wait: \"\", nowait: \" NOWAIT\", skipLocked: \" SKIP LOCKED\" }),\n },\n // `GET_LOCK` is SESSION-scoped: the probe held one, rolled the transaction\n // back, and the lock was still held. It cannot deliver a transaction-scoped\n // advisory lock, so mysql declares none.\n advisoryLockFunctions: null,\n rowDefaultKeyword: true,\n emptyInsert: { form: \"emptyRow\" },\n // MySQL CTEs are read-only — no data-modifying steps.\n statementChain: null,\n paramBudget: 10000,\n\n // Booleans store as TINYINT(1); 1/0 is what a comparison against stored rows\n // actually meets, and `TRUE`/`FALSE` are only aliases for them.\n booleanLiteral: { true: \"1\", false: \"0\" },\n\n quoteIdent({ name }) {\n return `\\`${assertNoNul({ name }).replaceAll(\"`\", \"``\")}\\``;\n },\n // Mysql treats BOTH the doubled quote and the backslash as escapes unless the\n // server runs `NO_BACKSLASH_ESCAPES`, which VibeORM never assumes. Verified on\n // mysql 8.4.11: inserting the literal `'a\\\\b'` stores bytes `61 5C 62`, so a\n // single authored backslash MUST be doubled or it eats the next character.\n quoteStringLiteral({ value }) {\n return `'${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"'\", \"''\")}'`;\n },\n placeholder() {\n return \"?\";\n },\n jsonTextProjection({ expression }): string {\n return `CAST(${expression} AS CHAR)`;\n },\n renderDbNow({ offsetSeconds, collector }) {\n // NOW(6): microsecond precision — assignment to a lower-precision column\n // truncates, matching the driver's own Date serialization precision.\n if (offsetSeconds === 0) return \"NOW(6)\";\n return `DATE_ADD(NOW(6), INTERVAL ${collector.add(offsetSeconds)} SECOND)`;\n },\n};\n",
40
40
  "/**\n * Dialect registry: the one place a `Dialect` name becomes a `SqlDialect`.\n *\n * Runtime and adapters resolve through this map so nobody re-implements the\n * lookup (and nobody can quietly forget a dialect — the Record type is total).\n */\n\nimport type { Dialect } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { postgresDialect } from \"./postgres.ts\";\nimport { sqliteDialect } from \"./sqlite.ts\";\nimport { mysqlDialect } from \"./mysql.ts\";\n\nexport const SQL_DIALECTS: Readonly<Record<Dialect, SqlDialect>> = {\n postgres: postgresDialect,\n sqlite: sqliteDialect,\n mysql: mysqlDialect,\n};\n\n/** The SQL dialect a dialect name selects. */\nexport function getSqlDialect(params: { dialect: Dialect }): SqlDialect {\n return SQL_DIALECTS[params.dialect];\n}\n",
41
41
  "import type { SqlDialect } from \"../dialect.ts\";\n\n/**\n * Compare both JSON trees by decoded key/index paths, node type and atomic value.\n * Object order and JSON escape spelling do not matter; array positions do.\n * Container nodes retain empty-object/array distinctions, and multiplicity stops\n * duplicate object members from disappearing as they would in a set difference.\n * SQL NULL remains unknown. The tree input is guarded against non-JSON scalar\n * text even when SQLite evaluates this expression before the outer type guard.\n */\nexport function renderSqliteJsonEquality(params: { dialect: SqlDialect; left: string; right: string }): string {\n const q = (name: string): string => params.dialect.quoteIdent({ name });\n const values = q(\"__vibe_json_values\");\n const tree = q(\"__vibe_json_tree\");\n const paths = q(\"__vibe_json_paths\");\n const child = q(\"__vibe_json_child\");\n const parent = q(\"__vibe_json_parent\");\n const [side, id, parentId, key, type, atom, path] = [\"side\", \"id\", \"parent\", \"key\", \"type\", \"atom\", \"path\"].map(q);\n const left = `${values}.${q(\"left\")}`;\n const right = `${values}.${q(\"right\")}`;\n return `(SELECT CASE WHEN ${left} IS NULL THEN NULL ELSE NOT EXISTS (`\n + `WITH RECURSIVE ${tree} AS (`\n + `SELECT 1 AS ${side}, ${id}, ${parentId}, ${key}, ${type}, ${atom} FROM json_tree(CASE WHEN json_valid(${left}) THEN ${left} ELSE 'null' END) `\n + `UNION ALL SELECT -1 AS ${side}, ${id}, ${parentId}, ${key}, ${type}, ${atom} FROM json_tree(${right})`\n + `), ${paths} (${side}, ${id}, ${path}, ${type}, ${atom}) AS (`\n + `SELECT ${side}, ${id}, json_array(), ${type}, ${atom} FROM ${tree} WHERE ${parentId} IS NULL `\n + `UNION ALL SELECT ${child}.${side}, ${child}.${id}, json_insert(${parent}.${path}, '$[#]', ${child}.${key}), ${child}.${type}, ${child}.${atom} `\n + `FROM ${tree} AS ${child} JOIN ${paths} AS ${parent} ON ${child}.${side} = ${parent}.${side} AND ${child}.${parentId} = ${parent}.${id}`\n + `) SELECT 1 FROM ${paths} GROUP BY ${path}, CASE WHEN ${type} IN ('integer', 'real') THEN 'number' ELSE ${type} END, ${atom} HAVING SUM(${side}) <> 0`\n + `) END FROM (SELECT ${params.left} AS ${q(\"left\")}, ${params.right} AS ${q(\"right\")}) AS ${values})`;\n}\n",
42
42
  "import { unsupportedCapability } from \"@vibeorm/schema\";\nimport type { Dialect } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\nimport type { SqlStatement } from \"../ast.ts\";\nimport type { PostgresExplainOptions, PostgresWorkloadQuery } from \"./postgres-diagnostics.ts\";\n\n/** Fixed, parameterless diagnostics whose text never varies. */\nexport type FixedDiagnosticQuery = \"postgresJsonWire\" | \"sqliteTriggers\";\n\n/**\n * Fixed diagnostic queries; execution and result interpretation belong to callers.\n *\n * Three variants, discriminated by `query`:\n * - a fixed transport/catalog probe,\n * - `postgresExplain`, which wraps another statement (EPIC 5),\n * - a read-only PostgreSQL workload/catalog read (EPIC 5).\n */\nexport type DiagnosticStatement =\n | { readonly kind: \"diagnostic\"; readonly query: FixedDiagnosticQuery }\n | {\n readonly kind: \"diagnostic\";\n readonly query: \"postgresExplain\";\n readonly statement: SqlStatement;\n readonly options?: PostgresExplainOptions;\n }\n | {\n readonly kind: \"diagnostic\";\n readonly query: PostgresWorkloadQuery;\n readonly schema?: string;\n readonly table?: string;\n readonly limit?: number;\n readonly key?: string;\n readonly value?: string | null;\n };\n\nconst QUERIES: Readonly<Record<FixedDiagnosticQuery, { readonly dialect: Dialect; readonly text: string }>> = Object.freeze({\n postgresJsonWire: { dialect: \"postgres\", text: `SELECT '{\"__vibeorm\":1}'::jsonb AS \"probe\"` },\n sqliteTriggers: { dialect: \"sqlite\", text: \"SELECT name, tbl_name, sql FROM sqlite_master WHERE type = 'trigger'\" },\n});\n\n/** Render a diagnostic only on the dialect whose transport or catalog it describes. */\nexport function renderDiagnostic(params: { dialect: SqlDialect; query: FixedDiagnosticQuery }): RenderedQuery {\n const query = QUERIES[params.query];\n if (params.dialect.name !== query.dialect) {\n throw unsupportedCapability({ dialect: params.dialect.name, feature: params.query, hint: `this diagnostic requires ${query.dialect}` });\n }\n return { text: query.text, values: [], returning: \"none\" };\n}\n\n/** True for the two fixed probes; everything else is an EPIC 5 PostgreSQL diagnostic. */\nexport function isFixedDiagnostic(params: { query: DiagnosticStatement[\"query\"] }): params is { query: FixedDiagnosticQuery } {\n return params.query === \"postgresJsonWire\" || params.query === \"sqliteTriggers\";\n}\n",
43
43
  "/**\n * PostgreSQL query-diagnostic SQL (EPIC 5).\n *\n * Two kinds of text live here and nowhere else:\n *\n * - the `EXPLAIN` wrapper, which prefixes an already-rendered statement and\n * keeps its placeholders and its parameters intact — a plan is never taken\n * over SQL with values inlined into the text;\n * - read-only catalog and statistics reads used to interpret a plan.\n *\n * What this module deliberately cannot express: `CREATE EXTENSION`,\n * `pg_stat_statements_reset()`, `ALTER SYSTEM`, `SET` outside a caller's own\n * transaction, and `CREATE INDEX`. Diagnostics observe a server; they never\n * change one.\n */\n\nimport { VibeError, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\nimport { ParamCollector } from \"../params.ts\";\n\n// ─── EXPLAIN ──────────────────────────────────────────────────────\n\n/**\n * `EXPLAIN` options. `analyze` EXECUTES the statement — the runtime gates it\n * behind an explicit confirmation, refuses writes and multi-statement text,\n * and warns; the renderer only writes the text it is asked for.\n */\nexport type PostgresExplainOptions = {\n /** Run the statement and report observed rows and milliseconds. EXECUTES SQL. */\n readonly analyze?: boolean;\n /** Buffer accounting; only meaningful once the statement actually ran. */\n readonly buffers?: boolean;\n readonly verbose?: boolean;\n readonly settings?: boolean;\n};\n\n/**\n * Wrap a rendered statement in `EXPLAIN (…)`. Option order is fixed so the\n * text is stable and reviewable; `FORMAT JSON` is always present because the\n * parser reads the structured form, never the human text.\n */\nexport function renderPostgresExplain(params: {\n dialect: SqlDialect;\n query: RenderedQuery;\n options?: PostgresExplainOptions;\n}): RenderedQuery {\n const { dialect, query, options } = params;\n requirePostgres({ dialect, feature: \"query plan inspection (EXPLAIN)\" });\n const parts: string[] = [];\n if (options?.analyze === true) parts.push(\"ANALYZE\");\n parts.push(\"FORMAT JSON\");\n if (options?.verbose === true) parts.push(\"VERBOSE\");\n if (options?.buffers === true) parts.push(\"BUFFERS\");\n if (options?.settings === true) parts.push(\"SETTINGS\");\n return { text: `EXPLAIN (${parts.join(\", \")}) ${query.text}`, values: [...query.values], returning: \"none\" };\n}\n\n// ─── Read-only workload and catalog reads ─────────────────────────\n\n/** The closed set of read-only diagnostic reads. Every one of them is a SELECT. */\nexport type PostgresWorkloadQuery =\n | \"planContext\"\n | \"statementExtension\"\n | \"statementInfo\"\n | \"statementSnapshot\"\n | \"indexes\"\n | \"tableStats\"\n | \"sessionBegin\"\n | \"sessionReadOnly\"\n | \"sessionCommit\"\n | \"sessionRollback\"\n | \"setContext\";\n\n/** The exact SQL text of every read-only diagnostic read, for statement-level routing in tests. */\nexport const POSTGRES_DIAGNOSTIC_SQL: Readonly<Record<PostgresWorkloadQuery, string>> = Object.freeze({\n planContext: `SELECT current_user::text AS \"currentUser\", session_user::text AS \"sessionUser\", r.rolsuper AS \"superuser\", r.rolbypassrls AS \"bypassRls\", pg_catalog.current_setting('server_version_num') AS \"serverVersionNum\", pg_catalog.current_database()::text AS \"database\" FROM pg_catalog.pg_roles r WHERE r.rolname = current_user`,\n\n statementExtension: `SELECT (SELECT e.extversion FROM pg_catalog.pg_extension e WHERE e.extname = 'pg_stat_statements') AS \"installedVersion\", EXISTS (SELECT 1 FROM pg_catalog.pg_available_extensions a WHERE a.name = 'pg_stat_statements') AS \"available\", (SELECT n.nspname::text FROM pg_catalog.pg_extension e JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace WHERE e.extname = 'pg_stat_statements') AS \"schema\", pg_catalog.current_setting('server_version_num') AS \"serverVersionNum\", pg_catalog.pg_has_role(current_user, 'pg_read_all_stats', 'MEMBER') AS \"readAllStats\", current_user::text AS \"currentUser\"`,\n\n // %SCHEMA% is substituted with dialect.quoteIdent — never with a parameter:\n // the extension's schema is an identifier, and PostgreSQL takes no parameter\n // in a FROM clause.\n statementInfo: `SELECT i.stats_reset::text AS \"statsReset\" FROM %SCHEMA%.pg_stat_statements_info i`,\n\n statementSnapshot: `SELECT s.queryid::text AS \"queryId\", s.query AS \"query\", s.calls AS \"calls\", s.total_exec_time AS \"totalExecTimeMs\", s.mean_exec_time AS \"meanExecTimeMs\", s.min_exec_time AS \"minExecTimeMs\", s.max_exec_time AS \"maxExecTimeMs\", s.rows AS \"rows\", s.shared_blks_hit AS \"sharedBlocksHit\", s.shared_blks_read AS \"sharedBlocksRead\", s.temp_blks_read AS \"tempBlocksRead\", s.temp_blks_written AS \"tempBlocksWritten\" FROM %SCHEMA%.pg_stat_statements s JOIN pg_catalog.pg_database d ON d.oid = s.dbid WHERE d.datname = pg_catalog.current_database() ORDER BY s.total_exec_time DESC LIMIT %LIMIT%`,\n\n indexes: `SELECT i.relname::text AS \"index\", pg_catalog.pg_get_indexdef(x.indexrelid) AS \"definition\", x.indisunique AS \"unique\", x.indisprimary AS \"primary\", x.indisvalid AS \"valid\", pg_catalog.pg_relation_size(x.indexrelid) AS \"indexBytes\" FROM pg_catalog.pg_index x JOIN pg_catalog.pg_class c ON c.oid = x.indrelid JOIN pg_catalog.pg_class i ON i.oid = x.indexrelid JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = %SCHEMA_PARAM% AND c.relname = %TABLE_PARAM% ORDER BY i.relname`,\n\n // Transaction control for a diagnostic session. The plan and the context that\n // shapes it must sit in ONE transaction, and the executing mode runs inside a\n // read-only transaction — defence in depth, NOT a proof of safety (a SELECT\n // can still call a function with side effects).\n sessionBegin: \"BEGIN\",\n sessionReadOnly: \"SET TRANSACTION READ ONLY\",\n sessionCommit: \"COMMIT\",\n sessionRollback: \"ROLLBACK\",\n\n // The same transaction-local settings the client binds for native RLS, with\n // the same `vibeorm.` prefix and the same `is_local = true`: a plan taken\n // under different settings is a plan of a different query.\n setContext: `SELECT pg_catalog.set_config(%KEY%, %VALUE%, true)`,\n\n tableStats: `SELECT c.reltuples::float8 AS \"estimatedRows\", c.relpages::bigint AS \"pages\", pg_catalog.pg_table_size(c.oid) AS \"tableBytes\", c.relrowsecurity AS \"rlsEnabled\", c.relforcerowsecurity AS \"rlsForced\", (SELECT s.last_analyze::text FROM pg_catalog.pg_stat_all_tables s WHERE s.relid = c.oid) AS \"lastAnalyze\", (SELECT s.last_autoanalyze::text FROM pg_catalog.pg_stat_all_tables s WHERE s.relid = c.oid) AS \"lastAutoAnalyze\" FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = %SCHEMA_PARAM% AND c.relname = %TABLE_PARAM%`,\n});\n\n/** Bounds on the workload snapshot; an unbounded diagnostic read is not a diagnostic. */\nexport const POSTGRES_WORKLOAD_LIMITS: { readonly minLimit: number; readonly maxLimit: number } = Object.freeze({\n minLimit: 1,\n maxLimit: 1000,\n});\n\nfunction requirePostgres(params: { dialect: SqlDialect; feature: string }): void {\n if (params.dialect.name !== \"postgres\") {\n throw unsupportedCapability({\n dialect: params.dialect.name,\n feature: params.feature,\n hint: \"plan inspection and workload statistics are PostgreSQL-shaped; portable operation tracing works on every dialect\",\n });\n }\n}\n\n/**\n * Render one read-only diagnostic read. Identifiers (the extension's schema)\n * go through `dialect.quoteIdent`; every value goes through a\n * {@link ParamCollector}, so no caller string is ever concatenated into SQL.\n */\nexport function renderPostgresWorkload(params: {\n dialect: SqlDialect;\n query: PostgresWorkloadQuery;\n /** Extension schema (statementInfo/statementSnapshot) or table schema (indexes/tableStats). */\n schema?: string;\n table?: string;\n limit?: number;\n /** Fully-qualified setting name for `setContext` (the caller applies the prefix). */\n key?: string;\n /** Setting value for `setContext`; `null` binds the empty string, which reads as absent. */\n value?: string | null;\n}): RenderedQuery {\n const { dialect, query, schema, table, limit } = params;\n requirePostgres({ dialect, feature: `the \"${query}\" diagnostic read` });\n const collector = new ParamCollector(dialect);\n let text = POSTGRES_DIAGNOSTIC_SQL[query];\n\n if (query === \"statementInfo\" || query === \"statementSnapshot\") {\n text = text.replace(\"%SCHEMA%\", dialect.quoteIdent({ name: requireArg({ value: schema, name: \"schema\", query }) }));\n }\n if (query === \"statementSnapshot\") {\n const bounded = limit ?? 20;\n if (!Number.isInteger(bounded) || bounded < POSTGRES_WORKLOAD_LIMITS.minLimit || bounded > POSTGRES_WORKLOAD_LIMITS.maxLimit) {\n throw new VibeError({\n code: \"VIBE_CONFIG\",\n message: `workload snapshot limit must be an integer between ${POSTGRES_WORKLOAD_LIMITS.minLimit} and ${POSTGRES_WORKLOAD_LIMITS.maxLimit}, got ${String(limit)}`,\n meta: { limit },\n });\n }\n text = text.replace(\"%LIMIT%\", collector.add(bounded));\n }\n if (query === \"setContext\") {\n text = text\n .replace(\"%KEY%\", collector.add(requireArg({ value: params.key, name: \"key\", query })))\n .replace(\"%VALUE%\", collector.add(params.value ?? \"\"));\n }\n if (query === \"indexes\" || query === \"tableStats\") {\n text = text\n .replace(\"%SCHEMA_PARAM%\", collector.add(requireArg({ value: schema, name: \"schema\", query })))\n .replace(\"%TABLE_PARAM%\", collector.add(requireArg({ value: table, name: \"table\", query })));\n }\n return { text, values: collector.values, returning: \"none\" };\n}\n\nfunction requireArg(params: { value: string | undefined; name: string; query: PostgresWorkloadQuery }): string {\n const { value, name, query } = params;\n if (value === undefined || value.length === 0) {\n throw new VibeError({\n code: \"VIBE_CONFIG\",\n message: `the \"${query}\" diagnostic read requires a ${name}`,\n meta: { query, argument: name },\n });\n }\n return value;\n}\n",
44
44
  "/** PostgreSQL readiness catalog reads and temporary-clone DDL. Runtime owns execution order. */\nimport { unsupportedCapability } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\nimport { ParamCollector } from \"../params.ts\";\nimport { NATIVE_RLS } from \"./postgres-rls.ts\";\n\n/** Throwaway policy identity; never installed on a live table by readiness. */\nexport const NATIVE_RLS_PROBE_POLICY: \"vibeorm_probe\" = \"vibeorm_probe\";\n\n/** The eight independent catalog reads, folded into one statement by `catalog`. */\nconst CATALOG_READS: {\n readonly identity: string;\n readonly elevatedRoles: string;\n readonly schemaControl: string;\n readonly tables: string;\n readonly policies: string;\n readonly views: string;\n readonly routines: string;\n readonly triggers: string;\n} = Object.freeze({\n identity: `SELECT current_user::text AS \"currentUser\",\n session_user::text AS \"sessionUser\",\n r.rolsuper AS \"super\",\n r.rolbypassrls AS \"bypassRls\",\n r.rolcreatedb AS \"createDb\",\n r.rolcreaterole AS \"createRole\",\n pg_catalog.current_setting('server_version_num') AS \"serverVersionNum\",\n pg_catalog.pg_backend_pid()::text AS \"backendPid\",\n pg_catalog.pg_postmaster_start_time()::text AS \"instanceStart\",\n (SELECT a.backend_start::text FROM pg_catalog.pg_stat_activity a WHERE a.pid = pg_catalog.pg_backend_pid()) AS \"backendStart\",\n pg_catalog.has_database_privilege(current_user, pg_catalog.current_database(), 'TEMP') AS \"tempPrivilege\"\nFROM pg_catalog.pg_roles r\nWHERE r.rolname = current_user`,\n\n // Membership is the RECURSIVE role graph: pg_has_role(..., 'MEMBER') is true\n // for indirect membership and for NOINHERIT roles the runtime could SET ROLE\n // into. Predefined pg_* roles are flagged wholesale — pg_execute_server_program,\n // pg_read_server_files and pg_write_server_files reach the host even with\n // rolbypassrls = false, and pg_database_owner owns the public schema.\n elevatedRoles: `SELECT r.rolname::text AS \"role\",\n r.rolsuper AS \"super\",\n r.rolbypassrls AS \"bypassRls\",\n r.rolcreaterole AS \"createRole\",\n r.rolcreatedb AS \"createDb\"\nFROM pg_catalog.pg_roles r\nWHERE r.rolname <> current_user\n AND pg_catalog.pg_has_role(current_user, r.oid, 'MEMBER')\n AND (r.rolsuper OR r.rolbypassrls OR r.rolcreaterole OR r.rolcreatedb OR r.rolname LIKE 'pg\\\\_%')\nORDER BY r.rolname`,\n\n // Owning the schema means DROP SCHEMA ... CASCADE reaches every protected\n // table inside it; owning the database reaches the schema.\n schemaControl: `SELECT n.nspname::text AS \"schema\",\n pg_catalog.pg_get_userbyid(n.nspowner)::text AS \"owner\",\n pg_catalog.pg_has_role(current_user, n.nspowner, 'MEMBER') AS \"ownerAccess\",\n EXISTS (\n SELECT 1 FROM pg_catalog.pg_roles r\n WHERE pg_catalog.pg_has_role(current_user, r.oid, 'MEMBER')\n AND pg_catalog.has_schema_privilege(r.oid, n.oid, 'CREATE')\n ) AS \"create\",\n pg_catalog.current_database()::text AS \"database\",\n pg_catalog.pg_get_userbyid(d.datdba)::text AS \"databaseOwner\",\n pg_catalog.pg_has_role(current_user, d.datdba, 'MEMBER') AS \"databaseOwnerAccess\"\nFROM pg_catalog.pg_namespace n\nJOIN pg_catalog.pg_database d ON d.datname = pg_catalog.current_database()\nWHERE n.nspname = $1`,\n\n // ownerAccess covers direct ownership, inherited membership and SET ROLE\n // reach alike. TRUNCATE is checked for every role the runtime can reach,\n // because has_table_privilege(current_user, ...) alone misses a privilege\n // held by a NOINHERIT role the runtime may SET ROLE into.\n tables: `SELECT c.relname::text AS \"table\",\n c.relrowsecurity AS \"rlsEnabled\",\n c.relforcerowsecurity AS \"rlsForced\",\n pg_catalog.pg_get_userbyid(c.relowner)::text AS \"owner\",\n pg_catalog.pg_has_role(current_user, c.relowner, 'MEMBER') AS \"ownerAccess\",\n EXISTS (\n SELECT 1 FROM pg_catalog.pg_roles r\n WHERE pg_catalog.pg_has_role(current_user, r.oid, 'MEMBER')\n AND pg_catalog.has_table_privilege(r.oid, c.oid, 'TRUNCATE')\n ) AS \"truncate\"\nFROM pg_catalog.pg_class c\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname = $1 AND c.relkind IN ('r', 'p')\nORDER BY c.relname`,\n\n policies: `SELECT c.relname::text AS \"table\",\n p.polname::text AS \"name\",\n p.polpermissive AS \"permissive\",\n p.polcmd::text AS \"command\",\n (p.polroles = '{0}'::oid[]) AS \"toPublic\",\n (p.polqual IS NOT NULL) AS \"hasUsing\",\n (p.polwithcheck IS NOT NULL) AS \"hasWithCheck\"\nFROM pg_catalog.pg_policy p\nJOIN pg_catalog.pg_class c ON c.oid = p.polrelid\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname = $1\nORDER BY c.relname, p.polname`,\n\n // Only objects this role can actually reach are reported.\n views: `SELECT n.nspname::text AS \"schema\",\n c.relname::text AS \"name\",\n pg_catalog.pg_get_userbyid(c.relowner)::text AS \"owner\",\n (c.relkind = 'm') AS \"materialized\",\n (COALESCE((\n SELECT o.option_value FROM pg_catalog.pg_options_to_table(c.reloptions) AS o\n WHERE o.option_name = 'security_invoker'\n ), 'false') = 'true') AS \"securityInvoker\"\nFROM pg_catalog.pg_class c\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname NOT IN ('pg_catalog', 'information_schema')\n AND c.relkind IN ('v', 'm')\n AND EXISTS (\n SELECT 1 FROM pg_catalog.pg_roles r\n WHERE pg_catalog.pg_has_role(current_user, r.oid, 'MEMBER')\n AND pg_catalog.has_schema_privilege(r.oid, n.oid, 'USAGE')\n AND (pg_catalog.has_table_privilege(r.oid, c.oid, 'SELECT')\n OR pg_catalog.has_any_column_privilege(r.oid, c.oid, 'SELECT'))\n )\nORDER BY n.nspname, c.relname`,\n\n routines: `SELECT n.nspname::text AS \"schema\",\n p.proname::text AS \"name\",\n pg_catalog.pg_get_userbyid(p.proowner)::text AS \"owner\"\nFROM pg_catalog.pg_proc p\nJOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace\nWHERE n.nspname NOT IN ('pg_catalog', 'information_schema')\n AND p.prosecdef\n AND EXISTS (\n SELECT 1 FROM pg_catalog.pg_roles r\n WHERE pg_catalog.pg_has_role(current_user, r.oid, 'MEMBER')\n AND pg_catalog.has_schema_privilege(r.oid, n.oid, 'USAGE')\n AND pg_catalog.has_function_privilege(r.oid, p.oid, 'EXECUTE')\n )\nORDER BY n.nspname, p.proname`,\n\n triggers: `SELECT c.relname::text AS \"table\",\n t.tgname::text AS \"name\",\n f.proname::text AS \"function\",\n pg_catalog.pg_get_userbyid(f.proowner)::text AS \"owner\",\n f.prosecdef AS \"securityDefiner\"\nFROM pg_catalog.pg_trigger t\nJOIN pg_catalog.pg_class c ON c.oid = t.tgrelid\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nJOIN pg_catalog.pg_proc f ON f.oid = t.tgfoid\nWHERE n.nspname = $1\n AND NOT t.tgisinternal\n AND f.prosecdef\nORDER BY c.relname, t.tgname`,\n});\n\n/** The reads `catalog` folds, in the order their JSON columns appear. */\nexport const RLS_READINESS_CATALOG_KEYS: readonly (\"identity\" | \"elevatedRoles\" | \"schemaControl\" | \"tables\" | \"policies\" | \"views\" | \"routines\" | \"triggers\")[] =\n Object.freeze([\"identity\", \"elevatedRoles\", \"schemaControl\", \"tables\", \"policies\", \"views\", \"routines\", \"triggers\"] as const);\n\n/**\n * One statement, eight result sets. Each subquery body is the single-read SQL\n * VERBATIM: same predicates, same privileges, same live catalog, read on the\n * same connection under the same role. Only the transport changes.\n *\n * `json_agg(...)::text` is deliberate. Drivers disagree about `json` (node-pg\n * parses it into JS values, others hand back the text), and a security flag\n * that arrives as the STRING \"false\" is truthy. Casting to text gives one\n * shape everywhere, which the reader parses itself — so a boolean stays a\n * boolean. `json_agg` over zero rows is NULL, which the reader can tell apart\n * from a value it could not read.\n *\n * A second, free property: the eight facts now share ONE snapshot. Under READ\n * COMMITTED eight separate statements each take their own.\n */\nconst COMPOSITE_CATALOG: string = `SELECT\\n${RLS_READINESS_CATALOG_KEYS.map(\n (key) => ` (SELECT json_agg(t)::text FROM (\\n${CATALOG_READS[key]}\\n ) t) AS \"${key}\"`,\n).join(\",\\n\")}`;\n\n/** Read-only catalog SQL; exported for exact statement routing in adapter tests. */\nexport const RLS_READINESS_SQL: {\n readonly identity: string;\n readonly elevatedRoles: string;\n readonly schemaControl: string;\n readonly tables: string;\n readonly policies: string;\n readonly expressions: string;\n readonly views: string;\n readonly routines: string;\n readonly triggers: string;\n readonly catalog: string;\n readonly readSearchPath: string;\n readonly setSearchPath: string;\n} = Object.freeze({\n identity: CATALOG_READS.identity,\n elevatedRoles: CATALOG_READS.elevatedRoles,\n schemaControl: CATALOG_READS.schemaControl,\n tables: CATALOG_READS.tables,\n policies: CATALOG_READS.policies,\n\n // Both sides of the comparison are deparsed by THIS server, in ONE\n // statement, in one transaction, under the same empty search_path.\n expressions: `SELECT c.relname::text AS \"table\",\n p.polname::text AS \"name\",\n (n.nspname <> $1) AS \"probe\",\n pg_catalog.pg_get_expr(p.polqual, p.polrelid) AS \"using\",\n pg_catalog.pg_get_expr(p.polwithcheck, p.polrelid) AS \"withCheck\"\nFROM pg_catalog.pg_policy p\nJOIN pg_catalog.pg_class c ON c.oid = p.polrelid\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE (n.nspname = $1 AND p.polname = $2)\n OR (c.relnamespace = pg_catalog.pg_my_temp_schema() AND p.polname = $3)\nORDER BY c.relname, p.polname`,\n\n views: CATALOG_READS.views,\n routines: CATALOG_READS.routines,\n triggers: CATALOG_READS.triggers,\n catalog: COMPOSITE_CATALOG,\n\n readSearchPath: `SELECT pg_catalog.current_setting('search_path') AS \"searchPath\"`,\n setSearchPath: `SELECT pg_catalog.set_config('search_path', $1, true)`,\n});\n\n/** The closed set of catalog queries used by readiness. */\nexport type RlsReadinessQuery = keyof typeof RLS_READINESS_SQL;\n\nfunction requireRls(params: { dialect: SqlDialect }): void {\n if (!params.dialect.capabilities.nativeRowLevelSecurity) {\n throw unsupportedCapability({ dialect: params.dialect.name, feature: \"nativeRowLevelSecurity\" });\n }\n}\n\n/** Parameterized catalog read, or transaction-local search-path setting. */\nexport function renderRlsReadinessQuery(params: {\n dialect: SqlDialect;\n query: RlsReadinessQuery;\n searchPath?: string;\n}): RenderedQuery {\n requireRls(params);\n const values = params.query === \"setSearchPath\" ? [params.searchPath ?? \"\"]\n : [NATIVE_RLS.tableSchema, NATIVE_RLS.policyName, NATIVE_RLS_PROBE_POLICY];\n const collector = new ParamCollector(params.dialect);\n const slots = new Map<string, string>();\n const text = RLS_READINESS_SQL[params.query].replace(/\\$(\\d+)/g, (slot, index: string) => {\n let placeholder = slots.get(slot);\n if (placeholder === undefined) {\n placeholder = collector.add(values[Number(index) - 1]);\n slots.set(slot, placeholder);\n }\n return placeholder;\n });\n return { text, values: collector.values, returning: \"none\" };\n}\n\n/** Clone only physical columns/types, on the same backend and with the same table name. */\nexport function renderRlsProbeTable(params: { dialect: SqlDialect; table: string; action: \"create\" | \"drop\" }): RenderedQuery {\n requireRls(params);\n const name = params.dialect.quoteIdent({ name: params.table });\n const schema = params.dialect.quoteIdent({ name: params.action === \"create\" ? NATIVE_RLS.tableSchema : \"pg_temp\" });\n const text = params.action === \"create\"\n ? `CREATE TEMP TABLE ${name} (LIKE ${schema}.${name}) ON COMMIT DROP`\n : `DROP TABLE ${schema}.${name}`;\n return { text, values: [], returning: \"none\" };\n}\n\n/** Save/empty/restore around migration policy DDL without replacing the operator's path. */\nexport function renderRlsPolicyPath(params: { dialect: SqlDialect; stage: \"save\" | \"empty\" | \"restore\" }): RenderedQuery {\n requireRls(params);\n const text = params.stage === \"save\"\n ? \"SELECT pg_catalog.set_config('vibeorm.rls_saved_search_path', pg_catalog.current_setting('search_path'), true)\"\n : params.stage === \"empty\"\n ? \"SELECT pg_catalog.set_config('search_path', '', true)\"\n : \"SELECT pg_catalog.set_config('search_path', pg_catalog.current_setting('vibeorm.rls_saved_search_path'), true)\";\n return { text, values: [], returning: \"none\" };\n}\n",
45
45
  "/** Native RLS text contract. PostgreSQL/PGlite only, with no rewriting fallback. */\nimport { RlsContextError, VibeError, assertNativeRlsAdmission, assertValidSchemaIR, unsupportedCapability, validateRlsContextIR } from \"@vibeorm/schema\";\nimport type { FieldIR, ModelIR, RlsContextIR, RlsContextScalar, SchemaIR } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { ParamCollector } from \"../params.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\n\n/** Managed identity and namespace, shared by migration and readiness checks. */\nexport const NATIVE_RLS: {\n readonly policyName: \"vibeorm_managed\";\n readonly tableSchema: \"public\";\n readonly settingPrefix: \"vibeorm.\";\n readonly parentAlias: \"parent\";\n} = Object.freeze({ policyName: \"vibeorm_managed\", tableSchema: \"public\", settingPrefix: \"vibeorm.\", parentAlias: \"parent\" });\n\nconst COLUMN_TYPES: Readonly<Record<RlsContextScalar, { readonly default: string; readonly native: Readonly<Record<string, string>> }>> = {\n String: { default: \"text\", native: { text: \"text\", varchar: \"varchar\", charactervarying: \"varchar\", uuid: \"uuid\" } },\n Boolean: { default: \"boolean\", native: { boolean: \"boolean\", bool: \"boolean\" } },\n Int: { default: \"integer\", native: { integer: \"integer\", int: \"integer\", int4: \"integer\", smallint: \"smallint\", int2: \"smallint\" } },\n BigInt: { default: \"bigint\", native: { bigint: \"bigint\", int8: \"bigint\" } },\n Float: { default: \"double precision\", native: { doubleprecision: \"double precision\", float8: \"double precision\", real: \"real\", float4: \"real\" } },\n Decimal: { default: \"numeric\", native: { numeric: \"numeric\", decimal: \"numeric\" } },\n DateTime: { default: \"timestamptz\", native: { timestamptz: \"timestamptz\", timestampwithtimezone: \"timestamptz\", timestamp: \"timestamp\", timestampwithouttimezone: \"timestamp\", date: \"date\" } },\n};\n\nfunction requireRls(params: { dialect: SqlDialect }): void {\n if (!params.dialect.capabilities.nativeRowLevelSecurity) {\n throw unsupportedCapability({ dialect: params.dialect.name, feature: \"nativeRowLevelSecurity\" });\n }\n}\n\nfunction identifier(params: { dialect: SqlDialect; name: string }): string {\n if (typeof params.name !== \"string\" || params.name.length === 0 || params.name.includes(\"\\0\") || new TextEncoder().encode(params.name).length > 63) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Native RLS identifiers must be nonempty PostgreSQL identifiers of at most 63 bytes\" });\n }\n return params.dialect.quoteIdent({ name: params.name });\n}\n\nfunction tableRef(params: { dialect: SqlDialect; table: string; schema?: \"public\" | \"pg_temp\" }): string {\n if (params.schema !== undefined && params.schema !== \"public\" && params.schema !== \"pg_temp\") {\n throw unsupportedCapability({ dialect: params.dialect.name, feature: \"nativeRowLevelSecurity\", hint: \"Only public tables and temporary policy probes are supported\" });\n }\n return `${identifier({ dialect: params.dialect, name: params.schema ?? NATIVE_RLS.tableSchema })}.${identifier({ dialect: params.dialect, name: params.table })}`;\n}\n\nfunction query(params: { text: string; values?: unknown[] }): RenderedQuery {\n return { text: params.text, values: params.values ?? [], returning: \"none\" };\n}\n\n/** ENABLE is one statement; migrate owns transaction/order and pairs it with FORCE. */\nexport function renderRlsEnable(params: { dialect: SqlDialect; table: string }): RenderedQuery {\n requireRls(params);\n return query({ text: `ALTER TABLE ${tableRef(params)} ENABLE ROW LEVEL SECURITY` });\n}\n\n/** FORCE is separate so migration step ordering stays explicit. */\nexport function renderRlsForce(params: { dialect: SqlDialect; table: string }): RenderedQuery {\n requireRls(params);\n return query({ text: `ALTER TABLE ${tableRef(params)} FORCE ROW LEVEL SECURITY` });\n}\n\n/** DISABLE is separate; migrate owns acknowledgement and teardown ordering. */\nexport function renderRlsDisable({ dialect, table }: { dialect: SqlDialect; table: string }): RenderedQuery {\n requireRls({ dialect });\n return query({ text: `ALTER TABLE ${tableRef({ dialect, table })} DISABLE ROW LEVEL SECURITY` });\n}\n\n/** NO FORCE precedes DISABLE when migrate deliberately removes protection. */\nexport function renderRlsNoForce({ dialect, table }: { dialect: SqlDialect; table: string }): RenderedQuery {\n requireRls({ dialect });\n return query({ text: `ALTER TABLE ${tableRef({ dialect, table })} NO FORCE ROW LEVEL SECURITY` });\n}\n\n/** Drop one named policy; migrate owns child-first dependency ordering. */\nexport function renderRlsDropPolicy({ dialect, table, policyName }: {\n dialect: SqlDialect;\n table: string;\n policyName?: string;\n}): RenderedQuery {\n requireRls({ dialect });\n const name = identifier({ dialect, name: policyName ?? NATIVE_RLS.policyName });\n return query({ text: `DROP POLICY ${name} ON ${tableRef({ dialect, table })}` });\n}\n\n/**\n * Context casts use the physical base type, NOT typmods: varchar(n), numeric(p,s)\n * and timestamp(p) casts can truncate/round another identity into an allowed one.\n * Unknown/user-defined casts refuse rather than splice raw nativeType into SQL.\n */\nexport function renderRlsColumnType(params: { dialect: SqlDialect; field: FieldIR }): string {\n requireRls(params);\n const { field } = params;\n const mapping = typeof field.type === \"string\" && Object.hasOwn(COLUMN_TYPES, field.type)\n ? COLUMN_TYPES[field.type as RlsContextScalar] : undefined;\n if (mapping !== undefined && !field.isList && !field.isUnsupported) {\n if (field.nativeType === undefined) return mapping.default;\n const match = /^([a-z][a-z0-9 ]*)(?:\\(\\s*\\d+(?:\\s*,\\s*\\d+)?\\s*\\))?$/i.exec(field.nativeType.trim());\n const base = match?.[1]?.toLowerCase().replace(/\\s+/g, \"\");\n const native = base !== undefined && Object.hasOwn(mapping.native, base) ? mapping.native[base] : undefined;\n if (native !== undefined) return native;\n }\n throw unsupportedCapability({ dialect: params.dialect.name, feature: \"nativeRowLevelSecurity\", hint: `Unsupported physical ownership type on field ${field.name}` });\n}\n\nfunction protectedModel(params: { dialect: SqlDialect; schema: SchemaIR; model: string }): ModelIR {\n requireRls(params);\n assertNativeRlsAdmission({ schema: params.schema, dialect: params.dialect.name });\n assertValidSchemaIR({ schema: params.schema });\n const model = params.schema.models.find((entry) => entry.name === params.model);\n if (model === undefined || model.rls === undefined || model.rls === \"unprotected\") {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Native RLS policy rendering requires a protected model\", meta: { model: params.model } });\n }\n return model;\n}\n\n/** Desired predicate only, for drift probes; it is NOT server-canonical deparse. */\nexport function renderRlsPredicate(params: { dialect: SqlDialect; schema: SchemaIR; model: string }): string {\n const model = protectedModel(params);\n return predicate({ dialect: params.dialect, schema: params.schema, model });\n}\n\nfunction predicate(params: { dialect: SqlDialect; schema: SchemaIR; model: ModelIR }): string {\n const { dialect, schema, model } = params;\n const rule = model.rls;\n if (rule === \"deny\") return \"false\";\n if (typeof rule === \"object\" && \"where\" in rule) {\n return Object.entries(rule.where).map(([name, ref]) => {\n const field = model.fields.find((entry) => entry.name === name)!;\n const column = identifier({ dialect, name: field.dbName ?? field.name });\n const physicalType = renderRlsColumnType({ dialect, field });\n // Context keys passed structural validation; SQL literals are declarations,\n // never request values. The empty reset sentinel MUST become SQL NULL.\n return `(${column} = NULLIF(current_setting('${NATIVE_RLS.settingPrefix}${ref.context}', true), '')::${physicalType})`;\n }).join(\" AND \");\n }\n if (typeof rule === \"object\" && \"through\" in rule) {\n const relation = model.relations.find((entry) => entry.name === rule.through)!;\n const parent = schema.models.find((entry) => entry.name === relation.targetModel)!;\n const alias = identifier({ dialect, name: NATIVE_RLS.parentAlias });\n const child = identifier({ dialect, name: model.dbName ?? model.name });\n const join = relation.fields!.map((name, index) => {\n const childField = model.fields.find((field) => field.name === name)!;\n const parentField = parent.fields.find((field) => field.name === relation.references![index])!;\n return `(${alias}.${identifier({ dialect, name: parentField.dbName ?? parentField.name })} = ${child}.${identifier({ dialect, name: childField.dbName ?? childField.name })})`;\n }).join(\" AND \");\n return `EXISTS (SELECT 1 FROM ${tableRef({ dialect, table: parent.dbName ?? parent.name })} AS ${alias} WHERE ${join})`;\n }\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Native RLS requires a protected policy rule\" });\n}\n\n/** One PERMISSIVE ALL/PUBLIC policy with equal existing/proposed-row checks. */\nexport function renderRlsPolicy(params: {\n dialect: SqlDialect;\n schema: SchemaIR;\n model: string;\n policyName?: string;\n targetSchema?: \"public\" | \"pg_temp\";\n}): RenderedQuery {\n const model = protectedModel(params);\n const expression = predicate({ dialect: params.dialect, schema: params.schema, model });\n const name = identifier({ dialect: params.dialect, name: params.policyName ?? NATIVE_RLS.policyName });\n const table = tableRef({ dialect: params.dialect, table: model.dbName ?? model.name, schema: params.targetSchema });\n return query({ text: `CREATE POLICY ${name} ON ${table} AS PERMISSIVE FOR ALL TO PUBLIC USING (${expression}) WITH CHECK (${expression})` });\n}\n\n/** Every declared setting, parameterized in declaration order and transaction-local. */\nexport function renderRlsContext(params: {\n dialect: SqlDialect;\n context: RlsContextIR;\n values: Readonly<Record<string, string | null>>;\n}): RenderedQuery {\n requireRls(params);\n if (validateRlsContextIR({ context: params.context }).length !== 0 || Object.keys(params.context).length === 0 ||\n typeof params.values !== \"object\" || params.values === null || Array.isArray(params.values)) {\n throw new RlsContextError({ reason: \"invalid\" });\n }\n const collector = new ParamCollector(params.dialect);\n const parts: string[] = [];\n for (const [key, slot] of Object.entries(params.context)) {\n if (!Object.hasOwn(params.values, key)) throw new RlsContextError({ reason: \"missing\", key });\n const value = params.values[key];\n if ((value === null && !slot.nullable) || (value !== null && (typeof value !== \"string\" || value.length === 0 || value.includes(\"\\0\")))) {\n throw new RlsContextError({ reason: \"invalid\", key });\n }\n parts.push(`set_config(${collector.add(`${NATIVE_RLS.settingPrefix}${key}`)}, ${collector.add(value ?? \"\")}, true)`);\n }\n for (const key of Reflect.ownKeys(params.values)) {\n if (typeof key !== \"string\" || !Object.hasOwn(params.context, key)) throw new RlsContextError({ reason: \"invalid\" });\n }\n return query({ text: `SELECT ${parts.join(\", \")}`, values: collector.values });\n}\n\n/** First transaction statement on eligible PGlite only; server roles are login roles. */\nexport function renderRlsRole(params: { dialect: SqlDialect; role: string }): RenderedQuery {\n requireRls(params);\n if (typeof params.role !== \"string\" || params.role.trim().length === 0 || params.role.includes(\"\\0\")) {\n throw new VibeError({ code: \"VIBE_CONFIG\", message: \"PGlite native RLS requires a trusted nonempty runtime role name\" });\n }\n const collector = new ParamCollector(params.dialect);\n return query({ text: `SELECT set_config('role', ${collector.add(params.role)}, true)`, values: collector.values });\n}\n",
46
- "import { renderSqliteJsonEquality } from \"./dialects/sqlite-json-equality.ts\";\nimport { JSON_TRANSPORT, projectionOutputName } from \"./json-transport.ts\";\nimport { isFixedDiagnostic, renderDiagnostic } from \"./dialects/diagnostics.ts\";\nimport type { DiagnosticStatement } from \"./dialects/diagnostics.ts\";\nimport { renderPostgresExplain, renderPostgresWorkload } from \"./dialects/postgres-diagnostics.ts\";\nimport { renderRlsReadinessQuery, renderRlsProbeTable, renderRlsPolicyPath } from \"./dialects/postgres-rls-readiness.ts\";\n/**\n * Statement renderer: SQL AST × dialect → { text, values, returning }.\n *\n * The shared grammar lives here; every dialect divergence goes through an\n * explicit SqlDialect strategy field. Malformed ASTs throw VIBE_INTERNAL —\n * the AST is built by VibeORM code, so a bad shape is always our bug.\n */\n\nimport { assertSqlNamespace, internalError, unsupportedCapability } from \"@vibeorm/schema\";\nimport { isSqlFragment, renderSqlFragment, sqlUsesIncoming } from \"./composable.ts\";\nimport type { SqlFragmentSpec } from \"@vibeorm/schema\";\nimport type { ColRef, JsonParamCell, KeyTableJoin, KeyTableMember, OrderTerm, SqlStatement, RlsReadinessStatement, RlsProbeTableStatement, RlsPolicyPathStatement, SqlExpr, TableRef } from \"./ast.ts\";\nimport type {\n AggFn,\n AggRef,\n ChainResult,\n ChainRowSource,\n ChainStatement,\n ChainStepStatement,\n DeleteStatement,\n InsertSelectStatement,\n InsertStatement,\n LateralJoin,\n CountSubquery,\n ReturningColumn,\n SelectExpr,\n SelectStatement,\n SetOperator,\n UpdateStatement,\n} from \"./ast.ts\";\nimport { CHAIN_VETO_PREFIX, CHAIN_VETO_TOKEN_PATTERN, isDbNowMarker, isExcludedRef, isJsonParamCell, isListSetOperation, isSetOperation, isSqlDefaultCell, isStepColumnRef } from \"./ast.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\nimport { containsPattern, endsWithPattern, startsWithPattern, strictMatchPattern } from \"./like.ts\";\nimport { renderAdvisoryLock, renderRowLockClause } from \"./locks.ts\";\nimport { ParamCollector } from \"./params.ts\";\nimport { isJsonListParameter, jsonListParameter } from \"./json-list-parameter.ts\";\nimport { renderRlsContext, renderRlsDisable, renderRlsDropPolicy, renderRlsEnable, renderRlsForce, renderRlsNoForce, renderRlsPolicy, renderRlsRole } from \"./dialects/postgres-rls.ts\";\n\n// ─── Result shape ─────────────────────────────────────────────────\n\nexport type RenderedQuery = {\n readonly text: string;\n readonly values: unknown[];\n /**\n * RETURNING status: \"native\" (rendered), \"omitted\" (requested but the dialect\n * lacks it — caller must re-select), \"none\" (not requested).\n */\n readonly returning: \"native\" | \"omitted\" | \"none\";\n};\n\n// ─── Entry point ──────────────────────────────────────────────────\n\nexport function renderStatement(params: { dialect: SqlDialect; statement: DiagnosticStatement | SqlStatement | RlsReadinessStatement | RlsProbeTableStatement | RlsPolicyPathStatement }): RenderedQuery {\n const { dialect, statement } = params;\n const collector = new ParamCollector(dialect);\n switch (statement.kind) {\n case \"diagnostic\": {\n // EPIC 5: `postgresExplain` wraps another statement, so it renders that\n // one first and keeps its parameters; the read-only workload reads take\n // their own identifiers and bounds. Everything else is a fixed probe.\n if (isFixedDiagnostic(statement)) return renderDiagnostic({ dialect, query: statement.query });\n if (statement.query === \"postgresExplain\") {\n return renderPostgresExplain({\n dialect,\n query: renderStatement({ dialect, statement: statement.statement }),\n ...(statement.options === undefined ? {} : { options: statement.options }),\n });\n }\n return renderPostgresWorkload({ dialect, ...statement });\n }\n case \"select\":\n return renderSelect({ dialect, statement, collector });\n case \"advisoryLock\":\n return renderAdvisoryLock({ dialect, statement, collector });\n case \"insert\":\n return renderInsert({ dialect, statement, collector });\n case \"update\":\n return renderUpdate({ dialect, statement, collector });\n case \"delete\":\n return renderDelete({ dialect, statement, collector });\n case \"chain\":\n return renderChain({ dialect, statement, collector });\n case \"rlsReadiness\": return renderRlsReadinessQuery({ dialect, ...statement });\n case \"rlsProbeTable\": return renderRlsProbeTable({ dialect, ...statement });\n case \"rlsPolicyPath\": return renderRlsPolicyPath({ dialect, ...statement });\n case \"rlsEnable\":\n return renderRlsEnable({ dialect, table: statement.table });\n case \"rlsForce\":\n return renderRlsForce({ dialect, table: statement.table });\n case \"rlsDisable\":\n return renderRlsDisable({ dialect, table: statement.table });\n case \"rlsNoForce\":\n return renderRlsNoForce({ dialect, table: statement.table });\n case \"rlsDropPolicy\":\n return renderRlsDropPolicy({ dialect, table: statement.table, policyName: statement.policyName });\n case \"rlsPolicy\":\n return renderRlsPolicy({ dialect, ...statement });\n case \"rlsContext\":\n return renderRlsContext({ dialect, context: statement.context, values: statement.values });\n case \"rlsRole\":\n return renderRlsRole({ dialect, role: statement.role });\n }\n}\n\n// ─── Shared pieces ────────────────────────────────────────────────\n\nfunction quoteCol(dialect: SqlDialect, column: ColRef): string {\n const name = dialect.quoteIdent({ name: column.name });\n const ref = column.table === undefined ? name : `${dialect.quoteIdent({ name: column.table })}.${name}`;\n // B4: sqlite Decimal compare/order/aggregate sites read the TEXT column as\n // REAL — the builder sets this only there, never on projections.\n if (column.castReal === true) {\n if (dialect.name !== \"sqlite\") {\n throw internalError({ message: \"ColRef.castReal is a sqlite Decimal construct\" });\n }\n return `CAST(${ref} AS REAL)`;\n }\n // D3: postgres `json` order/distinct/compare sites read the column as jsonb.\n if (column.castJsonb !== undefined) {\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: \"ColRef.castJsonb is a postgres json construct\" });\n }\n return `${ref}::${column.castJsonb}`;\n }\n return ref;\n}\n\n/**\n * An ORDER BY / DISTINCT ON column of a SELECT, protected from binding to an\n * OUTPUT column. Postgres, MySQL and SQLite all resolve a bare name in ORDER\n * BY (postgres: DISTINCT ON too) to an output column of that name FIRST. When\n * the projection renames something else to the column's name — a postgres\n * `Float[]`/`Json[]` list read as `\"col\"::text AS \"col\"`, or a projection\n * alias — the bare name would order the TEXT, not the typed column\n * (`{10}` < `{1e-07}` < `{9}`). Such a reference is qualified with the\n * select's FROM name (its alias, or the derived-table name), which only ever\n * names the input column. Qualified references, casts (`castReal`,\n * `castJsonb` — expressions read input columns) and plain projections render\n * unchanged. Window ORDER BY (ROW_NUMBER) never sees output names, so it is\n * not passed through here.\n */\nfunction typedOrderRef(params: { statement: SelectStatement; column: ColRef }): ColRef {\n const { statement, column } = params;\n if (column.table !== undefined || column.castReal === true || column.castJsonb !== undefined) return column;\n const renamed = statement.columns.some(\n (projected) => (projected.alias ?? projected.name) === column.name && (projected.transform !== undefined || projected.alias !== undefined),\n );\n return renamed ? { ...column, table: statement.table.alias ?? statement.table.name } : column;\n}\n\n/**\n * The cast a {@link JsonParamCell} renders after its placeholder: the\n * dialect's json param cast (`::text::jsonb` on postgres, empty elsewhere),\n * or `::text::json` for a cell bound for a postgres `json` column — the\n * server parses the text as `json` and stores it as written (D3).\n */\nfunction jsonCellCast(dialect: SqlDialect, cell: JsonParamCell): string {\n if (cell.storage !== \"json\" || dialect.jsonParamCast === \"\") return dialect.jsonParamCast;\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: \"JsonParamCell storage json is a postgres construct\" });\n }\n return \"::text::json\";\n}\n\n/**\n * Projection rendering: a plain reference or its wire transform. JSON text\n * projections use the dialect primitive and keep explicit aliases. Text casts\n * preserve lossless transport on every dialect; base64 remains postgres-only.\n */\nfunction quoteProjection(dialect: SqlDialect, column: ColRef): string {\n if (column.transform === undefined) {\n const base = quoteCol(dialect, column);\n if (column.alias === undefined) return base;\n return `${base} AS ${dialect.quoteIdent({ name: column.alias })}`;\n }\n if (column.transform === \"jsonText\") {\n const ref = quoteCol(dialect, column);\n const alias = dialect.quoteIdent({ name: column.alias ?? column.name });\n return `${dialect.jsonTextProjection({ expression: ref })} AS ${alias}`;\n }\n const ref = quoteCol(dialect, column);\n const alias = dialect.quoteIdent({ name: column.alias ?? column.name });\n if (column.transform === \"castText\") return `${textProjection({ dialect, expression: ref })} AS ${alias}`;\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: \"encodeBase64 is a postgres construct\" });\n }\n return `encode(${ref}, 'base64') AS ${alias}`;\n}\n\nfunction textProjection(params: { dialect: SqlDialect; expression: string }): string {\n return params.dialect.name === \"postgres\" ? `${params.expression}::text`\n : `CAST(${params.expression} AS ${params.dialect.name === \"mysql\" ? \"CHAR\" : \"TEXT\"})`;\n}\n\n/**\n * A SELECT list rendered exactly as a {@link SelectStatement}'s columns are —\n * plain references and their wire transforms (`\"t\".\"scores\"::text AS\n * \"scores\"`) — for SQL assembled outside the AST (extension statements), so\n * its rows reach the driver in the same formats as `findMany`'s.\n */\nexport function renderProjection(params: { dialect: SqlDialect; columns: readonly ColRef[] }): string {\n const { dialect, columns } = params;\n return columns.map((column) => quoteProjection(dialect, column)).join(\", \");\n}\n\nfunction renderTable(dialect: SqlDialect, table: TableRef): string {\n if (table.namespace !== undefined) assertSqlNamespace({ namespace: table.namespace, dialect: dialect.name });\n const relation = dialect.quoteIdent({ name: table.name });\n const name = table.namespace === undefined ? relation : `${dialect.quoteIdent({ name: table.namespace })}.${relation}`;\n if (table.alias === undefined) return name;\n return `${name} AS ${dialect.quoteIdent({ name: table.alias })}`;\n}\n\nfunction assertCount(value: number, what: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw internalError({ message: `${what} must be a non-negative integer, got ${value}` });\n }\n}\n\nconst COMPARISON_SQL: Readonly<Record<string, string>> = {\n eq: \"=\",\n ne: \"<>\",\n gt: \">\",\n gte: \">=\",\n lt: \"<\",\n lte: \"<=\",\n};\n\n/**\n * Atomic SET arithmetic. `divide` is plain `/`: integer columns therefore\n * follow each dialect's own integer-division rule (pg/sqlite truncate, mysql\n * promotes to decimal) — pinned by the update-atomic-ops catalog case.\n */\nconst SET_OPERATION_SQL: Readonly<Record<SetOperator, string>> = {\n increment: \"+\",\n decrement: \"-\",\n multiply: \"*\",\n divide: \"/\",\n};\n\nconst AGG_FN_SQL: Readonly<Record<AggFn, string>> = {\n count: \"COUNT\",\n avg: \"AVG\",\n sum: \"SUM\",\n min: \"MIN\",\n max: \"MAX\",\n};\n\n/** `COUNT(*)` / `FN(\"col\")` — shared by projections, HAVING and ORDER BY. */\nfunction renderAggRef(dialect: SqlDialect, agg: AggRef): string {\n if (agg.fn === \"countAll\") return \"COUNT(*)\";\n return `${AGG_FN_SQL[agg.fn]}(${quoteCol(dialect, agg.column)})`;\n}\n\nfunction assertScalarArrays(dialect: SqlDialect, feature: string): void {\n if (dialect.capabilities.scalarArrays) return;\n throw unsupportedCapability({\n dialect: dialect.name,\n feature,\n hint: \"only postgres has native array columns — model the list as a related table instead\",\n });\n}\n\n// ─── Expressions ──────────────────────────────────────────────────\n\n/**\n * Render one boolean expression into SQL text, collecting parameters into the\n * shared collector. Public so extension delegates can AND user `where` trees\n * (compiled by the runtime) into their own statements.\n */\nexport function renderExpr(params: { dialect: SqlDialect; expr: SqlExpr; collector: ParamCollector }): string {\n const { dialect, expr, collector } = params;\n\n switch (expr.kind) {\n case \"cmp\": {\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined) {\n throw internalError({ message: `unknown comparison operator \"${expr.op}\"` });\n }\n // Database-clock operand: the dialect's now() expression, never a param.\n if (isDbNowMarker(expr.value)) {\n return `${quoteCol(dialect, expr.column)} ${op} ${dialect.renderDbNow({ offsetSeconds: expr.value.offsetSeconds, collector })}`;\n }\n const compared = listComparison({ dialect, column: expr.column, value: expr.value, collector });\n return `${compared.column} ${op} ${compared.operand}`;\n }\n\n case \"cmpCol\": {\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined) {\n throw internalError({ message: `unknown comparison operator \"${expr.op}\"` });\n }\n return `${quoteCol(dialect, expr.left)} ${op} ${quoteCol(dialect, expr.right)}`;\n }\n\n case \"isNull\":\n return `${quoteCol(dialect, expr.column)} IS ${expr.negate === true ? \"NOT NULL\" : \"NULL\"}`;\n\n case \"inArray\": {\n if (expr.values.length === 0) {\n // Empty IN matches nothing; empty NOT IN matches everything.\n return expr.negate === true ? \"1 = 1\" : \"1 = 0\";\n }\n const column = quoteCol(dialect, expr.column);\n if (expr.timeOfDay === true && dialect.timeOfDayInStrategy === \"equalities\") {\n const equalities = collector.addMany(expr.values).map((placeholder) => `${column} = ${placeholder}`);\n return `${expr.negate === true ? \"NOT \" : \"\"}(${equalities.join(\" OR \")})`;\n }\n if (dialect.inArrayStrategy === \"any\") {\n const base = `${column} = ANY(${collector.add(Array.isArray(expr.values) ? [...expr.values] : expr.values)})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n const placeholders = collector.addMany(expr.values);\n return `${column} ${expr.negate === true ? \"NOT IN\" : \"IN\"} (${placeholders.join(\", \")})`;\n }\n\n case \"tupleIn\": {\n if (expr.columns.length === 0) {\n throw internalError({ message: \"tupleIn needs at least one column\" });\n }\n for (const row of expr.rows) {\n if (row.length !== expr.columns.length) {\n throw internalError({\n message: `tupleIn row has ${row.length} values for ${expr.columns.length} columns`,\n });\n }\n }\n if (expr.rows.length === 0) {\n // Same honesty as inArray: an empty membership matches nothing.\n return expr.negate === true ? \"1 = 1\" : \"1 = 0\";\n }\n const columns = expr.columns.map((column) => quoteCol(dialect, column));\n if (dialect.tupleInStrategy === \"rowValue\") {\n const tuples = expr.rows.map((row) => `(${collector.addMany(row).join(\", \")})`);\n const base = `(${columns.join(\", \")}) IN (${tuples.join(\", \")})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n // No row constructors: an OR of COMPLETE conjunctions, never a per-column\n // IN (which would match the Cartesian product of the members).\n const conjunctions = expr.rows.map((row) => {\n const terms = row.map((value, index) => `${columns[index] as string} = ${collector.add(value)}`);\n return terms.length === 1 ? (terms[0] as string) : `(${terms.join(\" AND \")})`;\n });\n const base = conjunctions.length === 1 ? (conjunctions[0] as string) : `(${conjunctions.join(\" OR \")})`;\n return expr.negate === true ? `NOT ${base.startsWith(\"(\") ? base : `(${base})`}` : base;\n }\n\n case \"like\": {\n const column = quoteCol(dialect, expr.column);\n const placeholder = collector.add(expr.pattern);\n let base: string;\n if (expr.insensitive === true) {\n base =\n dialect.insensitiveLike === \"ilike\"\n ? `${column} ILIKE ${placeholder}`\n : expr.ciCollation === true\n ? // #36: the column's declared `_ci` collation already folds case —\n // plain LIKE keeps the index usable.\n `${column} LIKE ${placeholder}`\n : `LOWER(${column}) LIKE LOWER(${placeholder})`;\n } else {\n base = `${column} LIKE ${placeholder}`;\n }\n if (dialect.likeEscapeClause !== null) {\n base = `${base}${dialect.likeEscapeClause}`;\n }\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"strictMatch\": {\n const column = quoteCol(dialect, expr.column);\n let base: string;\n if (expr.op === \"equals\") {\n // pg and sqlite `=` are already byte-exact; only mysql's `_ci`\n // collations fold equality and need the BINARY cast.\n base =\n dialect.strictMatchStrategy === \"binary\"\n ? `${column} = CAST(${collector.add(expr.value)} AS BINARY)`\n : `${column} = ${collector.add(expr.value)}`;\n } else {\n const pattern = strictMatchPattern({\n strategy: dialect.strictMatchStrategy,\n op: expr.op,\n value: expr.value,\n });\n if (dialect.strictMatchStrategy === \"glob\") {\n base = `${column} GLOB ${collector.add(pattern)}`;\n } else {\n const placeholder = collector.add(pattern);\n base =\n dialect.strictMatchStrategy === \"binary\"\n ? `${column} LIKE CAST(${placeholder} AS BINARY)`\n : `${column} LIKE ${placeholder}`;\n if (dialect.likeEscapeClause !== null) base = `${base}${dialect.likeEscapeClause}`;\n }\n }\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"and\":\n case \"or\": {\n if (expr.operands.length === 0) {\n // Neutral elements: empty AND is always-true, empty OR always-false.\n return expr.kind === \"and\" ? \"1 = 1\" : \"1 = 0\";\n }\n if (expr.operands.length === 1) {\n return renderExpr({ dialect, expr: expr.operands[0]!, collector });\n }\n const joiner = expr.kind === \"and\" ? \" AND \" : \" OR \";\n const rendered = expr.operands.map((operand) => renderExpr({ dialect, expr: operand, collector }));\n return `(${rendered.join(joiner)})`;\n }\n\n case \"not\":\n return `NOT (${renderExpr({ dialect, expr: expr.operand, collector })})`;\n\n case \"aggCmp\": {\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined) {\n throw internalError({ message: `unknown comparison operator \"${expr.op}\"` });\n }\n return `${renderAggRef(dialect, expr.agg)} ${op} ${collector.add(expr.value)}`;\n }\n\n case \"arrayHas\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"has\\\"\");\n const compared = listComparison({ dialect, column: expr.column, value: expr.value, collector });\n const base = `${compared.operand} = ANY(${compared.column})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"arrayContainsAll\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"hasEvery\\\"\");\n const values = Array.isArray(expr.values) ? [...expr.values] : expr.values;\n const compared = listComparison({ dialect, column: expr.column, value: values, collector });\n return `${compared.column} @> ${compared.operand}`;\n }\n\n case \"arrayOverlaps\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"hasSome\\\"\");\n const values = Array.isArray(expr.values) ? [...expr.values] : expr.values;\n const compared = listComparison({ dialect, column: expr.column, value: values, collector });\n return `${compared.column} && ${compared.operand}`;\n }\n\n case \"arrayIsEmpty\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"isEmpty\\\"\");\n // v1 semantics kept: array_length of NULL and of '{}' are both NULL, so\n // `isEmpty: true` matches NULL **and** empty lists.\n const column = quoteCol(dialect, expr.column);\n return `array_length(${column}, 1) IS ${expr.empty ? \"NULL\" : \"NOT NULL\"}`;\n }\n\n case \"jsonFilter\":\n return renderJsonFilter({ dialect, expr, collector });\n\n case \"exists\": {\n // The subquery shares the statement's collector, so its parameters land\n // in the single sequence exactly where they appear in the text.\n const sub = renderSelect({ dialect, statement: expr.select, collector });\n return `${expr.negate === true ? \"NOT \" : \"\"}EXISTS (${sub.text})`;\n }\n\n case \"composed\":\n return `(${renderSqlFragment({ dialect, fragment: expr.fragment, collector })})`;\n\n case \"fragment\":\n return renderFragment({ dialect, fragment: expr.fragment, collector });\n\n case \"raw\":\n return expr.text;\n }\n}\n\n// ─── Bound fragments (extension SQL plane) ───────────────────\n\n/**\n * Render a neutral bound fragment (extensions.md §3): literal text verbatim,\n * `{ param }` through the collector (single placeholder sequence), `{ ident }`\n * paths through dialect.quoteIdent. Exported so extension delegates can build\n * full statements sharing one collector with core-compiled WHERE trees.\n */\nexport function renderFragment(params: {\n dialect: SqlDialect;\n fragment: SqlFragmentSpec;\n collector: ParamCollector;\n}): string {\n const { dialect, fragment, collector } = params;\n let text = \"\";\n for (const part of fragment.parts) {\n if (typeof part === \"string\") {\n text += part;\n } else if (\"param\" in part) {\n text += collector.add(part.param);\n } else {\n text += part.ident.map((name) => dialect.quoteIdent({ name })).join(\".\");\n }\n }\n return text;\n}\n\n// ─── JSON path filters ─────────────────────────────────────────────\n\n/** `$.a.b[0]` path string for sqlite/mysql — always bound, never spliced. */\nfunction jsonPathString(path: readonly (string | number)[]): string {\n let out = \"$\";\n for (const segment of path) {\n if (typeof segment === \"number\") {\n out += `[${segment}]`;\n } else if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(segment)) {\n out += `.${segment}`;\n } else {\n // A quoted key uses JSON-string escaping in both engines' path syntax:\n // the backslash FIRST, or a key containing one silently matches nothing.\n out += `.\"${segment.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll('\"', '\\\\\"')}\"`;\n }\n }\n return out;\n}\n\n/**\n * Column and operand of a comparison (`cmp`, `has`, `hasEvery`, `hasSome`).\n * A Json-list operand of a `json[]` column (`Json[] @db.Json`) compares as\n * jsonb on both sides — `\"col\"::jsonb[]` against `$n::text::jsonb[]` (or\n * `$n::text::jsonb` for one element) — because `json` has no equality\n * operator at all (\"could not identify an equality operator for type json\").\n * Write sites (`push`) keep the `json` operand. Everything else renders as\n * before. The column side is added first only in text: it binds nothing.\n */\nfunction listComparison(params: {\n dialect: SqlDialect;\n column: ColRef;\n value: unknown;\n collector: ParamCollector;\n}): { readonly column: string; readonly operand: string } {\n const { dialect, column, value, collector } = params;\n if (isJsonListParameter(value) && value.storage === \"json\") {\n return {\n column: `${quoteCol(dialect, column)}::jsonb[]`,\n operand: collector.add(jsonListParameter({ value: value.value, storage: \"jsonb\" })),\n };\n }\n return { column: quoteCol(dialect, column), operand: collector.add(value) };\n}\n\ntype JsonFilterExpr = Extract<SqlExpr, { kind: \"jsonFilter\" }>;\n\nfunction jsonStringPattern(params: { expr: JsonFilterExpr }): string {\n const { expr } = params;\n if (typeof expr.value !== \"string\") {\n throw internalError({ message: `json ${expr.op} expects a string operand` });\n }\n if (expr.op === \"string_contains\") return containsPattern({ raw: expr.value });\n if (expr.op === \"string_starts_with\") return startsWithPattern({ raw: expr.value });\n return endsWithPattern({ raw: expr.value });\n}\n\n/** Case-[in]sensitive LIKE over an extracted-text expression, per dialect. */\nfunction renderJsonLike(params: {\n dialect: SqlDialect;\n target: string;\n expr: JsonFilterExpr;\n collector: ParamCollector;\n}): string {\n const { dialect, target, expr, collector } = params;\n const placeholder = collector.add(jsonStringPattern({ expr }));\n let base: string;\n if (expr.insensitive === true) {\n base =\n dialect.insensitiveLike === \"ilike\"\n ? `${target} ILIKE ${placeholder}`\n : `LOWER(${target}) LIKE LOWER(${placeholder})`;\n } else {\n base = `${target} LIKE ${placeholder}`;\n }\n if (dialect.likeEscapeClause !== null) base = `${base}${dialect.likeEscapeClause}`;\n return expr.negate === true ? `NOT (${base})` : base;\n}\n\n/**\n * One JSON path predicate, per dialect strategy. The path is BOUND: a `text[]`\n * parameter on postgres (cast so string-literal array forms work too), a\n * `$.a.b` path string elsewhere. Values bind as JSON text for json/jsonb\n * comparisons and as LIKE patterns for the string ops.\n */\nfunction renderJsonFilter(params: {\n dialect: SqlDialect;\n expr: JsonFilterExpr;\n collector: ParamCollector;\n}): string {\n const { dialect, expr, collector } = params;\n if (!dialect.supportedJsonOps.includes(expr.op)) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `the json filter \"${expr.op}\"`,\n hint: `this dialect can express: ${dialect.supportedJsonOps.join(\", \")}`,\n });\n }\n const cmp = expr.negate === true ? \"<>\" : \"=\";\n\n if (dialect.jsonPathMode === \"operators\") {\n const column = quoteCol(dialect, expr.column);\n const pathParam = `${collector.add(expr.path.map(String))}::text[]`;\n // A `json` column (`Json @db.Json`) has no `=`, `<>` or `@>` — postgres\n // defines them for jsonb only (SQLSTATE 42883 `json = jsonb`). The\n // value-comparing ops cast the EXTRACTED value, not the column: the\n // result is jsonb equality and containment, a jsonb column's semantics\n // (json navigation also takes the LAST of duplicate keys), and only the\n // sub-value is converted — ~40% faster than casting the whole document\n // on 20,000 4-KB rows (PostgreSQL 18.6). The string ops read the same\n // jsonb value as text (`#>> '{}'`): json's own `#>>` returns the STORED\n // spelling of a non-string value (`1e2`, `[1, 2]`, both duplicate keys)\n // where a jsonb column reads `100`, `[1, 2]` and the last key. For a\n // string value both forms return the same unescaped text.\n const extracted = expr.storage === \"json\" ? `(${column} #> ${pathParam})::jsonb` : `(${column} #> ${pathParam})`;\n switch (expr.op) {\n case \"equals\":\n return `${extracted} ${cmp} ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\": {\n const target = expr.storage === \"json\" ? `(${extracted} #>> '{}')` : `(${column} #>> ${pathParam})`;\n return renderJsonLike({ dialect, target, expr, collector });\n }\n case \"array_contains\":\n return `${extracted} @> ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"array_starts_with\":\n return `${extracted} -> 0 = ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"array_ends_with\":\n return `${extracted} -> -1 = ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n }\n }\n\n if (dialect.jsonPathMode === \"sqliteExtract\") {\n const column = quoteCol(dialect, expr.column);\n // JSON booleans surface as SQL 0/1, so value equality alone loses type.\n const typeMatches = (type: string, value: unknown): string => {\n if (typeof value === \"number\") return `${type} IN ('integer', 'real')`;\n const tag = typeof value === \"boolean\" ? String(value)\n : value === null ? \"null\" : Array.isArray(value) ? \"array\"\n : typeof value === \"object\" ? \"object\" : \"text\";\n return `${type} = '${tag}'`;\n };\n const compareExtracted = (path: string, value: unknown): string => {\n const type = `json_type(${column}, ${collector.add(path)})`;\n const guard = typeMatches(type, value);\n let base = guard;\n if (value !== null) {\n const target = `json_extract(${column}, ${collector.add(path)})`;\n const bound = typeof value === \"boolean\" ? (value ? 1 : 0) : value;\n const comparison = typeof value === \"object\"\n ? renderSqliteJsonEquality({ dialect, left: target, right: collector.add(JSON.stringify(value)) })\n : `${target} = ${collector.add(bound)}`;\n base = `(${guard} AND ${comparison})`;\n }\n return expr.negate === true ? `NOT (${base})` : base;\n };\n switch (expr.op) {\n case \"equals\":\n return compareExtracted(jsonPathString(expr.path), expr.value);\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\": {\n const target = `json_extract(${column}, ${collector.add(jsonPathString(expr.path))})`;\n return renderJsonLike({ dialect, target, expr, collector });\n }\n case \"array_starts_with\":\n case \"array_ends_with\": {\n // Edge-element access: `$[0]` / `$[#-1]` path elements (sqlite ≥3.31;\n // bun:sqlite bundles far newer) — N6/board #21.\n const edge = expr.op === \"array_starts_with\" ? \"[0]\" : \"[#-1]\";\n return compareExtracted(`${jsonPathString(expr.path)}${edge}`, expr.value);\n }\n case \"array_contains\": {\n // Scalar-needle containment via json_each() EXISTS — one EXISTS per\n // element, ANDed (jsonb `@>` semantics for scalar members). Deep\n // structural containment (object/array members) has no cheap faithful\n // sqlite form and stays refused; JSON null members compare through\n // json_each's 'null' type tag, not SQL NULL, so they are refused too.\n //\n // Haystack type guard (wave-C review): json_each() over a path holding\n // a SCALAR yields one row carrying that scalar, so an unguarded EXISTS\n // matched `{ tags: \"a\" }` against needle `[\"a\"]` where postgres (`@>`\n // with an array needle) and mysql (JSON_CONTAINS against an array\n // literal) are false. json_type() is NULL for a missing path, so\n // missing paths and NULL columns stay non-matches — and an empty\n // needle reduces to the guard alone: contained in every ARRAY (pg's\n // `@> '[]'` truth) and in nothing else.\n const guard = `json_type(${column}, ${collector.add(jsonPathString(expr.path))}) = 'array'`;\n const elements = Array.isArray(expr.value) ? expr.value : [expr.value];\n const tests = elements.map((element) => {\n if (element === null || (typeof element === \"object\" && element !== null)) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"json array_contains with object/array/null elements\",\n hint: \"sqlite expresses scalar-element containment only — deep structural containment needs postgres or mysql\",\n });\n }\n const bound = typeof element === \"boolean\" ? (element ? 1 : 0) : element;\n const path = collector.add(jsonPathString(expr.path));\n const type = `${dialect.quoteIdent({ name: \"json_each\" })}.${dialect.quoteIdent({ name: \"type\" })}`;\n return `EXISTS (SELECT 1 FROM json_each(${column}, ${path}) WHERE ${typeMatches(type, element)} AND ${dialect.quoteIdent({ name: \"json_each\" })}.${dialect.quoteIdent({ name: \"value\" })} = ${collector.add(bound)})`;\n });\n return tests.length === 0 ? guard : `(${[guard, ...tests].join(\" AND \")})`;\n }\n default:\n throw internalError({ message: `json op \"${expr.op}\" leaked past supportedJsonOps on sqlite` });\n }\n }\n\n // mysqlExtract\n const column = quoteCol(dialect, expr.column);\n const pathString = jsonPathString(expr.path);\n switch (expr.op) {\n case \"equals\":\n return `JSON_EXTRACT(${column}, ${collector.add(pathString)}) ${cmp} CAST(${collector.add(JSON.stringify(expr.value))} AS JSON)`;\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\": {\n const target = `JSON_UNQUOTE(JSON_EXTRACT(${column}, ${collector.add(pathString)}))`;\n return renderJsonLike({ dialect, target, expr, collector });\n }\n case \"array_contains\":\n return `JSON_CONTAINS(JSON_EXTRACT(${column}, ${collector.add(pathString)}), CAST(${collector.add(JSON.stringify(expr.value))} AS JSON))`;\n case \"array_starts_with\":\n return `JSON_EXTRACT(${column}, ${collector.add(`${pathString}[0]`)}) ${cmp} CAST(${collector.add(JSON.stringify(expr.value))} AS JSON)`;\n case \"array_ends_with\":\n return `JSON_EXTRACT(${column}, ${collector.add(`${pathString}[last]`)}) ${cmp} CAST(${collector.add(JSON.stringify(expr.value))} AS JSON)`;\n }\n}\n\n// ─── Ordering ─────────────────────────────────────────────────────\n\nfunction renderOrderTerm(params: { dialect: SqlDialect; term: OrderTerm; collector: ParamCollector }): string {\n const { dialect, term, collector } = params;\n if (\"agg\" in term) {\n return `${renderAggRef(dialect, term.agg)} ${term.direction === \"asc\" ? \"ASC\" : \"DESC\"}`;\n }\n if (\"select\" in term) {\n // Relation orderBy: a correlated scalar subquery — its parameters merge\n // into the shared sequence exactly where they appear in the text.\n const sub = renderSelect({ dialect, statement: term.select, collector });\n return `(${sub.text}) ${term.direction === \"asc\" ? \"ASC\" : \"DESC\"}`;\n }\n const column = quoteCol(dialect, term.column);\n const direction = term.direction === \"asc\" ? \"ASC\" : \"DESC\";\n if (term.nulls === undefined) {\n return `${column} ${direction}`;\n }\n if (dialect.orderByNullsMode === \"native\") {\n return `${column} ${direction} NULLS ${term.nulls === \"first\" ? \"FIRST\" : \"LAST\"}`;\n }\n // Emulation (mysql): the engine's native order already places NULLs FIRST on\n // ASC and LAST on DESC — those pairings render the bare term (the redundant\n // boolean pre-term cost a per-row evaluation and could defeat index-order\n // scans, #14). Only the diverging pairings need the `IS NULL` pre-term:\n // false(0) sorts first, so plain `IS NULL` pushes nulls last and\n // `IS NULL DESC` pulls them first.\n if ((term.nulls === \"first\") === (term.direction === \"asc\")) {\n return `${column} ${direction}`;\n }\n const nullsTerm = term.nulls === \"first\" ? `${column} IS NULL DESC` : `${column} IS NULL`;\n return `${nullsTerm}, ${column} ${direction}`;\n}\n\n// ─── Projections ──────────────────────────────────────────────────\n\nfunction renderSelectExpr(params: { dialect: SqlDialect; expr: SelectExpr }): string {\n const { dialect, expr } = params;\n if (expr.kind === \"one\") return \"1\";\n const alias = expr.alias === undefined ? \"\" : ` AS ${dialect.quoteIdent({ name: expr.alias })}`;\n return `COUNT(*)${alias}`;\n}\n\n// ─── Lateral JSON joins ───────────────────────────────────\n\n/**\n * `LEFT JOIN LATERAL (… to_json …) AS alias ON true`. Postgres-only SQL by\n * design — the runtime gates the \"join\" strategy on `capabilities.lateralJoin`\n * at build time, and this renderer refuses too (dialect honesty, rule 4).\n *\n * `json`, not `jsonb`: the payload is transport — parsed by the driver and\n * never touched by a JSON operator on the server. `jsonb_agg(to_jsonb(…))`\n * builds postgres's binary JSON (sorted, de-duplicated keys) and then\n * serializes it straight back to text for the wire, which measured at 2–3.7×\n * the server time of `json_agg(to_json(…))` for identical decoded values\n * (`.ai/plans/26.09.08 - performance-join-strategy.md` §1.2). The observable\n * differences are textual only: `json` keeps construction key order and `-0`,\n * `jsonb` normalizes both; every scalar still rides the B3 transforms.\n */\nfunction renderPositionalRow(params: { dialect: SqlDialect; join: LateralJoin; subAlias: string }): string {\n const { dialect, join, subAlias } = params;\n if (join.select.columns.length === 0 || join.select.selectExpr !== undefined ||\n (join.select.aggregates?.length ?? 0) > 0 || join.select.rowNumber !== undefined) {\n throw internalError({ message: \"positional lateral rows require an explicit column-only projection\" });\n }\n const names = join.select.columns.map((column) => projectionOutputName({ column }));\n if (new Set(names).size !== names.length) {\n throw internalError({ message: \"positional lateral projection has duplicate output names\" });\n }\n const values = names.map((name) => `${subAlias}.${dialect.quoteIdent({ name })}`);\n const chunks: string[] = [];\n for (let index = 0; index < values.length; index += JSON_TRANSPORT.chunkSize) {\n chunks.push(`json_build_array(${values.slice(index, index + JSON_TRANSPORT.chunkSize).join(\", \")})`);\n }\n if (chunks.length > JSON_TRANSPORT.chunkSize) {\n throw internalError({ message: \"positional lateral projection exceeds the transport width limit\" });\n }\n return chunks.length === 1 ? chunks[0] as string : `json_build_array(${chunks.join(\", \")})`;\n}\n\nfunction renderLateralJoin(params: {\n dialect: SqlDialect;\n join: LateralJoin;\n collector: ParamCollector;\n}): string {\n const { dialect, join, collector } = params;\n const inner = renderSelect({ dialect, statement: join.select, collector });\n if (join.agg === \"count\") {\n if (join.rowFormat === \"positional\" || join.select.columns.length !== 0 ||\n join.select.selectExpr?.kind !== \"countAll\" || join.select.selectExpr.alias !== join.columnAlias ||\n join.select.groupBy !== undefined || join.select.having !== undefined ||\n join.select.limit !== undefined || join.select.offset !== undefined || join.select.distinctOn !== undefined) {\n throw internalError({ message: \"count lateral must return one ungrouped COUNT(*) under its column alias\" });\n }\n return `LEFT JOIN LATERAL (${inner.text}) AS ${dialect.quoteIdent({ name: join.alias })} ON true`;\n }\n const columnAlias = dialect.quoteIdent({ name: join.columnAlias });\n const subAlias = dialect.quoteIdent({ name: \"__sub\" });\n // N2 (SQL review): json_agg over a subquery only \"usually\" preserves the\n // subquery's order — pin it with an explicit ORDER BY inside the aggregate\n // (the subquery keeps its own ORDER BY for LIMIT). Only column terms that\n // are PROJECTED (and untransformed — a B3 ::text cast would re-sort\n // lexicographically) can be referenced through `__sub`; anything else keeps\n // the old behavior.\n let aggOrder = \"\";\n if (join.agg === \"jsonArray\" && join.select.orderBy !== undefined && join.select.orderBy.length > 0) {\n const projected = new Set(\n join.select.columns\n .filter((column) => column.transform === undefined && column.castReal !== true)\n .map((column) => column.name),\n );\n const terms = join.select.orderBy;\n const columnTerms = terms.filter(\n (term): term is Extract<OrderTerm, { column: ColRef }> => \"column\" in term,\n );\n if (columnTerms.length === terms.length && columnTerms.every((term) => projected.has(term.column.name))) {\n const rendered = columnTerms.map((term) =>\n renderOrderTerm({\n dialect,\n term: {\n ...term,\n column: { table: \"__sub\", name: term.column.name, ...(term.column.castJsonb === undefined ? {} : { castJsonb: term.column.castJsonb }) },\n },\n collector,\n }),\n );\n aggOrder = ` ORDER BY ${rendered.join(\", \")}`;\n }\n }\n const rowJson = join.rowFormat === \"positional\"\n ? renderPositionalRow({ dialect, join, subAlias })\n : `to_json(${subAlias}.*)`;\n const projection =\n join.agg === \"jsonArray\"\n ? `COALESCE(json_agg(${rowJson}${aggOrder}), '[]'::json) AS ${columnAlias}`\n : `${rowJson} AS ${columnAlias}`;\n const alias = dialect.quoteIdent({ name: join.alias });\n return `LEFT JOIN LATERAL (SELECT ${projection} FROM (${inner.text}) AS ${subAlias}) AS ${alias} ON true`;\n}\n\n/**\n * `(SELECT COUNT(*) FROM … WHERE …) AS \"alias\"` — one scalar per output row\n * ({@link CountSubquery}). Refuses anything but one ungrouped COUNT(*), so a\n * builder bug can never project a multi-row or multi-column subquery.\n */\nfunction renderCountSubquery(params: {\n dialect: SqlDialect;\n subquery: CountSubquery;\n collector: ParamCollector;\n}): string {\n const { dialect, subquery, collector } = params;\n const select = subquery.select;\n if (select.columns.length !== 0 || select.selectExpr?.kind !== \"countAll\" ||\n (select.aggregates?.length ?? 0) > 0 || select.rowNumber !== undefined ||\n select.groupBy !== undefined || select.having !== undefined ||\n select.limit !== undefined || select.offset !== undefined ||\n select.distinctOn !== undefined || select.rowLock !== undefined ||\n select.countSubqueries !== undefined) {\n throw internalError({ message: \"count subquery must be one ungrouped COUNT(*)\" });\n }\n const inner = renderSelect({ dialect, statement: select, collector });\n return `(${inner.text}) AS ${dialect.quoteIdent({ name: subquery.alias })}`;\n}\n\n// ─── RETURNING ────────────────────────────────────────────────────\n\nfunction applyReturning(params: {\n dialect: SqlDialect;\n requested: readonly ReturningColumn[] | undefined;\n}): { suffix: string; status: \"native\" | \"omitted\" | \"none\" } {\n const { dialect, requested } = params;\n if (requested === undefined || requested.length === 0) {\n return { suffix: \"\", status: \"none\" };\n }\n if (!dialect.capabilities.returning) {\n return { suffix: \"\", status: \"omitted\" };\n }\n const columns = requested\n .map((column) => {\n if (typeof column === \"string\") return dialect.quoteIdent({ name: column });\n if (\"transform\" in column) {\n const name = dialect.quoteIdent({ name: column.name });\n return `${dialect.jsonTextProjection({ expression: name })} AS ${name}`;\n }\n const name = dialect.quoteIdent({ name: column.name });\n return `${textProjection({ dialect, expression: name })} AS ${name}`;\n })\n .join(\", \");\n return { suffix: ` RETURNING ${columns}`, status: \"native\" };\n}\n\n// ─── SELECT ───────────────────────────────────────────────────────\n\n/**\n * {@link KeyTableJoin}: `INNER JOIN (VALUES ROW(?, 0), …) AS alias (…) ON …`.\n * Mysql only — the one dialect whose default text equality is not byte\n * equality, and the shape was measured there (8.0.19+ `VALUES ROW`, already\n * this project's floor for the upsert row alias). Postgres needs a typed\n * parameter per member, so it renders only `citext` / `text` / `integer`\n * members (`CAST($n AS citext | text | bigint)`, plain `(…)` rows) — the\n * runtime emits it for a key tuple with a citext member; every other postgres\n * member refuses, and sqlite has no derived-table column list, so it refuses\n * rather than render an untested form.\n *\n * Ordinals are literal integers (row `i` → `i`): a statement-local index, not\n * data, so a key costs exactly the parameters its members bind — the same\n * budget as `col IN (?, …)`. Text members bind bare so the column's collation\n * decides; numeric members that travel as strings are CAST (see\n * {@link KeyTableMember}).\n *\n * The runtime emits a key table wherever `conflictKeyEquality.textIsBinaryByDefault`\n * is false (packages/runtime/src/relation-loader.ts, `associatesInDatabase`);\n * this refusal is by NAME, so a new dialect declaring that fact must also be\n * measured and admitted here.\n */\nfunction renderKeyTableJoin(params: { dialect: SqlDialect; join: KeyTableJoin; collector: ParamCollector }): string {\n const { dialect, join, collector } = params;\n // Postgres binds every member typed (an untyped VALUES cell would be\n // `text`, see {@link KeyTableMember}); `citext` and `text` are postgres\n // members, mysql binds text bare.\n const postgresMember = (member: KeyTableMember): boolean => member.kind === \"citext\" || member.kind === \"text\" || member.kind === \"integer\";\n const admitted = dialect.name === \"mysql\"\n ? join.members.every((member) => member.kind !== \"citext\" && member.kind !== \"text\")\n : dialect.name === \"postgres\" && join.members.every(postgresMember);\n if (!admitted) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"relation key table\",\n hint: \"the key-table join is mysql's relation association — this dialect compares relation keys by value\",\n });\n }\n if (join.columns.length === 0 || join.columns.length !== join.members.length) {\n throw internalError({ message: `key table needs one member per column, got ${join.members.length} for ${join.columns.length}` });\n }\n if (join.rows.length === 0) throw internalError({ message: \"key table needs at least one key row\" });\n for (const member of join.members) {\n if (member.kind === \"decimal\" && !(Number.isInteger(member.scale) && member.scale >= 0 && member.scale <= 30)) {\n throw internalError({ message: `key table decimal scale must be an integer 0-30, got ${String(member.scale)}` });\n }\n }\n const alias = dialect.quoteIdent({ name: join.alias });\n const memberNames = join.members.map((_, index) => dialect.quoteIdent({ name: `__vibe_k${index}` }));\n const rows = join.rows.map((row, ordinal) => {\n if (row.length !== join.members.length) {\n throw internalError({ message: `key table row has ${row.length} values for ${join.members.length} members` });\n }\n const cells = row.map((value, index) => {\n const placeholder = collector.add(value);\n const member = join.members[index] as KeyTableMember;\n switch (member.kind) {\n case \"integer\":\n return dialect.name === \"mysql\" ? `CAST(${placeholder} AS SIGNED)` : `CAST(${placeholder} AS bigint)`;\n case \"timestamp\":\n return `CAST(${placeholder} AS DATETIME(6))`;\n case \"time\":\n return `CAST(${placeholder} AS TIME(6))`;\n case \"decimal\":\n return `CAST(${placeholder} AS DECIMAL(65,${member.scale}))`;\n case \"citext\":\n return `CAST(${placeholder} AS citext)`;\n case \"text\":\n return `CAST(${placeholder} AS text)`;\n default:\n return placeholder;\n }\n });\n return dialect.name === \"mysql\" ? `ROW(${cells.join(\", \")}, ${ordinal})` : `(${cells.join(\", \")}, ${ordinal})`;\n });\n const on = join.columns.map((column, index) => `${quoteCol(dialect, column)} = ${alias}.${memberNames[index] as string}`).join(\" AND \");\n return `INNER JOIN (VALUES ${rows.join(\", \")}) AS ${alias} (${[...memberNames, dialect.quoteIdent({ name: join.ordinalAlias })].join(\", \")}) ON ${on}`;\n}\n\nfunction renderSelect(params: {\n dialect: SqlDialect;\n statement: SelectStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n if (statement.selectExpr !== undefined && statement.columns.length > 0 && statement.selectExpr.kind !== \"countAll\") {\n throw internalError({ message: \"only countAll can combine with a column list\" });\n }\n if (\n statement.selectExpr !== undefined &&\n statement.aggregates !== undefined &&\n statement.aggregates.length > 0\n ) {\n throw internalError({ message: \"selectExpr and aggregates cannot combine\" });\n }\n const columnList = statement.columns.map((column) => quoteProjection(dialect, column));\n if (statement.selectExpr !== undefined) {\n columnList.push(renderSelectExpr({ dialect, expr: statement.selectExpr }));\n }\n if (statement.aggregates !== undefined) {\n for (const selection of statement.aggregates) {\n const expression = renderAggRef(dialect, selection.agg);\n const projected = selection.castText === true ? textProjection({ dialect, expression }) : expression;\n columnList.push(`${projected} AS ${dialect.quoteIdent({ name: selection.alias })}`);\n }\n }\n if (statement.countSubqueries !== undefined) {\n for (const subquery of statement.countSubqueries) {\n columnList.push(renderCountSubquery({ dialect, subquery, collector }));\n }\n }\n if (statement.rowNumber !== undefined) {\n const rowNumber = statement.rowNumber;\n if (rowNumber.partitionBy.length === 0) {\n throw internalError({ message: \"rowNumber needs at least one partition column\" });\n }\n const partition = rowNumber.partitionBy.map((column) => quoteCol(dialect, column)).join(\", \");\n const order =\n rowNumber.orderBy.length === 0\n ? \"\"\n : ` ORDER BY ${rowNumber.orderBy.map((term) => renderOrderTerm({ dialect, term, collector })).join(\", \")}`;\n columnList.push(\n `ROW_NUMBER() OVER (PARTITION BY ${partition}${order}) AS ${dialect.quoteIdent({ name: rowNumber.alias })}`,\n );\n }\n let distinctPrefix = \"\";\n if (statement.distinctOn !== undefined && statement.distinctOn.length > 0) {\n if (!dialect.capabilities.distinctOn) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"SELECT DISTINCT ON\",\n hint: \"postgres-only — the runtime emulates distinct client-side on this dialect\",\n });\n }\n distinctPrefix = `DISTINCT ON (${statement.distinctOn.map((column) => quoteCol(dialect, typedOrderRef({ statement, column }))).join(\", \")}) `;\n }\n const columns = columnList.length === 0 ? \"*\" : columnList.join(\", \");\n\n let from: string;\n if (statement.fromSelect !== undefined) {\n if (statement.table.alias !== undefined) {\n throw internalError({ message: \"fromSelect uses table.name as the subquery alias — table.alias must be unset\" });\n }\n // The subquery renders before WHERE/ORDER BY, so its parameters land in\n // the shared sequence exactly where they appear in the text.\n const inner = renderSelect({ dialect, statement: statement.fromSelect, collector });\n from = `(${inner.text}) AS ${dialect.quoteIdent({ name: statement.table.name })}`;\n } else {\n from = renderTable(dialect, statement.table);\n }\n let text = `SELECT ${distinctPrefix}${columns} FROM ${from}`;\n\n if (statement.innerJoins !== undefined && statement.innerJoins.length > 0) {\n for (const join of statement.innerJoins) {\n if (join.on.length === 0) {\n throw internalError({ message: \"inner join needs at least one ON pair\" });\n }\n const on = join.on\n .map((pair) => `${quoteCol(dialect, pair.left)} = ${quoteCol(dialect, pair.right)}`)\n .join(\" AND \");\n text += ` INNER JOIN ${renderTable(dialect, join.table)} ON ${on}`;\n }\n }\n if (statement.keyTable !== undefined) {\n text += ` ${renderKeyTableJoin({ dialect, join: statement.keyTable, collector })}`;\n }\n\n if (statement.lateralJoins !== undefined && statement.lateralJoins.length > 0) {\n if (!dialect.capabilities.lateralJoin) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"LATERAL JOIN relation loading\",\n hint: 'use the portable \"query\" relation strategy on this dialect',\n });\n }\n for (const join of statement.lateralJoins) {\n text += ` ${renderLateralJoin({ dialect, join, collector })}`;\n }\n }\n\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n if (statement.groupBy !== undefined && statement.groupBy.length > 0) {\n text += ` GROUP BY ${statement.groupBy.map((column) => quoteCol(dialect, column)).join(\", \")}`;\n }\n if (statement.having !== undefined) {\n text += ` HAVING ${renderExpr({ dialect, expr: statement.having, collector })}`;\n }\n if (statement.orderBy !== undefined && statement.orderBy.length > 0) {\n const terms = statement.orderBy.map((term) =>\n renderOrderTerm({ dialect, term: \"column\" in term ? { ...term, column: typedOrderRef({ statement, column: term.column }) } : term, collector }),\n );\n text += ` ORDER BY ${terms.join(\", \")}`;\n }\n\n if (statement.limit !== undefined) {\n assertCount(statement.limit, \"limit\");\n text += ` LIMIT ${statement.limit}`;\n }\n if (statement.offset !== undefined) {\n assertCount(statement.offset, \"offset\");\n if (statement.limit === undefined && dialect.offsetRequiresLimit !== null) {\n text += ` LIMIT ${dialect.offsetRequiresLimit.limitText}`;\n }\n text += ` OFFSET ${statement.offset}`;\n }\n if (statement.rowLock !== undefined) {\n const clause = renderRowLockClause({ dialect, lock: statement.rowLock });\n if (clause !== null) text += ` ${clause}`;\n }\n\n return { text, values: collector.values, returning: \"none\" };\n}\n\n// ─── INSERT (incl. upsert) ────────────────────────────────────────\n\nfunction renderInsert(params: {\n dialect: SqlDialect;\n statement: InsertStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n if (statement.columns.length === 0) {\n throw internalError({ message: \"insert requires at least one column\" });\n }\n if (statement.rows.length === 0) {\n throw internalError({ message: \"insert requires at least one row\" });\n }\n for (const row of statement.rows) {\n if (row.length !== statement.columns.length) {\n throw internalError({\n message: `insert row has ${row.length} values but ${statement.columns.length} columns`,\n });\n }\n }\n\n const onConflict = statement.onConflict;\n const skipConflicts = onConflict !== undefined && \"doNothing\" in onConflict;\n const insertKeyword =\n skipConflicts && dialect.doNothingForm === \"insertIgnore\" ? \"INSERT IGNORE INTO\" : \"INSERT INTO\";\n\n const columnList = statement.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n const rowsSql = statement.rows\n .map(\n (row) =>\n `(${row\n .map((value) => {\n // Json cell: the param's type is pinned (`$n::text::jsonb` on\n // postgres) so OID-typed drivers cannot double-encode the document.\n if (isJsonParamCell(value)) return `${collector.add(value.text)}${jsonCellCast(dialect, value)}`;\n // Database-clock cell: the dialect's now() expression.\n if (isDbNowMarker(value)) {\n return dialect.renderDbNow({ offsetSeconds: value.offsetSeconds, collector });\n }\n if (!isSqlDefaultCell(value)) return collector.add(value);\n // M4: a heterogeneous createMany cell defers to the COLUMN default.\n if (!dialect.rowDefaultKeyword) {\n throw internalError({\n message: `${dialect.name} cannot render a per-row DEFAULT cell — rows must be grouped by column set`,\n });\n }\n return \"DEFAULT\";\n })\n .join(\", \")})`,\n )\n .join(\", \");\n let text = `${insertKeyword} ${renderTable(dialect, statement.table)} (${columnList}) VALUES ${rowsSql}`;\n\n // Mysql can only name the incoming row through a ROW ALIAS declared right\n // after the VALUES list; postgres/sqlite have the built-in `excluded`\n // pseudo-relation and need nothing. Emitted only when the update arm\n // actually references the incoming row.\n if (\n onConflict !== undefined &&\n !(\"doNothing\" in onConflict) &&\n dialect.excludedRowRef.form === \"rowAlias\" &&\n Object.values(onConflict.update).some((value) => isExcludedRef(value) || (isSqlFragment(value) && sqlUsesIncoming({ fragment: value })))\n ) {\n text += ` AS ${dialect.quoteIdent({ name: dialect.excludedRowRef.alias })}`;\n }\n\n if (onConflict !== undefined) {\n if (\"doNothing\" in onConflict) {\n if (dialect.doNothingForm === \"onConflictDoNothing\") {\n let target = \"\";\n if (onConflict.constraint !== undefined) {\n if (dialect.name !== \"postgres\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a named-constraint conflict target (ON CONFLICT ON CONSTRAINT)\",\n hint: \"only postgres names constraints in conflict targets — use a column-list target\",\n });\n }\n target = ` ON CONSTRAINT ${dialect.quoteIdent({ name: onConflict.constraint })}`;\n } else if (onConflict.columns !== undefined && onConflict.columns.length > 0) {\n target = ` (${onConflict.columns.map((name) => dialect.quoteIdent({ name })).join(\", \")})`;\n if (onConflict.conflictWhere !== undefined) {\n // RAW predicate — the engines match it against the index's own\n // predicate structurally; parameters could never match (ast.ts).\n target += ` WHERE ${onConflict.conflictWhere}`;\n }\n }\n text += ` ON CONFLICT${target} DO NOTHING`;\n } else if (onConflict.constraint !== undefined || onConflict.conflictWhere !== undefined) {\n // INSERT IGNORE fires on ANY duplicate key. A bare column target\n // degrades to that documented wider skip; a REFINED target (named\n // constraint, partial-index predicate) must not silently widen —\n // the builder gates first, the renderer defends.\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a refined conflict target (constraint / partial-index predicate) on INSERT IGNORE\",\n hint: \"mysql skips on any duplicate key — drop the refinement or gate the call per dialect\",\n });\n }\n } else {\n const updates = Object.entries(onConflict.update);\n if (updates.length === 0) {\n throw internalError({ message: \"upsert update must set at least one column\" });\n }\n // The update arm's self-references MUST be table-qualified: inside\n // `ON CONFLICT … DO UPDATE SET`, postgres has BOTH the target row and\n // the `excluded` pseudo-relation in scope, so a bare `\"views\" + $n`\n // is rejected as ambiguous (SQLSTATE 42702). Sqlite and mysql accept\n // the qualified form with identical semantics (the pre-update row), so\n // one rule covers every dialect instead of a per-dialect divergence.\n const selfRef = dialect.quoteIdent({ name: statement.table.name });\n const assignments = renderAssignments({ dialect, entries: updates, collector, selfRef, allowExcluded: true, tableName: statement.table.name });\n if (dialect.upsertForm === \"onConflict\") {\n if (onConflict.lastInsertIdColumn !== undefined) {\n throw internalError({ message: \"lastInsertIdColumn is a mysql (onDuplicateKey) construct\" });\n }\n if (onConflict.constraint !== undefined && dialect.name !== \"postgres\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a named-constraint conflict target (ON CONFLICT ON CONSTRAINT)\",\n hint: \"sqlite conflict targets are column lists — name the indexed columns instead\",\n });\n }\n if (onConflict.constraint !== undefined && onConflict.conflictWhere !== undefined) {\n throw internalError({\n message: \"a named-constraint conflict target already identifies the index — it cannot carry a partial predicate too\",\n });\n }\n // RAW predicate — matched structurally against the partial index's own\n // stored predicate, exactly like the DO NOTHING form (ast.ts).\n const partial = onConflict.conflictWhere === undefined ? \"\" : ` WHERE ${onConflict.conflictWhere}`;\n const target =\n onConflict.constraint !== undefined\n ? ` ON CONSTRAINT ${dialect.quoteIdent({ name: onConflict.constraint })}`\n : ` (${onConflict.columns.map((name) => dialect.quoteIdent({ name })).join(\", \")})${partial}`;\n text += ` ON CONFLICT${target} DO UPDATE SET ${assignments}`;\n } else {\n if (onConflict.constraint !== undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a named-constraint conflict target on ON DUPLICATE KEY UPDATE\",\n hint: \"mysql's ODKU fires on any duplicate key — no target can be named\",\n });\n }\n if (onConflict.conflictWhere !== undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a partial-index conflict target on ON DUPLICATE KEY UPDATE\",\n hint: \"mysql's ODKU fires on any duplicate key — a partial arbiter cannot be selected; gate the call per dialect\",\n });\n }\n // B2: the update arm must record WHICH row it addressed — without this,\n // LAST_INSERT_ID() is stale after ODKU takes the update arm and the\n // read-back can resolve an unrelated row.\n const trick =\n onConflict.lastInsertIdColumn === undefined\n ? \"\"\n : `, ${dialect.quoteIdent({ name: onConflict.lastInsertIdColumn })} = LAST_INSERT_ID(${dialect.quoteIdent({ name: onConflict.lastInsertIdColumn })})`;\n text += ` ON DUPLICATE KEY UPDATE ${assignments}${trick}`;\n }\n }\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n\n// ─── UPDATE ───────────────────────────────────────────────────────\n\nfunction renderUpdate(params: {\n dialect: SqlDialect;\n statement: UpdateStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n const assignments = Object.entries(statement.set);\n if (assignments.length === 0) {\n throw internalError({ message: \"update must set at least one column\" });\n }\n const setSql = renderAssignments({ dialect, entries: assignments, collector });\n let text = `UPDATE ${renderTable(dialect, statement.table)} SET ${setSql}`;\n\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n\n// ─── Assignments (SET / DO UPDATE SET) ────────────────────────────\n\n/**\n * `SET` assignments, shared by UPDATE and the upsert update arm.\n *\n * `selfRef` (the quoted target table) qualifies the READ side of an operation\n * that reads the column it writes — required inside `ON CONFLICT DO UPDATE`,\n * where a bare reference is ambiguous with `excluded` on postgres. The write\n * side is never qualified: `SET \"t\".\"col\" = …` is a syntax error everywhere.\n * A plain UPDATE passes no `selfRef` — it has no second relation in scope.\n */\n/**\n * The incoming row's column, qualified for this dialect: `excluded.\"col\"`\n * (postgres/sqlite) or `` `new`.`col` `` (mysql's row alias, declared after the\n * VALUES list by {@link renderInsert}).\n */\nfunction renderIncomingRowColumn(params: { dialect: SqlDialect; column: string }): string {\n const { dialect, column } = params;\n const ref = dialect.excludedRowRef;\n const qualifier = ref.form === \"keyword\" ? ref.name : dialect.quoteIdent({ name: ref.alias });\n return `${qualifier}.${dialect.quoteIdent({ name: column })}`;\n}\n\nfunction renderAssignments(params: {\n dialect: SqlDialect;\n entries: readonly (readonly [string, unknown])[];\n collector: ParamCollector;\n selfRef?: string;\n /** Only an upsert's update arm has an incoming row to reference. */\n allowExcluded?: boolean;\n tableName?: string;\n}): string {\n const { dialect, entries, collector, selfRef } = params;\n return entries\n .map(([name, value]) => {\n const column = dialect.quoteIdent({ name });\n const read = selfRef === undefined ? column : `${selfRef}.${column}`;\n // The INCOMING row's value for this column — a column reference, so a\n // batched upsert writes each conflicting row's own value while binding\n // it exactly once (in the VALUES list).\n if (isSqlFragment(value)) {\n if (params.allowExcluded !== true || selfRef === undefined) throw internalError({ message: \"SQL assignment fragments require a conflict update\" });\n return `${column} = ${renderSqlFragment({ dialect, fragment: value, collector, conflict: { table: params.tableName! } })}`;\n }\n if (isExcludedRef(value)) {\n if (params.allowExcluded !== true) {\n throw internalError({\n message: `an incoming-row reference (${value.column}) is only meaningful inside an upsert's update arm`,\n });\n }\n return `${column} = ${renderIncomingRowColumn({ dialect, column: value.column })}`;\n }\n // Json cell: same param-type pinning as the VALUES cells above.\n if (isJsonParamCell(value)) {\n return `${column} = ${collector.add(value.text)}${jsonCellCast(dialect, value)}`;\n }\n if (isSetOperation(value)) {\n const operand = collector.add(value.value);\n const numeric = dialect.name === \"sqlite\" && value.numericType === \"Decimal\" ? `CAST(${operand} AS REAL)` : operand;\n return `${column} = ${read} ${SET_OPERATION_SQL[value.__op]} ${numeric}`;\n }\n if (isDbNowMarker(value)) {\n return `${column} = ${dialect.renderDbNow({ offsetSeconds: value.offsetSeconds, collector })}`;\n }\n if (isListSetOperation(value)) {\n assertScalarArrays(dialect, 'the scalar-list update operation \"push\"');\n if (value.__listOp === \"append\") {\n return `${column} = array_append(${read}, ${collector.add(value.value)})`;\n }\n return `${column} = ${read} || ${collector.add(value.value)}`;\n }\n return `${column} = ${collector.add(value)}`;\n })\n .join(\", \");\n}\n\n// ─── DELETE ───────────────────────────────────────────────────────\n\nfunction renderDelete(params: {\n dialect: SqlDialect;\n statement: DeleteStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n let text = `DELETE FROM ${renderTable(dialect, statement.table)}`;\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n\n// ─── Statement chains (WITH … SELECT) ─────────────────────────────\n\n/** Derived-table aliases of a chain's verdict SELECT — no step may take them. */\nconst CHAIN_ROWS_ALIAS = \"__vibe_rows\";\nconst CHAIN_ONE_ALIAS = \"__vibe_one\";\n\n/**\n * `WITH \"a\" AS (…), \"b\" AS (…) <final SELECT>` — see {@link ChainStatement}.\n * Steps render in order through the ordinary statement renderers on ONE\n * shared collector, so parameters number in step order, then the verdict.\n *\n * The verdict form is `SELECT rows.cols, <verdict> FROM (SELECT 1) LEFT JOIN\n * (<union>) AS rows ON TRUE`: one row per written row, or ONE all-NULL row\n * carrying the verdict when the union is empty. A `LEFT JOIN`, not a NULL\n * marker branch inside the `UNION ALL`, so every column keeps its RETURNING\n * type — PostgreSQL resolves a nested UNION's untyped NULLs pairwise (two NULL\n * branches become `text`), which a bare marker branch would trip over.\n */\nfunction renderChain(params: {\n dialect: SqlDialect;\n statement: ChainStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n if (dialect.statementChain === null) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a statement chain (data-modifying WITH steps)\",\n hint: \"this dialect accepts only SELECT inside WITH — gate on SqlDialect.statementChain and keep the multi-statement path\",\n });\n }\n if (statement.steps.length === 0) throw internalError({ message: \"a statement chain needs at least one step\" });\n const defined = new Set<string>();\n const steps: string[] = [];\n for (const step of statement.steps) {\n if (step.name === CHAIN_ROWS_ALIAS || step.name === CHAIN_ONE_ALIAS || defined.has(step.name)) {\n throw internalError({ message: `chain step name \"${step.name}\" is reserved or repeated` });\n }\n const body = renderChainStep({ dialect, statement: step.statement, collector, earlier: defined });\n steps.push(`${dialect.quoteIdent({ name: step.name })} AS (${body})`);\n defined.add(step.name);\n }\n\n const result = statement.result;\n if (result.rowsFrom.length === 0 || result.columns.length === 0) {\n throw internalError({ message: \"a chain result needs at least one source step and one column\" });\n }\n for (const name of result.rowsFrom) {\n if (!defined.has(name)) throw internalError({ message: `chain result reads undefined step \"${name}\"` });\n }\n const columnList = result.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n const union = result.rowsFrom\n .map((name) => `SELECT ${columnList} FROM ${dialect.quoteIdent({ name })}`)\n .join(\" UNION ALL \");\n let select = union;\n if (result.verdict !== undefined || result.tally !== undefined || (result.veto !== undefined && result.veto.length > 0)) {\n const extra: string[] = [];\n for (const alias of [result.verdict?.alias, result.tally?.alias]) {\n if (alias !== undefined && result.columns.includes(alias)) {\n throw internalError({ message: `chain result alias \"${alias}\" collides with a result column` });\n }\n }\n const rows = dialect.quoteIdent({ name: CHAIN_ROWS_ALIAS });\n const projected = result.columns.map((name) => `${rows}.${dialect.quoteIdent({ name })}`);\n if (result.verdict !== undefined) {\n extra.push(`${renderExpr({ dialect, expr: result.verdict.expr, collector })} AS ${dialect.quoteIdent({ name: result.verdict.alias })}`);\n }\n if (result.tally !== undefined || (result.veto !== undefined && result.veto.length > 0)) {\n extra.push(renderTallyColumn({ dialect, result, defined, collector }));\n }\n select =\n `SELECT ${[...projected, ...extra].join(\", \")} FROM (SELECT 1) AS ${dialect.quoteIdent({ name: CHAIN_ONE_ALIAS })}` +\n ` LEFT JOIN (${union}) AS ${rows} ON TRUE`;\n }\n return { text: `WITH ${steps.join(\", \")} ${select}`, values: collector.values, returning: \"none\" };\n}\n\nfunction renderChainStep(params: {\n dialect: SqlDialect;\n statement: ChainStepStatement;\n collector: ParamCollector;\n earlier: ReadonlySet<string>;\n}): string {\n const { dialect, statement, collector } = params;\n switch (statement.kind) {\n case \"select\":\n return renderSelect({ dialect, statement, collector }).text;\n case \"insert\":\n return renderInsert({ dialect, statement, collector }).text;\n case \"insertSelect\":\n return renderInsertSelect({ dialect, statement, collector, earlier: params.earlier });\n case \"update\":\n return renderUpdate({ dialect, statement, collector }).text;\n case \"delete\":\n return renderDelete({ dialect, statement, collector }).text;\n }\n}\n\n/** One SELECT-list cell in a VALUES form: encoded value, Json cell or clock cell — never DEFAULT. */\nfunction renderSelectCell(params: { dialect: SqlDialect; value: unknown; collector: ParamCollector }): string {\n const { dialect, value, collector } = params;\n if (isJsonParamCell(value)) return `${collector.add(value.text)}${jsonCellCast(dialect, value)}`;\n if (isDbNowMarker(value)) return dialect.renderDbNow({ offsetSeconds: value.offsetSeconds, collector });\n if (isSqlDefaultCell(value)) {\n throw internalError({ message: \"DEFAULT is not allowed in an INSERT … SELECT list — omit the column instead\" });\n }\n return collector.add(value);\n}\n\n/**\n * `(SELECT cols FROM (VALUES (<typed NULL row>), ($1, $2), …) AS \"alias\"\n * (cols) OFFSET 1) AS \"alias\"` — see {@link ChainRowSource}: the first VALUES\n * row is one `(SELECT \"col\" FROM typedBy WHERE FALSE)` per column (a typed\n * NULL), which types every later parameter by the target table's own column;\n * `OFFSET 1` drops it again.\n */\nfunction renderRowSource(params: { dialect: SqlDialect; source: ChainRowSource; collector: ParamCollector }): string {\n const { dialect, source, collector } = params;\n if (source.columns.length === 0 || source.rows.length === 0) {\n throw internalError({ message: \"a row source needs at least one column and one row\" });\n }\n const typedBy = renderTable(dialect, source.typedBy);\n const columns = source.columns.map((name) => dialect.quoteIdent({ name }));\n const rows = [`(${columns.map((column) => `(SELECT ${column} FROM ${typedBy} WHERE FALSE)`).join(\", \")})`];\n for (const row of source.rows) {\n if (row.length !== source.columns.length) {\n throw internalError({ message: `row source row has ${row.length} values but ${source.columns.length} columns` });\n }\n rows.push(`(${row.map((value) => renderSelectCell({ dialect, value, collector })).join(\", \")})`);\n }\n const alias = dialect.quoteIdent({ name: source.alias });\n const columnList = columns.join(\", \");\n return `(SELECT ${columnList} FROM (VALUES ${rows.join(\", \")}) AS ${alias} (${columnList}) OFFSET 1) AS ${alias}`;\n}\n\n/**\n * The tally column guarded by the vetoes: `CASE WHEN NOT EXISTS (SELECT 1\n * FROM \"s\") THEN CAST('__vibe_veto:<token>:' || $n || ':' || (SELECT count(*)\n * FROM \"s\") AS integer) … ELSE (SELECT count(*) FROM \"a\") + … END`, `$n`\n * binding the veto's nonce. A veto with `minRows` above 1 (EPIC W) tests\n * `WHEN (SELECT count(*) FROM \"s\") < <minRows>` instead.\n *\n * The failing cast is how a plain SQL expression raises an error (SQLSTATE\n * 22P02, the marker quoted in the message). Its operand reads the step, so it\n * is NOT a constant: PostgreSQL folds constant CASE arms at plan time and\n * would raise even when the arm is never taken; this one is evaluated only\n * when its WHEN holds. The count it appends is the rows the step returned.\n */\nfunction renderTallyColumn(params: { dialect: SqlDialect; result: ChainResult; defined: ReadonlySet<string>; collector: ParamCollector }): string {\n const { dialect, result, defined, collector } = params;\n const tally = result.tally;\n if (tally === undefined) throw internalError({ message: \"a chain veto needs a tally column to guard\" });\n if (tally.steps.length === 0) throw internalError({ message: \"a chain tally needs at least one step\" });\n const step = (name: string): string => {\n if (!defined.has(name)) throw internalError({ message: `chain tally or veto reads undefined step \"${name}\"` });\n return dialect.quoteIdent({ name });\n };\n const count = (name: string): string => `(SELECT count(*) FROM ${step(name)})`;\n const sum = tally.steps.map(count).join(\" + \");\n const vetoes = result.veto ?? [];\n if (vetoes.length === 0) return `${sum} AS ${dialect.quoteIdent({ name: tally.alias })}`;\n const arms = vetoes.map((veto) => {\n if (!CHAIN_VETO_TOKEN_PATTERN.test(veto.token)) throw internalError({ message: `chain veto token \"${veto.token}\" is not a lower-case word` });\n if (typeof veto.nonce !== \"string\" || veto.nonce === \"\") throw internalError({ message: `chain veto \"${veto.token}\" needs a non-empty nonce` });\n const minRows = veto.minRows ?? 1;\n if (!Number.isSafeInteger(minRows) || minRows < 1) throw internalError({ message: `chain veto \"${veto.token}\" needs a positive integer minRows` });\n const when = minRows === 1 ? `WHEN NOT EXISTS (SELECT 1 FROM ${step(veto.step)})` : `WHEN ${count(veto.step)} < ${minRows}`;\n return `${when} THEN CAST('${CHAIN_VETO_PREFIX}${veto.token}:' || ${collector.add(veto.nonce)} || ':' || ${count(veto.step)} AS integer)`;\n });\n return `CASE ${arms.join(\" \")} ELSE ${sum} END AS ${dialect.quoteIdent({ name: tally.alias })}`;\n}\n\n/** `INSERT INTO t (cols) SELECT <cells> [FROM steps] [WHERE …] [RETURNING …]` — a chain step only. */\nfunction renderInsertSelect(params: {\n dialect: SqlDialect;\n statement: InsertSelectStatement;\n collector: ParamCollector;\n earlier: ReadonlySet<string>;\n}): string {\n const { dialect, statement, collector } = params;\n if (statement.columns.length === 0) throw internalError({ message: \"insert requires at least one column\" });\n if (statement.cells.length !== statement.columns.length) {\n throw internalError({\n message: `insert row has ${statement.cells.length} values but ${statement.columns.length} columns`,\n });\n }\n const from = statement.from ?? [];\n for (const name of from) {\n if (!params.earlier.has(name)) throw internalError({ message: `INSERT … SELECT reads step \"${name}\" before it is defined` });\n }\n const source = statement.source;\n if (source !== undefined && (params.earlier.has(source.alias) || from.includes(source.alias))) {\n throw internalError({ message: `row source alias \"${source.alias}\" collides with a chain step` });\n }\n const cells = statement.cells.map((value) => {\n if (isStepColumnRef(value)) {\n if (!from.includes(value.step) && value.step !== source?.alias) {\n throw internalError({ message: `cell reads step \"${value.step}\", which the INSERT … SELECT does not name in FROM` });\n }\n return `${dialect.quoteIdent({ name: value.step })}.${dialect.quoteIdent({ name: value.column })}`;\n }\n return renderSelectCell({ dialect, value, collector });\n });\n const columnList = statement.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n let text = `INSERT INTO ${renderTable(dialect, statement.table)} (${columnList}) SELECT ${cells.join(\", \")}`;\n const relations = from.map((name) => dialect.quoteIdent({ name }));\n if (source !== undefined) relations.push(renderRowSource({ dialect, source, collector }));\n if (relations.length > 0) text += ` FROM ${relations.join(\" CROSS JOIN \")}`;\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n return text + applyReturning({ dialect, requested: statement.returning }).suffix;\n}\n",
46
+ "import { renderSqliteJsonEquality } from \"./dialects/sqlite-json-equality.ts\";\nimport { JSON_TRANSPORT, projectionOutputName } from \"./json-transport.ts\";\nimport { isFixedDiagnostic, renderDiagnostic } from \"./dialects/diagnostics.ts\";\nimport type { DiagnosticStatement } from \"./dialects/diagnostics.ts\";\nimport { renderPostgresExplain, renderPostgresWorkload } from \"./dialects/postgres-diagnostics.ts\";\nimport { renderRlsReadinessQuery, renderRlsProbeTable, renderRlsPolicyPath } from \"./dialects/postgres-rls-readiness.ts\";\n/**\n * Statement renderer: SQL AST × dialect → { text, values, returning }.\n *\n * The shared grammar lives here; every dialect divergence goes through an\n * explicit SqlDialect strategy field. Malformed ASTs throw VIBE_INTERNAL —\n * the AST is built by VibeORM code, so a bad shape is always our bug.\n */\n\nimport { assertSqlNamespace, internalError, unsupportedCapability } from \"@vibeorm/schema\";\nimport { isSqlFragment, renderSqlFragment, sqlUsesIncoming } from \"./composable.ts\";\nimport type { SqlFragmentSpec } from \"@vibeorm/schema\";\nimport type { ColRef, JsonParamCell, KeyTableJoin, KeyTableMember, OrderTerm, SqlStatement, RlsReadinessStatement, RlsProbeTableStatement, RlsPolicyPathStatement, SqlExpr, TableRef } from \"./ast.ts\";\nimport type {\n AggFn,\n AggRef,\n ChainResult,\n ChainRowSource,\n ChainStatement,\n ChainStepStatement,\n DeleteStatement,\n InsertSelectStatement,\n InsertStatement,\n LateralJoin,\n CountSubquery,\n ReturningColumn,\n SelectExpr,\n SelectStatement,\n SetOperator,\n UpdateStatement,\n} from \"./ast.ts\";\nimport { CHAIN_VETO_PREFIX, CHAIN_VETO_TOKEN_PATTERN, isDbNowMarker, isExcludedRef, isJsonParamCell, isListSetOperation, isSetOperation, isSqlDefaultCell, isStepColumnRef } from \"./ast.ts\";\nimport type { SqlDialect } from \"./dialect.ts\";\nimport { containsPattern, endsWithPattern, startsWithPattern, strictMatchPattern } from \"./like.ts\";\nimport { renderAdvisoryLock, renderRowLockClause } from \"./locks.ts\";\nimport { ParamCollector } from \"./params.ts\";\nimport { isJsonListParameter, jsonListParameter } from \"./json-list-parameter.ts\";\nimport { renderRlsContext, renderRlsDisable, renderRlsDropPolicy, renderRlsEnable, renderRlsForce, renderRlsNoForce, renderRlsPolicy, renderRlsRole } from \"./dialects/postgres-rls.ts\";\n\n// ─── Result shape ─────────────────────────────────────────────────\n\nexport type RenderedQuery = {\n readonly text: string;\n readonly values: unknown[];\n /**\n * RETURNING status: \"native\" (rendered), \"omitted\" (requested but the dialect\n * lacks it — caller must re-select), \"none\" (not requested).\n */\n readonly returning: \"native\" | \"omitted\" | \"none\";\n};\n\n// ─── Entry point ──────────────────────────────────────────────────\n\nexport function renderStatement(params: { dialect: SqlDialect; statement: DiagnosticStatement | SqlStatement | RlsReadinessStatement | RlsProbeTableStatement | RlsPolicyPathStatement }): RenderedQuery {\n const { dialect, statement } = params;\n const collector = new ParamCollector(dialect);\n switch (statement.kind) {\n case \"diagnostic\": {\n // EPIC 5: `postgresExplain` wraps another statement, so it renders that\n // one first and keeps its parameters; the read-only workload reads take\n // their own identifiers and bounds. Everything else is a fixed probe.\n if (isFixedDiagnostic(statement)) return renderDiagnostic({ dialect, query: statement.query });\n if (statement.query === \"postgresExplain\") {\n return renderPostgresExplain({\n dialect,\n query: renderStatement({ dialect, statement: statement.statement }),\n ...(statement.options === undefined ? {} : { options: statement.options }),\n });\n }\n return renderPostgresWorkload({ dialect, ...statement });\n }\n case \"select\":\n return renderSelect({ dialect, statement, collector });\n case \"advisoryLock\":\n return renderAdvisoryLock({ dialect, statement, collector });\n case \"insert\":\n return renderInsert({ dialect, statement, collector });\n case \"update\":\n return renderUpdate({ dialect, statement, collector });\n case \"delete\":\n return renderDelete({ dialect, statement, collector });\n case \"chain\":\n return renderChain({ dialect, statement, collector });\n case \"rlsReadiness\": return renderRlsReadinessQuery({ dialect, ...statement });\n case \"rlsProbeTable\": return renderRlsProbeTable({ dialect, ...statement });\n case \"rlsPolicyPath\": return renderRlsPolicyPath({ dialect, ...statement });\n case \"rlsEnable\":\n return renderRlsEnable({ dialect, table: statement.table });\n case \"rlsForce\":\n return renderRlsForce({ dialect, table: statement.table });\n case \"rlsDisable\":\n return renderRlsDisable({ dialect, table: statement.table });\n case \"rlsNoForce\":\n return renderRlsNoForce({ dialect, table: statement.table });\n case \"rlsDropPolicy\":\n return renderRlsDropPolicy({ dialect, table: statement.table, policyName: statement.policyName });\n case \"rlsPolicy\":\n return renderRlsPolicy({ dialect, ...statement });\n case \"rlsContext\":\n return renderRlsContext({ dialect, context: statement.context, values: statement.values });\n case \"rlsRole\":\n return renderRlsRole({ dialect, role: statement.role });\n }\n}\n\n// ─── Shared pieces ────────────────────────────────────────────────\n\nfunction quoteCol(dialect: SqlDialect, column: ColRef): string {\n const name = dialect.quoteIdent({ name: column.name });\n const ref = column.table === undefined ? name : `${dialect.quoteIdent({ name: column.table })}.${name}`;\n // B4: sqlite Decimal compare/order/aggregate sites read the TEXT column as\n // REAL — the builder sets this only there, never on projections.\n if (column.castReal === true) {\n if (dialect.name !== \"sqlite\") {\n throw internalError({ message: \"ColRef.castReal is a sqlite Decimal construct\" });\n }\n return `CAST(${ref} AS REAL)`;\n }\n // D3: postgres `json` order/distinct/compare sites read the column as jsonb.\n if (column.castJsonb !== undefined) {\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: \"ColRef.castJsonb is a postgres json construct\" });\n }\n return `${ref}::${column.castJsonb}`;\n }\n return ref;\n}\n\n/**\n * An ORDER BY / DISTINCT ON column of a SELECT, protected from binding to an\n * OUTPUT column. Postgres, MySQL and SQLite all resolve a bare name in ORDER\n * BY (postgres: DISTINCT ON too) to an output column of that name FIRST. When\n * the projection renames something else to the column's name — a postgres\n * `Float[]`/`Json[]` list read as `\"col\"::text AS \"col\"`, or a projection\n * alias — the bare name would order the TEXT, not the typed column\n * (`{10}` < `{1e-07}` < `{9}`). Such a reference is qualified with the\n * select's FROM name (its alias, or the derived-table name), which only ever\n * names the input column. Qualified references, casts (`castReal`,\n * `castJsonb` — expressions read input columns) and plain projections render\n * unchanged. Window ORDER BY (ROW_NUMBER) never sees output names, so it is\n * not passed through here.\n */\nfunction typedOrderRef(params: { statement: SelectStatement; column: ColRef }): ColRef {\n const { statement, column } = params;\n if (column.table !== undefined || column.castReal === true || column.castJsonb !== undefined) return column;\n const renamed = statement.columns.some(\n (projected) => (projected.alias ?? projected.name) === column.name && (projected.transform !== undefined || projected.alias !== undefined),\n );\n return renamed ? { ...column, table: statement.table.alias ?? statement.table.name } : column;\n}\n\n/**\n * The cast a {@link JsonParamCell} renders after its placeholder: the\n * dialect's json param cast (`::text::jsonb` on postgres, empty elsewhere),\n * or `::text::json` for a cell bound for a postgres `json` column — the\n * server parses the text as `json` and stores it as written (D3).\n */\nfunction jsonCellCast(dialect: SqlDialect, cell: JsonParamCell): string {\n if (cell.storage !== \"json\" || dialect.jsonParamCast === \"\") return dialect.jsonParamCast;\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: \"JsonParamCell storage json is a postgres construct\" });\n }\n return \"::text::json\";\n}\n\n/**\n * Projection rendering: a plain reference or its wire transform. JSON text\n * projections use the dialect primitive and keep explicit aliases. Text casts\n * preserve lossless transport on every dialect; base64 remains postgres-only.\n */\nfunction quoteProjection(dialect: SqlDialect, column: ColRef): string {\n if (column.transform === undefined) {\n const base = quoteCol(dialect, column);\n if (column.alias === undefined) return base;\n return `${base} AS ${dialect.quoteIdent({ name: column.alias })}`;\n }\n if (column.transform === \"jsonText\") {\n const ref = quoteCol(dialect, column);\n const alias = dialect.quoteIdent({ name: column.alias ?? column.name });\n return `${dialect.jsonTextProjection({ expression: ref })} AS ${alias}`;\n }\n const ref = quoteCol(dialect, column);\n const alias = dialect.quoteIdent({ name: column.alias ?? column.name });\n if (column.transform === \"castText\") return `${textProjection({ dialect, expression: ref })} AS ${alias}`;\n if (dialect.name !== \"postgres\") {\n throw internalError({ message: \"encodeBase64 is a postgres construct\" });\n }\n return `encode(${ref}, 'base64') AS ${alias}`;\n}\n\nfunction textProjection(params: { dialect: SqlDialect; expression: string }): string {\n return params.dialect.name === \"postgres\" ? `${params.expression}::text`\n : `CAST(${params.expression} AS ${params.dialect.name === \"mysql\" ? \"CHAR\" : \"TEXT\"})`;\n}\n\n/**\n * A SELECT list rendered exactly as a {@link SelectStatement}'s columns are —\n * plain references and their wire transforms (`\"t\".\"scores\"::text AS\n * \"scores\"`) — for SQL assembled outside the AST (extension statements), so\n * its rows reach the driver in the same formats as `findMany`'s.\n */\nexport function renderProjection(params: { dialect: SqlDialect; columns: readonly ColRef[] }): string {\n const { dialect, columns } = params;\n return columns.map((column) => quoteProjection(dialect, column)).join(\", \");\n}\n\nfunction renderTable(dialect: SqlDialect, table: TableRef): string {\n if (table.namespace !== undefined) assertSqlNamespace({ namespace: table.namespace, dialect: dialect.name });\n const relation = dialect.quoteIdent({ name: table.name });\n const name = table.namespace === undefined ? relation : `${dialect.quoteIdent({ name: table.namespace })}.${relation}`;\n if (table.alias === undefined) return name;\n return `${name} AS ${dialect.quoteIdent({ name: table.alias })}`;\n}\n\nfunction assertCount(value: number, what: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw internalError({ message: `${what} must be a non-negative integer, got ${value}` });\n }\n}\n\nconst COMPARISON_SQL: Readonly<Record<string, string>> = {\n eq: \"=\",\n ne: \"<>\",\n gt: \">\",\n gte: \">=\",\n lt: \"<\",\n lte: \"<=\",\n};\n\n/**\n * Atomic SET arithmetic. `divide` is plain `/`: integer columns therefore\n * follow each dialect's own integer-division rule (pg/sqlite truncate, mysql\n * promotes to decimal) — pinned by the update-atomic-ops catalog case.\n */\nconst SET_OPERATION_SQL: Readonly<Record<SetOperator, string>> = {\n increment: \"+\",\n decrement: \"-\",\n multiply: \"*\",\n divide: \"/\",\n};\n\nconst AGG_FN_SQL: Readonly<Record<AggFn, string>> = {\n count: \"COUNT\",\n avg: \"AVG\",\n sum: \"SUM\",\n min: \"MIN\",\n max: \"MAX\",\n};\n\n/** `COUNT(*)` / `FN(\"col\")` — shared by projections, HAVING and ORDER BY. */\nfunction renderAggRef(dialect: SqlDialect, agg: AggRef): string {\n if (agg.fn === \"countAll\") return \"COUNT(*)\";\n return `${AGG_FN_SQL[agg.fn]}(${quoteCol(dialect, agg.column)})`;\n}\n\nfunction assertScalarArrays(dialect: SqlDialect, feature: string): void {\n if (dialect.capabilities.scalarArrays) return;\n throw unsupportedCapability({\n dialect: dialect.name,\n feature,\n hint: \"only postgres has native array columns — model the list as a related table instead\",\n });\n}\n\n// ─── Expressions ──────────────────────────────────────────────────\n\n/**\n * Render one boolean expression into SQL text, collecting parameters into the\n * shared collector. Public so extension delegates can AND user `where` trees\n * (compiled by the runtime) into their own statements.\n */\nexport function renderExpr(params: { dialect: SqlDialect; expr: SqlExpr; collector: ParamCollector }): string {\n const { dialect, expr, collector } = params;\n\n switch (expr.kind) {\n case \"cmp\": {\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined) {\n throw internalError({ message: `unknown comparison operator \"${expr.op}\"` });\n }\n // Database-clock operand: the dialect's now() expression, never a param.\n if (isDbNowMarker(expr.value)) {\n return `${quoteCol(dialect, expr.column)} ${op} ${dialect.renderDbNow({ offsetSeconds: expr.value.offsetSeconds, collector })}`;\n }\n const compared = listComparison({ dialect, column: expr.column, value: expr.value, collector });\n return `${compared.column} ${op} ${compared.operand}`;\n }\n\n case \"cmpCol\": {\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined) {\n throw internalError({ message: `unknown comparison operator \"${expr.op}\"` });\n }\n return `${quoteCol(dialect, expr.left)} ${op} ${quoteCol(dialect, expr.right)}`;\n }\n\n case \"isNull\":\n return `${quoteCol(dialect, expr.column)} IS ${expr.negate === true ? \"NOT NULL\" : \"NULL\"}`;\n\n case \"inArray\": {\n if (expr.values.length === 0) {\n // Empty IN matches nothing; empty NOT IN matches everything.\n return expr.negate === true ? \"1 = 1\" : \"1 = 0\";\n }\n const column = quoteCol(dialect, expr.column);\n if (expr.timeOfDay === true && dialect.timeOfDayInStrategy === \"equalities\") {\n const equalities = collector.addMany(expr.values).map((placeholder) => `${column} = ${placeholder}`);\n return `${expr.negate === true ? \"NOT \" : \"\"}(${equalities.join(\" OR \")})`;\n }\n if (dialect.inArrayStrategy === \"any\") {\n const base = `${column} = ANY(${collector.add(Array.isArray(expr.values) ? [...expr.values] : expr.values)})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n const placeholders = collector.addMany(expr.values);\n return `${column} ${expr.negate === true ? \"NOT IN\" : \"IN\"} (${placeholders.join(\", \")})`;\n }\n\n case \"tupleIn\": {\n if (expr.columns.length === 0) {\n throw internalError({ message: \"tupleIn needs at least one column\" });\n }\n for (const row of expr.rows) {\n if (row.length !== expr.columns.length) {\n throw internalError({\n message: `tupleIn row has ${row.length} values for ${expr.columns.length} columns`,\n });\n }\n }\n if (expr.rows.length === 0) {\n // Same honesty as inArray: an empty membership matches nothing.\n return expr.negate === true ? \"1 = 1\" : \"1 = 0\";\n }\n const columns = expr.columns.map((column) => quoteCol(dialect, column));\n if (dialect.tupleInStrategy === \"rowValue\") {\n const tuples = expr.rows.map((row) => `(${collector.addMany(row).join(\", \")})`);\n const base = `(${columns.join(\", \")}) IN (${tuples.join(\", \")})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n // No row constructors: an OR of COMPLETE conjunctions, never a per-column\n // IN (which would match the Cartesian product of the members).\n const conjunctions = expr.rows.map((row) => {\n const terms = row.map((value, index) => `${columns[index] as string} = ${collector.add(value)}`);\n return terms.length === 1 ? (terms[0] as string) : `(${terms.join(\" AND \")})`;\n });\n const base = conjunctions.length === 1 ? (conjunctions[0] as string) : `(${conjunctions.join(\" OR \")})`;\n return expr.negate === true ? `NOT ${base.startsWith(\"(\") ? base : `(${base})`}` : base;\n }\n\n case \"like\": {\n const column = quoteCol(dialect, expr.column);\n const placeholder = collector.add(expr.pattern);\n let base: string;\n if (expr.insensitive === true) {\n base =\n dialect.insensitiveLike === \"ilike\"\n ? `${column} ILIKE ${placeholder}`\n : expr.ciCollation === true\n ? // #36: the column's declared `_ci` collation already folds case —\n // plain LIKE keeps the index usable.\n `${column} LIKE ${placeholder}`\n : `LOWER(${column}) LIKE LOWER(${placeholder})`;\n } else {\n base = `${column} LIKE ${placeholder}`;\n }\n if (dialect.likeEscapeClause !== null) {\n base = `${base}${dialect.likeEscapeClause}`;\n }\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"strictMatch\": {\n const column = quoteCol(dialect, expr.column);\n let base: string;\n if (expr.op === \"equals\") {\n // pg and sqlite `=` are already byte-exact; only mysql's `_ci`\n // collations fold equality and need the BINARY cast.\n base =\n dialect.strictMatchStrategy === \"binary\"\n ? `${column} = CAST(${collector.add(expr.value)} AS BINARY)`\n : `${column} = ${collector.add(expr.value)}`;\n } else {\n const pattern = strictMatchPattern({\n strategy: dialect.strictMatchStrategy,\n op: expr.op,\n value: expr.value,\n });\n if (dialect.strictMatchStrategy === \"glob\") {\n base = `${column} GLOB ${collector.add(pattern)}`;\n } else {\n const placeholder = collector.add(pattern);\n base =\n dialect.strictMatchStrategy === \"binary\"\n ? `${column} LIKE CAST(${placeholder} AS BINARY)`\n : `${column} LIKE ${placeholder}`;\n if (dialect.likeEscapeClause !== null) base = `${base}${dialect.likeEscapeClause}`;\n }\n }\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"and\":\n case \"or\": {\n if (expr.operands.length === 0) {\n // Neutral elements: empty AND is always-true, empty OR always-false.\n return expr.kind === \"and\" ? \"1 = 1\" : \"1 = 0\";\n }\n if (expr.operands.length === 1) {\n return renderExpr({ dialect, expr: expr.operands[0]!, collector });\n }\n const joiner = expr.kind === \"and\" ? \" AND \" : \" OR \";\n const rendered = expr.operands.map((operand) => renderExpr({ dialect, expr: operand, collector }));\n return `(${rendered.join(joiner)})`;\n }\n\n case \"not\":\n return `NOT (${renderExpr({ dialect, expr: expr.operand, collector })})`;\n\n case \"aggCmp\": {\n const op = COMPARISON_SQL[expr.op];\n if (op === undefined) {\n throw internalError({ message: `unknown comparison operator \"${expr.op}\"` });\n }\n return `${renderAggRef(dialect, expr.agg)} ${op} ${collector.add(expr.value)}`;\n }\n\n case \"arrayHas\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"has\\\"\");\n const compared = listComparison({ dialect, column: expr.column, value: expr.value, collector });\n const base = `${compared.operand} = ANY(${compared.column})`;\n return expr.negate === true ? `NOT (${base})` : base;\n }\n\n case \"arrayContainsAll\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"hasEvery\\\"\");\n const values = Array.isArray(expr.values) ? [...expr.values] : expr.values;\n const compared = listComparison({ dialect, column: expr.column, value: values, collector });\n return `${compared.column} @> ${compared.operand}`;\n }\n\n case \"arrayOverlaps\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"hasSome\\\"\");\n const values = Array.isArray(expr.values) ? [...expr.values] : expr.values;\n const compared = listComparison({ dialect, column: expr.column, value: values, collector });\n return `${compared.column} && ${compared.operand}`;\n }\n\n case \"arrayIsEmpty\": {\n assertScalarArrays(dialect, \"the scalar-list filter \\\"isEmpty\\\"\");\n // v1 semantics kept: array_length of NULL and of '{}' are both NULL, so\n // `isEmpty: true` matches NULL **and** empty lists.\n const column = quoteCol(dialect, expr.column);\n return `array_length(${column}, 1) IS ${expr.empty ? \"NULL\" : \"NOT NULL\"}`;\n }\n\n case \"jsonFilter\":\n return renderJsonFilter({ dialect, expr, collector });\n\n case \"exists\": {\n // The subquery shares the statement's collector, so its parameters land\n // in the single sequence exactly where they appear in the text.\n const sub = renderSelect({ dialect, statement: expr.select, collector });\n return `${expr.negate === true ? \"NOT \" : \"\"}EXISTS (${sub.text})`;\n }\n\n case \"composed\":\n return `(${renderSqlFragment({ dialect, fragment: expr.fragment, collector })})`;\n\n case \"fragment\":\n return renderFragment({ dialect, fragment: expr.fragment, collector });\n\n case \"raw\":\n return expr.text;\n }\n}\n\n// ─── Bound fragments (extension SQL plane) ───────────────────\n\n/**\n * Render a neutral bound fragment (extensions.md §3): literal text verbatim,\n * `{ param }` through the collector (single placeholder sequence), `{ ident }`\n * paths through dialect.quoteIdent. Exported so extension delegates can build\n * full statements sharing one collector with core-compiled WHERE trees.\n */\nexport function renderFragment(params: {\n dialect: SqlDialect;\n fragment: SqlFragmentSpec;\n collector: ParamCollector;\n}): string {\n const { dialect, fragment, collector } = params;\n let text = \"\";\n for (const part of fragment.parts) {\n if (typeof part === \"string\") {\n text += part;\n } else if (\"param\" in part) {\n text += collector.add(part.param);\n } else {\n text += part.ident.map((name) => dialect.quoteIdent({ name })).join(\".\");\n }\n }\n return text;\n}\n\n// ─── JSON path filters ─────────────────────────────────────────────\n\n/** `$.a.b[0]` path string for sqlite/mysql — always bound, never spliced. */\nfunction jsonPathString(path: readonly (string | number)[]): string {\n let out = \"$\";\n for (const segment of path) {\n if (typeof segment === \"number\") {\n out += `[${segment}]`;\n } else if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(segment)) {\n out += `.${segment}`;\n } else {\n // A quoted key uses JSON-string escaping in both engines' path syntax:\n // the backslash FIRST, or a key containing one silently matches nothing.\n out += `.\"${segment.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll('\"', '\\\\\"')}\"`;\n }\n }\n return out;\n}\n\n/**\n * Column and operand of a comparison (`cmp`, `has`, `hasEvery`, `hasSome`).\n * A Json-list operand of a `json[]` column (`Json[] @db.Json`) compares as\n * jsonb on both sides — `\"col\"::jsonb[]` against `$n::text::jsonb[]` (or\n * `$n::text::jsonb` for one element) — because `json` has no equality\n * operator at all (\"could not identify an equality operator for type json\").\n * Write sites (`push`) keep the `json` operand. Everything else renders as\n * before. The column side is added first only in text: it binds nothing.\n */\nfunction listComparison(params: {\n dialect: SqlDialect;\n column: ColRef;\n value: unknown;\n collector: ParamCollector;\n}): { readonly column: string; readonly operand: string } {\n const { dialect, column, value, collector } = params;\n if (isJsonListParameter(value) && value.storage === \"json\") {\n return {\n column: `${quoteCol(dialect, column)}::jsonb[]`,\n operand: collector.add(jsonListParameter({ value: value.value, storage: \"jsonb\" })),\n };\n }\n return { column: quoteCol(dialect, column), operand: collector.add(value) };\n}\n\ntype JsonFilterExpr = Extract<SqlExpr, { kind: \"jsonFilter\" }>;\n\nfunction jsonStringPattern(params: { expr: JsonFilterExpr }): string {\n const { expr } = params;\n if (typeof expr.value !== \"string\") {\n throw internalError({ message: `json ${expr.op} expects a string operand` });\n }\n if (expr.op === \"string_contains\") return containsPattern({ raw: expr.value });\n if (expr.op === \"string_starts_with\") return startsWithPattern({ raw: expr.value });\n return endsWithPattern({ raw: expr.value });\n}\n\n/** Case-[in]sensitive LIKE over an extracted-text expression, per dialect. */\nfunction renderJsonLike(params: {\n dialect: SqlDialect;\n target: string;\n expr: JsonFilterExpr;\n collector: ParamCollector;\n}): string {\n const { dialect, target, expr, collector } = params;\n const placeholder = collector.add(jsonStringPattern({ expr }));\n let base: string;\n if (expr.insensitive === true) {\n base =\n dialect.insensitiveLike === \"ilike\"\n ? `${target} ILIKE ${placeholder}`\n : `LOWER(${target}) LIKE LOWER(${placeholder})`;\n } else {\n base = `${target} LIKE ${placeholder}`;\n }\n if (dialect.likeEscapeClause !== null) base = `${base}${dialect.likeEscapeClause}`;\n return expr.negate === true ? `NOT (${base})` : base;\n}\n\n/**\n * One JSON path predicate, per dialect strategy. The path is BOUND: a `text[]`\n * parameter on postgres (cast so string-literal array forms work too), a\n * `$.a.b` path string elsewhere. Values bind as JSON text for json/jsonb\n * comparisons and as LIKE patterns for the string ops.\n */\nfunction renderJsonFilter(params: {\n dialect: SqlDialect;\n expr: JsonFilterExpr;\n collector: ParamCollector;\n}): string {\n const { dialect, expr, collector } = params;\n if (!dialect.supportedJsonOps.includes(expr.op)) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: `the json filter \"${expr.op}\"`,\n hint: `this dialect can express: ${dialect.supportedJsonOps.join(\", \")}`,\n });\n }\n const cmp = expr.negate === true ? \"<>\" : \"=\";\n\n if (dialect.jsonPathMode === \"operators\") {\n const column = quoteCol(dialect, expr.column);\n const pathParam = `${collector.add(expr.path.map(String))}::text[]`;\n // A `json` column (`Json @db.Json`) has no `=`, `<>` or `@>` — postgres\n // defines them for jsonb only (SQLSTATE 42883 `json = jsonb`). The\n // value-comparing ops cast the EXTRACTED value, not the column: the\n // result is jsonb equality and containment, a jsonb column's semantics\n // (json navigation also takes the LAST of duplicate keys), and only the\n // sub-value is converted — ~40% faster than casting the whole document\n // on 20,000 4-KB rows (PostgreSQL 18.6). The string ops read the same\n // jsonb value as text (`#>> '{}'`): json's own `#>>` returns the STORED\n // spelling of a non-string value (`1e2`, `[1, 2]`, both duplicate keys)\n // where a jsonb column reads `100`, `[1, 2]` and the last key. For a\n // string value both forms return the same unescaped text.\n const extracted = expr.storage === \"json\" ? `(${column} #> ${pathParam})::jsonb` : `(${column} #> ${pathParam})`;\n switch (expr.op) {\n case \"equals\":\n return `${extracted} ${cmp} ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\": {\n const target = expr.storage === \"json\" ? `(${extracted} #>> '{}')` : `(${column} #>> ${pathParam})`;\n return renderJsonLike({ dialect, target, expr, collector });\n }\n case \"array_contains\":\n return `${extracted} @> ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"array_starts_with\":\n return `${extracted} -> 0 = ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n case \"array_ends_with\":\n return `${extracted} -> -1 = ${collector.add(JSON.stringify(expr.value))}${dialect.jsonParamCast}`;\n }\n }\n\n if (dialect.jsonPathMode === \"sqliteExtract\") {\n const column = quoteCol(dialect, expr.column);\n // JSON booleans surface as SQL 0/1, so value equality alone loses type.\n const typeMatches = (type: string, value: unknown): string => {\n if (typeof value === \"number\") return `${type} IN ('integer', 'real')`;\n const tag = typeof value === \"boolean\" ? String(value)\n : value === null ? \"null\" : Array.isArray(value) ? \"array\"\n : typeof value === \"object\" ? \"object\" : \"text\";\n return `${type} = '${tag}'`;\n };\n const compareExtracted = (path: string, value: unknown): string => {\n const type = `json_type(${column}, ${collector.add(path)})`;\n const guard = typeMatches(type, value);\n let base = guard;\n if (value !== null) {\n const target = `json_extract(${column}, ${collector.add(path)})`;\n const bound = typeof value === \"boolean\" ? (value ? 1 : 0) : value;\n const comparison = typeof value === \"object\"\n ? renderSqliteJsonEquality({ dialect, left: target, right: collector.add(JSON.stringify(value)) })\n : `${target} = ${collector.add(bound)}`;\n base = `(${guard} AND ${comparison})`;\n }\n return expr.negate === true ? `NOT (${base})` : base;\n };\n switch (expr.op) {\n case \"equals\":\n return compareExtracted(jsonPathString(expr.path), expr.value);\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\": {\n const target = `json_extract(${column}, ${collector.add(jsonPathString(expr.path))})`;\n return renderJsonLike({ dialect, target, expr, collector });\n }\n case \"array_starts_with\":\n case \"array_ends_with\": {\n // Edge-element access: `$[0]` / `$[#-1]` path elements (sqlite ≥3.31;\n // bun:sqlite bundles far newer) — N6/board #21.\n const edge = expr.op === \"array_starts_with\" ? \"[0]\" : \"[#-1]\";\n return compareExtracted(`${jsonPathString(expr.path)}${edge}`, expr.value);\n }\n case \"array_contains\": {\n // Scalar-needle containment via json_each() EXISTS — one EXISTS per\n // element, ANDed (jsonb `@>` semantics for scalar members). Deep\n // structural containment (object/array members) has no cheap faithful\n // sqlite form and stays refused; JSON null members compare through\n // json_each's 'null' type tag, not SQL NULL, so they are refused too.\n //\n // Haystack type guard (wave-C review): json_each() over a path holding\n // a SCALAR yields one row carrying that scalar, so an unguarded EXISTS\n // matched `{ tags: \"a\" }` against needle `[\"a\"]` where postgres (`@>`\n // with an array needle) and mysql (JSON_CONTAINS against an array\n // literal) are false. json_type() is NULL for a missing path, so\n // missing paths and NULL columns stay non-matches — and an empty\n // needle reduces to the guard alone: contained in every ARRAY (pg's\n // `@> '[]'` truth) and in nothing else.\n const guard = `json_type(${column}, ${collector.add(jsonPathString(expr.path))}) = 'array'`;\n const elements = Array.isArray(expr.value) ? expr.value : [expr.value];\n const tests = elements.map((element) => {\n if (element === null || (typeof element === \"object\" && element !== null)) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"json array_contains with object/array/null elements\",\n hint: \"sqlite expresses scalar-element containment only — deep structural containment needs postgres or mysql\",\n });\n }\n const bound = typeof element === \"boolean\" ? (element ? 1 : 0) : element;\n const path = collector.add(jsonPathString(expr.path));\n const type = `${dialect.quoteIdent({ name: \"json_each\" })}.${dialect.quoteIdent({ name: \"type\" })}`;\n return `EXISTS (SELECT 1 FROM json_each(${column}, ${path}) WHERE ${typeMatches(type, element)} AND ${dialect.quoteIdent({ name: \"json_each\" })}.${dialect.quoteIdent({ name: \"value\" })} = ${collector.add(bound)})`;\n });\n return tests.length === 0 ? guard : `(${[guard, ...tests].join(\" AND \")})`;\n }\n default:\n throw internalError({ message: `json op \"${expr.op}\" leaked past supportedJsonOps on sqlite` });\n }\n }\n\n // mysqlExtract\n const column = quoteCol(dialect, expr.column);\n const pathString = jsonPathString(expr.path);\n switch (expr.op) {\n case \"equals\":\n return `JSON_EXTRACT(${column}, ${collector.add(pathString)}) ${cmp} CAST(${collector.add(JSON.stringify(expr.value))} AS JSON)`;\n case \"string_contains\":\n case \"string_starts_with\":\n case \"string_ends_with\": {\n const target = `JSON_UNQUOTE(JSON_EXTRACT(${column}, ${collector.add(pathString)}))`;\n return renderJsonLike({ dialect, target, expr, collector });\n }\n case \"array_contains\":\n return `JSON_CONTAINS(JSON_EXTRACT(${column}, ${collector.add(pathString)}), CAST(${collector.add(JSON.stringify(expr.value))} AS JSON))`;\n case \"array_starts_with\":\n return `JSON_EXTRACT(${column}, ${collector.add(`${pathString}[0]`)}) ${cmp} CAST(${collector.add(JSON.stringify(expr.value))} AS JSON)`;\n case \"array_ends_with\":\n return `JSON_EXTRACT(${column}, ${collector.add(`${pathString}[last]`)}) ${cmp} CAST(${collector.add(JSON.stringify(expr.value))} AS JSON)`;\n }\n}\n\n// ─── Ordering ─────────────────────────────────────────────────────\n\nfunction renderOrderTerm(params: { dialect: SqlDialect; term: OrderTerm; collector: ParamCollector }): string {\n const { dialect, term, collector } = params;\n if (\"agg\" in term) {\n return `${renderAggRef(dialect, term.agg)} ${term.direction === \"asc\" ? \"ASC\" : \"DESC\"}`;\n }\n if (\"select\" in term) {\n // Relation orderBy: a correlated scalar subquery — its parameters merge\n // into the shared sequence exactly where they appear in the text.\n const sub = renderSelect({ dialect, statement: term.select, collector });\n return `(${sub.text}) ${term.direction === \"asc\" ? \"ASC\" : \"DESC\"}`;\n }\n const column = quoteCol(dialect, term.column);\n const direction = term.direction === \"asc\" ? \"ASC\" : \"DESC\";\n if (term.nulls === undefined) {\n return `${column} ${direction}`;\n }\n if (dialect.orderByNullsMode === \"native\") {\n return `${column} ${direction} NULLS ${term.nulls === \"first\" ? \"FIRST\" : \"LAST\"}`;\n }\n // Emulation (mysql): the engine's native order already places NULLs FIRST on\n // ASC and LAST on DESC — those pairings render the bare term (the redundant\n // boolean pre-term cost a per-row evaluation and could defeat index-order\n // scans, #14). Only the diverging pairings need the `IS NULL` pre-term:\n // false(0) sorts first, so plain `IS NULL` pushes nulls last and\n // `IS NULL DESC` pulls them first.\n if ((term.nulls === \"first\") === (term.direction === \"asc\")) {\n return `${column} ${direction}`;\n }\n const nullsTerm = term.nulls === \"first\" ? `${column} IS NULL DESC` : `${column} IS NULL`;\n return `${nullsTerm}, ${column} ${direction}`;\n}\n\n// ─── Projections ──────────────────────────────────────────────────\n\nfunction renderSelectExpr(params: { dialect: SqlDialect; expr: SelectExpr }): string {\n const { dialect, expr } = params;\n if (expr.kind === \"one\") return \"1\";\n const alias = expr.alias === undefined ? \"\" : ` AS ${dialect.quoteIdent({ name: expr.alias })}`;\n return `COUNT(*)${alias}`;\n}\n\n// ─── Lateral JSON joins ───────────────────────────────────\n\n/**\n * `LEFT JOIN LATERAL (… to_json …) AS alias ON true`. Postgres-only SQL by\n * design — the runtime gates the \"join\" strategy on `capabilities.lateralJoin`\n * at build time, and this renderer refuses too (dialect honesty, rule 4).\n *\n * `json`, not `jsonb`: the payload is transport — parsed by the driver and\n * never touched by a JSON operator on the server. `jsonb_agg(to_jsonb(…))`\n * builds postgres's binary JSON (sorted, de-duplicated keys) and then\n * serializes it straight back to text for the wire, which measured at 2–3.7×\n * the server time of `json_agg(to_json(…))` for identical decoded values\n * (`.ai/plans/26.09.08 - performance-join-strategy.md` §1.2). The observable\n * differences are textual only: `json` keeps construction key order and `-0`,\n * `jsonb` normalizes both; every scalar still rides the B3 transforms.\n */\nfunction renderPositionalRow(params: { dialect: SqlDialect; join: LateralJoin; subAlias: string }): string {\n const { dialect, join, subAlias } = params;\n if (join.select.columns.length === 0 || join.select.selectExpr !== undefined ||\n (join.select.aggregates?.length ?? 0) > 0 || join.select.rowNumber !== undefined) {\n throw internalError({ message: \"positional lateral rows require an explicit column-only projection\" });\n }\n const names = join.select.columns.map((column) => projectionOutputName({ column }));\n if (new Set(names).size !== names.length) {\n throw internalError({ message: \"positional lateral projection has duplicate output names\" });\n }\n const values = names.map((name) => `${subAlias}.${dialect.quoteIdent({ name })}`);\n const chunks: string[] = [];\n for (let index = 0; index < values.length; index += JSON_TRANSPORT.chunkSize) {\n chunks.push(`json_build_array(${values.slice(index, index + JSON_TRANSPORT.chunkSize).join(\", \")})`);\n }\n if (chunks.length > JSON_TRANSPORT.chunkSize) {\n throw internalError({ message: \"positional lateral projection exceeds the transport width limit\" });\n }\n return chunks.length === 1 ? chunks[0] as string : `json_build_array(${chunks.join(\", \")})`;\n}\n\nfunction renderLateralJoin(params: {\n dialect: SqlDialect;\n join: LateralJoin;\n collector: ParamCollector;\n}): string {\n const { dialect, join, collector } = params;\n const inner = renderSelect({ dialect, statement: join.select, collector });\n if (join.agg === \"count\") {\n if (join.rowFormat === \"positional\" || join.select.columns.length !== 0 ||\n join.select.selectExpr?.kind !== \"countAll\" || join.select.selectExpr.alias !== join.columnAlias ||\n join.select.groupBy !== undefined || join.select.having !== undefined ||\n join.select.limit !== undefined || join.select.offset !== undefined || join.select.distinctOn !== undefined) {\n throw internalError({ message: \"count lateral must return one ungrouped COUNT(*) under its column alias\" });\n }\n return `LEFT JOIN LATERAL (${inner.text}) AS ${dialect.quoteIdent({ name: join.alias })} ON true`;\n }\n const columnAlias = dialect.quoteIdent({ name: join.columnAlias });\n const subAlias = dialect.quoteIdent({ name: \"__sub\" });\n // N2 (SQL review): json_agg over a subquery only \"usually\" preserves the\n // subquery's order — pin it with an explicit ORDER BY inside the aggregate\n // (the subquery keeps its own ORDER BY for LIMIT). Only column terms that\n // are PROJECTED (and untransformed — a B3 ::text cast would re-sort\n // lexicographically) can be referenced through `__sub`; anything else keeps\n // the old behavior.\n let aggOrder = \"\";\n if (join.agg === \"jsonArray\" && join.select.orderBy !== undefined && join.select.orderBy.length > 0) {\n const projected = new Set(\n join.select.columns\n .filter((column) => column.transform === undefined && column.castReal !== true)\n .map((column) => column.name),\n );\n const terms = join.select.orderBy;\n const columnTerms = terms.filter(\n (term): term is Extract<OrderTerm, { column: ColRef }> => \"column\" in term,\n );\n if (columnTerms.length === terms.length && columnTerms.every((term) => projected.has(term.column.name))) {\n const rendered = columnTerms.map((term) =>\n renderOrderTerm({\n dialect,\n term: {\n ...term,\n column: { table: \"__sub\", name: term.column.name, ...(term.column.castJsonb === undefined ? {} : { castJsonb: term.column.castJsonb }) },\n },\n collector,\n }),\n );\n aggOrder = ` ORDER BY ${rendered.join(\", \")}`;\n }\n }\n const rowJson = join.rowFormat === \"positional\"\n ? renderPositionalRow({ dialect, join, subAlias })\n : `to_json(${subAlias}.*)`;\n const projection =\n join.agg === \"jsonArray\"\n ? `COALESCE(json_agg(${rowJson}${aggOrder}), '[]'::json) AS ${columnAlias}`\n : `${rowJson} AS ${columnAlias}`;\n const alias = dialect.quoteIdent({ name: join.alias });\n return `LEFT JOIN LATERAL (SELECT ${projection} FROM (${inner.text}) AS ${subAlias}) AS ${alias} ON true`;\n}\n\n/**\n * `(SELECT COUNT(*) FROM … WHERE …) AS \"alias\"` — one scalar per output row\n * ({@link CountSubquery}). Refuses anything but one ungrouped COUNT(*), so a\n * builder bug can never project a multi-row or multi-column subquery.\n */\nfunction renderCountSubquery(params: {\n dialect: SqlDialect;\n subquery: CountSubquery;\n collector: ParamCollector;\n}): string {\n const { dialect, subquery, collector } = params;\n const select = subquery.select;\n if (select.columns.length !== 0 || select.selectExpr?.kind !== \"countAll\" ||\n (select.aggregates?.length ?? 0) > 0 || select.rowNumber !== undefined ||\n select.groupBy !== undefined || select.having !== undefined ||\n select.limit !== undefined || select.offset !== undefined ||\n select.distinctOn !== undefined || select.rowLock !== undefined ||\n select.countSubqueries !== undefined) {\n throw internalError({ message: \"count subquery must be one ungrouped COUNT(*)\" });\n }\n const inner = renderSelect({ dialect, statement: select, collector });\n return `(${inner.text}) AS ${dialect.quoteIdent({ name: subquery.alias })}`;\n}\n\n// ─── RETURNING ────────────────────────────────────────────────────\n\nfunction applyReturning(params: {\n dialect: SqlDialect;\n requested: readonly ReturningColumn[] | undefined;\n}): { suffix: string; status: \"native\" | \"omitted\" | \"none\" } {\n const { dialect, requested } = params;\n if (requested === undefined || requested.length === 0) {\n return { suffix: \"\", status: \"none\" };\n }\n if (!dialect.capabilities.returning) {\n return { suffix: \"\", status: \"omitted\" };\n }\n const columns = requested\n .map((column) => {\n if (typeof column === \"string\") return dialect.quoteIdent({ name: column });\n if (\"transform\" in column) {\n const name = dialect.quoteIdent({ name: column.name });\n return `${dialect.jsonTextProjection({ expression: name })} AS ${name}`;\n }\n const name = dialect.quoteIdent({ name: column.name });\n return `${textProjection({ dialect, expression: name })} AS ${name}`;\n })\n .join(\", \");\n return { suffix: ` RETURNING ${columns}`, status: \"native\" };\n}\n\n// ─── SELECT ───────────────────────────────────────────────────────\n\n/**\n * {@link KeyTableJoin}: `INNER JOIN (VALUES ROW(?, 0), …) AS alias (…) ON …`.\n * Mysql only — the one dialect whose default text equality is not byte\n * equality, and the shape was measured there (8.0.19+ `VALUES ROW`, already\n * this project's floor for the upsert row alias). Postgres needs a typed\n * parameter per member, so it renders only `citext` / `text` / `integer`\n * members (`CAST($n AS citext | text | bigint)`, plain `(…)` rows) — the\n * runtime emits it for a key tuple with a citext member; every other postgres\n * member refuses, and sqlite has no derived-table column list, so it refuses\n * rather than render an untested form.\n *\n * Ordinals are literal integers (row `i` → `i`): a statement-local index, not\n * data, so a key costs exactly the parameters its members bind — the same\n * budget as `col IN (?, …)`. Text members bind bare so the column's collation\n * decides; numeric members that travel as strings are CAST (see\n * {@link KeyTableMember}).\n *\n * The runtime emits a key table wherever `conflictKeyEquality.textIsBinaryByDefault`\n * is false (packages/runtime/src/relation-loader.ts, `associatesInDatabase`);\n * this refusal is by NAME, so a new dialect declaring that fact must also be\n * measured and admitted here.\n */\nfunction renderKeyTableJoin(params: { dialect: SqlDialect; join: KeyTableJoin; collector: ParamCollector }): string {\n const { dialect, join, collector } = params;\n // Postgres binds every member typed (an untyped VALUES cell would be\n // `text`, see {@link KeyTableMember}); `citext` and `text` are postgres\n // members, mysql binds text bare.\n const postgresMember = (member: KeyTableMember): boolean => member.kind === \"citext\" || member.kind === \"text\" || member.kind === \"integer\";\n const admitted = dialect.name === \"mysql\"\n ? join.members.every((member) => member.kind !== \"citext\" && member.kind !== \"text\")\n : dialect.name === \"postgres\" && join.members.every(postgresMember);\n if (!admitted) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"relation key table\",\n hint: \"the key-table join is mysql's relation association — this dialect compares relation keys by value\",\n });\n }\n if (join.columns.length === 0 || join.columns.length !== join.members.length) {\n throw internalError({ message: `key table needs one member per column, got ${join.members.length} for ${join.columns.length}` });\n }\n if (join.rows.length === 0) throw internalError({ message: \"key table needs at least one key row\" });\n for (const member of join.members) {\n if (member.kind === \"decimal\" && !(Number.isInteger(member.scale) && member.scale >= 0 && member.scale <= 30)) {\n throw internalError({ message: `key table decimal scale must be an integer 0-30, got ${String(member.scale)}` });\n }\n }\n const alias = dialect.quoteIdent({ name: join.alias });\n const memberNames = join.members.map((_, index) => dialect.quoteIdent({ name: `__vibe_k${index}` }));\n const rows = join.rows.map((row, ordinal) => {\n if (row.length !== join.members.length) {\n throw internalError({ message: `key table row has ${row.length} values for ${join.members.length} members` });\n }\n const cells = row.map((value, index) => {\n const placeholder = collector.add(value);\n const member = join.members[index] as KeyTableMember;\n switch (member.kind) {\n case \"integer\":\n return dialect.name === \"mysql\" ? `CAST(${placeholder} AS SIGNED)` : `CAST(${placeholder} AS bigint)`;\n case \"timestamp\":\n return `CAST(${placeholder} AS DATETIME(6))`;\n case \"time\":\n return `CAST(${placeholder} AS TIME(6))`;\n case \"decimal\":\n return `CAST(${placeholder} AS DECIMAL(65,${member.scale}))`;\n case \"citext\":\n return `CAST(${placeholder} AS citext)`;\n case \"text\":\n return `CAST(${placeholder} AS text)`;\n default:\n return placeholder;\n }\n });\n return dialect.name === \"mysql\" ? `ROW(${cells.join(\", \")}, ${ordinal})` : `(${cells.join(\", \")}, ${ordinal})`;\n });\n const on = join.columns.map((column, index) => `${quoteCol(dialect, column)} = ${alias}.${memberNames[index] as string}`).join(\" AND \");\n return `INNER JOIN (VALUES ${rows.join(\", \")}) AS ${alias} (${[...memberNames, dialect.quoteIdent({ name: join.ordinalAlias })].join(\", \")}) ON ${on}`;\n}\n\nfunction renderSelect(params: {\n dialect: SqlDialect;\n statement: SelectStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n if (statement.selectExpr !== undefined && statement.columns.length > 0 && statement.selectExpr.kind !== \"countAll\") {\n throw internalError({ message: \"only countAll can combine with a column list\" });\n }\n if (\n statement.selectExpr !== undefined &&\n statement.aggregates !== undefined &&\n statement.aggregates.length > 0\n ) {\n throw internalError({ message: \"selectExpr and aggregates cannot combine\" });\n }\n const columnList = statement.columns.map((column) => quoteProjection(dialect, column));\n if (statement.selectExpr !== undefined) {\n columnList.push(renderSelectExpr({ dialect, expr: statement.selectExpr }));\n }\n if (statement.aggregates !== undefined) {\n for (const selection of statement.aggregates) {\n const expression = renderAggRef(dialect, selection.agg);\n const projected = selection.castText === true ? textProjection({ dialect, expression }) : expression;\n columnList.push(`${projected} AS ${dialect.quoteIdent({ name: selection.alias })}`);\n }\n }\n if (statement.countSubqueries !== undefined) {\n for (const subquery of statement.countSubqueries) {\n columnList.push(renderCountSubquery({ dialect, subquery, collector }));\n }\n }\n if (statement.rowNumber !== undefined) {\n const rowNumber = statement.rowNumber;\n if (rowNumber.partitionBy.length === 0) {\n throw internalError({ message: \"rowNumber needs at least one partition column\" });\n }\n const partition = rowNumber.partitionBy.map((column) => quoteCol(dialect, column)).join(\", \");\n const order =\n rowNumber.orderBy.length === 0\n ? \"\"\n : ` ORDER BY ${rowNumber.orderBy.map((term) => renderOrderTerm({ dialect, term, collector })).join(\", \")}`;\n columnList.push(\n `ROW_NUMBER() OVER (PARTITION BY ${partition}${order}) AS ${dialect.quoteIdent({ name: rowNumber.alias })}`,\n );\n }\n let distinctPrefix = \"\";\n if (statement.distinctOn !== undefined && statement.distinctOn.length > 0) {\n if (!dialect.capabilities.distinctOn) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"SELECT DISTINCT ON\",\n hint: \"postgres-only — the runtime emulates distinct client-side on this dialect\",\n });\n }\n distinctPrefix = `DISTINCT ON (${statement.distinctOn.map((column) => quoteCol(dialect, typedOrderRef({ statement, column }))).join(\", \")}) `;\n }\n const columns = columnList.length === 0 ? \"*\" : columnList.join(\", \");\n\n let from: string;\n if (statement.fromSelect !== undefined) {\n if (statement.table.alias !== undefined) {\n throw internalError({ message: \"fromSelect uses table.name as the subquery alias — table.alias must be unset\" });\n }\n // The subquery renders before WHERE/ORDER BY, so its parameters land in\n // the shared sequence exactly where they appear in the text.\n const inner = renderSelect({ dialect, statement: statement.fromSelect, collector });\n from = `(${inner.text}) AS ${dialect.quoteIdent({ name: statement.table.name })}`;\n } else {\n from = renderTable(dialect, statement.table);\n }\n let text = `SELECT ${distinctPrefix}${columns} FROM ${from}`;\n\n if (statement.innerJoins !== undefined && statement.innerJoins.length > 0) {\n for (const join of statement.innerJoins) {\n if (join.on.length === 0) {\n throw internalError({ message: \"inner join needs at least one ON pair\" });\n }\n const on = join.on\n .map((pair) => `${quoteCol(dialect, pair.left)} = ${quoteCol(dialect, pair.right)}`)\n .join(\" AND \");\n text += ` INNER JOIN ${renderTable(dialect, join.table)} ON ${on}`;\n }\n }\n if (statement.keyTable !== undefined) {\n text += ` ${renderKeyTableJoin({ dialect, join: statement.keyTable, collector })}`;\n }\n\n if (statement.lateralJoins !== undefined && statement.lateralJoins.length > 0) {\n if (!dialect.capabilities.lateralJoin) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"LATERAL JOIN relation loading\",\n hint: 'use the portable \"query\" relation strategy on this dialect',\n });\n }\n for (const join of statement.lateralJoins) {\n text += ` ${renderLateralJoin({ dialect, join, collector })}`;\n }\n }\n\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n if (statement.groupBy !== undefined && statement.groupBy.length > 0) {\n text += ` GROUP BY ${statement.groupBy.map((column) => quoteCol(dialect, column)).join(\", \")}`;\n }\n if (statement.having !== undefined) {\n text += ` HAVING ${renderExpr({ dialect, expr: statement.having, collector })}`;\n }\n if (statement.orderBy !== undefined && statement.orderBy.length > 0) {\n const terms = statement.orderBy.map((term) =>\n renderOrderTerm({ dialect, term: \"column\" in term ? { ...term, column: typedOrderRef({ statement, column: term.column }) } : term, collector }),\n );\n text += ` ORDER BY ${terms.join(\", \")}`;\n }\n\n if (statement.limit !== undefined) {\n assertCount(statement.limit, \"limit\");\n text += ` LIMIT ${statement.limit}`;\n }\n if (statement.offset !== undefined) {\n assertCount(statement.offset, \"offset\");\n if (statement.limit === undefined && dialect.offsetRequiresLimit !== null) {\n text += ` LIMIT ${dialect.offsetRequiresLimit.limitText}`;\n }\n text += ` OFFSET ${statement.offset}`;\n }\n if (statement.rowLock !== undefined) {\n const clause = renderRowLockClause({ dialect, lock: statement.rowLock });\n if (clause !== null) text += ` ${clause}`;\n }\n\n return { text, values: collector.values, returning: \"none\" };\n}\n\n// ─── INSERT (incl. upsert) ────────────────────────────────────────\n\nfunction renderInsert(params: {\n dialect: SqlDialect;\n statement: InsertStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n if (statement.rows.length === 0) {\n throw internalError({ message: \"insert requires at least one row\" });\n }\n // No column named: every value is its column default (dialect.emptyInsert).\n const defaultValues = statement.columns.length === 0 && dialect.emptyInsert.form === \"defaultValues\";\n if (defaultValues && statement.rows.length !== 1) {\n throw internalError({ message: `${dialect.name} inserts an all-default row as DEFAULT VALUES, one row per statement` });\n }\n if (defaultValues && statement.onConflict !== undefined && !(dialect.emptyInsert.form === \"defaultValues\" && dialect.emptyInsert.conflictClause)) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a conflict clause on an all-default row (DEFAULT VALUES)\",\n hint: \"supply at least one column value, or drop the conflict clause\",\n });\n }\n for (const row of statement.rows) {\n if (row.length !== statement.columns.length) {\n throw internalError({\n message: `insert row has ${row.length} values but ${statement.columns.length} columns`,\n });\n }\n }\n\n const onConflict = statement.onConflict;\n const skipConflicts = onConflict !== undefined && \"doNothing\" in onConflict;\n const insertKeyword =\n skipConflicts && dialect.doNothingForm === \"insertIgnore\" ? \"INSERT IGNORE INTO\" : \"INSERT INTO\";\n\n const columnList = statement.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n const rowsSql = statement.rows\n .map(\n (row) =>\n `(${row\n .map((value) => {\n // Json cell: the param's type is pinned (`$n::text::jsonb` on\n // postgres) so OID-typed drivers cannot double-encode the document.\n if (isJsonParamCell(value)) return `${collector.add(value.text)}${jsonCellCast(dialect, value)}`;\n // Database-clock cell: the dialect's now() expression.\n if (isDbNowMarker(value)) {\n return dialect.renderDbNow({ offsetSeconds: value.offsetSeconds, collector });\n }\n if (!isSqlDefaultCell(value)) return collector.add(value);\n // M4: a heterogeneous createMany cell defers to the COLUMN default.\n if (!dialect.rowDefaultKeyword) {\n throw internalError({\n message: `${dialect.name} cannot render a per-row DEFAULT cell — rows must be grouped by column set`,\n });\n }\n return \"DEFAULT\";\n })\n .join(\", \")})`,\n )\n .join(\", \");\n let text = defaultValues\n ? `${insertKeyword} ${renderTable(dialect, statement.table)} DEFAULT VALUES`\n : `${insertKeyword} ${renderTable(dialect, statement.table)} (${columnList}) VALUES ${rowsSql}`;\n\n // Mysql can only name the incoming row through a ROW ALIAS declared right\n // after the VALUES list; postgres/sqlite have the built-in `excluded`\n // pseudo-relation and need nothing. Emitted only when the update arm\n // actually references the incoming row.\n if (\n onConflict !== undefined &&\n !(\"doNothing\" in onConflict) &&\n dialect.excludedRowRef.form === \"rowAlias\" &&\n Object.values(onConflict.update).some((value) => isExcludedRef(value) || (isSqlFragment(value) && sqlUsesIncoming({ fragment: value })))\n ) {\n text += ` AS ${dialect.quoteIdent({ name: dialect.excludedRowRef.alias })}`;\n }\n\n if (onConflict !== undefined) {\n if (\"doNothing\" in onConflict) {\n if (dialect.doNothingForm === \"onConflictDoNothing\") {\n let target = \"\";\n if (onConflict.constraint !== undefined) {\n if (dialect.name !== \"postgres\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a named-constraint conflict target (ON CONFLICT ON CONSTRAINT)\",\n hint: \"only postgres names constraints in conflict targets — use a column-list target\",\n });\n }\n target = ` ON CONSTRAINT ${dialect.quoteIdent({ name: onConflict.constraint })}`;\n } else if (onConflict.columns !== undefined && onConflict.columns.length > 0) {\n target = ` (${onConflict.columns.map((name) => dialect.quoteIdent({ name })).join(\", \")})`;\n if (onConflict.conflictWhere !== undefined) {\n // RAW predicate — the engines match it against the index's own\n // predicate structurally; parameters could never match (ast.ts).\n target += ` WHERE ${onConflict.conflictWhere}`;\n }\n }\n text += ` ON CONFLICT${target} DO NOTHING`;\n } else if (onConflict.constraint !== undefined || onConflict.conflictWhere !== undefined) {\n // INSERT IGNORE fires on ANY duplicate key. A bare column target\n // degrades to that documented wider skip; a REFINED target (named\n // constraint, partial-index predicate) must not silently widen —\n // the builder gates first, the renderer defends.\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a refined conflict target (constraint / partial-index predicate) on INSERT IGNORE\",\n hint: \"mysql skips on any duplicate key — drop the refinement or gate the call per dialect\",\n });\n }\n } else {\n const updates = Object.entries(onConflict.update);\n if (updates.length === 0) {\n throw internalError({ message: \"upsert update must set at least one column\" });\n }\n // The update arm's self-references MUST be table-qualified: inside\n // `ON CONFLICT … DO UPDATE SET`, postgres has BOTH the target row and\n // the `excluded` pseudo-relation in scope, so a bare `\"views\" + $n`\n // is rejected as ambiguous (SQLSTATE 42702). Sqlite and mysql accept\n // the qualified form with identical semantics (the pre-update row), so\n // one rule covers every dialect instead of a per-dialect divergence.\n const selfRef = dialect.quoteIdent({ name: statement.table.name });\n const assignments = renderAssignments({ dialect, entries: updates, collector, selfRef, allowExcluded: true, tableName: statement.table.name });\n if (dialect.upsertForm === \"onConflict\") {\n if (onConflict.lastInsertIdColumn !== undefined) {\n throw internalError({ message: \"lastInsertIdColumn is a mysql (onDuplicateKey) construct\" });\n }\n if (onConflict.constraint !== undefined && dialect.name !== \"postgres\") {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a named-constraint conflict target (ON CONFLICT ON CONSTRAINT)\",\n hint: \"sqlite conflict targets are column lists — name the indexed columns instead\",\n });\n }\n if (onConflict.constraint !== undefined && onConflict.conflictWhere !== undefined) {\n throw internalError({\n message: \"a named-constraint conflict target already identifies the index — it cannot carry a partial predicate too\",\n });\n }\n // RAW predicate — matched structurally against the partial index's own\n // stored predicate, exactly like the DO NOTHING form (ast.ts).\n const partial = onConflict.conflictWhere === undefined ? \"\" : ` WHERE ${onConflict.conflictWhere}`;\n const target =\n onConflict.constraint !== undefined\n ? ` ON CONSTRAINT ${dialect.quoteIdent({ name: onConflict.constraint })}`\n : ` (${onConflict.columns.map((name) => dialect.quoteIdent({ name })).join(\", \")})${partial}`;\n text += ` ON CONFLICT${target} DO UPDATE SET ${assignments}`;\n } else {\n if (onConflict.constraint !== undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a named-constraint conflict target on ON DUPLICATE KEY UPDATE\",\n hint: \"mysql's ODKU fires on any duplicate key — no target can be named\",\n });\n }\n if (onConflict.conflictWhere !== undefined) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a partial-index conflict target on ON DUPLICATE KEY UPDATE\",\n hint: \"mysql's ODKU fires on any duplicate key — a partial arbiter cannot be selected; gate the call per dialect\",\n });\n }\n // B2: the update arm must record WHICH row it addressed — without this,\n // LAST_INSERT_ID() is stale after ODKU takes the update arm and the\n // read-back can resolve an unrelated row.\n const trick =\n onConflict.lastInsertIdColumn === undefined\n ? \"\"\n : `, ${dialect.quoteIdent({ name: onConflict.lastInsertIdColumn })} = LAST_INSERT_ID(${dialect.quoteIdent({ name: onConflict.lastInsertIdColumn })})`;\n text += ` ON DUPLICATE KEY UPDATE ${assignments}${trick}`;\n }\n }\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n\n// ─── UPDATE ───────────────────────────────────────────────────────\n\nfunction renderUpdate(params: {\n dialect: SqlDialect;\n statement: UpdateStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n const assignments = Object.entries(statement.set);\n if (assignments.length === 0) {\n throw internalError({ message: \"update must set at least one column\" });\n }\n const setSql = renderAssignments({ dialect, entries: assignments, collector });\n let text = `UPDATE ${renderTable(dialect, statement.table)} SET ${setSql}`;\n\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n\n// ─── Assignments (SET / DO UPDATE SET) ────────────────────────────\n\n/**\n * `SET` assignments, shared by UPDATE and the upsert update arm.\n *\n * `selfRef` (the quoted target table) qualifies the READ side of an operation\n * that reads the column it writes — required inside `ON CONFLICT DO UPDATE`,\n * where a bare reference is ambiguous with `excluded` on postgres. The write\n * side is never qualified: `SET \"t\".\"col\" = …` is a syntax error everywhere.\n * A plain UPDATE passes no `selfRef` — it has no second relation in scope.\n */\n/**\n * The incoming row's column, qualified for this dialect: `excluded.\"col\"`\n * (postgres/sqlite) or `` `new`.`col` `` (mysql's row alias, declared after the\n * VALUES list by {@link renderInsert}).\n */\nfunction renderIncomingRowColumn(params: { dialect: SqlDialect; column: string }): string {\n const { dialect, column } = params;\n const ref = dialect.excludedRowRef;\n const qualifier = ref.form === \"keyword\" ? ref.name : dialect.quoteIdent({ name: ref.alias });\n return `${qualifier}.${dialect.quoteIdent({ name: column })}`;\n}\n\nfunction renderAssignments(params: {\n dialect: SqlDialect;\n entries: readonly (readonly [string, unknown])[];\n collector: ParamCollector;\n selfRef?: string;\n /** Only an upsert's update arm has an incoming row to reference. */\n allowExcluded?: boolean;\n tableName?: string;\n}): string {\n const { dialect, entries, collector, selfRef } = params;\n return entries\n .map(([name, value]) => {\n const column = dialect.quoteIdent({ name });\n const read = selfRef === undefined ? column : `${selfRef}.${column}`;\n // The INCOMING row's value for this column — a column reference, so a\n // batched upsert writes each conflicting row's own value while binding\n // it exactly once (in the VALUES list).\n if (isSqlFragment(value)) {\n if (params.allowExcluded !== true || selfRef === undefined) throw internalError({ message: \"SQL assignment fragments require a conflict update\" });\n return `${column} = ${renderSqlFragment({ dialect, fragment: value, collector, conflict: { table: params.tableName! } })}`;\n }\n if (isExcludedRef(value)) {\n if (params.allowExcluded !== true) {\n throw internalError({\n message: `an incoming-row reference (${value.column}) is only meaningful inside an upsert's update arm`,\n });\n }\n return `${column} = ${renderIncomingRowColumn({ dialect, column: value.column })}`;\n }\n // Json cell: same param-type pinning as the VALUES cells above.\n if (isJsonParamCell(value)) {\n return `${column} = ${collector.add(value.text)}${jsonCellCast(dialect, value)}`;\n }\n if (isSetOperation(value)) {\n const operand = collector.add(value.value);\n const numeric = dialect.name === \"sqlite\" && value.numericType === \"Decimal\" ? `CAST(${operand} AS REAL)` : operand;\n return `${column} = ${read} ${SET_OPERATION_SQL[value.__op]} ${numeric}`;\n }\n if (isDbNowMarker(value)) {\n return `${column} = ${dialect.renderDbNow({ offsetSeconds: value.offsetSeconds, collector })}`;\n }\n if (isListSetOperation(value)) {\n assertScalarArrays(dialect, 'the scalar-list update operation \"push\"');\n if (value.__listOp === \"append\") {\n return `${column} = array_append(${read}, ${collector.add(value.value)})`;\n }\n return `${column} = ${read} || ${collector.add(value.value)}`;\n }\n return `${column} = ${collector.add(value)}`;\n })\n .join(\", \");\n}\n\n// ─── DELETE ───────────────────────────────────────────────────────\n\nfunction renderDelete(params: {\n dialect: SqlDialect;\n statement: DeleteStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n\n let text = `DELETE FROM ${renderTable(dialect, statement.table)}`;\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n\n const returning = applyReturning({ dialect, requested: statement.returning });\n return { text: text + returning.suffix, values: collector.values, returning: returning.status };\n}\n\n// ─── Statement chains (WITH … SELECT) ─────────────────────────────\n\n/** Derived-table aliases of a chain's verdict SELECT — no step may take them. */\nconst CHAIN_ROWS_ALIAS = \"__vibe_rows\";\nconst CHAIN_ONE_ALIAS = \"__vibe_one\";\n\n/**\n * `WITH \"a\" AS (…), \"b\" AS (…) <final SELECT>` — see {@link ChainStatement}.\n * Steps render in order through the ordinary statement renderers on ONE\n * shared collector, so parameters number in step order, then the verdict.\n *\n * The verdict form is `SELECT rows.cols, <verdict> FROM (SELECT 1) LEFT JOIN\n * (<union>) AS rows ON TRUE`: one row per written row, or ONE all-NULL row\n * carrying the verdict when the union is empty. A `LEFT JOIN`, not a NULL\n * marker branch inside the `UNION ALL`, so every column keeps its RETURNING\n * type — PostgreSQL resolves a nested UNION's untyped NULLs pairwise (two NULL\n * branches become `text`), which a bare marker branch would trip over.\n */\nfunction renderChain(params: {\n dialect: SqlDialect;\n statement: ChainStatement;\n collector: ParamCollector;\n}): RenderedQuery {\n const { dialect, statement, collector } = params;\n if (dialect.statementChain === null) {\n throw unsupportedCapability({\n dialect: dialect.name,\n feature: \"a statement chain (data-modifying WITH steps)\",\n hint: \"this dialect accepts only SELECT inside WITH — gate on SqlDialect.statementChain and keep the multi-statement path\",\n });\n }\n if (statement.steps.length === 0) throw internalError({ message: \"a statement chain needs at least one step\" });\n const defined = new Set<string>();\n const steps: string[] = [];\n for (const step of statement.steps) {\n if (step.name === CHAIN_ROWS_ALIAS || step.name === CHAIN_ONE_ALIAS || defined.has(step.name)) {\n throw internalError({ message: `chain step name \"${step.name}\" is reserved or repeated` });\n }\n const body = renderChainStep({ dialect, statement: step.statement, collector, earlier: defined });\n steps.push(`${dialect.quoteIdent({ name: step.name })} AS (${body})`);\n defined.add(step.name);\n }\n\n const result = statement.result;\n if (result.rowsFrom.length === 0 || result.columns.length === 0) {\n throw internalError({ message: \"a chain result needs at least one source step and one column\" });\n }\n for (const name of result.rowsFrom) {\n if (!defined.has(name)) throw internalError({ message: `chain result reads undefined step \"${name}\"` });\n }\n const columnList = result.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n const union = result.rowsFrom\n .map((name) => `SELECT ${columnList} FROM ${dialect.quoteIdent({ name })}`)\n .join(\" UNION ALL \");\n let select = union;\n if (result.verdict !== undefined || result.tally !== undefined || (result.veto !== undefined && result.veto.length > 0)) {\n const extra: string[] = [];\n for (const alias of [result.verdict?.alias, result.tally?.alias]) {\n if (alias !== undefined && result.columns.includes(alias)) {\n throw internalError({ message: `chain result alias \"${alias}\" collides with a result column` });\n }\n }\n const rows = dialect.quoteIdent({ name: CHAIN_ROWS_ALIAS });\n const projected = result.columns.map((name) => `${rows}.${dialect.quoteIdent({ name })}`);\n if (result.verdict !== undefined) {\n extra.push(`${renderExpr({ dialect, expr: result.verdict.expr, collector })} AS ${dialect.quoteIdent({ name: result.verdict.alias })}`);\n }\n if (result.tally !== undefined || (result.veto !== undefined && result.veto.length > 0)) {\n extra.push(renderTallyColumn({ dialect, result, defined, collector }));\n }\n select =\n `SELECT ${[...projected, ...extra].join(\", \")} FROM (SELECT 1) AS ${dialect.quoteIdent({ name: CHAIN_ONE_ALIAS })}` +\n ` LEFT JOIN (${union}) AS ${rows} ON TRUE`;\n }\n return { text: `WITH ${steps.join(\", \")} ${select}`, values: collector.values, returning: \"none\" };\n}\n\nfunction renderChainStep(params: {\n dialect: SqlDialect;\n statement: ChainStepStatement;\n collector: ParamCollector;\n earlier: ReadonlySet<string>;\n}): string {\n const { dialect, statement, collector } = params;\n switch (statement.kind) {\n case \"select\":\n return renderSelect({ dialect, statement, collector }).text;\n case \"insert\":\n return renderInsert({ dialect, statement, collector }).text;\n case \"insertSelect\":\n return renderInsertSelect({ dialect, statement, collector, earlier: params.earlier });\n case \"update\":\n return renderUpdate({ dialect, statement, collector }).text;\n case \"delete\":\n return renderDelete({ dialect, statement, collector }).text;\n }\n}\n\n/** One SELECT-list cell in a VALUES form: encoded value, Json cell or clock cell — never DEFAULT. */\nfunction renderSelectCell(params: { dialect: SqlDialect; value: unknown; collector: ParamCollector }): string {\n const { dialect, value, collector } = params;\n if (isJsonParamCell(value)) return `${collector.add(value.text)}${jsonCellCast(dialect, value)}`;\n if (isDbNowMarker(value)) return dialect.renderDbNow({ offsetSeconds: value.offsetSeconds, collector });\n if (isSqlDefaultCell(value)) {\n throw internalError({ message: \"DEFAULT is not allowed in an INSERT … SELECT list — omit the column instead\" });\n }\n return collector.add(value);\n}\n\n/**\n * `(SELECT cols FROM (VALUES (<typed NULL row>), ($1, $2), …) AS \"alias\"\n * (cols) OFFSET 1) AS \"alias\"` — see {@link ChainRowSource}: the first VALUES\n * row is one `(SELECT \"col\" FROM typedBy WHERE FALSE)` per column (a typed\n * NULL), which types every later parameter by the target table's own column;\n * `OFFSET 1` drops it again.\n */\nfunction renderRowSource(params: { dialect: SqlDialect; source: ChainRowSource; collector: ParamCollector }): string {\n const { dialect, source, collector } = params;\n if (source.columns.length === 0 || source.rows.length === 0) {\n throw internalError({ message: \"a row source needs at least one column and one row\" });\n }\n const typedBy = renderTable(dialect, source.typedBy);\n const columns = source.columns.map((name) => dialect.quoteIdent({ name }));\n const rows = [`(${columns.map((column) => `(SELECT ${column} FROM ${typedBy} WHERE FALSE)`).join(\", \")})`];\n for (const row of source.rows) {\n if (row.length !== source.columns.length) {\n throw internalError({ message: `row source row has ${row.length} values but ${source.columns.length} columns` });\n }\n rows.push(`(${row.map((value) => renderSelectCell({ dialect, value, collector })).join(\", \")})`);\n }\n const alias = dialect.quoteIdent({ name: source.alias });\n const columnList = columns.join(\", \");\n return `(SELECT ${columnList} FROM (VALUES ${rows.join(\", \")}) AS ${alias} (${columnList}) OFFSET 1) AS ${alias}`;\n}\n\n/**\n * The tally column guarded by the vetoes: `CASE WHEN NOT EXISTS (SELECT 1\n * FROM \"s\") THEN CAST('__vibe_veto:<token>:' || $n || ':' || (SELECT count(*)\n * FROM \"s\") AS integer) … ELSE (SELECT count(*) FROM \"a\") + … END`, `$n`\n * binding the veto's nonce. A veto with `minRows` above 1 (EPIC W) tests\n * `WHEN (SELECT count(*) FROM \"s\") < <minRows>` instead.\n *\n * The failing cast is how a plain SQL expression raises an error (SQLSTATE\n * 22P02, the marker quoted in the message). Its operand reads the step, so it\n * is NOT a constant: PostgreSQL folds constant CASE arms at plan time and\n * would raise even when the arm is never taken; this one is evaluated only\n * when its WHEN holds. The count it appends is the rows the step returned.\n */\nfunction renderTallyColumn(params: { dialect: SqlDialect; result: ChainResult; defined: ReadonlySet<string>; collector: ParamCollector }): string {\n const { dialect, result, defined, collector } = params;\n const tally = result.tally;\n if (tally === undefined) throw internalError({ message: \"a chain veto needs a tally column to guard\" });\n if (tally.steps.length === 0) throw internalError({ message: \"a chain tally needs at least one step\" });\n const step = (name: string): string => {\n if (!defined.has(name)) throw internalError({ message: `chain tally or veto reads undefined step \"${name}\"` });\n return dialect.quoteIdent({ name });\n };\n const count = (name: string): string => `(SELECT count(*) FROM ${step(name)})`;\n const sum = tally.steps.map(count).join(\" + \");\n const vetoes = result.veto ?? [];\n if (vetoes.length === 0) return `${sum} AS ${dialect.quoteIdent({ name: tally.alias })}`;\n const arms = vetoes.map((veto) => {\n if (!CHAIN_VETO_TOKEN_PATTERN.test(veto.token)) throw internalError({ message: `chain veto token \"${veto.token}\" is not a lower-case word` });\n if (typeof veto.nonce !== \"string\" || veto.nonce === \"\") throw internalError({ message: `chain veto \"${veto.token}\" needs a non-empty nonce` });\n const minRows = veto.minRows ?? 1;\n if (!Number.isSafeInteger(minRows) || minRows < 1) throw internalError({ message: `chain veto \"${veto.token}\" needs a positive integer minRows` });\n const when = minRows === 1 ? `WHEN NOT EXISTS (SELECT 1 FROM ${step(veto.step)})` : `WHEN ${count(veto.step)} < ${minRows}`;\n return `${when} THEN CAST('${CHAIN_VETO_PREFIX}${veto.token}:' || ${collector.add(veto.nonce)} || ':' || ${count(veto.step)} AS integer)`;\n });\n return `CASE ${arms.join(\" \")} ELSE ${sum} END AS ${dialect.quoteIdent({ name: tally.alias })}`;\n}\n\n/** `INSERT INTO t (cols) SELECT <cells> [FROM steps] [WHERE …] [RETURNING …]` — a chain step only. */\nfunction renderInsertSelect(params: {\n dialect: SqlDialect;\n statement: InsertSelectStatement;\n collector: ParamCollector;\n earlier: ReadonlySet<string>;\n}): string {\n const { dialect, statement, collector } = params;\n if (statement.columns.length === 0) throw internalError({ message: \"insert requires at least one column\" });\n if (statement.cells.length !== statement.columns.length) {\n throw internalError({\n message: `insert row has ${statement.cells.length} values but ${statement.columns.length} columns`,\n });\n }\n const from = statement.from ?? [];\n for (const name of from) {\n if (!params.earlier.has(name)) throw internalError({ message: `INSERT … SELECT reads step \"${name}\" before it is defined` });\n }\n const source = statement.source;\n if (source !== undefined && (params.earlier.has(source.alias) || from.includes(source.alias))) {\n throw internalError({ message: `row source alias \"${source.alias}\" collides with a chain step` });\n }\n const cells = statement.cells.map((value) => {\n if (isStepColumnRef(value)) {\n if (!from.includes(value.step) && value.step !== source?.alias) {\n throw internalError({ message: `cell reads step \"${value.step}\", which the INSERT … SELECT does not name in FROM` });\n }\n return `${dialect.quoteIdent({ name: value.step })}.${dialect.quoteIdent({ name: value.column })}`;\n }\n return renderSelectCell({ dialect, value, collector });\n });\n const columnList = statement.columns.map((name) => dialect.quoteIdent({ name })).join(\", \");\n let text = `INSERT INTO ${renderTable(dialect, statement.table)} (${columnList}) SELECT ${cells.join(\", \")}`;\n const relations = from.map((name) => dialect.quoteIdent({ name }));\n if (source !== undefined) relations.push(renderRowSource({ dialect, source, collector }));\n if (relations.length > 0) text += ` FROM ${relations.join(\" CROSS JOIN \")}`;\n if (statement.where !== undefined) {\n text += ` WHERE ${renderExpr({ dialect, expr: statement.where, collector })}`;\n }\n return text + applyReturning({ dialect, requested: statement.returning }).suffix;\n}\n",
47
47
  "/**\n * LIKE pattern helpers.\n *\n * User input must be escaped before being embedded in a LIKE pattern, so that\n * `%`, `_` and `\\` in data match literally. All dialects use `\\` as the escape\n * character (sqlite only via the explicit ESCAPE clause the dialect appends —\n * see SqlDialect.likeEscapeClause).\n */\n\n/** Escape LIKE wildcards (`%`, `_`) and the escape character itself. */\nexport function escapeLikePattern(params: { raw: string }): string {\n return params.raw.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"%\", \"\\\\%\").replaceAll(\"_\", \"\\\\_\");\n}\n\n/** Pattern for a `contains` filter: `%value%` with the value escaped. */\nexport function containsPattern(params: { raw: string }): string {\n return `%${escapeLikePattern({ raw: params.raw })}%`;\n}\n\n/** Pattern for a `startsWith` filter: `value%` with the value escaped. */\nexport function startsWithPattern(params: { raw: string }): string {\n return `${escapeLikePattern({ raw: params.raw })}%`;\n}\n\n/** Pattern for an `endsWith` filter: `%value` with the value escaped. */\nexport function endsWithPattern(params: { raw: string }): string {\n return `%${escapeLikePattern({ raw: params.raw })}`;\n}\n\n/**\n * Escape sqlite GLOB metacharacters (`*`, `?`, `[`) via single-character\n * classes — GLOB has no ESCAPE clause, and LIKE's backslash escaping does NOT\n * apply to it (board #20; `]` is literal outside a class). Used by the\n * `strictMatch` renderer on dialects with `strictMatchStrategy: \"glob\"`.\n */\nexport function escapeGlobPattern(params: { raw: string }): string {\n return params.raw.replace(/[*?[]/g, (char) => `[${char}]`);\n}\n\n/**\n * The BOUND pattern a `strictMatch` pattern op renders, per strategy — the\n * ONE derivation point, used by the renderer AND the runtime's render-cache\n * mirror (which must bind the identical parameter, LEARNINGS mirror rule).\n */\nexport function strictMatchPattern(params: {\n strategy: \"native\" | \"glob\" | \"binary\";\n op: \"contains\" | \"startsWith\" | \"endsWith\";\n value: string;\n}): string {\n const { strategy, op, value } = params;\n if (strategy === \"glob\") {\n const inner = escapeGlobPattern({ raw: value });\n return op === \"contains\" ? `*${inner}*` : op === \"startsWith\" ? `${inner}*` : `*${inner}`;\n }\n return op === \"contains\"\n ? containsPattern({ raw: value })\n : op === \"startsWith\"\n ? startsWithPattern({ raw: value })\n : endsWithPattern({ raw: value });\n}\n",
48
48
  "import { unsupportedCapability } from \"@vibeorm/schema\";\nimport type { QualifiedSqlName } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { ParamCollector } from \"../params.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\n\n/** Parsed custom type spelling; quoted identifiers retain their exact bytes. */\nexport type PostgresTypeName = {\n readonly namespace?: string;\n readonly name: string;\n readonly modifier: string;\n readonly array: boolean;\n};\n\nconst IDENTIFIER = '(?:\"(?:[^\"\\\\x00]|\"\")+\"|[a-zA-Z_][a-zA-Z_0-9$]*)';\nconst MODIFIER_VALUE = `(?:[+-]?\\\\d+|${IDENTIFIER}|'(?:[^'\\\\x00]|'')*')`;\nconst TYPE_NAME: RegExp = new RegExp(`^\\\\s*(${IDENTIFIER})(?:\\\\s*\\\\.\\\\s*(${IDENTIFIER}))?\\\\s*(\\\\(\\\\s*${MODIFIER_VALUE}(?:\\\\s*,\\\\s*${MODIFIER_VALUE})*\\\\s*\\\\))?\\\\s*((?:\\\\[\\\\s*\\\\]\\\\s*)*)$`);\nconst MODIFIER_TOKEN: RegExp = new RegExp(MODIFIER_VALUE, \"g\");\nfunction modifier(params: { raw?: string }): string {\n if (params.raw === undefined) return \"\";\n const tokens = params.raw.slice(1, -1).match(MODIFIER_TOKEN) ?? [];\n return `(${tokens.map((token) => /^[+-]?\\d+$/.test(token) ? BigInt(token).toString() : token.startsWith(\"'\") || token.startsWith('\"') ? token : token.toLowerCase()).join(\",\")})`;\n}\nfunction identifier(params: { value: string }): string {\n return params.value.startsWith('\"') ? params.value.slice(1, -1).replaceAll('\"\"', '\"') : params.value.toLowerCase();\n}\n\n/** Parse the identifier/modifier/array syntax used by PostgreSQL extension types. */\nexport function parsePostgresTypeName(params: { raw: string }): PostgresTypeName | undefined {\n const match = TYPE_NAME.exec(params.raw);\n if (match === null) return undefined;\n return {\n ...(match[2] === undefined ? {} : { namespace: identifier({ value: match[1]! }) }),\n name: identifier({ value: match[2] ?? match[1]! }),\n modifier: modifier({ ...(match[3] === undefined ? {} : { raw: match[3] }) }),\n array: (match[4]?.length ?? 0) > 0,\n };\n}\n\n/** Render a resolved type without depending on the executing connection's search path. */\nexport function renderPostgresTypeName(params: { dialect: SqlDialect; type: PostgresTypeName }): string {\n if (params.dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: params.dialect.name, feature: \"postgresTypeIdentity\" });\n const { dialect, type } = params;\n return `${type.namespace === undefined ? \"\" : `${dialect.quoteIdent({ name: type.namespace })}.`}${dialect.quoteIdent({ name: type.name })}${type.modifier}${type.array ? \"[]\" : \"\"}`;\n}\n\n/** Read catalog identity, or resolve an authored name in an explicitly chosen context. */\nexport function renderPostgresTypeIdentity(params: {\n dialect: SqlDialect;\n source: { readonly table: QualifiedSqlName; readonly column: string } | { readonly type: QualifiedSqlName | { readonly name: string } };\n}): RenderedQuery {\n if (params.dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: params.dialect.name, feature: \"postgresTypeIdentity\" });\n const collector = new ParamCollector(params.dialect);\n const { source } = params;\n let text: string;\n if (\"table\" in source) {\n text = `SELECT tn.nspname::text AS \"namespace\", base.typname::text AS \"name\" FROM pg_catalog.pg_attribute a JOIN pg_catalog.pg_class c ON c.oid = a.attrelid JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace JOIN pg_catalog.pg_type t ON t.oid = a.atttypid JOIN pg_catalog.pg_type base ON base.oid = CASE WHEN t.typelem <> 0 AND t.typlen = -1 THEN t.typelem ELSE t.oid END JOIN pg_catalog.pg_namespace tn ON tn.oid = base.typnamespace WHERE n.nspname = ${collector.add(source.table.namespace)} AND c.relname = ${collector.add(source.table.name)} AND a.attname = ${collector.add(source.column)} AND a.attnum > 0 AND NOT a.attisdropped`;\n } else {\n const name = renderPostgresTypeName({ dialect: params.dialect, type: { ...source.type, modifier: \"\", array: false } });\n text = `SELECT n.nspname::text AS \"namespace\", t.typname::text AS \"name\" FROM pg_catalog.pg_type t JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace WHERE t.oid = pg_catalog.to_regtype(${collector.add(name)})`;\n }\n return { text, values: collector.values, returning: \"none\" };\n}\n",
49
49
  "import { unsupportedCapability } from \"@vibeorm/schema\";\nimport type { QualifiedSqlName } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport { ParamCollector } from \"../params.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\n\n/** Read a stored default's function dependencies without evaluating its expression. */\nexport function renderPostgresDefaultFunctionIdentity(params: {\n dialect: SqlDialect;\n table: QualifiedSqlName;\n column: string;\n}): RenderedQuery {\n const { dialect, table, column } = params;\n if (dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: dialect.name, feature: \"defaultFunctionIdentity\" });\n const collector = new ParamCollector(dialect);\n const namespace = collector.add(table.namespace);\n const name = collector.add(table.name);\n const field = collector.add(column);\n return {\n text: `SELECT pg_catalog.pg_get_expr(ad.adbin, ad.adrelid, false) AS \"expression\",\n pn.nspname::text AS \"functionNamespace\", p.proname::text AS \"functionName\",\n (p.pronargs = 0 AND p.provariadic = 0 AND p.prokind = 'f' AND NOT p.proretset) AS \"zeroArguments\",\n (p.prorettype = a.atttypid AND a.atttypmod = -1) AS \"exactResultType\"\nFROM pg_catalog.pg_attrdef ad\nJOIN pg_catalog.pg_attribute a ON a.attrelid = ad.adrelid AND a.attnum = ad.adnum\nJOIN pg_catalog.pg_class c ON c.oid = ad.adrelid\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nJOIN pg_catalog.pg_depend d ON d.classid = 'pg_catalog.pg_attrdef'::pg_catalog.regclass AND d.objid = ad.oid AND d.refclassid = 'pg_catalog.pg_proc'::pg_catalog.regclass AND d.deptype = 'n'\nJOIN pg_catalog.pg_proc p ON p.oid = d.refobjid\nJOIN pg_catalog.pg_namespace pn ON pn.oid = p.pronamespace\nWHERE n.nspname = ${namespace} AND c.relname = ${name} AND a.attname = ${field}\n AND a.attnum > 0 AND NOT a.attisdropped AND a.attgenerated = ''`,\n values: collector.values,\n returning: \"none\",\n };\n}\n",
@@ -56,7 +56,7 @@
56
56
  "import { internalError, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { SqlObjectIdentity } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\nimport { ParamCollector } from \"../params.ts\";\n\n/** Read a qualified object definition without changing the database. */\nexport function renderMigrationObjectQuery(params: { dialect: SqlDialect; identity: SqlObjectIdentity }): RenderedQuery {\n return objectQuery({ ...params, collector: new ParamCollector(params.dialect) });\n}\n\ntype InspectionCollector = Pick<ParamCollector, \"add\" | \"values\">;\n\nfunction objectQuery(params: { dialect: SqlDialect; identity: SqlObjectIdentity; collector: InspectionCollector }): RenderedQuery {\n const { dialect, identity: object, collector } = params;\n if (object.kind === \"namespace\") {\n if (dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: dialect.name, feature: \"fixedNamespaces\" });\n return { text: `SELECT n.nspname::text AS \"name\" FROM pg_catalog.pg_namespace n WHERE n.nspname = ${collector.add(object.name)}`, values: collector.values, returning: \"none\" };\n }\n const physical = \"table\" in object ? object.table : object.name;\n const namespace = collector.add(physical.namespace);\n const name = collector.add(physical.name);\n let text: string;\n if (dialect.name === \"postgres\") {\n const relation = `FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace`;\n const where = `n.nspname = ${namespace} AND c.relname = ${name}`;\n switch (object.kind) {\n case \"constraint\": {\n const enforcement = object.constraintType === \"foreignKey\" ? `, (SELECT bool_and(t.tgenabled IN ('O', 'A')) FROM pg_catalog.pg_trigger t WHERE t.tgconstraint = con.oid) AS \"triggersEnabled\"` : \"\";\n text = `SELECT con.contype::text AS \"type\", pg_catalog.pg_get_constraintdef(con.oid, false) AS \"definition\", con.convalidated AS \"validated\", con.condeferrable AS \"deferrable\", con.condeferred AS \"deferred\"${enforcement} ${relation} JOIN pg_catalog.pg_constraint con ON con.conrelid = c.oid WHERE ${where} AND con.conname = ${collector.add(object.name)}`;\n break;\n }\n case \"trigger\":\n text = `SELECT pg_catalog.pg_get_triggerdef(t.oid, false) AS \"definition\", t.tgenabled::text AS \"enabled\", pn.nspname::text AS \"functionNamespace\", p.proname::text AS \"functionName\", pg_catalog.pg_get_function_identity_arguments(p.oid) AS \"functionArguments\" ${relation} JOIN pg_catalog.pg_trigger t ON t.tgrelid = c.oid JOIN pg_catalog.pg_proc p ON p.oid = t.tgfoid JOIN pg_catalog.pg_namespace pn ON pn.oid = p.pronamespace WHERE ${where} AND t.tgname = ${collector.add(object.name)} AND NOT t.tgisinternal`;\n break;\n case \"function\":\n text = `SELECT pg_catalog.pg_get_functiondef(p.oid) AS \"definition\", p.provolatile::text AS \"volatility\", p.prosecdef AS \"securityDefiner\", CASE WHEN p.prosecdef THEN pg_catalog.pg_get_userbyid(p.proowner)::text ELSE NULL END AS \"definerOwner\", p.proisstrict AS \"strict\", p.proconfig::text AS \"config\", pg_catalog.pg_get_function_result(p.oid) AS \"result\" FROM pg_catalog.pg_proc p JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace WHERE n.nspname = ${namespace} AND p.proname = ${name} AND p.prokind = 'f' AND ARRAY(SELECT tn.nspname || '.' || t.typname FROM unnest(p.proargtypes) WITH ORDINALITY a(oid, ord) JOIN pg_catalog.pg_type t ON t.oid = a.oid JOIN pg_catalog.pg_namespace tn ON tn.oid = t.typnamespace ORDER BY a.ord) = ${collector.add(object.argumentTypes.map((type) => `${type.namespace}.${type.name}`))}::text[]`;\n break;\n case \"view\":\n text = `SELECT pg_catalog.pg_get_viewdef(c.oid, false) AS \"definition\", c.relkind::text AS \"type\", c.reloptions::text AS \"options\" ${relation} WHERE ${where} AND c.relkind IN ('v', 'm')`;\n break;\n case \"sequence\":\n text = `SELECT pg_catalog.format_type(s.seqtypid, NULL) AS \"type\", s.seqstart::text AS \"start\", s.seqincrement::text AS \"increment\", s.seqmax::text AS \"max\", s.seqmin::text AS \"min\", s.seqcache::text AS \"cache\", s.seqcycle AS \"cycle\" ${relation} JOIN pg_catalog.pg_sequence s ON s.seqrelid = c.oid WHERE ${where}`;\n break;\n case \"column\": case \"columnDefault\": case \"generatedColumn\":\n text = `SELECT pg_catalog.format_type(a.atttypid, a.atttypmod) AS \"type\", a.attnotnull AS \"notNull\", a.attgenerated::text AS \"generated\", a.attidentity::text AS \"identity\", cn.nspname::text AS \"collationNamespace\", coll.collname::text AS \"collationName\", pg_catalog.pg_get_expr(d.adbin, d.adrelid, false) AS \"definition\" ${relation} JOIN pg_catalog.pg_attribute a ON a.attrelid = c.oid LEFT JOIN pg_catalog.pg_collation coll ON coll.oid = a.attcollation LEFT JOIN pg_catalog.pg_namespace cn ON cn.oid = coll.collnamespace LEFT JOIN pg_catalog.pg_attrdef d ON d.adrelid = c.oid AND d.adnum = a.attnum WHERE ${where} AND a.attname = ${collector.add(object.column)} AND a.attnum > 0 AND NOT a.attisdropped`;\n break;\n case \"index\":\n text = `SELECT pg_catalog.pg_get_indexdef(i.indexrelid, 0, false) AS \"definition\", i.indisunique AS \"unique\", i.indisvalid AS \"valid\", i.indisready AS \"ready\", con.conname::text AS \"constraint\", con.contype::text AS \"constraintType\" ${relation} JOIN pg_catalog.pg_index i ON i.indrelid = c.oid JOIN pg_catalog.pg_class ix ON ix.oid = i.indexrelid LEFT JOIN pg_catalog.pg_constraint con ON con.conindid = i.indexrelid AND con.contype IN ('p', 'u', 'x') WHERE ${where} AND ix.relname = ${collector.add(object.name)}`;\n break;\n case \"table\":\n text = `SELECT c.relkind::text AS \"type\", c.relrowsecurity AS \"rls\", c.relforcerowsecurity AS \"forceRls\", c.relpersistence::text AS \"persistence\", ARRAY(SELECT option FROM unnest(c.reloptions) AS option ORDER BY option COLLATE \"C\") AS \"options\" ${relation} WHERE ${where} AND c.relkind IN ('r', 'p')`;\n break;\n case \"enum\":\n text = `SELECT ARRAY(SELECT e.enumlabel::text FROM pg_catalog.pg_enum e WHERE e.enumtypid = t.oid ORDER BY e.enumsortorder) AS \"values\" FROM pg_catalog.pg_type t JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace WHERE n.nspname = ${namespace} AND t.typname = ${name} AND t.typtype = 'e'`;\n break;\n case \"postgresExtension\":\n text = `SELECT e.extversion::text AS \"version\", e.extrelocatable AS \"relocatable\" FROM pg_catalog.pg_extension e JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace WHERE n.nspname = ${namespace} AND e.extname = ${name}`;\n break;\n }\n } else if (dialect.name === \"mysql\") {\n switch (object.kind) {\n case \"view\": text = `SELECT VIEW_DEFINITION AS definition, CHECK_OPTION AS checkOption, SECURITY_TYPE AS securityType, DEFINER AS definer FROM information_schema.VIEWS WHERE TABLE_SCHEMA = ${namespace} AND TABLE_NAME = ${name}`; break;\n case \"trigger\": text = `SELECT ACTION_STATEMENT AS definition, ACTION_TIMING AS timing, EVENT_MANIPULATION AS event, ACTION_ORDER AS actionOrder, SQL_MODE AS sqlMode, DEFINER AS definer FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA = ${namespace} AND EVENT_OBJECT_TABLE = ${name} AND TRIGGER_NAME = ${collector.add(object.name)}`; break;\n case \"function\": text = `SELECT ROUTINE_DEFINITION AS definition, DTD_IDENTIFIER AS result, IS_DETERMINISTIC AS deterministic, SQL_DATA_ACCESS AS dataAccess, SECURITY_TYPE AS securityType, SQL_MODE AS sqlMode, DEFINER AS definer FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = ${namespace} AND ROUTINE_NAME = ${name} AND ROUTINE_TYPE = 'FUNCTION'`; break;\n case \"column\": case \"columnDefault\": case \"generatedColumn\": text = `SELECT COLUMN_TYPE AS type, IS_NULLABLE AS nullable, COLUMN_DEFAULT AS definition, GENERATION_EXPRESSION AS ${dialect.quoteIdent({ name: \"generated\" })}, EXTRA AS extra, COLLATION_NAME AS collation FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ${namespace} AND TABLE_NAME = ${name} AND COLUMN_NAME = ${collector.add(object.column)}`; break;\n case \"constraint\":\n if (object.constraintType === \"exclusion\") throw unsupportedCapability({ dialect: \"mysql\", feature: \"exclusionConstraints\" });\n text = `SELECT tc.CONSTRAINT_TYPE AS type, tc.ENFORCED AS enforced, cc.CHECK_CLAUSE AS definition, rc.UPDATE_RULE AS onUpdate, rc.DELETE_RULE AS onDelete, rc.MATCH_OPTION AS matchOption FROM information_schema.TABLE_CONSTRAINTS tc LEFT JOIN information_schema.CHECK_CONSTRAINTS cc ON cc.CONSTRAINT_SCHEMA = tc.CONSTRAINT_SCHEMA AND cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME LEFT JOIN information_schema.REFERENTIAL_CONSTRAINTS rc ON rc.CONSTRAINT_SCHEMA = tc.CONSTRAINT_SCHEMA AND rc.TABLE_NAME = tc.TABLE_NAME AND rc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME WHERE tc.TABLE_SCHEMA = ${namespace} AND tc.TABLE_NAME = ${name} AND tc.CONSTRAINT_NAME = ${collector.add(object.name)}`;\n break;\n case \"index\": text = `SELECT INDEX_NAME AS name, NON_UNIQUE AS nonUnique, INDEX_TYPE AS method, IS_VISIBLE AS visible FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = ${namespace} AND TABLE_NAME = ${name} AND INDEX_NAME = ${collector.add(object.name)} GROUP BY INDEX_NAME, NON_UNIQUE, INDEX_TYPE, IS_VISIBLE`; break;\n case \"table\": text = `SELECT TABLE_TYPE AS type, ENGINE AS engine, TABLE_COLLATION AS collation FROM information_schema.TABLES WHERE TABLE_SCHEMA = ${namespace} AND TABLE_NAME = ${name}`; break;\n default: throw unsupportedCapability({ dialect: \"mysql\", feature: `inspect:${object.kind}` });\n }\n } else {\n if (physical.namespace !== \"main\" && physical.namespace !== \"temp\") throw unsupportedCapability({ dialect: \"sqlite\", feature: \"attachedSchemaInspection\" });\n // sqlite_schema retains source SQL. It is not a semantic SQL normalizer.\n const catalog = `${dialect.quoteIdent({ name: physical.namespace })}.sqlite_schema`;\n const kind = object.kind === \"table\" || object.kind === \"view\" ? object.kind : object.kind === \"trigger\" ? \"trigger\" : object.kind === \"index\" ? \"index\" : \"table\";\n if ([\"function\", \"sequence\", \"postgresExtension\", \"enum\"].includes(object.kind) || (object.kind === \"constraint\" && object.constraintType === \"exclusion\")) throw unsupportedCapability({ dialect: \"sqlite\", feature: `inspect:${object.kind}` });\n // Rebuild parameters: SQLite has positional placeholders, including unused values is invalid.\n const sqliteParams = new ParamCollector(dialect);\n if (object.kind === \"column\" || object.kind === \"columnDefault\" || object.kind === \"generatedColumn\") {\n text = `SELECT x.type AS type, x.\"notnull\" AS \"notNull\", x.pk AS primaryKeyPosition, x.hidden AS generated, x.dflt_value AS definition, (SELECT sql FROM ${catalog} WHERE name = ${sqliteParams.add(physical.name)} AND type = 'table') AS tableDefinition FROM pragma_table_xinfo(${sqliteParams.add(physical.name)}, ${sqliteParams.add(physical.namespace)}) x WHERE x.name = ${sqliteParams.add(object.column)}`;\n return { text, values: sqliteParams.values, returning: \"none\" };\n }\n const objectName = object.kind === \"trigger\" || object.kind === \"index\" ? object.name : physical.name;\n text = `SELECT sql AS definition, type AS type FROM ${catalog} WHERE name = ${sqliteParams.add(objectName)} AND type = ${sqliteParams.add(kind)}`;\n return { text, values: sqliteParams.values, returning: \"none\" };\n }\n return { text, values: collector.values, returning: \"none\" };\n}\n\n/** Ordered MySQL object members; no GROUP_CONCAT truncation can hide a definition change. */\nexport function renderMysqlObjectMembers(params: { dialect: SqlDialect; identity: SqlObjectIdentity }): RenderedQuery | undefined {\n if (params.dialect.name !== \"mysql\") return undefined;\n const object = params.identity;\n if (object.kind !== \"function\" && object.kind !== \"index\" && object.kind !== \"constraint\") return undefined;\n const collector = new ParamCollector(params.dialect);\n const physical = \"table\" in object ? object.table : object.name;\n const namespace = collector.add(physical.namespace);\n const name = collector.add(physical.name);\n const text = object.kind === \"function\"\n ? `SELECT PARAMETER_MODE AS mode, PARAMETER_NAME AS name, DTD_IDENTIFIER AS type, CHARACTER_SET_NAME AS characterSet, COLLATION_NAME AS collation FROM information_schema.PARAMETERS WHERE SPECIFIC_SCHEMA = ${namespace} AND SPECIFIC_NAME = ${name} ORDER BY ORDINAL_POSITION`\n : object.kind === \"index\"\n ? `SELECT COLUMN_NAME AS name, EXPRESSION AS expression, SUB_PART AS prefixLength, COLLATION AS collation FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = ${namespace} AND TABLE_NAME = ${name} AND INDEX_NAME = ${collector.add(object.name)} ORDER BY SEQ_IN_INDEX`\n : `SELECT COLUMN_NAME AS name, REFERENCED_TABLE_SCHEMA AS referenceNamespace, REFERENCED_TABLE_NAME AS referenceTable, REFERENCED_COLUMN_NAME AS referenceColumn FROM information_schema.KEY_COLUMN_USAGE WHERE CONSTRAINT_SCHEMA = ${namespace} AND TABLE_NAME = ${name} AND CONSTRAINT_NAME = ${collector.add(object.name)} ORDER BY ORDINAL_POSITION`;\n return { text, values: collector.values, returning: \"none\" };\n}\n\n/** PostgreSQL dependency addresses are returned as server-owned strings, never guessed from SQL. */\nexport function renderMigrationDependencies(params: { dialect: SqlDialect; identity: SqlObjectIdentity }): RenderedQuery {\n return dependencyQuery({ ...params, collector: new ParamCollector(params.dialect) });\n}\n\nfunction dependencyQuery(params: { dialect: SqlDialect; identity: SqlObjectIdentity; collector: InspectionCollector }): RenderedQuery {\n if (params.dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: params.dialect.name, feature: \"catalogDependencies\" });\n const object = params.identity;\n const collector = params.collector;\n if (object.kind === \"namespace\") {\n const namespace = collector.add(object.name);\n return { text: `SELECT DISTINCT json_build_array(d.deptype, a.type, a.object_names, a.object_args)::text AS address FROM pg_catalog.pg_namespace n JOIN pg_catalog.pg_depend d ON d.classid = 'pg_namespace'::regclass AND d.objid = n.oid AND d.objsubid = 0 CROSS JOIN LATERAL pg_catalog.pg_identify_object_as_address(d.refclassid, d.refobjid, d.refobjsubid) a WHERE n.nspname = ${namespace} ORDER BY address`, values: collector.values, returning: \"none\" };\n }\n const physical = \"table\" in object ? object.table : object.name;\n const namespace = collector.add(physical.namespace);\n const name = collector.add(physical.name);\n const relation = `SELECT c.oid FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = ${namespace} AND c.relname = ${name}`;\n let source: string;\n switch (object.kind) {\n case \"constraint\": source = `SELECT 'pg_constraint'::regclass AS classid, con.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_constraint con WHERE con.conrelid = (${relation}) AND con.conname = ${collector.add(object.name)}`; break;\n case \"trigger\": source = `SELECT 'pg_trigger'::regclass AS classid, t.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_trigger t WHERE t.tgrelid = (${relation}) AND t.tgname = ${collector.add(object.name)}`; break;\n case \"columnDefault\": case \"generatedColumn\": source = `SELECT 'pg_attrdef'::regclass AS classid, d.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_attrdef d JOIN pg_catalog.pg_attribute a ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = (${relation}) AND a.attname = ${collector.add(object.column)}`; break;\n case \"column\": source = `SELECT 'pg_class'::regclass AS classid, a.attrelid AS objid, a.attnum AS objsubid FROM pg_catalog.pg_attribute a WHERE a.attrelid = (${relation}) AND a.attname = ${collector.add(object.column)}`; break;\n case \"view\": source = `SELECT 'pg_rewrite'::regclass AS classid, r.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_rewrite r WHERE r.ev_class = (${relation})`; break;\n case \"index\": source = `SELECT 'pg_class'::regclass AS classid, i.indexrelid AS objid, 0 AS objsubid FROM pg_catalog.pg_index i JOIN pg_catalog.pg_class c ON c.oid = i.indexrelid WHERE i.indrelid = (${relation}) AND c.relname = ${collector.add(object.name)}`; break;\n case \"function\": source = `SELECT 'pg_proc'::regclass AS classid, p.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_proc p JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace WHERE n.nspname = ${namespace} AND p.proname = ${name} AND ARRAY(SELECT tn.nspname || '.' || t.typname FROM unnest(p.proargtypes) WITH ORDINALITY a(oid, ord) JOIN pg_catalog.pg_type t ON t.oid = a.oid JOIN pg_catalog.pg_namespace tn ON tn.oid = t.typnamespace ORDER BY a.ord) = ${collector.add(object.argumentTypes.map((type) => `${type.namespace}.${type.name}`))}::text[]`; break;\n case \"enum\": source = `SELECT 'pg_type'::regclass AS classid, t.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_type t JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace WHERE n.nspname = ${namespace} AND t.typname = ${name} AND t.typtype = 'e'`; break;\n case \"postgresExtension\": source = `SELECT 'pg_extension'::regclass AS classid, e.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_extension e JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace WHERE n.nspname = ${namespace} AND e.extname = ${name}`; break;\n default: source = `SELECT 'pg_class'::regclass AS classid, c.oid AS objid, 0 AS objsubid FROM pg_catalog.pg_class c WHERE c.oid = (${relation})`; break;\n }\n return { text: `SELECT DISTINCT json_build_array(d.deptype, a.type, a.object_names, a.object_args)::text AS address FROM (${source}) s JOIN pg_catalog.pg_depend d ON d.classid = s.classid AND d.objid = s.objid AND d.objsubid = s.objsubid CROSS JOIN LATERAL pg_catalog.pg_identify_object_as_address(d.refclassid, d.refobjid, d.refobjsubid) a ORDER BY address`, values: collector.values, returning: \"none\" };\n}\n\nfunction inspectionReferences(params: { dialect: SqlDialect }): InspectionCollector {\n const values: unknown[] = [];\n return { values, add(value) {\n values.push(value);\n return `request.${params.dialect.quoteIdent({ name: `p${values.length}` })}`;\n } };\n}\n\n/** One batched PostgreSQL catalog read and the request positions it answers for. */\nexport type MigrationObjectBatch = RenderedQuery & { readonly positions: readonly number[] };\n\n/** Batch PostgreSQL facts and dependencies by SQL shape, retaining each requested position. */\nexport function renderMigrationObjectBatch(params: { dialect: SqlDialect; identities: readonly SqlObjectIdentity[] }): readonly MigrationObjectBatch[] {\n const { dialect } = params;\n if (dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: dialect.name, feature: \"batchedMigrationInspection\" });\n const groups = new Map<string, { identity: SqlObjectIdentity; position: number }[]>();\n for (const [position, identity] of params.identities.entries()) {\n // One group per distinct facts/dependency SQL pair; columnDefault and generatedColumn render the same pair.\n const kind = identity.kind === \"constraint\" ? `${identity.kind}:${identity.constraintType}` : identity.kind === \"generatedColumn\" ? \"columnDefault\" : identity.kind;\n const group = groups.get(kind) ?? [];\n group.push({ identity, position });\n groups.set(kind, group);\n }\n return [...groups.values()].map((group): MigrationObjectBatch => {\n const identity = group[0]!.identity;\n const facts = objectQuery({ dialect, identity, collector: inspectionReferences({ dialect }) });\n const dependencies = dependencyQuery({ dialect, identity, collector: inspectionReferences({ dialect }) });\n // Both queries read request.p1..pN, so they must bind the identity's values in one order.\n if (JSON.stringify(dependencies.values) !== JSON.stringify(facts.values)) throw internalError({ message: \"Batched catalog queries bind their identity in different orders\", meta: { kind: identity.kind } });\n const columns = facts.values.map((value, index) => `${dialect.quoteIdent({ name: `p${index + 1}` })} ${Array.isArray(value) ? \"text[]\" : \"text\"}`);\n const requests = group.map(({ identity, position }) => ({ position, ...Object.fromEntries(renderMigrationObjectQuery({ dialect, identity }).values.map((value, index) => [`p${index + 1}`, value])) }));\n // Bind serialized JSON as text; a jsonb wire parameter is JSON-encoded again by Bun.\n const collector = new ParamCollector(dialect);\n return {\n text: `SELECT request.position, to_jsonb(facts) AS facts, ARRAY(SELECT address FROM (${dependencies.text}) dependency ORDER BY address) AS \"dependencyAddresses\" FROM jsonb_to_recordset(${collector.add(JSON.stringify(requests))}::text::jsonb) AS request(position integer, ${columns.join(\", \")}) CROSS JOIN LATERAL (${facts.text}) facts`,\n values: collector.values,\n returning: \"none\",\n positions: group.map(({ position }) => position),\n };\n });\n}\n\n/** Record the database normalization context in generated metadata. */\nexport function renderMigrationServerVersion(params: { dialect: SqlDialect }): RenderedQuery {\n return { text: params.dialect.name === \"sqlite\" ? \"SELECT sqlite_version() AS version\" : \"SELECT version() AS version\", values: [], returning: \"none\" };\n}\n\n/** Inspectable current namespace; core PostgreSQL schema mapping remains public. */\nexport function renderMigrationNamespace(params: { dialect: SqlDialect }): RenderedQuery {\n return { text: params.dialect.name === \"mysql\" ? \"SELECT DATABASE() AS namespace\" : params.dialect.name === \"sqlite\" ? \"SELECT 'main' AS namespace\" : \"SELECT 'public' AS namespace\", values: [], returning: \"none\" };\n}\n\n/** PostgreSQL CHECK probe uses the actual table's type context and is always rolled back. */\nexport function renderCheckProbe(params: { dialect: SqlDialect; table: { namespace: string; name: string }; expression: string; name: string }): RenderedQuery {\n if (params.dialect.name !== \"postgres\") throw unsupportedCapability({ dialect: params.dialect.name, feature: \"rollbackCheckProbe\" });\n const q = (name: string): string => params.dialect.quoteIdent({ name });\n return { text: `ALTER TABLE ${q(params.table.namespace)}.${q(params.table.name)} ADD CONSTRAINT ${q(params.name)} CHECK (${params.expression}) NOT VALID`, values: [], returning: \"none\" };\n}\n",
57
57
  "/**\n * PostgreSQL migration-operations SQL: migration-owned session settings and\n * the read-only catalog probes a nontransactional migration needs to establish\n * what actually happened before it resumes.\n *\n * Why these live here and not in @vibeorm/migrate: every SQL-text decision\n * belongs to a dialect module (constitution rule 4). The migrate runner\n * decides WHEN to ask; this file decides WHAT is asked.\n *\n * Honesty notes carried by these shapes:\n *\n * - `lock_timeout` bounds how long ONE statement waits for a lock. It does not\n * make an operation online, and it does not bound the lock's HOLD time once\n * acquired. The runner surfaces that as risk output, not as a guarantee.\n * - The index probe reports `indisvalid`/`indisready` AND the full deparsed\n * definition, because `CREATE INDEX CONCURRENTLY` can fail leaving an\n * invalid index behind that `IF NOT EXISTS` would happily accept.\n * - Every probe is scoped to `current_schema()`, the same schema the migrate\n * DDL renderers write into.\n */\n\nimport { VibeError, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { SqlDialect } from \"../dialect.ts\";\nimport type { RenderedQuery } from \"../render.ts\";\nimport { ParamCollector } from \"../params.ts\";\n\n// ─── Session settings ─────────────────────────────────────────────\n\n/** Session settings a migration may scope to its own work. */\nexport type MigrationSessionSetting = \"lock_timeout\" | \"statement_timeout\";\n\n/**\n * A PostgreSQL interval-ish setting value as `current_setting` returns it\n * (`0`, `5s`, `250ms`, `2min`). Anything else is refused rather than\n * interpolated — these values are written into SQL text, not parameters,\n * because `SET` takes no placeholders.\n */\nconst SETTING_VALUE = /^[0-9]+(?:\\.[0-9]+)?\\s*(?:us|ms|s|min|h|d)?$/;\n\nfunction requirePostgres(params: { dialect: SqlDialect; feature: string }): void {\n if (params.dialect.name !== \"postgres\") {\n throw unsupportedCapability({ dialect: params.dialect.name, feature: params.feature });\n }\n}\n\n/** Read the session's current `lock_timeout` / `statement_timeout`, to restore them later. */\nexport function renderMigrationSessionRead(params: { dialect: SqlDialect }): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"migrationSessionSettings\" });\n return {\n text: `SELECT pg_catalog.current_setting('lock_timeout') AS \"lockTimeout\", pg_catalog.current_setting('statement_timeout') AS \"statementTimeout\"`,\n values: [],\n returning: \"none\",\n };\n}\n\n/**\n * Scope a setting to the migration's own work. Milliseconds only, and only a\n * non-negative safe integer: 0 means \"no limit\", which is PostgreSQL's own\n * default and the value a restore falls back to.\n */\nexport function renderMigrationSessionSet(params: {\n dialect: SqlDialect;\n setting: MigrationSessionSetting;\n milliseconds: number;\n /** `SET LOCAL` — reverted by the enclosing COMMIT/ROLLBACK, so no restore is needed. */\n local?: boolean;\n}): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"migrationSessionSettings\" });\n const { milliseconds, setting } = params;\n if (!Number.isSafeInteger(milliseconds) || milliseconds < 0) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `${setting} must be a non-negative integer number of milliseconds (got ${String(milliseconds)})`,\n meta: { reason: \"execution-metadata-invalid\", setting, value: milliseconds },\n });\n }\n return { text: `SET ${params.local === true ? \"LOCAL \" : \"\"}${setting} = '${milliseconds}ms'`, values: [], returning: \"none\" };\n}\n\n/**\n * Put a setting back to the value {@link renderMigrationSessionRead} reported.\n * An unrecognized value restores the server default with `RESET` instead of\n * being interpolated — never guess at SQL text read back from a session.\n */\nexport function renderMigrationSessionRestore(params: {\n dialect: SqlDialect;\n setting: MigrationSessionSetting;\n value: string;\n}): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"migrationSessionSettings\" });\n const trimmed = params.value.trim();\n const text = SETTING_VALUE.test(trimmed)\n ? `SET ${params.setting} = '${trimmed}'`\n : `RESET ${params.setting}`;\n return { text, values: [], returning: \"none\" };\n}\n\n// ─── Catalog probes ───────────────────────────────────────────────\n\n/**\n * Everything needed to decide whether a `CREATE INDEX CONCURRENTLY` finished:\n * the index's validity, its access method, its uniqueness, its key-column\n * expressions as PostgreSQL itself deparses them (newline-joined so every\n * adapter decodes one plain text column), its partial predicate and the full\n * `pg_get_indexdef` text for the operator to read in an error message.\n * Complete recovery also reads NULL uniqueness and lossless ordered JSON text\n * for key and included definitions. PostgreSQL 16/17/18 expose these fields.\n *\n * `indisvalid = false` is the state a cancelled/failed concurrent build\n * leaves behind: the index exists, is skipped by the planner, and is still\n * maintained by writes. `IF NOT EXISTS` cannot tell that apart from success.\n */\nexport function renderIndexStateQuery(params: { dialect: SqlDialect; index: string }): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"concurrentIndexRecovery\" });\n const collector = new ParamCollector(params.dialect);\n const name = collector.add(params.index);\n return {\n text: `SELECT c.relname::text AS \"index\",\n t.relname::text AS \"table\",\n am.amname::text AS \"method\",\n i.indisunique AS \"unique\",\n i.indnullsnotdistinct AS \"nullsNotDistinct\",\n pg_catalog.array_to_json(ARRAY(SELECT pg_catalog.pg_get_indexdef(i.indexrelid, k.k, true)\n FROM pg_catalog.generate_series(1, i.indnkeyatts) AS k(k) ORDER BY k.k))::text AS \"keyColumns\",\n pg_catalog.array_to_json(ARRAY(SELECT pg_catalog.pg_get_indexdef(i.indexrelid, k.k, true)\n FROM pg_catalog.generate_series(i.indnkeyatts + 1, i.indnatts) AS k(k) ORDER BY k.k))::text AS \"includedColumns\",\n i.indisvalid AS \"valid\",\n i.indisready AS \"ready\",\n pg_catalog.pg_get_expr(i.indpred, i.indrelid) AS \"predicate\",\n pg_catalog.pg_get_indexdef(i.indexrelid) AS \"definition\",\n (SELECT string_agg(pg_catalog.pg_get_indexdef(i.indexrelid, k.k, true), E'\\\\n' ORDER BY k.k)\n FROM pg_catalog.generate_series(1, i.indnkeyatts) AS k(k)) AS \"columns\"\nFROM pg_catalog.pg_class c\nJOIN pg_catalog.pg_index i ON i.indexrelid = c.oid\nJOIN pg_catalog.pg_class t ON t.oid = i.indrelid\nJOIN pg_catalog.pg_am am ON am.oid = c.relam\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname = pg_catalog.current_schema() AND c.relname = ${name}`,\n values: collector.values,\n returning: \"none\",\n };\n}\n\n/** Whether a named constraint exists on a table, and whether it is validated. */\nexport function renderConstraintStateQuery(params: {\n dialect: SqlDialect;\n table: string;\n constraint: string;\n}): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"stagedConstraints\" });\n const collector = new ParamCollector(params.dialect);\n const table = collector.add(params.table);\n const constraint = collector.add(params.constraint);\n return {\n text: `SELECT con.conname::text AS \"constraint\",\n rel.relname::text AS \"table\",\n con.contype::text AS \"type\",\n con.convalidated AS \"validated\",\n pg_catalog.pg_get_constraintdef(con.oid) AS \"definition\"\nFROM pg_catalog.pg_constraint con\nJOIN pg_catalog.pg_class rel ON rel.oid = con.conrelid\nJOIN pg_catalog.pg_namespace n ON n.oid = rel.relnamespace\nWHERE n.nspname = pg_catalog.current_schema() AND rel.relname = ${table} AND con.conname = ${constraint}`,\n values: collector.values,\n returning: \"none\",\n };\n}\n\n/** Whether a relation of that physical name exists in the migration's schema. */\nexport function renderRelationStateQuery(params: { dialect: SqlDialect; table: string }): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"renameRecovery\" });\n const collector = new ParamCollector(params.dialect);\n const table = collector.add(params.table);\n return {\n text: `SELECT c.relname::text AS \"table\", c.relkind::text AS \"kind\"\nFROM pg_catalog.pg_class c\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname = pg_catalog.current_schema() AND c.relname = ${table}`,\n values: collector.values,\n returning: \"none\",\n };\n}\n\n/** Whether a live (non-dropped, non-system) column of that name exists on a table. */\nexport function renderColumnStateQuery(params: {\n dialect: SqlDialect;\n table: string;\n column: string;\n}): RenderedQuery {\n requirePostgres({ dialect: params.dialect, feature: \"renameRecovery\" });\n const collector = new ParamCollector(params.dialect);\n const table = collector.add(params.table);\n const column = collector.add(params.column);\n return {\n text: `SELECT a.attname::text AS \"column\"\nFROM pg_catalog.pg_attribute a\nJOIN pg_catalog.pg_class c ON c.oid = a.attrelid\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname = pg_catalog.current_schema() AND c.relname = ${table} AND a.attname = ${column}\n AND a.attnum > 0 AND NOT a.attisdropped`,\n values: collector.values,\n returning: \"none\",\n };\n}\n"
58
58
  ],
59
- "mappings": ";;AASA,IAAM,aAAa,IAAI;AAGhB,SAAS,yBAAyB,CAAC,QAMjC;AAAA,EACP,QAAQ,MAAM,SAAS;AAAA,EACvB,MAAM,WAAW,UAAU,KAAK,IAAI,IAAI,MAAM;AAAA,EAC9C,MAAM,YAAY,SAAS,MAAM,CAAC,EAAE,QAAQ,OAAO,EAAE;AAAA,EACrD,MAAM,YAAY,KAAK,UAAU,YAAY,KAAK,IAAI,EAAE,QAAQ,eAAe,KAAK,YAAY;AAAA,EAChG,WAAW,IAAI,MAAM;AAAA,IACnB,cAAc,KAAK,UAAU,QAAQ,KAAK,IAAI;AAAA,IAAG;AAAA,OAC7C,OAAO,YAAY,YAAY,CAAC,IAAI,EAAE,SAAS,OAAO,QAAQ;AAAA,IAClE,KAAK,OAAO,OAAO,QAAQ;AAAA,IAC3B,MAAM,OAAO,QAAQ;AAAA,EACvB,CAAC;AAAA,EACD,OAAO;AAAA;AAGT,SAAS,UAAU,CAAC,QAAuD;AAAA,EACzE,MAAM,SAAS,WAAW,IAAI,OAAO,IAAI;AAAA,EACzC,IAAI,WAAW,aAAa,OAAO,iBAAiB,KAAK,UAAU,QAAQ,KAAK,OAAO,IAAI,GAAG;AAAA,IAC5F,WAAW,OAAO,OAAO,IAAI;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAIF,SAAS,oBAAoB,CAAC,QAAgC;AAAA,EACnE,OAAO,WAAW,MAAM,GAAG,OAAO,QAAQ,OAAO,SAAS,KAAK,UAAU,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,YAAY,KAAK,OAAO,IAAI,IAAI;AAAA;AAIhJ,SAAS,qBAAqB,CAAC,QAA8E;AAAA,EAClH,MAAM,WAAW,WAAW,MAAM;AAAA,EAClC,OAAO,aAAa,cAAc,OAAO,SAAS,aAAa,SAAS,SAAS,OAAO,QAAQ,SAAS,OAAO;AAAA;AAI3G,SAAS,4BAA4B,CAAC,QAAqD;AAAA,EAChG,MAAM,WAAW,WAAW,MAAM;AAAA,EAClC,OAAO,UAAU,SAAS,WAAW,SAAS,WAAW,SAAS,OAAO;AAAA;AAIpE,SAAS,qBAAqB,CAAC,QAAwD;AAAA,EAC5F,MAAM,OAAO,WAAW,EAAE,MAAM,OAAO,KAAK,CAAC;AAAA,EAC7C,MAAM,QAAQ,WAAW,EAAE,MAAM,OAAO,MAAM,CAAC;AAAA,EAC/C,IAAI,qBAAqB,EAAE,MAAM,OAAO,KAAK,CAAC,MAAM,qBAAqB,EAAE,MAAM,OAAO,MAAM,CAAC;AAAA,IAAG,OAAO;AAAA,EACzG,MAAM,OAAO,CAAC,GAA6B,MAA4C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI;AAAA,EAChH,IAAI,MAAM,SAAS,YAAY,OAAO,SAAS,UAAU;AAAA,IACvD,OAAO,MAAM,YAAY,aAAa,OAAO,YAAY,YAAY,KAAK,KAAK,SAAS,MAAM,OAAO,IAAI;AAAA,EAC3G;AAAA,EACA,MAAM,QAAQ,CAAC,aAA2D;AAAA,IACxE,SAAS,OAAO,SAAS,SAAS,UAAU,SAAS,IAAI,MAAM,GAAG;AAAA,IAClE,OAAO,OAAO,WAAW,MAAM,QAAS,MAAM,GAAG;AAAA,IACjD,MAAM,QAAQ,OAAO,OAAO,KAAK,IAAI,OAAO,OAAO,OAAO,IAAI,KAAK,OAAO,KAAK,CAAC,IAAI,cAChF,OAAO,SAAS,OAAO,GAAG,GAAG,CAAC;AAAA,IAClC,MAAM,OAAO,OAAO,MAAM;AAAA,IAE1B,OAAO,CAAC,QAAQ,OAAO,IAAI,IAAI,UAAY,CAAC,IAAI;AAAA;AAAA,EAElD,IAAK,MAAM,SAAS,aAAa,KAAK,SAAS,eAAiB,OAAO,SAAS,aAAa,MAAM,SAAS,aAAc;AAAA,IACxH,IAAI,SAAS,aAAa,UAAU,aAAa,KAAK,SAAS,MAAM;AAAA,MAAM,OAAO;AAAA,IAClF,MAAM,IAAI,MAAM,IAAI;AAAA,IACpB,MAAM,IAAI,MAAM,KAAK;AAAA,IACrB,OAAO,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,KAAK,EAAE,IAAI,EAAE,EAAE;AAAA,EAC5C;AAAA,EACA,MAAM,eAAe,KAAK,KAAK,UAAU,QAAQ,KAAK,OAAO,IAAI,GAAG,KAAK,UAAU,QAAQ,KAAK,OAAO,KAAK,CAAC;AAAA,EAC7G,IAAI,iBAAiB;AAAA,IAAG,OAAO;AAAA,EAC/B,MAAM,IAAI,UAAU,KAAK,MAAM,QAAQ,EAAE,IAAI,IAAI,MAAM,CAAC,KAAK;AAAA,EAC7D,MAAM,IAAI,UAAU,KAAK,OAAO,QAAQ,EAAE,IAAI,IAAI,MAAM,CAAC,KAAK;AAAA,EAC9D,OAAO,KAAK,EAAE,OAAO,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,GAAG,EAAE,OAAO,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;AAAA;AAI/F,SAAS,kBAAkB,CAAC,QAA8B;AAAA,EAC/D,MAAM,OAAO,IAAI,KAAK,KAAK,UAAU,QAAQ,KAAK,OAAO,IAAI,CAAC;AAAA,EAC9D,MAAM,WAAW,WAAW,MAAM;AAAA,EAClC,IAAI,aAAa;AAAA,IAAW,WAAW,IAAI,MAAM,QAAQ;AAAA,EACzD,OAAO;AAAA;;AC5FT,IAAM,8BAA6C,OAAO,kCAAkC;AAUrF,SAAS,wBAAwB,CAAC,QAA6E;AAAA,EACpH,OAAO,GAAG,8BAA8B,MAAM,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK;AAAA;AAIhF,SAAS,0BAA0B,CAAC,OAAmD;AAAA,EAC5F,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,+BAA+B;AAAA;;AClBvF,IAAM,sBAAqC,OAAO,2BAA2B;AAgCtE,SAAS,iBAAiB,CAAC,QAA4F;AAAA,EAC5H,OAAO,GAAG,sBAAsB,MAAM,OAAO,OAAO,OAAO,SAAS,OAAO,QAAQ;AAAA;AAI9E,SAAS,mBAAmB,CAAC,OAA4C;AAAA,EAC9E,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,uBAAuB;AAAA;;ACtC/E;AAKO,SAAS,8BAA8B,CAAC,QAA4H;AAAA,EACzK,IAAI,OAAO,QAAQ,SAAS;AAAA,IAAY,MAAM,sBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,kBAAkB,CAAC;AAAA,EAChI,MAAM,QAAQ;AAAA,EACd,IAAI;AAAA,EACJ,QAAQ,OAAO;AAAA,SACR;AAAA,MAAc,OAAO,6HAA6H;AAAA,MAA4B;AAAA,SAC9K;AAAA,MAAe,OAAO,mYAAmY;AAAA,MAA8D;AAAA,SACvd;AAAA,MAAkB,OAAO,8gBAA8gB;AAAA,MAAuC;AAAA,SAC9kB;AAAA,MAAe,OAAO,8aAA8a;AAAA,MAAkD;AAAA;AAAA,EAE7f,OAAO,EAAE,MAAM,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;;ACf/C,kCAAS;;;ACCT,kCAAS;;;ACDT,sBAAS,qCAAW;;;ACApB,sBAAS;;;ACAT,sBAAS;;;ACAT,sBAAS;;;ACCT,IAAM,iBAAyB;AAGxB,SAAS,gBAAgB,CAAC,QAAgD;AAAA,EAC/E,QAAQ,WAAW;AAAA,EACnB,MAAM,QAAQ,OAAO,IAAI,CAAC,UAAU;AAAA,IAClC,IAAI,UAAU,QAAQ,UAAU;AAAA,MAAW,OAAO;AAAA,IAClD,MAAM,OAAO,OAAO,KAAK;AAAA,IACzB,OAAO,eAAe,KAAK,IAAI,IAAI,IAAI,KAAK,QAAQ,UAAU,CAAC,SAAS,KAAK,MAAM,OAAO;AAAA,GAC3F;AAAA,EACD,OAAO,IAAI,MAAM,KAAK,GAAG;AAAA;AASpB,SAAS,mBAAmB,CAAC,QAAuD;AAAA,EAEzF,MAAM,UAAU,OAAO,QAAQ,WAAW,GAAG,IAAI,OAAO,QAAQ,QAAQ,qBAAqB,EAAE,IAAI,OAAO;AAAA,EAC1G,IAAI,QAAQ,SAAS,KAAK,CAAC,QAAQ,WAAW,GAAG,KAAK,CAAC,QAAQ,SAAS,GAAG;AAAA,IAAG,OAAO;AAAA,EACrF,MAAM,QAAQ,QAAQ,MAAM,GAAG,EAAE;AAAA,EACjC,IAAI,MAAM,WAAW;AAAA,IAAG,OAAO,CAAC;AAAA,EAChC,MAAM,MAAyB,CAAC;AAAA,EAChC,IAAI,QAAQ;AAAA,EACZ,OAAO,QAAQ,MAAM,QAAQ;AAAA,IAC3B,IAAI,MAAM,WAAW,KAAK;AAAA,MACxB,IAAI,OAAO;AAAA,MACX;AAAA,MACA,OAAO,QAAQ,MAAM,QAAQ;AAAA,QAC3B,MAAM,OAAO,MAAM;AAAA,QACnB,IAAI,SAAS,MAAM;AAAA,UACjB,QAAQ,MAAM,QAAQ,MAAM;AAAA,UAC5B,SAAS;AAAA,UACT;AAAA,QACF;AAAA,QACA;AAAA,QACA,IAAI,SAAS;AAAA,UAAK;AAAA,QAClB,QAAQ;AAAA,MACV;AAAA,MACA,IAAI,KAAK,IAAI;AAAA,IACf,EAAO;AAAA,MACL,IAAI,OAAO;AAAA,MACX,OAAO,QAAQ,MAAM,UAAU,MAAM,WAAW,KAAK;AAAA,QACnD,QAAQ,MAAM;AAAA,QACd;AAAA,MACF;AAAA,MACA,IAAI,KAAK,SAAS,SAAS,OAAO,IAAI;AAAA;AAAA,IAExC,IAAI,MAAM,WAAW;AAAA,MAAK;AAAA,EAC5B;AAAA,EACA,OAAO;AAAA;AAcF,SAAS,yBAAyB,CAAC,QAA6D;AAAA,EACrG,MAAM,OAAO,OAAO,QAAQ,QAAQ,0BAA0B,EAAE;AAAA,EAChE,MAAM,SAAS,EAAE,OAAO,EAAE;AAAA,EAC1B,MAAM,SAAS,eAAe,EAAE,MAAM,OAAO,CAAC;AAAA,EAC9C,OAAO,WAAW,QAAQ,OAAO,UAAU,KAAK,SAAS,SAAS;AAAA;AAIpE,SAAS,cAAc,CAAC,QAAqF;AAAA,EAC3G,QAAQ,MAAM,WAAW;AAAA,EACzB,IAAI,KAAK,OAAO,WAAW;AAAA,IAAK,OAAO;AAAA,EACvC,OAAO;AAAA,EACP,MAAM,MAA+B,CAAC;AAAA,EACtC,IAAI,KAAK,OAAO,WAAW,KAAK;AAAA,IAC9B,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,OAAO,OAAO,QAAQ,KAAK,QAAQ;AAAA,IACjC,IAAI,KAAK,OAAO,WAAW,KAAK;AAAA,MAC9B,MAAM,SAAS,eAAe,EAAE,MAAM,OAAO,CAAC;AAAA,MAC9C,IAAI,WAAW;AAAA,QAAM,OAAO;AAAA,MAC5B,IAAI,KAAK,MAAM;AAAA,IACjB,EAAO,SAAI,KAAK,OAAO,WAAW,KAAK;AAAA,MACrC,IAAI,UAAU;AAAA,MACd,OAAO;AAAA,MACP,OAAO,OAAO,QAAQ,KAAK,UAAU,KAAK,OAAO,WAAW,KAAK;AAAA,QAC/D,IAAI,KAAK,OAAO,WAAW;AAAA,UAAM,OAAO;AAAA,QACxC,WAAW,KAAK,OAAO,UAAU;AAAA,QACjC,OAAO;AAAA,MACT;AAAA,MACA,IAAI,KAAK,OAAO,WAAW;AAAA,QAAK,OAAO;AAAA,MACvC,OAAO;AAAA,MACP,IAAI,KAAK,OAAO;AAAA,IAClB,EAAO;AAAA,MACL,IAAI,UAAU;AAAA,MACd,OAAO,OAAO,QAAQ,KAAK,UAAU,KAAK,OAAO,WAAW,OAAO,KAAK,OAAO,WAAW,KAAK;AAAA,QAC7F,WAAW,KAAK,OAAO;AAAA,QACvB,OAAO;AAAA,MACT;AAAA,MACA,IAAI,KAAK,YAAY,SAAS,OAAO,OAAO;AAAA;AAAA,IAE9C,IAAI,KAAK,OAAO,WAAW,KAAK;AAAA,MAC9B,OAAO;AAAA,MACP;AAAA,IACF;AAAA,IACA,IAAI,KAAK,OAAO,WAAW;AAAA,MAAK,OAAO;AAAA,IACvC,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;;;AC9FT;AAmBO,SAAS,mBAAmB,CAAC,QAKpB;AAAA,EACd,QAAQ,OAAO,OAAO,MAAM,aAAa;AAAA,EACzC,MAAM,UAA+B,IAAI,IAAI,OAAO,OAAO;AAAA,EAC3D,OAAO;AAAA,IACL,QAAQ,CAAC,UAAU;AAAA,MACjB,IAAI,OAAO,UAAU,YAAY,QAAQ,IAAI,KAAK;AAAA,QAAG,OAAO;AAAA,MAC5D,MAAM,IAAI,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,SAAS,0BAA0B,eAAe,SAAS;AAAA,QAC3D,MAAM,EAAE,OAAO,OAAO,MAAM,SAAS;AAAA,MACvC,CAAC;AAAA;AAAA,IAEH,QAAQ,CAAC,UAAU;AAAA,MACjB,IAAI,OAAO,UAAU,YAAY,QAAQ,IAAI,KAAK;AAAA,QAAG,OAAO;AAAA,MAC5D,MAAM,kBAAkB,EAAE,OAAO,OAAO,MAAM,UAAU,MAAM,CAAC;AAAA;AAAA,EAEnE;AAAA;AA4DK,SAAS,YAAY,CAAC,QAA6E;AAAA,EACxG,QAAQ,YAAY,SAAS;AAAA,EAC7B,IAAI,SAAS;AAAA,IAAW,OAAO;AAAA,EAC/B,IAAI,eAAe;AAAA,IAAY,OAAO;AAAA,EACtC,IAAI,eAAe;AAAA,IAAQ,OAAO,KAAK,SAAS;AAAA,EAChD,IAAI,eAAe,SAAS,eAAe;AAAA,IAAS,OAAO,KAAK,YAAY;AAAA,EAC5E,OAAO;AAAA;AAKT,IAAM,WAAW,CAAC,UAA4B;AAG9C,IAAM,mBAAgC,EAAE,QAAQ,UAAU,QAAQ,SAAS;AAG3E,IAAM,cAA2B;AAAA,EAC/B,QAAQ;AAAA,EACR,QAAQ,CAAC,UAAW,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI;AAClE;AAOA,IAAM,cAA2B;AAAA,EAC/B,QAAQ,CAAC,UAAW,OAAO,UAAU,WAAW,MAAM,SAAS,IAAI;AAAA,EACnE,QAAQ,CAAC,UAAU;AAAA,IACjB,IAAI,OAAO,UAAU;AAAA,MAAU,OAAO;AAAA,IACtC,IAAI,OAAO,UAAU,YAAY,aAAa,KAAK,MAAM,KAAK,CAAC;AAAA,MAAG,OAAO,OAAO,MAAM,KAAK,CAAC;AAAA,IAC5F,IAAI,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK;AAAA,MAAG,OAAO,OAAO,KAAK;AAAA,IACjF,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,SAAS,uDAAuD,MAAM,EAAE,MAAM,EAAE,CAAC;AAAA;AAEtI;AAaA,IAAM,eAA4B;AAAA,EAChC,QAAQ,CAAC,UAAW,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI;AAAA,EAC7F,QAAQ;AACV;AAWA,IAAM,oBAAiC;AAAA,EACrC,QAAQ,aAAa;AAAA,EACrB,QAAQ,CAAC,UAAU;AAAA,IACjB,IAAI,OAAO,UAAU,YAAY,CAAC,MAAM,SAAS,GAAG;AAAA,MAAG,OAAO;AAAA,IAC9D,MAAM,UAAU,MAAM,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,EAAE;AAAA,IAC1D,OAAO,YAAY,MAAM,YAAY,MAAM,MAAM;AAAA;AAErD;AASA,IAAM,qBAAqB;AAS3B,IAAM,oBAAoB;AAgBnB,SAAS,iBAAiB,CAAC,QAA4C;AAAA,EAC5E,MAAM,UAAU,OAAO,KAAK,KAAK;AAAA,EACjC,IAAI,mBAAmB,KAAK,OAAO,GAAG;AAAA,IACpC,MAAM,QAAQ,IAAI,KAAK,GAAG,QAAQ,QAAQ,KAAK,GAAG,EAAE,QAAQ,iBAAiB,IAAI,IAAI;AAAA,IACrF,IAAI,CAAC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAAA,MAAG,OAAO,0BAA0B,EAAE,MAAM,OAAO,MAAM,QAAQ,CAAC;AAAA,EACrG;AAAA,EACA,MAAM,QAAQ,kBAAkB,KAAK,OAAO;AAAA,EAC5C,IAAI,UAAU,MAAM;AAAA,IAClB,SAAS,MAAM,MAAM,UAAU,OAAO,WAAW;AAAA,IACjD,MAAM,MAAM,IAAI,KAAK,GAAG,QAAQ,QAAQ,YAAY,IAAI,MAAM,GAAG,CAAC,IAAI,SAAS,WAAW,MAAM;AAAA,IAChG,IAAI,CAAC,OAAO,MAAM,IAAI,QAAQ,CAAC;AAAA,MAAG,OAAO,0BAA0B,EAAE,MAAM,KAAK,MAAM,QAAQ,CAAC;AAAA,EACjG;AAAA,EACA,MAAM,SAAS,IAAI,KAAK,OAAO;AAAA,EAC/B,OAAO,OAAO,MAAM,OAAO,QAAQ,CAAC,IAAI,YAAY,0BAA0B,EAAE,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA;AAQ/G,IAAM,kBAA+B;AAAA,EACnC,QAAQ,CAAC,UAAU;AAAA,IACjB,IAAK,iBAAiB,QAAQ,CAAC,OAAO,SAAS,MAAM,QAAQ,CAAC,KAAO,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,KAAO,OAAO,UAAU,YAAY,mBAAmB,KAAK,MAAM,KAAK,CAAC,GAAI;AAAA,MAClM,MAAM,IAAI,UAAU,EAAE,MAAM,mBAAmB,SAAS,gGAAgG,CAAC;AAAA,IAC3J;AAAA,IACA,OAAO,iBAAiB,OAAO,sBAAsB,EAAE,MAAM,MAAM,CAAC,KAAK,QAAQ;AAAA;AAAA,EAEnF,QAAQ,CAAC,UAAU;AAAA,IACjB,MAAM,OAAO,iBAAiB,OAAO,QACjC,OAAO,UAAU,WAAW,kBAAkB,EAAE,MAAM,MAAM,CAAC,IAC7D,OAAO,UAAU,WAAW,IAAI,KAAK,KAAK,IAAI;AAAA,IAClD,IAAI,SAAS,aAAa,OAAO,SAAS,KAAK,QAAQ,CAAC;AAAA,MAAG,OAAO;AAAA,IAClE,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,SAAS,gGAAgG,CAAC;AAAA;AAE/J;AAGA,IAAM,gBAA6B;AAAA,EACjC,QAAQ,CAAC,UAAU;AAAA,IACjB,gBAAgB,OAAO,KAAK;AAAA,IAC5B,MAAM,OAAO,iBAAiB,OAAO,QACjC,OAAO,UAAU,WAAW,kBAAkB,EAAE,MAAM,MAAM,CAAC,IAC7D,OAAO,UAAU,WAAW,IAAI,KAAK,KAAK,IAAI;AAAA,IAClD,IAAI,SAAS,aAAa,OAAO,SAAS,KAAK,QAAQ,CAAC;AAAA,MAAG,OAAO,iBAAiB,OAAO,6BAA6B,EAAE,MAAM,MAAM,CAAC,KAAK,KAAK,YAAY,IAAI,KAAK,YAAY;AAAA,IACjL,MAAM,IAAI,UAAU,EAAE,MAAM,mBAAmB,SAAS,uDAAuD,CAAC;AAAA;AAAA,EAElH,QAAQ,CAAC,UAAU;AAAA,IACjB,MAAM,OAAO,gBAAgB,OAAO,KAAK;AAAA,IACzC,IAAI,OAAO,UAAU;AAAA,MAAU,OAAO,0BAA0B,EAAE,MAAM,MAAM,KAAK,YAAY,GAAG,SAAS,OAAO,KAAK,SAAS,SAAS,MAAM,SAAS,CAAC;AAAA,IACzJ,OAAO,OAAO,UAAU,WAAW,0BAA0B,EAAE,MAAM,MAAM,OAAO,KAAK,QAAQ,SAAS,MAAM,SAAS,CAAC,IAAI;AAAA;AAEhI;AAcA,IAAM,iBAA8B;AAAA,EAClC,QAAQ,CAAC,UAAU;AAAA,IACjB,gBAAgB,OAAO,KAAK;AAAA,IAC5B,IAAI,iBAAiB,MAAM;AAAA,MACzB,MAAM,OAAO,sBAAsB,EAAE,MAAM,OAAO,MAAM,YAAY,CAAC;AAAA,MACrE,IAAI,SAAS,WAAW;AAAA,QAEtB,MAAM,WAAW,UAAU,KAAK,IAAI,IAAI,MAAM;AAAA,QAC9C,OAAO,MAAM,YAAY,EAAE,QAAQ,KAAK,GAAG,EAAE,QAAQ,aAAa,IAAI,SAAS,OAAO,GAAG,GAAG,GAAG;AAAA,MACjG;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,IAAI,OAAO,UAAU,UAAU;AAAA,MAC7B,MAAM,SAAS,IAAI,KAAK,KAAK;AAAA,MAC7B,IAAI,CAAC,OAAO,MAAM,OAAO,QAAQ,CAAC;AAAA,QAAG,OAAO;AAAA,MAC5C,OAAO;AAAA,IACT;AAAA,IACA,IAAI,OAAO,UAAU;AAAA,MAAU,OAAO,kBAAkB,EAAE,MAAM,MAAM,CAAC,KAAK;AAAA,IAC5E,OAAO;AAAA;AAAA,EAET,QAAQ,gBAAgB;AAC1B;AAIA,IAAM,uBAAuB;AAQ7B,IAAM,mBAAmB;AAEzB,IAAM,MAAM,CAAC,OAAe,UAA0B,OAAO,KAAK,EAAE,SAAS,OAAO,GAAG;AAGvF,IAAM,sBAAsB,CAAC,UACzB,KAAK,QAAQ,IAAI,uBAAwB,wBAAwB;AAGrE,IAAM,gBAAgB,CAAC,gBACrB,GAAG,IAAI,KAAK,MAAM,cAAc,OAAS,GAAG,CAAC,KAAK,IAAI,KAAK,MAAM,cAAc,KAAM,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,MAAM,cAAc,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,cAAc,MAAM,CAAC;AAsB7K,SAAS,kBAAkB,CAAC,QAAyC;AAAA,EACnE,MAAM,SAAS,OAAO,QAAQ,QAAQ;AAAA,EACtC,OAAO,OAAO,OAAO;AAAA,IACnB,QAAQ,CAAC,UAA4B;AAAA,MACnC,gBAAgB,OAAO,KAAK;AAAA,MAC5B,MAAM,OAAO,iBAAiB,OAAO,QACjC,OAAO,UAAU,WAAW,kBAAkB,EAAE,MAAM,MAAM,CAAC,IAC7D,OAAO,UAAU,WAAW,IAAI,KAAK,KAAK,IAAI;AAAA,MAClD,IAAI,SAAS,aAAa,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC,GAAG;AAAA,QAC1D,MAAM,IAAI,UAAU,EAAE,MAAM,mBAAmB,SAAS,iEAAiE,MAAM,EAAE,MAAM,EAAE,CAAC;AAAA,MAC5I;AAAA,MACA,OAAO,sBAAsB,EAAE,MAAM,MAAM,OAAO,QAAQ,WAAW,OAAO,CAAC,KAAK,GAAG,cAAc,oBAAoB,IAAI,CAAC,IAAI;AAAA;AAAA,IAElI,QAAQ,CAAC,UAA4B;AAAA,MACnC,IAAI,iBAAiB,QAAQ,OAAO,SAAS,MAAM,QAAQ,CAAC,GAAG;AAAA,QAC7D,IAAI,sBAAsB,EAAE,MAAM,OAAO,MAAM,OAAO,QAAQ,WAAW,OAAO,CAAC,MAAM;AAAA,UAAW,OAAO;AAAA,QACzG,MAAM,eAAe,oBAAoB,KAAK;AAAA,QAC9C,MAAM,OAAO,cAAc,YAAY;AAAA,QACvC,OAAO,0BAA0B,EAAE,MAAM,IAAI,KAAK,YAAY,GAAG,MAAM,GAAG,OAAO,UAAU,KAAK,GAAG,OAAO,QAAQ,WAAW,UAAU,UAAU,MAAM,OAAO,QAAQ,WAAW,OAAO,CAAC;AAAA,MAC3L;AAAA,MACA,MAAM,QAAQ,OAAO,UAAU,WAAW,iBAAiB,KAAK,MAAM,KAAK,CAAC,IAAI;AAAA,MAChF,IAAI,UAAU,MAAM;AAAA,QAClB,SAAS,OAAO,SAAS,SAAS,UAAU,MAAM,aAAa,eAAe,iBAAiB;AAAA,QAC/F,MAAM,cAAc,OAAO,KAAK,IAAI,UAAY,OAAO,OAAO,IAAI,QAAS,OAAO,WAAW,CAAC,IAAI,OAC9F,QAAQ,YAAY,IAAI,MAAM,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC;AAAA,QACtD,MAAM,SAAS,SAAS,YAAY,KAC/B,SAAS,MAAM,KAAK,MAAM,OAAO,WAAW,IAAI,UAAY,OAAO,iBAAiB,CAAC,IAAI,QAAS,OAAO,iBAAiB,CAAC,IAAI;AAAA,QACpI,IAAI,eAAe,sBAAsB;AAAA,UACvC,MAAM,OAAO,IAAI,OAAQ,cAAc,UAAU,uBAAwB,wBAAwB,oBAAoB;AAAA,UACrH,MAAM,iBAAiB,YAAY,IAAI,OAAO,GAAG,GAAG,EAAE,QAAQ,iBAAiB,EAAE;AAAA,UAIjF,MAAM,MAAM,GAAG,OAAO,QAAQ,WAAW,UAAU,SAAS,WAAW,WAAW,QAAQ,iBAAiB;AAAA,UAC3G,OAAO,0BAA0B,EAAE,MAAM,MAAO,MAAiB,KAAK,GAAG,KAAK,MAAM,OAAO,QAAQ,WAAW,OAAO,CAAC;AAAA,QACxH;AAAA,MACF;AAAA,MACA,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,SAAS,4EAA4E,MAAM,EAAE,MAAM,EAAE,CAAC;AAAA;AAAA,EAE3J,CAAC;AAAA;AAGH,IAAM,YAAyB,mBAAmB,EAAE,OAAO,MAAM,CAAC;AAClE,IAAM,cAA2B,mBAAmB,EAAE,OAAO,KAAK,CAAC;AAQ5D,SAAS,cAAc,CAAC,QAAqE;AAAA,EAClG,MAAM,OAAO,cAAc,EAAE,YAAY,OAAO,WAAW,CAAC;AAAA,EAC5D,OAAO,SAAS,WAAW,cAAc,SAAS,SAAS,YAAY;AAAA;AAIzE,IAAM,kBAA+B;AAAA,EACnC,QAAQ,CAAC,UAAW,OAAO,UAAU,YAAa,QAAQ,IAAI,IAAK;AAAA,EACnE,QAAQ,CAAC,UAAW,OAAO,UAAU,WAAW,UAAU,IAAI;AAChE;AAMA,IAAM,uBAAoC;AAAA,EACxC,QAAQ;AAAA,EACR,QAAQ,CAAC,UAAU,UAAU,MAAM,QAAQ,UAAU,MAAM,OAAO,gBAAgB,OAAO,KAAK;AAChG;AAOO,SAAS,aAAa,CAAC,QAGlB;AAAA,EACV,QAAQ,MAAM,YAAY;AAAA,EAC1B,IAAI;AAAA,IACF,OAAO,KAAK,MAAM,IAAI;AAAA,IACtB,OAAO,OAAO;AAAA,IACd,IAAI,YAAY,WAAW;AAAA,MACzB,MAAM,IAAI,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM,KAAK,QAAQ;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,IACA,MAAM,IAAI,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM,EAAE,OAAO,KAAK;AAAA,MACpB;AAAA,IACF,CAAC;AAAA;AAAA;AAYL,IAAM,YAAyB;AAAA,EAC7B,QAAQ,CAAC,UAAU,KAAK,UAAU,KAAK;AAAA,EACvC,QAAQ,CAAC,UAAU;AAAA,IACjB,IAAI,OAAO,UAAU;AAAA,MAAU,OAAO;AAAA,IACtC,OAAO,cAAc,EAAE,MAAM,MAAM,CAAC;AAAA;AAExC;AAgBO,SAAS,eAAe,CAAC,QAAmC;AAAA,EACjE,QAAQ,UAAU;AAAA,EAClB,IAAI,UAAU,KAAK,CAAC,OAAO,SAAS,KAAK;AAAA,IAAG,OAAO;AAAA,EACnD,MAAM,SAAS,KAAK,OAAO,KAAK;AAAA,EAChC,SAAS,YAAY,EAAG,aAAa,GAAG,aAAa;AAAA,IACnD,MAAM,YAAY,OAAO,MAAM,YAAY,SAAS,CAAC;AAAA,IACrD,IAAI,KAAK,OAAO,SAAS,MAAM;AAAA,MAAQ,OAAO;AAAA,EAChD;AAAA,EACA,OAAO;AAAA;AAUF,IAAM,eAA4B;AAAA,EACvC,QAAQ;AAAA,EACR,QAAQ,CAAC,UAAU;AAAA,IACjB,MAAM,SAAS,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI;AAAA,IAC3D,OAAO,OAAO,WAAW,WAAW,gBAAgB,EAAE,OAAO,OAAO,CAAC,IAAI;AAAA;AAE7E;AAIA,IAAM,kBAAkB,CAAC,SAA2B,SAAS,MAAM,OAAO,SAAS,MAAM,QAAQ;AAGjG,IAAM,gBAAgB,CAAC,SACrB,2BAA2B,KAAK,IAAI,IAAI,IAAI,WAAW,OAAO,KAAK,KAAK,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI;AAevF,SAAS,4BAA4B,CAAC,QAAwE;AAAA,EACnH,QAAQ,OAAO;AAAA,SACR;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO,UAAU;AAAA;AAAA,MAEjB,OAAO;AAAA;AAAA;AAON,IAAM,kBAA8B;AAAA,EACzC,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AACT;AAGO,IAAM,gBAA4B;AAAA,EACvC,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AACT;AAGO,IAAM,eAA2B;AAAA,EACtC,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AACT;AAGO,IAAM,iBAAwD;AAAA,EACnE,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AACT;;;AFxjBA,IAAM,kBAAkB,IAAI;AAC5B,IAAM,oBAAoB,IAAI;AAC9B,IAAM,mBAAmB,IAAI;AAC7B,IAAM,gBAAgB,IAAI;AAGnB,SAAS,iBAAiB,CAAC,QAA0F;AAAA,EAC1H,IAAI,OAAO,SAAS,OAAO;AAAA,IAAO,OAAO;AAAA,EACzC,MAAM,WAAW,kBAAkB,IAAI,OAAO,IAAI;AAAA,EAClD,OAAO,aAAa,aAAa,aAAa,kBAAkB,IAAI,OAAO,KAAK;AAAA;AAGlF,SAAS,eAAe,CAAC,QAAiG;AAAA,EACxH,MAAM,WAAW,kBAAkB,IAAI,OAAO,OAAO;AAAA,EACrD,OAAO,aAAa,YAAY,YAAY,KAAK,UAAU,CAAC,OAAO,MAAM,QAAQ,CAAC;AAAA;AAI7E,SAAS,oBAAoB,CAAC,QAAmF;AAAA,EACtH,OAAO,gBAAgB,IAAI,OAAO,OAAO;AAAA;AAG3C,SAAS,cAAiB,CAAC,QAAwH;AAAA,EACjJ,IAAI,OAAO,aAAa;AAAA,IAAW,gBAAgB,IAAI,OAAO,SAAS,OAAO,OAAO,OAAO,QAAQ,CAAC;AAAA,EACrG,IAAI,OAAO,aAAa;AAAA,IAAW,kBAAkB,IAAI,OAAO,SAAS,OAAO,QAAQ;AAAA,EACxF,OAAO,OAAO;AAAA;AAGhB,SAAS,eAAe,CAAC,QAAmH;AAAA,EAC1I,MAAM,WAAW,gBAAgB,IAAI,OAAO,OAAO;AAAA,EACnD,IAAI,aAAa,aAAc,OAAO,SAAS,QAAQ,SAAS;AAAA,IAAO;AAAA,EACvE,OAAO,KAAK,aAAc,OAAO,SAAS,OAAO,EAAE,MAAM,MAAM,UAAU,MAAM,IAAI,CAAC,MAAQ,OAAO,aAAa,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC,EAAG;AAAA;AAUlJ,SAAS,MAAM,CAAC,UAAmB,SAAwB;AAAA,EACzD,MAAM,IAAI,WAAU,EAAE,MAAM,WAAW,oBAAoB,qBAAqB,QAAQ,CAAC;AAAA;AAG3F,SAAS,MAAS,CAAC,MAAkB,OAAsD;AAAA,EACzF,MAAM,UAAU,CAAC,QAAmE,aAAyB;AAAA,IAC3G,QAAQ,OAAO,YAAY;AAAA,IAC3B,IAAI,UAAU,QAAQ,UAAU;AAAA,MAAW,OAAO,UAAU,cAAc,mDAAmD;AAAA,IAC7H,IAAI,SAAS,YAAY,EAAG,OAAO,UAAU,YAAc,OAAO,UAAU,YAAY,aAAa,KAAK,KAAK,KAAO,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,IAAK;AAAA,MAChL,OAAO,UAAU,+DAA+D;AAAA,IAClF;AAAA,IACA,IAAI,SAAS,aAAa,UAAU,QAAQ,UAAU,SAAS,UAAU,KAAK,UAAU,KAAK,EAAE,CAAC,YAAY,YAAY,YAAY,UAAU,OAAO,UAAU;AAAA,MAAO,OAAO,UAAU,uCAAuC;AAAA,IAC9N,IAAI,SAAS,aAAa,OAAO,UAAU;AAAA,MAAU,OAAO,UAAU,kEAAkE;AAAA,IACxI,KAAK,SAAS,SAAS,SAAS,YAAY,OAAO,UAAU,YAAY,CAAC,kDAAkD,KAAK,KAAK,GAAG;AAAA,MACvI,OAAO,UAAU,WAAW,WAAW;AAAA,IACzC;AAAA,IACA,MAAM,QAAQ,eAAe,SAAS;AAAA,IACtC,MAAM,SAAS,SAAS,UAAU,OAAO,MAAM,SAAS,WAAW,QAAQ,MAAM,OAAO,KAAK;AAAA,IAC7F,IAAI,CAAC,MAAM,MAAM;AAAA,MAAG,OAAO,UAAU,WAAW,uBAAuB;AAAA,IACvE,OAAO;AAAA;AAAA,EAET,OAAO,eAAe,EAAE,UAAU,KAAK,UAAU,CAAC,UAAU,IAAI,CAAC,GAAG,UAAU,EAAE,QAAQ,MAAM,UAAU,OAAO,MAAM,MAAM,GAAG,SAAS,OAAO,OAAO;AAAA,IACnJ,QAAQ,CAAC,WAA4B,QAAQ,QAAQ,KAAK;AAAA,IAC1D,QAAQ,CAAC,WAAkC;AAAA,MAEzC,MAAM,QAAQ,SAAS,SAAS,OAAO,QAAQ,QAAQ,QAAQ,IAAI;AAAA,MACnE,IAAI,UAAU,aAAa,UAAU;AAAA,QAAM,OAAO,MAAM,cAAc,4CAA4C;AAAA,MAClH,OAAO,eAAe,OAAO,SAAS,MAAM,OAAO,KAAK;AAAA;AAAA,EAE5D,CAAC,EAAE,CAAC;AAAA;AAGN,IAAM,gBAAuC,OAAO,UAAU,CAAC,UAAU,OAAO,UAAU,QAAQ;AAClG,IAAM,cAAmC,OAAO,YAAY,CAAC,UAAU,iBAAiB,QAAQ,OAAO,SAAS,MAAM,QAAQ,CAAC,CAAC;AAChI,IAAM,kBAAmD,eAAe,EAAE,UAAU,sBAAsB,UAAU,EAAE,QAAQ,YAAY,UAAU,OAAO,MAAM,MAAM,GAAG,SAAS,OAAO,OAAO;AAAA,EAC/L,QAAQ,CAAC,WAA2C;AAAA,IAClD,IAAI,OAAO,UAAU,cAAc,OAAO,UAAU;AAAA,MAAU,OAAO;AAAA,IACrE,IAAI,OAAO,UAAU,eAAe,OAAO,UAAU;AAAA,MAAW,OAAO;AAAA,IACvE,OAAO,YAAY,OAAO,MAAM;AAAA;AAAA,EAElC,QAAQ,CAAC,WAAkC;AAAA,IACzC,IAAI,OAAO,UAAU,cAAc,OAAO,UAAU,aAAa;AAAA,MAC/D,IAAI,OAAO,YAAY;AAAA,QAAY,MAAM,IAAI,WAAU,EAAE,MAAM,+BAA+B,SAAS,mDAAmD,CAAC;AAAA,MAC3J,OAAO,OAAO;AAAA,IAChB;AAAA,IACA,OAAO,YAAY,OAAO,MAAM;AAAA;AAEpC,CAAC,EAAE,CAAC;AAEJ,SAAS,UAAa,CAAC,SAA4D;AAAA,EACjF,OAAO,YAAY,WAAW,OAAO,QAAQ,WAAW;AAAA;AAK1D,SAAS,QAAW,GAAG,WAA2E;AAAA,EAChG,MAAM,SAAS,iBAAiB,IAAI,OAAO;AAAA,EAC3C,IAAI,WAAW;AAAA,IAAW,OAAO;AAAA,EACjC,MAAM,OAAO,CAAC,WAAmC,OAAO,UAAU,OAAO,OAAO,QAAQ,OAAO,MAAM;AAAA,EACrG,MAAM,UAAuC,WAAW,OAAO,IAC3D,eAAe,EAAE,UAAU,gBAAgB,EAAE,SAAS,MAAM,WAAW,CAAC,GAAG,UAAU,gBAAgB,EAAE,SAAS,UAAU,KAAK,CAAC,GAAG,SAAS,OAAO,OAAO;AAAA,IAC1J,QAAQ;AAAA,IACR,QAAQ,CAAC,WAAkC,OAAO,UAAU,OAAO,OAAO,QAAQ,OAAO,MAAM;AAAA,EACjG,CAAC,EAAE,CAAC,IACF,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAAA,EAClC,iBAAiB,IAAI,SAAS,OAAO;AAAA,EACrC,OAAO;AAAA;AAKT,SAAS,KAAQ,GAAG,WAAsE;AAAA,EACxF,MAAM,SAAS,cAAc,IAAI,OAAO;AAAA,EACxC,IAAI,WAAW;AAAA,IAAW,OAAO;AAAA,EACjC,MAAM,gBAAgB,WAAW,OAAO;AAAA,EACxC,MAAM,OAAO,CAAC,WAA8B;AAAA,IAC1C,MAAM,MAAM,OAAO;AAAA,IACnB,IAAI;AAAA,IACJ,IAAI,OAAO,YAAY,cAAc,OAAO,QAAQ,UAAU;AAAA,MAC5D,IAAI;AAAA,QAAe,QAAQ,oBAAoB,EAAE,SAAS,IAAI,CAAC;AAAA,MAC1D;AAAA,QACH,MAAM,WAAW,0BAA0B,EAAE,SAAS,IAAI,CAAC;AAAA,QAC3D,IAAI,aAAa,QAAQ,SAAS,KAAK,CAAC,YAAY,MAAM,QAAQ,OAAO,CAAC;AAAA,UAAG,OAAO,OAAO,kEAAkE;AAAA,QAC7J,QAAQ;AAAA;AAAA,IAEZ,EAAO;AAAA,cAAQ,YAAY,OAAO,GAAG,KAAK,YAAY,MAAM,MAAM,KAAK,GAAoC,IAAI;AAAA,IAC/G,IAAI,CAAC,MAAM,QAAQ,KAAK;AAAA,MAAG,OAAO,OAAO,8BAA8B;AAAA,IACvE,OAAO,MAAM,IAAI,CAAC,YAAY,QAAQ,OAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC,CAAC;AAAA;AAAA,EAE7E,MAAM,UAAkC,WAAW,OAAO,IACtD,eAAe,EAAE,UAAU,gBAAgB,EAAE,SAAS,MAAM,QAAQ,CAAC,GAAG,UAAU,gBAAgB,EAAE,SAAS,MAAM,KAAK,CAAC,GAAG,SAAS,OAAO,OAAO;AAAA,IACnJ,QAAQ;AAAA,IACR,QAAQ,CAAC,WAAkC;AAAA,MACzC,IAAI,CAAC,MAAM,QAAQ,OAAO,KAAK;AAAA,QAAG,OAAO,MAAM,6BAA6B;AAAA,MAC5E,OAAO,OAAO,MAAM,IAAI,CAAC,UAAU,QAAQ,OAAO,KAAK,QAAQ,MAAM,CAAC,CAAC;AAAA;AAAA,EAE3E,CAAC,EAAE,CAAC,IACF,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAAA,EAClC,cAAc,IAAI,SAAS,OAAO;AAAA,EAClC,OAAO;AAAA;AAIF,IAAM,SAET,OAAO,OAAO;AAAA,EAChB,OAAO,GAAG,cAA2E,OAAO,OAAO;AAAA,IACjG,QAAQ,CAAC,WAAqE;AAAA,MAC5E,IAAI,CAAC,MAAM,QAAQ,OAAO,KAAK;AAAA,QAAG,OAAO,MAAM,6BAA6B;AAAA,MAC5E,OAAO,MAAM,KAAK,OAAO,OAAO,CAAC,UAAU,QAAQ,OAAO,KAAK,QAAQ,MAAM,CAAC,CAAC;AAAA;AAAA,EAEnF,CAAC;AACH,CAAC;AAGM,IAAM,SAqBT,OAAO,OAAO;AAAA,EAChB,QAAQ;AAAA,EACR,SAAS,OAAgB,WAAW,CAAC,UAAU,OAAO,UAAU,SAAS;AAAA,EACzE,KAAK,OAAe,OAAO,CAAC,UAAU,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,CAAC;AAAA,EAC9F,OAAO,OAAe,SAAS,CAAC,UAAU,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,CAAC;AAAA,EAC7F,QAAQ,OAAe,UAAU,CAAC,UAAU,OAAO,UAAU,QAAQ;AAAA,EACrE,SAAS,OAAe,WAAW,CAAC,UAAU,OAAO,UAAU,YAAY,kDAAkD,KAAK,KAAK,CAAC;AAAA,EACxI,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,MAAM,OAAgB,QAAQ,CAAC,UAAU,UAAU,SAAS;AAAA,EAC5D,OAAO,OAAmB,SAAS,CAAC,UAAU,iBAAiB,UAAU;AAAA,EACzE;AAAA,EACA;AAAA,EACA,MAAM,GAAqB,aAAyD;AAAA,IAClF,MAAM,UAAU,IAAI,IAAY,MAAM;AAAA,IACtC,OAAO,eAAe,EAAE,UAAU,KAAK,UAAU,CAAC,QAAQ,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC,GAAG,UAAU,EAAE,QAAQ,UAAU,UAAU,OAAO,MAAM,MAAM,GAAG,SAAS,OAAO,OAAO;AAAA,MACpK,QAAQ,GAAG,YAA6B,OAAO,UAAU,YAAY,QAAQ,IAAI,KAAK,IAAI,QAAa,OAAO,OAAO,gCAAgC;AAAA,MACrJ,QAAQ,GAAG,YAAmC,OAAO,UAAU,YAAY,QAAQ,IAAI,KAAK,IAAI,QAAQ,OAAO,MAAM,+BAA+B;AAAA,IACtJ,CAAC,EAAE,CAAC;AAAA;AAAA,EAEN,QAAQ,GAAqB,aAAqD;AAAA,IAChF,MAAM,UAAU,OAAO,QAAQ,MAAM;AAAA,IACrC,MAAM,UAAU,CAAC,QAAmE,aAAgC;AAAA,MAClH,IAAI,OAAO,OAAO,UAAU,YAAY,OAAO,UAAU,QAAQ,MAAM,QAAQ,OAAO,KAAK;AAAA,QAAG,OAAO,UAAU,8BAA8B;AAAA,MAC7I,MAAM,MAAM,OAAO;AAAA,MACnB,OAAO,OAAO,YAAY,QAAQ,IAAI,EAAE,MAAM,aAAa;AAAA,QACzD,IAAI,CAAC,OAAO,OAAO,KAAK,IAAI;AAAA,UAAG,OAAO,UAAU,8BAA8B,OAAO;AAAA,QACrF,OAAO,CAAC,MAAM,WAAW,QAAQ,OAAO,KAAK,QAAQ,OAAO,IAAI,MAAM,CAAC,IAAI,QAAQ,OAAO,KAAK,QAAQ,OAAO,IAAI,MAAM,CAAC,CAAC;AAAA,OAC3H,CAAC;AAAA;AAAA,IAEJ,OAAO,OAAO,OAAO,EAAE,QAAQ,CAAC,WAAmC,QAAQ,QAAQ,KAAK,GAAG,QAAQ,CAAC,WAAkC,QAAQ,QAAQ,IAAI,EAAE,CAAC;AAAA;AAEjK,CAAC;;;AGxOD,IAAM,SAAS,IAAI;AAGZ,SAAS,sBAAsB,CAAC,QAAqD;AAAA,EAC1F,OAAO,IAAI,OAAO,KAAK;AAAA;AAIlB,SAAS,WAAW,CAAC,OAAwB;AAAA,EAClD,WAAW,SAAS;AAAA,IAAQ,IAAI,MAAM,KAAK;AAAA,MAAG,OAAO;AAAA,EACrD,OAAO;AAAA;;;AJ4BT,IAAM,SAAS,IAAI;AACnB,IAAM,SAAS,IAAI;AACnB,IAAM,SAAS,IAAI;AACnB,uBAAuB,EAAE,OAAO,CAAC,UAAU,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,EAAE,CAAC;AAExG,SAAS,OAAO,CAAC,SAAwB;AAAA,EACvC,MAAM,IAAI,WAAU,EAAE,MAAM,mBAAmB,QAAQ,CAAC;AAAA;AAInD,SAAS,UAAU,CAAC,OAA4C;AAAA,EACrE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,OAAO,IAAI,KAAK;AAAA;AAIjE,SAAS,UAAU,CAAC,OAA4C;AAAA,EACrE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,OAAO,IAAI,KAAK;AAAA;AAIjE,SAAS,cAAiB,CAAC,QAAqD;AAAA,EACrF,IAAI,OAAO,OAAO,SAAS,SAAS,WAAW;AAAA,IAAY,QAAQ,iDAAiD;AAAA,EACpH,MAAM,QAAQ,OAAO,OAAO,OAAO,OAAO,IAAI,CAAC;AAAA,EAC/C,OAAO,IAAI,OAAO,OAAO,OAAO;AAAA,OAAK,OAAO;AAAA,OACtC,OAAO,SAAS,eAAe,YAAY,CAAC,IAAI,EAAE,YAAY,OAAO,OAAO,CAAC,GAAG,OAAO,SAAS,UAAU,CAAC,EAAE;AAAA,OAC7G,OAAO,SAAS,aAAa,YAAY,CAAC,IAAI,EAAE,UAAU,OAAO,OAAO,KAAK,OAAO,SAAS,SAAS,CAAC,EAAE;AAAA,EAC/G,CAAC,CAAC;AAAA,EACF,OAAO;AAAA;AAIF,SAAS,gBAAgB,CAAC,QAAiF;AAAA,EAChH,MAAM,QAAQ,OAAO;AAAA,EACrB,IAAI,OAAO,UAAU,YAAY,UAAU;AAAA,IAAM,QAAQ,iEAAiE;AAAA,EAC1H,MAAM,WAAW,OAAO,IAAI,KAAK;AAAA,EACjC,IAAI,aAAa;AAAA,IAAW,OAAO;AAAA,EACnC,IAAI,EAAE,YAAY,UAAU,EAAE,YAAY,UAAU,OAAO,MAAM,WAAW,cAAc,OAAO,MAAM,WAAW;AAAA,IAAY,QAAQ,qEAAqE;AAAA,EAC3M,MAAM,UAAU;AAAA,EAChB,MAAM,WAAW,qBAAqB,EAAE,QAAQ,CAAC;AAAA,EACjD,OAAO,OAAO,OAAO,EAAE,SAAS,SAAS,QAAQ,UAAU,UAAU,WAAW,UAAU,UAAU,YAAY,MAAM,MAAM,UAAU,QAAQ,MAAM,CAAC;AAAA;AAOhJ,SAAS,mBAA0C,CAAC,QAAoI;AAAA,EAC7L,IAAI,OAAO,OAAO,aAAa;AAAA,IAAY,QAAQ,qDAAqD;AAAA,EACxG,MAAM,eAAwB,OAAO;AAAA,EACrC,IAAI,OAAO,iBAAiB,YAAY,iBAAiB,QAAQ,MAAM,QAAQ,YAAY;AAAA,IAAG,QAAQ,mDAAmD;AAAA,EACzJ,MAAM,YAAqB,OAAO,eAAe,YAAY;AAAA,EAC7D,IAAI,cAAc,OAAO,aAAa,cAAc;AAAA,IAAM,QAAQ,+CAA+C;AAAA,EACjH,MAAM,OAAO,QAAQ,QAAQ,YAAY;AAAA,EACzC,MAAM,UAAwC,KAAK,IAAI,CAAC,QAAoC;AAAA,IAC1F,IAAI,OAAO,QAAQ,YAAY,IAAI,WAAW,KAAK,IAAI,SAAS,MAAI;AAAA,MAAG,QAAQ,sDAAsD;AAAA,IACrI,MAAM,aAAa,OAAO,yBAAyB,cAAc,GAAG;AAAA,IACpE,IAAI,EAAE,WAAW;AAAA,MAAa,QAAQ,iDAAiD;AAAA,IACvF,OAAO,CAAC,KAAK,iBAAiB,EAAE,OAAO,WAAW,MAAoD,CAAC,CAAC;AAAA,GACzG;AAAA,EACD,MAAM,QAAQ,OAAO,OAAO,OAAO,OAAO,IAAI,CAAC;AAAA,EAC/C,OAAO,IAAI,OAAO,EAAE,MAAM,MAAM,MAAM,OAAO,OAAO,QAAQ,IAAI,EAAE,SAAS,GAAG,CAAC,GAAG,UAAU,OAAO,SAAS,CAAC;AAAA,EAC7G,MAAM,SAA4C,OAAO,OAAO,IAAI;AAAA,EACpE,YAAY,KAAK,aAAa,SAAS;AAAA,IACrC,MAAM,QAAQ,OAAO,OAAO,OAAO,OAAO,IAAI,CAAC;AAAA,IAC/C,OAAO,IAAI,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC;AAAA,IAC1C,OAAO,OAAO;AAAA,EAChB;AAAA,EACA,OAAO,EAAE,OAAO,QAAQ,OAAO,OAAO,MAAM,EAAuB;AAAA;AAI9D,SAAS,iBAAiB,CAAC,QAAwC;AAAA,EACxE,MAAM,QAAQ,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,uCAAuC;AAAA,EACzF,MAAM,OAAO;AAAA;AAIR,SAAS,sBAAsB,CAAC,QAA4C;AAAA,EACjF,MAAM,QAAQ,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,uCAAuC;AAAA,EACzF,IAAI,OAAO,IAAI,MAAM,KAAK,GAAG,SAAS;AAAA,IAAM,QAAQ,8DAA8D;AAAA;AAI7G,SAAS,gBAAgB,CAAC,QAAwD;AAAA,EACvF,QAAQ,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,uCAAuC,GAAG;AAAA;AAIjF,SAAS,WAAW,CAAC,QAAoE;AAAA,EAC9F,MAAM,QAAQ,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,uCAAuC;AAAA,EACzF,IAAI,MAAM,UAAU,OAAO;AAAA,IAAO,QAAQ,gEAAgE;AAAA,EAC1G,OAAO,MAAM;AAAA;AAIR,SAAS,mBAAmB,CAAC,QAA0D;AAAA,EAC5F,MAAM,QAAQ,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,uCAAuC;AAAA,EACzF,OAAO,MAAM,SAAS,OAAO,KAAK;AAAA;AAI7B,SAAS,iBAAiB,CAAC,QAAqD;AAAA,EACrF,MAAM,QAAQ,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,uCAAuC;AAAA,EACzF,IAAI,MAAM;AAAA,IAAM,QAAQ,qDAAqD;AAAA,EAC7E,OAAO,MAAM;AAAA;;;ADtIR,SAAS,gBAAgB,CAAC,OAAgB,YAAiC,IAAI,KAAO,UAAgD;AAAA,EAC3I,MAAM,UAAU,CAAC,YAA2B;AAAA,IAAE,MAAM,IAAI,WAAU,EAAE,MAAM,mBAAmB,QAAQ,CAAC;AAAA;AAAA,EACtG,IAAI,WAAW,KAAK;AAAA,IAAG,OAAO,QAAQ,wEAAwE;AAAA,EAC9G,IAAI,OAAO,UAAU,YAAY,UAAU,SAAS,YAAY,KAAK,KAAK,WAAW,KAAK;AAAA,IAAI,OAAO,QAAQ,kFAAkF;AAAA,EAC/L,IAAI,UAAU;AAAA,IAAW,OAAO,QAAQ,qEAAqE;AAAA,EAC7G,IAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,OAAO,UAAU,aAAa,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EACnH,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EACtC,IAAI,iBAAiB;AAAA,IAAM,OAAO,OAAO,SAAS,MAAM,QAAQ,CAAC,IAAI,mBAAmB,EAAE,MAAM,MAAM,CAAC,IAAI,QAAQ,0BAA0B;AAAA,EAC7I,IAAI,iBAAiB;AAAA,IAAY,OAAO,IAAI,WAAW,KAAK;AAAA,EAC5D,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,QAAQ,iCAAiC;AAAA,EAC/E,IAAI,UAAU,IAAI,KAAK;AAAA,IAAG,OAAO,QAAQ,6CAA6C;AAAA,EACtF,MAAM,QAAQ,MAAM,QAAQ,KAAK;AAAA,EACjC,MAAM,YAAqB,OAAO,eAAe,KAAK;AAAA,EACtD,IAAI,QAAQ,cAAc,MAAM,YAAY,cAAc,OAAO,aAAa,cAAc;AAAA,IAAM,OAAO,QAAQ,yDAAyD;AAAA,EAC1K,MAAM,SAAS,IAAI,IAAI,CAAC,GAAG,WAAW,KAAK,CAAC;AAAA,EAC5C,MAAM,WAAmB,QAAQ,CAAC,IAAI,OAAO,OAAO,cAAc,OAAO,OAAO,OAAO,SAAS;AAAA,EAChG,WAAW,OAAO,QAAQ,QAAQ,KAAK,GAAG;AAAA,IACxC,MAAM,aAAa,OAAO,yBAAyB,OAAO,GAAG;AAAA,IAC7D,IAAI,EAAE,WAAW;AAAA,MAAa,OAAO,QAAQ,2DAA2D;AAAA,IACxG,OAAO,eAAe,UAAU,KAAK,KAAK,YAAY,OAAO,iBAAiB,WAAW,OAAO,QAAQ,QAAQ,EAAE,CAAC;AAAA,EACrH;AAAA,EACA,OAAO;AAAA;;;ADJT,IAAM,aAAa,IAAI;AACvB,IAAM,WAAW,IAAI;AAErB,SAAS,QAAO,CAAC,SAAwB;AAAA,EACvC,MAAM,IAAI,WAAU,EAAE,MAAM,mBAAmB,QAAQ,CAAC;AAAA;AAE1D,SAAS,WAAW,CAAC,SAAwB;AAAA,EAC3C,MAAM,IAAI,WAAU,EAAE,MAAM,+BAA+B,QAAQ,CAAC;AAAA;AAI/D,SAAS,qBAAqB,CAAC,QAAmD;AAAA,EACvF,IAAI,2BAA2B,OAAO,KAAK;AAAA,IAAG,OAAO,EAAE,MAAM,qBAAqB,MAAM,OAAO,MAAM,KAAK;AAAA,EAC1G,IAAI,oBAAoB,OAAO,KAAK;AAAA,IAAG,OAAO,EAAE,MAAM,aAAa,SAAS,OAAO,MAAM,SAAS,OAAO,OAAO,OAAO,MAAM,UAAU,SAAS;AAAA,EAChJ,OAAO,EAAE,MAAM,QAAQ;AAAA;AAIlB,SAAS,2BAA2B,CAAC,QAAgG;AAAA,EAC1I,QAAQ,SAAS,aAAa,cAAc;AAAA,EAC5C,IAAI,UAAU,SAAS;AAAA,IAAS,OAAO;AAAA,EACvC,IAAI,CAAC,QAAQ,aAAa;AAAA,IAAc,MAAM,uBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,eAAe,CAAC;AAAA,EACtH,IAAI,UAAU,SAAS;AAAA,IAAqB,OAAO,GAAG,gBAAgB,QAAQ,WAAW,EAAE,MAAM,UAAU,KAAK,UAAU,CAAC,KAAK,QAAQ,WAAW,EAAE,MAAM,UAAU,KAAK,KAAK,CAAC;AAAA,EAChL,OAAO,GAAG,sBAAsB,UAAU,UAAU,UAAU,QAAQ,OAAO;AAAA;AAIxE,SAAS,qBAAqB,CAAC,QAAqC;AAAA,EACzE,IAAI,2BAA2B,OAAO,KAAK;AAAA,IAAG,OAAO,OAAO,MAAM;AAAA,EAClE,IAAI,oBAAoB,OAAO,KAAK;AAAA,IAAG,OAAO,OAAO,OAAO,MAAM,UAAU,WAAW,OAAO,MAAM,QAAQ,iBAAiB,EAAE,QAAQ,OAAO,MAAM,MAAM,CAAC;AAAA,EAC3J,OAAO,OAAO;AAAA;AAIT,SAAS,qBAAqB,CAAC,QAAgD;AAAA,EACpF,OAAO,WAAW,IAAI,OAAO,SAAS;AAAA;AAIjC,SAAS,yBAAyB,CAAC,QAAwF;AAAA,EAChI,kBAAkB,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,EACzC,IAAI,WAAW,IAAI,OAAO,SAAS;AAAA,IAAG,SAAQ,4CAA4C;AAAA,EAC1F,WAAW,IAAI,OAAO,WAAW,EAAE,SAAS,OAAO,SAAS,OAAO,OAAO,OAAO,OAAO,CAAC,GAAG,WAAW,IAAI,KAAO,MAAM,IAAI,IAAM,CAAC;AAAA;AAGrI,SAAS,aAAa,CAAC,UAAoC;AAAA,EACzD,OAAO,KAAK,UAAU;AAAA,IAAE,QAAQ,SAAS;AAAA,IAAQ,UAAU,SAAS;AAAA,IAAU,MAAM,SAAS;AAAA,IAAM,YAAY,SAAS;AAAA,IACtH,YAAY,SAAS;AAAA,IAAY,UAAU,SAAS,aAAa,YAAY,YAAY,CAAC,SAAS,SAAS,WAAW,SAAS,SAAS,IAAI;AAAA,IAAG,aAAa,SAAS;AAAA,EAAY,CAAC;AAAA;AAGvL,SAAS,YAAY,CAAC,MAAwB,OAAkC;AAAA,EAC9E,OAAO,KAAK,YAAY,MAAM,WAAW,KAAK,mBAAmB,MAAM,kBAAkB,cAAc,IAAI,MAAM,cAAc,KAAK;AAAA;AAI/H,SAAS,gBAAgB,CAAC,QAQtB;AAAA,EACT,MAAM,QAAQ,WAAW,IAAI,OAAO,SAAS,KAAK,SAAQ,oEAAoE;AAAA,EAC9H,IAAI;AAAA,EACJ,IAAI,OAAO,OAAO,SAAS,SAAS;AAAA,IAClC,MAAM,YAAY,EAAE,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,CAAC;AAAA,IACpE,IAAI,OAAO,aAAa;AAAA,MAAW,SAAQ,yDAAyD;AAAA,IACpG,MAAM,WAAW,MAAM,UAAU,IAAI,GAAG;AAAA,IACxC,IAAI,aAAa,aAAa,CAAC,aAAa,UAAU,OAAO,QAAQ;AAAA,MAAG,SAAQ,cAAc,0CAA0C;AAAA,IACxI,MAAM,UAAU,IAAI,KAAK,OAAO,QAAQ;AAAA,IACxC,MAAM,KAAK,IAAI,GAAG;AAAA,EACpB;AAAA,EACA,MAAM,YAAmC,OAAO,UAAU,SAAS,sBAC/D,OAAO,OAAO,KAAK,OAAO,WAAW,MAAM,OAAO,OAAO,KAAK,OAAO,UAAU,KAAK,CAAC,EAAE,CAAC,IAAI,OAAO,OAAO,KAAK,OAAO,UAAU,CAAC;AAAA,EACrI,MAAM,SAA2B,OAAO,OAAO,SAAS,YAAY,OAAO,OAAO,EAAE,MAAM,WAAW,OAAO,iBAAiB,OAAO,OAAO,KAAK,EAAE,CAAC,IAAI,OAAO,OAAO,KAAK,OAAO,OAAO,CAAC;AAAA,EACzL,MAAM,cAAc,OAAO,UAAU,QAAQ;AAAA,EAC7C,MAAM,OAAO,4BAA4B,EAAE,SAAS,MAAM,SAAS,aAAa,UAAU,CAAC;AAAA,EAC3F,MAAM,MAAM,KAAK,OAAO,OAAO,EAAE,MAAM,QAAQ,QAAQ,KAAK,WAAW,QAAQ,OAAO,QAAQ,YAAY,OAAO,eAAe,SAAU,OAAO,aAAa,YAAY,CAAC,IAAI,EAAE,UAAU,OAAO,SAAS,EAAG,CAAC,CAAC;AAAA,EAChN,OAAO;AAAA;AAIF,SAAS,qBAAqB,CAAC,QAAgE;AAAA,EACpG,MAAM,QAAQ,WAAW,IAAI,OAAO,SAAS,KAAK,SAAQ,qCAAqC;AAAA,EAC/F,MAAM,MAAM,KAAK,OAAO,OAAO,EAAE,MAAM,SAAS,OAAO,OAAO,MAAM,CAAC,CAAC;AAAA;AAIjE,SAAS,0BAA0B,CAAC,QAA0D;AAAA,EACnG,MAAM,QAAQ,WAAW,IAAI,OAAO,SAAS,KAAK,SAAQ,qCAAqC;AAAA,EAC/F,MAAM,OAAO,kBAAkB,EAAE,OAAO,MAAM,MAAM,CAAC;AAAA,EACrD,WAAW,OAAO;AAAA,IAAM,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG;AAAA,MAAG,SAAQ,uBAAuB,sCAAsC;AAAA,EACvH,MAAM,UAAU,OAAO,OAAO,OAAO,OAAO,IAAI,CAAC;AAAA,EACjD,SAAS,IAAI,SAAS,EAAE,SAAS,MAAM,SAAS,MAAM,OAAO,OAAO,OAAO,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC;AAAA,EAC9F,OAAO;AAAA;AAGT,SAAS,aAAa,CAAC,QAAoH;AAAA,EACzI,MAAM,QAAQ,OAAO,UAAU,aAAa,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,IAAI,IAAc,OAAO;AAAA,EAC9G,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK;AAAA,IAAG,SAAQ,uDAAuD;AAAA,EACxI,MAAM,YAAqB,OAAO,eAAe,KAAK;AAAA,EACtD,IAAI,cAAc,OAAO,aAAa,cAAc;AAAA,IAAM,SAAQ,yEAAyE;AAAA,EAC3I,MAAM,MAAM,QAAQ,QAAQ,KAAK;AAAA,EACjC,IAAI,IAAI,WAAW,OAAO,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,OAAO,QAAQ,YAAY,CAAC,OAAO,KAAK,SAAS,GAAG,CAAC;AAAA,IAAG,SAAQ,iEAAiE;AAAA,EAC5L,MAAM,cAAc,OAAO,KAAK,IAAI,CAAC,QAAQ;AAAA,IAC3C,MAAM,aAAa,OAAO,yBAAyB,OAAO,GAAG;AAAA,IAC7D,IAAI,eAAe,aAAa,EAAE,WAAW,eAAe,WAAW,UAAU;AAAA,MAAW,SAAQ,cAAc,2CAA2C;AAAA,IAC7J,OAAO,EAAE,KAAK,OAAO,WAAW,MAAiB;AAAA,GAClD;AAAA,EACD,MAAM,WAAoC,OAAO,OAAO,IAAI;AAAA,EAE5D,WAAW,SAAS;AAAA,IAAa,SAAS,MAAM,OAAO,iBAAiB,MAAM,OAAO,IAAI,KAAO,OAAO,QAAQ;AAAA,EAC/G,OAAO;AAAA;AAGT,SAAS,aAAa,CAAC,MAA6B,OAAuC;AAAA,EACzF,IAAI,KAAK,SAAS,MAAM;AAAA,IAAM,OAAO;AAAA,EACrC,IAAI,KAAK,SAAS,uBAAuB,MAAM,SAAS;AAAA,IAAqB,OAAO,KAAK,KAAK,cAAc,MAAM,KAAK,aAAa,KAAK,KAAK,SAAS,MAAM,KAAK;AAAA,EAClK,IAAI,KAAK,SAAS,eAAe,MAAM,SAAS;AAAA,IAAa,OAAO,KAAK,YAAY,MAAM,WAAW,KAAK,UAAU,MAAM;AAAA,EAC3H,OAAO;AAAA;AAIF,SAAS,qBAAqB,CAAC,QAA2G;AAAA,EAC/I,MAAM,QAAQ,SAAS,IAAI,OAAO,OAAO,KAAK,SAAQ,2CAA2C;AAAA,EACjG,MAAM,SAAS,cAAc,EAAE,MAAM,MAAM,MAAM,OAAO,OAAO,QAAQ,UAAU,OAAO,SAAS,CAAC;AAAA,EAClG,MAAM,gBAAgB,IAAI;AAAA,EAC1B,MAAM,SAAoB,CAAC;AAAA,EAC3B,WAAW,QAAQ,MAAM,OAAO;AAAA,IAC9B,IAAI,KAAK,SAAS,SAAS;AAAA,MAAE,KAAK,MAAM;AAAA,MAAG;AAAA,IAAU;AAAA,IACrD,MAAM,QAAQ,KAAK,OAAO,SAAS,YAAY,KAAK,OAAO,QAAQ,OAAO,KAAK;AAAA,IAC/E,KAAK,WAAW,KAAK;AAAA,IACrB,IAAI,KAAK,cAAc,UAAU;AAAA,MAAM,SAAQ,qEAAqE;AAAA,IACpH,IAAI;AAAA,IACJ,IAAI,KAAK,QAAQ,aAAa,cAAc,IAAI,KAAK,GAAG;AAAA,MAAG,UAAU,cAAc,IAAI,KAAK,GAAG;AAAA,IAC1F;AAAA,MACH,UAAU,iBAAiB,KAAK,OAAO,EAAE,OAAO,iBAAiB,KAAK,GAAG,SAAS,MAAM,QAAQ,CAAC,CAAC;AAAA,MAClG,IAAI,KAAK,QAAQ;AAAA,QAAW,cAAc,IAAI,KAAK,KAAK,OAAO;AAAA;AAAA,IAEjE,KAAK,WAAW,OAAO;AAAA,IACvB,IAAI,KAAK,cAAc,YAAY;AAAA,MAAM,SAAQ,4EAA4E;AAAA,IAC7H,IAAI,YAAY,QAAQ,CAAC,cAAc,KAAK,WAAW,sBAAsB,EAAE,OAAO,QAAQ,CAAC,CAAC;AAAA,MAAG,YAAY,yEAAyE;AAAA,IACxL,OAAO,KAAK,iBAAiB,sBAAsB,EAAE,OAAO,QAAQ,CAAC,CAAC,CAAC;AAAA,EACzE;AAAA,EACA,OAAO;AAAA;;;ADxKF,MAAM,eAAe;AAAA,EACT;AAAA,EACT,WAAmB;AAAA,EAClB;AAAA,EAET,WAAW,CAAC,SAAqB;AAAA,IAC/B,KAAK,UAAU;AAAA,IACf,KAAK,SAAS,CAAC;AAAA;AAAA,EAIjB,OAAO,GAAW;AAAA,IAChB,MAAM,QAAQ,sBAAsB,EAAE,WAAW,KAAK,CAAC,IAAI,EAAE,KAAK,WAAW,KAAK,OAAO;AAAA,IACzF,OAAO,KAAK,QAAQ,YAAY,EAAE,MAAM,CAAC;AAAA;AAAA,EAI3C,KAAK,GAAW;AAAA,IACd,OAAO,sBAAsB,EAAE,WAAW,KAAK,CAAC,IAAI,KAAK,WAAW,KAAK,OAAO;AAAA;AAAA,EAIlF,GAAG,CAAC,OAAwB;AAAA,IAC1B,MAAM,YAAY,sBAAsB,EAAE,MAAM,CAAC;AAAA,IACjD,IAAI,sBAAsB,EAAE,WAAW,KAAK,CAAC;AAAA,MAAG,OAAO,iBAAiB;AAAA,QACtE,WAAW;AAAA,QAAM,QAAQ,EAAE,MAAM,WAAW,MAAM;AAAA,QAAG;AAAA,QAAW,QAAQ,CAAC,WAAW,OAAO;AAAA,MAC7F,CAAC;AAAA,IACD,IAAI,UAAU,SAAS,WAAW,CAAC,KAAK,QAAQ,aAAa;AAAA,MAAc,MAAM,uBAAsB,EAAE,SAAS,KAAK,QAAQ,MAAM,SAAS,eAAe,CAAC;AAAA,IAC9J,KAAK,OAAO,KAAK,sBAAsB,EAAE,MAAM,CAAC,CAAC;AAAA,IACjD,OAAO,4BAA4B,EAAE,SAAS,KAAK,SAAS,aAAa,KAAK,QAAQ,GAAG,UAAU,CAAC;AAAA;AAAA,EAItG,OAAO,CAAC,QAAsC;AAAA,IAC5C,OAAO,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,KAAK,CAAC;AAAA;AAEhD;;;ADrBO,SAAS,wBAAwB,CAAC,QAA6F;AAAA,EACpI,IAAI,OAAO,QAAQ,SAAS;AAAA,IAAY,MAAM,uBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,kBAAkB,CAAC;AAAA,EAChI,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,MAAM,WAAW,OAAO,QAAQ,IAAI,CAAC,QAAQ,cAAc,EAAE,UAAU,MAAM,OAAO,MAAM,WAAW,OAAO,WAAW,MAAM,OAAO,MAAM,QAAQ,OAAO,SAAS,WAAW,OAAO,SAAS,KAAK,EAAE;AAAA,EAEpM,MAAM,UAAU,UAAU,IAAI,KAAK,UAAU,QAAQ,CAAC;AAAA,EACtD,MAAM,OAAO;AAAA,qCACsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkCnC,OAAO,EAAE,MAAM,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;;AS7D7D,kCAAS;AAeF,SAAS,6BAA6B,CAAC,QAAwG;AAAA,EACpJ,QAAQ,YAAY;AAAA,EACpB,IAAI,QAAQ,SAAS;AAAA,IAAY,MAAM,uBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,0BAA0B,CAAC;AAAA,EAC1H,MAAM,YAAY,IAAI,eAAe,OAAO;AAAA,EAC5C,MAAM,YAAY,UAAU,IAAI,OAAO,SAAS;AAAA,EAChD,MAAM,uBAAuB,sOAAsO;AAAA,EACnQ,IAAI;AAAA,EACJ,QAAQ,OAAO;AAAA,SACR;AAAA,MAAU,OAAO,yEAAyE,oFAAoF;AAAA,MAA4C;AAAA,SAC1N;AAAA,MAAS,OAAO,wEAAwE,iBAAiB;AAAA,MAA4C;AAAA,SACrJ;AAAA,MAAW,OAAO,qZAAqZ,kKAAkK;AAAA,MAAmD;AAAA,SAC5nB;AAAA,MAAe,OAAO,igBAAigB;AAAA,MAAmD;AAAA,SAC1kB;AAAA,MAAU,OAAO,+RAA+R;AAAA,MAA4C;AAAA,SAC5V;AAAA,MAAe,OAAO,0iCAA0iC;AAAA,MAAoD;AAAA,SACpnC;AAAA,MAAS,OAAO,wPAAwP;AAAA,MAAqL;AAAA,SAC7b;AAAA,MAAW,OAAO,ssBAAssB;AAAA,MAA2C;AAAA;AAAA,EAE1wB,OAAO,EAAE,MAAM,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;;AC5B7D,kCAAS;AAGF,SAAS,uBAAuB,CAAC,QAA0G;AAAA,EAChJ,QAAQ,YAAY;AAAA,EACpB,IAAI,QAAQ,SAAS;AAAA,IAAY,MAAM,uBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,uBAAuB,CAAC;AAAA,EACvH,MAAM,YAAY,IAAI,eAAe,OAAO;AAAA,EAC5C,MAAM,QAAQ,OAAO,UAAU,YAC3B,eAAe,UAAU,IAAI,OAAO,MAAM,SAAS,qBAAqB,UAAU,IAAI,OAAO,MAAM,IAAI,MACvG,OAAO,eAAe,YACpB,kFACA,OAAO,WAAW,WAAW,IAAI,UAAU,iBAAiB,CAAC,GAAG,IAAI,IAAI,OAAO,UAAU,CAAC,EAAE,IAAI,CAAC,cAAc,UAAU,IAAI,SAAS,CAAC,EAAE,KAAK,IAAI;AAAA,EACxJ,MAAM,oBAAoB;AAAA,EAC1B,OAAO;AAAA,IACL,MAAM,i/BAAi/B,2BAA2B;AAAA,IAClhC,QAAQ,UAAU;AAAA,IAClB,WAAW;AAAA,EACb;AAAA;;ACrBF,sBAAS,0DAAgC;AAYlC,SAAS,kBAAkB,CAAC,QAItB;AAAA,EACX,QAAQ,SAAS,SAAS,WAAW;AAAA,EACrC,MAAM,mBAAmB,QAAQ,KAAK,CAAC,WAAW,OAAO,kBAAkB,SAAS;AAAA,EACpF,IAAI,oBAAoB,CAAC,QAAQ,aAAa;AAAA,IAAsB,MAAM,uBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,uBAAuB,CAAC;AAAA,EAC1J,IAAI,oBAAoB;AAAA,IAAQ,MAAM,uBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,8BAA8B,MAAM,qEAAqE,CAAC;AAAA,EACxM,OAAO,QAAQ,IAAI,CAAC,WAAW;AAAA,IAC7B,MAAM,gBAAgB,OAAO;AAAA,IAC7B,IAAI,kBAAkB,aAAa,CAAC,oBAAoB,EAAE,MAAM,SAAS,MAAM,cAAc,CAAC,GAAG;AAAA,MAC/F,MAAM,IAAI,WAAU,EAAE,MAAM,uBAAuB,SAAS,yEAAyE,MAAM,EAAE,MAAM,iCAAiC,QAAQ,OAAO,KAAK,EAAE,CAAC;AAAA,IAC7M;AAAA,IACA,MAAM,MAAM,kBAAkB,YAAY,KAAK,IAAI,QAAQ,WAAW,EAAE,MAAM,cAAc,UAAU,CAAC,KAAK,QAAQ,WAAW,EAAE,MAAM,cAAc,KAAK,CAAC;AAAA,IAC3J,OAAO,GAAG,QAAQ,WAAW,EAAE,MAAM,OAAO,KAAK,CAAC,IAAI,MAAM,OAAO,OAAO,UAAU;AAAA,GACrF;AAAA;;AClBI,SAAS,2BAA2B,CAAC,QAAkG;AAAA,EAC5I,QAAQ,SAAS,cAAc;AAAA,EAC/B,IAAI,UAAU,SAAS;AAAA,IAAc,OAAO,QAAQ,SAAS,UAAU,EAAE,MAAM,gCAAgC,QAAQ,CAAC,GAAG,WAAW,OAAO,IAAI;AAAA,EACjJ,IAAI,QAAQ,SAAS,YAAY,UAAU,OAAO,WAAW;AAAA,IAAG;AAAA,EAChE,MAAM,YAAY,IAAI,eAAe,OAAO;AAAA,EAC5C,MAAM,QAAQ,UAAU,OAAO,IAAI,CAAC,OAAO,UAAU,UAAU,UAAU,IAAI,UAAU,SAAS,IAAI,UAAU,IAAI,kBAAkB,OAAO,UAAU,IAAI,KAAK,IAAI,UAAU,IAAI,mBAAmB,IAAI,EAAE,KAAK,aAAa;AAAA,EAC3N,MAAM,KAAK,QAAQ,SAAS;AAAA,EAG5B,MAAM,UAAU,GAAG,aAAyC,KAAK,SAAS,yCAAyC,iBAAiB;AAAA,EACpI,MAAM,UAAU,GAAG,WAAW,YAA0D,8CAA8C,QAAQ,EAAE,QAAQ,UAAU,CAAC,OAAO,QAAQ,EAAE,QAAQ,cAAc,CAAC,SAAS,QAAQ,EAAE,QAAQ,MAAM,CAAC,OAAO,QAAQ,EAAE,QAAQ,eAAe,CAAC;AAAA,EACtR,MAAM,kBAAkB,KAAK,eAAe;AAAA,EAC5C,MAAM,cAAc,KAAK,cAAc;AAAA,EACvC,MAAM,kBAAkB,KAAK,eAAe;AAAA,EAC5C,MAAM,cAAc,KAAK,cAAc;AAAA,EACvC,MAAM,OAAO,KACT,kRACA;AAAA,EACJ,OAAO;AAAA,IACL,MAAM,yBAAyB;AAAA,wBACX,KAAK,eAAe,4CAA4C,wCAAwC,gCAAgC,wCAAwC,gCAAgC,QAAQ,EAAE,WAAW,iBAAiB,OAAO,YAAY,CAAC,sBAAsB,QAAQ,EAAE,WAAW,iBAAiB,OAAO,YAAY,CAAC,0BAA0B;AAAA;AAAA;AAAA,IAGxY,QAAQ,UAAU;AAAA,IAClB,WAAW;AAAA,EACb;AAAA;;ACzBF,IAAM,kBAAkB,CAAC,SAAiB,UACxC,mEAAmE,oCAAoC;AAYzG,IAAM,0BAA0B,qFAAqF,gBAAgB,gBAAgB,OAAO,+IAA+I,gBAAgB,YAAY,OAAO,8FAA8F,gBAAgB,WAAW,OAAO,sPAAsP,gBAAgB,WAAW,OAAO;AAG/tB,SAAS,wBAAwB,CAAC,QAA8F;AAAA,EACrI,QAAQ,YAAY;AAAA,EACpB,MAAM,YAAY,IAAI,eAAe,OAAO;AAAA,EAC5C,MAAM,YAAY,UAAU,IAAI,OAAO,SAAS;AAAA,EAChD,IAAI,QAAQ,SAAS;AAAA,IAAY,OAAO,EAAE,MAAM,2MAA2M;AAAA,gLAC7E;AAAA,yLACS;AAAA,uOAC8C,iDAAiD,gBAAgB,YAAY,OAAO;AAAA,+HAC5L,wGAAwG,2BAA2B,OAAO,qBAAqB,YAAY,KAAK,qBAAqB,UAAU,IAAI,OAAO,gBAAgB,OAAO,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA,EAC1Z,IAAI,QAAQ,SAAS;AAAA,IAAS,OAAO,EAAE,MAAM,yJAAyJ;AAAA,+GACzF,UAAU,IAAI,OAAO,SAAS;AAAA,gIACb,UAAU,IAAI,OAAO,SAAS,oCAAoC,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA,EAC5O,OAAO,EAAE,MAAM,mHAAmH,yGAAyG,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;;ACtCzR,sDAA6B;AAOtB,IAAM,kBAAqG,OAAO,OAAO,EAAE,QAAQ,mBAAmB,OAAO,gBAAgB,MAAM,YAAY,gBAAgB,GAAG,CAAC;AAGnN,IAAM,sBAAgH,OAAO,OAAO;AAAA,EACzI,UAAU,OAAO,OAAO,EAAE,oBAAoB,MAAM,WAAW,KAAK,CAAC;AAAA,EACrE,OAAO,OAAO,OAAO,EAAE,oBAAoB,MAAM,WAAW,KAAK,CAAC;AAAA,EAClE,QAAQ,OAAO,OAAO,EAAE,oBAAoB,OAAO,WAAW,MAAM,CAAC;AACvE,CAAC;AAeM,SAAS,qBAAqB,CAAC,QAAuF;AAAA,EAC3H,QAAQ,SAAS,cAAc;AAAA,EAC/B,IAAI,CAAC,oBAAoB,QAAQ,MAAM;AAAA,IAAoB,MAAM,uBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,6BAA6B,CAAC;AAAA,EACvJ,MAAM,KAAK,QAAQ,SAAS;AAAA,EAC5B,MAAM,YAAY,IAAI,eAAe,OAAO;AAAA,EAC5C,MAAM,SAAS,KAAK,GAAG,QAAQ,WAAW,EAAE,MAAM,gBAAgB,OAAO,CAAC,KAAK,QAAQ,WAAW,EAAE,MAAM,gBAAgB,MAAM,CAAC,MAAM,QAAQ,WAAW,EAAE,MAAM,gBAAgB,MAAM,CAAC;AAAA,EACzL,MAAM,SAAS,CAAC,SAA2C,CAAC,EAAE,MAAM,QAAQ,UAAU,QAAQ,WAAW,OAAO,CAAC;AAAA,EACjH,QAAQ,UAAU;AAAA,SAMX;AAAA,MAAkB,OAAO,OAAO,mBAAmB,QAAQ,WAAW,EAAE,MAAM,UAAU,KAAK,CAAC,IAAI,KAAK,wBAAwB,IAAI;AAAA,SACnI;AAAA,MAAgB,OAAO,OAAO,iBAAiB,QAAQ,WAAW,EAAE,MAAM,UAAU,KAAK,CAAC,GAAG;AAAA,SAC7F;AAAA,MAAY,OAAO,OAAO,KAC3B,uLACA,yGAAyG;AAAA,SACxG;AAAA,MAAQ,OAAO,OAAO,KACvB,sCAAsC,UAAU,IAAI,gBAAgB,IAAI,OACxE,mBAAmB,UAAU,IAAI,kBAAkB,UAAU,UAAU,MAAM,UAAU,IAAI,gBAAgB,cAAc,gBAAgB;AAAA,SACxI;AAAA,MAAU,OAAO,OAAO,KACzB,wCAAwC,UAAU,IAAI,gBAAgB,IAAI,mBAC1E,uBAAuB,UAAU,IAAI,kBAAkB,UAAU,UAAU,gBAAgB;AAAA,SAC1F;AAAA,MAAgB,OAAO,OAAO,KAC/B,kIAAkI,UAAU,IAAI,gBAAgB,MAAM,qBAAqB,UAAU,IAAI,gBAAgB,KAAK,MAC9N,6GAA6G,UAAU,IAAI,gBAAgB,KAAK,GAAG;AAAA,SAClJ;AAAA,MAAc,OAAO,OAAO,uBAAuB,QAAQ;AAAA,SAC3D;AAAA,MAAiB,OAAO,OAAO,gJAAgJ,KAAK,UAAU,IAAI,gBAAgB,MAAM,IAAI,iCAAiC,UAAU,IAAI,gBAAgB,KAAK,SAAS,KAC1S,i3BACA,0hBAA0hB,UAAU,IAAI,gBAAgB,KAAK,gIAAgI,UAAU,IAAI,gBAAgB,KAAK;AAAA,0BAC9sB;AAAA,SACjB,UAAU;AAAA,MACb,IAAI;AAAA,QAAI,MAAM,uBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,wBAAwB,CAAC;AAAA,MAC/F,OAAO,OAAO,8BAA8B;AAAA,IAC9C;AAAA,SACK;AAAA,MAAgB,OAAO,KACxB,CAAC,EAAE,MAAM,iBAAiB,QAAQ,WAAW,EAAE,MAAM,gBAAgB,OAAO,CAAC,KAAK,QAAQ,CAAC,GAAG,WAAW,OAAO,GAAG,EAAE,MAAM,gBAAgB,kCAAkC,QAAQ,CAAC,GAAG,WAAW,OAAO,CAAC,IAC5M,OAAO,gBAAgB,kDAAkD;AAAA,SACxE;AAAA,MAAe,OAAO,OAAO,UAAU,SAAS,eAAe,4BAA4B,UAAU,IAAI,UAAU,KAAK,OAAO,UAAU,wBAAwB,UAAU,IAAI,UAAU,KAAK,GAAG;AAAA,SACjM;AAAA,MAAW,OAAO,OAAO,sDAAsD,QAAQ,WAAW,EAAE,MAAM,mBAAmB,CAAC,iBAAiB;AAAA,SAC/I;AAAA,MAAa,OAAO,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,wDAKe,gBAAgB,sMAAsM,gBAAgB;AAAA,8NAChE,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6XAQtO;AAAA;AAAA;AAAA;AAAA,qQAI6P;AAAA,SAC5P;AAAA,SACA,0BAA0B;AAAA,MAC7B,IAAI,CAAC;AAAA,QAAI,MAAM,uBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,sBAAsB,CAAC;AAAA,MAG9F,MAAM,QAAQ,UAAU,SAAS,2BAA2B,UAAU,kBAAkB,CAAC;AAAA,MACzF,WAAW,aAAa;AAAA,QAAO,mBAAmB,EAAE,WAAW,SAAS,YAAY,aAAa,MAAM,CAAC;AAAA,MACxG,OAAO;AAAA,QACL,GAAG,MAAM,IAAI,CAAC,eAA8B,EAAE,MAAM,yBAAyB,QAAQ,WAAW,EAAE,MAAM,UAAU,CAAC,aAAa,QAAQ,CAAC,GAAG,WAAW,OAAO,EAAE;AAAA,QAChK,EAAE,MAAM,gCAAgC,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA,QACtE,EAAE,MAAM,0BAA0B,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA,MAClE;AAAA,IACF;AAAA,SACK,oBAAoB;AAAA,MACvB,IAAI;AAAA,QAAI,MAAM,uBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,mBAAmB,CAAC;AAAA,MAC1F,OAAO,OAAO,4BAA4B,UAAU,UAAU,MAAM,KAAK;AAAA,IAC3E;AAAA,SACK,mBAAmB;AAAA,MACtB,IAAI;AAAA,QAAI,MAAM,uBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,mBAAmB,CAAC;AAAA,MAC1F,OAAO,OAAO,QAAQ,UAAU,UAAU,QAAQ,WAAW,EAAE,MAAM,UAAU,KAAK,CAAC,GAAG;AAAA,IAC1F;AAAA;AAAA;;ACzGG,IAAM,wBAAgC;AAGtC,SAAS,mBAAmB,CAAC,QAOI;AAAA,EACtC,QAAQ,SAAS,cAAc;AAAA,EAC/B,MAAM,IAAI,CAAC,SAAyB,QAAQ,WAAW,EAAE,KAAK,CAAC;AAAA,EAC/D,MAAM,QAAQ,EAAE,OAAO,KAAK;AAAA,EAC5B,MAAM,SAAS,EAAE,qBAAqB;AAAA,EACtC,MAAM,YAAY,IAAI,eAAe,OAAO;AAAA,EAC5C,IAAI;AAAA,EACJ,QAAQ,UAAU;AAAA,SACX;AAAA,MACH,OAAO,QAAQ,SAAS,WAAW,qBAAqB,WACpD,mFAAmF,QAAQ,SAAS,aAAa,qBAAqB,iCAAiC,UAAU,IAAI,OAAO,KAAK;AAAA,MACrM;AAAA,SACG;AAAA,MACH,OAAO,eAAe,oBAAoB,UAAU,QAAQ,SAAS,UAAU,aAAa;AAAA,MAC5F;AAAA,SACG;AAAA,MAAQ,OAAO,iBAAiB,kBAAkB,EAAE,IAAI;AAAA,MAAK;AAAA,SAC7D;AAAA,MACH,OAAO,eAAe,UAAU,CAAC,QAAQ,YAAY,mBAAmB,qBAAqB,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,cAAc,UAAU,QAAQ,CAAC,UAAU,MAAM,UAAU,UAAU,UAAU,OAAO,UAAU,KAAK,CAAC,EAAE,KAAK,IAAI;AAAA,MAChO;AAAA,SACG;AAAA,MAAY,OAAO,UAAU,aAAa,YAAY,UAAU,IAAI,UAAU,KAAK,WAAW,EAAE,MAAM,OAAO,UAAU,IAAI,UAAU,IAAI;AAAA,MAAK;AAAA;AAAA,EAErJ,OAAO,EAAE,MAAM,QAAQ,UAAU,OAAO;AAAA;;AClC1C;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACSA,sBAAS;AAGF,SAAS,WAAW,CAAC,QAAkC;AAAA,EAC5D,IAAI,OAAO,KAAK,SAAS,MAAQ,GAAG;AAAA,IAClC,MAAM,IAAI,WAAU;AAAA,MAClB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM,EAAE,MAAM,OAAO,KAAK,WAAW,QAAU,KAAK,EAAE;AAAA,IACxD,CAAC;AAAA,EACH;AAAA,EACA,OAAO,OAAO;AAAA;;;ACPT,IAAM,gBAA4B;AAAA,EACvC,MAAM;AAAA,EACN,cAAc;AAAA,EAEd,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,YAAY;AAAA,EASZ,qBAAqB;AAAA,IACnB,gBAAgB,CAAC;AAAA,IACjB,uBAAuB;AAAA,IAIvB,0BAA0B;AAAA,EAC5B;AAAA,EACA,gBAAgB,EAAE,MAAM,WAAW,MAAM,WAAW;AAAA,EACpD,eAAe;AAAA,EACf,iBAAiB;AAAA,EAGjB,qBAAqB;AAAA,EACrB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,qBAAqB,EAAE,WAAW,KAAK;AAAA,EACvC,kBAAkB;AAAA,EASlB,cAAc;AAAA,EACd,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEA,eAAe;AAAA,EACf,gBAAgB,OAAO,OAAO,EAAE,QAAQ,QAAQ,SAAS,WAAW,KAAK,WAAW,QAAQ,WAAW,OAAO,QAAQ,SAAS,QAAQ,UAAU,QAAQ,MAAM,QAAQ,OAAO,OAAO,CAAC;AAAA,EACtL,iBAAiB;AAAA,EAKjB,eAAe;AAAA,EACf,uBAAuB;AAAA,EAGvB,mBAAmB;AAAA,EAEnB,gBAAgB;AAAA,EAChB,aAAa;AAAA,EAIb,gBAAgB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,EAExC,UAAU,GAAG,QAAQ;AAAA,IACnB,OAAO,IAAI,YAAY,EAAE,KAAK,CAAC,EAAE,WAAW,KAAK,IAAI;AAAA;AAAA,EAIvD,kBAAkB,GAAG,SAAS;AAAA,IAC5B,OAAO,IAAI,MAAM,WAAW,KAAK,IAAI;AAAA;AAAA,EAEvC,WAAW,GAAG;AAAA,IACZ,OAAO;AAAA;AAAA,EAET,kBAAkB,GAAG,cAAsB;AAAA,IACzC,OAAO;AAAA;AAAA,EAET,WAAW,GAAG,eAAe,aAAa;AAAA,IAKxC,IAAI,kBAAkB;AAAA,MAAG,OAAO;AAAA,IAChC,OAAO,yCAAyC,UAAU,IAAI,aAAa;AAAA;AAE/E;;;AC7GA,sBAAS;AAQF,SAAS,oBAAoB,CAAC,QAA+C;AAAA,EAClF,MAAM,MAAM,OAAO;AAAA,EACnB,IAAI,CAAC,8CAA8C,KAAK,GAAG;AAAA,IAAG,MAAM,YAAY;AAAA,EAChF,MAAM,QAAkB,CAAC;AAAA,EACzB,IAAI,QAAQ;AAAA,EACZ,IAAI,QAAQ;AAAA,EACZ,IAAI;AAAA,EACJ,SAAS,QAAQ,EAAG,QAAQ,IAAI,QAAQ,SAAS;AAAA,IAC/C,MAAM,OAAO,IAAI;AAAA,IACjB,IAAI,UAAU,WAAW;AAAA,MACvB,IAAI,SAAS,OAAO;AAAA,QAClB,IAAI,UAAU,OAAO,IAAI,QAAQ,OAAO;AAAA,UAAO;AAAA,QAC1C;AAAA,kBAAQ;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI,SAAS,OAAO,SAAS,OAAO,SAAS,KAAK;AAAA,MAAE,QAAQ;AAAA,MAAM;AAAA,IAAU;AAAA,IAC5E,IAAI,SAAS,KAAK;AAAA,MAAE,QAAQ;AAAA,MAAK;AAAA,IAAU;AAAA,IAC3C,IAAI,SAAS,OAAO,IAAI,QAAQ,OAAO,KAAK;AAAA,MAAE,MAAM,MAAM,IAAI,QAAQ;AAAA,GAAM,QAAQ,CAAC;AAAA,MAAG,IAAI,MAAM;AAAA,QAAG;AAAA,MAAO,QAAQ;AAAA,MAAK;AAAA,IAAU;AAAA,IACnI,IAAI,SAAS,OAAO,IAAI,QAAQ,OAAO,KAAK;AAAA,MAAE,MAAM,MAAM,IAAI,QAAQ,MAAM,QAAQ,CAAC;AAAA,MAAG,IAAI,MAAM;AAAA,QAAG;AAAA,MAAO,QAAQ,MAAM;AAAA,MAAG;AAAA,IAAU;AAAA,IACvI,IAAI,SAAS,KAAK;AAAA,MAAE,IAAI,UAAU;AAAA,QAAG,QAAQ,QAAQ;AAAA,MAAG;AAAA,IAAS,EAC5D,SAAI,SAAS,KAAK;AAAA,MACrB;AAAA,MACA,IAAI,UAAU,KAAK,SAAS,GAAG;AAAA,QAAE,MAAM,KAAK,IAAI,MAAM,OAAO,KAAK,EAAE,KAAK,CAAC;AAAA,QAAG,OAAO,EAAE,SAAS,OAAO,QAAQ,IAAI,MAAM,QAAQ,CAAC,EAAE;AAAA,MAAG;AAAA,IACxI,EAAO,SAAI,SAAS,OAAO,UAAU,GAAG;AAAA,MAAE,MAAM,KAAK,IAAI,MAAM,OAAO,KAAK,EAAE,KAAK,CAAC;AAAA,MAAG,QAAQ,QAAQ;AAAA,IAAG;AAAA,EAC3G;AAAA,EACA,MAAM,YAAY;AAAA;AAEpB,SAAS,WAAW,GAAc;AAAA,EAChC,OAAO,IAAI,WAAU,EAAE,MAAM,kBAAkB,SAAS,oCAAoC,MAAM,EAAE,QAAQ,+BAA+B,EAAE,CAAC;AAAA;AAIzI,SAAS,mBAAmB,CAAC,QAAwD;AAAA,EAC1F,MAAM,UAAgC,CAAC;AAAA,EACvC,WAAW,QAAQ,qBAAqB,MAAM,EAAE,SAAS;AAAA,IACvD,MAAM,QAAQ,+EAA+E,KAAK,IAAI;AAAA,IACtG,IAAI,UAAU;AAAA,MAAM,MAAM,YAAY;AAAA,IACtC,IAAI,MAAM,OAAO,aAAa,iDAAiD,KAAK,MAAM,EAAE;AAAA,MAAG;AAAA,IAC/F,MAAM,OAAO,MAAM,IAAI,WAAW,MAAM,GAAG,KAAK,MAAM,IAAI,WAAW,MAAM,GAAG,KAAK,MAAM,MAAM,MAAM;AAAA,IACrG,QAAQ,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC;AAAA,EAClC;AAAA,EACA,OAAO;AAAA;;;AC/CT,SAAS,gBAAgB,CAAC,QAA2I;AAAA,EACnK,MAAM,QAAQ,CAAC,SAAyB,cAAc,WAAW,EAAE,KAAK,CAAC;AAAA,EACzE,MAAM,UAAU,OAAO,QAAQ,IAAI,CAAC,WAAW,MAAM,MAAM,CAAC,EAAE,KAAK,IAAI;AAAA,EACvE,MAAM,YAAY,OAAO,QAAQ,IAAI,CAAC,WAAW,OAAO,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,EAClF,MAAM,YAAY,OAAO,QAAQ,IAAI,CAAC,WAAW,OAAO,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,EAClF,MAAM,UAAU;AAAA,IACd;AAAA,IACA,GAAG,OAAO,QAAQ,IAAI,CAAC,WAAW,OAAO,MAAM,MAAM,+BAA+B,MAAM,MAAM,kBAAkB;AAAA,EACpH,EAAE,KAAK,MAAM;AAAA,EACb,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,aAAa,qBAAqB,MAAM,OAAO,KAAK;AAAA,EACtF,MAAM,OAAO;AAAA,gBAAwB,MAAM,OAAO,QAAQ,KAAK,MAAM,OAAO,QAAQ,aAAa,yCAAyC;AAAA,gBAA8B,MAAM,OAAO,QAAQ,YAAY,+BAA+B;AAAA;AAAA,EACxO,MAAM,OAAO,GAAG,gBAAgB,YAAY;AAAA,EAC5C,OAAO;AAAA,IACL,QAAQ,gCAAgC;AAAA,IACxC,YAAY,kBAAkB;AAAA,IAC9B,kBAAkB,kBAAkB,UAAU;AAAA,EAChD;AAAA;AAIK,SAAS,4BAA4B,CAAC,QAIgB;AAAA,EAC3D,QAAQ,QAAQ,eAAe,iBAAiB,MAAM;AAAA,EACtD,OAAO,EAAE,QAAQ,WAAW;AAAA;AAIvB,SAAS,sBAAsB,CAAC,QAarC;AAAA,EACA,MAAM,SAAS;AAAA,EAGf,MAAM,OAAO,IAAI,OAAO,0BAA0B,cAAc,oBAAoB,cAAc,kDAAkD,GAAG;AAAA,EACvJ,WAAW,SAAS,OAAO,OAAO,SAAS,IAAI,GAAG;AAAA,IAChD,MAAM,WAAW,oBAAoB,EAAE,KAAK,mBAAmB,MAAM,MAAM,CAAC,EAAE,GAAI;AAAA,IAClF,MAAM,UAAU,oBAAoB,EAAE,KAAK,mBAAmB,MAAM,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,OAAO,IAAI;AAAA,IACxG,IAAI,OAAO,SAAS,GAAG;AAAA,MAAe;AAAA,IACtC,MAAM,aAAa,iBAAiB,EAAE,OAAO,OAAO,OAAO,UAAU,QAAQ,CAAC;AAAA,IAC9E,IAAI,OAAO,WAAW,WAAW;AAAA,MAAQ;AAAA,IACzC,MAAM,YAAY,OAAO,cAAc,WAAW,mBAAmB,WACjE,OAAO,cAAc,WAAW,aAAa,YAAY;AAAA,IAC7D,IAAI,cAAc;AAAA,MAAW;AAAA,IAC7B,IAAI,OAAO,oBAAoB;AAAA,MAAW,OAAO,EAAE,MAAM,iBAAiB,SAAS;AAAA,IACnF,MAAM,YAAY,GAAG,cAAc,WAAW,EAAE,MAAM,SAAS,CAAC,gBAAgB,QAAQ,IAAI,CAAC,SAAS,cAAc,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,cAAc,cAAc,mBAAmB,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,IACzN,IAAI,OAAO,oBAAoB,wBAAwB,eAAe,OAAO,oBAAoB,sCAAsC;AAAA,MAAc;AAAA,IACrJ,OAAO,EAAE,MAAM,cAAc,UAAU,kBAAkB,WAAW,kBAAkB,mBAAmB,WAAW,YAAY,MAAM,0BAA0B,cAAc,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,UAAU;AAAA,EACrO;AAAA,EACA;AAAA;;AChEK,IAAM,qBASR,OAAO,OAAO;AAAA,EACjB,aAAa;AAAA,EACb,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,eAAe;AACjB,CAAC;;ACnBD,sBAAS;AAmBT,IAAM,YAAY,IAAI;AACtB,uBAAuB,EAAE,OAAO,CAAC,UAAU,UAAU,IAAI,KAAK,EAAE,CAAC;AAEjE,SAAS,QAAO,CAAC,SAAwB;AAAA,EACvC,MAAM,IAAI,WAAU,EAAE,MAAM,mBAAmB,QAAQ,CAAC;AAAA;AAG1D,SAAS,SAAS,CAAC,OAAqC;AAAA,EACtD,MAAM,WAAW,OAAO,OAAO,CAAC,GAAG,KAAK,CAAC;AAAA,EACzC,MAAM,WAAW,OAAO,OAAO,OAAO,eAAe,OAAO,OAAO,IAAI,GAAG,UAAU;AAAA,IAClF,OAAO,OAAmC,EAAE,OAAO,SAAS;AAAA,EAC9D,CAAC,CAAC;AAAA,EACF,UAAU,IAAI,UAAU,QAAQ;AAAA,EAChC,OAAO;AAAA;AAIF,SAAS,aAAa,CAAC,OAAsC;AAAA,EAClE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,IAAI,KAAK;AAAA;AAG3E,SAAS,OAAO,CAAC,OAAqC;AAAA,EACpD,OAAO,UAAU,IAAI,KAAK,KAAK,SAAQ,qCAAqC;AAAA;AAI9E,SAAS,gBAAgB,CAAC,UAAgC;AAAA,EACxD,OAAO,QAAQ,QAAQ,EAAE,KAAK,CAAC,SAAS,OAAO,SAAS,aAAY,cAAc,KAAI;AAAA;AAGxF,SAAS,UAAU,CAAC,OAAgC;AAAA,EAClD,IAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,KAAK,MAAM,KAAK,CAAC,SAAS,OAAO,SAAS,YAAY,KAAK,WAAW,KAAK,KAAK,SAAS,MAAI,CAAC,GAAG;AAAA,IAC7I,SAAQ,6DAA6D;AAAA,EACvE;AAAA;AAgBF,SAAS,QAAQ,CAAC,YAAkC,QAAyC;AAAA,EAC3F,IAAI,CAAC,MAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,QAAQ,QAAQ,GAAG,KAAK,QAAQ,WAAW,OAAO,SAAS,KAAK,QAAQ,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,GAAG;AAAA,IACtJ,SAAQ,2BAA2B;AAAA,EACrC;AAAA,EACA,MAAM,QAAgB,CAAC;AAAA,EACvB,SAAS,QAAQ,EAAG,QAAQ,QAAQ,QAAQ,SAAS;AAAA,IACnD,MAAM,KAAK,QAAQ,MAAO;AAAA,IAC1B,IAAI,QAAQ,OAAO,QAAQ;AAAA,MACzB,MAAM,QAAQ,OAAO;AAAA,MACrB,IAAI,cAAc,KAAK;AAAA,QAAG,MAAM,KAAK,GAAG,QAAQ,KAAK,CAAC;AAAA,MACjD;AAAA,cAAM,KAAK,OAAO,OAAO,EAAE,OAAO,iBAAiB,KAAK,EAAE,CAAC,CAAC;AAAA,IACnE;AAAA,EACF;AAAA,EACA,OAAO,UAAU,KAAK;AAAA;AAIjB,IAAM,MAAc,OAAO,OAAO,OAAO,OAAO,UAAU;AAAA,EAC/D,MAAM,GAAG,WAA0C;AAAA,IACjD,IAAI,OAAO,SAAS,YAAY,KAAK,SAAS,MAAI;AAAA,MAAG,SAAQ,oCAAoC;AAAA,IACjG,OAAO,UAAU,CAAC,IAAI,CAAC;AAAA;AAAA,EAEzB,OAAO,GAAG,YAAuD;AAAA,IAC/D,WAAW,KAAK;AAAA,IAChB,OAAO,UAAU,CAAC,OAAO,OAAO,EAAE,OAAO,OAAO,OAAO,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA;AAAA,EAExE,OAAO,GAAM,OAAO,cAClB,UAAU,CAAC,OAAO,OAAO,EAAE,OAAO,iBAAiB,KAAK,MAAO,YAAY,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAG,CAAC,CAAC,CAAC;AAAA,EAC9G,MAAM,GAAG,OAAO,gBAAqF;AAAA,IACnG,IAAI,CAAC,MAAM,QAAQ,KAAK;AAAA,MAAG,SAAQ,4BAA4B;AAAA,IAC/D,MAAM,UAAU,cAAc,YAAY,CAAC,IAAI,IAAI,QAAQ,SAAS;AAAA,IACpE,MAAM,QAAgB,CAAC;AAAA,IACvB,MAAM,QAAQ,CAAC,OAAO,UAAU;AAAA,MAC9B,IAAI,QAAQ;AAAA,QAAG,MAAM,KAAK,GAAG,OAAO;AAAA,MACpC,MAAM,KAAK,GAAI,cAAc,KAAK,IAAI,QAAQ,KAAK,IAAI,CAAC,OAAO,OAAO,EAAE,OAAO,iBAAiB,KAAK,EAAE,CAAC,CAAC,CAAE;AAAA,KAC5G;AAAA,IACD,OAAO,UAAU,KAAK;AAAA;AAAA,EAExB,UAAU,GAAG,aAA8C;AAAA,IACzD,WAAW,CAAC,MAAM,CAAC;AAAA,IACnB,OAAO,UAAU,CAAC,OAAO,OAAO,EAAE,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC;AAAA;AAAA,EAE/D,UAAU,GAAG,aAA8C;AAAA,IACzD,WAAW,CAAC,MAAM,CAAC;AAAA,IACnB,OAAO,UAAU,CAAC,OAAO,OAAO,EAAE,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC;AAAA;AAAA,EAE/D,UAAU,GAAG,aAA8D;AAAA,IACzE,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,KAAK,OAAO,KAAK,CAAC,UAAU,CAAC,cAAc,KAAK,CAAC;AAAA,MAAG,SAAQ,yCAAyC;AAAA,IACrJ,OAAO,UAAU,CAAC,OAAO,OAAO,EAAE,UAAU,OAAO,OAAO,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA;AAE9E,CAAC,CAAC;AAGK,SAAS,iBAAiB,CAAC,QAMvB;AAAA,EACT,QAAQ,SAAS,WAAW,aAAa;AAAA,EACzC,MAAM,SAAS,CAAC,aAAkC,kBAAkB,KAAK,QAAQ,SAAS,CAAC;AAAA,EAC3F,MAAM,SAAS,CAAC,SAA0F;AAAA,IACxG,IAAI,KAAK,UAAU;AAAA,MAAW,SAAQ,yDAAyD;AAAA,IAG/F,OAAO,iBAAiB,KAAK,YAAY,YAAY,KAAK,QAAQ,KAAK,QAAQ,OAAO,EAAE,OAAO,iBAAiB,KAAK,KAAK,GAAG,SAAS,QAAQ,KAAK,CAAC,CAAC;AAAA;AAAA,EAEvJ,MAAM,YAAY,sBAAsB,EAAE,UAAU,CAAC;AAAA,EACrD,MAAM,cAAc,CAAC,SAAyF,iBAAiB;AAAA,IAC7H;AAAA,IAAW,QAAQ,EAAE,MAAM,WAAW,OAAO,KAAK,MAAM;AAAA,IACxD,WAAW,KAAK,YAAY,YAAY,sBAAsB,EAAE,OAAO,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,QAAQ;AAAA,IACvG,QAAQ,GAAG,OAAO,SAAS,aAAa,KAAK,YAAY,YAAY,QAAQ,KAAK,QAAQ,OAAO,EAAE,OAAO,SAAS,OAAO,KAAK,CAAC;AAAA,EAClI,CAAC;AAAA,EAOD,MAAM,eAAe,CAAC,aAAkC;AAAA,IACtD,MAAM,QAAQ,QAAQ,QAAQ,EAAE,OAAO,CAAC,SAAS,SAAS,EAAE;AAAA,IAC5D,MAAM,OAAO,MAAM,WAAW,IAAI,MAAM,KAAK;AAAA,IAC7C,IAAI,aAAa,SAAS,aAAa,OAAO,SAAS,YAAY,WAAW,MAAM;AAAA,MAClF,IAAI,KAAK,YAAY,aAAa,qBAAqB,EAAE,SAAS,KAAK,QAAQ,CAAC,MAAM;AAAA,QAAW,MAAM,IAAI,WAAU,EAAE,MAAM,+BAA+B,SAAS,4FAA4F,CAAC;AAAA,MAClQ,IAAI,KAAK,UAAU,MAAM;AAAA,QACvB,IAAI,KAAK,YAAY;AAAA,UAAW,sBAAsB,EAAE,WAAW,OAAO,MAAM;AAAA,YAC9E,IAAI,OAAO,KAAK,MAAM,OAAO,iBAAiB,KAAK,KAAK,EAAE,CAAC,MAAM;AAAA,cAAM,MAAM,IAAI,WAAU,EAAE,MAAM,+BAA+B,SAAS,kEAAkE,CAAC;AAAA,YAC9M,CAAC;AAAA,QACH,OAAO;AAAA,MACT;AAAA,MACA,MAAM,OAAO,YAAY,IAAI;AAAA,MAC7B,OAAO,QAAQ,iBAAiB,kBAAkB,WAAW,UAAU;AAAA,IACzE;AAAA,IACA,MAAM,QAAQ,SAAS,aAAa,OAAO,SAAS,YAAY,WAAW,OAAO,EAAE,SAAS,OAAO,IAAI,EAAE,IAAI;AAAA,IAC9G,IAAI,UAAU,aAAa,MAAM,YAAY;AAAA,MAAM,OAAO;AAAA,IAC1D,MAAM,OAAO,UAAU,YAAY,OAAO,QAAQ,IAAI,UAAU,IAAI,MAAM,OAAO;AAAA,IACjF,OAAO,QAAQ,iBAAiB,kBAAkB,WAAW,UAAU;AAAA;AAAA,EAEzE,OAAO,QAAQ,OAAO,QAAQ,EAAE,IAAI,CAAC,SAAS;AAAA,IAC5C,IAAI,OAAO,SAAS;AAAA,MAAU,OAAO;AAAA,IACrC,IAAI,WAAW;AAAA,MAAM,OAAO,YAAY,YAAY,IAAI,IAAI,UAAU,IAAI,OAAO,IAAI,CAAC;AAAA,IACtF,IAAI,WAAW;AAAA,MAAM,OAAO,KAAK,MAAM,IAAI,CAAC,SAAS,QAAQ,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG;AAAA,IAC3F,IAAI,SAAS,MAAM;AAAA,MACjB,IAAI,aAAa;AAAA,QAAW,SAAQ,4DAA4D;AAAA,MAChG,MAAM,OAAO,SAAS,YAAY,YAAY,KAAK,SAAS,SAAS,QAAQ,KAAK;AAAA,MAClF,IAAI,SAAS;AAAA,QAAW,SAAQ,sCAAsC,KAAK,SAAS;AAAA,MACpF,MAAM,MAAM,QAAQ;AAAA,MACpB,MAAM,YAAY,KAAK,QAAQ,aAAa,QAAQ,WAAW,EAAE,MAAM,SAAS,MAAM,CAAC,IACnF,IAAI,SAAS,YAAY,IAAI,OAAO,QAAQ,WAAW,EAAE,MAAM,IAAI,MAAM,CAAC;AAAA,MAC9E,OAAO,GAAG,aAAa,QAAQ,WAAW,EAAE,KAAK,CAAC;AAAA,IACpD;AAAA,IAEA,IAAI,QAAQ,iBAAiB;AAAA,MAAU,OAAO,YAAY,KAAK,SAAS,IAAI,MAAM,EAAE,KAAK,IAAI;AAAA,IAK7F,IAAI,CAAC,KAAK,SAAS,KAAK,gBAAgB,GAAG;AAAA,MACzC,OAAO,OAAO,KAAK,SAAS,OAAO,CAAC,MAAM,UAAU,iBAAiB,qBAAqB,cAAc,sBAAsB,aAAa,WAAW,cAAc,aAAa,YAAY,CAAC;AAAA,IAChM;AAAA,IACA,OAAO,MAAM,SAAS,KAAK,SAAS,IAAI,YAAY;AAAA,IAGpD,OAAO,GAAG,GAAG,SAAS,CAAC,KAAK,KAAK,GAAG,EAAE,IAAI,CAAC,SAAS,QAAQ,WAAW,EAAE,KAAK,CAAC,CAAC;AAAA,IAChF,OAAO,qBAAqB,kBAAkB,UAAU,kBAAkB,UAAU,QAAQ,UAAU,UAAU,sBAAsB,WAAW,MAAM,YAAY,SAAS;AAAA,GAC7K,EAAE,KAAK,EAAE;AAAA;AAIL,SAAS,kBAAkB,CAAC,QAA2F;AAAA,EAC5H,OAAO,UAAU,QAAQ,OAAO,QAAQ,EAAE,IAAI,CAAC,SAAe;AAAA,IAC5D,IAAI,OAAO,SAAS;AAAA,MAAU,OAAO;AAAA,IACrC,IAAI,SAAS,MAAM;AAAA,MACjB,MAAM,SAAS,OAAO,OAAO,OAAO,SAAS,KAAK,MAAM,IAAI,OAAO,QAAQ,KAAK,UAAU;AAAA,MAC1F,IAAI,WAAW;AAAA,QAAW,SAAQ,sCAAsC,KAAK,SAAS;AAAA,MACtF,OAAO,OAAO,OAAO,KAAK,MAAM,OAAO,CAAC;AAAA,IAC1C;AAAA,IACA,IAAI,cAAc;AAAA,MAAM,OAAO,OAAO,OAAO,EAAE,UAAU,OAAO,OAAO,KAAK,SAAS,IAAI,CAAC,aAAa,mBAAmB,KAAK,QAAQ,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;AAAA,IACtJ,OAAO;AAAA,GACR,CAAC;AAAA;AAIG,SAAS,UAAU,CAAC,QAA0F;AAAA,EACnH,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,MAAM,OAAO,kBAAkB,EAAE,SAAS,OAAO,SAAS,UAAU,OAAO,OAAO,UAAU,CAAC;AAAA,EAC7F,OAAO,EAAE,MAAM,QAAQ,UAAU,OAAO;AAAA;AAInC,SAAS,eAAe,CAAC,QAA4C;AAAA,EAC1E,OAAO,QAAQ,OAAO,QAAQ,EAAE,KAAK,CAAC,SAAS,OAAO,SAAS,cAC3D,SAAS,SAAQ,KAAK,QAAQ,eAAgB,cAAc,SAAQ,KAAK,SAAS,KAAK,CAAC,aAAa,gBAAgB,EAAE,SAAS,CAAC,CAAC,EAAG;AAAA;;AC7N3I,sBAAS;AAuBT,IAAM,UAAU,IAAI;AACpB,IAAM,WAAW,IAAI;AAYrB,IAAM,kBAAkB,IAAI;AAC5B,IAAM,mBAAmB,IAAI;AAC7B,uBAAuB,EAAE,OAAO,CAAC,UAAU,QAAQ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,gBAAgB,IAAI,KAAK,KAAK,iBAAiB,IAAI,KAAK,EAAE,CAAC;AAEnJ,SAAS,QAAO,CAAC,SAAwB;AAAA,EACvC,MAAM,IAAI,YAAU,EAAE,MAAM,mBAAmB,QAAQ,CAAC;AAAA;AAInD,SAAS,cAAmB,CAAC,QAAmF;AAAA,EACrH,IAAI,OAAO,OAAO,WAAW,cAAc,OAAO,OAAO,SAAS,WAAW;AAAA,IAAY,SAAQ,mDAAmD;AAAA,EACpJ,MAAM,QAAQ,OAAO,OAAO,OAAO,OAAO,IAAI,CAAC;AAAA,EAC/C,QAAQ,IAAI,OAAO,OAAO,OAAO,EAAE,QAAQ,OAAO,QAAQ,SAAS,OAAO,QAAQ,CAAC,CAAC;AAAA,EACpF,OAAO;AAAA;AAIF,SAAS,gBAAgB,CAAC,QAA+C;AAAA,EAC9E,IAAI,OAAO,OAAO,WAAW;AAAA,IAAY,SAAQ,iCAAiC;AAAA,EAClF,MAAM,UAAU,OAAO,OAAO,OAAO,OAAO,IAAI,CAAC;AAAA,EACjD,SAAS,IAAI,SAAS,OAAO,MAAM;AAAA,EACnC,OAAO;AAAA;AAIF,SAAS,UAAU,CAAC,OAA4C;AAAA,EACrE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,QAAQ,IAAI,KAAK;AAAA;AAIlE,SAAS,YAAY,CAAC,OAAqC;AAAA,EAChE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,SAAS,IAAI,KAAK;AAAA;AAInE,SAAS,kBAAkB,CAAC,OAA4D;AAAA,EAC7F,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,gBAAgB,IAAI,KAAK;AAAA;AAI1E,SAAS,oBAAoB,CAAC,OAAqD;AAAA,EACxF,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,iBAAiB,IAAI,KAAK;AAAA;AAI3E,SAAS,sBAA6C,CAAC,QAAkF;AAAA,EAC9I,MAAM,QAAQ,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAQ,qCAAqC;AAAA,EACxF,kBAAkB,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,EACzC,MAAM,QAAQ,OAAO,OAAO,OAAO,OAAO,IAAI,CAAC;AAAA,EAC/C,gBAAgB,IAAI,OAAO,KAAK,OAAO,OAAO,OAAO,OAAO,OAAO,IAAI,QAAU,CAAC;AAAA,EAClF,OAAO;AAAA;AAIF,SAAS,wBAA0C,CAAC,QAA4E;AAAA,EACrI,MAAM,SAAS,SAAS,IAAI,OAAO,KAAK,KAAK,SAAQ,mCAAmC;AAAA,EACxF,kBAAkB,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,EACzC,MAAM,QAAQ,OAAO,OAAO,OAAO,OAAO,IAAI,CAAC;AAAA,EAC/C,iBAAiB,IAAI,OAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO,IAAI,QAAU,CAAC;AAAA,EACjF,OAAO;AAAA;AAGT,SAAS,gBAAgB,CAAC,QAAyE;AAAA,EACjG,MAAM,SAAS,OAAO,MAAM,MAAM,IAAI,OAAO,OAAO;AAAA,EACpD,IAAI,WAAW;AAAA,IAAW,OAAO;AAAA,EACjC,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,0BAA0B,EAAE,WAAW,SAAS,OAAO,SAAS,OAAO,OAAO,MAAM,MAAM,CAAC;AAAA,EAC3F,MAAM,OAAO,OAAO,MAAM,OAAO,EAAE,SAAS,OAAO,SAAS,UAAU,CAAC;AAAA,EACvE,IAAI,UAAU,MAAM,IAAI,OAAO,QAAQ;AAAA,IAAa,SAAQ,0FAA0F;AAAA,EACtJ,MAAM,UAAU,2BAA2B,EAAE,UAAU,CAAC;AAAA,EACxD,MAAM,WAAW,OAAO,OAAO,EAAE,MAAM,QAAQ,CAAC;AAAA,EAChD,OAAO,MAAM,MAAM,IAAI,OAAO,SAAS,QAAQ;AAAA,EAC/C,OAAO;AAAA;AAIT,SAAS,eAAe,CAAC,QAA0D;AAAA,EACjF,QAAQ,UAAU;AAAA,EAClB,OAAO,QAAQ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,gBAAgB,IAAI,KAAK,KAAK,iBAAiB,IAAI,KAAK,KACvG,cAAc,KAAK,KAAK,WAAW,KAAK,KAAK,oBAAoB,MAAM;AAAA;AAG9E,SAAS,YAAY,CAAC,QAA0F;AAAA,EAC9G,QAAQ,UAAU,OAAO;AAAA,EACzB,OAAO,sBAAsB,EAAE,SAAS,OAAO,SAAS,SAAS,QAAQ,OAAO,QAAQ,UAAU,CAAC,UAAU,gBAAgB,EAAE,OAAO,MAAM,CAAC,EAAE,CAAC;AAAA;AAI3I,SAAS,uBAA8C,CAAC,QAAsI;AAAA,EACnM,MAAM,QAAQ,gBAAgB,IAAI,OAAO,KAAK,KAAK,SAAQ,8CAA8C;AAAA,EACzG,MAAM,WAAW,iBAAiB,EAAE,SAAS,OAAO,SAAS,MAAM,CAAC;AAAA,EACpE,OAAO,EAAE,MAAM,SAAS,MAAM,QAAQ,aAAa,EAAE,UAAU,OAAO,QAAQ,OAAO,OAAO,CAAC,GAAG,SAAS,MAAM,QAAkC;AAAA;AAI5I,SAAS,yBAA2C,CAAC,QAAgI;AAAA,EAC1L,MAAM,QAAQ,iBAAiB,IAAI,OAAO,KAAK,KAAK,SAAQ,4CAA4C;AAAA,EACxG,MAAM,WAAW,iBAAiB,EAAE,SAAS,OAAO,SAAS,MAAM,CAAC;AAAA,EACpE,OAAO,EAAE,MAAM,SAAS,MAAM,QAAQ,aAAa,EAAE,UAAU,OAAO,QAAQ,OAAO,OAAO,CAAC,EAAE;AAAA;AAI1F,SAAS,eAAoB,CAAC,QAA8E;AAAA,EACjH,MAAM,QAAQ,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAQ,qCAAqC;AAAA,EACxF,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,MAAM,OAAO,MAAM,OAAO,EAAE,SAAS,OAAO,SAAS,UAAU,CAAC;AAAA,EAChE,IAAI,UAAU,OAAO,SAAS,OAAO,QAAQ;AAAA,IAAa,SAAQ,0FAA0F;AAAA,EAC5J,OAAO,EAAE,MAAM,QAAQ,UAAU,QAAQ,SAAS,MAAM,QAAkC;AAAA;AAIrF,SAAS,iBAAiB,CAAC,QAAyF;AAAA,EACzH,MAAM,SAAS,SAAS,IAAI,OAAO,KAAK,KAAK,SAAQ,mCAAmC;AAAA,EACxF,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,MAAM,OAAO,OAAO,EAAE,SAAS,OAAO,SAAS,UAAU,CAAC;AAAA,EAC1D,IAAI,UAAU,OAAO,SAAS,OAAO,QAAQ;AAAA,IAAa,SAAQ,4FAA4F;AAAA,EAC9J,OAAO,EAAE,MAAM,QAAQ,UAAU,OAAO;AAAA;;ACxJ1C,sBAAS,kCAAW,kCAAmB,sCAAY;;;AC6BnD,sBAAS,kGAAuE;AAoBzE,SAAS,eAAe,CAAC,QASrB;AAAA,EACT,4BAA4B,EAAE,WAAW,OAAO,WAAW,SAAS,OAAO,QAAQ,MAAM,OAAO,OAAO,MAAM,CAAC;AAAA,EAC9G,IAAI,OAAO,UAAU,wBAAwB,CAAC,OAAO,QAAQ,aAAa;AAAA,IAAsB,MAAM,uBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,uBAAuB,CAAC;AAAA,EAC7L,IAAI,OAAO,UAAU,oBAAoB,CAAC,OAAO,QAAQ,aAAa,gBAAgB;AAAA,IACpF,MAAM,uBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,iBAAiB,CAAC;AAAA,EACzF;AAAA,EACA,MAAM,UAAyB;AAAA,IAC7B,OAAO,OAAO;AAAA,IACd,SAAS,OAAO;AAAA,IAChB,OAAO,OAAO,SAAS,CAAC;AAAA,IACxB,OAAO,OAAO;AAAA,IACd,MAAM,OAAO;AAAA,EACf;AAAA,EACA,OAAO,WAAW,EAAE,MAAM,OAAO,WAAW,QAAQ,CAAC;AAAA;AAcvD,IAAM,aAA4D;AAAA,EAChE,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AACV;AAEA,IAAM,iBAAmD;AAAA,EACvD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AACP;AAGA,IAAM,gBAAwB;AAE9B,IAAM,gBAAwB;AAE9B,IAAM,YAAY,CAAC;AACnB,IAAM,YAAY;AAClB,IAAM,YAAY,EAAE,MAAM;AAC1B,IAAM,YAAY,MAAM,MAAM;AAE9B,SAAS,OAAM,CAAC,QAKN;AAAA,EACR,QAAQ,SAAS,MAAM,YAAY;AAAA,EACnC,MAAM,IAAI,YAAU;AAAA,IAClB,MAAM;AAAA,IACN,SAAS,GAAG,QAAQ,YAAY,QAAQ,MAAM,UAAU;AAAA,IACxD,MAAM,EAAE,MAAM,OAAO,QAAQ,MAAM,MAAM,MAAM,QAAQ,SAAU,OAAO,QAAQ,CAAC,EAAG;AAAA,EACtF,CAAC;AAAA;AAIH,SAAS,WAAW,CAAC,QAA4F;AAAA,EAC/G,QAAQ,MAAM,QAAQ,YAAY;AAAA,EAElC,KAAK,KAAK,SAAS,SAAS,KAAK,SAAS,SAAS,KAAK,SAAS,WAAW,GAAG;AAAA,IAC7E,OAAO,YAAY,EAAE,MAAM,KAAK,SAAS,IAAK,QAAQ,QAAQ,CAAC;AAAA,EACjE;AAAA,EACA,MAAM,OAAO,WAAW,EAAE,MAAM,QAAQ,CAAC;AAAA,EACzC,OAAO,WAAW,KAAK,QAAQ,WAAW,UAAU,IAAI,UAAU;AAAA;AAGpE,SAAS,UAAU,CAAC,QAA+D;AAAA,EACjF,QAAQ,MAAM,YAAY;AAAA,EAE1B,QAAQ,KAAK;AAAA,SACN;AAAA,SACA,MAAM;AAAA,MACT,IAAI,KAAK,SAAS,WAAW,GAAG;AAAA,QAC9B,QAAO;AAAA,UACL;AAAA,UACA,MAAM;AAAA,UACN,SAAS,GAAG,KAAK,SAAS,QAAQ,UAAU;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,MACA,IAAI,KAAK,SAAS,WAAW;AAAA,QAAG,OAAO,WAAW,EAAE,MAAM,KAAK,SAAS,IAAK,QAAQ,CAAC;AAAA,MACtF,MAAM,YAAY,KAAK,SAAS,QAAQ,UAAU;AAAA,MAClD,OAAO,KAAK,SACT,IAAI,CAAC,YAAY,YAAY,EAAE,MAAM,SAAS,QAAQ,KAAK,MAAM,QAAQ,CAAC,CAAC,EAC3E,KAAK,SAAS;AAAA,IACnB;AAAA,SAEK;AAAA,MACH,OAAO,OAAO,YAAY,EAAE,MAAM,KAAK,SAAS,QAAQ,OAAO,QAAQ,CAAC;AAAA,SAErE;AAAA,MACH,OAAO,YAAY,WAAW,EAAE,MAAM,KAAK,SAAS,QAAQ,CAAC;AAAA,SAE1D,UAAU;AAAA,MAGb,MAAM,QAAQ,aAAa,EAAE,MAAM,KAAK,MAAM,MAAM,SAAS,UAAU,KAAK,CAAC;AAAA,MAC7E,OAAO,GAAG,YAAY,EAAE,OAAO,QAAQ,CAAC,QAAQ,KAAK,WAAW,OAAO,aAAa;AAAA,IACtF;AAAA,SAEK,WAAW;AAAA,MACd,MAAM,OAAO,iBAAiB,EAAE,YAAY,KAAK,MAAM,QAAQ,CAAC;AAAA,MAChE,MAAM,QAAQ,cAAc,EAAE,SAAS,KAAK,OAAO,OAAO,KAAK,OAAO,QAAQ,CAAC;AAAA,MAC/E,OAAO,GAAG,KAAK,QAAQ,eAAe,KAAK,OAAO;AAAA,IACpD;AAAA,SAEK,UAAU;AAAA,MACb,IAAI,KAAK,OAAO,WAAW,GAAG;AAAA,QAC5B,QAAO;AAAA,UACL;AAAA,UACA,MAAM;AAAA,UACN,SAAS,WAAW,KAAK,MAAM;AAAA,UAC/B,MAAM,EAAE,OAAO,KAAK,MAAM,KAAK;AAAA,QACjC,CAAC;AAAA,MACH;AAAA,MACA,MAAM,QAAQ,aAAa,EAAE,MAAM,KAAK,MAAM,MAAM,QAAQ,CAAC;AAAA,MAC7D,MAAM,SAAS,KAAK,OACjB,IAAI,CAAC,UAAU,cAAc,EAAE,OAAO,OAAO,QAAQ,CAAC,CAAC,EACvD,KAAK,IAAI;AAAA,MACZ,OAAO,GAAG,cAAc,EAAE,OAAO,QAAQ,CAAC,KAAK,KAAK,WAAW,OAAO,WAAW,SAAS;AAAA,IAC5F;AAAA;AAAA;AAOJ,SAAS,YAAY,CAAC,QAA+E;AAAA,EACnG,QAAQ,MAAM,YAAY;AAAA,EAC1B,MAAM,QAAQ,QAAQ,MAAM,OAAO,KAAK,CAAC,cAAc,UAAU,SAAS,IAAI;AAAA,EAE9E,IAAI,UAAU,WAAW;AAAA,IACvB,QAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,SAAS,qBAAqB;AAAA,MAC9B,MAAM,EAAE,OAAO,KAAK;AAAA,IACtB,CAAC;AAAA,EACH;AAAA,EACA,IAAI,MAAM,QAAQ;AAAA,IAChB,QAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,SAAS,yBAAyB;AAAA,MAClC,MAAM,EAAE,OAAO,KAAK;AAAA,IACtB,CAAC;AAAA,EACH;AAAA,EACA,IAAI,MAAM,kBAAkB,MAAM;AAAA,IAChC,QAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,SAAS,eAAe,0BAA0B,MAAM,cAAc;AAAA,MACtE,MAAM,EAAE,OAAO,KAAK;AAAA,IACtB,CAAC;AAAA,EACH;AAAA,EACA,IAAI,OAAO,aAAa,SAAS,MAAM,SAAS,UAAU,MAAM,SAAS,UAAU;AAAA,IACjF,QAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,SAAS,cAAc,MAAM,gBAAgB,gBAAW,MAAM;AAAA,MAC9D,MAAM,EAAE,OAAO,MAAM,MAAM,MAAM,KAAK;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAKA,IACE,QAAQ,UAAU,WAClB,QAAQ,QAAQ,SAAS,WACzB,MAAM,SAAS,SAAS,iBACxB;AAAA,IACA,MAAM,uBAAsB;AAAA,MAC1B,SAAS;AAAA,MACT,SAAS,uDAAuD,QAAQ,MAAM,QAAQ;AAAA,MACtF,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA,EAEA,OAAO;AAAA;AAIT,SAAS,WAAW,CAAC,QAA4D;AAAA,EAC/E,QAAQ,OAAO,YAAY;AAAA,EAC3B,OAAO,QAAQ,QAAQ,WAAW,EAAE,MAAM,MAAM,UAAU,MAAM,KAAK,CAAC;AAAA;AAYxE,SAAS,aAAa,CAAC,QAA4D;AAAA,EACjF,QAAQ,OAAO,YAAY;AAAA,EAC3B,MAAM,SAAS,YAAY,EAAE,OAAO,QAAQ,CAAC;AAAA,EAC7C,OAAO,QAAQ,QAAQ,SAAS,YAAY,MAAM,SAAS,YACvD,QAAQ,oBACR;AAAA;AAKN,SAAS,gBAAgB,CAAC,QAAyH;AAAA,EACjJ,QAAQ,YAAY,YAAY;AAAA,EAChC,IAAI,WAAW,SAAS,SAAS;AAAA,IAC/B,MAAM,QAAQ,aAAa,EAAE,MAAM,WAAW,MAAM,QAAQ,CAAC;AAAA,IAC7D,OAAO,EAAE,MAAM,cAAc,EAAE,OAAO,QAAQ,CAAC,GAAG,MAAM;AAAA,EAC1D;AAAA,EACA,IAAI,WAAW,SAAS,YAAY;AAAA,IAClC,MAAM,QAAQ,aAAa,EAAE,MAAM,WAAW,MAAM,MAAM,SAAS,UAAU,KAAK,CAAC;AAAA,IACnF,IAAI,MAAM,SAAS;AAAA,MAAQ,QAAO,EAAE,SAAS,MAAM,2BAA2B,SAAS,+CAA+C,MAAM,QAAQ,CAAC;AAAA,IACrJ,IAAI,CAAC,MAAM,QAAQ,WAAW,IAAI,KAAK,MAAM,KAAK,WAAW,IAAI,EAAE,KAAK,CAAC,YAAqB,OAAO,YAAY,YAAY,QAAQ,SAAS,MAAQ,CAAC,GAAG;AAAA,MACxJ,QAAO,EAAE,SAAS,MAAM,uBAAuB,SAAS,yDAAyD,CAAC;AAAA,IACpH;AAAA,IACA,MAAM,OAAO,WAAW,KAAK,IAAI,CAAC,UAAU,QAAQ,QAAQ,mBAAmB,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,IACpG,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,OAAO,QAAQ,CAAC,eAAe,kBAAkB,OAAO,KAAK,OAAO,MAAM,SAAS,EAAE;AAAA,EACxH;AAAA,EACA,MAAM,QAAQ,iBAAiB,EAAE,YAAY,WAAW,YAAY,QAAQ,CAAC;AAAA,EAC7E,IAAI,MAAM,MAAM,SAAS;AAAA,IAAU,QAAO,EAAE,SAAS,MAAM,2BAA2B,SAAS,oCAAoC,CAAC;AAAA,EACpI,OAAO,EAAE,MAAM,UAAU,MAAM,SAAS,OAAO,KAAK,MAAM,OAAO,MAAM,MAAM,EAAE;AAAA;AAGjF,SAAS,aAAa,CAAC,QAIZ;AAAA,EACT,QAAQ,SAAS,OAAO,YAAY;AAAA,EACpC,IAAI,QAAQ,SAAS;AAAA,IAAS,OAAO,cAAc,EAAE,OAAO,SAAS,OAAO,QAAQ,CAAC;AAAA,EAErF,MAAM,QAAQ,iBAAiB,EAAE,YAAY,SAAS,QAAQ,CAAC;AAAA,EAC/D,MAAM,WAAW,kBAAkB,EAAE,MAAM,MAAM,KAAK,CAAC;AAAA,EACvD,MAAM,YAAY,kBAAkB,EAAE,MAAM,MAAM,MAAM,KAAK,CAAC;AAAA,EAC9D,IAAI,aAAa,WAAW;AAAA,IAC1B,QAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,SAAS,aAAa,MAAM,UAAU,mBAAmB,MAAM,MAAM,UAAU;AAAA,MAC/E,MAAM,EAAE,OAAO,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,WAAW,UAAU,WAAW,UAAU;AAAA,IAChG,CAAC;AAAA,EACH;AAAA,EACA,OAAO,MAAM;AAAA;AAIf,SAAS,aAAa,CAAC,QAIZ;AAAA,EACT,QAAQ,OAAO,YAAY;AAAA,EAC3B,QAAQ,UAAU,OAAO;AAAA,EACzB,MAAM,OAAO,MAAM;AAAA,EAEnB,MAAM,eAAe,CAAC,aACpB,QAAO;AAAA,IACL;AAAA,IACA,MAAM;AAAA,IACN,SAAS,YAAY,kBAAkB,EAAE,KAAK,CAAC,YAAY,MAAM,cAAc,SAAS,EAAE,MAAM,CAAC,YAAO;AAAA,IACxG,MAAM,EAAE,OAAO,MAAM,MAAM,WAAW,kBAAkB,EAAE,KAAK,CAAC,GAAG,MAAM;AAAA,EAC3E,CAAC;AAAA,EAEH,IAAI,WAAW,IAAI,GAAG;AAAA,IACpB,IAAI,OAAO,UAAU;AAAA,MAAU,OAAO,aAAa,QAAQ,KAAK,gDAAgD;AAAA,IAChH,MAAM,WAAW,QAAQ,MAAM,KAAK,CAAC,UAAU,MAAM,SAAS,KAAK,IAAI;AAAA,IACvE,IAAI,aAAa,aAAa,CAAC,SAAS,OAAO,SAAS,KAAK,GAAG;AAAA,MAC9D,QAAO;AAAA,QACL;AAAA,QACA,MAAM;AAAA,QACN,SAAS,aAAa,MAAM,eAAe,yCAAyC,KAAK,SAAS,SAAS,OAAO,KAAK,IAAI;AAAA,QAC3H,MAAM,EAAE,OAAO,MAAM,MAAM,MAAM,KAAK,MAAM,OAAO,SAAS,CAAC,GAAG,SAAS,MAAM,EAAE;AAAA,MACnF,CAAC;AAAA,IACH;AAAA,IACA,OAAO,cAAc,EAAE,OAAO,SAAS,MAAM,CAAC;AAAA,EAChD;AAAA,EAEA,QAAQ;AAAA,SACD;AAAA,MACH,IAAI,OAAO,UAAU;AAAA,QAAU,OAAO,aAAa,wCAAwC;AAAA,MAC3F,OAAO,cAAc,EAAE,OAAO,SAAS,MAAM,CAAC;AAAA,SAE3C;AAAA,MACH,IAAI,OAAO,UAAU;AAAA,QAAW,OAAO,aAAa,0CAA0C;AAAA,MAC9F,OAAO,QAAQ,QAAQ,QAAQ,eAAe,OAAO,QAAQ,QAAQ,eAAe;AAAA,SAEjF;AAAA,MACH,OAAO,eAAe,EAAE,OAAO,OAAO,SAAS,KAAK,WAAW,KAAK,WAAW,OAAO,MAAM,CAAC;AAAA,SAE1F;AAAA,MACH,OAAO,eAAe,EAAE,OAAO,OAAO,SAAS,KAAK,WAAW,KAAK,WAAW,OAAO,SAAS,CAAC;AAAA,SAE7F,SAAS;AAAA,MACZ,IAAI,OAAO,UAAU;AAAA,QAAU,OAAO,aAAa,+BAA+B;AAAA,MAClF,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAAA,QAC3B,QAAO;AAAA,UACL;AAAA,UACA,MAAM;AAAA,UACN,SAAS,aAAa,MAAM,cAAc,OAAO,KAAK;AAAA,UACtD,MAAM,EAAE,OAAO,MAAM,MAAM,OAAO,OAAO,KAAK,EAAE;AAAA,QAClD,CAAC;AAAA,MACH;AAAA,MACA,OAAO,OAAO,KAAK;AAAA,IACrB;AAAA,SAEK,WAAW;AAAA,MAKd,IAAI,OAAO,UAAU,UAAU;AAAA,QAC7B,OAAO,aAAa,2GAA0G;AAAA,MAChI;AAAA,MACA,IAAI,CAAC,cAAc,KAAK,KAAK,GAAG;AAAA,QAC9B,QAAO;AAAA,UACL;AAAA,UACA,MAAM;AAAA,UACN,SAAS,aAAa,MAAM,eAAe;AAAA,UAC3C,MAAM,EAAE,OAAO,MAAM,MAAM,MAAM;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,MACA,OAAO;AAAA,IACT;AAAA,SAEK;AAAA,MAMH,QAAO;AAAA,QACL;AAAA,QACA,MAAM;AAAA,QACN,SAAS,4BAA4B,MAAM;AAAA,QAC3C,MAAM,EAAE,OAAO,MAAM,KAAK;AAAA,MAC5B,CAAC;AAAA,SAEE;AAAA,SACA;AAAA,MAGH,OAAO,aAAa,GAAG,wCAAwC;AAAA;AAAA;AAIrE,SAAS,cAAc,CAAC,QAOb;AAAA,EACT,QAAQ,OAAO,OAAO,SAAS,KAAK,KAAK,UAAU;AAAA,EAEnD,IAAI;AAAA,EACJ,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,IAAI,CAAC,OAAO,cAAc,KAAK,GAAG;AAAA,MAChC,QAAO;AAAA,QACL;AAAA,QACA,MAAM;AAAA,QACN,SAAS,aAAa,MAAM,cAAc,OAAO,KAAK,eAAU;AAAA,QAChE,MAAM,EAAE,OAAO,MAAM,MAAM,OAAO,OAAO,KAAK,EAAE;AAAA,MAClD,CAAC;AAAA,IACH;AAAA,IACA,OAAO,OAAO,KAAK;AAAA,EACrB,EAAO,SAAI,OAAO,UAAU,UAAU;AAAA,IACpC,IAAI,CAAC,cAAc,KAAK,KAAK,GAAG;AAAA,MAC9B,QAAO;AAAA,QACL;AAAA,QACA,MAAM;AAAA,QACN,SAAS,aAAa,MAAM,eAAe;AAAA,QAC3C,MAAM,EAAE,OAAO,MAAM,MAAM,MAAM;AAAA,MACnC,CAAC;AAAA,IACH;AAAA,IACA,OAAO;AAAA,EACT,EAAO;AAAA,IACL,QAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,SAAS,YAAY,gBAAgB,MAAM,cAAc,SAAS,EAAE,MAAM,CAAC,eAAU;AAAA,MACrF,MAAM,EAAE,OAAO,MAAM,MAAM,MAAM;AAAA,IACnC,CAAC;AAAA;AAAA,EAGH,MAAM,SAAS,OAAO,IAAI;AAAA,EAC1B,IAAI,SAAS,OAAO,SAAS,KAAK;AAAA,IAChC,QAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,SAAS,aAAa,MAAM,cAAc,uCAAuC,0BAA0B,YAAO;AAAA,MAClH,MAAM,EAAE,OAAO,MAAM,MAAM,OAAO,KAAK;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,aAAa,CAAC,QAA2E;AAAA,EAChG,QAAQ,OAAO,SAAS,UAAU;AAAA,EAIlC,IAAI,MAAM,SAAS,MAAQ,GAAG;AAAA,IAC5B,QAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,SAAS,aAAa,MAAM;AAAA,MAC5B,MAAM,EAAE,OAAO,MAAM,KAAK;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EACA,OAAO,QAAQ,QAAQ,mBAAmB,EAAE,MAAM,CAAC;AAAA;AAGrD,SAAS,QAAQ,CAAC,QAAoC;AAAA,EACpD,QAAQ,UAAU;AAAA,EAClB,OAAO,OAAO,UAAU,WAAW,cAAc,KAAK,UAAU,KAAK,MAAM,OAAO,OAAO,SAAS,OAAO,KAAK;AAAA;;;ADtehH,SAAS,QAAO,CAAC,MAAqB;AAAA,EACpC,MAAM,IAAI,YAAU,EAAE,MAAM,uBAAuB,SAAS,iCAAiC,QAAQ,MAAM,EAAE,MAAM,aAAa,OAAO,EAAE,CAAC;AAAA;AAIrI,SAAS,gBAAgB,CAAC,QAAiH;AAAA,EAChJ,QAAQ,WAAW,MAAM,OAAO,YAAY;AAAA,EAC5C,IAAI,CAAC,QAAQ,aAAa;AAAA,IAAsB,MAAM,wBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,uBAAuB,CAAC;AAAA,EACtI,IAAI,CAAC,KAAK,QAAQ,KAAK,KAAK,SAAS,MAAI;AAAA,IAAG,SAAQ,MAAM;AAAA,EAC1D,IAAI,CAAC,CAAC,aAAa,WAAW,WAAW,EAAE,SAAS,KAAK,MAAM,IAAI;AAAA,IAAG,SAAQ,YAAY;AAAA,EAC1F,IAAI,CAAC,CAAC,MAAM,MAAM,MAAM,IAAI,EAAE,SAAS,KAAK,MAAM,MAAM;AAAA,IAAG,SAAQ,QAAQ;AAAA,EAC3E,MAAM,QAAQ,CAAC,SAA0B;AAAA,IACvC,MAAM,QAAQ,MAAM,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,IAAI;AAAA,IAC9D,IAAI,UAAU,aAAa,MAAM,UAAU,MAAM;AAAA,MAAe,SAAQ,OAAO;AAAA,IAC/E,OAAO;AAAA;AAAA,EAET,MAAM,WAAW,CAAC,UAAqC;AAAA,IACrD,IAAI,eAAe;AAAA,MAAO,OAAO;AAAA,IACjC,MAAM,WAAW,cAAc,QAAQ,MAAM,WAAW,MAAM;AAAA,IAC9D,IAAI,aAAa,cAAc,KAAK,MAAM,SAAS,eAAe,CAAC,CAAC,YAAY,WAAW,EAAE,SAAS,QAAQ;AAAA,MAAI,SAAQ,UAAU;AAAA,IACpI,MAAM,UAAU,aAAa,YAAY,YAAY,GAAG,QAAQ,mBAAmB,EAAE,OAAO,SAAS,CAAC,MAAM,KAAK,MAAM,SAAS,YAAY,cAAc;AAAA,IAC1J,IAAI,cAAc;AAAA,MAAO,OAAO;AAAA,IAChC,MAAM,SAAS,MAAM,MAAM,KAAK;AAAA,IAChC,IAAI,mBAAkB,EAAE,MAAM,OAAO,KAAK,CAAC,OAAO,KAAK,MAAM,SAAS,cAAc,WAAW;AAAA,MAAa,SAAQ,kBAAkB;AAAA,IACtI,IAAI,OAAO,SAAS,YAAY;AAAA,MAC9B,MAAM,WAAW,yCAAyC,KAAK,OAAO,cAAc,aAAa;AAAA,MACjG,IAAI,cAAc,KAAK,MAAM,SAAS;AAAA,QAAc,SAAQ,gBAAgB;AAAA,IAC9E;AAAA,IACA,MAAM,MAAM,QAAQ,WAAW,EAAE,MAAM,OAAO,UAAU,OAAO,KAAK,CAAC;AAAA,IACrE,OAAO,YAAY,YAAY,MAAM,YAAY,QAAQ;AAAA;AAAA,EAE3D,MAAM,OAAO,KAAK,KAAK,IAAI,CAAC,QAAQ;AAAA,IAClC,IAAI,gBAAgB,KAAK;AAAA,MACvB,IAAI,CAAC,IAAI,WAAW,KAAK,KAAK,IAAI,WAAW,SAAS,MAAI,KAAK,IAAI,OAAO,WAAW;AAAA,QAAG,SAAQ,YAAY;AAAA,MAC5G,IAAI,OAAO,QAAQ,KAAK;AAAA,MACxB,OAAO,IAAI,IAAI;AAAA,IACjB;AAAA,IACA,MAAM,SAAS,MAAM,IAAI,KAAK;AAAA,IAC9B,IAAI,OAAO;AAAA,MAAY,SAAQ,kCAAkC;AAAA,IACjE,IAAI,CAAC,YAAW,OAAO,IAAI,KAAK,CAAC,CAAC,UAAU,OAAO,UAAU,SAAS,WAAW,WAAW,UAAU,EAAE,SAAS,mBAAkB,EAAE,MAAM,OAAO,KAAK,CAAC,CAAC;AAAA,MAAG,SAAQ,UAAU;AAAA,IAC9K,OAAO,GAAG,QAAQ,WAAW,EAAE,MAAM,OAAO,UAAU,OAAO,KAAK,CAAC;AAAA,GACpE;AAAA,EACD,KAAK,KAAK,GAAG,KAAK,MAAM,QAAQ,SAAS,KAAK,MAAM,KAAK,MAAM,SAAS,KAAK,MAAM,KAAK,MAAM,QAAQ,mBAAmB,EAAE,OAAO,KAAK,MAAM,OAAO,CAAC,YAAY;AAAA,EACjK,MAAM,QAAQ,KAAK,UAAU,YAAY,KAAK,WAAW,gBAAgB,EAAE,WAAW,KAAK,OAAO,OAAO,SAAS,OAAO,sBAAsB,MAAM,KAAK,KAAK,CAAC;AAAA,EAChK,OAAO,EAAE,MAAM,KAAK,MAAM,YAAY,uBAAuB,KAAK,KAAK,IAAI,KAAK,SAAS,QAAQ,MAAM,oBAAoB,KAAK,KAAK,WAAW,IAAI,CAAC,IAAI,QAAQ,aAAa,oBAAoB;AAAA;AAI7L,SAAS,oBAAoB,CAAC,QAAmE;AAAA,EACtG,IAAI,CAAC,OAAO,QAAQ,aAAa;AAAA,IAAsB,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,uBAAuB,CAAC;AAAA,EACpJ,OAAO,OAAO,UAAU,mBAAmB,IAAI,CAAC,SAAS,kCAAkC,OAAO,QAAQ,WAAW,EAAE,KAAK,CAAC,IAAI;AAAA;AAG5H,SAAS,kBAAkB,CAAC,QAA6G;AAAA,EAC9I,QAAQ,SAAS,OAAO,WAAW,cAAc;AAAA,EACjD,IAAI,CAAC,QAAQ,aAAa;AAAA,IAAsB,MAAM,wBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,uBAAuB,CAAC;AAAA,EACtI,MAAM,SAAS,eAAe,QAAQ,WAAW,EAAE,MAAM,MAAM,CAAC;AAAA,EAChE,IAAI,cAAc;AAAA,IAAQ,OAAO,CAAC,GAAG,0BAA0B,QAAQ,WAAW,EAAE,MAAM,UAAU,KAAK,CAAC,IAAI;AAAA,EAC9G,OAAO,CAAC,GAAG,qBAAqB,EAAE,SAAS,UAAU,CAAC,GAAG,GAAG,yBAAyB,QAAQ,WAAW,EAAE,MAAM,UAAU,KAAK,CAAC,KAAK,UAAU,aAAa;AAAA;AAIvJ,SAAS,sBAAsB,CAAC,QAA6E;AAAA,EAClH,QAAQ,SAAS,UAAU;AAAA,EAC3B,IAAI,CAAC,QAAQ,aAAa;AAAA,IAAsB,MAAM,wBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,uBAAuB,CAAC;AAAA,EACtI,MAAM,QAAQ,UAAU,YAAY,eAAe,QAAQ,mBAAmB,EAAE,OAAO,OAAO,aAAa,SAAS,CAAC,MAAM,WAAW,QAAQ,mBAAmB,EAAE,OAAO,MAAM,CAAC;AAAA,EACjL,OAAO,maAAma;AAAA;AAIra,SAAS,oBAAoB,CAAC,QAAiH;AAAA,EACpJ,QAAQ,SAAS,OAAO,OAAO,eAAe;AAAA,EAC9C,IAAI,CAAC,QAAQ,aAAa;AAAA,IAAsB,MAAM,wBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,uBAAuB,CAAC;AAAA,EACtI,OAAO,CAAC,qBAAqB,QAAQ,WAAW,EAAE,MAAM,MAAM,CAAC,WAAW,QAAQ,WAAW,EAAE,MAAM,OAAO,aAAa,SAAS,CAAC,KAAK,QAAQ,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,eAAe,QAAQ,WAAW,EAAE,MAAM,MAAM,CAAC,oBAAoB,QAAQ,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC,KAAK,YAAY;AAAA;;AE+MjT,IAAM,gBAAmC,CAAC,aAAa,aAAa,YAAY,QAAQ;AAGjF,SAAS,cAAc,CAAC,OAAuC;AAAA,EACpE,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO;AAAA,EAChF,MAAM,OAAO,OAAO,KAAK,KAAK;AAAA,EAC9B,IAAI,CAAC,KAAK,SAAS,MAAM,KAAK,CAAC,KAAK,SAAS,OAAO;AAAA,IAAG,OAAO;AAAA,EAC9D,MAAM,YAAY;AAAA,EAClB,IAAI,KAAK,WAAW,KAAK,EAAE,KAAK,WAAW,KAAK,KAAK,SAAS,aAAa,KAAK,UAAU,gBAAgB;AAAA,IAAY,OAAO;AAAA,EAC7H,OACE,OAAO,UAAU,SAAS,YAC1B,cAAc,SAAS,UAAU,IAAI,MACnC,OAAO,UAAU,UAAU,YAAY,OAAO,SAAS,UAAU,KAAK,KACtE,OAAO,UAAU,UAAU,YAAY,OAAO,UAAU,UAAU;AAAA;AAkBxE,IAAM,qBAAwC,CAAC,UAAU,QAAQ;AAG1D,SAAS,kBAAkB,CAAC,OAA2C;AAAA,EAC5E,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO;AAAA,EAChF,MAAM,OAAO,OAAO,KAAK,KAAK;AAAA,EAC9B,IAAI,KAAK,WAAW,KAAK,CAAC,KAAK,SAAS,UAAU,KAAK,CAAC,KAAK,SAAS,OAAO;AAAA,IAAG,OAAO;AAAA,EACvF,MAAM,YAAY;AAAA,EAClB,OAAO,OAAO,UAAU,aAAa,YAAY,mBAAmB,SAAS,UAAU,QAAQ;AAAA;AAkB1F,SAAS,WAAW,CAAC,QAAgD;AAAA,EAC1E,OAAO,EAAE,SAAS,MAAM,eAAe,OAAO,cAAc;AAAA;AAIvD,SAAS,aAAa,CAAC,OAAsC;AAAA,EAClE,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO;AAAA,EAChF,MAAM,OAAO,OAAO,KAAK,KAAK;AAAA,EAC9B,IAAI,KAAK,WAAW,KAAK,CAAC,KAAK,SAAS,SAAS,KAAK,CAAC,KAAK,SAAS,eAAe;AAAA,IAAG,OAAO;AAAA,EAC9F,MAAM,YAAY;AAAA,EAClB,OACE,UAAU,YAAY,QACtB,OAAO,UAAU,kBAAkB,YACnC,OAAO,SAAS,UAAU,aAAa;AAAA;AA0QpC,IAAM,mBAAoD,OAAO,OAAO,EAAE,cAAc,KAAK,CAAC;AAG9F,SAAS,gBAAgB,CAAC,OAAyB;AAAA,EACxD,OAAO,UAAU;AAAA;AAyBZ,SAAS,aAAa,CAAC,QAA2D;AAAA,EACvF,OAAO,OAAO,YAAY,SAAS,EAAE,aAAa,MAAM,MAAM,OAAO,MAAM,SAAS,OAAO,IAAI,EAAE,aAAa,MAAM,MAAM,OAAO,KAAK;AAAA;AAIjI,SAAS,eAAe,CAAC,OAAwC;AAAA,EACtE,OACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAoC,gBAAgB;AAAA;AAelD,SAAS,WAAW,CAAC,QAAyC;AAAA,EACnE,OAAO,EAAE,YAAY,MAAM,QAAQ,OAAO,OAAO;AAAA;AAI5C,SAAS,aAAa,CAAC,OAAsC;AAAA,EAClE,OACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAmC,eAAe;AAAA;AAiBhD,SAAS,mBAAmB,CAAC,QAAiC;AAAA,EACnE,OAAO,OAAO,WAAW,WAAW,SAAS,OAAO;AAAA;AAiJ/C,IAAM,8BAAsC;AAc5C,SAAS,aAAa,CAAC,QAAyD;AAAA,EACrF,OAAO,EAAE,cAAc,MAAM,MAAM,OAAO,MAAM,QAAQ,OAAO,OAAO;AAAA;AAIjE,SAAS,eAAe,CAAC,OAAwC;AAAA,EACtE,OACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAqC,iBAAiB;AAAA;AA0IpD,IAAM,oBAA4B;AAGlC,IAAM,2BAAmC;AAQzC,SAAS,cAAc,CAAC,QAAgE;AAAA,EAC7F,QAAQ,SAAS,UAAU;AAAA,EAC3B,IAAI,UAAU;AAAA,IAAI;AAAA,EAClB,SAAS,QAAQ,QAAQ,QAAQ,iBAAiB,EAAG,SAAS,GAAG,QAAQ,QAAQ,QAAQ,mBAAmB,QAAQ,CAAC,GAAG;AAAA,IACtH,MAAM,OAAO,QAAQ,MAAM,QAAQ,kBAAkB,MAAM;AAAA,IAC3D,MAAM,QAAQ,sBAAsB,KAAK,IAAI;AAAA,IAC7C,IAAI,UAAU,QAAQ,KAAK,WAAW,GAAG,UAAU,MAAM,GAAG,MAAM;AAAA,MAAG,OAAO,MAAM;AAAA,EACpF;AAAA,EACA;AAAA;;ACv/BF,iDAAwB;AAexB,IAAM,iBAGF,OAAO,OAAO;AAAA,EAChB,WAAW,OAAO,OAAO;AAAA,IACvB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,OAAO;AAAA,IACP,UAAU;AAAA,EACZ,CAAC;AAAA,EACD,MAAM,OAAO,OAAO,EAAE,MAAM,IAAI,QAAQ,WAAW,YAAY,eAAe,CAAC;AACjF,CAAC;AAGM,SAAS,eAAe,CAAC,QAAmC;AAAA,EACjE,QAAQ,UAAU,SAAS,OAAO;AAAA,EAClC,OAAO,GAAG,eAAe,UAAU,YAAY,eAAe,KAAK;AAAA;AAa9D,SAAS,mBAAmB,CAAC,QAA+D;AAAA,EACjG,QAAQ,SAAS,SAAS;AAAA,EAC1B,MAAM,SAAS,QAAQ;AAAA,EACvB,IAAI,WAAW,MAAM;AAAA,IACnB,IAAI,KAAK,aAAa,YAAY,KAAK,SAAS;AAAA,MAAQ,OAAO;AAAA,IAC/D,MAAM,wBAAsB;AAAA,MAC1B,SAAS,QAAQ;AAAA,MACjB,SAAS,KAAK,gBAAgB,EAAE,KAAK,CAAC;AAAA,MACtC,MAAM,GAAG,QAAQ;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EACA,MAAM,eAAe,OAAO,UAAU,KAAK;AAAA,EAC3C,IAAI,iBAAiB,WAAW;AAAA,IAC9B,MAAM,wBAAsB;AAAA,MAC1B,SAAS,QAAQ;AAAA,MACjB,SAAS,OAAO,gBAAgB,EAAE,MAAM,KAAK,MAAM,MAAM,OAAO,EAAE,CAAC;AAAA,MACnE,MAAM,GAAG,QAAQ,qBAAqB,OAAO,KAAK,OAAO,SAAS,EAAE,KAAK,IAAI;AAAA,IAC/E,CAAC;AAAA,EACH;AAAA,EACA,MAAM,WAAW,OAAO,KAAK,KAAK;AAAA,EAClC,IAAI,aAAa,WAAW;AAAA,IAC1B,MAAM,wBAAsB;AAAA,MAC1B,SAAS,QAAQ;AAAA,MACjB,SAAS,QAAQ,KAAK;AAAA,MACtB,MAAM,GAAG,QAAQ,qBAAqB,OAAO,KAAK,OAAO,IAAI,EAAE,KAAK,IAAI;AAAA,IAC1E,CAAC;AAAA,EACH;AAAA,EACA,OAAO,GAAG,eAAe;AAAA;AAMpB,IAAM,sBAGT,OAAO,OAAO;AAAA,EAChB,QAAQ,OAAO,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,KAAK,MAAM,MAAM,GAAG,CAAC;AAAA,EAChE,MAAM,OAAO,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,CAAC;AAC3D,CAAC;AAGD,SAAS,WAAW,CAAC,KAAuD;AAAA,EAC1E,OAAO,SAAS;AAAA;AAWX,SAAS,kBAAkB,CAAC,QAIjB;AAAA,EAChB,QAAQ,SAAS,WAAW,cAAc;AAAA,EAC1C,MAAM,YAAY,QAAQ;AAAA,EAC1B,IAAI,cAAc,MAAM;AAAA,IACtB,MAAM,wBAAsB;AAAA,MAC1B,SAAS,QAAQ;AAAA,MACjB,SAAS;AAAA,MACT,MACE,QAAQ,SAAS,UACb,oHACA,GAAG,QAAQ;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EACA,MAAM,OAAyB,UAAU;AAAA,EACzC,MAAM,MAAM,SAAS,cAAc,UAAU,YAAY,UAAU,QAAQ,UAAU;AAAA,EACrF,MAAM,MAAM,UAAU;AAAA,EACtB,MAAM,OAAO,YAAY,GAAG,IACxB,GAAG,UAAU,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,UAAU,QAAQ,WACzD,GAAG,UAAU,IAAI,OAAO,YAAY,EAAE,OAAO,IAAI,SAAS,MAAM,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,QAAQ,WACnG,GAAG,UAAU,IAAI,OAAO,YAAY,EAAE,OAAO,IAAI,UAAU,MAAM,WAAW,CAAC,CAAC,CAAC,IAAI,UAAU,QAAQ;AAAA,EAGzG,MAAM,aACJ,UAAU,SAAS,WACf,OAAO,QAAQ,WAAW,EAAE,MAAM,4BAA4B,CAAC,MAC/D;AAAA,EACN,OAAO;AAAA,IACL,MAAM,UAAU,MAAM,QAAQ;AAAA,IAC9B,QAAQ,UAAU;AAAA,IAClB,WAAW;AAAA,EACb;AAAA;AAIF,SAAS,WAAW,CAAC,QAAiD;AAAA,EACpE,QAAQ,OAAO,SAAS;AAAA,EACxB,IACE,CAAC,OAAO,UAAU,KAAK,KACvB,QAAQ,oBAAoB,KAAK,OACjC,QAAQ,oBAAoB,KAAK,KACjC;AAAA,IACA,MAAM,cAAc;AAAA,MAClB,SAAS,iBAAiB,sCAAsC,OAAO,KAAK;AAAA,MAC5E,MAAM,EAAE,MAAM,MAAM;AAAA,IACtB,CAAC;AAAA,EACH;AAAA,EACA,OAAO;AAAA;;AC5JF,IAAM,iBAAkD,OAAO,OAAO,EAAE,WAAW,IAAI,CAAC;AAGxF,SAAS,oBAAoB,CAAC,QAAoC;AAAA,EACvE,QAAQ,WAAW;AAAA,EACnB,OAAO,OAAO,SAAS,OAAO;AAAA;;ACCzB,IAAM,kBAA8B;AAAA,EACzC,MAAM;AAAA,EACN,cAAc;AAAA,EAEd,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,YAAY;AAAA,EAWZ,qBAAqB;AAAA,IACnB,gBAAgB,CAAC,SAAS;AAAA,IAC1B,uBAAuB;AAAA,IACvB,0BAA0B;AAAA,EAC5B;AAAA,EACA,gBAAgB,EAAE,MAAM,WAAW,MAAM,WAAW;AAAA,EACpD,eAAe;AAAA,EACf,iBAAiB;AAAA,EAEjB,qBAAqB;AAAA,EACrB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAIA,eAAe;AAAA,EACf,gBAAgB,OAAO,OAAO,EAAE,QAAQ,QAAQ,SAAS,WAAW,KAAK,WAAW,QAAQ,UAAU,OAAO,oBAAoB,SAAS,WAAW,UAAU,eAAe,MAAM,SAAS,OAAO,QAAQ,CAAC;AAAA,EAC7M,iBAAiB;AAAA,EAGjB,eAAe;AAAA,IACb,WAAW,OAAO,OAAO;AAAA,MACvB,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,CAAC;AAAA,IACD,MAAM,OAAO,OAAO,EAAE,MAAM,IAAI,QAAQ,WAAW,YAAY,eAAe,CAAC;AAAA,EACjF;AAAA,EAGA,uBAAuB;AAAA,IACrB,WAAW,OAAO,OAAO;AAAA,MACvB,MAAM;AAAA,MACN,QAAQ;AAAA,IACV,CAAC;AAAA,IACD,QAAQ,OAAO,OAAO;AAAA,MACpB,MAAM;AAAA,MACN,QAAQ;AAAA,IACV,CAAC;AAAA,IACD,SAAS,OAAO,OAAO,EAAE,QAAQ,YAAY,MAAM,SAAS,CAAC;AAAA,EAC/D;AAAA,EACA,mBAAmB;AAAA,EAGnB,gBAAgB;AAAA,EAChB,aAAa;AAAA,EAGb,gBAAgB,EAAE,MAAM,QAAQ,OAAO,QAAQ;AAAA,EAE/C,UAAU,GAAG,QAAQ;AAAA,IACnB,OAAO,IAAI,YAAY,EAAE,KAAK,CAAC,EAAE,WAAW,KAAK,IAAI;AAAA;AAAA,EAIvD,kBAAkB,GAAG,SAAS;AAAA,IAC5B,OAAO,IAAI,MAAM,WAAW,KAAK,IAAI;AAAA;AAAA,EAEvC,WAAW,GAAG,SAAS;AAAA,IACrB,OAAO,IAAI;AAAA;AAAA,EAEb,kBAAkB,GAAG,cAAsB;AAAA,IACzC,OAAO,GAAG;AAAA;AAAA,EAEZ,WAAW,GAAG,eAAe,aAAa;AAAA,IACxC,IAAI,kBAAkB;AAAA,MAAG,OAAO;AAAA,IAChC,OAAO,kCAAkC,UAAU,IAAI,aAAa;AAAA;AAExE;;AC3FO,IAAM,eAA2B;AAAA,EACtC,MAAM;AAAA,EACN,cAAc;AAAA,EAEd,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EAEjB,qBAAqB;AAAA,EACrB,YAAY;AAAA,EAOZ,qBAAqB;AAAA,IACnB,gBAAgB,CAAC,SAAS;AAAA,IAC1B,wBAAwB;AAAA,IACxB,uBAAuB;AAAA,IAQvB,0BAA0B;AAAA,EAC5B;AAAA,EAGA,gBAAgB,EAAE,MAAM,YAAY,OAAO,MAAM;AAAA,EACjD,eAAe;AAAA,EACf,iBAAiB;AAAA,EAKjB,qBAAqB;AAAA,EAGrB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,qBAAqB,EAAE,WAAW,uBAAuB;AAAA,EACzD,kBAAkB;AAAA,EAGlB,cAAc;AAAA,EACd,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEA,eAAe;AAAA,EACf,gBAAgB,OAAO,OAAO,EAAE,QAAQ,QAAQ,SAAS,YAAY,KAAK,UAAU,QAAQ,UAAU,OAAO,UAAU,SAAS,mBAAmB,UAAU,eAAe,MAAM,QAAQ,OAAO,SAAS,CAAC;AAAA,EAC3M,iBAAiB;AAAA,EAKjB,eAAe;AAAA,IACb,WAAW,OAAO,OAAO,EAAE,QAAQ,cAAc,OAAO,YAAY,CAAC;AAAA,IACrE,MAAM,OAAO,OAAO,EAAE,MAAM,IAAI,QAAQ,WAAW,YAAY,eAAe,CAAC;AAAA,EACjF;AAAA,EAIA,uBAAuB;AAAA,EACvB,mBAAmB;AAAA,EAEnB,gBAAgB;AAAA,EAChB,aAAa;AAAA,EAIb,gBAAgB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,EAExC,UAAU,GAAG,QAAQ;AAAA,IACnB,OAAO,KAAK,YAAY,EAAE,KAAK,CAAC,EAAE,WAAW,KAAK,IAAI;AAAA;AAAA,EAMxD,kBAAkB,GAAG,SAAS;AAAA,IAC5B,OAAO,IAAI,MAAM,WAAW,MAAM,MAAM,EAAE,WAAW,KAAK,IAAI;AAAA;AAAA,EAEhE,WAAW,GAAG;AAAA,IACZ,OAAO;AAAA;AAAA,EAET,kBAAkB,GAAG,cAAsB;AAAA,IACzC,OAAO,QAAQ;AAAA;AAAA,EAEjB,WAAW,GAAG,eAAe,aAAa;AAAA,IAGxC,IAAI,kBAAkB;AAAA,MAAG,OAAO;AAAA,IAChC,OAAO,6BAA6B,UAAU,IAAI,aAAa;AAAA;AAEnE;;AC3GO,IAAM,eAAsD;AAAA,EACjE,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AACT;AAGO,SAAS,aAAa,CAAC,QAA0C;AAAA,EACtE,OAAO,aAAa,OAAO;AAAA;;ACXtB,SAAS,wBAAwB,CAAC,QAAsE;AAAA,EAC7G,MAAM,IAAI,CAAC,SAAyB,OAAO,QAAQ,WAAW,EAAE,KAAK,CAAC;AAAA,EACtE,MAAM,SAAS,EAAE,oBAAoB;AAAA,EACrC,MAAM,OAAO,EAAE,kBAAkB;AAAA,EACjC,MAAM,QAAQ,EAAE,mBAAmB;AAAA,EACnC,MAAM,QAAQ,EAAE,mBAAmB;AAAA,EACnC,MAAM,SAAS,EAAE,oBAAoB;AAAA,EACrC,OAAO,MAAM,IAAI,UAAU,KAAK,MAAM,MAAM,QAAQ,CAAC,QAAQ,MAAM,UAAU,OAAO,QAAQ,QAAQ,MAAM,EAAE,IAAI,CAAC;AAAA,EACjH,MAAM,OAAO,GAAG,UAAU,EAAE,MAAM;AAAA,EAClC,MAAM,QAAQ,GAAG,UAAU,EAAE,OAAO;AAAA,EACpC,OAAO,qBAAqB,6CACxB,kBAAkB,cAClB,eAAe,SAAS,OAAO,aAAa,QAAQ,SAAS,4CAA4C,cAAc,2BACvH,0BAA0B,SAAS,OAAO,aAAa,QAAQ,SAAS,uBAAuB,WAC/F,MAAM,UAAU,SAAS,OAAO,SAAS,SAAS,eAClD,UAAU,SAAS,qBAAqB,SAAS,aAAa,cAAc,sBAC5E,oBAAoB,SAAS,SAAS,SAAS,mBAAmB,UAAU,iBAAiB,SAAS,SAAS,SAAS,SAAS,SAAS,UAC1I,QAAQ,WAAW,cAAc,YAAY,aAAa,SAAS,UAAU,UAAU,YAAY,SAAS,cAAc,UAAU,OACpI,mBAAmB,kBAAkB,mBAAmB,kDAAkD,aAAa,mBAAmB,eAC1I,sBAAsB,OAAO,WAAW,EAAE,MAAM,MAAM,OAAO,YAAY,EAAE,OAAO,SAAS;AAAA;;;AC7BjG,kCAAS;AAoCT,IAAM,UAAwG,OAAO,OAAO;AAAA,EAC1H,kBAAkB,EAAE,SAAS,YAAY,MAAM,6CAA6C;AAAA,EAC5F,gBAAgB,EAAE,SAAS,UAAU,MAAM,uEAAuE;AACpH,CAAC;AAGM,SAAS,gBAAgB,CAAC,QAA6E;AAAA,EAC5G,MAAM,QAAQ,QAAQ,OAAO;AAAA,EAC7B,IAAI,OAAO,QAAQ,SAAS,MAAM,SAAS;AAAA,IACzC,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,OAAO,OAAO,MAAM,4BAA4B,MAAM,UAAU,CAAC;AAAA,EACxI;AAAA,EACA,OAAO,EAAE,MAAM,MAAM,MAAM,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;AAIpD,SAAS,iBAAiB,CAAC,QAA4F;AAAA,EAC5H,OAAO,OAAO,UAAU,sBAAsB,OAAO,UAAU;AAAA;;;ACpCjE,sBAAS,sCAAW;AA0Bb,SAAS,qBAAqB,CAAC,QAIpB;AAAA,EAChB,QAAQ,SAAS,OAAO,YAAY;AAAA,EACpC,gBAAgB,EAAE,SAAS,SAAS,kCAAkC,CAAC;AAAA,EACvE,MAAM,QAAkB,CAAC;AAAA,EACzB,IAAI,SAAS,YAAY;AAAA,IAAM,MAAM,KAAK,SAAS;AAAA,EACnD,MAAM,KAAK,aAAa;AAAA,EACxB,IAAI,SAAS,YAAY;AAAA,IAAM,MAAM,KAAK,SAAS;AAAA,EACnD,IAAI,SAAS,YAAY;AAAA,IAAM,MAAM,KAAK,SAAS;AAAA,EACnD,IAAI,SAAS,aAAa;AAAA,IAAM,MAAM,KAAK,UAAU;AAAA,EACrD,OAAO,EAAE,MAAM,YAAY,MAAM,KAAK,IAAI,MAAM,MAAM,QAAQ,QAAQ,CAAC,GAAG,MAAM,MAAM,GAAG,WAAW,OAAO;AAAA;AAoBtG,IAAM,0BAA2E,OAAO,OAAO;AAAA,EACpG,aAAa;AAAA,EAEb,oBAAoB;AAAA,EAKpB,eAAe;AAAA,EAEf,mBAAmB;AAAA,EAEnB,SAAS;AAAA,EAMT,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,iBAAiB;AAAA,EAKjB,YAAY;AAAA,EAEZ,YAAY;AACd,CAAC;AAGM,IAAM,2BAAqF,OAAO,OAAO;AAAA,EAC9G,UAAU;AAAA,EACV,UAAU;AACZ,CAAC;AAED,SAAS,eAAe,CAAC,QAAwD;AAAA,EAC/E,IAAI,OAAO,QAAQ,SAAS,YAAY;AAAA,IACtC,MAAM,wBAAsB;AAAA,MAC1B,SAAS,OAAO,QAAQ;AAAA,MACxB,SAAS,OAAO;AAAA,MAChB,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA;AAQK,SAAS,sBAAsB,CAAC,QAWrB;AAAA,EAChB,QAAQ,SAAS,OAAO,QAAQ,OAAO,UAAU;AAAA,EACjD,gBAAgB,EAAE,SAAS,SAAS,QAAQ,yBAAyB,CAAC;AAAA,EACtE,MAAM,YAAY,IAAI,eAAe,OAAO;AAAA,EAC5C,IAAI,OAAO,wBAAwB;AAAA,EAEnC,IAAI,UAAU,mBAAmB,UAAU,qBAAqB;AAAA,IAC9D,OAAO,KAAK,QAAQ,YAAY,QAAQ,WAAW,EAAE,MAAM,WAAW,EAAE,OAAO,QAAQ,MAAM,UAAU,MAAM,CAAC,EAAE,CAAC,CAAC;AAAA,EACpH;AAAA,EACA,IAAI,UAAU,qBAAqB;AAAA,IACjC,MAAM,UAAU,SAAS;AAAA,IACzB,IAAI,CAAC,OAAO,UAAU,OAAO,KAAK,UAAU,yBAAyB,YAAY,UAAU,yBAAyB,UAAU;AAAA,MAC5H,MAAM,IAAI,YAAU;AAAA,QAClB,MAAM;AAAA,QACN,SAAS,sDAAsD,yBAAyB,gBAAgB,yBAAyB,iBAAiB,OAAO,KAAK;AAAA,QAC9J,MAAM,EAAE,MAAM;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,IACA,OAAO,KAAK,QAAQ,WAAW,UAAU,IAAI,OAAO,CAAC;AAAA,EACvD;AAAA,EACA,IAAI,UAAU,cAAc;AAAA,IAC1B,OAAO,KACJ,QAAQ,SAAS,UAAU,IAAI,WAAW,EAAE,OAAO,OAAO,KAAK,MAAM,OAAO,MAAM,CAAC,CAAC,CAAC,EACrF,QAAQ,WAAW,UAAU,IAAI,OAAO,SAAS,EAAE,CAAC;AAAA,EACzD;AAAA,EACA,IAAI,UAAU,aAAa,UAAU,cAAc;AAAA,IACjD,OAAO,KACJ,QAAQ,kBAAkB,UAAU,IAAI,WAAW,EAAE,OAAO,QAAQ,MAAM,UAAU,MAAM,CAAC,CAAC,CAAC,EAC7F,QAAQ,iBAAiB,UAAU,IAAI,WAAW,EAAE,OAAO,OAAO,MAAM,SAAS,MAAM,CAAC,CAAC,CAAC;AAAA,EAC/F;AAAA,EACA,OAAO,EAAE,MAAM,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;AAG7D,SAAS,UAAU,CAAC,QAA2F;AAAA,EAC7G,QAAQ,OAAO,MAAM,UAAU;AAAA,EAC/B,IAAI,UAAU,aAAa,MAAM,WAAW,GAAG;AAAA,IAC7C,MAAM,IAAI,YAAU;AAAA,MAClB,MAAM;AAAA,MACN,SAAS,QAAQ,qCAAqC;AAAA,MACtD,MAAM,EAAE,OAAO,UAAU,KAAK;AAAA,IAChC,CAAC;AAAA,EACH;AAAA,EACA,OAAO;AAAA;;;ACnLT,kCAAS;;;ACAT,uCAA0B,qFAA0D;AAO7E,IAAM,aAKT,OAAO,OAAO,EAAE,YAAY,mBAAmB,aAAa,UAAU,eAAe,YAAY,aAAa,SAAS,CAAC;AAE5H,IAAM,eAAoI;AAAA,EACxI,QAAQ,EAAE,SAAS,QAAQ,QAAQ,EAAE,MAAM,QAAQ,SAAS,WAAW,kBAAkB,WAAW,MAAM,OAAO,EAAE;AAAA,EACnH,SAAS,EAAE,SAAS,WAAW,QAAQ,EAAE,SAAS,WAAW,MAAM,UAAU,EAAE;AAAA,EAC/E,KAAK,EAAE,SAAS,WAAW,QAAQ,EAAE,SAAS,WAAW,KAAK,WAAW,MAAM,WAAW,UAAU,YAAY,MAAM,WAAW,EAAE;AAAA,EACnI,QAAQ,EAAE,SAAS,UAAU,QAAQ,EAAE,QAAQ,UAAU,MAAM,SAAS,EAAE;AAAA,EAC1E,OAAO,EAAE,SAAS,oBAAoB,QAAQ,EAAE,iBAAiB,oBAAoB,QAAQ,oBAAoB,MAAM,QAAQ,QAAQ,OAAO,EAAE;AAAA,EAChJ,SAAS,EAAE,SAAS,WAAW,QAAQ,EAAE,SAAS,WAAW,SAAS,UAAU,EAAE;AAAA,EAClF,UAAU,EAAE,SAAS,eAAe,QAAQ,EAAE,aAAa,eAAe,uBAAuB,eAAe,WAAW,aAAa,0BAA0B,aAAa,MAAM,OAAO,EAAE;AAChM;AAEA,SAAS,UAAU,CAAC,QAAuC;AAAA,EACzD,IAAI,CAAC,OAAO,QAAQ,aAAa,wBAAwB;AAAA,IACvD,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,yBAAyB,CAAC;AAAA,EACjG;AAAA;AAGF,SAAS,WAAU,CAAC,QAAuD;AAAA,EACzE,IAAI,OAAO,OAAO,SAAS,YAAY,OAAO,KAAK,WAAW,KAAK,OAAO,KAAK,SAAS,MAAI,KAAK,IAAI,YAAY,EAAE,OAAO,OAAO,IAAI,EAAE,SAAS,IAAI;AAAA,IAClJ,MAAM,IAAI,YAAU,EAAE,MAAM,uBAAuB,SAAS,qFAAqF,CAAC;AAAA,EACpJ;AAAA,EACA,OAAO,OAAO,QAAQ,WAAW,EAAE,MAAM,OAAO,KAAK,CAAC;AAAA;AAGxD,SAAS,QAAQ,CAAC,QAAuF;AAAA,EACvG,IAAI,OAAO,WAAW,aAAa,OAAO,WAAW,YAAY,OAAO,WAAW,WAAW;AAAA,IAC5F,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,0BAA0B,MAAM,+DAA+D,CAAC;AAAA,EACvK;AAAA,EACA,OAAO,GAAG,YAAW,EAAE,SAAS,OAAO,SAAS,MAAM,OAAO,UAAU,WAAW,YAAY,CAAC,KAAK,YAAW,EAAE,SAAS,OAAO,SAAS,MAAM,OAAO,MAAM,CAAC;AAAA;AAGhK,SAAS,KAAK,CAAC,QAA6D;AAAA,EAC1E,OAAO,EAAE,MAAM,OAAO,MAAM,QAAQ,OAAO,UAAU,CAAC,GAAG,WAAW,OAAO;AAAA;AAItE,SAAS,eAAe,CAAC,QAA+D;AAAA,EAC7F,WAAW,MAAM;AAAA,EACjB,OAAO,MAAM,EAAE,MAAM,eAAe,SAAS,MAAM,8BAA8B,CAAC;AAAA;AAI7E,SAAS,cAAc,CAAC,QAA+D;AAAA,EAC5F,WAAW,MAAM;AAAA,EACjB,OAAO,MAAM,EAAE,MAAM,eAAe,SAAS,MAAM,6BAA6B,CAAC;AAAA;AAI5E,SAAS,gBAAgB,GAAG,SAAS,SAAgE;AAAA,EAC1G,WAAW,EAAE,QAAQ,CAAC;AAAA,EACtB,OAAO,MAAM,EAAE,MAAM,eAAe,SAAS,EAAE,SAAS,MAAM,CAAC,+BAA+B,CAAC;AAAA;AAI1F,SAAS,gBAAgB,GAAG,SAAS,SAAgE;AAAA,EAC1G,WAAW,EAAE,QAAQ,CAAC;AAAA,EACtB,OAAO,MAAM,EAAE,MAAM,eAAe,SAAS,EAAE,SAAS,MAAM,CAAC,gCAAgC,CAAC;AAAA;AAI3F,SAAS,mBAAmB,GAAG,SAAS,OAAO,cAIpC;AAAA,EAChB,WAAW,EAAE,QAAQ,CAAC;AAAA,EACtB,MAAM,OAAO,YAAW,EAAE,SAAS,MAAM,cAAc,WAAW,WAAW,CAAC;AAAA,EAC9E,OAAO,MAAM,EAAE,MAAM,eAAe,WAAW,SAAS,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC;AAAA;AAQ1E,SAAS,mBAAmB,CAAC,QAAyD;AAAA,EAC3F,WAAW,MAAM;AAAA,EACjB,QAAQ,UAAU;AAAA,EAClB,MAAM,UAAU,OAAO,MAAM,SAAS,YAAY,OAAO,OAAO,cAAc,MAAM,IAAI,IACpF,aAAa,MAAM,QAA4B;AAAA,EACnD,IAAI,YAAY,aAAa,CAAC,MAAM,UAAU,CAAC,MAAM,eAAe;AAAA,IAClE,IAAI,MAAM,eAAe;AAAA,MAAW,OAAO,QAAQ;AAAA,IACnD,MAAM,QAAQ,wDAAwD,KAAK,MAAM,WAAW,KAAK,CAAC;AAAA,IAClG,MAAM,OAAO,QAAQ,IAAI,YAAY,EAAE,QAAQ,QAAQ,EAAE;AAAA,IACzD,MAAM,SAAS,SAAS,aAAa,OAAO,OAAO,QAAQ,QAAQ,IAAI,IAAI,QAAQ,OAAO,QAAQ;AAAA,IAClG,IAAI,WAAW;AAAA,MAAW,OAAO;AAAA,EACnC;AAAA,EACA,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,0BAA0B,MAAM,gDAAgD,MAAM,OAAO,CAAC;AAAA;AAGrK,SAAS,cAAc,CAAC,QAA2E;AAAA,EACjG,WAAW,MAAM;AAAA,EACjB,yBAAyB,EAAE,QAAQ,OAAO,QAAQ,SAAS,OAAO,QAAQ,KAAK,CAAC;AAAA,EAChF,oBAAoB,EAAE,QAAQ,OAAO,OAAO,CAAC;AAAA,EAC7C,MAAM,QAAQ,OAAO,OAAO,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,OAAO,KAAK;AAAA,EAC9E,IAAI,UAAU,aAAa,MAAM,QAAQ,aAAa,MAAM,QAAQ,eAAe;AAAA,IACjF,MAAM,IAAI,YAAU,EAAE,MAAM,uBAAuB,SAAS,0DAA0D,MAAM,EAAE,OAAO,OAAO,MAAM,EAAE,CAAC;AAAA,EACvJ;AAAA,EACA,OAAO;AAAA;AAIF,SAAS,kBAAkB,CAAC,QAA0E;AAAA,EAC3G,MAAM,QAAQ,eAAe,MAAM;AAAA,EACnC,OAAO,UAAU,EAAE,SAAS,OAAO,SAAS,QAAQ,OAAO,QAAQ,MAAM,CAAC;AAAA;AAG5E,SAAS,SAAS,CAAC,QAA2E;AAAA,EAC5F,QAAQ,SAAS,QAAQ,UAAU;AAAA,EACnC,MAAM,OAAO,MAAM;AAAA,EACnB,IAAI,SAAS;AAAA,IAAQ,OAAO;AAAA,EAC5B,IAAI,OAAO,SAAS,YAAY,WAAW,MAAM;AAAA,IAC/C,OAAO,OAAO,QAAQ,KAAK,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS;AAAA,MACrD,MAAM,QAAQ,MAAM,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,IAAI;AAAA,MAC9D,MAAM,SAAS,YAAW,EAAE,SAAS,MAAM,MAAM,UAAU,MAAM,KAAK,CAAC;AAAA,MACvE,MAAM,eAAe,oBAAoB,EAAE,SAAS,MAAM,CAAC;AAAA,MAG3D,OAAO,IAAI,oCAAoC,WAAW,gBAAgB,IAAI,yBAAyB;AAAA,KACxG,EAAE,KAAK,OAAO;AAAA,EACjB;AAAA,EACA,IAAI,OAAO,SAAS,YAAY,aAAa,MAAM;AAAA,IACjD,MAAM,WAAW,MAAM,UAAU,KAAK,CAAC,UAAU,MAAM,SAAS,KAAK,OAAO;AAAA,IAC5E,MAAM,SAAS,OAAO,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,SAAS,WAAW;AAAA,IAChF,MAAM,QAAQ,YAAW,EAAE,SAAS,MAAM,WAAW,YAAY,CAAC;AAAA,IAClE,MAAM,QAAQ,YAAW,EAAE,SAAS,MAAM,MAAM,UAAU,MAAM,KAAK,CAAC;AAAA,IACtE,MAAM,OAAO,SAAS,OAAQ,IAAI,CAAC,MAAM,UAAU;AAAA,MACjD,MAAM,aAAa,MAAM,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,IAAI;AAAA,MACnE,MAAM,cAAc,OAAO,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,SAAS,WAAY,MAAM;AAAA,MAC5F,OAAO,IAAI,SAAS,YAAW,EAAE,SAAS,MAAM,YAAY,UAAU,YAAY,KAAK,CAAC,OAAO,SAAS,YAAW,EAAE,SAAS,MAAM,WAAW,UAAU,WAAW,KAAK,CAAC;AAAA,KAC3K,EAAE,KAAK,OAAO;AAAA,IACf,OAAO,yBAAyB,SAAS,EAAE,SAAS,OAAO,OAAO,UAAU,OAAO,KAAK,CAAC,QAAQ,eAAe;AAAA,EAClH;AAAA,EACA,MAAM,IAAI,YAAU,EAAE,MAAM,uBAAuB,SAAS,8CAA8C,CAAC;AAAA;AAItG,SAAS,eAAe,CAAC,QAMd;AAAA,EAChB,MAAM,QAAQ,eAAe,MAAM;AAAA,EACnC,MAAM,aAAa,UAAU,EAAE,SAAS,OAAO,SAAS,QAAQ,OAAO,QAAQ,MAAM,CAAC;AAAA,EACtF,MAAM,OAAO,YAAW,EAAE,SAAS,OAAO,SAAS,MAAM,OAAO,cAAc,WAAW,WAAW,CAAC;AAAA,EACrG,MAAM,QAAQ,SAAS,EAAE,SAAS,OAAO,SAAS,OAAO,MAAM,UAAU,MAAM,MAAM,QAAQ,OAAO,aAAa,CAAC;AAAA,EAClH,OAAO,MAAM,EAAE,MAAM,iBAAiB,WAAW,gDAAgD,2BAA2B,cAAc,CAAC;AAAA;AAItI,SAAS,gBAAgB,CAAC,QAIf;AAAA,EAChB,WAAW,MAAM;AAAA,EACjB,IAAI,qBAAqB,EAAE,SAAS,OAAO,QAAQ,CAAC,EAAE,WAAW,KAAK,OAAO,KAAK,OAAO,OAAO,EAAE,WAAW,KAC3G,OAAO,OAAO,WAAW,YAAY,OAAO,WAAW,QAAQ,MAAM,QAAQ,OAAO,MAAM,GAAG;AAAA,IAC7F,MAAM,IAAI,gBAAgB,EAAE,QAAQ,UAAU,CAAC;AAAA,EACjD;AAAA,EACA,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,MAAM,QAAkB,CAAC;AAAA,EACzB,YAAY,KAAK,SAAS,OAAO,QAAQ,OAAO,OAAO,GAAG;AAAA,IACxD,IAAI,CAAC,OAAO,OAAO,OAAO,QAAQ,GAAG;AAAA,MAAG,MAAM,IAAI,gBAAgB,EAAE,QAAQ,WAAW,IAAI,CAAC;AAAA,IAC5F,MAAM,QAAQ,OAAO,OAAO;AAAA,IAC5B,IAAK,UAAU,QAAQ,CAAC,KAAK,YAAc,UAAU,SAAS,OAAO,UAAU,YAAY,MAAM,WAAW,KAAK,MAAM,SAAS,MAAI,IAAK;AAAA,MACvI,MAAM,IAAI,gBAAgB,EAAE,QAAQ,WAAW,IAAI,CAAC;AAAA,IACtD;AAAA,IACA,MAAM,KAAK,cAAc,UAAU,IAAI,GAAG,WAAW,gBAAgB,KAAK,MAAM,UAAU,IAAI,SAAS,EAAE,UAAU;AAAA,EACrH;AAAA,EACA,WAAW,OAAO,QAAQ,QAAQ,OAAO,MAAM,GAAG;AAAA,IAChD,IAAI,OAAO,QAAQ,YAAY,CAAC,OAAO,OAAO,OAAO,SAAS,GAAG;AAAA,MAAG,MAAM,IAAI,gBAAgB,EAAE,QAAQ,UAAU,CAAC;AAAA,EACrH;AAAA,EACA,OAAO,MAAM,EAAE,MAAM,UAAU,MAAM,KAAK,IAAI,KAAK,QAAQ,UAAU,OAAO,CAAC;AAAA;AAIxE,SAAS,aAAa,CAAC,QAA8D;AAAA,EAC1F,WAAW,MAAM;AAAA,EACjB,IAAI,OAAO,OAAO,SAAS,YAAY,OAAO,KAAK,KAAK,EAAE,WAAW,KAAK,OAAO,KAAK,SAAS,MAAI,GAAG;AAAA,IACpG,MAAM,IAAI,YAAU,EAAE,MAAM,eAAe,SAAS,kEAAkE,CAAC;AAAA,EACzH;AAAA,EACA,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,OAAO,MAAM,EAAE,MAAM,6BAA6B,UAAU,IAAI,OAAO,IAAI,YAAY,QAAQ,UAAU,OAAO,CAAC;AAAA;;;AD/L5G,IAAM,0BAA2C;AAGxD,IAAM,gBASF,OAAO,OAAO;AAAA,EAChB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBV,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaf,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBf,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeR,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcV,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBP,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeV,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaZ,CAAC;AAGM,IAAM,6BACX,OAAO,OAAO,CAAC,YAAY,iBAAiB,iBAAiB,UAAU,YAAY,SAAS,YAAY,UAAU,CAAU;AAiB9H,IAAM,oBAA4B;AAAA,EAAW,2BAA2B,IACtE,CAAC,QAAQ;AAAA,EAAuC,cAAc;AAAA,aAAoB,MACpF,EAAE,KAAK;AAAA,CAAK;AAGL,IAAM,oBAaT,OAAO,OAAO;AAAA,EAChB,UAAU,cAAc;AAAA,EACxB,eAAe,cAAc;AAAA,EAC7B,eAAe,cAAc;AAAA,EAC7B,QAAQ,cAAc;AAAA,EACtB,UAAU,cAAc;AAAA,EAIxB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYb,OAAO,cAAc;AAAA,EACrB,UAAU,cAAc;AAAA,EACxB,UAAU,cAAc;AAAA,EACxB,SAAS;AAAA,EAET,gBAAgB;AAAA,EAChB,eAAe;AACjB,CAAC;AAKD,SAAS,WAAU,CAAC,QAAuC;AAAA,EACzD,IAAI,CAAC,OAAO,QAAQ,aAAa,wBAAwB;AAAA,IACvD,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,yBAAyB,CAAC;AAAA,EACjG;AAAA;AAIK,SAAS,uBAAuB,CAAC,QAItB;AAAA,EAChB,YAAW,MAAM;AAAA,EACjB,MAAM,SAAS,OAAO,UAAU,kBAAkB,CAAC,OAAO,cAAc,EAAE,IACtE,CAAC,WAAW,aAAa,WAAW,YAAY,uBAAuB;AAAA,EAC3E,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,MAAM,QAAQ,IAAI;AAAA,EAClB,MAAM,OAAO,kBAAkB,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,UAAkB;AAAA,IACxF,IAAI,cAAc,MAAM,IAAI,IAAI;AAAA,IAChC,IAAI,gBAAgB,WAAW;AAAA,MAC7B,cAAc,UAAU,IAAI,OAAO,OAAO,KAAK,IAAI,EAAE;AAAA,MACrD,MAAM,IAAI,MAAM,WAAW;AAAA,IAC7B;AAAA,IACA,OAAO;AAAA,GACR;AAAA,EACD,OAAO,EAAE,MAAM,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;AAItD,SAAS,mBAAmB,CAAC,QAA0F;AAAA,EAC5H,YAAW,MAAM;AAAA,EACjB,MAAM,OAAO,OAAO,QAAQ,WAAW,EAAE,MAAM,OAAO,MAAM,CAAC;AAAA,EAC7D,MAAM,SAAS,OAAO,QAAQ,WAAW,EAAE,MAAM,OAAO,WAAW,WAAW,WAAW,cAAc,UAAU,CAAC;AAAA,EAClH,MAAM,OAAO,OAAO,WAAW,WAC3B,qBAAqB,cAAc,UAAU,yBAC7C,cAAc,UAAU;AAAA,EAC5B,OAAO,EAAE,MAAM,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;AAIxC,SAAS,mBAAmB,CAAC,QAAqF;AAAA,EACvH,YAAW,MAAM;AAAA,EACjB,MAAM,OAAO,OAAO,UAAU,SAC1B,mHACA,OAAO,UAAU,UACf,0DACA;AAAA,EACN,OAAO,EAAE,MAAM,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;;;AE/P/C,+BAAS,sCAAoB,yCAAe;;;ACJrC,SAAS,iBAAiB,CAAC,QAAiC;AAAA,EACjE,OAAO,OAAO,IAAI,WAAW,MAAM,MAAM,EAAE,WAAW,KAAK,KAAK,EAAE,WAAW,KAAK,KAAK;AAAA;AAIlF,SAAS,eAAe,CAAC,QAAiC;AAAA,EAC/D,OAAO,IAAI,kBAAkB,EAAE,KAAK,OAAO,IAAI,CAAC;AAAA;AAI3C,SAAS,iBAAiB,CAAC,QAAiC;AAAA,EACjE,OAAO,GAAG,kBAAkB,EAAE,KAAK,OAAO,IAAI,CAAC;AAAA;AAI1C,SAAS,eAAe,CAAC,QAAiC;AAAA,EAC/D,OAAO,IAAI,kBAAkB,EAAE,KAAK,OAAO,IAAI,CAAC;AAAA;AAS3C,SAAS,iBAAiB,CAAC,QAAiC;AAAA,EACjE,OAAO,OAAO,IAAI,QAAQ,UAAU,CAAC,SAAS,IAAI,OAAO;AAAA;AAQpD,SAAS,kBAAkB,CAAC,QAIxB;AAAA,EACT,QAAQ,UAAU,IAAI,UAAU;AAAA,EAChC,IAAI,aAAa,QAAQ;AAAA,IACvB,MAAM,QAAQ,kBAAkB,EAAE,KAAK,MAAM,CAAC;AAAA,IAC9C,OAAO,OAAO,aAAa,IAAI,WAAW,OAAO,eAAe,GAAG,WAAW,IAAI;AAAA,EACpF;AAAA,EACA,OAAO,OAAO,aACV,gBAAgB,EAAE,KAAK,MAAM,CAAC,IAC9B,OAAO,eACL,kBAAkB,EAAE,KAAK,MAAM,CAAC,IAChC,gBAAgB,EAAE,KAAK,MAAM,CAAC;AAAA;;;ADA/B,SAAS,eAAe,CAAC,QAAyK;AAAA,EACvM,QAAQ,SAAS,cAAc;AAAA,EAC/B,MAAM,YAAY,IAAI,eAAe,OAAO;AAAA,EAC5C,QAAQ,UAAU;AAAA,SACX,cAAc;AAAA,MAIjB,IAAI,kBAAkB,SAAS;AAAA,QAAG,OAAO,iBAAiB,EAAE,SAAS,OAAO,UAAU,MAAM,CAAC;AAAA,MAC7F,IAAI,UAAU,UAAU,mBAAmB;AAAA,QACzC,OAAO,sBAAsB;AAAA,UAC3B;AAAA,UACA,OAAO,gBAAgB,EAAE,SAAS,WAAW,UAAU,UAAU,CAAC;AAAA,aAC9D,UAAU,YAAY,YAAY,CAAC,IAAI,EAAE,SAAS,UAAU,QAAQ;AAAA,QAC1E,CAAC;AAAA,MACH;AAAA,MACA,OAAO,uBAAuB,EAAE,YAAY,UAAU,CAAC;AAAA,IACzD;AAAA,SACK;AAAA,MACH,OAAO,aAAa,EAAE,SAAS,WAAW,UAAU,CAAC;AAAA,SAClD;AAAA,MACH,OAAO,mBAAmB,EAAE,SAAS,WAAW,UAAU,CAAC;AAAA,SACxD;AAAA,MACH,OAAO,aAAa,EAAE,SAAS,WAAW,UAAU,CAAC;AAAA,SAClD;AAAA,MACH,OAAO,aAAa,EAAE,SAAS,WAAW,UAAU,CAAC;AAAA,SAClD;AAAA,MACH,OAAO,aAAa,EAAE,SAAS,WAAW,UAAU,CAAC;AAAA,SAClD;AAAA,MACH,OAAO,YAAY,EAAE,SAAS,WAAW,UAAU,CAAC;AAAA,SACjD;AAAA,MAAgB,OAAO,wBAAwB,EAAE,YAAY,UAAU,CAAC;AAAA,SACxE;AAAA,MAAiB,OAAO,oBAAoB,EAAE,YAAY,UAAU,CAAC;AAAA,SACrE;AAAA,MAAiB,OAAO,oBAAoB,EAAE,YAAY,UAAU,CAAC;AAAA,SACrE;AAAA,MACH,OAAO,gBAAgB,EAAE,SAAS,OAAO,UAAU,MAAM,CAAC;AAAA,SACvD;AAAA,MACH,OAAO,eAAe,EAAE,SAAS,OAAO,UAAU,MAAM,CAAC;AAAA,SACtD;AAAA,MACH,OAAO,iBAAiB,EAAE,SAAS,OAAO,UAAU,MAAM,CAAC;AAAA,SACxD;AAAA,MACH,OAAO,iBAAiB,EAAE,SAAS,OAAO,UAAU,MAAM,CAAC;AAAA,SACxD;AAAA,MACH,OAAO,oBAAoB,EAAE,SAAS,OAAO,UAAU,OAAO,YAAY,UAAU,WAAW,CAAC;AAAA,SAC7F;AAAA,MACH,OAAO,gBAAgB,EAAE,YAAY,UAAU,CAAC;AAAA,SAC7C;AAAA,MACH,OAAO,iBAAiB,EAAE,SAAS,SAAS,UAAU,SAAS,QAAQ,UAAU,OAAO,CAAC;AAAA,SACtF;AAAA,MACH,OAAO,cAAc,EAAE,SAAS,MAAM,UAAU,KAAK,CAAC;AAAA;AAAA;AAM5D,SAAS,QAAQ,CAAC,SAAqB,QAAwB;AAAA,EAC7D,MAAM,OAAO,QAAQ,WAAW,EAAE,MAAM,OAAO,KAAK,CAAC;AAAA,EACrD,MAAM,MAAM,OAAO,UAAU,YAAY,OAAO,GAAG,QAAQ,WAAW,EAAE,MAAM,OAAO,MAAM,CAAC,KAAK;AAAA,EAGjG,IAAI,OAAO,aAAa,MAAM;AAAA,IAC5B,IAAI,QAAQ,SAAS,UAAU;AAAA,MAC7B,MAAM,eAAc,EAAE,SAAS,gDAAgD,CAAC;AAAA,IAClF;AAAA,IACA,OAAO,QAAQ;AAAA,EACjB;AAAA,EAEA,IAAI,OAAO,cAAc,WAAW;AAAA,IAClC,IAAI,QAAQ,SAAS,YAAY;AAAA,MAC/B,MAAM,eAAc,EAAE,SAAS,gDAAgD,CAAC;AAAA,IAClF;AAAA,IACA,OAAO,GAAG,QAAQ,OAAO;AAAA,EAC3B;AAAA,EACA,OAAO;AAAA;AAiBT,SAAS,aAAa,CAAC,QAAgE;AAAA,EACrF,QAAQ,WAAW,WAAW;AAAA,EAC9B,IAAI,OAAO,UAAU,aAAa,OAAO,aAAa,QAAQ,OAAO,cAAc;AAAA,IAAW,OAAO;AAAA,EACrG,MAAM,UAAU,UAAU,QAAQ,KAChC,CAAC,eAAe,UAAU,SAAS,UAAU,UAAU,OAAO,SAAS,UAAU,cAAc,aAAa,UAAU,UAAU,UAClI;AAAA,EACA,OAAO,UAAU,KAAK,QAAQ,OAAO,UAAU,MAAM,SAAS,UAAU,MAAM,KAAK,IAAI;AAAA;AASzF,SAAS,YAAY,CAAC,SAAqB,MAA6B;AAAA,EACtE,IAAI,KAAK,YAAY,UAAU,QAAQ,kBAAkB;AAAA,IAAI,OAAO,QAAQ;AAAA,EAC5E,IAAI,QAAQ,SAAS,YAAY;AAAA,IAC/B,MAAM,eAAc,EAAE,SAAS,qDAAqD,CAAC;AAAA,EACvF;AAAA,EACA,OAAO;AAAA;AAQT,SAAS,eAAe,CAAC,SAAqB,QAAwB;AAAA,EACpE,IAAI,OAAO,cAAc,WAAW;AAAA,IAClC,MAAM,OAAO,SAAS,SAAS,MAAM;AAAA,IACrC,IAAI,OAAO,UAAU;AAAA,MAAW,OAAO;AAAA,IACvC,OAAO,GAAG,WAAW,QAAQ,WAAW,EAAE,MAAM,OAAO,MAAM,CAAC;AAAA,EAChE;AAAA,EACA,IAAI,OAAO,cAAc,YAAY;AAAA,IACnC,MAAM,MAAM,SAAS,SAAS,MAAM;AAAA,IACpC,MAAM,QAAQ,QAAQ,WAAW,EAAE,MAAM,OAAO,SAAS,OAAO,KAAK,CAAC;AAAA,IACtE,OAAO,GAAG,QAAQ,mBAAmB,EAAE,YAAY,IAAI,CAAC,QAAQ;AAAA,EAClE;AAAA,EACA,MAAM,MAAM,SAAS,SAAS,MAAM;AAAA,EACpC,MAAM,QAAQ,QAAQ,WAAW,EAAE,MAAM,OAAO,SAAS,OAAO,KAAK,CAAC;AAAA,EACtE,IAAI,OAAO,cAAc;AAAA,IAAY,OAAO,GAAG,eAAe,EAAE,SAAS,YAAY,IAAI,CAAC,QAAQ;AAAA,EAClG,IAAI,QAAQ,SAAS,YAAY;AAAA,IAC/B,MAAM,eAAc,EAAE,SAAS,uCAAuC,CAAC;AAAA,EACzE;AAAA,EACA,OAAO,UAAU,qBAAqB;AAAA;AAGxC,SAAS,cAAc,CAAC,QAA6D;AAAA,EACnF,OAAO,OAAO,QAAQ,SAAS,aAAa,GAAG,OAAO,qBAClD,QAAQ,OAAO,iBAAiB,OAAO,QAAQ,SAAS,UAAU,SAAS;AAAA;AAS1E,SAAS,gBAAgB,CAAC,QAAqE;AAAA,EACpG,QAAQ,SAAS,YAAY;AAAA,EAC7B,OAAO,QAAQ,IAAI,CAAC,WAAW,gBAAgB,SAAS,MAAM,CAAC,EAAE,KAAK,IAAI;AAAA;AAG5E,SAAS,WAAW,CAAC,SAAqB,OAAyB;AAAA,EACjE,IAAI,MAAM,cAAc;AAAA,IAAW,oBAAmB,EAAE,WAAW,MAAM,WAAW,SAAS,QAAQ,KAAK,CAAC;AAAA,EAC3G,MAAM,WAAW,QAAQ,WAAW,EAAE,MAAM,MAAM,KAAK,CAAC;AAAA,EACxD,MAAM,OAAO,MAAM,cAAc,YAAY,WAAW,GAAG,QAAQ,WAAW,EAAE,MAAM,MAAM,UAAU,CAAC,KAAK;AAAA,EAC5G,IAAI,MAAM,UAAU;AAAA,IAAW,OAAO;AAAA,EACtC,OAAO,GAAG,WAAW,QAAQ,WAAW,EAAE,MAAM,MAAM,MAAM,CAAC;AAAA;AAG/D,SAAS,WAAW,CAAC,OAAe,MAAoB;AAAA,EACtD,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAAA,IAC7C,MAAM,eAAc,EAAE,SAAS,GAAG,4CAA4C,QAAQ,CAAC;AAAA,EACzF;AAAA;AAGF,IAAM,kBAAmD;AAAA,EACvD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,KAAK;AACP;AAOA,IAAM,oBAA2D;AAAA,EAC/D,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AAAA,EACV,QAAQ;AACV;AAEA,IAAM,aAA8C;AAAA,EAClD,OAAO;AAAA,EACP,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAGA,SAAS,YAAY,CAAC,SAAqB,KAAqB;AAAA,EAC9D,IAAI,IAAI,OAAO;AAAA,IAAY,OAAO;AAAA,EAClC,OAAO,GAAG,WAAW,IAAI,OAAO,SAAS,SAAS,IAAI,MAAM;AAAA;AAG9D,SAAS,kBAAkB,CAAC,SAAqB,SAAuB;AAAA,EACtE,IAAI,QAAQ,aAAa;AAAA,IAAc;AAAA,EACvC,MAAM,wBAAsB;AAAA,IAC1B,SAAS,QAAQ;AAAA,IACjB;AAAA,IACA,MAAM;AAAA,EACR,CAAC;AAAA;AAUI,SAAS,UAAU,CAAC,QAAmF;AAAA,EAC5G,QAAQ,SAAS,MAAM,cAAc;AAAA,EAErC,QAAQ,KAAK;AAAA,SACN,OAAO;AAAA,MACV,MAAM,KAAK,gBAAe,KAAK;AAAA,MAC/B,IAAI,OAAO,WAAW;AAAA,QACpB,MAAM,eAAc,EAAE,SAAS,gCAAgC,KAAK,MAAM,CAAC;AAAA,MAC7E;AAAA,MAEA,IAAI,cAAc,KAAK,KAAK,GAAG;AAAA,QAC7B,OAAO,GAAG,SAAS,SAAS,KAAK,MAAM,KAAK,MAAM,QAAQ,YAAY,EAAE,eAAe,KAAK,MAAM,eAAe,UAAU,CAAC;AAAA,MAC9H;AAAA,MACA,MAAM,WAAW,eAAe,EAAE,SAAS,QAAQ,KAAK,QAAQ,OAAO,KAAK,OAAO,UAAU,CAAC;AAAA,MAC9F,OAAO,GAAG,SAAS,UAAU,MAAM,SAAS;AAAA,IAC9C;AAAA,SAEK,UAAU;AAAA,MACb,MAAM,KAAK,gBAAe,KAAK;AAAA,MAC/B,IAAI,OAAO,WAAW;AAAA,QACpB,MAAM,eAAc,EAAE,SAAS,gCAAgC,KAAK,MAAM,CAAC;AAAA,MAC7E;AAAA,MACA,OAAO,GAAG,SAAS,SAAS,KAAK,IAAI,KAAK,MAAM,SAAS,SAAS,KAAK,KAAK;AAAA,IAC9E;AAAA,SAEK;AAAA,MACH,OAAO,GAAG,SAAS,SAAS,KAAK,MAAM,QAAQ,KAAK,WAAW,OAAO,aAAa;AAAA,SAEhF,WAAW;AAAA,MACd,IAAI,KAAK,OAAO,WAAW,GAAG;AAAA,QAE5B,OAAO,KAAK,WAAW,OAAO,UAAU;AAAA,MAC1C;AAAA,MACA,MAAM,SAAS,SAAS,SAAS,KAAK,MAAM;AAAA,MAC5C,IAAI,KAAK,cAAc,QAAQ,QAAQ,wBAAwB,cAAc;AAAA,QAC3E,MAAM,aAAa,UAAU,QAAQ,KAAK,MAAM,EAAE,IAAI,CAAC,gBAAgB,GAAG,YAAY,aAAa;AAAA,QACnG,OAAO,GAAG,KAAK,WAAW,OAAO,SAAS,MAAM,WAAW,KAAK,MAAM;AAAA,MACxE;AAAA,MACA,IAAI,QAAQ,oBAAoB,OAAO;AAAA,QACrC,MAAM,OAAO,GAAG,gBAAgB,UAAU,IAAI,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,KAAK,MAAM;AAAA,QACzG,OAAO,KAAK,WAAW,OAAO,QAAQ,UAAU;AAAA,MAClD;AAAA,MACA,MAAM,eAAe,UAAU,QAAQ,KAAK,MAAM;AAAA,MAClD,OAAO,GAAG,UAAU,KAAK,WAAW,OAAO,WAAW,SAAS,aAAa,KAAK,IAAI;AAAA,IACvF;AAAA,SAEK,WAAW;AAAA,MACd,IAAI,KAAK,QAAQ,WAAW,GAAG;AAAA,QAC7B,MAAM,eAAc,EAAE,SAAS,oCAAoC,CAAC;AAAA,MACtE;AAAA,MACA,WAAW,OAAO,KAAK,MAAM;AAAA,QAC3B,IAAI,IAAI,WAAW,KAAK,QAAQ,QAAQ;AAAA,UACtC,MAAM,eAAc;AAAA,YAClB,SAAS,mBAAmB,IAAI,qBAAqB,KAAK,QAAQ;AAAA,UACpE,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,IAAI,KAAK,KAAK,WAAW,GAAG;AAAA,QAE1B,OAAO,KAAK,WAAW,OAAO,UAAU;AAAA,MAC1C;AAAA,MACA,MAAM,UAAU,KAAK,QAAQ,IAAI,CAAC,WAAW,SAAS,SAAS,MAAM,CAAC;AAAA,MACtE,IAAI,QAAQ,oBAAoB,YAAY;AAAA,QAC1C,MAAM,SAAS,KAAK,KAAK,IAAI,CAAC,QAAQ,IAAI,UAAU,QAAQ,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,QAC9E,MAAM,OAAO,IAAI,QAAQ,KAAK,IAAI,UAAU,OAAO,KAAK,IAAI;AAAA,QAC5D,OAAO,KAAK,WAAW,OAAO,QAAQ,UAAU;AAAA,MAClD;AAAA,MAGA,MAAM,eAAe,KAAK,KAAK,IAAI,CAAC,QAAQ;AAAA,QAC1C,MAAM,QAAQ,IAAI,IAAI,CAAC,OAAO,UAAU,GAAG,QAAQ,YAAsB,UAAU,IAAI,KAAK,GAAG;AAAA,QAC/F,OAAO,MAAM,WAAW,IAAK,MAAM,KAAgB,IAAI,MAAM,KAAK,OAAO;AAAA,OAC1E;AAAA,MACD,MAAM,OAAO,aAAa,WAAW,IAAK,aAAa,KAAgB,IAAI,aAAa,KAAK,MAAM;AAAA,MACnG,OAAO,KAAK,WAAW,OAAO,OAAO,KAAK,WAAW,GAAG,IAAI,OAAO,IAAI,YAAY;AAAA,IACrF;AAAA,SAEK,QAAQ;AAAA,MACX,MAAM,SAAS,SAAS,SAAS,KAAK,MAAM;AAAA,MAC5C,MAAM,cAAc,UAAU,IAAI,KAAK,OAAO;AAAA,MAC9C,IAAI;AAAA,MACJ,IAAI,KAAK,gBAAgB,MAAM;AAAA,QAC7B,OACE,QAAQ,oBAAoB,UACxB,GAAG,gBAAgB,gBACnB,KAAK,gBAAgB,OAGnB,GAAG,eAAe,gBAClB,SAAS,sBAAsB;AAAA,MACzC,EAAO;AAAA,QACL,OAAO,GAAG,eAAe;AAAA;AAAA,MAE3B,IAAI,QAAQ,qBAAqB,MAAM;AAAA,QACrC,OAAO,GAAG,OAAO,QAAQ;AAAA,MAC3B;AAAA,MACA,OAAO,KAAK,WAAW,OAAO,QAAQ,UAAU;AAAA,IAClD;AAAA,SAEK,eAAe;AAAA,MAClB,MAAM,SAAS,SAAS,SAAS,KAAK,MAAM;AAAA,MAC5C,IAAI;AAAA,MACJ,IAAI,KAAK,OAAO,UAAU;AAAA,QAGxB,OACE,QAAQ,wBAAwB,WAC5B,GAAG,iBAAiB,UAAU,IAAI,KAAK,KAAK,iBAC5C,GAAG,YAAY,UAAU,IAAI,KAAK,KAAK;AAAA,MAC/C,EAAO;AAAA,QACL,MAAM,UAAU,mBAAmB;AAAA,UACjC,UAAU,QAAQ;AAAA,UAClB,IAAI,KAAK;AAAA,UACT,OAAO,KAAK;AAAA,QACd,CAAC;AAAA,QACD,IAAI,QAAQ,wBAAwB,QAAQ;AAAA,UAC1C,OAAO,GAAG,eAAe,UAAU,IAAI,OAAO;AAAA,QAChD,EAAO;AAAA,UACL,MAAM,cAAc,UAAU,IAAI,OAAO;AAAA,UACzC,OACE,QAAQ,wBAAwB,WAC5B,GAAG,oBAAoB,2BACvB,GAAG,eAAe;AAAA,UACxB,IAAI,QAAQ,qBAAqB;AAAA,YAAM,OAAO,GAAG,OAAO,QAAQ;AAAA;AAAA;AAAA,MAGpE,OAAO,KAAK,WAAW,OAAO,QAAQ,UAAU;AAAA,IAClD;AAAA,SAEK;AAAA,SACA,MAAM;AAAA,MACT,IAAI,KAAK,SAAS,WAAW,GAAG;AAAA,QAE9B,OAAO,KAAK,SAAS,QAAQ,UAAU;AAAA,MACzC;AAAA,MACA,IAAI,KAAK,SAAS,WAAW,GAAG;AAAA,QAC9B,OAAO,WAAW,EAAE,SAAS,MAAM,KAAK,SAAS,IAAK,UAAU,CAAC;AAAA,MACnE;AAAA,MACA,MAAM,SAAS,KAAK,SAAS,QAAQ,UAAU;AAAA,MAC/C,MAAM,WAAW,KAAK,SAAS,IAAI,CAAC,YAAY,WAAW,EAAE,SAAS,MAAM,SAAS,UAAU,CAAC,CAAC;AAAA,MACjG,OAAO,IAAI,SAAS,KAAK,MAAM;AAAA,IACjC;AAAA,SAEK;AAAA,MACH,OAAO,QAAQ,WAAW,EAAE,SAAS,MAAM,KAAK,SAAS,UAAU,CAAC;AAAA,SAEjE,UAAU;AAAA,MACb,MAAM,KAAK,gBAAe,KAAK;AAAA,MAC/B,IAAI,OAAO,WAAW;AAAA,QACpB,MAAM,eAAc,EAAE,SAAS,gCAAgC,KAAK,MAAM,CAAC;AAAA,MAC7E;AAAA,MACA,OAAO,GAAG,aAAa,SAAS,KAAK,GAAG,KAAK,MAAM,UAAU,IAAI,KAAK,KAAK;AAAA,IAC7E;AAAA,SAEK,YAAY;AAAA,MACf,mBAAmB,SAAS,8BAAgC;AAAA,MAC5D,MAAM,WAAW,eAAe,EAAE,SAAS,QAAQ,KAAK,QAAQ,OAAO,KAAK,OAAO,UAAU,CAAC;AAAA,MAC9F,MAAM,OAAO,GAAG,SAAS,iBAAiB,SAAS;AAAA,MACnD,OAAO,KAAK,WAAW,OAAO,QAAQ,UAAU;AAAA,IAClD;AAAA,SAEK,oBAAoB;AAAA,MACvB,mBAAmB,SAAS,mCAAqC;AAAA,MACjE,MAAM,SAAS,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,KAAK;AAAA,MACpE,MAAM,WAAW,eAAe,EAAE,SAAS,QAAQ,KAAK,QAAQ,OAAO,QAAQ,UAAU,CAAC;AAAA,MAC1F,OAAO,GAAG,SAAS,aAAa,SAAS;AAAA,IAC3C;AAAA,SAEK,iBAAiB;AAAA,MACpB,mBAAmB,SAAS,kCAAoC;AAAA,MAChE,MAAM,SAAS,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,KAAK;AAAA,MACpE,MAAM,WAAW,eAAe,EAAE,SAAS,QAAQ,KAAK,QAAQ,OAAO,QAAQ,UAAU,CAAC;AAAA,MAC1F,OAAO,GAAG,SAAS,aAAa,SAAS;AAAA,IAC3C;AAAA,SAEK,gBAAgB;AAAA,MACnB,mBAAmB,SAAS,kCAAoC;AAAA,MAGhE,MAAM,SAAS,SAAS,SAAS,KAAK,MAAM;AAAA,MAC5C,OAAO,gBAAgB,iBAAiB,KAAK,QAAQ,SAAS;AAAA,IAChE;AAAA,SAEK;AAAA,MACH,OAAO,iBAAiB,EAAE,SAAS,MAAM,UAAU,CAAC;AAAA,SAEjD,UAAU;AAAA,MAGb,MAAM,MAAM,aAAa,EAAE,SAAS,WAAW,KAAK,QAAQ,UAAU,CAAC;AAAA,MACvE,OAAO,GAAG,KAAK,WAAW,OAAO,SAAS,aAAa,IAAI;AAAA,IAC7D;AAAA,SAEK;AAAA,MACH,OAAO,IAAI,kBAAkB,EAAE,SAAS,UAAU,KAAK,UAAU,UAAU,CAAC;AAAA,SAEzE;AAAA,MACH,OAAO,eAAe,EAAE,SAAS,UAAU,KAAK,UAAU,UAAU,CAAC;AAAA,SAElE;AAAA,MACH,OAAO,KAAK;AAAA;AAAA;AAYX,SAAS,cAAc,CAAC,QAIpB;AAAA,EACT,QAAQ,SAAS,UAAU,cAAc;AAAA,EACzC,IAAI,OAAO;AAAA,EACX,WAAW,QAAQ,SAAS,OAAO;AAAA,IACjC,IAAI,OAAO,SAAS,UAAU;AAAA,MAC5B,QAAQ;AAAA,IACV,EAAO,SAAI,WAAW,MAAM;AAAA,MAC1B,QAAQ,UAAU,IAAI,KAAK,KAAK;AAAA,IAClC,EAAO;AAAA,MACL,QAAQ,KAAK,MAAM,IAAI,CAAC,SAAS,QAAQ,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG;AAAA;AAAA,EAE3E;AAAA,EACA,OAAO;AAAA;AAMT,SAAS,cAAc,CAAC,MAA4C;AAAA,EAClE,IAAI,MAAM;AAAA,EACV,WAAW,WAAW,MAAM;AAAA,IAC1B,IAAI,OAAO,YAAY,UAAU;AAAA,MAC/B,OAAO,IAAI;AAAA,IACb,EAAO,SAAI,2BAA2B,KAAK,OAAO,GAAG;AAAA,MACnD,OAAO,IAAI;AAAA,IACb,EAAO;AAAA,MAGL,OAAO,KAAK,QAAQ,WAAW,MAAM,MAAM,EAAE,WAAW,KAAK,MAAK;AAAA;AAAA,EAEtE;AAAA,EACA,OAAO;AAAA;AAYT,SAAS,cAAc,CAAC,QAKkC;AAAA,EACxD,QAAQ,SAAS,QAAQ,OAAO,cAAc;AAAA,EAC9C,IAAI,oBAAoB,KAAK,KAAK,MAAM,YAAY,QAAQ;AAAA,IAC1D,OAAO;AAAA,MACL,QAAQ,GAAG,SAAS,SAAS,MAAM;AAAA,MACnC,SAAS,UAAU,IAAI,kBAAkB,EAAE,OAAO,MAAM,OAAO,SAAS,QAAQ,CAAC,CAAC;AAAA,IACpF;AAAA,EACF;AAAA,EACA,OAAO,EAAE,QAAQ,SAAS,SAAS,MAAM,GAAG,SAAS,UAAU,IAAI,KAAK,EAAE;AAAA;AAK5E,SAAS,iBAAiB,CAAC,QAA0C;AAAA,EACnE,QAAQ,SAAS;AAAA,EACjB,IAAI,OAAO,KAAK,UAAU,UAAU;AAAA,IAClC,MAAM,eAAc,EAAE,SAAS,QAAQ,KAAK,8BAA8B,CAAC;AAAA,EAC7E;AAAA,EACA,IAAI,KAAK,OAAO;AAAA,IAAmB,OAAO,gBAAgB,EAAE,KAAK,KAAK,MAAM,CAAC;AAAA,EAC7E,IAAI,KAAK,OAAO;AAAA,IAAsB,OAAO,kBAAkB,EAAE,KAAK,KAAK,MAAM,CAAC;AAAA,EAClF,OAAO,gBAAgB,EAAE,KAAK,KAAK,MAAM,CAAC;AAAA;AAI5C,SAAS,cAAc,CAAC,QAKb;AAAA,EACT,QAAQ,SAAS,QAAQ,MAAM,cAAc;AAAA,EAC7C,MAAM,cAAc,UAAU,IAAI,kBAAkB,EAAE,KAAK,CAAC,CAAC;AAAA,EAC7D,IAAI;AAAA,EACJ,IAAI,KAAK,gBAAgB,MAAM;AAAA,IAC7B,OACE,QAAQ,oBAAoB,UACxB,GAAG,gBAAgB,gBACnB,SAAS,sBAAsB;AAAA,EACvC,EAAO;AAAA,IACL,OAAO,GAAG,eAAe;AAAA;AAAA,EAE3B,IAAI,QAAQ,qBAAqB;AAAA,IAAM,OAAO,GAAG,OAAO,QAAQ;AAAA,EAChE,OAAO,KAAK,WAAW,OAAO,QAAQ,UAAU;AAAA;AASlD,SAAS,gBAAgB,CAAC,QAIf;AAAA,EACT,QAAQ,SAAS,MAAM,cAAc;AAAA,EACrC,IAAI,CAAC,QAAQ,iBAAiB,SAAS,KAAK,EAAE,GAAG;AAAA,IAC/C,MAAM,wBAAsB;AAAA,MAC1B,SAAS,QAAQ;AAAA,MACjB,SAAS,oBAAoB,KAAK;AAAA,MAClC,MAAM,6BAA6B,QAAQ,iBAAiB,KAAK,IAAI;AAAA,IACvE,CAAC;AAAA,EACH;AAAA,EACA,MAAM,MAAM,KAAK,WAAW,OAAO,OAAO;AAAA,EAE1C,IAAI,QAAQ,iBAAiB,aAAa;AAAA,IACxC,MAAM,SAAS,SAAS,SAAS,KAAK,MAAM;AAAA,IAC5C,MAAM,YAAY,GAAG,UAAU,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC;AAAA,IAYxD,MAAM,YAAY,KAAK,YAAY,SAAS,IAAI,aAAa,sBAAsB,IAAI,aAAa;AAAA,IACpG,QAAQ,KAAK;AAAA,WACN;AAAA,QACH,OAAO,GAAG,aAAa,OAAO,UAAU,IAAI,KAAK,UAAU,KAAK,KAAK,CAAC,IAAI,QAAQ;AAAA,WAC/E;AAAA,WACA;AAAA,WACA,oBAAoB;AAAA,QACvB,MAAM,SAAS,KAAK,YAAY,SAAS,IAAI,wBAAwB,IAAI,cAAc;AAAA,QACvF,OAAO,eAAe,EAAE,SAAS,QAAQ,MAAM,UAAU,CAAC;AAAA,MAC5D;AAAA,WACK;AAAA,QACH,OAAO,GAAG,gBAAgB,UAAU,IAAI,KAAK,UAAU,KAAK,KAAK,CAAC,IAAI,QAAQ;AAAA,WAC3E;AAAA,QACH,OAAO,GAAG,oBAAoB,UAAU,IAAI,KAAK,UAAU,KAAK,KAAK,CAAC,IAAI,QAAQ;AAAA,WAC/E;AAAA,QACH,OAAO,GAAG,qBAAqB,UAAU,IAAI,KAAK,UAAU,KAAK,KAAK,CAAC,IAAI,QAAQ;AAAA;AAAA,EAEzF;AAAA,EAEA,IAAI,QAAQ,iBAAiB,iBAAiB;AAAA,IAC5C,MAAM,SAAS,SAAS,SAAS,KAAK,MAAM;AAAA,IAE5C,MAAM,cAAc,CAAC,MAAc,UAA2B;AAAA,MAC5D,IAAI,OAAO,UAAU;AAAA,QAAU,OAAO,GAAG;AAAA,MACzC,MAAM,MAAM,OAAO,UAAU,YAAY,OAAO,KAAK,IACjD,UAAU,OAAO,SAAS,MAAM,QAAQ,KAAK,IAAI,UACjD,OAAO,UAAU,WAAW,WAAW;AAAA,MAC3C,OAAO,GAAG,WAAW;AAAA;AAAA,IAEvB,MAAM,mBAAmB,CAAC,MAAc,UAA2B;AAAA,MACjE,MAAM,OAAO,aAAa,WAAW,UAAU,IAAI,IAAI;AAAA,MACvD,MAAM,QAAQ,YAAY,MAAM,KAAK;AAAA,MACrC,IAAI,OAAO;AAAA,MACX,IAAI,UAAU,MAAM;AAAA,QAClB,MAAM,SAAS,gBAAgB,WAAW,UAAU,IAAI,IAAI;AAAA,QAC5D,MAAM,QAAQ,OAAO,UAAU,YAAa,QAAQ,IAAI,IAAK;AAAA,QAC7D,MAAM,aAAa,OAAO,UAAU,WAChC,yBAAyB,EAAE,SAAS,MAAM,QAAQ,OAAO,UAAU,IAAI,KAAK,UAAU,KAAK,CAAC,EAAE,CAAC,IAC/F,GAAG,YAAY,UAAU,IAAI,KAAK;AAAA,QACtC,OAAO,IAAI,aAAa;AAAA,MAC1B;AAAA,MACA,OAAO,KAAK,WAAW,OAAO,QAAQ,UAAU;AAAA;AAAA,IAElD,QAAQ,KAAK;AAAA,WACN;AAAA,QACH,OAAO,iBAAiB,eAAe,KAAK,IAAI,GAAG,KAAK,KAAK;AAAA,WAC1D;AAAA,WACA;AAAA,WACA,oBAAoB;AAAA,QACvB,MAAM,SAAS,gBAAgB,WAAW,UAAU,IAAI,eAAe,KAAK,IAAI,CAAC;AAAA,QACjF,OAAO,eAAe,EAAE,SAAS,QAAQ,MAAM,UAAU,CAAC;AAAA,MAC5D;AAAA,WACK;AAAA,WACA,mBAAmB;AAAA,QAGtB,MAAM,OAAO,KAAK,OAAO,sBAAsB,QAAQ;AAAA,QACvD,OAAO,iBAAiB,GAAG,eAAe,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK;AAAA,MAC3E;AAAA,WACK,kBAAkB;AAAA,QAerB,MAAM,QAAQ,aAAa,WAAW,UAAU,IAAI,eAAe,KAAK,IAAI,CAAC;AAAA,QAC7E,MAAM,WAAW,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK,QAAQ,CAAC,KAAK,KAAK;AAAA,QACrE,MAAM,QAAQ,SAAS,IAAI,CAAC,YAAY;AAAA,UACtC,IAAI,YAAY,QAAS,OAAO,YAAY,YAAY,YAAY,MAAO;AAAA,YACzE,MAAM,wBAAsB;AAAA,cAC1B,SAAS,QAAQ;AAAA,cACjB,SAAS;AAAA,cACT,MAAM;AAAA,YACR,CAAC;AAAA,UACH;AAAA,UACA,MAAM,QAAQ,OAAO,YAAY,YAAa,UAAU,IAAI,IAAK;AAAA,UACjE,MAAM,OAAO,UAAU,IAAI,eAAe,KAAK,IAAI,CAAC;AAAA,UACpD,MAAM,OAAO,GAAG,QAAQ,WAAW,EAAE,MAAM,YAAY,CAAC,KAAK,QAAQ,WAAW,EAAE,MAAM,OAAO,CAAC;AAAA,UAChG,OAAO,mCAAmC,WAAW,eAAe,YAAY,MAAM,OAAO,SAAS,QAAQ,WAAW,EAAE,MAAM,YAAY,CAAC,KAAK,QAAQ,WAAW,EAAE,MAAM,QAAQ,CAAC,OAAO,UAAU,IAAI,KAAK;AAAA,SAClN;AAAA,QACD,OAAO,MAAM,WAAW,IAAI,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK,EAAE,KAAK,OAAO;AAAA,MACxE;AAAA;AAAA,QAEE,MAAM,eAAc,EAAE,SAAS,YAAY,KAAK,6CAA6C,CAAC;AAAA;AAAA,EAEpG;AAAA,EAGA,MAAM,SAAS,SAAS,SAAS,KAAK,MAAM;AAAA,EAC5C,MAAM,aAAa,eAAe,KAAK,IAAI;AAAA,EAC3C,QAAQ,KAAK;AAAA,SACN;AAAA,MACH,OAAO,gBAAgB,WAAW,UAAU,IAAI,UAAU,MAAM,YAAY,UAAU,IAAI,KAAK,UAAU,KAAK,KAAK,CAAC;AAAA,SACjH;AAAA,SACA;AAAA,SACA,oBAAoB;AAAA,MACvB,MAAM,SAAS,6BAA6B,WAAW,UAAU,IAAI,UAAU;AAAA,MAC/E,OAAO,eAAe,EAAE,SAAS,QAAQ,MAAM,UAAU,CAAC;AAAA,IAC5D;AAAA,SACK;AAAA,MACH,OAAO,8BAA8B,WAAW,UAAU,IAAI,UAAU,YAAY,UAAU,IAAI,KAAK,UAAU,KAAK,KAAK,CAAC;AAAA,SACzH;AAAA,MACH,OAAO,gBAAgB,WAAW,UAAU,IAAI,GAAG,eAAe,MAAM,YAAY,UAAU,IAAI,KAAK,UAAU,KAAK,KAAK,CAAC;AAAA,SACzH;AAAA,MACH,OAAO,gBAAgB,WAAW,UAAU,IAAI,GAAG,kBAAkB,MAAM,YAAY,UAAU,IAAI,KAAK,UAAU,KAAK,KAAK,CAAC;AAAA;AAAA;AAMrI,SAAS,eAAe,CAAC,QAAqF;AAAA,EAC5G,QAAQ,SAAS,MAAM,cAAc;AAAA,EACrC,IAAI,SAAS,MAAM;AAAA,IACjB,OAAO,GAAG,aAAa,SAAS,KAAK,GAAG,KAAK,KAAK,cAAc,QAAQ,QAAQ;AAAA,EAClF;AAAA,EACA,IAAI,YAAY,MAAM;AAAA,IAGpB,MAAM,MAAM,aAAa,EAAE,SAAS,WAAW,KAAK,QAAQ,UAAU,CAAC;AAAA,IACvE,OAAO,IAAI,IAAI,SAAS,KAAK,cAAc,QAAQ,QAAQ;AAAA,EAC7D;AAAA,EACA,MAAM,SAAS,SAAS,SAAS,KAAK,MAAM;AAAA,EAC5C,MAAM,YAAY,KAAK,cAAc,QAAQ,QAAQ;AAAA,EACrD,IAAI,KAAK,UAAU,WAAW;AAAA,IAC5B,OAAO,GAAG,UAAU;AAAA,EACtB;AAAA,EACA,IAAI,QAAQ,qBAAqB,UAAU;AAAA,IACzC,OAAO,GAAG,UAAU,mBAAmB,KAAK,UAAU,UAAU,UAAU;AAAA,EAC5E;AAAA,EAOA,IAAK,KAAK,UAAU,aAAc,KAAK,cAAc,QAAQ;AAAA,IAC3D,OAAO,GAAG,UAAU;AAAA,EACtB;AAAA,EACA,MAAM,YAAY,KAAK,UAAU,UAAU,GAAG,wBAAwB,GAAG;AAAA,EACzE,OAAO,GAAG,cAAc,UAAU;AAAA;AAKpC,SAAS,gBAAgB,CAAC,QAA2D;AAAA,EACnF,QAAQ,SAAS,SAAS;AAAA,EAC1B,IAAI,KAAK,SAAS;AAAA,IAAO,OAAO;AAAA,EAChC,MAAM,QAAQ,KAAK,UAAU,YAAY,KAAK,OAAO,QAAQ,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;AAAA,EAC5F,OAAO,WAAW;AAAA;AAmBpB,SAAS,mBAAmB,CAAC,QAA8E;AAAA,EACzG,QAAQ,SAAS,MAAM,aAAa;AAAA,EACpC,IAAI,KAAK,OAAO,QAAQ,WAAW,KAAK,KAAK,OAAO,eAAe,cAC9D,KAAK,OAAO,YAAY,UAAU,KAAK,KAAK,KAAK,OAAO,cAAc,WAAW;AAAA,IACpF,MAAM,eAAc,EAAE,SAAS,qEAAqE,CAAC;AAAA,EACvG;AAAA,EACA,MAAM,QAAQ,KAAK,OAAO,QAAQ,IAAI,CAAC,WAAW,qBAAqB,EAAE,OAAO,CAAC,CAAC;AAAA,EAClF,IAAI,IAAI,IAAI,KAAK,EAAE,SAAS,MAAM,QAAQ;AAAA,IACxC,MAAM,eAAc,EAAE,SAAS,2DAA2D,CAAC;AAAA,EAC7F;AAAA,EACA,MAAM,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,YAAY,QAAQ,WAAW,EAAE,KAAK,CAAC,GAAG;AAAA,EAChF,MAAM,SAAmB,CAAC;AAAA,EAC1B,SAAS,QAAQ,EAAG,QAAQ,OAAO,QAAQ,SAAS,eAAe,WAAW;AAAA,IAC5E,OAAO,KAAK,oBAAoB,OAAO,MAAM,OAAO,QAAQ,eAAe,SAAS,EAAE,KAAK,IAAI,IAAI;AAAA,EACrG;AAAA,EACA,IAAI,OAAO,SAAS,eAAe,WAAW;AAAA,IAC5C,MAAM,eAAc,EAAE,SAAS,kEAAkE,CAAC;AAAA,EACpG;AAAA,EACA,OAAO,OAAO,WAAW,IAAI,OAAO,KAAe,oBAAoB,OAAO,KAAK,IAAI;AAAA;AAGzF,SAAS,iBAAiB,CAAC,QAIhB;AAAA,EACT,QAAQ,SAAS,MAAM,cAAc;AAAA,EACrC,MAAM,QAAQ,aAAa,EAAE,SAAS,WAAW,KAAK,QAAQ,UAAU,CAAC;AAAA,EACzE,IAAI,KAAK,QAAQ,SAAS;AAAA,IACxB,IAAI,KAAK,cAAc,gBAAgB,KAAK,OAAO,QAAQ,WAAW,KAClE,KAAK,OAAO,YAAY,SAAS,cAAc,KAAK,OAAO,WAAW,UAAU,KAAK,eACrF,KAAK,OAAO,YAAY,aAAa,KAAK,OAAO,WAAW,aAC5D,KAAK,OAAO,UAAU,aAAa,KAAK,OAAO,WAAW,aAAa,KAAK,OAAO,eAAe,WAAW;AAAA,MAC/G,MAAM,eAAc,EAAE,SAAS,0EAA0E,CAAC;AAAA,IAC5G;AAAA,IACA,OAAO,sBAAsB,MAAM,YAAY,QAAQ,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;AAAA,EACxF;AAAA,EACA,MAAM,cAAc,QAAQ,WAAW,EAAE,MAAM,KAAK,YAAY,CAAC;AAAA,EACjE,MAAM,WAAW,QAAQ,WAAW,EAAE,MAAM,QAAQ,CAAC;AAAA,EAOrD,IAAI,WAAW;AAAA,EACf,IAAI,KAAK,QAAQ,eAAe,KAAK,OAAO,YAAY,aAAa,KAAK,OAAO,QAAQ,SAAS,GAAG;AAAA,IACnG,MAAM,YAAY,IAAI,IACpB,KAAK,OAAO,QACT,OAAO,CAAC,WAAW,OAAO,cAAc,aAAa,OAAO,aAAa,IAAI,EAC7E,IAAI,CAAC,WAAW,OAAO,IAAI,CAChC;AAAA,IACA,MAAM,QAAQ,KAAK,OAAO;AAAA,IAC1B,MAAM,cAAc,MAAM,OACxB,CAAC,UAAyD,YAAY,KACxE;AAAA,IACA,IAAI,YAAY,WAAW,MAAM,UAAU,YAAY,MAAM,CAAC,SAAS,UAAU,IAAI,KAAK,OAAO,IAAI,CAAC,GAAG;AAAA,MACvG,MAAM,WAAW,YAAY,IAAI,CAAC,SAChC,gBAAgB;AAAA,QACd;AAAA,QACA,MAAM;AAAA,aACD;AAAA,UACH,QAAQ,EAAE,OAAO,SAAS,MAAM,KAAK,OAAO,SAAU,KAAK,OAAO,cAAc,YAAY,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,UAAU,EAAG;AAAA,QACzI;AAAA,QACA;AAAA,MACF,CAAC,CACH;AAAA,MACA,WAAW,aAAa,SAAS,KAAK,IAAI;AAAA,IAC5C;AAAA,EACF;AAAA,EACA,MAAM,UAAU,KAAK,cAAc,eAC/B,oBAAoB,EAAE,SAAS,MAAM,SAAS,CAAC,IAC/C,WAAW;AAAA,EACf,MAAM,aACJ,KAAK,QAAQ,cACT,qBAAqB,UAAU,6BAA6B,gBAC5D,GAAG,cAAc;AAAA,EACvB,MAAM,QAAQ,QAAQ,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;AAAA,EACrD,OAAO,6BAA6B,oBAAoB,MAAM,YAAY,gBAAgB;AAAA;AAQ5F,SAAS,mBAAmB,CAAC,QAIlB;AAAA,EACT,QAAQ,SAAS,UAAU,cAAc;AAAA,EACzC,MAAM,SAAS,SAAS;AAAA,EACxB,IAAI,OAAO,QAAQ,WAAW,KAAK,OAAO,YAAY,SAAS,eAC1D,OAAO,YAAY,UAAU,KAAK,KAAK,OAAO,cAAc,aAC7D,OAAO,YAAY,aAAa,OAAO,WAAW,aAClD,OAAO,UAAU,aAAa,OAAO,WAAW,aAChD,OAAO,eAAe,aAAa,OAAO,YAAY,aACtD,OAAO,oBAAoB,WAAW;AAAA,IACxC,MAAM,eAAc,EAAE,SAAS,gDAAgD,CAAC;AAAA,EAClF;AAAA,EACA,MAAM,QAAQ,aAAa,EAAE,SAAS,WAAW,QAAQ,UAAU,CAAC;AAAA,EACpE,OAAO,IAAI,MAAM,YAAY,QAAQ,WAAW,EAAE,MAAM,SAAS,MAAM,CAAC;AAAA;AAK1E,SAAS,cAAc,CAAC,QAGsC;AAAA,EAC5D,QAAQ,SAAS,cAAc;AAAA,EAC/B,IAAI,cAAc,aAAa,UAAU,WAAW,GAAG;AAAA,IACrD,OAAO,EAAE,QAAQ,IAAI,QAAQ,OAAO;AAAA,EACtC;AAAA,EACA,IAAI,CAAC,QAAQ,aAAa,WAAW;AAAA,IACnC,OAAO,EAAE,QAAQ,IAAI,QAAQ,UAAU;AAAA,EACzC;AAAA,EACA,MAAM,UAAU,UACb,IAAI,CAAC,WAAW;AAAA,IACf,IAAI,OAAO,WAAW;AAAA,MAAU,OAAO,QAAQ,WAAW,EAAE,MAAM,OAAO,CAAC;AAAA,IAC1E,IAAI,eAAe,QAAQ;AAAA,MACzB,MAAM,OAAO,QAAQ,WAAW,EAAE,MAAM,OAAO,KAAK,CAAC;AAAA,MACrD,OAAO,GAAG,QAAQ,mBAAmB,EAAE,YAAY,KAAK,CAAC,QAAQ;AAAA,IACnE;AAAA,IACA,MAAM,OAAO,QAAQ,WAAW,EAAE,MAAM,OAAO,KAAK,CAAC;AAAA,IACrD,OAAO,GAAG,eAAe,EAAE,SAAS,YAAY,KAAK,CAAC,QAAQ;AAAA,GAC/D,EACA,KAAK,IAAI;AAAA,EACZ,OAAO,EAAE,QAAQ,cAAc,WAAW,QAAQ,SAAS;AAAA;AA2B7D,SAAS,kBAAkB,CAAC,QAAwF;AAAA,EAClH,QAAQ,SAAS,MAAM,cAAc;AAAA,EAIrC,MAAM,iBAAiB,CAAC,WAAoC,OAAO,SAAS,YAAY,OAAO,SAAS,UAAU,OAAO,SAAS;AAAA,EAClI,MAAM,WAAW,QAAQ,SAAS,UAC9B,KAAK,QAAQ,MAAM,CAAC,WAAW,OAAO,SAAS,YAAY,OAAO,SAAS,MAAM,IACjF,QAAQ,SAAS,cAAc,KAAK,QAAQ,MAAM,cAAc;AAAA,EACpE,IAAI,CAAC,UAAU;AAAA,IACb,MAAM,wBAAsB;AAAA,MAC1B,SAAS,QAAQ;AAAA,MACjB,SAAS;AAAA,MACT,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA,EACA,IAAI,KAAK,QAAQ,WAAW,KAAK,KAAK,QAAQ,WAAW,KAAK,QAAQ,QAAQ;AAAA,IAC5E,MAAM,eAAc,EAAE,SAAS,8CAA8C,KAAK,QAAQ,cAAc,KAAK,QAAQ,SAAS,CAAC;AAAA,EACjI;AAAA,EACA,IAAI,KAAK,KAAK,WAAW;AAAA,IAAG,MAAM,eAAc,EAAE,SAAS,uCAAuC,CAAC;AAAA,EACnG,WAAW,UAAU,KAAK,SAAS;AAAA,IACjC,IAAI,OAAO,SAAS,aAAa,EAAE,OAAO,UAAU,OAAO,KAAK,KAAK,OAAO,SAAS,KAAK,OAAO,SAAS,KAAK;AAAA,MAC7G,MAAM,eAAc,EAAE,SAAS,wDAAwD,OAAO,OAAO,KAAK,IAAI,CAAC;AAAA,IACjH;AAAA,EACF;AAAA,EACA,MAAM,QAAQ,QAAQ,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;AAAA,EACrD,MAAM,cAAc,KAAK,QAAQ,IAAI,CAAC,GAAG,UAAU,QAAQ,WAAW,EAAE,MAAM,WAAW,QAAQ,CAAC,CAAC;AAAA,EACnG,MAAM,OAAO,KAAK,KAAK,IAAI,CAAC,KAAK,YAAY;AAAA,IAC3C,IAAI,IAAI,WAAW,KAAK,QAAQ,QAAQ;AAAA,MACtC,MAAM,eAAc,EAAE,SAAS,qBAAqB,IAAI,qBAAqB,KAAK,QAAQ,iBAAiB,CAAC;AAAA,IAC9G;AAAA,IACA,MAAM,QAAQ,IAAI,IAAI,CAAC,OAAO,UAAU;AAAA,MACtC,MAAM,cAAc,UAAU,IAAI,KAAK;AAAA,MACvC,MAAM,SAAS,KAAK,QAAQ;AAAA,MAC5B,QAAQ,OAAO;AAAA,aACR;AAAA,UACH,OAAO,QAAQ,SAAS,UAAU,QAAQ,2BAA2B,QAAQ;AAAA,aAC1E;AAAA,UACH,OAAO,QAAQ;AAAA,aACZ;AAAA,UACH,OAAO,QAAQ;AAAA,aACZ;AAAA,UACH,OAAO,QAAQ,6BAA6B,OAAO;AAAA,aAChD;AAAA,UACH,OAAO,QAAQ;AAAA,aACZ;AAAA,UACH,OAAO,QAAQ;AAAA;AAAA,UAEf,OAAO;AAAA;AAAA,KAEZ;AAAA,IACD,OAAO,QAAQ,SAAS,UAAU,OAAO,MAAM,KAAK,IAAI,MAAM,aAAa,IAAI,MAAM,KAAK,IAAI,MAAM;AAAA,GACrG;AAAA,EACD,MAAM,KAAK,KAAK,QAAQ,IAAI,CAAC,QAAQ,UAAU,GAAG,SAAS,SAAS,MAAM,OAAO,SAAS,YAAY,QAAkB,EAAE,KAAK,OAAO;AAAA,EACtI,OAAO,sBAAsB,KAAK,KAAK,IAAI,SAAS,UAAU,CAAC,GAAG,aAAa,QAAQ,WAAW,EAAE,MAAM,KAAK,aAAa,CAAC,CAAC,EAAE,KAAK,IAAI,SAAS;AAAA;AAGpJ,SAAS,YAAY,CAAC,QAIJ;AAAA,EAChB,QAAQ,SAAS,WAAW,cAAc;AAAA,EAE1C,IAAI,UAAU,eAAe,aAAa,UAAU,QAAQ,SAAS,KAAK,UAAU,WAAW,SAAS,YAAY;AAAA,IAClH,MAAM,eAAc,EAAE,SAAS,+CAA+C,CAAC;AAAA,EACjF;AAAA,EACA,IACE,UAAU,eAAe,aACzB,UAAU,eAAe,aACzB,UAAU,WAAW,SAAS,GAC9B;AAAA,IACA,MAAM,eAAc,EAAE,SAAS,2CAA2C,CAAC;AAAA,EAC7E;AAAA,EACA,MAAM,aAAa,UAAU,QAAQ,IAAI,CAAC,WAAW,gBAAgB,SAAS,MAAM,CAAC;AAAA,EACrF,IAAI,UAAU,eAAe,WAAW;AAAA,IACtC,WAAW,KAAK,iBAAiB,EAAE,SAAS,MAAM,UAAU,WAAW,CAAC,CAAC;AAAA,EAC3E;AAAA,EACA,IAAI,UAAU,eAAe,WAAW;AAAA,IACtC,WAAW,aAAa,UAAU,YAAY;AAAA,MAC5C,MAAM,aAAa,aAAa,SAAS,UAAU,GAAG;AAAA,MACtD,MAAM,YAAY,UAAU,aAAa,OAAO,eAAe,EAAE,SAAS,WAAW,CAAC,IAAI;AAAA,MAC1F,WAAW,KAAK,GAAG,gBAAgB,QAAQ,WAAW,EAAE,MAAM,UAAU,MAAM,CAAC,GAAG;AAAA,IACpF;AAAA,EACF;AAAA,EACA,IAAI,UAAU,oBAAoB,WAAW;AAAA,IAC3C,WAAW,YAAY,UAAU,iBAAiB;AAAA,MAChD,WAAW,KAAK,oBAAoB,EAAE,SAAS,UAAU,UAAU,CAAC,CAAC;AAAA,IACvE;AAAA,EACF;AAAA,EACA,IAAI,UAAU,cAAc,WAAW;AAAA,IACrC,MAAM,YAAY,UAAU;AAAA,IAC5B,IAAI,UAAU,YAAY,WAAW,GAAG;AAAA,MACtC,MAAM,eAAc,EAAE,SAAS,gDAAgD,CAAC;AAAA,IAClF;AAAA,IACA,MAAM,YAAY,UAAU,YAAY,IAAI,CAAC,WAAW,SAAS,SAAS,MAAM,CAAC,EAAE,KAAK,IAAI;AAAA,IAC5F,MAAM,QACJ,UAAU,QAAQ,WAAW,IACzB,KACA,aAAa,UAAU,QAAQ,IAAI,CAAC,SAAS,gBAAgB,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,IAC3G,WAAW,KACT,mCAAmC,YAAY,aAAa,QAAQ,WAAW,EAAE,MAAM,UAAU,MAAM,CAAC,GAC1G;AAAA,EACF;AAAA,EACA,IAAI,iBAAiB;AAAA,EACrB,IAAI,UAAU,eAAe,aAAa,UAAU,WAAW,SAAS,GAAG;AAAA,IACzE,IAAI,CAAC,QAAQ,aAAa,YAAY;AAAA,MACpC,MAAM,wBAAsB;AAAA,QAC1B,SAAS,QAAQ;AAAA,QACjB,SAAS;AAAA,QACT,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAAA,IACA,iBAAiB,gBAAgB,UAAU,WAAW,IAAI,CAAC,WAAW,SAAS,SAAS,cAAc,EAAE,WAAW,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,EAC1I;AAAA,EACA,MAAM,UAAU,WAAW,WAAW,IAAI,MAAM,WAAW,KAAK,IAAI;AAAA,EAEpE,IAAI;AAAA,EACJ,IAAI,UAAU,eAAe,WAAW;AAAA,IACtC,IAAI,UAAU,MAAM,UAAU,WAAW;AAAA,MACvC,MAAM,eAAc,EAAE,SAAS,oFAA+E,CAAC;AAAA,IACjH;AAAA,IAGA,MAAM,QAAQ,aAAa,EAAE,SAAS,WAAW,UAAU,YAAY,UAAU,CAAC;AAAA,IAClF,OAAO,IAAI,MAAM,YAAY,QAAQ,WAAW,EAAE,MAAM,UAAU,MAAM,KAAK,CAAC;AAAA,EAChF,EAAO;AAAA,IACL,OAAO,YAAY,SAAS,UAAU,KAAK;AAAA;AAAA,EAE7C,IAAI,OAAO,UAAU,iBAAiB,gBAAgB;AAAA,EAEtD,IAAI,UAAU,eAAe,aAAa,UAAU,WAAW,SAAS,GAAG;AAAA,IACzE,WAAW,QAAQ,UAAU,YAAY;AAAA,MACvC,IAAI,KAAK,GAAG,WAAW,GAAG;AAAA,QACxB,MAAM,eAAc,EAAE,SAAS,wCAAwC,CAAC;AAAA,MAC1E;AAAA,MACA,MAAM,KAAK,KAAK,GACb,IAAI,CAAC,SAAS,GAAG,SAAS,SAAS,KAAK,IAAI,OAAO,SAAS,SAAS,KAAK,KAAK,GAAG,EAClF,KAAK,OAAO;AAAA,MACf,QAAQ,eAAe,YAAY,SAAS,KAAK,KAAK,QAAQ;AAAA,IAChE;AAAA,EACF;AAAA,EACA,IAAI,UAAU,aAAa,WAAW;AAAA,IACpC,QAAQ,IAAI,mBAAmB,EAAE,SAAS,MAAM,UAAU,UAAU,UAAU,CAAC;AAAA,EACjF;AAAA,EAEA,IAAI,UAAU,iBAAiB,aAAa,UAAU,aAAa,SAAS,GAAG;AAAA,IAC7E,IAAI,CAAC,QAAQ,aAAa,aAAa;AAAA,MACrC,MAAM,wBAAsB;AAAA,QAC1B,SAAS,QAAQ;AAAA,QACjB,SAAS;AAAA,QACT,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAAA,IACA,WAAW,QAAQ,UAAU,cAAc;AAAA,MACzC,QAAQ,IAAI,kBAAkB,EAAE,SAAS,MAAM,UAAU,CAAC;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,IAAI,UAAU,UAAU,WAAW;AAAA,IACjC,QAAQ,UAAU,WAAW,EAAE,SAAS,MAAM,UAAU,OAAO,UAAU,CAAC;AAAA,EAC5E;AAAA,EACA,IAAI,UAAU,YAAY,aAAa,UAAU,QAAQ,SAAS,GAAG;AAAA,IACnE,QAAQ,aAAa,UAAU,QAAQ,IAAI,CAAC,WAAW,SAAS,SAAS,MAAM,CAAC,EAAE,KAAK,IAAI;AAAA,EAC7F;AAAA,EACA,IAAI,UAAU,WAAW,WAAW;AAAA,IAClC,QAAQ,WAAW,WAAW,EAAE,SAAS,MAAM,UAAU,QAAQ,UAAU,CAAC;AAAA,EAC9E;AAAA,EACA,IAAI,UAAU,YAAY,aAAa,UAAU,QAAQ,SAAS,GAAG;AAAA,IACnE,MAAM,QAAQ,UAAU,QAAQ,IAAI,CAAC,SACnC,gBAAgB,EAAE,SAAS,MAAM,YAAY,OAAO,KAAK,MAAM,QAAQ,cAAc,EAAE,WAAW,QAAQ,KAAK,OAAO,CAAC,EAAE,IAAI,MAAM,UAAU,CAAC,CAChJ;AAAA,IACA,QAAQ,aAAa,MAAM,KAAK,IAAI;AAAA,EACtC;AAAA,EAEA,IAAI,UAAU,UAAU,WAAW;AAAA,IACjC,YAAY,UAAU,OAAO,OAAO;AAAA,IACpC,QAAQ,UAAU,UAAU;AAAA,EAC9B;AAAA,EACA,IAAI,UAAU,WAAW,WAAW;AAAA,IAClC,YAAY,UAAU,QAAQ,QAAQ;AAAA,IACtC,IAAI,UAAU,UAAU,aAAa,QAAQ,wBAAwB,MAAM;AAAA,MACzE,QAAQ,UAAU,QAAQ,oBAAoB;AAAA,IAChD;AAAA,IACA,QAAQ,WAAW,UAAU;AAAA,EAC/B;AAAA,EACA,IAAI,UAAU,YAAY,WAAW;AAAA,IACnC,MAAM,SAAS,oBAAoB,EAAE,SAAS,MAAM,UAAU,QAAQ,CAAC;AAAA,IACvE,IAAI,WAAW;AAAA,MAAM,QAAQ,IAAI;AAAA,EACnC;AAAA,EAEA,OAAO,EAAE,MAAM,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;AAK7D,SAAS,YAAY,CAAC,QAIJ;AAAA,EAChB,QAAQ,SAAS,WAAW,cAAc;AAAA,EAE1C,IAAI,UAAU,QAAQ,WAAW,GAAG;AAAA,IAClC,MAAM,eAAc,EAAE,SAAS,sCAAsC,CAAC;AAAA,EACxE;AAAA,EACA,IAAI,UAAU,KAAK,WAAW,GAAG;AAAA,IAC/B,MAAM,eAAc,EAAE,SAAS,mCAAmC,CAAC;AAAA,EACrE;AAAA,EACA,WAAW,OAAO,UAAU,MAAM;AAAA,IAChC,IAAI,IAAI,WAAW,UAAU,QAAQ,QAAQ;AAAA,MAC3C,MAAM,eAAc;AAAA,QAClB,SAAS,kBAAkB,IAAI,qBAAqB,UAAU,QAAQ;AAAA,MACxE,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,UAAU;AAAA,EAC7B,MAAM,gBAAgB,eAAe,aAAa,eAAe;AAAA,EACjE,MAAM,gBACJ,iBAAiB,QAAQ,kBAAkB,iBAAiB,uBAAuB;AAAA,EAErF,MAAM,aAAa,UAAU,QAAQ,IAAI,CAAC,SAAS,QAAQ,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,EAC1F,MAAM,UAAU,UAAU,KACvB,IACC,CAAC,QACC,IAAI,IACD,IAAI,CAAC,UAAU;AAAA,IAGd,IAAI,gBAAgB,KAAK;AAAA,MAAG,OAAO,GAAG,UAAU,IAAI,MAAM,IAAI,IAAI,aAAa,SAAS,KAAK;AAAA,IAE7F,IAAI,cAAc,KAAK,GAAG;AAAA,MACxB,OAAO,QAAQ,YAAY,EAAE,eAAe,MAAM,eAAe,UAAU,CAAC;AAAA,IAC9E;AAAA,IACA,IAAI,CAAC,iBAAiB,KAAK;AAAA,MAAG,OAAO,UAAU,IAAI,KAAK;AAAA,IAExD,IAAI,CAAC,QAAQ,mBAAmB;AAAA,MAC9B,MAAM,eAAc;AAAA,QAClB,SAAS,GAAG,QAAQ;AAAA,MACtB,CAAC;AAAA,IACH;AAAA,IACA,OAAO;AAAA,GACR,EACA,KAAK,IAAI,IAChB,EACC,KAAK,IAAI;AAAA,EACZ,IAAI,OAAO,GAAG,iBAAiB,YAAY,SAAS,UAAU,KAAK,MAAM,sBAAsB;AAAA,EAM/F,IACE,eAAe,aACf,EAAE,eAAe,eACjB,QAAQ,eAAe,SAAS,cAChC,OAAO,OAAO,WAAW,MAAM,EAAE,KAAK,CAAC,UAAU,cAAc,KAAK,KAAM,cAAc,KAAK,KAAK,gBAAgB,EAAE,UAAU,MAAM,CAAC,CAAE,GACvI;AAAA,IACA,QAAQ,OAAO,QAAQ,WAAW,EAAE,MAAM,QAAQ,eAAe,MAAM,CAAC;AAAA,EAC1E;AAAA,EAEA,IAAI,eAAe,WAAW;AAAA,IAC5B,IAAI,eAAe,YAAY;AAAA,MAC7B,IAAI,QAAQ,kBAAkB,uBAAuB;AAAA,QACnD,IAAI,SAAS;AAAA,QACb,IAAI,WAAW,eAAe,WAAW;AAAA,UACvC,IAAI,QAAQ,SAAS,YAAY;AAAA,YAC/B,MAAM,wBAAsB;AAAA,cAC1B,SAAS,QAAQ;AAAA,cACjB,SAAS;AAAA,cACT,MAAM;AAAA,YACR,CAAC;AAAA,UACH;AAAA,UACA,SAAS,kBAAkB,QAAQ,WAAW,EAAE,MAAM,WAAW,WAAW,CAAC;AAAA,QAC/E,EAAO,SAAI,WAAW,YAAY,aAAa,WAAW,QAAQ,SAAS,GAAG;AAAA,UAC5E,SAAS,KAAK,WAAW,QAAQ,IAAI,CAAC,SAAS,QAAQ,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,UACtF,IAAI,WAAW,kBAAkB,WAAW;AAAA,YAG1C,UAAU,UAAU,WAAW;AAAA,UACjC;AAAA,QACF;AAAA,QACA,QAAQ,eAAe;AAAA,MACzB,EAAO,SAAI,WAAW,eAAe,aAAa,WAAW,kBAAkB,WAAW;AAAA,QAKxF,MAAM,wBAAsB;AAAA,UAC1B,SAAS,QAAQ;AAAA,UACjB,SAAS;AAAA,UACT,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,IACF,EAAO;AAAA,MACL,MAAM,UAAU,OAAO,QAAQ,WAAW,MAAM;AAAA,MAChD,IAAI,QAAQ,WAAW,GAAG;AAAA,QACxB,MAAM,eAAc,EAAE,SAAS,6CAA6C,CAAC;AAAA,MAC/E;AAAA,MAOA,MAAM,UAAU,QAAQ,WAAW,EAAE,MAAM,UAAU,MAAM,KAAK,CAAC;AAAA,MACjE,MAAM,cAAc,kBAAkB,EAAE,SAAS,SAAS,SAAS,WAAW,SAAS,eAAe,MAAM,WAAW,UAAU,MAAM,KAAK,CAAC;AAAA,MAC7I,IAAI,QAAQ,eAAe,cAAc;AAAA,QACvC,IAAI,WAAW,uBAAuB,WAAW;AAAA,UAC/C,MAAM,eAAc,EAAE,SAAS,2DAA2D,CAAC;AAAA,QAC7F;AAAA,QACA,IAAI,WAAW,eAAe,aAAa,QAAQ,SAAS,YAAY;AAAA,UACtE,MAAM,wBAAsB;AAAA,YAC1B,SAAS,QAAQ;AAAA,YACjB,SAAS;AAAA,YACT,MAAM;AAAA,UACR,CAAC;AAAA,QACH;AAAA,QACA,IAAI,WAAW,eAAe,aAAa,WAAW,kBAAkB,WAAW;AAAA,UACjF,MAAM,eAAc;AAAA,YAClB,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AAAA,QAGA,MAAM,UAAU,WAAW,kBAAkB,YAAY,KAAK,UAAU,WAAW;AAAA,QACnF,MAAM,SACJ,WAAW,eAAe,YACtB,kBAAkB,QAAQ,WAAW,EAAE,MAAM,WAAW,WAAW,CAAC,MACpE,KAAK,WAAW,QAAQ,IAAI,CAAC,SAAS,QAAQ,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,KAAK;AAAA,QACxF,QAAQ,eAAe,wBAAwB;AAAA,MACjD,EAAO;AAAA,QACL,IAAI,WAAW,eAAe,WAAW;AAAA,UACvC,MAAM,wBAAsB;AAAA,YAC1B,SAAS,QAAQ;AAAA,YACjB,SAAS;AAAA,YACT,MAAM;AAAA,UACR,CAAC;AAAA,QACH;AAAA,QACA,IAAI,WAAW,kBAAkB,WAAW;AAAA,UAC1C,MAAM,wBAAsB;AAAA,YAC1B,SAAS,QAAQ;AAAA,YACjB,SAAS;AAAA,YACT,MAAM;AAAA,UACR,CAAC;AAAA,QACH;AAAA,QAIA,MAAM,QACJ,WAAW,uBAAuB,YAC9B,KACA,KAAK,QAAQ,WAAW,EAAE,MAAM,WAAW,mBAAmB,CAAC,sBAAsB,QAAQ,WAAW,EAAE,MAAM,WAAW,mBAAmB,CAAC;AAAA,QACrJ,QAAQ,4BAA4B,cAAc;AAAA;AAAA;AAAA,EAGxD;AAAA,EAEA,MAAM,YAAY,eAAe,EAAE,SAAS,WAAW,UAAU,UAAU,CAAC;AAAA,EAC5E,OAAO,EAAE,MAAM,OAAO,UAAU,QAAQ,QAAQ,UAAU,QAAQ,WAAW,UAAU,OAAO;AAAA;AAKhG,SAAS,YAAY,CAAC,QAIJ;AAAA,EAChB,QAAQ,SAAS,WAAW,cAAc;AAAA,EAE1C,MAAM,cAAc,OAAO,QAAQ,UAAU,GAAG;AAAA,EAChD,IAAI,YAAY,WAAW,GAAG;AAAA,IAC5B,MAAM,eAAc,EAAE,SAAS,sCAAsC,CAAC;AAAA,EACxE;AAAA,EACA,MAAM,SAAS,kBAAkB,EAAE,SAAS,SAAS,aAAa,UAAU,CAAC;AAAA,EAC7E,IAAI,OAAO,UAAU,YAAY,SAAS,UAAU,KAAK,SAAS;AAAA,EAElE,IAAI,UAAU,UAAU,WAAW;AAAA,IACjC,QAAQ,UAAU,WAAW,EAAE,SAAS,MAAM,UAAU,OAAO,UAAU,CAAC;AAAA,EAC5E;AAAA,EAEA,MAAM,YAAY,eAAe,EAAE,SAAS,WAAW,UAAU,UAAU,CAAC;AAAA,EAC5E,OAAO,EAAE,MAAM,OAAO,UAAU,QAAQ,QAAQ,UAAU,QAAQ,WAAW,UAAU,OAAO;AAAA;AAmBhG,SAAS,uBAAuB,CAAC,QAAyD;AAAA,EACxF,QAAQ,SAAS,WAAW;AAAA,EAC5B,MAAM,MAAM,QAAQ;AAAA,EACpB,MAAM,YAAY,IAAI,SAAS,YAAY,IAAI,OAAO,QAAQ,WAAW,EAAE,MAAM,IAAI,MAAM,CAAC;AAAA,EAC5F,OAAO,GAAG,aAAa,QAAQ,WAAW,EAAE,MAAM,OAAO,CAAC;AAAA;AAG5D,SAAS,iBAAiB,CAAC,QAQhB;AAAA,EACT,QAAQ,SAAS,SAAS,WAAW,YAAY;AAAA,EACjD,OAAO,QACJ,IAAI,EAAE,MAAM,WAAW;AAAA,IACtB,MAAM,SAAS,QAAQ,WAAW,EAAE,KAAK,CAAC;AAAA,IAC1C,MAAM,OAAO,YAAY,YAAY,SAAS,GAAG,WAAW;AAAA,IAI5D,IAAI,cAAc,KAAK,GAAG;AAAA,MACxB,IAAI,OAAO,kBAAkB,QAAQ,YAAY;AAAA,QAAW,MAAM,eAAc,EAAE,SAAS,qDAAqD,CAAC;AAAA,MACjJ,OAAO,GAAG,YAAY,kBAAkB,EAAE,SAAS,UAAU,OAAO,WAAW,UAAU,EAAE,OAAO,OAAO,UAAW,EAAE,CAAC;AAAA,IACzH;AAAA,IACA,IAAI,cAAc,KAAK,GAAG;AAAA,MACxB,IAAI,OAAO,kBAAkB,MAAM;AAAA,QACjC,MAAM,eAAc;AAAA,UAClB,SAAS,8BAA8B,MAAM;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,MACA,OAAO,GAAG,YAAY,wBAAwB,EAAE,SAAS,QAAQ,MAAM,OAAO,CAAC;AAAA,IACjF;AAAA,IAEA,IAAI,gBAAgB,KAAK,GAAG;AAAA,MAC1B,OAAO,GAAG,YAAY,UAAU,IAAI,MAAM,IAAI,IAAI,aAAa,SAAS,KAAK;AAAA,IAC/E;AAAA,IACA,IAAI,eAAe,KAAK,GAAG;AAAA,MACzB,MAAM,UAAU,UAAU,IAAI,MAAM,KAAK;AAAA,MACzC,MAAM,UAAU,QAAQ,SAAS,YAAY,MAAM,gBAAgB,YAAY,QAAQ,qBAAqB;AAAA,MAC5G,OAAO,GAAG,YAAY,QAAQ,kBAAkB,MAAM,SAAS;AAAA,IACjE;AAAA,IACA,IAAI,cAAc,KAAK,GAAG;AAAA,MACxB,OAAO,GAAG,YAAY,QAAQ,YAAY,EAAE,eAAe,MAAM,eAAe,UAAU,CAAC;AAAA,IAC7F;AAAA,IACA,IAAI,mBAAmB,KAAK,GAAG;AAAA,MAC7B,mBAAmB,SAAS,yCAAyC;AAAA,MACrE,IAAI,MAAM,aAAa,UAAU;AAAA,QAC/B,OAAO,GAAG,yBAAyB,SAAS,UAAU,IAAI,MAAM,KAAK;AAAA,MACvE;AAAA,MACA,OAAO,GAAG,YAAY,WAAW,UAAU,IAAI,MAAM,KAAK;AAAA,IAC5D;AAAA,IACA,OAAO,GAAG,YAAY,UAAU,IAAI,KAAK;AAAA,GAC1C,EACA,KAAK,IAAI;AAAA;AAKd,SAAS,YAAY,CAAC,QAIJ;AAAA,EAChB,QAAQ,SAAS,WAAW,cAAc;AAAA,EAE1C,IAAI,OAAO,eAAe,YAAY,SAAS,UAAU,KAAK;AAAA,EAC9D,IAAI,UAAU,UAAU,WAAW;AAAA,IACjC,QAAQ,UAAU,WAAW,EAAE,SAAS,MAAM,UAAU,OAAO,UAAU,CAAC;AAAA,EAC5E;AAAA,EAEA,MAAM,YAAY,eAAe,EAAE,SAAS,WAAW,UAAU,UAAU,CAAC;AAAA,EAC5E,OAAO,EAAE,MAAM,OAAO,UAAU,QAAQ,QAAQ,UAAU,QAAQ,WAAW,UAAU,OAAO;AAAA;AAMhG,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AAcxB,SAAS,WAAW,CAAC,QAIH;AAAA,EAChB,QAAQ,SAAS,WAAW,cAAc;AAAA,EAC1C,IAAI,QAAQ,mBAAmB,MAAM;AAAA,IACnC,MAAM,wBAAsB;AAAA,MAC1B,SAAS,QAAQ;AAAA,MACjB,SAAS;AAAA,MACT,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA,EACA,IAAI,UAAU,MAAM,WAAW;AAAA,IAAG,MAAM,eAAc,EAAE,SAAS,4CAA4C,CAAC;AAAA,EAC9G,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,QAAkB,CAAC;AAAA,EACzB,WAAW,QAAQ,UAAU,OAAO;AAAA,IAClC,IAAI,KAAK,SAAS,oBAAoB,KAAK,SAAS,mBAAmB,QAAQ,IAAI,KAAK,IAAI,GAAG;AAAA,MAC7F,MAAM,eAAc,EAAE,SAAS,oBAAoB,KAAK,gCAAgC,CAAC;AAAA,IAC3F;AAAA,IACA,MAAM,OAAO,gBAAgB,EAAE,SAAS,WAAW,KAAK,WAAW,WAAW,SAAS,QAAQ,CAAC;AAAA,IAChG,MAAM,KAAK,GAAG,QAAQ,WAAW,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,OAAO;AAAA,IACpE,QAAQ,IAAI,KAAK,IAAI;AAAA,EACvB;AAAA,EAEA,MAAM,SAAS,UAAU;AAAA,EACzB,IAAI,OAAO,SAAS,WAAW,KAAK,OAAO,QAAQ,WAAW,GAAG;AAAA,IAC/D,MAAM,eAAc,EAAE,SAAS,+DAA+D,CAAC;AAAA,EACjG;AAAA,EACA,WAAW,QAAQ,OAAO,UAAU;AAAA,IAClC,IAAI,CAAC,QAAQ,IAAI,IAAI;AAAA,MAAG,MAAM,eAAc,EAAE,SAAS,sCAAsC,QAAQ,CAAC;AAAA,EACxG;AAAA,EACA,MAAM,aAAa,OAAO,QAAQ,IAAI,CAAC,SAAS,QAAQ,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,EACvF,MAAM,QAAQ,OAAO,SAClB,IAAI,CAAC,SAAS,UAAU,mBAAmB,QAAQ,WAAW,EAAE,KAAK,CAAC,GAAG,EACzE,KAAK,aAAa;AAAA,EACrB,IAAI,SAAS;AAAA,EACb,IAAI,OAAO,YAAY,aAAa,OAAO,UAAU,aAAc,OAAO,SAAS,aAAa,OAAO,KAAK,SAAS,GAAI;AAAA,IACvH,MAAM,QAAkB,CAAC;AAAA,IACzB,WAAW,SAAS,CAAC,OAAO,SAAS,OAAO,OAAO,OAAO,KAAK,GAAG;AAAA,MAChE,IAAI,UAAU,aAAa,OAAO,QAAQ,SAAS,KAAK,GAAG;AAAA,QACzD,MAAM,eAAc,EAAE,SAAS,uBAAuB,uCAAuC,CAAC;AAAA,MAChG;AAAA,IACF;AAAA,IACA,MAAM,OAAO,QAAQ,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAAA,IAC1D,MAAM,YAAY,OAAO,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ,QAAQ,WAAW,EAAE,KAAK,CAAC,GAAG;AAAA,IACxF,IAAI,OAAO,YAAY,WAAW;AAAA,MAChC,MAAM,KAAK,GAAG,WAAW,EAAE,SAAS,MAAM,OAAO,QAAQ,MAAM,UAAU,CAAC,QAAQ,QAAQ,WAAW,EAAE,MAAM,OAAO,QAAQ,MAAM,CAAC,GAAG;AAAA,IACxI;AAAA,IACA,IAAI,OAAO,UAAU,aAAc,OAAO,SAAS,aAAa,OAAO,KAAK,SAAS,GAAI;AAAA,MACvF,MAAM,KAAK,kBAAkB,EAAE,SAAS,QAAQ,SAAS,UAAU,CAAC,CAAC;AAAA,IACvE;AAAA,IACA,SACE,UAAU,CAAC,GAAG,WAAW,GAAG,KAAK,EAAE,KAAK,IAAI,wBAAwB,QAAQ,WAAW,EAAE,MAAM,gBAAgB,CAAC,MAChH,eAAe,aAAa;AAAA,EAChC;AAAA,EACA,OAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,IAAI,KAAK,UAAU,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;AAGnG,SAAS,eAAe,CAAC,QAKd;AAAA,EACT,QAAQ,SAAS,WAAW,cAAc;AAAA,EAC1C,QAAQ,UAAU;AAAA,SACX;AAAA,MACH,OAAO,aAAa,EAAE,SAAS,WAAW,UAAU,CAAC,EAAE;AAAA,SACpD;AAAA,MACH,OAAO,aAAa,EAAE,SAAS,WAAW,UAAU,CAAC,EAAE;AAAA,SACpD;AAAA,MACH,OAAO,mBAAmB,EAAE,SAAS,WAAW,WAAW,SAAS,OAAO,QAAQ,CAAC;AAAA,SACjF;AAAA,MACH,OAAO,aAAa,EAAE,SAAS,WAAW,UAAU,CAAC,EAAE;AAAA,SACpD;AAAA,MACH,OAAO,aAAa,EAAE,SAAS,WAAW,UAAU,CAAC,EAAE;AAAA;AAAA;AAK7D,SAAS,gBAAgB,CAAC,QAAoF;AAAA,EAC5G,QAAQ,SAAS,OAAO,cAAc;AAAA,EACtC,IAAI,gBAAgB,KAAK;AAAA,IAAG,OAAO,GAAG,UAAU,IAAI,MAAM,IAAI,IAAI,aAAa,SAAS,KAAK;AAAA,EAC7F,IAAI,cAAc,KAAK;AAAA,IAAG,OAAO,QAAQ,YAAY,EAAE,eAAe,MAAM,eAAe,UAAU,CAAC;AAAA,EACtG,IAAI,iBAAiB,KAAK,GAAG;AAAA,IAC3B,MAAM,eAAc,EAAE,SAAS,wFAA8E,CAAC;AAAA,EAChH;AAAA,EACA,OAAO,UAAU,IAAI,KAAK;AAAA;AAU5B,SAAS,eAAe,CAAC,QAA4F;AAAA,EACnH,QAAQ,SAAS,QAAQ,cAAc;AAAA,EACvC,IAAI,OAAO,QAAQ,WAAW,KAAK,OAAO,KAAK,WAAW,GAAG;AAAA,IAC3D,MAAM,eAAc,EAAE,SAAS,qDAAqD,CAAC;AAAA,EACvF;AAAA,EACA,MAAM,UAAU,YAAY,SAAS,OAAO,OAAO;AAAA,EACnD,MAAM,UAAU,OAAO,QAAQ,IAAI,CAAC,SAAS,QAAQ,WAAW,EAAE,KAAK,CAAC,CAAC;AAAA,EACzE,MAAM,OAAO,CAAC,IAAI,QAAQ,IAAI,CAAC,WAAW,WAAW,eAAe,sBAAsB,EAAE,KAAK,IAAI,IAAI;AAAA,EACzG,WAAW,OAAO,OAAO,MAAM;AAAA,IAC7B,IAAI,IAAI,WAAW,OAAO,QAAQ,QAAQ;AAAA,MACxC,MAAM,eAAc,EAAE,SAAS,sBAAsB,IAAI,qBAAqB,OAAO,QAAQ,iBAAiB,CAAC;AAAA,IACjH;AAAA,IACA,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,iBAAiB,EAAE,SAAS,OAAO,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI;AAAA,EACjG;AAAA,EACA,MAAM,QAAQ,QAAQ,WAAW,EAAE,MAAM,OAAO,MAAM,CAAC;AAAA,EACvD,MAAM,aAAa,QAAQ,KAAK,IAAI;AAAA,EACpC,OAAO,WAAW,2BAA2B,KAAK,KAAK,IAAI,SAAS,UAAU,4BAA4B;AAAA;AAgB5G,SAAS,iBAAiB,CAAC,QAAuH;AAAA,EAChJ,QAAQ,SAAS,QAAQ,SAAS,cAAc;AAAA,EAChD,MAAM,QAAQ,OAAO;AAAA,EACrB,IAAI,UAAU;AAAA,IAAW,MAAM,eAAc,EAAE,SAAS,6CAA6C,CAAC;AAAA,EACtG,IAAI,MAAM,MAAM,WAAW;AAAA,IAAG,MAAM,eAAc,EAAE,SAAS,wCAAwC,CAAC;AAAA,EACtG,MAAM,OAAO,CAAC,SAAyB;AAAA,IACrC,IAAI,CAAC,QAAQ,IAAI,IAAI;AAAA,MAAG,MAAM,eAAc,EAAE,SAAS,6CAA6C,QAAQ,CAAC;AAAA,IAC7G,OAAO,QAAQ,WAAW,EAAE,KAAK,CAAC;AAAA;AAAA,EAEpC,MAAM,QAAQ,CAAC,SAAyB,yBAAyB,KAAK,IAAI;AAAA,EAC1E,MAAM,MAAM,MAAM,MAAM,IAAI,KAAK,EAAE,KAAK,KAAK;AAAA,EAC7C,MAAM,SAAS,OAAO,QAAQ,CAAC;AAAA,EAC/B,IAAI,OAAO,WAAW;AAAA,IAAG,OAAO,GAAG,UAAU,QAAQ,WAAW,EAAE,MAAM,MAAM,MAAM,CAAC;AAAA,EACrF,MAAM,OAAO,OAAO,IAAI,CAAC,SAAS;AAAA,IAChC,IAAI,CAAC,yBAAyB,KAAK,KAAK,KAAK;AAAA,MAAG,MAAM,eAAc,EAAE,SAAS,qBAAqB,KAAK,kCAAkC,CAAC;AAAA,IAC5I,IAAI,OAAO,KAAK,UAAU,YAAY,KAAK,UAAU;AAAA,MAAI,MAAM,eAAc,EAAE,SAAS,eAAe,KAAK,iCAAiC,CAAC;AAAA,IAC9I,MAAM,UAAU,KAAK,WAAW;AAAA,IAChC,IAAI,CAAC,OAAO,cAAc,OAAO,KAAK,UAAU;AAAA,MAAG,MAAM,eAAc,EAAE,SAAS,eAAe,KAAK,0CAA0C,CAAC;AAAA,IACjJ,MAAM,OAAO,YAAY,IAAI,kCAAkC,KAAK,KAAK,IAAI,OAAO,QAAQ,MAAM,KAAK,IAAI,OAAO;AAAA,IAClH,OAAO,GAAG,mBAAmB,oBAAoB,KAAK,cAAc,UAAU,IAAI,KAAK,KAAK,eAAe,MAAM,KAAK,IAAI;AAAA,GAC3H;AAAA,EACD,OAAO,QAAQ,KAAK,KAAK,GAAG,UAAU,cAAc,QAAQ,WAAW,EAAE,MAAM,MAAM,MAAM,CAAC;AAAA;AAI9F,SAAS,kBAAkB,CAAC,QAKjB;AAAA,EACT,QAAQ,SAAS,WAAW,cAAc;AAAA,EAC1C,IAAI,UAAU,QAAQ,WAAW;AAAA,IAAG,MAAM,eAAc,EAAE,SAAS,sCAAsC,CAAC;AAAA,EAC1G,IAAI,UAAU,MAAM,WAAW,UAAU,QAAQ,QAAQ;AAAA,IACvD,MAAM,eAAc;AAAA,MAClB,SAAS,kBAAkB,UAAU,MAAM,qBAAqB,UAAU,QAAQ;AAAA,IACpF,CAAC;AAAA,EACH;AAAA,EACA,MAAM,OAAO,UAAU,QAAQ,CAAC;AAAA,EAChC,WAAW,QAAQ,MAAM;AAAA,IACvB,IAAI,CAAC,OAAO,QAAQ,IAAI,IAAI;AAAA,MAAG,MAAM,eAAc,EAAE,SAAS,oCAA+B,6BAA6B,CAAC;AAAA,EAC7H;AAAA,EACA,MAAM,SAAS,UAAU;AAAA,EACzB,IAAI,WAAW,cAAc,OAAO,QAAQ,IAAI,OAAO,KAAK,KAAK,KAAK,SAAS,OAAO,KAAK,IAAI;AAAA,IAC7F,MAAM,eAAc,EAAE,SAAS,qBAAqB,OAAO,oCAAoC,CAAC;AAAA,EAClG;AAAA,EACA,MAAM,QAAQ,UAAU,MAAM,IAAI,CAAC,UAAU;AAAA,IAC3C,IAAI,gBAAgB,KAAK,GAAG;AAAA,MAC1B,IAAI,CAAC,KAAK,SAAS,MAAM,IAAI,KAAK,MAAM,SAAS,QAAQ,OAAO;AAAA,QAC9D,MAAM,eAAc,EAAE,SAAS,oBAAoB,MAAM,8DAAyD,CAAC;AAAA,MACrH;AAAA,MACA,OAAO,GAAG,QAAQ,WAAW,EAAE,MAAM,MAAM,KAAK,CAAC,KAAK,QAAQ,WAAW,EAAE,MAAM,MAAM,OAAO,CAAC;AAAA,IACjG;AAAA,IACA,OAAO,iBAAiB,EAAE,SAAS,OAAO,UAAU,CAAC;AAAA,GACtD;AAAA,EACD,MAAM,aAAa,UAAU,QAAQ,IAAI,CAAC,SAAS,QAAQ,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,EAC1F,IAAI,OAAO,eAAe,YAAY,SAAS,UAAU,KAAK,MAAM,sBAAsB,MAAM,KAAK,IAAI;AAAA,EACzG,MAAM,YAAY,KAAK,IAAI,CAAC,SAAS,QAAQ,WAAW,EAAE,KAAK,CAAC,CAAC;AAAA,EACjE,IAAI,WAAW;AAAA,IAAW,UAAU,KAAK,gBAAgB,EAAE,SAAS,QAAQ,UAAU,CAAC,CAAC;AAAA,EACxF,IAAI,UAAU,SAAS;AAAA,IAAG,QAAQ,SAAS,UAAU,KAAK,cAAc;AAAA,EACxE,IAAI,UAAU,UAAU,WAAW;AAAA,IACjC,QAAQ,UAAU,WAAW,EAAE,SAAS,MAAM,UAAU,OAAO,UAAU,CAAC;AAAA,EAC5E;AAAA,EACA,OAAO,OAAO,eAAe,EAAE,SAAS,WAAW,UAAU,UAAU,CAAC,EAAE;AAAA;;AE5mD5E,kCAAS;AAcT,IAAM,aAAa;AACnB,IAAM,iBAAiB,gBAAgB;AACvC,IAAM,YAAoB,IAAI,OAAO,SAAS,6BAA6B,4BAA4B,6BAA6B,qDAAqD;AACzL,IAAM,iBAAyB,IAAI,OAAO,gBAAgB,GAAG;AAC7D,SAAS,QAAQ,CAAC,QAAkC;AAAA,EAClD,IAAI,OAAO,QAAQ;AAAA,IAAW,OAAO;AAAA,EACrC,MAAM,SAAS,OAAO,IAAI,MAAM,GAAG,EAAE,EAAE,MAAM,cAAc,KAAK,CAAC;AAAA,EACjE,OAAO,IAAI,OAAO,IAAI,CAAC,UAAU,aAAa,KAAK,KAAK,IAAI,OAAO,KAAK,EAAE,SAAS,IAAI,MAAM,WAAW,GAAG,KAAK,MAAM,WAAW,GAAG,IAAI,QAAQ,MAAM,YAAY,CAAC,EAAE,KAAK,GAAG;AAAA;AAE/K,SAAS,WAAU,CAAC,QAAmC;AAAA,EACrD,OAAO,OAAO,MAAM,WAAW,GAAG,IAAI,OAAO,MAAM,MAAM,GAAG,EAAE,EAAE,WAAW,MAAM,GAAG,IAAI,OAAO,MAAM,YAAY;AAAA;AAI5G,SAAS,qBAAqB,CAAC,QAAuD;AAAA,EAC3F,MAAM,QAAQ,UAAU,KAAK,OAAO,GAAG;AAAA,EACvC,IAAI,UAAU;AAAA,IAAM;AAAA,EACpB,OAAO;AAAA,OACD,MAAM,OAAO,YAAY,CAAC,IAAI,EAAE,WAAW,YAAW,EAAE,OAAO,MAAM,GAAI,CAAC,EAAE;AAAA,IAChF,MAAM,YAAW,EAAE,OAAO,MAAM,MAAM,MAAM,GAAI,CAAC;AAAA,IACjD,UAAU,SAAS,KAAM,MAAM,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,MAAM,GAAG,EAAG,CAAC;AAAA,IAC3E,QAAQ,MAAM,IAAI,UAAU,KAAK;AAAA,EACnC;AAAA;AAIK,SAAS,sBAAsB,CAAC,QAAiE;AAAA,EACtG,IAAI,OAAO,QAAQ,SAAS;AAAA,IAAY,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,uBAAuB,CAAC;AAAA,EACrI,QAAQ,SAAS,SAAS;AAAA,EAC1B,OAAO,GAAG,KAAK,cAAc,YAAY,KAAK,GAAG,QAAQ,WAAW,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,QAAQ,WAAW,EAAE,MAAM,KAAK,KAAK,CAAC,IAAI,KAAK,WAAW,KAAK,QAAQ,OAAO;AAAA;AAI5K,SAAS,0BAA0B,CAAC,QAGzB;AAAA,EAChB,IAAI,OAAO,QAAQ,SAAS;AAAA,IAAY,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,uBAAuB,CAAC;AAAA,EACrI,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,QAAQ,WAAW;AAAA,EACnB,IAAI;AAAA,EACJ,IAAI,WAAW,QAAQ;AAAA,IACrB,OAAO,qcAAqc,UAAU,IAAI,OAAO,MAAM,SAAS,qBAAqB,UAAU,IAAI,OAAO,MAAM,IAAI,qBAAqB,UAAU,IAAI,OAAO,MAAM;AAAA,EACtlB,EAAO;AAAA,IACL,MAAM,OAAO,uBAAuB,EAAE,SAAS,OAAO,SAAS,MAAM,KAAK,OAAO,MAAM,UAAU,IAAI,OAAO,MAAM,EAAE,CAAC;AAAA,IACrH,OAAO,2LAA2L,UAAU,IAAI,IAAI;AAAA;AAAA,EAEtN,OAAO,EAAE,MAAM,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;;AC7D7D,kCAAS;AAOF,SAAS,qCAAqC,CAAC,QAIpC;AAAA,EAChB,QAAQ,SAAS,OAAO,WAAW;AAAA,EACnC,IAAI,QAAQ,SAAS;AAAA,IAAY,MAAM,wBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,0BAA0B,CAAC;AAAA,EAC1H,MAAM,YAAY,IAAI,eAAe,OAAO;AAAA,EAC5C,MAAM,YAAY,UAAU,IAAI,MAAM,SAAS;AAAA,EAC/C,MAAM,OAAO,UAAU,IAAI,MAAM,IAAI;AAAA,EACrC,MAAM,QAAQ,UAAU,IAAI,MAAM;AAAA,EAClC,OAAO;AAAA,IACL,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAWU,6BAA6B,wBAAwB;AAAA;AAAA,IAErE,QAAQ,UAAU;AAAA,IAClB,WAAW;AAAA,EACb;AAAA;;AClCF,kCAAS;AAKF,SAAS,8BAA8B,CAAC,QAAmF;AAAA,EAChI,IAAI,OAAO,QAAQ,SAAS;AAAA,IAAY,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,2BAA2B,CAAC;AAAA,EACzI,MAAM,QAAQ,CAAC,SAAyB,OAAO,QAAQ,WAAW,EAAE,KAAK,CAAC;AAAA,EAC1E,OAAO,EAAE,MAAM,eAAe,MAAM,OAAO,KAAK,qBAAqB,MAAM,OAAO,UAAU,MAAM,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;;ACRlI,kCAAS;AAMF,SAAS,qBAAqB,CAAC,QAQpB;AAAA,EAChB,IAAI,OAAO,QAAQ,SAAS;AAAA,IAAS,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,sBAAsB,CAAC;AAAA,EACjI,MAAM,IAAI,CAAC,SAAyB,OAAO,QAAQ,WAAW,EAAE,KAAK,CAAC;AAAA,EACtE,MAAM,QAAQ,EAAE,OAAO,KAAK;AAAA,EAC5B,QAAQ,OAAO;AAAA,SACR;AAAA,MACH,IAAI,OAAO,UAAU;AAAA,QAAW,MAAM,wBAAsB,EAAE,SAAS,SAAS,SAAS,uBAAuB,MAAM,6BAA6B,CAAC;AAAA,MACpJ,OAAO,EAAE,MAAM,0BAA0B,cAAc,EAAE,OAAO,MAAM,SAAS,KAAK,EAAE,OAAO,MAAM,IAAI,KAAK,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA,SACvI,OAAO;AAAA,MACV,IAAI,OAAO,eAAe,aAAa,OAAO,eAAe;AAAA,QAAW,MAAM,wBAAsB,EAAE,SAAS,SAAS,SAAS,uBAAuB,MAAM,qEAAqE,CAAC;AAAA,MACpO,MAAM,QAAQ,qBAAqB,EAAE,KAAK,OAAO,WAAW,CAAC;AAAA,MAC7D,OAAO,EAAE,MAAM,0BAA0B;AAAA,EAAY,CAAC,GAAG,MAAM,SAAS,cAAc,gBAAgB,OAAO,aAAa,EAAE,KAAK;AAAA,CAAK;AAAA,GAAO,MAAM,UAAU,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA,IAC7L;AAAA,SACK;AAAA,MAAQ,OAAO,EAAE,MAAM,qBAAqB,SAAS,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA,SACnF;AAAA,MAAQ,OAAO,EAAE,MAAM,wBAAwB,SAAS,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;AAAA;;ACxBxF,SAAS,2BAA2B,CAAC,QAAmE;AAAA,EAC7G,MAAM,IAAI,CAAC,SAAyB,OAAO,QAAQ,WAAW,EAAE,KAAK,CAAC;AAAA,EACtE,OAAO,EAAE,MAAM,UAAU,EAAE,MAAM,MAAM,EAAE,UAAU,MAAM,EAAE,iBAAiB,MAAM,EAAE,OAAO,UAAU,EAAE,OAAO,SAAS,KAAK,EAAE,kBAAkB,cAAc,EAAE,IAAI,KAAK,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;;ACKzM,IAAM,cAAqB;AAC3B,SAAS,WAAU,CAAC,OAAuB;AAAA,EACzC,MAAM,OAAO,MAAM,KAAK;AAAA,EACxB,IAAI,KAAK,WAAW,GAAG;AAAA,IAAG,OAAO,KAAK,MAAM,GAAG,EAAE,EAAE,WAAW,MAAM,GAAG;AAAA,EACvE,IAAI,KAAK,WAAW,GAAG;AAAA,IAAG,OAAO,KAAK,MAAM,GAAG,EAAE,EAAE,WAAW,MAAM,GAAG;AAAA,EACvE,IAAI,KAAK,WAAW,GAAG;AAAA,IAAG,OAAO,KAAK,MAAM,GAAG,EAAE;AAAA,EACjD,OAAO;AAAA;AAIF,SAAS,sBAAsB,CAAC,QAA4D;AAAA,EACjG,MAAM,SAAmC,CAAC;AAAA,EAC1C,WAAW,UAAU,qBAAqB,MAAM,EAAE,SAAS;AAAA,IACzD,MAAM,QAAQ,IAAI,OAAO,mBAAmB,oBAAmB,GAAG,EAAE,KAAK,MAAM;AAAA,IAC/E,MAAM,OAAO,UAAU,OAAO,SAAS,OAAO,MAAM,MAAM,GAAG,MAAM;AAAA,IACnE,MAAM,OAAO,oDAAoD,KAAK,IAAI;AAAA,IAC1E,IAAI,SAAS;AAAA,MAAM;AAAA,IACnB,MAAM,OAAO,WAAW,KAAK,KAAK,EAAG,IAAI,UAAU,YAAY,KAAK,KAAK,EAAG,IAAI,eAAe,YAAY,KAAK,KAAK,EAAG,IAAI,eAAe;AAAA,IAC3I,MAAM,QAAQ,qBAAqB,EAAE,KAAK,kBAAkB,KAAK,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,IAAI,CAAC;AAAA,IAChG,MAAM,UAAU,SAAS,UAAU,CAAC,IAAI,MAAM,QAAQ,IAAI,WAAU;AAAA,IACpE,OAAO,KAAK,EAAE,MAAM,UAAU,OAAO,WAAW,QAAQ,OAAO,WAAW,YAAW,MAAM,EAAG,GAAG,OAAO,UAAU,MAAM,MAAM,KAAK,MAAM,QAAQ,CAAC;AAAA,EACpJ;AAAA,EACA,OAAO;AAAA;;ACjCT,kCAAS;AAMF,SAAS,yBAAyB,CAAC,QAAmE;AAAA,EAC3G,IAAI,OAAO,QAAQ,SAAS;AAAA,IAAS,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,yBAAyB,CAAC;AAAA,EACpI,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,MAAM,UAAU;AAAA,EAChB,OAAO,EAAE,MAAM,8FAA8F,8GAA8G,eAAe,UAAU,IAAI,OAAO,SAAS,uBAAuB,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;;ACV7U,kCAAS;AAMF,SAAS,2BAA2B,CAAC,QAAkF;AAAA,EAC5H,IAAI,OAAO,QAAQ,SAAS;AAAA,IAAU,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,wBAAwB,CAAC;AAAA,EACpI,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,OAAO,EAAE,MAAM,6EAA6E,UAAU,IAAI,OAAO,KAAK,MAAM,UAAU,IAAI,OAAO,SAAS,mBAAmB,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;AAIpN,SAAS,+BAA+B,CAAC,QAAkF;AAAA,EAChI,IAAI,OAAO,QAAQ,SAAS;AAAA,IAAU,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,4BAA4B,CAAC;AAAA,EACxI,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,OAAO,EAAE,MAAM,mGAAmG,UAAU,IAAI,OAAO,KAAK,MAAM,UAAU,IAAI,OAAO,SAAS,uBAAuB,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;AAI9O,SAAS,0BAA0B,CAAC,QAAgD;AAAA,EACzF,IAAI,OAAO,QAAQ,SAAS;AAAA,IAAU,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,uBAAuB,CAAC;AAAA,EACnI,OAAO,EAAE,MAAM,uIAAuI,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;AAI/K,SAAS,wBAAwB,CAAC,QAAmE;AAAA,EAC1G,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,MAAM,YAAY,UAAU,IAAI,OAAO,SAAS;AAAA,EAChD,IAAI,OAAO,QAAQ,SAAS,YAAY;AAAA,IACtC,OAAO,EAAE,MAAM;AAAA;AAAA,sBAEG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0bAUoa;AAAA,wKAClR;AAAA,EACtK,OAAO,cAAc,WAAW,KAAK,0HAA0H;AAAA,8BACnI,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA,EACxE;AAAA,EACA,IAAI,OAAO,QAAQ,SAAS,SAAS;AAAA,IAEnC,MAAM,IAAI,MAAc,UAAU,IAAI,OAAO,SAAS;AAAA,IACtD,OAAO,EAAE,MAAM,0NAA0N;AAAA,yJACpF,EAAE;AAAA,oWACyM,EAAE;AAAA,yIAC7N,EAAE;AAAA,4HACf,EAAE;AAAA,yMAC2E,EAAE;AAAA,4HAC/E,EAAE;AAAA,8BAChG,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA,EACxE;AAAA,EACA,MAAM,SAAS,OAAO,QAAQ,WAAW,EAAE,MAAM,OAAO,UAAU,CAAC;AAAA,EACnE,OAAO,EAAE,MAAM,yEAAyE,kIAAkI,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;;AC5D1P,0BAAS,yCAAe;AAOjB,SAAS,0BAA0B,CAAC,QAA6E;AAAA,EACtH,OAAO,YAAY,KAAK,QAAQ,WAAW,IAAI,eAAe,OAAO,OAAO,EAAE,CAAC;AAAA;AAKjF,SAAS,WAAW,CAAC,QAA6G;AAAA,EAChI,QAAQ,SAAS,UAAU,QAAQ,cAAc;AAAA,EACjD,IAAI,OAAO,SAAS,aAAa;AAAA,IAC/B,IAAI,QAAQ,SAAS;AAAA,MAAY,MAAM,wBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,kBAAkB,CAAC;AAAA,IAClH,OAAO,EAAE,MAAM,qFAAqF,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA,EAChL;AAAA,EACA,MAAM,WAAW,WAAW,SAAS,OAAO,QAAQ,OAAO;AAAA,EAC3D,MAAM,YAAY,UAAU,IAAI,SAAS,SAAS;AAAA,EAClD,MAAM,OAAO,UAAU,IAAI,SAAS,IAAI;AAAA,EACxC,IAAI;AAAA,EACJ,IAAI,QAAQ,SAAS,YAAY;AAAA,IAC/B,MAAM,WAAW;AAAA,IACjB,MAAM,QAAQ,eAAe,6BAA6B;AAAA,IAC1D,QAAQ,OAAO;AAAA,WACR,cAAc;AAAA,QACjB,MAAM,cAAc,OAAO,mBAAmB,eAAe,oIAAoI;AAAA,QACjM,OAAO,yMAAyM,eAAe,4EAA4E,2BAA2B,UAAU,IAAI,OAAO,IAAI;AAAA,QAC/V;AAAA,MACF;AAAA,WACK;AAAA,QACH,OAAO,8PAA8P,6KAA6K,wBAAwB,UAAU,IAAI,OAAO,IAAI;AAAA,QACne;AAAA,WACG;AAAA,QACH,OAAO,ocAAoc,6BAA6B,2PAA2P,UAAU,IAAI,OAAO,cAAc,IAAI,CAAC,SAAS,GAAG,KAAK,aAAa,KAAK,MAAM,CAAC;AAAA,QACrzB;AAAA,WACG;AAAA,QACH,OAAO,8HAA8H,kBAAkB;AAAA,QACvJ;AAAA,WACG;AAAA,QACH,OAAO,qOAAqO,sEAAsE;AAAA,QAClT;AAAA,WACG;AAAA,WAAe;AAAA,WAAsB;AAAA,QACxC,OAAO,4TAA4T,6RAA6R,yBAAyB,UAAU,IAAI,OAAO,MAAM;AAAA,QACppB;AAAA,WACG;AAAA,QACH,OAAO,oOAAoO,iOAAiO,0BAA0B,UAAU,IAAI,OAAO,IAAI;AAAA,QAC/f;AAAA,WACG;AAAA,QACH,OAAO,gPAAgP,kBAAkB;AAAA,QACzQ;AAAA,WACG;AAAA,QACH,OAAO,wOAAwO,6BAA6B;AAAA,QAC5Q;AAAA,WACG;AAAA,QACH,OAAO,uLAAuL,6BAA6B;AAAA,QAC3N;AAAA;AAAA,EAEN,EAAO,SAAI,QAAQ,SAAS,SAAS;AAAA,IACnC,QAAQ,OAAO;AAAA,WACR;AAAA,QAAQ,OAAO,2KAA2K,8BAA8B;AAAA,QAAQ;AAAA,WAChO;AAAA,QAAW,OAAO,6NAA6N,sCAAsC,2BAA2B,UAAU,IAAI,OAAO,IAAI;AAAA,QAAK;AAAA,WAC9U;AAAA,QAAY,OAAO,uQAAuQ,gCAAgC;AAAA,QAAsC;AAAA,WAChW;AAAA,WAAe;AAAA,WAAsB;AAAA,QAAmB,OAAO,+GAA+G,QAAQ,WAAW,EAAE,MAAM,YAAY,CAAC,uGAAuG,8BAA8B,0BAA0B,UAAU,IAAI,OAAO,MAAM;AAAA,QAAK;AAAA,WACrZ;AAAA,QACH,IAAI,OAAO,mBAAmB;AAAA,UAAa,MAAM,wBAAsB,EAAE,SAAS,SAAS,SAAS,uBAAuB,CAAC;AAAA,QAC5H,OAAO,4jBAA4jB,iCAAiC,iCAAiC,UAAU,IAAI,OAAO,IAAI;AAAA,QAC9pB;AAAA,WACG;AAAA,QAAS,OAAO,2JAA2J,8BAA8B,yBAAyB,UAAU,IAAI,OAAO,IAAI;AAAA,QAA6D;AAAA,WACxT;AAAA,QAAS,OAAO,iIAAiI,8BAA8B;AAAA,QAAQ;AAAA;AAAA,QACnL,MAAM,wBAAsB,EAAE,SAAS,SAAS,SAAS,WAAW,OAAO,OAAO,CAAC;AAAA;AAAA,EAEhG,EAAO;AAAA,IACL,IAAI,SAAS,cAAc,UAAU,SAAS,cAAc;AAAA,MAAQ,MAAM,wBAAsB,EAAE,SAAS,UAAU,SAAS,2BAA2B,CAAC;AAAA,IAE1J,MAAM,UAAU,GAAG,QAAQ,WAAW,EAAE,MAAM,SAAS,UAAU,CAAC;AAAA,IAClE,MAAM,OAAO,OAAO,SAAS,WAAW,OAAO,SAAS,SAAS,OAAO,OAAO,OAAO,SAAS,YAAY,YAAY,OAAO,SAAS,UAAU,UAAU;AAAA,IAC3J,IAAI,CAAC,YAAY,YAAY,qBAAqB,MAAM,EAAE,SAAS,OAAO,IAAI,KAAM,OAAO,SAAS,gBAAgB,OAAO,mBAAmB;AAAA,MAAc,MAAM,wBAAsB,EAAE,SAAS,UAAU,SAAS,WAAW,OAAO,OAAO,CAAC;AAAA,IAEhP,MAAM,eAAe,IAAI,eAAe,OAAO;AAAA,IAC/C,IAAI,OAAO,SAAS,YAAY,OAAO,SAAS,mBAAmB,OAAO,SAAS,mBAAmB;AAAA,MACpG,OAAO,oJAAoJ,wBAAwB,aAAa,IAAI,SAAS,IAAI,oEAAoE,aAAa,IAAI,SAAS,IAAI,MAAM,aAAa,IAAI,SAAS,SAAS,uBAAuB,aAAa,IAAI,OAAO,MAAM;AAAA,MACjZ,OAAO,EAAE,MAAM,QAAQ,aAAa,QAAQ,WAAW,OAAO;AAAA,IAChE;AAAA,IACA,MAAM,aAAa,OAAO,SAAS,aAAa,OAAO,SAAS,UAAU,OAAO,OAAO,SAAS;AAAA,IACjG,OAAO,+CAA+C,wBAAwB,aAAa,IAAI,UAAU,gBAAgB,aAAa,IAAI,IAAI;AAAA,IAC9I,OAAO,EAAE,MAAM,QAAQ,aAAa,QAAQ,WAAW,OAAO;AAAA;AAAA,EAEhE,OAAO,EAAE,MAAM,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;AAItD,SAAS,wBAAwB,CAAC,QAAyF;AAAA,EAChI,IAAI,OAAO,QAAQ,SAAS;AAAA,IAAS;AAAA,EACrC,MAAM,SAAS,OAAO;AAAA,EACtB,IAAI,OAAO,SAAS,cAAc,OAAO,SAAS,WAAW,OAAO,SAAS;AAAA,IAAc;AAAA,EAC3F,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,MAAM,WAAW,WAAW,SAAS,OAAO,QAAQ,OAAO;AAAA,EAC3D,MAAM,YAAY,UAAU,IAAI,SAAS,SAAS;AAAA,EAClD,MAAM,OAAO,UAAU,IAAI,SAAS,IAAI;AAAA,EACxC,MAAM,OAAO,OAAO,SAAS,aACzB,6MAA6M,iCAAiC,mCAC9O,OAAO,SAAS,UACd,kKAAkK,8BAA8B,yBAAyB,UAAU,IAAI,OAAO,IAAI,4BAClP,oOAAoO,8BAA8B,8BAA8B,UAAU,IAAI,OAAO,IAAI;AAAA,EAC/T,OAAO,EAAE,MAAM,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;AAItD,SAAS,2BAA2B,CAAC,QAA6E;AAAA,EACvH,OAAO,gBAAgB,KAAK,QAAQ,WAAW,IAAI,eAAe,OAAO,OAAO,EAAE,CAAC;AAAA;AAGrF,SAAS,eAAe,CAAC,QAA6G;AAAA,EACpI,IAAI,OAAO,QAAQ,SAAS;AAAA,IAAY,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,sBAAsB,CAAC;AAAA,EACpI,MAAM,SAAS,OAAO;AAAA,EACtB,MAAM,YAAY,OAAO;AAAA,EACzB,IAAI,OAAO,SAAS,aAAa;AAAA,IAC/B,MAAM,YAAY,UAAU,IAAI,OAAO,IAAI;AAAA,IAC3C,OAAO,EAAE,MAAM,0WAA0W,8BAA8B,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA,EACrc;AAAA,EACA,MAAM,WAAW,WAAW,SAAS,OAAO,QAAQ,OAAO;AAAA,EAC3D,MAAM,YAAY,UAAU,IAAI,SAAS,SAAS;AAAA,EAClD,MAAM,OAAO,UAAU,IAAI,SAAS,IAAI;AAAA,EACxC,MAAM,WAAW,sHAAsH,6BAA6B;AAAA,EACpK,IAAI;AAAA,EACJ,QAAQ,OAAO;AAAA,SACR;AAAA,MAAc,SAAS,wIAAwI,+BAA+B,UAAU,IAAI,OAAO,IAAI;AAAA,MAAK;AAAA,SAC5N;AAAA,MAAW,SAAS,2HAA2H,4BAA4B,UAAU,IAAI,OAAO,IAAI;AAAA,MAAK;AAAA,SACzM;AAAA,SAAsB;AAAA,MAAmB,SAAS,4MAA4M,6BAA6B,UAAU,IAAI,OAAO,MAAM;AAAA,MAAK;AAAA,SAC3T;AAAA,MAAU,SAAS,wIAAwI,6BAA6B,UAAU,IAAI,OAAO,MAAM;AAAA,MAAK;AAAA,SACxN;AAAA,MAAQ,SAAS,4HAA4H;AAAA,MAAa;AAAA,SAC1J;AAAA,MAAS,SAAS,kLAAkL,6BAA6B,UAAU,IAAI,OAAO,IAAI;AAAA,MAAK;AAAA,SAC/P;AAAA,MAAY,SAAS,6KAA6K,6BAA6B,uOAAuO,UAAU,IAAI,OAAO,cAAc,IAAI,CAAC,SAAS,GAAG,KAAK,aAAa,KAAK,MAAM,CAAC;AAAA,MAAa;AAAA,SACriB;AAAA,MAAQ,SAAS,6KAA6K,6BAA6B;AAAA,MAA4B;AAAA,SACvP;AAAA,MAAqB,SAAS,uLAAuL,6BAA6B;AAAA,MAAQ;AAAA;AAAA,MACtP,SAAS,mHAAmH;AAAA,MAAa;AAAA;AAAA,EAEpJ,OAAO,EAAE,MAAM,6GAA6G,4OAA4O,QAAQ,UAAU,QAAQ,WAAW,OAAO;AAAA;AAGtZ,SAAS,oBAAoB,CAAC,QAAsD;AAAA,EAClF,MAAM,SAAoB,CAAC;AAAA,EAC3B,OAAO,EAAE,QAAQ,GAAG,CAAC,OAAO;AAAA,IAC1B,OAAO,KAAK,KAAK;AAAA,IACjB,OAAO,WAAW,OAAO,QAAQ,WAAW,EAAE,MAAM,IAAI,OAAO,SAAS,CAAC;AAAA,IACzE;AAAA;AAOG,SAAS,0BAA0B,CAAC,QAA4G;AAAA,EACrJ,QAAQ,YAAY;AAAA,EACpB,IAAI,QAAQ,SAAS;AAAA,IAAY,MAAM,wBAAsB,EAAE,SAAS,QAAQ,MAAM,SAAS,6BAA6B,CAAC;AAAA,EAC7H,MAAM,SAAS,IAAI;AAAA,EACnB,YAAY,UAAU,aAAa,OAAO,WAAW,QAAQ,GAAG;AAAA,IAE9D,MAAM,OAAO,SAAS,SAAS,eAAe,GAAG,SAAS,QAAQ,SAAS,mBAAmB,SAAS,SAAS,oBAAoB,kBAAkB,SAAS;AAAA,IAC/J,MAAM,QAAQ,OAAO,IAAI,IAAI,KAAK,CAAC;AAAA,IACnC,MAAM,KAAK,EAAE,UAAU,SAAS,CAAC;AAAA,IACjC,OAAO,IAAI,MAAM,KAAK;AAAA,EACxB;AAAA,EACA,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE,IAAI,CAAC,UAAgC;AAAA,IAC/D,MAAM,WAAW,MAAM,GAAI;AAAA,IAC3B,MAAM,QAAQ,YAAY,EAAE,SAAS,UAAU,WAAW,qBAAqB,EAAE,QAAQ,CAAC,EAAE,CAAC;AAAA,IAC7F,MAAM,eAAe,gBAAgB,EAAE,SAAS,UAAU,WAAW,qBAAqB,EAAE,QAAQ,CAAC,EAAE,CAAC;AAAA,IAExG,IAAI,KAAK,UAAU,aAAa,MAAM,MAAM,KAAK,UAAU,MAAM,MAAM;AAAA,MAAG,MAAM,eAAc,EAAE,SAAS,mEAAmE,MAAM,EAAE,MAAM,SAAS,KAAK,EAAE,CAAC;AAAA,IAC3M,MAAM,UAAU,MAAM,OAAO,IAAI,CAAC,OAAO,UAAU,GAAG,QAAQ,WAAW,EAAE,MAAM,IAAI,QAAQ,IAAI,CAAC,KAAK,MAAM,QAAQ,KAAK,IAAI,WAAW,QAAQ;AAAA,IACjJ,MAAM,WAAW,MAAM,IAAI,GAAG,UAAU,gBAAgB,EAAE,aAAa,OAAO,YAAY,2BAA2B,EAAE,SAAS,SAAS,CAAC,EAAE,OAAO,IAAI,CAAC,OAAO,UAAU,CAAC,IAAI,QAAQ,KAAK,KAAK,CAAC,CAAC,EAAE,EAAE;AAAA,IAEtM,MAAM,YAAY,IAAI,eAAe,OAAO;AAAA,IAC5C,OAAO;AAAA,MACL,MAAM,iFAAiF,aAAa,uFAAuF,UAAU,IAAI,KAAK,UAAU,QAAQ,CAAC,gDAAgD,QAAQ,KAAK,IAAI,0BAA0B,MAAM;AAAA,MAClU,QAAQ,UAAU;AAAA,MAClB,WAAW;AAAA,MACX,WAAW,MAAM,IAAI,GAAG,eAAe,QAAQ;AAAA,IACjD;AAAA,GACD;AAAA;AAII,SAAS,4BAA4B,CAAC,QAAgD;AAAA,EAC3F,OAAO,EAAE,MAAM,OAAO,QAAQ,SAAS,WAAW,uCAAuC,+BAA+B,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;AAIjJ,SAAS,wBAAwB,CAAC,QAAgD;AAAA,EACvF,OAAO,EAAE,MAAM,OAAO,QAAQ,SAAS,UAAU,mCAAmC,OAAO,QAAQ,SAAS,WAAW,+BAA+B,gCAAgC,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;AAI/M,SAAS,gBAAgB,CAAC,QAA8H;AAAA,EAC7J,IAAI,OAAO,QAAQ,SAAS;AAAA,IAAY,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,qBAAqB,CAAC;AAAA,EACnI,MAAM,IAAI,CAAC,SAAyB,OAAO,QAAQ,WAAW,EAAE,KAAK,CAAC;AAAA,EACtE,OAAO,EAAE,MAAM,eAAe,EAAE,OAAO,MAAM,SAAS,KAAK,EAAE,OAAO,MAAM,IAAI,oBAAoB,EAAE,OAAO,IAAI,YAAY,OAAO,yBAAyB,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;;AClL3L,sBAAS,sCAAW;AAgBpB,IAAM,gBAAgB;AAEtB,SAAS,gBAAe,CAAC,QAAwD;AAAA,EAC/E,IAAI,OAAO,QAAQ,SAAS,YAAY;AAAA,IACtC,MAAM,wBAAsB,EAAE,SAAS,OAAO,QAAQ,MAAM,SAAS,OAAO,QAAQ,CAAC;AAAA,EACvF;AAAA;AAIK,SAAS,0BAA0B,CAAC,QAAgD;AAAA,EACzF,iBAAgB,EAAE,SAAS,OAAO,SAAS,SAAS,2BAA2B,CAAC;AAAA,EAChF,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,CAAC;AAAA,IACT,WAAW;AAAA,EACb;AAAA;AAQK,SAAS,yBAAyB,CAAC,QAMxB;AAAA,EAChB,iBAAgB,EAAE,SAAS,OAAO,SAAS,SAAS,2BAA2B,CAAC;AAAA,EAChF,QAAQ,cAAc,YAAY;AAAA,EAClC,IAAI,CAAC,OAAO,cAAc,YAAY,KAAK,eAAe,GAAG;AAAA,IAC3D,MAAM,IAAI,YAAU;AAAA,MAClB,MAAM;AAAA,MACN,SAAS,GAAG,sEAAsE,OAAO,YAAY;AAAA,MACrG,MAAM,EAAE,QAAQ,8BAA8B,SAAS,OAAO,aAAa;AAAA,IAC7E,CAAC;AAAA,EACH;AAAA,EACA,OAAO,EAAE,MAAM,OAAO,OAAO,UAAU,OAAO,WAAW,KAAK,cAAc,mBAAmB,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;AAQxH,SAAS,6BAA6B,CAAC,QAI5B;AAAA,EAChB,iBAAgB,EAAE,SAAS,OAAO,SAAS,SAAS,2BAA2B,CAAC;AAAA,EAChF,MAAM,UAAU,OAAO,MAAM,KAAK;AAAA,EAClC,MAAM,OAAO,cAAc,KAAK,OAAO,IACnC,OAAO,OAAO,cAAc,aAC5B,SAAS,OAAO;AAAA,EACpB,OAAO,EAAE,MAAM,QAAQ,CAAC,GAAG,WAAW,OAAO;AAAA;AAkBxC,SAAS,qBAAqB,CAAC,QAA+D;AAAA,EACnG,iBAAgB,EAAE,SAAS,OAAO,SAAS,SAAS,0BAA0B,CAAC;AAAA,EAC/E,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,MAAM,OAAO,UAAU,IAAI,OAAO,KAAK;AAAA,EACvC,OAAO;AAAA,IACL,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gEAoBsD;AAAA,IAC5D,QAAQ,UAAU;AAAA,IAClB,WAAW;AAAA,EACb;AAAA;AAIK,SAAS,0BAA0B,CAAC,QAIzB;AAAA,EAChB,iBAAgB,EAAE,SAAS,OAAO,SAAS,SAAS,oBAAoB,CAAC;AAAA,EACzE,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,MAAM,QAAQ,UAAU,IAAI,OAAO,KAAK;AAAA,EACxC,MAAM,aAAa,UAAU,IAAI,OAAO,UAAU;AAAA,EAClD,OAAO;AAAA,IACL,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kEAQwD,2BAA2B;AAAA,IACzF,QAAQ,UAAU;AAAA,IAClB,WAAW;AAAA,EACb;AAAA;AAIK,SAAS,wBAAwB,CAAC,QAA+D;AAAA,EACtG,iBAAgB,EAAE,SAAS,OAAO,SAAS,SAAS,iBAAiB,CAAC;AAAA,EACtE,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,MAAM,QAAQ,UAAU,IAAI,OAAO,KAAK;AAAA,EACxC,OAAO;AAAA,IACL,MAAM;AAAA;AAAA;AAAA,gEAGsD;AAAA,IAC5D,QAAQ,UAAU;AAAA,IAClB,WAAW;AAAA,EACb;AAAA;AAIK,SAAS,sBAAsB,CAAC,QAIrB;AAAA,EAChB,iBAAgB,EAAE,SAAS,OAAO,SAAS,SAAS,iBAAiB,CAAC;AAAA,EACtE,MAAM,YAAY,IAAI,eAAe,OAAO,OAAO;AAAA,EACnD,MAAM,QAAQ,UAAU,IAAI,OAAO,KAAK;AAAA,EACxC,MAAM,SAAS,UAAU,IAAI,OAAO,MAAM;AAAA,EAC1C,OAAO;AAAA,IACL,MAAM;AAAA;AAAA;AAAA;AAAA,gEAIsD,yBAAyB;AAAA;AAAA,IAErF,QAAQ,UAAU;AAAA,IAClB,WAAW;AAAA,EACb;AAAA;",
60
- "debugId": "02AD9A2144138F0F64756E2164756E21",
59
+ "mappings": "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",
60
+ "debugId": "71705578A45D011664756E2164756E21",
61
61
  "names": []
62
62
  }