orchid-orm 1.58.10 → 1.59.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"node-postgres.mjs","sources":["../../src/migrations/generate/generators/generators.utils.ts","../../src/migrations/generate/generators/schemas.generator.ts","../../src/migrations/generate/generators/extensions.generator.ts","../../src/migrations/generate/generators/columns.generator.ts","../../src/migrations/generate/generators/domains.generator.ts","../../src/migrations/generate/generators/enums.generator.ts","../../src/migrations/generate/generators/primaryKey.generator.ts","../../src/migrations/generate/generators/indexesAndExcludes.generator.ts","../../src/migrations/generate/generators/foreignKeys.generator.ts","../../src/migrations/generate/generators/checks.generator.ts","../../src/migrations/generate/generators/tables.generator.ts","../../src/migrations/generate/composeMigration.ts","../../src/migrations/generate/verifyMigration.ts","../../src/migrations/generate/reportGeneratedMigration.ts","../../src/migrations/generate/generate.ts","../../src/migrations/pull/appCodeGenerators/tables.appCodeGenerator.ts","../../src/migrations/pull/appCodeGenerators/dbFile.appCodeGenerator.ts","../../src/migrations/pull/pull.ts","../../src/migrations/patchRakeDb.ts"],"sourcesContent":["import { RakeDbAst, promptSelect } from 'rake-db';\nimport { RawSQLBase, colors, QueryResult, AdapterBase } from 'pqb';\nimport { AbortSignal } from '../generate';\n\nexport interface CompareExpression {\n compare: {\n inDb: string;\n inCode: (string | RawSQLBase)[];\n }[];\n\n handle(i?: number): void;\n}\n\nexport interface TableExpression extends CompareExpression {\n source: string;\n}\n\nexport const compareSqlExpressions = async (\n tableExpressions: TableExpression[],\n adapter: AdapterBase,\n) => {\n if (!tableExpressions.length) return;\n\n let id = 1;\n for (const { source, compare, handle } of tableExpressions) {\n const viewName = `orchidTmpView${id++}`;\n const values: unknown[] = [];\n\n // It is important to run `CREATE TEMPORARY VIEW` and `DROP VIEW` on the same db connection,\n // that's why SQLs are combined into a single query.\n const combinedQueries = [\n `CREATE TEMPORARY VIEW ${viewName} AS (SELECT ${compare\n .map(\n ({ inDb, inCode }, i): string =>\n `${inDb} AS \"*inDb-${i}*\", ${inCode\n .map(\n (s, j) =>\n `(${\n typeof s === 'string' ? s : s.toSQL({ values })\n }) \"*inCode-${i}-${j}*\"`,\n )\n .join(', ')}`,\n )\n .join(', ')} FROM ${source})`,\n `SELECT pg_get_viewdef('${viewName}') v`,\n `DROP VIEW ${viewName}`,\n ].join('; ');\n\n const result = await adapter.query(combinedQueries, values, viewName).then(\n (res) => (res as unknown as QueryResult[])[1],\n async (err) => {\n // ignore the \"type ... does not exist\" because the type may be added in the same migration,\n // but throw on other errors\n if (err.code !== '42704') {\n throw err;\n }\n },\n );\n\n if (!result) {\n handle();\n return;\n }\n\n const match = compareSqlExpressionResult(\n result.rows[0].v,\n compare[0].inCode,\n );\n handle(match);\n }\n};\n\nexport const compareSqlExpressionResult = (\n resultSql: string,\n inCode: unknown[],\n) => {\n let pos = 7;\n const rgx = /\\s+AS\\s+\"\\*(inDb-\\d+|inCode-\\d+-\\d+)\\*\",?/g;\n let match;\n let inDb = '';\n let codeI = 0;\n const matches = inCode.map(() => true);\n while ((match = rgx.exec(resultSql))) {\n const sql = resultSql.slice(pos, rgx.lastIndex - match[0].length).trim();\n const arr = match[1].split('-');\n if (arr.length === 2) {\n inDb = sql;\n codeI = 0;\n } else {\n if (\n inDb !== sql &&\n // Comparing `(sql) = sql` and `sql = (sql)` below.\n // Could not reproduce this case in integration tests, but it was reported in #494.\n !(\n inDb.startsWith('(') &&\n inDb.endsWith(')') &&\n inDb.slice(1, -1) === sql\n ) &&\n !(sql.startsWith('(') && sql.endsWith(')') && sql.slice(1, -1) === inDb)\n ) {\n matches[codeI] = false;\n }\n codeI++;\n }\n pos = rgx.lastIndex;\n }\n\n const firstMatching = matches.indexOf(true);\n return firstMatching === -1 ? undefined : firstMatching;\n};\n\nexport const promptCreateOrRename = (\n kind: string,\n name: string,\n drop: string[],\n verifying: boolean | undefined,\n): Promise<number> => {\n if (verifying) throw new AbortSignal();\n\n let hintPos = name.length + 4;\n for (const from of drop) {\n const value = from.length + 8 + name.length;\n if (value > hintPos) hintPos = value;\n }\n\n let max = 0;\n const add = name.length + 3;\n for (const name of drop) {\n if (name.length + add > max) {\n max = name.length + add;\n }\n }\n\n const renameMessage = `rename ${kind}`;\n\n return promptSelect({\n message: `Create or rename ${colors.blueBold(\n name,\n )} ${kind} from another ${kind}?`,\n options: [\n `${colors.greenBold('+')} ${name} ${colors.pale(\n `create ${kind}`.padStart(\n hintPos + renameMessage.length - name.length - 4,\n ' ',\n ),\n )}`,\n ...drop.map(\n (d) =>\n `${colors.yellowBold('~')} ${d} ${colors.yellowBold(\n '=>',\n )} ${name} ${colors.pale(\n renameMessage.padStart(\n hintPos + renameMessage.length - d.length - name.length - 8,\n ' ',\n ),\n )}`,\n ),\n ],\n });\n};\n\nexport const checkForColumnAddOrDrop = (\n shape: RakeDbAst.ChangeTableShape,\n key: string,\n) => {\n const item = shape[key];\n if (item) {\n return (\n item &&\n (Array.isArray(item) || item.type === 'add' || item.type === 'drop')\n );\n }\n\n for (const k in shape) {\n const item = shape[k];\n if (\n Array.isArray(item)\n ? item.some(\n (item) =>\n (item.type === 'add' || item.type === 'drop') &&\n item.item.data.name === key,\n )\n : (item.type === 'add' || item.type === 'drop') &&\n item.item.data.name === key\n ) {\n return true;\n }\n }\n\n return false;\n};\n","import { RakeDbAst, IntrospectedStructure } from 'rake-db';\nimport { promptCreateOrRename } from './generators.utils';\nimport { ComposeMigrationParams } from '../composeMigration';\n\nexport const processSchemas = async (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n codeItems: { schemas },\n verifying,\n internal: { generatorIgnore },\n }: ComposeMigrationParams,\n): Promise<void> => {\n const createSchemas: string[] = [];\n const dropSchemas: string[] = [];\n\n for (const schema of schemas) {\n if (!dbStructure.schemas.includes(schema)) {\n createSchemas.push(schema);\n }\n }\n\n for (const schema of dbStructure.schemas) {\n if (\n !schemas.has(schema) &&\n schema !== 'public' &&\n !generatorIgnore?.schemas?.includes(schema)\n ) {\n dropSchemas.push(schema);\n }\n }\n\n for (const schema of createSchemas) {\n if (dropSchemas.length) {\n const i = await promptCreateOrRename(\n 'schema',\n schema,\n dropSchemas,\n verifying,\n );\n if (i) {\n const from = dropSchemas[i - 1];\n dropSchemas.splice(i - 1, 1);\n\n renameSchemaInStructures(dbStructure.tables, from, schema);\n renameSchemaInStructures(dbStructure.views, from, schema);\n renameSchemaInStructures(dbStructure.indexes, from, schema);\n renameSchemaInStructures(dbStructure.excludes, from, schema);\n renameSchemaInStructures(dbStructure.constraints, from, schema);\n renameSchemaInStructures(dbStructure.triggers, from, schema);\n renameSchemaInStructures(dbStructure.enums, from, schema);\n renameSchemaInStructures(dbStructure.domains, from, schema);\n renameSchemaInStructures(dbStructure.collations, from, schema);\n\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.typeSchema === from) {\n column.typeSchema = schema;\n }\n }\n }\n\n ast.push({\n type: 'renameSchema',\n from,\n to: schema,\n });\n continue;\n }\n }\n\n ast.push({\n type: 'schema',\n action: 'create',\n name: schema,\n });\n }\n\n for (const schema of dropSchemas) {\n ast.push({\n type: 'schema',\n action: 'drop',\n name: schema,\n });\n }\n};\n\nconst renameSchemaInStructures = (\n items: { schemaName: string }[],\n from: string,\n to: string,\n) => {\n for (const item of items) {\n if (item.schemaName === from) {\n item.schemaName = to;\n }\n }\n};\n","import {\n RakeDbAst,\n IntrospectedStructure,\n getSchemaAndTableFromName,\n} from 'rake-db';\nimport { ComposeMigrationParams } from '../composeMigration';\n\ninterface Extension {\n schema?: string;\n name: string;\n version?: string;\n}\n\nexport const processExtensions = (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n currentSchema,\n internal: { extensions, generatorIgnore },\n }: ComposeMigrationParams,\n) => {\n const codeExtensions = extensions?.map((ext): Extension => {\n const [schema, name] = getSchemaAndTableFromName(ext.name);\n return { schema, name, version: ext.version };\n });\n\n for (const dbExt of dbStructure.extensions) {\n if (\n generatorIgnore?.schemas?.includes(dbExt.schemaName) ||\n generatorIgnore?.extensions?.includes(dbExt.name)\n ) {\n continue;\n }\n\n if (codeExtensions) {\n let found = false;\n for (let i = 0; i < codeExtensions.length; i++) {\n const codeExt = codeExtensions[i];\n if (\n dbExt.name === codeExt.name &&\n dbExt.schemaName === (codeExt.schema ?? currentSchema) &&\n (!codeExt.version || codeExt.version === dbExt.version)\n ) {\n found = true;\n codeExtensions.splice(i, 1);\n break;\n }\n }\n\n if (found) continue;\n }\n\n ast.push({\n type: 'extension',\n action: 'drop',\n schema: dbExt.schemaName === currentSchema ? undefined : dbExt.schemaName,\n name: dbExt.name,\n version: dbExt.version,\n });\n }\n\n if (codeExtensions?.length) {\n ast.push(\n ...codeExtensions.map((ext) => ({\n type: 'extension' as const,\n action: 'create' as const,\n ...ext,\n })),\n );\n }\n};\n","import {\n RakeDbAst,\n dbColumnToAst,\n getDbTableColumnsChecks,\n instantiateDbColumn,\n StructureToAstCtx,\n DbStructure,\n IntrospectedStructure,\n encodeColumnDefault,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n promptSelect,\n AnyRakeDbConfig,\n} from 'rake-db';\nimport {\n ArrayColumn,\n ColumnType,\n DbStructureDomainsMap,\n EnumColumn,\n getColumnBaseType,\n ColumnTypeBase,\n deepCompare,\n RecordUnknown,\n toSnakeCase,\n colors,\n AdapterBase,\n} from 'pqb';\nimport { promptCreateOrRename } from './generators.utils';\nimport { ChangeTableData, CompareSql } from './tables.generator';\nimport { AbortSignal } from '../generate';\n\nexport interface TypeCastsCache {\n value?: Map<string, Set<string>>;\n}\n\ntype ColumnsToChange = Map<\n string,\n { key: string; dbName: string; column: ColumnType }\n>;\n\nexport const processColumns = async (\n adapter: AdapterBase,\n config: AnyRakeDbConfig,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n changeTableData: ChangeTableData,\n ast: RakeDbAst[],\n currentSchema: string,\n compareSql: CompareSql,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n const { dbTable } = changeTableData;\n const dbColumns = Object.fromEntries(\n dbTable.columns.map((column) => [column.name, column]),\n );\n\n const { columnsToAdd, columnsToDrop, columnsToChange } = groupColumns(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbColumns,\n changeTableData,\n );\n\n await addOrRenameColumns(\n config,\n dbStructure,\n changeTableData,\n columnsToAdd,\n columnsToDrop,\n columnsToChange,\n verifying,\n );\n\n await changeColumns(\n adapter,\n config,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n dbColumns,\n columnsToChange,\n compareSql,\n changeTableData,\n typeCastsCache,\n verifying,\n );\n\n dropColumns(changeTableData, columnsToDrop);\n};\n\ntype KeyAndColumn = { key: string; column: ColumnType };\n\nconst groupColumns = (\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n dbColumns: { [K: string]: DbStructure.Column },\n changeTableData: ChangeTableData,\n): {\n columnsToAdd: KeyAndColumn[];\n columnsToDrop: KeyAndColumn[];\n columnsToChange: ColumnsToChange;\n} => {\n const columnsToAdd: { key: string; column: ColumnType }[] = [];\n const columnsToDrop: { key: string; column: ColumnType }[] = [];\n const columnsToChange: ColumnsToChange = new Map();\n const columnsToChangeByDbName = new Map<string, true>();\n\n const { codeTable, dbTable, dbTableData } = changeTableData;\n const checks = getDbTableColumnsChecks(changeTableData.dbTableData);\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n // skip virtual columns\n if (!column.dataType) continue;\n\n const name = column.data.name ?? key;\n if (dbColumns[name]) {\n columnsToChange.set(key, { key, dbName: name, column });\n columnsToChangeByDbName.set(name, true);\n } else {\n columnsToAdd.push({ key, column });\n }\n }\n\n for (const name in dbColumns) {\n if (columnsToChangeByDbName.has(name)) continue;\n\n const [key, column] = dbColumnToAst(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbTable.name,\n dbColumns[name],\n dbTable,\n dbTableData,\n checks,\n );\n\n columnsToDrop.push({ key, column });\n }\n\n return {\n columnsToAdd,\n columnsToDrop,\n columnsToChange,\n };\n};\n\nconst addOrRenameColumns = async (\n config: AnyRakeDbConfig,\n dbStructure: IntrospectedStructure,\n {\n dbTableData,\n schema,\n changeTableAst: { name: tableName, shape },\n }: ChangeTableData,\n columnsToAdd: KeyAndColumn[],\n columnsToDrop: KeyAndColumn[],\n columnsToChange: ColumnsToChange,\n verifying: boolean | undefined,\n) => {\n for (const { key, column } of columnsToAdd) {\n if (columnsToDrop.length) {\n const codeName = column.data.name ?? key;\n const i = await promptCreateOrRename(\n 'column',\n codeName,\n columnsToDrop.map((x) => x.key),\n verifying,\n );\n if (i) {\n const drop = columnsToDrop[i - 1];\n columnsToDrop.splice(i - 1, 1);\n\n const from = drop.column.data.name ?? drop.key;\n columnsToChange.set(from, {\n key,\n dbName: from,\n column: column.name(codeName),\n });\n\n const to = config.snakeCase ? toSnakeCase(key) : key;\n\n if (dbTableData.primaryKey) {\n renameColumn(dbTableData.primaryKey.columns, from, to);\n }\n\n for (const index of dbTableData.indexes) {\n for (const column of index.columns) {\n if ('column' in column && column.column === from) {\n column.column = to;\n }\n }\n }\n\n for (const exclude of dbTableData.excludes) {\n for (const column of exclude.columns) {\n if ('column' in column && column.column === from) {\n column.column = to;\n }\n }\n }\n\n for (const c of dbTableData.constraints) {\n if (c.check?.columns) {\n renameColumn(c.check.columns, from, to);\n }\n if (c.references) {\n renameColumn(c.references.columns, from, to);\n }\n }\n\n for (const c of dbStructure.constraints) {\n if (\n c.references &&\n c.references.foreignSchema === schema &&\n c.references.foreignTable === tableName\n ) {\n renameColumn(c.references.foreignColumns, from, to);\n }\n }\n\n continue;\n }\n }\n\n shape[key] = {\n type: 'add',\n item: column,\n };\n }\n};\n\nconst dropColumns = (\n { changeTableAst: { shape } }: ChangeTableData,\n columnsToDrop: KeyAndColumn[],\n) => {\n for (const { key, column } of columnsToDrop) {\n shape[key] = {\n type: 'drop',\n item: column,\n };\n }\n};\n\nconst changeColumns = async (\n adapter: AdapterBase,\n config: AnyRakeDbConfig,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n dbColumns: { [K: string]: DbStructure.Column },\n columnsToChange: ColumnsToChange,\n compareSql: CompareSql,\n changeTableData: ChangeTableData,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n for (const [\n key,\n { key: codeKey, dbName, column: codeColumn },\n ] of columnsToChange) {\n const dbColumnStructure = dbColumns[dbName];\n\n const dbColumn = instantiateDbColumn(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbColumnStructure,\n );\n\n const action = await compareColumns(\n adapter,\n domainsMap,\n ast,\n currentSchema,\n compareSql,\n changeTableData,\n typeCastsCache,\n verifying,\n key,\n dbName,\n dbColumn,\n codeColumn,\n );\n\n if (action === 'change') {\n changeColumn(changeTableData, key, dbName, dbColumn, codeColumn);\n } else if (action === 'recreate') {\n changeTableData.changeTableAst.shape[key] = [\n {\n type: 'drop',\n item: dbColumn,\n },\n {\n type: 'add',\n item: codeColumn,\n },\n ];\n } else if (action !== 'recreate') {\n const to = codeColumn.data.name ?? codeKey;\n if (dbName !== to) {\n changeTableData.changeTableAst.shape[\n config.snakeCase\n ? dbName === toSnakeCase(codeKey)\n ? codeKey\n : dbName\n : dbName\n ] = {\n type: 'rename',\n name: config.snakeCase\n ? to === toSnakeCase(codeKey)\n ? codeKey\n : to\n : to,\n };\n }\n }\n }\n};\n\nconst compareColumns = async (\n adapter: AdapterBase,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n compareSql: CompareSql,\n changeTableData: ChangeTableData,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n key: string,\n dbName: string,\n dbColumn: ColumnType,\n codeColumn: ColumnType,\n): Promise<'change' | 'recreate' | undefined> => {\n if (dbColumn instanceof ArrayColumn && codeColumn instanceof ArrayColumn) {\n dbColumn = dbColumn.data.item;\n codeColumn = codeColumn.data.item;\n }\n\n const dbType = getColumnDbType(dbColumn, currentSchema);\n const codeType = getColumnDbType(codeColumn, currentSchema);\n\n if (dbType !== codeType) {\n const typeCasts = await getTypeCasts(adapter, typeCastsCache);\n\n const dbBaseType = getColumnBaseType(dbColumn, domainsMap, dbType);\n const codeBaseType = getColumnBaseType(codeColumn, domainsMap, codeType);\n\n if (!typeCasts.get(dbBaseType)?.has(codeBaseType)) {\n if (\n !(dbColumn instanceof EnumColumn) ||\n !(codeColumn instanceof EnumColumn) ||\n !deepCompare(dbColumn.options, codeColumn.options)\n ) {\n if (verifying) throw new AbortSignal();\n\n const tableName = concatSchemaAndName(changeTableData.changeTableAst);\n const abort = await promptSelect({\n message: `Cannot cast type of ${tableName}'s column ${key} from ${dbType} to ${codeType}`,\n options: [\n `${colors.yellowBold(\n `-/+`,\n )} recreate the column, existing data will be ${colors.red(\n 'lost',\n )}`,\n `write migration manually`,\n ],\n });\n if (abort) {\n throw new AbortSignal();\n }\n\n dbColumn.data.name = codeColumn.data.name;\n return 'recreate';\n }\n }\n\n return 'change';\n }\n\n const dbData = dbColumn.data as unknown as RecordUnknown;\n const codeData = codeColumn.data as unknown as RecordUnknown;\n\n for (const key of ['isNullable', 'comment']) {\n if (dbData[key] !== codeData[key]) {\n return 'change';\n }\n }\n\n for (const key of [\n 'maxChars',\n 'collation',\n 'compression',\n 'numericPrecision',\n 'numericScale',\n 'dateTimePrecision',\n ]) {\n // Check if key in codeData so that default precision/scale values for such columns as integer aren't counted.\n // If column supports precision/scale, it should have it listed in the data, even if it's undefined.\n if (key in codeData && dbData[key] !== codeData[key]) {\n return 'change';\n }\n }\n\n if (dbColumn.data.isOfCustomType) {\n const { typmod } = dbColumn.data;\n if (typmod !== undefined && typmod !== -1) {\n const i = codeColumn.dataType.indexOf('(');\n if (i === -1 || codeColumn.dataType.slice(i + 1, -1) !== `${typmod}`) {\n return 'change';\n }\n }\n }\n\n if (\n !deepCompare(\n dbData.identity,\n codeData.identity\n ? {\n always: false,\n start: 1,\n increment: 1,\n cache: 1,\n cycle: false,\n ...(codeData.identity ?? {}),\n }\n : undefined,\n )\n ) {\n return 'change';\n }\n\n if (\n dbData.default !== undefined &&\n dbData.default !== null &&\n codeData.default !== undefined &&\n codeData.default !== null\n ) {\n const valuesBeforeLen = compareSql.values.length;\n const dbDefault = encodeColumnDefault(\n dbData.default,\n compareSql.values,\n dbColumn,\n ) as string;\n const dbValues = compareSql.values.slice(valuesBeforeLen);\n\n const codeDefault = encodeColumnDefault(\n codeData.default,\n compareSql.values,\n codeColumn,\n ) as string;\n const codeValues = compareSql.values.slice(valuesBeforeLen);\n\n if (\n dbValues.length !== codeValues.length ||\n (dbValues.length &&\n JSON.stringify(dbValues) !== JSON.stringify(codeValues))\n ) {\n compareSql.values.length = valuesBeforeLen;\n return 'change';\n } else if (dbDefault !== codeDefault && dbDefault !== `(${codeDefault})`) {\n compareSql.expressions.push({\n inDb: dbDefault,\n inCode: codeDefault,\n change: () => {\n changeColumn(changeTableData, key, dbName, dbColumn, codeColumn);\n if (!changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n },\n });\n }\n }\n\n return;\n};\n\nconst getTypeCasts = async (\n adapter: AdapterBase,\n typeCastsCache: TypeCastsCache,\n) => {\n let typeCasts = typeCastsCache.value;\n if (!typeCasts) {\n const { rows } = await adapter.arrays(`SELECT s.typname, t.typname\nFROM pg_cast\nJOIN pg_type AS s ON s.oid = castsource\nJOIN pg_type AS t ON t.oid = casttarget`);\n\n const directTypeCasts = new Map<string, Set<string>>();\n for (const [source, target] of rows) {\n const set = directTypeCasts.get(source);\n if (set) {\n set.add(target);\n } else {\n directTypeCasts.set(source, new Set([target]));\n }\n }\n\n typeCasts = new Map<string, Set<string>>();\n for (const [type, directSet] of directTypeCasts.entries()) {\n const set = new Set<string>(directSet);\n typeCasts.set(type, set);\n\n for (const subtype of directSet) {\n const subset = directTypeCasts.get(subtype);\n if (subset) {\n for (const type of subset) {\n set.add(type);\n }\n }\n }\n }\n\n typeCastsCache.value = typeCasts;\n }\n\n return typeCasts;\n};\n\nconst changeColumn = (\n changeTableData: ChangeTableData,\n key: string,\n dbName: string,\n dbColumn: ColumnType,\n codeColumn: ColumnType,\n) => {\n dbColumn.data.as = codeColumn.data.as = undefined;\n\n const simpleCodeColumn = Object.create(codeColumn);\n simpleCodeColumn.data = {\n ...codeColumn.data,\n primaryKey: undefined,\n indexes: undefined,\n excludes: undefined,\n foreignKeys: undefined,\n check: undefined,\n };\n\n changeTableData.changingColumns[dbName] = {\n from: dbColumn,\n to: simpleCodeColumn,\n };\n\n changeTableData.changeTableAst.shape[key] = {\n type: 'change',\n from: { column: dbColumn },\n to: { column: simpleCodeColumn },\n };\n};\n\nexport const getColumnDbType = (\n column: ColumnTypeBase,\n currentSchema: string,\n) => {\n if (column instanceof EnumColumn) {\n const [schema = currentSchema, name] = getSchemaAndTableFromName(\n column.enumName,\n );\n return `${schema}.${name}`;\n } else if (column instanceof ArrayColumn) {\n const { item } = column.data;\n let type = item instanceof EnumColumn ? item.enumName : item.dataType;\n\n type = type.startsWith(currentSchema + '.')\n ? type.slice(currentSchema.length + 1)\n : type;\n\n return type + '[]'.repeat(column.data.arrayDims);\n } else if (column.data.isOfCustomType) {\n let type = column.dataType;\n\n const i = type.indexOf('(');\n if (i !== -1) {\n type = type.slice(0, i);\n }\n\n return type.includes('.') ? type : currentSchema + '.' + type;\n } else {\n return column.dataType;\n }\n};\n\nconst renameColumn = (columns: string[], from: string, to: string) => {\n for (let i = 0; i < columns.length; i++) {\n if (columns[i] === from) {\n columns[i] = to;\n }\n }\n};\n","import {\n ArrayColumn,\n ColumnType,\n DbStructureDomainsMap,\n RawSQL,\n AdapterBase,\n ColumnDataCheckBase,\n deepCompare,\n emptyArray,\n TemplateLiteralArgs,\n} from 'pqb';\nimport {\n RakeDbAst,\n getSchemaAndTableFromName,\n DbStructure,\n IntrospectedStructure,\n instantiateDbColumn,\n} from 'rake-db';\nimport { getColumnDbType } from './columns.generator';\nimport {\n CompareExpression,\n compareSqlExpressions,\n TableExpression,\n} from './generators.utils';\nimport { ComposeMigrationParams, PendingDbTypes } from '../composeMigration';\n\ninterface ComparableDomainCompare\n extends Omit<DbStructure.Domain, 'schemaName' | 'name'> {\n hasDefault: boolean;\n hasChecks: boolean;\n}\n\ninterface ComparableDomain {\n schemaName: string;\n name: string;\n column: ColumnType;\n compare: ComparableDomainCompare;\n}\n\nexport interface CodeDomain {\n schemaName: string;\n name: string;\n column: ColumnType;\n}\n\nexport const processDomains = async (\n ast: RakeDbAst[],\n adapter: AdapterBase,\n domainsMap: DbStructureDomainsMap,\n dbStructure: IntrospectedStructure,\n {\n codeItems: { domains },\n structureToAstCtx,\n currentSchema,\n internal: { generatorIgnore },\n }: ComposeMigrationParams,\n pendingDbTypes: PendingDbTypes,\n) => {\n const codeDomains: ComparableDomain[] = [];\n if (domains) {\n for (const { schemaName, name, column } of domains) {\n codeDomains.push(\n makeComparableDomain(currentSchema, schemaName, name, column),\n );\n }\n }\n\n const tableExpressions: TableExpression[] = [];\n const holdCodeDomains = new Set<ComparableDomain>();\n\n for (const domain of dbStructure.domains) {\n if (\n generatorIgnore?.schemas?.includes(domain.schemaName) ||\n generatorIgnore?.domains?.includes(domain.name)\n ) {\n continue;\n }\n\n const dbColumn = instantiateDbColumn(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n {\n // not destructuring `domain` because need to ignore `numericPrecision`, `numericScale`, etc.,\n // that are loaded from db, but not defined in the code\n schemaName: domain.typeSchema,\n tableName: 'N/A',\n name: domain.name,\n typeSchema: domain.typeSchema,\n type: domain.type,\n arrayDims: domain.arrayDims,\n default: domain.default,\n isNullable: domain.isNullable,\n collate: domain.collate,\n maxChars: domain.maxChars,\n typmod: -1,\n },\n );\n\n if (domain.checks) {\n dbColumn.data.checks = domain.checks.map((check) => ({\n sql: new RawSQL([[check]] as unknown as TemplateLiteralArgs),\n }));\n }\n\n const dbDomain = makeComparableDomain(\n currentSchema,\n domain.schemaName,\n domain.name,\n dbColumn,\n );\n\n const found = codeDomains.filter((codeDomain) =>\n deepCompare(dbDomain.compare, codeDomain.compare),\n );\n\n if ((domain.default || domain.checks?.length) && found.length) {\n for (const codeDomain of found) {\n holdCodeDomains.add(codeDomain);\n }\n\n const compare: CompareExpression['compare'] = [];\n pushCompareDefault(compare, domain, found);\n pushCompareChecks(compare, domain, found);\n\n const source = `(VALUES (NULL::${getColumnDbType(\n dbColumn,\n currentSchema,\n )})) t(value)`;\n\n tableExpressions.push({\n compare,\n source,\n handle(i) {\n const codeDomain = i === undefined ? undefined : found[i];\n if (!codeDomain) {\n ast.push(dropAst(dbDomain));\n } else {\n holdCodeDomains.delete(codeDomain);\n }\n },\n });\n } else if (found.length) {\n let i = codeDomains.findIndex(\n (codeDomain) =>\n codeDomain.name === dbDomain.name &&\n codeDomain.schemaName === dbDomain.schemaName,\n );\n if (i === -1) {\n i = 0;\n const first = found[0];\n ast.push({\n type: 'renameType',\n kind: 'DOMAIN',\n fromSchema: dbDomain.schemaName,\n from: dbDomain.name,\n toSchema: first.schemaName,\n to: first.name,\n });\n pendingDbTypes.add(first.schemaName, first.name);\n }\n\n codeDomains.splice(i, 1);\n } else {\n ast.push(dropAst(dbDomain));\n }\n }\n\n for (const codeDomain of codeDomains) {\n if (!holdCodeDomains.has(codeDomain)) {\n ast.push(createAst(codeDomain));\n pendingDbTypes.add(codeDomain.schemaName, codeDomain.name);\n }\n }\n\n if (tableExpressions.length) {\n await compareSqlExpressions(tableExpressions, adapter);\n\n if (holdCodeDomains.size) {\n for (const codeDomain of holdCodeDomains.keys()) {\n ast.push(createAst(codeDomain));\n pendingDbTypes.add(codeDomain.schemaName, codeDomain.name);\n }\n }\n }\n};\n\nconst makeComparableDomain = (\n currentSchema: string,\n schemaName: string,\n name: string,\n column: ColumnType,\n): ComparableDomain => {\n let arrayDims = 0;\n const isNullable = column.data.isNullable ?? false;\n let inner = column;\n while (inner instanceof ArrayColumn) {\n inner = inner.data.item;\n arrayDims++;\n }\n const fullType = getColumnDbType(inner, currentSchema);\n const [typeSchema = 'pg_catalog', type] = getSchemaAndTableFromName(fullType);\n\n return {\n schemaName,\n name,\n column,\n compare: {\n type,\n typeSchema,\n arrayDims,\n isNullable,\n maxChars: inner.data.maxChars,\n numericPrecision: inner.data.numericPrecision,\n numericScale: inner.data.numericScale,\n dateTimePrecision: inner.data.dateTimePrecision,\n collate: column.data.collate,\n hasDefault: column.data.default !== undefined,\n hasChecks: !!column.data.checks?.length,\n },\n };\n};\n\nconst pushCompareDefault = (\n compare: CompareExpression['compare'],\n domain: DbStructure.Domain,\n found: ComparableDomain[],\n) => {\n if (domain.default) {\n compare.push({\n inDb: domain.default,\n inCode: found.map((codeDomain) => {\n const value = codeDomain.column.data.default;\n if ('sql' in (value as ColumnDataCheckBase)) {\n return (value as ColumnDataCheckBase).sql;\n }\n return value as string;\n }),\n });\n }\n};\n\nconst pushCompareChecks = (\n compare: CompareExpression['compare'],\n domain: DbStructure.Domain,\n found: ComparableDomain[],\n) => {\n if (domain.checks?.length) {\n const inCode = found.flatMap(\n (codeDomain) =>\n codeDomain.column.data.checks?.map((check) =>\n typeof check === 'string' ? check : check.sql,\n ) || emptyArray,\n );\n\n compare.push(\n ...domain.checks.map((check) => ({\n inDb: check,\n inCode,\n })),\n );\n }\n};\n\nconst dropAst = (dbDomain: ComparableDomain): RakeDbAst.Domain => ({\n type: 'domain',\n action: 'drop',\n schema: dbDomain.schemaName,\n name: dbDomain.name,\n baseType: dbDomain.column,\n});\n\nconst createAst = (codeDomain: ComparableDomain): RakeDbAst.Domain => ({\n type: 'domain',\n action: 'create',\n schema: codeDomain.schemaName,\n name: codeDomain.name,\n baseType: codeDomain.column,\n});\n","import { DbStructure, IntrospectedStructure, RakeDbAst } from 'rake-db';\nimport { promptCreateOrRename } from './generators.utils';\nimport { ComposeMigrationParams, PendingDbTypes } from '../composeMigration';\n\nexport interface EnumItem {\n schema?: string;\n name: string;\n values: [string, ...string[]];\n}\n\nexport const processEnums = async (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n codeItems: { enums },\n currentSchema,\n verifying,\n internal: { generatorIgnore },\n }: ComposeMigrationParams,\n pendingDbTypes: PendingDbTypes,\n): Promise<void> => {\n const createEnums: EnumItem[] = [];\n const dropEnums: DbStructure.Enum[] = [];\n\n for (const [, codeEnum] of enums) {\n const { schema = currentSchema, name } = codeEnum;\n const dbEnum = dbStructure.enums.find(\n (x) => x.schemaName === schema && x.name === name,\n );\n if (!dbEnum) {\n createEnums.push(codeEnum);\n }\n }\n\n for (const dbEnum of dbStructure.enums) {\n if (\n generatorIgnore?.schemas?.includes(dbEnum.schemaName) ||\n generatorIgnore?.enums?.includes(dbEnum.name)\n ) {\n continue;\n }\n\n const codeEnum = enums.get(`${dbEnum.schemaName}.${dbEnum.name}`);\n if (codeEnum) {\n changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);\n continue;\n }\n\n const i = createEnums.findIndex((x) => x.name === dbEnum.name);\n if (i !== -1) {\n const codeEnum = createEnums[i];\n createEnums.splice(i, 1);\n const fromSchema = dbEnum.schemaName;\n const toSchema = codeEnum.schema ?? currentSchema;\n\n renameColumnsTypeSchema(dbStructure, fromSchema, toSchema);\n\n ast.push({\n type: 'renameType',\n kind: 'TYPE',\n fromSchema,\n from: dbEnum.name,\n toSchema,\n to: dbEnum.name,\n });\n pendingDbTypes.add(toSchema, dbEnum.name);\n\n changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);\n\n continue;\n }\n\n dropEnums.push(dbEnum);\n }\n\n for (const codeEnum of createEnums) {\n if (dropEnums.length) {\n const i = await promptCreateOrRename(\n 'enum',\n codeEnum.name,\n dropEnums.map((x) => x.name),\n verifying,\n );\n if (i) {\n const dbEnum = dropEnums[i - 1];\n dropEnums.splice(i - 1, 1);\n\n const fromSchema = dbEnum.schemaName;\n const from = dbEnum.name;\n const toSchema = codeEnum.schema ?? currentSchema;\n const to = codeEnum.name;\n\n if (fromSchema !== toSchema) {\n renameColumnsTypeSchema(dbStructure, fromSchema, toSchema);\n }\n\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.type === from) {\n column.type = to;\n }\n }\n }\n\n ast.push({\n type: 'renameType',\n kind: 'TYPE',\n fromSchema,\n from,\n toSchema,\n to,\n });\n pendingDbTypes.add(toSchema, to);\n\n changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);\n\n continue;\n }\n }\n\n ast.push({\n type: 'enum',\n action: 'create',\n ...codeEnum,\n });\n pendingDbTypes.add(codeEnum.schema, codeEnum.name);\n }\n\n for (const dbEnum of dropEnums) {\n ast.push({\n type: 'enum',\n action: 'drop',\n schema: dbEnum.schemaName,\n name: dbEnum.name,\n values: dbEnum.values,\n });\n }\n};\n\nconst changeEnum = (\n ast: RakeDbAst[],\n dbEnum: DbStructure.Enum,\n codeEnum: EnumItem,\n pendingDbTypes: PendingDbTypes,\n) => {\n const { values: dbValues } = dbEnum;\n const { values: codeValues, schema, name } = codeEnum;\n\n if (dbValues.length < codeValues.length) {\n if (!dbValues.some((value) => !codeValues.includes(value))) {\n ast.push({\n type: 'enumValues',\n action: 'add',\n schema,\n name,\n values: codeValues.filter((value) => !dbValues.includes(value)),\n });\n pendingDbTypes.add(schema, name);\n return;\n }\n } else if (dbValues.length > codeValues.length) {\n if (!codeValues.some((value) => !dbValues.includes(value))) {\n ast.push({\n type: 'enumValues',\n action: 'drop',\n schema,\n name,\n values: dbValues.filter((value) => !codeValues.includes(value)),\n });\n pendingDbTypes.add(schema, name);\n return;\n }\n } else if (!dbValues.some((value) => !codeValues.includes(value))) {\n return;\n }\n\n ast.push({\n type: 'changeEnumValues',\n schema,\n name,\n fromValues: dbValues,\n toValues: codeValues,\n });\n pendingDbTypes.add(schema, name);\n};\n\nconst renameColumnsTypeSchema = (\n dbStructure: IntrospectedStructure,\n from: string,\n to: string,\n) => {\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.typeSchema === from) {\n column.typeSchema = to;\n }\n }\n }\n};\n","import { AnyRakeDbConfig } from 'rake-db';\nimport { ColumnType, toArray, toSnakeCase } from 'pqb';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop } from './generators.utils';\n\nexport const processPrimaryKey = (\n config: AnyRakeDbConfig,\n changeTableData: ChangeTableData,\n) => {\n const { codeTable } = changeTableData;\n\n const columnsPrimaryKey: { key: string; name: string }[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n if (column.data.primaryKey) {\n columnsPrimaryKey.push({ key, name: column.data.name ?? key });\n }\n }\n\n changePrimaryKey(config, columnsPrimaryKey, changeTableData);\n renamePrimaryKey(changeTableData);\n};\n\nconst changePrimaryKey = (\n config: AnyRakeDbConfig,\n columnsPrimaryKey: { key: string; name: string }[],\n {\n codeTable,\n dbTableData: { primaryKey: dbPrimaryKey },\n changeTableAst: { shape, add, drop },\n changingColumns,\n }: ChangeTableData,\n) => {\n const tablePrimaryKey = codeTable.internal.tableData.primaryKey;\n const primaryKey = [\n ...new Set([\n ...columnsPrimaryKey,\n ...((config.snakeCase\n ? tablePrimaryKey?.columns.map((key) => ({\n key,\n name: toSnakeCase(key),\n }))\n : tablePrimaryKey?.columns.map((key) => ({ key, name: key }))) ?? []),\n ]),\n ];\n\n if (\n dbPrimaryKey &&\n primaryKey.length === dbPrimaryKey.columns.length &&\n !primaryKey.some(\n ({ name }) => !dbPrimaryKey.columns.some((dbName) => name === dbName),\n )\n ) {\n if (primaryKey.length === 1) {\n const { key } = primaryKey[0];\n const changes = shape[key] && toArray(shape[key]);\n if (changes) {\n for (const change of changes) {\n if (change.type !== 'change') continue;\n\n if (change.from.column) {\n change.from.column.data.primaryKey = undefined;\n }\n\n if (change.to.column) {\n const column = Object.create(change.to.column);\n column.data = { ...column.data, primaryKey: undefined };\n change.to.column = column;\n }\n }\n }\n }\n return;\n }\n\n const toDrop = dbPrimaryKey?.columns.filter(\n (key) => !checkForColumnAddOrDrop(shape, key),\n );\n if (toDrop?.length) {\n if (toDrop.length === 1 && changingColumns[toDrop[0]]) {\n const column = changingColumns[toDrop[0]];\n column.from.data.primaryKey =\n dbPrimaryKey?.name ?? (true as unknown as string);\n } else {\n drop.primaryKey = { columns: toDrop, name: dbPrimaryKey?.name };\n }\n }\n\n const toAdd = primaryKey.filter(\n ({ key }) => !checkForColumnAddOrDrop(shape, key),\n );\n if (toAdd.length) {\n if (toAdd.length === 1 && changingColumns[toAdd[0].name]) {\n const column = changingColumns[toAdd[0].name];\n column.to.data.primaryKey =\n tablePrimaryKey?.name ?? (true as unknown as string);\n } else {\n add.primaryKey = {\n columns: toAdd.map((c) => c.key),\n name: tablePrimaryKey?.name,\n };\n }\n }\n};\n\nconst renamePrimaryKey = ({\n codeTable,\n dbTableData: { primaryKey: dbPrimaryKey },\n schema,\n delayedAst,\n}: ChangeTableData) => {\n const tablePrimaryKey = codeTable.internal.tableData.primaryKey;\n if (\n dbPrimaryKey &&\n tablePrimaryKey &&\n dbPrimaryKey?.name !== tablePrimaryKey?.name\n ) {\n delayedAst.push({\n type: 'renameTableItem',\n kind: 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbPrimaryKey.name ?? `${codeTable.table}_pkey`,\n to: tablePrimaryKey.name ?? `${codeTable}_pkey`,\n });\n }\n};\n","import {\n AnyRakeDbConfig,\n RakeDbAst,\n getIndexName,\n DbStructure,\n getExcludeName,\n} from 'rake-db';\nimport {\n ColumnType,\n SearchWeight,\n TableData,\n deepCompare,\n MaybeArray,\n RecordUnknown,\n toArray,\n toSnakeCase,\n} from 'pqb';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop, CompareExpression } from './generators.utils';\nimport { CodeTable } from '../generate';\n\ninterface CodeItem {\n columnKeys: TableData.Index.ColumnOrExpressionOptions[];\n includeKeys?: MaybeArray<string>;\n}\n\ninterface CodeIndex extends TableData.Index, CodeItem {}\ninterface CodeExclude extends TableData.Exclude, CodeItem {}\n\ninterface CodeItems {\n indexes: CodeIndex[];\n excludes: CodeExclude[];\n}\n\ninterface ComparableIndexColumn {\n column?: string;\n collate?: string;\n opclass?: string;\n order?: string;\n weight?: SearchWeight;\n hasExpression: boolean;\n}\n\ninterface ComparableIndex {\n name?: string;\n using?: string;\n unique?: boolean;\n include?: string[];\n nullsNotDistinct?: boolean;\n tablespace?: string;\n tsVector?: boolean;\n language?: string;\n languageColumn?: string;\n columns: ComparableIndexColumn[];\n hasWith: boolean;\n hasWhere: boolean;\n hasExpression: boolean;\n columnKeys?: string[];\n includeKeys?: string[];\n}\n\ninterface ComparableExcludeColumn extends ComparableIndexColumn {\n with: string;\n}\n\ninterface ComparableExclude extends ComparableIndex {\n columns: ComparableExcludeColumn[];\n}\n\ninterface ComparableItems {\n indexes: ComparableIndex[];\n excludes: ComparableExclude[];\n}\n\ninterface SkipCodeItems {\n indexes: Map<number, boolean>;\n excludes: Map<number, boolean>;\n}\n\ninterface HoldCodeItems {\n indexes: Map<TableData.Index, boolean>;\n excludes: Map<TableData.Exclude, boolean>;\n}\n\ninterface Wait {\n indexes: number;\n excludes: number;\n}\n\ninterface ProcessParams {\n config: AnyRakeDbConfig;\n changeTableData: ChangeTableData;\n codeComparableItems: ComparableItems;\n codeItems: CodeItems;\n skipCodeItems: SkipCodeItems;\n holdCodeItems: HoldCodeItems;\n wait: Wait;\n ast: RakeDbAst[];\n compareExpressions: CompareExpression[];\n}\n\nexport const processIndexesAndExcludes = (\n config: AnyRakeDbConfig,\n changeTableData: ChangeTableData,\n ast: RakeDbAst[],\n compareExpressions: CompareExpression[],\n) => {\n const codeItems = collectCodeIndexes(config, changeTableData);\n const codeComparableItems = collectCodeComparableItems(config, codeItems);\n\n // to skip indexes without SQL from being added when they are matched with already existing indexes\n const skipCodeItems: SkipCodeItems = {\n indexes: new Map(),\n excludes: new Map(),\n };\n\n // to skip indexes with SQL from being added while their SQL is being asynchronously compared with existing indexes\n const holdCodeItems: HoldCodeItems = {\n indexes: new Map(),\n excludes: new Map(),\n };\n\n const processParams: ProcessParams = {\n config,\n changeTableData,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n // counter for async SQL comparisons that are in progress\n wait: { indexes: 0, excludes: 0 },\n ast,\n compareExpressions,\n };\n\n processItems(processParams, 'indexes');\n processItems(processParams, 'excludes');\n\n addMainItems(\n changeTableData,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n 'indexes',\n );\n addMainItems(\n changeTableData,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n 'excludes',\n );\n};\n\nconst processItems = (\n {\n config,\n changeTableData,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n wait,\n ast,\n compareExpressions,\n }: ProcessParams,\n key: 'indexes' | 'excludes',\n) => {\n const {\n changeTableAst: { shape },\n } = changeTableData;\n\n const dbItems = changeTableData.dbTableData[key];\n\n for (const dbItem of dbItems) {\n const hasAddedOrDroppedColumn = dbItem.columns.some(\n (column) =>\n 'column' in column && checkForColumnAddOrDrop(shape, column.column),\n );\n if (hasAddedOrDroppedColumn) continue;\n\n normalizeItem(dbItem);\n\n const { found, rename, foundAndHasSql } = findMatchingItem(\n dbItem,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n changeTableData.codeTable.table,\n config,\n key,\n );\n\n const { columns: dbColumns } = dbItem;\n\n if (!foundAndHasSql) {\n handleItemChange(\n changeTableData,\n dbItem,\n dbColumns,\n found[0],\n rename[0],\n key,\n );\n continue;\n }\n\n for (const codeItem of found) {\n holdCodeItems[key].set(codeItem as never, true);\n }\n\n const compare: CompareExpression['compare'] = [];\n for (let i = 0; i < dbItem.columns.length; i++) {\n const column = dbItem.columns[i];\n if (!('expression' in column)) continue;\n\n compare.push({\n inDb: column.expression,\n inCode: found.map(\n (x) => (x.columns[i] as { expression: string }).expression,\n ),\n });\n }\n\n if (dbItem.with) {\n compare.push({\n inDb: dbItem.with,\n inCode: found.map((x) => x.options.with as string),\n });\n }\n\n if (dbItem.where) {\n compare.push({\n inDb: dbItem.where,\n inCode: found.map((x) => x.options.where as string),\n });\n }\n\n wait[key]++;\n compareExpressions.push({\n compare,\n handle(i) {\n const codeItem = i === undefined ? undefined : found[i];\n\n handleItemChange(\n changeTableData,\n dbItem,\n dbColumns,\n codeItem,\n i === undefined ? undefined : rename[i],\n key,\n );\n\n if (codeItem) {\n holdCodeItems[key].delete(codeItem as never);\n }\n\n if (!--wait[key] && holdCodeItems[key].size) {\n addItems(changeTableData, [...holdCodeItems[key].keys()], key);\n\n if (!changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n }\n },\n });\n }\n};\n\nconst collectCodeIndexes = (\n config: AnyRakeDbConfig,\n { codeTable, changeTableAst: { shape } }: ChangeTableData,\n): CodeItems => {\n const codeItems: CodeItems = { indexes: [], excludes: [] };\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n if (!column.data.indexes && !column.data.excludes) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n pushCodeColumnItems(config, codeItems, key, name, column, 'indexes');\n pushCodeColumnItems(config, codeItems, key, name, column, 'excludes');\n }\n\n pushCodeCompositeItems(config, codeTable, codeItems, 'indexes');\n pushCodeCompositeItems(config, codeTable, codeItems, 'excludes');\n\n return codeItems;\n};\n\nconst pushCodeColumnItems = (\n config: AnyRakeDbConfig,\n codeItems: CodeItems,\n columnKey: string,\n name: string,\n column: ColumnType,\n key: 'indexes' | 'excludes',\n) => {\n const items = column.data[key];\n if (!items) return;\n\n codeItems[key].push(\n ...(items as TableData.ColumnExclude[]).map(\n ({\n options: { collate, opclass, order, weight, ...options },\n with: wi,\n ...index\n }) => {\n const w = key === 'excludes' ? wi : (undefined as never);\n return {\n columns: [\n {\n collate,\n opclass,\n order,\n weight,\n column: name,\n with: w,\n },\n ],\n ...index,\n options: options.include\n ? config.snakeCase\n ? {\n ...options,\n include: toArray(options.include).map(toSnakeCase),\n }\n : options\n : options,\n columnKeys: [\n {\n collate,\n opclass,\n order,\n weight,\n column: columnKey,\n with: w,\n },\n ],\n includeKeys: options.include,\n };\n },\n ),\n );\n};\n\nconst pushCodeCompositeItems = (\n config: AnyRakeDbConfig,\n codeTable: CodeTable,\n codeItems: CodeItems,\n key: 'indexes' | 'excludes',\n) => {\n const items = codeTable.internal.tableData[key];\n if (!items) return;\n\n codeItems[key].push(\n ...(items as TableData.Exclude[]).map((x) => ({\n ...x,\n columns: config.snakeCase\n ? x.columns.map((c) =>\n 'column' in c ? { ...c, column: toSnakeCase(c.column) } : c,\n )\n : x.columns,\n columnKeys: x.columns,\n options:\n x.options.include && config.snakeCase\n ? {\n ...x.options,\n include: toArray(x.options.include).map(toSnakeCase),\n }\n : x.options,\n includeKeys: x.options.include,\n })),\n );\n};\n\nconst collectCodeComparableItems = (\n config: AnyRakeDbConfig,\n codeItems: CodeItems,\n): ComparableItems => {\n return {\n indexes: collectCodeComparableItemsType(config, codeItems, 'indexes'),\n excludes: collectCodeComparableItemsType(config, codeItems, 'excludes'),\n };\n};\n\nconst collectCodeComparableItemsType = (\n config: AnyRakeDbConfig,\n codeItems: CodeItems,\n key: 'indexes' | 'excludes',\n): ComparableExclude[] => {\n return codeItems[key].map((codeItem) => {\n normalizeItem(codeItem.options as never);\n\n return itemToComparable({\n ...codeItem.options,\n include:\n codeItem.options.include === undefined\n ? undefined\n : config.snakeCase\n ? toArray(codeItem.options.include).map(toSnakeCase)\n : toArray(codeItem.options.include),\n columns: codeItem.columns,\n name: codeItem.options.name,\n columnKeys: codeItem.columnKeys,\n includeKeys: codeItem.includeKeys,\n });\n }) as never;\n};\n\nconst normalizeItem = (item: {\n using?: string;\n unique?: boolean;\n nullsNotDistinct?: boolean;\n columns: RecordUnknown[];\n exclude?: string[];\n}) => {\n if (item.using) item.using = item.using.toLowerCase();\n if (item.using === 'btree') item.using = undefined;\n if (!item.unique) item.unique = undefined;\n if (item.nullsNotDistinct === false) item.nullsNotDistinct = undefined;\n if (item.exclude) {\n for (let i = 0; i < item.columns.length; i++) {\n item.columns[i].with = item.exclude[i];\n }\n }\n};\n\nconst itemToComparable = (\n index: TableData.Index.Options & {\n columns: DbStructure.Index['columns'];\n name?: string;\n columnKeys?: TableData.Index.ColumnOrExpressionOptions[];\n includeKeys?: MaybeArray<string>;\n },\n) => {\n let hasExpression = false;\n const columns = index.columns.map((column) => {\n const result = {\n ...column,\n expression: undefined,\n hasExpression: 'expression' in column,\n };\n if (result.hasExpression) hasExpression = true;\n return result;\n });\n\n return {\n ...index,\n schemaName: undefined,\n tableName: undefined,\n with: undefined,\n hasWith: !!index.with,\n where: undefined,\n hasWhere: !!index.where,\n columns,\n hasExpression,\n } as ComparableIndex;\n};\n\ninterface ItemChange {\n found: TableData.Index[] | TableData.Exclude[];\n rename: (string | undefined)[];\n}\n\nconst findMatchingItem = (\n dbItem: DbStructure.Index | DbStructure.Exclude,\n codeComparableItems: ComparableItems,\n codeItems: CodeItems,\n skipCodeItems: SkipCodeItems,\n tableName: string,\n config: AnyRakeDbConfig,\n key: 'indexes' | 'excludes',\n) => {\n const dbComparableItem = itemToComparable(\n key === 'indexes'\n ? dbItem\n : {\n ...dbItem,\n exclude: undefined as never,\n columns: dbItem.columns.map((column, i) => ({\n ...column,\n with: (dbItem as DbStructure.Exclude).exclude[i],\n })),\n },\n );\n\n const { found, rename } = findMatchingItemWithoutSql(\n dbComparableItem,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n tableName,\n config,\n key,\n );\n\n const foundAndHasSql = found.length && checkIfItemHasSql(dbComparableItem);\n\n return { found, rename, foundAndHasSql };\n};\n\nconst findMatchingItemWithoutSql = (\n dbItem: ComparableIndex | ComparableExclude,\n codeComparableItems: ComparableItems,\n codeItems: CodeItems,\n skipCodeItems: SkipCodeItems,\n tableName: string,\n config: AnyRakeDbConfig,\n key: 'indexes' | 'excludes',\n): ItemChange => {\n const found: (TableData.Index | TableData.Exclude)[] = [];\n const rename: (string | undefined)[] = [];\n\n const { columns: dbColumns, ...dbItemWithoutColumns } = dbItem;\n\n for (let i = 0; i < codeComparableItems[key].length; i++) {\n if (skipCodeItems[key].has(i)) continue;\n\n const { columns: codeColumns, ...codeItem } = codeComparableItems[key][i];\n if (\n dbColumns.length === codeColumns.length &&\n !dbColumns.some((dbColumn, i) => !deepCompare(dbColumn, codeColumns[i]))\n ) {\n let a: RecordUnknown = dbItemWithoutColumns;\n let b = codeItem;\n const codeName =\n b.name ??\n (key === 'indexes' ? getIndexName : getExcludeName)(\n tableName,\n dbColumns,\n );\n if (a.name !== b.name) {\n a = { ...a, name: undefined };\n b = {\n ...b,\n name: undefined,\n columnKeys: undefined,\n includeKeys: undefined,\n };\n if (a.language && !b.language) {\n b.language = config.language ?? 'english';\n }\n\n if (deepCompare(a, b)) {\n found.push(codeItems[key][i]);\n rename.push(\n dbItemWithoutColumns.name !== codeName ? codeName : undefined,\n );\n }\n } else {\n const {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n columnKeys,\n includeKeys,\n ...codeItemWithoutKeys\n } = codeItem;\n\n if (deepCompare(dbItemWithoutColumns, codeItemWithoutKeys)) {\n found.push(codeItems[key][i]);\n rename.push(undefined);\n }\n }\n\n if (found.length && !checkIfItemHasSql(codeItem)) {\n skipCodeItems[key].set(i, true);\n }\n }\n }\n\n return { found, rename };\n};\n\nconst checkIfItemHasSql = (\n x: Pick<ComparableIndex, 'hasWith' | 'hasWhere' | 'hasExpression'>,\n) => x.hasWith || x.hasWhere || x.hasExpression;\n\nconst handleItemChange = (\n {\n changeTableAst,\n schema,\n codeTable,\n changingColumns,\n delayedAst,\n }: ChangeTableData,\n dbItem: DbStructure.Index | DbStructure.Exclude,\n dbColumns: DbStructure.Index['columns'],\n found: TableData.Index | TableData.Exclude | undefined,\n rename: string | undefined,\n key: 'indexes' | 'excludes',\n) => {\n if (!found) {\n const name =\n dbItem.name ===\n (key === 'indexes' ? getIndexName : getExcludeName)(\n changeTableAst.name,\n dbColumns,\n )\n ? undefined\n : dbItem.name;\n\n if (dbColumns.length === 1 && 'column' in dbColumns[0]) {\n const dbColumn = dbColumns[0];\n const column = changingColumns[dbColumn.column];\n if (column) {\n (column.from.data[key] ??= []).push({\n options: { ...dbItem, name },\n with: (key === 'indexes'\n ? undefined\n : (dbColumn as unknown as { with: string }).with) as never,\n });\n return;\n }\n }\n\n (changeTableAst.drop[key] ??= []).push({\n columns: dbColumns,\n options: { ...dbItem, name },\n });\n } else if (rename) {\n delayedAst.push({\n type: 'renameTableItem',\n kind: key === 'indexes' ? 'INDEX' : 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbItem.name,\n to: rename,\n });\n }\n};\n\ninterface IndexWithMaybeColumnNames extends TableData.Index {\n columnNames?: TableData.Index.ColumnOrExpressionOptions[];\n}\n\nconst addMainItems = (\n changeTableData: ChangeTableData,\n codeItems: CodeItems,\n skipCodeItems: SkipCodeItems,\n holdCodeItems: HoldCodeItems,\n key: 'indexes' | 'excludes',\n) => {\n const itemsToAdd = codeItems[key].filter(\n (item, i) =>\n !skipCodeItems[key].has(i) && !holdCodeItems[key].has(item as never),\n );\n if (itemsToAdd.length) {\n addItems(\n changeTableData,\n itemsToAdd.map((x) => ({\n ...x,\n columns: x.columnKeys,\n columnNames: x.columns,\n options: x.options.include\n ? { ...x.options, include: x.includeKeys }\n : x.options,\n })),\n key,\n );\n }\n};\n\nconst addItems = (\n { changeTableAst, changingColumns }: ChangeTableData,\n add: IndexWithMaybeColumnNames[],\n key: 'indexes' | 'excludes',\n) => {\n const items = (changeTableAst.add[key] ??= []);\n for (const item of add) {\n if (item.columns.length === 1 && 'column' in item.columns[0]) {\n const column =\n changingColumns[\n ((item.columnNames || item.columns)[0] as { column: string }).column\n ];\n if (column) {\n (column.to.data[key] ??= []).push(\n key === 'indexes'\n ? item\n : ({\n ...item,\n with: (item as TableData.Exclude).columns[0].with,\n } as never),\n );\n continue;\n }\n }\n\n items.push(item);\n }\n};\n","import {\n RakeDbAst,\n DbStructure,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n getConstraintName,\n AnyRakeDbConfig,\n} from 'rake-db';\nimport { ColumnType, TableData, deepCompare, toSnakeCase } from 'pqb';\nimport { ChangeTableData, TableShapes } from './tables.generator';\nimport { checkForColumnAddOrDrop } from './generators.utils';\n\ninterface Constraint extends TableData.Constraint {\n references: TableData.References;\n}\n\ninterface CodeForeignKey {\n references: DbStructure.References;\n codeConstraint: Constraint;\n}\n\ninterface ReferencesWithStringTable extends TableData.References {\n fnOrTable: string;\n}\n\nconst mapMatchToDb: {\n [K in TableData.References.Match]: DbStructure.ForeignKeyMatch;\n} = {\n FULL: 'f',\n PARTIAL: 'p',\n SIMPLE: 's',\n};\n\nconst mapMatchToCode = {} as {\n [K in DbStructure.ForeignKeyMatch]: TableData.References.Match;\n};\nfor (const key in mapMatchToDb) {\n mapMatchToCode[\n mapMatchToDb[\n key as TableData.References.Match\n ] as DbStructure.ForeignKeyMatch\n ] = key as TableData.References.Match;\n}\n\nconst mapActionToDb: {\n [K in TableData.References.Action]: DbStructure.ForeignKeyAction;\n} = {\n 'NO ACTION': 'a',\n RESTRICT: 'r',\n CASCADE: 'c',\n 'SET NULL': 'n',\n 'SET DEFAULT': 'd',\n};\n\nconst mapActionToCode = {} as {\n [K in DbStructure.ForeignKeyAction]: TableData.References.Action;\n};\nfor (const key in mapActionToDb) {\n mapActionToCode[\n mapActionToDb[\n key as TableData.References.Action\n ] as DbStructure.ForeignKeyAction\n ] = key as TableData.References.Action;\n}\n\nexport const processForeignKeys = (\n config: AnyRakeDbConfig,\n ast: RakeDbAst[],\n changeTables: ChangeTableData[],\n currentSchema: string,\n tableShapes: TableShapes,\n): void => {\n for (const changeTableData of changeTables) {\n const codeForeignKeys = collectCodeFkeys(\n config,\n changeTableData,\n currentSchema,\n );\n\n const { codeTable, dbTableData, changeTableAst, schema, changingColumns } =\n changeTableData;\n const { shape, add, drop } = changeTableAst;\n let changed = false;\n\n for (const dbConstraint of dbTableData.constraints) {\n const { references: dbReferences } = dbConstraint;\n if (!dbReferences) continue;\n\n const hasChangedColumn = dbReferences.columns.some((column) =>\n checkForColumnAddOrDrop(shape, column),\n );\n if (hasChangedColumn) continue;\n\n const foreignShape =\n tableShapes[\n `${dbReferences.foreignSchema}.${dbReferences.foreignTable}`\n ];\n const hasForeignChangedColumn =\n foreignShape &&\n dbReferences.foreignColumns.some((column) => {\n const res = checkForColumnAddOrDrop(foreignShape, column);\n // console.log(res, column);\n return res;\n });\n if (hasForeignChangedColumn) continue;\n\n let found = false;\n let rename: string | undefined;\n for (let i = 0; i < codeForeignKeys.length; i++) {\n const codeForeignKey = codeForeignKeys[i];\n const codeReferences = codeForeignKey.references;\n if (deepCompare(dbReferences, codeReferences)) {\n found = true;\n codeForeignKeys.splice(i, 1);\n\n const codeName =\n codeForeignKey.codeConstraint.name ??\n getConstraintName(\n codeTable.table,\n codeForeignKey,\n config.snakeCase,\n );\n if (codeName !== dbConstraint.name) {\n rename = codeName;\n }\n }\n }\n\n if (!found) {\n const foreignKey = dbForeignKeyToCodeForeignKey(\n config,\n dbConstraint,\n dbReferences,\n );\n\n if (\n dbReferences.columns.length === 1 &&\n changingColumns[dbReferences.columns[0]]\n ) {\n const column = changingColumns[dbReferences.columns[0]];\n (column.from.data.foreignKeys ??= []).push({\n fnOrTable: foreignKey.references.fnOrTable,\n foreignColumns: foreignKey.references.foreignColumns,\n options: foreignKey.references.options,\n });\n } else {\n (drop.constraints ??= []).push(foreignKey);\n }\n\n changed = true;\n } else if (rename) {\n ast.push({\n type: 'renameTableItem',\n kind: 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbConstraint.name,\n to: rename,\n });\n }\n }\n\n if (codeForeignKeys.length) {\n const constraints = (add.constraints ??= []);\n for (const { codeConstraint, references } of codeForeignKeys) {\n if (\n references.columns.length === 1 &&\n changingColumns[references.columns[0]]\n ) {\n const column = changingColumns[references.columns[0]];\n (column.to.data.foreignKeys ??= []).push({\n fnOrTable: references.foreignTable,\n foreignColumns: codeConstraint.references.foreignColumns,\n options: codeConstraint.references.options,\n });\n } else {\n constraints.push(codeConstraint);\n }\n }\n\n changed = true;\n }\n\n if (changed && !changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n }\n};\n\nconst collectCodeFkeys = (\n config: AnyRakeDbConfig,\n { codeTable, changeTableAst: { shape } }: ChangeTableData,\n currentSchema: string,\n): CodeForeignKey[] => {\n const codeForeignKeys: CodeForeignKey[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n if (!column.data.foreignKeys) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n codeForeignKeys.push(\n ...column.data.foreignKeys.map((x) => {\n const columns = [name];\n\n const fnOrTable = fnOrTableToString(x.fnOrTable);\n\n return parseForeignKey(\n config,\n {\n name: x.options?.name,\n references: {\n columns: [name],\n fnOrTable,\n foreignColumns: x.foreignColumns,\n options: x.options,\n },\n },\n {\n columns,\n fnOrTable,\n foreignColumns: x.foreignColumns,\n options: x.options,\n },\n currentSchema,\n );\n }),\n );\n }\n\n if (codeTable.internal.tableData.constraints) {\n for (const tableConstraint of codeTable.internal.tableData.constraints) {\n const { references: refs } = tableConstraint;\n if (!refs) continue;\n\n const fnOrTable = fnOrTableToString(refs.fnOrTable);\n\n codeForeignKeys.push(\n parseForeignKey(\n config,\n {\n ...tableConstraint,\n references: {\n ...refs,\n fnOrTable,\n },\n },\n {\n ...refs,\n fnOrTable,\n columns: config.snakeCase\n ? refs.columns.map(toSnakeCase)\n : refs.columns,\n foreignColumns: config.snakeCase\n ? refs.foreignColumns.map(toSnakeCase)\n : refs.foreignColumns,\n },\n currentSchema,\n ),\n );\n }\n }\n\n return codeForeignKeys;\n};\n\nexport const fnOrTableToString = (\n fnOrTable: TableData.References['fnOrTable'],\n) => {\n if (typeof fnOrTable !== 'string') {\n const { schema, table } = new (fnOrTable())();\n fnOrTable = concatSchemaAndName({ schema, name: table });\n }\n return fnOrTable;\n};\n\nconst parseForeignKey = (\n config: AnyRakeDbConfig,\n codeConstraint: Constraint,\n references: ReferencesWithStringTable,\n currentSchema: string,\n): CodeForeignKey => {\n const { fnOrTable, columns, foreignColumns, options } = references;\n const [schema, table] = getSchemaAndTableFromName(fnOrTable);\n\n return {\n references: {\n foreignSchema: schema ?? currentSchema,\n foreignTable: table,\n columns,\n foreignColumns: config.snakeCase\n ? foreignColumns.map(toSnakeCase)\n : foreignColumns,\n match: mapMatchToDb[options?.match || 'SIMPLE'],\n onUpdate: mapActionToDb[options?.onUpdate || 'NO ACTION'],\n onDelete: mapActionToDb[options?.onDelete || 'NO ACTION'],\n },\n codeConstraint,\n };\n};\n\nconst dbForeignKeyToCodeForeignKey = (\n config: AnyRakeDbConfig,\n dbConstraint: DbStructure.Constraint,\n dbReferences: DbStructure.References,\n): { name?: string; references: TableData.References } => ({\n name:\n dbConstraint.name ===\n getConstraintName(\n dbConstraint.tableName,\n { references: dbReferences },\n config.snakeCase,\n )\n ? undefined\n : dbConstraint.name,\n references: {\n columns: dbReferences.columns,\n fnOrTable: `${dbReferences.foreignSchema}.${dbReferences.foreignTable}`,\n foreignColumns: dbReferences.foreignColumns,\n options: {\n match:\n dbReferences.match === 's'\n ? undefined\n : mapMatchToCode[dbReferences.match],\n onUpdate:\n dbReferences.onUpdate === 'a'\n ? undefined\n : mapActionToCode[dbReferences.onUpdate],\n onDelete:\n dbReferences.onDelete === 'a'\n ? undefined\n : mapActionToCode[dbReferences.onDelete],\n },\n },\n});\n","import {\n ColumnDataCheckBase,\n getFreeSetAlias,\n TemplateLiteralArgs,\n ColumnType,\n RawSQL,\n TableData,\n} from 'pqb';\nimport { DbStructure, RakeDbAst } from 'rake-db';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop, CompareExpression } from './generators.utils';\n\ninterface CodeCheck {\n check: ColumnDataCheckBase;\n name: string;\n column?: string;\n}\n\nexport const processChecks = (\n ast: RakeDbAst[],\n changeTableData: ChangeTableData,\n compareExpressions: CompareExpression[],\n): void => {\n const codeChecks = collectCodeChecks(changeTableData);\n const {\n dbTableData,\n changeTableAst: { add, shape },\n } = changeTableData;\n\n const hasDbChecks = dbTableData.constraints.some((c) => c.check);\n if (!hasDbChecks) {\n if (codeChecks.length) {\n const constraints = (add.constraints ??= []);\n for (const codeCheck of codeChecks) {\n if (\n !codeCheck.column ||\n !changeTableData.changingColumns[codeCheck.column]\n ) {\n constraints.push({\n check: codeCheck.check.sql,\n name: codeCheck.name,\n });\n }\n }\n }\n return;\n }\n\n let wait = 0;\n const foundCodeChecks = new Set<number>();\n for (const dbConstraint of dbTableData.constraints) {\n const { check: dbCheck, name } = dbConstraint;\n if (!dbCheck) continue;\n\n const hasChangedColumn = dbCheck.columns?.some((column) =>\n checkForColumnAddOrDrop(shape, column),\n );\n if (hasChangedColumn) continue;\n\n if (codeChecks.length) {\n wait++;\n compareExpressions.push({\n compare: [\n {\n inDb: dbCheck.expression,\n inCode: codeChecks.map(({ check }) => check.sql),\n },\n ],\n handle(i) {\n if (i !== undefined) {\n foundCodeChecks.add(i);\n } else {\n dropCheck(changeTableData, dbCheck, name);\n }\n\n if (--wait !== 0) return;\n\n const checksToAdd: TableData.Constraint[] = [];\n\n codeChecks.forEach((check, i) => {\n if (foundCodeChecks.has(i)) {\n if (!check.column) return;\n\n const change = changeTableData.changingColumns[check.column];\n if (!change) return;\n\n const columnChecks = change.to.data.checks;\n if (!columnChecks) return;\n\n const i = columnChecks.indexOf(check.check);\n if (i !== -1) {\n columnChecks.splice(i, 1);\n }\n return;\n }\n\n checksToAdd.push({\n name: check.name,\n check: check.check.sql,\n });\n });\n\n if (checksToAdd.length) {\n (add.constraints ??= []).push(...checksToAdd);\n }\n\n if (\n !changeTableData.pushedAst &&\n (changeTableData.changeTableAst.drop.constraints?.length ||\n add.constraints?.length)\n ) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n },\n });\n } else {\n dropCheck(changeTableData, dbCheck, name);\n }\n }\n};\n\nconst collectCodeChecks = ({\n codeTable,\n changeTableAst: { shape },\n}: ChangeTableData): CodeCheck[] => {\n const names = new Set<string>();\n\n const codeChecks: CodeCheck[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n if (!column.data.checks) continue;\n\n const columnName = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, columnName)) continue;\n\n const baseName = `${codeTable.table}_${columnName}_check`;\n\n codeChecks.push(\n ...column.data.checks.map((check) => {\n const name = check.name || getFreeSetAlias(names, baseName, 1);\n names.add(name);\n\n return {\n check,\n name,\n column: columnName,\n };\n }),\n );\n }\n\n if (codeTable.internal.tableData.constraints) {\n for (const constraint of codeTable.internal.tableData.constraints) {\n const { check } = constraint;\n if (check) {\n const baseName = `${codeTable.table}_check`;\n const name = constraint.name || getFreeSetAlias(names, baseName, 1);\n names.add(name);\n\n codeChecks.push({\n check: { sql: check, name: constraint.name },\n name,\n });\n }\n }\n }\n\n return codeChecks;\n};\n\nconst dropCheck = (\n { changeTableAst: { drop }, changingColumns }: ChangeTableData,\n dbCheck: DbStructure.Check,\n name: string,\n) => {\n const sql = new RawSQL([\n [dbCheck.expression],\n ] as unknown as TemplateLiteralArgs);\n\n if (dbCheck.columns?.length === 1 && changingColumns[dbCheck.columns[0]]) {\n const column = changingColumns[dbCheck.columns[0]];\n column.from.data.name = 'i_d';\n (column.from.data.checks ??= []).push({\n name,\n sql,\n });\n } else {\n (drop.constraints ??= []).push({\n name,\n check: sql,\n });\n }\n};\n","import {\n ColumnsShape,\n ColumnType,\n GeneratorIgnore,\n VirtualColumn,\n DbStructureDomainsMap,\n AdapterBase,\n ColumnTypeBase,\n EnumColumn,\n ArrayColumn,\n} from 'pqb';\nimport {\n DbStructure,\n IntrospectedStructure,\n AnyRakeDbConfig,\n RakeDbAst,\n getDbStructureTableData,\n StructureToAstCtx,\n StructureToAstTableData,\n tableToAst,\n getSchemaAndTableFromName,\n} from 'rake-db';\nimport {\n CompareExpression,\n compareSqlExpressions,\n promptCreateOrRename,\n TableExpression,\n} from './generators.utils';\nimport { processPrimaryKey } from './primaryKey.generator';\nimport { processIndexesAndExcludes } from './indexesAndExcludes.generator';\nimport { processColumns, TypeCastsCache } from './columns.generator';\nimport { processForeignKeys } from './foreignKeys.generator';\nimport { processChecks } from './checks.generator';\nimport { CodeTable } from '../generate';\nimport { ComposeMigrationParams, PendingDbTypes } from '../composeMigration';\n\nexport interface CompareSql {\n values: unknown[];\n expressions: {\n inDb: string;\n inCode: string;\n change(): void;\n }[];\n}\n\nexport interface ChangeTableSchemaData {\n codeTable: CodeTable;\n dbTable: DbStructure.Table;\n}\n\nexport interface ChangeTableData extends ChangeTableSchemaData {\n dbTableData: StructureToAstTableData;\n schema: string;\n changeTableAst: RakeDbAst.ChangeTable;\n pushedAst: boolean;\n changingColumns: ChangingColumns;\n delayedAst: RakeDbAst[];\n}\n\ninterface ChangingColumns {\n [dbName: string]: ChangingColumnsPair;\n}\n\nexport interface ChangingColumnsPair {\n from: ColumnType;\n to: ColumnType;\n}\n\nexport interface TableShapes {\n [K: string]: RakeDbAst.ChangeTableShape;\n}\n\nexport const processTables = async (\n ast: RakeDbAst[],\n domainsMap: DbStructureDomainsMap,\n adapter: AdapterBase,\n dbStructure: IntrospectedStructure,\n config: AnyRakeDbConfig,\n {\n structureToAstCtx,\n codeItems: { tables },\n currentSchema,\n internal: { generatorIgnore },\n verifying,\n }: ComposeMigrationParams,\n pendingDbTypes: PendingDbTypes,\n): Promise<void> => {\n const createTables: CodeTable[] = collectCreateTables(\n tables,\n dbStructure,\n currentSchema,\n );\n const compareSql: CompareSql = { values: [], expressions: [] };\n const tableExpressions: TableExpression[] = [];\n const { changeTables, changeTableSchemas, dropTables, tableShapes } =\n collectChangeAndDropTables(\n config,\n tables,\n dbStructure,\n currentSchema,\n createTables,\n generatorIgnore,\n );\n\n applyChangeTableSchemas(changeTableSchemas, currentSchema, ast);\n\n await applyCreateOrRenameTables(\n dbStructure,\n createTables,\n dropTables,\n changeTables,\n tableShapes,\n currentSchema,\n ast,\n verifying,\n );\n\n await applyChangeTables(\n adapter,\n changeTables,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n config,\n compareSql,\n tableExpressions,\n verifying,\n pendingDbTypes,\n );\n\n processForeignKeys(config, ast, changeTables, currentSchema, tableShapes);\n\n await Promise.all([\n applyCompareSql(compareSql, adapter),\n compareSqlExpressions(tableExpressions, adapter),\n ]);\n\n for (const dbTable of dropTables) {\n ast.push(\n tableToAst(structureToAstCtx, dbStructure, dbTable, 'drop', domainsMap),\n );\n }\n};\n\nconst collectCreateTables = (\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n): CodeTable[] => {\n return tables.reduce<CodeTable[]>((acc, codeTable) => {\n const tableSchema = codeTable.q.schema ?? currentSchema;\n const hasDbTable = dbStructure.tables.some(\n (t) => t.name === codeTable.table && t.schemaName === tableSchema,\n );\n if (!hasDbTable) {\n acc.push(codeTable);\n }\n return acc;\n }, []);\n};\n\nconst collectChangeAndDropTables = (\n config: AnyRakeDbConfig,\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n createTables: CodeTable[],\n generatorIgnore: GeneratorIgnore | undefined,\n): {\n changeTables: ChangeTableData[];\n changeTableSchemas: ChangeTableSchemaData[];\n dropTables: DbStructure.Table[];\n tableShapes: TableShapes;\n} => {\n const changeTables: ChangeTableData[] = [];\n const changeTableSchemas: ChangeTableSchemaData[] = [];\n const dropTables: DbStructure.Table[] = [];\n const tableShapes: TableShapes = {};\n const ignoreTables = generatorIgnore?.tables?.map((name) => {\n const [schema = currentSchema, table] = getSchemaAndTableFromName(name);\n return { schema, table };\n });\n\n for (const dbTable of dbStructure.tables) {\n if (\n dbTable.name === config.migrationsTable ||\n generatorIgnore?.schemas?.includes(dbTable.schemaName) ||\n ignoreTables?.some(\n ({ schema, table }) =>\n table === dbTable.name && schema === dbTable.schemaName,\n )\n )\n continue;\n\n const codeTable = tables.find(\n (t) =>\n t.table === dbTable.name &&\n (t.q.schema ?? currentSchema) === dbTable.schemaName,\n );\n if (codeTable) {\n addChangeTable(\n dbStructure,\n changeTables,\n tableShapes,\n currentSchema,\n dbTable,\n codeTable,\n );\n continue;\n }\n\n const i = createTables.findIndex((t) => t.table === dbTable.name);\n if (i !== -1) {\n const codeTable = createTables[i];\n createTables.splice(i, 1);\n changeTableSchemas.push({ codeTable, dbTable });\n continue;\n }\n\n dropTables.push(dbTable);\n }\n\n return { changeTables, changeTableSchemas, dropTables, tableShapes };\n};\n\nconst applyChangeTableSchemas = (\n changeTableSchemas: ChangeTableSchemaData[],\n currentSchema: string,\n ast: RakeDbAst[],\n) => {\n for (const { codeTable, dbTable } of changeTableSchemas) {\n const fromSchema = dbTable.schemaName;\n const toSchema = codeTable.q.schema ?? currentSchema;\n\n ast.push({\n type: 'renameType',\n kind: 'TABLE',\n fromSchema,\n from: dbTable.name,\n toSchema,\n to: dbTable.name,\n });\n }\n};\n\nconst applyChangeTables = async (\n adapter: AdapterBase,\n changeTables: ChangeTableData[],\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n config: AnyRakeDbConfig,\n compareSql: CompareSql,\n tableExpressions: TableExpression[],\n verifying: boolean | undefined,\n pendingDbTypes: PendingDbTypes,\n): Promise<void> => {\n const compareExpressions: CompareExpression[] = [];\n const typeCastsCache: TypeCastsCache = {};\n\n for (const changeTableData of changeTables) {\n compareExpressions.length = 0;\n\n await processTableChange(\n adapter,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n config,\n changeTableData,\n compareSql,\n compareExpressions,\n typeCastsCache,\n verifying,\n );\n\n if (compareExpressions.length) {\n const { codeTable } = changeTableData;\n const names: string[] = [];\n const types: string[] = [];\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n // skip virtual columns\n if (!column.dataType) continue;\n\n const name = column.data.name ?? key;\n const type = getColumnDbTypeForComparison(column, currentSchema);\n if (!pendingDbTypes.set.has(type)) {\n names.push(name);\n types.push(type);\n }\n }\n\n const tableName = codeTable.table;\n const source = `(VALUES (${types\n .map((x) => `NULL::${x}`)\n .join(', ')})) \"${tableName}\"(${names\n .map((x) => `\"${x}\"`)\n .join(', ')})`;\n\n tableExpressions.push(\n ...compareExpressions.map((x) => ({ ...x, source })),\n );\n }\n }\n};\n\nconst getColumnDbTypeForComparison = (\n column: ColumnTypeBase,\n currentSchema: string,\n): string => {\n if (column instanceof ArrayColumn) {\n return (\n getColumnDbTypeForComparison(column.data.item, currentSchema) +\n '[]'.repeat(column.data.arrayDims)\n );\n }\n\n let type = column instanceof EnumColumn ? column.enumName : column.dataType;\n\n const i = type.indexOf('(');\n let append = '';\n if (i !== -1) {\n type = type.slice(0, i);\n append = type.slice(i);\n }\n\n const j = type.indexOf('.');\n if (j === -1) {\n let result = `\"${type}\"${append}`;\n if (column.data.isOfCustomType || column instanceof EnumColumn) {\n result = `\"${currentSchema}\".${result}`;\n }\n return result;\n } else {\n return `\"${type.slice(j)}\".\"${type.slice(0, j)}\"${append}`;\n }\n};\n\nconst applyCompareSql = async (\n compareSql: CompareSql,\n adapter: AdapterBase,\n) => {\n if (compareSql.expressions.length) {\n const {\n rows: [results],\n } = await adapter.arrays(\n 'SELECT ' +\n compareSql.expressions\n .map((x) => `${x.inDb} = (${x.inCode})`)\n .join(', '),\n compareSql.values,\n );\n\n for (let i = 0; i < results.length; i++) {\n if (!results[i]) {\n compareSql.expressions[i].change();\n }\n }\n }\n};\n\nconst applyCreateOrRenameTables = async (\n dbStructure: IntrospectedStructure,\n createTables: CodeTable[],\n dropTables: DbStructure.Table[],\n changeTables: ChangeTableData[],\n tableShapes: TableShapes,\n currentSchema: string,\n ast: RakeDbAst[],\n verifying: boolean | undefined,\n) => {\n for (const codeTable of createTables) {\n if (dropTables.length) {\n const i = await promptCreateOrRename(\n 'table',\n codeTable.table,\n dropTables.map((x) => x.name),\n verifying,\n );\n if (i) {\n const dbTable = dropTables[i - 1];\n dropTables.splice(i - 1, 1);\n\n ast.push({\n type: 'renameType',\n kind: 'TABLE',\n fromSchema: dbTable.schemaName,\n from: dbTable.name,\n toSchema: codeTable.q.schema ?? currentSchema,\n to: codeTable.table,\n });\n\n addChangeTable(\n dbStructure,\n changeTables,\n tableShapes,\n currentSchema,\n dbTable,\n codeTable,\n );\n\n continue;\n }\n }\n\n ast.push(createTableAst(currentSchema, codeTable));\n }\n};\n\nconst addChangeTable = (\n dbStructure: IntrospectedStructure,\n changeTables: ChangeTableData[],\n tableShapes: TableShapes,\n currentSchema: string,\n dbTable: DbStructure.Table,\n codeTable: CodeTable,\n) => {\n const shape = {};\n const schema = codeTable.q.schema ?? currentSchema;\n\n changeTables.push({\n codeTable: cloneCodeTableForChange(codeTable),\n dbTable,\n dbTableData: getDbStructureTableData(dbStructure, dbTable),\n schema,\n changeTableAst: {\n type: 'changeTable',\n schema,\n name: codeTable.table,\n shape: shape,\n add: {},\n drop: {},\n },\n pushedAst: false,\n changingColumns: {},\n delayedAst: [],\n });\n\n tableShapes[`${schema}.${codeTable.table}`] = shape;\n};\n\nconst cloneCodeTableForChange = (codeTable: CodeTable) => ({\n ...codeTable,\n // codeTable is a class instance and not all props can be cloned with `...`\n table: codeTable.table,\n shape: Object.fromEntries(\n Object.entries(codeTable.shape).map(([key, column]) => {\n const cloned = Object.create(column as ColumnType);\n cloned.data = {\n ...cloned.data,\n checks: cloned.data.checks && [...cloned.data.checks],\n };\n\n return [key, cloned];\n }),\n ),\n});\n\nconst createTableAst = (\n currentSchema: string,\n table: CodeTable,\n): RakeDbAst.Table => {\n return {\n type: 'table',\n action: 'create',\n schema: table.q.schema === currentSchema ? undefined : table.q.schema,\n comment: table.internal.comment,\n name: table.table,\n shape: makeTableShape(table),\n noPrimaryKey: table.internal.noPrimaryKey ? 'ignore' : 'error',\n ...table.internal.tableData,\n };\n};\n\nconst makeTableShape = (table: CodeTable): ColumnsShape => {\n const shape: ColumnsShape = {};\n for (const key in table.shape) {\n const column = table.shape[key];\n if (!(column instanceof VirtualColumn)) {\n shape[key] = column as ColumnType;\n }\n }\n return shape;\n};\n\nconst processTableChange = async (\n adapter: AdapterBase,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n config: AnyRakeDbConfig,\n changeTableData: ChangeTableData,\n compareSql: CompareSql,\n compareExpressions: CompareExpression[],\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n await processColumns(\n adapter,\n config,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n changeTableData,\n ast,\n currentSchema,\n compareSql,\n typeCastsCache,\n verifying,\n );\n\n processPrimaryKey(config, changeTableData);\n\n processIndexesAndExcludes(config, changeTableData, ast, compareExpressions);\n\n processChecks(ast, changeTableData, compareExpressions);\n\n const { changeTableAst } = changeTableData;\n if (\n Object.keys(changeTableAst.shape).length ||\n Object.keys(changeTableAst.add).length ||\n Object.keys(changeTableAst.drop).length\n ) {\n changeTableData.pushedAst = true;\n ast.push(changeTableAst);\n }\n\n if (changeTableData.delayedAst.length) {\n ast.push(...changeTableData.delayedAst);\n }\n};\n","import { QueryInternal, AdapterBase } from 'pqb';\nimport {\n AnyRakeDbConfig,\n RakeDbAst,\n IntrospectedStructure,\n makeDomainsMap,\n StructureToAstCtx,\n astToMigration,\n} from 'rake-db';\nimport { processSchemas } from './generators/schemas.generator';\nimport { processExtensions } from './generators/extensions.generator';\nimport { processDomains } from './generators/domains.generator';\nimport { processEnums } from './generators/enums.generator';\nimport { processTables } from './generators/tables.generator';\nimport { CodeItems } from './generate';\n\nexport interface ComposeMigrationParams {\n structureToAstCtx: StructureToAstCtx;\n codeItems: CodeItems;\n currentSchema: string;\n internal: QueryInternal;\n verifying?: boolean;\n}\n\n/**\n * This is needed to compare SQLs of table expressions.\n * Need to exclude table columns of pending types, such as enums or domains,\n * that aren't created yet from the SQL comparison.\n * Otherwise, the comparison fails because of the unknown types.\n */\nexport class PendingDbTypes {\n set = new Set<string>();\n add(schemaName: string | undefined = 'public', name: string) {\n this.set.add(`\"${schemaName}\".\"${name}\"`);\n }\n}\n\nexport const composeMigration = async (\n adapter: AdapterBase,\n config: AnyRakeDbConfig,\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n params: ComposeMigrationParams,\n): Promise<string | undefined> => {\n const { structureToAstCtx, currentSchema } = params;\n\n const domainsMap = makeDomainsMap(structureToAstCtx, dbStructure);\n\n await processSchemas(ast, dbStructure, params);\n processExtensions(ast, dbStructure, params);\n\n const pendingDbTypes = new PendingDbTypes();\n\n await processDomains(\n ast,\n adapter,\n domainsMap,\n dbStructure,\n params,\n pendingDbTypes,\n );\n await processEnums(ast, dbStructure, params, pendingDbTypes);\n\n await processTables(\n ast,\n domainsMap,\n adapter,\n dbStructure,\n config,\n params,\n pendingDbTypes,\n );\n\n return astToMigration(currentSchema, config, ast);\n};\n","import { AdapterBase } from 'pqb';\nimport {\n AnyRakeDbConfig,\n createMigrationInterface,\n ChangeCallback,\n introspectDbSchema,\n} from 'rake-db';\nimport { composeMigration, ComposeMigrationParams } from './composeMigration';\nimport { AbortSignal } from './generate';\n\nconst rollbackErr = new Error('Rollback');\n\nexport const verifyMigration = async (\n adapter: AdapterBase,\n config: AnyRakeDbConfig,\n migrationCode: string,\n generateMigrationParams: ComposeMigrationParams,\n): Promise<string | false | undefined> => {\n const migrationFn = new Function('change', migrationCode);\n\n let code: string | false | undefined;\n\n try {\n await adapter.transaction(undefined, async (trx) => {\n const changeFns: ChangeCallback<unknown>[] = [];\n migrationFn((changeCb: ChangeCallback<unknown>) => {\n changeFns.push(changeCb);\n });\n\n const { log } = config;\n config.log = false;\n\n const db = createMigrationInterface(trx, true, config);\n\n config.log = log;\n\n for (const changeFn of changeFns) {\n await changeFn(db, true);\n }\n\n const dbStructure = await introspectDbSchema(trx);\n generateMigrationParams.verifying = true;\n\n try {\n code = await composeMigration(\n trx,\n config,\n [],\n dbStructure,\n generateMigrationParams,\n );\n } catch (err) {\n if (err instanceof AbortSignal) {\n code = false;\n throw rollbackErr;\n }\n throw err;\n }\n\n throw rollbackErr;\n });\n } catch (err) {\n if (err !== rollbackErr) {\n throw err;\n }\n }\n\n return code;\n};\n","import { AnyRakeDbConfig, RakeDbAst, getSchemaAndTableFromName } from 'rake-db';\nimport {\n colors,\n exhaustive,\n pluralize,\n addCode,\n Code,\n codeToString,\n ColumnToCodeCtx,\n toArray,\n toCamelCase,\n} from 'pqb';\nimport { getColumnDbType } from './generators/columns.generator';\nimport { fnOrTableToString } from './generators/foreignKeys.generator';\n\nexport const report = (\n ast: RakeDbAst[],\n config: AnyRakeDbConfig,\n currentSchema: string,\n) => {\n if (!config.logger) return;\n\n const code: Code[] = [];\n\n let green, red, yellow, pale;\n if (typeof config.log === 'object' && config.log.colors === false) {\n green = red = yellow = pale = (s: string) => s;\n } else {\n ({ green, red, yellow, pale } = colors);\n }\n\n for (const a of ast) {\n switch (a.type) {\n case 'table': {\n let hasPrimaryKey = !!a.primaryKey;\n const counters = {\n column: 0,\n index: a.indexes?.length ?? 0,\n exclude: a.excludes?.length ?? 0,\n 'foreign key':\n a.constraints?.reduce<number>(\n (sum, c) => (c.references ? sum + 1 : sum),\n 0,\n ) ?? 0,\n check:\n a.constraints?.reduce<number>(\n (sum, c) => (c.check ? sum + 1 : sum),\n 0,\n ) ?? 0,\n };\n for (const key in a.shape) {\n counters.column++;\n\n const column = a.shape[key];\n if (column.data.primaryKey) {\n hasPrimaryKey = true;\n }\n\n if (column.data.indexes) {\n counters.index += column.data.indexes.length;\n }\n\n if (column.data.excludes) {\n counters.exclude += column.data.excludes.length;\n }\n\n if (column.data.foreignKeys) {\n counters['foreign key'] += column.data.foreignKeys.length;\n }\n\n if (column.data.checks) {\n counters.check += column.data.checks.length;\n }\n }\n\n const summary: string[] = [];\n\n for (const key in counters) {\n const value = counters[key as keyof typeof counters];\n if (value || key === 'column') {\n summary.push(\n `${value} ${pluralize(key, value, key === 'index' ? 'es' : 's')}`,\n );\n }\n }\n\n if (!hasPrimaryKey) {\n summary.push('no primary key');\n }\n\n code.push(\n `${\n a.action === 'create'\n ? green('+ create table')\n : red('- drop table')\n } ${dbItemName(a, currentSchema)} (${summary.join(', ')})`,\n );\n break;\n }\n case 'changeTable': {\n const inner: Code[] = [];\n\n const toCodeCtx: ColumnToCodeCtx = {\n t: 't',\n table: a.name,\n currentSchema,\n migration: true,\n snakeCase: config.snakeCase,\n };\n\n for (const key in a.shape) {\n const changes = toArray(a.shape[key]);\n for (const change of changes) {\n if (change.type === 'add' || change.type === 'drop') {\n const column = change.item;\n const { primaryKey, indexes, excludes, foreignKeys, checks } =\n column.data;\n\n inner.push(\n `${\n change.type === 'add'\n ? green('+ add column')\n : red('- drop column')\n } ${key} ${\n column.data.alias ?? getColumnDbType(column, currentSchema)\n }${column.data.isNullable ? ' nullable' : ''}${\n primaryKey ? ' primary key' : ''\n }${\n foreignKeys\n ? ` references ${foreignKeys\n .map((fk) => {\n return `${fnOrTableToString(\n fk.fnOrTable,\n )}(${fk.foreignColumns.join(', ')})`;\n })\n .join(', ')}`\n : ''\n }${\n indexes?.length\n ? indexes.length === 1\n ? ', has index'\n : `, has ${indexes.length} indexes`\n : ''\n }${\n excludes?.length\n ? excludes.length === 1\n ? ', has exclude'\n : `, has ${excludes.length} excludes`\n : ''\n }${\n checks?.length\n ? `, checks ${checks\n .map((check) => check.sql.toSQL({ values: [] }))\n .join(', ')}`\n : ''\n }`,\n );\n } else if (change.type === 'change') {\n let name = change.from.column?.data.name ?? key;\n if (config.snakeCase) name = toCamelCase(name);\n\n const changes: Code[] = [];\n inner.push(`${yellow('~ change column')} ${name}:`, changes);\n changes.push(`${yellow('from')}: `);\n\n const fromCode = change.from.column!.toCode(toCodeCtx, key);\n for (const code of fromCode) {\n addCode(changes, code);\n }\n\n changes.push(` ${yellow('to')}: `);\n\n const toCode = change.to.column!.toCode(toCodeCtx, key);\n for (const code of toCode) {\n addCode(changes, code);\n }\n } else if (change.type === 'rename') {\n inner.push(\n `${yellow('~ rename column')} ${\n config.snakeCase ? toCamelCase(key) : key\n } ${yellow('=>')} ${change.name}`,\n );\n } else {\n exhaustive(change.type);\n }\n }\n }\n\n if (a.drop.primaryKey) {\n inner.push(\n `${red(`- drop primary key`)} on (${a.drop.primaryKey.columns.join(\n ', ',\n )})`,\n );\n }\n\n if (a.drop.indexes) {\n for (const index of a.drop.indexes) {\n inner.push(\n `${red(\n `- drop${index.options.unique ? ' unique' : ''} index`,\n )} on (${index.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.drop.excludes) {\n for (const exclude of a.drop.excludes) {\n inner.push(\n `${red(`- drop exclude`)} on (${exclude.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.drop.constraints) {\n for (const { references } of a.drop.constraints) {\n if (!references) continue;\n\n const [schema, name] = getSchemaAndTableFromName(\n references.fnOrTable as string,\n );\n\n inner.push(\n `${red(`- drop foreign key`)} on (${references.columns.join(\n ', ',\n )}) to ${dbItemName(\n {\n schema,\n name,\n },\n currentSchema,\n )}(${references.foreignColumns.join(', ')})`,\n );\n }\n\n for (const { check } of a.drop.constraints) {\n if (!check) continue;\n\n inner.push(`${red(`- drop check`)} ${check.toSQL({ values: [] })}`);\n }\n }\n\n if (a.add.primaryKey) {\n inner.push(\n `${green(`+ add primary key`)} on (${a.add.primaryKey.columns.join(\n ', ',\n )})`,\n );\n }\n\n if (a.add.indexes) {\n for (const index of a.add.indexes) {\n inner.push(\n `${green(\n `+ add${index.options.unique ? ' unique' : ''} index`,\n )} on (${index.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.add.excludes) {\n for (const exclude of a.add.excludes) {\n inner.push(\n `${green(`+ add exclude`)} on (${exclude.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.add.constraints) {\n for (const { references } of a.add.constraints) {\n if (!references) continue;\n\n inner.push(\n `${green(`+ add foreign key`)} on (${references.columns.join(\n ', ',\n )}) to ${\n references.fnOrTable as string\n }(${references.foreignColumns.join(', ')})`,\n );\n }\n\n for (const { check } of a.add.constraints) {\n if (!check) continue;\n\n inner.push(\n `${green(`+ add check`)} ${check.toSQL({ values: [] })}`,\n );\n }\n }\n\n code.push(\n `${yellow('~ change table')} ${dbItemName(a, currentSchema)}${\n inner.length ? ':' : ''\n }`,\n );\n\n if (inner.length) {\n code.push(inner);\n }\n\n break;\n }\n case 'schema': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create schema')\n : red('- drop schema')\n } ${a.name}`,\n );\n break;\n }\n case 'renameSchema': {\n code.push(\n `${yellow('~ rename schema')} ${a.from} ${yellow('=>')} ${a.to}`,\n );\n break;\n }\n case 'renameType': {\n code.push(\n `${yellow(\n `~ ${\n a.fromSchema !== a.toSchema\n ? a.from !== a.to\n ? 'change schema and rename'\n : 'change schema of'\n : 'rename'\n } ${a.kind.toLowerCase()}`,\n )} ${dbItemName(\n {\n schema: a.fromSchema,\n name: a.from,\n },\n currentSchema,\n )} ${yellow('=>')} ${dbItemName(\n {\n schema: a.toSchema,\n name: a.to,\n },\n currentSchema,\n )}`,\n );\n break;\n }\n case 'extension': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create extension')\n : red('- drop extension')\n } ${dbItemName(a, currentSchema)}${\n a.version ? ` ${pale(a.version)}` : ''\n }`,\n );\n break;\n }\n case 'enum': {\n code.push(\n `${\n a.action === 'create' ? green('+ create enum') : red('- drop enum')\n } ${dbItemName(a, currentSchema)}: (${a.values.join(', ')})`,\n );\n break;\n }\n case 'enumValues': {\n code.push(\n `${\n a.action === 'add'\n ? green('+ add values to enum')\n : red('- remove values from enum')\n } ${dbItemName(a, currentSchema)}: ${a.values.join(', ')}`,\n );\n break;\n }\n case 'changeEnumValues': {\n if (a.fromValues) {\n code.push(\n `${red('- remove values from enum')} ${dbItemName(\n a,\n currentSchema,\n )}: ${a.fromValues.join(', ')}`,\n );\n }\n if (a.toValues) {\n code.push(\n `${green('+ add values to enum')} ${dbItemName(\n a,\n currentSchema,\n )}: ${a.toValues.join(', ')}`,\n );\n }\n break;\n }\n case 'domain': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create domain')\n : red('- drop domain')\n } ${dbItemName(a, currentSchema)}`,\n );\n break;\n }\n case 'view':\n case 'collation':\n case 'renameEnumValues':\n case 'constraint':\n break;\n case 'renameTableItem': {\n code.push(\n `${yellow(`~ rename ${a.kind.toLowerCase()}`)} on table ${dbItemName(\n { schema: a.tableSchema, name: a.tableName },\n currentSchema,\n )}: ${a.from} ${yellow('=>')} ${a.to}`,\n );\n break;\n }\n default:\n exhaustive(a);\n }\n }\n\n const result = codeToString(code, '', ' ');\n config.logger.log(result);\n};\n\nconst dbItemName = (\n { schema, name }: { schema?: string; name: string },\n currentSchema: string,\n) => {\n return schema && schema !== currentSchema ? `${schema}.${name}` : name;\n};\n","import {\n AdapterBase,\n PickQueryShape,\n QueryColumn,\n toCamelCase,\n ArrayColumn,\n ColumnsShape,\n ColumnType,\n defaultSchemaConfig,\n DomainColumn,\n PickQueryInternal,\n PickQueryQ,\n Query,\n QueryInternal,\n UnknownColumn,\n} from 'pqb';\nimport {\n AnyRakeDbConfig,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n introspectDbSchema,\n IntrospectedStructure,\n makeFileVersion,\n makeStructureToAstCtx,\n migrate,\n migrateAndClose,\n RakeDbAst,\n writeMigrationFile,\n} from 'rake-db';\nimport { EnumItem } from './generators/enums.generator';\nimport { CodeDomain } from './generators/domains.generator';\nimport { composeMigration, ComposeMigrationParams } from './composeMigration';\nimport { verifyMigration } from './verifyMigration';\nimport { report } from './reportGeneratedMigration';\nimport path from 'node:path';\nimport { pathToFileURL } from 'url';\n\nexport interface CodeTable\n extends PickQueryQ,\n PickQueryShape,\n PickQueryInternal {\n table: string;\n}\n\nexport interface CodeItems {\n schemas: Set<string>;\n enums: Map<string, EnumItem>;\n tables: CodeTable[];\n domains: CodeDomain[];\n}\n\ninterface AfterPull {\n adapter: AdapterBase;\n version: string;\n}\n\nexport interface DbInstance {\n $qb: Query;\n}\n\nexport class AbortSignal extends Error {}\n\nexport const generate = async (\n adapters: AdapterBase[],\n config: AnyRakeDbConfig,\n args: string[],\n afterPull?: AfterPull,\n): Promise<void> => {\n let { dbPath } = config;\n if (!dbPath || !config.baseTable) throw invalidConfig(config);\n if (!adapters.length) throw new Error(`Database options must not be empty`);\n\n if (!dbPath.endsWith('.ts')) dbPath += '.ts';\n\n let migrationName = args[0] ?? 'generated';\n let up: boolean;\n if (migrationName === 'up') {\n up = true;\n migrationName = 'generated';\n } else {\n up = args[1] === 'up';\n }\n\n if (afterPull) {\n adapters = [afterPull.adapter];\n }\n\n const { dbStructure } = await migrateAndPullStructures(\n adapters,\n config,\n afterPull,\n );\n\n const [adapter] = adapters;\n const currentSchema = adapter.schema ?? 'public';\n\n const db = await getDbFromConfig(config, dbPath);\n const { columnTypes, internal } = db.$qb;\n\n const codeItems = await getActualItems(\n db,\n currentSchema,\n internal,\n columnTypes,\n );\n\n const structureToAstCtx = makeStructureToAstCtx(config, currentSchema);\n\n const generateMigrationParams: ComposeMigrationParams = {\n structureToAstCtx,\n codeItems,\n currentSchema,\n internal,\n };\n\n const ast: RakeDbAst[] = [];\n\n let migrationCode;\n try {\n migrationCode = await composeMigration(\n adapter,\n config,\n ast,\n dbStructure,\n generateMigrationParams,\n );\n } catch (err) {\n if (err instanceof AbortSignal) {\n await closeAdapters(adapters);\n return;\n }\n throw err;\n }\n\n if (migrationCode && !afterPull) {\n const result = await verifyMigration(\n adapter,\n config,\n migrationCode,\n generateMigrationParams,\n );\n\n if (result !== undefined) {\n throw new Error(\n `Failed to verify generated migration: some of database changes were not applied properly. This is a bug, please open an issue, attach the following migration code:\\n${migrationCode}${\n result === false ? '' : `\\nAfter applying:\\n${result}`\n }`,\n );\n }\n }\n\n const { logger } = config;\n\n if ((!up || !migrationCode) && !afterPull) await closeAdapters(adapters);\n\n if (!migrationCode) {\n logger?.log('No changes were detected');\n return;\n }\n\n const version = afterPull?.version ?? (await makeFileVersion({}, config));\n\n const delayLog: string[] = [];\n await writeMigrationFile(\n {\n ...config,\n logger: logger ? { ...logger, log: (msg) => delayLog.push(msg) } : logger,\n },\n version,\n migrationName,\n migrationCode,\n );\n\n report(ast, config, currentSchema);\n\n if (logger) {\n for (const msg of delayLog) {\n logger.log(`\\n${msg}`);\n }\n }\n\n if (up) {\n for (const adapter of adapters) {\n await migrateAndClose({ adapter, config });\n }\n } else if (!afterPull) {\n await closeAdapters(adapters);\n }\n};\n\nconst invalidConfig = (config: AnyRakeDbConfig) =>\n new Error(\n `\\`${\n config.dbPath ? 'baseTable' : 'dbPath'\n }\\` setting must be set in the migrations config for the generator to work`,\n );\n\nconst getDbFromConfig = async (\n config: AnyRakeDbConfig,\n dbPath: string,\n): Promise<DbInstance> => {\n const module = await config.import(\n pathToFileURL(path.resolve(config.basePath, dbPath)).toString(),\n );\n const db = (module as { [K: string]: DbInstance })[\n config.dbExportedAs ?? 'db'\n ];\n if (!db?.$qb) {\n throw new Error(\n `Unable to import OrchidORM instance as ${\n config.dbExportedAs ?? 'db'\n } from ${config.dbPath}`,\n );\n }\n return db;\n};\n\nconst migrateAndPullStructures = async (\n adapters: AdapterBase[],\n config: AnyRakeDbConfig,\n afterPull?: AfterPull,\n): Promise<{\n dbStructure: IntrospectedStructure;\n}> => {\n if (afterPull) {\n return {\n dbStructure: {\n schemas: [],\n tables: [],\n views: [],\n indexes: [],\n excludes: [],\n constraints: [],\n triggers: [],\n extensions: [],\n enums: [],\n domains: [],\n collations: [],\n },\n };\n }\n\n for (const adapter of adapters) {\n await migrate({ adapter, config });\n }\n\n const dbStructures = await Promise.all(\n adapters.map((adapter) => introspectDbSchema(adapter)),\n );\n\n const dbStructure = dbStructures[0];\n for (let i = 1; i < dbStructures.length; i++) {\n compareDbStructures(dbStructure, dbStructures[i], i);\n }\n\n return { dbStructure };\n};\n\nconst compareDbStructures = (\n a: unknown,\n b: unknown,\n i: number,\n path?: string,\n) => {\n let err: true | undefined;\n if (typeof a !== typeof b) {\n err = true;\n }\n\n if (!a || typeof a !== 'object') {\n if (a !== b) {\n err = true;\n }\n } else {\n if (Array.isArray(a)) {\n for (let n = 0, len = a.length; n < len; n++) {\n compareDbStructures(\n a[n],\n (b as unknown[])[n],\n i,\n path ? `${path}[${n}]` : String(n),\n );\n }\n } else {\n for (const key in a) {\n compareDbStructures(\n a[key as keyof typeof a],\n (b as Record<string, unknown>)[key],\n i,\n path ? `${path}.${key}` : key,\n );\n }\n }\n }\n\n if (err) {\n throw new Error(`${path} in the db 0 does not match db ${i}`);\n }\n};\n\nconst getActualItems = async (\n db: DbInstance,\n currentSchema: string,\n internal: QueryInternal,\n columnTypes: unknown,\n): Promise<CodeItems> => {\n const tableNames = new Set<string>();\n const habtmTables = new Map<string, CodeTable>();\n\n const codeItems: CodeItems = {\n schemas: new Set(undefined),\n enums: new Map(),\n tables: [],\n domains: [],\n };\n\n const domains = new Map<string, CodeDomain>();\n\n for (const key in db) {\n if (key[0] === '$') continue;\n\n const table = db[key as keyof typeof db] as Query;\n\n if (!table.table) {\n throw new Error(`Table ${key} is missing table property`);\n }\n\n const { schema } = table.q;\n const name = concatSchemaAndName({ schema, name: table.table });\n if (tableNames.has(name)) {\n throw new Error(`Table ${name} is defined more than once`);\n }\n\n tableNames.add(name);\n\n if (schema) codeItems.schemas.add(schema);\n\n codeItems.tables.push(table as never);\n\n for (const key in table.relations) {\n const column = table.shape[key];\n // column won't be set for has and belongs to many\n if (column && 'joinTable' in column) {\n processHasAndBelongsToManyColumn(column, habtmTables, codeItems);\n }\n }\n\n for (const key in table.shape) {\n const column = table.shape[key] as ColumnType;\n // remove computed columns from the shape\n if (column.data.computed) {\n delete table.shape[key];\n } else if (column instanceof DomainColumn) {\n const [schemaName = currentSchema, name] = getSchemaAndTableFromName(\n column.dataType,\n );\n domains.set(column.dataType, {\n schemaName,\n name,\n column: (column.data.as ??\n new UnknownColumn(defaultSchemaConfig)) as ColumnType,\n });\n } else {\n const en =\n column.dataType === 'enum'\n ? column\n : column instanceof ArrayColumn &&\n column.data.item.dataType === 'enum'\n ? column.data.item\n : undefined;\n\n if (en) {\n processEnumColumn(en, currentSchema, codeItems);\n }\n }\n }\n }\n\n if (internal.extensions) {\n for (const extension of internal.extensions) {\n const [schema] = getSchemaAndTableFromName(extension.name);\n if (schema) codeItems.schemas.add(schema);\n }\n }\n\n if (internal.domains) {\n for (const key in internal.domains) {\n const [schemaName = currentSchema, name] = getSchemaAndTableFromName(key);\n const column = internal.domains[key](columnTypes);\n\n domains.set(key, {\n schemaName,\n name,\n column,\n });\n }\n }\n\n for (const domain of domains.values()) {\n codeItems.schemas.add(domain.schemaName);\n codeItems.domains.push(domain);\n }\n\n return codeItems;\n};\n\nconst processEnumColumn = (\n column: QueryColumn,\n currentSchema: string,\n codeItems: CodeItems,\n) => {\n const { enumName, options } = column as unknown as {\n enumName: string;\n options: [string, ...string[]];\n };\n\n const [schema, name] = getSchemaAndTableFromName(enumName);\n const enumSchema = schema ?? currentSchema;\n\n codeItems.enums.set(`${enumSchema}.${name}`, {\n schema: enumSchema,\n name,\n values: options,\n });\n if (schema) codeItems.schemas.add(schema);\n};\n\nconst processHasAndBelongsToManyColumn = (\n column: QueryColumn & { joinTable: unknown },\n habtmTables: Map<string, CodeTable>,\n codeItems: CodeItems,\n) => {\n const q = (column as { joinTable: CodeTable }).joinTable;\n const prev = habtmTables.get(q.table);\n if (prev) {\n for (const key in q.shape) {\n if (q.shape[key].dataType !== prev.shape[key]?.dataType) {\n throw new Error(\n `Column ${key} in ${q.table} in hasAndBelongsToMany relation does not match with the relation on the other side`,\n );\n }\n }\n return;\n }\n habtmTables.set(q.table, q);\n\n const joinTable = Object.create(q);\n\n const shape: ColumnsShape = {};\n for (const key in joinTable.shape) {\n const column = Object.create(joinTable.shape[key]);\n column.data = {\n ...column.data,\n name: column.data.name ?? key,\n identity: undefined,\n primaryKey: undefined,\n default: undefined,\n };\n shape[toCamelCase(key)] = column;\n }\n joinTable.shape = shape;\n joinTable.internal = {\n ...joinTable.internal,\n tableData: {\n ...joinTable.internal.tableData,\n primaryKey: {\n columns: Object.keys(shape),\n },\n },\n noPrimaryKey: false,\n };\n\n codeItems.tables.push(joinTable);\n\n return;\n};\n\nconst closeAdapters = (adapters: AdapterBase[]) => {\n return Promise.all(adapters.map((x) => x.close()));\n};\n","import {\n columnsShapeToCode,\n pushTableDataCode,\n TableData,\n Code,\n codeToString,\n getImportPath,\n RecordString,\n singleQuote,\n toCamelCase,\n toPascalCase,\n} from 'pqb';\nimport { AnyRakeDbConfig, RakeDbAst } from 'rake-db';\nimport path from 'node:path';\n\ninterface TableInfo {\n key: string;\n dbTableName: string;\n name: string;\n className: string;\n path: string;\n}\n\ninterface TableInfos {\n [dbTableName: string]: TableInfo;\n}\n\nexport interface AppCodeGenTable extends TableInfo {\n content: string;\n}\n\nexport interface AppCodeGenTables {\n [K: string]: AppCodeGenTable;\n}\n\ninterface FKeys {\n [K: string]: { table: TableInfo; references: TableData.References }[];\n}\n\nexport const getTableInfosAndFKeys = (\n asts: RakeDbAst[],\n config: AnyRakeDbConfig,\n): { tableInfos: TableInfos; fkeys: FKeys } => {\n const generateTableTo =\n config.generateTableTo ?? ((name: string) => `./tables/${name}.table.ts`);\n\n const tableInfos: TableInfos = {};\n const fkeys: FKeys = {};\n for (const ast of asts) {\n if (ast.type === 'table') {\n const tableKey = toCamelCase(ast.name);\n const dbTableName = ast.schema ? `${ast.schema}.${ast.name}` : ast.name;\n let tablePath = path.resolve(config.basePath, generateTableTo(tableKey));\n if (!tablePath.endsWith('.ts')) tablePath += '.ts';\n\n const name = toPascalCase(ast.name);\n\n const info: TableInfo = {\n dbTableName,\n key: tableKey,\n path: tablePath,\n name,\n className: `${name}Table`,\n };\n\n tableInfos[dbTableName] = info;\n\n if (ast.constraints) {\n for (const { references } of ast.constraints) {\n if (!references) continue;\n\n (fkeys[references.fnOrTable as string] ??= []).push({\n table: info,\n references,\n });\n }\n }\n }\n }\n\n return { tableInfos, fkeys };\n};\n\nexport const appCodeGenTable = (\n tableInfos: TableInfos,\n fkeys: FKeys,\n ast: RakeDbAst.Table,\n baseTablePath: string,\n baseTableExportedAs: string,\n currentSchema: string,\n): AppCodeGenTable => {\n const tableInfo =\n tableInfos[ast.schema ? `${ast.schema}.${ast.name}` : ast.name];\n\n const imports: RecordString = {\n 'orchid-orm': 'Selectable, Insertable, Updatable',\n [getImportPath(tableInfo.path, baseTablePath)]: baseTableExportedAs,\n };\n\n const props: Code[] = [];\n\n if (ast.schema) {\n props.push(`schema = ${singleQuote(ast.schema)};`);\n }\n\n props.push(`readonly table = ${singleQuote(ast.name)};`);\n\n if (ast.comment) {\n props.push(`comment = ${singleQuote(ast.comment)};`);\n }\n\n if (ast.noPrimaryKey === 'ignore') {\n props.push('noPrimaryKey = true;');\n }\n\n const hasTableData = Boolean(\n ast.primaryKey ||\n ast.indexes?.length ||\n ast.excludes?.length ||\n ast.constraints?.length,\n );\n\n const shapeCode = columnsShapeToCode(\n { t: 't', table: ast.name, currentSchema },\n ast.shape,\n );\n\n props.push(\n `columns = this.setColumns(${hasTableData ? '\\n ' : ''}(t) => ({`,\n hasTableData ? [shapeCode] : shapeCode,\n hasTableData ? ' }),' : '}));',\n );\n\n if (hasTableData) {\n props.push(pushTableDataCode([], ast), ');');\n }\n\n const relations: Code[] = [];\n\n const fullTableName = ast.schema ? `${ast.schema}.${ast.name}` : ast.name;\n const belongsTo = fkeys[fullTableName];\n if (belongsTo) {\n for (const { table, references } of belongsTo) {\n imports[getImportPath(tableInfo.path, table.path)] = table.className;\n\n relations.push(\n `${table.key}: this.belongsTo(() => ${table.className}, {`,\n [\n `columns: [${references.foreignColumns\n .map(singleQuote)\n .join(', ')}],`,\n `references: [${references.columns.map(singleQuote).join(', ')}],`,\n ],\n '}),',\n );\n }\n }\n\n if (ast.constraints) {\n for (const { references } of ast.constraints) {\n if (!references) continue;\n\n const table = tableInfos[references.fnOrTable as string];\n imports[getImportPath(tableInfo.path, table.path)] = table.className;\n\n relations.push(\n `${table.key}: this.hasMany(() => ${table.className}, {`,\n [\n `columns: [${references.columns.map(singleQuote).join(', ')}],`,\n `references: [${references.foreignColumns\n .map(singleQuote)\n .join(', ')}],`,\n ],\n '}),',\n );\n }\n }\n\n if (relations.length) {\n props.push('', 'relations = {', relations, '};');\n }\n\n const importsCode = importsToCode(imports);\n\n const { name, className } = tableInfo;\n const code: Code[] = [\n `export type ${name} = Selectable<${className}>;\nexport type ${name}New = Insertable<${className}>;\nexport type ${name}Update = Updatable<${className}>;\n\nexport class ${className} extends ${baseTableExportedAs} {`,\n props,\n '}\\n',\n ];\n\n return {\n ...tableInfo,\n content: importsCode + '\\n\\n' + codeToString(code, '', ' '),\n };\n};\n\nfunction importsToCode(imports: Record<string, string>): string {\n return Object.entries(imports)\n .map(([from, name]) => `import { ${name} } from '${from}';`)\n .join('\\n');\n}\n","import fs from 'fs/promises';\nimport {\n CallExpression,\n Expression,\n ImportDeclaration,\n NamedImports,\n NodeArray,\n ObjectLiteralExpression,\n Statement,\n VariableStatement,\n} from 'typescript';\nimport { AppCodeGenTables } from './tables.appCodeGenerator';\nimport { DbExtension, getImportPath, quoteObjectKey, singleQuote } from 'pqb';\nimport { RakeDbAst } from 'rake-db';\n\n// importing directly won't work after compiling\nimport typescript from 'typescript';\nconst { createSourceFile, ScriptTarget, SyntaxKind } = typescript;\n\ntype Change = [from: number, to: number] | string;\n\nexport const appCodeGenUpdateDbFile = async (\n dbPath: string,\n tables: AppCodeGenTables,\n extensions: DbExtension[],\n domains: RakeDbAst.Domain[],\n currentSchema: string,\n): Promise<string | undefined> => {\n const content = await fs.readFile(dbPath, 'utf-8');\n const statements = getTsStatements(content);\n const importName = getOrchidOrmImportName(statements);\n if (!importName) {\n throw new Error(`Main file does not contain import of orchid-orm`);\n }\n const { config, tablesList } = getOrchidOrmArgs(importName, statements);\n\n const changes: Change[] = [];\n\n let replacedConfig: string | undefined;\n if (extensions.length || domains.length) {\n let code = content.slice(config.pos, config.end).trim();\n\n if (code[0] !== '{') code = `{...${code}}`;\n\n code = '{\\n ' + code.slice(1, -1).trim();\n\n if (!code.endsWith(',')) code += ',';\n\n if (extensions.length) {\n code += `\\n extensions: [${extensions\n .map((ext) =>\n ext.version\n ? `{ ${quoteObjectKey(ext.name, false)}: '${ext.version}' }`\n : singleQuote(ext.name),\n )\n .join(', ')}],`;\n }\n\n if (domains.length) {\n code += `\\n domains: {\\n ${domains\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map(\n (ast) =>\n `${quoteObjectKey(\n ast.schema ? `${ast.schema}.${ast.name}` : ast.name,\n false,\n )}: (t) => ${ast.baseType.toCode(\n { t: 't', table: ast.name, currentSchema },\n ast.baseType.data.name ?? '',\n )},`,\n )\n .join('\\n ')}\\n },`;\n }\n\n replacedConfig = code + '\\n}';\n }\n\n const tablesChanges = makeTablesListChanges(\n content,\n statements,\n tablesList,\n tables,\n dbPath,\n );\n\n if (tablesChanges) {\n addChange(\n content,\n changes,\n tablesChanges.imports.pos,\n tablesChanges.imports.text,\n );\n }\n\n if (replacedConfig) {\n replaceContent(content, changes, config.pos, config.end, replacedConfig);\n }\n\n if (tablesChanges) {\n addChange(\n content,\n changes,\n tablesChanges.tablesList.pos,\n tablesChanges.tablesList.text,\n );\n }\n\n return applyChanges(content, changes);\n};\n\nconst getTsStatements = (content: string): NodeArray<Statement> => {\n return createSourceFile('file.ts', content, ScriptTarget.Latest, true)\n .statements;\n};\n\nconst getOrchidOrmImportName = (\n statements: NodeArray<Statement>,\n): string | undefined => {\n for (const node of statements) {\n if (node.kind !== SyntaxKind.ImportDeclaration) continue;\n\n const imp = node as ImportDeclaration;\n const source = imp.moduleSpecifier.getText().slice(1, -1);\n if (source !== 'orchid-orm') continue;\n\n if (!imp.importClause) continue;\n\n const elements = (imp.importClause.namedBindings as NamedImports)?.elements;\n\n if (!elements) imp;\n\n for (const element of elements) {\n if (\n element.propertyName?.escapedText === 'orchidORM' ||\n element.name.escapedText === 'orchidORM'\n ) {\n return element.name.escapedText.toString();\n }\n }\n }\n\n return;\n};\n\nconst makeTablesListChanges = (\n content: string,\n statements: NodeArray<Statement>,\n object: ObjectLiteralExpression,\n tables: AppCodeGenTables,\n dbPath: string,\n) => {\n const spaces = getTablesListSpaces(content, object);\n\n let imports = '';\n let tablesList = '';\n const prependComma =\n object.properties.length && !object.properties.hasTrailingComma;\n const tablesListNewLine = content\n .slice(object.properties.end, object.end)\n .includes('\\n');\n\n const tablesArr = Object.values(tables);\n for (let i = 0; i < tablesArr.length; i++) {\n const { path, className, key } = tablesArr[i];\n const importPath = getImportPath(dbPath, path);\n\n imports += `\\nimport { ${className} } from '${importPath}';`;\n\n tablesList += `${\n i === 0 && prependComma ? ',' : ''\n }\\n${spaces} ${key}: ${className},`;\n\n if (i === tablesArr.length - 1 && !tablesListNewLine) {\n tablesList += `\\n${spaces}`;\n }\n }\n\n if (!imports.length) return;\n\n let importPos = 0;\n for (const node of statements) {\n if (node.kind === SyntaxKind.ImportDeclaration) {\n importPos = node.end;\n }\n }\n\n return {\n imports: { pos: importPos, text: imports },\n tablesList: { pos: object.properties.end, text: tablesList },\n };\n};\n\nconst getTablesListSpaces = (content: string, object: Expression): string => {\n const lines = content.slice(0, object.end).split('\\n');\n const last = lines[lines.length - 1];\n return last.match(/^\\s+/)?.[0] || '';\n};\n\nconst getOrchidOrmArgs = (\n importName: string,\n statements: NodeArray<Statement>,\n): { config: Expression; tablesList: ObjectLiteralExpression } => {\n for (const v of statements) {\n if (v.kind !== SyntaxKind.VariableStatement) continue;\n\n for (const node of (v as VariableStatement).declarationList.declarations) {\n const call = node.initializer as CallExpression;\n if (call?.kind !== SyntaxKind.CallExpression) continue;\n\n if (call.expression.getText() !== importName) continue;\n\n if (call.arguments.length !== 2) {\n throw new Error(\n 'Invalid number of arguments when initializing orchid orm',\n );\n }\n\n const object = call.arguments[1] as ObjectLiteralExpression;\n if (object?.kind !== SyntaxKind.ObjectLiteralExpression) {\n throw new Error(\n 'Second argument of orchidORM must be an object literal',\n );\n }\n\n return { config: call.arguments[0], tablesList: object };\n }\n }\n\n throw new Error('List of tables is not found in main file');\n};\n\nconst addChange = (\n content: string,\n changes: Change[],\n at: number,\n text: string,\n end = at,\n) => {\n if (changes.length === 0) {\n changes.push([0, at], text, [end, content.length]);\n } else {\n const last = changes[changes.length - 1] as [number, number];\n last[1] = at;\n changes.push(text, [end, content.length]);\n }\n};\n\nconst replaceContent = (\n content: string,\n changes: Change[],\n from: number,\n to: number,\n text: string,\n) => {\n addChange(content, changes, from, text, to);\n};\n\nconst applyChanges = (content: string, changes: Change[]) => {\n return changes.length\n ? changes\n .map((item) =>\n typeof item === 'string' ? item : content.slice(item[0], item[1]),\n )\n .join('')\n : content;\n};\n","import { DbExtension, AdapterBase, pathToLog } from 'pqb';\nimport {\n AnyRakeDbConfig,\n makeFileVersion,\n makeStructureToAstCtx,\n RakeDbAst,\n saveMigratedVersion,\n SilentQueries,\n structureToAst,\n} from 'rake-db';\nimport fs from 'fs/promises';\nimport path from 'node:path';\nimport {\n AppCodeGenTable,\n appCodeGenTable,\n AppCodeGenTables,\n getTableInfosAndFKeys,\n} from './appCodeGenerators/tables.appCodeGenerator';\nimport { appCodeGenUpdateDbFile } from './appCodeGenerators/dbFile.appCodeGenerator';\nimport { generate } from '../generate/generate';\n\nexport const pull = async (\n adapters: AdapterBase[],\n config: AnyRakeDbConfig,\n) => {\n if (!config.dbPath || !config.baseTable) {\n throw new Error(\n `\\`${\n config.dbPath ? 'baseTable' : 'dbPath'\n }\\` setting must be set in the migrations config for pull command`,\n );\n }\n\n const baseTablePath = config.baseTable.getFilePath();\n const baseTableExportedAs = config.baseTable.exportAs;\n\n const [adapter] = adapters;\n const currentSchema = adapter.schema || 'public';\n\n const ctx = makeStructureToAstCtx(config, currentSchema);\n\n const asts = await structureToAst(ctx, adapter, config);\n\n const { tableInfos, fkeys } = getTableInfosAndFKeys(asts, config);\n\n const exclusiveWriteOptions = { flag: 'wx' as const };\n const pendingFileWrites: [\n path: string,\n content: string,\n options?: { flag: 'wx' },\n ][] = [];\n\n const tables: AppCodeGenTables = {};\n const extensions: DbExtension[] = [];\n const domains: RakeDbAst.Domain[] = [];\n\n let firstTable: undefined | AppCodeGenTable;\n for (const ast of asts) {\n switch (ast.type) {\n case 'table': {\n const table = appCodeGenTable(\n tableInfos,\n fkeys,\n ast,\n baseTablePath,\n baseTableExportedAs,\n currentSchema,\n );\n tables[table.key] = table;\n if (!firstTable) firstTable = table;\n pendingFileWrites.push([\n table.path,\n table.content,\n exclusiveWriteOptions,\n ]);\n break;\n }\n case 'extension': {\n extensions.push({\n name: ast.schema ? `${ast.schema}.${ast.name}` : ast.name,\n version: ast.version,\n });\n break;\n }\n case 'domain': {\n domains.push(ast);\n break;\n }\n }\n }\n\n if (!firstTable && !extensions.length && !domains.length) {\n await adapter.close();\n return;\n }\n\n let dbPath = path.resolve(config.basePath, config.dbPath);\n if (!dbPath.endsWith('.ts')) dbPath += '.ts';\n const content = await appCodeGenUpdateDbFile(\n dbPath,\n tables,\n extensions,\n domains,\n currentSchema,\n );\n if (content) pendingFileWrites.push([dbPath, content]);\n\n if (firstTable) {\n await fs.mkdir(path.dirname(firstTable.path), { recursive: true });\n }\n\n await Promise.all(\n pendingFileWrites.map(([path, content, options]) =>\n fs.writeFile(path, content, options).then(() => {\n config.logger?.log(`Created ${pathToLog(path)}`);\n }),\n ),\n );\n\n const version = await makeFileVersion({}, config);\n await generate(adapters, config, ['pull'], { adapter, version });\n\n // save migrated version into all configured databases\n await Promise.all(\n adapters.map(async (adapter) => {\n const silentAdapter = adapter as unknown as SilentQueries;\n silentAdapter.silentArrays = adapter.arrays;\n await saveMigratedVersion(silentAdapter, version, 'pull.ts', config);\n await adapter.close();\n }),\n );\n};\n","import { rakeDbCommands } from 'rake-db';\nimport { generate } from './generate/generate';\nimport { pull } from './pull/pull';\nimport {\n DefaultColumnTypes,\n DefaultSchemaConfig,\n ColumnSchemaConfig,\n} from 'pqb';\n\nrakeDbCommands.g = rakeDbCommands.generate = {\n run: generate,\n help: 'gen migration from OrchidORM tables',\n helpArguments: {\n 'no arguments': '\"generated\" is a default file name',\n 'migration-name': 'set migration file name',\n up: 'auto-apply migration',\n 'migration-name up': 'with a custom name and apply it',\n },\n helpAfter: 'reset',\n};\n\nrakeDbCommands.pull.run = pull;\nrakeDbCommands.pull.help =\n 'generate ORM tables and a migration for an existing database';\n\ndeclare module 'rake-db' {\n export interface RakeDbConfig<\n SchemaConfig extends ColumnSchemaConfig,\n CT = DefaultColumnTypes<DefaultSchemaConfig>,\n > {\n dbPath?: string;\n dbExportedAs?: string;\n generateTableTo?(tableName: string): string;\n }\n\n export interface InputRakeDbConfigBase<\n SchemaConfig extends ColumnSchemaConfig,\n CT,\n > {\n dbPath?: string;\n dbExportedAs?: string;\n generateTableTo?(tableName: string): string;\n }\n}\n"],"names":["name","item","column","key","type","codeEnum","i","codeTable","changes","code","adapter","path","content"],"mappings":"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"}
1
+ {"version":3,"file":"node-postgres.mjs","sources":["../../src/migrations/generate/generators/generators.utils.ts","../../src/migrations/generate/generators/schemas.generator.ts","../../src/migrations/generate/generators/extensions.generator.ts","../../src/migrations/generate/generators/columns.generator.ts","../../src/migrations/generate/generators/domains.generator.ts","../../src/migrations/generate/generators/enums.generator.ts","../../src/migrations/generate/generators/primaryKey.generator.ts","../../src/migrations/generate/generators/indexesAndExcludes.generator.ts","../../src/migrations/generate/generators/foreignKeys.generator.ts","../../src/migrations/generate/generators/checks.generator.ts","../../src/migrations/generate/generators/tables.generator.ts","../../src/migrations/generate/composeMigration.ts","../../src/migrations/generate/verifyMigration.ts","../../src/migrations/generate/reportGeneratedMigration.ts","../../src/migrations/generate/generate.ts","../../src/migrations/pull/appCodeGenerators/tables.appCodeGenerator.ts","../../src/migrations/pull/appCodeGenerators/dbFile.appCodeGenerator.ts","../../src/migrations/pull/pull.ts","../../src/migrations/patchRakeDb.ts"],"sourcesContent":["import { RakeDbAst, promptSelect } from 'rake-db';\nimport { RawSQLBase, QueryResult, AdapterBase, colors } from 'pqb';\nimport { AbortSignal } from '../generate';\n\nexport interface CompareExpression {\n compare: {\n inDb: string;\n inCode: (string | RawSQLBase)[];\n }[];\n\n handle(i?: number): void;\n}\n\nexport interface TableExpression extends CompareExpression {\n source: string;\n}\n\nexport const compareSqlExpressions = async (\n tableExpressions: TableExpression[],\n adapter: AdapterBase,\n) => {\n if (!tableExpressions.length) return;\n\n let id = 1;\n for (const { source, compare, handle } of tableExpressions) {\n const viewName = `orchidTmpView${id++}`;\n const values: unknown[] = [];\n\n // It is important to run `CREATE TEMPORARY VIEW` and `DROP VIEW` on the same db connection,\n // that's why SQLs are combined into a single query.\n const combinedQueries = [\n `CREATE TEMPORARY VIEW ${viewName} AS (SELECT ${compare\n .map(\n ({ inDb, inCode }, i): string =>\n `${inDb} AS \"*inDb-${i}*\", ${inCode\n .map(\n (s, j) =>\n `(${\n typeof s === 'string' ? s : s.toSQL({ values })\n }) \"*inCode-${i}-${j}*\"`,\n )\n .join(', ')}`,\n )\n .join(', ')} FROM ${source})`,\n `SELECT pg_get_viewdef('${viewName}') v`,\n `DROP VIEW ${viewName}`,\n ].join('; ');\n\n const result = await adapter.query(combinedQueries, values, viewName).then(\n (res) => (res as unknown as QueryResult[])[1],\n async (err) => {\n // ignore the \"type ... does not exist\" because the type may be added in the same migration,\n // but throw on other errors\n if (err.code !== '42704') {\n throw err;\n }\n },\n );\n\n if (!result) {\n handle();\n return;\n }\n\n const match = compareSqlExpressionResult(\n result.rows[0].v,\n compare[0].inCode,\n );\n handle(match);\n }\n};\n\nexport const compareSqlExpressionResult = (\n resultSql: string,\n inCode: unknown[],\n) => {\n let pos = 7;\n const rgx = /\\s+AS\\s+\"\\*(inDb-\\d+|inCode-\\d+-\\d+)\\*\",?/g;\n let match;\n let inDb = '';\n let codeI = 0;\n const matches = inCode.map(() => true);\n while ((match = rgx.exec(resultSql))) {\n const sql = resultSql.slice(pos, rgx.lastIndex - match[0].length).trim();\n const arr = match[1].split('-');\n if (arr.length === 2) {\n inDb = sql;\n codeI = 0;\n } else {\n if (\n inDb !== sql &&\n // Comparing `(sql) = sql` and `sql = (sql)` below.\n // Could not reproduce this case in integration tests, but it was reported in #494.\n !(\n inDb.startsWith('(') &&\n inDb.endsWith(')') &&\n inDb.slice(1, -1) === sql\n ) &&\n !(sql.startsWith('(') && sql.endsWith(')') && sql.slice(1, -1) === inDb)\n ) {\n matches[codeI] = false;\n }\n codeI++;\n }\n pos = rgx.lastIndex;\n }\n\n const firstMatching = matches.indexOf(true);\n return firstMatching === -1 ? undefined : firstMatching;\n};\n\nexport const promptCreateOrRename = (\n kind: string,\n name: string,\n drop: string[],\n verifying: boolean | undefined,\n): Promise<number> => {\n if (verifying) throw new AbortSignal();\n\n let hintPos = name.length + 4;\n for (const from of drop) {\n const value = from.length + 8 + name.length;\n if (value > hintPos) hintPos = value;\n }\n\n let max = 0;\n const add = name.length + 3;\n for (const name of drop) {\n if (name.length + add > max) {\n max = name.length + add;\n }\n }\n\n const renameMessage = `rename ${kind}`;\n\n return promptSelect({\n message: `Create or rename ${colors.blueBold(\n name,\n )} ${kind} from another ${kind}?`,\n options: [\n `${colors.greenBold('+')} ${name} ${colors.pale(\n `create ${kind}`.padStart(\n hintPos + renameMessage.length - name.length - 4,\n ' ',\n ),\n )}`,\n ...drop.map(\n (d) =>\n `${colors.yellowBold('~')} ${d} ${colors.yellowBold(\n '=>',\n )} ${name} ${colors.pale(\n renameMessage.padStart(\n hintPos + renameMessage.length - d.length - name.length - 8,\n ' ',\n ),\n )}`,\n ),\n ],\n });\n};\n\nexport const checkForColumnAddOrDrop = (\n shape: RakeDbAst.ChangeTableShape,\n key: string,\n) => {\n const item = shape[key];\n if (item) {\n return (\n item &&\n (Array.isArray(item) || item.type === 'add' || item.type === 'drop')\n );\n }\n\n for (const k in shape) {\n const item = shape[k];\n if (\n Array.isArray(item)\n ? item.some(\n (item) =>\n (item.type === 'add' || item.type === 'drop') &&\n item.item.data.name === key,\n )\n : (item.type === 'add' || item.type === 'drop') &&\n item.item.data.name === key\n ) {\n return true;\n }\n }\n\n return false;\n};\n","import { RakeDbAst, IntrospectedStructure } from 'rake-db';\nimport { promptCreateOrRename } from './generators.utils';\nimport { ComposeMigrationParams } from '../composeMigration';\n\nexport const processSchemas = async (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n codeItems: { schemas },\n verifying,\n internal: { generatorIgnore },\n }: ComposeMigrationParams,\n): Promise<void> => {\n const createSchemas: string[] = [];\n const dropSchemas: string[] = [];\n\n for (const schema of schemas) {\n if (!dbStructure.schemas.includes(schema)) {\n createSchemas.push(schema);\n }\n }\n\n for (const schema of dbStructure.schemas) {\n if (\n !schemas.has(schema) &&\n schema !== 'public' &&\n !generatorIgnore?.schemas?.includes(schema)\n ) {\n dropSchemas.push(schema);\n }\n }\n\n for (const schema of createSchemas) {\n if (dropSchemas.length) {\n const i = await promptCreateOrRename(\n 'schema',\n schema,\n dropSchemas,\n verifying,\n );\n if (i) {\n const from = dropSchemas[i - 1];\n dropSchemas.splice(i - 1, 1);\n\n renameSchemaInStructures(dbStructure.tables, from, schema);\n renameSchemaInStructures(dbStructure.views, from, schema);\n renameSchemaInStructures(dbStructure.indexes, from, schema);\n renameSchemaInStructures(dbStructure.excludes, from, schema);\n renameSchemaInStructures(dbStructure.constraints, from, schema);\n renameSchemaInStructures(dbStructure.triggers, from, schema);\n renameSchemaInStructures(dbStructure.enums, from, schema);\n renameSchemaInStructures(dbStructure.domains, from, schema);\n renameSchemaInStructures(dbStructure.collations, from, schema);\n\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.typeSchema === from) {\n column.typeSchema = schema;\n }\n }\n }\n\n ast.push({\n type: 'renameSchema',\n from,\n to: schema,\n });\n continue;\n }\n }\n\n ast.push({\n type: 'schema',\n action: 'create',\n name: schema,\n });\n }\n\n for (const schema of dropSchemas) {\n ast.push({\n type: 'schema',\n action: 'drop',\n name: schema,\n });\n }\n};\n\nconst renameSchemaInStructures = (\n items: { schemaName: string }[],\n from: string,\n to: string,\n) => {\n for (const item of items) {\n if (item.schemaName === from) {\n item.schemaName = to;\n }\n }\n};\n","import {\n RakeDbAst,\n IntrospectedStructure,\n getSchemaAndTableFromName,\n} from 'rake-db';\nimport { ComposeMigrationParams } from '../composeMigration';\n\ninterface Extension {\n schema?: string;\n name: string;\n version?: string;\n}\n\nexport const processExtensions = (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n currentSchema,\n internal: { extensions, generatorIgnore },\n }: ComposeMigrationParams,\n) => {\n const codeExtensions = extensions?.map((ext): Extension => {\n const [schema, name] = getSchemaAndTableFromName(ext.name);\n return { schema, name, version: ext.version };\n });\n\n for (const dbExt of dbStructure.extensions) {\n if (\n generatorIgnore?.schemas?.includes(dbExt.schemaName) ||\n generatorIgnore?.extensions?.includes(dbExt.name)\n ) {\n continue;\n }\n\n if (codeExtensions) {\n let found = false;\n for (let i = 0; i < codeExtensions.length; i++) {\n const codeExt = codeExtensions[i];\n if (\n dbExt.name === codeExt.name &&\n dbExt.schemaName === (codeExt.schema ?? currentSchema) &&\n (!codeExt.version || codeExt.version === dbExt.version)\n ) {\n found = true;\n codeExtensions.splice(i, 1);\n break;\n }\n }\n\n if (found) continue;\n }\n\n ast.push({\n type: 'extension',\n action: 'drop',\n schema: dbExt.schemaName === currentSchema ? undefined : dbExt.schemaName,\n name: dbExt.name,\n version: dbExt.version,\n });\n }\n\n if (codeExtensions?.length) {\n ast.push(\n ...codeExtensions.map((ext) => ({\n type: 'extension' as const,\n action: 'create' as const,\n ...ext,\n })),\n );\n }\n};\n","import {\n RakeDbAst,\n dbColumnToAst,\n getDbTableColumnsChecks,\n instantiateDbColumn,\n StructureToAstCtx,\n DbStructure,\n IntrospectedStructure,\n encodeColumnDefault,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n promptSelect,\n AnyRakeDbConfig,\n} from 'rake-db';\nimport {\n ArrayColumn,\n Column,\n DbStructureDomainsMap,\n EnumColumn,\n getColumnBaseType,\n deepCompare,\n RecordUnknown,\n toSnakeCase,\n AdapterBase,\n colors,\n} from 'pqb';\nimport { promptCreateOrRename } from './generators.utils';\nimport { ChangeTableData, CompareSql } from './tables.generator';\nimport { AbortSignal } from '../generate';\n\nexport interface TypeCastsCache {\n value?: Map<string, Set<string>>;\n}\n\ntype ColumnsToChange = Map<\n string,\n { key: string; dbName: string; column: Column }\n>;\n\nexport const processColumns = async (\n adapter: AdapterBase,\n config: AnyRakeDbConfig,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n changeTableData: ChangeTableData,\n ast: RakeDbAst[],\n currentSchema: string,\n compareSql: CompareSql,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n const { dbTable } = changeTableData;\n const dbColumns = Object.fromEntries(\n dbTable.columns.map((column) => [column.name, column]),\n );\n\n const { columnsToAdd, columnsToDrop, columnsToChange } = groupColumns(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbColumns,\n changeTableData,\n );\n\n await addOrRenameColumns(\n config,\n dbStructure,\n changeTableData,\n columnsToAdd,\n columnsToDrop,\n columnsToChange,\n verifying,\n );\n\n await changeColumns(\n adapter,\n config,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n dbColumns,\n columnsToChange,\n compareSql,\n changeTableData,\n typeCastsCache,\n verifying,\n );\n\n dropColumns(changeTableData, columnsToDrop);\n};\n\ntype KeyAndColumn = { key: string; column: Column };\n\nconst groupColumns = (\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n dbColumns: { [K: string]: DbStructure.Column },\n changeTableData: ChangeTableData,\n): {\n columnsToAdd: KeyAndColumn[];\n columnsToDrop: KeyAndColumn[];\n columnsToChange: ColumnsToChange;\n} => {\n const columnsToAdd: { key: string; column: Column }[] = [];\n const columnsToDrop: { key: string; column: Column }[] = [];\n const columnsToChange: ColumnsToChange = new Map();\n const columnsToChangeByDbName = new Map<string, true>();\n\n const { codeTable, dbTable, dbTableData } = changeTableData;\n const checks = getDbTableColumnsChecks(changeTableData.dbTableData);\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n // skip virtual columns\n if (!column.dataType) continue;\n\n const name = column.data.name ?? key;\n if (dbColumns[name]) {\n columnsToChange.set(key, { key, dbName: name, column });\n columnsToChangeByDbName.set(name, true);\n } else {\n columnsToAdd.push({ key, column });\n }\n }\n\n for (const name in dbColumns) {\n if (columnsToChangeByDbName.has(name)) continue;\n\n const [key, column] = dbColumnToAst(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbTable.name,\n dbColumns[name],\n dbTable,\n dbTableData,\n checks,\n );\n\n columnsToDrop.push({ key, column });\n }\n\n return {\n columnsToAdd,\n columnsToDrop,\n columnsToChange,\n };\n};\n\nconst addOrRenameColumns = async (\n config: AnyRakeDbConfig,\n dbStructure: IntrospectedStructure,\n {\n dbTableData,\n schema,\n changeTableAst: { name: tableName, shape },\n }: ChangeTableData,\n columnsToAdd: KeyAndColumn[],\n columnsToDrop: KeyAndColumn[],\n columnsToChange: ColumnsToChange,\n verifying: boolean | undefined,\n) => {\n for (const { key, column } of columnsToAdd) {\n if (columnsToDrop.length) {\n const codeName = column.data.name ?? key;\n const i = await promptCreateOrRename(\n 'column',\n codeName,\n columnsToDrop.map((x) => x.key),\n verifying,\n );\n if (i) {\n const drop = columnsToDrop[i - 1];\n columnsToDrop.splice(i - 1, 1);\n\n const from = drop.column.data.name ?? drop.key;\n columnsToChange.set(from, {\n key,\n dbName: from,\n column: column.name(codeName),\n });\n\n const to = config.snakeCase ? toSnakeCase(key) : key;\n\n if (dbTableData.primaryKey) {\n renameColumn(dbTableData.primaryKey.columns, from, to);\n }\n\n for (const index of dbTableData.indexes) {\n for (const column of index.columns) {\n if ('column' in column && column.column === from) {\n column.column = to;\n }\n }\n }\n\n for (const exclude of dbTableData.excludes) {\n for (const column of exclude.columns) {\n if ('column' in column && column.column === from) {\n column.column = to;\n }\n }\n }\n\n for (const c of dbTableData.constraints) {\n if (c.check?.columns) {\n renameColumn(c.check.columns, from, to);\n }\n if (c.references) {\n renameColumn(c.references.columns, from, to);\n }\n }\n\n for (const c of dbStructure.constraints) {\n if (\n c.references &&\n c.references.foreignSchema === schema &&\n c.references.foreignTable === tableName\n ) {\n renameColumn(c.references.foreignColumns, from, to);\n }\n }\n\n continue;\n }\n }\n\n shape[key] = {\n type: 'add',\n item: column,\n };\n }\n};\n\nconst dropColumns = (\n { changeTableAst: { shape } }: ChangeTableData,\n columnsToDrop: KeyAndColumn[],\n) => {\n for (const { key, column } of columnsToDrop) {\n shape[key] = {\n type: 'drop',\n item: column,\n };\n }\n};\n\nconst changeColumns = async (\n adapter: AdapterBase,\n config: AnyRakeDbConfig,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n dbColumns: { [K: string]: DbStructure.Column },\n columnsToChange: ColumnsToChange,\n compareSql: CompareSql,\n changeTableData: ChangeTableData,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n for (const [\n key,\n { key: codeKey, dbName, column: codeColumn },\n ] of columnsToChange) {\n const dbColumnStructure = dbColumns[dbName];\n\n const dbColumn = instantiateDbColumn(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbColumnStructure,\n );\n\n const action = await compareColumns(\n adapter,\n domainsMap,\n ast,\n currentSchema,\n compareSql,\n changeTableData,\n typeCastsCache,\n verifying,\n key,\n dbName,\n dbColumn,\n codeColumn,\n );\n\n if (action === 'change') {\n changeColumn(changeTableData, key, dbName, dbColumn, codeColumn);\n } else if (action === 'recreate') {\n changeTableData.changeTableAst.shape[key] = [\n {\n type: 'drop',\n item: dbColumn,\n },\n {\n type: 'add',\n item: codeColumn,\n },\n ];\n } else if (action !== 'recreate') {\n const to = codeColumn.data.name ?? codeKey;\n if (dbName !== to) {\n changeTableData.changeTableAst.shape[\n config.snakeCase\n ? dbName === toSnakeCase(codeKey)\n ? codeKey\n : dbName\n : dbName\n ] = {\n type: 'rename',\n name: config.snakeCase\n ? to === toSnakeCase(codeKey)\n ? codeKey\n : to\n : to,\n };\n }\n }\n }\n};\n\nconst compareColumns = async (\n adapter: AdapterBase,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n compareSql: CompareSql,\n changeTableData: ChangeTableData,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n key: string,\n dbName: string,\n dbColumn: Column,\n codeColumn: Column,\n): Promise<'change' | 'recreate' | undefined> => {\n if (dbColumn instanceof ArrayColumn && codeColumn instanceof ArrayColumn) {\n dbColumn = dbColumn.data.item;\n codeColumn = codeColumn.data.item;\n }\n\n const dbType = getColumnDbType(dbColumn, currentSchema);\n const codeType = getColumnDbType(codeColumn, currentSchema);\n\n if (dbType !== codeType) {\n const typeCasts = await getTypeCasts(adapter, typeCastsCache);\n\n const dbBaseType = getColumnBaseType(dbColumn, domainsMap, dbType);\n const codeBaseType = getColumnBaseType(codeColumn, domainsMap, codeType);\n\n if (!typeCasts.get(dbBaseType)?.has(codeBaseType)) {\n if (\n !(dbColumn instanceof EnumColumn) ||\n !(codeColumn instanceof EnumColumn) ||\n !deepCompare(dbColumn.options, codeColumn.options)\n ) {\n if (verifying) throw new AbortSignal();\n\n const tableName = concatSchemaAndName(changeTableData.changeTableAst);\n const abort = await promptSelect({\n message: `Cannot cast type of ${tableName}'s column ${key} from ${dbType} to ${codeType}`,\n options: [\n `${colors.yellowBold(\n `-/+`,\n )} recreate the column, existing data will be ${colors.red(\n 'lost',\n )}`,\n `write migration manually`,\n ],\n });\n if (abort) {\n throw new AbortSignal();\n }\n\n dbColumn.data.name = codeColumn.data.name;\n return 'recreate';\n }\n }\n\n return 'change';\n }\n\n const dbData = dbColumn.data as unknown as RecordUnknown;\n const codeData = codeColumn.data as unknown as RecordUnknown;\n\n for (const key of ['isNullable', 'comment']) {\n if (dbData[key] !== codeData[key]) {\n return 'change';\n }\n }\n\n for (const key of [\n 'maxChars',\n 'collation',\n 'compression',\n 'numericPrecision',\n 'numericScale',\n 'dateTimePrecision',\n ]) {\n // Check if key in codeData so that default precision/scale values for such columns as integer aren't counted.\n // If column supports precision/scale, it should have it listed in the data, even if it's undefined.\n if (key in codeData && dbData[key] !== codeData[key]) {\n return 'change';\n }\n }\n\n if (dbColumn.data.isOfCustomType) {\n const { typmod } = dbColumn.data;\n if (typmod !== undefined && typmod !== -1) {\n const i = codeColumn.dataType.indexOf('(');\n if (i === -1 || codeColumn.dataType.slice(i + 1, -1) !== `${typmod}`) {\n return 'change';\n }\n }\n }\n\n if (\n !deepCompare(\n dbData.identity,\n codeData.identity\n ? {\n always: false,\n start: 1,\n increment: 1,\n cache: 1,\n cycle: false,\n ...(codeData.identity ?? {}),\n }\n : undefined,\n )\n ) {\n return 'change';\n }\n\n if (\n dbData.default !== undefined &&\n dbData.default !== null &&\n codeData.default !== undefined &&\n codeData.default !== null\n ) {\n const valuesBeforeLen = compareSql.values.length;\n const dbDefault = encodeColumnDefault(\n dbData.default,\n compareSql.values,\n dbColumn,\n ) as string;\n const dbValues = compareSql.values.slice(valuesBeforeLen);\n\n const codeDefault = encodeColumnDefault(\n codeData.default,\n compareSql.values,\n codeColumn,\n ) as string;\n const codeValues = compareSql.values.slice(valuesBeforeLen);\n\n if (\n dbValues.length !== codeValues.length ||\n (dbValues.length &&\n JSON.stringify(dbValues) !== JSON.stringify(codeValues))\n ) {\n compareSql.values.length = valuesBeforeLen;\n return 'change';\n } else if (dbDefault !== codeDefault && dbDefault !== `(${codeDefault})`) {\n compareSql.expressions.push({\n inDb: dbDefault,\n inCode: codeDefault,\n change: () => {\n changeColumn(changeTableData, key, dbName, dbColumn, codeColumn);\n if (!changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n },\n });\n }\n }\n\n return;\n};\n\nconst getTypeCasts = async (\n adapter: AdapterBase,\n typeCastsCache: TypeCastsCache,\n) => {\n let typeCasts = typeCastsCache.value;\n if (!typeCasts) {\n const { rows } = await adapter.arrays(`SELECT s.typname, t.typname\nFROM pg_cast\nJOIN pg_type AS s ON s.oid = castsource\nJOIN pg_type AS t ON t.oid = casttarget`);\n\n const directTypeCasts = new Map<string, Set<string>>();\n for (const [source, target] of rows) {\n const set = directTypeCasts.get(source);\n if (set) {\n set.add(target);\n } else {\n directTypeCasts.set(source, new Set([target]));\n }\n }\n\n typeCasts = new Map<string, Set<string>>();\n for (const [type, directSet] of directTypeCasts.entries()) {\n const set = new Set<string>(directSet);\n typeCasts.set(type, set);\n\n for (const subtype of directSet) {\n const subset = directTypeCasts.get(subtype);\n if (subset) {\n for (const type of subset) {\n set.add(type);\n }\n }\n }\n }\n\n typeCastsCache.value = typeCasts;\n }\n\n return typeCasts;\n};\n\nconst changeColumn = (\n changeTableData: ChangeTableData,\n key: string,\n dbName: string,\n dbColumn: Column,\n codeColumn: Column,\n) => {\n dbColumn.data.as = codeColumn.data.as = undefined;\n\n const simpleCodeColumn = Object.create(codeColumn);\n simpleCodeColumn.data = {\n ...codeColumn.data,\n primaryKey: undefined,\n indexes: undefined,\n excludes: undefined,\n foreignKeys: undefined,\n check: undefined,\n };\n\n changeTableData.changingColumns[dbName] = {\n from: dbColumn,\n to: simpleCodeColumn,\n };\n\n changeTableData.changeTableAst.shape[key] = {\n type: 'change',\n from: { column: dbColumn },\n to: { column: simpleCodeColumn },\n };\n};\n\nexport const getColumnDbType = (\n column: Column.Pick.DataAndDataType,\n currentSchema: string,\n) => {\n if (column instanceof EnumColumn) {\n const [schema = currentSchema, name] = getSchemaAndTableFromName(\n column.enumName,\n );\n return `${schema}.${name}`;\n } else if (column instanceof ArrayColumn) {\n const { item } = column.data;\n let type = item instanceof EnumColumn ? item.enumName : item.dataType;\n\n type = type.startsWith(currentSchema + '.')\n ? type.slice(currentSchema.length + 1)\n : type;\n\n return type + '[]'.repeat(column.data.arrayDims);\n } else if (column.data.isOfCustomType) {\n let type = column.dataType;\n\n const i = type.indexOf('(');\n if (i !== -1) {\n type = type.slice(0, i);\n }\n\n return type.includes('.') ? type : currentSchema + '.' + type;\n } else {\n return column.dataType;\n }\n};\n\nconst renameColumn = (columns: string[], from: string, to: string) => {\n for (let i = 0; i < columns.length; i++) {\n if (columns[i] === from) {\n columns[i] = to;\n }\n }\n};\n","import {\n ArrayColumn,\n Column,\n DbStructureDomainsMap,\n RawSQL,\n AdapterBase,\n deepCompare,\n emptyArray,\n TemplateLiteralArgs,\n} from 'pqb';\nimport {\n RakeDbAst,\n getSchemaAndTableFromName,\n DbStructure,\n IntrospectedStructure,\n instantiateDbColumn,\n} from 'rake-db';\nimport { getColumnDbType } from './columns.generator';\nimport {\n CompareExpression,\n compareSqlExpressions,\n TableExpression,\n} from './generators.utils';\nimport { ComposeMigrationParams, PendingDbTypes } from '../composeMigration';\n\ninterface ComparableDomainCompare\n extends Omit<DbStructure.Domain, 'schemaName' | 'name'> {\n hasDefault: boolean;\n hasChecks: boolean;\n}\n\ninterface ComparableDomain {\n schemaName: string;\n name: string;\n column: Column;\n compare: ComparableDomainCompare;\n}\n\nexport interface CodeDomain {\n schemaName: string;\n name: string;\n column: Column;\n}\n\nexport const processDomains = async (\n ast: RakeDbAst[],\n adapter: AdapterBase,\n domainsMap: DbStructureDomainsMap,\n dbStructure: IntrospectedStructure,\n {\n codeItems: { domains },\n structureToAstCtx,\n currentSchema,\n internal: { generatorIgnore },\n }: ComposeMigrationParams,\n pendingDbTypes: PendingDbTypes,\n) => {\n const codeDomains: ComparableDomain[] = [];\n if (domains) {\n for (const { schemaName, name, column } of domains) {\n codeDomains.push(\n makeComparableDomain(currentSchema, schemaName, name, column),\n );\n }\n }\n\n const tableExpressions: TableExpression[] = [];\n const holdCodeDomains = new Set<ComparableDomain>();\n\n for (const domain of dbStructure.domains) {\n if (\n generatorIgnore?.schemas?.includes(domain.schemaName) ||\n generatorIgnore?.domains?.includes(domain.name)\n ) {\n continue;\n }\n\n const dbColumn = instantiateDbColumn(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n {\n // not destructuring `domain` because need to ignore `numericPrecision`, `numericScale`, etc.,\n // that are loaded from db, but not defined in the code\n schemaName: domain.typeSchema,\n tableName: 'N/A',\n name: domain.name,\n typeSchema: domain.typeSchema,\n type: domain.type,\n arrayDims: domain.arrayDims,\n default: domain.default,\n isNullable: domain.isNullable,\n collate: domain.collate,\n maxChars: domain.maxChars,\n typmod: -1,\n },\n );\n\n if (domain.checks) {\n dbColumn.data.checks = domain.checks.map((check) => ({\n sql: new RawSQL([[check]] as unknown as TemplateLiteralArgs),\n }));\n }\n\n const dbDomain = makeComparableDomain(\n currentSchema,\n domain.schemaName,\n domain.name,\n dbColumn,\n );\n\n const found = codeDomains.filter((codeDomain) =>\n deepCompare(dbDomain.compare, codeDomain.compare),\n );\n\n if ((domain.default || domain.checks?.length) && found.length) {\n for (const codeDomain of found) {\n holdCodeDomains.add(codeDomain);\n }\n\n const compare: CompareExpression['compare'] = [];\n pushCompareDefault(compare, domain, found);\n pushCompareChecks(compare, domain, found);\n\n const source = `(VALUES (NULL::${getColumnDbType(\n dbColumn,\n currentSchema,\n )})) t(value)`;\n\n tableExpressions.push({\n compare,\n source,\n handle(i) {\n const codeDomain = i === undefined ? undefined : found[i];\n if (!codeDomain) {\n ast.push(dropAst(dbDomain));\n } else {\n holdCodeDomains.delete(codeDomain);\n }\n },\n });\n } else if (found.length) {\n let i = codeDomains.findIndex(\n (codeDomain) =>\n codeDomain.name === dbDomain.name &&\n codeDomain.schemaName === dbDomain.schemaName,\n );\n if (i === -1) {\n i = 0;\n const first = found[0];\n ast.push({\n type: 'renameType',\n kind: 'DOMAIN',\n fromSchema: dbDomain.schemaName,\n from: dbDomain.name,\n toSchema: first.schemaName,\n to: first.name,\n });\n pendingDbTypes.add(first.schemaName, first.name);\n }\n\n codeDomains.splice(i, 1);\n } else {\n ast.push(dropAst(dbDomain));\n }\n }\n\n for (const codeDomain of codeDomains) {\n if (!holdCodeDomains.has(codeDomain)) {\n ast.push(createAst(codeDomain));\n pendingDbTypes.add(codeDomain.schemaName, codeDomain.name);\n }\n }\n\n if (tableExpressions.length) {\n await compareSqlExpressions(tableExpressions, adapter);\n\n if (holdCodeDomains.size) {\n for (const codeDomain of holdCodeDomains.keys()) {\n ast.push(createAst(codeDomain));\n pendingDbTypes.add(codeDomain.schemaName, codeDomain.name);\n }\n }\n }\n};\n\nconst makeComparableDomain = (\n currentSchema: string,\n schemaName: string,\n name: string,\n column: Column,\n): ComparableDomain => {\n let arrayDims = 0;\n const isNullable = column.data.isNullable ?? false;\n let inner = column;\n while (inner instanceof ArrayColumn) {\n inner = inner.data.item;\n arrayDims++;\n }\n const fullType = getColumnDbType(inner, currentSchema);\n const [typeSchema = 'pg_catalog', type] = getSchemaAndTableFromName(fullType);\n\n return {\n schemaName,\n name,\n column,\n compare: {\n type,\n typeSchema,\n arrayDims,\n isNullable,\n maxChars: inner.data.maxChars,\n numericPrecision: inner.data.numericPrecision,\n numericScale: inner.data.numericScale,\n dateTimePrecision: inner.data.dateTimePrecision,\n collate: column.data.collate,\n hasDefault: column.data.default !== undefined,\n hasChecks: !!column.data.checks?.length,\n },\n };\n};\n\nconst pushCompareDefault = (\n compare: CompareExpression['compare'],\n domain: DbStructure.Domain,\n found: ComparableDomain[],\n) => {\n if (domain.default) {\n compare.push({\n inDb: domain.default,\n inCode: found.map((codeDomain) => {\n const value = codeDomain.column.data.default;\n if ('sql' in (value as Column.Data.Check)) {\n return (value as Column.Data.Check).sql;\n }\n return value as string;\n }),\n });\n }\n};\n\nconst pushCompareChecks = (\n compare: CompareExpression['compare'],\n domain: DbStructure.Domain,\n found: ComparableDomain[],\n) => {\n if (domain.checks?.length) {\n const inCode = found.flatMap(\n (codeDomain) =>\n codeDomain.column.data.checks?.map((check) =>\n typeof check === 'string' ? check : check.sql,\n ) || emptyArray,\n );\n\n compare.push(\n ...domain.checks.map((check) => ({\n inDb: check,\n inCode,\n })),\n );\n }\n};\n\nconst dropAst = (dbDomain: ComparableDomain): RakeDbAst.Domain => ({\n type: 'domain',\n action: 'drop',\n schema: dbDomain.schemaName,\n name: dbDomain.name,\n baseType: dbDomain.column,\n});\n\nconst createAst = (codeDomain: ComparableDomain): RakeDbAst.Domain => ({\n type: 'domain',\n action: 'create',\n schema: codeDomain.schemaName,\n name: codeDomain.name,\n baseType: codeDomain.column,\n});\n","import { DbStructure, IntrospectedStructure, RakeDbAst } from 'rake-db';\nimport { promptCreateOrRename } from './generators.utils';\nimport { ComposeMigrationParams, PendingDbTypes } from '../composeMigration';\n\nexport interface EnumItem {\n schema?: string;\n name: string;\n values: [string, ...string[]];\n}\n\nexport const processEnums = async (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n codeItems: { enums },\n currentSchema,\n verifying,\n internal: { generatorIgnore },\n }: ComposeMigrationParams,\n pendingDbTypes: PendingDbTypes,\n): Promise<void> => {\n const createEnums: EnumItem[] = [];\n const dropEnums: DbStructure.Enum[] = [];\n\n for (const [, codeEnum] of enums) {\n const { schema = currentSchema, name } = codeEnum;\n const dbEnum = dbStructure.enums.find(\n (x) => x.schemaName === schema && x.name === name,\n );\n if (!dbEnum) {\n createEnums.push(codeEnum);\n }\n }\n\n for (const dbEnum of dbStructure.enums) {\n if (\n generatorIgnore?.schemas?.includes(dbEnum.schemaName) ||\n generatorIgnore?.enums?.includes(dbEnum.name)\n ) {\n continue;\n }\n\n const codeEnum = enums.get(`${dbEnum.schemaName}.${dbEnum.name}`);\n if (codeEnum) {\n changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);\n continue;\n }\n\n const i = createEnums.findIndex((x) => x.name === dbEnum.name);\n if (i !== -1) {\n const codeEnum = createEnums[i];\n createEnums.splice(i, 1);\n const fromSchema = dbEnum.schemaName;\n const toSchema = codeEnum.schema ?? currentSchema;\n\n renameColumnsTypeSchema(dbStructure, fromSchema, toSchema);\n\n ast.push({\n type: 'renameType',\n kind: 'TYPE',\n fromSchema,\n from: dbEnum.name,\n toSchema,\n to: dbEnum.name,\n });\n pendingDbTypes.add(toSchema, dbEnum.name);\n\n changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);\n\n continue;\n }\n\n dropEnums.push(dbEnum);\n }\n\n for (const codeEnum of createEnums) {\n if (dropEnums.length) {\n const i = await promptCreateOrRename(\n 'enum',\n codeEnum.name,\n dropEnums.map((x) => x.name),\n verifying,\n );\n if (i) {\n const dbEnum = dropEnums[i - 1];\n dropEnums.splice(i - 1, 1);\n\n const fromSchema = dbEnum.schemaName;\n const from = dbEnum.name;\n const toSchema = codeEnum.schema ?? currentSchema;\n const to = codeEnum.name;\n\n if (fromSchema !== toSchema) {\n renameColumnsTypeSchema(dbStructure, fromSchema, toSchema);\n }\n\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.type === from) {\n column.type = to;\n }\n }\n }\n\n ast.push({\n type: 'renameType',\n kind: 'TYPE',\n fromSchema,\n from,\n toSchema,\n to,\n });\n pendingDbTypes.add(toSchema, to);\n\n changeEnum(ast, dbEnum, codeEnum, pendingDbTypes);\n\n continue;\n }\n }\n\n ast.push({\n type: 'enum',\n action: 'create',\n ...codeEnum,\n });\n pendingDbTypes.add(codeEnum.schema, codeEnum.name);\n }\n\n for (const dbEnum of dropEnums) {\n ast.push({\n type: 'enum',\n action: 'drop',\n schema: dbEnum.schemaName,\n name: dbEnum.name,\n values: dbEnum.values,\n });\n }\n};\n\nconst changeEnum = (\n ast: RakeDbAst[],\n dbEnum: DbStructure.Enum,\n codeEnum: EnumItem,\n pendingDbTypes: PendingDbTypes,\n) => {\n const { values: dbValues } = dbEnum;\n const { values: codeValues, schema, name } = codeEnum;\n\n if (dbValues.length < codeValues.length) {\n if (!dbValues.some((value) => !codeValues.includes(value))) {\n ast.push({\n type: 'enumValues',\n action: 'add',\n schema,\n name,\n values: codeValues.filter((value) => !dbValues.includes(value)),\n });\n pendingDbTypes.add(schema, name);\n return;\n }\n } else if (dbValues.length > codeValues.length) {\n if (!codeValues.some((value) => !dbValues.includes(value))) {\n ast.push({\n type: 'enumValues',\n action: 'drop',\n schema,\n name,\n values: dbValues.filter((value) => !codeValues.includes(value)),\n });\n pendingDbTypes.add(schema, name);\n return;\n }\n } else if (!dbValues.some((value) => !codeValues.includes(value))) {\n return;\n }\n\n ast.push({\n type: 'changeEnumValues',\n schema,\n name,\n fromValues: dbValues,\n toValues: codeValues,\n });\n pendingDbTypes.add(schema, name);\n};\n\nconst renameColumnsTypeSchema = (\n dbStructure: IntrospectedStructure,\n from: string,\n to: string,\n) => {\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.typeSchema === from) {\n column.typeSchema = to;\n }\n }\n }\n};\n","import { AnyRakeDbConfig } from 'rake-db';\nimport { Column, toArray, toSnakeCase } from 'pqb';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop } from './generators.utils';\n\nexport const processPrimaryKey = (\n config: AnyRakeDbConfig,\n changeTableData: ChangeTableData,\n) => {\n const { codeTable } = changeTableData;\n\n const columnsPrimaryKey: { key: string; name: string }[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n if (column.data.primaryKey) {\n columnsPrimaryKey.push({ key, name: column.data.name ?? key });\n }\n }\n\n changePrimaryKey(config, columnsPrimaryKey, changeTableData);\n renamePrimaryKey(changeTableData);\n};\n\nconst changePrimaryKey = (\n config: AnyRakeDbConfig,\n columnsPrimaryKey: { key: string; name: string }[],\n {\n codeTable,\n dbTableData: { primaryKey: dbPrimaryKey },\n changeTableAst: { shape, add, drop },\n changingColumns,\n }: ChangeTableData,\n) => {\n const tablePrimaryKey = codeTable.internal.tableData.primaryKey;\n const primaryKey = [\n ...new Set([\n ...columnsPrimaryKey,\n ...((config.snakeCase\n ? tablePrimaryKey?.columns.map((key) => ({\n key,\n name: toSnakeCase(key),\n }))\n : tablePrimaryKey?.columns.map((key) => ({ key, name: key }))) ?? []),\n ]),\n ];\n\n if (\n dbPrimaryKey &&\n primaryKey.length === dbPrimaryKey.columns.length &&\n !primaryKey.some(\n ({ name }) => !dbPrimaryKey.columns.some((dbName) => name === dbName),\n )\n ) {\n if (primaryKey.length === 1) {\n const { key } = primaryKey[0];\n const changes = shape[key] && toArray(shape[key]);\n if (changes) {\n for (const change of changes) {\n if (change.type !== 'change') continue;\n\n if (change.from.column) {\n change.from.column.data.primaryKey = undefined;\n }\n\n if (change.to.column) {\n const column = Object.create(change.to.column);\n column.data = { ...column.data, primaryKey: undefined };\n change.to.column = column;\n }\n }\n }\n }\n return;\n }\n\n const toDrop = dbPrimaryKey?.columns.filter(\n (key) => !checkForColumnAddOrDrop(shape, key),\n );\n if (toDrop?.length) {\n if (toDrop.length === 1 && changingColumns[toDrop[0]]) {\n const column = changingColumns[toDrop[0]];\n column.from.data.primaryKey =\n dbPrimaryKey?.name ?? (true as unknown as string);\n } else {\n drop.primaryKey = { columns: toDrop, name: dbPrimaryKey?.name };\n }\n }\n\n const toAdd = primaryKey.filter(\n ({ key }) => !checkForColumnAddOrDrop(shape, key),\n );\n if (toAdd.length) {\n if (toAdd.length === 1 && changingColumns[toAdd[0].name]) {\n const column = changingColumns[toAdd[0].name];\n column.to.data.primaryKey =\n tablePrimaryKey?.name ?? (true as unknown as string);\n } else {\n add.primaryKey = {\n columns: toAdd.map((c) => c.key),\n name: tablePrimaryKey?.name,\n };\n }\n }\n};\n\nconst renamePrimaryKey = ({\n codeTable,\n dbTableData: { primaryKey: dbPrimaryKey },\n schema,\n delayedAst,\n}: ChangeTableData) => {\n const tablePrimaryKey = codeTable.internal.tableData.primaryKey;\n if (\n dbPrimaryKey &&\n tablePrimaryKey &&\n dbPrimaryKey?.name !== tablePrimaryKey?.name\n ) {\n delayedAst.push({\n type: 'renameTableItem',\n kind: 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbPrimaryKey.name ?? `${codeTable.table}_pkey`,\n to: tablePrimaryKey.name ?? `${codeTable}_pkey`,\n });\n }\n};\n","import {\n AnyRakeDbConfig,\n RakeDbAst,\n getIndexName,\n DbStructure,\n getExcludeName,\n} from 'rake-db';\nimport {\n Column,\n TableData,\n deepCompare,\n MaybeArray,\n RecordUnknown,\n toArray,\n toSnakeCase,\n SearchWeight,\n} from 'pqb';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop, CompareExpression } from './generators.utils';\nimport { CodeTable } from '../generate';\n\ninterface CodeItem {\n columnKeys: TableData.Index.ColumnOrExpressionOptions[];\n includeKeys?: MaybeArray<string>;\n}\n\ninterface CodeIndex extends TableData.Index, CodeItem {}\ninterface CodeExclude extends TableData.Exclude, CodeItem {}\n\ninterface CodeItems {\n indexes: CodeIndex[];\n excludes: CodeExclude[];\n}\n\ninterface ComparableIndexColumn {\n column?: string;\n collate?: string;\n opclass?: string;\n order?: string;\n weight?: SearchWeight;\n hasExpression: boolean;\n}\n\ninterface ComparableIndex {\n name?: string;\n using?: string;\n unique?: boolean;\n include?: string[];\n nullsNotDistinct?: boolean;\n tablespace?: string;\n tsVector?: boolean;\n language?: string;\n languageColumn?: string;\n columns: ComparableIndexColumn[];\n hasWith: boolean;\n hasWhere: boolean;\n hasExpression: boolean;\n columnKeys?: string[];\n includeKeys?: string[];\n}\n\ninterface ComparableExcludeColumn extends ComparableIndexColumn {\n with: string;\n}\n\ninterface ComparableExclude extends ComparableIndex {\n columns: ComparableExcludeColumn[];\n}\n\ninterface ComparableItems {\n indexes: ComparableIndex[];\n excludes: ComparableExclude[];\n}\n\ninterface SkipCodeItems {\n indexes: Map<number, boolean>;\n excludes: Map<number, boolean>;\n}\n\ninterface HoldCodeItems {\n indexes: Map<TableData.Index, boolean>;\n excludes: Map<TableData.Exclude, boolean>;\n}\n\ninterface Wait {\n indexes: number;\n excludes: number;\n}\n\ninterface ProcessParams {\n config: AnyRakeDbConfig;\n changeTableData: ChangeTableData;\n codeComparableItems: ComparableItems;\n codeItems: CodeItems;\n skipCodeItems: SkipCodeItems;\n holdCodeItems: HoldCodeItems;\n wait: Wait;\n ast: RakeDbAst[];\n compareExpressions: CompareExpression[];\n}\n\nexport const processIndexesAndExcludes = (\n config: AnyRakeDbConfig,\n changeTableData: ChangeTableData,\n ast: RakeDbAst[],\n compareExpressions: CompareExpression[],\n) => {\n const codeItems = collectCodeIndexes(config, changeTableData);\n const codeComparableItems = collectCodeComparableItems(config, codeItems);\n\n // to skip indexes without SQL from being added when they are matched with already existing indexes\n const skipCodeItems: SkipCodeItems = {\n indexes: new Map(),\n excludes: new Map(),\n };\n\n // to skip indexes with SQL from being added while their SQL is being asynchronously compared with existing indexes\n const holdCodeItems: HoldCodeItems = {\n indexes: new Map(),\n excludes: new Map(),\n };\n\n const processParams: ProcessParams = {\n config,\n changeTableData,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n // counter for async SQL comparisons that are in progress\n wait: { indexes: 0, excludes: 0 },\n ast,\n compareExpressions,\n };\n\n processItems(processParams, 'indexes');\n processItems(processParams, 'excludes');\n\n addMainItems(\n changeTableData,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n 'indexes',\n );\n addMainItems(\n changeTableData,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n 'excludes',\n );\n};\n\nconst processItems = (\n {\n config,\n changeTableData,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n holdCodeItems,\n wait,\n ast,\n compareExpressions,\n }: ProcessParams,\n key: 'indexes' | 'excludes',\n) => {\n const {\n changeTableAst: { shape },\n } = changeTableData;\n\n const dbItems = changeTableData.dbTableData[key];\n\n for (const dbItem of dbItems) {\n const hasAddedOrDroppedColumn = dbItem.columns.some(\n (column) =>\n 'column' in column && checkForColumnAddOrDrop(shape, column.column),\n );\n if (hasAddedOrDroppedColumn) continue;\n\n normalizeItem(dbItem);\n\n const { found, rename, foundAndHasSql } = findMatchingItem(\n dbItem,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n changeTableData.codeTable.table,\n config,\n key,\n );\n\n const { columns: dbColumns } = dbItem;\n\n if (!foundAndHasSql) {\n handleItemChange(\n changeTableData,\n dbItem,\n dbColumns,\n found[0],\n rename[0],\n key,\n );\n continue;\n }\n\n for (const codeItem of found) {\n holdCodeItems[key].set(codeItem as never, true);\n }\n\n const compare: CompareExpression['compare'] = [];\n for (let i = 0; i < dbItem.columns.length; i++) {\n const column = dbItem.columns[i];\n if (!('expression' in column)) continue;\n\n compare.push({\n inDb: column.expression,\n inCode: found.map(\n (x) => (x.columns[i] as { expression: string }).expression,\n ),\n });\n }\n\n if (dbItem.with) {\n compare.push({\n inDb: dbItem.with,\n inCode: found.map((x) => x.options.with as string),\n });\n }\n\n if (dbItem.where) {\n compare.push({\n inDb: dbItem.where,\n inCode: found.map((x) => x.options.where as string),\n });\n }\n\n wait[key]++;\n compareExpressions.push({\n compare,\n handle(i) {\n const codeItem = i === undefined ? undefined : found[i];\n\n handleItemChange(\n changeTableData,\n dbItem,\n dbColumns,\n codeItem,\n i === undefined ? undefined : rename[i],\n key,\n );\n\n if (codeItem) {\n holdCodeItems[key].delete(codeItem as never);\n }\n\n if (!--wait[key] && holdCodeItems[key].size) {\n addItems(changeTableData, [...holdCodeItems[key].keys()], key);\n\n if (!changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n }\n },\n });\n }\n};\n\nconst collectCodeIndexes = (\n config: AnyRakeDbConfig,\n { codeTable, changeTableAst: { shape } }: ChangeTableData,\n): CodeItems => {\n const codeItems: CodeItems = { indexes: [], excludes: [] };\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n if (!column.data.indexes && !column.data.excludes) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n pushCodeColumnItems(config, codeItems, key, name, column, 'indexes');\n pushCodeColumnItems(config, codeItems, key, name, column, 'excludes');\n }\n\n pushCodeCompositeItems(config, codeTable, codeItems, 'indexes');\n pushCodeCompositeItems(config, codeTable, codeItems, 'excludes');\n\n return codeItems;\n};\n\nconst pushCodeColumnItems = (\n config: AnyRakeDbConfig,\n codeItems: CodeItems,\n columnKey: string,\n name: string,\n column: Column,\n key: 'indexes' | 'excludes',\n) => {\n const items = column.data[key];\n if (!items) return;\n\n codeItems[key].push(\n ...(items as TableData.ColumnExclude[]).map(\n ({\n options: { collate, opclass, order, weight, ...options },\n with: wi,\n ...index\n }) => {\n const w = key === 'excludes' ? wi : (undefined as never);\n return {\n columns: [\n {\n collate,\n opclass,\n order,\n weight,\n column: name,\n with: w,\n },\n ],\n ...index,\n options: options.include\n ? config.snakeCase\n ? {\n ...options,\n include: toArray(options.include).map(toSnakeCase),\n }\n : options\n : options,\n columnKeys: [\n {\n collate,\n opclass,\n order,\n weight,\n column: columnKey,\n with: w,\n },\n ],\n includeKeys: options.include,\n };\n },\n ),\n );\n};\n\nconst pushCodeCompositeItems = (\n config: AnyRakeDbConfig,\n codeTable: CodeTable,\n codeItems: CodeItems,\n key: 'indexes' | 'excludes',\n) => {\n const items = codeTable.internal.tableData[key];\n if (!items) return;\n\n codeItems[key].push(\n ...(items as TableData.Exclude[]).map((x) => ({\n ...x,\n columns: config.snakeCase\n ? x.columns.map((c) =>\n 'column' in c ? { ...c, column: toSnakeCase(c.column) } : c,\n )\n : x.columns,\n columnKeys: x.columns,\n options:\n x.options.include && config.snakeCase\n ? {\n ...x.options,\n include: toArray(x.options.include).map(toSnakeCase),\n }\n : x.options,\n includeKeys: x.options.include,\n })),\n );\n};\n\nconst collectCodeComparableItems = (\n config: AnyRakeDbConfig,\n codeItems: CodeItems,\n): ComparableItems => {\n return {\n indexes: collectCodeComparableItemsType(config, codeItems, 'indexes'),\n excludes: collectCodeComparableItemsType(config, codeItems, 'excludes'),\n };\n};\n\nconst collectCodeComparableItemsType = (\n config: AnyRakeDbConfig,\n codeItems: CodeItems,\n key: 'indexes' | 'excludes',\n): ComparableExclude[] => {\n return codeItems[key].map((codeItem) => {\n normalizeItem(codeItem.options as never);\n\n return itemToComparable({\n ...codeItem.options,\n include:\n codeItem.options.include === undefined\n ? undefined\n : config.snakeCase\n ? toArray(codeItem.options.include).map(toSnakeCase)\n : toArray(codeItem.options.include),\n columns: codeItem.columns,\n name: codeItem.options.name,\n columnKeys: codeItem.columnKeys,\n includeKeys: codeItem.includeKeys,\n });\n }) as never;\n};\n\nconst normalizeItem = (item: {\n using?: string;\n unique?: boolean;\n nullsNotDistinct?: boolean;\n columns: RecordUnknown[];\n exclude?: string[];\n}) => {\n if (item.using) item.using = item.using.toLowerCase();\n if (item.using === 'btree') item.using = undefined;\n if (!item.unique) item.unique = undefined;\n if (item.nullsNotDistinct === false) item.nullsNotDistinct = undefined;\n if (item.exclude) {\n for (let i = 0; i < item.columns.length; i++) {\n item.columns[i].with = item.exclude[i];\n }\n }\n};\n\nconst itemToComparable = (\n index: TableData.Index.Options & {\n columns: DbStructure.Index['columns'];\n name?: string;\n columnKeys?: TableData.Index.ColumnOrExpressionOptions[];\n includeKeys?: MaybeArray<string>;\n },\n) => {\n let hasExpression = false;\n const columns = index.columns.map((column) => {\n const result = {\n ...column,\n expression: undefined,\n hasExpression: 'expression' in column,\n };\n if (result.hasExpression) hasExpression = true;\n return result;\n });\n\n return {\n ...index,\n schemaName: undefined,\n tableName: undefined,\n with: undefined,\n hasWith: !!index.with,\n where: undefined,\n hasWhere: !!index.where,\n columns,\n hasExpression,\n } as ComparableIndex;\n};\n\ninterface ItemChange {\n found: TableData.Index[] | TableData.Exclude[];\n rename: (string | undefined)[];\n}\n\nconst findMatchingItem = (\n dbItem: DbStructure.Index | DbStructure.Exclude,\n codeComparableItems: ComparableItems,\n codeItems: CodeItems,\n skipCodeItems: SkipCodeItems,\n tableName: string,\n config: AnyRakeDbConfig,\n key: 'indexes' | 'excludes',\n) => {\n const dbComparableItem = itemToComparable(\n key === 'indexes'\n ? dbItem\n : {\n ...dbItem,\n exclude: undefined as never,\n columns: dbItem.columns.map((column, i) => ({\n ...column,\n with: (dbItem as DbStructure.Exclude).exclude[i],\n })),\n },\n );\n\n const { found, rename } = findMatchingItemWithoutSql(\n dbComparableItem,\n codeComparableItems,\n codeItems,\n skipCodeItems,\n tableName,\n config,\n key,\n );\n\n const foundAndHasSql = found.length && checkIfItemHasSql(dbComparableItem);\n\n return { found, rename, foundAndHasSql };\n};\n\nconst findMatchingItemWithoutSql = (\n dbItem: ComparableIndex | ComparableExclude,\n codeComparableItems: ComparableItems,\n codeItems: CodeItems,\n skipCodeItems: SkipCodeItems,\n tableName: string,\n config: AnyRakeDbConfig,\n key: 'indexes' | 'excludes',\n): ItemChange => {\n const found: (TableData.Index | TableData.Exclude)[] = [];\n const rename: (string | undefined)[] = [];\n\n const { columns: dbColumns, ...dbItemWithoutColumns } = dbItem;\n\n for (let i = 0; i < codeComparableItems[key].length; i++) {\n if (skipCodeItems[key].has(i)) continue;\n\n const { columns: codeColumns, ...codeItem } = codeComparableItems[key][i];\n if (\n dbColumns.length === codeColumns.length &&\n !dbColumns.some((dbColumn, i) => !deepCompare(dbColumn, codeColumns[i]))\n ) {\n let a: RecordUnknown = dbItemWithoutColumns;\n let b = codeItem;\n const codeName =\n b.name ??\n (key === 'indexes' ? getIndexName : getExcludeName)(\n tableName,\n dbColumns,\n );\n if (a.name !== b.name) {\n a = { ...a, name: undefined };\n b = {\n ...b,\n name: undefined,\n columnKeys: undefined,\n includeKeys: undefined,\n };\n if (a.language && !b.language) {\n b.language = config.language ?? 'english';\n }\n\n if (deepCompare(a, b)) {\n found.push(codeItems[key][i]);\n rename.push(\n dbItemWithoutColumns.name !== codeName ? codeName : undefined,\n );\n }\n } else {\n const {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n columnKeys,\n includeKeys,\n ...codeItemWithoutKeys\n } = codeItem;\n\n if (deepCompare(dbItemWithoutColumns, codeItemWithoutKeys)) {\n found.push(codeItems[key][i]);\n rename.push(undefined);\n }\n }\n\n if (found.length && !checkIfItemHasSql(codeItem)) {\n skipCodeItems[key].set(i, true);\n }\n }\n }\n\n return { found, rename };\n};\n\nconst checkIfItemHasSql = (\n x: Pick<ComparableIndex, 'hasWith' | 'hasWhere' | 'hasExpression'>,\n) => x.hasWith || x.hasWhere || x.hasExpression;\n\nconst handleItemChange = (\n {\n changeTableAst,\n schema,\n codeTable,\n changingColumns,\n delayedAst,\n }: ChangeTableData,\n dbItem: DbStructure.Index | DbStructure.Exclude,\n dbColumns: DbStructure.Index['columns'],\n found: TableData.Index | TableData.Exclude | undefined,\n rename: string | undefined,\n key: 'indexes' | 'excludes',\n) => {\n if (!found) {\n const name =\n dbItem.name ===\n (key === 'indexes' ? getIndexName : getExcludeName)(\n changeTableAst.name,\n dbColumns,\n )\n ? undefined\n : dbItem.name;\n\n if (dbColumns.length === 1 && 'column' in dbColumns[0]) {\n const dbColumn = dbColumns[0];\n const column = changingColumns[dbColumn.column];\n if (column) {\n (column.from.data[key] ??= []).push({\n options: { ...dbItem, name },\n with: (key === 'indexes'\n ? undefined\n : (dbColumn as unknown as { with: string }).with) as never,\n });\n return;\n }\n }\n\n (changeTableAst.drop[key] ??= []).push({\n columns: dbColumns,\n options: { ...dbItem, name },\n });\n } else if (rename) {\n delayedAst.push({\n type: 'renameTableItem',\n kind: key === 'indexes' ? 'INDEX' : 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbItem.name,\n to: rename,\n });\n }\n};\n\ninterface IndexWithMaybeColumnNames extends TableData.Index {\n columnNames?: TableData.Index.ColumnOrExpressionOptions[];\n}\n\nconst addMainItems = (\n changeTableData: ChangeTableData,\n codeItems: CodeItems,\n skipCodeItems: SkipCodeItems,\n holdCodeItems: HoldCodeItems,\n key: 'indexes' | 'excludes',\n) => {\n const itemsToAdd = codeItems[key].filter(\n (item, i) =>\n !skipCodeItems[key].has(i) && !holdCodeItems[key].has(item as never),\n );\n if (itemsToAdd.length) {\n addItems(\n changeTableData,\n itemsToAdd.map((x) => ({\n ...x,\n columns: x.columnKeys,\n columnNames: x.columns,\n options: x.options.include\n ? { ...x.options, include: x.includeKeys }\n : x.options,\n })),\n key,\n );\n }\n};\n\nconst addItems = (\n { changeTableAst, changingColumns }: ChangeTableData,\n add: IndexWithMaybeColumnNames[],\n key: 'indexes' | 'excludes',\n) => {\n const items = (changeTableAst.add[key] ??= []);\n for (const item of add) {\n if (item.columns.length === 1 && 'column' in item.columns[0]) {\n const column =\n changingColumns[\n ((item.columnNames || item.columns)[0] as { column: string }).column\n ];\n if (column) {\n (column.to.data[key] ??= []).push(\n key === 'indexes'\n ? item\n : ({\n ...item,\n with: (item as TableData.Exclude).columns[0].with,\n } as never),\n );\n continue;\n }\n }\n\n items.push(item);\n }\n};\n","import {\n RakeDbAst,\n DbStructure,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n getConstraintName,\n AnyRakeDbConfig,\n} from 'rake-db';\nimport { Column, TableData, deepCompare, toSnakeCase } from 'pqb';\nimport { ChangeTableData, TableShapes } from './tables.generator';\nimport { checkForColumnAddOrDrop } from './generators.utils';\n\ninterface Constraint extends TableData.Constraint {\n references: TableData.References;\n}\n\ninterface CodeForeignKey {\n references: DbStructure.References;\n codeConstraint: Constraint;\n}\n\ninterface ReferencesWithStringTable extends TableData.References {\n fnOrTable: string;\n}\n\nconst mapMatchToDb: {\n [K in TableData.References.Match]: DbStructure.ForeignKeyMatch;\n} = {\n FULL: 'f',\n PARTIAL: 'p',\n SIMPLE: 's',\n};\n\nconst mapMatchToCode = {} as {\n [K in DbStructure.ForeignKeyMatch]: TableData.References.Match;\n};\nfor (const key in mapMatchToDb) {\n mapMatchToCode[\n mapMatchToDb[\n key as TableData.References.Match\n ] as DbStructure.ForeignKeyMatch\n ] = key as TableData.References.Match;\n}\n\nconst mapActionToDb: {\n [K in TableData.References.Action]: DbStructure.ForeignKeyAction;\n} = {\n 'NO ACTION': 'a',\n RESTRICT: 'r',\n CASCADE: 'c',\n 'SET NULL': 'n',\n 'SET DEFAULT': 'd',\n};\n\nconst mapActionToCode = {} as {\n [K in DbStructure.ForeignKeyAction]: TableData.References.Action;\n};\nfor (const key in mapActionToDb) {\n mapActionToCode[\n mapActionToDb[\n key as TableData.References.Action\n ] as DbStructure.ForeignKeyAction\n ] = key as TableData.References.Action;\n}\n\nexport const processForeignKeys = (\n config: AnyRakeDbConfig,\n ast: RakeDbAst[],\n changeTables: ChangeTableData[],\n currentSchema: string,\n tableShapes: TableShapes,\n): void => {\n for (const changeTableData of changeTables) {\n const codeForeignKeys = collectCodeFkeys(\n config,\n changeTableData,\n currentSchema,\n );\n\n const { codeTable, dbTableData, changeTableAst, schema, changingColumns } =\n changeTableData;\n const { shape, add, drop } = changeTableAst;\n let changed = false;\n\n for (const dbConstraint of dbTableData.constraints) {\n const { references: dbReferences } = dbConstraint;\n if (!dbReferences) continue;\n\n const hasChangedColumn = dbReferences.columns.some((column) =>\n checkForColumnAddOrDrop(shape, column),\n );\n if (hasChangedColumn) continue;\n\n const foreignShape =\n tableShapes[\n `${dbReferences.foreignSchema}.${dbReferences.foreignTable}`\n ];\n const hasForeignChangedColumn =\n foreignShape &&\n dbReferences.foreignColumns.some((column) => {\n const res = checkForColumnAddOrDrop(foreignShape, column);\n // console.log(res, column);\n return res;\n });\n if (hasForeignChangedColumn) continue;\n\n let found = false;\n let rename: string | undefined;\n for (let i = 0; i < codeForeignKeys.length; i++) {\n const codeForeignKey = codeForeignKeys[i];\n const codeReferences = codeForeignKey.references;\n if (deepCompare(dbReferences, codeReferences)) {\n found = true;\n codeForeignKeys.splice(i, 1);\n\n const codeName =\n codeForeignKey.codeConstraint.name ??\n getConstraintName(\n codeTable.table,\n codeForeignKey,\n config.snakeCase,\n );\n if (codeName !== dbConstraint.name) {\n rename = codeName;\n }\n }\n }\n\n if (!found) {\n const foreignKey = dbForeignKeyToCodeForeignKey(\n config,\n dbConstraint,\n dbReferences,\n );\n\n if (\n dbReferences.columns.length === 1 &&\n changingColumns[dbReferences.columns[0]]\n ) {\n const column = changingColumns[dbReferences.columns[0]];\n (column.from.data.foreignKeys ??= []).push({\n fnOrTable: foreignKey.references.fnOrTable,\n foreignColumns: foreignKey.references.foreignColumns,\n options: foreignKey.references.options,\n });\n } else {\n (drop.constraints ??= []).push(foreignKey);\n }\n\n changed = true;\n } else if (rename) {\n ast.push({\n type: 'renameTableItem',\n kind: 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbConstraint.name,\n to: rename,\n });\n }\n }\n\n if (codeForeignKeys.length) {\n const constraints = (add.constraints ??= []);\n for (const { codeConstraint, references } of codeForeignKeys) {\n if (\n references.columns.length === 1 &&\n changingColumns[references.columns[0]]\n ) {\n const column = changingColumns[references.columns[0]];\n (column.to.data.foreignKeys ??= []).push({\n fnOrTable: references.foreignTable,\n foreignColumns: codeConstraint.references.foreignColumns,\n options: codeConstraint.references.options,\n });\n } else {\n constraints.push(codeConstraint);\n }\n }\n\n changed = true;\n }\n\n if (changed && !changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n }\n};\n\nconst collectCodeFkeys = (\n config: AnyRakeDbConfig,\n { codeTable, changeTableAst: { shape } }: ChangeTableData,\n currentSchema: string,\n): CodeForeignKey[] => {\n const codeForeignKeys: CodeForeignKey[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n if (!column.data.foreignKeys) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n codeForeignKeys.push(\n ...column.data.foreignKeys.map((x) => {\n const columns = [name];\n\n const fnOrTable = fnOrTableToString(x.fnOrTable);\n\n return parseForeignKey(\n config,\n {\n name: x.options?.name,\n references: {\n columns: [name],\n fnOrTable,\n foreignColumns: x.foreignColumns,\n options: x.options,\n },\n },\n {\n columns,\n fnOrTable,\n foreignColumns: x.foreignColumns,\n options: x.options,\n },\n currentSchema,\n );\n }),\n );\n }\n\n if (codeTable.internal.tableData.constraints) {\n for (const tableConstraint of codeTable.internal.tableData.constraints) {\n const { references: refs } = tableConstraint;\n if (!refs) continue;\n\n const fnOrTable = fnOrTableToString(refs.fnOrTable);\n\n codeForeignKeys.push(\n parseForeignKey(\n config,\n {\n ...tableConstraint,\n references: {\n ...refs,\n fnOrTable,\n },\n },\n {\n ...refs,\n fnOrTable,\n columns: config.snakeCase\n ? refs.columns.map(toSnakeCase)\n : refs.columns,\n foreignColumns: config.snakeCase\n ? refs.foreignColumns.map(toSnakeCase)\n : refs.foreignColumns,\n },\n currentSchema,\n ),\n );\n }\n }\n\n return codeForeignKeys;\n};\n\nexport const fnOrTableToString = (\n fnOrTable: TableData.References['fnOrTable'],\n) => {\n if (typeof fnOrTable !== 'string') {\n const { schema, table } = new (fnOrTable())();\n fnOrTable = concatSchemaAndName({ schema, name: table });\n }\n return fnOrTable;\n};\n\nconst parseForeignKey = (\n config: AnyRakeDbConfig,\n codeConstraint: Constraint,\n references: ReferencesWithStringTable,\n currentSchema: string,\n): CodeForeignKey => {\n const { fnOrTable, columns, foreignColumns, options } = references;\n const [schema, table] = getSchemaAndTableFromName(fnOrTable);\n\n return {\n references: {\n foreignSchema: schema ?? currentSchema,\n foreignTable: table,\n columns,\n foreignColumns: config.snakeCase\n ? foreignColumns.map(toSnakeCase)\n : foreignColumns,\n match: mapMatchToDb[options?.match || 'SIMPLE'],\n onUpdate: mapActionToDb[options?.onUpdate || 'NO ACTION'],\n onDelete: mapActionToDb[options?.onDelete || 'NO ACTION'],\n },\n codeConstraint,\n };\n};\n\nconst dbForeignKeyToCodeForeignKey = (\n config: AnyRakeDbConfig,\n dbConstraint: DbStructure.Constraint,\n dbReferences: DbStructure.References,\n): { name?: string; references: TableData.References } => ({\n name:\n dbConstraint.name ===\n getConstraintName(\n dbConstraint.tableName,\n { references: dbReferences },\n config.snakeCase,\n )\n ? undefined\n : dbConstraint.name,\n references: {\n columns: dbReferences.columns,\n fnOrTable: `${dbReferences.foreignSchema}.${dbReferences.foreignTable}`,\n foreignColumns: dbReferences.foreignColumns,\n options: {\n match:\n dbReferences.match === 's'\n ? undefined\n : mapMatchToCode[dbReferences.match],\n onUpdate:\n dbReferences.onUpdate === 'a'\n ? undefined\n : mapActionToCode[dbReferences.onUpdate],\n onDelete:\n dbReferences.onDelete === 'a'\n ? undefined\n : mapActionToCode[dbReferences.onDelete],\n },\n },\n});\n","import {\n getFreeSetAlias,\n TemplateLiteralArgs,\n Column,\n RawSQL,\n TableData,\n} from 'pqb';\nimport { DbStructure, RakeDbAst } from 'rake-db';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop, CompareExpression } from './generators.utils';\n\ninterface CodeCheck {\n check: Column.Data.Check;\n name: string;\n column?: string;\n}\n\nexport const processChecks = (\n ast: RakeDbAst[],\n changeTableData: ChangeTableData,\n compareExpressions: CompareExpression[],\n): void => {\n const codeChecks = collectCodeChecks(changeTableData);\n const {\n dbTableData,\n changeTableAst: { add, shape },\n } = changeTableData;\n\n const hasDbChecks = dbTableData.constraints.some((c) => c.check);\n if (!hasDbChecks) {\n if (codeChecks.length) {\n const constraints = (add.constraints ??= []);\n for (const codeCheck of codeChecks) {\n if (\n !codeCheck.column ||\n !changeTableData.changingColumns[codeCheck.column]\n ) {\n constraints.push({\n check: codeCheck.check.sql,\n name: codeCheck.name,\n });\n }\n }\n }\n return;\n }\n\n let wait = 0;\n const foundCodeChecks = new Set<number>();\n for (const dbConstraint of dbTableData.constraints) {\n const { check: dbCheck, name } = dbConstraint;\n if (!dbCheck) continue;\n\n const hasChangedColumn = dbCheck.columns?.some((column) =>\n checkForColumnAddOrDrop(shape, column),\n );\n if (hasChangedColumn) continue;\n\n if (codeChecks.length) {\n wait++;\n compareExpressions.push({\n compare: [\n {\n inDb: dbCheck.expression,\n inCode: codeChecks.map(({ check }) => check.sql),\n },\n ],\n handle(i) {\n if (i !== undefined) {\n foundCodeChecks.add(i);\n } else {\n dropCheck(changeTableData, dbCheck, name);\n }\n\n if (--wait !== 0) return;\n\n const checksToAdd: TableData.Constraint[] = [];\n\n codeChecks.forEach((check, i) => {\n if (foundCodeChecks.has(i)) {\n if (!check.column) return;\n\n const change = changeTableData.changingColumns[check.column];\n if (!change) return;\n\n const columnChecks = change.to.data.checks;\n if (!columnChecks) return;\n\n const i = columnChecks.indexOf(check.check);\n if (i !== -1) {\n columnChecks.splice(i, 1);\n }\n return;\n }\n\n checksToAdd.push({\n name: check.name,\n check: check.check.sql,\n });\n });\n\n if (checksToAdd.length) {\n (add.constraints ??= []).push(...checksToAdd);\n }\n\n if (\n !changeTableData.pushedAst &&\n (changeTableData.changeTableAst.drop.constraints?.length ||\n add.constraints?.length)\n ) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n },\n });\n } else {\n dropCheck(changeTableData, dbCheck, name);\n }\n }\n};\n\nconst collectCodeChecks = ({\n codeTable,\n changeTableAst: { shape },\n}: ChangeTableData): CodeCheck[] => {\n const names = new Set<string>();\n\n const codeChecks: CodeCheck[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n if (!column.data.checks) continue;\n\n const columnName = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, columnName)) continue;\n\n const baseName = `${codeTable.table}_${columnName}_check`;\n\n codeChecks.push(\n ...column.data.checks.map((check) => {\n const name = check.name || getFreeSetAlias(names, baseName, 1);\n names.add(name);\n\n return {\n check,\n name,\n column: columnName,\n };\n }),\n );\n }\n\n if (codeTable.internal.tableData.constraints) {\n for (const constraint of codeTable.internal.tableData.constraints) {\n const { check } = constraint;\n if (check) {\n const baseName = `${codeTable.table}_check`;\n const name = constraint.name || getFreeSetAlias(names, baseName, 1);\n names.add(name);\n\n codeChecks.push({\n check: { sql: check, name: constraint.name },\n name,\n });\n }\n }\n }\n\n return codeChecks;\n};\n\nconst dropCheck = (\n { changeTableAst: { drop }, changingColumns }: ChangeTableData,\n dbCheck: DbStructure.Check,\n name: string,\n) => {\n const sql = new RawSQL([\n [dbCheck.expression],\n ] as unknown as TemplateLiteralArgs);\n\n if (dbCheck.columns?.length === 1 && changingColumns[dbCheck.columns[0]]) {\n const column = changingColumns[dbCheck.columns[0]];\n column.from.data.name = 'i_d';\n (column.from.data.checks ??= []).push({\n name,\n sql,\n });\n } else {\n (drop.constraints ??= []).push({\n name,\n check: sql,\n });\n }\n};\n","import {\n ColumnsShape,\n Column,\n GeneratorIgnore,\n VirtualColumn,\n DbStructureDomainsMap,\n AdapterBase,\n EnumColumn,\n ArrayColumn,\n} from 'pqb';\nimport {\n DbStructure,\n IntrospectedStructure,\n AnyRakeDbConfig,\n RakeDbAst,\n getDbStructureTableData,\n StructureToAstCtx,\n StructureToAstTableData,\n tableToAst,\n getSchemaAndTableFromName,\n} from 'rake-db';\nimport {\n CompareExpression,\n compareSqlExpressions,\n promptCreateOrRename,\n TableExpression,\n} from './generators.utils';\nimport { processPrimaryKey } from './primaryKey.generator';\nimport { processIndexesAndExcludes } from './indexesAndExcludes.generator';\nimport { processColumns, TypeCastsCache } from './columns.generator';\nimport { processForeignKeys } from './foreignKeys.generator';\nimport { processChecks } from './checks.generator';\nimport { CodeTable } from '../generate';\nimport { ComposeMigrationParams, PendingDbTypes } from '../composeMigration';\n\nexport interface CompareSql {\n values: unknown[];\n expressions: {\n inDb: string;\n inCode: string;\n change(): void;\n }[];\n}\n\nexport interface ChangeTableSchemaData {\n codeTable: CodeTable;\n dbTable: DbStructure.Table;\n}\n\nexport interface ChangeTableData extends ChangeTableSchemaData {\n dbTableData: StructureToAstTableData;\n schema: string;\n changeTableAst: RakeDbAst.ChangeTable;\n pushedAst: boolean;\n changingColumns: ChangingColumns;\n delayedAst: RakeDbAst[];\n}\n\ninterface ChangingColumns {\n [dbName: string]: ChangingColumnsPair;\n}\n\nexport interface ChangingColumnsPair {\n from: Column;\n to: Column;\n}\n\nexport interface TableShapes {\n [K: string]: RakeDbAst.ChangeTableShape;\n}\n\nexport const processTables = async (\n ast: RakeDbAst[],\n domainsMap: DbStructureDomainsMap,\n adapter: AdapterBase,\n dbStructure: IntrospectedStructure,\n config: AnyRakeDbConfig,\n {\n structureToAstCtx,\n codeItems: { tables },\n currentSchema,\n internal: { generatorIgnore },\n verifying,\n }: ComposeMigrationParams,\n pendingDbTypes: PendingDbTypes,\n): Promise<void> => {\n const createTables: CodeTable[] = collectCreateTables(\n tables,\n dbStructure,\n currentSchema,\n );\n const compareSql: CompareSql = { values: [], expressions: [] };\n const tableExpressions: TableExpression[] = [];\n const { changeTables, changeTableSchemas, dropTables, tableShapes } =\n collectChangeAndDropTables(\n config,\n tables,\n dbStructure,\n currentSchema,\n createTables,\n generatorIgnore,\n );\n\n applyChangeTableSchemas(changeTableSchemas, currentSchema, ast);\n\n await applyCreateOrRenameTables(\n dbStructure,\n createTables,\n dropTables,\n changeTables,\n tableShapes,\n currentSchema,\n ast,\n verifying,\n );\n\n await applyChangeTables(\n adapter,\n changeTables,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n config,\n compareSql,\n tableExpressions,\n verifying,\n pendingDbTypes,\n );\n\n processForeignKeys(config, ast, changeTables, currentSchema, tableShapes);\n\n await Promise.all([\n applyCompareSql(compareSql, adapter),\n compareSqlExpressions(tableExpressions, adapter),\n ]);\n\n for (const dbTable of dropTables) {\n ast.push(\n tableToAst(structureToAstCtx, dbStructure, dbTable, 'drop', domainsMap),\n );\n }\n};\n\nconst collectCreateTables = (\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n): CodeTable[] => {\n return tables.reduce<CodeTable[]>((acc, codeTable) => {\n const tableSchema = codeTable.q.schema ?? currentSchema;\n const hasDbTable = dbStructure.tables.some(\n (t) => t.name === codeTable.table && t.schemaName === tableSchema,\n );\n if (!hasDbTable) {\n acc.push(codeTable);\n }\n return acc;\n }, []);\n};\n\nconst collectChangeAndDropTables = (\n config: AnyRakeDbConfig,\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n createTables: CodeTable[],\n generatorIgnore: GeneratorIgnore | undefined,\n): {\n changeTables: ChangeTableData[];\n changeTableSchemas: ChangeTableSchemaData[];\n dropTables: DbStructure.Table[];\n tableShapes: TableShapes;\n} => {\n const changeTables: ChangeTableData[] = [];\n const changeTableSchemas: ChangeTableSchemaData[] = [];\n const dropTables: DbStructure.Table[] = [];\n const tableShapes: TableShapes = {};\n const ignoreTables = generatorIgnore?.tables?.map((name) => {\n const [schema = currentSchema, table] = getSchemaAndTableFromName(name);\n return { schema, table };\n });\n\n for (const dbTable of dbStructure.tables) {\n if (\n dbTable.name === config.migrationsTable ||\n generatorIgnore?.schemas?.includes(dbTable.schemaName) ||\n ignoreTables?.some(\n ({ schema, table }) =>\n table === dbTable.name && schema === dbTable.schemaName,\n )\n )\n continue;\n\n const codeTable = tables.find(\n (t) =>\n t.table === dbTable.name &&\n (t.q.schema ?? currentSchema) === dbTable.schemaName,\n );\n if (codeTable) {\n addChangeTable(\n dbStructure,\n changeTables,\n tableShapes,\n currentSchema,\n dbTable,\n codeTable,\n );\n continue;\n }\n\n const i = createTables.findIndex((t) => t.table === dbTable.name);\n if (i !== -1) {\n const codeTable = createTables[i];\n createTables.splice(i, 1);\n changeTableSchemas.push({ codeTable, dbTable });\n continue;\n }\n\n dropTables.push(dbTable);\n }\n\n return { changeTables, changeTableSchemas, dropTables, tableShapes };\n};\n\nconst applyChangeTableSchemas = (\n changeTableSchemas: ChangeTableSchemaData[],\n currentSchema: string,\n ast: RakeDbAst[],\n) => {\n for (const { codeTable, dbTable } of changeTableSchemas) {\n const fromSchema = dbTable.schemaName;\n const toSchema = codeTable.q.schema ?? currentSchema;\n\n ast.push({\n type: 'renameType',\n kind: 'TABLE',\n fromSchema,\n from: dbTable.name,\n toSchema,\n to: dbTable.name,\n });\n }\n};\n\nconst applyChangeTables = async (\n adapter: AdapterBase,\n changeTables: ChangeTableData[],\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n config: AnyRakeDbConfig,\n compareSql: CompareSql,\n tableExpressions: TableExpression[],\n verifying: boolean | undefined,\n pendingDbTypes: PendingDbTypes,\n): Promise<void> => {\n const compareExpressions: CompareExpression[] = [];\n const typeCastsCache: TypeCastsCache = {};\n\n for (const changeTableData of changeTables) {\n compareExpressions.length = 0;\n\n await processTableChange(\n adapter,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n config,\n changeTableData,\n compareSql,\n compareExpressions,\n typeCastsCache,\n verifying,\n );\n\n if (compareExpressions.length) {\n const { codeTable } = changeTableData;\n const names: string[] = [];\n const types: string[] = [];\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as Column;\n // skip virtual columns\n if (!column.dataType) continue;\n\n const name = column.data.name ?? key;\n const type = getColumnDbTypeForComparison(column, currentSchema);\n if (!pendingDbTypes.set.has(type)) {\n names.push(name);\n types.push(type);\n }\n }\n\n const tableName = codeTable.table;\n const source = `(VALUES (${types\n .map((x) => `NULL::${x}`)\n .join(', ')})) \"${tableName}\"(${names\n .map((x) => `\"${x}\"`)\n .join(', ')})`;\n\n tableExpressions.push(\n ...compareExpressions.map((x) => ({ ...x, source })),\n );\n }\n }\n};\n\nconst getColumnDbTypeForComparison = (\n column: Column.Pick.DataAndDataType,\n currentSchema: string,\n): string => {\n if (column instanceof ArrayColumn) {\n return (\n getColumnDbTypeForComparison(column.data.item, currentSchema) +\n '[]'.repeat(column.data.arrayDims)\n );\n }\n\n let type = column instanceof EnumColumn ? column.enumName : column.dataType;\n\n const i = type.indexOf('(');\n let append = '';\n if (i !== -1) {\n type = type.slice(0, i);\n append = type.slice(i);\n }\n\n const j = type.indexOf('.');\n if (j === -1) {\n let result = `\"${type}\"${append}`;\n if (column.data.isOfCustomType || column instanceof EnumColumn) {\n result = `\"${currentSchema}\".${result}`;\n }\n return result;\n } else {\n return `\"${type.slice(j)}\".\"${type.slice(0, j)}\"${append}`;\n }\n};\n\nconst applyCompareSql = async (\n compareSql: CompareSql,\n adapter: AdapterBase,\n) => {\n if (compareSql.expressions.length) {\n const {\n rows: [results],\n } = await adapter.arrays(\n 'SELECT ' +\n compareSql.expressions\n .map((x) => `${x.inDb} = (${x.inCode})`)\n .join(', '),\n compareSql.values,\n );\n\n for (let i = 0; i < results.length; i++) {\n if (!results[i]) {\n compareSql.expressions[i].change();\n }\n }\n }\n};\n\nconst applyCreateOrRenameTables = async (\n dbStructure: IntrospectedStructure,\n createTables: CodeTable[],\n dropTables: DbStructure.Table[],\n changeTables: ChangeTableData[],\n tableShapes: TableShapes,\n currentSchema: string,\n ast: RakeDbAst[],\n verifying: boolean | undefined,\n) => {\n for (const codeTable of createTables) {\n if (dropTables.length) {\n const i = await promptCreateOrRename(\n 'table',\n codeTable.table,\n dropTables.map((x) => x.name),\n verifying,\n );\n if (i) {\n const dbTable = dropTables[i - 1];\n dropTables.splice(i - 1, 1);\n\n ast.push({\n type: 'renameType',\n kind: 'TABLE',\n fromSchema: dbTable.schemaName,\n from: dbTable.name,\n toSchema: codeTable.q.schema ?? currentSchema,\n to: codeTable.table,\n });\n\n addChangeTable(\n dbStructure,\n changeTables,\n tableShapes,\n currentSchema,\n dbTable,\n codeTable,\n );\n\n continue;\n }\n }\n\n ast.push(createTableAst(currentSchema, codeTable));\n }\n};\n\nconst addChangeTable = (\n dbStructure: IntrospectedStructure,\n changeTables: ChangeTableData[],\n tableShapes: TableShapes,\n currentSchema: string,\n dbTable: DbStructure.Table,\n codeTable: CodeTable,\n) => {\n const shape = {};\n const schema = codeTable.q.schema ?? currentSchema;\n\n changeTables.push({\n codeTable: cloneCodeTableForChange(codeTable),\n dbTable,\n dbTableData: getDbStructureTableData(dbStructure, dbTable),\n schema,\n changeTableAst: {\n type: 'changeTable',\n schema,\n name: codeTable.table,\n shape: shape,\n add: {},\n drop: {},\n },\n pushedAst: false,\n changingColumns: {},\n delayedAst: [],\n });\n\n tableShapes[`${schema}.${codeTable.table}`] = shape;\n};\n\nconst cloneCodeTableForChange = (codeTable: CodeTable) => ({\n ...codeTable,\n // codeTable is a class instance and not all props can be cloned with `...`\n table: codeTable.table,\n shape: Object.fromEntries(\n Object.entries(codeTable.shape).map(([key, column]) => {\n const cloned = Object.create(column as Column);\n cloned.data = {\n ...cloned.data,\n checks: cloned.data.checks && [...cloned.data.checks],\n };\n\n return [key, cloned];\n }),\n ),\n});\n\nconst createTableAst = (\n currentSchema: string,\n table: CodeTable,\n): RakeDbAst.Table => {\n return {\n type: 'table',\n action: 'create',\n schema: table.q.schema === currentSchema ? undefined : table.q.schema,\n comment: table.internal.comment,\n name: table.table,\n shape: makeTableShape(table),\n noPrimaryKey: table.internal.noPrimaryKey ? 'ignore' : 'error',\n ...table.internal.tableData,\n };\n};\n\nconst makeTableShape = (table: CodeTable): ColumnsShape => {\n const shape: ColumnsShape = {};\n for (const key in table.shape) {\n const column = table.shape[key];\n if (!(column instanceof VirtualColumn)) {\n shape[key] = column as Column;\n }\n }\n return shape;\n};\n\nconst processTableChange = async (\n adapter: AdapterBase,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n config: AnyRakeDbConfig,\n changeTableData: ChangeTableData,\n compareSql: CompareSql,\n compareExpressions: CompareExpression[],\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n await processColumns(\n adapter,\n config,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n changeTableData,\n ast,\n currentSchema,\n compareSql,\n typeCastsCache,\n verifying,\n );\n\n processPrimaryKey(config, changeTableData);\n\n processIndexesAndExcludes(config, changeTableData, ast, compareExpressions);\n\n processChecks(ast, changeTableData, compareExpressions);\n\n const { changeTableAst } = changeTableData;\n if (\n Object.keys(changeTableAst.shape).length ||\n Object.keys(changeTableAst.add).length ||\n Object.keys(changeTableAst.drop).length\n ) {\n changeTableData.pushedAst = true;\n ast.push(changeTableAst);\n }\n\n if (changeTableData.delayedAst.length) {\n ast.push(...changeTableData.delayedAst);\n }\n};\n","import { QueryInternal, AdapterBase } from 'pqb';\nimport {\n AnyRakeDbConfig,\n RakeDbAst,\n IntrospectedStructure,\n makeDomainsMap,\n StructureToAstCtx,\n astToMigration,\n} from 'rake-db';\nimport { processSchemas } from './generators/schemas.generator';\nimport { processExtensions } from './generators/extensions.generator';\nimport { processDomains } from './generators/domains.generator';\nimport { processEnums } from './generators/enums.generator';\nimport { processTables } from './generators/tables.generator';\nimport { CodeItems } from './generate';\n\nexport interface ComposeMigrationParams {\n structureToAstCtx: StructureToAstCtx;\n codeItems: CodeItems;\n currentSchema: string;\n internal: QueryInternal;\n verifying?: boolean;\n}\n\n/**\n * This is needed to compare SQLs of table expressions.\n * Need to exclude table columns of pending types, such as enums or domains,\n * that aren't created yet from the SQL comparison.\n * Otherwise, the comparison fails because of the unknown types.\n */\nexport class PendingDbTypes {\n set = new Set<string>();\n add(schemaName: string | undefined = 'public', name: string) {\n this.set.add(`\"${schemaName}\".\"${name}\"`);\n }\n}\n\nexport const composeMigration = async (\n adapter: AdapterBase,\n config: AnyRakeDbConfig,\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n params: ComposeMigrationParams,\n): Promise<string | undefined> => {\n const { structureToAstCtx, currentSchema } = params;\n\n const domainsMap = makeDomainsMap(structureToAstCtx, dbStructure);\n\n await processSchemas(ast, dbStructure, params);\n processExtensions(ast, dbStructure, params);\n\n const pendingDbTypes = new PendingDbTypes();\n\n await processDomains(\n ast,\n adapter,\n domainsMap,\n dbStructure,\n params,\n pendingDbTypes,\n );\n await processEnums(ast, dbStructure, params, pendingDbTypes);\n\n await processTables(\n ast,\n domainsMap,\n adapter,\n dbStructure,\n config,\n params,\n pendingDbTypes,\n );\n\n return astToMigration(currentSchema, config, ast);\n};\n","import { AdapterBase } from 'pqb';\nimport {\n AnyRakeDbConfig,\n createMigrationInterface,\n ChangeCallback,\n introspectDbSchema,\n} from 'rake-db';\nimport { composeMigration, ComposeMigrationParams } from './composeMigration';\nimport { AbortSignal } from './generate';\n\nconst rollbackErr = new Error('Rollback');\n\nexport const verifyMigration = async (\n adapter: AdapterBase,\n config: AnyRakeDbConfig,\n migrationCode: string,\n generateMigrationParams: ComposeMigrationParams,\n): Promise<string | false | undefined> => {\n const migrationFn = new Function('change', migrationCode);\n\n let code: string | false | undefined;\n\n try {\n await adapter.transaction(undefined, async (trx) => {\n const changeFns: ChangeCallback<unknown>[] = [];\n migrationFn((changeCb: ChangeCallback<unknown>) => {\n changeFns.push(changeCb);\n });\n\n const { log } = config;\n config.log = false;\n\n const db = createMigrationInterface(trx, true, config);\n\n config.log = log;\n\n for (const changeFn of changeFns) {\n await changeFn(db, true);\n }\n\n const dbStructure = await introspectDbSchema(trx);\n generateMigrationParams.verifying = true;\n\n try {\n code = await composeMigration(\n trx,\n config,\n [],\n dbStructure,\n generateMigrationParams,\n );\n } catch (err) {\n if (err instanceof AbortSignal) {\n code = false;\n throw rollbackErr;\n }\n throw err;\n }\n\n throw rollbackErr;\n });\n } catch (err) {\n if (err !== rollbackErr) {\n throw err;\n }\n }\n\n return code;\n};\n","import { AnyRakeDbConfig, RakeDbAst, getSchemaAndTableFromName } from 'rake-db';\nimport {\n exhaustive,\n pluralize,\n addCode,\n Code,\n codeToString,\n ColumnToCodeCtx,\n toArray,\n toCamelCase,\n colors,\n} from 'pqb';\nimport { getColumnDbType } from './generators/columns.generator';\nimport { fnOrTableToString } from './generators/foreignKeys.generator';\n\nexport const report = (\n ast: RakeDbAst[],\n config: AnyRakeDbConfig,\n currentSchema: string,\n) => {\n if (!config.logger) return;\n\n const code: Code[] = [];\n\n let green, red, yellow, pale;\n if (typeof config.log === 'object' && config.log.colors === false) {\n green = red = yellow = pale = (s: string) => s;\n } else {\n ({ green, red, yellow, pale } = colors);\n }\n\n for (const a of ast) {\n switch (a.type) {\n case 'table': {\n let hasPrimaryKey = !!a.primaryKey;\n const counters = {\n column: 0,\n index: a.indexes?.length ?? 0,\n exclude: a.excludes?.length ?? 0,\n 'foreign key':\n a.constraints?.reduce<number>(\n (sum, c) => (c.references ? sum + 1 : sum),\n 0,\n ) ?? 0,\n check:\n a.constraints?.reduce<number>(\n (sum, c) => (c.check ? sum + 1 : sum),\n 0,\n ) ?? 0,\n };\n for (const key in a.shape) {\n counters.column++;\n\n const column = a.shape[key];\n if (column.data.primaryKey) {\n hasPrimaryKey = true;\n }\n\n if (column.data.indexes) {\n counters.index += column.data.indexes.length;\n }\n\n if (column.data.excludes) {\n counters.exclude += column.data.excludes.length;\n }\n\n if (column.data.foreignKeys) {\n counters['foreign key'] += column.data.foreignKeys.length;\n }\n\n if (column.data.checks) {\n counters.check += column.data.checks.length;\n }\n }\n\n const summary: string[] = [];\n\n for (const key in counters) {\n const value = counters[key as keyof typeof counters];\n if (value || key === 'column') {\n summary.push(\n `${value} ${pluralize(key, value, key === 'index' ? 'es' : 's')}`,\n );\n }\n }\n\n if (!hasPrimaryKey) {\n summary.push('no primary key');\n }\n\n code.push(\n `${\n a.action === 'create'\n ? green('+ create table')\n : red('- drop table')\n } ${dbItemName(a, currentSchema)} (${summary.join(', ')})`,\n );\n break;\n }\n case 'changeTable': {\n const inner: Code[] = [];\n\n const toCodeCtx: ColumnToCodeCtx = {\n t: 't',\n table: a.name,\n currentSchema,\n migration: true,\n snakeCase: config.snakeCase,\n };\n\n for (const key in a.shape) {\n const changes = toArray(a.shape[key]);\n for (const change of changes) {\n if (change.type === 'add' || change.type === 'drop') {\n const column = change.item;\n const { primaryKey, indexes, excludes, foreignKeys, checks } =\n column.data;\n\n inner.push(\n `${\n change.type === 'add'\n ? green('+ add column')\n : red('- drop column')\n } ${key} ${\n column.data.alias ?? getColumnDbType(column, currentSchema)\n }${column.data.isNullable ? ' nullable' : ''}${\n primaryKey ? ' primary key' : ''\n }${\n foreignKeys\n ? ` references ${foreignKeys\n .map((fk) => {\n return `${fnOrTableToString(\n fk.fnOrTable,\n )}(${fk.foreignColumns.join(', ')})`;\n })\n .join(', ')}`\n : ''\n }${\n indexes?.length\n ? indexes.length === 1\n ? ', has index'\n : `, has ${indexes.length} indexes`\n : ''\n }${\n excludes?.length\n ? excludes.length === 1\n ? ', has exclude'\n : `, has ${excludes.length} excludes`\n : ''\n }${\n checks?.length\n ? `, checks ${checks\n .map((check) => check.sql.toSQL({ values: [] }))\n .join(', ')}`\n : ''\n }`,\n );\n } else if (change.type === 'change') {\n let name = change.from.column?.data.name ?? key;\n if (config.snakeCase) name = toCamelCase(name);\n\n const changes: Code[] = [];\n inner.push(`${yellow('~ change column')} ${name}:`, changes);\n changes.push(`${yellow('from')}: `);\n\n const fromCode = change.from.column!.toCode(toCodeCtx, key);\n for (const code of fromCode) {\n addCode(changes, code);\n }\n\n changes.push(` ${yellow('to')}: `);\n\n const toCode = change.to.column!.toCode(toCodeCtx, key);\n for (const code of toCode) {\n addCode(changes, code);\n }\n } else if (change.type === 'rename') {\n inner.push(\n `${yellow('~ rename column')} ${\n config.snakeCase ? toCamelCase(key) : key\n } ${yellow('=>')} ${change.name}`,\n );\n } else {\n exhaustive(change.type);\n }\n }\n }\n\n if (a.drop.primaryKey) {\n inner.push(\n `${red(`- drop primary key`)} on (${a.drop.primaryKey.columns.join(\n ', ',\n )})`,\n );\n }\n\n if (a.drop.indexes) {\n for (const index of a.drop.indexes) {\n inner.push(\n `${red(\n `- drop${index.options.unique ? ' unique' : ''} index`,\n )} on (${index.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.drop.excludes) {\n for (const exclude of a.drop.excludes) {\n inner.push(\n `${red(`- drop exclude`)} on (${exclude.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.drop.constraints) {\n for (const { references } of a.drop.constraints) {\n if (!references) continue;\n\n const [schema, name] = getSchemaAndTableFromName(\n references.fnOrTable as string,\n );\n\n inner.push(\n `${red(`- drop foreign key`)} on (${references.columns.join(\n ', ',\n )}) to ${dbItemName(\n {\n schema,\n name,\n },\n currentSchema,\n )}(${references.foreignColumns.join(', ')})`,\n );\n }\n\n for (const { check } of a.drop.constraints) {\n if (!check) continue;\n\n inner.push(`${red(`- drop check`)} ${check.toSQL({ values: [] })}`);\n }\n }\n\n if (a.add.primaryKey) {\n inner.push(\n `${green(`+ add primary key`)} on (${a.add.primaryKey.columns.join(\n ', ',\n )})`,\n );\n }\n\n if (a.add.indexes) {\n for (const index of a.add.indexes) {\n inner.push(\n `${green(\n `+ add${index.options.unique ? ' unique' : ''} index`,\n )} on (${index.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.add.excludes) {\n for (const exclude of a.add.excludes) {\n inner.push(\n `${green(`+ add exclude`)} on (${exclude.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.add.constraints) {\n for (const { references } of a.add.constraints) {\n if (!references) continue;\n\n inner.push(\n `${green(`+ add foreign key`)} on (${references.columns.join(\n ', ',\n )}) to ${\n references.fnOrTable as string\n }(${references.foreignColumns.join(', ')})`,\n );\n }\n\n for (const { check } of a.add.constraints) {\n if (!check) continue;\n\n inner.push(\n `${green(`+ add check`)} ${check.toSQL({ values: [] })}`,\n );\n }\n }\n\n code.push(\n `${yellow('~ change table')} ${dbItemName(a, currentSchema)}${\n inner.length ? ':' : ''\n }`,\n );\n\n if (inner.length) {\n code.push(inner);\n }\n\n break;\n }\n case 'schema': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create schema')\n : red('- drop schema')\n } ${a.name}`,\n );\n break;\n }\n case 'renameSchema': {\n code.push(\n `${yellow('~ rename schema')} ${a.from} ${yellow('=>')} ${a.to}`,\n );\n break;\n }\n case 'renameType': {\n code.push(\n `${yellow(\n `~ ${\n a.fromSchema !== a.toSchema\n ? a.from !== a.to\n ? 'change schema and rename'\n : 'change schema of'\n : 'rename'\n } ${a.kind.toLowerCase()}`,\n )} ${dbItemName(\n {\n schema: a.fromSchema,\n name: a.from,\n },\n currentSchema,\n )} ${yellow('=>')} ${dbItemName(\n {\n schema: a.toSchema,\n name: a.to,\n },\n currentSchema,\n )}`,\n );\n break;\n }\n case 'extension': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create extension')\n : red('- drop extension')\n } ${dbItemName(a, currentSchema)}${\n a.version ? ` ${pale(a.version)}` : ''\n }`,\n );\n break;\n }\n case 'enum': {\n code.push(\n `${\n a.action === 'create' ? green('+ create enum') : red('- drop enum')\n } ${dbItemName(a, currentSchema)}: (${a.values.join(', ')})`,\n );\n break;\n }\n case 'enumValues': {\n code.push(\n `${\n a.action === 'add'\n ? green('+ add values to enum')\n : red('- remove values from enum')\n } ${dbItemName(a, currentSchema)}: ${a.values.join(', ')}`,\n );\n break;\n }\n case 'changeEnumValues': {\n if (a.fromValues) {\n code.push(\n `${red('- remove values from enum')} ${dbItemName(\n a,\n currentSchema,\n )}: ${a.fromValues.join(', ')}`,\n );\n }\n if (a.toValues) {\n code.push(\n `${green('+ add values to enum')} ${dbItemName(\n a,\n currentSchema,\n )}: ${a.toValues.join(', ')}`,\n );\n }\n break;\n }\n case 'domain': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create domain')\n : red('- drop domain')\n } ${dbItemName(a, currentSchema)}`,\n );\n break;\n }\n case 'view':\n case 'collation':\n case 'renameEnumValues':\n case 'constraint':\n break;\n case 'renameTableItem': {\n code.push(\n `${yellow(`~ rename ${a.kind.toLowerCase()}`)} on table ${dbItemName(\n { schema: a.tableSchema, name: a.tableName },\n currentSchema,\n )}: ${a.from} ${yellow('=>')} ${a.to}`,\n );\n break;\n }\n default:\n exhaustive(a);\n }\n }\n\n const result = codeToString(code, '', ' ');\n config.logger.log(result);\n};\n\nconst dbItemName = (\n { schema, name }: { schema?: string; name: string },\n currentSchema: string,\n) => {\n return schema && schema !== currentSchema ? `${schema}.${name}` : name;\n};\n","import {\n AdapterBase,\n PickQueryShape,\n toCamelCase,\n ArrayColumn,\n ColumnsShape,\n Column,\n defaultSchemaConfig,\n DomainColumn,\n PickQueryInternal,\n PickQueryQ,\n Query,\n QueryInternal,\n UnknownColumn,\n} from 'pqb';\nimport {\n AnyRakeDbConfig,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n introspectDbSchema,\n IntrospectedStructure,\n makeFileVersion,\n makeStructureToAstCtx,\n migrate,\n migrateAndClose,\n RakeDbAst,\n writeMigrationFile,\n} from 'rake-db';\nimport { EnumItem } from './generators/enums.generator';\nimport { CodeDomain } from './generators/domains.generator';\nimport { composeMigration, ComposeMigrationParams } from './composeMigration';\nimport { verifyMigration } from './verifyMigration';\nimport { report } from './reportGeneratedMigration';\nimport path from 'node:path';\nimport { pathToFileURL } from 'url';\n\nexport interface CodeTable\n extends PickQueryQ,\n PickQueryShape,\n PickQueryInternal {\n table: string;\n}\n\nexport interface CodeItems {\n schemas: Set<string>;\n enums: Map<string, EnumItem>;\n tables: CodeTable[];\n domains: CodeDomain[];\n}\n\ninterface AfterPull {\n adapter: AdapterBase;\n version: string;\n}\n\nexport interface DbInstance {\n $qb: Query;\n}\n\nexport class AbortSignal extends Error {}\n\nexport const generate = async (\n adapters: AdapterBase[],\n config: AnyRakeDbConfig,\n args: string[],\n afterPull?: AfterPull,\n): Promise<void> => {\n let { dbPath } = config;\n if (!dbPath || !config.baseTable) throw invalidConfig(config);\n if (!adapters.length) throw new Error(`Database options must not be empty`);\n\n if (!dbPath.endsWith('.ts')) dbPath += '.ts';\n\n let migrationName = args[0] ?? 'generated';\n let up: boolean;\n if (migrationName === 'up') {\n up = true;\n migrationName = 'generated';\n } else {\n up = args[1] === 'up';\n }\n\n if (afterPull) {\n adapters = [afterPull.adapter];\n }\n\n const { dbStructure } = await migrateAndPullStructures(\n adapters,\n config,\n afterPull,\n );\n\n const [adapter] = adapters;\n const currentSchema = adapter.schema ?? 'public';\n\n const db = await getDbFromConfig(config, dbPath);\n const { columnTypes, internal } = db.$qb;\n\n const codeItems = await getActualItems(\n db,\n currentSchema,\n internal,\n columnTypes,\n );\n\n const structureToAstCtx = makeStructureToAstCtx(config, currentSchema);\n\n const generateMigrationParams: ComposeMigrationParams = {\n structureToAstCtx,\n codeItems,\n currentSchema,\n internal,\n };\n\n const ast: RakeDbAst[] = [];\n\n let migrationCode;\n try {\n migrationCode = await composeMigration(\n adapter,\n config,\n ast,\n dbStructure,\n generateMigrationParams,\n );\n } catch (err) {\n if (err instanceof AbortSignal) {\n await closeAdapters(adapters);\n return;\n }\n throw err;\n }\n\n if (migrationCode && !afterPull) {\n const result = await verifyMigration(\n adapter,\n config,\n migrationCode,\n generateMigrationParams,\n );\n\n if (result !== undefined) {\n throw new Error(\n `Failed to verify generated migration: some of database changes were not applied properly. This is a bug, please open an issue, attach the following migration code:\\n${migrationCode}${\n result === false ? '' : `\\nAfter applying:\\n${result}`\n }`,\n );\n }\n }\n\n const { logger } = config;\n\n if ((!up || !migrationCode) && !afterPull) await closeAdapters(adapters);\n\n if (!migrationCode) {\n logger?.log('No changes were detected');\n return;\n }\n\n const version = afterPull?.version ?? (await makeFileVersion({}, config));\n\n const delayLog: string[] = [];\n await writeMigrationFile(\n {\n ...config,\n logger: logger ? { ...logger, log: (msg) => delayLog.push(msg) } : logger,\n },\n version,\n migrationName,\n migrationCode,\n );\n\n report(ast, config, currentSchema);\n\n if (logger) {\n for (const msg of delayLog) {\n logger.log(`\\n${msg}`);\n }\n }\n\n if (up) {\n for (const adapter of adapters) {\n await migrateAndClose({ adapter, config });\n }\n } else if (!afterPull) {\n await closeAdapters(adapters);\n }\n};\n\nconst invalidConfig = (config: AnyRakeDbConfig) =>\n new Error(\n `\\`${\n config.dbPath ? 'baseTable' : 'dbPath'\n }\\` setting must be set in the migrations config for the generator to work`,\n );\n\nconst getDbFromConfig = async (\n config: AnyRakeDbConfig,\n dbPath: string,\n): Promise<DbInstance> => {\n const module = await config.import(\n pathToFileURL(path.resolve(config.basePath, dbPath)).toString(),\n );\n const db = (module as { [K: string]: DbInstance })[\n config.dbExportedAs ?? 'db'\n ];\n if (!db?.$qb) {\n throw new Error(\n `Unable to import OrchidORM instance as ${\n config.dbExportedAs ?? 'db'\n } from ${config.dbPath}`,\n );\n }\n return db;\n};\n\nconst migrateAndPullStructures = async (\n adapters: AdapterBase[],\n config: AnyRakeDbConfig,\n afterPull?: AfterPull,\n): Promise<{\n dbStructure: IntrospectedStructure;\n}> => {\n if (afterPull) {\n return {\n dbStructure: {\n schemas: [],\n tables: [],\n views: [],\n indexes: [],\n excludes: [],\n constraints: [],\n triggers: [],\n extensions: [],\n enums: [],\n domains: [],\n collations: [],\n },\n };\n }\n\n for (const adapter of adapters) {\n await migrate({ adapter, config });\n }\n\n const dbStructures = await Promise.all(\n adapters.map((adapter) => introspectDbSchema(adapter)),\n );\n\n const dbStructure = dbStructures[0];\n for (let i = 1; i < dbStructures.length; i++) {\n compareDbStructures(dbStructure, dbStructures[i], i);\n }\n\n return { dbStructure };\n};\n\nconst compareDbStructures = (\n a: unknown,\n b: unknown,\n i: number,\n path?: string,\n) => {\n let err: true | undefined;\n if (typeof a !== typeof b) {\n err = true;\n }\n\n if (!a || typeof a !== 'object') {\n if (a !== b) {\n err = true;\n }\n } else {\n if (Array.isArray(a)) {\n for (let n = 0, len = a.length; n < len; n++) {\n compareDbStructures(\n a[n],\n (b as unknown[])[n],\n i,\n path ? `${path}[${n}]` : String(n),\n );\n }\n } else {\n for (const key in a) {\n compareDbStructures(\n a[key as keyof typeof a],\n (b as Record<string, unknown>)[key],\n i,\n path ? `${path}.${key}` : key,\n );\n }\n }\n }\n\n if (err) {\n throw new Error(`${path} in the db 0 does not match db ${i}`);\n }\n};\n\nconst getActualItems = async (\n db: DbInstance,\n currentSchema: string,\n internal: QueryInternal,\n columnTypes: unknown,\n): Promise<CodeItems> => {\n const tableNames = new Set<string>();\n const habtmTables = new Map<string, CodeTable>();\n\n const codeItems: CodeItems = {\n schemas: new Set(undefined),\n enums: new Map(),\n tables: [],\n domains: [],\n };\n\n const domains = new Map<string, CodeDomain>();\n\n for (const key in db) {\n if (key[0] === '$') continue;\n\n const table = db[key as keyof typeof db] as Query;\n\n if (!table.table) {\n throw new Error(`Table ${key} is missing table property`);\n }\n\n const { schema } = table.q;\n const name = concatSchemaAndName({ schema, name: table.table });\n if (tableNames.has(name)) {\n throw new Error(`Table ${name} is defined more than once`);\n }\n\n tableNames.add(name);\n\n if (schema) codeItems.schemas.add(schema);\n\n codeItems.tables.push(table as never);\n\n for (const key in table.relations) {\n const column = table.shape[key];\n // column won't be set for has and belongs to many\n if (column && 'joinTable' in column) {\n processHasAndBelongsToManyColumn(column, habtmTables, codeItems);\n }\n }\n\n for (const key in table.shape) {\n const column = table.shape[key] as Column;\n // remove computed columns from the shape\n if (column.data.computed) {\n delete table.shape[key];\n } else if (column instanceof DomainColumn) {\n const [schemaName = currentSchema, name] = getSchemaAndTableFromName(\n column.dataType,\n );\n domains.set(column.dataType, {\n schemaName,\n name,\n column: (column.data.as ??\n new UnknownColumn(defaultSchemaConfig)) as Column,\n });\n } else {\n const en =\n column.dataType === 'enum'\n ? column\n : column instanceof ArrayColumn &&\n column.data.item.dataType === 'enum'\n ? column.data.item\n : undefined;\n\n if (en) {\n processEnumColumn(en, currentSchema, codeItems);\n }\n }\n }\n }\n\n if (internal.extensions) {\n for (const extension of internal.extensions) {\n const [schema] = getSchemaAndTableFromName(extension.name);\n if (schema) codeItems.schemas.add(schema);\n }\n }\n\n if (internal.domains) {\n for (const key in internal.domains) {\n const [schemaName = currentSchema, name] = getSchemaAndTableFromName(key);\n const column = internal.domains[key](columnTypes);\n\n domains.set(key, {\n schemaName,\n name,\n column,\n });\n }\n }\n\n for (const domain of domains.values()) {\n codeItems.schemas.add(domain.schemaName);\n codeItems.domains.push(domain);\n }\n\n return codeItems;\n};\n\nconst processEnumColumn = (\n column: Column.Pick.QueryColumn,\n currentSchema: string,\n codeItems: CodeItems,\n) => {\n const { enumName, options } = column as unknown as {\n enumName: string;\n options: [string, ...string[]];\n };\n\n const [schema, name] = getSchemaAndTableFromName(enumName);\n const enumSchema = schema ?? currentSchema;\n\n codeItems.enums.set(`${enumSchema}.${name}`, {\n schema: enumSchema,\n name,\n values: options,\n });\n if (schema) codeItems.schemas.add(schema);\n};\n\nconst processHasAndBelongsToManyColumn = (\n column: Column.Pick.QueryColumn & { joinTable: unknown },\n habtmTables: Map<string, CodeTable>,\n codeItems: CodeItems,\n) => {\n const q = (column as { joinTable: CodeTable }).joinTable;\n const prev = habtmTables.get(q.table);\n if (prev) {\n for (const key in q.shape) {\n if (q.shape[key].dataType !== prev.shape[key]?.dataType) {\n throw new Error(\n `Column ${key} in ${q.table} in hasAndBelongsToMany relation does not match with the relation on the other side`,\n );\n }\n }\n return;\n }\n habtmTables.set(q.table, q);\n\n const joinTable = Object.create(q);\n\n const shape: ColumnsShape = {};\n for (const key in joinTable.shape) {\n const column = Object.create(joinTable.shape[key]);\n column.data = {\n ...column.data,\n name: column.data.name ?? key,\n identity: undefined,\n primaryKey: undefined,\n default: undefined,\n };\n shape[toCamelCase(key)] = column;\n }\n joinTable.shape = shape;\n joinTable.internal = {\n ...joinTable.internal,\n tableData: {\n ...joinTable.internal.tableData,\n primaryKey: {\n columns: Object.keys(shape),\n },\n },\n noPrimaryKey: false,\n };\n\n codeItems.tables.push(joinTable);\n\n return;\n};\n\nconst closeAdapters = (adapters: AdapterBase[]) => {\n return Promise.all(adapters.map((x) => x.close()));\n};\n","import {\n columnsShapeToCode,\n pushTableDataCode,\n TableData,\n Code,\n codeToString,\n getImportPath,\n RecordString,\n singleQuote,\n toCamelCase,\n toPascalCase,\n} from 'pqb';\nimport { AnyRakeDbConfig, RakeDbAst } from 'rake-db';\nimport path from 'node:path';\n\ninterface TableInfo {\n key: string;\n dbTableName: string;\n name: string;\n className: string;\n path: string;\n}\n\ninterface TableInfos {\n [dbTableName: string]: TableInfo;\n}\n\nexport interface AppCodeGenTable extends TableInfo {\n content: string;\n}\n\nexport interface AppCodeGenTables {\n [K: string]: AppCodeGenTable;\n}\n\ninterface FKeys {\n [K: string]: { table: TableInfo; references: TableData.References }[];\n}\n\nexport const getTableInfosAndFKeys = (\n asts: RakeDbAst[],\n config: AnyRakeDbConfig,\n): { tableInfos: TableInfos; fkeys: FKeys } => {\n const generateTableTo =\n config.generateTableTo ?? ((name: string) => `./tables/${name}.table.ts`);\n\n const tableInfos: TableInfos = {};\n const fkeys: FKeys = {};\n for (const ast of asts) {\n if (ast.type === 'table') {\n const tableKey = toCamelCase(ast.name);\n const dbTableName = ast.schema ? `${ast.schema}.${ast.name}` : ast.name;\n let tablePath = path.resolve(config.basePath, generateTableTo(tableKey));\n if (!tablePath.endsWith('.ts')) tablePath += '.ts';\n\n const name = toPascalCase(ast.name);\n\n const info: TableInfo = {\n dbTableName,\n key: tableKey,\n path: tablePath,\n name,\n className: `${name}Table`,\n };\n\n tableInfos[dbTableName] = info;\n\n if (ast.constraints) {\n for (const { references } of ast.constraints) {\n if (!references) continue;\n\n (fkeys[references.fnOrTable as string] ??= []).push({\n table: info,\n references,\n });\n }\n }\n }\n }\n\n return { tableInfos, fkeys };\n};\n\nexport const appCodeGenTable = (\n tableInfos: TableInfos,\n fkeys: FKeys,\n ast: RakeDbAst.Table,\n baseTablePath: string,\n baseTableExportedAs: string,\n currentSchema: string,\n): AppCodeGenTable => {\n const tableInfo =\n tableInfos[ast.schema ? `${ast.schema}.${ast.name}` : ast.name];\n\n const imports: RecordString = {\n 'orchid-orm': 'Selectable, Insertable, Updatable',\n [getImportPath(tableInfo.path, baseTablePath)]: baseTableExportedAs,\n };\n\n const props: Code[] = [];\n\n if (ast.schema) {\n props.push(`schema = ${singleQuote(ast.schema)};`);\n }\n\n props.push(`readonly table = ${singleQuote(ast.name)};`);\n\n if (ast.comment) {\n props.push(`comment = ${singleQuote(ast.comment)};`);\n }\n\n if (ast.noPrimaryKey === 'ignore') {\n props.push('noPrimaryKey = true;');\n }\n\n const hasTableData = Boolean(\n ast.primaryKey ||\n ast.indexes?.length ||\n ast.excludes?.length ||\n ast.constraints?.length,\n );\n\n const shapeCode = columnsShapeToCode(\n { t: 't', table: ast.name, currentSchema },\n ast.shape,\n );\n\n props.push(\n `columns = this.setColumns(${hasTableData ? '\\n ' : ''}(t) => ({`,\n hasTableData ? [shapeCode] : shapeCode,\n hasTableData ? ' }),' : '}));',\n );\n\n if (hasTableData) {\n props.push(pushTableDataCode([], ast), ');');\n }\n\n const relations: Code[] = [];\n\n const fullTableName = ast.schema ? `${ast.schema}.${ast.name}` : ast.name;\n const belongsTo = fkeys[fullTableName];\n if (belongsTo) {\n for (const { table, references } of belongsTo) {\n imports[getImportPath(tableInfo.path, table.path)] = table.className;\n\n relations.push(\n `${table.key}: this.belongsTo(() => ${table.className}, {`,\n [\n `columns: [${references.foreignColumns\n .map(singleQuote)\n .join(', ')}],`,\n `references: [${references.columns.map(singleQuote).join(', ')}],`,\n ],\n '}),',\n );\n }\n }\n\n if (ast.constraints) {\n for (const { references } of ast.constraints) {\n if (!references) continue;\n\n const table = tableInfos[references.fnOrTable as string];\n imports[getImportPath(tableInfo.path, table.path)] = table.className;\n\n relations.push(\n `${table.key}: this.hasMany(() => ${table.className}, {`,\n [\n `columns: [${references.columns.map(singleQuote).join(', ')}],`,\n `references: [${references.foreignColumns\n .map(singleQuote)\n .join(', ')}],`,\n ],\n '}),',\n );\n }\n }\n\n if (relations.length) {\n props.push('', 'relations = {', relations, '};');\n }\n\n const importsCode = importsToCode(imports);\n\n const { name, className } = tableInfo;\n const code: Code[] = [\n `export type ${name} = Selectable<${className}>;\nexport type ${name}New = Insertable<${className}>;\nexport type ${name}Update = Updatable<${className}>;\n\nexport class ${className} extends ${baseTableExportedAs} {`,\n props,\n '}\\n',\n ];\n\n return {\n ...tableInfo,\n content: importsCode + '\\n\\n' + codeToString(code, '', ' '),\n };\n};\n\nfunction importsToCode(imports: Record<string, string>): string {\n return Object.entries(imports)\n .map(([from, name]) => `import { ${name} } from '${from}';`)\n .join('\\n');\n}\n","import fs from 'fs/promises';\nimport {\n CallExpression,\n Expression,\n ImportDeclaration,\n NamedImports,\n NodeArray,\n ObjectLiteralExpression,\n Statement,\n VariableStatement,\n} from 'typescript';\nimport { AppCodeGenTables } from './tables.appCodeGenerator';\nimport { DbExtension, getImportPath, quoteObjectKey, singleQuote } from 'pqb';\nimport { RakeDbAst } from 'rake-db';\n\n// importing directly won't work after compiling\nimport typescript from 'typescript';\nconst { createSourceFile, ScriptTarget, SyntaxKind } = typescript;\n\ntype Change = [from: number, to: number] | string;\n\nexport const appCodeGenUpdateDbFile = async (\n dbPath: string,\n tables: AppCodeGenTables,\n extensions: DbExtension[],\n domains: RakeDbAst.Domain[],\n currentSchema: string,\n): Promise<string | undefined> => {\n const content = await fs.readFile(dbPath, 'utf-8');\n const statements = getTsStatements(content);\n const importName = getOrchidOrmImportName(statements);\n if (!importName) {\n throw new Error(`Main file does not contain import of orchid-orm`);\n }\n const { config, tablesList } = getOrchidOrmArgs(importName, statements);\n\n const changes: Change[] = [];\n\n let replacedConfig: string | undefined;\n if (extensions.length || domains.length) {\n let code = content.slice(config.pos, config.end).trim();\n\n if (code[0] !== '{') code = `{...${code}}`;\n\n code = '{\\n ' + code.slice(1, -1).trim();\n\n if (!code.endsWith(',')) code += ',';\n\n if (extensions.length) {\n code += `\\n extensions: [${extensions\n .map((ext) =>\n ext.version\n ? `{ ${quoteObjectKey(ext.name, false)}: '${ext.version}' }`\n : singleQuote(ext.name),\n )\n .join(', ')}],`;\n }\n\n if (domains.length) {\n code += `\\n domains: {\\n ${domains\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map(\n (ast) =>\n `${quoteObjectKey(\n ast.schema ? `${ast.schema}.${ast.name}` : ast.name,\n false,\n )}: (t) => ${ast.baseType.toCode(\n { t: 't', table: ast.name, currentSchema },\n ast.baseType.data.name ?? '',\n )},`,\n )\n .join('\\n ')}\\n },`;\n }\n\n replacedConfig = code + '\\n}';\n }\n\n const tablesChanges = makeTablesListChanges(\n content,\n statements,\n tablesList,\n tables,\n dbPath,\n );\n\n if (tablesChanges) {\n addChange(\n content,\n changes,\n tablesChanges.imports.pos,\n tablesChanges.imports.text,\n );\n }\n\n if (replacedConfig) {\n replaceContent(content, changes, config.pos, config.end, replacedConfig);\n }\n\n if (tablesChanges) {\n addChange(\n content,\n changes,\n tablesChanges.tablesList.pos,\n tablesChanges.tablesList.text,\n );\n }\n\n return applyChanges(content, changes);\n};\n\nconst getTsStatements = (content: string): NodeArray<Statement> => {\n return createSourceFile('file.ts', content, ScriptTarget.Latest, true)\n .statements;\n};\n\nconst getOrchidOrmImportName = (\n statements: NodeArray<Statement>,\n): string | undefined => {\n for (const node of statements) {\n if (node.kind !== SyntaxKind.ImportDeclaration) continue;\n\n const imp = node as ImportDeclaration;\n const source = imp.moduleSpecifier.getText().slice(1, -1);\n if (source !== 'orchid-orm') continue;\n\n if (!imp.importClause) continue;\n\n const elements = (imp.importClause.namedBindings as NamedImports)?.elements;\n\n if (!elements) imp;\n\n for (const element of elements) {\n if (\n element.propertyName?.escapedText === 'orchidORM' ||\n element.name.escapedText === 'orchidORM'\n ) {\n return element.name.escapedText.toString();\n }\n }\n }\n\n return;\n};\n\nconst makeTablesListChanges = (\n content: string,\n statements: NodeArray<Statement>,\n object: ObjectLiteralExpression,\n tables: AppCodeGenTables,\n dbPath: string,\n) => {\n const spaces = getTablesListSpaces(content, object);\n\n let imports = '';\n let tablesList = '';\n const prependComma =\n object.properties.length && !object.properties.hasTrailingComma;\n const tablesListNewLine = content\n .slice(object.properties.end, object.end)\n .includes('\\n');\n\n const tablesArr = Object.values(tables);\n for (let i = 0; i < tablesArr.length; i++) {\n const { path, className, key } = tablesArr[i];\n const importPath = getImportPath(dbPath, path);\n\n imports += `\\nimport { ${className} } from '${importPath}';`;\n\n tablesList += `${\n i === 0 && prependComma ? ',' : ''\n }\\n${spaces} ${key}: ${className},`;\n\n if (i === tablesArr.length - 1 && !tablesListNewLine) {\n tablesList += `\\n${spaces}`;\n }\n }\n\n if (!imports.length) return;\n\n let importPos = 0;\n for (const node of statements) {\n if (node.kind === SyntaxKind.ImportDeclaration) {\n importPos = node.end;\n }\n }\n\n return {\n imports: { pos: importPos, text: imports },\n tablesList: { pos: object.properties.end, text: tablesList },\n };\n};\n\nconst getTablesListSpaces = (content: string, object: Expression): string => {\n const lines = content.slice(0, object.end).split('\\n');\n const last = lines[lines.length - 1];\n return last.match(/^\\s+/)?.[0] || '';\n};\n\nconst getOrchidOrmArgs = (\n importName: string,\n statements: NodeArray<Statement>,\n): { config: Expression; tablesList: ObjectLiteralExpression } => {\n for (const v of statements) {\n if (v.kind !== SyntaxKind.VariableStatement) continue;\n\n for (const node of (v as VariableStatement).declarationList.declarations) {\n const call = node.initializer as CallExpression;\n if (call?.kind !== SyntaxKind.CallExpression) continue;\n\n if (call.expression.getText() !== importName) continue;\n\n if (call.arguments.length !== 2) {\n throw new Error(\n 'Invalid number of arguments when initializing orchid orm',\n );\n }\n\n const object = call.arguments[1] as ObjectLiteralExpression;\n if (object?.kind !== SyntaxKind.ObjectLiteralExpression) {\n throw new Error(\n 'Second argument of orchidORM must be an object literal',\n );\n }\n\n return { config: call.arguments[0], tablesList: object };\n }\n }\n\n throw new Error('List of tables is not found in main file');\n};\n\nconst addChange = (\n content: string,\n changes: Change[],\n at: number,\n text: string,\n end = at,\n) => {\n if (changes.length === 0) {\n changes.push([0, at], text, [end, content.length]);\n } else {\n const last = changes[changes.length - 1] as [number, number];\n last[1] = at;\n changes.push(text, [end, content.length]);\n }\n};\n\nconst replaceContent = (\n content: string,\n changes: Change[],\n from: number,\n to: number,\n text: string,\n) => {\n addChange(content, changes, from, text, to);\n};\n\nconst applyChanges = (content: string, changes: Change[]) => {\n return changes.length\n ? changes\n .map((item) =>\n typeof item === 'string' ? item : content.slice(item[0], item[1]),\n )\n .join('')\n : content;\n};\n","import { DbExtension, AdapterBase, pathToLog } from 'pqb';\nimport {\n AnyRakeDbConfig,\n makeFileVersion,\n makeStructureToAstCtx,\n RakeDbAst,\n saveMigratedVersion,\n SilentQueries,\n structureToAst,\n} from 'rake-db';\nimport fs from 'fs/promises';\nimport path from 'node:path';\nimport {\n AppCodeGenTable,\n appCodeGenTable,\n AppCodeGenTables,\n getTableInfosAndFKeys,\n} from './appCodeGenerators/tables.appCodeGenerator';\nimport { appCodeGenUpdateDbFile } from './appCodeGenerators/dbFile.appCodeGenerator';\nimport { generate } from '../generate/generate';\n\nexport const pull = async (\n adapters: AdapterBase[],\n config: AnyRakeDbConfig,\n) => {\n if (!config.dbPath || !config.baseTable) {\n throw new Error(\n `\\`${\n config.dbPath ? 'baseTable' : 'dbPath'\n }\\` setting must be set in the migrations config for pull command`,\n );\n }\n\n const baseTablePath = config.baseTable.getFilePath();\n const baseTableExportedAs = config.baseTable.exportAs;\n\n const [adapter] = adapters;\n const currentSchema = adapter.schema || 'public';\n\n const ctx = makeStructureToAstCtx(config, currentSchema);\n\n const asts = await structureToAst(ctx, adapter, config);\n\n const { tableInfos, fkeys } = getTableInfosAndFKeys(asts, config);\n\n const exclusiveWriteOptions = { flag: 'wx' as const };\n const pendingFileWrites: [\n path: string,\n content: string,\n options?: { flag: 'wx' },\n ][] = [];\n\n const tables: AppCodeGenTables = {};\n const extensions: DbExtension[] = [];\n const domains: RakeDbAst.Domain[] = [];\n\n let firstTable: undefined | AppCodeGenTable;\n for (const ast of asts) {\n switch (ast.type) {\n case 'table': {\n const table = appCodeGenTable(\n tableInfos,\n fkeys,\n ast,\n baseTablePath,\n baseTableExportedAs,\n currentSchema,\n );\n tables[table.key] = table;\n if (!firstTable) firstTable = table;\n pendingFileWrites.push([\n table.path,\n table.content,\n exclusiveWriteOptions,\n ]);\n break;\n }\n case 'extension': {\n extensions.push({\n name: ast.schema ? `${ast.schema}.${ast.name}` : ast.name,\n version: ast.version,\n });\n break;\n }\n case 'domain': {\n domains.push(ast);\n break;\n }\n }\n }\n\n if (!firstTable && !extensions.length && !domains.length) {\n await adapter.close();\n return;\n }\n\n let dbPath = path.resolve(config.basePath, config.dbPath);\n if (!dbPath.endsWith('.ts')) dbPath += '.ts';\n const content = await appCodeGenUpdateDbFile(\n dbPath,\n tables,\n extensions,\n domains,\n currentSchema,\n );\n if (content) pendingFileWrites.push([dbPath, content]);\n\n if (firstTable) {\n await fs.mkdir(path.dirname(firstTable.path), { recursive: true });\n }\n\n await Promise.all(\n pendingFileWrites.map(([path, content, options]) =>\n fs.writeFile(path, content, options).then(() => {\n config.logger?.log(`Created ${pathToLog(path)}`);\n }),\n ),\n );\n\n const version = await makeFileVersion({}, config);\n await generate(adapters, config, ['pull'], { adapter, version });\n\n // save migrated version into all configured databases\n await Promise.all(\n adapters.map(async (adapter) => {\n const silentAdapter = adapter as unknown as SilentQueries;\n silentAdapter.silentArrays = adapter.arrays;\n await saveMigratedVersion(silentAdapter, version, 'pull.ts', config);\n await adapter.close();\n }),\n );\n};\n","import { rakeDbCommands } from 'rake-db';\nimport { generate } from './generate/generate';\nimport { pull } from './pull/pull';\nimport {\n DefaultColumnTypes,\n DefaultSchemaConfig,\n ColumnSchemaConfig,\n} from 'pqb';\n\nrakeDbCommands.g = rakeDbCommands.generate = {\n run: generate,\n help: 'gen migration from OrchidORM tables',\n helpArguments: {\n 'no arguments': '\"generated\" is a default file name',\n 'migration-name': 'set migration file name',\n up: 'auto-apply migration',\n 'migration-name up': 'with a custom name and apply it',\n },\n helpAfter: 'reset',\n};\n\nrakeDbCommands.pull.run = pull;\nrakeDbCommands.pull.help =\n 'generate ORM tables and a migration for an existing database';\n\ndeclare module 'rake-db' {\n export interface RakeDbConfig<\n SchemaConfig extends ColumnSchemaConfig,\n CT = DefaultColumnTypes<DefaultSchemaConfig>,\n > {\n dbPath?: string;\n dbExportedAs?: string;\n generateTableTo?(tableName: string): string;\n }\n\n export interface InputRakeDbConfigBase<\n SchemaConfig extends ColumnSchemaConfig,\n CT,\n > {\n dbPath?: string;\n dbExportedAs?: string;\n generateTableTo?(tableName: string): string;\n }\n}\n"],"names":["name","item","column","key","type","codeEnum","i","codeTable","changes","code","adapter","path","content"],"mappings":";;;;;;;;AAiBa,MAAA,qBAAA,GAAwB,OACnC,gBAAA,EACA,OACG,KAAA;AACH,EAAI,IAAA,CAAC,iBAAiB,MAAQ,EAAA,OAAA;AAE9B,EAAA,IAAI,EAAK,GAAA,CAAA,CAAA;AACT,EAAA,KAAA,MAAW,EAAE,MAAA,EAAQ,OAAS,EAAA,MAAA,MAAY,gBAAkB,EAAA;AAC1D,IAAM,MAAA,QAAA,GAAW,gBAAgB,EAAI,EAAA,CAAA,CAAA,CAAA;AACrC,IAAA,MAAM,SAAoB,EAAC,CAAA;AAI3B,IAAA,MAAM,eAAkB,GAAA;AAAA,MACtB,CAAA,sBAAA,EAAyB,QAAQ,CAAA,YAAA,EAAe,OAC7C,CAAA,GAAA;AAAA,QACC,CAAC,EAAE,IAAA,EAAM,MAAO,EAAA,EAAG,CACjB,KAAA,CAAA,EAAG,IAAI,CAAA,WAAA,EAAc,CAAC,CAAA,IAAA,EAAO,MAC1B,CAAA,GAAA;AAAA,UACC,CAAC,CAAG,EAAA,CAAA,KACF,CACE,CAAA,EAAA,OAAO,MAAM,QAAW,GAAA,CAAA,GAAI,CAAE,CAAA,KAAA,CAAM,EAAE,MAAO,EAAC,CAChD,CAAc,WAAA,EAAA,CAAC,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,SACxB,CACC,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,OAEhB,CAAA,IAAA,CAAK,IAAI,CAAC,SAAS,MAAM,CAAA,CAAA,CAAA;AAAA,MAC5B,0BAA0B,QAAQ,CAAA,IAAA,CAAA;AAAA,MAClC,aAAa,QAAQ,CAAA,CAAA;AAAA,KACvB,CAAE,KAAK,IAAI,CAAA,CAAA;AAEX,IAAA,MAAM,SAAS,MAAM,OAAA,CAAQ,MAAM,eAAiB,EAAA,MAAA,EAAQ,QAAQ,CAAE,CAAA,IAAA;AAAA,MACpE,CAAC,GAAS,KAAA,GAAA,CAAiC,CAAC,CAAA;AAAA,MAC5C,OAAO,GAAQ,KAAA;AAGb,QAAI,IAAA,GAAA,CAAI,SAAS,OAAS,EAAA;AACxB,UAAM,MAAA,GAAA,CAAA;AAAA,SACR;AAAA,OACF;AAAA,KACF,CAAA;AAEA,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAO,MAAA,EAAA,CAAA;AACP,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,MAAM,KAAQ,GAAA,0BAAA;AAAA,MACZ,MAAA,CAAO,IAAK,CAAA,CAAC,CAAE,CAAA,CAAA;AAAA,MACf,OAAA,CAAQ,CAAC,CAAE,CAAA,MAAA;AAAA,KACb,CAAA;AACA,IAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AAAA,GACd;AACF,CAAA,CAAA;AAEa,MAAA,0BAAA,GAA6B,CACxC,SAAA,EACA,MACG,KAAA;AACH,EAAA,IAAI,GAAM,GAAA,CAAA,CAAA;AACV,EAAA,MAAM,GAAM,GAAA,4CAAA,CAAA;AACZ,EAAI,IAAA,KAAA,CAAA;AACJ,EAAA,IAAI,IAAO,GAAA,EAAA,CAAA;AACX,EAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,EAAA,MAAM,OAAU,GAAA,MAAA,CAAO,GAAI,CAAA,MAAM,IAAI,CAAA,CAAA;AACrC,EAAA,OAAQ,KAAQ,GAAA,GAAA,CAAI,IAAK,CAAA,SAAS,CAAI,EAAA;AACpC,IAAM,MAAA,GAAA,GAAM,SAAU,CAAA,KAAA,CAAM,GAAK,EAAA,GAAA,CAAI,SAAY,GAAA,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,CAAA,CAAE,IAAK,EAAA,CAAA;AACvE,IAAA,MAAM,GAAM,GAAA,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA,CAAA;AAC9B,IAAI,IAAA,GAAA,CAAI,WAAW,CAAG,EAAA;AACpB,MAAO,IAAA,GAAA,GAAA,CAAA;AACP,MAAQ,KAAA,GAAA,CAAA,CAAA;AAAA,KACH,MAAA;AACL,MAAA,IACE,IAAS,KAAA,GAAA;AAAA;AAAA,MAGT,EACE,IAAA,CAAK,UAAW,CAAA,GAAG,CACnB,IAAA,IAAA,CAAK,QAAS,CAAA,GAAG,CACjB,IAAA,IAAA,CAAK,KAAM,CAAA,CAAA,EAAG,CAAE,CAAA,CAAA,KAAM,GAExB,CAAA,IAAA,EAAE,GAAI,CAAA,UAAA,CAAW,GAAG,CAAA,IAAK,GAAI,CAAA,QAAA,CAAS,GAAG,CAAA,IAAK,GAAI,CAAA,KAAA,CAAM,CAAG,EAAA,CAAA,CAAE,MAAM,IACnE,CAAA,EAAA;AACA,QAAA,OAAA,CAAQ,KAAK,CAAI,GAAA,KAAA,CAAA;AAAA,OACnB;AACA,MAAA,KAAA,EAAA,CAAA;AAAA,KACF;AACA,IAAA,GAAA,GAAM,GAAI,CAAA,SAAA,CAAA;AAAA,GACZ;AAEA,EAAM,MAAA,aAAA,GAAgB,OAAQ,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAC1C,EAAO,OAAA,aAAA,KAAkB,KAAK,KAAY,CAAA,GAAA,aAAA,CAAA;AAC5C,CAAA,CAAA;AAEO,MAAM,oBAAuB,GAAA,CAClC,IACA,EAAA,IAAA,EACA,MACA,SACoB,KAAA;AACpB,EAAI,IAAA,SAAA,EAAiB,MAAA,IAAI,WAAY,EAAA,CAAA;AAErC,EAAI,IAAA,OAAA,GAAU,KAAK,MAAS,GAAA,CAAA,CAAA;AAC5B,EAAA,KAAA,MAAW,QAAQ,IAAM,EAAA;AACvB,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,MAAS,GAAA,CAAA,GAAI,IAAK,CAAA,MAAA,CAAA;AACrC,IAAI,IAAA,KAAA,GAAQ,SAAmB,OAAA,GAAA,KAAA,CAAA;AAAA,GACjC;AAEA,EAAA,IAAI,GAAM,GAAA,CAAA,CAAA;AACV,EAAM,MAAA,GAAA,GAAM,KAAK,MAAS,GAAA,CAAA,CAAA;AAC1B,EAAA,KAAA,MAAWA,SAAQ,IAAM,EAAA;AACvB,IAAIA,IAAAA,KAAAA,CAAK,MAAS,GAAA,GAAA,GAAM,GAAK,EAAA;AAC3B,MAAA,GAAA,GAAMA,MAAK,MAAS,GAAA,GAAA,CAAA;AAAA,KACtB;AAAA,GACF;AAEA,EAAM,MAAA,aAAA,GAAgB,UAAU,IAAI,CAAA,CAAA,CAAA;AAEpC,EAAA,OAAO,YAAa,CAAA;AAAA,IAClB,OAAA,EAAS,oBAAoB,MAAO,CAAA,QAAA;AAAA,MAClC,IAAA;AAAA,KACD,CAAA,CAAA,EAAI,IAAI,CAAA,cAAA,EAAiB,IAAI,CAAA,CAAA,CAAA;AAAA,IAC9B,OAAS,EAAA;AAAA,MACP,CAAA,EAAG,OAAO,SAAU,CAAA,GAAG,CAAC,CAAI,CAAA,EAAA,IAAI,KAAK,MAAO,CAAA,IAAA;AAAA,QAC1C,CAAA,OAAA,EAAU,IAAI,CAAG,CAAA,CAAA,QAAA;AAAA,UACf,OAAU,GAAA,aAAA,CAAc,MAAS,GAAA,IAAA,CAAK,MAAS,GAAA,CAAA;AAAA,UAC/C,GAAA;AAAA,SACF;AAAA,OACD,CAAA,CAAA;AAAA,MACD,GAAG,IAAK,CAAA,GAAA;AAAA,QACN,CAAC,CACC,KAAA,CAAA,EAAG,MAAO,CAAA,UAAA,CAAW,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,MAAO,CAAA,UAAA;AAAA,UACvC,IAAA;AAAA,SACD,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,MAAO,CAAA,IAAA;AAAA,UACnB,aAAc,CAAA,QAAA;AAAA,YACZ,UAAU,aAAc,CAAA,MAAA,GAAS,CAAE,CAAA,MAAA,GAAS,KAAK,MAAS,GAAA,CAAA;AAAA,YAC1D,GAAA;AAAA,WACF;AAAA,SACD,CAAA,CAAA;AAAA,OACL;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AACH,CAAA,CAAA;AAEa,MAAA,uBAAA,GAA0B,CACrC,KAAA,EACA,GACG,KAAA;AACH,EAAM,MAAA,IAAA,GAAO,MAAM,GAAG,CAAA,CAAA;AACtB,EAAA,IAAI,IAAM,EAAA;AACR,IACE,OAAA,IAAA,KACC,MAAM,OAAQ,CAAA,IAAI,KAAK,IAAK,CAAA,IAAA,KAAS,KAAS,IAAA,IAAA,CAAK,IAAS,KAAA,MAAA,CAAA,CAAA;AAAA,GAEjE;AAEA,EAAA,KAAA,MAAW,KAAK,KAAO,EAAA;AACrB,IAAMC,MAAAA,KAAAA,GAAO,MAAM,CAAC,CAAA,CAAA;AACpB,IAAA,IACE,KAAM,CAAA,OAAA,CAAQA,KAAI,CAAA,GACdA,KAAK,CAAA,IAAA;AAAA,MACH,CAACA,KACEA,KAAAA,CAAAA,KAAAA,CAAK,IAAS,KAAA,KAAA,IAASA,KAAK,CAAA,IAAA,KAAS,MACtCA,KAAAA,KAAAA,CAAK,IAAK,CAAA,IAAA,CAAK,IAAS,KAAA,GAAA;AAAA,KAC5B,GAAA,CACCA,KAAK,CAAA,IAAA,KAAS,KAASA,IAAAA,KAAAA,CAAK,IAAS,KAAA,MAAA,KACtCA,KAAK,CAAA,IAAA,CAAK,IAAK,CAAA,IAAA,KAAS,GAC5B,EAAA;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,GACF;AAEA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;;AC1La,MAAA,cAAA,GAAiB,OAC5B,GAAA,EACA,WACA,EAAA;AAAA,EACE,SAAA,EAAW,EAAE,OAAQ,EAAA;AAAA,EACrB,SAAA;AAAA,EACA,QAAA,EAAU,EAAE,eAAgB,EAAA;AAC9B,CACkB,KAAA;AAClB,EAAA,MAAM,gBAA0B,EAAC,CAAA;AACjC,EAAA,MAAM,cAAwB,EAAC,CAAA;AAE/B,EAAA,KAAA,MAAW,UAAU,OAAS,EAAA;AAC5B,IAAA,IAAI,CAAC,WAAA,CAAY,OAAQ,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AACzC,MAAA,aAAA,CAAc,KAAK,MAAM,CAAA,CAAA;AAAA,KAC3B;AAAA,GACF;AAEA,EAAW,KAAA,MAAA,MAAA,IAAU,YAAY,OAAS,EAAA;AACxC,IAAA,IACE,CAAC,OAAA,CAAQ,GAAI,CAAA,MAAM,CACnB,IAAA,MAAA,KAAW,QACX,IAAA,CAAC,eAAiB,EAAA,OAAA,EAAS,QAAS,CAAA,MAAM,CAC1C,EAAA;AACA,MAAA,WAAA,CAAY,KAAK,MAAM,CAAA,CAAA;AAAA,KACzB;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,UAAU,aAAe,EAAA;AAClC,IAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,MAAA,MAAM,IAAI,MAAM,oBAAA;AAAA,QACd,QAAA;AAAA,QACA,MAAA;AAAA,QACA,WAAA;AAAA,QACA,SAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAI,CAAG,EAAA;AACL,QAAM,MAAA,IAAA,GAAO,WAAY,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAC9B,QAAY,WAAA,CAAA,MAAA,CAAO,CAAI,GAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAE3B,QAAyB,wBAAA,CAAA,WAAA,CAAY,MAAQ,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AACzD,QAAyB,wBAAA,CAAA,WAAA,CAAY,KAAO,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AACxD,QAAyB,wBAAA,CAAA,WAAA,CAAY,OAAS,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAC1D,QAAyB,wBAAA,CAAA,WAAA,CAAY,QAAU,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAC3D,QAAyB,wBAAA,CAAA,WAAA,CAAY,WAAa,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAC9D,QAAyB,wBAAA,CAAA,WAAA,CAAY,QAAU,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAC3D,QAAyB,wBAAA,CAAA,WAAA,CAAY,KAAO,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AACxD,QAAyB,wBAAA,CAAA,WAAA,CAAY,OAAS,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAC1D,QAAyB,wBAAA,CAAA,WAAA,CAAY,UAAY,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAE7D,QAAW,KAAA,MAAA,KAAA,IAAS,YAAY,MAAQ,EAAA;AACtC,UAAW,KAAA,MAAA,MAAA,IAAU,MAAM,OAAS,EAAA;AAClC,YAAI,IAAA,MAAA,CAAO,eAAe,IAAM,EAAA;AAC9B,cAAA,MAAA,CAAO,UAAa,GAAA,MAAA,CAAA;AAAA,aACtB;AAAA,WACF;AAAA,SACF;AAEA,QAAA,GAAA,CAAI,IAAK,CAAA;AAAA,UACP,IAAM,EAAA,cAAA;AAAA,UACN,IAAA;AAAA,UACA,EAAI,EAAA,MAAA;AAAA,SACL,CAAA,CAAA;AACD,QAAA,SAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,MAAQ,EAAA,QAAA;AAAA,MACR,IAAM,EAAA,MAAA;AAAA,KACP,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,KAAA,MAAW,UAAU,WAAa,EAAA;AAChC,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,MAAQ,EAAA,MAAA;AAAA,MACR,IAAM,EAAA,MAAA;AAAA,KACP,CAAA,CAAA;AAAA,GACH;AACF,CAAA,CAAA;AAEA,MAAM,wBAA2B,GAAA,CAC/B,KACA,EAAA,IAAA,EACA,EACG,KAAA;AACH,EAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,IAAI,IAAA,IAAA,CAAK,eAAe,IAAM,EAAA;AAC5B,MAAA,IAAA,CAAK,UAAa,GAAA,EAAA,CAAA;AAAA,KACpB;AAAA,GACF;AACF,CAAA;;ACpFa,MAAA,iBAAA,GAAoB,CAC/B,GAAA,EACA,WACA,EAAA;AAAA,EACE,aAAA;AAAA,EACA,QAAA,EAAU,EAAE,UAAA,EAAY,eAAgB,EAAA;AAC1C,CACG,KAAA;AACH,EAAA,MAAM,cAAiB,GAAA,UAAA,EAAY,GAAI,CAAA,CAAC,GAAmB,KAAA;AACzD,IAAA,MAAM,CAAC,MAAQ,EAAA,IAAI,CAAI,GAAA,yBAAA,CAA0B,IAAI,IAAI,CAAA,CAAA;AACzD,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAM,EAAA,OAAA,EAAS,IAAI,OAAQ,EAAA,CAAA;AAAA,GAC7C,CAAA,CAAA;AAED,EAAW,KAAA,MAAA,KAAA,IAAS,YAAY,UAAY,EAAA;AAC1C,IACE,IAAA,eAAA,EAAiB,OAAS,EAAA,QAAA,CAAS,KAAM,CAAA,UAAU,CACnD,IAAA,eAAA,EAAiB,UAAY,EAAA,QAAA,CAAS,KAAM,CAAA,IAAI,CAChD,EAAA;AACA,MAAA,SAAA;AAAA,KACF;AAEA,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,IAAI,KAAQ,GAAA,KAAA,CAAA;AACZ,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,cAAA,CAAe,QAAQ,CAAK,EAAA,EAAA;AAC9C,QAAM,MAAA,OAAA,GAAU,eAAe,CAAC,CAAA,CAAA;AAChC,QAAA,IACE,KAAM,CAAA,IAAA,KAAS,OAAQ,CAAA,IAAA,IACvB,MAAM,UAAgB,MAAA,OAAA,CAAQ,MAAU,IAAA,aAAA,CAAA,KACvC,CAAC,OAAQ,CAAA,OAAA,IAAW,OAAQ,CAAA,OAAA,KAAY,MAAM,OAC/C,CAAA,EAAA;AACA,UAAQ,KAAA,GAAA,IAAA,CAAA;AACR,UAAe,cAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAC1B,UAAA,MAAA;AAAA,SACF;AAAA,OACF;AAEA,MAAA,IAAI,KAAO,EAAA,SAAA;AAAA,KACb;AAEA,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,WAAA;AAAA,MACN,MAAQ,EAAA,MAAA;AAAA,MACR,MAAQ,EAAA,KAAA,CAAM,UAAe,KAAA,aAAA,GAAgB,SAAY,KAAM,CAAA,UAAA;AAAA,MAC/D,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,SAAS,KAAM,CAAA,OAAA;AAAA,KAChB,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,IAAI,gBAAgB,MAAQ,EAAA;AAC1B,IAAI,GAAA,CAAA,IAAA;AAAA,MACF,GAAG,cAAA,CAAe,GAAI,CAAA,CAAC,GAAS,MAAA;AAAA,QAC9B,IAAM,EAAA,WAAA;AAAA,QACN,MAAQ,EAAA,QAAA;AAAA,QACR,GAAG,GAAA;AAAA,OACH,CAAA,CAAA;AAAA,KACJ,CAAA;AAAA,GACF;AACF,CAAA;;AC/BO,MAAM,cAAiB,GAAA,OAC5B,OACA,EAAA,MAAA,EACA,iBACA,EAAA,WAAA,EACA,UACA,EAAA,eAAA,EACA,GACA,EAAA,aAAA,EACA,UACA,EAAA,cAAA,EACA,SACG,KAAA;AACH,EAAM,MAAA,EAAE,SAAY,GAAA,eAAA,CAAA;AACpB,EAAA,MAAM,YAAY,MAAO,CAAA,WAAA;AAAA,IACvB,OAAA,CAAQ,QAAQ,GAAI,CAAA,CAAC,WAAW,CAAC,MAAA,CAAO,IAAM,EAAA,MAAM,CAAC,CAAA;AAAA,GACvD,CAAA;AAEA,EAAA,MAAM,EAAE,YAAA,EAAc,aAAe,EAAA,eAAA,EAAoB,GAAA,YAAA;AAAA,IACvD,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,kBAAA;AAAA,IACJ,MAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,aAAA;AAAA,IACJ,OAAA;AAAA,IACA,MAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAA,WAAA,CAAY,iBAAiB,aAAa,CAAA,CAAA;AAC5C,CAAA,CAAA;AAIA,MAAM,eAAe,CACnB,iBAAA,EACA,WACA,EAAA,UAAA,EACA,WACA,eAKG,KAAA;AACH,EAAA,MAAM,eAAkD,EAAC,CAAA;AACzD,EAAA,MAAM,gBAAmD,EAAC,CAAA;AAC1D,EAAM,MAAA,eAAA,uBAAuC,GAAI,EAAA,CAAA;AACjD,EAAM,MAAA,uBAAA,uBAA8B,GAAkB,EAAA,CAAA;AAEtD,EAAA,MAAM,EAAE,SAAA,EAAW,OAAS,EAAA,WAAA,EAAgB,GAAA,eAAA,CAAA;AAC5C,EAAM,MAAA,MAAA,GAAS,uBAAwB,CAAA,eAAA,CAAgB,WAAW,CAAA,CAAA;AAElE,EAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,IAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAElC,IAAI,IAAA,CAAC,OAAO,QAAU,EAAA,SAAA;AAEtB,IAAM,MAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAK,IAAQ,IAAA,GAAA,CAAA;AACjC,IAAI,IAAA,SAAA,CAAU,IAAI,CAAG,EAAA;AACnB,MAAA,eAAA,CAAgB,IAAI,GAAK,EAAA,EAAE,KAAK,MAAQ,EAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AACtD,MAAwB,uBAAA,CAAA,GAAA,CAAI,MAAM,IAAI,CAAA,CAAA;AAAA,KACjC,MAAA;AACL,MAAA,YAAA,CAAa,IAAK,CAAA,EAAE,GAAK,EAAA,MAAA,EAAQ,CAAA,CAAA;AAAA,KACnC;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,QAAQ,SAAW,EAAA;AAC5B,IAAI,IAAA,uBAAA,CAAwB,GAAI,CAAA,IAAI,CAAG,EAAA,SAAA;AAEvC,IAAM,MAAA,CAAC,GAAK,EAAA,MAAM,CAAI,GAAA,aAAA;AAAA,MACpB,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAQ,CAAA,IAAA;AAAA,MACR,UAAU,IAAI,CAAA;AAAA,MACd,OAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,KACF,CAAA;AAEA,IAAA,aAAA,CAAc,IAAK,CAAA,EAAE,GAAK,EAAA,MAAA,EAAQ,CAAA,CAAA;AAAA,GACpC;AAEA,EAAO,OAAA;AAAA,IACL,YAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,kBAAA,GAAqB,OACzB,MAAA,EACA,WACA,EAAA;AAAA,EACE,WAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAgB,EAAA,EAAE,IAAM,EAAA,SAAA,EAAW,KAAM,EAAA;AAC3C,CACA,EAAA,YAAA,EACA,aACA,EAAA,eAAA,EACA,SACG,KAAA;AACH,EAAA,KAAA,MAAW,EAAE,GAAA,EAAK,MAAO,EAAA,IAAK,YAAc,EAAA;AAC1C,IAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,MAAM,MAAA,QAAA,GAAW,MAAO,CAAA,IAAA,CAAK,IAAQ,IAAA,GAAA,CAAA;AACrC,MAAA,MAAM,IAAI,MAAM,oBAAA;AAAA,QACd,QAAA;AAAA,QACA,QAAA;AAAA,QACA,aAAc,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AAAA,QAC9B,SAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAI,CAAG,EAAA;AACL,QAAM,MAAA,IAAA,GAAO,aAAc,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAChC,QAAc,aAAA,CAAA,MAAA,CAAO,CAAI,GAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAE7B,QAAA,MAAM,IAAO,GAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,GAAA,CAAA;AAC3C,QAAA,eAAA,CAAgB,IAAI,IAAM,EAAA;AAAA,UACxB,GAAA;AAAA,UACA,MAAQ,EAAA,IAAA;AAAA,UACR,MAAA,EAAQ,MAAO,CAAA,IAAA,CAAK,QAAQ,CAAA;AAAA,SAC7B,CAAA,CAAA;AAED,QAAA,MAAM,EAAK,GAAA,MAAA,CAAO,SAAY,GAAA,WAAA,CAAY,GAAG,CAAI,GAAA,GAAA,CAAA;AAEjD,QAAA,IAAI,YAAY,UAAY,EAAA;AAC1B,UAAA,YAAA,CAAa,WAAY,CAAA,UAAA,CAAW,OAAS,EAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAAA,SACvD;AAEA,QAAW,KAAA,MAAA,KAAA,IAAS,YAAY,OAAS,EAAA;AACvC,UAAWC,KAAAA,MAAAA,OAAAA,IAAU,MAAM,OAAS,EAAA;AAClC,YAAA,IAAI,QAAYA,IAAAA,OAAAA,IAAUA,OAAO,CAAA,MAAA,KAAW,IAAM,EAAA;AAChD,cAAAA,QAAO,MAAS,GAAA,EAAA,CAAA;AAAA,aAClB;AAAA,WACF;AAAA,SACF;AAEA,QAAW,KAAA,MAAA,OAAA,IAAW,YAAY,QAAU,EAAA;AAC1C,UAAWA,KAAAA,MAAAA,OAAAA,IAAU,QAAQ,OAAS,EAAA;AACpC,YAAA,IAAI,QAAYA,IAAAA,OAAAA,IAAUA,OAAO,CAAA,MAAA,KAAW,IAAM,EAAA;AAChD,cAAAA,QAAO,MAAS,GAAA,EAAA,CAAA;AAAA,aAClB;AAAA,WACF;AAAA,SACF;AAEA,QAAW,KAAA,MAAA,CAAA,IAAK,YAAY,WAAa,EAAA;AACvC,UAAI,IAAA,CAAA,CAAE,OAAO,OAAS,EAAA;AACpB,YAAA,YAAA,CAAa,CAAE,CAAA,KAAA,CAAM,OAAS,EAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAAA,WACxC;AACA,UAAA,IAAI,EAAE,UAAY,EAAA;AAChB,YAAA,YAAA,CAAa,CAAE,CAAA,UAAA,CAAW,OAAS,EAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAAA,WAC7C;AAAA,SACF;AAEA,QAAW,KAAA,MAAA,CAAA,IAAK,YAAY,WAAa,EAAA;AACvC,UACE,IAAA,CAAA,CAAE,cACF,CAAE,CAAA,UAAA,CAAW,kBAAkB,MAC/B,IAAA,CAAA,CAAE,UAAW,CAAA,YAAA,KAAiB,SAC9B,EAAA;AACA,YAAA,YAAA,CAAa,CAAE,CAAA,UAAA,CAAW,cAAgB,EAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAAA,WACpD;AAAA,SACF;AAEA,QAAA,SAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,KAAA,CAAM,GAAG,CAAI,GAAA;AAAA,MACX,IAAM,EAAA,KAAA;AAAA,MACN,IAAM,EAAA,MAAA;AAAA,KACR,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,WAAA,GAAc,CAClB,EAAE,cAAA,EAAgB,EAAE,KAAM,EAAA,IAC1B,aACG,KAAA;AACH,EAAA,KAAA,MAAW,EAAE,GAAA,EAAK,MAAO,EAAA,IAAK,aAAe,EAAA;AAC3C,IAAA,KAAA,CAAM,GAAG,CAAI,GAAA;AAAA,MACX,IAAM,EAAA,MAAA;AAAA,MACN,IAAM,EAAA,MAAA;AAAA,KACR,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,aAAgB,GAAA,OACpB,OACA,EAAA,MAAA,EACA,mBACA,WACA,EAAA,UAAA,EACA,GACA,EAAA,aAAA,EACA,SACA,EAAA,eAAA,EACA,UACA,EAAA,eAAA,EACA,gBACA,SACG,KAAA;AACH,EAAW,KAAA,MAAA;AAAA,IACT,GAAA;AAAA,IACA,EAAE,GAAA,EAAK,OAAS,EAAA,MAAA,EAAQ,QAAQ,UAAW,EAAA;AAAA,OACxC,eAAiB,EAAA;AACpB,IAAM,MAAA,iBAAA,GAAoB,UAAU,MAAM,CAAA,CAAA;AAE1C,IAAA,MAAM,QAAW,GAAA,mBAAA;AAAA,MACf,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,iBAAA;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,SAAS,MAAM,cAAA;AAAA,MACnB,OAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAA;AAAA,MACA,aAAA;AAAA,MACA,UAAA;AAAA,MACA,eAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,KACF,CAAA;AAEA,IAAA,IAAI,WAAW,QAAU,EAAA;AACvB,MAAA,YAAA,CAAa,eAAiB,EAAA,GAAA,EAAK,MAAQ,EAAA,QAAA,EAAU,UAAU,CAAA,CAAA;AAAA,KACjE,MAAA,IAAW,WAAW,UAAY,EAAA;AAChC,MAAgB,eAAA,CAAA,cAAA,CAAe,KAAM,CAAA,GAAG,CAAI,GAAA;AAAA,QAC1C;AAAA,UACE,IAAM,EAAA,MAAA;AAAA,UACN,IAAM,EAAA,QAAA;AAAA,SACR;AAAA,QACA;AAAA,UACE,IAAM,EAAA,KAAA;AAAA,UACN,IAAM,EAAA,UAAA;AAAA,SACR;AAAA,OACF,CAAA;AAAA,KACF,MAAA,IAAW,WAAW,UAAY,EAAA;AAChC,MAAM,MAAA,EAAA,GAAK,UAAW,CAAA,IAAA,CAAK,IAAQ,IAAA,OAAA,CAAA;AACnC,MAAA,IAAI,WAAW,EAAI,EAAA;AACjB,QAAgB,eAAA,CAAA,cAAA,CAAe,KAC7B,CAAA,MAAA,CAAO,SACH,GAAA,MAAA,KAAW,WAAY,CAAA,OAAO,CAC5B,GAAA,OAAA,GACA,MACF,GAAA,MACN,CAAI,GAAA;AAAA,UACF,IAAM,EAAA,QAAA;AAAA,UACN,IAAA,EAAM,OAAO,SACT,GAAA,EAAA,KAAO,YAAY,OAAO,CAAA,GACxB,UACA,EACF,GAAA,EAAA;AAAA,SACN,CAAA;AAAA,OACF;AAAA,KACF;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,cAAiB,GAAA,OACrB,OACA,EAAA,UAAA,EACA,GACA,EAAA,aAAA,EACA,UACA,EAAA,eAAA,EACA,cACA,EAAA,SAAA,EACA,GACA,EAAA,MAAA,EACA,UACA,UAC+C,KAAA;AAC/C,EAAI,IAAA,QAAA,YAAoB,WAAe,IAAA,UAAA,YAAsB,WAAa,EAAA;AACxE,IAAA,QAAA,GAAW,SAAS,IAAK,CAAA,IAAA,CAAA;AACzB,IAAA,UAAA,GAAa,WAAW,IAAK,CAAA,IAAA,CAAA;AAAA,GAC/B;AAEA,EAAM,MAAA,MAAA,GAAS,eAAgB,CAAA,QAAA,EAAU,aAAa,CAAA,CAAA;AACtD,EAAM,MAAA,QAAA,GAAW,eAAgB,CAAA,UAAA,EAAY,aAAa,CAAA,CAAA;AAE1D,EAAA,IAAI,WAAW,QAAU,EAAA;AACvB,IAAA,MAAM,SAAY,GAAA,MAAM,YAAa,CAAA,OAAA,EAAS,cAAc,CAAA,CAAA;AAE5D,IAAA,MAAM,UAAa,GAAA,iBAAA,CAAkB,QAAU,EAAA,UAAA,EAAY,MAAM,CAAA,CAAA;AACjE,IAAA,MAAM,YAAe,GAAA,iBAAA,CAAkB,UAAY,EAAA,UAAA,EAAY,QAAQ,CAAA,CAAA;AAEvE,IAAA,IAAI,CAAC,SAAU,CAAA,GAAA,CAAI,UAAU,CAAG,EAAA,GAAA,CAAI,YAAY,CAAG,EAAA;AACjD,MAAA,IACE,EAAE,QAAA,YAAoB,UACtB,CAAA,IAAA,EAAE,UAAsB,YAAA,UAAA,CAAA,IACxB,CAAC,WAAA,CAAY,QAAS,CAAA,OAAA,EAAS,UAAW,CAAA,OAAO,CACjD,EAAA;AACA,QAAI,IAAA,SAAA,EAAiB,MAAA,IAAI,WAAY,EAAA,CAAA;AAErC,QAAM,MAAA,SAAA,GAAY,mBAAoB,CAAA,eAAA,CAAgB,cAAc,CAAA,CAAA;AACpE,QAAM,MAAA,KAAA,GAAQ,MAAM,YAAa,CAAA;AAAA,UAC/B,OAAA,EAAS,uBAAuB,SAAS,CAAA,UAAA,EAAa,GAAG,CAAS,MAAA,EAAA,MAAM,OAAO,QAAQ,CAAA,CAAA;AAAA,UACvF,OAAS,EAAA;AAAA,YACP,GAAG,MAAO,CAAA,UAAA;AAAA,cACR,CAAA,GAAA,CAAA;AAAA,aACD,+CAA+C,MAAO,CAAA,GAAA;AAAA,cACrD,MAAA;AAAA,aACD,CAAA,CAAA;AAAA,YACD,CAAA,wBAAA,CAAA;AAAA,WACF;AAAA,SACD,CAAA,CAAA;AACD,QAAA,IAAI,KAAO,EAAA;AACT,UAAA,MAAM,IAAI,WAAY,EAAA,CAAA;AAAA,SACxB;AAEA,QAAS,QAAA,CAAA,IAAA,CAAK,IAAO,GAAA,UAAA,CAAW,IAAK,CAAA,IAAA,CAAA;AACrC,QAAO,OAAA,UAAA,CAAA;AAAA,OACT;AAAA,KACF;AAEA,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,SAAS,QAAS,CAAA,IAAA,CAAA;AACxB,EAAA,MAAM,WAAW,UAAW,CAAA,IAAA,CAAA;AAE5B,EAAA,KAAA,MAAWC,IAAO,IAAA,CAAC,YAAc,EAAA,SAAS,CAAG,EAAA;AAC3C,IAAA,IAAI,MAAOA,CAAAA,IAAG,CAAM,KAAA,QAAA,CAASA,IAAG,CAAG,EAAA;AACjC,MAAO,OAAA,QAAA,CAAA;AAAA,KACT;AAAA,GACF;AAEA,EAAA,KAAA,MAAWA,IAAO,IAAA;AAAA,IAChB,UAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,cAAA;AAAA,IACA,mBAAA;AAAA,GACC,EAAA;AAGD,IAAA,IAAIA,QAAO,QAAY,IAAA,MAAA,CAAOA,IAAG,CAAM,KAAA,QAAA,CAASA,IAAG,CAAG,EAAA;AACpD,MAAO,OAAA,QAAA,CAAA;AAAA,KACT;AAAA,GACF;AAEA,EAAI,IAAA,QAAA,CAAS,KAAK,cAAgB,EAAA;AAChC,IAAM,MAAA,EAAE,MAAO,EAAA,GAAI,QAAS,CAAA,IAAA,CAAA;AAC5B,IAAI,IAAA,MAAA,KAAW,KAAa,CAAA,IAAA,MAAA,KAAW,CAAI,CAAA,EAAA;AACzC,MAAA,MAAM,CAAI,GAAA,UAAA,CAAW,QAAS,CAAA,OAAA,CAAQ,GAAG,CAAA,CAAA;AACzC,MAAI,IAAA,CAAA,KAAM,CAAM,CAAA,IAAA,UAAA,CAAW,QAAS,CAAA,KAAA,CAAM,CAAI,GAAA,CAAA,EAAG,CAAE,CAAA,CAAA,KAAM,CAAG,EAAA,MAAM,CAAI,CAAA,EAAA;AACpE,QAAO,OAAA,QAAA,CAAA;AAAA,OACT;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IACE,CAAC,WAAA;AAAA,IACC,MAAO,CAAA,QAAA;AAAA,IACP,SAAS,QACL,GAAA;AAAA,MACE,MAAQ,EAAA,KAAA;AAAA,MACR,KAAO,EAAA,CAAA;AAAA,MACP,SAAW,EAAA,CAAA;AAAA,MACX,KAAO,EAAA,CAAA;AAAA,MACP,KAAO,EAAA,KAAA;AAAA,MACP,GAAI,QAAS,CAAA,QAAA,IAAY,EAAC;AAAA,KAE5B,GAAA,KAAA,CAAA;AAAA,GAEN,EAAA;AACA,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AAEA,EACE,IAAA,MAAA,CAAO,OAAY,KAAA,KAAA,CAAA,IACnB,MAAO,CAAA,OAAA,KAAY,IACnB,IAAA,QAAA,CAAS,OAAY,KAAA,KAAA,CAAA,IACrB,QAAS,CAAA,OAAA,KAAY,IACrB,EAAA;AACA,IAAM,MAAA,eAAA,GAAkB,WAAW,MAAO,CAAA,MAAA,CAAA;AAC1C,IAAA,MAAM,SAAY,GAAA,mBAAA;AAAA,MAChB,MAAO,CAAA,OAAA;AAAA,MACP,UAAW,CAAA,MAAA;AAAA,MACX,QAAA;AAAA,KACF,CAAA;AACA,IAAA,MAAM,QAAW,GAAA,UAAA,CAAW,MAAO,CAAA,KAAA,CAAM,eAAe,CAAA,CAAA;AAExD,IAAA,MAAM,WAAc,GAAA,mBAAA;AAAA,MAClB,QAAS,CAAA,OAAA;AAAA,MACT,UAAW,CAAA,MAAA;AAAA,MACX,UAAA;AAAA,KACF,CAAA;AACA,IAAA,MAAM,UAAa,GAAA,UAAA,CAAW,MAAO,CAAA,KAAA,CAAM,eAAe,CAAA,CAAA;AAE1D,IAAA,IACE,QAAS,CAAA,MAAA,KAAW,UAAW,CAAA,MAAA,IAC9B,QAAS,CAAA,MAAA,IACR,IAAK,CAAA,SAAA,CAAU,QAAQ,CAAA,KAAM,IAAK,CAAA,SAAA,CAAU,UAAU,CACxD,EAAA;AACA,MAAA,UAAA,CAAW,OAAO,MAAS,GAAA,eAAA,CAAA;AAC3B,MAAO,OAAA,QAAA,CAAA;AAAA,eACE,SAAc,KAAA,WAAA,IAAe,SAAc,KAAA,CAAA,CAAA,EAAI,WAAW,CAAK,CAAA,CAAA,EAAA;AACxE,MAAA,UAAA,CAAW,YAAY,IAAK,CAAA;AAAA,QAC1B,IAAM,EAAA,SAAA;AAAA,QACN,MAAQ,EAAA,WAAA;AAAA,QACR,QAAQ,MAAM;AACZ,UAAA,YAAA,CAAa,eAAiB,EAAA,GAAA,EAAK,MAAQ,EAAA,QAAA,EAAU,UAAU,CAAA,CAAA;AAC/D,UAAI,IAAA,CAAC,gBAAgB,SAAW,EAAA;AAC9B,YAAA,eAAA,CAAgB,SAAY,GAAA,IAAA,CAAA;AAC5B,YAAI,GAAA,CAAA,IAAA,CAAK,gBAAgB,cAAc,CAAA,CAAA;AAAA,WACzC;AAAA,SACF;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,GACF;AAEA,EAAA,OAAA;AACF,CAAA,CAAA;AAEA,MAAM,YAAA,GAAe,OACnB,OAAA,EACA,cACG,KAAA;AACH,EAAA,IAAI,YAAY,cAAe,CAAA,KAAA,CAAA;AAC/B,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAA,MAAM,EAAE,IAAA,EAAS,GAAA,MAAM,QAAQ,MAAO,CAAA,CAAA;AAAA;AAAA;AAAA,uCAGF,CAAA,CAAA,CAAA;AAEpC,IAAM,MAAA,eAAA,uBAAsB,GAAyB,EAAA,CAAA;AACrD,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,MAAM,CAAA,IAAK,IAAM,EAAA;AACnC,MAAM,MAAA,GAAA,GAAM,eAAgB,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AACtC,MAAA,IAAI,GAAK,EAAA;AACP,QAAA,GAAA,CAAI,IAAI,MAAM,CAAA,CAAA;AAAA,OACT,MAAA;AACL,QAAA,eAAA,CAAgB,IAAI,MAAQ,kBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA,CAAA;AAAA,OAC/C;AAAA,KACF;AAEA,IAAA,SAAA,uBAAgB,GAAyB,EAAA,CAAA;AACzC,IAAA,KAAA,MAAW,CAAC,IAAM,EAAA,SAAS,CAAK,IAAA,eAAA,CAAgB,SAAW,EAAA;AACzD,MAAM,MAAA,GAAA,GAAM,IAAI,GAAA,CAAY,SAAS,CAAA,CAAA;AACrC,MAAU,SAAA,CAAA,GAAA,CAAI,MAAM,GAAG,CAAA,CAAA;AAEvB,MAAA,KAAA,MAAW,WAAW,SAAW,EAAA;AAC/B,QAAM,MAAA,MAAA,GAAS,eAAgB,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAC1C,QAAA,IAAI,MAAQ,EAAA;AACV,UAAA,KAAA,MAAWC,SAAQ,MAAQ,EAAA;AACzB,YAAA,GAAA,CAAI,IAAIA,KAAI,CAAA,CAAA;AAAA,WACd;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAEA,IAAA,cAAA,CAAe,KAAQ,GAAA,SAAA,CAAA;AAAA,GACzB;AAEA,EAAO,OAAA,SAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,eAAe,CACnB,eAAA,EACA,GACA,EAAA,MAAA,EACA,UACA,UACG,KAAA;AACH,EAAA,QAAA,CAAS,IAAK,CAAA,EAAA,GAAK,UAAW,CAAA,IAAA,CAAK,EAAK,GAAA,KAAA,CAAA,CAAA;AAExC,EAAM,MAAA,gBAAA,GAAmB,MAAO,CAAA,MAAA,CAAO,UAAU,CAAA,CAAA;AACjD,EAAA,gBAAA,CAAiB,IAAO,GAAA;AAAA,IACtB,GAAG,UAAW,CAAA,IAAA;AAAA,IACd,UAAY,EAAA,KAAA,CAAA;AAAA,IACZ,OAAS,EAAA,KAAA,CAAA;AAAA,IACT,QAAU,EAAA,KAAA,CAAA;AAAA,IACV,WAAa,EAAA,KAAA,CAAA;AAAA,IACb,KAAO,EAAA,KAAA,CAAA;AAAA,GACT,CAAA;AAEA,EAAgB,eAAA,CAAA,eAAA,CAAgB,MAAM,CAAI,GAAA;AAAA,IACxC,IAAM,EAAA,QAAA;AAAA,IACN,EAAI,EAAA,gBAAA;AAAA,GACN,CAAA;AAEA,EAAgB,eAAA,CAAA,cAAA,CAAe,KAAM,CAAA,GAAG,CAAI,GAAA;AAAA,IAC1C,IAAM,EAAA,QAAA;AAAA,IACN,IAAA,EAAM,EAAE,MAAA,EAAQ,QAAS,EAAA;AAAA,IACzB,EAAA,EAAI,EAAE,MAAA,EAAQ,gBAAiB,EAAA;AAAA,GACjC,CAAA;AACF,CAAA,CAAA;AAEa,MAAA,eAAA,GAAkB,CAC7B,MAAA,EACA,aACG,KAAA;AACH,EAAA,IAAI,kBAAkB,UAAY,EAAA;AAChC,IAAA,MAAM,CAAC,MAAA,GAAS,aAAe,EAAA,IAAI,CAAI,GAAA,yBAAA;AAAA,MACrC,MAAO,CAAA,QAAA;AAAA,KACT,CAAA;AACA,IAAO,OAAA,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAA;AAAA,GAC1B,MAAA,IAAW,kBAAkB,WAAa,EAAA;AACxC,IAAM,MAAA,EAAE,IAAK,EAAA,GAAI,MAAO,CAAA,IAAA,CAAA;AACxB,IAAA,IAAI,IAAO,GAAA,IAAA,YAAgB,UAAa,GAAA,IAAA,CAAK,WAAW,IAAK,CAAA,QAAA,CAAA;AAE7D,IAAO,IAAA,GAAA,IAAA,CAAK,UAAW,CAAA,aAAA,GAAgB,GAAG,CAAA,GACtC,KAAK,KAAM,CAAA,aAAA,CAAc,MAAS,GAAA,CAAC,CACnC,GAAA,IAAA,CAAA;AAEJ,IAAA,OAAO,IAAO,GAAA,IAAA,CAAK,MAAO,CAAA,MAAA,CAAO,KAAK,SAAS,CAAA,CAAA;AAAA,GACjD,MAAA,IAAW,MAAO,CAAA,IAAA,CAAK,cAAgB,EAAA;AACrC,IAAA,IAAI,OAAO,MAAO,CAAA,QAAA,CAAA;AAElB,IAAM,MAAA,CAAA,GAAI,IAAK,CAAA,OAAA,CAAQ,GAAG,CAAA,CAAA;AAC1B,IAAA,IAAI,MAAM,CAAI,CAAA,EAAA;AACZ,MAAO,IAAA,GAAA,IAAA,CAAK,KAAM,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAAA,KACxB;AAEA,IAAA,OAAO,KAAK,QAAS,CAAA,GAAG,CAAI,GAAA,IAAA,GAAO,gBAAgB,GAAM,GAAA,IAAA,CAAA;AAAA,GACpD,MAAA;AACL,IAAA,OAAO,MAAO,CAAA,QAAA,CAAA;AAAA,GAChB;AACF,CAAA,CAAA;AAEA,MAAM,YAAe,GAAA,CAAC,OAAmB,EAAA,IAAA,EAAc,EAAe,KAAA;AACpE,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AACvC,IAAI,IAAA,OAAA,CAAQ,CAAC,CAAA,KAAM,IAAM,EAAA;AACvB,MAAA,OAAA,CAAQ,CAAC,CAAI,GAAA,EAAA,CAAA;AAAA,KACf;AAAA,GACF;AACF,CAAA;;ACziBO,MAAM,cAAiB,GAAA,OAC5B,GACA,EAAA,OAAA,EACA,YACA,WACA,EAAA;AAAA,EACE,SAAA,EAAW,EAAE,OAAQ,EAAA;AAAA,EACrB,iBAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA,EAAU,EAAE,eAAgB,EAAA;AAC9B,CAAA,EACA,cACG,KAAA;AACH,EAAA,MAAM,cAAkC,EAAC,CAAA;AACzC,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,KAAA,MAAW,EAAE,UAAA,EAAY,IAAM,EAAA,MAAA,MAAY,OAAS,EAAA;AAClD,MAAY,WAAA,CAAA,IAAA;AAAA,QACV,oBAAqB,CAAA,aAAA,EAAe,UAAY,EAAA,IAAA,EAAM,MAAM,CAAA;AAAA,OAC9D,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAA,MAAM,mBAAsC,EAAC,CAAA;AAC7C,EAAM,MAAA,eAAA,uBAAsB,GAAsB,EAAA,CAAA;AAElD,EAAW,KAAA,MAAA,MAAA,IAAU,YAAY,OAAS,EAAA;AACxC,IACE,IAAA,eAAA,EAAiB,OAAS,EAAA,QAAA,CAAS,MAAO,CAAA,UAAU,CACpD,IAAA,eAAA,EAAiB,OAAS,EAAA,QAAA,CAAS,MAAO,CAAA,IAAI,CAC9C,EAAA;AACA,MAAA,SAAA;AAAA,KACF;AAEA,IAAA,MAAM,QAAW,GAAA,mBAAA;AAAA,MACf,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA;AAAA;AAAA,QAGE,YAAY,MAAO,CAAA,UAAA;AAAA,QACnB,SAAW,EAAA,KAAA;AAAA,QACX,MAAM,MAAO,CAAA,IAAA;AAAA,QACb,YAAY,MAAO,CAAA,UAAA;AAAA,QACnB,MAAM,MAAO,CAAA,IAAA;AAAA,QACb,WAAW,MAAO,CAAA,SAAA;AAAA,QAClB,SAAS,MAAO,CAAA,OAAA;AAAA,QAChB,YAAY,MAAO,CAAA,UAAA;AAAA,QACnB,SAAS,MAAO,CAAA,OAAA;AAAA,QAChB,UAAU,MAAO,CAAA,QAAA;AAAA,QACjB,MAAQ,EAAA,CAAA,CAAA;AAAA,OACV;AAAA,KACF,CAAA;AAEA,IAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,MAAA,QAAA,CAAS,KAAK,MAAS,GAAA,MAAA,CAAO,MAAO,CAAA,GAAA,CAAI,CAAC,KAAW,MAAA;AAAA,QACnD,KAAK,IAAI,MAAA,CAAO,CAAC,CAAC,KAAK,CAAC,CAAmC,CAAA;AAAA,OAC3D,CAAA,CAAA,CAAA;AAAA,KACJ;AAEA,IAAA,MAAM,QAAW,GAAA,oBAAA;AAAA,MACf,aAAA;AAAA,MACA,MAAO,CAAA,UAAA;AAAA,MACP,MAAO,CAAA,IAAA;AAAA,MACP,QAAA;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,QAAQ,WAAY,CAAA,MAAA;AAAA,MAAO,CAAC,UAChC,KAAA,WAAA,CAAY,QAAS,CAAA,OAAA,EAAS,WAAW,OAAO,CAAA;AAAA,KAClD,CAAA;AAEA,IAAA,IAAA,CAAK,OAAO,OAAW,IAAA,MAAA,CAAO,MAAQ,EAAA,MAAA,KAAW,MAAM,MAAQ,EAAA;AAC7D,MAAA,KAAA,MAAW,cAAc,KAAO,EAAA;AAC9B,QAAA,eAAA,CAAgB,IAAI,UAAU,CAAA,CAAA;AAAA,OAChC;AAEA,MAAA,MAAM,UAAwC,EAAC,CAAA;AAC/C,MAAmB,kBAAA,CAAA,OAAA,EAAS,QAAQ,KAAK,CAAA,CAAA;AACzC,MAAkB,iBAAA,CAAA,OAAA,EAAS,QAAQ,KAAK,CAAA,CAAA;AAExC,MAAA,MAAM,SAAS,CAAkB,eAAA,EAAA,eAAA;AAAA,QAC/B,QAAA;AAAA,QACA,aAAA;AAAA,OACD,CAAA,WAAA,CAAA,CAAA;AAED,MAAA,gBAAA,CAAiB,IAAK,CAAA;AAAA,QACpB,OAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAO,CAAG,EAAA;AACR,UAAA,MAAM,UAAa,GAAA,CAAA,KAAM,KAAY,CAAA,GAAA,KAAA,CAAA,GAAY,MAAM,CAAC,CAAA,CAAA;AACxD,UAAA,IAAI,CAAC,UAAY,EAAA;AACf,YAAI,GAAA,CAAA,IAAA,CAAK,OAAQ,CAAA,QAAQ,CAAC,CAAA,CAAA;AAAA,WACrB,MAAA;AACL,YAAA,eAAA,CAAgB,OAAO,UAAU,CAAA,CAAA;AAAA,WACnC;AAAA,SACF;AAAA,OACD,CAAA,CAAA;AAAA,KACH,MAAA,IAAW,MAAM,MAAQ,EAAA;AACvB,MAAA,IAAI,IAAI,WAAY,CAAA,SAAA;AAAA,QAClB,CAAC,eACC,UAAW,CAAA,IAAA,KAAS,SAAS,IAC7B,IAAA,UAAA,CAAW,eAAe,QAAS,CAAA,UAAA;AAAA,OACvC,CAAA;AACA,MAAA,IAAI,MAAM,CAAI,CAAA,EAAA;AACZ,QAAI,CAAA,GAAA,CAAA,CAAA;AACJ,QAAM,MAAA,KAAA,GAAQ,MAAM,CAAC,CAAA,CAAA;AACrB,QAAA,GAAA,CAAI,IAAK,CAAA;AAAA,UACP,IAAM,EAAA,YAAA;AAAA,UACN,IAAM,EAAA,QAAA;AAAA,UACN,YAAY,QAAS,CAAA,UAAA;AAAA,UACrB,MAAM,QAAS,CAAA,IAAA;AAAA,UACf,UAAU,KAAM,CAAA,UAAA;AAAA,UAChB,IAAI,KAAM,CAAA,IAAA;AAAA,SACX,CAAA,CAAA;AACD,QAAA,cAAA,CAAe,GAAI,CAAA,KAAA,CAAM,UAAY,EAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,OACjD;AAEA,MAAY,WAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAAA,KAClB,MAAA;AACL,MAAI,GAAA,CAAA,IAAA,CAAK,OAAQ,CAAA,QAAQ,CAAC,CAAA,CAAA;AAAA,KAC5B;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,cAAc,WAAa,EAAA;AACpC,IAAA,IAAI,CAAC,eAAA,CAAgB,GAAI,CAAA,UAAU,CAAG,EAAA;AACpC,MAAI,GAAA,CAAA,IAAA,CAAK,SAAU,CAAA,UAAU,CAAC,CAAA,CAAA;AAC9B,MAAA,cAAA,CAAe,GAAI,CAAA,UAAA,CAAW,UAAY,EAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,KAC3D;AAAA,GACF;AAEA,EAAA,IAAI,iBAAiB,MAAQ,EAAA;AAC3B,IAAM,MAAA,qBAAA,CAAsB,kBAAkB,OAAO,CAAA,CAAA;AAErD,IAAA,IAAI,gBAAgB,IAAM,EAAA;AACxB,MAAW,KAAA,MAAA,UAAA,IAAc,eAAgB,CAAA,IAAA,EAAQ,EAAA;AAC/C,QAAI,GAAA,CAAA,IAAA,CAAK,SAAU,CAAA,UAAU,CAAC,CAAA,CAAA;AAC9B,QAAA,cAAA,CAAe,GAAI,CAAA,UAAA,CAAW,UAAY,EAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,OAC3D;AAAA,KACF;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,oBAAuB,GAAA,CAC3B,aACA,EAAA,UAAA,EACA,MACA,MACqB,KAAA;AACrB,EAAA,IAAI,SAAY,GAAA,CAAA,CAAA;AAChB,EAAM,MAAA,UAAA,GAAa,MAAO,CAAA,IAAA,CAAK,UAAc,IAAA,KAAA,CAAA;AAC7C,EAAA,IAAI,KAAQ,GAAA,MAAA,CAAA;AACZ,EAAA,OAAO,iBAAiB,WAAa,EAAA;AACnC,IAAA,KAAA,GAAQ,MAAM,IAAK,CAAA,IAAA,CAAA;AACnB,IAAA,SAAA,EAAA,CAAA;AAAA,GACF;AACA,EAAM,MAAA,QAAA,GAAW,eAAgB,CAAA,KAAA,EAAO,aAAa,CAAA,CAAA;AACrD,EAAA,MAAM,CAAC,UAAa,GAAA,YAAA,EAAc,IAAI,CAAA,GAAI,0BAA0B,QAAQ,CAAA,CAAA;AAE5E,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA,EAAU,MAAM,IAAK,CAAA,QAAA;AAAA,MACrB,gBAAA,EAAkB,MAAM,IAAK,CAAA,gBAAA;AAAA,MAC7B,YAAA,EAAc,MAAM,IAAK,CAAA,YAAA;AAAA,MACzB,iBAAA,EAAmB,MAAM,IAAK,CAAA,iBAAA;AAAA,MAC9B,OAAA,EAAS,OAAO,IAAK,CAAA,OAAA;AAAA,MACrB,UAAA,EAAY,MAAO,CAAA,IAAA,CAAK,OAAY,KAAA,KAAA,CAAA;AAAA,MACpC,SAAW,EAAA,CAAC,CAAC,MAAA,CAAO,KAAK,MAAQ,EAAA,MAAA;AAAA,KACnC;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,kBAAqB,GAAA,CACzB,OACA,EAAA,MAAA,EACA,KACG,KAAA;AACH,EAAA,IAAI,OAAO,OAAS,EAAA;AAClB,IAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,MACX,MAAM,MAAO,CAAA,OAAA;AAAA,MACb,MAAQ,EAAA,KAAA,CAAM,GAAI,CAAA,CAAC,UAAe,KAAA;AAChC,QAAM,MAAA,KAAA,GAAQ,UAAW,CAAA,MAAA,CAAO,IAAK,CAAA,OAAA,CAAA;AACrC,QAAA,IAAI,SAAU,KAA6B,EAAA;AACzC,UAAA,OAAQ,KAA4B,CAAA,GAAA,CAAA;AAAA,SACtC;AACA,QAAO,OAAA,KAAA,CAAA;AAAA,OACR,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACH;AACF,CAAA,CAAA;AAEA,MAAM,iBAAoB,GAAA,CACxB,OACA,EAAA,MAAA,EACA,KACG,KAAA;AACH,EAAI,IAAA,MAAA,CAAO,QAAQ,MAAQ,EAAA;AACzB,IAAA,MAAM,SAAS,KAAM,CAAA,OAAA;AAAA,MACnB,CAAC,UAAA,KACC,UAAW,CAAA,MAAA,CAAO,KAAK,MAAQ,EAAA,GAAA;AAAA,QAAI,CAAC,KAClC,KAAA,OAAO,KAAU,KAAA,QAAA,GAAW,QAAQ,KAAM,CAAA,GAAA;AAAA,OACvC,IAAA,UAAA;AAAA,KACT,CAAA;AAEA,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN,GAAG,MAAA,CAAO,MAAO,CAAA,GAAA,CAAI,CAAC,KAAW,MAAA;AAAA,QAC/B,IAAM,EAAA,KAAA;AAAA,QACN,MAAA;AAAA,OACA,CAAA,CAAA;AAAA,KACJ,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,OAAA,GAAU,CAAC,QAAkD,MAAA;AAAA,EACjE,IAAM,EAAA,QAAA;AAAA,EACN,MAAQ,EAAA,MAAA;AAAA,EACR,QAAQ,QAAS,CAAA,UAAA;AAAA,EACjB,MAAM,QAAS,CAAA,IAAA;AAAA,EACf,UAAU,QAAS,CAAA,MAAA;AACrB,CAAA,CAAA,CAAA;AAEA,MAAM,SAAA,GAAY,CAAC,UAAoD,MAAA;AAAA,EACrE,IAAM,EAAA,QAAA;AAAA,EACN,MAAQ,EAAA,QAAA;AAAA,EACR,QAAQ,UAAW,CAAA,UAAA;AAAA,EACnB,MAAM,UAAW,CAAA,IAAA;AAAA,EACjB,UAAU,UAAW,CAAA,MAAA;AACvB,CAAA,CAAA;;AC3Qa,MAAA,YAAA,GAAe,OAC1B,GAAA,EACA,WACA,EAAA;AAAA,EACE,SAAA,EAAW,EAAE,KAAM,EAAA;AAAA,EACnB,aAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA,EAAU,EAAE,eAAgB,EAAA;AAC9B,CAAA,EACA,cACkB,KAAA;AAClB,EAAA,MAAM,cAA0B,EAAC,CAAA;AACjC,EAAA,MAAM,YAAgC,EAAC,CAAA;AAEvC,EAAA,KAAA,MAAW,GAAG,QAAQ,CAAA,IAAK,KAAO,EAAA;AAChC,IAAA,MAAM,EAAE,MAAA,GAAS,aAAe,EAAA,IAAA,EAAS,GAAA,QAAA,CAAA;AACzC,IAAM,MAAA,MAAA,GAAS,YAAY,KAAM,CAAA,IAAA;AAAA,MAC/B,CAAC,CAAM,KAAA,CAAA,CAAE,UAAe,KAAA,MAAA,IAAU,EAAE,IAAS,KAAA,IAAA;AAAA,KAC/C,CAAA;AACA,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA,WAAA,CAAY,KAAK,QAAQ,CAAA,CAAA;AAAA,KAC3B;AAAA,GACF;AAEA,EAAW,KAAA,MAAA,MAAA,IAAU,YAAY,KAAO,EAAA;AACtC,IACE,IAAA,eAAA,EAAiB,OAAS,EAAA,QAAA,CAAS,MAAO,CAAA,UAAU,CACpD,IAAA,eAAA,EAAiB,KAAO,EAAA,QAAA,CAAS,MAAO,CAAA,IAAI,CAC5C,EAAA;AACA,MAAA,SAAA;AAAA,KACF;AAEA,IAAM,MAAA,QAAA,GAAW,MAAM,GAAI,CAAA,CAAA,EAAG,OAAO,UAAU,CAAA,CAAA,EAAI,MAAO,CAAA,IAAI,CAAE,CAAA,CAAA,CAAA;AAChE,IAAA,IAAI,QAAU,EAAA;AACZ,MAAW,UAAA,CAAA,GAAA,EAAK,MAAQ,EAAA,QAAA,EAAU,cAAc,CAAA,CAAA;AAChD,MAAA,SAAA;AAAA,KACF;AAEA,IAAM,MAAA,CAAA,GAAI,YAAY,SAAU,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,KAAS,OAAO,IAAI,CAAA,CAAA;AAC7D,IAAA,IAAI,MAAM,CAAI,CAAA,EAAA;AACZ,MAAMC,MAAAA,SAAAA,GAAW,YAAY,CAAC,CAAA,CAAA;AAC9B,MAAY,WAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AACvB,MAAA,MAAM,aAAa,MAAO,CAAA,UAAA,CAAA;AAC1B,MAAM,MAAA,QAAA,GAAWA,UAAS,MAAU,IAAA,aAAA,CAAA;AAEpC,MAAwB,uBAAA,CAAA,WAAA,EAAa,YAAY,QAAQ,CAAA,CAAA;AAEzD,MAAA,GAAA,CAAI,IAAK,CAAA;AAAA,QACP,IAAM,EAAA,YAAA;AAAA,QACN,IAAM,EAAA,MAAA;AAAA,QACN,UAAA;AAAA,QACA,MAAM,MAAO,CAAA,IAAA;AAAA,QACb,QAAA;AAAA,QACA,IAAI,MAAO,CAAA,IAAA;AAAA,OACZ,CAAA,CAAA;AACD,MAAe,cAAA,CAAA,GAAA,CAAI,QAAU,EAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AAExC,MAAW,UAAA,CAAA,GAAA,EAAK,MAAQA,EAAAA,SAAAA,EAAU,cAAc,CAAA,CAAA;AAEhD,MAAA,SAAA;AAAA,KACF;AAEA,IAAA,SAAA,CAAU,KAAK,MAAM,CAAA,CAAA;AAAA,GACvB;AAEA,EAAA,KAAA,MAAW,YAAY,WAAa,EAAA;AAClC,IAAA,IAAI,UAAU,MAAQ,EAAA;AACpB,MAAA,MAAM,IAAI,MAAM,oBAAA;AAAA,QACd,MAAA;AAAA,QACA,QAAS,CAAA,IAAA;AAAA,QACT,SAAU,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,QAC3B,SAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAI,CAAG,EAAA;AACL,QAAM,MAAA,MAAA,GAAS,SAAU,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAC9B,QAAU,SAAA,CAAA,MAAA,CAAO,CAAI,GAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAEzB,QAAA,MAAM,aAAa,MAAO,CAAA,UAAA,CAAA;AAC1B,QAAA,MAAM,OAAO,MAAO,CAAA,IAAA,CAAA;AACpB,QAAM,MAAA,QAAA,GAAW,SAAS,MAAU,IAAA,aAAA,CAAA;AACpC,QAAA,MAAM,KAAK,QAAS,CAAA,IAAA,CAAA;AAEpB,QAAA,IAAI,eAAe,QAAU,EAAA;AAC3B,UAAwB,uBAAA,CAAA,WAAA,EAAa,YAAY,QAAQ,CAAA,CAAA;AAAA,SAC3D;AAEA,QAAW,KAAA,MAAA,KAAA,IAAS,YAAY,MAAQ,EAAA;AACtC,UAAW,KAAA,MAAA,MAAA,IAAU,MAAM,OAAS,EAAA;AAClC,YAAI,IAAA,MAAA,CAAO,SAAS,IAAM,EAAA;AACxB,cAAA,MAAA,CAAO,IAAO,GAAA,EAAA,CAAA;AAAA,aAChB;AAAA,WACF;AAAA,SACF;AAEA,QAAA,GAAA,CAAI,IAAK,CAAA;AAAA,UACP,IAAM,EAAA,YAAA;AAAA,UACN,IAAM,EAAA,MAAA;AAAA,UACN,UAAA;AAAA,UACA,IAAA;AAAA,UACA,QAAA;AAAA,UACA,EAAA;AAAA,SACD,CAAA,CAAA;AACD,QAAe,cAAA,CAAA,GAAA,CAAI,UAAU,EAAE,CAAA,CAAA;AAE/B,QAAW,UAAA,CAAA,GAAA,EAAK,MAAQ,EAAA,QAAA,EAAU,cAAc,CAAA,CAAA;AAEhD,QAAA,SAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,MAAA;AAAA,MACN,MAAQ,EAAA,QAAA;AAAA,MACR,GAAG,QAAA;AAAA,KACJ,CAAA,CAAA;AACD,IAAA,cAAA,CAAe,GAAI,CAAA,QAAA,CAAS,MAAQ,EAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAAA,GACnD;AAEA,EAAA,KAAA,MAAW,UAAU,SAAW,EAAA;AAC9B,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,MAAA;AAAA,MACN,MAAQ,EAAA,MAAA;AAAA,MACR,QAAQ,MAAO,CAAA,UAAA;AAAA,MACf,MAAM,MAAO,CAAA,IAAA;AAAA,MACb,QAAQ,MAAO,CAAA,MAAA;AAAA,KAChB,CAAA,CAAA;AAAA,GACH;AACF,CAAA,CAAA;AAEA,MAAM,UAAa,GAAA,CACjB,GACA,EAAA,MAAA,EACA,UACA,cACG,KAAA;AACH,EAAM,MAAA,EAAE,MAAQ,EAAA,QAAA,EAAa,GAAA,MAAA,CAAA;AAC7B,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAY,EAAA,MAAA,EAAQ,MAAS,GAAA,QAAA,CAAA;AAE7C,EAAI,IAAA,QAAA,CAAS,MAAS,GAAA,UAAA,CAAW,MAAQ,EAAA;AACvC,IAAI,IAAA,CAAC,QAAS,CAAA,IAAA,CAAK,CAAC,KAAA,KAAU,CAAC,UAAW,CAAA,QAAA,CAAS,KAAK,CAAC,CAAG,EAAA;AAC1D,MAAA,GAAA,CAAI,IAAK,CAAA;AAAA,QACP,IAAM,EAAA,YAAA;AAAA,QACN,MAAQ,EAAA,KAAA;AAAA,QACR,MAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAA,EAAQ,WAAW,MAAO,CAAA,CAAC,UAAU,CAAC,QAAA,CAAS,QAAS,CAAA,KAAK,CAAC,CAAA;AAAA,OAC/D,CAAA,CAAA;AACD,MAAe,cAAA,CAAA,GAAA,CAAI,QAAQ,IAAI,CAAA,CAAA;AAC/B,MAAA,OAAA;AAAA,KACF;AAAA,GACS,MAAA,IAAA,QAAA,CAAS,MAAS,GAAA,UAAA,CAAW,MAAQ,EAAA;AAC9C,IAAI,IAAA,CAAC,UAAW,CAAA,IAAA,CAAK,CAAC,KAAA,KAAU,CAAC,QAAS,CAAA,QAAA,CAAS,KAAK,CAAC,CAAG,EAAA;AAC1D,MAAA,GAAA,CAAI,IAAK,CAAA;AAAA,QACP,IAAM,EAAA,YAAA;AAAA,QACN,MAAQ,EAAA,MAAA;AAAA,QACR,MAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAA,EAAQ,SAAS,MAAO,CAAA,CAAC,UAAU,CAAC,UAAA,CAAW,QAAS,CAAA,KAAK,CAAC,CAAA;AAAA,OAC/D,CAAA,CAAA;AACD,MAAe,cAAA,CAAA,GAAA,CAAI,QAAQ,IAAI,CAAA,CAAA;AAC/B,MAAA,OAAA;AAAA,KACF;AAAA,GACF,MAAA,IAAW,CAAC,QAAA,CAAS,IAAK,CAAA,CAAC,KAAU,KAAA,CAAC,UAAW,CAAA,QAAA,CAAS,KAAK,CAAC,CAAG,EAAA;AACjE,IAAA,OAAA;AAAA,GACF;AAEA,EAAA,GAAA,CAAI,IAAK,CAAA;AAAA,IACP,IAAM,EAAA,kBAAA;AAAA,IACN,MAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAY,EAAA,QAAA;AAAA,IACZ,QAAU,EAAA,UAAA;AAAA,GACX,CAAA,CAAA;AACD,EAAe,cAAA,CAAA,GAAA,CAAI,QAAQ,IAAI,CAAA,CAAA;AACjC,CAAA,CAAA;AAEA,MAAM,uBAA0B,GAAA,CAC9B,WACA,EAAA,IAAA,EACA,EACG,KAAA;AACH,EAAW,KAAA,MAAA,KAAA,IAAS,YAAY,MAAQ,EAAA;AACtC,IAAW,KAAA,MAAA,MAAA,IAAU,MAAM,OAAS,EAAA;AAClC,MAAI,IAAA,MAAA,CAAO,eAAe,IAAM,EAAA;AAC9B,QAAA,MAAA,CAAO,UAAa,GAAA,EAAA,CAAA;AAAA,OACtB;AAAA,KACF;AAAA,GACF;AACF,CAAA;;ACjMa,MAAA,iBAAA,GAAoB,CAC/B,MAAA,EACA,eACG,KAAA;AACH,EAAM,MAAA,EAAE,WAAc,GAAA,eAAA,CAAA;AAEtB,EAAA,MAAM,oBAAqD,EAAC,CAAA;AAC5D,EAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,IAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAClC,IAAI,IAAA,MAAA,CAAO,KAAK,UAAY,EAAA;AAC1B,MAAkB,iBAAA,CAAA,IAAA,CAAK,EAAE,GAAK,EAAA,IAAA,EAAM,OAAO,IAAK,CAAA,IAAA,IAAQ,KAAK,CAAA,CAAA;AAAA,KAC/D;AAAA,GACF;AAEA,EAAiB,gBAAA,CAAA,MAAA,EAAQ,mBAAmB,eAAe,CAAA,CAAA;AAC3D,EAAA,gBAAA,CAAiB,eAAe,CAAA,CAAA;AAClC,CAAA,CAAA;AAEA,MAAM,gBAAA,GAAmB,CACvB,MAAA,EACA,iBACA,EAAA;AAAA,EACE,SAAA;AAAA,EACA,WAAA,EAAa,EAAE,UAAA,EAAY,YAAa,EAAA;AAAA,EACxC,cAAgB,EAAA,EAAE,KAAO,EAAA,GAAA,EAAK,IAAK,EAAA;AAAA,EACnC,eAAA;AACF,CACG,KAAA;AACH,EAAM,MAAA,eAAA,GAAkB,SAAU,CAAA,QAAA,CAAS,SAAU,CAAA,UAAA,CAAA;AACrD,EAAA,MAAM,UAAa,GAAA;AAAA,IACjB,uBAAO,GAAI,CAAA;AAAA,MACT,GAAG,iBAAA;AAAA,MACH,IAAK,MAAO,CAAA,SAAA,GACR,iBAAiB,OAAQ,CAAA,GAAA,CAAI,CAAC,GAAS,MAAA;AAAA,QACrC,GAAA;AAAA,QACA,IAAA,EAAM,YAAY,GAAG,CAAA;AAAA,OACrB,CAAA,CAAA,GACF,eAAiB,EAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,GAAS,MAAA,EAAE,GAAK,EAAA,IAAA,EAAM,GAAI,EAAA,CAAE,MAAM,EAAC;AAAA,KACtE,CAAA;AAAA,GACH,CAAA;AAEA,EAAA,IACE,gBACA,UAAW,CAAA,MAAA,KAAW,aAAa,OAAQ,CAAA,MAAA,IAC3C,CAAC,UAAW,CAAA,IAAA;AAAA,IACV,CAAC,EAAE,IAAA,EAAW,KAAA,CAAC,YAAa,CAAA,OAAA,CAAQ,IAAK,CAAA,CAAC,MAAW,KAAA,IAAA,KAAS,MAAM,CAAA;AAAA,GAEtE,EAAA;AACA,IAAI,IAAA,UAAA,CAAW,WAAW,CAAG,EAAA;AAC3B,MAAA,MAAM,EAAE,GAAA,EAAQ,GAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AAC5B,MAAA,MAAM,UAAU,KAAM,CAAA,GAAG,KAAK,OAAQ,CAAA,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA;AAChD,MAAA,IAAI,OAAS,EAAA;AACX,QAAA,KAAA,MAAW,UAAU,OAAS,EAAA;AAC5B,UAAI,IAAA,MAAA,CAAO,SAAS,QAAU,EAAA,SAAA;AAE9B,UAAI,IAAA,MAAA,CAAO,KAAK,MAAQ,EAAA;AACtB,YAAO,MAAA,CAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,UAAa,GAAA,KAAA,CAAA,CAAA;AAAA,WACvC;AAEA,UAAI,IAAA,MAAA,CAAO,GAAG,MAAQ,EAAA;AACpB,YAAA,MAAM,MAAS,GAAA,MAAA,CAAO,MAAO,CAAA,MAAA,CAAO,GAAG,MAAM,CAAA,CAAA;AAC7C,YAAA,MAAA,CAAO,OAAO,EAAE,GAAG,MAAO,CAAA,IAAA,EAAM,YAAY,KAAU,CAAA,EAAA,CAAA;AACtD,YAAA,MAAA,CAAO,GAAG,MAAS,GAAA,MAAA,CAAA;AAAA,WACrB;AAAA,SACF;AAAA,OACF;AAAA,KACF;AACA,IAAA,OAAA;AAAA,GACF;AAEA,EAAM,MAAA,MAAA,GAAS,cAAc,OAAQ,CAAA,MAAA;AAAA,IACnC,CAAC,GAAA,KAAQ,CAAC,uBAAA,CAAwB,OAAO,GAAG,CAAA;AAAA,GAC9C,CAAA;AACA,EAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,IAAA,IAAI,OAAO,MAAW,KAAA,CAAA,IAAK,gBAAgB,MAAO,CAAA,CAAC,CAAC,CAAG,EAAA;AACrD,MAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,MAAO,CAAA,CAAC,CAAC,CAAA,CAAA;AACxC,MAAA,MAAA,CAAO,IAAK,CAAA,IAAA,CAAK,UACf,GAAA,YAAA,EAAc,IAAS,IAAA,IAAA,CAAA;AAAA,KACpB,MAAA;AACL,MAAA,IAAA,CAAK,aAAa,EAAE,OAAA,EAAS,MAAQ,EAAA,IAAA,EAAM,cAAc,IAAK,EAAA,CAAA;AAAA,KAChE;AAAA,GACF;AAEA,EAAA,MAAM,QAAQ,UAAW,CAAA,MAAA;AAAA,IACvB,CAAC,EAAE,GAAA,OAAU,CAAC,uBAAA,CAAwB,OAAO,GAAG,CAAA;AAAA,GAClD,CAAA;AACA,EAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,IAAI,IAAA,KAAA,CAAM,WAAW,CAAK,IAAA,eAAA,CAAgB,MAAM,CAAC,CAAA,CAAE,IAAI,CAAG,EAAA;AACxD,MAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,KAAM,CAAA,CAAC,EAAE,IAAI,CAAA,CAAA;AAC5C,MAAA,MAAA,CAAO,EAAG,CAAA,IAAA,CAAK,UACb,GAAA,eAAA,EAAiB,IAAS,IAAA,IAAA,CAAA;AAAA,KACvB,MAAA;AACL,MAAA,GAAA,CAAI,UAAa,GAAA;AAAA,QACf,SAAS,KAAM,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AAAA,QAC/B,MAAM,eAAiB,EAAA,IAAA;AAAA,OACzB,CAAA;AAAA,KACF;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,mBAAmB,CAAC;AAAA,EACxB,SAAA;AAAA,EACA,WAAA,EAAa,EAAE,UAAA,EAAY,YAAa,EAAA;AAAA,EACxC,MAAA;AAAA,EACA,UAAA;AACF,CAAuB,KAAA;AACrB,EAAM,MAAA,eAAA,GAAkB,SAAU,CAAA,QAAA,CAAS,SAAU,CAAA,UAAA,CAAA;AACrD,EAAA,IACE,YACA,IAAA,eAAA,IACA,YAAc,EAAA,IAAA,KAAS,iBAAiB,IACxC,EAAA;AACA,IAAA,UAAA,CAAW,IAAK,CAAA;AAAA,MACd,IAAM,EAAA,iBAAA;AAAA,MACN,IAAM,EAAA,YAAA;AAAA,MACN,WAAa,EAAA,MAAA;AAAA,MACb,WAAW,SAAU,CAAA,KAAA;AAAA,MACrB,IAAM,EAAA,YAAA,CAAa,IAAQ,IAAA,CAAA,EAAG,UAAU,KAAK,CAAA,KAAA,CAAA;AAAA,MAC7C,EAAI,EAAA,eAAA,CAAgB,IAAQ,IAAA,CAAA,EAAG,SAAS,CAAA,KAAA,CAAA;AAAA,KACzC,CAAA,CAAA;AAAA,GACH;AACF,CAAA;;ACzBO,MAAM,yBAA4B,GAAA,CACvC,MACA,EAAA,eAAA,EACA,KACA,kBACG,KAAA;AACH,EAAM,MAAA,SAAA,GAAY,kBAAmB,CAAA,MAAA,EAAQ,eAAe,CAAA,CAAA;AAC5D,EAAM,MAAA,mBAAA,GAAsB,0BAA2B,CAAA,MAAA,EAAQ,SAAS,CAAA,CAAA;AAGxE,EAAA,MAAM,aAA+B,GAAA;AAAA,IACnC,OAAA,sBAAa,GAAI,EAAA;AAAA,IACjB,QAAA,sBAAc,GAAI,EAAA;AAAA,GACpB,CAAA;AAGA,EAAA,MAAM,aAA+B,GAAA;AAAA,IACnC,OAAA,sBAAa,GAAI,EAAA;AAAA,IACjB,QAAA,sBAAc,GAAI,EAAA;AAAA,GACpB,CAAA;AAEA,EAAA,MAAM,aAA+B,GAAA;AAAA,IACnC,MAAA;AAAA,IACA,eAAA;AAAA,IACA,mBAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA;AAAA,IAEA,IAAM,EAAA,EAAE,OAAS,EAAA,CAAA,EAAG,UAAU,CAAE,EAAA;AAAA,IAChC,GAAA;AAAA,IACA,kBAAA;AAAA,GACF,CAAA;AAEA,EAAA,YAAA,CAAa,eAAe,SAAS,CAAA,CAAA;AACrC,EAAA,YAAA,CAAa,eAAe,UAAU,CAAA,CAAA;AAEtC,EAAA,YAAA;AAAA,IACE,eAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AACA,EAAA,YAAA;AAAA,IACE,eAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,eAAe,CACnB;AAAA,EACE,MAAA;AAAA,EACA,eAAA;AAAA,EACA,mBAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAA;AAAA,EACA,kBAAA;AACF,CAAA,EACA,GACG,KAAA;AACH,EAAM,MAAA;AAAA,IACJ,cAAA,EAAgB,EAAE,KAAM,EAAA;AAAA,GACtB,GAAA,eAAA,CAAA;AAEJ,EAAM,MAAA,OAAA,GAAU,eAAgB,CAAA,WAAA,CAAY,GAAG,CAAA,CAAA;AAE/C,EAAA,KAAA,MAAW,UAAU,OAAS,EAAA;AAC5B,IAAM,MAAA,uBAAA,GAA0B,OAAO,OAAQ,CAAA,IAAA;AAAA,MAC7C,CAAC,MACC,KAAA,QAAA,IAAY,UAAU,uBAAwB,CAAA,KAAA,EAAO,OAAO,MAAM,CAAA;AAAA,KACtE,CAAA;AACA,IAAA,IAAI,uBAAyB,EAAA,SAAA;AAE7B,IAAA,aAAA,CAAc,MAAM,CAAA,CAAA;AAEpB,IAAA,MAAM,EAAE,KAAA,EAAO,MAAQ,EAAA,cAAA,EAAmB,GAAA,gBAAA;AAAA,MACxC,MAAA;AAAA,MACA,mBAAA;AAAA,MACA,SAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAgB,SAAU,CAAA,KAAA;AAAA,MAC1B,MAAA;AAAA,MACA,GAAA;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,EAAE,OAAS,EAAA,SAAA,EAAc,GAAA,MAAA,CAAA;AAE/B,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAA,gBAAA;AAAA,QACE,eAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,MAAM,CAAC,CAAA;AAAA,QACP,OAAO,CAAC,CAAA;AAAA,QACR,GAAA;AAAA,OACF,CAAA;AACA,MAAA,SAAA;AAAA,KACF;AAEA,IAAA,KAAA,MAAW,YAAY,KAAO,EAAA;AAC5B,MAAA,aAAA,CAAc,GAAG,CAAA,CAAE,GAAI,CAAA,QAAA,EAAmB,IAAI,CAAA,CAAA;AAAA,KAChD;AAEA,IAAA,MAAM,UAAwC,EAAC,CAAA;AAC/C,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,MAAO,CAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AAC9C,MAAM,MAAA,MAAA,GAAS,MAAO,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAC/B,MAAI,IAAA,EAAE,gBAAgB,MAAS,CAAA,EAAA,SAAA;AAE/B,MAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,QACX,MAAM,MAAO,CAAA,UAAA;AAAA,QACb,QAAQ,KAAM,CAAA,GAAA;AAAA,UACZ,CAAC,CAAA,KAAO,CAAE,CAAA,OAAA,CAAQ,CAAC,CAA6B,CAAA,UAAA;AAAA,SAClD;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAEA,IAAA,IAAI,OAAO,IAAM,EAAA;AACf,MAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,QACX,MAAM,MAAO,CAAA,IAAA;AAAA,QACb,QAAQ,KAAM,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,CAAA,CAAE,QAAQ,IAAc,CAAA;AAAA,OAClD,CAAA,CAAA;AAAA,KACH;AAEA,IAAA,IAAI,OAAO,KAAO,EAAA;AAChB,MAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,QACX,MAAM,MAAO,CAAA,KAAA;AAAA,QACb,QAAQ,KAAM,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,CAAA,CAAE,QAAQ,KAAe,CAAA;AAAA,OACnD,CAAA,CAAA;AAAA,KACH;AAEA,IAAA,IAAA,CAAK,GAAG,CAAA,EAAA,CAAA;AACR,IAAA,kBAAA,CAAmB,IAAK,CAAA;AAAA,MACtB,OAAA;AAAA,MACA,OAAO,CAAG,EAAA;AACR,QAAA,MAAM,QAAW,GAAA,CAAA,KAAM,KAAY,CAAA,GAAA,KAAA,CAAA,GAAY,MAAM,CAAC,CAAA,CAAA;AAEtD,QAAA,gBAAA;AAAA,UACE,eAAA;AAAA,UACA,MAAA;AAAA,UACA,SAAA;AAAA,UACA,QAAA;AAAA,UACA,CAAM,KAAA,KAAA,CAAA,GAAY,KAAY,CAAA,GAAA,MAAA,CAAO,CAAC,CAAA;AAAA,UACtC,GAAA;AAAA,SACF,CAAA;AAEA,QAAA,IAAI,QAAU,EAAA;AACZ,UAAc,aAAA,CAAA,GAAG,CAAE,CAAA,MAAA,CAAO,QAAiB,CAAA,CAAA;AAAA,SAC7C;AAEA,QAAI,IAAA,CAAC,EAAE,IAAK,CAAA,GAAG,KAAK,aAAc,CAAA,GAAG,EAAE,IAAM,EAAA;AAC3C,UAAS,QAAA,CAAA,eAAA,EAAiB,CAAC,GAAG,aAAA,CAAc,GAAG,CAAE,CAAA,IAAA,EAAM,CAAA,EAAG,GAAG,CAAA,CAAA;AAE7D,UAAI,IAAA,CAAC,gBAAgB,SAAW,EAAA;AAC9B,YAAA,eAAA,CAAgB,SAAY,GAAA,IAAA,CAAA;AAC5B,YAAI,GAAA,CAAA,IAAA,CAAK,gBAAgB,cAAc,CAAA,CAAA;AAAA,WACzC;AAAA,SACF;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF,CAAA,CAAA;AAEA,MAAM,kBAAA,GAAqB,CACzB,MACA,EAAA,EAAE,WAAW,cAAgB,EAAA,EAAE,KAAM,EAAA,EACvB,KAAA;AACd,EAAA,MAAM,YAAuB,EAAE,OAAA,EAAS,EAAI,EAAA,QAAA,EAAU,EAAG,EAAA,CAAA;AAEzD,EAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,IAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAClC,IAAA,IAAI,CAAC,MAAO,CAAA,IAAA,CAAK,WAAW,CAAC,MAAA,CAAO,KAAK,QAAU,EAAA,SAAA;AAEnD,IAAM,MAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAK,IAAQ,IAAA,GAAA,CAAA;AACjC,IAAI,IAAA,uBAAA,CAAwB,KAAO,EAAA,IAAI,CAAG,EAAA,SAAA;AAE1C,IAAA,mBAAA,CAAoB,MAAQ,EAAA,SAAA,EAAW,GAAK,EAAA,IAAA,EAAM,QAAQ,SAAS,CAAA,CAAA;AACnE,IAAA,mBAAA,CAAoB,MAAQ,EAAA,SAAA,EAAW,GAAK,EAAA,IAAA,EAAM,QAAQ,UAAU,CAAA,CAAA;AAAA,GACtE;AAEA,EAAuB,sBAAA,CAAA,MAAA,EAAQ,SAAW,EAAA,SAAA,EAAW,SAAS,CAAA,CAAA;AAC9D,EAAuB,sBAAA,CAAA,MAAA,EAAQ,SAAW,EAAA,SAAA,EAAW,UAAU,CAAA,CAAA;AAE/D,EAAO,OAAA,SAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,sBAAsB,CAC1B,MAAA,EACA,WACA,SACA,EAAA,IAAA,EACA,QACA,GACG,KAAA;AACH,EAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAC7B,EAAA,IAAI,CAAC,KAAO,EAAA,OAAA;AAEZ,EAAA,SAAA,CAAU,GAAG,CAAE,CAAA,IAAA;AAAA,IACb,GAAI,KAAoC,CAAA,GAAA;AAAA,MACtC,CAAC;AAAA,QACC,SAAS,EAAE,OAAA,EAAS,SAAS,KAAO,EAAA,MAAA,EAAQ,GAAG,OAAQ,EAAA;AAAA,QACvD,IAAM,EAAA,EAAA;AAAA,QACN,GAAG,KAAA;AAAA,OACC,KAAA;AACJ,QAAM,MAAA,CAAA,GAAI,GAAQ,KAAA,UAAA,GAAa,EAAM,GAAA,KAAA,CAAA,CAAA;AACrC,QAAO,OAAA;AAAA,UACL,OAAS,EAAA;AAAA,YACP;AAAA,cACE,OAAA;AAAA,cACA,OAAA;AAAA,cACA,KAAA;AAAA,cACA,MAAA;AAAA,cACA,MAAQ,EAAA,IAAA;AAAA,cACR,IAAM,EAAA,CAAA;AAAA,aACR;AAAA,WACF;AAAA,UACA,GAAG,KAAA;AAAA,UACH,OAAS,EAAA,OAAA,CAAQ,OACb,GAAA,MAAA,CAAO,SACL,GAAA;AAAA,YACE,GAAG,OAAA;AAAA,YACH,SAAS,OAAQ,CAAA,OAAA,CAAQ,OAAO,CAAA,CAAE,IAAI,WAAW,CAAA;AAAA,cAEnD,OACF,GAAA,OAAA;AAAA,UACJ,UAAY,EAAA;AAAA,YACV;AAAA,cACE,OAAA;AAAA,cACA,OAAA;AAAA,cACA,KAAA;AAAA,cACA,MAAA;AAAA,cACA,MAAQ,EAAA,SAAA;AAAA,cACR,IAAM,EAAA,CAAA;AAAA,aACR;AAAA,WACF;AAAA,UACA,aAAa,OAAQ,CAAA,OAAA;AAAA,SACvB,CAAA;AAAA,OACF;AAAA,KACF;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,sBAAyB,GAAA,CAC7B,MACA,EAAA,SAAA,EACA,WACA,GACG,KAAA;AACH,EAAA,MAAM,KAAQ,GAAA,SAAA,CAAU,QAAS,CAAA,SAAA,CAAU,GAAG,CAAA,CAAA;AAC9C,EAAA,IAAI,CAAC,KAAO,EAAA,OAAA;AAEZ,EAAA,SAAA,CAAU,GAAG,CAAE,CAAA,IAAA;AAAA,IACb,GAAI,KAAA,CAA8B,GAAI,CAAA,CAAC,CAAO,MAAA;AAAA,MAC5C,GAAG,CAAA;AAAA,MACH,OAAS,EAAA,MAAA,CAAO,SACZ,GAAA,CAAA,CAAE,OAAQ,CAAA,GAAA;AAAA,QAAI,CAAC,CAAA,KACb,QAAY,IAAA,CAAA,GAAI,EAAE,GAAG,CAAG,EAAA,MAAA,EAAQ,WAAY,CAAA,CAAA,CAAE,MAAM,CAAA,EAAM,GAAA,CAAA;AAAA,UAE5D,CAAE,CAAA,OAAA;AAAA,MACN,YAAY,CAAE,CAAA,OAAA;AAAA,MACd,OACE,EAAA,CAAA,CAAE,OAAQ,CAAA,OAAA,IAAW,OAAO,SACxB,GAAA;AAAA,QACE,GAAG,CAAE,CAAA,OAAA;AAAA,QACL,SAAS,OAAQ,CAAA,CAAA,CAAE,QAAQ,OAAO,CAAA,CAAE,IAAI,WAAW,CAAA;AAAA,UAErD,CAAE,CAAA,OAAA;AAAA,MACR,WAAA,EAAa,EAAE,OAAQ,CAAA,OAAA;AAAA,KACvB,CAAA,CAAA;AAAA,GACJ,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,0BAAA,GAA6B,CACjC,MAAA,EACA,SACoB,KAAA;AACpB,EAAO,OAAA;AAAA,IACL,OAAS,EAAA,8BAAA,CAA+B,MAAQ,EAAA,SAAA,EAAW,SAAS,CAAA;AAAA,IACpE,QAAU,EAAA,8BAAA,CAA+B,MAAQ,EAAA,SAAA,EAAW,UAAU,CAAA;AAAA,GACxE,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,8BAAiC,GAAA,CACrC,MACA,EAAA,SAAA,EACA,GACwB,KAAA;AACxB,EAAA,OAAO,SAAU,CAAA,GAAG,CAAE,CAAA,GAAA,CAAI,CAAC,QAAa,KAAA;AACtC,IAAA,aAAA,CAAc,SAAS,OAAgB,CAAA,CAAA;AAEvC,IAAA,OAAO,gBAAiB,CAAA;AAAA,MACtB,GAAG,QAAS,CAAA,OAAA;AAAA,MACZ,SACE,QAAS,CAAA,OAAA,CAAQ,YAAY,KACzB,CAAA,GAAA,KAAA,CAAA,GACA,OAAO,SACP,GAAA,OAAA,CAAQ,SAAS,OAAQ,CAAA,OAAO,EAAE,GAAI,CAAA,WAAW,IACjD,OAAQ,CAAA,QAAA,CAAS,QAAQ,OAAO,CAAA;AAAA,MACtC,SAAS,QAAS,CAAA,OAAA;AAAA,MAClB,IAAA,EAAM,SAAS,OAAQ,CAAA,IAAA;AAAA,MACvB,YAAY,QAAS,CAAA,UAAA;AAAA,MACrB,aAAa,QAAS,CAAA,WAAA;AAAA,KACvB,CAAA,CAAA;AAAA,GACF,CAAA,CAAA;AACH,CAAA,CAAA;AAEA,MAAM,aAAA,GAAgB,CAAC,IAMjB,KAAA;AACJ,EAAA,IAAI,KAAK,KAAO,EAAA,IAAA,CAAK,KAAQ,GAAA,IAAA,CAAK,MAAM,WAAY,EAAA,CAAA;AACpD,EAAA,IAAI,IAAK,CAAA,KAAA,KAAU,OAAS,EAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA,CAAA;AACzC,EAAA,IAAI,CAAC,IAAA,CAAK,MAAQ,EAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA,CAAA;AAChC,EAAA,IAAI,IAAK,CAAA,gBAAA,KAAqB,KAAO,EAAA,IAAA,CAAK,gBAAmB,GAAA,KAAA,CAAA,CAAA;AAC7D,EAAA,IAAI,KAAK,OAAS,EAAA;AAChB,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AAC5C,MAAA,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,IAAO,GAAA,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA;AAAA,KACvC;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,gBAAA,GAAmB,CACvB,KAMG,KAAA;AACH,EAAA,IAAI,aAAgB,GAAA,KAAA,CAAA;AACpB,EAAA,MAAM,OAAU,GAAA,KAAA,CAAM,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA;AAC5C,IAAA,MAAM,MAAS,GAAA;AAAA,MACb,GAAG,MAAA;AAAA,MACH,UAAY,EAAA,KAAA,CAAA;AAAA,MACZ,eAAe,YAAgB,IAAA,MAAA;AAAA,KACjC,CAAA;AACA,IAAI,IAAA,MAAA,CAAO,eAA+B,aAAA,GAAA,IAAA,CAAA;AAC1C,IAAO,OAAA,MAAA,CAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACH,UAAY,EAAA,KAAA,CAAA;AAAA,IACZ,SAAW,EAAA,KAAA,CAAA;AAAA,IACX,IAAM,EAAA,KAAA,CAAA;AAAA,IACN,OAAA,EAAS,CAAC,CAAC,KAAM,CAAA,IAAA;AAAA,IACjB,KAAO,EAAA,KAAA,CAAA;AAAA,IACP,QAAA,EAAU,CAAC,CAAC,KAAM,CAAA,KAAA;AAAA,IAClB,OAAA;AAAA,IACA,aAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAOA,MAAM,gBAAA,GAAmB,CACvB,MACA,EAAA,mBAAA,EACA,WACA,aACA,EAAA,SAAA,EACA,QACA,GACG,KAAA;AACH,EAAA,MAAM,gBAAmB,GAAA,gBAAA;AAAA,IACvB,GAAA,KAAQ,YACJ,MACA,GAAA;AAAA,MACE,GAAG,MAAA;AAAA,MACH,OAAS,EAAA,KAAA,CAAA;AAAA,MACT,SAAS,MAAO,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,QAAQ,CAAO,MAAA;AAAA,QAC1C,GAAG,MAAA;AAAA,QACH,IAAA,EAAO,MAA+B,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,OAC/C,CAAA,CAAA;AAAA,KACJ;AAAA,GACN,CAAA;AAEA,EAAM,MAAA,EAAE,KAAO,EAAA,MAAA,EAAW,GAAA,0BAAA;AAAA,IACxB,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,cAAiB,GAAA,KAAA,CAAM,MAAU,IAAA,iBAAA,CAAkB,gBAAgB,CAAA,CAAA;AAEzE,EAAO,OAAA,EAAE,KAAO,EAAA,MAAA,EAAQ,cAAe,EAAA,CAAA;AACzC,CAAA,CAAA;AAEA,MAAM,0BAAA,GAA6B,CACjC,MACA,EAAA,mBAAA,EACA,WACA,aACA,EAAA,SAAA,EACA,QACA,GACe,KAAA;AACf,EAAA,MAAM,QAAiD,EAAC,CAAA;AACxD,EAAA,MAAM,SAAiC,EAAC,CAAA;AAExC,EAAA,MAAM,EAAE,OAAA,EAAS,SAAW,EAAA,GAAG,sBAAyB,GAAA,MAAA,CAAA;AAExD,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,oBAAoB,GAAG,CAAA,CAAE,QAAQ,CAAK,EAAA,EAAA;AACxD,IAAA,IAAI,aAAc,CAAA,GAAG,CAAE,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,SAAA;AAE/B,IAAM,MAAA,EAAE,SAAS,WAAa,EAAA,GAAG,UAAa,GAAA,mBAAA,CAAoB,GAAG,CAAA,CAAE,CAAC,CAAA,CAAA;AACxE,IAAA,IACE,UAAU,MAAW,KAAA,WAAA,CAAY,MACjC,IAAA,CAAC,UAAU,IAAK,CAAA,CAAC,QAAUC,EAAAA,EAAAA,KAAM,CAAC,WAAY,CAAA,QAAA,EAAU,YAAYA,EAAC,CAAC,CAAC,CACvE,EAAA;AACA,MAAA,IAAI,CAAmB,GAAA,oBAAA,CAAA;AACvB,MAAA,IAAI,CAAI,GAAA,QAAA,CAAA;AACR,MAAA,MAAM,QACJ,GAAA,CAAA,CAAE,IACD,IAAA,CAAA,GAAA,KAAQ,YAAY,YAAe,GAAA,cAAA;AAAA,QAClC,SAAA;AAAA,QACA,SAAA;AAAA,OACF,CAAA;AACF,MAAI,IAAA,CAAA,CAAE,IAAS,KAAA,CAAA,CAAE,IAAM,EAAA;AACrB,QAAA,CAAA,GAAI,EAAE,GAAG,CAAG,EAAA,IAAA,EAAM,KAAU,CAAA,EAAA,CAAA;AAC5B,QAAI,CAAA,GAAA;AAAA,UACF,GAAG,CAAA;AAAA,UACH,IAAM,EAAA,KAAA,CAAA;AAAA,UACN,UAAY,EAAA,KAAA,CAAA;AAAA,UACZ,WAAa,EAAA,KAAA,CAAA;AAAA,SACf,CAAA;AACA,QAAA,IAAI,CAAE,CAAA,QAAA,IAAY,CAAC,CAAA,CAAE,QAAU,EAAA;AAC7B,UAAE,CAAA,CAAA,QAAA,GAAW,OAAO,QAAY,IAAA,SAAA,CAAA;AAAA,SAClC;AAEA,QAAI,IAAA,WAAA,CAAY,CAAG,EAAA,CAAC,CAAG,EAAA;AACrB,UAAA,KAAA,CAAM,IAAK,CAAA,SAAA,CAAU,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AAC5B,UAAO,MAAA,CAAA,IAAA;AAAA,YACL,oBAAA,CAAqB,IAAS,KAAA,QAAA,GAAW,QAAW,GAAA,KAAA,CAAA;AAAA,WACtD,CAAA;AAAA,SACF;AAAA,OACK,MAAA;AACL,QAAM,MAAA;AAAA;AAAA,UAEJ,UAAA;AAAA,UACA,WAAA;AAAA,UACA,GAAG,mBAAA;AAAA,SACD,GAAA,QAAA,CAAA;AAEJ,QAAI,IAAA,WAAA,CAAY,oBAAsB,EAAA,mBAAmB,CAAG,EAAA;AAC1D,UAAA,KAAA,CAAM,IAAK,CAAA,SAAA,CAAU,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AAC5B,UAAA,MAAA,CAAO,KAAK,KAAS,CAAA,CAAA,CAAA;AAAA,SACvB;AAAA,OACF;AAEA,MAAA,IAAI,KAAM,CAAA,MAAA,IAAU,CAAC,iBAAA,CAAkB,QAAQ,CAAG,EAAA;AAChD,QAAA,aAAA,CAAc,GAAG,CAAA,CAAE,GAAI,CAAA,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,OAChC;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,EAAE,OAAO,MAAO,EAAA,CAAA;AACzB,CAAA,CAAA;AAEA,MAAM,oBAAoB,CACxB,CAAA,KACG,EAAE,OAAW,IAAA,CAAA,CAAE,YAAY,CAAE,CAAA,aAAA,CAAA;AAElC,MAAM,mBAAmB,CACvB;AAAA,EACE,cAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AACF,CAAA,EACA,MACA,EAAA,SAAA,EACA,KACA,EAAA,MAAA,EACA,GACG,KAAA;AAjlBL,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAklBE,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAA,MAAM,IACJ,GAAA,MAAA,CAAO,IACN,KAAA,CAAA,GAAA,KAAQ,YAAY,YAAe,GAAA,cAAA;AAAA,MAClC,cAAe,CAAA,IAAA;AAAA,MACf,SAAA;AAAA,KACF,GACI,SACA,MAAO,CAAA,IAAA,CAAA;AAEb,IAAA,IAAI,UAAU,MAAW,KAAA,CAAA,IAAK,QAAY,IAAA,SAAA,CAAU,CAAC,CAAG,EAAA;AACtD,MAAM,MAAA,QAAA,GAAW,UAAU,CAAC,CAAA,CAAA;AAC5B,MAAM,MAAA,MAAA,GAAS,eAAgB,CAAA,QAAA,CAAS,MAAM,CAAA,CAAA;AAC9C,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,CAAA,CAAC,YAAO,IAAK,CAAA,IAAA,EAAZ,GAA0B,CAAA,KAAA,EAAA,CAAA,GAAA,CAAA,GAAA,KAAI,IAAK,CAAA;AAAA,UAClC,OAAS,EAAA,EAAE,GAAG,MAAA,EAAQ,IAAK,EAAA;AAAA,UAC3B,IAAO,EAAA,GAAA,KAAQ,SACX,GAAA,KAAA,CAAA,GACC,QAAyC,CAAA,IAAA;AAAA,SAC/C,CAAA,CAAA;AACD,QAAA,OAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,CAAA,CAAC,EAAe,GAAA,cAAA,CAAA,IAAA,EAAf,GAA6B,CAAA,KAAA,EAAA,CAAA,GAAA,CAAA,GAAA,KAAI,IAAK,CAAA;AAAA,MACrC,OAAS,EAAA,SAAA;AAAA,MACT,OAAS,EAAA,EAAE,GAAG,MAAA,EAAQ,IAAK,EAAA;AAAA,KAC5B,CAAA,CAAA;AAAA,aACQ,MAAQ,EAAA;AACjB,IAAA,UAAA,CAAW,IAAK,CAAA;AAAA,MACd,IAAM,EAAA,iBAAA;AAAA,MACN,IAAA,EAAM,GAAQ,KAAA,SAAA,GAAY,OAAU,GAAA,YAAA;AAAA,MACpC,WAAa,EAAA,MAAA;AAAA,MACb,WAAW,SAAU,CAAA,KAAA;AAAA,MACrB,MAAM,MAAO,CAAA,IAAA;AAAA,MACb,EAAI,EAAA,MAAA;AAAA,KACL,CAAA,CAAA;AAAA,GACH;AACF,CAAA,CAAA;AAMA,MAAM,eAAe,CACnB,eAAA,EACA,SACA,EAAA,aAAA,EACA,eACA,GACG,KAAA;AACH,EAAM,MAAA,UAAA,GAAa,SAAU,CAAA,GAAG,CAAE,CAAA,MAAA;AAAA,IAChC,CAAC,IAAA,EAAM,CACL,KAAA,CAAC,cAAc,GAAG,CAAA,CAAE,GAAI,CAAA,CAAC,KAAK,CAAC,aAAA,CAAc,GAAG,CAAA,CAAE,IAAI,IAAa,CAAA;AAAA,GACvE,CAAA;AACA,EAAA,IAAI,WAAW,MAAQ,EAAA;AACrB,IAAA,QAAA;AAAA,MACE,eAAA;AAAA,MACA,UAAA,CAAW,GAAI,CAAA,CAAC,CAAO,MAAA;AAAA,QACrB,GAAG,CAAA;AAAA,QACH,SAAS,CAAE,CAAA,UAAA;AAAA,QACX,aAAa,CAAE,CAAA,OAAA;AAAA,QACf,OAAS,EAAA,CAAA,CAAE,OAAQ,CAAA,OAAA,GACf,EAAE,GAAG,CAAE,CAAA,OAAA,EAAS,OAAS,EAAA,CAAA,CAAE,WAAY,EAAA,GACvC,CAAE,CAAA,OAAA;AAAA,OACN,CAAA,CAAA;AAAA,MACF,GAAA;AAAA,KACF,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,WAAW,CACf,EAAE,gBAAgB,eAAgB,EAAA,EAClC,KACA,GACG,KAAA;AA7pBL,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA8pBE,EAAA,MAAM,KAAS,GAAA,CAAA,EAAA,GAAA,cAAA,CAAe,GAAf,EAAA,GAAA,CAAA,KAAA,EAAA,CAAA,GAAA,CAAA,GAA4B,EAAC,CAAA,CAAA;AAC5C,EAAA,KAAA,MAAW,QAAQ,GAAK,EAAA;AACtB,IAAI,IAAA,IAAA,CAAK,QAAQ,MAAW,KAAA,CAAA,IAAK,YAAY,IAAK,CAAA,OAAA,CAAQ,CAAC,CAAG,EAAA;AAC5D,MAAM,MAAA,MAAA,GACJ,iBACI,IAAK,CAAA,WAAA,IAAe,KAAK,OAAS,EAAA,CAAC,EAAyB,MAChE,CAAA,CAAA;AACF,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,CAAA,CAAC,EAAO,GAAA,MAAA,CAAA,EAAA,CAAG,IAAV,EAAA,GAAA,CAAA,KAAA,EAAA,CAAA,GAAA,CAAA,GAAwB,EAAI,CAAA,EAAA,IAAA;AAAA,UAC3B,GAAA,KAAQ,YACJ,IACC,GAAA;AAAA,YACC,GAAG,IAAA;AAAA,YACH,IAAO,EAAA,IAAA,CAA2B,OAAQ,CAAA,CAAC,CAAE,CAAA,IAAA;AAAA,WAC/C;AAAA,SACN,CAAA;AACA,QAAA,SAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA,CAAA;AAAA,GACjB;AACF,CAAA;;AC3pBA,MAAM,YAEF,GAAA;AAAA,EACF,IAAM,EAAA,GAAA;AAAA,EACN,OAAS,EAAA,GAAA;AAAA,EACT,MAAQ,EAAA,GAAA;AACV,CAAA,CAAA;AAEA,MAAM,iBAAiB,EAAC,CAAA;AAGxB,KAAA,MAAW,OAAO,YAAc,EAAA;AAC9B,EACE,cAAA,CAAA,YAAA,CACE,GACF,CACF,CAAI,GAAA,GAAA,CAAA;AACN,CAAA;AAEA,MAAM,aAEF,GAAA;AAAA,EACF,WAAa,EAAA,GAAA;AAAA,EACb,QAAU,EAAA,GAAA;AAAA,EACV,OAAS,EAAA,GAAA;AAAA,EACT,UAAY,EAAA,GAAA;AAAA,EACZ,aAAe,EAAA,GAAA;AACjB,CAAA,CAAA;AAEA,MAAM,kBAAkB,EAAC,CAAA;AAGzB,KAAA,MAAW,OAAO,aAAe,EAAA;AAC/B,EACE,eAAA,CAAA,aAAA,CACE,GACF,CACF,CAAI,GAAA,GAAA,CAAA;AACN,CAAA;AAEO,MAAM,qBAAqB,CAChC,MAAA,EACA,GACA,EAAA,YAAA,EACA,eACA,WACS,KAAA;AAvEX,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAwEE,EAAA,KAAA,MAAW,mBAAmB,YAAc,EAAA;AAC1C,IAAA,MAAM,eAAkB,GAAA,gBAAA;AAAA,MACtB,MAAA;AAAA,MACA,eAAA;AAAA,MACA,aAAA;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,EAAE,SAAW,EAAA,WAAA,EAAa,cAAgB,EAAA,MAAA,EAAQ,iBACtD,GAAA,eAAA,CAAA;AACF,IAAA,MAAM,EAAE,KAAA,EAAO,GAAK,EAAA,IAAA,EAAS,GAAA,cAAA,CAAA;AAC7B,IAAA,IAAI,OAAU,GAAA,KAAA,CAAA;AAEd,IAAW,KAAA,MAAA,YAAA,IAAgB,YAAY,WAAa,EAAA;AAClD,MAAM,MAAA,EAAE,UAAY,EAAA,YAAA,EAAiB,GAAA,YAAA,CAAA;AACrC,MAAA,IAAI,CAAC,YAAc,EAAA,SAAA;AAEnB,MAAM,MAAA,gBAAA,GAAmB,aAAa,OAAQ,CAAA,IAAA;AAAA,QAAK,CAAC,MAAA,KAClD,uBAAwB,CAAA,KAAA,EAAO,MAAM,CAAA;AAAA,OACvC,CAAA;AACA,MAAA,IAAI,gBAAkB,EAAA,SAAA;AAEtB,MAAM,MAAA,YAAA,GACJ,YACE,CAAG,EAAA,YAAA,CAAa,aAAa,CAAI,CAAA,EAAA,YAAA,CAAa,YAAY,CAC5D,CAAA,CAAA,CAAA;AACF,MAAA,MAAM,0BACJ,YACA,IAAA,YAAA,CAAa,cAAe,CAAA,IAAA,CAAK,CAAC,MAAW,KAAA;AAC3C,QAAM,MAAA,GAAA,GAAM,uBAAwB,CAAA,YAAA,EAAc,MAAM,CAAA,CAAA;AAExD,QAAO,OAAA,GAAA,CAAA;AAAA,OACR,CAAA,CAAA;AACH,MAAA,IAAI,uBAAyB,EAAA,SAAA;AAE7B,MAAA,IAAI,KAAQ,GAAA,KAAA,CAAA;AACZ,MAAI,IAAA,MAAA,CAAA;AACJ,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,eAAA,CAAgB,QAAQ,CAAK,EAAA,EAAA;AAC/C,QAAM,MAAA,cAAA,GAAiB,gBAAgB,CAAC,CAAA,CAAA;AACxC,QAAA,MAAM,iBAAiB,cAAe,CAAA,UAAA,CAAA;AACtC,QAAI,IAAA,WAAA,CAAY,YAAc,EAAA,cAAc,CAAG,EAAA;AAC7C,UAAQ,KAAA,GAAA,IAAA,CAAA;AACR,UAAgB,eAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAE3B,UAAM,MAAA,QAAA,GACJ,cAAe,CAAA,cAAA,CAAe,IAC9B,IAAA,iBAAA;AAAA,YACE,SAAU,CAAA,KAAA;AAAA,YACV,cAAA;AAAA,YACA,MAAO,CAAA,SAAA;AAAA,WACT,CAAA;AACF,UAAI,IAAA,QAAA,KAAa,aAAa,IAAM,EAAA;AAClC,YAAS,MAAA,GAAA,QAAA,CAAA;AAAA,WACX;AAAA,SACF;AAAA,OACF;AAEA,MAAA,IAAI,CAAC,KAAO,EAAA;AACV,QAAA,MAAM,UAAa,GAAA,4BAAA;AAAA,UACjB,MAAA;AAAA,UACA,YAAA;AAAA,UACA,YAAA;AAAA,SACF,CAAA;AAEA,QACE,IAAA,YAAA,CAAa,QAAQ,MAAW,KAAA,CAAA,IAChC,gBAAgB,YAAa,CAAA,OAAA,CAAQ,CAAC,CAAC,CACvC,EAAA;AACA,UAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,YAAa,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACtD,UAAC,CAAA,CAAA,EAAA,GAAA,MAAA,CAAO,KAAK,IAAK,EAAA,WAAA,KAAjB,GAAiB,WAAgB,GAAA,KAAI,IAAK,CAAA;AAAA,YACzC,SAAA,EAAW,WAAW,UAAW,CAAA,SAAA;AAAA,YACjC,cAAA,EAAgB,WAAW,UAAW,CAAA,cAAA;AAAA,YACtC,OAAA,EAAS,WAAW,UAAW,CAAA,OAAA;AAAA,WAChC,CAAA,CAAA;AAAA,SACI,MAAA;AACL,UAAA,CAAC,KAAK,WAAL,KAAA,IAAA,CAAK,cAAgB,EAAC,CAAA,EAAG,KAAK,UAAU,CAAA,CAAA;AAAA,SAC3C;AAEA,QAAU,OAAA,GAAA,IAAA,CAAA;AAAA,iBACD,MAAQ,EAAA;AACjB,QAAA,GAAA,CAAI,IAAK,CAAA;AAAA,UACP,IAAM,EAAA,iBAAA;AAAA,UACN,IAAM,EAAA,YAAA;AAAA,UACN,WAAa,EAAA,MAAA;AAAA,UACb,WAAW,SAAU,CAAA,KAAA;AAAA,UACrB,MAAM,YAAa,CAAA,IAAA;AAAA,UACnB,EAAI,EAAA,MAAA;AAAA,SACL,CAAA,CAAA;AAAA,OACH;AAAA,KACF;AAEA,IAAA,IAAI,gBAAgB,MAAQ,EAAA;AAC1B,MAAA,MAAM,WAAe,GAAA,GAAA,CAAI,WAAJ,KAAA,GAAA,CAAI,cAAgB,EAAC,CAAA,CAAA;AAC1C,MAAA,KAAA,MAAW,EAAE,cAAA,EAAgB,UAAW,EAAA,IAAK,eAAiB,EAAA;AAC5D,QACE,IAAA,UAAA,CAAW,QAAQ,MAAW,KAAA,CAAA,IAC9B,gBAAgB,UAAW,CAAA,OAAA,CAAQ,CAAC,CAAC,CACrC,EAAA;AACA,UAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,UAAW,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACpD,UAAC,CAAA,CAAA,EAAA,GAAA,MAAA,CAAO,GAAG,IAAK,EAAA,WAAA,KAAf,GAAe,WAAgB,GAAA,KAAI,IAAK,CAAA;AAAA,YACvC,WAAW,UAAW,CAAA,YAAA;AAAA,YACtB,cAAA,EAAgB,eAAe,UAAW,CAAA,cAAA;AAAA,YAC1C,OAAA,EAAS,eAAe,UAAW,CAAA,OAAA;AAAA,WACpC,CAAA,CAAA;AAAA,SACI,MAAA;AACL,UAAA,WAAA,CAAY,KAAK,cAAc,CAAA,CAAA;AAAA,SACjC;AAAA,OACF;AAEA,MAAU,OAAA,GAAA,IAAA,CAAA;AAAA,KACZ;AAEA,IAAI,IAAA,OAAA,IAAW,CAAC,eAAA,CAAgB,SAAW,EAAA;AACzC,MAAA,eAAA,CAAgB,SAAY,GAAA,IAAA,CAAA;AAC5B,MAAI,GAAA,CAAA,IAAA,CAAK,gBAAgB,cAAc,CAAA,CAAA;AAAA,KACzC;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,gBAAA,GAAmB,CACvB,MAAA,EACA,EAAE,SAAA,EAAW,gBAAgB,EAAE,KAAA,EAAQ,EAAA,EACvC,aACqB,KAAA;AACrB,EAAA,MAAM,kBAAoC,EAAC,CAAA;AAC3C,EAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,IAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAClC,IAAI,IAAA,CAAC,MAAO,CAAA,IAAA,CAAK,WAAa,EAAA,SAAA;AAE9B,IAAM,MAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAK,IAAQ,IAAA,GAAA,CAAA;AACjC,IAAI,IAAA,uBAAA,CAAwB,KAAO,EAAA,IAAI,CAAG,EAAA,SAAA;AAE1C,IAAgB,eAAA,CAAA,IAAA;AAAA,MACd,GAAG,MAAO,CAAA,IAAA,CAAK,WAAY,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AACpC,QAAM,MAAA,OAAA,GAAU,CAAC,IAAI,CAAA,CAAA;AAErB,QAAM,MAAA,SAAA,GAAY,iBAAkB,CAAA,CAAA,CAAE,SAAS,CAAA,CAAA;AAE/C,QAAO,OAAA,eAAA;AAAA,UACL,MAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAM,EAAE,OAAS,EAAA,IAAA;AAAA,YACjB,UAAY,EAAA;AAAA,cACV,OAAA,EAAS,CAAC,IAAI,CAAA;AAAA,cACd,SAAA;AAAA,cACA,gBAAgB,CAAE,CAAA,cAAA;AAAA,cAClB,SAAS,CAAE,CAAA,OAAA;AAAA,aACb;AAAA,WACF;AAAA,UACA;AAAA,YACE,OAAA;AAAA,YACA,SAAA;AAAA,YACA,gBAAgB,CAAE,CAAA,cAAA;AAAA,YAClB,SAAS,CAAE,CAAA,OAAA;AAAA,WACb;AAAA,UACA,aAAA;AAAA,SACF,CAAA;AAAA,OACD,CAAA;AAAA,KACH,CAAA;AAAA,GACF;AAEA,EAAI,IAAA,SAAA,CAAU,QAAS,CAAA,SAAA,CAAU,WAAa,EAAA;AAC5C,IAAA,KAAA,MAAW,eAAmB,IAAA,SAAA,CAAU,QAAS,CAAA,SAAA,CAAU,WAAa,EAAA;AACtE,MAAM,MAAA,EAAE,UAAY,EAAA,IAAA,EAAS,GAAA,eAAA,CAAA;AAC7B,MAAA,IAAI,CAAC,IAAM,EAAA,SAAA;AAEX,MAAM,MAAA,SAAA,GAAY,iBAAkB,CAAA,IAAA,CAAK,SAAS,CAAA,CAAA;AAElD,MAAgB,eAAA,CAAA,IAAA;AAAA,QACd,eAAA;AAAA,UACE,MAAA;AAAA,UACA;AAAA,YACE,GAAG,eAAA;AAAA,YACH,UAAY,EAAA;AAAA,cACV,GAAG,IAAA;AAAA,cACH,SAAA;AAAA,aACF;AAAA,WACF;AAAA,UACA;AAAA,YACE,GAAG,IAAA;AAAA,YACH,SAAA;AAAA,YACA,OAAA,EAAS,OAAO,SACZ,GAAA,IAAA,CAAK,QAAQ,GAAI,CAAA,WAAW,IAC5B,IAAK,CAAA,OAAA;AAAA,YACT,cAAA,EAAgB,OAAO,SACnB,GAAA,IAAA,CAAK,eAAe,GAAI,CAAA,WAAW,IACnC,IAAK,CAAA,cAAA;AAAA,WACX;AAAA,UACA,aAAA;AAAA,SACF;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,eAAA,CAAA;AACT,CAAA,CAAA;AAEa,MAAA,iBAAA,GAAoB,CAC/B,SACG,KAAA;AACH,EAAI,IAAA,OAAO,cAAc,QAAU,EAAA;AACjC,IAAA,MAAM,EAAE,MAAQ,EAAA,KAAA,EAAU,GAAA,KAAK,WAAa,GAAA,CAAA;AAC5C,IAAA,SAAA,GAAY,mBAAoB,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,OAAO,CAAA,CAAA;AAAA,GACzD;AACA,EAAO,OAAA,SAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,eAAkB,GAAA,CACtB,MACA,EAAA,cAAA,EACA,YACA,aACmB,KAAA;AACnB,EAAA,MAAM,EAAE,SAAA,EAAW,OAAS,EAAA,cAAA,EAAgB,SAAY,GAAA,UAAA,CAAA;AACxD,EAAA,MAAM,CAAC,MAAA,EAAQ,KAAK,CAAA,GAAI,0BAA0B,SAAS,CAAA,CAAA;AAE3D,EAAO,OAAA;AAAA,IACL,UAAY,EAAA;AAAA,MACV,eAAe,MAAU,IAAA,aAAA;AAAA,MACzB,YAAc,EAAA,KAAA;AAAA,MACd,OAAA;AAAA,MACA,gBAAgB,MAAO,CAAA,SAAA,GACnB,cAAe,CAAA,GAAA,CAAI,WAAW,CAC9B,GAAA,cAAA;AAAA,MACJ,KAAO,EAAA,YAAA,CAAa,OAAS,EAAA,KAAA,IAAS,QAAQ,CAAA;AAAA,MAC9C,QAAU,EAAA,aAAA,CAAc,OAAS,EAAA,QAAA,IAAY,WAAW,CAAA;AAAA,MACxD,QAAU,EAAA,aAAA,CAAc,OAAS,EAAA,QAAA,IAAY,WAAW,CAAA;AAAA,KAC1D;AAAA,IACA,cAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,4BAA+B,GAAA,CACnC,MACA,EAAA,YAAA,EACA,YACyD,MAAA;AAAA,EACzD,IAAA,EACE,aAAa,IACb,KAAA,iBAAA;AAAA,IACE,YAAa,CAAA,SAAA;AAAA,IACb,EAAE,YAAY,YAAa,EAAA;AAAA,IAC3B,MAAO,CAAA,SAAA;AAAA,GACT,GACI,SACA,YAAa,CAAA,IAAA;AAAA,EACnB,UAAY,EAAA;AAAA,IACV,SAAS,YAAa,CAAA,OAAA;AAAA,IACtB,WAAW,CAAG,EAAA,YAAA,CAAa,aAAa,CAAA,CAAA,EAAI,aAAa,YAAY,CAAA,CAAA;AAAA,IACrE,gBAAgB,YAAa,CAAA,cAAA;AAAA,IAC7B,OAAS,EAAA;AAAA,MACP,OACE,YAAa,CAAA,KAAA,KAAU,MACnB,KACA,CAAA,GAAA,cAAA,CAAe,aAAa,KAAK,CAAA;AAAA,MACvC,UACE,YAAa,CAAA,QAAA,KAAa,MACtB,KACA,CAAA,GAAA,eAAA,CAAgB,aAAa,QAAQ,CAAA;AAAA,MAC3C,UACE,YAAa,CAAA,QAAA,KAAa,MACtB,KACA,CAAA,GAAA,eAAA,CAAgB,aAAa,QAAQ,CAAA;AAAA,KAC7C;AAAA,GACF;AACF,CAAA,CAAA;;AC/TO,MAAM,aAAgB,GAAA,CAC3B,GACA,EAAA,eAAA,EACA,kBACS,KAAA;AACT,EAAM,MAAA,UAAA,GAAa,kBAAkB,eAAe,CAAA,CAAA;AACpD,EAAM,MAAA;AAAA,IACJ,WAAA;AAAA,IACA,cAAA,EAAgB,EAAE,GAAA,EAAK,KAAM,EAAA;AAAA,GAC3B,GAAA,eAAA,CAAA;AAEJ,EAAA,MAAM,cAAc,WAAY,CAAA,WAAA,CAAY,KAAK,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA,CAAA;AAC/D,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAA,IAAI,WAAW,MAAQ,EAAA;AACrB,MAAA,MAAM,WAAe,GAAA,GAAA,CAAI,WAAJ,KAAA,GAAA,CAAI,cAAgB,EAAC,CAAA,CAAA;AAC1C,MAAA,KAAA,MAAW,aAAa,UAAY,EAAA;AAClC,QACE,IAAA,CAAC,UAAU,MACX,IAAA,CAAC,gBAAgB,eAAgB,CAAA,SAAA,CAAU,MAAM,CACjD,EAAA;AACA,UAAA,WAAA,CAAY,IAAK,CAAA;AAAA,YACf,KAAA,EAAO,UAAU,KAAM,CAAA,GAAA;AAAA,YACvB,MAAM,SAAU,CAAA,IAAA;AAAA,WACjB,CAAA,CAAA;AAAA,SACH;AAAA,OACF;AAAA,KACF;AACA,IAAA,OAAA;AAAA,GACF;AAEA,EAAA,IAAI,IAAO,GAAA,CAAA,CAAA;AACX,EAAM,MAAA,eAAA,uBAAsB,GAAY,EAAA,CAAA;AACxC,EAAW,KAAA,MAAA,YAAA,IAAgB,YAAY,WAAa,EAAA;AAClD,IAAA,MAAM,EAAE,KAAA,EAAO,OAAS,EAAA,IAAA,EAAS,GAAA,YAAA,CAAA;AACjC,IAAA,IAAI,CAAC,OAAS,EAAA,SAAA;AAEd,IAAM,MAAA,gBAAA,GAAmB,QAAQ,OAAS,EAAA,IAAA;AAAA,MAAK,CAAC,MAAA,KAC9C,uBAAwB,CAAA,KAAA,EAAO,MAAM,CAAA;AAAA,KACvC,CAAA;AACA,IAAA,IAAI,gBAAkB,EAAA,SAAA;AAEtB,IAAA,IAAI,WAAW,MAAQ,EAAA;AACrB,MAAA,IAAA,EAAA,CAAA;AACA,MAAA,kBAAA,CAAmB,IAAK,CAAA;AAAA,QACtB,OAAS,EAAA;AAAA,UACP;AAAA,YACE,MAAM,OAAQ,CAAA,UAAA;AAAA,YACd,MAAA,EAAQ,WAAW,GAAI,CAAA,CAAC,EAAE,KAAM,EAAA,KAAM,MAAM,GAAG,CAAA;AAAA,WACjD;AAAA,SACF;AAAA,QACA,OAAO,CAAG,EAAA;AACR,UAAA,IAAI,MAAM,KAAW,CAAA,EAAA;AACnB,YAAA,eAAA,CAAgB,IAAI,CAAC,CAAA,CAAA;AAAA,WAChB,MAAA;AACL,YAAU,SAAA,CAAA,eAAA,EAAiB,SAAS,IAAI,CAAA,CAAA;AAAA,WAC1C;AAEA,UAAI,IAAA,EAAE,SAAS,CAAG,EAAA,OAAA;AAElB,UAAA,MAAM,cAAsC,EAAC,CAAA;AAE7C,UAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,KAAA,EAAOA,EAAM,KAAA;AAC/B,YAAI,IAAA,eAAA,CAAgB,GAAIA,CAAAA,EAAC,CAAG,EAAA;AAC1B,cAAI,IAAA,CAAC,MAAM,MAAQ,EAAA,OAAA;AAEnB,cAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,eAAgB,CAAA,KAAA,CAAM,MAAM,CAAA,CAAA;AAC3D,cAAA,IAAI,CAAC,MAAQ,EAAA,OAAA;AAEb,cAAM,MAAA,YAAA,GAAe,MAAO,CAAA,EAAA,CAAG,IAAK,CAAA,MAAA,CAAA;AACpC,cAAA,IAAI,CAAC,YAAc,EAAA,OAAA;AAEnB,cAAA,MAAMA,EAAI,GAAA,YAAA,CAAa,OAAQ,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAC1C,cAAA,IAAIA,OAAM,CAAI,CAAA,EAAA;AACZ,gBAAa,YAAA,CAAA,MAAA,CAAOA,IAAG,CAAC,CAAA,CAAA;AAAA,eAC1B;AACA,cAAA,OAAA;AAAA,aACF;AAEA,YAAA,WAAA,CAAY,IAAK,CAAA;AAAA,cACf,MAAM,KAAM,CAAA,IAAA;AAAA,cACZ,KAAA,EAAO,MAAM,KAAM,CAAA,GAAA;AAAA,aACpB,CAAA,CAAA;AAAA,WACF,CAAA,CAAA;AAED,UAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,YAAC,CAAA,GAAA,CAAI,gBAAJ,GAAI,CAAA,WAAA,GAAgB,EAAI,CAAA,EAAA,IAAA,CAAK,GAAG,WAAW,CAAA,CAAA;AAAA,WAC9C;AAEA,UACE,IAAA,CAAC,eAAgB,CAAA,SAAA,KAChB,eAAgB,CAAA,cAAA,CAAe,KAAK,WAAa,EAAA,MAAA,IAChD,GAAI,CAAA,WAAA,EAAa,MACnB,CAAA,EAAA;AACA,YAAA,eAAA,CAAgB,SAAY,GAAA,IAAA,CAAA;AAC5B,YAAI,GAAA,CAAA,IAAA,CAAK,gBAAgB,cAAc,CAAA,CAAA;AAAA,WACzC;AAAA,SACF;AAAA,OACD,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAU,SAAA,CAAA,eAAA,EAAiB,SAAS,IAAI,CAAA,CAAA;AAAA,KAC1C;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,oBAAoB,CAAC;AAAA,EACzB,SAAA;AAAA,EACA,cAAA,EAAgB,EAAE,KAAM,EAAA;AAC1B,CAAoC,KAAA;AAClC,EAAM,MAAA,KAAA,uBAAY,GAAY,EAAA,CAAA;AAE9B,EAAA,MAAM,aAA0B,EAAC,CAAA;AACjC,EAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,IAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAClC,IAAI,IAAA,CAAC,MAAO,CAAA,IAAA,CAAK,MAAQ,EAAA,SAAA;AAEzB,IAAM,MAAA,UAAA,GAAa,MAAO,CAAA,IAAA,CAAK,IAAQ,IAAA,GAAA,CAAA;AACvC,IAAI,IAAA,uBAAA,CAAwB,KAAO,EAAA,UAAU,CAAG,EAAA,SAAA;AAEhD,IAAA,MAAM,QAAW,GAAA,CAAA,EAAG,SAAU,CAAA,KAAK,IAAI,UAAU,CAAA,MAAA,CAAA,CAAA;AAEjD,IAAW,UAAA,CAAA,IAAA;AAAA,MACT,GAAG,MAAO,CAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA;AACnC,QAAA,MAAM,OAAO,KAAM,CAAA,IAAA,IAAQ,eAAgB,CAAA,KAAA,EAAO,UAAU,CAAC,CAAA,CAAA;AAC7D,QAAA,KAAA,CAAM,IAAI,IAAI,CAAA,CAAA;AAEd,QAAO,OAAA;AAAA,UACL,KAAA;AAAA,UACA,IAAA;AAAA,UACA,MAAQ,EAAA,UAAA;AAAA,SACV,CAAA;AAAA,OACD,CAAA;AAAA,KACH,CAAA;AAAA,GACF;AAEA,EAAI,IAAA,SAAA,CAAU,QAAS,CAAA,SAAA,CAAU,WAAa,EAAA;AAC5C,IAAA,KAAA,MAAW,UAAc,IAAA,SAAA,CAAU,QAAS,CAAA,SAAA,CAAU,WAAa,EAAA;AACjE,MAAM,MAAA,EAAE,OAAU,GAAA,UAAA,CAAA;AAClB,MAAA,IAAI,KAAO,EAAA;AACT,QAAM,MAAA,QAAA,GAAW,CAAG,EAAA,SAAA,CAAU,KAAK,CAAA,MAAA,CAAA,CAAA;AACnC,QAAA,MAAM,OAAO,UAAW,CAAA,IAAA,IAAQ,eAAgB,CAAA,KAAA,EAAO,UAAU,CAAC,CAAA,CAAA;AAClE,QAAA,KAAA,CAAM,IAAI,IAAI,CAAA,CAAA;AAEd,QAAA,UAAA,CAAW,IAAK,CAAA;AAAA,UACd,OAAO,EAAE,GAAA,EAAK,KAAO,EAAA,IAAA,EAAM,WAAW,IAAK,EAAA;AAAA,UAC3C,IAAA;AAAA,SACD,CAAA,CAAA;AAAA,OACH;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,UAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,SAAA,GAAY,CAChB,EAAE,cAAgB,EAAA,EAAE,MAAQ,EAAA,eAAA,EAC5B,EAAA,OAAA,EACA,IACG,KAAA;AA9KL,EAAA,IAAA,EAAA,CAAA;AA+KE,EAAM,MAAA,GAAA,GAAM,IAAI,MAAO,CAAA;AAAA,IACrB,CAAC,QAAQ,UAAU,CAAA;AAAA,GACc,CAAA,CAAA;AAEnC,EAAI,IAAA,OAAA,CAAQ,SAAS,MAAW,KAAA,CAAA,IAAK,gBAAgB,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAG,EAAA;AACxE,IAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACjD,IAAO,MAAA,CAAA,IAAA,CAAK,KAAK,IAAO,GAAA,KAAA,CAAA;AACxB,IAAC,CAAA,CAAA,EAAA,GAAA,MAAA,CAAO,KAAK,IAAK,EAAA,MAAA,KAAjB,GAAiB,MAAW,GAAA,KAAI,IAAK,CAAA;AAAA,MACpC,IAAA;AAAA,MACA,GAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACI,MAAA;AACL,IAAA,CAAC,KAAK,WAAL,KAAA,IAAA,CAAK,WAAgB,GAAA,KAAI,IAAK,CAAA;AAAA,MAC7B,IAAA;AAAA,MACA,KAAO,EAAA,GAAA;AAAA,KACR,CAAA,CAAA;AAAA,GACH;AACF,CAAA;;ACzHO,MAAM,gBAAgB,OAC3B,GAAA,EACA,UACA,EAAA,OAAA,EACA,aACA,MACA,EAAA;AAAA,EACE,iBAAA;AAAA,EACA,SAAA,EAAW,EAAE,MAAO,EAAA;AAAA,EACpB,aAAA;AAAA,EACA,QAAA,EAAU,EAAE,eAAgB,EAAA;AAAA,EAC5B,SAAA;AACF,CAAA,EACA,cACkB,KAAA;AAClB,EAAA,MAAM,YAA4B,GAAA,mBAAA;AAAA,IAChC,MAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,GACF,CAAA;AACA,EAAA,MAAM,aAAyB,EAAE,MAAA,EAAQ,EAAI,EAAA,WAAA,EAAa,EAAG,EAAA,CAAA;AAC7D,EAAA,MAAM,mBAAsC,EAAC,CAAA;AAC7C,EAAA,MAAM,EAAE,YAAA,EAAc,kBAAoB,EAAA,UAAA,EAAY,aACpD,GAAA,0BAAA;AAAA,IACE,MAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,GACF,CAAA;AAEF,EAAwB,uBAAA,CAAA,kBAAA,EAAoB,eAAe,GAAG,CAAA,CAAA;AAE9D,EAAM,MAAA,yBAAA;AAAA,IACJ,WAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,GAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,iBAAA;AAAA,IACJ,OAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,GACF,CAAA;AAEA,EAAA,kBAAA,CAAmB,MAAQ,EAAA,GAAA,EAAK,YAAc,EAAA,aAAA,EAAe,WAAW,CAAA,CAAA;AAExE,EAAA,MAAM,QAAQ,GAAI,CAAA;AAAA,IAChB,eAAA,CAAgB,YAAY,OAAO,CAAA;AAAA,IACnC,qBAAA,CAAsB,kBAAkB,OAAO,CAAA;AAAA,GAChD,CAAA,CAAA;AAED,EAAA,KAAA,MAAW,WAAW,UAAY,EAAA;AAChC,IAAI,GAAA,CAAA,IAAA;AAAA,MACF,UAAW,CAAA,iBAAA,EAAmB,WAAa,EAAA,OAAA,EAAS,QAAQ,UAAU,CAAA;AAAA,KACxE,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,mBAAsB,GAAA,CAC1B,MACA,EAAA,WAAA,EACA,aACgB,KAAA;AAChB,EAAA,OAAO,MAAO,CAAA,MAAA,CAAoB,CAAC,GAAA,EAAK,SAAc,KAAA;AACpD,IAAM,MAAA,WAAA,GAAc,SAAU,CAAA,CAAA,CAAE,MAAU,IAAA,aAAA,CAAA;AAC1C,IAAM,MAAA,UAAA,GAAa,YAAY,MAAO,CAAA,IAAA;AAAA,MACpC,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,SAAU,CAAA,KAAA,IAAS,EAAE,UAAe,KAAA,WAAA;AAAA,KACxD,CAAA;AACA,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAA,GAAA,CAAI,KAAK,SAAS,CAAA,CAAA;AAAA,KACpB;AACA,IAAO,OAAA,GAAA,CAAA;AAAA,GACT,EAAG,EAAE,CAAA,CAAA;AACP,CAAA,CAAA;AAEA,MAAM,6BAA6B,CACjC,MAAA,EACA,QACA,WACA,EAAA,aAAA,EACA,cACA,eAMG,KAAA;AACH,EAAA,MAAM,eAAkC,EAAC,CAAA;AACzC,EAAA,MAAM,qBAA8C,EAAC,CAAA;AACrD,EAAA,MAAM,aAAkC,EAAC,CAAA;AACzC,EAAA,MAAM,cAA2B,EAAC,CAAA;AAClC,EAAA,MAAM,YAAe,GAAA,eAAA,EAAiB,MAAQ,EAAA,GAAA,CAAI,CAAC,IAAS,KAAA;AAC1D,IAAA,MAAM,CAAC,MAAS,GAAA,aAAA,EAAe,KAAK,CAAA,GAAI,0BAA0B,IAAI,CAAA,CAAA;AACtE,IAAO,OAAA,EAAE,QAAQ,KAAM,EAAA,CAAA;AAAA,GACxB,CAAA,CAAA;AAED,EAAW,KAAA,MAAA,OAAA,IAAW,YAAY,MAAQ,EAAA;AACxC,IACE,IAAA,OAAA,CAAQ,IAAS,KAAA,MAAA,CAAO,eACxB,IAAA,eAAA,EAAiB,SAAS,QAAS,CAAA,OAAA,CAAQ,UAAU,CAAA,IACrD,YAAc,EAAA,IAAA;AAAA,MACZ,CAAC,EAAE,MAAQ,EAAA,KAAA,OACT,KAAU,KAAA,OAAA,CAAQ,IAAQ,IAAA,MAAA,KAAW,OAAQ,CAAA,UAAA;AAAA,KACjD;AAEA,MAAA,SAAA;AAEF,IAAA,MAAM,YAAY,MAAO,CAAA,IAAA;AAAA,MACvB,CAAC,CACC,KAAA,CAAA,CAAE,KAAU,KAAA,OAAA,CAAQ,SACnB,CAAE,CAAA,CAAA,CAAE,MAAU,IAAA,aAAA,MAAmB,OAAQ,CAAA,UAAA;AAAA,KAC9C,CAAA;AACA,IAAA,IAAI,SAAW,EAAA;AACb,MAAA,cAAA;AAAA,QACE,WAAA;AAAA,QACA,YAAA;AAAA,QACA,WAAA;AAAA,QACA,aAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,OACF,CAAA;AACA,MAAA,SAAA;AAAA,KACF;AAEA,IAAM,MAAA,CAAA,GAAI,aAAa,SAAU,CAAA,CAAC,MAAM,CAAE,CAAA,KAAA,KAAU,QAAQ,IAAI,CAAA,CAAA;AAChE,IAAA,IAAI,MAAM,CAAI,CAAA,EAAA;AACZ,MAAMC,MAAAA,UAAAA,GAAY,aAAa,CAAC,CAAA,CAAA;AAChC,MAAa,YAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AACxB,MAAA,kBAAA,CAAmB,IAAK,CAAA,EAAE,SAAAA,EAAAA,UAAAA,EAAW,SAAS,CAAA,CAAA;AAC9C,MAAA,SAAA;AAAA,KACF;AAEA,IAAA,UAAA,CAAW,KAAK,OAAO,CAAA,CAAA;AAAA,GACzB;AAEA,EAAA,OAAO,EAAE,YAAA,EAAc,kBAAoB,EAAA,UAAA,EAAY,WAAY,EAAA,CAAA;AACrE,CAAA,CAAA;AAEA,MAAM,uBAA0B,GAAA,CAC9B,kBACA,EAAA,aAAA,EACA,GACG,KAAA;AACH,EAAA,KAAA,MAAW,EAAE,SAAA,EAAW,OAAQ,EAAA,IAAK,kBAAoB,EAAA;AACvD,IAAA,MAAM,aAAa,OAAQ,CAAA,UAAA,CAAA;AAC3B,IAAM,MAAA,QAAA,GAAW,SAAU,CAAA,CAAA,CAAE,MAAU,IAAA,aAAA,CAAA;AAEvC,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,YAAA;AAAA,MACN,IAAM,EAAA,OAAA;AAAA,MACN,UAAA;AAAA,MACA,MAAM,OAAQ,CAAA,IAAA;AAAA,MACd,QAAA;AAAA,MACA,IAAI,OAAQ,CAAA,IAAA;AAAA,KACb,CAAA,CAAA;AAAA,GACH;AACF,CAAA,CAAA;AAEA,MAAM,iBAAoB,GAAA,OACxB,OACA,EAAA,YAAA,EACA,iBACA,EAAA,WAAA,EACA,UACA,EAAA,GAAA,EACA,aACA,EAAA,MAAA,EACA,UACA,EAAA,gBAAA,EACA,WACA,cACkB,KAAA;AAClB,EAAA,MAAM,qBAA0C,EAAC,CAAA;AACjD,EAAA,MAAM,iBAAiC,EAAC,CAAA;AAExC,EAAA,KAAA,MAAW,mBAAmB,YAAc,EAAA;AAC1C,IAAA,kBAAA,CAAmB,MAAS,GAAA,CAAA,CAAA;AAE5B,IAAM,MAAA,kBAAA;AAAA,MACJ,OAAA;AAAA,MACA,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAA;AAAA,MACA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAA;AAAA,MACA,kBAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,KACF,CAAA;AAEA,IAAA,IAAI,mBAAmB,MAAQ,EAAA;AAC7B,MAAM,MAAA,EAAE,WAAc,GAAA,eAAA,CAAA;AACtB,MAAA,MAAM,QAAkB,EAAC,CAAA;AACzB,MAAA,MAAM,QAAkB,EAAC,CAAA;AAEzB,MAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,QAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAElC,QAAI,IAAA,CAAC,OAAO,QAAU,EAAA,SAAA;AAEtB,QAAM,MAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAK,IAAQ,IAAA,GAAA,CAAA;AACjC,QAAM,MAAA,IAAA,GAAO,4BAA6B,CAAA,MAAA,EAAQ,aAAa,CAAA,CAAA;AAC/D,QAAA,IAAI,CAAC,cAAA,CAAe,GAAI,CAAA,GAAA,CAAI,IAAI,CAAG,EAAA;AACjC,UAAA,KAAA,CAAM,KAAK,IAAI,CAAA,CAAA;AACf,UAAA,KAAA,CAAM,KAAK,IAAI,CAAA,CAAA;AAAA,SACjB;AAAA,OACF;AAEA,MAAA,MAAM,YAAY,SAAU,CAAA,KAAA,CAAA;AAC5B,MAAM,MAAA,MAAA,GAAS,CAAY,SAAA,EAAA,KAAA,CACxB,GAAI,CAAA,CAAC,CAAM,KAAA,CAAA,MAAA,EAAS,CAAC,CAAA,CAAE,CACvB,CAAA,IAAA,CAAK,IAAI,CAAC,OAAO,SAAS,CAAA,EAAA,EAAK,KAC/B,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,CAAI,CAAA,EAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CACnB,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA;AAEb,MAAiB,gBAAA,CAAA,IAAA;AAAA,QACf,GAAG,mBAAmB,GAAI,CAAA,CAAC,OAAO,EAAE,GAAG,CAAG,EAAA,MAAA,EAAS,CAAA,CAAA;AAAA,OACrD,CAAA;AAAA,KACF;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,4BAAA,GAA+B,CACnC,MAAA,EACA,aACW,KAAA;AACX,EAAA,IAAI,kBAAkB,WAAa,EAAA;AACjC,IACE,OAAA,4BAAA,CAA6B,MAAO,CAAA,IAAA,CAAK,IAAM,EAAA,aAAa,IAC5D,IAAK,CAAA,MAAA,CAAO,MAAO,CAAA,IAAA,CAAK,SAAS,CAAA,CAAA;AAAA,GAErC;AAEA,EAAA,IAAI,IAAO,GAAA,MAAA,YAAkB,UAAa,GAAA,MAAA,CAAO,WAAW,MAAO,CAAA,QAAA,CAAA;AAEnE,EAAM,MAAA,CAAA,GAAI,IAAK,CAAA,OAAA,CAAQ,GAAG,CAAA,CAAA;AAC1B,EAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AACb,EAAA,IAAI,MAAM,CAAI,CAAA,EAAA;AACZ,IAAO,IAAA,GAAA,IAAA,CAAK,KAAM,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AACtB,IAAS,MAAA,GAAA,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAAA,GACvB;AAEA,EAAM,MAAA,CAAA,GAAI,IAAK,CAAA,OAAA,CAAQ,GAAG,CAAA,CAAA;AAC1B,EAAA,IAAI,MAAM,CAAI,CAAA,EAAA;AACZ,IAAA,IAAI,MAAS,GAAA,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAA;AAC/B,IAAA,IAAI,MAAO,CAAA,IAAA,CAAK,cAAkB,IAAA,MAAA,YAAkB,UAAY,EAAA;AAC9D,MAAS,MAAA,GAAA,CAAA,CAAA,EAAI,aAAa,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,CAAA;AAAA,KACvC;AACA,IAAO,OAAA,MAAA,CAAA;AAAA,GACF,MAAA;AACL,IAAA,OAAO,CAAI,CAAA,EAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAC,CAAA,GAAA,EAAM,IAAK,CAAA,KAAA,CAAM,CAAG,EAAA,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAA;AAAA,GAC1D;AACF,CAAA,CAAA;AAEA,MAAM,eAAA,GAAkB,OACtB,UAAA,EACA,OACG,KAAA;AACH,EAAI,IAAA,UAAA,CAAW,YAAY,MAAQ,EAAA;AACjC,IAAM,MAAA;AAAA,MACJ,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,KAChB,GAAI,MAAM,OAAQ,CAAA,MAAA;AAAA,MAChB,SACE,GAAA,UAAA,CAAW,WACR,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,CAAA,EAAG,CAAE,CAAA,IAAI,OAAO,CAAE,CAAA,MAAM,CAAG,CAAA,CAAA,CAAA,CACtC,KAAK,IAAI,CAAA;AAAA,MACd,UAAW,CAAA,MAAA;AAAA,KACb,CAAA;AAEA,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AACvC,MAAI,IAAA,CAAC,OAAQ,CAAA,CAAC,CAAG,EAAA;AACf,QAAW,UAAA,CAAA,WAAA,CAAY,CAAC,CAAA,CAAE,MAAO,EAAA,CAAA;AAAA,OACnC;AAAA,KACF;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,yBAAA,GAA4B,OAChC,WACA,EAAA,YAAA,EACA,YACA,YACA,EAAA,WAAA,EACA,aACA,EAAA,GAAA,EACA,SACG,KAAA;AACH,EAAA,KAAA,MAAW,aAAa,YAAc,EAAA;AACpC,IAAA,IAAI,WAAW,MAAQ,EAAA;AACrB,MAAA,MAAM,IAAI,MAAM,oBAAA;AAAA,QACd,OAAA;AAAA,QACA,SAAU,CAAA,KAAA;AAAA,QACV,UAAW,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,QAC5B,SAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAI,CAAG,EAAA;AACL,QAAM,MAAA,OAAA,GAAU,UAAW,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAChC,QAAW,UAAA,CAAA,MAAA,CAAO,CAAI,GAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAE1B,QAAA,GAAA,CAAI,IAAK,CAAA;AAAA,UACP,IAAM,EAAA,YAAA;AAAA,UACN,IAAM,EAAA,OAAA;AAAA,UACN,YAAY,OAAQ,CAAA,UAAA;AAAA,UACpB,MAAM,OAAQ,CAAA,IAAA;AAAA,UACd,QAAA,EAAU,SAAU,CAAA,CAAA,CAAE,MAAU,IAAA,aAAA;AAAA,UAChC,IAAI,SAAU,CAAA,KAAA;AAAA,SACf,CAAA,CAAA;AAED,QAAA,cAAA;AAAA,UACE,WAAA;AAAA,UACA,YAAA;AAAA,UACA,WAAA;AAAA,UACA,aAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAA;AAAA,SACF,CAAA;AAEA,QAAA,SAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,GAAA,CAAI,IAAK,CAAA,cAAA,CAAe,aAAe,EAAA,SAAS,CAAC,CAAA,CAAA;AAAA,GACnD;AACF,CAAA,CAAA;AAEA,MAAM,iBAAiB,CACrB,WAAA,EACA,cACA,WACA,EAAA,aAAA,EACA,SACA,SACG,KAAA;AACH,EAAA,MAAM,QAAQ,EAAC,CAAA;AACf,EAAM,MAAA,MAAA,GAAS,SAAU,CAAA,CAAA,CAAE,MAAU,IAAA,aAAA,CAAA;AAErC,EAAA,YAAA,CAAa,IAAK,CAAA;AAAA,IAChB,SAAA,EAAW,wBAAwB,SAAS,CAAA;AAAA,IAC5C,OAAA;AAAA,IACA,WAAA,EAAa,uBAAwB,CAAA,WAAA,EAAa,OAAO,CAAA;AAAA,IACzD,MAAA;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,IAAM,EAAA,aAAA;AAAA,MACN,MAAA;AAAA,MACA,MAAM,SAAU,CAAA,KAAA;AAAA,MAChB,KAAA;AAAA,MACA,KAAK,EAAC;AAAA,MACN,MAAM,EAAC;AAAA,KACT;AAAA,IACA,SAAW,EAAA,KAAA;AAAA,IACX,iBAAiB,EAAC;AAAA,IAClB,YAAY,EAAC;AAAA,GACd,CAAA,CAAA;AAED,EAAA,WAAA,CAAY,GAAG,MAAM,CAAA,CAAA,EAAI,SAAU,CAAA,KAAK,EAAE,CAAI,GAAA,KAAA,CAAA;AAChD,CAAA,CAAA;AAEA,MAAM,uBAAA,GAA0B,CAAC,SAA0B,MAAA;AAAA,EACzD,GAAG,SAAA;AAAA;AAAA,EAEH,OAAO,SAAU,CAAA,KAAA;AAAA,EACjB,OAAO,MAAO,CAAA,WAAA;AAAA,IACZ,MAAA,CAAO,OAAQ,CAAA,SAAA,CAAU,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,GAAK,EAAA,MAAM,CAAM,KAAA;AACrD,MAAM,MAAA,MAAA,GAAS,MAAO,CAAA,MAAA,CAAO,MAAgB,CAAA,CAAA;AAC7C,MAAA,MAAA,CAAO,IAAO,GAAA;AAAA,QACZ,GAAG,MAAO,CAAA,IAAA;AAAA,QACV,MAAA,EAAQ,OAAO,IAAK,CAAA,MAAA,IAAU,CAAC,GAAG,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,OACtD,CAAA;AAEA,MAAO,OAAA,CAAC,KAAK,MAAM,CAAA,CAAA;AAAA,KACpB,CAAA;AAAA,GACH;AACF,CAAA,CAAA,CAAA;AAEA,MAAM,cAAA,GAAiB,CACrB,aAAA,EACA,KACoB,KAAA;AACpB,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,OAAA;AAAA,IACN,MAAQ,EAAA,QAAA;AAAA,IACR,QAAQ,KAAM,CAAA,CAAA,CAAE,WAAW,aAAgB,GAAA,KAAA,CAAA,GAAY,MAAM,CAAE,CAAA,MAAA;AAAA,IAC/D,OAAA,EAAS,MAAM,QAAS,CAAA,OAAA;AAAA,IACxB,MAAM,KAAM,CAAA,KAAA;AAAA,IACZ,KAAA,EAAO,eAAe,KAAK,CAAA;AAAA,IAC3B,YAAc,EAAA,KAAA,CAAM,QAAS,CAAA,YAAA,GAAe,QAAW,GAAA,OAAA;AAAA,IACvD,GAAG,MAAM,QAAS,CAAA,SAAA;AAAA,GACpB,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,cAAA,GAAiB,CAAC,KAAmC,KAAA;AACzD,EAAA,MAAM,QAAsB,EAAC,CAAA;AAC7B,EAAW,KAAA,MAAA,GAAA,IAAO,MAAM,KAAO,EAAA;AAC7B,IAAM,MAAA,MAAA,GAAS,KAAM,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC9B,IAAI,IAAA,EAAE,kBAAkB,aAAgB,CAAA,EAAA;AACtC,MAAA,KAAA,CAAM,GAAG,CAAI,GAAA,MAAA,CAAA;AAAA,KACf;AAAA,GACF;AACA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,kBAAqB,GAAA,OACzB,OACA,EAAA,iBAAA,EACA,WACA,EAAA,UAAA,EACA,GACA,EAAA,aAAA,EACA,MACA,EAAA,eAAA,EACA,UACA,EAAA,kBAAA,EACA,gBACA,SACG,KAAA;AACH,EAAM,MAAA,cAAA;AAAA,IACJ,OAAA;AAAA,IACA,MAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,GAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAA,iBAAA,CAAkB,QAAQ,eAAe,CAAA,CAAA;AAEzC,EAA0B,yBAAA,CAAA,MAAA,EAAQ,eAAiB,EAAA,GAAA,EAAK,kBAAkB,CAAA,CAAA;AAE1E,EAAc,aAAA,CAAA,GAAA,EAAK,iBAAiB,kBAAkB,CAAA,CAAA;AAEtD,EAAM,MAAA,EAAE,gBAAmB,GAAA,eAAA,CAAA;AAC3B,EAAA,IACE,OAAO,IAAK,CAAA,cAAA,CAAe,KAAK,CAAA,CAAE,UAClC,MAAO,CAAA,IAAA,CAAK,cAAe,CAAA,GAAG,EAAE,MAChC,IAAA,MAAA,CAAO,KAAK,cAAe,CAAA,IAAI,EAAE,MACjC,EAAA;AACA,IAAA,eAAA,CAAgB,SAAY,GAAA,IAAA,CAAA;AAC5B,IAAA,GAAA,CAAI,KAAK,cAAc,CAAA,CAAA;AAAA,GACzB;AAEA,EAAI,IAAA,eAAA,CAAgB,WAAW,MAAQ,EAAA;AACrC,IAAI,GAAA,CAAA,IAAA,CAAK,GAAG,eAAA,CAAgB,UAAU,CAAA,CAAA;AAAA,GACxC;AACF,CAAA;;AC7fO,MAAM,cAAe,CAAA;AAAA,EAArB,WAAA,GAAA;AACL,IAAA,IAAA,CAAA,GAAA,uBAAU,GAAY,EAAA,CAAA;AAAA,GAAA;AAAA,EACtB,GAAA,CAAI,UAAiC,GAAA,QAAA,EAAU,IAAc,EAAA;AAC3D,IAAA,IAAA,CAAK,IAAI,GAAI,CAAA,CAAA,CAAA,EAAI,UAAU,CAAA,GAAA,EAAM,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,GAC1C;AACF,CAAA;AAEO,MAAM,mBAAmB,OAC9B,OAAA,EACA,MACA,EAAA,GAAA,EACA,aACA,MACgC,KAAA;AAChC,EAAM,MAAA,EAAE,iBAAmB,EAAA,aAAA,EAAkB,GAAA,MAAA,CAAA;AAE7C,EAAM,MAAA,UAAA,GAAa,cAAe,CAAA,iBAAA,EAAmB,WAAW,CAAA,CAAA;AAEhE,EAAM,MAAA,cAAA,CAAe,GAAK,EAAA,WAAA,EAAa,MAAM,CAAA,CAAA;AAC7C,EAAkB,iBAAA,CAAA,GAAA,EAAK,aAAa,MAAM,CAAA,CAAA;AAE1C,EAAM,MAAA,cAAA,GAAiB,IAAI,cAAe,EAAA,CAAA;AAE1C,EAAM,MAAA,cAAA;AAAA,IACJ,GAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,GACF,CAAA;AACA,EAAA,MAAM,YAAa,CAAA,GAAA,EAAK,WAAa,EAAA,MAAA,EAAQ,cAAc,CAAA,CAAA;AAE3D,EAAM,MAAA,aAAA;AAAA,IACJ,GAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,GACF,CAAA;AAEA,EAAO,OAAA,cAAA,CAAe,aAAe,EAAA,MAAA,EAAQ,GAAG,CAAA,CAAA;AAClD,CAAA;;AChEA,MAAM,WAAA,GAAc,IAAI,KAAA,CAAM,UAAU,CAAA,CAAA;AAEjC,MAAM,eAAkB,GAAA,OAC7B,OACA,EAAA,MAAA,EACA,eACA,uBACwC,KAAA;AACxC,EAAA,MAAM,WAAc,GAAA,IAAI,QAAS,CAAA,QAAA,EAAU,aAAa,CAAA,CAAA;AAExD,EAAI,IAAA,IAAA,CAAA;AAEJ,EAAI,IAAA;AACF,IAAA,MAAM,OAAQ,CAAA,WAAA,CAAY,KAAW,CAAA,EAAA,OAAO,GAAQ,KAAA;AAClD,MAAA,MAAM,YAAuC,EAAC,CAAA;AAC9C,MAAA,WAAA,CAAY,CAAC,QAAsC,KAAA;AACjD,QAAA,SAAA,CAAU,KAAK,QAAQ,CAAA,CAAA;AAAA,OACxB,CAAA,CAAA;AAED,MAAM,MAAA,EAAE,KAAQ,GAAA,MAAA,CAAA;AAChB,MAAA,MAAA,CAAO,GAAM,GAAA,KAAA,CAAA;AAEb,MAAA,MAAM,EAAK,GAAA,wBAAA,CAAyB,GAAK,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAErD,MAAA,MAAA,CAAO,GAAM,GAAA,GAAA,CAAA;AAEb,MAAA,KAAA,MAAW,YAAY,SAAW,EAAA;AAChC,QAAM,MAAA,QAAA,CAAS,IAAI,IAAI,CAAA,CAAA;AAAA,OACzB;AAEA,MAAM,MAAA,WAAA,GAAc,MAAM,kBAAA,CAAmB,GAAG,CAAA,CAAA;AAChD,MAAA,uBAAA,CAAwB,SAAY,GAAA,IAAA,CAAA;AAEpC,MAAI,IAAA;AACF,QAAA,IAAA,GAAO,MAAM,gBAAA;AAAA,UACX,GAAA;AAAA,UACA,MAAA;AAAA,UACA,EAAC;AAAA,UACD,WAAA;AAAA,UACA,uBAAA;AAAA,SACF,CAAA;AAAA,eACO,GAAK,EAAA;AACZ,QAAA,IAAI,eAAe,WAAa,EAAA;AAC9B,UAAO,IAAA,GAAA,KAAA,CAAA;AACP,UAAM,MAAA,WAAA,CAAA;AAAA,SACR;AACA,QAAM,MAAA,GAAA,CAAA;AAAA,OACR;AAEA,MAAM,MAAA,WAAA,CAAA;AAAA,KACP,CAAA,CAAA;AAAA,WACM,GAAK,EAAA;AACZ,IAAA,IAAI,QAAQ,WAAa,EAAA;AACvB,MAAM,MAAA,GAAA,CAAA;AAAA,KACR;AAAA,GACF;AAEA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;;ACrDO,MAAM,MAAS,GAAA,CACpB,GACA,EAAA,MAAA,EACA,aACG,KAAA;AACH,EAAI,IAAA,CAAC,OAAO,MAAQ,EAAA,OAAA;AAEpB,EAAA,MAAM,OAAe,EAAC,CAAA;AAEtB,EAAI,IAAA,KAAA,EAAO,KAAK,MAAQ,EAAA,IAAA,CAAA;AACxB,EAAA,IAAI,OAAO,MAAO,CAAA,GAAA,KAAQ,YAAY,MAAO,CAAA,GAAA,CAAI,WAAW,KAAO,EAAA;AACjE,IAAA,KAAA,GAAQ,GAAM,GAAA,MAAA,GAAS,IAAO,GAAA,CAAC,CAAc,KAAA,CAAA,CAAA;AAAA,GACxC,MAAA;AACL,IAAA,CAAC,EAAE,KAAA,EAAO,GAAK,EAAA,MAAA,EAAQ,MAAS,GAAA,MAAA,EAAA;AAAA,GAClC;AAEA,EAAA,KAAA,MAAW,KAAK,GAAK,EAAA;AACnB,IAAA,QAAQ,EAAE,IAAM;AAAA,MACd,KAAK,OAAS,EAAA;AACZ,QAAI,IAAA,aAAA,GAAgB,CAAC,CAAC,CAAE,CAAA,UAAA,CAAA;AACxB,QAAA,MAAM,QAAW,GAAA;AAAA,UACf,MAAQ,EAAA,CAAA;AAAA,UACR,KAAA,EAAO,CAAE,CAAA,OAAA,EAAS,MAAU,IAAA,CAAA;AAAA,UAC5B,OAAA,EAAS,CAAE,CAAA,QAAA,EAAU,MAAU,IAAA,CAAA;AAAA,UAC/B,aAAA,EACE,EAAE,WAAa,EAAA,MAAA;AAAA,YACb,CAAC,GAAK,EAAA,CAAA,KAAO,CAAE,CAAA,UAAA,GAAa,MAAM,CAAI,GAAA,GAAA;AAAA,YACtC,CAAA;AAAA,WACG,IAAA,CAAA;AAAA,UACP,KAAA,EACE,EAAE,WAAa,EAAA,MAAA;AAAA,YACb,CAAC,GAAK,EAAA,CAAA,KAAO,CAAE,CAAA,KAAA,GAAQ,MAAM,CAAI,GAAA,GAAA;AAAA,YACjC,CAAA;AAAA,WACG,IAAA,CAAA;AAAA,SACT,CAAA;AACA,QAAW,KAAA,MAAA,GAAA,IAAO,EAAE,KAAO,EAAA;AACzB,UAAS,QAAA,CAAA,MAAA,EAAA,CAAA;AAET,UAAM,MAAA,MAAA,GAAS,CAAE,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC1B,UAAI,IAAA,MAAA,CAAO,KAAK,UAAY,EAAA;AAC1B,YAAgB,aAAA,GAAA,IAAA,CAAA;AAAA,WAClB;AAEA,UAAI,IAAA,MAAA,CAAO,KAAK,OAAS,EAAA;AACvB,YAAS,QAAA,CAAA,KAAA,IAAS,MAAO,CAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,CAAA;AAAA,WACxC;AAEA,UAAI,IAAA,MAAA,CAAO,KAAK,QAAU,EAAA;AACxB,YAAS,QAAA,CAAA,OAAA,IAAW,MAAO,CAAA,IAAA,CAAK,QAAS,CAAA,MAAA,CAAA;AAAA,WAC3C;AAEA,UAAI,IAAA,MAAA,CAAO,KAAK,WAAa,EAAA;AAC3B,YAAA,QAAA,CAAS,aAAa,CAAA,IAAK,MAAO,CAAA,IAAA,CAAK,WAAY,CAAA,MAAA,CAAA;AAAA,WACrD;AAEA,UAAI,IAAA,MAAA,CAAO,KAAK,MAAQ,EAAA;AACtB,YAAS,QAAA,CAAA,KAAA,IAAS,MAAO,CAAA,IAAA,CAAK,MAAO,CAAA,MAAA,CAAA;AAAA,WACvC;AAAA,SACF;AAEA,QAAA,MAAM,UAAoB,EAAC,CAAA;AAE3B,QAAA,KAAA,MAAW,OAAO,QAAU,EAAA;AAC1B,UAAM,MAAA,KAAA,GAAQ,SAAS,GAA4B,CAAA,CAAA;AACnD,UAAI,IAAA,KAAA,IAAS,QAAQ,QAAU,EAAA;AAC7B,YAAQ,OAAA,CAAA,IAAA;AAAA,cACN,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,SAAU,CAAA,GAAA,EAAK,OAAO,GAAQ,KAAA,OAAA,GAAU,IAAO,GAAA,GAAG,CAAC,CAAA,CAAA;AAAA,aACjE,CAAA;AAAA,WACF;AAAA,SACF;AAEA,QAAA,IAAI,CAAC,aAAe,EAAA;AAClB,UAAA,OAAA,CAAQ,KAAK,gBAAgB,CAAA,CAAA;AAAA,SAC/B;AAEA,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,GACE,CAAE,CAAA,MAAA,KAAW,WACT,KAAM,CAAA,gBAAgB,IACtB,GAAI,CAAA,cAAc,CACxB,CAAI,CAAA,EAAA,UAAA,CAAW,GAAG,aAAa,CAAC,KAAK,OAAQ,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,SACzD,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,aAAe,EAAA;AAClB,QAAA,MAAM,QAAgB,EAAC,CAAA;AAEvB,QAAA,MAAM,SAA6B,GAAA;AAAA,UACjC,CAAG,EAAA,GAAA;AAAA,UACH,OAAO,CAAE,CAAA,IAAA;AAAA,UACT,aAAA;AAAA,UACA,SAAW,EAAA,IAAA;AAAA,UACX,WAAW,MAAO,CAAA,SAAA;AAAA,SACpB,CAAA;AAEA,QAAW,KAAA,MAAA,GAAA,IAAO,EAAE,KAAO,EAAA;AACzB,UAAA,MAAM,OAAU,GAAA,OAAA,CAAQ,CAAE,CAAA,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA;AACpC,UAAA,KAAA,MAAW,UAAU,OAAS,EAAA;AAC5B,YAAA,IAAI,MAAO,CAAA,IAAA,KAAS,KAAS,IAAA,MAAA,CAAO,SAAS,MAAQ,EAAA;AACnD,cAAA,MAAM,SAAS,MAAO,CAAA,IAAA,CAAA;AACtB,cAAA,MAAM,EAAE,UAAY,EAAA,OAAA,EAAS,UAAU,WAAa,EAAA,MAAA,KAClD,MAAO,CAAA,IAAA,CAAA;AAET,cAAM,KAAA,CAAA,IAAA;AAAA,gBACJ,GACE,MAAO,CAAA,IAAA,KAAS,KACZ,GAAA,KAAA,CAAM,cAAc,CACpB,GAAA,GAAA,CAAI,eAAe,CACzB,IAAI,GAAG,CAAA,CAAA,EACL,MAAO,CAAA,IAAA,CAAK,SAAS,eAAgB,CAAA,MAAA,EAAQ,aAAa,CAC5D,GAAG,MAAO,CAAA,IAAA,CAAK,UAAa,GAAA,WAAA,GAAc,EAAE,CAC1C,EAAA,UAAA,GAAa,cAAiB,GAAA,EAChC,GACE,WACI,GAAA,CAAA,YAAA,EAAe,WACZ,CAAA,GAAA,CAAI,CAAC,EAAO,KAAA;AACX,kBAAA,OAAO,CAAG,EAAA,iBAAA;AAAA,oBACR,EAAG,CAAA,SAAA;AAAA,mBACJ,CAAI,CAAA,EAAA,EAAA,CAAG,cAAe,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA;AAAA,iBAClC,CACA,CAAA,IAAA,CAAK,IAAI,CAAC,KACb,EACN,CAAA,EACE,OAAS,EAAA,MAAA,GACL,OAAQ,CAAA,MAAA,KAAW,IACjB,aACA,GAAA,CAAA,MAAA,EAAS,OAAQ,CAAA,MAAM,CACzB,QAAA,CAAA,GAAA,EACN,GACE,QAAU,EAAA,MAAA,GACN,QAAS,CAAA,MAAA,KAAW,CAClB,GAAA,eAAA,GACA,SAAS,QAAS,CAAA,MAAM,CAC1B,SAAA,CAAA,GAAA,EACN,CACE,EAAA,MAAA,EAAQ,SACJ,CAAY,SAAA,EAAA,MAAA,CACT,GAAI,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,IAAI,KAAM,CAAA,EAAE,MAAQ,EAAA,EAAG,EAAC,CAAC,CAAA,CAC9C,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA,GACb,EACN,CAAA,CAAA;AAAA,eACF,CAAA;AAAA,aACF,MAAA,IAAW,MAAO,CAAA,IAAA,KAAS,QAAU,EAAA;AACnC,cAAA,IAAI,IAAO,GAAA,MAAA,CAAO,IAAK,CAAA,MAAA,EAAQ,KAAK,IAAQ,IAAA,GAAA,CAAA;AAC5C,cAAA,IAAI,MAAO,CAAA,SAAA,EAAkB,IAAA,GAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAE7C,cAAA,MAAMC,WAAkB,EAAC,CAAA;AACzB,cAAM,KAAA,CAAA,IAAA,CAAK,GAAG,MAAO,CAAA,iBAAiB,CAAC,CAAI,CAAA,EAAA,IAAI,KAAKA,QAAO,CAAA,CAAA;AAC3D,cAAAA,SAAQ,IAAK,CAAA,CAAA,EAAG,MAAO,CAAA,MAAM,CAAC,CAAI,EAAA,CAAA,CAAA,CAAA;AAElC,cAAA,MAAM,WAAW,MAAO,CAAA,IAAA,CAAK,MAAQ,CAAA,MAAA,CAAO,WAAW,GAAG,CAAA,CAAA;AAC1D,cAAA,KAAA,MAAWC,SAAQ,QAAU,EAAA;AAC3B,gBAAA,OAAA,CAAQD,UAASC,KAAI,CAAA,CAAA;AAAA,eACvB;AAEA,cAAAD,SAAQ,IAAK,CAAA,CAAA,EAAA,EAAK,MAAO,CAAA,IAAI,CAAC,CAAI,EAAA,CAAA,CAAA,CAAA;AAElC,cAAA,MAAM,SAAS,MAAO,CAAA,EAAA,CAAG,MAAQ,CAAA,MAAA,CAAO,WAAW,GAAG,CAAA,CAAA;AACtD,cAAA,KAAA,MAAWC,SAAQ,MAAQ,EAAA;AACzB,gBAAA,OAAA,CAAQD,UAASC,KAAI,CAAA,CAAA;AAAA,eACvB;AAAA,aACF,MAAA,IAAW,MAAO,CAAA,IAAA,KAAS,QAAU,EAAA;AACnC,cAAM,KAAA,CAAA,IAAA;AAAA,gBACJ,GAAG,MAAO,CAAA,iBAAiB,CAAC,CAAA,CAAA,EAC1B,OAAO,SAAY,GAAA,WAAA,CAAY,GAAG,CAAA,GAAI,GACxC,CAAI,CAAA,EAAA,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA,CAAA;AAAA,eACjC,CAAA;AAAA,aACK,MAAA;AACL,cAAA,UAAA,CAAW,OAAO,IAAI,CAAA,CAAA;AAAA,aACxB;AAAA,WACF;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,KAAK,UAAY,EAAA;AACrB,UAAM,KAAA,CAAA,IAAA;AAAA,YACJ,CAAA,EAAG,IAAI,CAAoB,kBAAA,CAAA,CAAC,QAAQ,CAAE,CAAA,IAAA,CAAK,WAAW,OAAQ,CAAA,IAAA;AAAA,cAC5D,IAAA;AAAA,aACD,CAAA,CAAA,CAAA;AAAA,WACH,CAAA;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,KAAK,OAAS,EAAA;AAClB,UAAW,KAAA,MAAA,KAAA,IAAS,CAAE,CAAA,IAAA,CAAK,OAAS,EAAA;AAClC,YAAM,KAAA,CAAA,IAAA;AAAA,cACJ,CAAG,EAAA,GAAA;AAAA,gBACD,CAAS,MAAA,EAAA,KAAA,CAAM,OAAQ,CAAA,MAAA,GAAS,YAAY,EAAE,CAAA,MAAA,CAAA;AAAA,eAC/C,CAAQ,KAAA,EAAA,KAAA,CAAM,OACZ,CAAA,GAAA,CAAI,CAAC,CAAO,KAAA,QAAA,IAAY,CAAI,GAAA,CAAA,CAAE,SAAS,CAAE,CAAA,UAAW,CACpD,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,aACf,CAAA;AAAA,WACF;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,KAAK,QAAU,EAAA;AACnB,UAAW,KAAA,MAAA,OAAA,IAAW,CAAE,CAAA,IAAA,CAAK,QAAU,EAAA;AACrC,YAAM,KAAA,CAAA,IAAA;AAAA,cACJ,GAAG,GAAI,CAAA,CAAA,cAAA,CAAgB,CAAC,CAAQ,KAAA,EAAA,OAAA,CAAQ,QACrC,GAAI,CAAA,CAAC,MAAO,QAAY,IAAA,CAAA,GAAI,EAAE,MAAS,GAAA,CAAA,CAAE,UAAW,CACpD,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,aACf,CAAA;AAAA,WACF;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,KAAK,WAAa,EAAA;AACtB,UAAA,KAAA,MAAW,EAAE,UAAA,EAAgB,IAAA,CAAA,CAAE,KAAK,WAAa,EAAA;AAC/C,YAAA,IAAI,CAAC,UAAY,EAAA,SAAA;AAEjB,YAAM,MAAA,CAAC,MAAQ,EAAA,IAAI,CAAI,GAAA,yBAAA;AAAA,cACrB,UAAW,CAAA,SAAA;AAAA,aACb,CAAA;AAEA,YAAM,KAAA,CAAA,IAAA;AAAA,cACJ,GAAG,GAAI,CAAA,CAAA,kBAAA,CAAoB,CAAC,CAAA,KAAA,EAAQ,WAAW,OAAQ,CAAA,IAAA;AAAA,gBACrD,IAAA;AAAA,eACD,CAAQ,KAAA,EAAA,UAAA;AAAA,gBACP;AAAA,kBACE,MAAA;AAAA,kBACA,IAAA;AAAA,iBACF;AAAA,gBACA,aAAA;AAAA,eACD,CAAI,CAAA,EAAA,UAAA,CAAW,cAAe,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,aAC3C,CAAA;AAAA,WACF;AAEA,UAAA,KAAA,MAAW,EAAE,KAAA,EAAW,IAAA,CAAA,CAAE,KAAK,WAAa,EAAA;AAC1C,YAAA,IAAI,CAAC,KAAO,EAAA,SAAA;AAEZ,YAAA,KAAA,CAAM,IAAK,CAAA,CAAA,EAAG,GAAI,CAAA,CAAA,YAAA,CAAc,CAAC,CAAI,CAAA,EAAA,KAAA,CAAM,KAAM,CAAA,EAAE,MAAQ,EAAA,EAAG,EAAC,CAAC,CAAE,CAAA,CAAA,CAAA;AAAA,WACpE;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,IAAI,UAAY,EAAA;AACpB,UAAM,KAAA,CAAA,IAAA;AAAA,YACJ,CAAA,EAAG,MAAM,CAAmB,iBAAA,CAAA,CAAC,QAAQ,CAAE,CAAA,GAAA,CAAI,WAAW,OAAQ,CAAA,IAAA;AAAA,cAC5D,IAAA;AAAA,aACD,CAAA,CAAA,CAAA;AAAA,WACH,CAAA;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,IAAI,OAAS,EAAA;AACjB,UAAW,KAAA,MAAA,KAAA,IAAS,CAAE,CAAA,GAAA,CAAI,OAAS,EAAA;AACjC,YAAM,KAAA,CAAA,IAAA;AAAA,cACJ,CAAG,EAAA,KAAA;AAAA,gBACD,CAAQ,KAAA,EAAA,KAAA,CAAM,OAAQ,CAAA,MAAA,GAAS,YAAY,EAAE,CAAA,MAAA,CAAA;AAAA,eAC9C,CAAQ,KAAA,EAAA,KAAA,CAAM,OACZ,CAAA,GAAA,CAAI,CAAC,CAAO,KAAA,QAAA,IAAY,CAAI,GAAA,CAAA,CAAE,SAAS,CAAE,CAAA,UAAW,CACpD,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,aACf,CAAA;AAAA,WACF;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,IAAI,QAAU,EAAA;AAClB,UAAW,KAAA,MAAA,OAAA,IAAW,CAAE,CAAA,GAAA,CAAI,QAAU,EAAA;AACpC,YAAM,KAAA,CAAA,IAAA;AAAA,cACJ,GAAG,KAAM,CAAA,CAAA,aAAA,CAAe,CAAC,CAAQ,KAAA,EAAA,OAAA,CAAQ,QACtC,GAAI,CAAA,CAAC,MAAO,QAAY,IAAA,CAAA,GAAI,EAAE,MAAS,GAAA,CAAA,CAAE,UAAW,CACpD,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,aACf,CAAA;AAAA,WACF;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,IAAI,WAAa,EAAA;AACrB,UAAA,KAAA,MAAW,EAAE,UAAA,EAAgB,IAAA,CAAA,CAAE,IAAI,WAAa,EAAA;AAC9C,YAAA,IAAI,CAAC,UAAY,EAAA,SAAA;AAEjB,YAAM,KAAA,CAAA,IAAA;AAAA,cACJ,GAAG,KAAM,CAAA,CAAA,iBAAA,CAAmB,CAAC,CAAA,KAAA,EAAQ,WAAW,OAAQ,CAAA,IAAA;AAAA,gBACtD,IAAA;AAAA,eACD,QACC,UAAW,CAAA,SACb,IAAI,UAAW,CAAA,cAAA,CAAe,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,aAC1C,CAAA;AAAA,WACF;AAEA,UAAA,KAAA,MAAW,EAAE,KAAA,EAAW,IAAA,CAAA,CAAE,IAAI,WAAa,EAAA;AACzC,YAAA,IAAI,CAAC,KAAO,EAAA,SAAA;AAEZ,YAAM,KAAA,CAAA,IAAA;AAAA,cACJ,CAAG,EAAA,KAAA,CAAM,CAAa,WAAA,CAAA,CAAC,CAAI,CAAA,EAAA,KAAA,CAAM,KAAM,CAAA,EAAE,MAAQ,EAAA,EAAG,EAAC,CAAC,CAAA,CAAA;AAAA,aACxD,CAAA;AAAA,WACF;AAAA,SACF;AAEA,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CAAG,EAAA,MAAA,CAAO,gBAAgB,CAAC,CAAI,CAAA,EAAA,UAAA,CAAW,CAAG,EAAA,aAAa,CAAC,CAAA,EACzD,KAAM,CAAA,MAAA,GAAS,MAAM,EACvB,CAAA,CAAA;AAAA,SACF,CAAA;AAEA,QAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,UAAA,IAAA,CAAK,KAAK,KAAK,CAAA,CAAA;AAAA,SACjB;AAEA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,QAAU,EAAA;AACb,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CACE,EAAA,CAAA,CAAE,MAAW,KAAA,QAAA,GACT,KAAM,CAAA,iBAAiB,CACvB,GAAA,GAAA,CAAI,eAAe,CACzB,CAAI,CAAA,EAAA,CAAA,CAAE,IAAI,CAAA,CAAA;AAAA,SACZ,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,cAAgB,EAAA;AACnB,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CAAG,EAAA,MAAA,CAAO,iBAAiB,CAAC,CAAI,CAAA,EAAA,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,MAAO,CAAA,IAAI,CAAC,CAAA,CAAA,EAAI,EAAE,EAAE,CAAA,CAAA;AAAA,SAChE,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,YAAc,EAAA;AACjB,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CAAG,EAAA,MAAA;AAAA,YACD,KACE,CAAE,CAAA,UAAA,KAAe,CAAE,CAAA,QAAA,GACf,EAAE,IAAS,KAAA,CAAA,CAAE,EACX,GAAA,0BAAA,GACA,qBACF,QACN,CAAA,CAAA,EAAI,CAAE,CAAA,IAAA,CAAK,aAAa,CAAA,CAAA;AAAA,WACzB,CAAI,CAAA,EAAA,UAAA;AAAA,YACH;AAAA,cACE,QAAQ,CAAE,CAAA,UAAA;AAAA,cACV,MAAM,CAAE,CAAA,IAAA;AAAA,aACV;AAAA,YACA,aAAA;AAAA,WACD,CAAA,CAAA,EAAI,MAAO,CAAA,IAAI,CAAC,CAAI,CAAA,EAAA,UAAA;AAAA,YACnB;AAAA,cACE,QAAQ,CAAE,CAAA,QAAA;AAAA,cACV,MAAM,CAAE,CAAA,EAAA;AAAA,aACV;AAAA,YACA,aAAA;AAAA,WACD,CAAA,CAAA;AAAA,SACH,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,WAAa,EAAA;AAChB,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CAAA,EACE,CAAE,CAAA,MAAA,KAAW,QACT,GAAA,KAAA,CAAM,oBAAoB,CAC1B,GAAA,GAAA,CAAI,kBAAkB,CAC5B,CAAI,CAAA,EAAA,UAAA,CAAW,GAAG,aAAa,CAAC,CAC9B,EAAA,CAAA,CAAE,OAAU,GAAA,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA,OAAO,CAAC,CAAA,CAAA,GAAK,EACtC,CAAA,CAAA;AAAA,SACF,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,MAAQ,EAAA;AACX,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CAAA,EACE,EAAE,MAAW,KAAA,QAAA,GAAW,MAAM,eAAe,CAAA,GAAI,IAAI,aAAa,CACpE,IAAI,UAAW,CAAA,CAAA,EAAG,aAAa,CAAC,CAAA,GAAA,EAAM,EAAE,MAAO,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,SAC3D,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,YAAc,EAAA;AACjB,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CAAA,EACE,EAAE,MAAW,KAAA,KAAA,GACT,MAAM,sBAAsB,CAAA,GAC5B,IAAI,2BAA2B,CACrC,IAAI,UAAW,CAAA,CAAA,EAAG,aAAa,CAAC,CAAA,EAAA,EAAK,EAAE,MAAO,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,SAC1D,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,kBAAoB,EAAA;AACvB,QAAA,IAAI,EAAE,UAAY,EAAA;AAChB,UAAK,IAAA,CAAA,IAAA;AAAA,YACH,CAAG,EAAA,GAAA,CAAI,2BAA2B,CAAC,CAAI,CAAA,EAAA,UAAA;AAAA,cACrC,CAAA;AAAA,cACA,aAAA;AAAA,aACD,CAAK,EAAA,EAAA,CAAA,CAAE,UAAW,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,WAC/B,CAAA;AAAA,SACF;AACA,QAAA,IAAI,EAAE,QAAU,EAAA;AACd,UAAK,IAAA,CAAA,IAAA;AAAA,YACH,CAAG,EAAA,KAAA,CAAM,sBAAsB,CAAC,CAAI,CAAA,EAAA,UAAA;AAAA,cAClC,CAAA;AAAA,cACA,aAAA;AAAA,aACD,CAAK,EAAA,EAAA,CAAA,CAAE,QAAS,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,WAC7B,CAAA;AAAA,SACF;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,QAAU,EAAA;AACb,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CACE,EAAA,CAAA,CAAE,MAAW,KAAA,QAAA,GACT,MAAM,iBAAiB,CAAA,GACvB,GAAI,CAAA,eAAe,CACzB,CAAA,CAAA,EAAI,UAAW,CAAA,CAAA,EAAG,aAAa,CAAC,CAAA,CAAA;AAAA,SAClC,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,MAAA,CAAA;AAAA,MACL,KAAK,WAAA,CAAA;AAAA,MACL,KAAK,kBAAA,CAAA;AAAA,MACL,KAAK,YAAA;AACH,QAAA,MAAA;AAAA,MACF,KAAK,iBAAmB,EAAA;AACtB,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CAAA,EAAG,OAAO,CAAY,SAAA,EAAA,CAAA,CAAE,KAAK,WAAY,EAAC,CAAE,CAAA,CAAC,CAAa,UAAA,EAAA,UAAA;AAAA,YACxD,EAAE,MAAQ,EAAA,CAAA,CAAE,WAAa,EAAA,IAAA,EAAM,EAAE,SAAU,EAAA;AAAA,YAC3C,aAAA;AAAA,WACD,CAAK,EAAA,EAAA,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,OAAO,IAAI,CAAC,CAAI,CAAA,EAAA,CAAA,CAAE,EAAE,CAAA,CAAA;AAAA,SACtC,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA;AACE,QAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AAAA,KAChB;AAAA,GACF;AAEA,EAAA,MAAM,MAAS,GAAA,YAAA,CAAa,IAAM,EAAA,EAAA,EAAI,IAAI,CAAA,CAAA;AAC1C,EAAO,MAAA,CAAA,MAAA,CAAO,IAAI,MAAM,CAAA,CAAA;AAC1B,CAAA,CAAA;AAEA,MAAM,aAAa,CACjB,EAAE,MAAQ,EAAA,IAAA,IACV,aACG,KAAA;AACH,EAAA,OAAO,UAAU,MAAW,KAAA,aAAA,GAAgB,GAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAK,CAAA,GAAA,IAAA,CAAA;AACpE,CAAA;;AC5XO,MAAM,oBAAoB,KAAM,CAAA;AAAC,CAAA;AAEjC,MAAM,QAAW,GAAA,OACtB,QACA,EAAA,MAAA,EACA,MACA,SACkB,KAAA;AAClB,EAAI,IAAA,EAAE,QAAW,GAAA,MAAA,CAAA;AACjB,EAAA,IAAI,CAAC,MAAU,IAAA,CAAC,OAAO,SAAW,EAAA,MAAM,cAAc,MAAM,CAAA,CAAA;AAC5D,EAAA,IAAI,CAAC,QAAS,CAAA,MAAA,EAAc,MAAA,IAAI,MAAM,CAAoC,kCAAA,CAAA,CAAA,CAAA;AAE1E,EAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,KAAK,GAAa,MAAA,IAAA,KAAA,CAAA;AAEvC,EAAI,IAAA,aAAA,GAAgB,IAAK,CAAA,CAAC,CAAK,IAAA,WAAA,CAAA;AAC/B,EAAI,IAAA,EAAA,CAAA;AACJ,EAAA,IAAI,kBAAkB,IAAM,EAAA;AAC1B,IAAK,EAAA,GAAA,IAAA,CAAA;AACL,IAAgB,aAAA,GAAA,WAAA,CAAA;AAAA,GACX,MAAA;AACL,IAAK,EAAA,GAAA,IAAA,CAAK,CAAC,CAAM,KAAA,IAAA,CAAA;AAAA,GACnB;AAEA,EAAA,IAAI,SAAW,EAAA;AACb,IAAW,QAAA,GAAA,CAAC,UAAU,OAAO,CAAA,CAAA;AAAA,GAC/B;AAEA,EAAM,MAAA,EAAE,WAAY,EAAA,GAAI,MAAM,wBAAA;AAAA,IAC5B,QAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,CAAC,OAAO,CAAI,GAAA,QAAA,CAAA;AAClB,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAU,IAAA,QAAA,CAAA;AAExC,EAAA,MAAM,EAAK,GAAA,MAAM,eAAgB,CAAA,MAAA,EAAQ,MAAM,CAAA,CAAA;AAC/C,EAAA,MAAM,EAAE,WAAA,EAAa,QAAS,EAAA,GAAI,EAAG,CAAA,GAAA,CAAA;AAErC,EAAA,MAAM,YAAY,MAAM,cAAA;AAAA,IACtB,EAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,iBAAA,GAAoB,qBAAsB,CAAA,MAAA,EAAQ,aAAa,CAAA,CAAA;AAErE,EAAA,MAAM,uBAAkD,GAAA;AAAA,IACtD,iBAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,MAAmB,EAAC,CAAA;AAE1B,EAAI,IAAA,aAAA,CAAA;AACJ,EAAI,IAAA;AACF,IAAA,aAAA,GAAgB,MAAM,gBAAA;AAAA,MACpB,OAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAA;AAAA,MACA,WAAA;AAAA,MACA,uBAAA;AAAA,KACF,CAAA;AAAA,WACO,GAAK,EAAA;AACZ,IAAA,IAAI,eAAe,WAAa,EAAA;AAC9B,MAAA,MAAM,cAAc,QAAQ,CAAA,CAAA;AAC5B,MAAA,OAAA;AAAA,KACF;AACA,IAAM,MAAA,GAAA,CAAA;AAAA,GACR;AAEA,EAAI,IAAA,aAAA,IAAiB,CAAC,SAAW,EAAA;AAC/B,IAAA,MAAM,SAAS,MAAM,eAAA;AAAA,MACnB,OAAA;AAAA,MACA,MAAA;AAAA,MACA,aAAA;AAAA,MACA,uBAAA;AAAA,KACF,CAAA;AAEA,IAAA,IAAI,WAAW,KAAW,CAAA,EAAA;AACxB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA;AAAA,EAAwK,aAAa,CAAA,EACnL,MAAW,KAAA,KAAA,GAAQ,EAAK,GAAA,CAAA;AAAA;AAAA,EAAsB,MAAM,CACtD,CAAA,CAAA,CAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAM,MAAA,EAAE,QAAW,GAAA,MAAA,CAAA;AAEnB,EAAK,IAAA,CAAA,CAAC,MAAM,CAAC,aAAA,KAAkB,CAAC,SAAW,EAAA,MAAM,cAAc,QAAQ,CAAA,CAAA;AAEvE,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAA,MAAA,EAAQ,IAAI,0BAA0B,CAAA,CAAA;AACtC,IAAA,OAAA;AAAA,GACF;AAEA,EAAA,MAAM,UAAU,SAAW,EAAA,OAAA,IAAY,MAAM,eAAgB,CAAA,IAAI,MAAM,CAAA,CAAA;AAEvE,EAAA,MAAM,WAAqB,EAAC,CAAA;AAC5B,EAAM,MAAA,kBAAA;AAAA,IACJ;AAAA,MACE,GAAG,MAAA;AAAA,MACH,MAAQ,EAAA,MAAA,GAAS,EAAE,GAAG,MAAQ,EAAA,GAAA,EAAK,CAAC,GAAA,KAAQ,QAAS,CAAA,IAAA,CAAK,GAAG,CAAA,EAAM,GAAA,MAAA;AAAA,KACrE;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,GACF,CAAA;AAEA,EAAO,MAAA,CAAA,GAAA,EAAK,QAAQ,aAAa,CAAA,CAAA;AAEjC,EAAA,IAAI,MAAQ,EAAA;AACV,IAAA,KAAA,MAAW,OAAO,QAAU,EAAA;AAC1B,MAAA,MAAA,CAAO,GAAI,CAAA,CAAA;AAAA,EAAK,GAAG,CAAE,CAAA,CAAA,CAAA;AAAA,KACvB;AAAA,GACF;AAEA,EAAA,IAAI,EAAI,EAAA;AACN,IAAA,KAAA,MAAWC,YAAW,QAAU,EAAA;AAC9B,MAAA,MAAM,eAAgB,CAAA,EAAE,OAAAA,EAAAA,QAAAA,EAAS,QAAQ,CAAA,CAAA;AAAA,KAC3C;AAAA,GACF,MAAA,IAAW,CAAC,SAAW,EAAA;AACrB,IAAA,MAAM,cAAc,QAAQ,CAAA,CAAA;AAAA,GAC9B;AACF,CAAA,CAAA;AAEA,MAAM,aAAA,GAAgB,CAAC,MAAA,KACrB,IAAI,KAAA;AAAA,EACF,CACE,EAAA,EAAA,MAAA,CAAO,MAAS,GAAA,WAAA,GAAc,QAChC,CAAA,yEAAA,CAAA;AACF,CAAA,CAAA;AAEF,MAAM,eAAA,GAAkB,OACtB,MAAA,EACA,MACwB,KAAA;AACxB,EAAM,MAAA,MAAA,GAAS,MAAM,MAAO,CAAA,MAAA;AAAA,IAC1B,aAAA,CAAc,KAAK,OAAQ,CAAA,MAAA,CAAO,UAAU,MAAM,CAAC,EAAE,QAAS,EAAA;AAAA,GAChE,CAAA;AACA,EAAA,MAAM,EAAM,GAAA,MAAA,CACV,MAAO,CAAA,YAAA,IAAgB,IACzB,CAAA,CAAA;AACA,EAAI,IAAA,CAAC,IAAI,GAAK,EAAA;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,0CACE,MAAO,CAAA,YAAA,IAAgB,IACzB,CAAA,MAAA,EAAS,OAAO,MAAM,CAAA,CAAA;AAAA,KACxB,CAAA;AAAA,GACF;AACA,EAAO,OAAA,EAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,wBAA2B,GAAA,OAC/B,QACA,EAAA,MAAA,EACA,SAGI,KAAA;AACJ,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,OAAA;AAAA,MACL,WAAa,EAAA;AAAA,QACX,SAAS,EAAC;AAAA,QACV,QAAQ,EAAC;AAAA,QACT,OAAO,EAAC;AAAA,QACR,SAAS,EAAC;AAAA,QACV,UAAU,EAAC;AAAA,QACX,aAAa,EAAC;AAAA,QACd,UAAU,EAAC;AAAA,QACX,YAAY,EAAC;AAAA,QACb,OAAO,EAAC;AAAA,QACR,SAAS,EAAC;AAAA,QACV,YAAY,EAAC;AAAA,OACf;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,WAAW,QAAU,EAAA;AAC9B,IAAA,MAAM,OAAQ,CAAA,EAAE,OAAS,EAAA,MAAA,EAAQ,CAAA,CAAA;AAAA,GACnC;AAEA,EAAM,MAAA,YAAA,GAAe,MAAM,OAAQ,CAAA,GAAA;AAAA,IACjC,SAAS,GAAI,CAAA,CAAC,OAAY,KAAA,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAAA,GACvD,CAAA;AAEA,EAAM,MAAA,WAAA,GAAc,aAAa,CAAC,CAAA,CAAA;AAClC,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,YAAA,CAAa,QAAQ,CAAK,EAAA,EAAA;AAC5C,IAAA,mBAAA,CAAoB,WAAa,EAAA,YAAA,CAAa,CAAC,CAAA,EAAG,CAAC,CAAA,CAAA;AAAA,GACrD;AAEA,EAAA,OAAO,EAAE,WAAY,EAAA,CAAA;AACvB,CAAA,CAAA;AAEA,MAAM,mBAAsB,GAAA,CAC1B,CACA,EAAA,CAAA,EACA,GACAC,KACG,KAAA;AACH,EAAI,IAAA,GAAA,CAAA;AACJ,EAAI,IAAA,OAAO,CAAM,KAAA,OAAO,CAAG,EAAA;AACzB,IAAM,GAAA,GAAA,IAAA,CAAA;AAAA,GACR;AAEA,EAAA,IAAI,CAAC,CAAA,IAAK,OAAO,CAAA,KAAM,QAAU,EAAA;AAC/B,IAAA,IAAI,MAAM,CAAG,EAAA;AACX,MAAM,GAAA,GAAA,IAAA,CAAA;AAAA,KACR;AAAA,GACK,MAAA;AACL,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAG,EAAA;AACpB,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,GAAA,GAAM,EAAE,MAAQ,EAAA,CAAA,GAAI,KAAK,CAAK,EAAA,EAAA;AAC5C,QAAA,mBAAA;AAAA,UACE,EAAE,CAAC,CAAA;AAAA,UACF,EAAgB,CAAC,CAAA;AAAA,UAClB,CAAA;AAAA,UACAA,QAAO,CAAGA,EAAAA,KAAI,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,OAAO,CAAC,CAAA;AAAA,SACnC,CAAA;AAAA,OACF;AAAA,KACK,MAAA;AACL,MAAA,KAAA,MAAW,OAAO,CAAG,EAAA;AACnB,QAAA,mBAAA;AAAA,UACE,EAAE,GAAqB,CAAA;AAAA,UACtB,EAA8B,GAAG,CAAA;AAAA,UAClC,CAAA;AAAA,UACAA,KAAO,GAAA,CAAA,EAAGA,KAAI,CAAA,CAAA,EAAI,GAAG,CAAK,CAAA,GAAA,GAAA;AAAA,SAC5B,CAAA;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,GAAK,EAAA;AACP,IAAA,MAAM,IAAI,KAAM,CAAA,CAAA,EAAGA,KAAI,CAAA,+BAAA,EAAkC,CAAC,CAAE,CAAA,CAAA,CAAA;AAAA,GAC9D;AACF,CAAA,CAAA;AAEA,MAAM,cAAiB,GAAA,OACrB,EACA,EAAA,aAAA,EACA,UACA,WACuB,KAAA;AACvB,EAAM,MAAA,UAAA,uBAAiB,GAAY,EAAA,CAAA;AACnC,EAAM,MAAA,WAAA,uBAAkB,GAAuB,EAAA,CAAA;AAE/C,EAAA,MAAM,SAAuB,GAAA;AAAA,IAC3B,OAAA,kBAAa,IAAA,GAAA,CAAI,KAAS,CAAA,CAAA;AAAA,IAC1B,KAAA,sBAAW,GAAI,EAAA;AAAA,IACf,QAAQ,EAAC;AAAA,IACT,SAAS,EAAC;AAAA,GACZ,CAAA;AAEA,EAAM,MAAA,OAAA,uBAAc,GAAwB,EAAA,CAAA;AAE5C,EAAA,KAAA,MAAW,OAAO,EAAI,EAAA;AACpB,IAAI,IAAA,GAAA,CAAI,CAAC,CAAA,KAAM,GAAK,EAAA,SAAA;AAEpB,IAAM,MAAA,KAAA,GAAQ,GAAG,GAAsB,CAAA,CAAA;AAEvC,IAAI,IAAA,CAAC,MAAM,KAAO,EAAA;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAS,MAAA,EAAA,GAAG,CAA4B,0BAAA,CAAA,CAAA,CAAA;AAAA,KAC1D;AAEA,IAAM,MAAA,EAAE,MAAO,EAAA,GAAI,KAAM,CAAA,CAAA,CAAA;AACzB,IAAA,MAAM,OAAO,mBAAoB,CAAA,EAAE,QAAQ,IAAM,EAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAC9D,IAAI,IAAA,UAAA,CAAW,GAAI,CAAA,IAAI,CAAG,EAAA;AACxB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAS,MAAA,EAAA,IAAI,CAA4B,0BAAA,CAAA,CAAA,CAAA;AAAA,KAC3D;AAEA,IAAA,UAAA,CAAW,IAAI,IAAI,CAAA,CAAA;AAEnB,IAAA,IAAI,MAAQ,EAAA,SAAA,CAAU,OAAQ,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AAExC,IAAU,SAAA,CAAA,MAAA,CAAO,KAAK,KAAc,CAAA,CAAA;AAEpC,IAAWR,KAAAA,MAAAA,IAAAA,IAAO,MAAM,SAAW,EAAA;AACjC,MAAM,MAAA,MAAA,GAAS,KAAM,CAAA,KAAA,CAAMA,IAAG,CAAA,CAAA;AAE9B,MAAI,IAAA,MAAA,IAAU,eAAe,MAAQ,EAAA;AACnC,QAAiC,gCAAA,CAAA,MAAA,EAAQ,aAAa,SAAS,CAAA,CAAA;AAAA,OACjE;AAAA,KACF;AAEA,IAAWA,KAAAA,MAAAA,IAAAA,IAAO,MAAM,KAAO,EAAA;AAC7B,MAAM,MAAA,MAAA,GAAS,KAAM,CAAA,KAAA,CAAMA,IAAG,CAAA,CAAA;AAE9B,MAAI,IAAA,MAAA,CAAO,KAAK,QAAU,EAAA;AACxB,QAAO,OAAA,KAAA,CAAM,MAAMA,IAAG,CAAA,CAAA;AAAA,OACxB,MAAA,IAAW,kBAAkB,YAAc,EAAA;AACzC,QAAA,MAAM,CAAC,UAAA,GAAa,aAAeH,EAAAA,KAAI,CAAI,GAAA,yBAAA;AAAA,UACzC,MAAO,CAAA,QAAA;AAAA,SACT,CAAA;AACA,QAAQ,OAAA,CAAA,GAAA,CAAI,OAAO,QAAU,EAAA;AAAA,UAC3B,UAAA;AAAA,UACA,IAAAA,EAAAA,KAAAA;AAAA,UACA,QAAS,MAAO,CAAA,IAAA,CAAK,EACnB,IAAA,IAAI,cAAc,mBAAmB,CAAA;AAAA,SACxC,CAAA,CAAA;AAAA,OACI,MAAA;AACL,QAAA,MAAM,EACJ,GAAA,MAAA,CAAO,QAAa,KAAA,MAAA,GAChB,SACA,MAAkB,YAAA,WAAA,IAClB,MAAO,CAAA,IAAA,CAAK,IAAK,CAAA,QAAA,KAAa,MAC9B,GAAA,MAAA,CAAO,KAAK,IACZ,GAAA,KAAA,CAAA,CAAA;AAEN,QAAA,IAAI,EAAI,EAAA;AACN,UAAkB,iBAAA,CAAA,EAAA,EAAI,eAAe,SAAS,CAAA,CAAA;AAAA,SAChD;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,SAAS,UAAY,EAAA;AACvB,IAAW,KAAA,MAAA,SAAA,IAAa,SAAS,UAAY,EAAA;AAC3C,MAAA,MAAM,CAAC,MAAM,CAAI,GAAA,yBAAA,CAA0B,UAAU,IAAI,CAAA,CAAA;AACzD,MAAA,IAAI,MAAQ,EAAA,SAAA,CAAU,OAAQ,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,KAC1C;AAAA,GACF;AAEA,EAAA,IAAI,SAAS,OAAS,EAAA;AACpB,IAAW,KAAA,MAAA,GAAA,IAAO,SAAS,OAAS,EAAA;AAClC,MAAA,MAAM,CAAC,UAAa,GAAA,aAAA,EAAe,IAAI,CAAA,GAAI,0BAA0B,GAAG,CAAA,CAAA;AACxE,MAAA,MAAM,MAAS,GAAA,QAAA,CAAS,OAAQ,CAAA,GAAG,EAAE,WAAW,CAAA,CAAA;AAEhD,MAAA,OAAA,CAAQ,IAAI,GAAK,EAAA;AAAA,QACf,UAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAA;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,GACF;AAEA,EAAW,KAAA,MAAA,MAAA,IAAU,OAAQ,CAAA,MAAA,EAAU,EAAA;AACrC,IAAU,SAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,MAAA,CAAO,UAAU,CAAA,CAAA;AACvC,IAAU,SAAA,CAAA,OAAA,CAAQ,KAAK,MAAM,CAAA,CAAA;AAAA,GAC/B;AAEA,EAAO,OAAA,SAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,iBAAoB,GAAA,CACxB,MACA,EAAA,aAAA,EACA,SACG,KAAA;AACH,EAAM,MAAA,EAAE,QAAU,EAAA,OAAA,EAAY,GAAA,MAAA,CAAA;AAK9B,EAAA,MAAM,CAAC,MAAA,EAAQ,IAAI,CAAA,GAAI,0BAA0B,QAAQ,CAAA,CAAA;AACzD,EAAA,MAAM,aAAa,MAAU,IAAA,aAAA,CAAA;AAE7B,EAAA,SAAA,CAAU,MAAM,GAAI,CAAA,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,IAAI,CAAI,CAAA,EAAA;AAAA,IAC3C,MAAQ,EAAA,UAAA;AAAA,IACR,IAAA;AAAA,IACA,MAAQ,EAAA,OAAA;AAAA,GACT,CAAA,CAAA;AACD,EAAA,IAAI,MAAQ,EAAA,SAAA,CAAU,OAAQ,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AAC1C,CAAA,CAAA;AAEA,MAAM,gCAAmC,GAAA,CACvC,MACA,EAAA,WAAA,EACA,SACG,KAAA;AACH,EAAA,MAAM,IAAK,MAAoC,CAAA,SAAA,CAAA;AAC/C,EAAA,MAAM,IAAO,GAAA,WAAA,CAAY,GAAI,CAAA,CAAA,CAAE,KAAK,CAAA,CAAA;AACpC,EAAA,IAAI,IAAM,EAAA;AACR,IAAW,KAAA,MAAA,GAAA,IAAO,EAAE,KAAO,EAAA;AACzB,MAAI,IAAA,CAAA,CAAE,MAAM,GAAG,CAAA,CAAE,aAAa,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,EAAG,QAAU,EAAA;AACvD,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAU,OAAA,EAAA,GAAG,CAAO,IAAA,EAAA,CAAA,CAAE,KAAK,CAAA,mFAAA,CAAA;AAAA,SAC7B,CAAA;AAAA,OACF;AAAA,KACF;AACA,IAAA,OAAA;AAAA,GACF;AACA,EAAY,WAAA,CAAA,GAAA,CAAI,CAAE,CAAA,KAAA,EAAO,CAAC,CAAA,CAAA;AAE1B,EAAM,MAAA,SAAA,GAAY,MAAO,CAAA,MAAA,CAAO,CAAC,CAAA,CAAA;AAEjC,EAAA,MAAM,QAAsB,EAAC,CAAA;AAC7B,EAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,IAAA,MAAME,UAAS,MAAO,CAAA,MAAA,CAAO,SAAU,CAAA,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA;AACjD,IAAAA,QAAO,IAAO,GAAA;AAAA,MACZ,GAAGA,OAAO,CAAA,IAAA;AAAA,MACV,IAAA,EAAMA,OAAO,CAAA,IAAA,CAAK,IAAQ,IAAA,GAAA;AAAA,MAC1B,QAAU,EAAA,KAAA,CAAA;AAAA,MACV,UAAY,EAAA,KAAA,CAAA;AAAA,MACZ,OAAS,EAAA,KAAA,CAAA;AAAA,KACX,CAAA;AACA,IAAM,KAAA,CAAA,WAAA,CAAY,GAAG,CAAC,CAAIA,GAAAA,OAAAA,CAAAA;AAAA,GAC5B;AACA,EAAA,SAAA,CAAU,KAAQ,GAAA,KAAA,CAAA;AAClB,EAAA,SAAA,CAAU,QAAW,GAAA;AAAA,IACnB,GAAG,SAAU,CAAA,QAAA;AAAA,IACb,SAAW,EAAA;AAAA,MACT,GAAG,UAAU,QAAS,CAAA,SAAA;AAAA,MACtB,UAAY,EAAA;AAAA,QACV,OAAA,EAAS,MAAO,CAAA,IAAA,CAAK,KAAK,CAAA;AAAA,OAC5B;AAAA,KACF;AAAA,IACA,YAAc,EAAA,KAAA;AAAA,GAChB,CAAA;AAEA,EAAU,SAAA,CAAA,MAAA,CAAO,KAAK,SAAS,CAAA,CAAA;AAE/B,EAAA,OAAA;AACF,CAAA,CAAA;AAEA,MAAM,aAAA,GAAgB,CAAC,QAA4B,KAAA;AACjD,EAAO,OAAA,OAAA,CAAQ,IAAI,QAAS,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,CAAA,CAAE,KAAM,EAAC,CAAC,CAAA,CAAA;AACnD,CAAA;;ACvba,MAAA,qBAAA,GAAwB,CACnC,IAAA,EACA,MAC6C,KAAA;AA1C/C,EAAA,IAAA,EAAA,CAAA;AA2CE,EAAA,MAAM,kBACJ,MAAO,CAAA,eAAA,KAAoB,CAAC,IAAA,KAAiB,YAAY,IAAI,CAAA,SAAA,CAAA,CAAA,CAAA;AAE/D,EAAA,MAAM,aAAyB,EAAC,CAAA;AAChC,EAAA,MAAM,QAAe,EAAC,CAAA;AACtB,EAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,IAAI,IAAA,GAAA,CAAI,SAAS,OAAS,EAAA;AACxB,MAAM,MAAA,QAAA,GAAW,WAAY,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AACrC,MAAM,MAAA,WAAA,GAAc,GAAI,CAAA,MAAA,GAAS,CAAG,EAAA,GAAA,CAAI,MAAM,CAAI,CAAA,EAAA,GAAA,CAAI,IAAI,CAAA,CAAA,GAAK,GAAI,CAAA,IAAA,CAAA;AACnE,MAAA,IAAI,YAAY,IAAK,CAAA,OAAA,CAAQ,OAAO,QAAU,EAAA,eAAA,CAAgB,QAAQ,CAAC,CAAA,CAAA;AACvE,MAAA,IAAI,CAAC,SAAA,CAAU,QAAS,CAAA,KAAK,GAAgB,SAAA,IAAA,KAAA,CAAA;AAE7C,MAAM,MAAA,IAAA,GAAO,YAAa,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAElC,MAAA,MAAM,IAAkB,GAAA;AAAA,QACtB,WAAA;AAAA,QACA,GAAK,EAAA,QAAA;AAAA,QACL,IAAM,EAAA,SAAA;AAAA,QACN,IAAA;AAAA,QACA,SAAA,EAAW,GAAG,IAAI,CAAA,KAAA,CAAA;AAAA,OACpB,CAAA;AAEA,MAAA,UAAA,CAAW,WAAW,CAAI,GAAA,IAAA,CAAA;AAE1B,MAAA,IAAI,IAAI,WAAa,EAAA;AACnB,QAAA,KAAA,MAAW,EAAE,UAAA,EAAgB,IAAA,GAAA,CAAI,WAAa,EAAA;AAC5C,UAAA,IAAI,CAAC,UAAY,EAAA,SAAA;AAEjB,UAAA,CAAC,WAAM,UAAW,CAAA,SAAA,CAAA,KAAjB,KAA0C,CAAA,EAAA,CAAA,GAAA,KAAI,IAAK,CAAA;AAAA,YAClD,KAAO,EAAA,IAAA;AAAA,YACP,UAAA;AAAA,WACD,CAAA,CAAA;AAAA,SACH;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,EAAE,YAAY,KAAM,EAAA,CAAA;AAC7B,CAAA,CAAA;AAEO,MAAM,kBAAkB,CAC7B,UAAA,EACA,OACA,GACA,EAAA,aAAA,EACA,qBACA,aACoB,KAAA;AACpB,EAAA,MAAM,SACJ,GAAA,UAAA,CAAW,GAAI,CAAA,MAAA,GAAS,CAAG,EAAA,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,GAAI,CAAA,IAAI,CAAK,CAAA,GAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAEhE,EAAA,MAAM,OAAwB,GAAA;AAAA,IAC5B,YAAc,EAAA,mCAAA;AAAA,IACd,CAAC,aAAc,CAAA,SAAA,CAAU,IAAM,EAAA,aAAa,CAAC,GAAG,mBAAA;AAAA,GAClD,CAAA;AAEA,EAAA,MAAM,QAAgB,EAAC,CAAA;AAEvB,EAAA,IAAI,IAAI,MAAQ,EAAA;AACd,IAAA,KAAA,CAAM,KAAK,CAAY,SAAA,EAAA,WAAA,CAAY,GAAI,CAAA,MAAM,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,GACnD;AAEA,EAAA,KAAA,CAAM,KAAK,CAAoB,iBAAA,EAAA,WAAA,CAAY,GAAI,CAAA,IAAI,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAEvD,EAAA,IAAI,IAAI,OAAS,EAAA;AACf,IAAA,KAAA,CAAM,KAAK,CAAa,UAAA,EAAA,WAAA,CAAY,GAAI,CAAA,OAAO,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,GACrD;AAEA,EAAI,IAAA,GAAA,CAAI,iBAAiB,QAAU,EAAA;AACjC,IAAA,KAAA,CAAM,KAAK,sBAAsB,CAAA,CAAA;AAAA,GACnC;AAEA,EAAA,MAAM,YAAe,GAAA,OAAA;AAAA,IACnB,GAAA,CAAI,cACF,GAAI,CAAA,OAAA,EAAS,UACb,GAAI,CAAA,QAAA,EAAU,MACd,IAAA,GAAA,CAAI,WAAa,EAAA,MAAA;AAAA,GACrB,CAAA;AAEA,EAAA,MAAM,SAAY,GAAA,kBAAA;AAAA,IAChB,EAAE,CAAG,EAAA,GAAA,EAAK,KAAO,EAAA,GAAA,CAAI,MAAM,aAAc,EAAA;AAAA,IACzC,GAAI,CAAA,KAAA;AAAA,GACN,CAAA;AAEA,EAAM,KAAA,CAAA,IAAA;AAAA,IACJ,CAAA,0BAAA,EAA6B,YAAe,GAAA,QAAA,GAAW,EAAE,CAAA,SAAA,CAAA;AAAA,IACzD,YAAA,GAAe,CAAC,SAAS,CAAI,GAAA,SAAA;AAAA,IAC7B,eAAe,OAAU,GAAA,MAAA;AAAA,GAC3B,CAAA;AAEA,EAAA,IAAI,YAAc,EAAA;AAChB,IAAA,KAAA,CAAM,KAAK,iBAAkB,CAAA,EAAI,EAAA,GAAG,GAAG,IAAI,CAAA,CAAA;AAAA,GAC7C;AAEA,EAAA,MAAM,YAAoB,EAAC,CAAA;AAE3B,EAAM,MAAA,aAAA,GAAgB,GAAI,CAAA,MAAA,GAAS,CAAG,EAAA,GAAA,CAAI,MAAM,CAAI,CAAA,EAAA,GAAA,CAAI,IAAI,CAAA,CAAA,GAAK,GAAI,CAAA,IAAA,CAAA;AACrE,EAAM,MAAA,SAAA,GAAY,MAAM,aAAa,CAAA,CAAA;AACrC,EAAA,IAAI,SAAW,EAAA;AACb,IAAA,KAAA,MAAW,EAAE,KAAA,EAAO,UAAW,EAAA,IAAK,SAAW,EAAA;AAC7C,MAAA,OAAA,CAAQ,cAAc,SAAU,CAAA,IAAA,EAAM,MAAM,IAAI,CAAC,IAAI,KAAM,CAAA,SAAA,CAAA;AAE3D,MAAU,SAAA,CAAA,IAAA;AAAA,QACR,CAAG,EAAA,KAAA,CAAM,GAAG,CAAA,uBAAA,EAA0B,MAAM,SAAS,CAAA,GAAA,CAAA;AAAA,QACrD;AAAA,UACE,CAAA,UAAA,EAAa,WAAW,cACrB,CAAA,GAAA,CAAI,WAAW,CACf,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,UACb,CAAA,aAAA,EAAgB,WAAW,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAE,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,SAChE;AAAA,QACA,KAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,IAAI,WAAa,EAAA;AACnB,IAAA,KAAA,MAAW,EAAE,UAAA,EAAgB,IAAA,GAAA,CAAI,WAAa,EAAA;AAC5C,MAAA,IAAI,CAAC,UAAY,EAAA,SAAA;AAEjB,MAAM,MAAA,KAAA,GAAQ,UAAW,CAAA,UAAA,CAAW,SAAmB,CAAA,CAAA;AACvD,MAAA,OAAA,CAAQ,cAAc,SAAU,CAAA,IAAA,EAAM,MAAM,IAAI,CAAC,IAAI,KAAM,CAAA,SAAA,CAAA;AAE3D,MAAU,SAAA,CAAA,IAAA;AAAA,QACR,CAAG,EAAA,KAAA,CAAM,GAAG,CAAA,qBAAA,EAAwB,MAAM,SAAS,CAAA,GAAA,CAAA;AAAA,QACnD;AAAA,UACE,CAAA,UAAA,EAAa,WAAW,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAE,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,UAC3D,CAAA,aAAA,EAAgB,WAAW,cACxB,CAAA,GAAA,CAAI,WAAW,CACf,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,SACf;AAAA,QACA,KAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,UAAU,MAAQ,EAAA;AACpB,IAAA,KAAA,CAAM,IAAK,CAAA,EAAA,EAAI,eAAiB,EAAA,SAAA,EAAW,IAAI,CAAA,CAAA;AAAA,GACjD;AAEA,EAAM,MAAA,WAAA,GAAc,cAAc,OAAO,CAAA,CAAA;AAEzC,EAAM,MAAA,EAAE,IAAM,EAAA,SAAA,EAAc,GAAA,SAAA,CAAA;AAC5B,EAAA,MAAM,IAAe,GAAA;AAAA,IACnB,CAAA,YAAA,EAAe,IAAI,CAAA,cAAA,EAAiB,SAAS,CAAA;AAAA,YACnC,EAAA,IAAI,oBAAoB,SAAS,CAAA;AAAA,YACjC,EAAA,IAAI,sBAAsB,SAAS,CAAA;AAAA;AAAA,aAElC,EAAA,SAAS,YAAY,mBAAmB,CAAA,EAAA,CAAA;AAAA,IACnD,KAAA;AAAA,IACA,KAAA;AAAA,GACF,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,GAAG,SAAA;AAAA,IACH,SAAS,WAAc,GAAA,MAAA,GAAS,YAAa,CAAA,IAAA,EAAM,IAAI,IAAI,CAAA;AAAA,GAC7D,CAAA;AACF,CAAA,CAAA;AAEA,SAAS,cAAc,OAAyC,EAAA;AAC9D,EAAA,OAAO,OAAO,OAAQ,CAAA,OAAO,CAC1B,CAAA,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAM,YAAY,IAAI,CAAA,SAAA,EAAY,IAAI,CAAI,EAAA,CAAA,CAAA,CAC1D,KAAK,IAAI,CAAA,CAAA;AACd;;AC5LA,MAAM,EAAE,gBAAA,EAAkB,YAAc,EAAA,UAAA,EAAe,GAAA,UAAA,CAAA;AAIhD,MAAM,yBAAyB,OACpC,MAAA,EACA,MACA,EAAA,UAAA,EACA,SACA,aACgC,KAAA;AAChC,EAAA,MAAM,OAAU,GAAA,MAAM,EAAG,CAAA,QAAA,CAAS,QAAQ,OAAO,CAAA,CAAA;AACjD,EAAM,MAAA,UAAA,GAAa,gBAAgB,OAAO,CAAA,CAAA;AAC1C,EAAM,MAAA,UAAA,GAAa,uBAAuB,UAAU,CAAA,CAAA;AACpD,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAM,MAAA,IAAI,MAAM,CAAiD,+CAAA,CAAA,CAAA,CAAA;AAAA,GACnE;AACA,EAAA,MAAM,EAAE,MAAQ,EAAA,UAAA,EAAe,GAAA,gBAAA,CAAiB,YAAY,UAAU,CAAA,CAAA;AAEtE,EAAA,MAAM,UAAoB,EAAC,CAAA;AAE3B,EAAI,IAAA,cAAA,CAAA;AACJ,EAAI,IAAA,UAAA,CAAW,MAAU,IAAA,OAAA,CAAQ,MAAQ,EAAA;AACvC,IAAI,IAAA,IAAA,GAAO,QAAQ,KAAM,CAAA,MAAA,CAAO,KAAK,MAAO,CAAA,GAAG,EAAE,IAAK,EAAA,CAAA;AAEtD,IAAA,IAAI,KAAK,CAAC,CAAA,KAAM,GAAK,EAAA,IAAA,GAAO,OAAO,IAAI,CAAA,CAAA,CAAA,CAAA;AAEvC,IAAA,IAAA,GAAO,UAAU,IAAK,CAAA,KAAA,CAAM,CAAG,EAAA,CAAA,CAAE,EAAE,IAAK,EAAA,CAAA;AAExC,IAAA,IAAI,CAAC,IAAA,CAAK,QAAS,CAAA,GAAG,GAAW,IAAA,IAAA,GAAA,CAAA;AAEjC,IAAA,IAAI,WAAW,MAAQ,EAAA;AACrB,MAAQ,IAAA,IAAA,CAAA;AAAA,eAAA,EAAoB,UACzB,CAAA,GAAA;AAAA,QAAI,CAAC,GACJ,KAAA,GAAA,CAAI,OACA,GAAA,CAAA,EAAA,EAAK,eAAe,GAAI,CAAA,IAAA,EAAM,KAAK,CAAC,MAAM,GAAI,CAAA,OAAO,CACrD,GAAA,CAAA,GAAA,WAAA,CAAY,IAAI,IAAI,CAAA;AAAA,OAC1B,CACC,IAAK,CAAA,IAAI,CAAC,CAAA,EAAA,CAAA,CAAA;AAAA,KACf;AAEA,IAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,MAAQ,IAAA,IAAA,CAAA;AAAA;AAAA,IAAuB,EAAA,OAAA,CAC5B,IAAK,CAAA,CAAC,CAAG,EAAA,CAAA,KAAO,CAAE,CAAA,IAAA,GAAO,CAAE,CAAA,IAAA,GAAO,CAAI,GAAA,CAAA,CAAG,CACzC,CAAA,GAAA;AAAA,QACC,CAAC,QACC,CAAG,EAAA,cAAA;AAAA,UACD,GAAA,CAAI,SAAS,CAAG,EAAA,GAAA,CAAI,MAAM,CAAI,CAAA,EAAA,GAAA,CAAI,IAAI,CAAA,CAAA,GAAK,GAAI,CAAA,IAAA;AAAA,UAC/C,KAAA;AAAA,SACD,CAAY,SAAA,EAAA,GAAA,CAAI,QAAS,CAAA,MAAA;AAAA,UACxB,EAAE,CAAG,EAAA,GAAA,EAAK,KAAO,EAAA,GAAA,CAAI,MAAM,aAAc,EAAA;AAAA,UACzC,GAAA,CAAI,QAAS,CAAA,IAAA,CAAK,IAAQ,IAAA,EAAA;AAAA,SAC3B,CAAA,CAAA,CAAA;AAAA,OACL,CACC,IAAK,CAAA,QAAQ,CAAC,CAAA;AAAA,IAAA,CAAA,CAAA;AAAA,KACnB;AAEA,IAAA,cAAA,GAAiB,IAAO,GAAA,KAAA,CAAA;AAAA,GAC1B;AAEA,EAAA,MAAM,aAAgB,GAAA,qBAAA;AAAA,IACpB,OAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,GACF,CAAA;AAEA,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,SAAA;AAAA,MACE,OAAA;AAAA,MACA,OAAA;AAAA,MACA,cAAc,OAAQ,CAAA,GAAA;AAAA,MACtB,cAAc,OAAQ,CAAA,IAAA;AAAA,KACxB,CAAA;AAAA,GACF;AAEA,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAA,cAAA,CAAe,SAAS,OAAS,EAAA,MAAA,CAAO,GAAK,EAAA,MAAA,CAAO,KAAK,cAAc,CAAA,CAAA;AAAA,GACzE;AAEA,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,SAAA;AAAA,MACE,OAAA;AAAA,MACA,OAAA;AAAA,MACA,cAAc,UAAW,CAAA,GAAA;AAAA,MACzB,cAAc,UAAW,CAAA,IAAA;AAAA,KAC3B,CAAA;AAAA,GACF;AAEA,EAAO,OAAA,YAAA,CAAa,SAAS,OAAO,CAAA,CAAA;AACtC,CAAA,CAAA;AAEA,MAAM,eAAA,GAAkB,CAAC,OAA0C,KAAA;AACjE,EAAA,OAAO,iBAAiB,SAAW,EAAA,OAAA,EAAS,YAAa,CAAA,MAAA,EAAQ,IAAI,CAClE,CAAA,UAAA,CAAA;AACL,CAAA,CAAA;AAEA,MAAM,sBAAA,GAAyB,CAC7B,UACuB,KAAA;AACvB,EAAA,KAAA,MAAW,QAAQ,UAAY,EAAA;AAC7B,IAAI,IAAA,IAAA,CAAK,IAAS,KAAA,UAAA,CAAW,iBAAmB,EAAA,SAAA;AAEhD,IAAA,MAAM,GAAM,GAAA,IAAA,CAAA;AACZ,IAAA,MAAM,SAAS,GAAI,CAAA,eAAA,CAAgB,SAAU,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,CAAA,CAAA;AACxD,IAAA,IAAI,WAAW,YAAc,EAAA,SAAA;AAE7B,IAAI,IAAA,CAAC,IAAI,YAAc,EAAA,SAAA;AAEvB,IAAM,MAAA,QAAA,GAAY,GAAI,CAAA,YAAA,CAAa,aAAgC,EAAA,QAAA,CAAA;AAInE,IAAA,KAAA,MAAW,WAAW,QAAU,EAAA;AAC9B,MAAA,IACE,QAAQ,YAAc,EAAA,WAAA,KAAgB,eACtC,OAAQ,CAAA,IAAA,CAAK,gBAAgB,WAC7B,EAAA;AACA,QAAO,OAAA,OAAA,CAAQ,IAAK,CAAA,WAAA,CAAY,QAAS,EAAA,CAAA;AAAA,OAC3C;AAAA,KACF;AAAA,GACF;AAEA,EAAA,OAAA;AACF,CAAA,CAAA;AAEA,MAAM,wBAAwB,CAC5B,OAAA,EACA,UACA,EAAA,MAAA,EACA,QACA,MACG,KAAA;AACH,EAAM,MAAA,MAAA,GAAS,mBAAoB,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AAElD,EAAA,IAAI,OAAU,GAAA,EAAA,CAAA;AACd,EAAA,IAAI,UAAa,GAAA,EAAA,CAAA;AACjB,EAAA,MAAM,eACJ,MAAO,CAAA,UAAA,CAAW,MAAU,IAAA,CAAC,OAAO,UAAW,CAAA,gBAAA,CAAA;AACjD,EAAM,MAAA,iBAAA,GAAoB,OACvB,CAAA,KAAA,CAAM,MAAO,CAAA,UAAA,CAAW,KAAK,MAAO,CAAA,GAAG,CACvC,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAEhB,EAAM,MAAA,SAAA,GAAY,MAAO,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AACtC,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,SAAA,CAAU,QAAQ,CAAK,EAAA,EAAA;AACzC,IAAA,MAAM,EAAE,IAAM,EAAA,SAAA,EAAW,GAAI,EAAA,GAAI,UAAU,CAAC,CAAA,CAAA;AAC5C,IAAM,MAAA,UAAA,GAAa,aAAc,CAAA,MAAA,EAAQ,IAAI,CAAA,CAAA;AAE7C,IAAW,OAAA,IAAA,CAAA;AAAA,SAAc,EAAA,SAAS,YAAY,UAAU,CAAA,EAAA,CAAA,CAAA;AAExD,IAAA,UAAA,IAAc,CACZ,EAAA,CAAA,KAAM,CAAK,IAAA,YAAA,GAAe,MAAM,EAClC,CAAA;AAAA,EAAK,MAAM,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAA,CAAA;AAEjC,IAAA,IAAI,CAAM,KAAA,SAAA,CAAU,MAAS,GAAA,CAAA,IAAK,CAAC,iBAAmB,EAAA;AACpD,MAAc,UAAA,IAAA,CAAA;AAAA,EAAK,MAAM,CAAA,CAAA,CAAA;AAAA,KAC3B;AAAA,GACF;AAEA,EAAI,IAAA,CAAC,QAAQ,MAAQ,EAAA,OAAA;AAErB,EAAA,IAAI,SAAY,GAAA,CAAA,CAAA;AAChB,EAAA,KAAA,MAAW,QAAQ,UAAY,EAAA;AAC7B,IAAI,IAAA,IAAA,CAAK,IAAS,KAAA,UAAA,CAAW,iBAAmB,EAAA;AAC9C,MAAA,SAAA,GAAY,IAAK,CAAA,GAAA,CAAA;AAAA,KACnB;AAAA,GACF;AAEA,EAAO,OAAA;AAAA,IACL,OAAS,EAAA,EAAE,GAAK,EAAA,SAAA,EAAW,MAAM,OAAQ,EAAA;AAAA,IACzC,YAAY,EAAE,GAAA,EAAK,OAAO,UAAW,CAAA,GAAA,EAAK,MAAM,UAAW,EAAA;AAAA,GAC7D,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,mBAAA,GAAsB,CAAC,OAAA,EAAiB,MAA+B,KAAA;AAC3E,EAAM,MAAA,KAAA,GAAQ,QAAQ,KAAM,CAAA,CAAA,EAAG,OAAO,GAAG,CAAA,CAAE,MAAM,IAAI,CAAA,CAAA;AACrD,EAAA,MAAM,IAAO,GAAA,KAAA,CAAM,KAAM,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACnC,EAAA,OAAO,IAAK,CAAA,KAAA,CAAM,MAAM,CAAA,GAAI,CAAC,CAAK,IAAA,EAAA,CAAA;AACpC,CAAA,CAAA;AAEA,MAAM,gBAAA,GAAmB,CACvB,UAAA,EACA,UACgE,KAAA;AAChE,EAAA,KAAA,MAAW,KAAK,UAAY,EAAA;AAC1B,IAAI,IAAA,CAAA,CAAE,IAAS,KAAA,UAAA,CAAW,iBAAmB,EAAA,SAAA;AAE7C,IAAW,KAAA,MAAA,IAAA,IAAS,CAAwB,CAAA,eAAA,CAAgB,YAAc,EAAA;AACxE,MAAA,MAAM,OAAO,IAAK,CAAA,WAAA,CAAA;AAClB,MAAI,IAAA,IAAA,EAAM,IAAS,KAAA,UAAA,CAAW,cAAgB,EAAA,SAAA;AAE9C,MAAA,IAAI,IAAK,CAAA,UAAA,CAAW,OAAQ,EAAA,KAAM,UAAY,EAAA,SAAA;AAE9C,MAAI,IAAA,IAAA,CAAK,SAAU,CAAA,MAAA,KAAW,CAAG,EAAA;AAC/B,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,0DAAA;AAAA,SACF,CAAA;AAAA,OACF;AAEA,MAAM,MAAA,MAAA,GAAS,IAAK,CAAA,SAAA,CAAU,CAAC,CAAA,CAAA;AAC/B,MAAI,IAAA,MAAA,EAAQ,IAAS,KAAA,UAAA,CAAW,uBAAyB,EAAA;AACvD,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,wDAAA;AAAA,SACF,CAAA;AAAA,OACF;AAEA,MAAA,OAAO,EAAE,MAAQ,EAAA,IAAA,CAAK,UAAU,CAAC,CAAA,EAAG,YAAY,MAAO,EAAA,CAAA;AAAA,KACzD;AAAA,GACF;AAEA,EAAM,MAAA,IAAI,MAAM,0CAA0C,CAAA,CAAA;AAC5D,CAAA,CAAA;AAEA,MAAM,YAAY,CAChB,OAAA,EACA,SACA,EACA,EAAA,IAAA,EACA,MAAM,EACH,KAAA;AACH,EAAI,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACxB,IAAQ,OAAA,CAAA,IAAA,CAAK,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG,MAAM,CAAC,GAAA,EAAK,OAAQ,CAAA,MAAM,CAAC,CAAA,CAAA;AAAA,GAC5C,MAAA;AACL,IAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,OAAQ,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACvC,IAAA,IAAA,CAAK,CAAC,CAAI,GAAA,EAAA,CAAA;AACV,IAAA,OAAA,CAAQ,KAAK,IAAM,EAAA,CAAC,GAAK,EAAA,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA;AAAA,GAC1C;AACF,CAAA,CAAA;AAEA,MAAM,iBAAiB,CACrB,OAAA,EACA,OACA,EAAA,IAAA,EACA,IACA,IACG,KAAA;AACH,EAAA,SAAA,CAAU,OAAS,EAAA,OAAA,EAAS,IAAM,EAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAC5C,CAAA,CAAA;AAEA,MAAM,YAAA,GAAe,CAAC,OAAA,EAAiB,OAAsB,KAAA;AAC3D,EAAO,OAAA,OAAA,CAAQ,SACX,OACG,CAAA,GAAA;AAAA,IAAI,CAAC,IAAA,KACJ,OAAO,IAAA,KAAS,QAAW,GAAA,IAAA,GAAO,OAAQ,CAAA,KAAA,CAAM,IAAK,CAAA,CAAC,CAAG,EAAA,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,GAClE,CACC,IAAK,CAAA,EAAE,CACV,GAAA,OAAA,CAAA;AACN,CAAA;;ACpPa,MAAA,IAAA,GAAO,OAClB,QAAA,EACA,MACG,KAAA;AACH,EAAA,IAAI,CAAC,MAAA,CAAO,MAAU,IAAA,CAAC,OAAO,SAAW,EAAA;AACvC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CACE,EAAA,EAAA,MAAA,CAAO,MAAS,GAAA,WAAA,GAAc,QAChC,CAAA,gEAAA,CAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAM,MAAA,aAAA,GAAgB,MAAO,CAAA,SAAA,CAAU,WAAY,EAAA,CAAA;AACnD,EAAM,MAAA,mBAAA,GAAsB,OAAO,SAAU,CAAA,QAAA,CAAA;AAE7C,EAAM,MAAA,CAAC,OAAO,CAAI,GAAA,QAAA,CAAA;AAClB,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAU,IAAA,QAAA,CAAA;AAExC,EAAM,MAAA,GAAA,GAAM,qBAAsB,CAAA,MAAA,EAAQ,aAAa,CAAA,CAAA;AAEvD,EAAA,MAAM,IAAO,GAAA,MAAM,cAAe,CAAA,GAAA,EAAK,SAAS,MAAM,CAAA,CAAA;AAEtD,EAAA,MAAM,EAAE,UAAY,EAAA,KAAA,EAAU,GAAA,qBAAA,CAAsB,MAAM,MAAM,CAAA,CAAA;AAEhE,EAAM,MAAA,qBAAA,GAAwB,EAAE,IAAA,EAAM,IAAc,EAAA,CAAA;AACpD,EAAA,MAAM,oBAIA,EAAC,CAAA;AAEP,EAAA,MAAM,SAA2B,EAAC,CAAA;AAClC,EAAA,MAAM,aAA4B,EAAC,CAAA;AACnC,EAAA,MAAM,UAA8B,EAAC,CAAA;AAErC,EAAI,IAAA,UAAA,CAAA;AACJ,EAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,IAAA,QAAQ,IAAI,IAAM;AAAA,MAChB,KAAK,OAAS,EAAA;AACZ,QAAA,MAAM,KAAQ,GAAA,eAAA;AAAA,UACZ,UAAA;AAAA,UACA,KAAA;AAAA,UACA,GAAA;AAAA,UACA,aAAA;AAAA,UACA,mBAAA;AAAA,UACA,aAAA;AAAA,SACF,CAAA;AACA,QAAO,MAAA,CAAA,KAAA,CAAM,GAAG,CAAI,GAAA,KAAA,CAAA;AACpB,QAAI,IAAA,CAAC,YAAyB,UAAA,GAAA,KAAA,CAAA;AAC9B,QAAA,iBAAA,CAAkB,IAAK,CAAA;AAAA,UACrB,KAAM,CAAA,IAAA;AAAA,UACN,KAAM,CAAA,OAAA;AAAA,UACN,qBAAA;AAAA,SACD,CAAA,CAAA;AACD,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,WAAa,EAAA;AAChB,QAAA,UAAA,CAAW,IAAK,CAAA;AAAA,UACd,IAAA,EAAM,GAAI,CAAA,MAAA,GAAS,CAAG,EAAA,GAAA,CAAI,MAAM,CAAI,CAAA,EAAA,GAAA,CAAI,IAAI,CAAA,CAAA,GAAK,GAAI,CAAA,IAAA;AAAA,UACrD,SAAS,GAAI,CAAA,OAAA;AAAA,SACd,CAAA,CAAA;AACD,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,QAAU,EAAA;AACb,QAAA,OAAA,CAAQ,KAAK,GAAG,CAAA,CAAA;AAChB,QAAA,MAAA;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,CAAC,UAAc,IAAA,CAAC,WAAW,MAAU,IAAA,CAAC,QAAQ,MAAQ,EAAA;AACxD,IAAA,MAAM,QAAQ,KAAM,EAAA,CAAA;AACpB,IAAA,OAAA;AAAA,GACF;AAEA,EAAA,IAAI,SAAS,IAAK,CAAA,OAAA,CAAQ,MAAO,CAAA,QAAA,EAAU,OAAO,MAAM,CAAA,CAAA;AACxD,EAAA,IAAI,CAAC,MAAA,CAAO,QAAS,CAAA,KAAK,GAAa,MAAA,IAAA,KAAA,CAAA;AACvC,EAAA,MAAM,UAAU,MAAM,sBAAA;AAAA,IACpB,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,GACF,CAAA;AACA,EAAA,IAAI,SAA2B,iBAAA,CAAA,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA,CAAA;AAErD,EAAA,IAAI,UAAY,EAAA;AACd,IAAM,MAAA,EAAA,CAAG,KAAM,CAAA,IAAA,CAAK,OAAQ,CAAA,UAAA,CAAW,IAAI,CAAG,EAAA,EAAE,SAAW,EAAA,IAAA,EAAM,CAAA,CAAA;AAAA,GACnE;AAEA,EAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,IACZ,iBAAkB,CAAA,GAAA;AAAA,MAAI,CAAC,CAACS,KAAMC,EAAAA,QAAAA,EAAS,OAAO,CAAA,KAC5C,EAAG,CAAA,SAAA,CAAUD,KAAMC,EAAAA,QAAAA,EAAS,OAAO,CAAA,CAAE,KAAK,MAAM;AAC9C,QAAA,MAAA,CAAO,QAAQ,GAAI,CAAA,CAAA,QAAA,EAAW,SAAUD,CAAAA,KAAI,CAAC,CAAE,CAAA,CAAA,CAAA;AAAA,OAChD,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,OAAU,GAAA,MAAM,eAAgB,CAAA,IAAI,MAAM,CAAA,CAAA;AAChD,EAAM,MAAA,QAAA,CAAS,UAAU,MAAQ,EAAA,CAAC,MAAM,CAAG,EAAA,EAAE,OAAS,EAAA,OAAA,EAAS,CAAA,CAAA;AAG/D,EAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,IACZ,QAAA,CAAS,GAAI,CAAA,OAAOD,QAAY,KAAA;AAC9B,MAAA,MAAM,aAAgBA,GAAAA,QAAAA,CAAAA;AACtB,MAAA,aAAA,CAAc,eAAeA,QAAQ,CAAA,MAAA,CAAA;AACrC,MAAA,MAAM,mBAAoB,CAAA,aAAA,EAAe,OAAS,EAAA,SAAA,EAAW,MAAM,CAAA,CAAA;AACnE,MAAA,MAAMA,SAAQ,KAAM,EAAA,CAAA;AAAA,KACrB,CAAA;AAAA,GACH,CAAA;AACF,CAAA;;AC1HA,cAAe,CAAA,CAAA,GAAI,eAAe,QAAW,GAAA;AAAA,EAC3C,GAAK,EAAA,QAAA;AAAA,EACL,IAAM,EAAA,qCAAA;AAAA,EACN,aAAe,EAAA;AAAA,IACb,cAAgB,EAAA,oCAAA;AAAA,IAChB,gBAAkB,EAAA,yBAAA;AAAA,IAClB,EAAI,EAAA,sBAAA;AAAA,IACJ,mBAAqB,EAAA,iCAAA;AAAA,GACvB;AAAA,EACA,SAAW,EAAA,OAAA;AACb,CAAA,CAAA;AAEA,cAAA,CAAe,KAAK,GAAM,GAAA,IAAA,CAAA;AAC1B,cAAA,CAAe,KAAK,IAClB,GAAA,8DAAA"}