@sixb/sqlite 0.1.13 → 0.1.15

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.
Files changed (34) hide show
  1. package/dist/auth-storage/auth-storage.d.ts +2 -1
  2. package/dist/auth-storage/auth-storage.d.ts.map +1 -1
  3. package/dist/auth-storage/rows.d.ts +1 -1
  4. package/dist/auth-storage/rows.d.ts.map +1 -1
  5. package/dist/index.js +726 -286
  6. package/dist/index.js.map +12 -12
  7. package/dist/latest-run-query.d.ts +2 -0
  8. package/dist/latest-run-query.d.ts.map +1 -1
  9. package/dist/migrations.d.ts.map +1 -1
  10. package/dist/ontology-storage/materialization-state.d.ts.map +1 -1
  11. package/dist/ontology-storage/shared.d.ts +11 -8
  12. package/dist/ontology-storage/shared.d.ts.map +1 -1
  13. package/dist/ontology-storage/source-cleanup.d.ts +7 -1
  14. package/dist/ontology-storage/source-cleanup.d.ts.map +1 -1
  15. package/dist/ontology-storage/source-roots.d.ts +14 -2
  16. package/dist/ontology-storage/source-roots.d.ts.map +1 -1
  17. package/dist/ontology-storage/sources.d.ts +8 -3
  18. package/dist/ontology-storage/sources.d.ts.map +1 -1
  19. package/dist/projection-run-storage.d.ts +3 -1
  20. package/dist/projection-run-storage.d.ts.map +1 -1
  21. package/package.json +3 -3
  22. package/src/auth-storage/auth-storage.ts +44 -79
  23. package/src/auth-storage/rows.ts +1 -1
  24. package/src/latest-run-query.ts +8 -2
  25. package/src/migrations/050-directory-group-memberships.sql +21 -0
  26. package/src/migrations/051-projection-run-supersession.sql +126 -0
  27. package/src/migrations/052-compact-source-storage.sql +181 -0
  28. package/src/migrations.ts +42 -0
  29. package/src/ontology-storage/materialization-state.ts +34 -44
  30. package/src/ontology-storage/shared.ts +20 -11
  31. package/src/ontology-storage/source-cleanup.ts +61 -24
  32. package/src/ontology-storage/source-roots.ts +166 -110
  33. package/src/ontology-storage/sources.ts +169 -118
  34. package/src/projection-run-storage.ts +59 -1
package/dist/index.js.map CHANGED
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "// Keep SQL module declarations visible to downstream workspaces that typecheck this package from\n// source.\n/// <reference path=\"./sql.d.ts\" />\n\nimport { AsyncLocalStorage } from \"node:async_hooks\"\nimport type {\n MigrationCapableStorage,\n Storage,\n StorageMigrator,\n StorageTransactionOptions,\n} from \"@sixb/core\"\nimport { ProviderMaterializationTransactionLifecycle } from \"@sixb/core/internal/ontology-storage-provider\"\nimport {\n createTransactionStorageProxy,\n throwNestedStorageTransaction,\n} from \"@sixb/core/internal/storage\"\nimport {\n createAgentOperationScope,\n createAuthOperationScope,\n createObjectOperationScope,\n createOntologyOperationScope,\n createOperationScopedFacade,\n createStorageOperationScope,\n createWorkflowRunOperationScope,\n} from \"@sixb/core/internal/storage-operation-scope\"\nimport {\n type AiCostStorage,\n type AiLimitStorage,\n type AiUsageStorage,\n type ShareGrantStorage,\n type ShareSessionStorage,\n StorageTransactionError,\n} from \"@sixb/core/storage\"\nimport { SqliteActionRunStorage } from \"./action-run-storage\"\nimport { SqliteAgentStorage } from \"./agents\"\nimport { SqliteAiCostStorage } from \"./ai-cost-storage\"\nimport { SqliteAiLimitStorage } from \"./ai-limit-storage\"\nimport { SqliteAiUsageStorage } from \"./ai-usage-storage\"\nimport { SqliteAuthStorage } from \"./auth-storage\"\nimport { SqliteConnectorConnectionStorage } from \"./connector-connection-storage\"\nimport { SqliteExecutionStorage } from \"./execution-storage\"\nimport { SqliteFileUploadSessionStorage } from \"./file-upload-session-storage\"\nimport {\n createSqliteStorageMigrators,\n installFreshSqliteSchema,\n sqliteStoragePath,\n} from \"./migrations\"\nimport { SqliteObjectStorage } from \"./objects\"\nimport { SqliteOntologyStorage, type SqliteOntologyTransactionContext } from \"./ontology-storage\"\nimport { SqlitePipelineRunStorage } from \"./pipeline-run-storage\"\nimport { SqliteProjectionRunStorage } from \"./projection-run-storage\"\nimport { SqliteRulesStorage } from \"./rules-storage\"\nimport { SqliteShareGrantStorage } from \"./share-grant-storage\"\nimport { SqliteShareSessionStorage } from \"./share-session-storage\"\nimport { SqliteSyncRunStorage } from \"./sync-run-storage\"\nimport { registerSqliteStorageTestingAdapter } from \"./testing\"\nimport { SqliteTimeseriesStorage } from \"./timeseries-storage\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransactionAsync,\n type SqliteStoreConnection,\n} from \"./transactions\"\nimport { SqliteWebhookRunStorage } from \"./webhook-run-storage\"\nimport { SqliteWorkflowInterventionStorage } from \"./workflow-intervention-storage\"\nimport { SqliteWorkflowRunStorage } from \"./workflow-run-storage\"\n\nexport interface SqliteStorageOptions {\n /** Directory path for the SQLite storage database. */\n path?: string\n}\n\n/**\n * SQLite storage provider for Sixb.\n *\n * Bundles object, timeseries, auth, execution, AI accounting, sync run, pipeline run, projection\n * run, workflow run, webhook run, and connector connection storage backed by SQLite.\n *\n * Usage:\n * ```ts\n * const storage = new SqliteStorage({ path: \".sixb\" })\n *\n * export const sixb = createSixb({\n * broker: new InMemoryBroker(),\n * storage,\n * })\n * ```\n */\nexport class SqliteStorage implements MigrationCapableStorage {\n readonly objects: Storage[\"objects\"]\n readonly ontology: SqliteOntologyStorage\n readonly auth: SqliteAuthStorage\n readonly executions: SqliteExecutionStorage\n readonly agents: SqliteAgentStorage\n readonly aiUsage: AiUsageStorage\n readonly aiCosts: AiCostStorage\n readonly aiLimits: AiLimitStorage\n readonly actionRuns: SqliteActionRunStorage\n readonly pipelineRuns: SqlitePipelineRunStorage\n readonly syncRuns: SqliteSyncRunStorage\n readonly projectionRuns: SqliteProjectionRunStorage\n readonly workflowRuns: SqliteWorkflowRunStorage\n readonly workflowInterventions: SqliteWorkflowInterventionStorage\n readonly timeseries: Storage[\"timeseries\"]\n readonly webhookRuns: SqliteWebhookRunStorage\n readonly rules: SqliteRulesStorage\n readonly shareGrants: ShareGrantStorage\n readonly shareSessions: ShareSessionStorage\n readonly connectorConnections: SqliteConnectorConnectionStorage\n readonly fileUploadSessions: SqliteFileUploadSessionStorage\n readonly migrators: readonly StorageMigrator[]\n\n private readonly connection: SqliteStoreConnection\n private readonly readConnection: SqliteStoreConnection\n private readonly transactionScope = new AsyncLocalStorage<{ active: boolean }>()\n private transactionTail: Promise<void> = Promise.resolve()\n\n constructor(options: SqliteStorageOptions = {}) {\n const path = options.path ? sqliteStoragePath(options.path) : undefined\n this.connection = openSqliteStoreConnection({ path })\n if (path) {\n this.connection.db.run(\"PRAGMA journal_mode = WAL\")\n this.readConnection = openSqliteStoreConnection({ path, readonly: true })\n } else {\n this.readConnection = this.connection\n }\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.connection.db)\n }\n\n const stores = createSqliteStores(this.connection, {\n runOntologyOperation: async (run) => run(),\n transactionContext: null,\n })\n const assertRootOperationAvailable = () => this.assertRootOperationAvailable()\n const scope = createStorageOperationScope(\n (run) => this.runRootStorageOperation(run),\n assertRootOperationAvailable\n )\n const ontologyScope = createStorageOperationScope(\n (run) => this.runRootOntologyOperation(run),\n assertRootOperationAvailable\n )\n const readScope = path\n ? createStorageOperationScope(async (run) => {\n this.assertRootOperationAvailable()\n return run()\n }, assertRootOperationAvailable)\n : scope\n const readObjects = path\n ? new SqliteObjectStorage({ connection: this.readConnection })\n : stores.objects\n const readTimeseries = path\n ? new SqliteTimeseriesStorage({ connection: this.readConnection })\n : stores.timeseries\n this.objects = createObjectOperationScope(readObjects, readScope)\n this.ontology = createOntologyOperationScope(stores.ontology, ontologyScope)\n this.auth = createAuthOperationScope(stores.auth, scope)\n this.executions = createOperationScopedFacade(stores.executions, scope)\n this.agents = createAgentOperationScope(stores.agents, scope)\n this.aiUsage = createOperationScopedFacade(stores.aiUsage, scope)\n this.aiCosts = createOperationScopedFacade(stores.aiCosts, scope)\n this.aiLimits = createOperationScopedFacade(stores.aiLimits, scope)\n this.actionRuns = createOperationScopedFacade(stores.actionRuns, scope)\n this.pipelineRuns = createOperationScopedFacade(stores.pipelineRuns, scope)\n this.timeseries = createOperationScopedFacade(readTimeseries, readScope)\n this.syncRuns = createOperationScopedFacade(stores.syncRuns, scope)\n this.projectionRuns = createOperationScopedFacade(stores.projectionRuns, scope)\n this.workflowRuns = createWorkflowRunOperationScope(stores.workflowRuns, scope)\n this.workflowInterventions = createOperationScopedFacade(stores.workflowInterventions, scope)\n this.webhookRuns = createOperationScopedFacade(stores.webhookRuns, scope)\n this.rules = createOperationScopedFacade(stores.rules, scope)\n this.shareGrants = createOperationScopedFacade(stores.shareGrants, scope)\n this.shareSessions = createOperationScopedFacade(stores.shareSessions, scope)\n this.connectorConnections = createOperationScopedFacade(stores.connectorConnections, scope)\n this.fileUploadSessions = createOperationScopedFacade(stores.fileUploadSessions, scope)\n this.migrators = options.path ? createSqliteStorageMigrators(options.path) : []\n registerSqliteStorageTestingAdapter(this, (durationMs) =>\n stores.connectorConnections.advanceTimeForTesting(durationMs)\n )\n }\n\n async ping(): Promise<void> {\n this.assertRootOperationAvailable()\n if (this.readConnection !== this.connection) {\n this.readConnection.db.query(\"SELECT 1\").get()\n return\n }\n await this.runRootStorageOperation(() => {\n this.connection.db.query(\"SELECT 1\").get()\n })\n }\n\n /**\n * The `isolation` option is intentionally ignored. SQLite runs every write transaction through\n * one connection serialized by {@link withTransactionLock} and a `BEGIN IMMEDIATE`, so there is no\n * concurrent writer to isolate against. File-backed object and timeseries reads use a separate WAL\n * snapshot connection; Postgres is where `isolation: \"serializable\"` maps to a real isolation level.\n */\n async transaction<T>(\n run: (tx: Storage) => Promise<T> | T,\n _options: StorageTransactionOptions = {}\n ): Promise<T> {\n if (this.transactionScope.getStore()) {\n throwNestedStorageTransaction()\n }\n\n return this.withTransactionLock(async () => {\n let active = true\n const scope = { active: true }\n const transactionContext: SqliteOntologyTransactionContext = {\n id: {},\n materializations: new ProviderMaterializationTransactionLifecycle(),\n active: true,\n }\n const txStorage = this.createTransactionStorage(transactionContext)\n const tx = createTransactionStorageProxy(txStorage, () => active)\n\n try {\n return await runImmediateTransactionAsync(this.connection.db, () =>\n this.transactionScope.run(scope, async () => {\n try {\n const result = await run(tx)\n transactionContext.materializations.assertCommittable()\n return result\n } finally {\n scope.active = false\n transactionContext.active = false\n txStorage.ontology.deactivateSessions()\n transactionContext.materializations.deactivate()\n }\n })\n )\n } finally {\n active = false\n }\n })\n }\n\n close(): void {\n if (this.readConnection !== this.connection) closeSqliteStoreConnection(this.readConnection)\n closeSqliteStoreConnection(this.connection)\n }\n\n private createTransactionStorage(\n transactionContext: SqliteOntologyTransactionContext\n ): Storage & { readonly ontology: SqliteOntologyStorage } {\n return {\n ...createSqliteStores(\n {\n db: this.connection.db,\n ownsConnection: false,\n installFreshSchema: false,\n },\n {\n runOntologyOperation: async (run) => run(),\n transactionContext,\n }\n ),\n ping: async () => {\n this.connection.db.query(\"SELECT 1\").get()\n },\n transaction: async <T>(): Promise<T> => {\n throwNestedStorageTransaction()\n },\n }\n }\n\n private runRootStorageOperation<T>(run: () => Promise<T> | T): Promise<T> {\n this.assertRootOperationAvailable()\n return this.withTransactionLock(async () => run())\n }\n\n private runRootOntologyOperation<T>(run: () => Promise<T> | T): Promise<T> {\n this.assertRootOperationAvailable()\n return this.withTransactionLock(() => runImmediateTransactionAsync(this.connection.db, run))\n }\n\n private assertRootOperationAvailable(): void {\n if (!this.transactionScope.getStore()?.active) return\n throw new StorageTransactionError(\n \"[SixbSqlite] Root storage cannot be used inside a transaction callback; use the provided tx storage.\"\n )\n }\n\n private async withTransactionLock<T>(run: () => Promise<T>): Promise<T> {\n const previous = this.transactionTail\n let release!: () => void\n this.transactionTail = new Promise<void>((resolve) => {\n release = resolve\n })\n\n await previous\n try {\n return await run()\n } finally {\n release()\n }\n }\n}\n\nfunction createSqliteStores(\n connection: SqliteStoreConnection,\n options: {\n readonly runOntologyOperation: <T>(run: () => Promise<T> | T) => Promise<T>\n readonly transactionContext: SqliteOntologyTransactionContext | null\n }\n): SqliteStoreSet {\n const auth = new SqliteAuthStorage({ connection })\n const shareGrants = new SqliteShareGrantStorage({ connection })\n const shareSessions = new SqliteShareSessionStorage({ connection })\n const executions = new SqliteExecutionStorage(connection.db, auth, shareSessions)\n return {\n objects: new SqliteObjectStorage({ connection }),\n ontology: new SqliteOntologyStorage({\n db: connection.db,\n runRootOperation: options.runOntologyOperation,\n transactionContext: options.transactionContext,\n }),\n auth,\n executions,\n agents: new SqliteAgentStorage({ connection, executions }),\n aiUsage: new SqliteAiUsageStorage({ connection }),\n aiCosts: new SqliteAiCostStorage(connection),\n aiLimits: new SqliteAiLimitStorage({ connection }),\n actionRuns: new SqliteActionRunStorage({ connection, executions }),\n pipelineRuns: new SqlitePipelineRunStorage({ connection, executions }),\n timeseries: new SqliteTimeseriesStorage({ connection }),\n syncRuns: new SqliteSyncRunStorage({ connection, executions }),\n projectionRuns: new SqliteProjectionRunStorage({ connection, executions }),\n workflowRuns: new SqliteWorkflowRunStorage({ connection, executions }),\n workflowInterventions: new SqliteWorkflowInterventionStorage({ connection }),\n webhookRuns: new SqliteWebhookRunStorage({ connection, executions }),\n rules: new SqliteRulesStorage({ connection }),\n shareGrants,\n shareSessions,\n connectorConnections: new SqliteConnectorConnectionStorage(connection),\n fileUploadSessions: new SqliteFileUploadSessionStorage(connection),\n }\n}\n\ninterface SqliteStoreSet {\n readonly objects: SqliteObjectStorage\n readonly ontology: SqliteOntologyStorage\n readonly auth: SqliteAuthStorage\n readonly executions: SqliteExecutionStorage\n readonly agents: SqliteAgentStorage\n readonly aiUsage: SqliteAiUsageStorage\n readonly aiCosts: SqliteAiCostStorage\n readonly aiLimits: SqliteAiLimitStorage\n readonly actionRuns: SqliteActionRunStorage\n readonly pipelineRuns: SqlitePipelineRunStorage\n readonly syncRuns: SqliteSyncRunStorage\n readonly projectionRuns: SqliteProjectionRunStorage\n readonly workflowRuns: SqliteWorkflowRunStorage\n readonly workflowInterventions: SqliteWorkflowInterventionStorage\n readonly timeseries: SqliteTimeseriesStorage\n readonly webhookRuns: SqliteWebhookRunStorage\n readonly rules: SqliteRulesStorage\n readonly shareGrants: SqliteShareGrantStorage\n readonly shareSessions: SqliteShareSessionStorage\n readonly connectorConnections: SqliteConnectorConnectionStorage\n readonly fileUploadSessions: SqliteFileUploadSessionStorage\n}\n\nexport { migrateSqliteStorage } from \"./migrations\"\n",
6
6
  "import type { Database } from \"bun:sqlite\"\nimport type { ActionSubject, JsonValue } from \"@sixb/core\"\nimport {\n parseActionRunFailure,\n serializeActionRunFailure,\n} from \"@sixb/core/internal/action-run-storage\"\nimport { assertActionRunExecution } from \"@sixb/core/internal/action-run-storage-provider\"\nimport {\n actionRunPhaseRecordsEqual,\n canRequeueActionRunAfterEnqueueFailure,\n finishActionRunPhase,\n} from \"@sixb/core/internal/storage\"\nimport type {\n ActionRunEffectsRecord,\n ActionRunFailure,\n ActionRunParams,\n ActionRunPhase,\n ActionRunRecord,\n ActionRunStorage,\n ActionRunWritebackRecord,\n EnterActionRunPhaseInput,\n ExecutionStorage,\n FinishActionRunInput,\n ListActionRunsInput,\n ListActionRunsResult,\n LockActionMaterializationRunInput,\n QueueActionRunInput,\n RecordActionEffectsInput,\n RecordActionWritebackInput,\n StartActionRunInput,\n} from \"@sixb/core/storage\"\nimport { ActionRunError, isTerminalActionRun } from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteActionRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteActionRunStorage implements ActionRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteActionRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n }\n\n async lockForMaterialization(input: LockActionMaterializationRunInput): Promise<ActionRunRecord> {\n const row = this.db\n .query(`SELECT action_id, status FROM action_runs WHERE project_id = ? AND id = ?`)\n .get(input.projectId, input.runId) as {\n readonly action_id: string\n readonly status: string\n } | null\n if (!row) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.runId}' not found for project '${input.projectId}'.`\n )\n }\n if (row.action_id !== input.actionId) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.runId}' does not belong to action '${input.actionId}'.`\n )\n }\n if (row.status !== \"running\") {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.runId}' cannot materialize from status '${row.status}'.`\n )\n }\n const record = await this.getById({ projectId: input.projectId, id: input.runId })\n if (!record) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.runId}' disappeared while locking materialization.`\n )\n }\n return record\n }\n\n async queue(input: QueueActionRunInput): Promise<ActionRunRecord> {\n const queuedAt = input.queuedAt ?? new Date()\n await assertActionRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n actionId: input.actionId,\n })\n\n try {\n this.db\n .query(\n `\n INSERT INTO action_runs (\n project_id,\n id,\n execution_id,\n action_id,\n subject_kind,\n object_type_id,\n primary_id,\n status,\n phase,\n queued_at,\n started_at,\n finished_at,\n params,\n idempotency_key,\n writeback_status,\n writeback_completed_at,\n writeback_result,\n writeback_error,\n effects_status,\n effects_completed_at,\n effects_error,\n error\n ) VALUES (\n ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NULL, NULL, ?, ?,\n NULL, NULL, NULL, NULL,\n NULL, NULL, NULL,\n NULL\n )\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.actionId,\n input.subject.kind,\n input.subject.kind === \"object\" ? input.subject.objectTypeId : null,\n input.subject.kind === \"object\" ? input.subject.primaryId : null,\n \"queued\",\n \"request\",\n queuedAt.toISOString(),\n JSON.stringify(input.params),\n input.idempotencyKey\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n return this.requeueAfterEnqueueFailure(input, queuedAt)\n }\n\n throw error\n }\n\n const record = await this.getById({ projectId: input.projectId, id: input.id })\n if (!record) {\n throw new ActionRunError(\n `[SixbSqlite] Failed to load action run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return record\n }\n\n private async requeueAfterEnqueueFailure(\n input: QueueActionRunInput,\n queuedAt: Date\n ): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow | null\n\n if (\n !existing ||\n !canRequeueActionRunAfterEnqueueFailure(rowToActionRunRecord(existing), input)\n ) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET\n status = ?,\n phase = ?,\n queued_at = ?,\n started_at = NULL,\n finished_at = NULL,\n writeback_status = NULL,\n writeback_completed_at = NULL,\n writeback_result = NULL,\n writeback_error = NULL,\n effects_status = NULL,\n effects_completed_at = NULL,\n effects_error = NULL,\n error = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\"queued\", \"request\", queuedAt.toISOString(), input.projectId, input.id)\n\n const updated = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n\n return rowToActionRunRecord(updated)\n })()\n }\n\n async start(input: StartActionRunInput): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow | null\n\n if (!existing) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"queued\") {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' cannot start from status '${existing.status}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET\n status = ?,\n phase = ?,\n started_at = ?,\n error = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"running\",\n input.phase ?? \"validation\",\n (input.startedAt ?? new Date()).toISOString(),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n\n return rowToActionRunRecord(updated)\n })()\n }\n\n async enterPhase(input: EnterActionRunPhaseInput): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n this.requireRunningRun(input.projectId, input.id, \"transition phase\")\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET phase = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(input.phase, input.projectId, input.id)\n\n const updated = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n\n return rowToActionRunRecord(updated)\n })()\n }\n\n async recordWriteback(input: RecordActionWritebackInput): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n const existing = this.requireRunningRun(input.projectId, input.id, \"record writeback\")\n const nextWriteback = toWritebackRecord(input, new Date(input.completedAt ?? new Date()))\n const currentWriteback = toActionRunWritebackRecord(existing)\n\n if (currentWriteback) {\n if (actionRunPhaseRecordsEqual(currentWriteback, nextWriteback)) {\n return rowToActionRunRecord(existing)\n }\n\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' already has a different writeback record.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET\n phase = ?,\n writeback_status = ?,\n writeback_completed_at = ?,\n writeback_result = ?,\n writeback_error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"writeback\",\n input.status,\n nextWriteback.completedAt.toISOString(),\n input.status === \"succeeded\" ? serializeJsonValue(input.result) : null,\n input.status === \"failed\" ? serializeActionRunFailure(input.error, \"writeback\") : null,\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n\n return rowToActionRunRecord(updated)\n })()\n }\n\n async recordEffects(input: RecordActionEffectsInput): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n const existing = this.requireRunningRun(input.projectId, input.id, \"record effects\")\n const nextEffects = toEffectsRecord(input, new Date(input.completedAt ?? new Date()))\n const currentEffects = toActionRunEffectsRecord(existing)\n\n if (currentEffects) {\n if (actionRunPhaseRecordsEqual(currentEffects, nextEffects)) {\n return rowToActionRunRecord(existing)\n }\n\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' already has a different effects record.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET\n phase = ?,\n effects_status = ?,\n effects_completed_at = ?,\n effects_error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"effects\",\n input.status,\n nextEffects.completedAt.toISOString(),\n input.status === \"failed\" ? serializeActionRunFailure(input.error, \"effects\") : null,\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n\n return rowToActionRunRecord(updated)\n })()\n }\n\n async finish(input: FinishActionRunInput): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow | null\n\n if (!existing) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (isTerminalActionRun({ status: existing.status })) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${input.id}' cannot finish from terminal status '${existing.status}'.`\n )\n }\n\n const phase = finishActionRunPhase(input, existing.phase)\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET\n status = ?,\n phase = ?,\n finished_at = ?,\n error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n phase,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" ? null : serializeActionRunFailure(input.error),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n\n return rowToActionRunRecord(updated)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<ActionRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as DatabaseRow | null\n\n return row ? rowToActionRunRecord(row) : null\n }\n\n async list(input: ListActionRunsInput): Promise<ListActionRunsResult> {\n if ((input.statuses && input.statuses.length === 0) || input.actionIds?.length === 0) {\n return {\n runs: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: (string | number)[] = [input.projectId]\n\n if (input.actionId) {\n whereClauses.push(\"action_id = ?\")\n args.push(input.actionId)\n }\n\n if (input.actionIds) {\n whereClauses.push(`action_id IN (${input.actionIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.actionIds)\n }\n\n if (input.objectTypeIds) {\n if (input.objectTypeIds.length === 0) {\n whereClauses.push(\"subject_kind <> ?\")\n args.push(\"object\")\n } else {\n whereClauses.push(\n `(subject_kind <> ? OR object_type_id IN (${input.objectTypeIds\n .map(() => \"?\")\n .join(\", \")}))`\n )\n args.push(\"object\", ...input.objectTypeIds)\n }\n }\n\n if (input.objectTypeId) {\n whereClauses.push(\"subject_kind = ?\")\n args.push(\"object\")\n whereClauses.push(\"object_type_id = ?\")\n args.push(input.objectTypeId)\n }\n\n if (input.primaryId) {\n whereClauses.push(\"subject_kind = ?\")\n args.push(\"object\")\n whereClauses.push(\"primary_id = ?\")\n args.push(input.primaryId)\n }\n\n if (input.subject) {\n whereClauses.push(\"subject_kind = ?\")\n args.push(input.subject.kind)\n if (input.subject.kind === \"object\") {\n whereClauses.push(\"object_type_id = ?\")\n args.push(input.subject.objectTypeId)\n whereClauses.push(\"primary_id = ?\")\n args.push(input.subject.primaryId)\n }\n }\n\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n\n if (input.startedAfter) {\n whereClauses.push(\"COALESCE(started_at, queued_at) >= ?\")\n args.push(input.startedAfter.toISOString())\n }\n\n if (input.startedBefore) {\n whereClauses.push(\"COALESCE(started_at, queued_at) <= ?\")\n args.push(input.startedBefore.toISOString())\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const limit = input.limit\n\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM action_runs ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT * FROM action_runs\n ${where}\n ORDER BY COALESCE(started_at, queued_at) ${order}, id ${order}\n `\n const queryArgs = [...args]\n\n if (limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as DatabaseRow[]\n const runs = rows.map((row) => rowToActionRunRecord(row))\n\n return {\n runs,\n hasMore: offset + runs.length < totalRow.count,\n total: totalRow.count,\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private requireRunningRun(projectId: string, id: string, operation: string): DatabaseRow {\n const existing = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as DatabaseRow | null\n\n if (!existing) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (existing.status !== \"running\") {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${id}' cannot ${operation} from status '${existing.status}'.`\n )\n }\n\n return existing\n }\n}\n\nfunction serializeJsonValue(value: JsonValue): string {\n return JSON.stringify(value)\n}\n\nfunction toActionRunFailure(row: DatabaseRow): ActionRunFailure | undefined {\n return row.error === null ? undefined : parseActionRunFailure(row.error)\n}\n\nfunction parsePhaseFailure<TPhase extends Extract<ActionRunPhase, \"writeback\" | \"effects\">>(\n value: string | null,\n expectedPhase: TPhase\n): ActionRunFailure<TPhase> {\n return parseActionRunFailure(value, expectedPhase)\n}\n\nfunction toActionRunWritebackRecord(row: DatabaseRow): ActionRunWritebackRecord | undefined {\n if (!row.writeback_status) {\n return undefined\n }\n\n const completedAt = row.writeback_completed_at\n ? new Date(row.writeback_completed_at)\n : new Date(row.queued_at)\n\n if (row.writeback_status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n result:\n row.writeback_result === null ? null : (JSON.parse(row.writeback_result) as JsonValue),\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: parsePhaseFailure(row.writeback_error, \"writeback\"),\n }\n}\n\nfunction toActionRunEffectsRecord(row: DatabaseRow): ActionRunEffectsRecord | undefined {\n if (!row.effects_status) {\n return undefined\n }\n\n const completedAt = row.effects_completed_at\n ? new Date(row.effects_completed_at)\n : new Date(row.queued_at)\n\n if (row.effects_status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: parsePhaseFailure(row.effects_error, \"effects\"),\n }\n}\n\nfunction toWritebackRecord(\n input: RecordActionWritebackInput,\n completedAt: Date\n): ActionRunWritebackRecord {\n if (input.status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n result: input.result,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: input.error,\n }\n}\n\nfunction toEffectsRecord(\n input: RecordActionEffectsInput,\n completedAt: Date\n): ActionRunEffectsRecord {\n if (input.status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: input.error,\n }\n}\n\nfunction rowToActionRunRecord(row: DatabaseRow): ActionRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n actionId: row.action_id,\n subject: rowToActionSubject(row),\n status: row.status,\n phase: row.phase ?? undefined,\n queuedAt: new Date(row.queued_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n params: JSON.parse(row.params) as ActionRunParams,\n idempotencyKey: row.idempotency_key,\n writeback: toActionRunWritebackRecord(row),\n effects: toActionRunEffectsRecord(row),\n error: toActionRunFailure(row),\n }\n}\n\nfunction rowToActionSubject(row: DatabaseRow): ActionSubject {\n if (row.subject_kind === \"none\") {\n return { kind: \"none\" }\n }\n\n if (!row.object_type_id || !row.primary_id) {\n throw new ActionRunError(`[SixbSqlite] Action run '${row.id}' has an invalid object subject.`)\n }\n\n return {\n kind: \"object\",\n objectTypeId: row.object_type_id,\n primaryId: row.primary_id,\n }\n}\n\nfunction isUniqueConstraintError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"UNIQUE constraint failed\")\n}\n\ninterface DatabaseRow {\n project_id: string\n id: string\n execution_id: string\n action_id: string\n subject_kind: ActionSubject[\"kind\"]\n object_type_id: string | null\n primary_id: string | null\n status: ActionRunRecord[\"status\"]\n phase: ActionRunPhase | null\n queued_at: string\n started_at: string | null\n finished_at: string | null\n params: string\n idempotency_key: string\n writeback_status: ActionRunWritebackRecord[\"status\"] | null\n writeback_completed_at: string | null\n writeback_result: string | null\n writeback_error: string | null\n effects_status: ActionRunEffectsRecord[\"status\"] | null\n effects_completed_at: string | null\n effects_error: string | null\n error: string | null\n}\n",
7
- "import { Database } from \"bun:sqlite\"\nimport { createHash } from \"node:crypto\"\nimport { existsSync, mkdirSync } from \"node:fs\"\nimport { dirname } from \"node:path\"\nimport type { StorageMigrator } from \"@sixb/core\"\nimport type {\n MigrationHistoryStore,\n MigrationRecord,\n MigrationSet,\n MigrationStep,\n MigrationStepOptions,\n} from \"@sixb/core/storage\"\nimport {\n defineMigrations,\n describeMigrationHistory,\n runMigrationSet,\n step,\n} from \"@sixb/core/storage\"\nimport initialSchemaSql from \"./migrations/001-initial-schema.sql\" with { type: \"text\" }\nimport workflowRunOutputSql from \"./migrations/002-workflow-run-output.sql\" with { type: \"text\" }\nimport mergeSyncRunsSql from \"./migrations/003-merge-sync-runs.sql\" with { type: \"text\" }\nimport executionsSql from \"./migrations/004-executions.sql\" with { type: \"text\" }\nimport workflowExecutionsSql from \"./migrations/005-workflow-executions.sql\" with { type: \"text\" }\nimport narrowOntologySourceRootIndexSql from \"./migrations/006-narrow-ontology-source-root-index.sql\" with {\n type: \"text\",\n}\nimport splitOverridesSql from \"./migrations/007-split-overrides.sql\" with { type: \"text\" }\nimport actionExecutionsSql from \"./migrations/008-action-executions.sql\" with { type: \"text\" }\nimport agentExecutionsSql from \"./migrations/009-agent-executions.sql\" with { type: \"text\" }\nimport aiUsageAccountingFoundationSql from \"./migrations/010-ai-usage-accounting-foundation.sql\" with {\n type: \"text\",\n}\nimport syncFailureRecordSql from \"./migrations/011-sync-failure-record.sql\" with { type: \"text\" }\nimport pipelineFailureRecordSql from \"./migrations/012-pipeline-failure-record.sql\" with {\n type: \"text\",\n}\nimport workflowFailureRecordSql from \"./migrations/013-workflow-failure-record.sql\" with {\n type: \"text\",\n}\nimport agentFailureRecordSql from \"./migrations/014-agent-failure-record.sql\" with { type: \"text\" }\nimport projectionFailureRecordSql from \"./migrations/015-projection-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookRunFailureRecordSql from \"./migrations/016-webhook-run-failure-record.sql\" with {\n type: \"text\",\n}\nimport actionFailureRecordSql from \"./migrations/017-action-failure-record.sql\" with {\n type: \"text\",\n}\nimport ontologyOutboxFailureRecordSql from \"./migrations/018-ontology-outbox-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookDeliveryFailureRecordSql from \"./migrations/019-webhook-delivery-failure-record.sql\" with {\n type: \"text\",\n}\nimport dropRunUsageProjectionsSql from \"./migrations/020-drop-run-usage-projections.sql\" with {\n type: \"text\",\n}\nimport syncPipelineExecutionsSql from \"./migrations/021-sync-pipeline-executions.sql\" with {\n type: \"text\",\n}\nimport projectionExecutionsSql from \"./migrations/022-projection-executions.sql\" with {\n type: \"text\",\n}\nimport webhookExecutionsSql from \"./migrations/023-webhook-executions.sql\" with { type: \"text\" }\nimport ontologyCommitExecutionsSql from \"./migrations/024-ontology-commit-executions.sql\" with {\n type: \"text\",\n}\nimport connectorConnectionsSql from \"./migrations/025-connector-connections.sql\" with {\n type: \"text\",\n}\nimport aiCostAccountingSql from \"./migrations/026-ai-cost-accounting.sql\" with { type: \"text\" }\nimport agentContextCheckpointsSql from \"./migrations/027-agent-context-checkpoints.sql\" with {\n type: \"text\",\n}\nimport objectOverrideEditTimesSql from \"./migrations/028-object-override-edit-times.sql\" with {\n type: \"text\",\n}\nimport modelAccountingSql from \"./migrations/029-model-accounting.sql\" with { type: \"text\" }\nimport aiUsageLimitsSql from \"./migrations/030-ai-usage-limits.sql\" with { type: \"text\" }\nimport subagentRunsSql from \"./migrations/031-subagent-runs.sql\" with { type: \"text\" }\nimport conversationRunSpecSql from \"./migrations/032-conversation-run-spec.sql\" with {\n type: \"text\",\n}\nimport retireAgentDefinitionsSql from \"./migrations/033-retire-agent-definitions.sql\" with {\n type: \"text\",\n}\nimport deviceAuthorizationsSql from \"./migrations/034-device-authorizations.sql\" with {\n type: \"text\",\n}\nimport shareGrantsSql from \"./migrations/035-share-grants.sql\" with { type: \"text\" }\nimport shareSessionsSql from \"./migrations/036-share-sessions.sql\" with { type: \"text\" }\nimport projectionSourceRootsSql from \"./migrations/038-projection-source-roots.sql\" with {\n type: \"text\",\n}\nimport outboxPublicationOrderSql from \"./migrations/040-outbox-publication-order.sql\" with {\n type: \"text\",\n}\nimport agentThreadWorkspacesSql from \"./migrations/041-agent-thread-workspaces.sql\" with {\n type: \"text\",\n}\nimport vectorProfilesSql from \"./migrations/042-vector-profiles.sql\" with { type: \"text\" }\nimport vectorIndexingSql from \"./migrations/043-vector-indexing.sql\" with { type: \"text\" }\nimport vectorBatchingSql from \"./migrations/044-vector-batching.sql\" with { type: \"text\" }\nimport agentThreadSandboxStateSql from \"./migrations/045-agent-thread-sandbox-state.sql\" with {\n type: \"text\",\n}\nimport workflowInterventionPrincipalsSql from \"./migrations/046-workflow-intervention-principals.sql\" with {\n type: \"text\",\n}\nimport ontologyCommitAttributionSql from \"./migrations/047-ontology-commit-attribution.sql\" with {\n type: \"text\",\n}\nimport nativeSessionsSql from \"./migrations/049-native-sessions.sql\" with { type: \"text\" }\n\nconst MIGRATIONS_TABLE_SQL = `\n CREATE TABLE IF NOT EXISTS sixb_migrations (\n adapter_id TEXT NOT NULL,\n version INTEGER NOT NULL,\n id TEXT NOT NULL,\n checksum TEXT,\n status TEXT NOT NULL,\n started_at TEXT NOT NULL,\n finished_at TEXT,\n PRIMARY KEY (adapter_id, version)\n );\n`\n\nexport const SQLITE_STORAGE_ADAPTER_ID = \"SixbSqliteStorage\"\nexport const SQLITE_STORAGE_FILE = \"storage.sqlite\"\n\nexport const sqliteStorageMigrations = defineMigrations({\n adapterId: SQLITE_STORAGE_ADAPTER_ID,\n steps: [\n sqliteSql(\"001-initial-schema\", initialSchemaSql),\n sqliteSql(\"002-workflow-run-output\", workflowRunOutputSql),\n sqliteSql(\"003-merge-sync-runs\", mergeSyncRunsSql),\n sqliteSql(\"004-executions\", executionsSql),\n sqliteSql(\"005-workflow-executions\", workflowExecutionsSql),\n sqliteSql(\"006-narrow-ontology-source-root-index\", narrowOntologySourceRootIndexSql),\n sqliteSql(\"007-split-overrides\", splitOverridesSql),\n sqliteSql(\"008-action-executions\", actionExecutionsSql),\n sqliteSql(\"009-agent-executions\", agentExecutionsSql),\n sqliteSql(\"010-ai-usage-accounting-foundation\", aiUsageAccountingFoundationSql),\n sqliteSql(\"011-sync-failure-record\", syncFailureRecordSql),\n sqliteSql(\"012-pipeline-failure-record\", pipelineFailureRecordSql),\n sqliteSql(\"013-workflow-failure-record\", workflowFailureRecordSql),\n sqliteSql(\"014-agent-failure-record\", agentFailureRecordSql),\n sqliteSql(\"015-projection-failure-record\", projectionFailureRecordSql),\n sqliteSql(\"016-webhook-run-failure-record\", webhookRunFailureRecordSql),\n sqliteSql(\"017-action-failure-record\", actionFailureRecordSql),\n sqliteSql(\"018-ontology-outbox-failure-record\", ontologyOutboxFailureRecordSql),\n sqliteSql(\"019-webhook-delivery-failure-record\", webhookDeliveryFailureRecordSql),\n sqliteSql(\"020-drop-run-usage-projections\", dropRunUsageProjectionsSql),\n sqliteSql(\"021-sync-pipeline-executions\", syncPipelineExecutionsSql),\n sqliteStep(\n \"022-projection-executions\",\n (db) => {\n if (db.query(\"SELECT 1 FROM projection_runs LIMIT 1\").get()) {\n throw new Error(\n \"[SixbSqliteStorage] Projection execution migration cannot preserve legacy runs with unknown authority.\"\n )\n }\n db.run(projectionExecutionsSql)\n },\n { checksum: checksum(projectionExecutionsSql) }\n ),\n sqliteStep(\n \"023-webhook-executions\",\n (db) => {\n const hasRuns = db.query(\"SELECT 1 FROM webhook_runs LIMIT 1\").get()\n const hasDeliveries = db.query(\"SELECT 1 FROM webhook_deliveries LIMIT 1\").get()\n if (hasRuns || hasDeliveries) {\n throw new Error(\n \"[SixbSqliteStorage] Webhook execution migration cannot preserve legacy runs or deliveries with unknown authority.\"\n )\n }\n db.run(webhookExecutionsSql)\n },\n { checksum: checksum(webhookExecutionsSql) }\n ),\n sqliteStep(\n \"024-ontology-commit-executions\",\n (db) => {\n if (db.query(\"SELECT 1 FROM ontology_commits LIMIT 1\").get()) {\n throw new Error(\n \"[SixbSqliteStorage] Ontology commit execution migration cannot preserve commits with unknown authority.\"\n )\n }\n db.run(ontologyCommitExecutionsSql)\n },\n { checksum: checksum(ontologyCommitExecutionsSql) }\n ),\n sqliteSql(\"025-connector-connections\", connectorConnectionsSql),\n sqliteSql(\"026-ai-cost-accounting\", aiCostAccountingSql),\n sqliteSql(\"027-agent-context-checkpoints\", agentContextCheckpointsSql),\n sqliteSql(\"028-object-override-edit-times\", objectOverrideEditTimesSql),\n sqliteSql(\"029-model-accounting\", modelAccountingSql),\n sqliteSql(\"030-ai-usage-limits\", aiUsageLimitsSql),\n sqliteSql(\"031-subagent-runs\", subagentRunsSql),\n sqliteSql(\"032-conversation-run-spec\", conversationRunSpecSql),\n sqliteSql(\"033-retire-agent-definitions\", retireAgentDefinitionsSql),\n sqliteSql(\"034-device-authorizations\", deviceAuthorizationsSql),\n sqliteSql(\"035-share-grants\", shareGrantsSql),\n sqliteSql(\"036-share-sessions\", shareSessionsSql),\n sqliteSql(\"037-execution-requester-groups\", executionRequesterGroupsSql),\n sqliteSql(\"038-projection-source-roots\", projectionSourceRootsSql),\n sqliteSql(\"039-connector-optional-pkce\", connectorOptionalPkceSql),\n sqliteSql(\"040-outbox-publication-order\", outboxPublicationOrderSql),\n sqliteSql(\"041-agent-thread-workspaces\", agentThreadWorkspacesSql),\n sqliteSql(\"042-vector-profiles\", vectorProfilesSql),\n sqliteSql(\"043-vector-indexing\", vectorIndexingSql),\n sqliteSql(\"044-vector-batching\", vectorBatchingSql),\n sqliteSql(\"045-agent-thread-sandbox-state\", agentThreadSandboxStateSql),\n sqliteSql(\"046-workflow-intervention-principals\", workflowInterventionPrincipalsSql),\n sqliteSql(\"047-ontology-commit-attribution\", ontologyCommitAttributionSql),\n sqliteSql(\"048-file-upload-sessions\", fileUploadSessionsSql),\n sqliteSql(\"049-native-sessions\", nativeSessionsSql),\n ],\n})\n\nexport function sqliteStoragePath(basePath: string): string {\n return `${basePath}/${SQLITE_STORAGE_FILE}`\n}\n\nexport function sqliteSql(id: string, sqlText: string): MigrationStep<Database> {\n return sqliteStep(\n id,\n (db) => {\n db.run(sqlText)\n },\n { checksum: checksum(sqlText) }\n )\n}\n\nexport function sqliteStep(\n id: string,\n up: (db: Database) => void | Promise<void>,\n options: MigrationStepOptions = {}\n): MigrationStep<Database> {\n return step<Database>(id, up, options)\n}\n\nexport function installFreshSqliteSchema(db: Database): void {\n for (const migration of sqliteStorageMigrations.steps) {\n const installed = migration.up(db)\n if (installed instanceof Promise) {\n throw new Error(\n `[${sqliteStorageMigrations.adapterId}] Fresh SQLite schema installation must be synchronous`\n )\n }\n }\n}\n\nexport function createSqliteStorageMigrators(basePath: string): readonly StorageMigrator[] {\n return [\n createSqliteMigrator({\n path: sqliteStoragePath(basePath),\n migrations: sqliteStorageMigrations,\n }),\n ]\n}\n\nexport function createSqliteMigrator(params: {\n readonly path: string\n readonly migrations: MigrationSet<Database>\n}): StorageMigrator {\n return {\n adapterId: params.migrations.adapterId,\n latestVersion: params.migrations.latestVersion,\n async status() {\n return describeMigrationHistory({\n migrations: params.migrations,\n rows: await readSqliteHistory(params.path, params.migrations.adapterId),\n })\n },\n async migrate() {\n return withSqliteDatabase(params.path, (db) =>\n runMigrationSet({\n context: db,\n migrations: params.migrations,\n state: sqliteMigrationHistoryStore(db),\n })\n )\n },\n }\n}\n\nexport async function migrateSqliteStorage(basePath: string): Promise<void> {\n mkdirSync(basePath, { recursive: true })\n\n for (const migrator of createSqliteStorageMigrators(basePath)) {\n await migrator.migrate()\n }\n}\n\nfunction sqliteMigrationHistoryStore(db: Database): MigrationHistoryStore {\n return {\n ensure() {\n db.run(MIGRATIONS_TABLE_SQL)\n },\n readHistory(adapterId) {\n return db\n .query(\"SELECT * FROM sixb_migrations WHERE adapter_id = ? ORDER BY version\")\n .all(adapterId)\n .map(rowToMigrationRecord)\n },\n markStarted(adapterId, migration, at) {\n db.query(`\n INSERT INTO sixb_migrations (\n adapter_id, version, id, checksum, status, started_at, finished_at\n ) VALUES (?, ?, ?, ?, 'started', ?, NULL)\n ON CONFLICT(adapter_id, version) DO UPDATE SET\n id = excluded.id,\n checksum = excluded.checksum,\n status = excluded.status,\n started_at = excluded.started_at,\n finished_at = NULL\n `).run(adapterId, migration.version, migration.id, migration.checksum ?? null, at)\n },\n markApplied(adapterId, migration, at) {\n db.query(`\n UPDATE sixb_migrations\n SET status = 'applied', finished_at = ?\n WHERE adapter_id = ? AND version = ?\n `).run(at, adapterId, migration.version)\n },\n async transaction(run) {\n // SQLite cannot rebuild a referenced parent table while foreign-key enforcement is active,\n // even when the replacement satisfies every deferred reference. Migrations therefore run\n // with enforcement paused, validate the complete schema before commit, then restore it.\n db.run(\"PRAGMA foreign_keys = OFF\")\n db.run(\"BEGIN\")\n\n try {\n const result = await run()\n const violations = db.query(\"PRAGMA foreign_key_check\").all()\n if (violations.length > 0) {\n throw new Error(\n `[${SQLITE_STORAGE_ADAPTER_ID}] Migration produced ${violations.length} foreign-key violation(s).`\n )\n }\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n db.run(\"PRAGMA foreign_keys = ON\")\n }\n },\n }\n}\n\nfunction rowToMigrationRecord(row: unknown): MigrationRecord {\n const migration = row as {\n adapter_id: string\n version: number\n id: string\n checksum: string | null\n status: \"started\" | \"applied\"\n started_at: string\n finished_at: string | null\n }\n\n return {\n adapterId: migration.adapter_id,\n version: migration.version,\n id: migration.id,\n checksum: migration.checksum ?? undefined,\n status: migration.status,\n startedAt: migration.started_at,\n finishedAt: migration.finished_at ?? undefined,\n }\n}\n\nfunction checksum(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\")\n}\n\n/**\n * Reads migration history without creating anything. `null` means there is no history\n * to read, which is a state and not a failure.\n *\n * `new Database(path)` creates the file, and `withSqliteDatabase` additionally mkdirs\n * its parent — fine on the way to a migration, wrong for a probe. So: `existsSync`\n * first, then open `readonly` so even a mistake below cannot write. `:memory:` is\n * always empty on a fresh connection, so there is nothing to report.\n */\nasync function readSqliteHistory(\n path: string,\n adapterId: string\n): Promise<readonly MigrationRecord[] | null> {\n if (path === \":memory:\" || !existsSync(path)) {\n return null\n }\n\n const db = new Database(path, { readonly: true })\n try {\n const table = db\n .query(\"SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'sixb_migrations'\")\n .get()\n if (!table) {\n return null\n }\n\n return db\n .query(\"SELECT * FROM sixb_migrations WHERE adapter_id = ? ORDER BY version\")\n .all(adapterId)\n .map(rowToMigrationRecord)\n } finally {\n db.close()\n }\n}\n\nasync function withSqliteDatabase<T>(path: string, run: (db: Database) => Promise<T>): Promise<T> {\n if (path !== \":memory:\") mkdirSync(dirname(path), { recursive: true })\n const db = new Database(path)\n\n try {\n return await run(db)\n } finally {\n db.close()\n }\n}\n\nfunction rollbackQuietly(db: Database): void {\n try {\n db.run(\"ROLLBACK\")\n } catch {\n // Ignore rollback errors so the original migration failure is preserved.\n }\n}\n\nimport executionRequesterGroupsSql from \"./migrations/037-execution-requester-groups.sql\" with {\n type: \"text\",\n}\n\nimport connectorOptionalPkceSql from \"./migrations/039-connector-optional-pkce.sql\" with {\n type: \"text\",\n}\nimport fileUploadSessionsSql from \"./migrations/048-file-upload-sessions.sql\" with { type: \"text\" }\n",
7
+ "import { Database } from \"bun:sqlite\"\nimport { createHash } from \"node:crypto\"\nimport { existsSync, mkdirSync } from \"node:fs\"\nimport { dirname } from \"node:path\"\nimport type { StorageMigrator } from \"@sixb/core\"\nimport type {\n MigrationHistoryStore,\n MigrationRecord,\n MigrationSet,\n MigrationStep,\n MigrationStepOptions,\n} from \"@sixb/core/storage\"\nimport {\n defineMigrations,\n describeMigrationHistory,\n runMigrationSet,\n step,\n} from \"@sixb/core/storage\"\nimport initialSchemaSql from \"./migrations/001-initial-schema.sql\" with { type: \"text\" }\nimport workflowRunOutputSql from \"./migrations/002-workflow-run-output.sql\" with { type: \"text\" }\nimport mergeSyncRunsSql from \"./migrations/003-merge-sync-runs.sql\" with { type: \"text\" }\nimport executionsSql from \"./migrations/004-executions.sql\" with { type: \"text\" }\nimport workflowExecutionsSql from \"./migrations/005-workflow-executions.sql\" with { type: \"text\" }\nimport narrowOntologySourceRootIndexSql from \"./migrations/006-narrow-ontology-source-root-index.sql\" with {\n type: \"text\",\n}\nimport splitOverridesSql from \"./migrations/007-split-overrides.sql\" with { type: \"text\" }\nimport actionExecutionsSql from \"./migrations/008-action-executions.sql\" with { type: \"text\" }\nimport agentExecutionsSql from \"./migrations/009-agent-executions.sql\" with { type: \"text\" }\nimport aiUsageAccountingFoundationSql from \"./migrations/010-ai-usage-accounting-foundation.sql\" with {\n type: \"text\",\n}\nimport syncFailureRecordSql from \"./migrations/011-sync-failure-record.sql\" with { type: \"text\" }\nimport pipelineFailureRecordSql from \"./migrations/012-pipeline-failure-record.sql\" with {\n type: \"text\",\n}\nimport workflowFailureRecordSql from \"./migrations/013-workflow-failure-record.sql\" with {\n type: \"text\",\n}\nimport agentFailureRecordSql from \"./migrations/014-agent-failure-record.sql\" with { type: \"text\" }\nimport projectionFailureRecordSql from \"./migrations/015-projection-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookRunFailureRecordSql from \"./migrations/016-webhook-run-failure-record.sql\" with {\n type: \"text\",\n}\nimport actionFailureRecordSql from \"./migrations/017-action-failure-record.sql\" with {\n type: \"text\",\n}\nimport ontologyOutboxFailureRecordSql from \"./migrations/018-ontology-outbox-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookDeliveryFailureRecordSql from \"./migrations/019-webhook-delivery-failure-record.sql\" with {\n type: \"text\",\n}\nimport dropRunUsageProjectionsSql from \"./migrations/020-drop-run-usage-projections.sql\" with {\n type: \"text\",\n}\nimport syncPipelineExecutionsSql from \"./migrations/021-sync-pipeline-executions.sql\" with {\n type: \"text\",\n}\nimport projectionExecutionsSql from \"./migrations/022-projection-executions.sql\" with {\n type: \"text\",\n}\nimport webhookExecutionsSql from \"./migrations/023-webhook-executions.sql\" with { type: \"text\" }\nimport ontologyCommitExecutionsSql from \"./migrations/024-ontology-commit-executions.sql\" with {\n type: \"text\",\n}\nimport connectorConnectionsSql from \"./migrations/025-connector-connections.sql\" with {\n type: \"text\",\n}\nimport aiCostAccountingSql from \"./migrations/026-ai-cost-accounting.sql\" with { type: \"text\" }\nimport agentContextCheckpointsSql from \"./migrations/027-agent-context-checkpoints.sql\" with {\n type: \"text\",\n}\nimport objectOverrideEditTimesSql from \"./migrations/028-object-override-edit-times.sql\" with {\n type: \"text\",\n}\nimport modelAccountingSql from \"./migrations/029-model-accounting.sql\" with { type: \"text\" }\nimport aiUsageLimitsSql from \"./migrations/030-ai-usage-limits.sql\" with { type: \"text\" }\nimport subagentRunsSql from \"./migrations/031-subagent-runs.sql\" with { type: \"text\" }\nimport conversationRunSpecSql from \"./migrations/032-conversation-run-spec.sql\" with {\n type: \"text\",\n}\nimport retireAgentDefinitionsSql from \"./migrations/033-retire-agent-definitions.sql\" with {\n type: \"text\",\n}\nimport deviceAuthorizationsSql from \"./migrations/034-device-authorizations.sql\" with {\n type: \"text\",\n}\nimport shareGrantsSql from \"./migrations/035-share-grants.sql\" with { type: \"text\" }\nimport shareSessionsSql from \"./migrations/036-share-sessions.sql\" with { type: \"text\" }\nimport projectionSourceRootsSql from \"./migrations/038-projection-source-roots.sql\" with {\n type: \"text\",\n}\nimport outboxPublicationOrderSql from \"./migrations/040-outbox-publication-order.sql\" with {\n type: \"text\",\n}\nimport agentThreadWorkspacesSql from \"./migrations/041-agent-thread-workspaces.sql\" with {\n type: \"text\",\n}\nimport vectorProfilesSql from \"./migrations/042-vector-profiles.sql\" with { type: \"text\" }\nimport vectorIndexingSql from \"./migrations/043-vector-indexing.sql\" with { type: \"text\" }\nimport vectorBatchingSql from \"./migrations/044-vector-batching.sql\" with { type: \"text\" }\nimport agentThreadSandboxStateSql from \"./migrations/045-agent-thread-sandbox-state.sql\" with {\n type: \"text\",\n}\nimport workflowInterventionPrincipalsSql from \"./migrations/046-workflow-intervention-principals.sql\" with {\n type: \"text\",\n}\nimport ontologyCommitAttributionSql from \"./migrations/047-ontology-commit-attribution.sql\" with {\n type: \"text\",\n}\nimport nativeSessionsSql from \"./migrations/049-native-sessions.sql\" with { type: \"text\" }\nimport directoryGroupMembershipsSql from \"./migrations/050-directory-group-memberships.sql\" with {\n type: \"text\",\n}\nimport projectionRunSupersessionSql from \"./migrations/051-projection-run-supersession.sql\" with {\n type: \"text\",\n}\nimport compactSourceStorageSql from \"./migrations/052-compact-source-storage.sql\" with {\n type: \"text\",\n}\n\nconst MIGRATIONS_TABLE_SQL = `\n CREATE TABLE IF NOT EXISTS sixb_migrations (\n adapter_id TEXT NOT NULL,\n version INTEGER NOT NULL,\n id TEXT NOT NULL,\n checksum TEXT,\n status TEXT NOT NULL,\n started_at TEXT NOT NULL,\n finished_at TEXT,\n PRIMARY KEY (adapter_id, version)\n );\n`\n\nexport const SQLITE_STORAGE_ADAPTER_ID = \"SixbSqliteStorage\"\nexport const SQLITE_STORAGE_FILE = \"storage.sqlite\"\n\nexport const sqliteStorageMigrations = defineMigrations({\n adapterId: SQLITE_STORAGE_ADAPTER_ID,\n steps: [\n sqliteSql(\"001-initial-schema\", initialSchemaSql),\n sqliteSql(\"002-workflow-run-output\", workflowRunOutputSql),\n sqliteSql(\"003-merge-sync-runs\", mergeSyncRunsSql),\n sqliteSql(\"004-executions\", executionsSql),\n sqliteSql(\"005-workflow-executions\", workflowExecutionsSql),\n sqliteSql(\"006-narrow-ontology-source-root-index\", narrowOntologySourceRootIndexSql),\n sqliteSql(\"007-split-overrides\", splitOverridesSql),\n sqliteSql(\"008-action-executions\", actionExecutionsSql),\n sqliteSql(\"009-agent-executions\", agentExecutionsSql),\n sqliteSql(\"010-ai-usage-accounting-foundation\", aiUsageAccountingFoundationSql),\n sqliteSql(\"011-sync-failure-record\", syncFailureRecordSql),\n sqliteSql(\"012-pipeline-failure-record\", pipelineFailureRecordSql),\n sqliteSql(\"013-workflow-failure-record\", workflowFailureRecordSql),\n sqliteSql(\"014-agent-failure-record\", agentFailureRecordSql),\n sqliteSql(\"015-projection-failure-record\", projectionFailureRecordSql),\n sqliteSql(\"016-webhook-run-failure-record\", webhookRunFailureRecordSql),\n sqliteSql(\"017-action-failure-record\", actionFailureRecordSql),\n sqliteSql(\"018-ontology-outbox-failure-record\", ontologyOutboxFailureRecordSql),\n sqliteSql(\"019-webhook-delivery-failure-record\", webhookDeliveryFailureRecordSql),\n sqliteSql(\"020-drop-run-usage-projections\", dropRunUsageProjectionsSql),\n sqliteSql(\"021-sync-pipeline-executions\", syncPipelineExecutionsSql),\n sqliteStep(\n \"022-projection-executions\",\n (db) => {\n if (db.query(\"SELECT 1 FROM projection_runs LIMIT 1\").get()) {\n throw new Error(\n \"[SixbSqliteStorage] Projection execution migration cannot preserve legacy runs with unknown authority.\"\n )\n }\n db.run(projectionExecutionsSql)\n },\n { checksum: checksum(projectionExecutionsSql) }\n ),\n sqliteStep(\n \"023-webhook-executions\",\n (db) => {\n const hasRuns = db.query(\"SELECT 1 FROM webhook_runs LIMIT 1\").get()\n const hasDeliveries = db.query(\"SELECT 1 FROM webhook_deliveries LIMIT 1\").get()\n if (hasRuns || hasDeliveries) {\n throw new Error(\n \"[SixbSqliteStorage] Webhook execution migration cannot preserve legacy runs or deliveries with unknown authority.\"\n )\n }\n db.run(webhookExecutionsSql)\n },\n { checksum: checksum(webhookExecutionsSql) }\n ),\n sqliteStep(\n \"024-ontology-commit-executions\",\n (db) => {\n if (db.query(\"SELECT 1 FROM ontology_commits LIMIT 1\").get()) {\n throw new Error(\n \"[SixbSqliteStorage] Ontology commit execution migration cannot preserve commits with unknown authority.\"\n )\n }\n db.run(ontologyCommitExecutionsSql)\n },\n { checksum: checksum(ontologyCommitExecutionsSql) }\n ),\n sqliteSql(\"025-connector-connections\", connectorConnectionsSql),\n sqliteSql(\"026-ai-cost-accounting\", aiCostAccountingSql),\n sqliteSql(\"027-agent-context-checkpoints\", agentContextCheckpointsSql),\n sqliteSql(\"028-object-override-edit-times\", objectOverrideEditTimesSql),\n sqliteSql(\"029-model-accounting\", modelAccountingSql),\n sqliteSql(\"030-ai-usage-limits\", aiUsageLimitsSql),\n sqliteSql(\"031-subagent-runs\", subagentRunsSql),\n sqliteSql(\"032-conversation-run-spec\", conversationRunSpecSql),\n sqliteSql(\"033-retire-agent-definitions\", retireAgentDefinitionsSql),\n sqliteSql(\"034-device-authorizations\", deviceAuthorizationsSql),\n sqliteSql(\"035-share-grants\", shareGrantsSql),\n sqliteSql(\"036-share-sessions\", shareSessionsSql),\n sqliteSql(\"037-execution-requester-groups\", executionRequesterGroupsSql),\n sqliteSql(\"038-projection-source-roots\", projectionSourceRootsSql),\n sqliteSql(\"039-connector-optional-pkce\", connectorOptionalPkceSql),\n sqliteSql(\"040-outbox-publication-order\", outboxPublicationOrderSql),\n sqliteSql(\"041-agent-thread-workspaces\", agentThreadWorkspacesSql),\n sqliteSql(\"042-vector-profiles\", vectorProfilesSql),\n sqliteSql(\"043-vector-indexing\", vectorIndexingSql),\n sqliteSql(\"044-vector-batching\", vectorBatchingSql),\n sqliteSql(\"045-agent-thread-sandbox-state\", agentThreadSandboxStateSql),\n sqliteSql(\"046-workflow-intervention-principals\", workflowInterventionPrincipalsSql),\n sqliteSql(\"047-ontology-commit-attribution\", ontologyCommitAttributionSql),\n sqliteSql(\"048-file-upload-sessions\", fileUploadSessionsSql),\n sqliteSql(\"049-native-sessions\", nativeSessionsSql),\n sqliteSql(\"050-directory-group-memberships\", directoryGroupMembershipsSql),\n sqliteSql(\"051-projection-run-supersession\", projectionRunSupersessionSql),\n sqliteStep(\n \"052-compact-source-storage\",\n (db) => {\n // SQLite has no procedural block to check the copy in SQL: count around it instead.\n const before = sourceStorageCounts(db)\n db.run(compactSourceStorageSql)\n const after = sourceStorageCounts(db)\n if (\n after.versions !== before.versions ||\n after.roots !== before.roots ||\n after.rows !== before.rows\n ) {\n throw new Error(\n \"[SixbSqliteStorage] Source versions, roots or rows were lost while compacting source storage.\"\n )\n }\n },\n { checksum: checksum(compactSourceStorageSql) }\n ),\n ],\n})\n\nexport function sqliteStoragePath(basePath: string): string {\n return `${basePath}/${SQLITE_STORAGE_FILE}`\n}\n\nexport function sqliteSql(id: string, sqlText: string): MigrationStep<Database> {\n return sqliteStep(\n id,\n (db) => {\n db.run(sqlText)\n },\n { checksum: checksum(sqlText) }\n )\n}\n\nexport function sqliteStep(\n id: string,\n up: (db: Database) => void | Promise<void>,\n options: MigrationStepOptions = {}\n): MigrationStep<Database> {\n return step<Database>(id, up, options)\n}\n\nexport function installFreshSqliteSchema(db: Database): void {\n for (const migration of sqliteStorageMigrations.steps) {\n const installed = migration.up(db)\n if (installed instanceof Promise) {\n throw new Error(\n `[${sqliteStorageMigrations.adapterId}] Fresh SQLite schema installation must be synchronous`\n )\n }\n }\n}\n\nexport function createSqliteStorageMigrators(basePath: string): readonly StorageMigrator[] {\n return [\n createSqliteMigrator({\n path: sqliteStoragePath(basePath),\n migrations: sqliteStorageMigrations,\n }),\n ]\n}\n\nexport function createSqliteMigrator(params: {\n readonly path: string\n readonly migrations: MigrationSet<Database>\n}): StorageMigrator {\n return {\n adapterId: params.migrations.adapterId,\n latestVersion: params.migrations.latestVersion,\n async status() {\n return describeMigrationHistory({\n migrations: params.migrations,\n rows: await readSqliteHistory(params.path, params.migrations.adapterId),\n })\n },\n async migrate() {\n return withSqliteDatabase(params.path, (db) =>\n runMigrationSet({\n context: db,\n migrations: params.migrations,\n state: sqliteMigrationHistoryStore(db),\n })\n )\n },\n }\n}\n\nexport async function migrateSqliteStorage(basePath: string): Promise<void> {\n mkdirSync(basePath, { recursive: true })\n\n for (const migrator of createSqliteStorageMigrators(basePath)) {\n await migrator.migrate()\n }\n}\n\nfunction sqliteMigrationHistoryStore(db: Database): MigrationHistoryStore {\n return {\n ensure() {\n db.run(MIGRATIONS_TABLE_SQL)\n },\n readHistory(adapterId) {\n return db\n .query(\"SELECT * FROM sixb_migrations WHERE adapter_id = ? ORDER BY version\")\n .all(adapterId)\n .map(rowToMigrationRecord)\n },\n markStarted(adapterId, migration, at) {\n db.query(`\n INSERT INTO sixb_migrations (\n adapter_id, version, id, checksum, status, started_at, finished_at\n ) VALUES (?, ?, ?, ?, 'started', ?, NULL)\n ON CONFLICT(adapter_id, version) DO UPDATE SET\n id = excluded.id,\n checksum = excluded.checksum,\n status = excluded.status,\n started_at = excluded.started_at,\n finished_at = NULL\n `).run(adapterId, migration.version, migration.id, migration.checksum ?? null, at)\n },\n markApplied(adapterId, migration, at) {\n db.query(`\n UPDATE sixb_migrations\n SET status = 'applied', finished_at = ?\n WHERE adapter_id = ? AND version = ?\n `).run(at, adapterId, migration.version)\n },\n async transaction(run) {\n // SQLite cannot rebuild a referenced parent table while foreign-key enforcement is active,\n // even when the replacement satisfies every deferred reference. Migrations therefore run\n // with enforcement paused, validate the complete schema before commit, then restore it.\n db.run(\"PRAGMA foreign_keys = OFF\")\n db.run(\"BEGIN\")\n\n try {\n const result = await run()\n const violations = db.query(\"PRAGMA foreign_key_check\").all()\n if (violations.length > 0) {\n throw new Error(\n `[${SQLITE_STORAGE_ADAPTER_ID}] Migration produced ${violations.length} foreign-key violation(s).`\n )\n }\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n db.run(\"PRAGMA foreign_keys = ON\")\n }\n },\n }\n}\n\nfunction rowToMigrationRecord(row: unknown): MigrationRecord {\n const migration = row as {\n adapter_id: string\n version: number\n id: string\n checksum: string | null\n status: \"started\" | \"applied\"\n started_at: string\n finished_at: string | null\n }\n\n return {\n adapterId: migration.adapter_id,\n version: migration.version,\n id: migration.id,\n checksum: migration.checksum ?? undefined,\n status: migration.status,\n startedAt: migration.started_at,\n finishedAt: migration.finished_at ?? undefined,\n }\n}\n\nfunction sourceStorageCounts(db: Database): {\n readonly versions: number\n readonly roots: number\n readonly rows: number\n} {\n return db\n .query(`SELECT (SELECT count(*) FROM ontology_sources) AS versions,\n (SELECT count(*) FROM ontology_source_roots) AS roots,\n (SELECT count(*) FROM ontology_source_rows) AS rows`)\n .get() as { readonly versions: number; readonly roots: number; readonly rows: number }\n}\n\nfunction checksum(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\")\n}\n\n/**\n * Reads migration history without creating anything. `null` means there is no history\n * to read, which is a state and not a failure.\n *\n * `new Database(path)` creates the file, and `withSqliteDatabase` additionally mkdirs\n * its parent — fine on the way to a migration, wrong for a probe. So: `existsSync`\n * first, then open `readonly` so even a mistake below cannot write. `:memory:` is\n * always empty on a fresh connection, so there is nothing to report.\n */\nasync function readSqliteHistory(\n path: string,\n adapterId: string\n): Promise<readonly MigrationRecord[] | null> {\n if (path === \":memory:\" || !existsSync(path)) {\n return null\n }\n\n const db = new Database(path, { readonly: true })\n try {\n const table = db\n .query(\"SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'sixb_migrations'\")\n .get()\n if (!table) {\n return null\n }\n\n return db\n .query(\"SELECT * FROM sixb_migrations WHERE adapter_id = ? ORDER BY version\")\n .all(adapterId)\n .map(rowToMigrationRecord)\n } finally {\n db.close()\n }\n}\n\nasync function withSqliteDatabase<T>(path: string, run: (db: Database) => Promise<T>): Promise<T> {\n if (path !== \":memory:\") mkdirSync(dirname(path), { recursive: true })\n const db = new Database(path)\n\n try {\n return await run(db)\n } finally {\n db.close()\n }\n}\n\nfunction rollbackQuietly(db: Database): void {\n try {\n db.run(\"ROLLBACK\")\n } catch {\n // Ignore rollback errors so the original migration failure is preserved.\n }\n}\n\nimport executionRequesterGroupsSql from \"./migrations/037-execution-requester-groups.sql\" with {\n type: \"text\",\n}\n\nimport connectorOptionalPkceSql from \"./migrations/039-connector-optional-pkce.sql\" with {\n type: \"text\",\n}\nimport fileUploadSessionsSql from \"./migrations/048-file-upload-sessions.sql\" with { type: \"text\" }\n",
8
8
  "import type { Database } from \"bun:sqlite\"\nimport { Database as SqliteDatabase } from \"bun:sqlite\"\nimport { mkdirSync } from \"node:fs\"\nimport { dirname } from \"node:path\"\n\nexport interface SqliteStoreConnection {\n readonly db: Database\n readonly ownsConnection: boolean\n readonly installFreshSchema: boolean\n}\n\nexport interface SqliteStoreConnectionOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n readonly readonly?: boolean\n}\n\nexport function openSqliteStoreConnection(\n options: SqliteStoreConnectionOptions = {}\n): SqliteStoreConnection {\n if (options.connection) {\n return {\n db: options.connection.db,\n ownsConnection: false,\n installFreshSchema: false,\n }\n }\n\n const path = options.path ?? \":memory:\"\n if (path !== \":memory:\" && !options.readonly) mkdirSync(dirname(path), { recursive: true })\n const db = new SqliteDatabase(path, options.readonly ? { readonly: true } : undefined)\n db.run(\"PRAGMA foreign_keys = ON\")\n db.run(\"PRAGMA busy_timeout = 5000\")\n return {\n db,\n ownsConnection: true,\n installFreshSchema: path === \":memory:\" && !options.readonly,\n }\n}\n\nexport function closeSqliteStoreConnection(connection: SqliteStoreConnection): void {\n if (connection.ownsConnection) {\n connection.db.close()\n }\n}\n\nconst activeImmediateTransactions = new WeakSet<Database>()\nconst activeDeferredReadTransactions = new WeakSet<Database>()\n\nexport function runImmediateTransaction<T>(db: Database, run: () => T): T {\n if (activeImmediateTransactions.has(db)) {\n return run()\n }\n\n db.run(\"BEGIN IMMEDIATE\")\n activeImmediateTransactions.add(db)\n\n try {\n const result = run()\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n activeImmediateTransactions.delete(db)\n }\n}\n\n/** Lets timers and request handlers run between bounded synchronous SQLite chunks. */\nexport function yieldSqliteEventLoop(): Promise<void> {\n return new Promise((resolve) => setImmediate(resolve))\n}\n\nexport async function runImmediateTransactionAsync<T>(\n db: Database,\n run: () => Promise<T> | T\n): Promise<T> {\n if (activeImmediateTransactions.has(db)) {\n return run()\n }\n\n db.run(\"BEGIN IMMEDIATE\")\n activeImmediateTransactions.add(db)\n\n try {\n const result = await run()\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n activeImmediateTransactions.delete(db)\n }\n}\n\n/**\n * Run a multi-statement read against one proven SQLite snapshot.\n *\n * A provider-owned immediate transaction already has a stable snapshot and may be reused. Any\n * other pre-existing transaction is rejected because this provider cannot prove who owns it or\n * which lifecycle will close it.\n */\nexport function runDeferredReadTransaction<T>(db: Database, run: () => T): T {\n if (activeImmediateTransactions.has(db) || activeDeferredReadTransactions.has(db)) {\n return run()\n }\n if (db.inTransaction) {\n throw new Error(\n \"[SixbSqlite] Selected object reads cannot join an unverified SQLite transaction.\"\n )\n }\n\n db.run(\"BEGIN DEFERRED\")\n activeDeferredReadTransactions.add(db)\n try {\n const result = run()\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n activeDeferredReadTransactions.delete(db)\n }\n}\n\nfunction rollbackQuietly(db: Database): void {\n try {\n db.run(\"ROLLBACK\")\n } catch {\n // Preserve the original SQLite storage failure.\n }\n}\n",
9
9
  "import type { Database } from \"bun:sqlite\"\nimport {\n agentContextCheckpointMatchesCreateInput,\n assertAgentContextCheckpointAnchors,\n assertAgentContextCheckpointAuthority,\n assertAgentContextCheckpointReplayState,\n assertCreateAgentContextCheckpointInput,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport {\n type AgentContextCheckpointRecord,\n type AgentContextCheckpointStore,\n AgentStorageError,\n type CreateAgentContextCheckpointInput,\n} from \"@sixb/core/storage\"\nimport {\n type AgentContextCheckpointRow,\n type AgentMessageRow,\n type AgentRunRow,\n type AgentThreadRow,\n rowToContextCheckpointRecord,\n rowToMessageRecord,\n rowToRunRecord,\n rowToThreadRecord,\n} from \"./rows\"\n\nconst SQLITE_CHECKPOINT_RUN_ID_BATCH_SIZE = 500\n\nexport class SqliteAgentContextCheckpointStore implements AgentContextCheckpointStore {\n constructor(private readonly db: Database) {}\n\n async create(input: CreateAgentContextCheckpointInput): Promise<AgentContextCheckpointRecord> {\n assertCreateAgentContextCheckpointInput(input, \"SixbSqlite\")\n\n return this.db.transaction(() => {\n const runRow = this.db\n .query(\"SELECT * FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.createdByRunId) as AgentRunRow | null\n const threadRow = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.threadId) as AgentThreadRow | null\n assertAgentContextCheckpointAuthority({\n create: input,\n run: runRow ? rowToRunRecord(runRow) : null,\n thread: threadRow ? rowToThreadRecord(threadRow) : null,\n prefix: \"SixbSqlite\",\n })\n\n const latest = this.findLatest(input.projectId, input.threadId)\n const headRow = this.db\n .query(\n \"SELECT COALESCE(MAX(seq), 0) AS seq FROM agent_messages WHERE project_id = ? AND thread_id = ?\"\n )\n .get(input.projectId, input.threadId) as { seq: number }\n\n const existingForRun = this.db\n .query(\n \"SELECT * FROM agent_context_checkpoints WHERE project_id = ? AND created_by_run_id = ?\"\n )\n .get(input.projectId, input.createdByRunId) as AgentContextCheckpointRow | null\n if (existingForRun) {\n const record = rowToContextCheckpointRecord(existingForRun)\n if (agentContextCheckpointMatchesCreateInput(record, input)) {\n assertAgentContextCheckpointReplayState({\n create: input,\n existing: record,\n latest,\n headSeq: headRow.seq,\n prefix: \"SixbSqlite\",\n })\n return record\n }\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbSqlite] Agent run '${input.createdByRunId}' already created a different context checkpoint.`\n )\n }\n\n const duplicateId = this.db\n .query(\"SELECT 1 FROM agent_context_checkpoints WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id)\n if (duplicateId) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbSqlite] Agent context checkpoint '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n const firstRetainedRow = this.db\n .query(\n \"SELECT * FROM agent_messages WHERE project_id = ? AND thread_id = ? AND seq > ? ORDER BY seq ASC LIMIT 1\"\n )\n .get(input.projectId, input.threadId, input.summarizedThroughSeq) as AgentMessageRow | null\n assertAgentContextCheckpointAnchors({\n create: input,\n latest,\n headSeq: headRow.seq,\n firstRetained: firstRetainedRow ? rowToMessageRecord(firstRetainedRow) : null,\n prefix: \"SixbSqlite\",\n })\n\n const createdAt = input.createdAt ?? new Date()\n this.db\n .query(\n `\n INSERT INTO agent_context_checkpoints (\n project_id,\n id,\n thread_id,\n created_by_run_id,\n previous_checkpoint_id,\n reason,\n summary,\n summary_format_version,\n summarized_through_seq,\n observed_head_seq,\n estimated_input_tokens_before,\n estimated_input_tokens_after,\n summary_model_id,\n created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.threadId,\n input.createdByRunId,\n input.expectedPreviousCheckpointId,\n input.reason,\n input.summary,\n input.summaryFormatVersion,\n input.summarizedThroughSeq,\n input.observedHeadSeq,\n input.estimatedInputTokensBefore,\n input.estimatedInputTokensAfter,\n input.summaryModelId,\n createdAt.toISOString()\n )\n\n return this.requireById(input.projectId, input.id)\n })()\n }\n\n async getLatest(input: {\n readonly projectId: string\n readonly threadId: string\n }): Promise<AgentContextCheckpointRecord | null> {\n return this.findLatest(input.projectId, input.threadId)\n }\n\n async getByRunIds(input: {\n readonly projectId: string\n readonly runIds: readonly string[]\n }): Promise<readonly AgentContextCheckpointRecord[]> {\n const runIds = [...new Set(input.runIds)]\n if (runIds.length === 0) return []\n\n const rows: AgentContextCheckpointRow[] = []\n for (let offset = 0; offset < runIds.length; offset += SQLITE_CHECKPOINT_RUN_ID_BATCH_SIZE) {\n const batch = runIds.slice(offset, offset + SQLITE_CHECKPOINT_RUN_ID_BATCH_SIZE)\n const placeholders = batch.map(() => \"?\").join(\", \")\n rows.push(\n ...(this.db\n .query(\n `SELECT * FROM agent_context_checkpoints WHERE project_id = ? AND created_by_run_id IN (${placeholders})`\n )\n .all(input.projectId, ...batch) as AgentContextCheckpointRow[])\n )\n }\n const byRunId = new Map(\n rows.map((row) => [row.created_by_run_id, rowToContextCheckpointRecord(row)] as const)\n )\n return runIds.flatMap((runId) => {\n const checkpoint = byRunId.get(runId)\n return checkpoint ? [checkpoint] : []\n })\n }\n\n private findLatest(projectId: string, threadId: string): AgentContextCheckpointRecord | null {\n const row = this.db\n .query(\n `\n SELECT * FROM agent_context_checkpoints\n WHERE project_id = ? AND thread_id = ?\n ORDER BY summarized_through_seq DESC, created_at DESC, id DESC\n LIMIT 1\n `\n )\n .get(projectId, threadId) as AgentContextCheckpointRow | null\n return row ? rowToContextCheckpointRecord(row) : null\n }\n\n private requireById(projectId: string, id: string): AgentContextCheckpointRecord {\n const row = this.db\n .query(\"SELECT * FROM agent_context_checkpoints WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AgentContextCheckpointRow | null\n if (!row) {\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbSqlite] Failed to load agent context checkpoint '${id}' for project '${projectId}'.`\n )\n }\n return rowToContextCheckpointRecord(row)\n }\n}\n",
10
10
  "import type { Database } from \"bun:sqlite\"\nimport type { AgentMessagePart, Principal } from \"@sixb/core\"\nimport { snapshotAgentThreadSandboxParams } from \"@sixb/core/internal/agent-run-storage-provider\"\nimport { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n AGENT_RUN_FAILURE_CODES,\n type AgentContextCheckpointRecord,\n type AgentMessageRecord,\n type AgentRunDiagnostic,\n type AgentRunRecord,\n type AgentThreadRecord,\n type AgentThreadSandboxState,\n type ConversationAgentRunSpec,\n coerceAgentRunFinishReason,\n type SubagentRunResult,\n type SubagentRunSpec,\n} from \"@sixb/core/storage\"\nimport type { SqliteValue } from \"../run-list-query\"\n\n// ── row shapes (snake_case, as stored) ──────────────────────────────────────────────────────────\n\nexport interface AgentThreadRow {\n project_id: string\n id: string\n owner_principal_type: Principal[\"type\"]\n owner_principal_id: string\n title: string | null\n sandbox_params: string | null\n sandbox_state: string | null\n status: AgentThreadRecord[\"status\"]\n active_run_id: string | null\n last_message_at: string | null\n message_count: number\n created_at: string\n updated_at: string\n}\n\nexport interface AgentRunRow {\n project_id: string\n id: string\n execution_id: string\n kind: AgentRunRecord[\"kind\"]\n thread_id: string | null\n trigger_message_id: string | null\n parent_run_id: string | null\n spawn_key: string | null\n spec: string | null\n result: string | null\n status: AgentRunRecord[\"status\"]\n model_id: string | null\n finish_reason: string | null\n error: string | null\n diagnostics: string | null\n attempt: number\n execution_token: string | null\n execution_queue_lease_expires_at: string | null\n created_at: string\n started_at: string | null\n completed_at: string | null\n}\n\nexport interface AgentMessageRow {\n project_id: string\n id: string\n thread_id: string\n run_id: string | null\n role: AgentMessageRecord[\"role\"]\n author_principal_type: Principal[\"type\"] | null\n author_principal_id: string | null\n seq: number\n parts: string\n metadata: string | null\n content_version: number\n created_at: string\n completed_at: string | null\n}\n\nexport interface AgentContextCheckpointRow {\n project_id: string\n id: string\n thread_id: string\n created_by_run_id: string\n previous_checkpoint_id: string | null\n reason: AgentContextCheckpointRecord[\"reason\"]\n summary: string\n summary_format_version: number\n summarized_through_seq: number\n observed_head_seq: number\n estimated_input_tokens_before: number\n estimated_input_tokens_after: number\n summary_model_id: string\n created_at: string\n}\n\n// ── row → record mappers ────────────────────────────────────────────────────────────────────────\n\nexport function rowToThreadRecord(row: AgentThreadRow): AgentThreadRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n ownerPrincipal: { type: row.owner_principal_type, id: row.owner_principal_id },\n title: row.title ?? undefined,\n ...(row.sandbox_state == null\n ? {}\n : {\n sandboxState: JSON.parse(row.sandbox_state) as AgentThreadSandboxState,\n }),\n ...(row.sandbox_params == null\n ? {}\n : { sandboxParams: snapshotAgentThreadSandboxParams(JSON.parse(row.sandbox_params)) }),\n status: row.status,\n activeRunId: row.active_run_id,\n lastMessageAt: row.last_message_at ? new Date(row.last_message_at) : undefined,\n messageCount: row.message_count,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToRunRecord(row: AgentRunRow): AgentRunRecord {\n const base = {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n status: row.status,\n modelId: row.model_id ?? undefined,\n finishReason: coerceAgentRunFinishReason(row.finish_reason),\n error: row.error === null ? undefined : parseSixbFailure(row.error, AGENT_RUN_FAILURE_CODES),\n diagnostics:\n row.diagnostics === null ? undefined : (JSON.parse(row.diagnostics) as AgentRunDiagnostic[]),\n attempt: row.attempt,\n execution:\n row.execution_token && row.execution_queue_lease_expires_at\n ? {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n }\n : undefined,\n createdAt: new Date(row.created_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n completedAt: row.completed_at ? new Date(row.completed_at) : undefined,\n }\n if (row.kind === \"conversation\") {\n if (!row.thread_id || !row.trigger_message_id) {\n throw new Error(\n `[SixbSqlite] Conversational Agent run '${row.id}' has invalid persisted fields.`\n )\n }\n return {\n ...base,\n kind: \"conversation\",\n threadId: row.thread_id,\n triggerMessageId: row.trigger_message_id,\n ...(row.spec === null ? {} : { spec: JSON.parse(row.spec) as ConversationAgentRunSpec }),\n }\n }\n if (!row.parent_run_id || !row.spawn_key || row.spec === null) {\n throw new Error(`[SixbSqlite] Subagent run '${row.id}' has invalid persisted fields.`)\n }\n return {\n ...base,\n kind: \"subagent\",\n parentRunId: row.parent_run_id,\n spawnKey: row.spawn_key,\n spec: JSON.parse(row.spec) as SubagentRunSpec,\n ...(row.result === null ? {} : { result: JSON.parse(row.result) as SubagentRunResult }),\n }\n}\n\nexport function rowToMessageRecord(row: AgentMessageRow): AgentMessageRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n threadId: row.thread_id,\n runId: row.run_id,\n role: row.role,\n authorPrincipal: principalFromColumns(row.author_principal_type, row.author_principal_id),\n seq: row.seq,\n parts: JSON.parse(row.parts) as AgentMessagePart[],\n // A null/absent column and an explicit JSON `null` both mean \"no metadata\" (jsonb cannot tell\n // SQL NULL from a json null on read, so both backends normalise to `undefined` for parity).\n metadata: row.metadata === null ? undefined : (JSON.parse(row.metadata) ?? undefined),\n contentVersion: row.content_version,\n createdAt: new Date(row.created_at),\n completedAt: row.completed_at ? new Date(row.completed_at) : undefined,\n }\n}\n\nexport function rowToContextCheckpointRecord(\n row: AgentContextCheckpointRow\n): AgentContextCheckpointRecord {\n if (row.summary_format_version !== 1) {\n throw new Error(\n `[SixbSqlite] Unsupported agent context checkpoint summary format version '${row.summary_format_version}'.`\n )\n }\n return {\n id: row.id,\n projectId: row.project_id,\n threadId: row.thread_id,\n createdByRunId: row.created_by_run_id,\n previousCheckpointId: row.previous_checkpoint_id ?? undefined,\n reason: row.reason,\n summary: row.summary,\n summaryFormatVersion: 1,\n summarizedThroughSeq: row.summarized_through_seq,\n observedHeadSeq: row.observed_head_seq,\n estimatedInputTokensBefore: row.estimated_input_tokens_before,\n estimatedInputTokensAfter: row.estimated_input_tokens_after,\n summaryModelId: row.summary_model_id,\n createdAt: new Date(row.created_at),\n }\n}\n\nfunction principalFromColumns(\n type: Principal[\"type\"] | null | undefined,\n id: string | null | undefined\n): Principal | undefined {\n return type && id ? { type, id } : undefined\n}\n\n// ── offset pagination (threads / messages order by their own column, not started_at) ─────────────\n\nexport function queryAgentList<TRow>(input: {\n readonly db: Database\n readonly table: \"agent_threads\" | \"agent_messages\"\n readonly whereClauses: readonly string[]\n readonly args: readonly SqliteValue[]\n readonly orderBy: string\n readonly limit?: number\n readonly offset?: number\n}): { readonly rows: readonly TRow[]; readonly total: number; readonly hasMore: boolean } {\n const where = `WHERE ${input.whereClauses.join(\" AND \")}`\n const offset = input.offset ?? 0\n\n const totalRow = input.db\n .query(`SELECT COUNT(*) AS count FROM ${input.table} ${where}`)\n .get(...input.args) as { count: number }\n\n let query = `SELECT * FROM ${input.table} ${where} ORDER BY ${input.orderBy}`\n const queryArgs = [...input.args]\n\n if (input.limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(input.limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = input.db.query(query).all(...queryArgs) as TRow[]\n const total = totalRow.count\n return { rows, total, hasMore: offset + rows.length < total }\n}\n",
@@ -18,9 +18,9 @@
18
18
  "import {\n type AiModelCallGroupRow,\n aiModelCallGroupFragmentFromRow,\n buildAiModelCallGroupsFromFragments,\n normalizeAiModelCallAccountingQuery,\n} from \"@sixb/core/internal/ai-cost-storage-provider\"\nimport type { ListAiModelCallGroupsInput, ListAiModelCallGroupsResult } from \"@sixb/core/storage\"\nimport type { SqliteStoreConnection } from \"./transactions\"\n\n/** Paginate initiating executions, then aggregate their matching calls without loading usage payloads. */\nexport async function listAiModelCallGroups(\n connection: SqliteStoreConnection,\n input: ListAiModelCallGroupsInput\n): Promise<ListAiModelCallGroupsResult> {\n const query = normalizeAiModelCallAccountingQuery(input)\n const parameters = [\n query.projectId,\n query.from.toISOString(),\n query.to.toISOString(),\n query.providerId ?? null,\n query.modelId ?? null,\n query.valuationStatus ?? null,\n ]\n const count = connection.db.query(COUNT_SQL).get(...parameters) as { total: string }\n const rows = connection.db\n .query(PAGE_SQL)\n .all(...parameters, query.limit, query.offset) as AiModelCallGroupRow[]\n const total = Number(count?.total)\n if (!Number.isSafeInteger(total) || total < 0)\n throw new RangeError(\"[Sixb] Invalid model-call group count.\")\n const items = buildAiModelCallGroupsFromFragments(rows.map(aiModelCallGroupFragmentFromRow))\n return { items, total, hasMore: query.offset + items.length < total }\n}\n\nconst FILTERED_SQL = `\nWITH filtered AS (\n SELECT COALESCE(root_agent.execution_id, usage.execution_id) AS root_execution_id,\n usage.execution_id, usage.provider_id, usage.requested_model_id, usage.occurred_at,\n usage.total_tokens,\n execution.executor_kind, execution.executor_id, execution.authority_primitive_id AS primitive_id,\n COALESCE(cost.status, 'unvalued') AS valuation_status,\n cost.currency AS amount_currency, cost.amount_nanos,\n root_agent.id AS root_agent_run_id,\n root_agent.thread_id AS root_thread_id,\n direct_agent.kind AS direct_kind,\n direct_agent.id AS direct_run_id,\n direct_agent.parent_run_id AS parent_run_id,\n workflow_node.node_id AS workflow_agent_step_id,\n workflow_agent.node_run_id AS workflow_node_run_id,\n workflow_node.workflow_id AS workflow_id,\n workflow_node.workflow_run_id AS workflow_run_id\n FROM ai_model_call_usage AS usage\n JOIN executions AS execution ON execution.project_id = usage.project_id AND execution.id = usage.execution_id\n LEFT JOIN agent_runs AS direct_agent\n ON direct_agent.project_id = usage.project_id AND direct_agent.execution_id = usage.execution_id\n LEFT JOIN agent_runs AS root_agent\n ON root_agent.project_id = usage.project_id\n AND root_agent.id = COALESCE(direct_agent.parent_run_id, direct_agent.id)\n LEFT JOIN workflow_agent_node_runs AS workflow_agent\n ON workflow_agent.project_id = usage.project_id AND workflow_agent.execution_id = usage.execution_id\n LEFT JOIN workflow_node_runs AS workflow_node\n ON workflow_node.project_id = workflow_agent.project_id AND workflow_node.id = workflow_agent.node_run_id\n LEFT JOIN ai_model_call_valuations AS cost\n ON cost.project_id = usage.project_id AND cost.usage_record_id = usage.id\n WHERE usage.project_id = ?1\n AND usage.occurred_at >= ?2\n AND usage.occurred_at < ?3\n AND (?4 IS NULL OR usage.provider_id = ?4)\n AND (?5 IS NULL OR usage.requested_model_id = ?5)\n AND (?6 IS NULL OR COALESCE(cost.status, 'unvalued') = ?6)\n), roots AS (\n SELECT root_execution_id, MAX(occurred_at) AS last_call_at\n FROM filtered GROUP BY root_execution_id\n)\n`\nconst COUNT_SQL = `${FILTERED_SQL} SELECT CAST(COUNT(*) AS TEXT) AS total FROM roots`\nconst PAGE_SQL = `${FILTERED_SQL}, page AS (\n SELECT root_execution_id FROM roots\n ORDER BY last_call_at DESC, root_execution_id ASC LIMIT ?7 OFFSET ?8\n)\nSELECT filtered.root_execution_id, execution_id, provider_id, requested_model_id,\n MIN(occurred_at) AS first_call_at, MAX(occurred_at) AS last_call_at,\n CAST(COUNT(*) AS TEXT) AS call_count,\n CAST(COUNT(total_tokens) AS TEXT) AS token_count,\n CAST(SUM(total_tokens) AS TEXT) AS total_tokens,\n valuation_status, amount_currency,\n CAST(SUM(amount_nanos / 1000000000000) AS TEXT) AS amount_high,\n CAST(SUM((amount_nanos / 1000000) % 1000000) AS TEXT) AS amount_middle,\n CAST(SUM(amount_nanos % 1000000) AS TEXT) AS amount_low,\n MAX(root_agent_run_id) AS root_agent_run_id,\n MAX(executor_kind) AS executor_kind, MAX(executor_id) AS executor_id, MAX(primitive_id) AS primitive_id,\n MAX(root_thread_id) AS root_thread_id,\n MAX(direct_kind) AS direct_kind,\n MAX(direct_run_id) AS direct_run_id,\n MAX(parent_run_id) AS parent_run_id,\n MAX(workflow_agent_step_id) AS workflow_agent_step_id,\n MAX(workflow_node_run_id) AS workflow_node_run_id,\n MAX(workflow_id) AS workflow_id,\n MAX(workflow_run_id) AS workflow_run_id\nFROM filtered JOIN page ON page.root_execution_id = filtered.root_execution_id\nGROUP BY filtered.root_execution_id, execution_id, provider_id, requested_model_id,\n valuation_status, amount_currency\n`\n",
19
19
  "import { assertAiUsageExecutionId, normalizeAiModelCallRecord } from \"@sixb/core/internal/storage\"\nimport { isModelReasoning, normalizeModelProviderIds } from \"@sixb/core/models\"\nimport type { ReadonlyJsonObject } from \"@sixb/core/storage\"\nimport {\n type AiModelCallUsageInput,\n type AiModelCallUsageRecord,\n type AiUsageExecutionSummary,\n type AiUsageStorage,\n AiUsageStorageError,\n aggregateAiModelCallUsage,\n type GetLatestAiModelCallForExecutionInput,\n type RecordAiModelCallInput,\n type RecordAiModelCallResult,\n type SummarizeAiUsageExecutionInput,\n type SummarizeAiUsageExecutionsInput,\n} from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteAiUsageStorageOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n}\n\n/** SQLite-backed append-only model-call usage ledger. */\nexport class SqliteAiUsageStorage implements AiUsageStorage {\n private readonly connection: SqliteStoreConnection\n\n constructor(options: SqliteAiUsageStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.connection.db)\n }\n }\n\n async recordModelCall(input: RecordAiModelCallInput): Promise<RecordAiModelCallResult> {\n const record = normalizeAiModelCallRecord(input)\n return runImmediateTransaction(this.connection.db, () => {\n const existing = this.findByIdempotencyKey(record)\n if (existing) return { record: existing, created: false }\n this.assertExecutionExists(record.projectId, record.executionId)\n\n try {\n this.insertRecord(record)\n } catch (error) {\n if (!isUniqueConstraintError(error)) throw error\n\n const concurrent = this.findByIdempotencyKey(record)\n if (concurrent) return { record: concurrent, created: false }\n throw new AiUsageStorageError(\n \"duplicate_id\",\n `[SixbSqlite] AI usage record '${record.id}' already exists for project '${record.projectId}'.`\n )\n }\n\n for (const groupId of record.requesterGroupIds) {\n this.connection.db\n .query(\n `\n INSERT INTO ai_model_call_usage_groups (\n project_id, usage_record_id, group_id, occurred_at\n ) VALUES (?, ?, ?, ?)\n `\n )\n .run(record.projectId, record.id, groupId, record.occurredAt.toISOString())\n }\n\n return { record: this.requireById(record.projectId, record.id), created: true }\n })\n }\n\n async summarizeExecution(\n input: SummarizeAiUsageExecutionInput\n ): Promise<AiUsageExecutionSummary> {\n const [summary] = await this.summarizeExecutions({\n projectId: input.projectId,\n executionIds: [input.executionId],\n })\n return summary!\n }\n\n async getLatestForExecution(\n input: GetLatestAiModelCallForExecutionInput\n ): Promise<AiModelCallUsageRecord | null> {\n assertNonBlankProjectId(input.projectId)\n assertAiUsageExecutionId(input.executionId)\n const row = this.connection.db\n .query(\n `\n SELECT * FROM ai_model_call_usage\n WHERE project_id = ? AND execution_id = ?\n ORDER BY occurred_at DESC, id DESC\n LIMIT 1\n `\n )\n .get(input.projectId, input.executionId) as AiUsageRow | null\n return row ? this.rowToRecord(row) : null\n }\n\n async summarizeExecutions(\n input: SummarizeAiUsageExecutionsInput\n ): Promise<readonly AiUsageExecutionSummary[]> {\n assertNonBlankProjectId(input.projectId)\n for (const executionId of input.executionIds) assertAiUsageExecutionId(executionId)\n if (input.executionIds.length === 0) return []\n\n const rows = this.executionRows(input)\n return aggregateExecutionRows(input.executionIds, rows)\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private insertRecord(record: AiModelCallUsageRecord): void {\n this.connection.db\n .query(\n `\n INSERT INTO ai_model_call_usage (\n project_id,\n id,\n execution_id,\n attempt,\n call_id,\n provider_id,\n provider_ids,\n requested_model_id,\n requested_reasoning,\n response_model_id,\n response_id,\n input_tokens,\n output_tokens,\n total_tokens,\n uncached_input_tokens,\n cache_read_input_tokens,\n cache_write_input_tokens,\n text_output_tokens,\n reasoning_output_tokens,\n reporting_status,\n raw_usage,\n occurred_at,\n recorded_at\n ) VALUES (\n ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?\n )\n `\n )\n .run(\n record.projectId,\n record.id,\n record.executionId,\n record.attempt,\n record.callId,\n record.providerId,\n record.providerIds === undefined ? null : JSON.stringify(record.providerIds),\n record.requestedModelId,\n record.requestedReasoning === undefined ? null : JSON.stringify(record.requestedReasoning),\n record.responseModelId ?? null,\n record.responseId,\n record.usage.inputTokens ?? null,\n record.usage.outputTokens ?? null,\n record.usage.totalTokens ?? null,\n record.usage.uncachedInputTokens ?? null,\n record.usage.cacheReadInputTokens ?? null,\n record.usage.cacheWriteInputTokens ?? null,\n record.usage.textOutputTokens ?? null,\n record.usage.reasoningOutputTokens ?? null,\n record.usage.reportingStatus,\n record.rawUsage === undefined ? null : JSON.stringify(record.rawUsage),\n record.occurredAt.toISOString(),\n record.recordedAt.toISOString()\n )\n }\n\n private findByIdempotencyKey(\n record: Pick<\n AiModelCallUsageRecord,\n \"projectId\" | \"executionId\" | \"attempt\" | \"callId\" | \"responseId\"\n >\n ): AiModelCallUsageRecord | null {\n const row = this.connection.db\n .query(\n `\n SELECT * FROM ai_model_call_usage\n WHERE project_id = ?\n AND execution_id = ?\n AND attempt = ?\n AND call_id = ?\n AND response_id = ?\n `\n )\n .get(\n record.projectId,\n record.executionId,\n record.attempt,\n record.callId,\n record.responseId\n ) as AiUsageRow | null\n return row ? this.rowToRecord(row) : null\n }\n\n private requireById(projectId: string, id: string): AiModelCallUsageRecord {\n const row = this.connection.db\n .query(\"SELECT * FROM ai_model_call_usage WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AiUsageRow | null\n if (!row) throw new Error(`[SixbSqlite] AI usage record '${id}' disappeared after insert.`)\n return this.rowToRecord(row)\n }\n\n private rowToRecord(row: AiUsageRow): AiModelCallUsageRecord {\n const groupRows = this.connection.db\n .query(\n `\n SELECT group_id FROM ai_model_call_usage_groups\n WHERE project_id = ? AND usage_record_id = ?\n ORDER BY group_id\n `\n )\n .all(row.project_id, row.id) as Array<{ group_id: string }>\n\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n attempt: row.attempt,\n callId: row.call_id,\n requesterGroupIds: groupRows.map((group) => group.group_id),\n providerId: row.provider_id,\n ...(row.provider_ids === null\n ? {}\n : { providerIds: normalizeModelProviderIds(JSON.parse(row.provider_ids)) }),\n requestedModelId: row.requested_model_id,\n ...(row.requested_reasoning === null\n ? {}\n : { requestedReasoning: requestedReasoningFromRow(row.requested_reasoning) }),\n ...(row.response_model_id === null ? {} : { responseModelId: row.response_model_id }),\n responseId: row.response_id,\n usage: {\n ...usageFromRow(row),\n ...(row.total_tokens === null ? {} : { totalTokens: row.total_tokens }),\n reportingStatus: row.reporting_status,\n },\n ...(row.raw_usage === null\n ? {}\n : { rawUsage: JSON.parse(row.raw_usage) as ReadonlyJsonObject }),\n occurredAt: new Date(row.occurred_at),\n recordedAt: new Date(row.recorded_at),\n }\n }\n\n private executionRows(input: SummarizeAiUsageExecutionsInput): AiUsageRow[] {\n const requested = JSON.stringify([...new Set(input.executionIds)])\n return this.connection.db\n .query(\n `\n WITH requested AS (\n SELECT DISTINCT value AS execution_id\n FROM json_each(?)\n )\n SELECT usage.* FROM requested\n JOIN ai_model_call_usage AS usage\n ON usage.project_id = ?\n AND usage.execution_id = requested.execution_id\n `\n )\n .all(requested, input.projectId) as AiUsageRow[]\n }\n\n private assertExecutionExists(projectId: string, executionId: string): void {\n const execution = this.connection.db\n .query(\"SELECT 1 FROM executions WHERE project_id = ? AND id = ?\")\n .get(projectId, executionId)\n if (execution) return\n throw new AiUsageStorageError(\n \"missing_execution\",\n `[SixbSqlite] AI usage execution '${executionId}' does not exist in project '${projectId}'.`\n )\n }\n}\n\ninterface AiUsageRow {\n readonly project_id: string\n readonly id: string\n readonly execution_id: string\n readonly attempt: number\n readonly call_id: string\n readonly provider_id: string\n readonly provider_ids: string | null\n readonly requested_model_id: string\n readonly requested_reasoning: string | null\n readonly response_model_id: string | null\n readonly response_id: string\n readonly input_tokens: number | null\n readonly output_tokens: number | null\n readonly total_tokens: number | null\n readonly uncached_input_tokens: number | null\n readonly cache_read_input_tokens: number | null\n readonly cache_write_input_tokens: number | null\n readonly text_output_tokens: number | null\n readonly reasoning_output_tokens: number | null\n readonly reporting_status: AiModelCallUsageRecord[\"usage\"][\"reportingStatus\"]\n readonly raw_usage: string | null\n readonly occurred_at: string\n readonly recorded_at: string\n}\n\nfunction aggregateExecutionRows(\n executionIds: readonly string[],\n rows: readonly AiUsageRow[]\n): readonly AiUsageExecutionSummary[] {\n const usageByExecutionId = new Map<string, AiModelCallUsageInput[]>()\n for (const executionId of executionIds) usageByExecutionId.set(executionId, [])\n for (const row of rows) {\n usageByExecutionId.get(row.execution_id)?.push(usageFromRow(row))\n }\n return executionIds.map((executionId) => {\n const usages = usageByExecutionId.get(executionId) ?? []\n return {\n modelCallCount: usages.length,\n usage: aggregateAiModelCallUsage(usages),\n }\n })\n}\n\nfunction usageFromRow(row: AiUsageRow): AiModelCallUsageInput {\n return {\n ...(row.input_tokens === null ? {} : { inputTokens: row.input_tokens }),\n ...(row.output_tokens === null ? {} : { outputTokens: row.output_tokens }),\n ...(row.uncached_input_tokens === null\n ? {}\n : { uncachedInputTokens: row.uncached_input_tokens }),\n ...(row.cache_read_input_tokens === null\n ? {}\n : { cacheReadInputTokens: row.cache_read_input_tokens }),\n ...(row.cache_write_input_tokens === null\n ? {}\n : { cacheWriteInputTokens: row.cache_write_input_tokens }),\n ...(row.text_output_tokens === null ? {} : { textOutputTokens: row.text_output_tokens }),\n ...(row.reasoning_output_tokens === null\n ? {}\n : { reasoningOutputTokens: row.reasoning_output_tokens }),\n }\n}\n\nexport function requestedReasoningFromRow(\n value: string\n): AiModelCallUsageRecord[\"requestedReasoning\"] {\n const parsed: unknown = JSON.parse(value)\n if (!isModelReasoning(parsed)) {\n throw new Error(\"[SixbSqlite] Stored AI usage requested reasoning is invalid.\")\n }\n return parsed\n}\n\nfunction assertNonBlankProjectId(projectId: string): void {\n if (typeof projectId !== \"string\" || projectId.trim().length === 0) {\n throw new TypeError(\"[Sixb] AI usage projectId must be nonblank.\")\n }\n}\n",
20
20
  "import type { SQLQueryBindings } from \"bun:sqlite\"\nimport {\n type AiLimitAccountingEntry,\n aiLimitAmountKey,\n aiLimitQuantityFromAmount,\n aiLimitReservationBuckets,\n aiLimitReservationRequestKey,\n aiLimitReservationRequestMatches,\n aiLimitSubjectFromParts,\n aiLimitSubjectKey,\n aiLimitSubjectParts,\n aiLimitSubjectsFromAccountingEntry,\n assertAiLimitAccountingMatchesReservation,\n assertNonBlank,\n cloneValidDate,\n type NormalizedAiLimitAmount,\n normalizeAiLimitAmount,\n normalizeAiLimitQuantities,\n normalizeAiModelCallReservationIdentity,\n normalizeCreateAiLimitPolicy,\n normalizeReserveAiModelCall,\n normalizeUpdateAiLimitPolicy,\n resolveAiLimitActual,\n} from \"@sixb/core/internal/ai-limit-storage-provider\"\nimport type {\n AiLimitPeriod,\n AiLimitPolicy,\n AiLimitPolicyStatus,\n AiLimitQuantity,\n AiLimitReservationBucket,\n AiLimitStorage,\n AiLimitSubject,\n AiModelCallReservation,\n CreateAiLimitPolicyInput,\n DeleteAiLimitPolicyInput,\n GetAiLimitPolicyInput,\n ListAiLimitPoliciesInput,\n ListAiLimitPolicyStatusesInput,\n MarkAiModelCallReservationUnknownInput,\n ReconcileAiModelCallInput,\n RecordAiModelCallLimitActualsInput,\n ReserveAiModelCallInput,\n ReserveAiModelCallResult,\n UpdateAiLimitPolicyInput,\n} from \"@sixb/core/storage\"\nimport { AiLimitStorageError, aiLimitCalendarMonth } from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteAiLimitStorageOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n}\n\n/** SQLite-backed editable AI limits and atomic model-call reservations. */\nexport class SqliteAiLimitStorage implements AiLimitStorage {\n private readonly connection: SqliteStoreConnection\n\n constructor(options: SqliteAiLimitStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n if (this.connection.installFreshSchema) installFreshSqliteSchema(this.connection.db)\n }\n\n async createPolicy(input: CreateAiLimitPolicyInput): Promise<AiLimitPolicy> {\n const policy = normalizeCreateAiLimitPolicy(input)\n return runImmediateTransaction(this.connection.db, () => {\n const subject = aiLimitSubjectParts(policy.subject)\n const limit = normalizeAiLimitAmount(policy.limit)\n try {\n this.connection.db\n .query(\n `\n INSERT INTO ai_usage_limits (\n project_id, id, subject_type, subject_id, meter, currency, limit_amount,\n period_kind, enabled, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n policy.projectId,\n policy.id,\n subject.type,\n subject.id,\n limit.meter,\n limit.currency,\n limit.amount.toString(),\n policy.period,\n policy.enabled ? 1 : 0,\n policy.createdAt.toISOString(),\n policy.updatedAt.toISOString()\n )\n } catch (error) {\n if (!isConstraintError(error)) throw error\n throw duplicatePolicy(policy)\n }\n return this.requirePolicy(policy.projectId, policy.id)\n })\n }\n\n async updatePolicy(input: UpdateAiLimitPolicyInput): Promise<AiLimitPolicy> {\n const update = normalizeUpdateAiLimitPolicy(input)\n return runImmediateTransaction(this.connection.db, () => {\n const existing = this.requirePolicy(update.projectId, update.id)\n if (update.limit !== undefined) assertSameDimension(existing.limit, update.limit)\n const limit = normalizeAiLimitAmount(update.limit ?? existing.limit)\n this.connection.db\n .query(\n `\n UPDATE ai_usage_limits\n SET limit_amount = ?, enabled = ?, updated_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n limit.amount.toString(),\n (update.enabled ?? existing.enabled) ? 1 : 0,\n update.updatedAt.toISOString(),\n update.projectId,\n update.id\n )\n return this.requirePolicy(update.projectId, update.id)\n })\n }\n\n async deletePolicy(input: DeleteAiLimitPolicyInput): Promise<boolean> {\n validatePolicyIdentity(input)\n return runImmediateTransaction(this.connection.db, () => {\n const result = this.connection.db\n .query(\"DELETE FROM ai_usage_limits WHERE project_id = ? AND id = ?\")\n .run(input.projectId, input.id)\n return result.changes > 0\n })\n }\n\n async getPolicy(input: GetAiLimitPolicyInput): Promise<AiLimitPolicy | null> {\n validatePolicyIdentity(input)\n const row = this.connection.db\n .query(\"SELECT * FROM ai_usage_limits WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as AiLimitPolicyRow | null\n return row ? policyFromRow(row) : null\n }\n\n async listPolicies(input: ListAiLimitPoliciesInput): Promise<readonly AiLimitPolicy[]> {\n assertNonBlank(input.projectId, \"projectId\")\n return this.policyRows(input.projectId, input.includeDisabled ?? false).map(policyFromRow)\n }\n\n async listPolicyStatuses(\n input: ListAiLimitPolicyStatusesInput\n ): Promise<readonly AiLimitPolicyStatus[]> {\n assertNonBlank(input.projectId, \"projectId\")\n const period = aiLimitCalendarMonth(input.at ?? new Date())\n const existingGroups =\n input.existingGroupIds === undefined ? undefined : new Set(input.existingGroupIds)\n return runImmediateTransaction(this.connection.db, () =>\n this.policyRows(input.projectId, input.includeDisabled ?? false).map((row) =>\n this.statusForPolicy(policyFromRow(row), period, existingGroups)\n )\n )\n }\n\n async reserveModelCall(input: ReserveAiModelCallInput): Promise<ReserveAiModelCallResult> {\n const request = normalizeReserveAiModelCall(input)\n return runImmediateTransaction(this.connection.db, () => {\n const existing = this.findReservation(request.identity)\n if (existing) {\n if (!aiLimitReservationRequestMatches(existing, request)) {\n throw new AiLimitStorageError(\n \"reservation_conflict\",\n `[SixbSqlite] AI model-call reservation '${input.callId}' was replayed with different subjects, estimates, or period.`\n )\n }\n if (existing.state !== \"active\") {\n return { status: \"terminal\", reservation: existing, created: false }\n }\n return { status: \"reserved\", reservation: existing, created: false }\n }\n this.assertExecutionExists(request.identity.projectId, request.identity.executionId)\n\n const subjectKeys = new Set(request.subjects.map(aiLimitSubjectKey))\n const estimates = new Map(\n request.estimates.map((quantity) => {\n const amount = normalizeAiLimitAmount(quantity)\n return [aiLimitAmountKey(amount), amount] as const\n })\n )\n const enabledPolicies = this.policyRows(request.identity.projectId, false).map(policyFromRow)\n const exhaustedPolicies: AiLimitPolicyStatus[] = []\n const unavailablePolicies: AiLimitPolicyStatus[] = []\n const unavailableReasons = new Set<\"missingEstimate\" | \"incompleteAccounting\">()\n for (const policy of enabledPolicies) {\n if (!subjectKeys.has(aiLimitSubjectKey(policy.subject))) continue\n const limit = normalizeAiLimitAmount(policy.limit)\n const estimate = estimates.get(aiLimitAmountKey(limit))\n const status = this.statusForPolicy(policy, request.period)\n if (!estimate || status.accountingStatus === \"unavailable\") {\n unavailablePolicies.push(status)\n if (!estimate) unavailableReasons.add(\"missingEstimate\")\n if (status.accountingStatus === \"unavailable\") {\n unavailableReasons.add(\"incompleteAccounting\")\n }\n continue\n }\n const consumption = status.consumption\n const consumed =\n normalizeAiLimitAmount(consumption.actual).amount +\n normalizeAiLimitAmount(consumption.reserved).amount +\n normalizeAiLimitAmount(consumption.unknown).amount\n if (consumed + estimate.amount > limit.amount) exhaustedPolicies.push(status)\n }\n if (unavailablePolicies.length > 0) {\n unavailablePolicies.sort((left, right) => left.policy.id.localeCompare(right.policy.id))\n return {\n status: \"unavailable\",\n unavailablePolicies,\n reasons: [...unavailableReasons].sort(),\n }\n }\n if (exhaustedPolicies.length > 0) {\n exhaustedPolicies.sort((left, right) => left.policy.id.localeCompare(right.policy.id))\n return {\n status: \"denied\",\n exhaustedPolicies,\n resetAt: new Date(\n Math.min(...exhaustedPolicies.map((status) => status.period.resetAt.getTime()))\n ),\n }\n }\n\n const buckets = aiLimitReservationBuckets(\n enabledPolicies,\n request.subjects,\n request.estimates\n )\n if (buckets.length === 0) return { status: \"notRequired\" }\n for (const bucket of buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n this.changeCounters(\n request.identity.projectId,\n bucket.subject,\n amount,\n request.period,\n { reserved: amount.amount },\n request.reservedAt\n )\n }\n const reservation: AiModelCallReservation = {\n ...request.identity,\n buckets,\n requestKey: aiLimitReservationRequestKey(request),\n period: request.period,\n state: \"active\",\n reservedAt: request.reservedAt,\n updatedAt: new Date(request.reservedAt),\n }\n this.insertReservation(reservation)\n return { status: \"reserved\", reservation: structuredClone(reservation), created: true }\n })\n }\n\n async recordModelCallActuals(input: RecordAiModelCallLimitActualsInput): Promise<void> {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.usageRecordId, \"usageRecordId\")\n const recordedAt = cloneValidDate(input.recordedAt ?? new Date(), \"recordedAt\")\n runImmediateTransaction(this.connection.db, () => {\n const entry = this.requireAccountingEntry(input.projectId, input.usageRecordId)\n const period = aiLimitCalendarMonth(entry.occurredAt)\n for (const subjectValue of aiLimitSubjectsFromAccountingEntry(entry)) {\n const subject = aiLimitSubjectParts(subjectValue)\n const rows = this.connection.db\n .query(\n `\n SELECT meter, currency, actual_amount, accounting_status\n FROM ai_usage_limit_periods\n WHERE project_id = ? AND subject_type = ? AND subject_id = ?\n AND period_start = ?\n `\n )\n .all(\n input.projectId,\n subject.type,\n subject.id,\n period.start.toISOString()\n ) as AiLimitActualStateRow[]\n for (const row of rows) {\n const actual = resolveAiLimitActual([entry], row)\n this.connection.db\n .query(\n `\n UPDATE ai_usage_limit_periods\n SET actual_amount = ?, accounting_status = ?, updated_at = ?\n WHERE project_id = ? AND subject_type = ? AND subject_id = ?\n AND meter = ? AND currency = ? AND period_start = ?\n `\n )\n .run(\n (BigInt(row.actual_amount) + actual.amount).toString(),\n row.accounting_status === \"unavailable\" || actual.accountingStatus === \"unavailable\"\n ? \"unavailable\"\n : \"complete\",\n recordedAt.toISOString(),\n input.projectId,\n subject.type,\n subject.id,\n row.meter,\n row.currency,\n period.start.toISOString()\n )\n }\n }\n })\n }\n\n async reconcileModelCall(input: ReconcileAiModelCallInput): Promise<AiModelCallReservation> {\n const identity = normalizeAiModelCallReservationIdentity(input)\n assertNonBlank(input.usageRecordId, \"usageRecordId\")\n const reconciledAt = cloneValidDate(input.reconciledAt ?? new Date(), \"reconciledAt\")\n return runImmediateTransaction(this.connection.db, () => {\n const reservation = this.findReservation(identity)\n if (!reservation) throw missingReservation(identity)\n if (reservation.state === \"reconciled\") {\n if (reservation.usageRecordId === input.usageRecordId) {\n return reservation\n }\n throw reconciliationConflict(identity.callId)\n }\n const accounting = this.requireAccountingEntry(identity.projectId, input.usageRecordId)\n assertAiLimitAccountingMatchesReservation(reservation, accounting)\n this.reconcileEstimateCounters(reservation, accounting, reconciledAt)\n const reconciled: AiModelCallReservation = {\n ...reservation,\n state: \"reconciled\",\n usageRecordId: input.usageRecordId,\n updatedAt: reconciledAt,\n }\n this.updateReservation(reconciled)\n return structuredClone(reconciled)\n })\n }\n\n async markReservationUnknown(\n input: MarkAiModelCallReservationUnknownInput\n ): Promise<AiModelCallReservation> {\n const identity = normalizeAiModelCallReservationIdentity(input)\n const markedAt = cloneValidDate(input.markedAt ?? new Date(), \"markedAt\")\n return runImmediateTransaction(this.connection.db, () => {\n const reservation = this.findReservation(identity)\n if (!reservation) throw missingReservation(identity)\n if (reservation.state === \"unknown\") return reservation\n if (reservation.state !== \"active\") throw invalidState(reservation, \"mark unknown\")\n this.moveEstimateCounters(reservation, { reserved: -1n, unknown: 1n }, markedAt)\n const unknown = { ...reservation, state: \"unknown\" as const, updatedAt: markedAt }\n this.updateReservation(unknown)\n return structuredClone(unknown)\n })\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private policyRows(projectId: string, includeDisabled: boolean): AiLimitPolicyRow[] {\n return this.connection.db\n .query(\n `\n SELECT * FROM ai_usage_limits\n WHERE project_id = ? AND (? = 1 OR enabled = 1)\n ORDER BY id\n `\n )\n .all(projectId, includeDisabled ? 1 : 0) as AiLimitPolicyRow[]\n }\n\n private requirePolicy(projectId: string, id: string): AiLimitPolicy {\n const row = this.connection.db\n .query(\"SELECT * FROM ai_usage_limits WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AiLimitPolicyRow | null\n if (row) return policyFromRow(row)\n throw new AiLimitStorageError(\n \"missing_policy\",\n `[SixbSqlite] AI limit policy '${id}' does not exist in project '${projectId}'.`\n )\n }\n\n private statusForPolicy(\n policy: AiLimitPolicy,\n period: AiLimitPeriod,\n existingGroups?: ReadonlySet<string>\n ): AiLimitPolicyStatus {\n const subject = aiLimitSubjectParts(policy.subject)\n const limit = normalizeAiLimitAmount(policy.limit)\n let row = this.connection.db\n .query(\n `\n SELECT actual_amount, reserved_amount, unknown_amount, accounting_status\n FROM ai_usage_limit_periods\n WHERE project_id = ? AND subject_type = ? AND subject_id = ?\n AND meter = ? AND currency = ? AND period_start = ?\n `\n )\n .get(\n policy.projectId,\n subject.type,\n subject.id,\n limit.meter,\n limit.currency,\n period.start.toISOString()\n ) as AiLimitPeriodStateRow | null\n // Re-read incomplete accounting inside the transaction; retain in-flight estimates.\n if (!row || row.accounting_status === \"unavailable\") {\n const actual = resolveAiLimitActual(this.accountingEntries(policy, period), limit)\n row = {\n actual_amount: actual.amount.toString(),\n reserved_amount: row?.reserved_amount ?? \"0\",\n unknown_amount: row?.unknown_amount ?? \"0\",\n accounting_status: actual.accountingStatus,\n }\n this.connection.db\n .query(\n `\n INSERT INTO ai_usage_limit_periods (\n project_id, subject_type, subject_id, meter, currency, period_start, period_end,\n actual_amount, reserved_amount, unknown_amount, accounting_status, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, '0', '0', ?, ?)\n ON CONFLICT (project_id, subject_type, subject_id, meter, currency, period_start)\n DO UPDATE SET\n actual_amount = excluded.actual_amount,\n accounting_status = excluded.accounting_status,\n updated_at = excluded.updated_at\n `\n )\n .run(\n policy.projectId,\n subject.type,\n subject.id,\n limit.meter,\n limit.currency,\n period.start.toISOString(),\n period.end.toISOString(),\n row.actual_amount,\n row.accounting_status,\n new Date().toISOString()\n )\n }\n return policyStatus(policy, period, row, existingGroups)\n }\n\n private changeCounters(\n projectId: string,\n subjectValue: AiLimitSubject,\n amount: NormalizedAiLimitAmount,\n period: AiLimitPeriod,\n changes: { readonly reserved?: bigint; readonly unknown?: bigint },\n updatedAt: Date\n ): void {\n const subject = aiLimitSubjectParts(subjectValue)\n const row = this.connection.db\n .query(\n `\n SELECT actual_amount, reserved_amount, unknown_amount, accounting_status\n FROM ai_usage_limit_periods\n WHERE project_id = ? AND subject_type = ? AND subject_id = ?\n AND meter = ? AND currency = ? AND period_start = ?\n `\n )\n .get(\n projectId,\n subject.type,\n subject.id,\n amount.meter,\n amount.currency,\n period.start.toISOString()\n ) as AiLimitPeriodStateRow | null\n const reserved = BigInt(row?.reserved_amount ?? \"0\") + (changes.reserved ?? 0n)\n const unknown = BigInt(row?.unknown_amount ?? \"0\") + (changes.unknown ?? 0n)\n if (reserved < 0n || unknown < 0n) {\n throw new Error(\"[SixbSqlite] AI limit period counter became negative.\")\n }\n this.connection.db\n .query(\n `\n INSERT INTO ai_usage_limit_periods (\n project_id, subject_type, subject_id, meter, currency, period_start, period_end,\n actual_amount, reserved_amount, unknown_amount, accounting_status, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (project_id, subject_type, subject_id, meter, currency, period_start)\n DO UPDATE SET\n period_end = excluded.period_end,\n actual_amount = excluded.actual_amount,\n reserved_amount = excluded.reserved_amount,\n unknown_amount = excluded.unknown_amount,\n accounting_status = excluded.accounting_status,\n updated_at = excluded.updated_at\n `\n )\n .run(\n projectId,\n subject.type,\n subject.id,\n amount.meter,\n amount.currency,\n period.start.toISOString(),\n period.end.toISOString(),\n row?.actual_amount ?? \"0\",\n reserved.toString(),\n unknown.toString(),\n row?.accounting_status ?? \"complete\",\n updatedAt.toISOString()\n )\n }\n\n private moveEstimateCounters(\n reservation: AiModelCallReservation,\n directions: { readonly reserved?: bigint; readonly unknown?: bigint },\n updatedAt: Date\n ): void {\n for (const bucket of reservation.buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n this.changeCounters(\n reservation.projectId,\n bucket.subject,\n amount,\n reservation.period,\n {\n ...(directions.reserved === undefined\n ? {}\n : { reserved: directions.reserved * amount.amount }),\n ...(directions.unknown === undefined\n ? {}\n : { unknown: directions.unknown * amount.amount }),\n },\n updatedAt\n )\n }\n }\n\n private reconcileEstimateCounters(\n reservation: AiModelCallReservation,\n entry: AiLimitAccountingEntry,\n updatedAt: Date\n ): void {\n for (const bucket of reservation.buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n const actual = resolveAiLimitActual([entry], amount)\n if (actual.accountingStatus === \"complete\") {\n this.changeCounters(\n reservation.projectId,\n bucket.subject,\n amount,\n reservation.period,\n reservation.state === \"active\"\n ? { reserved: -amount.amount }\n : { unknown: -amount.amount },\n updatedAt\n )\n } else if (reservation.state === \"active\") {\n this.changeCounters(\n reservation.projectId,\n bucket.subject,\n amount,\n reservation.period,\n { reserved: -amount.amount, unknown: amount.amount },\n updatedAt\n )\n }\n }\n }\n\n private insertReservation(reservation: AiModelCallReservation): void {\n this.connection.db\n .query(\n `\n INSERT INTO ai_model_call_reservations (\n project_id, execution_id, attempt, call_id, buckets, request_key,\n period_start, period_end, state, usage_record_id, reserved_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(...reservationSqlValues(reservation))\n }\n\n private updateReservation(reservation: AiModelCallReservation): void {\n this.connection.db\n .query(\n `\n UPDATE ai_model_call_reservations\n SET state = ?, usage_record_id = ?, updated_at = ?\n WHERE project_id = ? AND execution_id = ? AND attempt = ? AND call_id = ?\n `\n )\n .run(\n reservation.state,\n reservation.usageRecordId ?? null,\n reservation.updatedAt.toISOString(),\n reservation.projectId,\n reservation.executionId,\n reservation.attempt,\n reservation.callId\n )\n }\n\n private findReservation(input: {\n readonly projectId: string\n readonly executionId: string\n readonly attempt: number\n readonly callId: string\n }): AiModelCallReservation | null {\n const row = this.connection.db\n .query(\n `\n SELECT * FROM ai_model_call_reservations\n WHERE project_id = ? AND execution_id = ? AND attempt = ? AND call_id = ?\n `\n )\n .get(\n input.projectId,\n input.executionId,\n input.attempt,\n input.callId\n ) as AiModelCallReservationRow | null\n return row ? reservationFromRow(row) : null\n }\n\n private accountingEntries(\n policy: AiLimitPolicy,\n period: AiLimitPeriod\n ): readonly AiLimitAccountingEntry[] {\n const subject = aiLimitSubjectParts(policy.subject)\n const rows = this.connection.db\n .query(\n `\n SELECT usage.project_id, usage.id AS usage_record_id, usage.execution_id,\n usage.attempt, usage.call_id, usage.occurred_at,\n CAST(usage.total_tokens AS TEXT) AS total_tokens,\n executions.requested_by_user_id,\n executions.requested_by_service_account_id,\n valuations.status AS valuation_status,\n valuations.currency AS valuation_currency,\n CAST(valuations.amount_nanos AS TEXT) AS valuation_amount_nanos\n FROM ai_model_call_usage AS usage\n JOIN executions\n ON executions.project_id = usage.project_id AND executions.id = usage.execution_id\n LEFT JOIN ai_model_call_valuations AS valuations\n ON valuations.project_id = usage.project_id\n AND valuations.usage_record_id = usage.id\n WHERE usage.project_id = ? AND usage.occurred_at >= ? AND usage.occurred_at < ?\n AND (\n ? = 'project'\n OR (\n ? = 'group'\n AND EXISTS (\n SELECT 1 FROM ai_model_call_usage_groups AS usage_groups\n WHERE usage_groups.project_id = usage.project_id\n AND usage_groups.usage_record_id = usage.id\n AND usage_groups.group_id = ?\n )\n )\n OR (? = 'user' AND executions.requested_by_user_id = ?)\n OR (\n ? = 'serviceAccount'\n AND executions.requested_by_service_account_id = ?\n )\n )\n ORDER BY usage.occurred_at, usage.id\n `\n )\n .all(\n policy.projectId,\n period.start.toISOString(),\n period.end.toISOString(),\n subject.type,\n subject.type,\n subject.id,\n subject.type,\n subject.id,\n subject.type,\n subject.id\n ) as AiLimitAccountingRow[]\n return rows.map((row) => accountingEntryFromRow(row, policy.subject))\n }\n\n private requireAccountingEntry(projectId: string, usageRecordId: string): AiLimitAccountingEntry {\n const row = this.connection.db\n .query(\n `\n SELECT usage.project_id, usage.id AS usage_record_id, usage.execution_id,\n usage.attempt, usage.call_id, usage.occurred_at,\n CAST(usage.total_tokens AS TEXT) AS total_tokens,\n executions.requested_by_user_id,\n executions.requested_by_service_account_id,\n valuations.status AS valuation_status,\n valuations.currency AS valuation_currency,\n CAST(valuations.amount_nanos AS TEXT) AS valuation_amount_nanos\n FROM ai_model_call_usage AS usage\n JOIN executions\n ON executions.project_id = usage.project_id AND executions.id = usage.execution_id\n LEFT JOIN ai_model_call_valuations AS valuations\n ON valuations.project_id = usage.project_id\n AND valuations.usage_record_id = usage.id\n WHERE usage.project_id = ? AND usage.id = ?\n `\n )\n .get(projectId, usageRecordId) as AiLimitAccountingRow | null\n if (row) {\n const groups = this.connection.db\n .query(\n `\n SELECT group_id FROM ai_model_call_usage_groups\n WHERE project_id = ? AND usage_record_id = ?\n ORDER BY group_id\n `\n )\n .all(projectId, usageRecordId) as { readonly group_id: string }[]\n return accountingEntryFromRow(\n row,\n undefined,\n groups.map((group) => group.group_id)\n )\n }\n throw new AiLimitStorageError(\n \"missing_usage_record\",\n `[SixbSqlite] AI usage record '${usageRecordId}' does not exist in project '${projectId}'.`\n )\n }\n\n private assertExecutionExists(projectId: string, executionId: string): void {\n const row = this.connection.db\n .query(\"SELECT 1 FROM executions WHERE project_id = ? AND id = ?\")\n .get(projectId, executionId)\n if (row) return\n throw new AiLimitStorageError(\n \"missing_execution\",\n `[SixbSqlite] AI limit execution '${executionId}' does not exist in project '${projectId}'.`\n )\n }\n}\n\ninterface AiLimitPolicyRow {\n readonly project_id: string\n readonly id: string\n readonly subject_type: AiLimitSubject[\"type\"]\n readonly subject_id: string\n readonly meter: AiLimitQuantity[\"meter\"]\n readonly currency: string\n readonly limit_amount: string\n readonly period_kind: \"calendarMonth\"\n readonly enabled: number\n readonly created_at: string\n readonly updated_at: string\n}\n\ninterface AiLimitPeriodStateRow {\n readonly actual_amount: string\n readonly reserved_amount: string\n readonly unknown_amount: string\n readonly accounting_status: \"complete\" | \"unavailable\"\n}\n\ninterface AiLimitActualStateRow {\n readonly meter: AiLimitQuantity[\"meter\"]\n readonly currency: string\n readonly actual_amount: string\n readonly accounting_status: \"complete\" | \"unavailable\"\n}\n\ninterface AiLimitAccountingRow {\n readonly project_id: string\n readonly usage_record_id: string\n readonly execution_id: string\n readonly attempt: number\n readonly call_id: string\n readonly occurred_at: string\n readonly total_tokens: string | null\n readonly requested_by_user_id: string | null\n readonly requested_by_service_account_id: string | null\n readonly valuation_status: \"rated\" | \"unpriceable\" | null\n readonly valuation_currency: string | null\n readonly valuation_amount_nanos: string | null\n}\n\ninterface AiModelCallReservationRow {\n readonly project_id: string\n readonly execution_id: string\n readonly attempt: number\n readonly call_id: string\n readonly buckets: string\n readonly request_key: string\n readonly period_start: string\n readonly period_end: string\n readonly state: AiModelCallReservation[\"state\"]\n readonly usage_record_id: string | null\n readonly reserved_at: string\n readonly updated_at: string\n}\n\nfunction policyFromRow(row: AiLimitPolicyRow): AiLimitPolicy {\n return {\n id: row.id,\n projectId: row.project_id,\n subject: aiLimitSubjectFromParts(row.subject_type, row.subject_id),\n limit: aiLimitQuantityFromAmount({\n meter: row.meter,\n currency: row.currency,\n amount: BigInt(row.limit_amount),\n }),\n period: row.period_kind,\n enabled: row.enabled === 1,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nfunction policyStatus(\n policy: AiLimitPolicy,\n period: AiLimitPeriod,\n row: AiLimitPeriodStateRow,\n existingGroups?: ReadonlySet<string>\n): AiLimitPolicyStatus {\n const limit = normalizeAiLimitAmount(policy.limit)\n const actual = BigInt(row.actual_amount)\n const reserved = BigInt(row.reserved_amount)\n const unknown = BigInt(row.unknown_amount)\n const consumed = actual + reserved + unknown\n const quantity = (amount: bigint) => aiLimitQuantityFromAmount({ ...limit, amount })\n return {\n policy,\n period: structuredClone(period),\n consumption: {\n actual: quantity(actual),\n reserved: quantity(reserved),\n unknown: quantity(unknown),\n remaining: quantity(limit.amount > consumed ? limit.amount - consumed : 0n),\n },\n accountingStatus: row.accounting_status,\n exhausted: consumed >= limit.amount,\n orphaned:\n policy.subject.type === \"group\" &&\n existingGroups !== undefined &&\n !existingGroups.has(policy.subject.id),\n }\n}\n\nfunction accountingEntryFromRow(\n row: AiLimitAccountingRow,\n subject?: AiLimitSubject,\n requesterGroupIds = subject?.type === \"group\" ? [subject.id] : []\n): AiLimitAccountingEntry {\n const totalTokens = row.total_tokens === null ? undefined : Number(row.total_tokens)\n const requester = row.requested_by_user_id\n ? ({ type: \"user\", id: row.requested_by_user_id } as const)\n : row.requested_by_service_account_id\n ? ({ type: \"serviceAccount\", id: row.requested_by_service_account_id } as const)\n : undefined\n return {\n projectId: row.project_id,\n usageRecordId: row.usage_record_id,\n executionId: row.execution_id,\n attempt: row.attempt,\n callId: row.call_id,\n occurredAt: new Date(row.occurred_at),\n ...(totalTokens !== undefined && Number.isSafeInteger(totalTokens) ? { totalTokens } : {}),\n requesterGroupIds,\n ...(requester ? { requester } : {}),\n ...(row.valuation_status === \"rated\" &&\n row.valuation_currency !== null &&\n row.valuation_amount_nanos !== null\n ? {\n valuation: {\n status: \"rated\" as const,\n money: {\n currency: row.valuation_currency,\n amountNanos: row.valuation_amount_nanos,\n },\n },\n }\n : row.valuation_status === \"unpriceable\"\n ? { valuation: { status: \"unavailable\" as const } }\n : {}),\n }\n}\n\nfunction reservationFromRow(row: AiModelCallReservationRow): AiModelCallReservation {\n return {\n projectId: row.project_id,\n executionId: row.execution_id,\n attempt: row.attempt,\n callId: row.call_id,\n buckets: normalizeBucketsJson(row.buckets),\n requestKey: row.request_key,\n period: {\n kind: \"calendarMonth\",\n start: new Date(row.period_start),\n end: new Date(row.period_end),\n resetAt: new Date(row.period_end),\n },\n state: row.state,\n ...(row.usage_record_id === null ? {} : { usageRecordId: row.usage_record_id }),\n reservedAt: new Date(row.reserved_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nfunction normalizeBucketsJson(value: string): readonly AiLimitReservationBucket[] {\n const buckets = JSON.parse(value) as readonly AiLimitReservationBucket[]\n return buckets.map((bucket) => ({\n subject: structuredClone(bucket.subject),\n estimate: normalizeAiLimitQuantities([bucket.estimate], \"stored bucket\")[0]!,\n }))\n}\n\nfunction reservationSqlValues(reservation: AiModelCallReservation): SQLQueryBindings[] {\n return [\n reservation.projectId,\n reservation.executionId,\n reservation.attempt,\n reservation.callId,\n JSON.stringify(reservation.buckets),\n reservation.requestKey,\n reservation.period.start.toISOString(),\n reservation.period.end.toISOString(),\n reservation.state,\n reservation.usageRecordId ?? null,\n reservation.reservedAt.toISOString(),\n reservation.updatedAt.toISOString(),\n ]\n}\n\nfunction assertSameDimension(previous: AiLimitQuantity, next: AiLimitQuantity): void {\n if (\n aiLimitAmountKey(normalizeAiLimitAmount(previous)) !==\n aiLimitAmountKey(normalizeAiLimitAmount(next))\n ) {\n throw new TypeError(\"[Sixb] AI limit policy meter and cost currency are immutable.\")\n }\n}\n\nfunction validatePolicyIdentity(input: GetAiLimitPolicyInput): void {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.id, \"policy id\")\n}\n\nfunction duplicatePolicy(policy: AiLimitPolicy): AiLimitStorageError {\n return new AiLimitStorageError(\n \"duplicate_policy\",\n `[SixbSqlite] An AI limit policy already exists for policy ID or subject-meter dimension '${policy.id}'.`\n )\n}\n\nfunction missingReservation(input: {\n readonly executionId: string\n readonly attempt: number\n readonly callId: string\n}): AiLimitStorageError {\n return new AiLimitStorageError(\n \"missing_reservation\",\n `[SixbSqlite] AI model-call reservation '${input.callId}' does not exist for execution '${input.executionId}' attempt ${input.attempt}.`\n )\n}\n\nfunction reconciliationConflict(callId: string): AiLimitStorageError {\n return new AiLimitStorageError(\n \"reconciliation_conflict\",\n `[SixbSqlite] AI model-call reservation '${callId}' was reconciled with a different usage record.`\n )\n}\n\nfunction invalidState(reservation: AiModelCallReservation, operation: string): AiLimitStorageError {\n return new AiLimitStorageError(\n \"invalid_reservation_state\",\n `[SixbSqlite] Cannot ${operation} AI model-call reservation '${reservation.callId}' in state '${reservation.state}'.`\n )\n}\n\nfunction isConstraintError(error: unknown): boolean {\n return error instanceof Error && /constraint/i.test(error.message)\n}\n",
21
- "import type { Database } from \"bun:sqlite\"\nimport type {\n AuthStorage,\n CompleteDeviceAuthorizationInput,\n CompleteDeviceAuthorizationResult,\n CompleteMagicLinkSignInInput,\n CompleteOidcSignInInput,\n CompleteSignInResult,\n DeviceAuthorizationRecord,\n GroupMembershipRecord,\n InvitationRecord,\n SessionRecord,\n SuspendUserAndRevokeSessionsInput,\n UserIdentityRecord,\n UserRecord,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"../migrations\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"../transactions\"\nimport { SqliteAuthAccessTokenStore } from \"./access-tokens\"\nimport {\n getDeviceAuthorizationById,\n SqliteAuthDeviceAuthorizationStore,\n} from \"./device-authorizations\"\nimport { SqliteAuthGroupMembershipStore } from \"./group-memberships\"\nimport { SqliteAuthUserIdentityStore } from \"./identities\"\nimport { SqliteAuthInvitationStore } from \"./invitations\"\nimport { SqliteAuthMagicLinkStore } from \"./magic-links\"\nimport { SqliteAuthOidcAuthorizationAttemptStore } from \"./oidc-attempts\"\nimport type { SqliteAuthMagicLinkRow, SqliteAuthOidcAttemptRow } from \"./rows\"\nimport { rowToIdentityRecord, rowToUserRecord, serializeOptionalRecord } from \"./rows\"\nimport { SqliteAuthServiceAccountGroupMembershipStore } from \"./service-account-group-memberships\"\nimport { SqliteAuthServiceAccountStore } from \"./service-accounts\"\nimport { SqliteAuthSessionStore } from \"./sessions\"\nimport {\n assertNonEmpty,\n consumeMagicLink,\n consumeOidcAttempt,\n createSession,\n getActiveInvitationByEmail,\n getIdentityRowBySubject,\n getMagicLinkRowById,\n getOidcAttemptRowById,\n getUserRowByEmail,\n getUserRowById,\n mapUniqueConstraintError,\n normalizeEmail,\n normalizeGroupIds,\n revokeActiveSessionsForUser,\n toIso,\n upsertGroupMembership,\n validateCompleteSessionInput,\n} from \"./shared\"\nimport { SqliteAuthUserStore } from \"./users\"\n\ninterface AuthTransactionError {\n readonly error: AuthStorageError\n}\n\nexport interface SqliteAuthStorageOptions {\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteAuthStorage implements AuthStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n readonly users: SqliteAuthUserStore\n readonly identities: SqliteAuthUserIdentityStore\n readonly serviceAccounts: SqliteAuthServiceAccountStore\n readonly serviceAccountGroupMemberships: SqliteAuthServiceAccountGroupMembershipStore\n readonly sessions: SqliteAuthSessionStore\n readonly accessTokens: SqliteAuthAccessTokenStore\n readonly invitations: SqliteAuthInvitationStore\n readonly groupMemberships: SqliteAuthGroupMembershipStore\n readonly magicLinks: SqliteAuthMagicLinkStore\n readonly oidcAuthorizationAttempts: SqliteAuthOidcAuthorizationAttemptStore\n readonly deviceAuthorizations: SqliteAuthDeviceAuthorizationStore\n\n constructor(options: SqliteAuthStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n\n this.users = new SqliteAuthUserStore(this.db)\n this.identities = new SqliteAuthUserIdentityStore(this.db)\n this.serviceAccounts = new SqliteAuthServiceAccountStore(this.db)\n this.serviceAccountGroupMemberships = new SqliteAuthServiceAccountGroupMembershipStore(this.db)\n this.sessions = new SqliteAuthSessionStore(this.db)\n this.accessTokens = new SqliteAuthAccessTokenStore(this.db)\n this.invitations = new SqliteAuthInvitationStore(this.db)\n this.groupMemberships = new SqliteAuthGroupMembershipStore(this.db)\n this.magicLinks = new SqliteAuthMagicLinkStore(this.db)\n this.oidcAuthorizationAttempts = new SqliteAuthOidcAuthorizationAttemptStore(this.db)\n this.deviceAuthorizations = new SqliteAuthDeviceAuthorizationStore(this.db)\n }\n\n async completeDeviceAuthorization(\n input: CompleteDeviceAuthorizationInput\n ): Promise<CompleteDeviceAuthorizationResult> {\n return runImmediateTransaction(this.db, () => {\n const authorization = getDeviceAuthorizationById(this.db, input.projectId, input.id)\n if (!authorization) {\n throw new AuthStorageError(\n \"missing_device_authorization\",\n `[Sixb] Device authorization '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n assertCompletableDeviceAuthorization(authorization, input)\n const session = createSession(this.db, input.session)\n this.db\n .query(`\n UPDATE auth_device_authorizations\n SET status = 'consumed', consumed_at = ?\n WHERE project_id = ? AND id = ? AND status = 'approved'\n `)\n .run(toIso(input.completedAt), input.projectId, input.id)\n return {\n authorization: {\n ...authorization,\n status: \"consumed\",\n consumedAt: new Date(input.completedAt),\n },\n session,\n }\n })\n }\n\n async completeMagicLinkSignIn(\n input: CompleteMagicLinkSignInInput\n ): Promise<CompleteSignInResult> {\n const result = runImmediateTransaction(\n this.db,\n (): CompleteSignInResult | AuthTransactionError => {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const completedAt = new Date(input.completedAt)\n const magicLink = getMagicLinkRowById(this.db, {\n projectId,\n id: input.magicLinkId,\n })\n\n this.assertMagicLinkUsable(\n projectId,\n input.magicLinkId,\n input.tokenHash,\n completedAt,\n magicLink\n )\n\n const existingUserRow = getUserRowByEmail(this.db, {\n projectId,\n email: magicLink.email,\n })\n const activeInvitation = getActiveInvitationByEmail(this.db, {\n projectId,\n email: magicLink.email,\n now: completedAt,\n })\n const shouldCreateUser = !existingUserRow\n const manualGroupIds = normalizeGroupIds(input.manualGroupIds)\n\n if (existingUserRow?.status === \"suspended\") {\n consumeMagicLink(this.db, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n return {\n error: new AuthStorageError(\n \"suspended_user\",\n `[Sixb] User '${existingUserRow.id}' is suspended for project '${projectId}'.`\n ),\n }\n }\n\n if (shouldCreateUser && !activeInvitation && !input.allowUserCreationWithoutInvitation) {\n consumeMagicLink(this.db, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] Magic link '${input.magicLinkId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n if (\n shouldCreateUser &&\n !activeInvitation &&\n input.allowUserCreationWithoutInvitation &&\n input.requireNoActiveUsersForUserCreation &&\n hasActiveUsers(this.db, projectId)\n ) {\n consumeMagicLink(this.db, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] Magic link '${input.magicLinkId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n validateCompleteSessionInput(this.db, projectId, input.session)\n assertSignInSessionAudience(projectId, input.session.audience, magicLink.audience)\n\n let newUserId: string | undefined\n if (shouldCreateUser) {\n newUserId = assertNonEmpty(input.newUserId, \"User id\")\n if (getUserRowById(this.db, { projectId, id: newUserId })) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User '${newUserId}' already exists for project '${projectId}'.`\n )\n }\n }\n\n consumeMagicLink(this.db, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n\n const user = existingUserRow\n ? rowToUserRecord(existingUserRow)\n : this.insertUser({\n id: newUserId ?? assertNonEmpty(input.newUserId, \"User id\"),\n projectId,\n email: magicLink.email,\n displayName: input.newUserDisplayName,\n avatarUrl: input.newUserAvatarUrl,\n createdAt: completedAt,\n })\n\n const invitation = this.acceptInvitationAndApplyGroups({\n activeInvitation,\n completedAt,\n projectId,\n user,\n })\n const groupMemberships = this.applyManualGroups({\n completedAt,\n existing: invitation.groupMemberships,\n groupIds: manualGroupIds,\n projectId,\n userId: user.id,\n })\n const session = this.createSignInSession({\n projectId,\n strategyId: magicLink.strategy_id,\n session: input.session,\n userId: user.id,\n })\n\n return {\n user,\n session,\n invitation: invitation.invitation,\n groupMemberships,\n }\n }\n )\n\n if (\"error\" in result) {\n throw result.error\n }\n\n return result\n }\n\n async completeOidcSignIn(input: CompleteOidcSignInInput): Promise<CompleteSignInResult> {\n const result = runImmediateTransaction(\n this.db,\n (): CompleteSignInResult | AuthTransactionError => {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const completedAt = new Date(input.completedAt)\n const attempt = getOidcAttemptRowById(this.db, {\n projectId,\n id: input.oidcAuthorizationAttemptId,\n })\n\n this.assertOidcAttemptUsable(\n projectId,\n input.oidcAuthorizationAttemptId,\n input.stateHash,\n completedAt,\n attempt\n )\n\n const subject = assertNonEmpty(input.subject, \"Subject\")\n const email = normalizeEmail(input.email)\n const identity = getIdentityRowBySubject(this.db, {\n projectId,\n strategyId: attempt.strategy_id,\n subject,\n })\n const activeInvitation = identity\n ? null\n : getActiveInvitationByEmail(this.db, {\n projectId,\n email,\n now: completedAt,\n })\n let userRow = identity\n ? getUserRowById(this.db, { projectId, id: identity.user_id })\n : getUserRowByEmail(this.db, { projectId, email })\n const shouldCreateUser = !identity && !userRow\n const manualGroupIds = normalizeGroupIds(input.manualGroupIds)\n\n if (identity && !userRow) {\n this.consumeOidcAttempt(input, completedAt, projectId)\n return {\n error: new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${identity.user_id}' not found for linked OIDC identity.`\n ),\n }\n }\n\n if (!identity && userRow && (!input.autoLinkByVerifiedEmail || !input.emailVerified)) {\n this.consumeOidcAttempt(input, completedAt, projectId)\n return {\n error: new AuthStorageError(\n \"email_link_not_allowed\",\n `[Sixb] OIDC identity cannot auto-link to user '${userRow.id}' for project '${projectId}'.`\n ),\n }\n }\n\n if (userRow?.status === \"suspended\") {\n this.consumeOidcAttempt(input, completedAt, projectId)\n return {\n error: new AuthStorageError(\n \"suspended_user\",\n `[Sixb] User '${userRow.id}' is suspended for project '${projectId}'.`\n ),\n }\n }\n\n if (shouldCreateUser && !input.emailVerified) {\n this.consumeOidcAttempt(input, completedAt, projectId)\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n if (shouldCreateUser && !activeInvitation && !input.allowUserCreationWithoutInvitation) {\n this.consumeOidcAttempt(input, completedAt, projectId)\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n if (\n shouldCreateUser &&\n !activeInvitation &&\n input.allowUserCreationWithoutInvitation &&\n input.requireNoActiveUsersForUserCreation &&\n hasActiveUsers(this.db, projectId)\n ) {\n this.consumeOidcAttempt(input, completedAt, projectId)\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n validateCompleteSessionInput(this.db, projectId, input.session)\n assertSignInSessionAudience(projectId, input.session.audience, attempt.audience)\n\n let newUserId: string | undefined\n if (shouldCreateUser) {\n newUserId = assertNonEmpty(input.newUserId, \"User id\")\n if (getUserRowById(this.db, { projectId, id: newUserId })) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User '${newUserId}' already exists for project '${projectId}'.`\n )\n }\n }\n\n this.consumeOidcAttempt(input, completedAt, projectId)\n\n if (!userRow) {\n const user = this.insertUser({\n id: newUserId ?? assertNonEmpty(input.newUserId, \"User id\"),\n projectId,\n email,\n displayName: input.displayName,\n avatarUrl: input.avatarUrl,\n createdAt: completedAt,\n })\n userRow = {\n project_id: user.projectId,\n id: user.id,\n email: user.email,\n display_name: user.displayName ?? null,\n avatar_url: user.avatarUrl ?? null,\n status: user.status,\n created_at: toIso(user.createdAt),\n updated_at: toIso(user.updatedAt),\n }\n }\n\n const user = rowToUserRecord(userRow)\n const invitation = this.acceptInvitationAndApplyGroups({\n activeInvitation,\n completedAt,\n projectId,\n user,\n })\n const groupMemberships = this.applyManualGroups({\n completedAt,\n existing: invitation.groupMemberships,\n groupIds: manualGroupIds,\n projectId,\n userId: user.id,\n })\n const nextIdentity = this.upsertIdentity({\n projectId,\n strategyId: attempt.strategy_id,\n subject,\n userId: user.id,\n claims: input.claims,\n createdAt: identity ? new Date(identity.created_at) : completedAt,\n updatedAt: completedAt,\n })\n const session = this.createSignInSession({\n projectId,\n strategyId: attempt.strategy_id,\n session: input.session,\n userId: user.id,\n })\n\n return {\n user,\n session,\n identity: nextIdentity,\n invitation: invitation.invitation,\n groupMemberships,\n }\n }\n )\n\n if (\"error\" in result) {\n throw result.error\n }\n\n return result\n }\n\n async suspendUserAndRevokeSessions(\n input: SuspendUserAndRevokeSessionsInput\n ): Promise<UserRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = getUserRowById(this.db, {\n projectId: input.projectId,\n id: input.userId,\n })\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${input.userId}' not found for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE auth_users\n SET status = 'suspended',\n updated_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(toIso(input.suspendedAt), input.projectId, input.userId)\n revokeActiveSessionsForUser(this.db, {\n projectId: input.projectId,\n userId: input.userId,\n revokedAt: input.suspendedAt,\n })\n\n return rowToUserRecord({\n ...existing,\n status: \"suspended\",\n updated_at: toIso(input.suspendedAt),\n })\n })\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private assertMagicLinkUsable(\n projectId: string,\n id: string,\n tokenHash: string,\n completedAt: Date,\n row: SqliteAuthMagicLinkRow | null\n ): asserts row is SqliteAuthMagicLinkRow {\n if (!row) {\n throw new AuthStorageError(\n \"missing_magic_link\",\n `[Sixb] Magic link '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.token_hash !== tokenHash || row.consumed_at || row.revoked_at) {\n throw new AuthStorageError(\n \"invalid_magic_link\",\n `[Sixb] Magic link '${id}' is not valid for project '${projectId}'.`\n )\n }\n\n if (new Date(row.expires_at) <= completedAt) {\n throw new AuthStorageError(\n \"expired_magic_link\",\n `[Sixb] Magic link '${id}' is expired for project '${projectId}'.`\n )\n }\n }\n\n private assertOidcAttemptUsable(\n projectId: string,\n id: string,\n stateHash: string,\n completedAt: Date,\n row: SqliteAuthOidcAttemptRow | null\n ): asserts row is SqliteAuthOidcAttemptRow {\n if (!row) {\n throw new AuthStorageError(\n \"missing_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.state_hash !== stateHash || row.consumed_at) {\n throw new AuthStorageError(\n \"invalid_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' is not valid for project '${projectId}'.`\n )\n }\n\n if (new Date(row.expires_at) <= completedAt) {\n throw new AuthStorageError(\n \"expired_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' is expired for project '${projectId}'.`\n )\n }\n }\n\n private insertUser(input: {\n readonly id: string\n readonly projectId: string\n readonly email: string\n readonly displayName?: string\n readonly avatarUrl?: string\n readonly createdAt: Date\n }): UserRecord {\n try {\n this.db\n .query(\n `\n INSERT INTO auth_users (\n project_id,\n id,\n email,\n display_name,\n avatar_url,\n status,\n created_at,\n updated_at\n ) VALUES (?, ?, ?, ?, ?, 'active', ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.email,\n input.displayName ?? null,\n input.avatarUrl ?? null,\n toIso(input.createdAt),\n toIso(input.createdAt)\n )\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_user\",\n `[Sixb] User '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n return {\n id: input.id,\n projectId: input.projectId,\n email: input.email,\n displayName: input.displayName,\n avatarUrl: input.avatarUrl,\n status: \"active\",\n createdAt: new Date(input.createdAt),\n updatedAt: new Date(input.createdAt),\n }\n }\n\n private acceptInvitationAndApplyGroups(input: {\n readonly activeInvitation: InvitationRecord | null\n readonly completedAt: Date\n readonly projectId: string\n readonly user: UserRecord\n }): {\n readonly invitation?: InvitationRecord\n readonly groupMemberships: readonly GroupMembershipRecord[]\n } {\n if (!input.activeInvitation) {\n return { groupMemberships: [] }\n }\n\n this.db\n .query(\n `\n UPDATE auth_invitations\n SET status = 'accepted',\n accepted_at = ?,\n updated_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(\n toIso(input.completedAt),\n toIso(input.completedAt),\n input.projectId,\n input.activeInvitation.id\n )\n\n const invitation: InvitationRecord = {\n ...input.activeInvitation,\n status: \"accepted\",\n acceptedAt: new Date(input.completedAt),\n updatedAt: new Date(input.completedAt),\n }\n const groupMemberships = input.activeInvitation.groupIds.map((groupId) =>\n upsertGroupMembership(this.db, {\n projectId: input.projectId,\n userId: input.user.id,\n groupId,\n source: \"invitation\",\n createdAt: input.completedAt,\n })\n )\n\n return { invitation, groupMemberships }\n }\n\n private applyManualGroups(input: {\n readonly completedAt: Date\n readonly existing: readonly GroupMembershipRecord[]\n readonly groupIds: readonly string[]\n readonly projectId: string\n readonly userId: string\n }): readonly GroupMembershipRecord[] {\n const groupMemberships = [...input.existing]\n\n for (const groupId of input.groupIds) {\n groupMemberships.push(\n upsertGroupMembership(this.db, {\n projectId: input.projectId,\n userId: input.userId,\n groupId,\n source: \"manual\",\n createdAt: input.completedAt,\n })\n )\n }\n\n return groupMemberships\n }\n\n private createSignInSession(input: {\n readonly projectId: string\n readonly strategyId: string\n readonly session: CompleteMagicLinkSignInInput[\"session\"]\n readonly userId: string\n }): SessionRecord {\n return createSession(this.db, {\n id: input.session.id,\n projectId: input.projectId,\n userId: input.userId,\n strategyId: input.strategyId,\n audience: input.session.audience,\n tokenHash: input.session.tokenHash,\n createdAt: input.session.createdAt,\n expiresAt: input.session.expiresAt,\n absoluteExpiresAt: input.session.absoluteExpiresAt,\n userAgent: input.session.userAgent,\n ipAddress: input.session.ipAddress,\n })\n }\n\n private consumeOidcAttempt(\n input: CompleteOidcSignInInput,\n completedAt: Date,\n projectId: string\n ): void {\n consumeOidcAttempt(this.db, {\n projectId,\n id: input.oidcAuthorizationAttemptId,\n stateHash: input.stateHash,\n consumedAt: completedAt,\n })\n }\n\n private upsertIdentity(input: {\n readonly projectId: string\n readonly strategyId: string\n readonly subject: string\n readonly userId: string\n readonly claims?: Readonly<Record<string, unknown>>\n readonly createdAt: Date\n readonly updatedAt: Date\n }): UserIdentityRecord {\n this.db\n .query(\n `\n INSERT INTO auth_user_identities (\n project_id,\n strategy_id,\n subject,\n user_id,\n claims,\n created_at,\n updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(project_id, strategy_id, subject)\n DO UPDATE SET\n user_id = excluded.user_id,\n claims = excluded.claims,\n updated_at = excluded.updated_at\n `\n )\n .run(\n input.projectId,\n input.strategyId,\n input.subject,\n input.userId,\n serializeOptionalRecord(input.claims),\n toIso(input.createdAt),\n toIso(input.updatedAt)\n )\n\n return rowToIdentityRecord({\n project_id: input.projectId,\n strategy_id: input.strategyId,\n subject: input.subject,\n user_id: input.userId,\n claims: serializeOptionalRecord(input.claims),\n created_at: toIso(input.createdAt),\n updated_at: toIso(input.updatedAt),\n })\n }\n}\n\nfunction hasActiveUsers(db: Database, projectId: string): boolean {\n const row = db\n .query(\n `\n SELECT 1 AS active\n FROM auth_users\n WHERE project_id = ?\n AND status = 'active'\n LIMIT 1\n `\n )\n .get(projectId) as { readonly active: number } | null\n\n return row !== null\n}\n\nfunction assertSignInSessionAudience(\n projectId: string,\n sessionAudience: string,\n storedAudience: string\n): void {\n if (sessionAudience === storedAudience) {\n return\n }\n\n throw new AuthStorageError(\n \"invalid_input\",\n `[Sixb] Sign-in session audience '${sessionAudience}' does not match stored auth audience '${storedAudience}' for project '${projectId}'.`\n )\n}\n\nfunction assertCompletableDeviceAuthorization(\n authorization: DeviceAuthorizationRecord,\n input: CompleteDeviceAuthorizationInput\n): void {\n if (authorization.deviceCodeHash !== input.deviceCodeHash) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n \"[Sixb] Invalid device authorization.\"\n )\n }\n if (authorization.status === \"pending\") {\n throw new AuthStorageError(\n \"pending_device_authorization\",\n \"[Sixb] Device authorization is pending.\"\n )\n }\n if (authorization.status === \"denied\") {\n throw new AuthStorageError(\n \"device_authorization_denied\",\n \"[Sixb] Device authorization was denied.\"\n )\n }\n if (\n authorization.status !== \"approved\" ||\n authorization.expiresAt <= input.completedAt ||\n !authorization.approvedUserId ||\n !authorization.approvedSessionId ||\n input.session.projectId !== input.projectId ||\n input.session.userId !== authorization.approvedUserId\n ) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n \"[Sixb] Device authorization is invalid.\"\n )\n }\n}\n",
21
+ "import type { Database } from \"bun:sqlite\"\nimport type {\n AuthStorage,\n CompleteDeviceAuthorizationInput,\n CompleteDeviceAuthorizationResult,\n CompleteMagicLinkSignInInput,\n CompleteOidcSignInInput,\n CompleteSignInResult,\n DeviceAuthorizationRecord,\n GroupMembershipRecord,\n GroupMembershipSource,\n InvitationRecord,\n SessionRecord,\n SuspendUserAndRevokeSessionsInput,\n UserIdentityRecord,\n UserRecord,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"../migrations\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"../transactions\"\nimport { SqliteAuthAccessTokenStore } from \"./access-tokens\"\nimport {\n getDeviceAuthorizationById,\n SqliteAuthDeviceAuthorizationStore,\n} from \"./device-authorizations\"\nimport { SqliteAuthGroupMembershipStore } from \"./group-memberships\"\nimport { SqliteAuthUserIdentityStore } from \"./identities\"\nimport { SqliteAuthInvitationStore } from \"./invitations\"\nimport { SqliteAuthMagicLinkStore } from \"./magic-links\"\nimport { SqliteAuthOidcAuthorizationAttemptStore } from \"./oidc-attempts\"\nimport type { SqliteAuthMagicLinkRow, SqliteAuthOidcAttemptRow } from \"./rows\"\nimport { rowToIdentityRecord, rowToUserRecord, serializeOptionalRecord } from \"./rows\"\nimport { SqliteAuthServiceAccountGroupMembershipStore } from \"./service-account-group-memberships\"\nimport { SqliteAuthServiceAccountStore } from \"./service-accounts\"\nimport { SqliteAuthSessionStore } from \"./sessions\"\nimport {\n assertNonEmpty,\n consumeMagicLink,\n consumeOidcAttempt,\n createSession,\n getActiveInvitationByEmail,\n getIdentityRowBySubject,\n getMagicLinkRowById,\n getOidcAttemptRowById,\n getUserRowByEmail,\n getUserRowById,\n mapUniqueConstraintError,\n normalizeEmail,\n normalizeGroupIds,\n revokeActiveSessionsForUser,\n toIso,\n upsertGroupMembership,\n validateCompleteSessionInput,\n} from \"./shared\"\nimport { SqliteAuthUserStore } from \"./users\"\n\ninterface AuthTransactionError {\n readonly error: AuthStorageError\n}\n\nexport interface SqliteAuthStorageOptions {\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteAuthStorage implements AuthStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n readonly users: SqliteAuthUserStore\n readonly identities: SqliteAuthUserIdentityStore\n readonly serviceAccounts: SqliteAuthServiceAccountStore\n readonly serviceAccountGroupMemberships: SqliteAuthServiceAccountGroupMembershipStore\n readonly sessions: SqliteAuthSessionStore\n readonly accessTokens: SqliteAuthAccessTokenStore\n readonly invitations: SqliteAuthInvitationStore\n readonly groupMemberships: SqliteAuthGroupMembershipStore\n readonly magicLinks: SqliteAuthMagicLinkStore\n readonly oidcAuthorizationAttempts: SqliteAuthOidcAuthorizationAttemptStore\n readonly deviceAuthorizations: SqliteAuthDeviceAuthorizationStore\n\n constructor(options: SqliteAuthStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n\n this.users = new SqliteAuthUserStore(this.db)\n this.identities = new SqliteAuthUserIdentityStore(this.db)\n this.serviceAccounts = new SqliteAuthServiceAccountStore(this.db)\n this.serviceAccountGroupMemberships = new SqliteAuthServiceAccountGroupMembershipStore(this.db)\n this.sessions = new SqliteAuthSessionStore(this.db)\n this.accessTokens = new SqliteAuthAccessTokenStore(this.db)\n this.invitations = new SqliteAuthInvitationStore(this.db)\n this.groupMemberships = new SqliteAuthGroupMembershipStore(this.db)\n this.magicLinks = new SqliteAuthMagicLinkStore(this.db)\n this.oidcAuthorizationAttempts = new SqliteAuthOidcAuthorizationAttemptStore(this.db)\n this.deviceAuthorizations = new SqliteAuthDeviceAuthorizationStore(this.db)\n }\n\n async completeDeviceAuthorization(\n input: CompleteDeviceAuthorizationInput\n ): Promise<CompleteDeviceAuthorizationResult> {\n return runImmediateTransaction(this.db, () => {\n const authorization = getDeviceAuthorizationById(this.db, input.projectId, input.id)\n if (!authorization) {\n throw new AuthStorageError(\n \"missing_device_authorization\",\n `[Sixb] Device authorization '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n assertCompletableDeviceAuthorization(authorization, input)\n const session = createSession(this.db, input.session)\n this.db\n .query(`\n UPDATE auth_device_authorizations\n SET status = 'consumed', consumed_at = ?\n WHERE project_id = ? AND id = ? AND status = 'approved'\n `)\n .run(toIso(input.completedAt), input.projectId, input.id)\n return {\n authorization: {\n ...authorization,\n status: \"consumed\",\n consumedAt: new Date(input.completedAt),\n },\n session,\n }\n })\n }\n\n async completeMagicLinkSignIn(\n input: CompleteMagicLinkSignInInput\n ): Promise<CompleteSignInResult> {\n const result = runImmediateTransaction(\n this.db,\n (): CompleteSignInResult | AuthTransactionError => {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const completedAt = new Date(input.completedAt)\n const magicLink = getMagicLinkRowById(this.db, {\n projectId,\n id: input.magicLinkId,\n })\n\n this.assertMagicLinkUsable(\n projectId,\n input.magicLinkId,\n input.tokenHash,\n completedAt,\n magicLink\n )\n\n const existingUserRow = getUserRowByEmail(this.db, {\n projectId,\n email: magicLink.email,\n })\n const activeInvitation = getActiveInvitationByEmail(this.db, {\n projectId,\n email: magicLink.email,\n now: completedAt,\n })\n const shouldCreateUser = !existingUserRow\n const manualGroupIds = normalizeGroupIds(input.manualGroupIds)\n\n if (existingUserRow?.status === \"suspended\") {\n consumeMagicLink(this.db, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n return {\n error: new AuthStorageError(\n \"suspended_user\",\n `[Sixb] User '${existingUserRow.id}' is suspended for project '${projectId}'.`\n ),\n }\n }\n\n if (shouldCreateUser && !activeInvitation && !input.allowUserCreationWithoutInvitation) {\n consumeMagicLink(this.db, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] Magic link '${input.magicLinkId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n validateCompleteSessionInput(this.db, projectId, input.session)\n assertSignInSessionAudience(projectId, input.session.audience, magicLink.audience)\n\n let newUserId: string | undefined\n if (shouldCreateUser) {\n newUserId = assertNonEmpty(input.newUserId, \"User id\")\n if (getUserRowById(this.db, { projectId, id: newUserId })) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User '${newUserId}' already exists for project '${projectId}'.`\n )\n }\n }\n\n consumeMagicLink(this.db, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n\n const user = existingUserRow\n ? rowToUserRecord(existingUserRow)\n : this.insertUser({\n id: newUserId ?? assertNonEmpty(input.newUserId, \"User id\"),\n projectId,\n email: magicLink.email,\n displayName: input.newUserDisplayName,\n avatarUrl: input.newUserAvatarUrl,\n createdAt: completedAt,\n })\n\n const invitation = this.acceptInvitationAndApplyGroups({\n activeInvitation,\n completedAt,\n projectId,\n user,\n })\n const groupMemberships = this.applyGroups({\n completedAt,\n source: \"manual\",\n existing: invitation.groupMemberships,\n groupIds: manualGroupIds,\n projectId,\n userId: user.id,\n })\n const session = this.createSignInSession({\n projectId,\n strategyId: magicLink.strategy_id,\n session: input.session,\n userId: user.id,\n })\n\n return {\n user,\n session,\n invitation: invitation.invitation,\n groupMemberships,\n }\n }\n )\n\n if (\"error\" in result) {\n throw result.error\n }\n\n return result\n }\n\n async completeOidcSignIn(input: CompleteOidcSignInInput): Promise<CompleteSignInResult> {\n const result = runImmediateTransaction(\n this.db,\n (): CompleteSignInResult | AuthTransactionError => {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const completedAt = new Date(input.completedAt)\n const attempt = getOidcAttemptRowById(this.db, {\n projectId,\n id: input.oidcAuthorizationAttemptId,\n })\n\n this.assertOidcAttemptUsable(\n projectId,\n input.oidcAuthorizationAttemptId,\n input.stateHash,\n completedAt,\n attempt\n )\n\n const subject = assertNonEmpty(input.subject, \"Subject\")\n const email = normalizeEmail(input.email)\n const identity = getIdentityRowBySubject(this.db, {\n projectId,\n strategyId: attempt.strategy_id,\n subject,\n })\n const activeInvitation = identity\n ? null\n : getActiveInvitationByEmail(this.db, {\n projectId,\n email,\n now: completedAt,\n })\n let userRow = identity\n ? getUserRowById(this.db, { projectId, id: identity.user_id })\n : getUserRowByEmail(this.db, { projectId, email })\n const shouldCreateUser = !identity && !userRow\n const manualGroupIds = normalizeGroupIds(input.manualGroupIds)\n\n if (identity && !userRow) {\n this.consumeOidcAttempt(input, completedAt, projectId)\n return {\n error: new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${identity.user_id}' not found for linked OIDC identity.`\n ),\n }\n }\n\n if (userRow?.status === \"suspended\") {\n this.consumeOidcAttempt(input, completedAt, projectId)\n return {\n error: new AuthStorageError(\n \"suspended_user\",\n `[Sixb] User '${userRow.id}' is suspended for project '${projectId}'.`\n ),\n }\n }\n\n if (shouldCreateUser && !activeInvitation && !input.allowUserCreationWithoutInvitation) {\n this.consumeOidcAttempt(input, completedAt, projectId)\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n validateCompleteSessionInput(this.db, projectId, input.session)\n assertSignInSessionAudience(projectId, input.session.audience, attempt.audience)\n\n let newUserId: string | undefined\n if (shouldCreateUser) {\n newUserId = assertNonEmpty(input.newUserId, \"User id\")\n if (getUserRowById(this.db, { projectId, id: newUserId })) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User '${newUserId}' already exists for project '${projectId}'.`\n )\n }\n }\n\n this.consumeOidcAttempt(input, completedAt, projectId)\n\n if (!userRow) {\n const user = this.insertUser({\n id: newUserId ?? assertNonEmpty(input.newUserId, \"User id\"),\n projectId,\n email,\n displayName: input.displayName,\n avatarUrl: input.avatarUrl,\n createdAt: completedAt,\n })\n userRow = {\n project_id: user.projectId,\n id: user.id,\n email: user.email,\n display_name: user.displayName ?? null,\n avatar_url: user.avatarUrl ?? null,\n status: user.status,\n created_at: toIso(user.createdAt),\n updated_at: toIso(user.updatedAt),\n }\n }\n\n const user = rowToUserRecord(userRow)\n const invitation = this.acceptInvitationAndApplyGroups({\n activeInvitation,\n completedAt,\n projectId,\n user,\n })\n const groupMemberships = this.syncDirectoryGroups({\n completedAt,\n existing: this.applyGroups({\n completedAt,\n source: \"manual\",\n existing: invitation.groupMemberships,\n groupIds: manualGroupIds,\n projectId,\n userId: user.id,\n }),\n groupIds: input.directoryGroupIds,\n projectId,\n userId: user.id,\n })\n const nextIdentity = this.upsertIdentity({\n projectId,\n strategyId: attempt.strategy_id,\n subject,\n userId: user.id,\n claims: input.claims,\n createdAt: identity ? new Date(identity.created_at) : completedAt,\n updatedAt: completedAt,\n })\n const session = this.createSignInSession({\n projectId,\n strategyId: attempt.strategy_id,\n session: input.session,\n userId: user.id,\n })\n\n return {\n user,\n session,\n identity: nextIdentity,\n invitation: invitation.invitation,\n groupMemberships,\n }\n }\n )\n\n if (\"error\" in result) {\n throw result.error\n }\n\n return result\n }\n\n async suspendUserAndRevokeSessions(\n input: SuspendUserAndRevokeSessionsInput\n ): Promise<UserRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = getUserRowById(this.db, {\n projectId: input.projectId,\n id: input.userId,\n })\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${input.userId}' not found for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE auth_users\n SET status = 'suspended',\n updated_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(toIso(input.suspendedAt), input.projectId, input.userId)\n revokeActiveSessionsForUser(this.db, {\n projectId: input.projectId,\n userId: input.userId,\n revokedAt: input.suspendedAt,\n })\n\n return rowToUserRecord({\n ...existing,\n status: \"suspended\",\n updated_at: toIso(input.suspendedAt),\n })\n })\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private assertMagicLinkUsable(\n projectId: string,\n id: string,\n tokenHash: string,\n completedAt: Date,\n row: SqliteAuthMagicLinkRow | null\n ): asserts row is SqliteAuthMagicLinkRow {\n if (!row) {\n throw new AuthStorageError(\n \"missing_magic_link\",\n `[Sixb] Magic link '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.token_hash !== tokenHash || row.consumed_at || row.revoked_at) {\n throw new AuthStorageError(\n \"invalid_magic_link\",\n `[Sixb] Magic link '${id}' is not valid for project '${projectId}'.`\n )\n }\n\n if (new Date(row.expires_at) <= completedAt) {\n throw new AuthStorageError(\n \"expired_magic_link\",\n `[Sixb] Magic link '${id}' is expired for project '${projectId}'.`\n )\n }\n }\n\n private assertOidcAttemptUsable(\n projectId: string,\n id: string,\n stateHash: string,\n completedAt: Date,\n row: SqliteAuthOidcAttemptRow | null\n ): asserts row is SqliteAuthOidcAttemptRow {\n if (!row) {\n throw new AuthStorageError(\n \"missing_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.state_hash !== stateHash || row.consumed_at) {\n throw new AuthStorageError(\n \"invalid_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' is not valid for project '${projectId}'.`\n )\n }\n\n if (new Date(row.expires_at) <= completedAt) {\n throw new AuthStorageError(\n \"expired_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' is expired for project '${projectId}'.`\n )\n }\n }\n\n private insertUser(input: {\n readonly id: string\n readonly projectId: string\n readonly email: string\n readonly displayName?: string\n readonly avatarUrl?: string\n readonly createdAt: Date\n }): UserRecord {\n try {\n this.db\n .query(\n `\n INSERT INTO auth_users (\n project_id,\n id,\n email,\n display_name,\n avatar_url,\n status,\n created_at,\n updated_at\n ) VALUES (?, ?, ?, ?, ?, 'active', ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.email,\n input.displayName ?? null,\n input.avatarUrl ?? null,\n toIso(input.createdAt),\n toIso(input.createdAt)\n )\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_user\",\n `[Sixb] User '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n return {\n id: input.id,\n projectId: input.projectId,\n email: input.email,\n displayName: input.displayName,\n avatarUrl: input.avatarUrl,\n status: \"active\",\n createdAt: new Date(input.createdAt),\n updatedAt: new Date(input.createdAt),\n }\n }\n\n private acceptInvitationAndApplyGroups(input: {\n readonly activeInvitation: InvitationRecord | null\n readonly completedAt: Date\n readonly projectId: string\n readonly user: UserRecord\n }): {\n readonly invitation?: InvitationRecord\n readonly groupMemberships: readonly GroupMembershipRecord[]\n } {\n if (!input.activeInvitation) {\n return { groupMemberships: [] }\n }\n\n this.db\n .query(\n `\n UPDATE auth_invitations\n SET status = 'accepted',\n accepted_at = ?,\n updated_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(\n toIso(input.completedAt),\n toIso(input.completedAt),\n input.projectId,\n input.activeInvitation.id\n )\n\n const invitation: InvitationRecord = {\n ...input.activeInvitation,\n status: \"accepted\",\n acceptedAt: new Date(input.completedAt),\n updatedAt: new Date(input.completedAt),\n }\n const groupMemberships = input.activeInvitation.groupIds.map((groupId) =>\n upsertGroupMembership(this.db, {\n projectId: input.projectId,\n userId: input.user.id,\n groupId,\n source: \"invitation\",\n createdAt: input.completedAt,\n })\n )\n\n return { invitation, groupMemberships }\n }\n\n private applyGroups(input: {\n readonly completedAt: Date\n readonly existing: readonly GroupMembershipRecord[]\n readonly groupIds: readonly string[]\n readonly projectId: string\n readonly source: GroupMembershipSource\n readonly userId: string\n }): readonly GroupMembershipRecord[] {\n const groupMemberships = [...input.existing]\n\n for (const groupId of input.groupIds) {\n groupMemberships.push(\n upsertGroupMembership(this.db, {\n projectId: input.projectId,\n userId: input.userId,\n groupId,\n source: input.source,\n createdAt: input.completedAt,\n })\n )\n }\n\n return groupMemberships\n }\n // Directory memberships become exactly `groupIds`. A group the user already holds from another\n // source keeps that source, and memberships from other sources are never removed.\n private syncDirectoryGroups(input: {\n readonly completedAt: Date\n readonly existing: readonly GroupMembershipRecord[]\n readonly groupIds?: readonly string[]\n readonly projectId: string\n readonly userId: string\n }): readonly GroupMembershipRecord[] {\n if (!input.groupIds) {\n return input.existing\n }\n\n const groupIds = normalizeGroupIds(input.groupIds)\n this.db\n .query(\n `\n DELETE FROM auth_group_memberships\n WHERE project_id = ?\n AND user_id = ?\n AND source = 'directory'\n AND group_id NOT IN (${groupIds.map(() => \"?\").join(\", \")})\n `\n )\n .run(input.projectId, input.userId, ...groupIds)\n\n return this.applyGroups({ ...input, groupIds, source: \"directory\" })\n }\n\n private createSignInSession(input: {\n readonly projectId: string\n readonly strategyId: string\n readonly session: CompleteMagicLinkSignInInput[\"session\"]\n readonly userId: string\n }): SessionRecord {\n return createSession(this.db, {\n id: input.session.id,\n projectId: input.projectId,\n userId: input.userId,\n strategyId: input.strategyId,\n audience: input.session.audience,\n tokenHash: input.session.tokenHash,\n createdAt: input.session.createdAt,\n expiresAt: input.session.expiresAt,\n absoluteExpiresAt: input.session.absoluteExpiresAt,\n userAgent: input.session.userAgent,\n ipAddress: input.session.ipAddress,\n })\n }\n\n private consumeOidcAttempt(\n input: CompleteOidcSignInInput,\n completedAt: Date,\n projectId: string\n ): void {\n consumeOidcAttempt(this.db, {\n projectId,\n id: input.oidcAuthorizationAttemptId,\n stateHash: input.stateHash,\n consumedAt: completedAt,\n })\n }\n\n private upsertIdentity(input: {\n readonly projectId: string\n readonly strategyId: string\n readonly subject: string\n readonly userId: string\n readonly claims?: Readonly<Record<string, unknown>>\n readonly createdAt: Date\n readonly updatedAt: Date\n }): UserIdentityRecord {\n this.db\n .query(\n `\n INSERT INTO auth_user_identities (\n project_id,\n strategy_id,\n subject,\n user_id,\n claims,\n created_at,\n updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(project_id, strategy_id, subject)\n DO UPDATE SET\n user_id = excluded.user_id,\n claims = excluded.claims,\n updated_at = excluded.updated_at\n `\n )\n .run(\n input.projectId,\n input.strategyId,\n input.subject,\n input.userId,\n serializeOptionalRecord(input.claims),\n toIso(input.createdAt),\n toIso(input.updatedAt)\n )\n\n return rowToIdentityRecord({\n project_id: input.projectId,\n strategy_id: input.strategyId,\n subject: input.subject,\n user_id: input.userId,\n claims: serializeOptionalRecord(input.claims),\n created_at: toIso(input.createdAt),\n updated_at: toIso(input.updatedAt),\n })\n }\n}\n\nfunction assertSignInSessionAudience(\n projectId: string,\n sessionAudience: string,\n storedAudience: string\n): void {\n if (sessionAudience === storedAudience) {\n return\n }\n\n throw new AuthStorageError(\n \"invalid_input\",\n `[Sixb] Sign-in session audience '${sessionAudience}' does not match stored auth audience '${storedAudience}' for project '${projectId}'.`\n )\n}\n\nfunction assertCompletableDeviceAuthorization(\n authorization: DeviceAuthorizationRecord,\n input: CompleteDeviceAuthorizationInput\n): void {\n if (authorization.deviceCodeHash !== input.deviceCodeHash) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n \"[Sixb] Invalid device authorization.\"\n )\n }\n if (authorization.status === \"pending\") {\n throw new AuthStorageError(\n \"pending_device_authorization\",\n \"[Sixb] Device authorization is pending.\"\n )\n }\n if (authorization.status === \"denied\") {\n throw new AuthStorageError(\n \"device_authorization_denied\",\n \"[Sixb] Device authorization was denied.\"\n )\n }\n if (\n authorization.status !== \"approved\" ||\n authorization.expiresAt <= input.completedAt ||\n !authorization.approvedUserId ||\n !authorization.approvedSessionId ||\n input.session.projectId !== input.projectId ||\n input.session.userId !== authorization.approvedUserId\n ) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n \"[Sixb] Device authorization is invalid.\"\n )\n }\n}\n",
22
22
  "import type { Database } from \"bun:sqlite\"\nimport type {\n AccessTokenRecord,\n AuthAccessTokenStore,\n CreateAuthAccessTokenInput,\n ListAuthAccessTokensInput,\n ListAuthAccessTokensResult,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport type {\n SqliteAuthAccessTokenRow,\n SqliteAuthServiceAccountRow,\n SqliteAuthUserRow,\n} from \"./rows\"\nimport { rowToAccessTokenRecord, serializeOptionalStringArray } from \"./rows\"\nimport {\n appendPagination,\n assertNonEmpty,\n mapUniqueConstraintError,\n normalizeGroupIds,\n type SqliteValue,\n toIso,\n} from \"./shared\"\n\nfunction createAuthAccessToken(db: Database, input: CreateAuthAccessTokenInput): AccessTokenRecord {\n const id = assertNonEmpty(input.id, \"Access token id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const name = assertNonEmpty(input.name, \"Access token name\")\n const subjectId = assertNonEmpty(input.subject.id, \"Access token subject id\")\n const tokenHash = assertNonEmpty(input.tokenHash, \"Access token hash\")\n assertKindMatchesSubject(input)\n assertSubjectExists(db, projectId, input.subject.type, subjectId)\n const groupIds = input.groupIds === undefined ? undefined : normalizeGroupIds(input.groupIds)\n\n try {\n db.query(\n `\n INSERT INTO auth_access_tokens (\n project_id,\n id,\n name,\n kind,\n subject_type,\n subject_id,\n token_hash,\n group_ids,\n created_by_principal_type,\n created_by_principal_id,\n created_by_session_id,\n created_at,\n expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n ).run(\n projectId,\n id,\n name,\n input.kind,\n input.subject.type,\n subjectId,\n tokenHash,\n serializeOptionalStringArray(groupIds),\n input.createdByPrincipal?.type ?? null,\n input.createdByPrincipal?.id ?? null,\n input.createdBySessionId ?? null,\n toIso(input.createdAt),\n toIso(input.expiresAt)\n )\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_access_token\",\n `[Sixb] Access token '${id}' already exists for project '${projectId}'.`\n )\n }\n\n const row = db\n .query(\"SELECT * FROM auth_access_tokens WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as SqliteAuthAccessTokenRow | null\n const token = row ? rowToAccessTokenRecord(row) : null\n if (!token) {\n throw new AuthStorageError(\n \"missing_access_token\",\n `[Sixb] Access token '${id}' not found for project '${projectId}'.`\n )\n }\n return token\n}\n\nexport class SqliteAuthAccessTokenStore implements AuthAccessTokenStore {\n constructor(private readonly db: Database) {}\n\n async create(input: CreateAuthAccessTokenInput): Promise<AccessTokenRecord> {\n return createAuthAccessToken(this.db, input)\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<AccessTokenRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM auth_access_tokens WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as SqliteAuthAccessTokenRow | null\n return row ? rowToAccessTokenRecord(row) : null\n }\n\n async list(input: ListAuthAccessTokensInput): Promise<ListAuthAccessTokensResult> {\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n if (input.kind) {\n whereClauses.push(\"kind = ?\")\n args.push(input.kind)\n }\n if (input.subject) {\n whereClauses.push(\"subject_type = ?\", \"subject_id = ?\")\n args.push(input.subject.type, input.subject.id)\n }\n if (!input.includeRevoked) {\n whereClauses.push(\"revoked_at IS NULL\")\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"desc\" ? \"DESC\" : \"ASC\"\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM auth_access_tokens ${where}`)\n .get(...args) as { readonly count: number }\n const queryArgs = [...args]\n const query = appendPagination(\n `\n SELECT *\n FROM auth_access_tokens\n ${where}\n ORDER BY created_at ${order}, id ${order}\n `,\n queryArgs,\n input\n )\n const rows = this.db.query(query).all(...queryArgs) as SqliteAuthAccessTokenRow[]\n\n return {\n accessTokens: rows.map(rowToAccessTokenRecord),\n hasMore:\n input.limit === undefined ? false : (input.offset ?? 0) + input.limit < totalRow.count,\n total: totalRow.count,\n }\n }\n\n async findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly kind: AccessTokenRecord[\"kind\"]\n readonly tokenHash: string\n readonly now: Date\n }): Promise<AccessTokenRecord | null> {\n const row = this.db\n .query(\n `\n SELECT *\n FROM auth_access_tokens\n WHERE project_id = ?\n AND id = ?\n AND kind = ?\n AND token_hash = ?\n AND revoked_at IS NULL\n AND expires_at > ?\n `\n )\n .get(\n params.projectId,\n params.id,\n params.kind,\n params.tokenHash,\n toIso(params.now)\n ) as SqliteAuthAccessTokenRow | null\n\n return row ? rowToAccessTokenRecord(row) : null\n }\n\n async revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<AccessTokenRecord> {\n const existing = await this.getById(params)\n if (!existing) {\n throw new AuthStorageError(\n \"missing_access_token\",\n `[Sixb] Access token '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE auth_access_tokens\n SET revoked_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(toIso(params.revokedAt), params.projectId, params.id)\n\n return { ...existing, revokedAt: new Date(params.revokedAt) }\n }\n\n async touch(params: {\n readonly projectId: string\n readonly id: string\n readonly lastUsedAt: Date\n readonly userAgent?: string\n readonly ipAddress?: string\n }): Promise<AccessTokenRecord> {\n const existing = await this.getById(params)\n if (!existing) {\n throw new AuthStorageError(\n \"missing_access_token\",\n `[Sixb] Access token '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n\n const lastUsedUserAgent = params.userAgent ?? existing.lastUsedUserAgent\n const lastUsedIpAddress = params.ipAddress ?? existing.lastUsedIpAddress\n\n this.db\n .query(\n `\n UPDATE auth_access_tokens\n SET last_used_at = ?,\n last_used_user_agent = ?,\n last_used_ip_address = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(\n toIso(params.lastUsedAt),\n lastUsedUserAgent ?? null,\n lastUsedIpAddress ?? null,\n params.projectId,\n params.id\n )\n\n return {\n ...existing,\n lastUsedAt: new Date(params.lastUsedAt),\n lastUsedUserAgent,\n lastUsedIpAddress,\n }\n }\n}\n\nfunction assertSubjectExists(\n db: Database,\n projectId: string,\n subjectType: CreateAuthAccessTokenInput[\"subject\"][\"type\"],\n subjectId: string\n): void {\n if (subjectType === \"user\") {\n const row = db\n .query(\"SELECT * FROM auth_users WHERE project_id = ? AND id = ?\")\n .get(projectId, subjectId) as SqliteAuthUserRow | null\n if (row) return\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${subjectId}' not found for project '${projectId}'.`\n )\n }\n\n const row = db\n .query(\"SELECT * FROM auth_service_accounts WHERE project_id = ? AND id = ?\")\n .get(projectId, subjectId) as SqliteAuthServiceAccountRow | null\n if (row) return\n throw new AuthStorageError(\n \"missing_service_account\",\n `[Sixb] Service account '${subjectId}' not found for project '${projectId}'.`\n )\n}\n\nfunction assertKindMatchesSubject(input: CreateAuthAccessTokenInput): void {\n if (\n (input.kind === \"personal\" && input.subject.type === \"user\") ||\n (input.kind === \"serviceAccount\" && input.subject.type === \"serviceAccount\")\n ) {\n return\n }\n\n throw new AuthStorageError(\n \"invalid_input\",\n `[Sixb] Access token kind '${input.kind}' cannot target subject type '${input.subject.type}'.`\n )\n}\n",
23
- "import type { Principal } from \"@sixb/core\"\nimport type {\n AccessTokenRecord,\n DeviceAuthorizationRecord,\n GroupMembershipRecord,\n GroupMembershipSource,\n InvitationRecord,\n InvitationStatus,\n MagicLinkRecord,\n OidcAuthorizationAttemptRecord,\n ServiceAccountGroupMembershipRecord,\n ServiceAccountRecord,\n ServiceAccountStatus,\n SessionRecord,\n UserIdentityRecord,\n UserRecord,\n UserStatus,\n} from \"@sixb/core/storage\"\n\nexport interface SqliteAuthUserRow {\n readonly project_id: string\n readonly id: string\n readonly email: string\n readonly display_name: string | null\n readonly avatar_url: string | null\n readonly status: UserStatus\n readonly created_at: string\n readonly updated_at: string\n}\n\nexport interface SqliteAuthUserIdentityRow {\n readonly project_id: string\n readonly strategy_id: string\n readonly subject: string\n readonly user_id: string\n readonly claims: string | null\n readonly created_at: string\n readonly updated_at: string\n}\n\nexport interface SqliteAuthServiceAccountRow {\n readonly project_id: string\n readonly id: string\n readonly name: string\n readonly description: string | null\n readonly status: ServiceAccountStatus\n readonly created_by_principal_type: Principal[\"type\"] | null\n readonly created_by_principal_id: string | null\n readonly created_by_session_id: string | null\n readonly created_at: string\n readonly updated_at: string\n}\n\nexport interface SqliteAuthServiceAccountGroupMembershipRow {\n readonly project_id: string\n readonly service_account_id: string\n readonly group_id: string\n readonly source: GroupMembershipSource\n readonly created_at: string\n}\n\nexport interface SqliteAuthSessionRow {\n readonly project_id: string\n readonly id: string\n readonly user_id: string\n readonly strategy_id: string\n readonly audience: SessionRecord[\"audience\"]\n readonly token_hash: string\n readonly created_at: string\n readonly expires_at: string\n readonly absolute_expires_at: string | null\n readonly revoked_at: string | null\n readonly last_seen_at: string | null\n readonly user_agent: string | null\n readonly ip_address: string | null\n readonly client_name: string | null\n readonly access_expires_at: string | null\n readonly refresh_token_hash: string | null\n readonly previous_refresh_token_hash: string | null\n readonly refreshed_at: string | null\n}\n\nexport interface SqliteAuthAccessTokenRow {\n readonly project_id: string\n readonly id: string\n readonly name: string\n readonly kind: AccessTokenRecord[\"kind\"]\n readonly subject_type: AccessTokenRecord[\"subject\"][\"type\"]\n readonly subject_id: string\n readonly token_hash: string\n readonly group_ids: string | null\n readonly created_by_principal_type: Principal[\"type\"] | null\n readonly created_by_principal_id: string | null\n readonly created_by_session_id: string | null\n readonly created_at: string\n readonly expires_at: string\n readonly revoked_at: string | null\n readonly last_used_at: string | null\n readonly last_used_user_agent: string | null\n readonly last_used_ip_address: string | null\n}\n\nexport interface SqliteAuthInvitationRow {\n readonly project_id: string\n readonly id: string\n readonly email: string\n readonly status: InvitationStatus\n readonly created_by_principal_type: Principal[\"type\"] | null\n readonly created_by_principal_id: string | null\n readonly created_by_session_id: string | null\n readonly created_at: string\n readonly updated_at: string\n readonly expires_at: string\n readonly accepted_at: string | null\n readonly revoked_at: string | null\n}\n\nexport interface SqliteAuthGroupMembershipRow {\n readonly project_id: string\n readonly user_id: string\n readonly group_id: string\n readonly source: GroupMembershipSource\n readonly created_at: string\n}\n\nexport interface SqliteAuthMagicLinkRow {\n readonly project_id: string\n readonly id: string\n readonly strategy_id: string\n readonly audience: MagicLinkRecord[\"audience\"]\n readonly email: string\n readonly token_hash: string\n readonly return_to: string | null\n readonly created_at: string\n readonly expires_at: string\n readonly consumed_at: string | null\n readonly revoked_at: string | null\n}\n\nexport interface SqliteAuthOidcAttemptRow {\n readonly project_id: string\n readonly id: string\n readonly strategy_id: string\n readonly audience: OidcAuthorizationAttemptRecord[\"audience\"]\n readonly state_hash: string\n readonly nonce_hash: string\n readonly code_verifier: string\n readonly return_to: string | null\n readonly created_at: string\n readonly expires_at: string\n readonly consumed_at: string | null\n}\n\nexport interface SqliteAuthDeviceAuthorizationRow {\n readonly project_id: string\n readonly id: string\n readonly device_code_hash: string\n readonly user_code: string\n readonly client_name: string\n readonly status: DeviceAuthorizationRecord[\"status\"]\n readonly approved_user_id: string | null\n readonly approved_session_id: string | null\n readonly created_at: string\n readonly expires_at: string\n readonly approved_at: string | null\n readonly denied_at: string | null\n readonly consumed_at: string | null\n}\n\nexport function rowToUserRecord(row: SqliteAuthUserRow): UserRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n email: row.email,\n displayName: row.display_name ?? undefined,\n avatarUrl: row.avatar_url ?? undefined,\n status: row.status,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToIdentityRecord(row: SqliteAuthUserIdentityRow): UserIdentityRecord {\n return {\n projectId: row.project_id,\n strategyId: row.strategy_id,\n subject: row.subject,\n userId: row.user_id,\n claims: parseOptionalRecord(row.claims),\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToServiceAccountRecord(row: SqliteAuthServiceAccountRow): ServiceAccountRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n name: row.name,\n description: row.description ?? undefined,\n status: row.status,\n createdByPrincipal:\n row.created_by_principal_type && row.created_by_principal_id\n ? {\n type: row.created_by_principal_type,\n id: row.created_by_principal_id,\n }\n : undefined,\n createdBySessionId: row.created_by_session_id ?? undefined,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToServiceAccountGroupMembershipRecord(\n row: SqliteAuthServiceAccountGroupMembershipRow\n): ServiceAccountGroupMembershipRecord {\n return {\n projectId: row.project_id,\n serviceAccountId: row.service_account_id,\n groupId: row.group_id,\n source: row.source,\n createdAt: new Date(row.created_at),\n }\n}\n\nexport function rowToSessionRecord(row: SqliteAuthSessionRow): SessionRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n userId: row.user_id,\n strategyId: row.strategy_id,\n audience: row.audience,\n tokenHash: row.token_hash,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n absoluteExpiresAt: row.absolute_expires_at ? new Date(row.absolute_expires_at) : undefined,\n revokedAt: row.revoked_at ? new Date(row.revoked_at) : undefined,\n lastSeenAt: row.last_seen_at ? new Date(row.last_seen_at) : undefined,\n userAgent: row.user_agent ?? undefined,\n ipAddress: row.ip_address ?? undefined,\n bearer:\n row.refresh_token_hash !== null && row.client_name !== null && row.access_expires_at !== null\n ? {\n clientName: row.client_name,\n accessExpiresAt: new Date(row.access_expires_at),\n refreshTokenHash: row.refresh_token_hash,\n previousRefreshTokenHash: row.previous_refresh_token_hash ?? undefined,\n refreshedAt: row.refreshed_at ? new Date(row.refreshed_at) : undefined,\n }\n : undefined,\n }\n}\n\nexport function rowToAccessTokenRecord(row: SqliteAuthAccessTokenRow): AccessTokenRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n name: row.name,\n kind: row.kind,\n subject: { type: row.subject_type, id: row.subject_id },\n tokenHash: row.token_hash,\n groupIds: parseOptionalStringArray(row.group_ids),\n createdByPrincipal:\n row.created_by_principal_type && row.created_by_principal_id\n ? {\n type: row.created_by_principal_type,\n id: row.created_by_principal_id,\n }\n : undefined,\n createdBySessionId: row.created_by_session_id ?? undefined,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n revokedAt: row.revoked_at ? new Date(row.revoked_at) : undefined,\n lastUsedAt: row.last_used_at ? new Date(row.last_used_at) : undefined,\n lastUsedUserAgent: row.last_used_user_agent ?? undefined,\n lastUsedIpAddress: row.last_used_ip_address ?? undefined,\n }\n}\n\nexport function rowToInvitationRecord(\n row: SqliteAuthInvitationRow,\n groupIds: readonly string[]\n): InvitationRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n email: row.email,\n groupIds,\n status: row.status,\n createdByPrincipal:\n row.created_by_principal_type && row.created_by_principal_id\n ? {\n type: row.created_by_principal_type,\n id: row.created_by_principal_id,\n }\n : undefined,\n createdBySessionId: row.created_by_session_id ?? undefined,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n expiresAt: new Date(row.expires_at),\n acceptedAt: row.accepted_at ? new Date(row.accepted_at) : undefined,\n revokedAt: row.revoked_at ? new Date(row.revoked_at) : undefined,\n }\n}\n\nexport function rowToGroupMembershipRecord(\n row: SqliteAuthGroupMembershipRow\n): GroupMembershipRecord {\n return {\n projectId: row.project_id,\n userId: row.user_id,\n groupId: row.group_id,\n source: row.source,\n createdAt: new Date(row.created_at),\n }\n}\n\nexport function rowToMagicLinkRecord(row: SqliteAuthMagicLinkRow): MagicLinkRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n strategyId: row.strategy_id,\n audience: row.audience,\n email: row.email,\n tokenHash: row.token_hash,\n returnTo: row.return_to ?? undefined,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n consumedAt: row.consumed_at ? new Date(row.consumed_at) : undefined,\n revokedAt: row.revoked_at ? new Date(row.revoked_at) : undefined,\n }\n}\n\nexport function rowToOidcAuthorizationAttemptRecord(\n row: SqliteAuthOidcAttemptRow\n): OidcAuthorizationAttemptRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n strategyId: row.strategy_id,\n audience: row.audience,\n stateHash: row.state_hash,\n nonceHash: row.nonce_hash,\n codeVerifier: row.code_verifier,\n returnTo: row.return_to ?? undefined,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n consumedAt: row.consumed_at ? new Date(row.consumed_at) : undefined,\n }\n}\n\nexport function rowToDeviceAuthorizationRecord(\n row: SqliteAuthDeviceAuthorizationRow\n): DeviceAuthorizationRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n deviceCodeHash: row.device_code_hash,\n userCode: row.user_code,\n clientName: row.client_name,\n status: row.status,\n approvedUserId: row.approved_user_id ?? undefined,\n approvedSessionId: row.approved_session_id ?? undefined,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n approvedAt: row.approved_at ? new Date(row.approved_at) : undefined,\n deniedAt: row.denied_at ? new Date(row.denied_at) : undefined,\n consumedAt: row.consumed_at ? new Date(row.consumed_at) : undefined,\n }\n}\n\nexport function serializeOptionalRecord(\n value: Readonly<Record<string, unknown>> | undefined\n): string | null {\n return value ? JSON.stringify(value) : null\n}\n\nexport function serializeOptionalStringArray(value: readonly string[] | undefined): string | null {\n return value === undefined ? null : JSON.stringify(value)\n}\n\nfunction parseOptionalRecord(value: string | null): Readonly<Record<string, unknown>> | undefined {\n return value ? (JSON.parse(value) as Readonly<Record<string, unknown>>) : undefined\n}\n\nfunction parseOptionalStringArray(value: string | null): readonly string[] | undefined {\n return value === null ? undefined : (JSON.parse(value) as readonly string[])\n}\n",
23
+ "import type { Principal } from \"@sixb/core\"\nimport type {\n AccessTokenRecord,\n DeviceAuthorizationRecord,\n GroupMembershipRecord,\n GroupMembershipSource,\n InvitationRecord,\n InvitationStatus,\n MagicLinkRecord,\n OidcAuthorizationAttemptRecord,\n ServiceAccountGroupMembershipRecord,\n ServiceAccountRecord,\n ServiceAccountStatus,\n SessionRecord,\n UserIdentityRecord,\n UserRecord,\n UserStatus,\n} from \"@sixb/core/storage\"\n\nexport interface SqliteAuthUserRow {\n readonly project_id: string\n readonly id: string\n readonly email: string\n readonly display_name: string | null\n readonly avatar_url: string | null\n readonly status: UserStatus\n readonly created_at: string\n readonly updated_at: string\n}\n\nexport interface SqliteAuthUserIdentityRow {\n readonly project_id: string\n readonly strategy_id: string\n readonly subject: string\n readonly user_id: string\n readonly claims: string | null\n readonly created_at: string\n readonly updated_at: string\n}\n\nexport interface SqliteAuthServiceAccountRow {\n readonly project_id: string\n readonly id: string\n readonly name: string\n readonly description: string | null\n readonly status: ServiceAccountStatus\n readonly created_by_principal_type: Principal[\"type\"] | null\n readonly created_by_principal_id: string | null\n readonly created_by_session_id: string | null\n readonly created_at: string\n readonly updated_at: string\n}\n\nexport interface SqliteAuthServiceAccountGroupMembershipRow {\n readonly project_id: string\n readonly service_account_id: string\n readonly group_id: string\n readonly source: ServiceAccountGroupMembershipRecord[\"source\"]\n readonly created_at: string\n}\n\nexport interface SqliteAuthSessionRow {\n readonly project_id: string\n readonly id: string\n readonly user_id: string\n readonly strategy_id: string\n readonly audience: SessionRecord[\"audience\"]\n readonly token_hash: string\n readonly created_at: string\n readonly expires_at: string\n readonly absolute_expires_at: string | null\n readonly revoked_at: string | null\n readonly last_seen_at: string | null\n readonly user_agent: string | null\n readonly ip_address: string | null\n readonly client_name: string | null\n readonly access_expires_at: string | null\n readonly refresh_token_hash: string | null\n readonly previous_refresh_token_hash: string | null\n readonly refreshed_at: string | null\n}\n\nexport interface SqliteAuthAccessTokenRow {\n readonly project_id: string\n readonly id: string\n readonly name: string\n readonly kind: AccessTokenRecord[\"kind\"]\n readonly subject_type: AccessTokenRecord[\"subject\"][\"type\"]\n readonly subject_id: string\n readonly token_hash: string\n readonly group_ids: string | null\n readonly created_by_principal_type: Principal[\"type\"] | null\n readonly created_by_principal_id: string | null\n readonly created_by_session_id: string | null\n readonly created_at: string\n readonly expires_at: string\n readonly revoked_at: string | null\n readonly last_used_at: string | null\n readonly last_used_user_agent: string | null\n readonly last_used_ip_address: string | null\n}\n\nexport interface SqliteAuthInvitationRow {\n readonly project_id: string\n readonly id: string\n readonly email: string\n readonly status: InvitationStatus\n readonly created_by_principal_type: Principal[\"type\"] | null\n readonly created_by_principal_id: string | null\n readonly created_by_session_id: string | null\n readonly created_at: string\n readonly updated_at: string\n readonly expires_at: string\n readonly accepted_at: string | null\n readonly revoked_at: string | null\n}\n\nexport interface SqliteAuthGroupMembershipRow {\n readonly project_id: string\n readonly user_id: string\n readonly group_id: string\n readonly source: GroupMembershipSource\n readonly created_at: string\n}\n\nexport interface SqliteAuthMagicLinkRow {\n readonly project_id: string\n readonly id: string\n readonly strategy_id: string\n readonly audience: MagicLinkRecord[\"audience\"]\n readonly email: string\n readonly token_hash: string\n readonly return_to: string | null\n readonly created_at: string\n readonly expires_at: string\n readonly consumed_at: string | null\n readonly revoked_at: string | null\n}\n\nexport interface SqliteAuthOidcAttemptRow {\n readonly project_id: string\n readonly id: string\n readonly strategy_id: string\n readonly audience: OidcAuthorizationAttemptRecord[\"audience\"]\n readonly state_hash: string\n readonly nonce_hash: string\n readonly code_verifier: string\n readonly return_to: string | null\n readonly created_at: string\n readonly expires_at: string\n readonly consumed_at: string | null\n}\n\nexport interface SqliteAuthDeviceAuthorizationRow {\n readonly project_id: string\n readonly id: string\n readonly device_code_hash: string\n readonly user_code: string\n readonly client_name: string\n readonly status: DeviceAuthorizationRecord[\"status\"]\n readonly approved_user_id: string | null\n readonly approved_session_id: string | null\n readonly created_at: string\n readonly expires_at: string\n readonly approved_at: string | null\n readonly denied_at: string | null\n readonly consumed_at: string | null\n}\n\nexport function rowToUserRecord(row: SqliteAuthUserRow): UserRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n email: row.email,\n displayName: row.display_name ?? undefined,\n avatarUrl: row.avatar_url ?? undefined,\n status: row.status,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToIdentityRecord(row: SqliteAuthUserIdentityRow): UserIdentityRecord {\n return {\n projectId: row.project_id,\n strategyId: row.strategy_id,\n subject: row.subject,\n userId: row.user_id,\n claims: parseOptionalRecord(row.claims),\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToServiceAccountRecord(row: SqliteAuthServiceAccountRow): ServiceAccountRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n name: row.name,\n description: row.description ?? undefined,\n status: row.status,\n createdByPrincipal:\n row.created_by_principal_type && row.created_by_principal_id\n ? {\n type: row.created_by_principal_type,\n id: row.created_by_principal_id,\n }\n : undefined,\n createdBySessionId: row.created_by_session_id ?? undefined,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToServiceAccountGroupMembershipRecord(\n row: SqliteAuthServiceAccountGroupMembershipRow\n): ServiceAccountGroupMembershipRecord {\n return {\n projectId: row.project_id,\n serviceAccountId: row.service_account_id,\n groupId: row.group_id,\n source: row.source,\n createdAt: new Date(row.created_at),\n }\n}\n\nexport function rowToSessionRecord(row: SqliteAuthSessionRow): SessionRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n userId: row.user_id,\n strategyId: row.strategy_id,\n audience: row.audience,\n tokenHash: row.token_hash,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n absoluteExpiresAt: row.absolute_expires_at ? new Date(row.absolute_expires_at) : undefined,\n revokedAt: row.revoked_at ? new Date(row.revoked_at) : undefined,\n lastSeenAt: row.last_seen_at ? new Date(row.last_seen_at) : undefined,\n userAgent: row.user_agent ?? undefined,\n ipAddress: row.ip_address ?? undefined,\n bearer:\n row.refresh_token_hash !== null && row.client_name !== null && row.access_expires_at !== null\n ? {\n clientName: row.client_name,\n accessExpiresAt: new Date(row.access_expires_at),\n refreshTokenHash: row.refresh_token_hash,\n previousRefreshTokenHash: row.previous_refresh_token_hash ?? undefined,\n refreshedAt: row.refreshed_at ? new Date(row.refreshed_at) : undefined,\n }\n : undefined,\n }\n}\n\nexport function rowToAccessTokenRecord(row: SqliteAuthAccessTokenRow): AccessTokenRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n name: row.name,\n kind: row.kind,\n subject: { type: row.subject_type, id: row.subject_id },\n tokenHash: row.token_hash,\n groupIds: parseOptionalStringArray(row.group_ids),\n createdByPrincipal:\n row.created_by_principal_type && row.created_by_principal_id\n ? {\n type: row.created_by_principal_type,\n id: row.created_by_principal_id,\n }\n : undefined,\n createdBySessionId: row.created_by_session_id ?? undefined,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n revokedAt: row.revoked_at ? new Date(row.revoked_at) : undefined,\n lastUsedAt: row.last_used_at ? new Date(row.last_used_at) : undefined,\n lastUsedUserAgent: row.last_used_user_agent ?? undefined,\n lastUsedIpAddress: row.last_used_ip_address ?? undefined,\n }\n}\n\nexport function rowToInvitationRecord(\n row: SqliteAuthInvitationRow,\n groupIds: readonly string[]\n): InvitationRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n email: row.email,\n groupIds,\n status: row.status,\n createdByPrincipal:\n row.created_by_principal_type && row.created_by_principal_id\n ? {\n type: row.created_by_principal_type,\n id: row.created_by_principal_id,\n }\n : undefined,\n createdBySessionId: row.created_by_session_id ?? undefined,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n expiresAt: new Date(row.expires_at),\n acceptedAt: row.accepted_at ? new Date(row.accepted_at) : undefined,\n revokedAt: row.revoked_at ? new Date(row.revoked_at) : undefined,\n }\n}\n\nexport function rowToGroupMembershipRecord(\n row: SqliteAuthGroupMembershipRow\n): GroupMembershipRecord {\n return {\n projectId: row.project_id,\n userId: row.user_id,\n groupId: row.group_id,\n source: row.source,\n createdAt: new Date(row.created_at),\n }\n}\n\nexport function rowToMagicLinkRecord(row: SqliteAuthMagicLinkRow): MagicLinkRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n strategyId: row.strategy_id,\n audience: row.audience,\n email: row.email,\n tokenHash: row.token_hash,\n returnTo: row.return_to ?? undefined,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n consumedAt: row.consumed_at ? new Date(row.consumed_at) : undefined,\n revokedAt: row.revoked_at ? new Date(row.revoked_at) : undefined,\n }\n}\n\nexport function rowToOidcAuthorizationAttemptRecord(\n row: SqliteAuthOidcAttemptRow\n): OidcAuthorizationAttemptRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n strategyId: row.strategy_id,\n audience: row.audience,\n stateHash: row.state_hash,\n nonceHash: row.nonce_hash,\n codeVerifier: row.code_verifier,\n returnTo: row.return_to ?? undefined,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n consumedAt: row.consumed_at ? new Date(row.consumed_at) : undefined,\n }\n}\n\nexport function rowToDeviceAuthorizationRecord(\n row: SqliteAuthDeviceAuthorizationRow\n): DeviceAuthorizationRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n deviceCodeHash: row.device_code_hash,\n userCode: row.user_code,\n clientName: row.client_name,\n status: row.status,\n approvedUserId: row.approved_user_id ?? undefined,\n approvedSessionId: row.approved_session_id ?? undefined,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n approvedAt: row.approved_at ? new Date(row.approved_at) : undefined,\n deniedAt: row.denied_at ? new Date(row.denied_at) : undefined,\n consumedAt: row.consumed_at ? new Date(row.consumed_at) : undefined,\n }\n}\n\nexport function serializeOptionalRecord(\n value: Readonly<Record<string, unknown>> | undefined\n): string | null {\n return value ? JSON.stringify(value) : null\n}\n\nexport function serializeOptionalStringArray(value: readonly string[] | undefined): string | null {\n return value === undefined ? null : JSON.stringify(value)\n}\n\nfunction parseOptionalRecord(value: string | null): Readonly<Record<string, unknown>> | undefined {\n return value ? (JSON.parse(value) as Readonly<Record<string, unknown>>) : undefined\n}\n\nfunction parseOptionalStringArray(value: string | null): readonly string[] | undefined {\n return value === null ? undefined : (JSON.parse(value) as readonly string[])\n}\n",
24
24
  "import type { Database } from \"bun:sqlite\"\nimport type { AuthSessionAudience } from \"@sixb/core\"\nimport type {\n CompleteAuthSessionInput,\n CreateAuthSessionInput,\n GroupMembershipRecord,\n InvitationRecord,\n MagicLinkRecord,\n OidcAuthorizationAttemptRecord,\n UpsertAuthGroupMembershipInput,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport { isUniqueConstraintError } from \"../storage-errors\"\nimport type {\n SqliteAuthGroupMembershipRow,\n SqliteAuthInvitationRow,\n SqliteAuthMagicLinkRow,\n SqliteAuthOidcAttemptRow,\n SqliteAuthSessionRow,\n SqliteAuthUserIdentityRow,\n SqliteAuthUserRow,\n} from \"./rows\"\nimport {\n rowToGroupMembershipRecord,\n rowToInvitationRecord,\n rowToMagicLinkRecord,\n rowToOidcAuthorizationAttemptRecord,\n rowToSessionRecord,\n} from \"./rows\"\n\nexport type SqliteValue = string | number | null\n\nexport function assertNonEmpty(value: string, label: string): string {\n const normalized = value.trim()\n if (!normalized) {\n throw new AuthStorageError(\"invalid_input\", `[Sixb] ${label} must be a non-empty string.`)\n }\n return normalized\n}\n\nexport function normalizeEmail(email: string): string {\n return assertNonEmpty(email, \"Email\").toLowerCase()\n}\n\nexport function normalizeGroupIds(groupIds: readonly string[] | undefined): readonly string[] {\n return [...new Set((groupIds ?? []).map((groupId) => assertNonEmpty(groupId, \"Group id\")))]\n}\n\nexport function dateOrNow(value: Date | undefined): Date {\n return value ? new Date(value) : new Date()\n}\n\nexport function toIso(value: Date): string {\n return value.toISOString()\n}\n\nexport function hasEmptyFilter(values: readonly unknown[] | undefined): boolean {\n return values !== undefined && values.length === 0\n}\n\nexport function appendPagination(\n query: string,\n args: SqliteValue[],\n input: { readonly limit?: number; readonly offset?: number }\n): string {\n const offset = input.offset ?? 0\n\n if (input.limit !== undefined) {\n args.push(input.limit, offset)\n return `${query} LIMIT ? OFFSET ?`\n }\n\n if (offset > 0) {\n args.push(offset)\n return `${query} LIMIT -1 OFFSET ?`\n }\n\n return query\n}\n\nexport function getUserRowById(\n db: Database,\n params: { readonly projectId: string; readonly id: string }\n): SqliteAuthUserRow | null {\n return db\n .query(\"SELECT * FROM auth_users WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as SqliteAuthUserRow | null\n}\n\nexport function getUserRowByEmail(\n db: Database,\n params: { readonly projectId: string; readonly email: string }\n): SqliteAuthUserRow | null {\n return db\n .query(\"SELECT * FROM auth_users WHERE project_id = ? AND email = ?\")\n .get(params.projectId, normalizeEmail(params.email)) as SqliteAuthUserRow | null\n}\n\nexport function getIdentityRowBySubject(\n db: Database,\n params: {\n readonly projectId: string\n readonly strategyId: string\n readonly subject: string\n }\n): SqliteAuthUserIdentityRow | null {\n return db\n .query(\n `\n SELECT *\n FROM auth_user_identities\n WHERE project_id = ?\n AND strategy_id = ?\n AND subject = ?\n `\n )\n .get(params.projectId, params.strategyId, params.subject) as SqliteAuthUserIdentityRow | null\n}\n\nexport function getSessionRowById(\n db: Database,\n params: { readonly projectId: string; readonly id: string }\n): SqliteAuthSessionRow | null {\n return db\n .query(\"SELECT * FROM auth_sessions WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as SqliteAuthSessionRow | null\n}\n\nexport function getSessionById(\n db: Database,\n params: { readonly projectId: string; readonly id: string }\n): ReturnType<typeof rowToSessionRecord> | null {\n const row = getSessionRowById(db, params)\n return row ? rowToSessionRecord(row) : null\n}\n\nexport function requireSessionById(\n db: Database,\n params: { readonly projectId: string; readonly id: string }\n): ReturnType<typeof rowToSessionRecord> {\n const session = getSessionById(db, params)\n if (!session) {\n throw new AuthStorageError(\n \"missing_session\",\n `[Sixb] Session '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n return session\n}\n\nexport function getInvitationGroupIds(\n db: Database,\n params: { readonly projectId: string; readonly invitationId: string }\n): readonly string[] {\n const rows = db\n .query(\n `\n SELECT group_id\n FROM auth_invitation_groups\n WHERE project_id = ?\n AND invitation_id = ?\n ORDER BY position ASC, group_id ASC\n `\n )\n .all(params.projectId, params.invitationId) as Array<{ readonly group_id: string }>\n\n return rows.map((row) => row.group_id)\n}\n\nexport function getInvitationById(\n db: Database,\n params: { readonly projectId: string; readonly id: string }\n): InvitationRecord | null {\n const row = db\n .query(\"SELECT * FROM auth_invitations WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as SqliteAuthInvitationRow | null\n\n return row ? invitationRowToRecord(db, row) : null\n}\n\nexport function requireInvitationById(\n db: Database,\n params: { readonly projectId: string; readonly id: string }\n): InvitationRecord {\n const invitation = getInvitationById(db, params)\n if (!invitation) {\n throw new AuthStorageError(\n \"missing_invitation\",\n `[Sixb] Invitation '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n return invitation\n}\n\nexport function getActiveInvitationByEmail(\n db: Database,\n params: { readonly projectId: string; readonly email: string; readonly now: Date }\n): InvitationRecord | null {\n const row = db\n .query(\n `\n SELECT *\n FROM auth_invitations\n WHERE project_id = ?\n AND email = ?\n AND status = 'pending'\n AND expires_at > ?\n ORDER BY created_at DESC, id DESC\n LIMIT 1\n `\n )\n .get(\n params.projectId,\n normalizeEmail(params.email),\n toIso(params.now)\n ) as SqliteAuthInvitationRow | null\n\n return row ? invitationRowToRecord(db, row) : null\n}\n\nexport function replaceInvitationGroups(\n db: Database,\n params: {\n readonly projectId: string\n readonly invitationId: string\n readonly groupIds: readonly string[]\n }\n): void {\n db.query(\"DELETE FROM auth_invitation_groups WHERE project_id = ? AND invitation_id = ?\").run(\n params.projectId,\n params.invitationId\n )\n\n for (const [index, groupId] of params.groupIds.entries()) {\n db.query(\n `\n INSERT INTO auth_invitation_groups (\n project_id,\n invitation_id,\n group_id,\n position\n ) VALUES (?, ?, ?, ?)\n `\n ).run(params.projectId, params.invitationId, groupId, index)\n }\n}\n\nexport function getMagicLinkRowById(\n db: Database,\n params: { readonly projectId: string; readonly id: string }\n): SqliteAuthMagicLinkRow | null {\n return db\n .query(\"SELECT * FROM auth_magic_links WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as SqliteAuthMagicLinkRow | null\n}\n\nexport function getMagicLinkById(\n db: Database,\n params: { readonly projectId: string; readonly id: string }\n): MagicLinkRecord | null {\n const row = getMagicLinkRowById(db, params)\n return row ? rowToMagicLinkRecord(row) : null\n}\n\nexport function consumeMagicLink(\n db: Database,\n params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly consumedAt: Date\n }\n): MagicLinkRecord {\n const projectId = assertNonEmpty(params.projectId, \"Project id\")\n const id = assertNonEmpty(params.id, \"Magic link id\")\n const tokenHash = assertNonEmpty(params.tokenHash, \"Magic link token hash\")\n const row = getMagicLinkRowById(db, { projectId, id })\n\n if (!row) {\n throw new AuthStorageError(\n \"missing_magic_link\",\n `[Sixb] Magic link '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.token_hash !== tokenHash || row.consumed_at || row.revoked_at) {\n throw new AuthStorageError(\n \"invalid_magic_link\",\n `[Sixb] Magic link '${id}' is not valid for project '${projectId}'.`\n )\n }\n\n if (new Date(row.expires_at) <= params.consumedAt) {\n throw new AuthStorageError(\n \"expired_magic_link\",\n `[Sixb] Magic link '${id}' is expired for project '${projectId}'.`\n )\n }\n\n db.query(\n `\n UPDATE auth_magic_links\n SET consumed_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n ).run(toIso(params.consumedAt), projectId, id)\n\n return rowToMagicLinkRecord({\n ...row,\n consumed_at: toIso(params.consumedAt),\n })\n}\n\nexport function getOidcAttemptRowById(\n db: Database,\n params: { readonly projectId: string; readonly id: string }\n): SqliteAuthOidcAttemptRow | null {\n return db\n .query(\"SELECT * FROM auth_oidc_authorization_attempts WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as SqliteAuthOidcAttemptRow | null\n}\n\nexport function getOidcAttemptById(\n db: Database,\n params: { readonly projectId: string; readonly id: string }\n): OidcAuthorizationAttemptRecord | null {\n const row = getOidcAttemptRowById(db, params)\n return row ? rowToOidcAuthorizationAttemptRecord(row) : null\n}\n\nexport function consumeOidcAttempt(\n db: Database,\n params: {\n readonly projectId: string\n readonly id: string\n readonly stateHash: string\n readonly consumedAt: Date\n }\n): OidcAuthorizationAttemptRecord {\n const projectId = assertNonEmpty(params.projectId, \"Project id\")\n const id = assertNonEmpty(params.id, \"OIDC authorization attempt id\")\n const stateHash = assertNonEmpty(params.stateHash, \"OIDC state hash\")\n const row = getOidcAttemptRowById(db, { projectId, id })\n\n if (!row) {\n throw new AuthStorageError(\n \"missing_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.state_hash !== stateHash || row.consumed_at) {\n throw new AuthStorageError(\n \"invalid_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' is not valid for project '${projectId}'.`\n )\n }\n\n if (new Date(row.expires_at) <= params.consumedAt) {\n throw new AuthStorageError(\n \"expired_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' is expired for project '${projectId}'.`\n )\n }\n\n db.query(\n `\n UPDATE auth_oidc_authorization_attempts\n SET consumed_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n ).run(toIso(params.consumedAt), projectId, id)\n\n return rowToOidcAuthorizationAttemptRecord({\n ...row,\n consumed_at: toIso(params.consumedAt),\n })\n}\n\nexport function validateCompleteSessionInput(\n db: Database,\n projectId: string,\n session: CompleteAuthSessionInput\n): void {\n const sessionId = assertNonEmpty(session.id, \"Session id\")\n assertNonEmpty(session.audience, \"Session audience\")\n assertNonEmpty(session.tokenHash, \"Session token hash\")\n assertSessionIdAvailable(db, projectId, sessionId)\n}\n\nexport function assertSessionIdAvailable(db: Database, projectId: string, sessionId: string): void {\n if (getSessionRowById(db, { projectId, id: sessionId })) {\n throw new AuthStorageError(\n \"duplicate_session\",\n `[Sixb] Session '${sessionId}' already exists for project '${projectId}'.`\n )\n }\n}\n\nexport function createSession(\n db: Database,\n input: CreateAuthSessionInput\n): ReturnType<typeof rowToSessionRecord> {\n const id = assertNonEmpty(input.id, \"Session id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const userId = assertNonEmpty(input.userId, \"User id\")\n const strategyId = assertNonEmpty(input.strategyId, \"Strategy id\")\n const audience = assertNonEmpty(input.audience, \"Session audience\")\n const tokenHash = assertNonEmpty(input.tokenHash, \"Session token hash\")\n\n assertSessionIdAvailable(db, projectId, id)\n\n db.query(\n `\n INSERT INTO auth_sessions (\n project_id,\n id,\n user_id,\n strategy_id,\n audience,\n token_hash,\n created_at,\n expires_at,\n absolute_expires_at,\n user_agent,\n ip_address,\n client_name,\n access_expires_at,\n refresh_token_hash\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n ).run(\n projectId,\n id,\n userId,\n strategyId,\n audience,\n tokenHash,\n toIso(input.createdAt),\n toIso(input.expiresAt),\n input.absoluteExpiresAt ? toIso(input.absoluteExpiresAt) : null,\n input.userAgent ?? null,\n input.ipAddress ?? null,\n input.bearer ? assertNonEmpty(input.bearer.clientName, \"Session client name\") : null,\n input.bearer ? toIso(input.bearer.accessExpiresAt) : null,\n input.bearer ? assertNonEmpty(input.bearer.refreshTokenHash, \"Refresh token hash\") : null\n )\n\n const session = getSessionById(db, { projectId, id })\n if (!session) {\n throw new AuthStorageError(\n \"missing_session\",\n `[Sixb] Failed to load session '${id}' for project '${projectId}'.`\n )\n }\n return session\n}\n\nexport function revokeActiveSessionsForUser(\n db: Database,\n params: {\n readonly projectId: string\n readonly userId: string\n readonly audience?: AuthSessionAudience\n readonly revokedAt: Date\n }\n): readonly ReturnType<typeof rowToSessionRecord>[] {\n const revokedAt = toIso(params.revokedAt)\n const audienceCondition = params.audience === undefined ? \"\" : \"AND audience = ?\"\n const selectArgs =\n params.audience === undefined\n ? [params.projectId, params.userId, revokedAt, revokedAt]\n : [params.projectId, params.userId, params.audience, revokedAt, revokedAt]\n const updateArgs =\n params.audience === undefined\n ? [revokedAt, params.projectId, params.userId, revokedAt, revokedAt]\n : [revokedAt, params.projectId, params.userId, params.audience, revokedAt, revokedAt]\n const rows = db\n .query(\n `\n SELECT *\n FROM auth_sessions\n WHERE project_id = ?\n AND user_id = ?\n ${audienceCondition}\n AND revoked_at IS NULL\n AND expires_at > ?\n AND (absolute_expires_at IS NULL OR absolute_expires_at > ?)\n ORDER BY created_at ASC, id ASC\n `\n )\n .all(...selectArgs) as SqliteAuthSessionRow[]\n\n db.query(\n `\n UPDATE auth_sessions\n SET revoked_at = ?\n WHERE project_id = ?\n AND user_id = ?\n ${audienceCondition}\n AND revoked_at IS NULL\n AND expires_at > ?\n AND (absolute_expires_at IS NULL OR absolute_expires_at > ?)\n `\n ).run(...updateArgs)\n\n return rows.map((row) =>\n rowToSessionRecord({\n ...row,\n revoked_at: revokedAt,\n })\n )\n}\n\nexport function upsertGroupMembership(\n db: Database,\n input: UpsertAuthGroupMembershipInput\n): GroupMembershipRecord {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const userId = assertNonEmpty(input.userId, \"User id\")\n const groupId = assertNonEmpty(input.groupId, \"Group id\")\n if (!getUserRowById(db, { projectId, id: userId })) {\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${userId}' not found for project '${projectId}'.`\n )\n }\n\n const existing = getGroupMembership(db, { projectId, userId, groupId })\n\n if (existing) {\n return existing\n }\n\n const createdAt = dateOrNow(input.createdAt)\n db.query(\n `\n INSERT INTO auth_group_memberships (\n project_id,\n user_id,\n group_id,\n source,\n created_at\n ) VALUES (?, ?, ?, ?, ?)\n `\n ).run(projectId, userId, groupId, input.source, toIso(createdAt))\n\n return {\n projectId,\n userId,\n groupId,\n source: input.source,\n createdAt,\n }\n}\n\nexport function removeGroupMembership(\n db: Database,\n params: { readonly projectId: string; readonly userId: string; readonly groupId: string }\n): GroupMembershipRecord | null {\n const projectId = assertNonEmpty(params.projectId, \"Project id\")\n const userId = assertNonEmpty(params.userId, \"User id\")\n const groupId = assertNonEmpty(params.groupId, \"Group id\")\n\n const existing = getGroupMembership(db, { projectId, userId, groupId })\n if (!existing) {\n return null\n }\n\n db.query(\n `\n DELETE FROM auth_group_memberships\n WHERE project_id = ?\n AND user_id = ?\n AND group_id = ?\n `\n ).run(projectId, userId, groupId)\n\n return existing\n}\n\nexport function getGroupMembership(\n db: Database,\n params: { readonly projectId: string; readonly userId: string; readonly groupId: string }\n): GroupMembershipRecord | null {\n const row = db\n .query(\n `\n SELECT *\n FROM auth_group_memberships\n WHERE project_id = ?\n AND user_id = ?\n AND group_id = ?\n `\n )\n .get(params.projectId, params.userId, params.groupId) as SqliteAuthGroupMembershipRow | null\n\n return row ? rowToGroupMembershipRecord(row) : null\n}\n\nexport function listMembershipsForUser(\n db: Database,\n params: { readonly projectId: string; readonly userId: string }\n): readonly GroupMembershipRecord[] {\n const rows = db\n .query(\n `\n SELECT *\n FROM auth_group_memberships\n WHERE project_id = ?\n AND user_id = ?\n ORDER BY group_id ASC\n `\n )\n .all(params.projectId, params.userId) as SqliteAuthGroupMembershipRow[]\n\n return rows.map(rowToGroupMembershipRecord)\n}\n\nexport function revokeActiveMagicLinksForEmail(\n db: Database,\n params: { readonly projectId: string; readonly email: string; readonly revokedAt: Date }\n): readonly MagicLinkRecord[] {\n const email = normalizeEmail(params.email)\n const revokedAt = toIso(params.revokedAt)\n const rows = db\n .query(\n `\n SELECT *\n FROM auth_magic_links\n WHERE project_id = ?\n AND email = ?\n AND consumed_at IS NULL\n AND revoked_at IS NULL\n AND expires_at > ?\n ORDER BY created_at ASC, id ASC\n `\n )\n .all(params.projectId, email, revokedAt) as SqliteAuthMagicLinkRow[]\n\n db.query(\n `\n UPDATE auth_magic_links\n SET revoked_at = ?\n WHERE project_id = ?\n AND email = ?\n AND consumed_at IS NULL\n AND revoked_at IS NULL\n AND expires_at > ?\n `\n ).run(revokedAt, params.projectId, email, revokedAt)\n\n return rows.map((row) =>\n rowToMagicLinkRecord({\n ...row,\n revoked_at: revokedAt,\n })\n )\n}\n\nexport function mapUniqueConstraintError(\n error: unknown,\n code:\n | \"duplicate_access_token\"\n | \"duplicate_device_authorization\"\n | \"duplicate_identity\"\n | \"duplicate_invitation\"\n | \"duplicate_magic_link\"\n | \"duplicate_oidc_attempt\"\n | \"duplicate_service_account\"\n | \"duplicate_session\"\n | \"duplicate_user\",\n message: string\n): never {\n if (isUniqueConstraintError(error)) {\n throw new AuthStorageError(code, message)\n }\n\n throw error\n}\n\nfunction invitationRowToRecord(db: Database, row: SqliteAuthInvitationRow): InvitationRecord {\n return rowToInvitationRecord(\n row,\n getInvitationGroupIds(db, {\n projectId: row.project_id,\n invitationId: row.id,\n })\n )\n}\n",
25
25
  "import type { Database } from \"bun:sqlite\"\nimport type {\n AuthDeviceAuthorizationStore,\n CreateDeviceAuthorizationInput,\n DeviceAuthorizationRecord,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError, MAX_PENDING_DEVICE_AUTHORIZATIONS } from \"@sixb/core/storage\"\nimport { runImmediateTransaction } from \"../transactions\"\nimport type { SqliteAuthDeviceAuthorizationRow } from \"./rows\"\nimport { rowToDeviceAuthorizationRecord } from \"./rows\"\nimport { assertNonEmpty, mapUniqueConstraintError, toIso } from \"./shared\"\n\nexport class SqliteAuthDeviceAuthorizationStore implements AuthDeviceAuthorizationStore {\n constructor(private readonly db: Database) {}\n\n async create(input: CreateDeviceAuthorizationInput): Promise<DeviceAuthorizationRecord> {\n return runImmediateTransaction(this.db, () => {\n this.db\n .query(\"DELETE FROM auth_device_authorizations WHERE project_id = ? AND expires_at <= ?\")\n .run(input.projectId, toIso(input.createdAt))\n const pending = this.db\n .query(\n \"SELECT COUNT(*) AS count FROM auth_device_authorizations WHERE project_id = ? AND status = 'pending'\"\n )\n .get(input.projectId) as { readonly count: number }\n if (pending.count >= MAX_PENDING_DEVICE_AUTHORIZATIONS) {\n throw new AuthStorageError(\n \"device_authorization_limit_exceeded\",\n `[Sixb] Project '${input.projectId}' has too many pending device authorizations.`\n )\n }\n try {\n this.db\n .query(`\n INSERT INTO auth_device_authorizations (\n project_id, id, device_code_hash, user_code, client_name, status, created_at,\n expires_at\n ) VALUES (?, ?, ?, ?, ?, 'pending', ?, ?)\n `)\n .run(\n assertNonEmpty(input.projectId, \"Project id\"),\n assertNonEmpty(input.id, \"Device authorization id\"),\n assertNonEmpty(input.deviceCodeHash, \"Device code hash\"),\n assertNonEmpty(input.userCode, \"User code\"),\n assertNonEmpty(input.clientName, \"Client name\"),\n toIso(input.createdAt),\n toIso(input.expiresAt)\n )\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_device_authorization\",\n `[Sixb] Device authorization '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n return requireById(this.db, input.projectId, input.id)\n })\n }\n\n async getById(params: { readonly projectId: string; readonly id: string }) {\n return getById(this.db, params.projectId, params.id)\n }\n\n async getByUserCode(params: { readonly projectId: string; readonly userCode: string }) {\n const row = this.db\n .query(\"SELECT * FROM auth_device_authorizations WHERE project_id = ? AND user_code = ?\")\n .get(params.projectId, params.userCode) as SqliteAuthDeviceAuthorizationRow | null\n return row ? rowToDeviceAuthorizationRecord(row) : null\n }\n\n async approve(params: {\n readonly projectId: string\n readonly id: string\n readonly userId: string\n readonly sessionId: string\n readonly approvedAt: Date\n }) {\n return runImmediateTransaction(this.db, () => {\n const result = this.db\n .query(`\n UPDATE auth_device_authorizations\n SET status = 'approved', approved_user_id = ?, approved_session_id = ?, approved_at = ?\n WHERE project_id = ? AND id = ? AND status = 'pending' AND expires_at > ?\n AND EXISTS (\n SELECT 1 FROM auth_sessions\n WHERE project_id = ? AND id = ? AND user_id = ?\n AND revoked_at IS NULL AND expires_at > ?\n AND (absolute_expires_at IS NULL OR absolute_expires_at > ?)\n )\n `)\n .run(\n params.userId,\n params.sessionId,\n toIso(params.approvedAt),\n params.projectId,\n params.id,\n toIso(params.approvedAt),\n params.projectId,\n params.sessionId,\n params.userId,\n toIso(params.approvedAt),\n toIso(params.approvedAt)\n )\n if (result.changes !== 1) throw invalidTransition(params.id, params.projectId)\n return requireById(this.db, params.projectId, params.id)\n })\n }\n\n async deny(params: { readonly projectId: string; readonly id: string; readonly deniedAt: Date }) {\n return runImmediateTransaction(this.db, () => {\n const result = this.db\n .query(`\n UPDATE auth_device_authorizations\n SET status = 'denied', denied_at = ?\n WHERE project_id = ? AND id = ? AND status = 'pending' AND expires_at > ?\n `)\n .run(toIso(params.deniedAt), params.projectId, params.id, toIso(params.deniedAt))\n if (result.changes !== 1) throw invalidTransition(params.id, params.projectId)\n return requireById(this.db, params.projectId, params.id)\n })\n }\n}\n\nexport function getDeviceAuthorizationById(db: Database, projectId: string, id: string) {\n return getById(db, projectId, id)\n}\n\nfunction getById(db: Database, projectId: string, id: string) {\n const row = db\n .query(\"SELECT * FROM auth_device_authorizations WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as SqliteAuthDeviceAuthorizationRow | null\n return row ? rowToDeviceAuthorizationRecord(row) : null\n}\n\nfunction requireById(db: Database, projectId: string, id: string): DeviceAuthorizationRecord {\n const record = getById(db, projectId, id)\n if (!record) {\n throw new AuthStorageError(\n \"missing_device_authorization\",\n `[Sixb] Device authorization '${id}' not found for project '${projectId}'.`\n )\n }\n return record\n}\n\nfunction invalidTransition(id: string, projectId: string): AuthStorageError {\n return new AuthStorageError(\n \"invalid_device_authorization\",\n `[Sixb] Device authorization '${id}' is no longer pending for project '${projectId}'.`\n )\n}\n",
26
26
  "import type { Database } from \"bun:sqlite\"\nimport type {\n AuthGroupMembershipStore,\n GroupMembershipRecord,\n UpsertAuthGroupMembershipInput,\n} from \"@sixb/core/storage\"\nimport { runImmediateTransaction } from \"../transactions\"\nimport type { SqliteAuthGroupMembershipRow } from \"./rows\"\nimport { rowToGroupMembershipRecord } from \"./rows\"\nimport { listMembershipsForUser, removeGroupMembership, upsertGroupMembership } from \"./shared\"\n\nexport class SqliteAuthGroupMembershipStore implements AuthGroupMembershipStore {\n constructor(private readonly db: Database) {}\n\n async upsert(input: UpsertAuthGroupMembershipInput): Promise<GroupMembershipRecord> {\n return runImmediateTransaction(this.db, () => upsertGroupMembership(this.db, input))\n }\n\n async remove(params: {\n readonly projectId: string\n readonly userId: string\n readonly groupId: string\n }): Promise<GroupMembershipRecord | null> {\n return runImmediateTransaction(this.db, () => removeGroupMembership(this.db, params))\n }\n\n async listForUser(params: {\n readonly projectId: string\n readonly userId: string\n }): Promise<readonly GroupMembershipRecord[]> {\n return listMembershipsForUser(this.db, params)\n }\n\n async listForGroup(params: {\n readonly projectId: string\n readonly groupId: string\n }): Promise<readonly GroupMembershipRecord[]> {\n const rows = this.db\n .query(\n `\n SELECT *\n FROM auth_group_memberships\n WHERE project_id = ?\n AND group_id = ?\n ORDER BY user_id ASC\n `\n )\n .all(params.projectId, params.groupId) as SqliteAuthGroupMembershipRow[]\n\n return rows.map(rowToGroupMembershipRecord)\n }\n}\n",
@@ -43,22 +43,22 @@
43
43
  "import type { Database } from \"bun:sqlite\"\nimport { ObjectQueryExecutionError } from \"@sixb/core\"\nimport { load } from \"sqlite-vec\"\n\nconst loaded = new WeakSet<Database>()\n\n/** Load only for vector reads, leaving ordinary SQLite use independent of extension support. */\nexport function ensureSqliteVectorSearch(db: Database): void {\n if (loaded.has(db)) return\n const options = db.query<{ compile_options: string }, []>(\"PRAGMA compile_options\").all()\n if (options.some((option) => option.compile_options === \"OMIT_LOAD_EXTENSION\")) {\n throw new ObjectQueryExecutionError(\n \"vector_extension_missing\",\n \"SQLite vector search requires extension support. On macOS install SQLite (brew install sqlite), then call Database.setCustomSQLite with its library path before opening any database.\"\n )\n }\n try {\n load(db)\n loaded.add(db)\n } catch (cause) {\n throw new Error(\n \"[SixbSqlite] Could not load sqlite-vec for vector search. Check that its native package supports your platform.\",\n { cause }\n )\n }\n}\n",
44
44
  "import type { Database } from \"bun:sqlite\"\nimport type {\n CompiledSelectedObjectReadScope,\n ObjectQueryCapabilities,\n ObjectReadExecutionLimits,\n ObjectReadStorage,\n} from \"@sixb/core/storage\"\nimport {\n assertObjectReaderProject,\n assertObjectReadFacetCount,\n assertObjectReadOutputWithinLimit,\n ObjectReadLimitExceededError,\n snapshotObjectReadExecutionLimits,\n} from \"@sixb/core/storage\"\nimport { runDeferredReadTransaction } from \"../transactions\"\nimport {\n compileSqliteSelectedObjectReadSource,\n type SqliteSelectedObjectReadSource,\n} from \"./read-scope\"\nimport { assertLinkQueryLimit, SqliteObjectReader } from \"./reader\"\n\n/** Keep the traversal probe and every terminal statement in the same synchronous snapshot. */\nexport function createSqliteSelectedReader(\n db: Database,\n params: {\n projectId: string\n scope: CompiledSelectedObjectReadScope\n limits: ObjectReadExecutionLimits\n },\n queryCapabilities: () => ObjectQueryCapabilities\n): ObjectReadStorage {\n const projectId = params.projectId\n const limits = snapshotObjectReadExecutionLimits(params.limits)\n const source = compileSqliteSelectedObjectReadSource(\n projectId,\n params.scope,\n limits.maxTraversalFacts\n )\n const reader = new SqliteObjectReader(db, source)\n const assertProject = (actualProjectId: string): void =>\n assertObjectReaderProject(projectId, actualProjectId)\n const read = <T>(run: () => T): T =>\n runDeferredReadTransaction(db, () => {\n assertTraversalBudget(db, source, limits.maxTraversalFacts)\n const value = run()\n assertObjectReadOutputWithinLimit(value, limits)\n return value\n })\n const readMap = <TKey, TValue>(run: () => Map<TKey, TValue>): Map<TKey, TValue> =>\n runDeferredReadTransaction(db, () => {\n assertTraversalBudget(db, source, limits.maxTraversalFacts)\n const value = run()\n assertObjectReadOutputWithinLimit([...value.entries()], limits)\n return value\n })\n\n return Object.freeze({\n queryCapabilities,\n queryObjects: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.queryObjects(input))\n },\n countObjects: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.countObjects(input))\n },\n existsObjects: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.existsObjects(input))\n },\n facetObjects: async (input) => {\n assertProject(input.projectId)\n assertObjectReadFacetCount(input.facets.length)\n return read(() => reader.facetObjects(input))\n },\n getByPrimaryId: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.getByPrimaryId(input))\n },\n selectsObjectProperties: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.selectsObjectProperties(input))\n },\n listLinks: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.listLinks(input))\n },\n getByPrimaryIdBatch: async (input) => {\n assertProject(input.projectId)\n return readMap(() => reader.getByPrimaryIdBatch(input))\n },\n listLinksBatch: async (input) => {\n assertProject(input.projectId)\n return readMap(() => reader.listLinksBatch(input))\n },\n queryLinks: async (input) => {\n assertProject(input.projectId)\n assertLinkQueryLimit(input.limit)\n return read(() => reader.queryLinks(input))\n },\n list: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.list(input))\n },\n } satisfies ObjectReadStorage)\n}\n\nfunction assertTraversalBudget(\n db: Database,\n source: SqliteSelectedObjectReadSource,\n maxTraversalFacts: number\n): void {\n const row = db.query(source.traversalProbe.sql).get(...source.traversalProbe.args) as {\n total: number | bigint\n }\n if (BigInt(row.total) > BigInt(maxTraversalFacts)) {\n throw new ObjectReadLimitExceededError(\"traversalFacts\", maxTraversalFacts)\n }\n}\n",
45
45
  "import type { CompiledSelectedObjectReadScope } from \"@sixb/core/storage\"\nimport {\n type CompiledObjectQuery,\n type SqliteObjectQuerySource,\n type SqliteValue,\n sqliteJsonEachValue,\n} from \"./query-compiler\"\n\nexport interface SqliteSelectedObjectReadSource extends SqliteObjectQuerySource {\n readonly objectPropertyPermissionsTable: string\n readonly traversalProbe: {\n readonly sql: string\n readonly args: readonly SqliteValue[]\n }\n}\n\n/**\n * Prepare one immutable selected scope as live, path-sensitive SQLite relations.\n *\n * The complete compiled scope is serialized once. Every statement receives that one JSON document\n * and the bound project id, keeping the host-parameter count constant as selections grow.\n * CROSS JOIN keeps authorized parents/grants before indexed edge/object lookups, even when\n * statistics would otherwise make SQLite rescan all grants for every stored object.\n * Property grants are grouped only after path-sensitive reachability has been resolved.\n */\nexport function compileSqliteSelectedObjectReadSource(\n projectId: string,\n scope: CompiledSelectedObjectReadScope,\n maxTraversalFacts: number\n): SqliteSelectedObjectReadSource {\n const scopeJson = JSON.stringify({\n roots: scope.roots,\n objects: scope.objects,\n steps: scope.steps,\n })\n const compiled = compileSelectedReadScopeCte(scopeJson, projectId)\n const wrapStatement = (sql: string, args: readonly SqliteValue[] = []) => ({\n sql: `${compiled.sql}\\n${sql}`,\n args: [...compiled.args, ...args],\n })\n\n return Object.freeze({\n objectsTable: \"_sixb_scope_objects\",\n linksTable: \"_sixb_scope_links\",\n objectPropertyPermissionsTable: \"_sixb_scope_object_permissions\",\n wrapStatement,\n wrapQuery: (query: CompiledObjectQuery): CompiledObjectQuery => ({\n ...query,\n ...wrapStatement(query.sql, query.args),\n vectorProbe: query.vectorProbe\n ? { ...query.vectorProbe, ...wrapStatement(query.vectorProbe.sql, query.vectorProbe.args) }\n : undefined,\n totalSql: `${compiled.sql}\\n${query.totalSql}`,\n totalArgs: [...compiled.args, ...query.totalArgs],\n ...(query.hasMoreProbe\n ? {\n hasMoreProbe: {\n ...query.hasMoreProbe,\n ...wrapStatement(query.hasMoreProbe.sql, query.hasMoreProbe.args),\n },\n }\n : {}),\n }),\n traversalProbe: wrapStatement(\n `\n SELECT COUNT(*) AS total\n FROM (\n SELECT 1 AS traversal_fact\n FROM _sixb_scope_root_facts\n\n UNION ALL\n\n SELECT 1 AS traversal_fact\n FROM _sixb_scope_reached_links\n\n LIMIT ?\n ) AS bounded_traversal_facts\n `,\n [BigInt(maxTraversalFacts) + 1n]\n ),\n })\n}\n\ninterface CompiledReadScopeCte {\n readonly sql: string\n readonly args: readonly SqliteValue[]\n}\n\nfunction compileSelectedReadScopeCte(scopeJson: string, projectId: string): CompiledReadScopeCte {\n return {\n sql: `\n WITH RECURSIVE\n _sixb_scope_document(scope) AS (\n SELECT json(?)\n ),\n _sixb_scope_roots(root_id, node_id, object_type_id, primary_id) AS (\n SELECT\n CAST(root.key AS INTEGER),\n CAST(json_extract(root.value, '$.nodeId') AS INTEGER),\n CAST(json_extract(root.value, '$.objectTypeId') AS TEXT),\n CAST(json_extract(root.value, '$.primaryId') AS TEXT)\n FROM _sixb_scope_document AS document,\n json_each(json_extract(document.scope, '$.roots')) AS root\n ),\n _sixb_scope_root_facts(project_id, root_id, node_id, object_type_id, primary_id) AS (\n SELECT anchor.project_id, root.root_id, root.node_id, root.object_type_id, root.primary_id\n FROM _sixb_scope_roots AS root\n JOIN objects AS anchor\n ON anchor.project_id = ?\n AND anchor.object_type_id = root.object_type_id\n AND anchor.primary_id = root.primary_id\n ),\n _sixb_scope_object_selections(node_id, object_type_id, property_ids) AS (\n SELECT\n CAST(json_extract(selection.value, '$.nodeId') AS INTEGER),\n CAST(json_extract(selection.value, '$.objectTypeId') AS TEXT),\n json_extract(selection.value, '$.propertyIds')\n FROM _sixb_scope_document AS document,\n json_each(json_extract(document.scope, '$.objects')) AS selection\n ),\n _sixb_scope_link_selections(\n step_id,\n node_id,\n parent_node_id,\n source_object_type_id,\n link_id,\n target_object_type_id,\n property_ids\n ) AS (\n SELECT\n CAST(step.key AS INTEGER),\n CAST(json_extract(step.value, '$.nodeId') AS INTEGER),\n CAST(json_extract(step.value, '$.parentNodeId') AS INTEGER),\n CAST(json_extract(step.value, '$.sourceObjectTypeId') AS TEXT),\n CAST(json_extract(step.value, '$.linkId') AS TEXT),\n CAST(json_extract(step.value, '$.targetObjectTypeId') AS TEXT),\n json_extract(step.value, '$.propertyIds')\n FROM _sixb_scope_document AS document,\n json_each(json_extract(document.scope, '$.steps')) AS step\n ),\n _sixb_scope_reachable(project_id, node_id, object_type_id, primary_id) AS (\n SELECT root.project_id, root.node_id, root.object_type_id, root.primary_id\n FROM _sixb_scope_root_facts AS root\n\n UNION\n\n SELECT edge.project_id, selection.node_id, edge.target_type_id, edge.target_id\n FROM _sixb_scope_reachable AS parent\n CROSS JOIN _sixb_scope_link_selections AS selection\n ON selection.parent_node_id = parent.node_id\n AND selection.source_object_type_id = parent.object_type_id\n CROSS JOIN links AS edge\n ON edge.project_id = parent.project_id\n AND edge.source_type_id = parent.object_type_id\n AND edge.source_id = parent.primary_id\n AND edge.link_id = selection.link_id\n AND edge.target_type_id = selection.target_object_type_id\n CROSS JOIN objects AS target\n ON target.project_id = edge.project_id\n AND target.object_type_id = edge.target_type_id\n AND target.primary_id = edge.target_id\n ),\n _sixb_scope_object_permissions(project_id, object_type_id, primary_id, property_id) AS (\n SELECT DISTINCT\n reachable.project_id,\n reachable.object_type_id,\n reachable.primary_id,\n CAST(selected_property.value AS TEXT)\n FROM _sixb_scope_reachable AS reachable\n JOIN _sixb_scope_object_selections AS selection\n ON selection.node_id = reachable.node_id\n AND selection.object_type_id = reachable.object_type_id\n JOIN json_each(selection.property_ids) AS selected_property\n ),\n _sixb_scope_object_ids(project_id, object_type_id, primary_id) AS (\n SELECT DISTINCT project_id, object_type_id, primary_id\n FROM _sixb_scope_reachable\n ),\n _sixb_scope_object_grants AS (\n SELECT reachable.project_id, reachable.object_type_id, reachable.primary_id,\n json_group_array(DISTINCT selected_property.value) FILTER (WHERE selected_property.value IS NOT NULL) AS property_ids\n FROM _sixb_scope_reachable AS reachable\n LEFT JOIN _sixb_scope_object_selections AS selection\n ON selection.node_id = reachable.node_id\n AND selection.object_type_id = reachable.object_type_id\n LEFT JOIN json_each(selection.property_ids) AS selected_property ON true\n GROUP BY reachable.project_id, reachable.object_type_id, reachable.primary_id\n ),\n _sixb_scope_objects AS (\n SELECT stored.project_id, stored.object_type_id, stored.primary_id,\n COALESCE((\n SELECT json_group_object(property.key, ${sqliteJsonEachValue(\"property\")})\n FROM json_each(stored.properties) AS property\n WHERE property.key IN (SELECT value FROM json_each(grants.property_ids))\n ), json('{}')) AS properties,\n stored.created_at, stored.updated_at, stored.version, stored.last_commit_id\n FROM _sixb_scope_object_grants AS grants\n CROSS JOIN objects AS stored\n ON stored.project_id = grants.project_id\n AND stored.object_type_id = grants.object_type_id\n AND stored.primary_id = grants.primary_id\n ),\n _sixb_scope_reached_links(\n project_id,\n step_id,\n node_id,\n parent_node_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id,\n property_ids\n ) AS (\n SELECT\n edge.project_id,\n selection.step_id,\n selection.node_id,\n selection.parent_node_id,\n edge.source_type_id,\n edge.source_id,\n edge.link_id,\n edge.target_type_id,\n edge.target_id,\n selection.property_ids\n FROM _sixb_scope_reachable AS parent\n CROSS JOIN _sixb_scope_link_selections AS selection\n ON selection.parent_node_id = parent.node_id\n AND selection.source_object_type_id = parent.object_type_id\n CROSS JOIN links AS edge\n ON edge.project_id = parent.project_id\n AND edge.source_type_id = parent.object_type_id\n AND edge.source_id = parent.primary_id\n AND edge.link_id = selection.link_id\n AND edge.target_type_id = selection.target_object_type_id\n CROSS JOIN objects AS target\n ON target.project_id = edge.project_id\n AND target.object_type_id = edge.target_type_id\n AND target.primary_id = edge.target_id\n ),\n _sixb_scope_link_permissions(\n project_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id,\n property_id\n ) AS (\n SELECT DISTINCT\n reached.project_id,\n reached.source_type_id,\n reached.source_id,\n reached.link_id,\n reached.target_type_id,\n reached.target_id,\n CAST(selected_property.value AS TEXT)\n FROM _sixb_scope_reached_links AS reached\n JOIN json_each(reached.property_ids) AS selected_property\n ),\n _sixb_scope_link_ids(\n project_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id\n ) AS (\n SELECT DISTINCT\n project_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id\n FROM _sixb_scope_reached_links\n ),\n _sixb_scope_links AS (\n SELECT\n stored.project_id,\n stored.source_type_id,\n stored.source_id,\n stored.link_id,\n stored.target_type_id,\n stored.target_id,\n CASE\n WHEN stored.properties IS NULL THEN NULL\n ELSE NULLIF(\n (\n SELECT json_group_object(property.key, ${sqliteJsonEachValue(\"property\")})\n FROM json_each(stored.properties) AS property\n JOIN _sixb_scope_link_permissions AS permission\n ON permission.project_id = stored.project_id\n AND permission.source_type_id = stored.source_type_id\n AND permission.source_id = stored.source_id\n AND permission.link_id = stored.link_id\n AND permission.target_type_id = stored.target_type_id\n AND permission.target_id = stored.target_id\n AND permission.property_id = property.key\n ),\n json('{}')\n )\n END AS properties,\n stored.created_at,\n stored.updated_at,\n stored.last_commit_id\n FROM links AS stored\n JOIN _sixb_scope_link_ids AS visible\n ON visible.project_id = stored.project_id\n AND visible.source_type_id = stored.source_type_id\n AND visible.source_id = stored.source_id\n AND visible.link_id = stored.link_id\n AND visible.target_type_id = stored.target_type_id\n AND visible.target_id = stored.target_id\n )\n `,\n args: [scopeJson, projectId],\n }\n}\n",
46
- "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport type { ProjectionEntityRef } from \"@sixb/core/internal/materialization\"\nimport { MaterializationConflictError } from \"@sixb/core/internal/materialization\"\nimport type {\n AssertSourceMaterializationExecutionInput,\n OntologyCommitRecord,\n OntologyCommitWrite,\n OntologyOutboxRecord,\n OntologySourceRecord,\n StageSourceAssertion,\n} from \"@sixb/core/storage\"\nimport { ONTOLOGY_OUTBOX_FAILURE_CODES } from \"@sixb/core/storage\"\n\nexport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertTimestamp,\n canonicalJson,\n linkRefFromColumns,\n objectRefFromColumns,\n originColumns,\n originWhere,\n sourceEntityKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\n\nexport type SqliteRootOperation = <T>(run: () => Promise<T> | T) => Promise<T>\n\nexport interface SqliteOntologyCommitRow {\n readonly project_id: string\n readonly id: string\n readonly idempotency_key: string\n readonly request_hash: string\n readonly execution_id: string\n readonly origin_kind: string\n readonly origin_run_id: string | null\n readonly origin_batch_ordinal: number | null\n readonly origin: string\n readonly requested_by: string | null\n readonly executor: string\n readonly ontology_revision: string\n readonly projection_revision: string | null\n readonly ownership_hash: string | null\n readonly intent: string\n readonly result: string\n readonly committed_at: string\n}\n\nexport interface SqliteOntologySourceRow {\n readonly project_id: string\n readonly source_id: string\n readonly materialization_id: string\n readonly projection_run_id: string\n readonly projection_kind: \"object\" | \"link\"\n readonly protocol: \"replacement\"\n readonly status: OntologySourceRecord[\"status\"]\n readonly execution_token: string | null\n readonly dataset_id: string\n readonly dataset_version_id: string\n readonly dataset_version_created_at: string\n readonly projection_revision: string\n readonly ownership_hash: string\n readonly ontology_revision: string\n readonly root_count: number | null\n readonly base_materialization_id: string | null\n readonly base_commit_id: string | null\n readonly assertion_count: number | null\n readonly created_at: string\n readonly ready_at: string | null\n readonly activated_at: string | null\n readonly terminal_at: string | null\n readonly last_commit_id: string | null\n readonly updated_at: string\n}\n\nexport interface SqliteOntologySourceAssertionRow {\n readonly project_id: string\n readonly source_id: string\n readonly materialization_id: string\n readonly entity_kind: \"object\" | \"link\"\n readonly entity_key: string\n readonly entity_sort_key: string\n readonly root_kind: \"object\" | \"link\"\n readonly root_key: string\n readonly root_sort_key: string\n readonly staging_ordinal: number\n readonly root: string\n readonly assertion: string\n}\n\nexport interface SqliteStoredOverrideRow {\n readonly value: string\n readonly last_commit_id: string\n readonly updated_at: string\n}\n\nexport interface SqliteOntologyOutboxRow {\n readonly envelope: string\n readonly available_at: string\n readonly attempts: number\n readonly lease_id: string | null\n readonly lease_expires_at: string | null\n readonly published_at: string | null\n readonly last_failure: string | null\n readonly created_at: string\n}\n\nexport function parseJson<T>(value: string): T {\n return JSON.parse(value) as T\n}\n\nexport function sourceRecord(row: SqliteOntologySourceRow): OntologySourceRecord {\n return {\n projectId: row.project_id,\n source: { projectionId: row.source_id },\n materializationId: row.materialization_id,\n projectionRunId: row.projection_run_id,\n projectionKind: row.projection_kind,\n protocol: row.protocol,\n status: row.status,\n executionToken: row.execution_token,\n datasetVersion: {\n datasetId: row.dataset_id,\n versionId: row.dataset_version_id,\n createdAt: row.dataset_version_created_at,\n },\n projectionRevision: row.projection_revision,\n ownershipHash: row.ownership_hash,\n ontologyRevision: row.ontology_revision,\n ...(row.base_materialization_id === null\n ? {}\n : {\n base: {\n materializationId: row.base_materialization_id,\n lastCommitId: row.base_commit_id!,\n },\n }),\n rootCount: row.root_count,\n assertionCount: row.assertion_count,\n createdAt: row.created_at,\n readyAt: row.ready_at,\n activatedAt: row.activated_at,\n terminalAt: row.terminal_at,\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nexport function sourceAssertion(row: SqliteOntologySourceAssertionRow): StageSourceAssertion {\n return {\n root: parseJson<ProjectionEntityRef>(row.root),\n assertion: parseJson<StageSourceAssertion[\"assertion\"]>(row.assertion),\n stagingOrdinal: row.staging_ordinal,\n }\n}\n\nexport function commitRecord(row: SqliteOntologyCommitRow): OntologyCommitRecord {\n const base = {\n projectId: row.project_id,\n id: row.id,\n idempotencyKey: row.idempotency_key,\n requestHash: row.request_hash,\n executionId: row.execution_id,\n origin: parseJson<OntologyCommitWrite[\"origin\"]>(row.origin),\n ...(row.requested_by === null\n ? {}\n : {\n requestedBy: parseJson<NonNullable<OntologyCommitWrite[\"requestedBy\"]>>(row.requested_by),\n }),\n executor: parseJson<OntologyCommitWrite[\"executor\"]>(row.executor),\n ontologyRevision: row.ontology_revision,\n ...(row.projection_revision === null ? {} : { projectionRevision: row.projection_revision }),\n ...(row.ownership_hash === null ? {} : { ownershipHash: row.ownership_hash }),\n committedAt: row.committed_at,\n }\n const intent = parseJson<OntologyCommitWrite[\"intent\"]>(row.intent)\n const result = parseJson<OntologyCommitRecord[\"result\"]>(row.result)\n return { ...base, intent, result } as OntologyCommitRecord\n}\n\nexport function outboxRecord(row: SqliteOntologyOutboxRow): OntologyOutboxRecord {\n return {\n envelope: parseJson<OntologyOutboxRecord[\"envelope\"]>(row.envelope),\n availableAt: row.available_at,\n attempts: row.attempts,\n leaseId: row.lease_id,\n leaseExpiresAt: row.lease_expires_at,\n publishedAt: row.published_at,\n lastFailure:\n row.last_failure === null\n ? null\n : parseSixbFailure(row.last_failure, ONTOLOGY_OUTBOX_FAILURE_CODES),\n createdAt: row.created_at,\n }\n}\n\nexport function assertProjectionExecution(\n db: Database,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly projectionRunId: string\n readonly executionToken: string\n readonly identity?: AssertSourceMaterializationExecutionInput[\"identity\"]\n }\n): void {\n const run = db\n .query(\n `\n SELECT projection_id, projection_kind, status, materialization_protocol, execution_token,\n dataset_id, dataset_version_id, dataset_version_created_at,\n ontology_revision, projection_revision, ownership_hash\n FROM projection_runs\n WHERE project_id = ? AND id = ?\n `\n )\n .get(input.projectId, input.projectionRunId) as {\n projection_id: string\n projection_kind: string\n status: string\n materialization_protocol: string | null\n execution_token: string | null\n dataset_id: string\n dataset_version_id: string\n dataset_version_created_at: string | null\n ontology_revision: string | null\n projection_revision: string | null\n ownership_hash: string | null\n } | null\n if (!run || run.status !== \"running\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' is missing or is not running.`\n )\n }\n if (run.projection_id !== input.sourceId || run.materialization_protocol !== \"replacement\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' does not own replacement source '${input.sourceId}'.`\n )\n }\n if (run.execution_token !== input.executionToken) {\n throw new MaterializationConflictError(\n \"execution-lost\",\n `Projection run '${input.projectionRunId}' execution token is stale.`\n )\n }\n const identity = input.identity\n if (\n identity &&\n (run.projection_kind !== identity.projectionKind ||\n run.materialization_protocol !== identity.protocol ||\n run.dataset_id !== identity.datasetVersion.datasetId ||\n run.dataset_version_id !== identity.datasetVersion.versionId ||\n run.dataset_version_created_at !== identity.datasetVersion.createdAt ||\n run.ontology_revision !== identity.ontologyRevision ||\n run.projection_revision !== identity.projectionRevision ||\n run.ownership_hash !== identity.ownershipHash)\n ) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' immutable source identity does not match.`\n )\n }\n}\n\nexport function requireChanges(\n changes: number,\n kind: ConstructorParameters<typeof MaterializationConflictError>[0],\n message: string\n): void {\n if (changes !== 1) throw new MaterializationConflictError(kind, message)\n}\n\nexport function isSqliteConstraintError(error: unknown): boolean {\n if (!(error instanceof Error)) return false\n const details = error as Error & { readonly code?: unknown; readonly errno?: unknown }\n if (typeof details.code === \"string\") {\n return [\n \"SQLITE_CONSTRAINT_CHECK\",\n \"SQLITE_CONSTRAINT_FOREIGNKEY\",\n \"SQLITE_CONSTRAINT_NOTNULL\",\n \"SQLITE_CONSTRAINT_PRIMARYKEY\",\n \"SQLITE_CONSTRAINT_UNIQUE\",\n ].includes(details.code)\n }\n return details.errno === 19\n}\n",
46
+ "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport { MaterializationConflictError } from \"@sixb/core/internal/materialization\"\nimport {\n sourceAssertionFromColumns,\n sourceEntityFromKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AssertSourceMaterializationExecutionInput,\n OntologyCommitRecord,\n OntologyCommitWrite,\n OntologyOutboxRecord,\n OntologySourceRecord,\n StageSourceAssertion,\n} from \"@sixb/core/storage\"\nimport { ONTOLOGY_OUTBOX_FAILURE_CODES } from \"@sixb/core/storage\"\n\nexport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertTimestamp,\n canonicalJson,\n linkRefFromColumns,\n objectRefFromColumns,\n originColumns,\n originWhere,\n sourceEntityKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\n\nexport type SqliteRootOperation = <T>(run: () => Promise<T> | T) => Promise<T>\n\nexport interface SqliteOntologyCommitRow {\n readonly project_id: string\n readonly id: string\n readonly idempotency_key: string\n readonly request_hash: string\n readonly execution_id: string\n readonly origin_kind: string\n readonly origin_run_id: string | null\n readonly origin_batch_ordinal: number | null\n readonly origin: string\n readonly requested_by: string | null\n readonly executor: string\n readonly ontology_revision: string\n readonly projection_revision: string | null\n readonly ownership_hash: string | null\n readonly intent: string\n readonly result: string\n readonly committed_at: string\n}\n\nexport interface SqliteOntologySourceRow {\n readonly version_id: number\n readonly project_id: string\n readonly source_id: string\n readonly materialization_id: string\n readonly projection_run_id: string\n readonly projection_kind: \"object\" | \"link\"\n readonly protocol: \"replacement\"\n readonly status: OntologySourceRecord[\"status\"]\n readonly execution_token: string | null\n readonly dataset_id: string\n readonly dataset_version_id: string\n readonly dataset_version_created_at: string\n readonly projection_revision: string\n readonly ownership_hash: string\n readonly ontology_revision: string\n readonly root_count: number | null\n readonly base_materialization_id: string | null\n readonly base_commit_id: string | null\n readonly assertion_count: number | null\n readonly created_at: string\n readonly ready_at: string | null\n readonly activated_at: string | null\n readonly terminal_at: string | null\n readonly last_commit_id: string | null\n readonly updated_at: string\n}\n\n/** An assertion with its root and version, as `SOURCE_ASSERTION_COLUMNS` selects it. */\nexport interface SqliteOntologySourceAssertionRow {\n readonly source_id: string\n readonly materialization_id: string\n readonly root_key: string\n readonly staging_ordinal: number\n readonly entity_kind: \"object\" | \"link\"\n readonly object_type_id: string | null\n readonly primary_id: string | null\n readonly source_type_id: string | null\n readonly source_primary_id: string | null\n readonly link_id: string | null\n readonly target_type_id: string | null\n readonly target_primary_id: string | null\n readonly payload: string | null\n}\n\nexport interface SqliteStoredOverrideRow {\n readonly value: string\n readonly last_commit_id: string\n readonly updated_at: string\n}\n\nexport interface SqliteOntologyOutboxRow {\n readonly envelope: string\n readonly available_at: string\n readonly attempts: number\n readonly lease_id: string | null\n readonly lease_expires_at: string | null\n readonly published_at: string | null\n readonly last_failure: string | null\n readonly created_at: string\n}\n\nexport function parseJson<T>(value: string): T {\n return JSON.parse(value) as T\n}\n\nexport function sourceRecord(row: SqliteOntologySourceRow): OntologySourceRecord {\n return {\n projectId: row.project_id,\n source: { projectionId: row.source_id },\n materializationId: row.materialization_id,\n projectionRunId: row.projection_run_id,\n projectionKind: row.projection_kind,\n protocol: row.protocol,\n status: row.status,\n executionToken: row.execution_token,\n datasetVersion: {\n datasetId: row.dataset_id,\n versionId: row.dataset_version_id,\n createdAt: row.dataset_version_created_at,\n },\n projectionRevision: row.projection_revision,\n ownershipHash: row.ownership_hash,\n ontologyRevision: row.ontology_revision,\n ...(row.base_materialization_id === null\n ? {}\n : {\n base: {\n materializationId: row.base_materialization_id,\n lastCommitId: row.base_commit_id!,\n },\n }),\n rootCount: row.root_count,\n assertionCount: row.assertion_count,\n createdAt: row.created_at,\n readyAt: row.ready_at,\n activatedAt: row.activated_at,\n terminalAt: row.terminal_at,\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nexport function sourceAssertion(row: SqliteOntologySourceAssertionRow): StageSourceAssertion {\n return {\n root: sourceEntityFromKey(row.root_key),\n assertion: sourceAssertionFromColumns(\n row,\n row.payload === null ? null : parseJson<unknown>(row.payload)\n ),\n stagingOrdinal: row.staging_ordinal,\n }\n}\n\nexport function commitRecord(row: SqliteOntologyCommitRow): OntologyCommitRecord {\n const base = {\n projectId: row.project_id,\n id: row.id,\n idempotencyKey: row.idempotency_key,\n requestHash: row.request_hash,\n executionId: row.execution_id,\n origin: parseJson<OntologyCommitWrite[\"origin\"]>(row.origin),\n ...(row.requested_by === null\n ? {}\n : {\n requestedBy: parseJson<NonNullable<OntologyCommitWrite[\"requestedBy\"]>>(row.requested_by),\n }),\n executor: parseJson<OntologyCommitWrite[\"executor\"]>(row.executor),\n ontologyRevision: row.ontology_revision,\n ...(row.projection_revision === null ? {} : { projectionRevision: row.projection_revision }),\n ...(row.ownership_hash === null ? {} : { ownershipHash: row.ownership_hash }),\n committedAt: row.committed_at,\n }\n const intent = parseJson<OntologyCommitWrite[\"intent\"]>(row.intent)\n const result = parseJson<OntologyCommitRecord[\"result\"]>(row.result)\n return { ...base, intent, result } as OntologyCommitRecord\n}\n\nexport function outboxRecord(row: SqliteOntologyOutboxRow): OntologyOutboxRecord {\n return {\n envelope: parseJson<OntologyOutboxRecord[\"envelope\"]>(row.envelope),\n availableAt: row.available_at,\n attempts: row.attempts,\n leaseId: row.lease_id,\n leaseExpiresAt: row.lease_expires_at,\n publishedAt: row.published_at,\n lastFailure:\n row.last_failure === null\n ? null\n : parseSixbFailure(row.last_failure, ONTOLOGY_OUTBOX_FAILURE_CODES),\n createdAt: row.created_at,\n }\n}\n\nexport function assertProjectionExecution(\n db: Database,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly projectionRunId: string\n readonly executionToken: string\n readonly identity?: AssertSourceMaterializationExecutionInput[\"identity\"]\n }\n): void {\n const run = db\n .query(\n `\n SELECT projection_id, projection_kind, status, materialization_protocol, execution_token,\n dataset_id, dataset_version_id, dataset_version_created_at,\n ontology_revision, projection_revision, ownership_hash\n FROM projection_runs\n WHERE project_id = ? AND id = ?\n `\n )\n .get(input.projectId, input.projectionRunId) as {\n projection_id: string\n projection_kind: string\n status: string\n materialization_protocol: string | null\n execution_token: string | null\n dataset_id: string\n dataset_version_id: string\n dataset_version_created_at: string | null\n ontology_revision: string | null\n projection_revision: string | null\n ownership_hash: string | null\n } | null\n if (!run || run.status !== \"running\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' is missing or is not running.`\n )\n }\n if (run.projection_id !== input.sourceId || run.materialization_protocol !== \"replacement\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' does not own replacement source '${input.sourceId}'.`\n )\n }\n if (run.execution_token !== input.executionToken) {\n throw new MaterializationConflictError(\n \"execution-lost\",\n `Projection run '${input.projectionRunId}' execution token is stale.`\n )\n }\n const identity = input.identity\n if (\n identity &&\n (run.projection_kind !== identity.projectionKind ||\n run.materialization_protocol !== identity.protocol ||\n run.dataset_id !== identity.datasetVersion.datasetId ||\n run.dataset_version_id !== identity.datasetVersion.versionId ||\n run.dataset_version_created_at !== identity.datasetVersion.createdAt ||\n run.ontology_revision !== identity.ontologyRevision ||\n run.projection_revision !== identity.projectionRevision ||\n run.ownership_hash !== identity.ownershipHash)\n ) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' immutable source identity does not match.`\n )\n }\n}\n\nexport function requireChanges(\n changes: number,\n kind: ConstructorParameters<typeof MaterializationConflictError>[0],\n message: string\n): void {\n if (changes !== 1) throw new MaterializationConflictError(kind, message)\n}\n\nexport function isSqliteConstraintError(error: unknown): boolean {\n if (!(error instanceof Error)) return false\n const details = error as Error & { readonly code?: unknown; readonly errno?: unknown }\n if (typeof details.code === \"string\") {\n return [\n \"SQLITE_CONSTRAINT_CHECK\",\n \"SQLITE_CONSTRAINT_FOREIGNKEY\",\n \"SQLITE_CONSTRAINT_NOTNULL\",\n \"SQLITE_CONSTRAINT_PRIMARYKEY\",\n \"SQLITE_CONSTRAINT_UNIQUE\",\n ].includes(details.code)\n }\n return details.errno === 19\n}\n",
47
47
  "import type { Database } from \"bun:sqlite\"\nimport type {\n GetOntologyCommitByIdempotencyKeyInput,\n GetOntologyCommitByIdInput,\n GetOntologyCommitByOriginInput,\n ListOntologyCommitsInput,\n ListOntologyCommitsResult,\n OntologyCommitRecord,\n OntologyCommitStorage,\n} from \"@sixb/core/storage\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n commitRecord,\n originWhere,\n type SqliteOntologyCommitRow,\n type SqliteRootOperation,\n} from \"./shared\"\n\nexport class SqliteOntologyCommitStorage implements OntologyCommitStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async getByIdempotencyKey(\n input: GetOntologyCommitByIdempotencyKeyInput\n ): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n assertNonblank(input.idempotencyKey, \"Ontology commit idempotency key\")\n return this.readOne(\n \"project_id = ? AND idempotency_key = ?\",\n input.projectId,\n input.idempotencyKey\n )\n })\n }\n\n async getById(input: GetOntologyCommitByIdInput): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n assertNonblank(input.id, \"Ontology commit id\")\n return this.readOne(\"project_id = ? AND id = ?\", input.projectId, input.id)\n })\n }\n\n async getByOrigin(input: GetOntologyCommitByOriginInput): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n const origin = originWhere(input.origin)\n assertNonblank(origin.runId, \"Ontology commit origin run id\")\n if (origin.batchOrdinal !== null) {\n assertNonnegativeInteger(origin.batchOrdinal, \"Ontology telemetry commit batch ordinal\")\n }\n return origin.batchOrdinal === null\n ? this.readOne(\n \"project_id = ? AND origin_kind = ? AND origin_run_id = ? AND origin_batch_ordinal IS NULL\",\n input.projectId,\n origin.kind,\n origin.runId\n )\n : this.readOne(\n \"project_id = ? AND origin_kind = ? AND origin_run_id = ? AND origin_batch_ordinal = ?\",\n input.projectId,\n origin.kind,\n origin.runId,\n origin.batchOrdinal\n )\n })\n }\n\n async list(input: ListOntologyCommitsInput): Promise<ListOntologyCommitsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n if (input.run) assertNonblank(input.run.id, \"Ontology commit run id\")\n const offset = input.offset ?? 0\n const limit = input.limit ?? -1\n assertNonnegativeInteger(offset, \"Ontology commit list offset\")\n if (limit !== -1) assertNonnegativeInteger(limit, \"Ontology commit list limit\")\n const filters = [\"project_id = ?\"]\n const values: (string | number)[] = [input.projectId]\n if (input.run?.kind === \"action\") {\n filters.push(\"origin_kind = 'action' AND origin_run_id = ?\")\n values.push(input.run.id)\n } else if (input.run?.kind === \"projection\") {\n filters.push(\"origin_run_id = ? AND origin_kind IN ('projection', 'telemetry')\")\n values.push(input.run.id)\n }\n const where = filters.join(\" AND \")\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS total FROM ontology_commits WHERE ${where}`)\n .get(...values) as { readonly total: number }\n const direction = input.order === \"desc\" ? \"DESC\" : \"ASC\"\n const order =\n input.run?.kind === \"projection\"\n ? `CASE WHEN origin_kind = 'telemetry' THEN origin_batch_ordinal ELSE -1 END ${direction}, committed_at ${direction}, id ${direction}`\n : `committed_at ${direction}, id ${direction}`\n const rows = this.db\n .query(\n `\n SELECT * FROM ontology_commits\n WHERE ${where}\n ORDER BY ${order}\n LIMIT ? OFFSET ?\n `\n )\n .all(...values, limit, offset) as SqliteOntologyCommitRow[]\n const commits = rows.map(commitRecord)\n return {\n commits,\n total: totalRow.total,\n hasMore: offset + commits.length < totalRow.total,\n }\n })\n }\n\n private readOne(\n where: string,\n ...values: readonly (string | number)[]\n ): OntologyCommitRecord | null {\n const row = this.db\n .query(`SELECT * FROM ontology_commits WHERE ${where}`)\n .get(...values) as SqliteOntologyCommitRow | null\n return row ? commitRecord(row) : null\n }\n}\n",
48
48
  "import type { Database } from \"bun:sqlite\"\nimport {\n assertPinnedDatasetWatermark,\n linkRefKey,\n linkRefSortKey,\n linkScopeSortKey,\n MaterializationConflictError,\n MaterializationValidationError,\n objectRefKey,\n objectRefSortKey,\n telemetryPointKey,\n telemetryPointSortKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n assertExpectedLinkRevision,\n assertExpectedLinkScopeRevision,\n assertExpectedObjectRevision,\n assertMaterializationFinalizationCorrelation,\n assertMaterializationHeader,\n assertMaterializationLaneCompletion,\n assertPageRows,\n assertPlanChunkCorrelations,\n assertSourceActivationCorrelation,\n invalidCorrelation,\n sameNonnegativeCounts as sameCounts,\n uniqueSorted,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n ApplyMaterializationChunkInput,\n ApplyMaterializationResult,\n FinalizeMaterializationInput,\n MaterializationObjectExistence,\n MaterializationPlanHeader,\n MaterializationSession,\n MaterializationStatePage,\n MaterializationWorkPage,\n OntologyCommitRecord,\n OntologyMaterializationStorage,\n ReadMaterializationObjectExistenceInput,\n SourceActivationWrite,\n SourceReplacementStatePage,\n StageMaterializationWorkInput,\n StreamMaterializationStateInput,\n StreamMaterializationWorkInput,\n StreamSourceReplacementStateInput,\n} from \"@sixb/core/storage\"\nimport { yieldSqliteEventLoop } from \"../transactions\"\nimport {\n type SqliteMaterializationSessionState,\n SqliteMaterializationSessions,\n type SqliteOntologyTransactionContext,\n} from \"./materialization-session\"\nimport {\n SQLITE_MATERIALIZATION_WORK_TABLE,\n SqliteMaterializationStateReader,\n} from \"./materialization-state\"\nimport { SqliteMaterializationWriter } from \"./materialization-writer\"\nimport {\n assertProjectionExecution,\n canonicalJson,\n commitRecord,\n isSqliteConstraintError,\n originColumns,\n requireChanges,\n type SqliteOntologyCommitRow,\n type SqliteOntologySourceRow,\n} from \"./shared\"\nimport { activateSourceRoots } from \"./source-roots\"\n\nexport class SqliteOntologyMaterializationStorage implements OntologyMaterializationStorage {\n private readonly sessions: SqliteMaterializationSessions\n private readonly writer: SqliteMaterializationWriter\n\n constructor(\n private readonly db: Database,\n context: SqliteOntologyTransactionContext | null\n ) {\n this.sessions = new SqliteMaterializationSessions(db, context)\n this.writer = new SqliteMaterializationWriter(db)\n }\n\n assertVectorSession(session: MaterializationSession, projectId: string, commitId?: string): void {\n const active = this.sessions.require(session)\n if (\n active.header.commit.projectId !== projectId ||\n (commitId !== undefined && active.header.commit.id !== commitId)\n ) {\n throw new MaterializationValidationError(\n \"Vector mutation does not belong to this materialization session.\"\n )\n }\n }\n\n async begin(input: MaterializationPlanHeader): Promise<MaterializationSession> {\n assertMaterializationHeader(input)\n const session = this.sessions.create(input)\n try {\n this.assertCommitAbsent(input)\n const reader = new SqliteMaterializationStateReader(this.db, input.commit.projectId)\n for (const expected of input.expected.sources)\n this.assertSource(expected, input.commit.projectId)\n for (const expected of input.expected.objects) {\n assertExpectedObjectRevision(reader.effectiveObjectRevision(expected.ref), expected)\n }\n for (const expected of input.expected.links) {\n assertExpectedLinkRevision(reader.effectiveLinkLastCommit(expected.ref), expected)\n }\n const linkScopeRevisions = reader.linkScopeRevisions(input.expected.linkScopes)\n for (const [index, expected] of input.expected.linkScopes.entries()) {\n assertExpectedLinkScopeRevision(linkScopeRevisions[index]?.fingerprint, expected)\n }\n for (const expected of input.expected.points) {\n const point = reader.exactPoint(expected.series, expected.at)\n if ((point?.lastCommitId ?? null) !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(expected.series, expected.at)} changed.`\n )\n }\n }\n return session.publicSession()\n } catch (error) {\n this.sessions.release(session)\n throw error\n }\n }\n\n async *streamState(\n input: StreamMaterializationStateInput\n ): AsyncIterable<MaterializationStatePage> {\n const session = this.sessions.require(input.session)\n assertPageRows(input.pageRows)\n const reader = new SqliteMaterializationStateReader(this.db, session.header.commit.projectId)\n for await (const request of input.requests) {\n this.sessions.require(input.session)\n const objects = uniqueSorted(request.objects, objectRefKey, objectRefSortKey)\n for (let offset = 0; offset < objects.length; offset += input.pageRows) {\n const page = reader.objectStates(objects.slice(offset, offset + input.pageRows))\n yield { objects: page, links: [], linkScopes: [], points: [] }\n }\n const links = uniqueSorted(request.links, linkRefKey, linkRefSortKey)\n for (let offset = 0; offset < links.length; offset += input.pageRows) {\n const page = reader.linkStates(links.slice(offset, offset + input.pageRows))\n yield { objects: [], links: page, linkScopes: [], points: [] }\n }\n for (const refs of reader.incidentLinks(request.incidentObjects, input.pageRows)) {\n this.sessions.require(input.session)\n yield {\n objects: [],\n links: reader.linkStates(refs),\n linkScopes: [],\n points: [],\n }\n }\n const scopes = uniqueSorted(\n request.linkScopes,\n (scope) =>\n JSON.stringify([scope.source.objectTypeId, scope.source.primaryId, scope.linkId]),\n (scope) => linkScopeSortKey(scope.source, scope.linkId)\n )\n for (let offset = 0; offset < scopes.length; offset += input.pageRows) {\n yield {\n objects: [],\n links: [],\n linkScopes: reader.linkSlotStates(scopes.slice(offset, offset + input.pageRows)),\n points: [],\n }\n }\n const points = uniqueSorted(\n request.points,\n (point) => telemetryPointKey(point.series, point.at),\n (point) => telemetryPointSortKey(point.series, point.at)\n )\n for (let offset = 0; offset < points.length; offset += input.pageRows) {\n const page = reader.exactPoints(points.slice(offset, offset + input.pageRows))\n if (page.length > 0) yield { objects: [], links: [], linkScopes: [], points: page }\n }\n }\n }\n\n async *streamSourceReplacementState(\n input: StreamSourceReplacementStateInput\n ): AsyncIterable<SourceReplacementStatePage> {\n const session = this.sessions.require(input.session)\n assertPageRows(input.pageRows)\n const replacement = this.requireReplacement(session, input)\n const reader = new SqliteMaterializationStateReader(this.db, session.header.commit.projectId)\n if (input.entityKind === \"object\") {\n if (replacement.projectionKind !== \"object\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Link projection replacement cannot stream object state.\"\n )\n }\n if (replacement.objectStreamStarted) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement object state may only be streamed once per session.\"\n )\n }\n replacement.objectStreamStarted = true\n for (const identities of reader.replacementIdentities({\n sessionId: session.id,\n sourceId: replacement.sourceId,\n candidateMaterializationId: replacement.candidateMaterializationId,\n previousMaterializationId: replacement.previousMaterializationId,\n incremental: replacement.incremental,\n kind: \"object\",\n pageRows: input.pageRows,\n })) {\n this.sessions.require(input.session)\n const refs = identities.map((identity) => {\n if (identity.kind !== \"object\") {\n invalidCorrelation(\"Object replacement returned a link identity.\")\n }\n return identity.ref\n })\n const objects = reader.replacementObjectStates(\n replacement.sourceId,\n replacement.candidateMaterializationId,\n refs\n )\n yield { objects, links: [] }\n }\n this.sessions.require(input.session)\n replacement.objectStreamCompleted = true\n return\n }\n\n if (replacement.projectionKind === \"object\" && !replacement.objectStreamCompleted) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Object projection replacement must fully stream object state before link state.\"\n )\n }\n if (replacement.linkStreamStarted) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement link state may only be streamed once per session.\"\n )\n }\n replacement.linkStreamStarted = true\n const materializationIds = [\n replacement.candidateMaterializationId,\n ...(replacement.previousMaterializationId ? [replacement.previousMaterializationId] : []),\n ]\n for (const identities of reader.replacementIdentities({\n sessionId: session.id,\n sourceId: replacement.sourceId,\n candidateMaterializationId: replacement.candidateMaterializationId,\n previousMaterializationId: replacement.previousMaterializationId,\n incremental: replacement.incremental,\n kind: \"link\",\n pageRows: input.pageRows,\n })) {\n this.sessions.require(input.session)\n const linkIdentities = identities.map((identity) => {\n if (identity.kind !== \"link\") {\n invalidCorrelation(\"Link replacement returned an object identity.\")\n }\n return identity\n })\n const links = reader.replacementLinkStates(\n replacement.sourceId,\n replacement.candidateMaterializationId,\n materializationIds,\n linkIdentities,\n replacement.incremental\n )\n yield { objects: [], links }\n }\n this.sessions.require(input.session)\n replacement.linkStreamCompleted = true\n }\n\n async stageWork(input: StageMaterializationWorkInput): Promise<void> {\n this.sessions.stage(input)\n await yieldSqliteEventLoop()\n }\n\n streamWork(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage> {\n assertPageRows(input.pageRows)\n return this.sessions.stream(input)\n }\n\n async readObjectExistence(\n input: ReadMaterializationObjectExistenceInput\n ): Promise<readonly MaterializationObjectExistence[]> {\n const session = this.sessions.require(input.session)\n return this.sessions.readObjectExistence(session, input.refs)\n }\n\n async applyChunk(input: ApplyMaterializationChunkInput): Promise<void> {\n const session = this.sessions.require(input.session)\n const { commit } = session.header\n assertPlanChunkCorrelations(input.chunk, commit)\n const sequence = this.sessions.prepareChunkSequence(session, input.chunk)\n this.db.run(\"SAVEPOINT sixb_ontology_apply_chunk\")\n try {\n this.writer.apply(commit.projectId, commit.id, input.chunk)\n this.db.run(\"RELEASE SAVEPOINT sixb_ontology_apply_chunk\")\n this.sessions.commitChunkSequence(session, sequence)\n } catch (error) {\n this.db.run(\"ROLLBACK TO SAVEPOINT sixb_ontology_apply_chunk\")\n this.db.run(\"RELEASE SAVEPOINT sixb_ontology_apply_chunk\")\n throw error\n }\n await yieldSqliteEventLoop()\n }\n\n async finalize(input: FinalizeMaterializationInput): Promise<ApplyMaterializationResult> {\n const session = this.sessions.require(input.session)\n this.assertCommitAbsent(session.header)\n await this.assertFinalization(session, input)\n for (const activation of input.finalization.sourceActivations) {\n this.activateSource(session, activation)\n }\n const record = this.insertCommit(session.header, input)\n this.sessions.release(session)\n return { commit: record }\n }\n\n deactivateSessions(): void {\n this.sessions.deactivateAll()\n }\n\n private requireReplacement(\n session: SqliteMaterializationSessionState,\n input: StreamSourceReplacementStateInput\n ): NonNullable<SqliteMaterializationSessionState[\"replacement\"]> {\n if (session.replacement) {\n if (\n session.replacement.sourceId !== input.source.projectionId ||\n session.replacement.candidateMaterializationId !== input.candidateMaterializationId\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Materialization session already owns another replacement union.\"\n )\n }\n return session.replacement\n }\n const projectId = session.header.commit.projectId\n const candidate = this.getSource(\n projectId,\n input.source.projectionId,\n input.candidateMaterializationId\n )\n if (!candidate || candidate.status !== \"ready\" || candidate.execution_token === null) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Candidate source materialization '${input.candidateMaterializationId}' is missing or is not ready.`\n )\n }\n assertProjectionExecution(this.db, {\n projectId,\n sourceId: input.source.projectionId,\n projectionRunId: candidate.projection_run_id,\n executionToken: candidate.execution_token,\n })\n const previous = this.getActiveSource(projectId, input.source.projectionId)\n if (\n candidate.protocol !== \"replacement\" ||\n (previous &&\n (previous.protocol !== candidate.protocol ||\n previous.projection_kind !== candidate.projection_kind))\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source replacement kind or protocol does not match its active materialization.\"\n )\n }\n session.replacement = {\n sourceId: input.source.projectionId,\n candidateMaterializationId: input.candidateMaterializationId,\n previousMaterializationId: previous?.materialization_id ?? null,\n incremental: candidate.base_materialization_id !== null,\n projectionKind: candidate.projection_kind,\n objectStreamStarted: false,\n objectStreamCompleted: false,\n linkStreamStarted: false,\n linkStreamCompleted: false,\n }\n return session.replacement\n }\n\n private assertCommitAbsent(header: MaterializationPlanHeader): void {\n const origin = originColumns(header.commit.origin)\n const duplicate = this.db\n .query(\n `\n SELECT CASE\n WHEN id = ? THEN 'id'\n WHEN idempotency_key = ? THEN 'idempotency'\n ELSE 'origin'\n END AS duplicate\n FROM ontology_commits\n WHERE project_id = ? AND (\n id = ? OR idempotency_key = ? OR (\n ? IS NOT NULL AND origin_kind = ? AND origin_run_id = ?\n AND (origin_batch_ordinal IS ? OR origin_batch_ordinal = ?)\n )\n )\n LIMIT 1\n `\n )\n .get(\n header.commit.id,\n header.commit.idempotencyKey,\n header.commit.projectId,\n header.commit.id,\n header.commit.idempotencyKey,\n origin.runId,\n origin.kind,\n origin.runId,\n origin.batchOrdinal,\n origin.batchOrdinal\n ) as { readonly duplicate: \"id\" | \"idempotency\" | \"origin\" } | null\n if (!duplicate) return\n if (duplicate.duplicate === \"origin\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n \"Ontology commit origin already has an authoritative commit.\"\n )\n }\n throw new MaterializationConflictError(\n \"idempotency\",\n duplicate.duplicate === \"id\"\n ? `Ontology commit '${header.commit.id}' already exists.`\n : \"Ontology idempotency key already exists.\"\n )\n }\n\n private assertSource(\n expected: MaterializationPlanHeader[\"expected\"][\"sources\"][number],\n projectId: string\n ): void {\n const active = this.getActiveSource(projectId, expected.source.projectionId)\n if (\n (active?.materialization_id ?? null) !== expected.activeMaterializationId ||\n (active?.last_commit_id ?? null) !== expected.lastCommitId\n ) {\n throw new MaterializationConflictError(\n \"projection-fence\",\n `Source '${expected.source.projectionId}' changed.`\n )\n }\n }\n\n private async assertFinalization(\n session: SqliteMaterializationSessionState,\n input: FinalizeMaterializationInput\n ): Promise<void> {\n const { commit } = session.header\n const { result } = input.finalization\n assertMaterializationFinalizationCorrelation(session, input)\n const laneCounts = this.sessions.laneCounts(session)\n assertMaterializationLaneCompletion(session, laneCounts)\n this.assertFinalCardinality(session)\n await yieldSqliteEventLoop()\n const eventCount = laneCounts.event\n const outbox = this.db\n .query(\n `\n SELECT COUNT(*) AS count, MIN(commit_ordinal) AS minimum, MAX(commit_ordinal) AS maximum\n FROM ontology_outbox WHERE project_id = ? AND commit_id = ?\n `\n )\n .get(commit.projectId, commit.id) as {\n readonly count: number\n readonly minimum: number | null\n readonly maximum: number | null\n }\n if (\n outbox.count !== eventCount ||\n (eventCount > 0 && (outbox.minimum !== 0 || outbox.maximum !== eventCount - 1))\n ) {\n invalidCorrelation(\"Outbox event ordinals must be contiguous from zero.\")\n }\n await yieldSqliteEventLoop()\n\n if (commit.intent.kind === \"telemetry\") {\n const summary = this.sessions.telemetrySummary(session, commit.intent.pointCount)\n await yieldSqliteEventLoop()\n if (summary.classifiedPoints !== commit.intent.pointCount) {\n invalidCorrelation(\n \"Telemetry point classification coverage does not match the commit intent.\"\n )\n }\n if (result.kind !== \"telemetry\" || !sameCounts(result, summary.counts)) {\n invalidCorrelation(\"Telemetry result counts do not correlate with finalized work.\")\n }\n }\n if (commit.intent.kind === \"projection\") {\n if (result.kind !== \"projection\") return\n this.sessions.assertClassificationCoverage(session)\n await yieldSqliteEventLoop()\n const counts = this.sessions.projectionCounts(session)\n await yieldSqliteEventLoop()\n if (!sameCounts(result.counts, counts)) {\n invalidCorrelation(\"Projection result counts do not correlate with finalized work.\")\n }\n }\n }\n\n private assertFinalCardinality(session: SqliteMaterializationSessionState): void {\n const violation = this.db\n .query(\n `\n WITH scopes AS (\n SELECT sort_one AS scope_sort_key,\n cardinality_source_type_id AS source_type_id,\n cardinality_source_primary_id AS source_id,\n cardinality_link_id AS link_id,\n SUM(cardinality_occupied) AS expected_count,\n MAX(CASE WHEN cardinality_occupied = 1\n THEN cardinality_target_type_id END) AS expected_target_type_id,\n MAX(CASE WHEN cardinality_occupied = 1\n THEN cardinality_target_primary_id END) AS expected_target_id\n FROM ${SQLITE_MATERIALIZATION_WORK_TABLE}\n WHERE session_id = ? AND kind = 'cardinality'\n AND cardinality_view = 'effective'\n GROUP BY sort_one, cardinality_source_type_id,\n cardinality_source_primary_id, cardinality_link_id\n ), validated AS (\n SELECT scopes.scope_sort_key, scopes.expected_count,\n COUNT(links.source_id) AS actual_count,\n COUNT(links.source_id) FILTER (\n WHERE links.target_type_id = scopes.expected_target_type_id\n AND links.target_id = scopes.expected_target_id\n ) AS matching_count\n FROM scopes\n LEFT JOIN links\n ON links.project_id = ?\n AND links.source_type_id = scopes.source_type_id\n AND links.source_id = scopes.source_id\n AND links.link_id = scopes.link_id\n GROUP BY scopes.scope_sort_key, scopes.expected_count,\n scopes.expected_target_type_id, scopes.expected_target_id\n )\n SELECT CASE WHEN expected_count > 1 THEN 'duplicate' ELSE 'mismatch' END AS reason\n FROM validated\n WHERE expected_count > 1\n OR actual_count <> expected_count\n OR matching_count <> expected_count\n LIMIT 1\n `\n )\n .get(session.id, session.header.commit.projectId) as {\n readonly reason: \"duplicate\" | \"mismatch\"\n } | null\n if (violation?.reason === \"duplicate\") {\n invalidCorrelation(\"Materialization cardinality work violates cardinality-one.\")\n }\n if (violation) {\n invalidCorrelation(\n \"Materialization cardinality work does not match the final effective link scope.\"\n )\n }\n }\n\n private activateSource(\n session: SqliteMaterializationSessionState,\n activation: SourceActivationWrite\n ): void {\n const { commit } = session.header\n assertSourceActivationCorrelation(session, activation)\n const candidate = this.getSource(\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId\n )\n if (!candidate || candidate.status !== \"ready\" || candidate.execution_token === null) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source activation candidate is missing or is not ready.\"\n )\n }\n assertProjectionExecution(this.db, {\n projectId: commit.projectId,\n sourceId: activation.source.projectionId,\n projectionRunId: activation.execution.projectionRunId,\n executionToken: activation.execution.executionToken,\n })\n if (\n candidate.projection_run_id !== activation.execution.projectionRunId ||\n candidate.execution_token !== activation.execution.executionToken ||\n candidate.projection_kind !== activation.projectionKind ||\n candidate.protocol !== activation.protocol ||\n candidate.dataset_id !== activation.datasetVersion.datasetId ||\n candidate.dataset_version_id !== activation.datasetVersion.versionId ||\n candidate.dataset_version_created_at !== activation.datasetVersion.createdAt ||\n candidate.projection_revision !== activation.projectionRevision ||\n candidate.ownership_hash !== activation.ownershipHash ||\n candidate.ontology_revision !== activation.ontologyRevision ||\n candidate.ready_at === null ||\n activation.updatedAt < candidate.ready_at\n ) {\n invalidCorrelation(\"Source activation does not match its ready candidate identity.\")\n }\n this.assertSource(activation.expected, commit.projectId)\n activateSourceRoots(this.db, commit.projectId, candidate, activation)\n const previous = this.getActiveSource(commit.projectId, activation.source.projectionId)\n if (previous) {\n assertPinnedDatasetWatermark(\n {\n datasetId: previous.dataset_id,\n versionId: previous.dataset_version_id,\n createdAt: previous.dataset_version_created_at,\n },\n activation.datasetVersion,\n \"Source activation\"\n )\n if (activation.updatedAt < previous.updated_at) {\n invalidCorrelation(\"Source activation cannot precede the active materialization update.\")\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'superseded', execution_token = NULL, terminal_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'active' AND last_commit_id = ?\n `\n )\n .run(\n activation.updatedAt,\n activation.updatedAt,\n commit.projectId,\n activation.source.projectionId,\n previous.materialization_id,\n activation.expected.lastCommitId\n ).changes,\n \"projection-fence\",\n `Source '${activation.source.projectionId}' changed.`\n )\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'active', execution_token = NULL, activated_at = ?,\n last_commit_id = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'ready' AND execution_token = ?\n `\n )\n .run(\n activation.updatedAt,\n activation.lastCommitId,\n activation.updatedAt,\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId,\n activation.execution.executionToken\n ).changes,\n \"source-materialization\",\n \"Source activation candidate changed.\"\n )\n }\n\n private insertCommit(\n header: MaterializationPlanHeader,\n input: FinalizeMaterializationInput\n ): OntologyCommitRecord {\n const { commit } = header\n const origin = originColumns(commit.origin)\n try {\n this.db\n .query(\n `\n INSERT INTO ontology_commits (\n project_id, id, idempotency_key, request_hash, execution_id,\n origin_kind, origin_run_id, origin_batch_ordinal, origin, requested_by, executor,\n ontology_revision, projection_revision, ownership_hash,\n intent, result, committed_at\n ) VALUES (\n ?, ?, ?, ?, ?, ?, ?, ?, json(?), json(?), json(?), ?, ?, ?, json(?), json(?), ?\n )\n `\n )\n .run(\n commit.projectId,\n commit.id,\n commit.idempotencyKey,\n commit.requestHash,\n commit.executionId,\n origin.kind,\n origin.runId,\n origin.batchOrdinal,\n canonicalJson(commit.origin),\n commit.requestedBy === undefined ? null : canonicalJson(commit.requestedBy),\n canonicalJson(commit.executor),\n commit.ontologyRevision,\n commit.projectionRevision ?? null,\n commit.ownershipHash ?? null,\n canonicalJson(commit.intent),\n canonicalJson(input.finalization.result),\n commit.committedAt\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw new MaterializationConflictError(\n \"idempotency\",\n \"Ontology commit identity already exists.\"\n )\n }\n throw error\n }\n const row = this.db\n .query(\"SELECT * FROM ontology_commits WHERE project_id = ? AND id = ?\")\n .get(commit.projectId, commit.id) as SqliteOntologyCommitRow\n return commitRecord(row)\n }\n\n private getActiveSource(projectId: string, sourceId: string): SqliteOntologySourceRow | null {\n return this.db\n .query(\n `SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status = 'active'`\n )\n .get(projectId, sourceId) as SqliteOntologySourceRow | null\n }\n\n private getSource(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow | null {\n return this.db\n .query(\n `SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?`\n )\n .get(projectId, sourceId, materializationId) as SqliteOntologySourceRow | null\n }\n}\n",
49
49
  "import type { Database } from \"bun:sqlite\"\nimport {\n type EffectiveChangeCounts,\n MaterializationConflictError,\n} from \"@sixb/core/internal/materialization\"\nimport {\n correlateMaterializationChunk,\n duplicateMaterializationWork as duplicateWork,\n invalidCorrelation,\n materializationPlanItems,\n ProviderMaterializationSessionState,\n type ProviderMaterializationTransactionLifecycle,\n prepareMaterializationWork,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationEventWorkRecord,\n MaterializationPlanChunk,\n MaterializationPlanHeader,\n MaterializationSession,\n MaterializationWorkPage,\n MaterializationWorkRecord,\n StageMaterializationWorkInput,\n StreamMaterializationWorkInput,\n} from \"@sixb/core/storage\"\nimport {\n SQLITE_MATERIALIZATION_WORK_TABLE,\n SQLITE_REPLACEMENT_WORK_TABLE,\n} from \"./materialization-state\"\nimport { canonicalJson, isSqliteConstraintError, parseJson } from \"./shared\"\n\nexport interface SqliteOntologyTransactionContext {\n readonly id: object\n readonly materializations: ProviderMaterializationTransactionLifecycle\n active: boolean\n}\n\ninterface WorkCursor {\n readonly majorOrder: number\n readonly minorOrder: number\n readonly sortOne: string\n readonly sortTwo: string\n readonly recordKey: string\n}\n\ninterface WorkDatabaseRow {\n readonly record_key: string\n readonly major_order: number\n readonly minor_order: number\n readonly sort_one: string\n readonly sort_two: string\n readonly payload: string\n}\n\ninterface WorkSummary {\n apply: number\n cardinality: number\n event: number\n objectClassifications: number\n linkClassifications: number\n pointClassifications: number\n objectsCreated: number\n objectsUpdated: number\n objectsDeleted: number\n linksCreated: number\n linksUpdated: number\n linksDeleted: number\n pointsCreated: number\n pointsUpdated: number\n latestObjectsChanged: number\n}\n\nexport interface SqliteChunkSequenceProgress {\n readonly appliedPlanCount: number\n readonly appliedOutboxCount: number\n readonly appliedPlanCursor: WorkCursor | null\n readonly appliedEventCursor: WorkCursor | null\n}\n\nexport class SqliteMaterializationSessionState extends ProviderMaterializationSessionState {\n appliedPlanCursor: WorkCursor | null = null\n appliedEventCursor: WorkCursor | null = null\n readonly summary: WorkSummary = emptyWorkSummary()\n}\n\nexport class SqliteMaterializationSessions {\n private readonly sessions = new WeakMap<object, SqliteMaterializationSessionState>()\n private readonly live = new Set<SqliteMaterializationSessionState>()\n\n constructor(\n private readonly db: Database,\n private readonly context: SqliteOntologyTransactionContext | null\n ) {}\n\n create(header: MaterializationPlanHeader): SqliteMaterializationSessionState {\n if (!this.context?.active) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization sessions require an active storage transaction.\"\n )\n }\n this.ensureTables()\n const session = new SqliteMaterializationSessionState(structuredClone(header), this.context.id)\n this.sessions.set(session.providerToken, session)\n this.live.add(session)\n this.context.materializations.register(session.providerToken)\n return session\n }\n\n require(session: MaterializationSession): SqliteMaterializationSessionState {\n const value = this.sessions.get(session.providerToken)\n if (\n !value ||\n !value.active ||\n !this.context?.active ||\n value.transactionId !== this.context.id\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization session is inactive.\"\n )\n }\n return value\n }\n\n release(session: SqliteMaterializationSessionState): void {\n if (!session.active) return\n session.active = false\n session.replacement = null\n this.live.delete(session)\n // The normal transaction has one session. Dropping its transaction-local spool avoids an\n // indexed DELETE over hundreds of thousands of rows and releases temp pages immediately.\n // Preserve per-session deletion only when another live session still shares the tables.\n if (this.live.size === 0) this.dropWorkTables()\n else this.deleteWork(session.id)\n this.context?.materializations.complete(session.providerToken)\n }\n\n deactivateAll(): void {\n for (const session of this.live) this.release(session)\n }\n\n stage(input: StageMaterializationWorkInput): void {\n const session = this.require(input.session)\n const records = prepareMaterializationWork(session, input)\n if (records.length === 0) return\n const insert = this.db.query(\n `\n INSERT INTO ${SQLITE_MATERIALIZATION_WORK_TABLE} (\n session_id, record_key, unique_key, kind, lane,\n major_order, minor_order, sort_one, sort_two,\n classification_entity_kind, classification_identity_key,\n cardinality_view, cardinality_occupied, cardinality_source_type_id,\n cardinality_source_primary_id, cardinality_link_id,\n cardinality_target_type_id, cardinality_target_primary_id, payload\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, json(?))\n `\n )\n this.db.run(\"SAVEPOINT sixb_ontology_stage_work\")\n let currentRecordKey: string | undefined\n try {\n for (const { record, uniqueKey, columns } of records) {\n currentRecordKey = record.recordKey\n const classification = record.kind === \"classification\" ? record : null\n const cardinality = record.kind === \"cardinality\" ? record : null\n insert.run(\n session.id,\n record.recordKey,\n uniqueKey,\n record.kind,\n columns.lane,\n columns.majorOrder,\n columns.minorOrder,\n columns.sortOne,\n columns.sortTwo,\n classification?.entityKind ?? null,\n classification?.identityKey ?? null,\n cardinality?.view ?? null,\n cardinality ? Number(cardinality.occupied) : null,\n cardinality?.ref.source.objectTypeId ?? null,\n cardinality?.ref.source.primaryId ?? null,\n cardinality?.ref.linkId ?? null,\n cardinality?.ref.target.objectTypeId ?? null,\n cardinality?.ref.target.primaryId ?? null,\n canonicalJson(record)\n )\n }\n this.db.run(\"RELEASE SAVEPOINT sixb_ontology_stage_work\")\n } catch (error) {\n this.db.run(\"ROLLBACK TO SAVEPOINT sixb_ontology_stage_work\")\n this.db.run(\"RELEASE SAVEPOINT sixb_ontology_stage_work\")\n if (isSqliteConstraintError(error)) {\n throw duplicateWork(currentRecordKey)\n }\n throw error\n }\n for (const prepared of records)\n recordSummary(session.summary, prepared.record, prepared.columns)\n }\n\n async *stream(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage> {\n const session = this.require(input.session)\n const stream = session.workStreams[input.order]\n if (stream.started) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Materialization ${input.order} work may only be streamed once per session.`\n )\n }\n stream.started = true\n session.workSealed = true\n let cursor: WorkCursor | null = null\n while (true) {\n this.require(input.session)\n const rows = this.readLane(input.order, session.id, cursor, input.pageRows)\n if (rows.length === 0) break\n const records = rows.map((row) =>\n parseJson<MaterializationWorkRecord>(row.payload)\n ) as MaterializationWorkPage[\"records\"]\n cursor = workCursor(rows[rows.length - 1]!)\n stream.emittedCount += records.length\n yield { records }\n }\n this.require(input.session)\n stream.completed = true\n }\n\n readObjectExistence(\n session: SqliteMaterializationSessionState,\n refs: readonly { readonly objectTypeId: string; readonly primaryId: string }[]\n ): readonly {\n readonly ref: { readonly objectTypeId: string; readonly primaryId: string }\n readonly exists: boolean\n }[] {\n const lookup = this.db.query(\n `\n SELECT payload FROM ${SQLITE_MATERIALIZATION_WORK_TABLE}\n WHERE session_id = ? AND unique_key = ? AND kind = 'object-existence'\n `\n )\n return refs.flatMap((ref) => {\n const key = `object-existence:${JSON.stringify([ref.objectTypeId, ref.primaryId])}`\n const row = lookup.get(session.id, key) as { readonly payload: string } | null\n if (!row) return []\n const record = parseJson<\n Extract<MaterializationWorkRecord, { readonly kind: \"object-existence\" }>\n >(row.payload)\n return [{ ref: record.ref, exists: record.exists }]\n })\n }\n\n prepareChunkSequence(\n session: SqliteMaterializationSessionState,\n chunk: MaterializationPlanChunk\n ): SqliteChunkSequenceProgress {\n const items = materializationPlanItems(chunk)\n const planRows = this.readLane(\"apply\", session.id, session.appliedPlanCursor, items.length)\n const expectedItems = planRows.map((row) => {\n const record = parseJson<Extract<MaterializationWorkRecord, { readonly kind: \"plan\" }>>(\n row.payload\n )\n return record.item\n })\n const eventRows = this.readLane(\n \"event\",\n session.id,\n session.appliedEventCursor,\n chunk.outbox.length\n )\n const expectedEvents = eventRows.map((row) =>\n parseJson<MaterializationEventWorkRecord>(row.payload)\n )\n const progress = correlateMaterializationChunk(\n session,\n chunk,\n items,\n expectedItems,\n expectedEvents\n )\n return {\n ...progress,\n appliedPlanCursor:\n planRows.length === 0\n ? session.appliedPlanCursor\n : workCursor(planRows[planRows.length - 1]!),\n appliedEventCursor:\n eventRows.length === 0\n ? session.appliedEventCursor\n : workCursor(eventRows[eventRows.length - 1]!),\n }\n }\n\n commitChunkSequence(\n session: SqliteMaterializationSessionState,\n progress: SqliteChunkSequenceProgress\n ): void {\n session.appliedPlanCount = progress.appliedPlanCount\n session.appliedOutboxCount = progress.appliedOutboxCount\n session.appliedPlanCursor = progress.appliedPlanCursor\n session.appliedEventCursor = progress.appliedEventCursor\n }\n\n laneCounts(session: SqliteMaterializationSessionState): {\n readonly apply: number\n readonly cardinality: number\n readonly event: number\n } {\n return {\n apply: session.summary.apply,\n cardinality: session.summary.cardinality,\n event: session.summary.event,\n }\n }\n\n projectionCounts(session: SqliteMaterializationSessionState): EffectiveChangeCounts {\n const summary = session.summary\n return {\n objectsCreated: summary.objectsCreated,\n objectsUpdated: summary.objectsUpdated,\n objectsDeleted: summary.objectsDeleted,\n objectsUnchanged:\n summary.objectClassifications -\n summary.objectsCreated -\n summary.objectsUpdated -\n summary.objectsDeleted,\n linksCreated: summary.linksCreated,\n linksUpdated: summary.linksUpdated,\n linksDeleted: summary.linksDeleted,\n linksUnchanged:\n summary.linkClassifications -\n summary.linksCreated -\n summary.linksUpdated -\n summary.linksDeleted,\n }\n }\n\n telemetrySummary(session: SqliteMaterializationSessionState, pointCount: number) {\n const summary = session.summary\n return {\n classifiedPoints: summary.pointClassifications,\n counts: {\n pointsCreated: summary.pointsCreated,\n pointsUpdated: summary.pointsUpdated,\n pointsUnchanged: pointCount - summary.pointsCreated - summary.pointsUpdated,\n latestObjectsChanged: summary.latestObjectsChanged,\n },\n }\n }\n\n assertClassificationCoverage(session: SqliteMaterializationSessionState): void {\n if (!session.replacement) return\n const expectedObject = session.replacement.projectionKind === \"object\" ? 1 : 0\n const mismatch = this.db\n .query(\n `\n WITH invalid AS (\n SELECT 1\n FROM ${SQLITE_REPLACEMENT_WORK_TABLE} AS expected\n WHERE expected.session_id = ? AND expected.diff_required = 1\n AND (expected.entity_kind = 'link' OR ? = 1)\n AND NOT EXISTS (\n SELECT 1 FROM ${SQLITE_MATERIALIZATION_WORK_TABLE} AS actual\n WHERE actual.session_id = expected.session_id\n AND actual.unique_key = 'classification:' || expected.entity_kind || ':'\n || expected.identity_key\n )\n UNION ALL\n SELECT 1\n FROM ${SQLITE_MATERIALIZATION_WORK_TABLE} AS actual\n WHERE actual.session_id = ?\n -- A bounded range uses the existing (session_id, unique_key) unique index and scans\n -- classification entries only, instead of sorting the complete JSON work spool.\n AND actual.unique_key >= 'classification:'\n AND actual.unique_key < 'classification;'\n AND (\n actual.classification_entity_kind = 'point'\n OR NOT EXISTS (\n SELECT 1 FROM ${SQLITE_REPLACEMENT_WORK_TABLE} AS expected\n WHERE expected.session_id = actual.session_id\n AND expected.entity_kind = actual.classification_entity_kind\n AND expected.identity_key = actual.classification_identity_key\n AND expected.diff_required = 1\n AND (expected.entity_kind = 'link' OR ? = 1)\n )\n )\n )\n SELECT 1 FROM invalid LIMIT 1\n `\n )\n .get(session.id, expectedObject, session.id, expectedObject)\n if (mismatch) {\n invalidCorrelation(\n \"Projection replacement classification coverage does not match its streamed state.\"\n )\n }\n }\n\n private readLane(\n lane: StreamMaterializationWorkInput[\"order\"],\n sessionId: string,\n cursor: WorkCursor | null,\n limit: number\n ): WorkDatabaseRow[] {\n if (limit === 0) return []\n const selected = `record_key, major_order, minor_order, sort_one, sort_two, payload`\n if (!cursor) {\n return this.db\n .query(\n `SELECT ${selected} FROM ${SQLITE_MATERIALIZATION_WORK_TABLE}\n WHERE session_id = ? AND lane = ?\n ORDER BY major_order, minor_order, sort_one, sort_two, record_key\n LIMIT ?`\n )\n .all(sessionId, lane, limit) as WorkDatabaseRow[]\n }\n return this.db\n .query(\n `SELECT ${selected} FROM ${SQLITE_MATERIALIZATION_WORK_TABLE}\n WHERE session_id = ? AND lane = ?\n AND (major_order, minor_order, sort_one, sort_two, record_key) > (?, ?, ?, ?, ?)\n ORDER BY major_order, minor_order, sort_one, sort_two, record_key\n LIMIT ?`\n )\n .all(\n sessionId,\n lane,\n cursor.majorOrder,\n cursor.minorOrder,\n cursor.sortOne,\n cursor.sortTwo,\n cursor.recordKey,\n limit\n ) as WorkDatabaseRow[]\n }\n\n private ensureTables(): void {\n this.db.run(`\n CREATE TEMP TABLE IF NOT EXISTS ${SQLITE_MATERIALIZATION_WORK_TABLE} (\n session_id TEXT NOT NULL,\n record_key TEXT NOT NULL,\n unique_key TEXT NOT NULL,\n kind TEXT NOT NULL,\n lane TEXT NOT NULL,\n major_order INTEGER NOT NULL,\n minor_order INTEGER NOT NULL,\n sort_one TEXT NOT NULL,\n sort_two TEXT NOT NULL,\n classification_entity_kind TEXT,\n classification_identity_key TEXT,\n cardinality_view TEXT,\n cardinality_occupied INTEGER,\n cardinality_source_type_id TEXT,\n cardinality_source_primary_id TEXT,\n cardinality_link_id TEXT,\n cardinality_target_type_id TEXT,\n cardinality_target_primary_id TEXT,\n payload TEXT NOT NULL CHECK (json_valid(payload)),\n PRIMARY KEY (session_id, record_key),\n UNIQUE (session_id, unique_key)\n );\n CREATE INDEX IF NOT EXISTS idx_ontology_materialization_work_lane\n ON ${SQLITE_MATERIALIZATION_WORK_TABLE}(\n session_id, lane, major_order, minor_order, sort_one, sort_two, record_key\n );\n CREATE TEMP TABLE IF NOT EXISTS ${SQLITE_REPLACEMENT_WORK_TABLE} (\n session_id TEXT NOT NULL,\n entity_kind TEXT NOT NULL,\n identity_key TEXT NOT NULL,\n sort_key TEXT NOT NULL,\n diff_required INTEGER NOT NULL CHECK (diff_required IN (0, 1)),\n PRIMARY KEY (session_id, entity_kind, identity_key)\n );\n CREATE INDEX IF NOT EXISTS idx_ontology_replacement_work_order\n ON ${SQLITE_REPLACEMENT_WORK_TABLE}(\n session_id, entity_kind, sort_key, identity_key\n );\n `)\n }\n\n private deleteWork(sessionId: string): void {\n this.db\n .query(`DELETE FROM ${SQLITE_MATERIALIZATION_WORK_TABLE} WHERE session_id = ?`)\n .run(sessionId)\n this.db\n .query(`DELETE FROM ${SQLITE_REPLACEMENT_WORK_TABLE} WHERE session_id = ?`)\n .run(sessionId)\n }\n\n private dropWorkTables(): void {\n this.db.run(`\n DROP TABLE IF EXISTS ${SQLITE_MATERIALIZATION_WORK_TABLE};\n DROP TABLE IF EXISTS ${SQLITE_REPLACEMENT_WORK_TABLE};\n `)\n }\n}\n\nfunction workCursor(row: WorkDatabaseRow): WorkCursor {\n return {\n majorOrder: row.major_order,\n minorOrder: row.minor_order,\n sortOne: row.sort_one,\n sortTwo: row.sort_two,\n recordKey: row.record_key,\n }\n}\n\nfunction emptyWorkSummary(): WorkSummary {\n return {\n apply: 0,\n cardinality: 0,\n event: 0,\n objectClassifications: 0,\n linkClassifications: 0,\n pointClassifications: 0,\n objectsCreated: 0,\n objectsUpdated: 0,\n objectsDeleted: 0,\n linksCreated: 0,\n linksUpdated: 0,\n linksDeleted: 0,\n pointsCreated: 0,\n pointsUpdated: 0,\n latestObjectsChanged: 0,\n }\n}\n\nfunction recordSummary(\n summary: WorkSummary,\n record: MaterializationWorkRecord,\n columns: { readonly lane: \"none\" | \"apply\" | \"cardinality\" | \"event\" }\n): void {\n if (columns.lane !== \"none\") summary[columns.lane] += 1\n\n if (record.kind === \"classification\") {\n if (record.entityKind === \"object\") summary.objectClassifications += 1\n if (record.entityKind === \"link\") summary.linkClassifications += 1\n if (record.entityKind === \"point\") summary.pointClassifications += 1\n return\n }\n if (record.kind !== \"plan\") return\n\n switch (record.item.kind) {\n case \"object-upsert\":\n summary.latestObjectsChanged += 1\n if (record.item.value.expected.exists) summary.objectsUpdated += 1\n else summary.objectsCreated += 1\n return\n case \"object-delete\":\n summary.objectsDeleted += 1\n return\n case \"link-upsert\":\n if (record.item.value.expected.exists) summary.linksUpdated += 1\n else summary.linksCreated += 1\n return\n case \"link-delete\":\n summary.linksDeleted += 1\n return\n case \"point-upsert\":\n if (record.item.value.expected.lastCommitId === null) summary.pointsCreated += 1\n else summary.pointsUpdated += 1\n return\n case \"object-override-upsert\":\n case \"object-override-delete\":\n case \"link-override-upsert\":\n case \"link-override-delete\":\n return\n }\n}\n",
50
- "import type { Database } from \"bun:sqlite\"\nimport type {\n EffectiveLinkSnapshot,\n EffectiveObjectSnapshot,\n OntologyLinkRef,\n OntologyObjectRef,\n ProjectionEntityRef,\n TelemetrySeriesRef,\n} from \"@sixb/core/internal/materialization\"\nimport {\n linkRefKey,\n linkScopeSortKey,\n MaterializationConflictError,\n objectRefKey,\n projectionEntityKey,\n telemetryPointSortKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n appendScopeSnapshot,\n finishScopeAccumulator,\n linkSlotOverrideValue,\n startScopeAccumulator,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationLinkScopeRevision,\n MaterializationLinkScopeState,\n MaterializationLinkState,\n MaterializationObjectState,\n SourceReplacementLinkState,\n SourceReplacementObjectState,\n StoredLinkOverride,\n StoredLinkSlotOverride,\n StoredObjectOverride,\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n StoredTelemetryPoint,\n} from \"@sixb/core/storage\"\nimport {\n canonicalJson,\n linkRefFromColumns,\n objectRefFromColumns,\n parseJson,\n type SqliteOntologySourceAssertionRow,\n type SqliteStoredOverrideRow,\n} from \"./shared\"\nimport { activeSourceRows, replacementAssertionRows, replacementSourceRows } from \"./source-roots\"\n\nexport const SQLITE_MATERIALIZATION_WORK_TABLE = \"ontology_materialization_work\"\nexport const SQLITE_REPLACEMENT_WORK_TABLE = \"ontology_replacement_work\"\n\ninterface EffectiveObjectRow {\n readonly object_type_id: string\n readonly primary_id: string\n readonly properties: string\n readonly created_at: string\n readonly updated_at: string\n readonly version: number\n readonly last_commit_id: string | null\n}\n\ninterface EffectiveLinkRow {\n readonly source_type_id: string\n readonly source_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_id: string\n readonly properties: string | null\n readonly created_at: string\n readonly updated_at: string\n readonly last_commit_id: string | null\n}\n\ninterface TelemetryRow {\n readonly object_type_id: string\n readonly object_id: string\n readonly property_id: string\n readonly value: string\n readonly unit: string | null\n readonly at: string\n readonly last_commit_id: string | null\n}\n\ninterface LinkScopeRow extends EffectiveLinkRow {\n readonly scope_sort_key: string\n}\n\nfunction linkScopeRequestJson(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n): string {\n return canonicalJson(\n scopes.map(({ source, linkId }) => ({\n scopeSortKey: linkScopeSortKey(source, linkId),\n sourceTypeId: source.objectTypeId,\n sourceId: source.primaryId,\n linkId,\n }))\n )\n}\n\ninterface ObjectOverrideRow extends SqliteStoredOverrideRow {\n readonly object_type_id: string\n readonly primary_id: string\n readonly edited_at: string\n}\n\ninterface LinkOverrideRow extends SqliteStoredOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n}\n\ninterface LinkSlotOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n readonly value: string\n readonly last_commit_id: string\n readonly updated_at: string\n}\n\ninterface ReplacementSources {\n readonly owned: ReadonlySet<string>\n readonly byMaterialization: ReadonlyMap<string, ReadonlyMap<string, StoredSourceAssertion>>\n}\n\nexport type ReplacementIdentity =\n | {\n readonly kind: \"object\"\n readonly ref: OntologyObjectRef\n readonly sortKey: string\n readonly diffRequired: true\n }\n | {\n readonly kind: \"link\"\n readonly ref: OntologyLinkRef\n readonly sortKey: string\n readonly diffRequired: boolean\n }\n\ninterface ReplacementIdentityInput {\n readonly incremental?: boolean\n readonly sessionId: string\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly previousMaterializationId: string | null\n readonly kind: \"object\" | \"link\"\n readonly pageRows: number\n}\n\ninterface ReplacementWorkRow {\n readonly entity_kind: \"object\" | \"link\"\n readonly identity_key: string\n readonly sort_key: string\n readonly diff_required: number\n}\n\ninterface ReplacementCursor {\n readonly sortKey: string\n readonly identityKey: string\n}\n\nexport class SqliteMaterializationStateReader {\n constructor(\n private readonly db: Database,\n readonly projectId: string\n ) {}\n\n objectState(ref: OntologyObjectRef): MaterializationObjectState {\n return this.objectStates([ref])[0]!\n }\n\n objectStates(refs: readonly OntologyObjectRef[]): readonly MaterializationObjectState[] {\n if (refs.length === 0) return []\n const requested = canonicalJson(\n refs.map((ref) => ({ objectTypeId: ref.objectTypeId, primaryId: ref.primaryId }))\n )\n const requestedObjects = `\n SELECT DISTINCT json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id\n FROM json_each(?)\n `\n // Keep the JSON request set on the outer side of each lookup. SQLite cannot estimate the\n // cardinality of json_each() and otherwise scans every project row once per requested key.\n // CROSS JOIN deliberately fixes the loop order so the existing composite indexes are used.\n const effectiveRows = this.db\n .query(\n `WITH requested AS (${requestedObjects})\n SELECT objects.* FROM requested\n CROSS JOIN objects\n ON objects.project_id = ?\n AND objects.object_type_id = requested.object_type_id\n AND objects.primary_id = requested.primary_id`\n )\n .all(requested, this.projectId) as EffectiveObjectRow[]\n const sourceRows = activeSourceRows(\n this.db,\n this.projectId,\n refs.map((ref) => ({ kind: \"object\", ref }))\n )\n const overrideRows = this.db\n .query(\n `WITH requested AS (${requestedObjects})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_object_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.object_type_id = requested.object_type_id\n AND overrides.primary_id = requested.primary_id`\n )\n .all(requested, this.projectId) as ObjectOverrideRow[]\n const telemetryRows = this.db\n .query(\n `WITH requested AS (${requestedObjects}), ranked AS (\n SELECT timeseries.*,\n ROW_NUMBER() OVER (\n PARTITION BY timeseries.object_type_id, timeseries.object_id,\n timeseries.property_id\n ORDER BY timeseries.at DESC\n ) AS rank\n FROM requested\n CROSS JOIN timeseries\n ON timeseries.project_id = ?\n AND timeseries.object_type_id = requested.object_type_id\n AND timeseries.object_id = requested.primary_id\n )\n SELECT * FROM ranked WHERE rank = 1`\n )\n .all(requested, this.projectId) as TelemetryRow[]\n\n const effective = new Map(\n effectiveRows.map((row) => [objectRefKey(objectRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [objectRefKey(objectRefFromColumns(row)), storedObjectOverride(row)] as const\n )\n )\n const telemetry = new Map<string, StoredTelemetryPoint[]>()\n for (const row of telemetryRows) {\n const key = objectRefKey({ objectTypeId: row.object_type_id, primaryId: row.object_id })\n const points = telemetry.get(key) ?? []\n points.push(storedPoint(row))\n telemetry.set(key, points)\n }\n for (const points of telemetry.values()) {\n points.sort((left, right) =>\n telemetryPointSortKey(left.series, left.at).localeCompare(\n telemetryPointSortKey(right.series, right.at)\n )\n )\n }\n\n return refs.map((ref) => {\n const key = objectRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceObject(sources.get(projectionEntityKey({ kind: \"object\", ref }))),\n override: overrides.get(key) ?? null,\n effective: effectiveRow ? effectiveObjectSnapshot(effectiveRow) : null,\n latestTelemetry: telemetry.get(key) ?? [],\n }\n })\n }\n\n linkState(ref: OntologyLinkRef): MaterializationLinkState {\n return this.linkStates([ref])[0]!\n }\n\n linkStates(refs: readonly OntologyLinkRef[]): readonly MaterializationLinkState[] {\n if (refs.length === 0) return []\n const requested = canonicalJson(\n refs.map((ref) => ({\n sourceTypeId: ref.source.objectTypeId,\n sourceId: ref.source.primaryId,\n linkId: ref.linkId,\n targetTypeId: ref.target.objectTypeId,\n targetId: ref.target.primaryId,\n }))\n )\n const effectiveRequest = `\n SELECT DISTINCT json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_id,\n json_extract(value, '$.linkId') AS link_id,\n json_extract(value, '$.targetTypeId') AS target_type_id,\n json_extract(value, '$.targetId') AS target_id\n FROM json_each(?)\n `\n const sourceRequest = `\n SELECT DISTINCT json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id,\n json_extract(value, '$.targetTypeId') AS target_type_id,\n json_extract(value, '$.targetId') AS target_primary_id\n FROM json_each(?)\n `\n const effectiveRows = this.db\n .query(\n `WITH requested AS (${effectiveRequest})\n SELECT links.* FROM requested\n CROSS JOIN links\n ON links.project_id = ?\n AND links.source_type_id = requested.source_type_id\n AND links.source_id = requested.source_id\n AND links.link_id = requested.link_id\n AND links.target_type_id = requested.target_type_id\n AND links.target_id = requested.target_id`\n )\n .all(requested, this.projectId) as EffectiveLinkRow[]\n const sourceRows = activeSourceRows(\n this.db,\n this.projectId,\n refs.map((ref) => ({ kind: \"link\", ref }))\n )\n const overrideRows = this.db\n .query(\n `WITH requested AS (${sourceRequest})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'edge'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id\n AND overrides.target_type_id = requested.target_type_id\n AND overrides.target_primary_id = requested.target_primary_id`\n )\n .all(requested, this.projectId) as LinkOverrideRow[]\n const slotOverrideRows = this.db\n .query(\n `WITH requested AS (${sourceRequest})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'slot'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id`\n )\n .all(requested, this.projectId) as LinkSlotOverrideRow[]\n const effective = new Map(\n effectiveRows.map((row) => [linkRefKey(linkRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [linkRefKey(linkRefFromOverrideColumns(row)), storedLinkOverride(row)] as const\n )\n )\n const slotOverrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n return refs.map((ref) => {\n const key = linkRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceLink(sources.get(projectionEntityKey({ kind: \"link\", ref }))),\n override: overrides.get(key) ?? null,\n slotOverride: slotOverrides.get(linkScopeSortKey(ref.source, ref.linkId)) ?? null,\n effective: effectiveRow ? effectiveLinkSnapshot(effectiveRow) : null,\n }\n })\n }\n\n exactPoint(series: TelemetrySeriesRef, at: string): StoredTelemetryPoint | null {\n return this.exactPoints([{ series, at }])[0] ?? null\n }\n\n exactPoints(\n points: readonly { readonly series: TelemetrySeriesRef; readonly at: string }[]\n ): readonly StoredTelemetryPoint[] {\n if (points.length === 0) return []\n const requested = canonicalJson(\n points.map(({ series, at }) => ({\n objectTypeId: series.object.objectTypeId,\n objectId: series.object.primaryId,\n propertyId: series.propertyId,\n at,\n }))\n )\n const rows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.objectId') AS object_id,\n json_extract(value, '$.propertyId') AS property_id,\n json_extract(value, '$.at') AS at\n FROM json_each(?)\n )\n SELECT timeseries.* FROM requested\n CROSS JOIN timeseries\n ON timeseries.project_id = ?\n AND timeseries.object_type_id = requested.object_type_id\n AND timeseries.object_id = requested.object_id\n AND timeseries.property_id = requested.property_id\n AND timeseries.at = requested.at`\n )\n .all(requested, this.projectId) as TelemetryRow[]\n const found = new Map(\n rows.map((row) => {\n const point = storedPoint(row)\n return [telemetryPointSortKey(point.series, point.at), point] as const\n })\n )\n return points.flatMap((point) => {\n const stored = found.get(telemetryPointSortKey(point.series, point.at))\n return stored ? [stored] : []\n })\n }\n\n linkScopeRevisions(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): readonly MaterializationLinkScopeRevision[] {\n if (scopes.length === 0) return []\n return this.readEffectiveLinkScopes(scopes, linkScopeRequestJson(scopes)).revisions\n }\n\n linkSlotStates(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): readonly MaterializationLinkScopeState[] {\n if (scopes.length === 0) return []\n const requestedJson = linkScopeRequestJson(scopes)\n const sourceRows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT rows.* FROM requested\n CROSS JOIN ontology_source_rows AS rows\n ON rows.project_id = ?\n AND rows.entity_kind = 'link'\n AND rows.source_type_id = requested.source_type_id\n AND rows.source_primary_id = requested.source_primary_id\n AND rows.link_id = requested.link_id\n JOIN ontology_source_roots AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n AND sources.root_sort_key = rows.root_sort_key\n WHERE sources.active = 1`\n )\n .all(requestedJson, this.projectId) as SqliteOntologySourceAssertionRow[]\n const slotOverrideRows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'slot'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id`\n )\n .all(requestedJson, this.projectId) as LinkSlotOverrideRow[]\n const sources = activeScopeSourceMap(sourceRows)\n const overrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n const { revisions, effective } = this.readEffectiveLinkScopes(scopes, requestedJson)\n return scopes.map(({ source, linkId }, index) => {\n const key = linkScopeSortKey(source, linkId)\n return {\n ...revisions[index]!,\n sourceAssertion: sources.get(key) ?? null,\n override: overrides.get(key) ?? null,\n effective: effective.get(key) ?? null,\n }\n })\n }\n\n private readEffectiveLinkScopes(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[],\n requestedJson: string\n ): {\n readonly revisions: readonly MaterializationLinkScopeRevision[]\n readonly effective: ReadonlyMap<string, EffectiveLinkSnapshot | null>\n } {\n const accumulators = new Map(\n scopes.map(({ source, linkId }) => {\n const key = linkScopeSortKey(source, linkId)\n return [key, startScopeAccumulator(source, linkId)] as const\n })\n )\n const effective = new Map<string, EffectiveLinkSnapshot | null>()\n const rows = this.db\n .query(\n `\n WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.scopeSortKey') AS scope_sort_key,\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT requested.scope_sort_key, links.*\n FROM requested\n CROSS JOIN links\n ON links.project_id = ?\n AND links.source_type_id = requested.source_type_id\n AND links.source_id = requested.source_id\n AND links.link_id = requested.link_id\n ORDER BY requested.scope_sort_key, ${linkSortExpression(\"links\")}\n `\n )\n .iterate(requestedJson, this.projectId) as Iterable<LinkScopeRow>\n for (const row of rows) {\n const accumulator = accumulators.get(row.scope_sort_key)\n if (!accumulator) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Unexpected link scope '${row.scope_sort_key}' returned by storage.`\n )\n }\n const snapshot = effectiveLinkSnapshot(row)\n appendScopeSnapshot(accumulator, snapshot)\n effective.set(row.scope_sort_key, accumulator.effectiveCount === 1 ? snapshot : null)\n }\n return {\n revisions: scopes.map(({ source, linkId }) =>\n finishScopeAccumulator(accumulators.get(linkScopeSortKey(source, linkId))!)\n ),\n effective,\n }\n }\n\n *incidentLinks(\n objects: readonly OntologyObjectRef[],\n pageRows: number\n ): Iterable<OntologyLinkRef[]> {\n if (objects.length === 0) return\n const values = objects.map(() => \"(?, ?)\").join(\", \")\n const args = objects.flatMap((ref) => [ref.objectTypeId, ref.primaryId])\n let cursor: string | null = null\n while (true) {\n const rows = this.db\n .query(\n `\n WITH requested(object_type_id, primary_id) AS (VALUES ${values}),\n authority_links AS (\n SELECT source_type_id, source_id, link_id, target_type_id, target_id\n FROM links WHERE project_id = ?\n UNION\n SELECT source_type_id, source_primary_id, link_id, target_type_id, target_primary_id\n FROM ontology_link_overrides\n WHERE project_id = ?\n UNION\n SELECT rows.source_type_id, rows.source_primary_id, rows.link_id,\n rows.target_type_id, rows.target_primary_id\n FROM ontology_source_rows AS rows\n JOIN ontology_source_roots AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n AND sources.root_sort_key = rows.root_sort_key\n WHERE rows.project_id = ? AND rows.entity_kind = 'link' AND sources.active = 1\n ), selected AS (\n SELECT DISTINCT links.*,\n ${linkSortExpression(\"links\")} AS sort_key\n FROM authority_links AS links\n WHERE EXISTS (\n SELECT 1 FROM requested\n WHERE (requested.object_type_id = links.source_type_id\n AND requested.primary_id = links.source_id)\n OR (requested.object_type_id = links.target_type_id\n AND requested.primary_id = links.target_id)\n )\n )\n SELECT * FROM selected\n WHERE (? IS NULL OR sort_key > ?)\n ORDER BY sort_key\n LIMIT ?\n `\n )\n .all(\n ...args,\n this.projectId,\n this.projectId,\n this.projectId,\n cursor,\n cursor,\n pageRows\n ) as (EffectiveLinkRow & { readonly sort_key: string })[]\n if (rows.length === 0) break\n yield rows.map(linkRefFromColumns)\n cursor = rows[rows.length - 1]?.sort_key ?? null\n }\n }\n\n *replacementIdentities(input: ReplacementIdentityInput): Iterable<ReplacementIdentity[]> {\n this.prepareReplacementIdentities(input)\n let cursor: ReplacementCursor | null = null\n while (true) {\n const rows = this.replacementRows(input, cursor)\n if (rows.length === 0) break\n yield rows.map(replacementIdentity)\n if (rows.length < input.pageRows) break\n const last = rows[rows.length - 1]!\n cursor = { sortKey: last.sort_key, identityKey: last.identity_key }\n }\n }\n\n replacementObjectStates(\n sourceId: string,\n candidateMaterializationId: string,\n refs: readonly OntologyObjectRef[]\n ): readonly SourceReplacementObjectState[] {\n const base = this.objectStates(refs)\n const candidates = this.replacementSources(\n sourceId,\n [candidateMaterializationId],\n refs.map((ref) => ({ kind: \"object\" as const, ref }))\n )\n return base.map((state) => ({\n ref: state.ref,\n candidateSource: sourceObject(\n candidates.byMaterialization\n .get(candidateMaterializationId)\n ?.get(projectionEntityKey({ kind: \"object\", ref: state.ref }))\n ),\n override: state.override,\n effective: state.effective,\n latestTelemetry: state.latestTelemetry,\n }))\n }\n\n replacementLinkStates(\n sourceId: string,\n candidateMaterializationId: string,\n materializationIds: readonly string[],\n identities: readonly Extract<ReplacementIdentity, { readonly kind: \"link\" }>[],\n incremental = false\n ): readonly SourceReplacementLinkState[] {\n const refs = identities.map((identity) => identity.ref)\n const base = this.linkStates(refs)\n const replacements = this.replacementSources(\n sourceId,\n materializationIds,\n refs.map((ref) => ({ kind: \"link\" as const, ref })),\n incremental\n )\n const candidate = replacements.byMaterialization.get(candidateMaterializationId)\n return base.map((state, index) => {\n const key = projectionEntityKey({ kind: \"link\", ref: state.ref })\n return {\n ref: state.ref,\n candidateSource: replacements.owned.has(key)\n ? sourceLink(candidate?.get(key))\n : state.source,\n override: state.override,\n slotOverride: state.slotOverride,\n effective: state.effective,\n diffRequired: identities[index]!.diffRequired,\n }\n })\n }\n\n effectiveObjectRevision(ref: OntologyObjectRef): {\n readonly version: number\n readonly lastCommitId: string | null\n } | null {\n const row = this.db\n .query(\n `SELECT version, last_commit_id FROM objects\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?`\n )\n .get(this.projectId, ref.objectTypeId, ref.primaryId) as {\n readonly version: number\n readonly last_commit_id: string | null\n } | null\n return row ? { version: row.version, lastCommitId: row.last_commit_id } : null\n }\n\n effectiveLinkLastCommit(ref: OntologyLinkRef): string | null | undefined {\n const row = this.db\n .query(\n `\n SELECT last_commit_id FROM links\n WHERE project_id = ? AND source_type_id = ? AND source_id = ? AND link_id = ?\n AND target_type_id = ? AND target_id = ?\n `\n )\n .get(\n this.projectId,\n ref.source.objectTypeId,\n ref.source.primaryId,\n ref.linkId,\n ref.target.objectTypeId,\n ref.target.primaryId\n ) as { readonly last_commit_id: string | null } | null\n return row ? row.last_commit_id : undefined\n }\n\n private replacementSources(\n sourceId: string,\n materializationIds: readonly string[],\n refs: readonly ProjectionEntityRef[],\n incremental = false\n ): ReplacementSources {\n if (materializationIds.length === 0 || refs.length === 0) {\n return { owned: new Set(), byMaterialization: new Map() }\n }\n const rows = replacementAssertionRows(this.db, {\n projectId: this.projectId,\n sourceId,\n materializationId: materializationIds[0]!,\n incremental,\n includePrevious: materializationIds.length > 1,\n refs,\n })\n const owned = new Set<string>()\n const byMaterialization = new Map<string, Map<string, StoredSourceAssertion>>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n owned.add(key)\n const materialization = byMaterialization.get(row.materialization_id) ?? new Map()\n materialization.set(key, source)\n byMaterialization.set(row.materialization_id, materialization)\n }\n return { owned, byMaterialization }\n }\n\n private prepareReplacementIdentities(input: ReplacementIdentityInput): void {\n if (input.kind === \"object\") {\n this.prepareReplacementObjects(input)\n return\n }\n this.prepareReplacementLinks(input)\n }\n\n private prepareReplacementObjects(input: ReplacementIdentityInput): void {\n const rows = replacementSourceRows({\n projectId: this.projectId,\n sourceId: input.sourceId,\n materializationId: input.candidateMaterializationId,\n incremental: input.incremental ?? false,\n })\n this.db\n .query(\n `\n INSERT INTO ${SQLITE_REPLACEMENT_WORK_TABLE} (\n session_id, entity_kind, identity_key, sort_key, diff_required\n )\n SELECT ?, 'object', json_array(object_type_id, primary_id),\n MIN(entity_sort_key), 1\n FROM (${rows.sql}) AS rows\n WHERE entity_kind = 'object'\n GROUP BY object_type_id, primary_id\n `\n )\n .run(input.sessionId, ...rows.values)\n }\n\n private prepareReplacementLinks(input: ReplacementIdentityInput): void {\n const rows = replacementSourceRows({\n projectId: this.projectId,\n sourceId: input.sourceId,\n materializationId: input.candidateMaterializationId,\n incremental: input.incremental ?? false,\n })\n this.db\n .query(\n `\n WITH incident_objects AS (\n SELECT DISTINCT\n json_extract(payload, '$.ref.objectTypeId') AS object_type_id,\n json_extract(payload, '$.ref.primaryId') AS primary_id\n FROM ${SQLITE_MATERIALIZATION_WORK_TABLE}\n WHERE session_id = ? AND kind = 'incident-object'\n ), replacement_links AS (\n SELECT source_type_id, source_primary_id AS source_id, link_id,\n target_type_id, target_primary_id AS target_id\n FROM (${rows.sql}) AS rows\n WHERE entity_kind = 'link'\n ), incident_links AS (\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN incident_objects\n ON incident_objects.object_type_id = links.source_type_id\n AND incident_objects.primary_id = links.source_id\n WHERE links.project_id = ?\n UNION\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN incident_objects\n ON incident_objects.object_type_id = links.target_type_id\n AND incident_objects.primary_id = links.target_id\n WHERE links.project_id = ?\n UNION\n SELECT overrides.source_type_id,\n overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN incident_objects\n ON incident_objects.object_type_id = overrides.source_type_id\n AND incident_objects.primary_id = overrides.source_primary_id\n WHERE overrides.project_id = ?\n UNION\n SELECT overrides.source_type_id,\n overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN incident_objects\n ON incident_objects.object_type_id = overrides.target_type_id\n AND incident_objects.primary_id = overrides.target_primary_id\n WHERE overrides.project_id = ?\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM ontology_source_rows AS rows\n JOIN ontology_source_roots AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n AND sources.root_sort_key = rows.root_sort_key\n JOIN incident_objects\n ON incident_objects.object_type_id = rows.source_type_id\n AND incident_objects.primary_id = rows.source_primary_id\n WHERE rows.project_id = ? AND rows.entity_kind = 'link'\n AND sources.active = 1\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM ontology_source_rows AS rows\n JOIN ontology_source_roots AS sources\n ON sources.project_id = rows.project_id\n AND sources.source_id = rows.source_id\n AND sources.materialization_id = rows.materialization_id\n AND sources.root_sort_key = rows.root_sort_key\n JOIN incident_objects\n ON incident_objects.object_type_id = rows.target_type_id\n AND incident_objects.primary_id = rows.target_primary_id\n WHERE rows.project_id = ? AND rows.entity_kind = 'link'\n AND sources.active = 1\n ), diff_links AS (\n SELECT * FROM replacement_links\n UNION SELECT * FROM incident_links\n ), affected_scopes AS (\n SELECT DISTINCT source_type_id, source_id, link_id FROM diff_links\n ), all_links AS (\n SELECT *, 1 AS diff_required FROM diff_links\n UNION ALL\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id, 0 AS diff_required\n FROM links\n JOIN affected_scopes USING (source_type_id, source_id, link_id)\n WHERE links.project_id = ?\n UNION ALL\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id, 0 AS diff_required\n FROM ontology_link_overrides AS overrides\n JOIN affected_scopes\n ON affected_scopes.source_type_id = overrides.source_type_id\n AND affected_scopes.source_id = overrides.source_primary_id\n AND affected_scopes.link_id = overrides.link_id\n WHERE overrides.project_id = ? AND overrides.identity_kind = 'slot'\n ), selected AS (\n SELECT source_type_id, source_id, link_id, target_type_id, target_id,\n ${linkSortExpression(\"all_links\")} AS sort_key,\n MAX(diff_required) AS diff_required\n FROM all_links\n GROUP BY source_type_id, source_id, link_id, target_type_id, target_id\n )\n INSERT INTO ${SQLITE_REPLACEMENT_WORK_TABLE} (\n session_id, entity_kind, identity_key, sort_key, diff_required\n )\n SELECT ?, 'link',\n json_array(source_type_id, source_id, link_id, target_type_id, target_id),\n sort_key, diff_required\n FROM selected\n `\n )\n .run(\n input.sessionId,\n ...rows.values,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n input.sessionId\n )\n }\n\n private replacementRows(\n input: ReplacementIdentityInput,\n cursor: ReplacementCursor | null\n ): ReplacementWorkRow[] {\n return this.db\n .query(\n `\n SELECT entity_kind, identity_key, sort_key, diff_required\n FROM ${SQLITE_REPLACEMENT_WORK_TABLE}\n WHERE session_id = ? AND entity_kind = ?\n AND (? IS NULL OR (sort_key, identity_key) > (?, ?))\n ORDER BY sort_key, identity_key\n LIMIT ?\n `\n )\n .all(\n input.sessionId,\n input.kind,\n cursor?.sortKey ?? null,\n cursor?.sortKey ?? null,\n cursor?.identityKey ?? null,\n input.pageRows\n ) as ReplacementWorkRow[]\n }\n}\n\nfunction replacementIdentity(row: ReplacementWorkRow): ReplacementIdentity {\n const parts = parseJson<string[]>(row.identity_key)\n if (row.entity_kind === \"object\") {\n return {\n kind: \"object\",\n ref: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n sortKey: row.sort_key,\n diffRequired: true,\n }\n }\n return {\n kind: \"link\",\n ref: {\n source: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n linkId: parts[2]!,\n target: { objectTypeId: parts[3]!, primaryId: parts[4]! },\n },\n sortKey: row.sort_key,\n diffRequired: row.diff_required === 1,\n }\n}\n\nfunction activeSourceMap(\n rows: readonly SqliteOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceAssertion> {\n const result = new Map<string, StoredSourceAssertion>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction activeScopeSourceMap(\n rows: readonly SqliteOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceLinkAssertion> {\n const result = new Map<string, StoredSourceLinkAssertion>()\n for (const row of rows) {\n const source = sourceLink(storedSource(row))\n if (!source) continue\n const ref = source.assertion.ref\n const key = linkScopeSortKey(ref.source, ref.linkId)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert cardinality-one link slot ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction sourceObject(\n source: StoredSourceAssertion | undefined\n): StoredSourceObjectAssertion | null {\n return source?.assertion.kind === \"object\" ? (source as StoredSourceObjectAssertion) : null\n}\n\nfunction sourceLink(source: StoredSourceAssertion | undefined): StoredSourceLinkAssertion | null {\n return source?.assertion.kind === \"link\" ? (source as StoredSourceLinkAssertion) : null\n}\n\nfunction storedObjectOverride(row: ObjectOverrideRow): StoredObjectOverride {\n const ref = objectRefFromColumns(row)\n return {\n ref,\n value: parseJson<StoredObjectOverride[\"value\"]>(row.value),\n editedAt: parseJson<Readonly<Record<string, string>>>(row.edited_at),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction storedLinkOverride(row: LinkOverrideRow): StoredLinkOverride {\n const ref = linkRefFromOverrideColumns(row)\n return {\n ref,\n value: parseJson<StoredLinkOverride[\"value\"]>(row.value),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction storedLinkSlotOverride(row: LinkSlotOverrideRow): StoredLinkSlotOverride {\n const ref = {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n }\n return {\n ref,\n value: linkSlotOverrideValue(parseJson<unknown>(row.value), linkScopeLabel(ref)),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction linkRefFromOverrideColumns(row: LinkOverrideRow): OntologyLinkRef {\n return {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n target: { objectTypeId: row.target_type_id, primaryId: row.target_primary_id },\n }\n}\n\nfunction linkScopeLabel(scope: {\n readonly source: OntologyObjectRef\n readonly linkId: string\n}): string {\n return JSON.stringify([scope.source.objectTypeId, scope.source.primaryId, scope.linkId])\n}\n\nfunction storedSource(row: SqliteOntologySourceAssertionRow): StoredSourceAssertion {\n return {\n source: { projectionId: row.source_id },\n materializationId: row.materialization_id,\n root: parseJson<StoredSourceAssertion[\"root\"]>(row.root),\n assertion: parseJson<StoredSourceAssertion[\"assertion\"]>(row.assertion),\n stagingOrdinal: row.staging_ordinal,\n } as StoredSourceAssertion\n}\n\nfunction effectiveObjectSnapshot(row: EffectiveObjectRow): EffectiveObjectSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective object ${row.object_type_id}:${row.primary_id} lacks materializer provenance.`\n )\n }\n return {\n ref: objectRefFromColumns(row),\n properties: parseJson<EffectiveObjectSnapshot[\"properties\"]>(row.properties),\n version: row.version,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction effectiveLinkSnapshot(row: EffectiveLinkRow): EffectiveLinkSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective link ${linkRefKey(linkRefFromColumns(row))} lacks materializer provenance.`\n )\n }\n return {\n ref: linkRefFromColumns(row),\n ...(row.properties === null\n ? {}\n : {\n properties: parseJson<NonNullable<EffectiveLinkSnapshot[\"properties\"]>>(row.properties),\n }),\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction storedPoint(row: TelemetryRow): StoredTelemetryPoint {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointSortKey(\n {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n row.at\n )} lacks materializer provenance.`\n )\n }\n return {\n series: {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n value: parseJson<StoredTelemetryPoint[\"value\"]>(row.value),\n ...(row.unit === null ? {} : { unit: row.unit }),\n at: row.at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nexport function linkSortExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return `LOWER(HEX(CAST(json_array(${prefix}source_type_id, ${prefix}source_id, ${prefix}link_id, ${prefix}target_type_id, ${prefix}target_id) AS BLOB)))`\n}\n",
51
- "import type { Database } from \"bun:sqlite\"\nimport type { ProjectionEntityRef } from \"@sixb/core/internal/materialization\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n projectionEntityKey,\n} from \"@sixb/core/internal/materialization\"\nimport { sourceStageRoots, utf8SortKey } from \"@sixb/core/internal/ontology-storage-provider\"\nimport type { SourceActivationWrite, StageSourceRowsInput } from \"@sixb/core/storage\"\nimport type { SqliteOntologySourceAssertionRow } from \"./shared\"\nimport { canonicalJson, type SqliteOntologySourceRow } from \"./shared\"\n\nexport function replacementSourceRows(input: {\n readonly projectId: string\n readonly sourceId: string\n readonly materializationId: string\n readonly incremental: boolean\n}): { readonly sql: string; readonly values: readonly string[] } {\n const roots = input.incremental\n ? `ontology_source_roots AS changed\n CROSS JOIN ontology_source_roots AS roots ON roots.project_id = changed.project_id\n AND roots.source_id = changed.source_id AND roots.root_sort_key = changed.root_sort_key AND roots.active = 1`\n : \"ontology_source_roots AS roots\"\n const selected = input.incremental ? \"changed\" : \"roots\"\n return {\n sql: `SELECT * FROM ontology_source_rows WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n UNION ALL\n SELECT rows.* FROM ${roots}\n CROSS JOIN ontology_source_rows AS rows ON rows.project_id = roots.project_id\n AND rows.source_id = roots.source_id AND rows.materialization_id = roots.materialization_id\n AND rows.root_sort_key = roots.root_sort_key\n WHERE ${selected}.project_id = ? AND ${selected}.source_id = ?\n AND ${input.incremental ? \"changed.materialization_id = ?\" : \"roots.active = 1\"}`,\n values: [\n input.projectId,\n input.sourceId,\n input.materializationId,\n input.projectId,\n input.sourceId,\n ...(input.incremental ? [input.materializationId] : []),\n ],\n }\n}\n\nexport function stageSourceRoots(\n db: Database,\n manifest: SqliteOntologySourceRow,\n input: StageSourceRowsInput\n): void {\n const roots = sourceStageRoots(manifest.projection_kind, input)\n if (!manifest.base_materialization_id && roots.some((root) => root.deleted)) {\n throw new MaterializationValidationError(\"Root deletions require a source delta base.\")\n }\n const existing = db.query(`SELECT staging_ordinal, deleted FROM ontology_source_roots\n WHERE project_id = ? AND source_id = ? AND materialization_id = ? AND root_sort_key = ?`)\n const insert = db.query(`INSERT INTO ontology_source_roots (\n project_id, source_id, materialization_id, root_sort_key, root_kind, root_key, root, staging_ordinal, deleted\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT DO NOTHING RETURNING root_sort_key`)\n for (const root of roots) {\n const inserted = insert.get(\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n root.sortKey,\n root.root.kind,\n root.rootKey,\n canonicalJson(root.root),\n root.stagingOrdinal,\n Number(root.deleted)\n )\n if (inserted) continue\n const previous = existing.get(\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n root.sortKey\n ) as { staging_ordinal: number; deleted: number } | null\n if (\n !previous ||\n previous.staging_ordinal !== root.stagingOrdinal ||\n Boolean(previous.deleted) !== root.deleted\n ) {\n throw new MaterializationValidationError(\n \"Source materialization repeats root or stream ordinal with different content.\"\n )\n }\n }\n}\n\nexport function activateSourceRoots(\n db: Database,\n projectId: string,\n candidate: SqliteOntologySourceRow,\n activation: SourceActivationWrite\n): void {\n if (\n candidate.base_materialization_id !== null &&\n (candidate.base_materialization_id !== activation.expected.activeMaterializationId ||\n candidate.base_commit_id !== activation.expected.lastCommitId)\n )\n throw new MaterializationConflictError(\n \"projection-fence\",\n \"Source delta base changed before activation.\"\n )\n\n if (candidate.base_materialization_id !== null && candidate.root_count === 0) return\n const scope = [projectId, activation.source.projectionId, activation.materializationId] as const\n db.query(`UPDATE ontology_source_roots AS roots SET active = 0, retired_at = ?\n WHERE project_id = ? AND source_id = ? AND active = 1\n ${\n candidate.base_materialization_id === null\n ? \"\"\n : `AND root_sort_key IN (\n SELECT root_sort_key FROM ontology_source_roots\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?)`\n }`).run(\n activation.updatedAt,\n projectId,\n activation.source.projectionId,\n ...(candidate.base_materialization_id === null ? [] : [...scope])\n )\n db.query(`UPDATE ontology_source_roots SET active = CASE WHEN deleted = 1 THEN 0 ELSE 1 END,\n retired_at = CASE WHEN deleted = 1 THEN ? ELSE NULL END\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?`).run(\n activation.updatedAt,\n ...scope\n )\n}\n\nexport function assertSourceRootCoverage(db: Database, manifest: SqliteOntologySourceRow): void {\n const invalid = db\n .query(`SELECT 1 FROM ontology_source_roots AS roots\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND roots.deleted = EXISTS (\n SELECT 1 FROM ontology_source_rows AS rows\n WHERE rows.project_id = roots.project_id AND rows.source_id = roots.source_id\n AND rows.materialization_id = roots.materialization_id AND rows.root_sort_key = roots.root_sort_key\n ) LIMIT 1`)\n .get(manifest.project_id, manifest.source_id, manifest.materialization_id)\n if (invalid)\n throw new MaterializationValidationError(\n \"Source roots must have complete assertions or an explicit deletion, never both.\"\n )\n}\n\nexport function activeSourceRows(\n db: Database,\n projectId: string,\n refs: readonly ProjectionEntityRef[]\n): SqliteOntologySourceAssertionRow[] {\n const keys = refs.flatMap((entity) => {\n const entitySortKey = utf8SortKey(projectionEntityKey(entity))\n const roots =\n entity.kind === \"object\"\n ? [entitySortKey]\n : [\n entitySortKey,\n utf8SortKey(projectionEntityKey({ kind: \"object\", ref: entity.ref.source })),\n ]\n return roots.map((rootSortKey) => ({ rootSortKey, entitySortKey }))\n })\n return db\n .query(`WITH requested AS (\n SELECT DISTINCT json_extract(value, '$.rootSortKey') AS root_sort_key,\n json_extract(value, '$.entitySortKey') AS entity_sort_key FROM json_each(?)\n ) SELECT rows.* FROM requested\n CROSS JOIN ontology_source_roots AS roots ON roots.project_id = ?\n AND roots.active = 1 AND roots.root_sort_key = requested.root_sort_key\n CROSS JOIN ontology_source_rows AS rows ON rows.project_id = roots.project_id AND rows.source_id = roots.source_id\n AND rows.materialization_id = roots.materialization_id AND rows.entity_sort_key = requested.entity_sort_key\n AND rows.root_sort_key = roots.root_sort_key`)\n .all(canonicalJson(keys), projectId) as SqliteOntologySourceAssertionRow[]\n}\n\nexport function replacementAssertionRows(\n db: Database,\n input: {\n projectId: string\n sourceId: string\n materializationId: string\n incremental: boolean\n includePrevious: boolean\n refs: readonly ProjectionEntityRef[]\n }\n): SqliteOntologySourceAssertionRow[] {\n const keys = input.refs.map((ref) => ({\n entityKind: ref.kind,\n entityKey: projectionEntityKey(ref),\n rootKeys:\n ref.kind === \"object\"\n ? [utf8SortKey(projectionEntityKey(ref))]\n : [\n utf8SortKey(projectionEntityKey(ref)),\n utf8SortKey(projectionEntityKey({ kind: \"object\", ref: ref.ref.source })),\n ],\n }))\n const previous = !input.includePrevious\n ? \"\"\n : `UNION ALL\n SELECT rows.* FROM requested_entities AS requested\n CROSS JOIN ontology_source_roots AS roots ON roots.project_id = ? AND roots.source_id = ?\n AND roots.active = 1 AND roots.root_sort_key IN (SELECT value FROM json_each(requested.root_keys))\n CROSS JOIN ontology_source_rows AS rows ON rows.project_id = roots.project_id AND rows.source_id = roots.source_id\n AND rows.materialization_id = roots.materialization_id AND rows.root_sort_key = roots.root_sort_key\n AND rows.entity_kind = requested.entity_kind AND rows.entity_key = requested.entity_key\n ${\n !input.incremental\n ? \"\"\n : `WHERE EXISTS (SELECT 1 FROM ontology_source_roots AS changed\n WHERE changed.project_id = roots.project_id AND changed.source_id = roots.source_id\n AND changed.materialization_id = ? AND changed.root_sort_key = roots.root_sort_key)`\n }`\n return db\n .query(`WITH requested_entities AS (\n SELECT DISTINCT json_extract(value, '$.entityKind') AS entity_kind,\n json_extract(value, '$.entityKey') AS entity_key, json_extract(value, '$.rootKeys') AS root_keys FROM json_each(?)\n ) SELECT rows.* FROM requested_entities AS requested\n CROSS JOIN ontology_source_rows AS rows ON rows.project_id = ? AND rows.source_id = ?\n AND rows.materialization_id = ? AND rows.entity_kind = requested.entity_kind AND rows.entity_key = requested.entity_key\n ${previous}`)\n .all(\n canonicalJson(keys),\n input.projectId,\n input.sourceId,\n input.materializationId,\n ...(input.includePrevious\n ? [input.projectId, input.sourceId, ...(input.incremental ? [input.materializationId] : [])]\n : [])\n ) as SqliteOntologySourceAssertionRow[]\n}\n",
50
+ "import type { Database } from \"bun:sqlite\"\nimport type {\n EffectiveLinkSnapshot,\n EffectiveObjectSnapshot,\n OntologyLinkRef,\n OntologyObjectRef,\n ProjectionEntityRef,\n TelemetrySeriesRef,\n} from \"@sixb/core/internal/materialization\"\nimport {\n linkRefKey,\n linkScopeSortKey,\n MaterializationConflictError,\n objectRefKey,\n projectionEntityKey,\n telemetryPointSortKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n appendScopeSnapshot,\n finishScopeAccumulator,\n linkSlotOverrideValue,\n startScopeAccumulator,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationLinkScopeRevision,\n MaterializationLinkScopeState,\n MaterializationLinkState,\n MaterializationObjectState,\n SourceReplacementLinkState,\n SourceReplacementObjectState,\n StoredLinkOverride,\n StoredLinkSlotOverride,\n StoredObjectOverride,\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n StoredTelemetryPoint,\n} from \"@sixb/core/storage\"\nimport {\n canonicalJson,\n linkRefFromColumns,\n objectRefFromColumns,\n parseJson,\n type SqliteOntologySourceAssertionRow,\n type SqliteStoredOverrideRow,\n sourceAssertion,\n} from \"./shared\"\nimport {\n activeSourceRows,\n LIVE_SOURCE_ROWS_JOIN,\n replacementAssertionRows,\n replacementSourceRows,\n SOURCE_ASSERTION_COLUMNS,\n} from \"./source-roots\"\n\nexport const SQLITE_MATERIALIZATION_WORK_TABLE = \"ontology_materialization_work\"\nexport const SQLITE_REPLACEMENT_WORK_TABLE = \"ontology_replacement_work\"\n\ninterface EffectiveObjectRow {\n readonly object_type_id: string\n readonly primary_id: string\n readonly properties: string\n readonly created_at: string\n readonly updated_at: string\n readonly version: number\n readonly last_commit_id: string | null\n}\n\ninterface EffectiveLinkRow {\n readonly source_type_id: string\n readonly source_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_id: string\n readonly properties: string | null\n readonly created_at: string\n readonly updated_at: string\n readonly last_commit_id: string | null\n}\n\ninterface TelemetryRow {\n readonly object_type_id: string\n readonly object_id: string\n readonly property_id: string\n readonly value: string\n readonly unit: string | null\n readonly at: string\n readonly last_commit_id: string | null\n}\n\ninterface LinkScopeRow extends EffectiveLinkRow {\n readonly scope_sort_key: string\n}\n\nfunction linkScopeRequestJson(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n): string {\n return canonicalJson(\n scopes.map(({ source, linkId }) => ({\n scopeSortKey: linkScopeSortKey(source, linkId),\n sourceTypeId: source.objectTypeId,\n sourceId: source.primaryId,\n linkId,\n }))\n )\n}\n\ninterface ObjectOverrideRow extends SqliteStoredOverrideRow {\n readonly object_type_id: string\n readonly primary_id: string\n readonly edited_at: string\n}\n\ninterface LinkOverrideRow extends SqliteStoredOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n}\n\ninterface LinkSlotOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n readonly value: string\n readonly last_commit_id: string\n readonly updated_at: string\n}\n\ninterface ReplacementSources {\n readonly owned: ReadonlySet<string>\n readonly byMaterialization: ReadonlyMap<string, ReadonlyMap<string, StoredSourceAssertion>>\n}\n\nexport type ReplacementIdentity =\n | {\n readonly kind: \"object\"\n readonly ref: OntologyObjectRef\n readonly sortKey: string\n readonly diffRequired: true\n }\n | {\n readonly kind: \"link\"\n readonly ref: OntologyLinkRef\n readonly sortKey: string\n readonly diffRequired: boolean\n }\n\ninterface ReplacementIdentityInput {\n readonly incremental?: boolean\n readonly sessionId: string\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly previousMaterializationId: string | null\n readonly kind: \"object\" | \"link\"\n readonly pageRows: number\n}\n\ninterface ReplacementWorkRow {\n readonly entity_kind: \"object\" | \"link\"\n readonly identity_key: string\n readonly sort_key: string\n readonly diff_required: number\n}\n\ninterface ReplacementCursor {\n readonly sortKey: string\n readonly identityKey: string\n}\n\nexport class SqliteMaterializationStateReader {\n constructor(\n private readonly db: Database,\n readonly projectId: string\n ) {}\n\n objectState(ref: OntologyObjectRef): MaterializationObjectState {\n return this.objectStates([ref])[0]!\n }\n\n objectStates(refs: readonly OntologyObjectRef[]): readonly MaterializationObjectState[] {\n if (refs.length === 0) return []\n const requested = canonicalJson(\n refs.map((ref) => ({ objectTypeId: ref.objectTypeId, primaryId: ref.primaryId }))\n )\n const requestedObjects = `\n SELECT DISTINCT json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id\n FROM json_each(?)\n `\n // Keep the JSON request set on the outer side of each lookup. SQLite cannot estimate the\n // cardinality of json_each() and otherwise scans every project row once per requested key.\n // CROSS JOIN deliberately fixes the loop order so the existing composite indexes are used.\n const effectiveRows = this.db\n .query(\n `WITH requested AS (${requestedObjects})\n SELECT objects.* FROM requested\n CROSS JOIN objects\n ON objects.project_id = ?\n AND objects.object_type_id = requested.object_type_id\n AND objects.primary_id = requested.primary_id`\n )\n .all(requested, this.projectId) as EffectiveObjectRow[]\n const sourceRows = activeSourceRows(\n this.db,\n this.projectId,\n refs.map((ref) => ({ kind: \"object\", ref }))\n )\n const overrideRows = this.db\n .query(\n `WITH requested AS (${requestedObjects})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_object_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.object_type_id = requested.object_type_id\n AND overrides.primary_id = requested.primary_id`\n )\n .all(requested, this.projectId) as ObjectOverrideRow[]\n const telemetryRows = this.db\n .query(\n `WITH requested AS (${requestedObjects}), ranked AS (\n SELECT timeseries.*,\n ROW_NUMBER() OVER (\n PARTITION BY timeseries.object_type_id, timeseries.object_id,\n timeseries.property_id\n ORDER BY timeseries.at DESC\n ) AS rank\n FROM requested\n CROSS JOIN timeseries\n ON timeseries.project_id = ?\n AND timeseries.object_type_id = requested.object_type_id\n AND timeseries.object_id = requested.primary_id\n )\n SELECT * FROM ranked WHERE rank = 1`\n )\n .all(requested, this.projectId) as TelemetryRow[]\n\n const effective = new Map(\n effectiveRows.map((row) => [objectRefKey(objectRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [objectRefKey(objectRefFromColumns(row)), storedObjectOverride(row)] as const\n )\n )\n const telemetry = new Map<string, StoredTelemetryPoint[]>()\n for (const row of telemetryRows) {\n const key = objectRefKey({ objectTypeId: row.object_type_id, primaryId: row.object_id })\n const points = telemetry.get(key) ?? []\n points.push(storedPoint(row))\n telemetry.set(key, points)\n }\n for (const points of telemetry.values()) {\n points.sort((left, right) =>\n telemetryPointSortKey(left.series, left.at).localeCompare(\n telemetryPointSortKey(right.series, right.at)\n )\n )\n }\n\n return refs.map((ref) => {\n const key = objectRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceObject(sources.get(projectionEntityKey({ kind: \"object\", ref }))),\n override: overrides.get(key) ?? null,\n effective: effectiveRow ? effectiveObjectSnapshot(effectiveRow) : null,\n latestTelemetry: telemetry.get(key) ?? [],\n }\n })\n }\n\n linkState(ref: OntologyLinkRef): MaterializationLinkState {\n return this.linkStates([ref])[0]!\n }\n\n linkStates(refs: readonly OntologyLinkRef[]): readonly MaterializationLinkState[] {\n if (refs.length === 0) return []\n const requested = canonicalJson(\n refs.map((ref) => ({\n sourceTypeId: ref.source.objectTypeId,\n sourceId: ref.source.primaryId,\n linkId: ref.linkId,\n targetTypeId: ref.target.objectTypeId,\n targetId: ref.target.primaryId,\n }))\n )\n const effectiveRequest = `\n SELECT DISTINCT json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_id,\n json_extract(value, '$.linkId') AS link_id,\n json_extract(value, '$.targetTypeId') AS target_type_id,\n json_extract(value, '$.targetId') AS target_id\n FROM json_each(?)\n `\n const sourceRequest = `\n SELECT DISTINCT json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id,\n json_extract(value, '$.targetTypeId') AS target_type_id,\n json_extract(value, '$.targetId') AS target_primary_id\n FROM json_each(?)\n `\n const effectiveRows = this.db\n .query(\n `WITH requested AS (${effectiveRequest})\n SELECT links.* FROM requested\n CROSS JOIN links\n ON links.project_id = ?\n AND links.source_type_id = requested.source_type_id\n AND links.source_id = requested.source_id\n AND links.link_id = requested.link_id\n AND links.target_type_id = requested.target_type_id\n AND links.target_id = requested.target_id`\n )\n .all(requested, this.projectId) as EffectiveLinkRow[]\n const sourceRows = activeSourceRows(\n this.db,\n this.projectId,\n refs.map((ref) => ({ kind: \"link\", ref }))\n )\n const overrideRows = this.db\n .query(\n `WITH requested AS (${sourceRequest})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'edge'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id\n AND overrides.target_type_id = requested.target_type_id\n AND overrides.target_primary_id = requested.target_primary_id`\n )\n .all(requested, this.projectId) as LinkOverrideRow[]\n const slotOverrideRows = this.db\n .query(\n `WITH requested AS (${sourceRequest})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'slot'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id`\n )\n .all(requested, this.projectId) as LinkSlotOverrideRow[]\n const effective = new Map(\n effectiveRows.map((row) => [linkRefKey(linkRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [linkRefKey(linkRefFromOverrideColumns(row)), storedLinkOverride(row)] as const\n )\n )\n const slotOverrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n return refs.map((ref) => {\n const key = linkRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceLink(sources.get(projectionEntityKey({ kind: \"link\", ref }))),\n override: overrides.get(key) ?? null,\n slotOverride: slotOverrides.get(linkScopeSortKey(ref.source, ref.linkId)) ?? null,\n effective: effectiveRow ? effectiveLinkSnapshot(effectiveRow) : null,\n }\n })\n }\n\n exactPoint(series: TelemetrySeriesRef, at: string): StoredTelemetryPoint | null {\n return this.exactPoints([{ series, at }])[0] ?? null\n }\n\n exactPoints(\n points: readonly { readonly series: TelemetrySeriesRef; readonly at: string }[]\n ): readonly StoredTelemetryPoint[] {\n if (points.length === 0) return []\n const requested = canonicalJson(\n points.map(({ series, at }) => ({\n objectTypeId: series.object.objectTypeId,\n objectId: series.object.primaryId,\n propertyId: series.propertyId,\n at,\n }))\n )\n const rows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.objectId') AS object_id,\n json_extract(value, '$.propertyId') AS property_id,\n json_extract(value, '$.at') AS at\n FROM json_each(?)\n )\n SELECT timeseries.* FROM requested\n CROSS JOIN timeseries\n ON timeseries.project_id = ?\n AND timeseries.object_type_id = requested.object_type_id\n AND timeseries.object_id = requested.object_id\n AND timeseries.property_id = requested.property_id\n AND timeseries.at = requested.at`\n )\n .all(requested, this.projectId) as TelemetryRow[]\n const found = new Map(\n rows.map((row) => {\n const point = storedPoint(row)\n return [telemetryPointSortKey(point.series, point.at), point] as const\n })\n )\n return points.flatMap((point) => {\n const stored = found.get(telemetryPointSortKey(point.series, point.at))\n return stored ? [stored] : []\n })\n }\n\n linkScopeRevisions(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): readonly MaterializationLinkScopeRevision[] {\n if (scopes.length === 0) return []\n return this.readEffectiveLinkScopes(scopes, linkScopeRequestJson(scopes)).revisions\n }\n\n linkSlotStates(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): readonly MaterializationLinkScopeState[] {\n if (scopes.length === 0) return []\n const requestedJson = linkScopeRequestJson(scopes)\n const sourceRows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT ${SOURCE_ASSERTION_COLUMNS} FROM requested\n CROSS JOIN ontology_source_rows AS rows\n ON rows.entity_kind = 'link'\n AND rows.source_type_id = requested.source_type_id\n AND rows.source_primary_id = requested.source_primary_id\n AND rows.link_id = requested.link_id\n ${LIVE_SOURCE_ROWS_JOIN}`\n )\n .all(requestedJson, this.projectId) as SqliteOntologySourceAssertionRow[]\n const slotOverrideRows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'slot'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id`\n )\n .all(requestedJson, this.projectId) as LinkSlotOverrideRow[]\n const sources = activeScopeSourceMap(sourceRows)\n const overrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n const { revisions, effective } = this.readEffectiveLinkScopes(scopes, requestedJson)\n return scopes.map(({ source, linkId }, index) => {\n const key = linkScopeSortKey(source, linkId)\n return {\n ...revisions[index]!,\n sourceAssertion: sources.get(key) ?? null,\n override: overrides.get(key) ?? null,\n effective: effective.get(key) ?? null,\n }\n })\n }\n\n private readEffectiveLinkScopes(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[],\n requestedJson: string\n ): {\n readonly revisions: readonly MaterializationLinkScopeRevision[]\n readonly effective: ReadonlyMap<string, EffectiveLinkSnapshot | null>\n } {\n const accumulators = new Map(\n scopes.map(({ source, linkId }) => {\n const key = linkScopeSortKey(source, linkId)\n return [key, startScopeAccumulator(source, linkId)] as const\n })\n )\n const effective = new Map<string, EffectiveLinkSnapshot | null>()\n const rows = this.db\n .query(\n `\n WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.scopeSortKey') AS scope_sort_key,\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT requested.scope_sort_key, links.*\n FROM requested\n CROSS JOIN links\n ON links.project_id = ?\n AND links.source_type_id = requested.source_type_id\n AND links.source_id = requested.source_id\n AND links.link_id = requested.link_id\n ORDER BY requested.scope_sort_key, ${linkSortExpression(\"links\")}\n `\n )\n .iterate(requestedJson, this.projectId) as Iterable<LinkScopeRow>\n for (const row of rows) {\n const accumulator = accumulators.get(row.scope_sort_key)\n if (!accumulator) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Unexpected link scope '${row.scope_sort_key}' returned by storage.`\n )\n }\n const snapshot = effectiveLinkSnapshot(row)\n appendScopeSnapshot(accumulator, snapshot)\n effective.set(row.scope_sort_key, accumulator.effectiveCount === 1 ? snapshot : null)\n }\n return {\n revisions: scopes.map(({ source, linkId }) =>\n finishScopeAccumulator(accumulators.get(linkScopeSortKey(source, linkId))!)\n ),\n effective,\n }\n }\n\n *incidentLinks(\n objects: readonly OntologyObjectRef[],\n pageRows: number\n ): Iterable<OntologyLinkRef[]> {\n if (objects.length === 0) return\n const values = objects.map(() => \"(?, ?)\").join(\", \")\n const args = objects.flatMap((ref) => [ref.objectTypeId, ref.primaryId])\n let cursor: string | null = null\n while (true) {\n const rows = this.db\n .query(\n `\n WITH requested(object_type_id, primary_id) AS (VALUES ${values}),\n authority_links AS (\n SELECT source_type_id, source_id, link_id, target_type_id, target_id\n FROM links WHERE project_id = ?\n UNION\n SELECT source_type_id, source_primary_id, link_id, target_type_id, target_primary_id\n FROM ontology_link_overrides\n WHERE project_id = ?\n UNION\n SELECT rows.source_type_id, rows.source_primary_id, rows.link_id,\n rows.target_type_id, rows.target_primary_id\n FROM ontology_source_rows AS rows\n ${LIVE_SOURCE_ROWS_JOIN}\n WHERE rows.entity_kind = 'link'\n ), selected AS (\n SELECT DISTINCT links.*,\n ${linkSortExpression(\"links\")} AS sort_key\n FROM authority_links AS links\n WHERE EXISTS (\n SELECT 1 FROM requested\n WHERE (requested.object_type_id = links.source_type_id\n AND requested.primary_id = links.source_id)\n OR (requested.object_type_id = links.target_type_id\n AND requested.primary_id = links.target_id)\n )\n )\n SELECT * FROM selected\n WHERE (? IS NULL OR sort_key > ?)\n ORDER BY sort_key\n LIMIT ?\n `\n )\n .all(\n ...args,\n this.projectId,\n this.projectId,\n this.projectId,\n cursor,\n cursor,\n pageRows\n ) as (EffectiveLinkRow & { readonly sort_key: string })[]\n if (rows.length === 0) break\n yield rows.map(linkRefFromColumns)\n cursor = rows[rows.length - 1]?.sort_key ?? null\n }\n }\n\n *replacementIdentities(input: ReplacementIdentityInput): Iterable<ReplacementIdentity[]> {\n this.prepareReplacementIdentities(input)\n let cursor: ReplacementCursor | null = null\n while (true) {\n const rows = this.replacementRows(input, cursor)\n if (rows.length === 0) break\n yield rows.map(replacementIdentity)\n if (rows.length < input.pageRows) break\n const last = rows[rows.length - 1]!\n cursor = { sortKey: last.sort_key, identityKey: last.identity_key }\n }\n }\n\n replacementObjectStates(\n sourceId: string,\n candidateMaterializationId: string,\n refs: readonly OntologyObjectRef[]\n ): readonly SourceReplacementObjectState[] {\n const base = this.objectStates(refs)\n const candidates = this.replacementSources(\n sourceId,\n [candidateMaterializationId],\n refs.map((ref) => ({ kind: \"object\" as const, ref }))\n )\n return base.map((state) => ({\n ref: state.ref,\n candidateSource: sourceObject(\n candidates.byMaterialization\n .get(candidateMaterializationId)\n ?.get(projectionEntityKey({ kind: \"object\", ref: state.ref }))\n ),\n override: state.override,\n effective: state.effective,\n latestTelemetry: state.latestTelemetry,\n }))\n }\n\n replacementLinkStates(\n sourceId: string,\n candidateMaterializationId: string,\n materializationIds: readonly string[],\n identities: readonly Extract<ReplacementIdentity, { readonly kind: \"link\" }>[],\n incremental = false\n ): readonly SourceReplacementLinkState[] {\n const refs = identities.map((identity) => identity.ref)\n const base = this.linkStates(refs)\n const replacements = this.replacementSources(\n sourceId,\n materializationIds,\n refs.map((ref) => ({ kind: \"link\" as const, ref })),\n incremental\n )\n const candidate = replacements.byMaterialization.get(candidateMaterializationId)\n return base.map((state, index) => {\n const key = projectionEntityKey({ kind: \"link\", ref: state.ref })\n return {\n ref: state.ref,\n candidateSource: replacements.owned.has(key)\n ? sourceLink(candidate?.get(key))\n : state.source,\n override: state.override,\n slotOverride: state.slotOverride,\n effective: state.effective,\n diffRequired: identities[index]!.diffRequired,\n }\n })\n }\n\n effectiveObjectRevision(ref: OntologyObjectRef): {\n readonly version: number\n readonly lastCommitId: string | null\n } | null {\n const row = this.db\n .query(\n `SELECT version, last_commit_id FROM objects\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?`\n )\n .get(this.projectId, ref.objectTypeId, ref.primaryId) as {\n readonly version: number\n readonly last_commit_id: string | null\n } | null\n return row ? { version: row.version, lastCommitId: row.last_commit_id } : null\n }\n\n effectiveLinkLastCommit(ref: OntologyLinkRef): string | null | undefined {\n const row = this.db\n .query(\n `\n SELECT last_commit_id FROM links\n WHERE project_id = ? AND source_type_id = ? AND source_id = ? AND link_id = ?\n AND target_type_id = ? AND target_id = ?\n `\n )\n .get(\n this.projectId,\n ref.source.objectTypeId,\n ref.source.primaryId,\n ref.linkId,\n ref.target.objectTypeId,\n ref.target.primaryId\n ) as { readonly last_commit_id: string | null } | null\n return row ? row.last_commit_id : undefined\n }\n\n private replacementSources(\n sourceId: string,\n materializationIds: readonly string[],\n refs: readonly ProjectionEntityRef[],\n incremental = false\n ): ReplacementSources {\n if (materializationIds.length === 0 || refs.length === 0) {\n return { owned: new Set(), byMaterialization: new Map() }\n }\n const rows = replacementAssertionRows(this.db, {\n projectId: this.projectId,\n sourceId,\n materializationId: materializationIds[0]!,\n incremental,\n includePrevious: materializationIds.length > 1,\n refs,\n })\n const owned = new Set<string>()\n const byMaterialization = new Map<string, Map<string, StoredSourceAssertion>>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n owned.add(key)\n const materialization = byMaterialization.get(row.materialization_id) ?? new Map()\n materialization.set(key, source)\n byMaterialization.set(row.materialization_id, materialization)\n }\n return { owned, byMaterialization }\n }\n\n private prepareReplacementIdentities(input: ReplacementIdentityInput): void {\n if (input.kind === \"object\") {\n this.prepareReplacementObjects(input)\n return\n }\n this.prepareReplacementLinks(input)\n }\n\n private prepareReplacementObjects(input: ReplacementIdentityInput): void {\n const rows = replacementSourceRows(this.db, {\n projectId: this.projectId,\n sourceId: input.sourceId,\n materializationId: input.candidateMaterializationId,\n incremental: input.incremental ?? false,\n })\n this.db\n .query(\n `\n INSERT INTO ${SQLITE_REPLACEMENT_WORK_TABLE} (\n session_id, entity_kind, identity_key, sort_key, diff_required\n )\n SELECT ?, 'object', json_array(object_type_id, primary_id),\n ${objectSortExpression()}, 1\n FROM (${rows.sql}) AS rows\n WHERE entity_kind = 'object'\n GROUP BY object_type_id, primary_id\n `\n )\n .run(input.sessionId, ...rows.values)\n }\n\n private prepareReplacementLinks(input: ReplacementIdentityInput): void {\n const rows = replacementSourceRows(this.db, {\n projectId: this.projectId,\n sourceId: input.sourceId,\n materializationId: input.candidateMaterializationId,\n incremental: input.incremental ?? false,\n })\n this.db\n .query(\n `\n WITH incident_objects AS (\n SELECT DISTINCT\n json_extract(payload, '$.ref.objectTypeId') AS object_type_id,\n json_extract(payload, '$.ref.primaryId') AS primary_id\n FROM ${SQLITE_MATERIALIZATION_WORK_TABLE}\n WHERE session_id = ? AND kind = 'incident-object'\n ), replacement_links AS (\n SELECT source_type_id, source_primary_id AS source_id, link_id,\n target_type_id, target_primary_id AS target_id\n FROM (${rows.sql}) AS rows\n WHERE entity_kind = 'link'\n ), incident_links AS (\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN incident_objects\n ON incident_objects.object_type_id = links.source_type_id\n AND incident_objects.primary_id = links.source_id\n WHERE links.project_id = ?\n UNION\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM links\n JOIN incident_objects\n ON incident_objects.object_type_id = links.target_type_id\n AND incident_objects.primary_id = links.target_id\n WHERE links.project_id = ?\n UNION\n SELECT overrides.source_type_id,\n overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN incident_objects\n ON incident_objects.object_type_id = overrides.source_type_id\n AND incident_objects.primary_id = overrides.source_primary_id\n WHERE overrides.project_id = ?\n UNION\n SELECT overrides.source_type_id,\n overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id\n FROM ontology_link_overrides AS overrides\n JOIN incident_objects\n ON incident_objects.object_type_id = overrides.target_type_id\n AND incident_objects.primary_id = overrides.target_primary_id\n WHERE overrides.project_id = ?\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM incident_objects\n CROSS JOIN ontology_source_rows AS rows\n ON rows.entity_kind = 'link'\n AND rows.source_type_id = incident_objects.object_type_id\n AND rows.source_primary_id = incident_objects.primary_id\n ${LIVE_SOURCE_ROWS_JOIN}\n UNION\n SELECT rows.source_type_id, rows.source_primary_id AS source_id,\n rows.link_id, rows.target_type_id, rows.target_primary_id AS target_id\n FROM incident_objects\n CROSS JOIN ontology_source_rows AS rows\n ON rows.entity_kind = 'link'\n AND rows.target_type_id = incident_objects.object_type_id\n AND rows.target_primary_id = incident_objects.primary_id\n ${LIVE_SOURCE_ROWS_JOIN}\n ), diff_links AS (\n SELECT * FROM replacement_links\n UNION SELECT * FROM incident_links\n ), affected_scopes AS (\n SELECT DISTINCT source_type_id, source_id, link_id FROM diff_links\n ), all_links AS (\n SELECT *, 1 AS diff_required FROM diff_links\n UNION ALL\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id, 0 AS diff_required\n FROM links\n JOIN affected_scopes USING (source_type_id, source_id, link_id)\n WHERE links.project_id = ?\n UNION ALL\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id,\n overrides.link_id, overrides.target_type_id,\n overrides.target_primary_id AS target_id, 0 AS diff_required\n FROM ontology_link_overrides AS overrides\n JOIN affected_scopes\n ON affected_scopes.source_type_id = overrides.source_type_id\n AND affected_scopes.source_id = overrides.source_primary_id\n AND affected_scopes.link_id = overrides.link_id\n WHERE overrides.project_id = ? AND overrides.identity_kind = 'slot'\n ), selected AS (\n SELECT source_type_id, source_id, link_id, target_type_id, target_id,\n ${linkSortExpression(\"all_links\")} AS sort_key,\n MAX(diff_required) AS diff_required\n FROM all_links\n GROUP BY source_type_id, source_id, link_id, target_type_id, target_id\n )\n INSERT INTO ${SQLITE_REPLACEMENT_WORK_TABLE} (\n session_id, entity_kind, identity_key, sort_key, diff_required\n )\n SELECT ?, 'link',\n json_array(source_type_id, source_id, link_id, target_type_id, target_id),\n sort_key, diff_required\n FROM selected\n `\n )\n .run(\n input.sessionId,\n ...rows.values,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n this.projectId,\n input.sessionId\n )\n }\n\n private replacementRows(\n input: ReplacementIdentityInput,\n cursor: ReplacementCursor | null\n ): ReplacementWorkRow[] {\n return this.db\n .query(\n `\n SELECT entity_kind, identity_key, sort_key, diff_required\n FROM ${SQLITE_REPLACEMENT_WORK_TABLE}\n WHERE session_id = ? AND entity_kind = ?\n AND (? IS NULL OR (sort_key, identity_key) > (?, ?))\n ORDER BY sort_key, identity_key\n LIMIT ?\n `\n )\n .all(\n input.sessionId,\n input.kind,\n cursor?.sortKey ?? null,\n cursor?.sortKey ?? null,\n cursor?.identityKey ?? null,\n input.pageRows\n ) as ReplacementWorkRow[]\n }\n}\n\nfunction replacementIdentity(row: ReplacementWorkRow): ReplacementIdentity {\n const parts = parseJson<string[]>(row.identity_key)\n if (row.entity_kind === \"object\") {\n return {\n kind: \"object\",\n ref: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n sortKey: row.sort_key,\n diffRequired: true,\n }\n }\n return {\n kind: \"link\",\n ref: {\n source: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n linkId: parts[2]!,\n target: { objectTypeId: parts[3]!, primaryId: parts[4]! },\n },\n sortKey: row.sort_key,\n diffRequired: row.diff_required === 1,\n }\n}\n\nfunction activeSourceMap(\n rows: readonly SqliteOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceAssertion> {\n const result = new Map<string, StoredSourceAssertion>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction activeScopeSourceMap(\n rows: readonly SqliteOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceLinkAssertion> {\n const result = new Map<string, StoredSourceLinkAssertion>()\n for (const row of rows) {\n const source = sourceLink(storedSource(row))\n if (!source) continue\n const ref = source.assertion.ref\n const key = linkScopeSortKey(ref.source, ref.linkId)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert cardinality-one link slot ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction sourceObject(\n source: StoredSourceAssertion | undefined\n): StoredSourceObjectAssertion | null {\n return source?.assertion.kind === \"object\" ? (source as StoredSourceObjectAssertion) : null\n}\n\nfunction sourceLink(source: StoredSourceAssertion | undefined): StoredSourceLinkAssertion | null {\n return source?.assertion.kind === \"link\" ? (source as StoredSourceLinkAssertion) : null\n}\n\nfunction storedObjectOverride(row: ObjectOverrideRow): StoredObjectOverride {\n const ref = objectRefFromColumns(row)\n return {\n ref,\n value: parseJson<StoredObjectOverride[\"value\"]>(row.value),\n editedAt: parseJson<Readonly<Record<string, string>>>(row.edited_at),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction storedLinkOverride(row: LinkOverrideRow): StoredLinkOverride {\n const ref = linkRefFromOverrideColumns(row)\n return {\n ref,\n value: parseJson<StoredLinkOverride[\"value\"]>(row.value),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction storedLinkSlotOverride(row: LinkSlotOverrideRow): StoredLinkSlotOverride {\n const ref = {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n }\n return {\n ref,\n value: linkSlotOverrideValue(parseJson<unknown>(row.value), linkScopeLabel(ref)),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction linkRefFromOverrideColumns(row: LinkOverrideRow): OntologyLinkRef {\n return {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n target: { objectTypeId: row.target_type_id, primaryId: row.target_primary_id },\n }\n}\n\nfunction linkScopeLabel(scope: {\n readonly source: OntologyObjectRef\n readonly linkId: string\n}): string {\n return JSON.stringify([scope.source.objectTypeId, scope.source.primaryId, scope.linkId])\n}\n\nfunction storedSource(row: SqliteOntologySourceAssertionRow): StoredSourceAssertion {\n return {\n source: { projectionId: row.source_id },\n materializationId: row.materialization_id,\n ...sourceAssertion(row),\n } as StoredSourceAssertion\n}\n\nfunction effectiveObjectSnapshot(row: EffectiveObjectRow): EffectiveObjectSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective object ${row.object_type_id}:${row.primary_id} lacks materializer provenance.`\n )\n }\n return {\n ref: objectRefFromColumns(row),\n properties: parseJson<EffectiveObjectSnapshot[\"properties\"]>(row.properties),\n version: row.version,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction effectiveLinkSnapshot(row: EffectiveLinkRow): EffectiveLinkSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective link ${linkRefKey(linkRefFromColumns(row))} lacks materializer provenance.`\n )\n }\n return {\n ref: linkRefFromColumns(row),\n ...(row.properties === null\n ? {}\n : {\n properties: parseJson<NonNullable<EffectiveLinkSnapshot[\"properties\"]>>(row.properties),\n }),\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction storedPoint(row: TelemetryRow): StoredTelemetryPoint {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointSortKey(\n {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n row.at\n )} lacks materializer provenance.`\n )\n }\n return {\n series: {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n value: parseJson<StoredTelemetryPoint[\"value\"]>(row.value),\n ...(row.unit === null ? {} : { unit: row.unit }),\n at: row.at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction objectSortExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return `LOWER(HEX(CAST(json_array(${prefix}object_type_id, ${prefix}primary_id) AS BLOB)))`\n}\n\nexport function linkSortExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return `LOWER(HEX(CAST(json_array(${prefix}source_type_id, ${prefix}source_id, ${prefix}link_id, ${prefix}target_type_id, ${prefix}target_id) AS BLOB)))`\n}\n",
51
+ "import type { Database } from \"bun:sqlite\"\nimport type { ProjectionEntityRef } from \"@sixb/core/internal/materialization\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n projectionEntityKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n sourceEntityColumns,\n sourceStageRoots,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type { SourceActivationWrite, StageSourceRowsInput } from \"@sixb/core/storage\"\nimport type { SqliteOntologySourceAssertionRow } from \"./shared\"\nimport { canonicalJson, type SqliteOntologySourceRow } from \"./shared\"\n\n/**\n * Source storage in three levels: a version (`ontology_sources`, one per run), its roots (one per\n * logical dataset row, keyed by the canonical entity key) and their rows (what each root asserts).\n *\n * A root is live while its version is published (active or superseded), it is not retired and it\n * is not a deletion. Activation retires the live roots its candidate replaces and flips the\n * version; the candidate's own roots are never rewritten. One live root per source and key holds\n * because activation, under the source fence, retires every root the candidate replaces.\n */\nconst PUBLISHED = \"('active', 'superseded')\"\n\n/** The columns `sourceAssertion` reads, over `versions`, `roots` and `rows`. */\nexport const SOURCE_ASSERTION_COLUMNS = `versions.source_id, versions.materialization_id,\n roots.root_key, roots.staging_ordinal, rows.entity_kind, rows.object_type_id, rows.primary_id,\n rows.source_type_id, rows.source_primary_id, rows.link_id, rows.target_type_id,\n rows.target_primary_id, rows.payload`\n\n/**\n * Keeps `rows` to those of live roots, joined as `roots` and `versions`; binds the project id.\n * CROSS JOIN keeps it a filter on the rows already selected: as a plain JOIN, SQLite may start\n * from every live root of the project instead.\n */\nexport const LIVE_SOURCE_ROWS_JOIN = `\n CROSS JOIN ontology_source_roots AS roots ON roots.id = rows.root_id\n AND roots.project_id = ? AND roots.retired_at IS NULL AND roots.deleted = 0\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${PUBLISHED}`\n\n/** The typed identity of `rows` equals the one requested (`IS` matches NULLs). */\nconst ENTITY_MATCH = `rows.entity_kind = requested.entity_kind\n AND rows.object_type_id IS requested.object_type_id\n AND rows.primary_id IS requested.primary_id\n AND rows.source_type_id IS requested.source_type_id\n AND rows.source_primary_id IS requested.source_primary_id\n AND rows.link_id IS requested.link_id\n AND rows.target_type_id IS requested.target_type_id\n AND rows.target_primary_id IS requested.target_primary_id`\n\nconst REQUESTED_ENTITY = `json_extract(value, '$.entityKind') AS entity_kind,\n json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id,\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourcePrimaryId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id,\n json_extract(value, '$.targetTypeId') AS target_type_id,\n json_extract(value, '$.targetPrimaryId') AS target_primary_id`\n\n/** An entity's own key, and for a link the key of the object root that may assert it. */\nfunction requestedEntity(ref: ProjectionEntityRef) {\n const key = projectionEntityKey(ref)\n return {\n entityKind: ref.kind,\n ...sourceEntityColumns(ref),\n rootKeys:\n ref.kind === \"object\"\n ? [key]\n : [key, projectionEntityKey({ kind: \"object\", ref: ref.ref.source })],\n }\n}\n\nfunction sourceVersionId(\n db: Database,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly materializationId: string\n }\n): number | null {\n const version = db\n .query(`SELECT version_id FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?`)\n .get(input.projectId, input.sourceId, input.materializationId) as {\n readonly version_id: number\n } | null\n return version?.version_id ?? null\n}\n\n/** The candidate's rows, plus the rows of the live roots it may replace. */\nexport function replacementSourceRows(\n db: Database,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly materializationId: string\n readonly incremental: boolean\n }\n): { readonly sql: string; readonly values: readonly (string | number | null)[] } {\n const version = sourceVersionId(db, input)\n const live = `live.retired_at IS NULL AND live.deleted = 0\n AND versions.source_id = ? AND versions.status IN ${PUBLISHED}`\n const replaced = input.incremental\n ? `SELECT live.id FROM ontology_source_roots AS changed\n CROSS JOIN ontology_source_roots AS live\n ON live.project_id = ? AND live.root_key = changed.root_key\n CROSS JOIN ontology_sources AS versions ON versions.version_id = live.version_id\n WHERE changed.version_id = ? AND ${live}`\n : `SELECT live.id FROM ontology_sources AS versions\n CROSS JOIN ontology_source_roots AS live ON live.version_id = versions.version_id\n WHERE versions.project_id = ? AND ${live}`\n return {\n sql: `SELECT rows.* FROM ontology_source_roots AS roots\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?\n UNION ALL\n SELECT rows.* FROM (${replaced}) AS roots\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id`,\n values: [version, input.projectId, ...(input.incremental ? [version] : []), input.sourceId],\n }\n}\n\nexport function stageSourceRoots(\n db: Database,\n manifest: SqliteOntologySourceRow,\n input: StageSourceRowsInput\n): void {\n const roots = sourceStageRoots(manifest.projection_kind, input)\n if (!manifest.base_materialization_id && roots.some((root) => root.deleted)) {\n throw new MaterializationValidationError(\"Root deletions require a source delta base.\")\n }\n const existing = db.query(`SELECT staging_ordinal, deleted FROM ontology_source_roots\n WHERE version_id = ? AND root_key = ?`)\n const insert = db.query(`INSERT INTO ontology_source_roots (\n version_id, project_id, root_key, staging_ordinal, deleted\n ) VALUES (?, ?, ?, ?, ?) ON CONFLICT DO NOTHING RETURNING id`)\n for (const root of roots) {\n const inserted = insert.get(\n manifest.version_id,\n input.projectId,\n root.rootKey,\n root.stagingOrdinal,\n Number(root.deleted)\n )\n if (inserted) continue\n const previous = existing.get(manifest.version_id, root.rootKey) as {\n staging_ordinal: number\n deleted: number\n } | null\n if (\n !previous ||\n previous.staging_ordinal !== root.stagingOrdinal ||\n Boolean(previous.deleted) !== root.deleted\n ) {\n throw new MaterializationValidationError(\n \"Source materialization repeats root or stream ordinal with different content.\"\n )\n }\n }\n}\n\n/** Retires what the candidate replaces; its own roots go live when its version turns active. */\nexport function activateSourceRoots(\n db: Database,\n projectId: string,\n candidate: SqliteOntologySourceRow,\n activation: SourceActivationWrite\n): void {\n if (\n candidate.base_materialization_id !== null &&\n (candidate.base_materialization_id !== activation.expected.activeMaterializationId ||\n candidate.base_commit_id !== activation.expected.lastCommitId)\n )\n throw new MaterializationConflictError(\n \"projection-fence\",\n \"Source delta base changed before activation.\"\n )\n if (candidate.base_materialization_id !== null && candidate.root_count === 0) return\n const delta = candidate.base_materialization_id !== null\n db.query(`UPDATE ontology_source_roots SET retired_at = ?\n WHERE retired_at IS NULL AND deleted = 0\n AND version_id IN (SELECT version_id FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status IN ${PUBLISHED})\n ${\n delta\n ? `AND project_id = ? AND root_key IN (\n SELECT root_key FROM ontology_source_roots WHERE version_id = ?)`\n : \"\"\n }`).run(\n activation.updatedAt,\n projectId,\n activation.source.projectionId,\n ...(delta ? [projectId, candidate.version_id] : [])\n )\n // Deletions are never live; retiring them lets cleanup remove them with their version.\n db.query(`UPDATE ontology_source_roots SET retired_at = ?\n WHERE version_id = ? AND deleted = 1`).run(activation.updatedAt, candidate.version_id)\n}\n\nexport function assertSourceRootCoverage(db: Database, manifest: SqliteOntologySourceRow): void {\n const invalid = db\n .query(`SELECT 1 FROM ontology_source_roots AS roots\n WHERE roots.version_id = ?\n AND roots.deleted = EXISTS (\n SELECT 1 FROM ontology_source_rows AS rows WHERE rows.root_id = roots.id\n ) LIMIT 1`)\n .get(manifest.version_id)\n if (invalid)\n throw new MaterializationValidationError(\n \"Source roots must have complete assertions or an explicit deletion, never both.\"\n )\n}\n\n/** The live assertions of `refs`, whichever source asserts them. */\nexport function activeSourceRows(\n db: Database,\n projectId: string,\n refs: readonly ProjectionEntityRef[]\n): SqliteOntologySourceAssertionRow[] {\n const requested = refs.flatMap((ref) => {\n const { rootKeys, ...entity } = requestedEntity(ref)\n return rootKeys.map((rootKey) => ({ ...entity, rootKey }))\n })\n return db\n .query(`WITH requested AS (\n SELECT DISTINCT json_extract(value, '$.rootKey') AS root_key, ${REQUESTED_ENTITY}\n FROM json_each(?)\n ) SELECT ${SOURCE_ASSERTION_COLUMNS} FROM requested\n CROSS JOIN ontology_source_roots AS roots ON roots.project_id = ?\n AND roots.root_key = requested.root_key AND roots.retired_at IS NULL AND roots.deleted = 0\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${PUBLISHED}\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id AND ${ENTITY_MATCH}`)\n .all(canonicalJson(requested), projectId) as SqliteOntologySourceAssertionRow[]\n}\n\n/** The candidate's assertions of `refs`, and optionally the live ones they would replace. */\nexport function replacementAssertionRows(\n db: Database,\n input: {\n projectId: string\n sourceId: string\n materializationId: string\n incremental: boolean\n includePrevious: boolean\n refs: readonly ProjectionEntityRef[]\n }\n): SqliteOntologySourceAssertionRow[] {\n const version = sourceVersionId(db, input)\n const previous = !input.includePrevious\n ? \"\"\n : `UNION ALL\n SELECT ${SOURCE_ASSERTION_COLUMNS} FROM requested_entities AS requested\n CROSS JOIN ontology_source_roots AS roots ON roots.project_id = ?\n AND roots.root_key IN (SELECT value FROM json_each(requested.root_keys))\n AND roots.retired_at IS NULL AND roots.deleted = 0\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.source_id = ? AND versions.status IN ${PUBLISHED}\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id AND ${ENTITY_MATCH}\n ${\n !input.incremental\n ? \"\"\n : `WHERE EXISTS (SELECT 1 FROM ontology_source_roots AS changed\n WHERE changed.version_id = ? AND changed.root_key = roots.root_key)`\n }`\n return db\n .query(`WITH requested_entities AS (\n SELECT DISTINCT ${REQUESTED_ENTITY}, json_extract(value, '$.rootKeys') AS root_keys\n FROM json_each(?)\n ) SELECT ${SOURCE_ASSERTION_COLUMNS} FROM requested_entities AS requested\n CROSS JOIN ontology_source_roots AS roots ON roots.version_id = ?\n AND roots.root_key IN (SELECT value FROM json_each(requested.root_keys))\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id AND ${ENTITY_MATCH}\n ${previous}`)\n .all(\n canonicalJson(input.refs.map(requestedEntity)),\n version,\n ...(input.includePrevious\n ? [input.projectId, input.sourceId, ...(input.incremental ? [version] : [])]\n : [])\n ) as SqliteOntologySourceAssertionRow[]\n}\n",
52
52
  "import type { Database } from \"bun:sqlite\"\nimport {\n linkRefKey,\n MaterializationConflictError,\n objectRefKey,\n telemetryPointKey,\n} from \"@sixb/core/internal/materialization\"\nimport { effectiveConflict } from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n ExactEffectiveLinkWrite,\n ExactEffectiveObjectWrite,\n MaterializationPlanChunk,\n} from \"@sixb/core/storage\"\nimport { assertTimestamp, canonicalJson, isSqliteConstraintError, requireChanges } from \"./shared\"\n\nfunction linkOverrideConflictMessage(identityKind: \"edge\" | \"slot\"): string {\n return identityKind === \"edge\"\n ? \"Expected link edge override changed.\"\n : \"Expected link slot override changed.\"\n}\n\nfunction linkOverrideConflict(identityKind: \"edge\" | \"slot\"): MaterializationConflictError {\n return effectiveConflict(linkOverrideConflictMessage(identityKind))\n}\n\n/** Applies one already-validated exact plan chunk to SQLite authority tables. */\nexport class SqliteMaterializationWriter {\n constructor(private readonly db: Database) {}\n\n apply(projectId: string, commitId: string, chunk: MaterializationPlanChunk): void {\n this.applyOverrides(projectId, chunk)\n this.applyEffective(projectId, chunk)\n this.applyTimeseries(projectId, chunk)\n this.applyOutbox(projectId, commitId, chunk)\n }\n\n private applyOverrides(projectId: string, chunk: MaterializationPlanChunk): void {\n for (const item of chunk.overrides.objects.upserts) {\n if (item.expectedLastCommitId === null) {\n try {\n this.db\n .query(\n `INSERT INTO ontology_object_overrides (\n project_id, object_type_id, primary_id, value, edited_at,\n last_commit_id, updated_at\n ) VALUES (?, ?, ?, json(?), json(?), ?, ?)`\n )\n .run(\n projectId,\n item.ref.objectTypeId,\n item.ref.primaryId,\n canonicalJson(item.value),\n canonicalJson(item.editedAt),\n item.lastCommitId,\n item.updatedAt\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw effectiveConflict(\"Expected object override changed.\")\n }\n throw error\n }\n continue\n }\n requireChanges(\n this.db\n .query(\n `UPDATE ontology_object_overrides\n SET value = json(?), edited_at = json(?), last_commit_id = ?, updated_at = ?\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND last_commit_id = ?`\n )\n .run(\n canonicalJson(item.value),\n canonicalJson(item.editedAt),\n item.lastCommitId,\n item.updatedAt,\n projectId,\n item.ref.objectTypeId,\n item.ref.primaryId,\n item.expectedLastCommitId\n ).changes,\n \"effective-state\",\n \"Expected object override changed.\"\n )\n }\n for (const item of chunk.overrides.objects.deletes) {\n requireChanges(\n this.db\n .query(\n `DELETE FROM ontology_object_overrides\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND last_commit_id = ?`\n )\n .run(projectId, item.ref.objectTypeId, item.ref.primaryId, item.expectedLastCommitId)\n .changes,\n \"effective-state\",\n \"Expected object override changed.\"\n )\n }\n\n const upsertLink = (\n identityKind: \"edge\" | \"slot\",\n identityKey: string,\n ref: {\n readonly source: { readonly objectTypeId: string; readonly primaryId: string }\n readonly linkId: string\n readonly target: { readonly objectTypeId: string; readonly primaryId: string }\n },\n item:\n | (typeof chunk.overrides.links.edges.upserts)[number]\n | (typeof chunk.overrides.links.slots.upserts)[number]\n ): void => {\n if (item.expectedLastCommitId === null) {\n try {\n this.db\n .query(\n `INSERT INTO ontology_link_overrides (\n project_id, identity_kind, identity_key,\n source_type_id, source_primary_id, link_id,\n target_type_id, target_primary_id, value, last_commit_id, updated_at\n ) VALUES (?, ?, json(?), ?, ?, ?, ?, ?, json(?), ?, ?)`\n )\n .run(\n projectId,\n identityKind,\n identityKey,\n ref.source.objectTypeId,\n ref.source.primaryId,\n ref.linkId,\n ref.target.objectTypeId,\n ref.target.primaryId,\n canonicalJson(item.value),\n item.lastCommitId,\n item.updatedAt\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw linkOverrideConflict(identityKind)\n }\n throw error\n }\n return\n }\n requireChanges(\n this.db\n .query(\n `UPDATE ontology_link_overrides\n SET target_type_id = ?, target_primary_id = ?, value = json(?),\n last_commit_id = ?, updated_at = ?\n WHERE project_id = ? AND identity_kind = ? AND identity_key = json(?)\n AND last_commit_id = ?`\n )\n .run(\n ref.target.objectTypeId,\n ref.target.primaryId,\n canonicalJson(item.value),\n item.lastCommitId,\n item.updatedAt,\n projectId,\n identityKind,\n identityKey,\n item.expectedLastCommitId\n ).changes,\n \"effective-state\",\n linkOverrideConflictMessage(identityKind)\n )\n }\n\n for (const item of chunk.overrides.links.edges.upserts) {\n upsertLink(\"edge\", linkRefKey(item.ref), item.ref, item)\n }\n for (const item of chunk.overrides.links.slots.upserts) {\n upsertLink(\n \"slot\",\n JSON.stringify([item.ref.source.objectTypeId, item.ref.source.primaryId, item.ref.linkId]),\n { source: item.ref.source, linkId: item.ref.linkId, target: item.value.target },\n item\n )\n }\n\n const deleteLink = (\n identityKind: \"edge\" | \"slot\",\n identityKey: string,\n expectedLastCommitId: string\n ): void => {\n requireChanges(\n this.db\n .query(\n `DELETE FROM ontology_link_overrides\n WHERE project_id = ? AND identity_kind = ? AND identity_key = json(?)\n AND last_commit_id = ?`\n )\n .run(projectId, identityKind, identityKey, expectedLastCommitId).changes,\n \"effective-state\",\n linkOverrideConflictMessage(identityKind)\n )\n }\n for (const item of chunk.overrides.links.edges.deletes) {\n deleteLink(\"edge\", linkRefKey(item.ref), item.expectedLastCommitId)\n }\n for (const item of chunk.overrides.links.slots.deletes) {\n deleteLink(\n \"slot\",\n JSON.stringify([item.ref.source.objectTypeId, item.ref.source.primaryId, item.ref.linkId]),\n item.expectedLastCommitId\n )\n }\n }\n\n private applyEffective(projectId: string, chunk: MaterializationPlanChunk): void {\n for (const item of chunk.effective.linkDeletes) {\n requireChanges(\n this.db\n .query(\n `\n DELETE FROM links\n WHERE project_id = ? AND source_type_id = ? AND source_id = ? AND link_id = ?\n AND target_type_id = ? AND target_id = ? AND last_commit_id = ?\n `\n )\n .run(\n projectId,\n item.ref.source.objectTypeId,\n item.ref.source.primaryId,\n item.ref.linkId,\n item.ref.target.objectTypeId,\n item.ref.target.primaryId,\n item.expected.lastCommitId\n ).changes,\n \"effective-state\",\n `Expected link ${linkRefKey(item.ref)} changed.`\n )\n }\n for (const item of chunk.effective.objectDeletes) {\n requireChanges(\n this.db\n .query(\n `DELETE FROM objects\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND version = ? AND last_commit_id = ?`\n )\n .run(\n projectId,\n item.ref.objectTypeId,\n item.ref.primaryId,\n item.expected.version,\n item.expected.lastCommitId\n ).changes,\n \"effective-state\",\n `Expected object ${objectRefKey(item.ref)} changed.`\n )\n }\n for (const item of chunk.effective.objectUpserts) this.applyObject(projectId, item)\n for (const item of chunk.effective.linkUpserts) this.applyLink(projectId, item)\n }\n\n private applyObject(projectId: string, item: ExactEffectiveObjectWrite): void {\n const { row, expected } = item\n if (!expected.exists) {\n try {\n this.db\n .query(\n `\n INSERT INTO objects (\n project_id, object_type_id, primary_id, properties, created_at,\n updated_at, version, last_commit_id\n ) VALUES (?, ?, ?, json(?), ?, ?, ?, ?)\n `\n )\n .run(\n projectId,\n row.ref.objectTypeId,\n row.ref.primaryId,\n canonicalJson(row.properties),\n row.createdAt,\n row.updatedAt,\n row.version,\n row.lastCommitId\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw effectiveConflict(`Expected object ${objectRefKey(row.ref)} to be absent.`)\n }\n throw error\n }\n return\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE objects\n SET properties = json(?), created_at = ?, updated_at = ?, version = ?,\n last_commit_id = ?\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND version = ? AND last_commit_id = ?\n `\n )\n .run(\n canonicalJson(row.properties),\n row.createdAt,\n row.updatedAt,\n row.version,\n row.lastCommitId,\n projectId,\n row.ref.objectTypeId,\n row.ref.primaryId,\n expected.version,\n expected.lastCommitId\n ).changes,\n \"effective-state\",\n `Expected object ${objectRefKey(row.ref)} changed.`\n )\n }\n\n private applyLink(projectId: string, item: ExactEffectiveLinkWrite): void {\n const { row, expected } = item\n if (!expected.exists) {\n try {\n this.db\n .query(\n `\n INSERT INTO links (\n project_id, source_type_id, source_id, link_id, target_type_id, target_id,\n properties, created_at, updated_at, last_commit_id\n ) VALUES (?, ?, ?, ?, ?, ?, json(?), ?, ?, ?)\n `\n )\n .run(\n projectId,\n row.ref.source.objectTypeId,\n row.ref.source.primaryId,\n row.ref.linkId,\n row.ref.target.objectTypeId,\n row.ref.target.primaryId,\n row.properties === undefined ? null : canonicalJson(row.properties),\n row.createdAt,\n row.updatedAt,\n row.lastCommitId\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw effectiveConflict(`Expected link ${linkRefKey(row.ref)} to be absent.`)\n }\n throw error\n }\n return\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE links\n SET properties = json(?), created_at = ?, updated_at = ?,\n last_commit_id = ?\n WHERE project_id = ? AND source_type_id = ? AND source_id = ? AND link_id = ?\n AND target_type_id = ? AND target_id = ? AND last_commit_id = ?\n `\n )\n .run(\n row.properties === undefined ? null : canonicalJson(row.properties),\n row.createdAt,\n row.updatedAt,\n row.lastCommitId,\n projectId,\n row.ref.source.objectTypeId,\n row.ref.source.primaryId,\n row.ref.linkId,\n row.ref.target.objectTypeId,\n row.ref.target.primaryId,\n expected.lastCommitId\n ).changes,\n \"effective-state\",\n `Expected link ${linkRefKey(row.ref)} changed.`\n )\n }\n\n private applyTimeseries(projectId: string, chunk: MaterializationPlanChunk): void {\n for (const item of chunk.timeseries.pointUpserts) {\n const { point, expected } = item\n if (expected.lastCommitId === null) {\n try {\n this.db\n .query(\n `\n INSERT INTO timeseries (\n project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n ) VALUES (?, ?, ?, ?, json(?), ?, ?, ?)\n `\n )\n .run(\n projectId,\n point.series.object.objectTypeId,\n point.series.object.primaryId,\n point.series.propertyId,\n canonicalJson(point.value),\n point.unit ?? null,\n point.at,\n point.lastCommitId\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(point.series, point.at)} changed.`\n )\n }\n throw error\n }\n } else {\n requireChanges(\n this.db\n .query(\n `\n UPDATE timeseries\n SET value = json(?), unit = ?, last_commit_id = ?\n WHERE project_id = ? AND object_type_id = ? AND object_id = ?\n AND property_id = ? AND at = ? AND last_commit_id = ?\n `\n )\n .run(\n canonicalJson(point.value),\n point.unit ?? null,\n point.lastCommitId,\n projectId,\n point.series.object.objectTypeId,\n point.series.object.primaryId,\n point.series.propertyId,\n point.at,\n expected.lastCommitId\n ).changes,\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(point.series, point.at)} changed.`\n )\n }\n }\n }\n\n private applyOutbox(projectId: string, commitId: string, chunk: MaterializationPlanChunk): void {\n const insert = this.db.query(\n `\n INSERT INTO ontology_outbox (\n project_id, id, commit_id, commit_ordinal, envelope,\n available_at, attempts, lease_id, lease_expires_at,\n published_at, last_failure, created_at\n ) VALUES (?, ?, ?, ?, json(?), ?, 0, NULL, NULL, NULL, NULL, ?)\n `\n )\n for (const item of chunk.outbox) {\n assertTimestamp(item.availableAt, \"Outbox availableAt\")\n assertTimestamp(item.createdAt, \"Outbox createdAt\")\n try {\n insert.run(\n projectId,\n item.envelope.id,\n commitId,\n item.envelope.commitOrdinal,\n canonicalJson(item.envelope),\n item.availableAt,\n item.createdAt\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw effectiveConflict(`Duplicate outbox event '${item.envelope.id}'.`)\n }\n throw error\n }\n }\n }\n}\n",
53
53
  "import type { Database } from \"bun:sqlite\"\nimport { serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"@sixb/core/internal/materialization\"\nimport type {\n ClaimedOntologyOutboxRow,\n ClaimOntologyOutboxInput,\n CompleteOntologyOutboxLeaseInput,\n OntologyOutboxStorage,\n OntologyOutboxSummary,\n PurgePublishedOntologyOutboxInput,\n RescheduleOntologyOutboxLeaseInput,\n SummarizeOntologyOutboxInput,\n} from \"@sixb/core/storage\"\nimport { ONTOLOGY_OUTBOX_FAILURE_CODES } from \"@sixb/core/storage\"\nimport {\n assertNonblank,\n assertPositiveInteger,\n assertTimestamp,\n outboxRecord,\n type SqliteOntologyOutboxRow,\n type SqliteRootOperation,\n} from \"./shared\"\n\nexport class SqliteOntologyOutboxStorage implements OntologyOutboxStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async claim(input: ClaimOntologyOutboxInput): Promise<readonly ClaimedOntologyOutboxRow[]> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertPositiveInteger(input.limit, \"Ontology outbox limit\")\n const now = assertTimestamp(input.now, \"Ontology outbox claim time\")\n const leaseExpiry = assertTimestamp(input.leaseExpiresAt, \"Ontology outbox lease expiry\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n if (leaseExpiry <= now) {\n throw new MaterializationValidationError(\n \"Ontology outbox lease expiry must be later than the claim time.\"\n )\n }\n\n // Probe at most one page plus a sentinel through the eligibility index. Sparse retries\n // avoid scanning delayed rows; overflowing backlogs use publication order without a sort.\n const eligible = this.db\n .query(\n `SELECT CAST(rowid AS TEXT) AS rowId\n FROM ontology_outbox INDEXED BY idx_ontology_outbox_claim\n WHERE project_id = ? AND published_at IS NULL AND available_at <= ?\n AND (lease_expires_at IS NULL OR lease_expires_at <= ?)\n LIMIT ?`\n )\n .all(input.projectId, input.now, input.now, input.limit + 1) as { rowId: string }[]\n if (eligible.length === 0) return []\n const selected =\n eligible.length <= input.limit\n ? eligible\n : (this.db\n .query(\n `SELECT CAST(rowid AS TEXT) AS rowId\n FROM ontology_outbox INDEXED BY idx_ontology_outbox_publication_order\n WHERE project_id = ? AND published_at IS NULL AND available_at <= ?\n AND (lease_expires_at IS NULL OR lease_expires_at <= ?)\n ORDER BY created_at, commit_id, commit_ordinal\n LIMIT ?`\n )\n .all(input.projectId, input.now, input.now, input.limit) as { rowId: string }[])\n const rows = this.db\n .query(\n `\n UPDATE ontology_outbox\n SET attempts = attempts + 1, lease_id = ?, lease_expires_at = ?\n WHERE rowid IN (SELECT CAST(value AS INTEGER) FROM json_each(?))\n RETURNING envelope, available_at, attempts, lease_id, lease_expires_at,\n published_at, last_failure, created_at\n `\n )\n .all(\n input.leaseId,\n input.leaseExpiresAt,\n JSON.stringify(selected.map((row) => row.rowId))\n ) as SqliteOntologyOutboxRow[]\n return rows\n .map((row) => outboxRecord(row))\n .sort(\n (left, right) =>\n left.createdAt.localeCompare(right.createdAt) ||\n left.envelope.id.localeCompare(right.envelope.id)\n )\n .map((record) => {\n if (record.leaseId === null || record.leaseExpiresAt === null) {\n throw new MaterializationConflictError(\n \"outbox-lease\",\n \"Ontology outbox claim returned an unpaired lease.\"\n )\n }\n return { ...record, leaseId: record.leaseId, leaseExpiresAt: record.leaseExpiresAt }\n })\n })\n }\n\n async markPublished(input: CompleteOntologyOutboxLeaseInput): Promise<void> {\n await this.runRootOperation(() => {\n assertLeaseInput(input)\n assertTimestamp(input.publishedAt, \"Ontology outbox publishedAt\")\n const ids = validateLeaseIds(input.ids)\n const changed = this.db\n .query(\n `\n WITH requested(id) AS MATERIALIZED (\n SELECT CAST(value AS TEXT) FROM json_each(?)\n ), leased(id) AS MATERIALIZED (\n -- Drive validation from the bounded ID list even before ANALYZE.\n SELECT outbox.id FROM requested\n CROSS JOIN ontology_outbox AS outbox USING (id)\n WHERE outbox.project_id = ? AND outbox.lease_id = ?\n AND outbox.lease_expires_at IS NOT NULL\n ), eligible(id) AS (\n SELECT id FROM leased WHERE (SELECT COUNT(*) FROM leased) = ?\n )\n UPDATE ontology_outbox\n SET published_at = ?, lease_id = NULL, lease_expires_at = NULL\n WHERE project_id = ? AND id IN (SELECT id FROM eligible)\n AND lease_id = ? AND lease_expires_at IS NOT NULL\n `\n )\n .run(\n JSON.stringify(ids),\n input.projectId,\n input.leaseId,\n ids.length,\n input.publishedAt,\n input.projectId,\n input.leaseId\n ).changes\n if (changed !== ids.length) throw leaseConflict()\n })\n }\n\n async reschedule(input: RescheduleOntologyOutboxLeaseInput): Promise<void> {\n await this.runRootOperation(() => {\n assertLeaseInput(input)\n assertTimestamp(input.availableAt, \"Ontology outbox availableAt\")\n const ids = validateLeaseIds(input.ids)\n const failure =\n input.failure === undefined\n ? null\n : serializeSixbFailure(input.failure, ONTOLOGY_OUTBOX_FAILURE_CODES)\n const changed = this.db\n .query(\n `\n WITH requested(id) AS MATERIALIZED (\n SELECT CAST(value AS TEXT) FROM json_each(?)\n ), leased(id) AS MATERIALIZED (\n -- Drive validation from the bounded ID list even before ANALYZE.\n SELECT outbox.id FROM requested\n CROSS JOIN ontology_outbox AS outbox USING (id)\n WHERE outbox.project_id = ? AND outbox.lease_id = ?\n AND outbox.lease_expires_at IS NOT NULL\n ), eligible(id) AS (\n SELECT id FROM leased WHERE (SELECT COUNT(*) FROM leased) = ?\n )\n UPDATE ontology_outbox\n SET available_at = ?, last_failure = COALESCE(?, last_failure),\n lease_id = NULL, lease_expires_at = NULL\n WHERE project_id = ? AND id IN (SELECT id FROM eligible)\n AND lease_id = ? AND lease_expires_at IS NOT NULL\n `\n )\n .run(\n JSON.stringify(ids),\n input.projectId,\n input.leaseId,\n ids.length,\n input.availableAt,\n failure,\n input.projectId,\n input.leaseId\n ).changes\n if (changed !== ids.length) throw leaseConflict()\n })\n }\n\n async purgePublished(input: PurgePublishedOntologyOutboxInput): Promise<number> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertPositiveInteger(input.limit, \"Ontology outbox limit\")\n assertTimestamp(input.publishedBefore, \"Ontology outbox purge cutoff\")\n return this.db\n .query(\n `\n DELETE FROM ontology_outbox\n WHERE rowid IN (\n SELECT rowid FROM ontology_outbox\n WHERE project_id = ? AND published_at IS NOT NULL AND published_at < ?\n ORDER BY published_at, id\n LIMIT ?\n )\n `\n )\n .run(input.projectId, input.publishedBefore, input.limit).changes\n })\n }\n\n async summarize(input: SummarizeOntologyOutboxInput): Promise<OntologyOutboxSummary> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n const summary = this.db\n .query(\n `\n SELECT COUNT(*) AS pending_count,\n MIN(created_at) AS oldest_pending_at,\n SUM(CASE WHEN attempts > 0 THEN 1 ELSE 0 END) AS retrying_count,\n COALESCE(MAX(attempts), 0) AS max_attempts\n FROM ontology_outbox\n WHERE project_id = ? AND published_at IS NULL\n `\n )\n .get(input.projectId) as {\n readonly pending_count: number\n readonly oldest_pending_at: string | null\n readonly retrying_count: number | null\n readonly max_attempts: number\n }\n return {\n pendingCount: summary.pending_count,\n oldestPendingAt: summary.oldest_pending_at,\n retryingCount: summary.retrying_count ?? 0,\n maxAttempts: summary.max_attempts,\n }\n })\n }\n}\n\nfunction validateLeaseIds(ids: readonly string[]): string[] {\n const seen = new Set<string>()\n for (const id of ids) {\n assertNonblank(id, \"Ontology outbox event id\")\n if (seen.has(id)) {\n throw new MaterializationValidationError(`Ontology outbox lease batch repeats event '${id}'.`)\n }\n seen.add(id)\n }\n return [...seen]\n}\n\nfunction assertLeaseInput(input: {\n readonly projectId: string\n readonly ids: readonly string[]\n readonly leaseId: string\n}): void {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n}\n\nfunction leaseConflict(): MaterializationConflictError {\n return new MaterializationConflictError(\"outbox-lease\", \"Ontology outbox lease does not match.\")\n}\n",
54
- "import type { Database } from \"bun:sqlite\"\nimport { MaterializationValidationError } from \"@sixb/core/internal/materialization\"\nimport {\n assertSourceBeginInput as assertBeginInput,\n assertSourceExecutionIdentity as assertExecutionIdentity,\n assertSourceProject as assertProjectAndSource,\n assertSourceCandidateOwner,\n assertSourceWriteIdentity as assertWriteIdentity,\n sourceEntityColumns as entityColumns,\n isExactStagingManifest,\n reconcileSourceStageRows,\n type SourceStageRow,\n sourceConflict,\n sourceMaterializationIdentity,\n sourceStageRow,\n sourceStageRows,\n utf8SortKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AbandonSourceMaterializationCandidateInput,\n AbandonSourceMaterializationInput,\n AssertSourceMaterializationExecutionInput,\n BeginSourceMaterializationInput,\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n GetActiveOntologySourceInput,\n MarkSourceMaterializationReadyInput,\n OntologySourceRecord,\n OntologySourceStorage,\n ReclaimSourceMaterializationInput,\n StageSourceRowsInput,\n StageSourceRowsResult,\n SummarizeTerminalSourceMaterializationsInput,\n TerminalSourceMaterializationSummary,\n} from \"@sixb/core/storage\"\nimport { yieldSqliteEventLoop } from \"../transactions\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertProjectionExecution,\n assertTimestamp,\n canonicalJson,\n type SqliteOntologySourceAssertionRow,\n type SqliteOntologySourceRow,\n type SqliteRootOperation,\n sourceAssertion,\n sourceRecord,\n} from \"./shared\"\nimport { cleanupSourceVersions } from \"./source-cleanup\"\nimport { assertSourceRootCoverage, stageSourceRoots } from \"./source-roots\"\n\nexport class SqliteOntologySourceStorage implements OntologySourceStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async beginMaterialization(\n input: BeginSourceMaterializationInput\n ): Promise<OntologySourceRecord> {\n return this.runRootOperation(() => {\n assertBeginInput(input)\n this.assertExecution(input, sourceMaterializationIdentity(input))\n const existing = this.getManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n if (existing) {\n if (isExactStagingManifest(sourceRecord(existing), input)) return sourceRecord(existing)\n throw sourceConflict(\n `Source materialization '${input.materializationId}' already exists with different identity or state.`\n )\n }\n\n const candidate = this.db\n .query(\n `\n SELECT 1\n FROM ontology_sources\n WHERE project_id = ? AND projection_run_id = ?\n AND status IN ('staging', 'ready')\n LIMIT 1\n `\n )\n .get(input.projectId, input.execution.projectionRunId)\n if (candidate) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a nonterminal source materialization; reclaim it before beginning another.`\n )\n }\n\n this.db\n .query(\n `\n INSERT INTO ontology_sources (\n project_id, source_id, materialization_id, projection_run_id,\n projection_kind, protocol, status, execution_token,\n dataset_id, dataset_version_id, dataset_version_created_at,\n projection_revision, ownership_hash, ontology_revision,\n root_count, assertion_count, created_at, ready_at, activated_at,\n terminal_at, last_commit_id, updated_at, base_materialization_id, base_commit_id\n ) VALUES (?, ?, ?, ?, ?, 'replacement', 'staging', ?, ?, ?, ?, ?, ?, ?,\n NULL, NULL, ?, NULL, NULL, NULL, NULL, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n input.execution.projectionRunId,\n input.projectionKind,\n input.execution.executionToken,\n input.datasetVersion.datasetId,\n input.datasetVersion.versionId,\n input.datasetVersion.createdAt,\n input.projectionRevision,\n input.ownershipHash,\n input.ontologyRevision,\n input.createdAt,\n input.createdAt,\n input.base?.materializationId ?? null,\n input.base?.lastCommitId ?? null\n )\n return sourceRecord(\n this.requireManifest(input.projectId, input.source.projectionId, input.materializationId)\n )\n })\n }\n\n async stageRows(input: StageSourceRowsInput): Promise<StageSourceRowsResult> {\n const result = await this.runRootOperation(() => {\n assertWriteIdentity(input)\n this.assertExecution(input)\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' is '${manifest.status}' and cannot accept rows.`\n )\n }\n\n const rows = sourceStageRows(manifest.projection_kind, input.rows)\n const existing = this.findStageRows(input, rows)\n const { pending, unchanged } = reconcileSourceStageRows(rows, existing)\n stageSourceRoots(this.db, manifest, input)\n this.insertStageRows(input, pending)\n return { inserted: pending.length, unchanged }\n })\n await yieldSqliteEventLoop()\n return result\n }\n\n async markReady(input: MarkSourceMaterializationReadyInput): Promise<OntologySourceRecord> {\n return this.runRootOperation(() => {\n assertWriteIdentity(input)\n assertTimestamp(input.readyAt, \"Source readyAt\", true)\n assertNonnegativeInteger(input.rootCount, \"Source root count\")\n assertNonnegativeInteger(input.assertionCount, \"Source assertion count\")\n this.assertExecution(input)\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status === \"ready\") {\n if (\n manifest.root_count === input.rootCount &&\n manifest.assertion_count === input.assertionCount &&\n manifest.ready_at === input.readyAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was marked ready with different counts or time.`\n )\n }\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' cannot transition from '${manifest.status}' to 'ready'.`\n )\n }\n if (input.readyAt < manifest.created_at) {\n throw new MaterializationValidationError(\"Source readyAt cannot precede source createdAt.\")\n }\n this.assertReadyState(manifest, input.rootCount, input.assertionCount)\n const result = this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'ready', root_count = ?, assertion_count = ?, ready_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'staging' AND execution_token = ?\n `\n )\n .run(\n input.rootCount,\n input.assertionCount,\n input.readyAt,\n input.readyAt,\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n input.execution.executionToken\n )\n if (result.changes !== 1) {\n throw sourceConflict(`Source materialization '${input.materializationId}' changed.`)\n }\n return sourceRecord(\n this.requireManifest(input.projectId, input.source.projectionId, input.materializationId)\n )\n })\n }\n\n async getActive(input: GetActiveOntologySourceInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n const row = this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status = 'active'\n `\n )\n .get(input.projectId, input.source.projectionId) as SqliteOntologySourceRow | null\n return row ? sourceRecord(row) : null\n })\n }\n\n async abandon(input: AbandonSourceMaterializationCandidateInput): Promise<OntologySourceRecord>\n async abandon(input: ReclaimSourceMaterializationInput): Promise<OntologySourceRecord | null>\n async abandon(input: AbandonSourceMaterializationInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n assertExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertTimestamp(input.abandonedAt, \"Source abandonedAt\", true)\n this.assertExecution(input)\n return input.kind === \"candidate\"\n ? this.abandonCandidate(input)\n : this.abandonForReclaim(input)\n })\n }\n\n async cleanupTerminal(\n input: CleanupTerminalSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source cleanup project id\")\n assertTimestamp(input.terminalBefore, \"Terminal source cleanup cutoff\", true)\n assertPositiveInteger(input.limit, \"Terminal source cleanup limit\")\n return cleanupSourceVersions(this.db, input)\n })\n }\n\n async summarizeTerminal(\n input: SummarizeTerminalSourceMaterializationsInput\n ): Promise<TerminalSourceMaterializationSummary> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source summary project id\")\n const summary = this.db\n .query(\n `\n SELECT COUNT(*) AS terminal_count, MIN(terminal_at) AS oldest_terminal_at\n FROM ontology_sources\n WHERE project_id = ? AND status IN ('superseded', 'abandoned')\n `\n )\n .get(input.projectId) as {\n readonly terminal_count: number\n readonly oldest_terminal_at: string | null\n }\n return {\n count: summary.terminal_count,\n oldestTerminalAt: summary.oldest_terminal_at,\n }\n })\n }\n\n private abandonCandidate(\n input: AbandonSourceMaterializationCandidateInput\n ): OntologySourceRecord {\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n if (manifest.status === \"abandoned\") {\n if (\n manifest.projection_run_id === input.execution.projectionRunId &&\n manifest.terminal_at === input.abandonedAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was abandoned by another execution or at another time.`\n )\n }\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n return this.transitionToAbandoned(manifest, input.abandonedAt)\n }\n\n private abandonForReclaim(input: ReclaimSourceMaterializationInput): OntologySourceRecord | null {\n const candidates = this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND projection_run_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .all(\n input.projectId,\n input.source.projectionId,\n input.execution.projectionRunId\n ) as SqliteOntologySourceRow[]\n if (\n candidates.some((candidate) => candidate.execution_token === input.execution.executionToken)\n ) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a source materialization owned by the current execution.`\n )\n }\n if (candidates.length > 1) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' has multiple nonterminal source materializations.`\n )\n }\n return candidates[0] ? this.transitionToAbandoned(candidates[0], input.abandonedAt) : null\n }\n\n private transitionToAbandoned(\n manifest: SqliteOntologySourceRow,\n abandonedAt: string\n ): OntologySourceRecord {\n if (\n abandonedAt < manifest.created_at ||\n (manifest.ready_at !== null && abandonedAt < manifest.ready_at)\n ) {\n throw new MaterializationValidationError(\n \"Source abandonedAt cannot precede source creation or readiness.\"\n )\n }\n const changed = this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'abandoned', execution_token = NULL, terminal_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .run(\n abandonedAt,\n abandonedAt,\n manifest.project_id,\n manifest.source_id,\n manifest.materialization_id\n ).changes\n if (changed !== 1) {\n throw sourceConflict(\n `Source materialization '${manifest.materialization_id}' cannot transition to 'abandoned'.`\n )\n }\n this.db\n .query(`UPDATE ontology_source_roots SET retired_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ? AND active = 0`)\n .run(abandonedAt, manifest.project_id, manifest.source_id, manifest.materialization_id)\n return sourceRecord(\n this.requireManifest(manifest.project_id, manifest.source_id, manifest.materialization_id)\n )\n }\n\n private assertReadyState(\n manifest: SqliteOntologySourceRow,\n rootCount: number,\n assertionCount: number\n ): void {\n const counts = this.db\n .query(\n `\n SELECT (SELECT COUNT(*) FROM ontology_source_rows\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?) AS assertions, COUNT(*) AS roots,\n COUNT(DISTINCT staging_ordinal) AS ordinals,\n MIN(staging_ordinal) AS min_ordinal, MAX(staging_ordinal) AS max_ordinal\n FROM ontology_source_roots\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n `\n )\n .get(\n manifest.project_id,\n manifest.source_id,\n manifest.materialization_id,\n manifest.project_id,\n manifest.source_id,\n manifest.materialization_id\n ) as {\n assertions: number\n roots: number\n ordinals: number\n min_ordinal: number | null\n max_ordinal: number | null\n }\n if (\n counts.assertions !== assertionCount ||\n counts.roots !== rootCount ||\n counts.ordinals !== rootCount ||\n (rootCount > 0 && (counts.min_ordinal !== 0 || counts.max_ordinal !== rootCount - 1))\n ) {\n throw new MaterializationValidationError(\n \"Source ready counts do not match the staged roots and assertions.\"\n )\n }\n assertSourceRootCoverage(this.db, manifest)\n const invalid = this.db\n .query(\n manifest.projection_kind === \"link\"\n ? `\n SELECT root_key\n FROM ontology_source_rows\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n GROUP BY root_key\n HAVING COUNT(*) <> 1 OR MIN(root_kind) <> 'link' OR MIN(entity_kind) <> 'link'\n OR MIN(root_key) <> MIN(entity_key)\n LIMIT 1\n `\n : `\n SELECT root_key\n FROM ontology_source_rows\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n GROUP BY root_key\n HAVING MIN(root_kind) <> 'object'\n OR SUM(CASE WHEN entity_kind = 'object' AND entity_key = root_key THEN 1 ELSE 0 END) <> 1\n OR SUM(CASE\n WHEN entity_kind = 'object' AND entity_key <> root_key THEN 1\n WHEN entity_kind = 'link' AND (\n source_type_id <> root_object_type_id OR source_primary_id <> root_primary_id\n ) THEN 1\n ELSE 0\n END) <> 0\n LIMIT 1\n `\n )\n .get(manifest.project_id, manifest.source_id, manifest.materialization_id)\n if (invalid) {\n throw new MaterializationValidationError(\n manifest.projection_kind === \"link\"\n ? \"Link projection roots must contain exactly their matching link assertion.\"\n : \"Object projection roots must contain exactly their matching object assertion plus links sourced from that root.\"\n )\n }\n }\n\n private findStageRows(\n input: StageSourceRowsInput,\n rows: readonly SourceStageRow[]\n ): readonly SourceStageRow[] {\n if (rows.length === 0) return []\n const rootSortKeys = [...new Set(rows.map((row) => utf8SortKey(row.rootKey)))]\n const ordinals = [...new Set(rows.map((row) => row.row.stagingOrdinal))]\n const entitySortKeys = [...new Set(rows.map((row) => utf8SortKey(row.entityKey)))]\n const existing = this.db\n .query(\n `\n SELECT * FROM ontology_source_rows\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND (\n root_sort_key IN (SELECT CAST(value AS TEXT) FROM json_each(?))\n OR staging_ordinal IN (SELECT CAST(value AS INTEGER) FROM json_each(?))\n OR entity_sort_key IN (SELECT CAST(value AS TEXT) FROM json_each(?))\n )\n `\n )\n .all(\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n JSON.stringify(rootSortKeys),\n JSON.stringify(ordinals),\n JSON.stringify(entitySortKeys)\n ) as SqliteOntologySourceAssertionRow[]\n return existing.map((row) => sourceStageRow(sourceAssertion(row)))\n }\n\n private insertStageRows(input: StageSourceRowsInput, rows: readonly SourceStageRow[]): void {\n if (rows.length === 0) return\n const payload = rows.map(({ entityKey, rootKey, row }) => {\n const entity = entityColumns(row.assertion)\n const root = entityColumns(row.root)\n return {\n entityKind: row.assertion.kind,\n entityKey,\n entitySortKey: utf8SortKey(entityKey),\n rootKind: row.root.kind,\n rootKey,\n rootSortKey: utf8SortKey(rootKey),\n stagingOrdinal: row.stagingOrdinal,\n root: row.root,\n assertion: row.assertion,\n objectTypeId: entity.objectTypeId,\n primaryId: entity.primaryId,\n sourceTypeId: entity.sourceTypeId,\n sourcePrimaryId: entity.sourcePrimaryId,\n linkId: entity.linkId,\n targetTypeId: entity.targetTypeId,\n targetPrimaryId: entity.targetPrimaryId,\n rootObjectTypeId: root.objectTypeId,\n rootPrimaryId: root.primaryId,\n rootSourceTypeId: root.sourceTypeId,\n rootSourcePrimaryId: root.sourcePrimaryId,\n rootLinkId: root.linkId,\n rootTargetTypeId: root.targetTypeId,\n rootTargetPrimaryId: root.targetPrimaryId,\n }\n })\n this.db\n .query(\n `\n WITH staged(value) AS (SELECT value FROM json_each(?))\n INSERT INTO ontology_source_rows (\n project_id, source_id, materialization_id,\n entity_kind, entity_key, entity_sort_key,\n root_kind, root_key, root_sort_key, staging_ordinal,\n root, assertion,\n object_type_id, primary_id,\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id,\n root_object_type_id, root_primary_id,\n root_source_type_id, root_source_primary_id, root_link_id,\n root_target_type_id, root_target_primary_id\n )\n SELECT\n ?, ?, ?,\n json_extract(value, '$.entityKind'), json_extract(value, '$.entityKey'),\n json_extract(value, '$.entitySortKey'),\n json_extract(value, '$.rootKind'), json_extract(value, '$.rootKey'),\n json_extract(value, '$.rootSortKey'), json_extract(value, '$.stagingOrdinal'),\n json(json_extract(value, '$.root')), json(json_extract(value, '$.assertion')),\n json_extract(value, '$.objectTypeId'), json_extract(value, '$.primaryId'),\n json_extract(value, '$.sourceTypeId'), json_extract(value, '$.sourcePrimaryId'),\n json_extract(value, '$.linkId'), json_extract(value, '$.targetTypeId'),\n json_extract(value, '$.targetPrimaryId'),\n json_extract(value, '$.rootObjectTypeId'), json_extract(value, '$.rootPrimaryId'),\n json_extract(value, '$.rootSourceTypeId'),\n json_extract(value, '$.rootSourcePrimaryId'), json_extract(value, '$.rootLinkId'),\n json_extract(value, '$.rootTargetTypeId'), json_extract(value, '$.rootTargetPrimaryId')\n FROM staged\n `\n )\n .run(\n canonicalJson(payload),\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n }\n\n private assertExecution(\n input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly execution: { readonly projectionRunId: string; readonly executionToken: string }\n },\n identity?: AssertSourceMaterializationExecutionInput[\"identity\"]\n ): void {\n assertProjectionExecution(this.db, {\n projectId: input.projectId,\n sourceId: input.source.projectionId,\n projectionRunId: input.execution.projectionRunId,\n executionToken: input.execution.executionToken,\n ...(identity ? { identity } : {}),\n })\n }\n\n private getManifest(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow | null {\n return this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n `\n )\n .get(projectId, sourceId, materializationId) as SqliteOntologySourceRow | null\n }\n\n private requireManifest(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow {\n const row = this.getManifest(projectId, sourceId, materializationId)\n if (!row) throw sourceConflict(`Source materialization '${materializationId}' does not exist.`)\n return row\n }\n}\n",
55
- "import type { Database } from \"bun:sqlite\"\nimport type {\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n} from \"@sixb/core/storage\"\n\nexport function cleanupSourceVersions(\n db: Database,\n input: CleanupTerminalSourceMaterializationsInput\n): CleanupTerminalSourceMaterializationsResult {\n let remaining = input.limit\n let rowsDeleted = db\n .query(`DELETE FROM ontology_source_rows WHERE rowid IN (\n SELECT rows.rowid FROM ontology_source_roots AS roots\n JOIN ontology_sources AS sources USING (project_id, source_id, materialization_id)\n CROSS JOIN ontology_source_rows AS rows\n ON rows.project_id = roots.project_id AND rows.source_id = roots.source_id\n AND rows.materialization_id = roots.materialization_id AND rows.root_sort_key = roots.root_sort_key\n WHERE roots.project_id = ? AND roots.active = 0 AND roots.retired_at < ?\n AND sources.status IN ('superseded', 'abandoned')\n ORDER BY roots.retired_at, roots.source_id, roots.materialization_id, roots.root_sort_key, rows.entity_sort_key\n LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n remaining -= rowsDeleted\n if (remaining > 0) {\n const removed = db\n .query(`DELETE FROM ontology_source_roots WHERE rowid IN (\n SELECT roots.rowid FROM ontology_source_roots AS roots\n JOIN ontology_sources AS sources USING (project_id, source_id, materialization_id)\n WHERE roots.project_id = ? AND roots.active = 0 AND roots.retired_at < ?\n AND sources.status IN ('superseded', 'abandoned')\n AND NOT EXISTS (SELECT 1 FROM ontology_source_rows AS rows\n WHERE rows.project_id = roots.project_id AND rows.source_id = roots.source_id\n AND rows.materialization_id = roots.materialization_id AND rows.root_sort_key = roots.root_sort_key)\n ORDER BY roots.retired_at, roots.source_id, roots.materialization_id, roots.root_sort_key LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n rowsDeleted += removed\n remaining -= removed\n }\n const materializationsDeleted =\n remaining === 0\n ? 0\n : db\n .query(`DELETE FROM ontology_sources WHERE rowid IN (\n SELECT sources.rowid FROM ontology_sources AS sources\n WHERE project_id = ? AND status IN ('superseded', 'abandoned') AND terminal_at < ?\n AND NOT EXISTS (SELECT 1 FROM ontology_source_roots AS roots\n WHERE roots.project_id = sources.project_id AND roots.source_id = sources.source_id\n AND roots.materialization_id = sources.materialization_id)\n AND NOT EXISTS (SELECT 1 FROM ontology_source_rows AS rows\n WHERE rows.project_id = sources.project_id AND rows.source_id = sources.source_id\n AND rows.materialization_id = sources.materialization_id)\n ORDER BY terminal_at, source_id, materialization_id LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n return { rowsDeleted, materializationsDeleted }\n}\n",
54
+ "import type { Database } from \"bun:sqlite\"\nimport { MaterializationValidationError } from \"@sixb/core/internal/materialization\"\nimport {\n assertSourceBeginInput as assertBeginInput,\n assertSourceExecutionIdentity as assertExecutionIdentity,\n assertSourceProject as assertProjectAndSource,\n assertSourceCandidateOwner,\n assertSourceWriteIdentity as assertWriteIdentity,\n sourceEntityColumns as entityColumns,\n isExactStagingManifest,\n reconcileSourceStageRows,\n type SourceStageRow,\n sourceAssertionPayload,\n sourceConflict,\n sourceMaterializationIdentity,\n sourceStageRow,\n sourceStageRows,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AbandonRunSourceMaterializationInput,\n AbandonSourceMaterializationCandidateInput,\n AbandonSourceMaterializationInput,\n AdoptedSourceMaterialization,\n AdoptSourceMaterializationInput,\n AssertSourceMaterializationExecutionInput,\n BeginSourceMaterializationInput,\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n GetActiveOntologySourceInput,\n MarkSourceMaterializationReadyInput,\n OntologySourceRecord,\n OntologySourceStorage,\n PurgeAbandonedSourceMaterializationsInput,\n StageSourceRowsInput,\n StageSourceRowsResult,\n SummarizeTerminalSourceMaterializationsInput,\n TerminalSourceMaterializationSummary,\n} from \"@sixb/core/storage\"\nimport { yieldSqliteEventLoop } from \"../transactions\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertProjectionExecution,\n assertTimestamp,\n canonicalJson,\n type SqliteOntologySourceAssertionRow,\n type SqliteOntologySourceRow,\n type SqliteRootOperation,\n sourceAssertion,\n sourceRecord,\n} from \"./shared\"\nimport { cleanupSourceVersions, purgeAbandonedSourceVersions } from \"./source-cleanup\"\nimport {\n assertSourceRootCoverage,\n SOURCE_ASSERTION_COLUMNS,\n stageSourceRoots,\n} from \"./source-roots\"\n\nexport class SqliteOntologySourceStorage implements OntologySourceStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async beginMaterialization(\n input: BeginSourceMaterializationInput\n ): Promise<OntologySourceRecord> {\n return this.runRootOperation(() => {\n assertBeginInput(input)\n this.assertExecution(input, sourceMaterializationIdentity(input))\n const existing = this.getManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n if (existing) {\n if (isExactStagingManifest(sourceRecord(existing), input)) return sourceRecord(existing)\n throw sourceConflict(\n `Source materialization '${input.materializationId}' already exists with different identity or state.`\n )\n }\n\n const candidate = this.db\n .query(\n `\n SELECT 1\n FROM ontology_sources\n WHERE project_id = ? AND projection_run_id = ?\n AND status IN ('staging', 'ready')\n LIMIT 1\n `\n )\n .get(input.projectId, input.execution.projectionRunId)\n if (candidate) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a nonterminal source materialization; adopt it before beginning another.`\n )\n }\n\n this.db\n .query(\n `\n INSERT INTO ontology_sources (\n project_id, source_id, materialization_id, projection_run_id,\n projection_kind, protocol, status, execution_token,\n dataset_id, dataset_version_id, dataset_version_created_at,\n projection_revision, ownership_hash, ontology_revision,\n root_count, assertion_count, created_at, ready_at, activated_at,\n terminal_at, last_commit_id, updated_at, base_materialization_id, base_commit_id\n ) VALUES (?, ?, ?, ?, ?, 'replacement', 'staging', ?, ?, ?, ?, ?, ?, ?,\n NULL, NULL, ?, NULL, NULL, NULL, NULL, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n input.execution.projectionRunId,\n input.projectionKind,\n input.execution.executionToken,\n input.datasetVersion.datasetId,\n input.datasetVersion.versionId,\n input.datasetVersion.createdAt,\n input.projectionRevision,\n input.ownershipHash,\n input.ontologyRevision,\n input.createdAt,\n input.createdAt,\n input.base?.materializationId ?? null,\n input.base?.lastCommitId ?? null\n )\n return sourceRecord(\n this.requireManifest(input.projectId, input.source.projectionId, input.materializationId)\n )\n })\n }\n\n async stageRows(input: StageSourceRowsInput): Promise<StageSourceRowsResult> {\n const result = await this.runRootOperation(() => {\n assertWriteIdentity(input)\n this.assertExecution(input)\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' is '${manifest.status}' and cannot accept rows.`\n )\n }\n\n const rows = sourceStageRows(manifest.projection_kind, input.rows)\n const existing = this.findStageRows(manifest, rows)\n const { pending, unchanged } = reconcileSourceStageRows(rows, existing)\n stageSourceRoots(this.db, manifest, input)\n this.insertStageRows(manifest, pending)\n return { inserted: pending.length, unchanged }\n })\n await yieldSqliteEventLoop()\n return result\n }\n\n async markReady(input: MarkSourceMaterializationReadyInput): Promise<OntologySourceRecord> {\n return this.runRootOperation(() => {\n assertWriteIdentity(input)\n assertTimestamp(input.readyAt, \"Source readyAt\", true)\n assertNonnegativeInteger(input.rootCount, \"Source root count\")\n assertNonnegativeInteger(input.assertionCount, \"Source assertion count\")\n this.assertExecution(input)\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status === \"ready\") {\n if (\n manifest.root_count === input.rootCount &&\n manifest.assertion_count === input.assertionCount &&\n manifest.ready_at === input.readyAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was marked ready with different counts or time.`\n )\n }\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' cannot transition from '${manifest.status}' to 'ready'.`\n )\n }\n if (input.readyAt < manifest.created_at) {\n throw new MaterializationValidationError(\"Source readyAt cannot precede source createdAt.\")\n }\n this.assertReadyState(manifest, input.rootCount, input.assertionCount)\n const result = this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'ready', root_count = ?, assertion_count = ?, ready_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'staging' AND execution_token = ?\n `\n )\n .run(\n input.rootCount,\n input.assertionCount,\n input.readyAt,\n input.readyAt,\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n input.execution.executionToken\n )\n if (result.changes !== 1) {\n throw sourceConflict(`Source materialization '${input.materializationId}' changed.`)\n }\n return sourceRecord(\n this.requireManifest(input.projectId, input.source.projectionId, input.materializationId)\n )\n })\n }\n\n async getActive(input: GetActiveOntologySourceInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n const row = this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status = 'active'\n `\n )\n .get(input.projectId, input.source.projectionId) as SqliteOntologySourceRow | null\n return row ? sourceRecord(row) : null\n })\n }\n\n async adopt(\n input: AdoptSourceMaterializationInput\n ): Promise<AdoptedSourceMaterialization | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n assertExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertTimestamp(input.adoptedAt, \"Source adoptedAt\", true)\n this.assertExecution(input)\n const candidate = this.findRunCandidate(input)\n if (!candidate) return null\n // Workers' clocks differ; adoption never moves the record back in time.\n const changed = this.db\n .query(\n `\n UPDATE ontology_sources SET execution_token = ?, updated_at = MAX(updated_at, ?)\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .run(\n input.execution.executionToken,\n input.adoptedAt,\n candidate.project_id,\n candidate.source_id,\n candidate.materialization_id\n ).changes\n if (changed !== 1) {\n throw sourceConflict(`Source materialization '${candidate.materialization_id}' changed.`)\n }\n const adopted = this.requireManifest(\n candidate.project_id,\n candidate.source_id,\n candidate.materialization_id\n )\n return {\n record: sourceRecord(adopted),\n resumeStagingOrdinal:\n adopted.status === \"ready\" ? Number(adopted.root_count) : this.lastStagedOrdinal(adopted),\n }\n })\n }\n\n async abandon(input: AbandonSourceMaterializationCandidateInput): Promise<OntologySourceRecord>\n async abandon(input: AbandonRunSourceMaterializationInput): Promise<OntologySourceRecord | null>\n async abandon(input: AbandonSourceMaterializationInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n assertExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertTimestamp(input.abandonedAt, \"Source abandonedAt\", true)\n this.assertExecution(input)\n if (input.kind === \"candidate\") return this.abandonCandidate(input)\n const candidate = this.findRunCandidate(input)\n return candidate ? this.transitionToAbandoned(candidate, input.abandonedAt) : null\n })\n }\n\n async cleanupTerminal(\n input: CleanupTerminalSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source cleanup project id\")\n assertTimestamp(input.terminalBefore, \"Terminal source cleanup cutoff\", true)\n assertPositiveInteger(input.limit, \"Terminal source cleanup limit\")\n return cleanupSourceVersions(this.db, input)\n })\n }\n\n async purgeAbandoned(\n input: PurgeAbandonedSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Abandoned source purge project id\")\n assertPositiveInteger(input.limit, \"Abandoned source purge limit\")\n return purgeAbandonedSourceVersions(this.db, input)\n })\n }\n\n async summarizeTerminal(\n input: SummarizeTerminalSourceMaterializationsInput\n ): Promise<TerminalSourceMaterializationSummary> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source summary project id\")\n const summary = this.db\n .query(\n `\n SELECT COUNT(*) AS terminal_count, MIN(terminal_at) AS oldest_terminal_at\n FROM ontology_sources\n WHERE project_id = ? AND status IN ('superseded', 'abandoned')\n `\n )\n .get(input.projectId) as {\n readonly terminal_count: number\n readonly oldest_terminal_at: string | null\n }\n return {\n count: summary.terminal_count,\n oldestTerminalAt: summary.oldest_terminal_at,\n }\n })\n }\n\n private abandonCandidate(\n input: AbandonSourceMaterializationCandidateInput\n ): OntologySourceRecord {\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n if (manifest.status === \"abandoned\") {\n if (\n manifest.projection_run_id === input.execution.projectionRunId &&\n manifest.terminal_at === input.abandonedAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was abandoned by another execution or at another time.`\n )\n }\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n return this.transitionToAbandoned(manifest, input.abandonedAt)\n }\n\n /** The run's one staging or ready candidate, whichever execution staged it. */\n private findRunCandidate(input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly execution: { readonly projectionRunId: string }\n }): SqliteOntologySourceRow | null {\n const candidates = this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND projection_run_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .all(\n input.projectId,\n input.source.projectionId,\n input.execution.projectionRunId\n ) as SqliteOntologySourceRow[]\n if (candidates.length > 1) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' has multiple nonterminal source materializations.`\n )\n }\n return candidates[0] ?? null\n }\n\n private lastStagedOrdinal(manifest: SqliteOntologySourceRow): number {\n const last = this.db\n .query(\n \"SELECT MAX(staging_ordinal) AS ordinal FROM ontology_source_roots WHERE version_id = ?\"\n )\n .get(manifest.version_id) as {\n readonly ordinal: number | null\n } | null\n return last?.ordinal ?? 0\n }\n\n private transitionToAbandoned(\n manifest: SqliteOntologySourceRow,\n abandonedAt: string\n ): OntologySourceRecord {\n if (\n abandonedAt < manifest.created_at ||\n (manifest.ready_at !== null && abandonedAt < manifest.ready_at)\n ) {\n throw new MaterializationValidationError(\n \"Source abandonedAt cannot precede source creation or readiness.\"\n )\n }\n const changed = this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'abandoned', execution_token = NULL, terminal_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .run(\n abandonedAt,\n abandonedAt,\n manifest.project_id,\n manifest.source_id,\n manifest.materialization_id\n ).changes\n if (changed !== 1) {\n throw sourceConflict(\n `Source materialization '${manifest.materialization_id}' cannot transition to 'abandoned'.`\n )\n }\n // Its roots were never live and stay unpublished; purging removes them with the version.\n return sourceRecord(\n this.requireManifest(manifest.project_id, manifest.source_id, manifest.materialization_id)\n )\n }\n\n private assertReadyState(\n manifest: SqliteOntologySourceRow,\n rootCount: number,\n assertionCount: number\n ): void {\n const counts = this.db\n .query(\n `\n SELECT (SELECT COUNT(*) FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?1) AS assertions,\n COUNT(*) AS roots, COUNT(DISTINCT staging_ordinal) AS ordinals,\n MIN(staging_ordinal) AS min_ordinal, MAX(staging_ordinal) AS max_ordinal\n FROM ontology_source_roots\n WHERE version_id = ?1\n `\n )\n .get(manifest.version_id) as {\n assertions: number\n roots: number\n ordinals: number\n min_ordinal: number | null\n max_ordinal: number | null\n }\n if (\n counts.assertions !== assertionCount ||\n counts.roots !== rootCount ||\n counts.ordinals !== rootCount ||\n (rootCount > 0 && (counts.min_ordinal !== 0 || counts.max_ordinal !== rootCount - 1))\n ) {\n throw new MaterializationValidationError(\n \"Source ready counts do not match the staged roots and assertions.\"\n )\n }\n assertSourceRootCoverage(this.db, manifest)\n // Roots store only their canonical key; compare its parts with each row's typed identity.\n const invalid = this.db\n .query(\n manifest.projection_kind === \"link\"\n ? `\n SELECT roots.root_key\n FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?\n GROUP BY roots.id\n HAVING COUNT(*) <> 1\n OR MAX(json_extract(roots.root_key, '$[0]') <> 'link')\n OR MAX(rows.entity_kind <> 'link')\n OR MAX(rows.source_type_id <> json_extract(roots.root_key, '$[1]')\n OR rows.source_primary_id <> json_extract(roots.root_key, '$[2]')\n OR rows.link_id <> json_extract(roots.root_key, '$[3]')\n OR rows.target_type_id <> json_extract(roots.root_key, '$[4]')\n OR rows.target_primary_id <> json_extract(roots.root_key, '$[5]'))\n LIMIT 1\n `\n : `\n SELECT roots.root_key\n FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?\n GROUP BY roots.id\n HAVING MAX(json_extract(roots.root_key, '$[0]') <> 'object')\n OR SUM(rows.entity_kind = 'object'\n AND rows.object_type_id = json_extract(roots.root_key, '$[1]')\n AND rows.primary_id = json_extract(roots.root_key, '$[2]')) <> 1\n OR SUM(\n (rows.entity_kind = 'object' AND (\n rows.object_type_id <> json_extract(roots.root_key, '$[1]')\n OR rows.primary_id <> json_extract(roots.root_key, '$[2]')))\n OR (rows.entity_kind = 'link' AND (\n rows.source_type_id <> json_extract(roots.root_key, '$[1]')\n OR rows.source_primary_id <> json_extract(roots.root_key, '$[2]')))\n ) <> 0\n OR SUM(rows.entity_kind = 'link') <> COUNT(DISTINCT CASE\n WHEN rows.entity_kind = 'link'\n THEN json_array(rows.link_id, rows.target_type_id, rows.target_primary_id)\n END)\n LIMIT 1\n `\n )\n .get(manifest.version_id)\n if (invalid) {\n throw new MaterializationValidationError(\n manifest.projection_kind === \"link\"\n ? \"Link projection roots must contain exactly their matching link assertion.\"\n : \"Object projection roots must contain exactly their matching object assertion plus links sourced from that root.\"\n )\n }\n }\n\n /** Already staged assertions sharing a root or an ordinal with `rows`. */\n private findStageRows(\n manifest: SqliteOntologySourceRow,\n rows: readonly SourceStageRow[]\n ): readonly SourceStageRow[] {\n if (rows.length === 0) return []\n const rootKeys = [...new Set(rows.map((row) => row.rootKey))]\n const ordinals = [...new Set(rows.map((row) => row.row.stagingOrdinal))]\n // Two keyed lookups: an OR over both columns scans every root of the version per batch.\n const existing = this.db\n .query(\n `\n WITH selected AS (\n SELECT roots.id FROM json_each(?2) AS requested\n CROSS JOIN ontology_source_roots AS roots\n ON roots.version_id = ?1 AND roots.root_key = CAST(requested.value AS TEXT)\n UNION\n SELECT roots.id FROM json_each(?3) AS requested\n CROSS JOIN ontology_source_roots AS roots\n ON roots.version_id = ?1 AND roots.staging_ordinal = CAST(requested.value AS INTEGER)\n )\n SELECT ${SOURCE_ASSERTION_COLUMNS} FROM selected\n CROSS JOIN ontology_source_roots AS roots ON roots.id = selected.id\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n `\n )\n .all(\n manifest.version_id,\n JSON.stringify(rootKeys),\n JSON.stringify(ordinals)\n ) as SqliteOntologySourceAssertionRow[]\n return existing.map((row) => sourceStageRow(sourceAssertion(row)))\n }\n\n private insertStageRows(\n manifest: SqliteOntologySourceRow,\n rows: readonly SourceStageRow[]\n ): void {\n if (rows.length === 0) return\n const payload = rows.map(({ rootKey, row }) => {\n const entity = entityColumns(row.assertion)\n return {\n rootKey,\n entityKind: row.assertion.kind,\n objectTypeId: entity.objectTypeId,\n primaryId: entity.primaryId,\n sourceTypeId: entity.sourceTypeId,\n sourcePrimaryId: entity.sourcePrimaryId,\n linkId: entity.linkId,\n targetTypeId: entity.targetTypeId,\n targetPrimaryId: entity.targetPrimaryId,\n payload: sourceAssertionPayload(row.assertion),\n }\n })\n const inserted = this.db\n .query(\n `\n WITH staged(value) AS (SELECT value FROM json_each(?))\n INSERT INTO ontology_source_rows (\n root_id, entity_kind, object_type_id, primary_id,\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id, payload\n )\n SELECT roots.id, json_extract(value, '$.entityKind'),\n json_extract(value, '$.objectTypeId'), json_extract(value, '$.primaryId'),\n json_extract(value, '$.sourceTypeId'), json_extract(value, '$.sourcePrimaryId'),\n json_extract(value, '$.linkId'), json_extract(value, '$.targetTypeId'),\n json_extract(value, '$.targetPrimaryId'), json_extract(value, '$.payload')\n FROM staged\n CROSS JOIN ontology_source_roots AS roots\n ON roots.version_id = ? AND roots.root_key = json_extract(value, '$.rootKey')\n `\n )\n .run(canonicalJson(payload), manifest.version_id).changes\n if (inserted !== rows.length) {\n throw sourceConflict(\"Staged source rows do not all belong to a staged root.\")\n }\n }\n\n private assertExecution(\n input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly execution: { readonly projectionRunId: string; readonly executionToken: string }\n },\n identity?: AssertSourceMaterializationExecutionInput[\"identity\"]\n ): void {\n assertProjectionExecution(this.db, {\n projectId: input.projectId,\n sourceId: input.source.projectionId,\n projectionRunId: input.execution.projectionRunId,\n executionToken: input.execution.executionToken,\n ...(identity ? { identity } : {}),\n })\n }\n\n private getManifest(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow | null {\n return this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n `\n )\n .get(projectId, sourceId, materializationId) as SqliteOntologySourceRow | null\n }\n\n private requireManifest(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow {\n const row = this.getManifest(projectId, sourceId, materializationId)\n if (!row) throw sourceConflict(`Source materialization '${materializationId}' does not exist.`)\n return row\n }\n}\n",
55
+ "import type { Database } from \"bun:sqlite\"\nimport type {\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n PurgeAbandonedSourceMaterializationsInput,\n} from \"@sixb/core/storage\"\n\n/**\n * Superseded versions can still hold live roots (a delta keeps unchanged roots where they were),\n * so they are cleaned root by root once retired. An abandoned candidate was never published:\n * everything it holds goes, one whole version at a time, each delete on its own version prefix.\n */\nexport function purgeAbandonedSourceVersions(\n db: Database,\n input: PurgeAbandonedSourceMaterializationsInput\n): CleanupTerminalSourceMaterializationsResult {\n let remaining = input.limit\n let rowsDeleted = 0\n let materializationsDeleted = 0\n const nextCandidate = db.query(`\n SELECT version_id FROM ontology_sources\n WHERE project_id = ? AND status = 'abandoned'\n ORDER BY terminal_at, source_id, materialization_id LIMIT 1\n `)\n const deleteRows = db.query(`DELETE FROM ontology_source_rows WHERE rowid IN (\n SELECT rows.rowid FROM ontology_source_roots AS roots\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ? LIMIT ?)`)\n const deleteRoots = db.query(`DELETE FROM ontology_source_roots WHERE id IN (\n SELECT id FROM ontology_source_roots WHERE version_id = ? LIMIT ?)`)\n const deleteManifest = db.query(\n \"DELETE FROM ontology_sources WHERE version_id = ? AND status = 'abandoned'\"\n )\n while (remaining > 0) {\n const candidate = nextCandidate.get(input.projectId) as { readonly version_id: number } | null\n if (!candidate) break\n const rows = deleteRows.run(candidate.version_id, remaining).changes\n rowsDeleted += rows\n remaining -= rows\n if (remaining === 0) break\n const roots = deleteRoots.run(candidate.version_id, remaining).changes\n rowsDeleted += roots\n remaining -= roots\n if (remaining === 0) break\n const manifest = deleteManifest.run(candidate.version_id).changes\n if (manifest === 0) break\n materializationsDeleted += manifest\n remaining -= manifest\n }\n return { rowsDeleted, materializationsDeleted }\n}\n\nexport function cleanupSourceVersions(\n db: Database,\n input: CleanupTerminalSourceMaterializationsInput\n): CleanupTerminalSourceMaterializationsResult {\n let remaining = input.limit\n const retired = `roots.project_id = ? AND roots.retired_at < ? AND versions.status = 'superseded'`\n let rowsDeleted = db\n .query(`DELETE FROM ontology_source_rows WHERE rowid IN (\n SELECT rows.rowid FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE ${retired}\n ORDER BY roots.retired_at, roots.id\n LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n remaining -= rowsDeleted\n if (remaining > 0) {\n const removed = db\n .query(`DELETE FROM ontology_source_roots WHERE id IN (\n SELECT roots.id FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n WHERE ${retired}\n AND NOT EXISTS (SELECT 1 FROM ontology_source_rows AS rows WHERE rows.root_id = roots.id)\n ORDER BY roots.retired_at, roots.id LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n rowsDeleted += removed\n remaining -= removed\n }\n const materializationsDeleted =\n remaining === 0\n ? 0\n : db\n .query(`DELETE FROM ontology_sources WHERE version_id IN (\n SELECT versions.version_id FROM ontology_sources AS versions\n WHERE project_id = ? AND status = 'superseded' AND terminal_at < ?\n AND NOT EXISTS (SELECT 1 FROM ontology_source_roots AS roots\n WHERE roots.version_id = versions.version_id)\n ORDER BY terminal_at, source_id, materialization_id LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n return { rowsDeleted, materializationsDeleted }\n}\n",
56
56
  "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n type MaterializationSession,\n type OntologyVectorIndexingStorage,\n VECTOR_INDEXING_FAILURE_CODES,\n type VectorIndexingRequest,\n type VectorIndexingWork,\n} from \"@sixb/core/storage\"\nimport type { SqliteRootOperation } from \"./shared\"\n\ninterface WorkRow {\n batch_id: string | null\n request: string\n status: VectorIndexingWork[\"status\"]\n available_at: string\n values_json: string | null\n error: string | null\n}\nexport class SqliteVectorIndexingStorage implements OntologyVectorIndexingStorage {\n constructor(\n private readonly db: Database,\n private readonly run: SqliteRootOperation,\n private readonly assertSession: (session: MaterializationSession, projectId: string) => void\n ) {}\n async schedule(input: Parameters<OntologyVectorIndexingStorage[\"schedule\"]>[0]) {\n this.assertSession(input.session, input.projectId)\n for (const ref of input.deleted)\n this.db\n .query(\n `DELETE FROM object_vector_indexing WHERE project_id = ? AND object_type_id = ? AND primary_id = ?`\n )\n .run(input.projectId, ref.objectTypeId, ref.primaryId)\n const insert =\n this.db.query(`INSERT INTO object_vector_indexing (project_id, id, object_type_id, primary_id, profile, batch_id, request, status, available_at, dispatch_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?)\n ON CONFLICT (project_id, object_type_id, primary_id, profile) DO UPDATE SET id = excluded.id, batch_id = excluded.batch_id, request = excluded.request, status = 'pending', available_at = excluded.available_at, dispatch_at = excluded.dispatch_at, values_json = NULL, error = NULL`)\n for (const { batchId, ...request } of input.requests)\n insert.run(\n input.projectId,\n request.id,\n request.ref.objectTypeId,\n request.ref.primaryId,\n request.profile,\n batchId ?? null,\n JSON.stringify(request),\n input.availableAt,\n input.availableAt\n )\n }\n async complete(input: Parameters<OntologyVectorIndexingStorage[\"complete\"]>[0]) {\n this.assertSession(input.session, input.projectId)\n const remove = this.db.query(\n `DELETE FROM object_vector_indexing WHERE project_id = ? AND object_type_id = ? AND primary_id = ? AND profile = ? AND json_extract(request, '$.configuration') = ? AND json_extract(request, '$.sourceFingerprint') = ?`\n )\n for (const entry of input.entries) {\n remove.run(\n input.projectId,\n entry.ref.objectTypeId,\n entry.ref.primaryId,\n entry.profile,\n entry.configuration,\n entry.sourceFingerprint\n )\n }\n }\n\n async dispatched(input: Parameters<OntologyVectorIndexingStorage[\"dispatched\"]>[0]) {\n await this.run(() => {\n const update = this.db.query(\n `UPDATE object_vector_indexing SET dispatch_at = ? WHERE project_id = ? AND id = ?`\n )\n for (const id of input.ids) update.run(input.nextDispatchAt, input.projectId, id)\n })\n }\n async get(input: Parameters<OntologyVectorIndexingStorage[\"get\"]>[0]) {\n return this.run(() => {\n const row = this.db\n .query<WorkRow, [string, string]>(\n `SELECT batch_id, request, status, available_at, values_json, error FROM object_vector_indexing WHERE project_id = ? AND id = ?`\n )\n .get(input.projectId, input.id)\n return row ? decode(row) : null\n })\n }\n async getBatch(input: Parameters<OntologyVectorIndexingStorage[\"getBatch\"]>[0]) {\n return this.run(() =>\n this.db\n .query<WorkRow, [string, string]>(`\n SELECT batch_id, request, status, available_at, values_json, error FROM object_vector_indexing\n WHERE project_id = ? AND batch_id = ? ORDER BY id`)\n .all(input.projectId, input.batchId)\n .map(decode)\n )\n }\n\n async getBatchMember(input: Parameters<OntologyVectorIndexingStorage[\"getBatchMember\"]>[0]) {\n return this.run(() => {\n const row = this.db\n .query<WorkRow, [string, string, string, string, string]>(`\n SELECT batch_id, request, status, available_at, values_json, error\n FROM object_vector_indexing WHERE project_id = ? AND object_type_id = ?\n AND primary_id = ? AND profile = ? AND batch_id = ?`)\n .get(\n input.projectId,\n input.ref.objectTypeId,\n input.ref.primaryId,\n input.profile,\n input.batchId\n )\n return row ? decode(row) : null\n })\n }\n\n async updateBatch(input: Parameters<OntologyVectorIndexingStorage[\"updateBatch\"]>[0]) {\n return this.run(() =>\n this.db.transaction(() => {\n const status = this.db.query<{ status: string }, [string, string]>(\n \"SELECT status FROM object_vector_indexing WHERE project_id = ? AND id = ?\"\n )\n if (\n input.requireAll &&\n input.updates.some(\n (update) => status.get(input.projectId, update.id)?.status !== update.expectedStatus\n )\n )\n return false\n const updateRow = this.db.query(`UPDATE object_vector_indexing\n SET status = ?, available_at = ?, values_json = COALESCE(?, values_json), error = ?\n WHERE project_id = ? AND id = ? AND status = ?`)\n for (const update of input.updates)\n updateRow.run(\n update.status,\n update.availableAt,\n update.values ? JSON.stringify(update.values) : null,\n update.error ? JSON.stringify(update.error) : null,\n input.projectId,\n update.id,\n update.expectedStatus\n )\n return true\n })()\n )\n }\n\n async listDue(input: Parameters<OntologyVectorIndexingStorage[\"listDue\"]>[0]) {\n return this.run(() =>\n this.db\n .query<WorkRow, [string, string, number]>(\n `SELECT batch_id, request, status, available_at, NULL AS values_json, error FROM object_vector_indexing WHERE project_id = ? AND status <> 'failed' AND dispatch_at <= ? ORDER BY dispatch_at, id LIMIT ?`\n )\n .all(input.projectId, input.now, input.limit)\n .map(decode)\n )\n }\n async update(input: Parameters<OntologyVectorIndexingStorage[\"update\"]>[0]) {\n return this.run(\n () =>\n this.db\n .query(\n `UPDATE object_vector_indexing SET status = ?, available_at = ?, values_json = COALESCE(?, values_json), error = ? WHERE project_id = ? AND id = ? AND status = ?`\n )\n .run(\n input.status,\n input.availableAt,\n input.values ? JSON.stringify(input.values) : null,\n input.error ? JSON.stringify(input.error) : null,\n input.projectId,\n input.id,\n input.expectedStatus\n ).changes === 1\n )\n }\n async remove(input: Parameters<OntologyVectorIndexingStorage[\"remove\"]>[0]) {\n await this.run(() => {\n this.db\n .query(`DELETE FROM object_vector_indexing WHERE project_id = ? AND id = ?`)\n .run(input.projectId, input.id)\n })\n }\n}\nfunction decode(row: WorkRow): VectorIndexingWork {\n const request = JSON.parse(row.request) as VectorIndexingRequest\n return {\n ...request,\n ...(row.batch_id ? { batchId: row.batch_id } : {}),\n status: row.status,\n availableAt: row.available_at,\n ...(row.values_json ? { values: JSON.parse(row.values_json) as number[] } : {}),\n ...(row.error\n ? {\n error: parseSixbFailure(row.error, VECTOR_INDEXING_FAILURE_CODES),\n }\n : {}),\n }\n}\n",
57
57
  "import type { Database } from \"bun:sqlite\"\nimport { MaterializationConflictError } from \"@sixb/core/internal/materialization\"\nimport type {\n MaterializationSession,\n ObjectVectorState,\n OntologyVectorStorage,\n} from \"@sixb/core/storage\"\nimport { encodeSqliteVector } from \"../vector-encoding\"\nimport type { SqliteRootOperation } from \"./shared\"\n\ninterface VectorMetadataRow {\n readonly profile: string\n readonly configuration: string\n readonly source: string\n readonly source_fingerprint: string\n readonly last_commit_id: string\n}\n\nexport class SqliteOntologyVectorStorage implements OntologyVectorStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation,\n private readonly assertSession: (\n session: MaterializationSession,\n projectId: string,\n commitId?: string\n ) => void\n ) {}\n\n async list(\n input: Parameters<OntologyVectorStorage[\"list\"]>[0]\n ): Promise<readonly ObjectVectorState[]> {\n return this.runRootOperation(() => {\n const rows = this.db\n .query<VectorMetadataRow, [string, string, string]>(`\n SELECT profile, configuration, source, source_fingerprint, last_commit_id\n FROM object_vectors\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n ORDER BY profile\n `)\n .all(input.projectId, input.ref.objectTypeId, input.ref.primaryId)\n return rows.map((row) => ({\n ref: { ...input.ref },\n profile: row.profile,\n configuration: row.configuration,\n source: JSON.parse(row.source) as string[],\n sourceFingerprint: row.source_fingerprint,\n lastCommitId: row.last_commit_id,\n }))\n })\n }\n\n async listBatch(\n input: Parameters<OntologyVectorStorage[\"listBatch\"]>[0]\n ): Promise<readonly ObjectVectorState[]> {\n if (!input.refs.length) return []\n return this.runRootOperation(() => {\n // Keep the bounded request set first so SQLite probes the composite object index.\n const rows = this.db\n .query<\n VectorMetadataRow & { object_type_id: string; primary_id: string },\n [string, string]\n >(`\n WITH requested AS (\n SELECT DISTINCT json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id FROM json_each(?)\n )\n SELECT stored.object_type_id, stored.primary_id, stored.profile, stored.configuration,\n stored.source, stored.source_fingerprint, stored.last_commit_id\n FROM requested CROSS JOIN object_vectors AS stored\n WHERE stored.project_id = ? AND stored.object_type_id = requested.object_type_id\n AND stored.primary_id = requested.primary_id\n ORDER BY stored.object_type_id, stored.primary_id, stored.profile\n `)\n .all(JSON.stringify(input.refs), input.projectId)\n return rows.map((row) => ({\n ref: { objectTypeId: row.object_type_id, primaryId: row.primary_id },\n profile: row.profile,\n configuration: row.configuration,\n source: JSON.parse(row.source) as string[],\n sourceFingerprint: row.source_fingerprint,\n lastCommitId: row.last_commit_id,\n }))\n })\n }\n\n async removeBatch(input: Parameters<OntologyVectorStorage[\"removeBatch\"]>[0]): Promise<void> {\n this.assertSession(input.session, input.projectId)\n if (!input.entries.length) return\n const { changes } = this.db\n .query(`\n DELETE FROM object_vectors WHERE rowid IN (\n SELECT stored.rowid FROM json_each(?) AS requested CROSS JOIN object_vectors AS stored\n WHERE stored.project_id = ? AND stored.object_type_id = json_extract(requested.value, '$.ref.objectTypeId')\n AND stored.primary_id = json_extract(requested.value, '$.ref.primaryId')\n AND stored.profile = json_extract(requested.value, '$.profile')\n AND stored.last_commit_id = json_extract(requested.value, '$.expectedCommitId')\n )\n `)\n .run(JSON.stringify(input.entries), input.projectId)\n if (changes !== input.entries.length) throw vectorConflict()\n }\n\n async write(input: Parameters<OntologyVectorStorage[\"write\"]>[0]): Promise<void> {\n const { value } = input\n this.assertSession(input.session, input.projectId, value.lastCommitId)\n // The Materializer validates and normalizes float32 values before this boundary.\n const embedding = encodeSqliteVector(value.values)\n const changes =\n input.expectedCommitId === null\n ? this.db\n .query(`\n INSERT INTO object_vectors (\n project_id, object_type_id, primary_id, profile,\n configuration, source, source_fingerprint, embedding, last_commit_id\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (project_id, object_type_id, primary_id, profile) DO NOTHING\n `)\n .run(\n input.projectId,\n value.ref.objectTypeId,\n value.ref.primaryId,\n value.profile,\n value.configuration,\n JSON.stringify(value.source),\n value.sourceFingerprint,\n embedding,\n value.lastCommitId\n ).changes\n : this.db\n .query(`\n UPDATE object_vectors\n SET configuration = ?, source = ?, source_fingerprint = ?, embedding = ?, last_commit_id = ?\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND profile = ? AND last_commit_id = ?\n `)\n .run(\n value.configuration,\n JSON.stringify(value.source),\n value.sourceFingerprint,\n embedding,\n value.lastCommitId,\n input.projectId,\n value.ref.objectTypeId,\n value.ref.primaryId,\n value.profile,\n input.expectedCommitId\n ).changes\n if (changes !== 1) throw vectorConflict()\n }\n\n async writeBatch(input: Parameters<OntologyVectorStorage[\"writeBatch\"]>[0]): Promise<void> {\n for (const entry of input.entries) {\n await this.write({ session: input.session, projectId: input.projectId, ...entry })\n }\n }\n\n async remove(input: Parameters<OntologyVectorStorage[\"remove\"]>[0]): Promise<void> {\n this.assertSession(input.session, input.projectId)\n const { changes } = this.db\n .query(`\n DELETE FROM object_vectors\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND profile = ? AND last_commit_id = ?\n `)\n .run(\n input.projectId,\n input.ref.objectTypeId,\n input.ref.primaryId,\n input.profile,\n input.expectedCommitId\n )\n if (changes !== 1) throw vectorConflict()\n }\n}\n\nfunction vectorConflict(): MaterializationConflictError {\n return new MaterializationConflictError(\n \"effective-state\",\n \"Vector changed since it was prepared.\"\n )\n}\n",
58
58
  "import type { Database } from \"bun:sqlite\"\nimport type { OntologyStorage } from \"@sixb/core/storage\"\nimport { SqliteOntologyCommitStorage } from \"./commits\"\nimport type { SqliteOntologyTransactionContext } from \"./materialization-session\"\nimport { SqliteOntologyMaterializationStorage } from \"./materializations\"\nimport { SqliteOntologyOutboxStorage } from \"./outbox\"\nimport type { SqliteRootOperation } from \"./shared\"\nimport { SqliteOntologySourceStorage } from \"./sources\"\n\nimport { SqliteVectorIndexingStorage } from \"./vector-indexing\"\nimport { SqliteOntologyVectorStorage } from \"./vectors\"\n\nexport class SqliteOntologyStorage implements OntologyStorage {\n readonly commits: SqliteOntologyCommitStorage\n readonly sources: SqliteOntologySourceStorage\n readonly materializations: SqliteOntologyMaterializationStorage\n readonly vectorIndexing: SqliteVectorIndexingStorage\n readonly vectors: SqliteOntologyVectorStorage\n readonly outbox: SqliteOntologyOutboxStorage\n\n constructor(input: {\n readonly db: Database\n readonly runRootOperation: SqliteRootOperation\n readonly transactionContext: SqliteOntologyTransactionContext | null\n }) {\n this.commits = new SqliteOntologyCommitStorage(input.db, input.runRootOperation)\n this.sources = new SqliteOntologySourceStorage(input.db, input.runRootOperation)\n this.materializations = new SqliteOntologyMaterializationStorage(\n input.db,\n input.transactionContext\n )\n this.vectorIndexing = new SqliteVectorIndexingStorage(\n input.db,\n input.runRootOperation,\n (session, projectId) => this.materializations.assertVectorSession(session, projectId)\n )\n this.vectors = new SqliteOntologyVectorStorage(\n input.db,\n input.runRootOperation,\n (session, projectId, commitId) =>\n this.materializations.assertVectorSession(session, projectId, commitId)\n )\n this.outbox = new SqliteOntologyOutboxStorage(input.db, input.runRootOperation)\n }\n\n deactivateSessions(): void {\n this.materializations.deactivateSessions()\n }\n}\n\nexport type { SqliteOntologyTransactionContext } from \"./materialization-session\"\n",
59
59
  "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure, serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport { assertPipelineRunExecution } from \"@sixb/core/internal/pipeline-run-storage-provider\"\nimport { canRequeuePipelineRunAfterEnqueueFailure } from \"@sixb/core/internal/storage\"\nimport type { DatasetVersionRef } from \"@sixb/core/lake-storage\"\nimport type {\n ExecutionStorage,\n FinishPipelineRunInput,\n FinishPipelineStepRunInput,\n ListLatestPipelineRunsInput,\n ListLatestPipelineRunsResult,\n ListPipelineRunsInput,\n ListPipelineRunsResult,\n ListPipelineStepRunsInput,\n ListPipelineStepRunsResult,\n PipelineRunRecord,\n PipelineRunStorage,\n PipelineStepRunRecord,\n QueuePipelineRunInput,\n StartPipelineRunInput,\n StartPipelineStepRunInput,\n} from \"@sixb/core/storage\"\nimport { PIPELINE_RUN_FAILURE_CODES, PipelineRunError } from \"@sixb/core/storage\"\nimport { queryLatestRunsByOwnerId } from \"./latest-run-query\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport {\n appendRunListFilters,\n hasEmptyStatuses,\n queryRunList,\n type SqliteValue,\n} from \"./run-list-query\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqlitePipelineRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqlitePipelineRunStorage implements PipelineRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqlitePipelineRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n }\n\n async queue(input: QueuePipelineRunInput): Promise<PipelineRunRecord> {\n const queuedAt = input.queuedAt ?? new Date()\n await assertPipelineRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n pipelineId: input.pipelineId,\n })\n\n try {\n this.db\n .query(\n `\n INSERT INTO pipeline_runs (\n project_id,\n id,\n execution_id,\n pipeline_id,\n status,\n queued_at,\n started_at\n ) VALUES (?, ?, ?, ?, ?, ?, NULL)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.pipelineId,\n \"queued\",\n queuedAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n return this.requeueAfterEnqueueFailure(input, queuedAt)\n }\n\n throw error\n }\n\n const record = await this.getById({ projectId: input.projectId, id: input.id })\n if (!record) {\n throw new PipelineRunError(\n `[SixbSqlite] Failed to load pipeline run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return record\n }\n\n private async requeueAfterEnqueueFailure(\n input: QueuePipelineRunInput,\n queuedAt: Date\n ): Promise<PipelineRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow | null\n if (\n !existing ||\n !canRequeuePipelineRunAfterEnqueueFailure(rowToPipelineRunRecord(existing), input)\n ) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE pipeline_runs\n SET status = ?, queued_at = ?, started_at = NULL, finished_at = NULL,\n output_dataset_id = NULL, output_version_id = NULL, error = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\"queued\", queuedAt.toISOString(), input.projectId, input.id)\n\n const updated = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow\n return rowToPipelineRunRecord(updated)\n })()\n }\n\n async start(input: StartPipelineRunInput): Promise<PipelineRunRecord> {\n const result = this.db\n .query(\n `\n UPDATE pipeline_runs\n SET status = ?, started_at = ?, error = NULL\n WHERE project_id = ? AND id = ? AND status = ?\n `\n )\n .run(\n \"running\",\n (input.startedAt ?? new Date()).toISOString(),\n input.projectId,\n input.id,\n \"queued\"\n )\n if (result.changes > 0) {\n const record = await this.getById({ projectId: input.projectId, id: input.id })\n if (record) return record\n }\n\n const existing = await this.getById({ projectId: input.projectId, id: input.id })\n if (!existing) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' cannot start from status '${existing.status}'.`\n )\n }\n\n async finish(input: FinishPipelineRunInput): Promise<PipelineRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow | null\n\n if (!existing) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n const enqueueFailure =\n input.status === \"failed\" && input.error.code === \"queue.enqueue_failed\"\n if (\n (enqueueFailure && existing.status !== \"queued\") ||\n (!enqueueFailure && existing.status !== \"running\")\n ) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' cannot finish from status '${existing.status}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE pipeline_runs\n SET\n status = ?,\n finished_at = ?,\n output_dataset_id = ?,\n output_version_id = ?,\n error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" ? (input.output?.datasetId ?? null) : null,\n input.status === \"succeeded\" ? (input.output?.versionId ?? null) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, PIPELINE_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow\n\n return rowToPipelineRunRecord(updated)\n })()\n }\n\n async startStep(input: StartPipelineStepRunInput): Promise<PipelineStepRunRecord> {\n return this.db.transaction(() => {\n const pipelineRun = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.pipelineRunId) as PipelineRunDatabaseRow | null\n\n if (!pipelineRun) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.pipelineRunId}' not found for project '${input.projectId}'.`\n )\n }\n\n if (pipelineRun.status !== \"running\") {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.pipelineRunId}' for project '${input.projectId}' is already terminal.`\n )\n }\n\n if (pipelineRun.pipeline_id !== input.pipelineId) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' pipeline '${input.pipelineId}' does not match pipeline run '${input.pipelineRunId}' pipeline '${pipelineRun.pipeline_id}'.`\n )\n }\n\n const startedAt = input.startedAt ?? new Date()\n\n try {\n this.db\n .query(\n `\n INSERT INTO pipeline_step_runs (\n project_id,\n id,\n pipeline_run_id,\n pipeline_id,\n step_id,\n dataset_id,\n mode,\n status,\n started_at,\n inputs\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.pipelineRunId,\n input.pipelineId,\n input.stepId,\n input.datasetId,\n input.mode,\n \"running\",\n startedAt.toISOString(),\n serializeDatasetVersionRefs(input.inputs)\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n const row = this.db\n .query(\"SELECT * FROM pipeline_step_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineStepRunDatabaseRow | null\n\n if (!row) {\n throw new PipelineRunError(\n `[SixbSqlite] Failed to load pipeline step run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return rowToPipelineStepRunRecord(row)\n })()\n }\n\n async finishStep(input: FinishPipelineStepRunInput): Promise<PipelineStepRunRecord> {\n assertOptionalNonNegativeInteger(input.rowsWritten, \"rowsWritten\")\n\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM pipeline_step_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineStepRunDatabaseRow | null\n\n if (!existing) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"running\") {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' for project '${input.projectId}' is already terminal.`\n )\n }\n\n if (input.status === \"succeeded\" && input.output.datasetId !== existing.dataset_id) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' output dataset '${input.output.datasetId}' does not match '${existing.dataset_id}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE pipeline_step_runs\n SET\n status = ?,\n finished_at = ?,\n output_version_id = ?,\n rows_written = ?,\n error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" ? input.output.versionId : null,\n input.rowsWritten ?? existing.rows_written ?? null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, PIPELINE_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM pipeline_step_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineStepRunDatabaseRow\n\n return rowToPipelineStepRunRecord(updated)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<PipelineRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as PipelineRunDatabaseRow | null\n\n return row ? rowToPipelineRunRecord(row) : null\n }\n\n async list(input: ListPipelineRunsInput): Promise<ListPipelineRunsResult> {\n if (hasEmptyStatuses(input) || input.pipelineIds?.length === 0) {\n return {\n runs: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.pipelineId) {\n whereClauses.push(\"pipeline_id = ?\")\n args.push(input.pipelineId)\n }\n\n if (input.pipelineIds) {\n whereClauses.push(`pipeline_id IN (${input.pipelineIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.pipelineIds)\n }\n\n appendRunListFilters(whereClauses, args, input, \"COALESCE(started_at, queued_at)\")\n\n const { rows, total, hasMore } = queryRunList<PipelineRunDatabaseRow>({\n db: this.db,\n tableName: \"pipeline_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n runs: rows.map(rowToPipelineRunRecord),\n hasMore,\n total,\n }\n }\n\n async listLatestByPipelineIds(\n input: ListLatestPipelineRunsInput\n ): Promise<ListLatestPipelineRunsResult> {\n const rows = queryLatestRunsByOwnerId<PipelineRunDatabaseRow>({\n db: this.db,\n tableName: \"pipeline_runs\",\n ownerColumn: \"pipeline_id\",\n ownerIds: input.pipelineIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.pipeline_id,\n })\n\n return {\n runs: rows.map(rowToPipelineRunRecord),\n }\n }\n\n async listSteps(input: ListPipelineStepRunsInput): Promise<ListPipelineStepRunsResult> {\n if (hasEmptyStatuses(input)) {\n return {\n steps: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.pipelineRunId) {\n whereClauses.push(\"pipeline_run_id = ?\")\n args.push(input.pipelineRunId)\n }\n\n if (input.pipelineId) {\n whereClauses.push(\"pipeline_id = ?\")\n args.push(input.pipelineId)\n }\n\n if (input.stepId) {\n whereClauses.push(\"step_id = ?\")\n args.push(input.stepId)\n }\n\n if (input.datasetId) {\n whereClauses.push(\"dataset_id = ?\")\n args.push(input.datasetId)\n }\n\n appendRunListFilters(whereClauses, args, input)\n\n const { rows, total, hasMore } = queryRunList<PipelineStepRunDatabaseRow>({\n db: this.db,\n tableName: \"pipeline_step_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n steps: rows.map(rowToPipelineStepRunRecord),\n hasMore,\n total,\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n}\n\nfunction serializeDatasetVersionRefs(refs: readonly DatasetVersionRef[]): string {\n return JSON.stringify(refs)\n}\n\nfunction parseDatasetVersionRefs(value: string): readonly DatasetVersionRef[] {\n return JSON.parse(value) as readonly DatasetVersionRef[]\n}\n\nfunction rowToPipelineRunRecord(row: PipelineRunDatabaseRow): PipelineRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n pipelineId: row.pipeline_id,\n status: row.status,\n queuedAt: new Date(row.queued_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n output:\n row.output_dataset_id && row.output_version_id\n ? {\n datasetId: row.output_dataset_id,\n versionId: row.output_version_id,\n }\n : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, PIPELINE_RUN_FAILURE_CODES),\n }\n}\n\nfunction rowToPipelineStepRunRecord(row: PipelineStepRunDatabaseRow): PipelineStepRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n pipelineRunId: row.pipeline_run_id,\n pipelineId: row.pipeline_id,\n stepId: row.step_id,\n datasetId: row.dataset_id,\n mode: row.mode,\n status: row.status,\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n inputs: parseDatasetVersionRefs(row.inputs),\n output: row.output_version_id\n ? {\n datasetId: row.dataset_id,\n versionId: row.output_version_id,\n }\n : undefined,\n rowsWritten: row.rows_written ?? undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, PIPELINE_RUN_FAILURE_CODES),\n }\n}\n\nfunction assertOptionalNonNegativeInteger(value: number | undefined, fieldName: string): void {\n if (value !== undefined && (!Number.isInteger(value) || value < 0)) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run ${fieldName} must be a non-negative integer.`\n )\n }\n}\n\ninterface PipelineRunDatabaseRow {\n project_id: string\n id: string\n execution_id: string\n pipeline_id: string\n status: PipelineRunRecord[\"status\"]\n queued_at: string\n started_at: string | null\n finished_at: string | null\n output_dataset_id: string | null\n output_version_id: string | null\n error: string | null\n}\n\ninterface PipelineStepRunDatabaseRow {\n project_id: string\n id: string\n pipeline_run_id: string\n pipeline_id: string\n step_id: string\n dataset_id: string\n mode: PipelineStepRunRecord[\"mode\"]\n status: PipelineStepRunRecord[\"status\"]\n started_at: string\n finished_at: string | null\n inputs: string\n output_version_id: string | null\n rows_written: number | null\n error: string | null\n}\n",
60
- "import type { Database } from \"bun:sqlite\"\nimport type { SqliteValue } from \"./run-list-query\"\n\ntype SqliteLatestRunTarget =\n | { readonly tableName: \"pipeline_runs\"; readonly ownerColumn: \"pipeline_id\" }\n | { readonly tableName: \"projection_runs\"; readonly ownerColumn: \"projection_id\" }\n | { readonly tableName: \"sync_runs\"; readonly ownerColumn: \"sync_id\" }\n | { readonly tableName: \"workflow_runs\"; readonly ownerColumn: \"workflow_id\" }\n\nexport function queryLatestRunsByOwnerId<TRow>(\n input: {\n readonly db: Database\n readonly ownerIds: readonly string[]\n readonly projectId: string\n readonly ownerIdFor: (row: TRow) => string\n } & SqliteLatestRunTarget\n): readonly TRow[] {\n const ownerIds = [...new Set(input.ownerIds)]\n if (ownerIds.length === 0) {\n return []\n }\n\n const placeholders = ownerIds.map(() => \"?\").join(\", \")\n const orderColumn =\n input.tableName === \"sync_runs\" ||\n input.tableName === \"pipeline_runs\" ||\n input.tableName === \"projection_runs\"\n ? \"COALESCE(started_at, queued_at)\"\n : \"started_at\"\n const rows = input.db\n .query(\n `\n SELECT *\n FROM (\n SELECT\n *,\n ROW_NUMBER() OVER (\n PARTITION BY ${input.ownerColumn}\n ORDER BY ${orderColumn} DESC, id DESC\n ) AS sixb_latest_rank\n FROM ${input.tableName}\n WHERE project_id = ? AND ${input.ownerColumn} IN (${placeholders})\n )\n WHERE sixb_latest_rank = 1\n `\n )\n .all(input.projectId, ...ownerIds) as (TRow & { sixb_latest_rank: SqliteValue })[]\n\n const latestByOwnerId = new Map(rows.map((row) => [input.ownerIdFor(row), row]))\n\n return ownerIds.flatMap((ownerId) => {\n const row = latestByOwnerId.get(ownerId)\n return row ? [row] : []\n })\n}\n",
61
- "import type { Database } from \"bun:sqlite\"\nimport { randomUUID } from \"node:crypto\"\nimport { serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n advanceProjectionTelemetry,\n assertGenericProgressDoesNotAdvanceTelemetry,\n assertProjectionMissingTarget,\n assertProjectionRunAttempt,\n assertProjectionRunDurableExecution,\n assertProjectionRunListWindow,\n assertProjectionRunNonEmpty,\n assertProjectionRunQueueInput,\n assertProjectionRunRunning,\n assertProjectionRunStartInput,\n canRequeueProjectionRunAfterEnqueueFailure,\n createProjectionRunClaim,\n createProjectionRunRecord,\n failProjectionRunEnqueue,\n immutableDatasetVersionConflict,\n mergeProjectionRunProgress,\n type PersistedProjectionRunRecord,\n planProjectionRunFinish,\n planProjectionRunReclaim,\n projectionRunNotFound,\n publicProjectionRunRecord,\n requireTelemetryProjectionRun,\n restoreProjectionRun,\n type StoredProjectionRunRecord,\n staleProjectionRunExecution,\n} from \"@sixb/core/internal/projection-run-storage-provider\"\nimport type {\n AdvanceProjectionTelemetryCheckpointInput,\n ExecutionStorage,\n FailProjectionRunEnqueueInput,\n FinishProjectionRunInput,\n ListLatestProjectionRunsInput,\n ListLatestProjectionRunsResult,\n ListProjectionRunsInput,\n ListProjectionRunsResult,\n LockProjectionRunForMaterializationInput,\n ProjectionKind,\n ProjectionRunClaim,\n ProjectionRunProgress,\n ProjectionRunRecord,\n ProjectionRunStatus,\n ProjectionRunStorage,\n QueueProjectionRunInput,\n RecordProjectionMissingTargetInput,\n StartOrReclaimProjectionRunInput,\n TelemetryProjectionRunRecord,\n UpdateProjectionRunInput,\n} from \"@sixb/core/storage\"\nimport { PROJECTION_RUN_FAILURE_CODES, ProjectionRunError } from \"@sixb/core/storage\"\nimport { queryLatestRunsByOwnerId } from \"./latest-run-query\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteProjectionRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteProjectionRunStorage implements ProjectionRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteProjectionRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n }\n\n async queue(input: QueueProjectionRunInput): Promise<ProjectionRunRecord> {\n assertProjectionRunQueueInput(input)\n await assertProjectionRunDurableExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n projectionId: input.identity.projectionId,\n datasetId: input.identity.datasetVersion.datasetId,\n datasetVersionId: input.identity.datasetVersion.versionId,\n })\n\n return runImmediateTransaction(this.db, () => {\n this.assertDatasetVersionIsImmutable(input)\n const existing = this.findRow(input.projectId, input.id)\n if (existing) {\n const restored = restoreProjectionRunRow(existing)\n if (!canRequeueProjectionRunAfterEnqueueFailure(restored, input)) {\n throw duplicateProjectionRun(input)\n }\n const queuedAt = input.queuedAt ?? new Date()\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'queued', queued_at = ?, started_at = NULL, finished_at = NULL,\n attempt = 0, execution_token = NULL, next_batch_ordinal = ?, next_row_offset = ?,\n input_exhausted = ?, missing_target_object_type_id = NULL,\n missing_target_object_id = NULL, missing_target_batch_ordinal = NULL,\n missing_target_first_seen_at = NULL, source_rows_read = 0,\n source_rows_skipped = 0, source_changes_read = NULL, error = NULL\n WHERE project_id = ? AND id = ? AND status = 'failed'\n AND json_extract(error, '$.code') = 'queue.enqueue_failed'\n `\n )\n .run(\n queuedAt.toISOString(),\n input.fixedBatchSize === undefined ? null : 0,\n input.fixedBatchSize === undefined ? null : 0,\n input.fixedBatchSize === undefined ? null : 0,\n input.projectId,\n input.id\n )\n if (result.changes !== 1) throw duplicateProjectionRun(input)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n }\n\n const record = createProjectionRunRecord(input)\n try {\n this.insertQueued(record)\n } catch (error) {\n if (isUniqueConstraintError(error)) throw duplicateProjectionRun(input)\n throw error\n }\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async startOrReclaim(input: StartOrReclaimProjectionRunInput): Promise<ProjectionRunClaim> {\n return runImmediateTransaction(this.db, () => {\n assertProjectionRunStartInput(input)\n\n const metadataConflict = this.db\n .query(\n `\n SELECT 1 FROM projection_runs\n WHERE project_id = ? AND id <> ? AND dataset_id = ? AND dataset_version_id = ?\n AND dataset_version_created_at IS NOT NULL\n AND dataset_version_created_at <> ?\n LIMIT 1\n `\n )\n .get(\n input.projectId,\n input.id,\n input.identity.datasetVersion.datasetId,\n input.identity.datasetVersion.versionId,\n input.identity.datasetVersion.createdAt\n )\n if (metadataConflict) {\n throw immutableDatasetVersionConflict(input.identity)\n }\n\n const existing = this.requireRow(input.projectId, input.id)\n const existingRecord = restoreProjectionRunRow(existing)\n const attempt = planProjectionRunReclaim(existingRecord, input).attempt\n\n const executionToken = createFreshExecutionToken(existing.execution_token)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'running', started_at = COALESCE(started_at, ?), finished_at = NULL,\n attempt = ?, execution_token = ?, error = NULL\n WHERE project_id = ? AND id = ?\n AND (\n (status = 'queued' AND execution_token IS NULL)\n OR (status = 'running' AND execution_token = ?)\n )\n `\n )\n .run(\n (input.startedAt ?? new Date()).toISOString(),\n attempt,\n executionToken,\n input.projectId,\n input.id,\n existing.execution_token\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n\n return projectionRunClaim(this.requireRow(input.projectId, input.id))\n })\n }\n\n async failEnqueue(input: FailProjectionRunEnqueueInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = restoreProjectionRunRow(this.requireRow(input.projectId, input.id))\n const failed = failProjectionRunEnqueue(existing, input)\n if (!failed.finishedAt || !failed.error) {\n throw new ProjectionRunError(`[SixbSqlite] Projection run '${input.id}' did not finish.`)\n }\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'failed', finished_at = ?, error = ?\n WHERE project_id = ? AND id = ? AND status = 'queued'\n `\n )\n .run(\n failed.finishedAt.toISOString(),\n serializeSixbFailure(failed.error, PROJECTION_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n if (result.changes !== 1) throw duplicateProjectionRun(input)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async lockForMaterialization(\n input: LockProjectionRunForMaterializationInput\n ): Promise<ProjectionRunRecord> {\n return rowToProjectionRunRecord(this.requireMaterializationExecution(input))\n }\n\n async update(input: UpdateProjectionRunInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existingRow = this.requireMaterializationExecution(input)\n const existing = restoreProjectionRunRow(existingRow)\n assertGenericProgressDoesNotAdvanceTelemetry(existing, input.progress)\n const progress = mergeProjectionRunProgress(existing.progress, input.progress)\n const result = this.updateProgress(existingRow, progress, input.executionToken)\n if (result !== 1) throw staleProjectionRunExecution(input.id)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async finish(input: FinishProjectionRunInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existingRow = this.requireMaterializationExecution(input)\n const plan = planProjectionRunFinish(restoreProjectionRunRow(existingRow), input)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n status = ?,\n finished_at = ?,\n execution_token = NULL,\n source_rows_read = ?,\n source_rows_skipped = ?,\n source_changes_read = ?,\n input_exhausted = ?,\n error = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n `\n )\n .run(\n input.status,\n plan.finishedAt.toISOString(),\n plan.progress.sourceRowsRead,\n plan.progress.sourceRowsSkipped,\n plan.progress.sourceChangesRead ?? null,\n plan.inputExhausted ? 1 : existingRow.input_exhausted,\n plan.error === undefined\n ? null\n : serializeSixbFailure(plan.error, PROJECTION_RUN_FAILURE_CODES),\n input.projectId,\n input.id,\n input.executionToken\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async advanceTelemetryCheckpoint(\n input: AdvanceProjectionTelemetryCheckpointInput\n ): Promise<TelemetryProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = this.requireMaterializationExecution(input)\n const advance = advanceProjectionTelemetry(restoreProjectionRunRow(existing), input)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n next_batch_ordinal = ?,\n next_row_offset = ?,\n input_exhausted = ?,\n source_rows_read = ?,\n source_rows_skipped = ?,\n missing_target_object_type_id = NULL,\n missing_target_object_id = NULL,\n missing_target_batch_ordinal = NULL,\n missing_target_first_seen_at = NULL\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n AND next_batch_ordinal = ? AND input_exhausted = 0\n `\n )\n .run(\n advance.checkpoint.nextBatchOrdinal,\n advance.checkpoint.nextRowOffset,\n advance.checkpoint.inputExhausted ? 1 : 0,\n advance.progress.sourceRowsRead,\n advance.progress.sourceRowsSkipped,\n input.projectId,\n input.id,\n input.executionToken,\n input.batchOrdinal\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToTelemetryProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async recordMissingTarget(\n input: RecordProjectionMissingTargetInput\n ): Promise<TelemetryProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = this.requireMaterializationExecution(input)\n const missingTarget = assertProjectionMissingTarget(\n requireTelemetryProjectionRun(restoreProjectionRunRow(existing)),\n input.missingTarget\n )\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n missing_target_object_type_id = ?,\n missing_target_object_id = ?,\n missing_target_batch_ordinal = ?,\n missing_target_first_seen_at = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n AND next_batch_ordinal = ?\n `\n )\n .run(\n missingTarget.objectTypeId,\n missingTarget.objectId,\n missingTarget.batchOrdinal,\n missingTarget.firstSeenAt.toISOString(),\n input.projectId,\n input.id,\n input.executionToken,\n missingTarget.batchOrdinal\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToTelemetryProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async getById(params: { projectId: string; id: string }): Promise<ProjectionRunRecord | null> {\n const row = this.findRow(params.projectId, params.id)\n return row ? rowToProjectionRunRecord(row) : null\n }\n\n async list(input: ListProjectionRunsInput): Promise<ListProjectionRunsResult> {\n assertProjectionRunNonEmpty(input.projectId, \"projectId\")\n\n if (input.statuses && input.statuses.length === 0) {\n return { runs: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: (string | number)[] = [input.projectId]\n\n if (input.projectionId) {\n whereClauses.push(\"projection_id = ?\")\n args.push(input.projectionId)\n }\n if (input.projectionKind) {\n whereClauses.push(\"projection_kind = ?\")\n args.push(input.projectionKind)\n }\n if (input.datasetId) {\n whereClauses.push(\"dataset_id = ?\")\n args.push(input.datasetId)\n }\n if (input.datasetVersionId) {\n whereClauses.push(\"dataset_version_id = ?\")\n args.push(input.datasetVersionId)\n }\n if (input.objectTypeIds) {\n if (input.objectTypeIds.length === 0) {\n return { runs: [], hasMore: false, total: 0 }\n }\n const placeholders = input.objectTypeIds.map(() => \"?\").join(\", \")\n whereClauses.push(\n `(object_type_id IN (${placeholders})` +\n ` OR (source_object_type_id IN (${placeholders})` +\n ` AND target_object_type_id IN (${placeholders})))`\n )\n args.push(...input.objectTypeIds, ...input.objectTypeIds, ...input.objectTypeIds)\n }\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n if (input.startedAfter) {\n whereClauses.push(\"COALESCE(started_at, queued_at) >= ?\")\n args.push(input.startedAfter.toISOString())\n }\n if (input.startedBefore) {\n whereClauses.push(\"COALESCE(started_at, queued_at) <= ?\")\n args.push(input.startedBefore.toISOString())\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const limit = input.limit\n\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM projection_runs ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT * FROM projection_runs\n ${where}\n ORDER BY COALESCE(started_at, queued_at) ${order}, id ${order}\n `\n const queryArgs = [...args]\n\n if (limit !== undefined) {\n assertProjectionRunListWindow(limit, \"limit\")\n assertProjectionRunListWindow(offset, \"offset\")\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(limit, offset)\n } else if (offset > 0) {\n assertProjectionRunListWindow(offset, \"offset\")\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as DatabaseRow[]\n const runs = rows.map(rowToProjectionRunRecord)\n return { runs, hasMore: offset + runs.length < totalRow.count, total: totalRow.count }\n }\n\n async listLatestByProjectionIds(\n input: ListLatestProjectionRunsInput\n ): Promise<ListLatestProjectionRunsResult> {\n const rows = queryLatestRunsByOwnerId<DatabaseRow>({\n db: this.db,\n tableName: \"projection_runs\",\n ownerColumn: \"projection_id\",\n ownerIds: input.projectionIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.projection_id,\n })\n return { runs: rows.map(rowToProjectionRunRecord) }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private assertDatasetVersionIsImmutable(input: QueueProjectionRunInput): void {\n const conflict = this.db\n .query(\n `\n SELECT 1 FROM projection_runs\n WHERE project_id = ? AND id <> ? AND dataset_id = ? AND dataset_version_id = ?\n AND dataset_version_created_at <> ?\n LIMIT 1\n `\n )\n .get(\n input.projectId,\n input.id,\n input.identity.datasetVersion.datasetId,\n input.identity.datasetVersion.versionId,\n input.identity.datasetVersion.createdAt\n )\n if (conflict) throw immutableDatasetVersionConflict(input.identity)\n }\n\n private insertQueued(record: ProjectionRunRecord): void {\n const checkpoint = record.telemetryCheckpoint\n this.db\n .query(\n `\n INSERT INTO projection_runs (\n project_id, id, execution_id, projection_id, projection_kind,\n materialization_protocol, dataset_id, dataset_version_id,\n dataset_version_created_at, ontology_revision, projection_revision, ownership_hash,\n object_type_id, source_object_type_id, target_object_type_id, status, queued_at,\n started_at, finished_at, attempt, execution_token, fixed_batch_size,\n next_batch_ordinal, next_row_offset, input_exhausted, source_rows_read,\n source_rows_skipped\n ) VALUES (\n ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'queued', ?, NULL, NULL, 0, NULL,\n ?, ?, ?, ?, 0, 0\n )\n `\n )\n .run(\n record.projectId,\n record.id,\n record.executionId,\n record.identity.projectionId,\n record.identity.projectionKind,\n record.identity.protocol,\n record.identity.datasetVersion.datasetId,\n record.identity.datasetVersion.versionId,\n record.identity.datasetVersion.createdAt,\n record.identity.ontologyRevision,\n record.identity.projectionRevision,\n record.identity.ownershipHash,\n \"objectTypeId\" in record.target ? record.target.objectTypeId : null,\n \"sourceObjectTypeId\" in record.target ? record.target.sourceObjectTypeId : null,\n \"sourceObjectTypeId\" in record.target ? record.target.targetObjectTypeId : null,\n record.queuedAt.toISOString(),\n checkpoint?.fixedBatchSize ?? null,\n checkpoint?.nextBatchOrdinal ?? null,\n checkpoint?.nextRowOffset ?? null,\n checkpoint === undefined ? null : checkpoint.inputExhausted ? 1 : 0\n )\n }\n\n private updateProgress(\n existing: DatabaseRow,\n progress: ProjectionRunProgress,\n executionToken: string\n ): number {\n const args: (string | number | null)[] = [\n progress.sourceRowsRead,\n progress.sourceRowsSkipped,\n progress.sourceChangesRead ?? null,\n existing.project_id,\n existing.id,\n executionToken,\n ]\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n source_rows_read = ?,\n source_rows_skipped = ?,\n source_changes_read = ?\n WHERE project_id = ? AND id = ? AND status = 'running'\n AND execution_token = ?\n `\n )\n .run(...args)\n return result.changes\n }\n\n private requireMaterializationExecution(\n input: LockProjectionRunForMaterializationInput\n ): DatabaseRow {\n const row = this.requireRunning(input.projectId, input.id)\n assertProjectionRunAttempt(restoreProjectionRunRow(row), input)\n return row\n }\n\n private requireRunning(projectId: string, id: string): DatabaseRow {\n const row = this.requireRow(projectId, id)\n assertProjectionRunRunning(restoreProjectionRunRow(row))\n return row\n }\n\n private findRow(projectId: string, id: string): DatabaseRow | null {\n return this.db\n .query(\"SELECT * FROM projection_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as DatabaseRow | null\n }\n\n private requireRow(projectId: string, id: string): DatabaseRow {\n assertProjectionRunNonEmpty(projectId, \"projectId\")\n assertProjectionRunNonEmpty(id, \"id\")\n const row = this.findRow(projectId, id)\n if (!row) throw projectionRunNotFound(projectId, id)\n return row\n }\n}\n\nfunction createFreshExecutionToken(previous: string | null): string {\n let token = randomUUID()\n while (token === previous) token = randomUUID()\n return token\n}\n\nfunction rowToProjectionRunRecord(row: DatabaseRow): ProjectionRunRecord {\n return publicProjectionRunRecord(restoreProjectionRunRow(row))\n}\n\nfunction restoreProjectionRunRow(row: DatabaseRow): StoredProjectionRunRecord {\n const persisted: PersistedProjectionRunRecord = {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n projectionId: row.projection_id,\n projectionKind: row.projection_kind,\n protocol: row.materialization_protocol ?? undefined,\n datasetId: row.dataset_id,\n datasetVersionId: row.dataset_version_id,\n datasetVersionCreatedAt: row.dataset_version_created_at ?? undefined,\n ontologyRevision: row.ontology_revision ?? undefined,\n projectionRevision: row.projection_revision ?? undefined,\n ownershipHash: row.ownership_hash ?? undefined,\n objectTypeId: row.object_type_id ?? undefined,\n sourceObjectTypeId: row.source_object_type_id ?? undefined,\n targetObjectTypeId: row.target_object_type_id ?? undefined,\n status: row.status,\n queuedAt: new Date(row.queued_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n attempt: databaseSafeInteger(row.attempt, \"attempt\"),\n executionToken: row.execution_token ?? undefined,\n fixedBatchSize: optionalDatabaseSafeInteger(row.fixed_batch_size, \"fixedBatchSize\"),\n nextBatchOrdinal: optionalDatabaseSafeInteger(row.next_batch_ordinal, \"nextBatchOrdinal\"),\n nextRowOffset: optionalDatabaseSafeInteger(row.next_row_offset, \"nextRowOffset\"),\n inputExhausted: row.input_exhausted === null ? undefined : row.input_exhausted === 1,\n missingTargetObjectTypeId: row.missing_target_object_type_id ?? undefined,\n missingTargetObjectId: row.missing_target_object_id ?? undefined,\n missingTargetBatchOrdinal: optionalDatabaseSafeInteger(\n row.missing_target_batch_ordinal,\n \"missingTargetBatchOrdinal\"\n ),\n missingTargetFirstSeenAt: row.missing_target_first_seen_at\n ? new Date(row.missing_target_first_seen_at)\n : undefined,\n progress: {\n sourceRowsRead: databaseSafeInteger(row.source_rows_read, \"sourceRowsRead\"),\n sourceRowsSkipped: databaseSafeInteger(row.source_rows_skipped, \"sourceRowsSkipped\"),\n ...(row.source_changes_read == null\n ? {}\n : { sourceChangesRead: databaseSafeInteger(row.source_changes_read, \"sourceChangesRead\") }),\n },\n error: row.error ?? undefined,\n }\n return restoreProjectionRun(persisted)\n}\n\nfunction projectionRunClaim(row: DatabaseRow): ProjectionRunClaim {\n return createProjectionRunClaim(restoreProjectionRunRow(row))\n}\n\nfunction rowToTelemetryProjectionRunRecord(row: DatabaseRow): TelemetryProjectionRunRecord {\n return requireTelemetryProjectionRun(rowToProjectionRunRecord(row))\n}\n\nfunction optionalDatabaseSafeInteger(value: number | null, fieldName: string): number | undefined {\n return value === null ? undefined : databaseSafeInteger(value, fieldName)\n}\n\nfunction databaseSafeInteger(value: number, fieldName: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new ProjectionRunError(\n `[SixbSqlite] Projection run persisted ${fieldName} is not a non-negative safe integer.`\n )\n }\n return value\n}\n\nfunction isUniqueConstraintError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"UNIQUE constraint failed\")\n}\n\ninterface DatabaseRow {\n project_id: string\n id: string\n execution_id: string\n projection_id: string\n projection_kind: ProjectionKind\n materialization_protocol: \"replacement\" | \"telemetry\" | null\n dataset_id: string\n dataset_version_id: string\n dataset_version_created_at: string | null\n ontology_revision: string | null\n projection_revision: string | null\n ownership_hash: string | null\n object_type_id: string | null\n source_object_type_id: string | null\n target_object_type_id: string | null\n status: ProjectionRunStatus\n queued_at: string\n started_at: string | null\n finished_at: string | null\n attempt: number\n execution_token: string | null\n fixed_batch_size: number | null\n next_batch_ordinal: number | null\n next_row_offset: number | null\n input_exhausted: 0 | 1 | null\n missing_target_object_type_id: string | null\n missing_target_object_id: string | null\n missing_target_batch_ordinal: number | null\n missing_target_first_seen_at: string | null\n source_rows_read: number\n source_rows_skipped: number\n source_changes_read: number | null\n error: string | null\n}\n\nfunction duplicateProjectionRun(input: { readonly projectId: string; readonly id: string }) {\n return new ProjectionRunError(\n `[SixbSqlite] Projection run '${input.id}' already exists for project '${input.projectId}'.`\n )\n}\n",
60
+ "import type { Database } from \"bun:sqlite\"\nimport type { SqliteValue } from \"./run-list-query\"\n\ntype SqliteLatestRunTarget =\n | { readonly tableName: \"pipeline_runs\"; readonly ownerColumn: \"pipeline_id\" }\n | { readonly tableName: \"projection_runs\"; readonly ownerColumn: \"projection_id\" }\n | { readonly tableName: \"sync_runs\"; readonly ownerColumn: \"sync_id\" }\n | { readonly tableName: \"workflow_runs\"; readonly ownerColumn: \"workflow_id\" }\n\nexport function queryLatestRunsByOwnerId<TRow>(\n input: {\n readonly db: Database\n readonly ownerIds: readonly string[]\n readonly projectId: string\n readonly ownerIdFor: (row: TRow) => string\n /** A status that never counts as the latest run, such as a run made stale by a newer one. */\n readonly excludedStatus?: string\n } & SqliteLatestRunTarget\n): readonly TRow[] {\n const ownerIds = [...new Set(input.ownerIds)]\n if (ownerIds.length === 0) {\n return []\n }\n\n const placeholders = ownerIds.map(() => \"?\").join(\", \")\n const statusFilter = input.excludedStatus === undefined ? \"\" : \" AND status <> ?\"\n const statusArgs = input.excludedStatus === undefined ? [] : [input.excludedStatus]\n const orderColumn =\n input.tableName === \"sync_runs\" ||\n input.tableName === \"pipeline_runs\" ||\n input.tableName === \"projection_runs\"\n ? \"COALESCE(started_at, queued_at)\"\n : \"started_at\"\n const rows = input.db\n .query(\n `\n SELECT *\n FROM (\n SELECT\n *,\n ROW_NUMBER() OVER (\n PARTITION BY ${input.ownerColumn}\n ORDER BY ${orderColumn} DESC, id DESC\n ) AS sixb_latest_rank\n FROM ${input.tableName}\n WHERE project_id = ? AND ${input.ownerColumn} IN (${placeholders})${statusFilter}\n )\n WHERE sixb_latest_rank = 1\n `\n )\n .all(input.projectId, ...ownerIds, ...statusArgs) as (TRow & {\n sixb_latest_rank: SqliteValue\n })[]\n\n const latestByOwnerId = new Map(rows.map((row) => [input.ownerIdFor(row), row]))\n\n return ownerIds.flatMap((ownerId) => {\n const row = latestByOwnerId.get(ownerId)\n return row ? [row] : []\n })\n}\n",
61
+ "import type { Database } from \"bun:sqlite\"\nimport { randomUUID } from \"node:crypto\"\nimport { serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n advanceProjectionTelemetry,\n assertGenericProgressDoesNotAdvanceTelemetry,\n assertProjectionMissingTarget,\n assertProjectionRunAttempt,\n assertProjectionRunDurableExecution,\n assertProjectionRunListWindow,\n assertProjectionRunNonEmpty,\n assertProjectionRunQueueInput,\n assertProjectionRunRunning,\n assertProjectionRunStartInput,\n canRequeueProjectionRunAfterEnqueueFailure,\n createProjectionRunClaim,\n createProjectionRunRecord,\n failProjectionRunEnqueue,\n immutableDatasetVersionConflict,\n mergeProjectionRunProgress,\n type PersistedProjectionRunRecord,\n parseProjectionAttemptFailure,\n planProjectionRunFinish,\n planProjectionRunReclaim,\n projectionRunNotFound,\n publicProjectionRunRecord,\n requireTelemetryProjectionRun,\n restoreProjectionRun,\n type StoredProjectionRunRecord,\n SUPERSEDING_PROJECTION_RUN_STATUSES,\n staleProjectionRunExecution,\n} from \"@sixb/core/internal/projection-run-storage-provider\"\nimport type {\n AdvanceProjectionTelemetryCheckpointInput,\n ExecutionStorage,\n FailProjectionRunEnqueueInput,\n FindSupersedingProjectionRunInput,\n FinishProjectionRunInput,\n ListLatestProjectionRunsInput,\n ListLatestProjectionRunsResult,\n ListProjectionRunsInput,\n ListProjectionRunsResult,\n LockProjectionRunForMaterializationInput,\n ProjectionKind,\n ProjectionRunClaim,\n ProjectionRunProgress,\n ProjectionRunRecord,\n ProjectionRunStatus,\n ProjectionRunStorage,\n QueueProjectionRunInput,\n RecordProjectionAttemptFailureInput,\n RecordProjectionMissingTargetInput,\n StartOrReclaimProjectionRunInput,\n TelemetryProjectionRunRecord,\n UpdateProjectionRunInput,\n} from \"@sixb/core/storage\"\nimport { PROJECTION_RUN_FAILURE_CODES, ProjectionRunError } from \"@sixb/core/storage\"\nimport { queryLatestRunsByOwnerId } from \"./latest-run-query\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteProjectionRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteProjectionRunStorage implements ProjectionRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteProjectionRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n }\n\n async queue(input: QueueProjectionRunInput): Promise<ProjectionRunRecord> {\n assertProjectionRunQueueInput(input)\n await assertProjectionRunDurableExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n projectionId: input.identity.projectionId,\n datasetId: input.identity.datasetVersion.datasetId,\n datasetVersionId: input.identity.datasetVersion.versionId,\n })\n\n return runImmediateTransaction(this.db, () => {\n this.assertDatasetVersionIsImmutable(input)\n const existing = this.findRow(input.projectId, input.id)\n if (existing) {\n const restored = restoreProjectionRunRow(existing)\n if (!canRequeueProjectionRunAfterEnqueueFailure(restored, input)) {\n throw duplicateProjectionRun(input)\n }\n const queuedAt = input.queuedAt ?? new Date()\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'queued', queued_at = ?, started_at = NULL, finished_at = NULL,\n attempt = 0, execution_token = NULL, next_batch_ordinal = ?, next_row_offset = ?,\n input_exhausted = ?, missing_target_object_type_id = NULL,\n missing_target_object_id = NULL, missing_target_batch_ordinal = NULL,\n missing_target_first_seen_at = NULL, source_rows_read = 0,\n source_rows_skipped = 0, source_changes_read = NULL, error = NULL\n WHERE project_id = ? AND id = ? AND status = 'failed'\n AND json_extract(error, '$.code') = 'queue.enqueue_failed'\n `\n )\n .run(\n queuedAt.toISOString(),\n input.fixedBatchSize === undefined ? null : 0,\n input.fixedBatchSize === undefined ? null : 0,\n input.fixedBatchSize === undefined ? null : 0,\n input.projectId,\n input.id\n )\n if (result.changes !== 1) throw duplicateProjectionRun(input)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n }\n\n const record = createProjectionRunRecord(input)\n try {\n this.insertQueued(record)\n } catch (error) {\n if (isUniqueConstraintError(error)) throw duplicateProjectionRun(input)\n throw error\n }\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async startOrReclaim(input: StartOrReclaimProjectionRunInput): Promise<ProjectionRunClaim> {\n return runImmediateTransaction(this.db, () => {\n assertProjectionRunStartInput(input)\n\n const metadataConflict = this.db\n .query(\n `\n SELECT 1 FROM projection_runs\n WHERE project_id = ? AND id <> ? AND dataset_id = ? AND dataset_version_id = ?\n AND dataset_version_created_at IS NOT NULL\n AND dataset_version_created_at <> ?\n LIMIT 1\n `\n )\n .get(\n input.projectId,\n input.id,\n input.identity.datasetVersion.datasetId,\n input.identity.datasetVersion.versionId,\n input.identity.datasetVersion.createdAt\n )\n if (metadataConflict) {\n throw immutableDatasetVersionConflict(input.identity)\n }\n\n const existing = this.requireRow(input.projectId, input.id)\n const existingRecord = restoreProjectionRunRow(existing)\n const attempt = planProjectionRunReclaim(existingRecord, input).attempt\n\n const executionToken = createFreshExecutionToken(existing.execution_token)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'running', started_at = COALESCE(started_at, ?), finished_at = NULL,\n attempt = ?, execution_token = ?\n WHERE project_id = ? AND id = ?\n AND (\n (status = 'queued' AND execution_token IS NULL)\n OR (status = 'running' AND execution_token = ?)\n )\n `\n )\n .run(\n (input.startedAt ?? new Date()).toISOString(),\n attempt,\n executionToken,\n input.projectId,\n input.id,\n existing.execution_token\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n\n return projectionRunClaim(this.requireRow(input.projectId, input.id))\n })\n }\n\n async failEnqueue(input: FailProjectionRunEnqueueInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = restoreProjectionRunRow(this.requireRow(input.projectId, input.id))\n const failed = failProjectionRunEnqueue(existing, input)\n if (!failed.finishedAt || !failed.error) {\n throw new ProjectionRunError(`[SixbSqlite] Projection run '${input.id}' did not finish.`)\n }\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'failed', finished_at = ?, error = ?\n WHERE project_id = ? AND id = ? AND status = 'queued'\n `\n )\n .run(\n failed.finishedAt.toISOString(),\n serializeSixbFailure(failed.error, PROJECTION_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n if (result.changes !== 1) throw duplicateProjectionRun(input)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async lockForMaterialization(\n input: LockProjectionRunForMaterializationInput\n ): Promise<ProjectionRunRecord> {\n return rowToProjectionRunRecord(this.requireMaterializationExecution(input))\n }\n\n async update(input: UpdateProjectionRunInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existingRow = this.requireMaterializationExecution(input)\n const existing = restoreProjectionRunRow(existingRow)\n assertGenericProgressDoesNotAdvanceTelemetry(existing, input.progress)\n const progress = mergeProjectionRunProgress(existing.progress, input.progress)\n const result = this.updateProgress(existingRow, progress, input.executionToken)\n if (result !== 1) throw staleProjectionRunExecution(input.id)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async recordAttemptFailure(\n input: RecordProjectionAttemptFailureInput\n ): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existingRow = this.requireMaterializationExecution(input)\n const error = parseProjectionAttemptFailure(restoreProjectionRunRow(existingRow), input.error)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET error = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n `\n )\n .run(\n serializeSixbFailure(error, PROJECTION_RUN_FAILURE_CODES),\n input.projectId,\n input.id,\n input.executionToken\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async finish(input: FinishProjectionRunInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existingRow = this.requireMaterializationExecution(input)\n const plan = planProjectionRunFinish(restoreProjectionRunRow(existingRow), input)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n status = ?,\n finished_at = ?,\n execution_token = NULL,\n source_rows_read = ?,\n source_rows_skipped = ?,\n source_changes_read = ?,\n input_exhausted = ?,\n error = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n `\n )\n .run(\n input.status,\n plan.finishedAt.toISOString(),\n plan.progress.sourceRowsRead,\n plan.progress.sourceRowsSkipped,\n plan.progress.sourceChangesRead ?? null,\n plan.inputExhausted ? 1 : existingRow.input_exhausted,\n plan.error === undefined\n ? null\n : serializeSixbFailure(plan.error, PROJECTION_RUN_FAILURE_CODES),\n input.projectId,\n input.id,\n input.executionToken\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async advanceTelemetryCheckpoint(\n input: AdvanceProjectionTelemetryCheckpointInput\n ): Promise<TelemetryProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = this.requireMaterializationExecution(input)\n const advance = advanceProjectionTelemetry(restoreProjectionRunRow(existing), input)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n next_batch_ordinal = ?,\n next_row_offset = ?,\n input_exhausted = ?,\n source_rows_read = ?,\n source_rows_skipped = ?,\n missing_target_object_type_id = NULL,\n missing_target_object_id = NULL,\n missing_target_batch_ordinal = NULL,\n missing_target_first_seen_at = NULL\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n AND next_batch_ordinal = ? AND input_exhausted = 0\n `\n )\n .run(\n advance.checkpoint.nextBatchOrdinal,\n advance.checkpoint.nextRowOffset,\n advance.checkpoint.inputExhausted ? 1 : 0,\n advance.progress.sourceRowsRead,\n advance.progress.sourceRowsSkipped,\n input.projectId,\n input.id,\n input.executionToken,\n input.batchOrdinal\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToTelemetryProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async recordMissingTarget(\n input: RecordProjectionMissingTargetInput\n ): Promise<TelemetryProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = this.requireMaterializationExecution(input)\n const missingTarget = assertProjectionMissingTarget(\n requireTelemetryProjectionRun(restoreProjectionRunRow(existing)),\n input.missingTarget\n )\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n missing_target_object_type_id = ?,\n missing_target_object_id = ?,\n missing_target_batch_ordinal = ?,\n missing_target_first_seen_at = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n AND next_batch_ordinal = ?\n `\n )\n .run(\n missingTarget.objectTypeId,\n missingTarget.objectId,\n missingTarget.batchOrdinal,\n missingTarget.firstSeenAt.toISOString(),\n input.projectId,\n input.id,\n input.executionToken,\n missingTarget.batchOrdinal\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToTelemetryProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async getById(params: { projectId: string; id: string }): Promise<ProjectionRunRecord | null> {\n const row = this.findRow(params.projectId, params.id)\n return row ? rowToProjectionRunRecord(row) : null\n }\n\n async list(input: ListProjectionRunsInput): Promise<ListProjectionRunsResult> {\n assertProjectionRunNonEmpty(input.projectId, \"projectId\")\n\n if (input.statuses && input.statuses.length === 0) {\n return { runs: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: (string | number)[] = [input.projectId]\n\n if (input.projectionId) {\n whereClauses.push(\"projection_id = ?\")\n args.push(input.projectionId)\n }\n if (input.projectionKind) {\n whereClauses.push(\"projection_kind = ?\")\n args.push(input.projectionKind)\n }\n if (input.datasetId) {\n whereClauses.push(\"dataset_id = ?\")\n args.push(input.datasetId)\n }\n if (input.datasetVersionId) {\n whereClauses.push(\"dataset_version_id = ?\")\n args.push(input.datasetVersionId)\n }\n if (input.objectTypeIds) {\n if (input.objectTypeIds.length === 0) {\n return { runs: [], hasMore: false, total: 0 }\n }\n const placeholders = input.objectTypeIds.map(() => \"?\").join(\", \")\n whereClauses.push(\n `(object_type_id IN (${placeholders})` +\n ` OR (source_object_type_id IN (${placeholders})` +\n ` AND target_object_type_id IN (${placeholders})))`\n )\n args.push(...input.objectTypeIds, ...input.objectTypeIds, ...input.objectTypeIds)\n }\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n if (input.startedAfter) {\n whereClauses.push(\"COALESCE(started_at, queued_at) >= ?\")\n args.push(input.startedAfter.toISOString())\n }\n if (input.startedBefore) {\n whereClauses.push(\"COALESCE(started_at, queued_at) <= ?\")\n args.push(input.startedBefore.toISOString())\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const limit = input.limit\n\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM projection_runs ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT * FROM projection_runs\n ${where}\n ORDER BY COALESCE(started_at, queued_at) ${order}, id ${order}\n `\n const queryArgs = [...args]\n\n if (limit !== undefined) {\n assertProjectionRunListWindow(limit, \"limit\")\n assertProjectionRunListWindow(offset, \"offset\")\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(limit, offset)\n } else if (offset > 0) {\n assertProjectionRunListWindow(offset, \"offset\")\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as DatabaseRow[]\n const runs = rows.map(rowToProjectionRunRecord)\n return { runs, hasMore: offset + runs.length < totalRow.count, total: totalRow.count }\n }\n\n async findSupersedingRun(\n input: FindSupersedingProjectionRunInput\n ): Promise<ProjectionRunRecord | null> {\n const run = this.requireRow(input.projectId, input.id)\n if (run.materialization_protocol !== \"replacement\") return null\n // SQLite compares TEXT with the binary collation, under which canonical UTC ISO timestamps\n // order chronologically.\n const statuses = SUPERSEDING_PROJECTION_RUN_STATUSES\n const newer = this.db\n .query(\n `\n SELECT * FROM projection_runs\n WHERE project_id = ? AND projection_id = ? AND materialization_protocol = 'replacement'\n AND status IN (${statuses.map(() => \"?\").join(\", \")})\n AND dataset_version_created_at > ?\n ORDER BY dataset_version_created_at DESC, id DESC\n LIMIT 1\n `\n )\n .get(\n input.projectId,\n run.projection_id,\n ...statuses,\n run.dataset_version_created_at\n ) as DatabaseRow | null\n return newer ? rowToProjectionRunRecord(newer) : null\n }\n\n async listLatestByProjectionIds(\n input: ListLatestProjectionRunsInput\n ): Promise<ListLatestProjectionRunsResult> {\n const rows = queryLatestRunsByOwnerId<DatabaseRow>({\n db: this.db,\n tableName: \"projection_runs\",\n ownerColumn: \"projection_id\",\n ownerIds: input.projectionIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.projection_id,\n excludedStatus: \"superseded\",\n })\n return { runs: rows.map(rowToProjectionRunRecord) }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private assertDatasetVersionIsImmutable(input: QueueProjectionRunInput): void {\n const conflict = this.db\n .query(\n `\n SELECT 1 FROM projection_runs\n WHERE project_id = ? AND id <> ? AND dataset_id = ? AND dataset_version_id = ?\n AND dataset_version_created_at <> ?\n LIMIT 1\n `\n )\n .get(\n input.projectId,\n input.id,\n input.identity.datasetVersion.datasetId,\n input.identity.datasetVersion.versionId,\n input.identity.datasetVersion.createdAt\n )\n if (conflict) throw immutableDatasetVersionConflict(input.identity)\n }\n\n private insertQueued(record: ProjectionRunRecord): void {\n const checkpoint = record.telemetryCheckpoint\n this.db\n .query(\n `\n INSERT INTO projection_runs (\n project_id, id, execution_id, projection_id, projection_kind,\n materialization_protocol, dataset_id, dataset_version_id,\n dataset_version_created_at, ontology_revision, projection_revision, ownership_hash,\n object_type_id, source_object_type_id, target_object_type_id, status, queued_at,\n started_at, finished_at, attempt, execution_token, fixed_batch_size,\n next_batch_ordinal, next_row_offset, input_exhausted, source_rows_read,\n source_rows_skipped\n ) VALUES (\n ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'queued', ?, NULL, NULL, 0, NULL,\n ?, ?, ?, ?, 0, 0\n )\n `\n )\n .run(\n record.projectId,\n record.id,\n record.executionId,\n record.identity.projectionId,\n record.identity.projectionKind,\n record.identity.protocol,\n record.identity.datasetVersion.datasetId,\n record.identity.datasetVersion.versionId,\n record.identity.datasetVersion.createdAt,\n record.identity.ontologyRevision,\n record.identity.projectionRevision,\n record.identity.ownershipHash,\n \"objectTypeId\" in record.target ? record.target.objectTypeId : null,\n \"sourceObjectTypeId\" in record.target ? record.target.sourceObjectTypeId : null,\n \"sourceObjectTypeId\" in record.target ? record.target.targetObjectTypeId : null,\n record.queuedAt.toISOString(),\n checkpoint?.fixedBatchSize ?? null,\n checkpoint?.nextBatchOrdinal ?? null,\n checkpoint?.nextRowOffset ?? null,\n checkpoint === undefined ? null : checkpoint.inputExhausted ? 1 : 0\n )\n }\n\n private updateProgress(\n existing: DatabaseRow,\n progress: ProjectionRunProgress,\n executionToken: string\n ): number {\n const args: (string | number | null)[] = [\n progress.sourceRowsRead,\n progress.sourceRowsSkipped,\n progress.sourceChangesRead ?? null,\n existing.project_id,\n existing.id,\n executionToken,\n ]\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n source_rows_read = ?,\n source_rows_skipped = ?,\n source_changes_read = ?\n WHERE project_id = ? AND id = ? AND status = 'running'\n AND execution_token = ?\n `\n )\n .run(...args)\n return result.changes\n }\n\n private requireMaterializationExecution(\n input: LockProjectionRunForMaterializationInput\n ): DatabaseRow {\n const row = this.requireRunning(input.projectId, input.id)\n assertProjectionRunAttempt(restoreProjectionRunRow(row), input)\n return row\n }\n\n private requireRunning(projectId: string, id: string): DatabaseRow {\n const row = this.requireRow(projectId, id)\n assertProjectionRunRunning(restoreProjectionRunRow(row))\n return row\n }\n\n private findRow(projectId: string, id: string): DatabaseRow | null {\n return this.db\n .query(\"SELECT * FROM projection_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as DatabaseRow | null\n }\n\n private requireRow(projectId: string, id: string): DatabaseRow {\n assertProjectionRunNonEmpty(projectId, \"projectId\")\n assertProjectionRunNonEmpty(id, \"id\")\n const row = this.findRow(projectId, id)\n if (!row) throw projectionRunNotFound(projectId, id)\n return row\n }\n}\n\nfunction createFreshExecutionToken(previous: string | null): string {\n let token = randomUUID()\n while (token === previous) token = randomUUID()\n return token\n}\n\nfunction rowToProjectionRunRecord(row: DatabaseRow): ProjectionRunRecord {\n return publicProjectionRunRecord(restoreProjectionRunRow(row))\n}\n\nfunction restoreProjectionRunRow(row: DatabaseRow): StoredProjectionRunRecord {\n const persisted: PersistedProjectionRunRecord = {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n projectionId: row.projection_id,\n projectionKind: row.projection_kind,\n protocol: row.materialization_protocol ?? undefined,\n datasetId: row.dataset_id,\n datasetVersionId: row.dataset_version_id,\n datasetVersionCreatedAt: row.dataset_version_created_at ?? undefined,\n ontologyRevision: row.ontology_revision ?? undefined,\n projectionRevision: row.projection_revision ?? undefined,\n ownershipHash: row.ownership_hash ?? undefined,\n objectTypeId: row.object_type_id ?? undefined,\n sourceObjectTypeId: row.source_object_type_id ?? undefined,\n targetObjectTypeId: row.target_object_type_id ?? undefined,\n status: row.status,\n queuedAt: new Date(row.queued_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n attempt: databaseSafeInteger(row.attempt, \"attempt\"),\n executionToken: row.execution_token ?? undefined,\n fixedBatchSize: optionalDatabaseSafeInteger(row.fixed_batch_size, \"fixedBatchSize\"),\n nextBatchOrdinal: optionalDatabaseSafeInteger(row.next_batch_ordinal, \"nextBatchOrdinal\"),\n nextRowOffset: optionalDatabaseSafeInteger(row.next_row_offset, \"nextRowOffset\"),\n inputExhausted: row.input_exhausted === null ? undefined : row.input_exhausted === 1,\n missingTargetObjectTypeId: row.missing_target_object_type_id ?? undefined,\n missingTargetObjectId: row.missing_target_object_id ?? undefined,\n missingTargetBatchOrdinal: optionalDatabaseSafeInteger(\n row.missing_target_batch_ordinal,\n \"missingTargetBatchOrdinal\"\n ),\n missingTargetFirstSeenAt: row.missing_target_first_seen_at\n ? new Date(row.missing_target_first_seen_at)\n : undefined,\n progress: {\n sourceRowsRead: databaseSafeInteger(row.source_rows_read, \"sourceRowsRead\"),\n sourceRowsSkipped: databaseSafeInteger(row.source_rows_skipped, \"sourceRowsSkipped\"),\n ...(row.source_changes_read == null\n ? {}\n : { sourceChangesRead: databaseSafeInteger(row.source_changes_read, \"sourceChangesRead\") }),\n },\n error: row.error ?? undefined,\n }\n return restoreProjectionRun(persisted)\n}\n\nfunction projectionRunClaim(row: DatabaseRow): ProjectionRunClaim {\n return createProjectionRunClaim(restoreProjectionRunRow(row))\n}\n\nfunction rowToTelemetryProjectionRunRecord(row: DatabaseRow): TelemetryProjectionRunRecord {\n return requireTelemetryProjectionRun(rowToProjectionRunRecord(row))\n}\n\nfunction optionalDatabaseSafeInteger(value: number | null, fieldName: string): number | undefined {\n return value === null ? undefined : databaseSafeInteger(value, fieldName)\n}\n\nfunction databaseSafeInteger(value: number, fieldName: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new ProjectionRunError(\n `[SixbSqlite] Projection run persisted ${fieldName} is not a non-negative safe integer.`\n )\n }\n return value\n}\n\nfunction isUniqueConstraintError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"UNIQUE constraint failed\")\n}\n\ninterface DatabaseRow {\n project_id: string\n id: string\n execution_id: string\n projection_id: string\n projection_kind: ProjectionKind\n materialization_protocol: \"replacement\" | \"telemetry\" | null\n dataset_id: string\n dataset_version_id: string\n dataset_version_created_at: string | null\n ontology_revision: string | null\n projection_revision: string | null\n ownership_hash: string | null\n object_type_id: string | null\n source_object_type_id: string | null\n target_object_type_id: string | null\n status: ProjectionRunStatus\n queued_at: string\n started_at: string | null\n finished_at: string | null\n attempt: number\n execution_token: string | null\n fixed_batch_size: number | null\n next_batch_ordinal: number | null\n next_row_offset: number | null\n input_exhausted: 0 | 1 | null\n missing_target_object_type_id: string | null\n missing_target_object_id: string | null\n missing_target_batch_ordinal: number | null\n missing_target_first_seen_at: string | null\n source_rows_read: number\n source_rows_skipped: number\n source_changes_read: number | null\n error: string | null\n}\n\nfunction duplicateProjectionRun(input: { readonly projectId: string; readonly id: string }) {\n return new ProjectionRunError(\n `[SixbSqlite] Projection run '${input.id}' already exists for project '${input.projectId}'.`\n )\n}\n",
62
62
  "import type { Database } from \"bun:sqlite\"\nimport type { RuleEventSubject } from \"@sixb/core\"\nimport type {\n ListActiveRuleStatesInput,\n ListActiveRuleStatesResult,\n ListRuleStatesReconciliationPageInput,\n ListRuleStatesReconciliationPageResult,\n RuleStateRecord,\n RuleStateTransitionEvent,\n RulesStorage,\n StoredRuleResolvedEvent,\n StoredRuleTriggeredEvent,\n} from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteRulesStorageOptions {\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteRulesStorage implements RulesStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteRulesStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n }\n\n async getActive(params: {\n projectId: string\n ruleId: string\n subject: RuleEventSubject\n }): Promise<RuleStateRecord | null> {\n const row = this.db\n .query(\n `\n SELECT\n project_id,\n rule_id,\n subject_kind,\n object_type_id,\n primary_id,\n triggered_at\n FROM rule_states\n WHERE project_id = ?\n AND rule_id = ?\n AND subject_kind = ?\n AND object_type_id = ?\n AND primary_id = ?\n `\n )\n .get(\n params.projectId,\n params.ruleId,\n params.subject.kind,\n params.subject.objectTypeId,\n params.subject.primaryId\n ) as SqliteRuleStateRow | null\n\n return row ? rowToRuleStateRecord(row) : null\n }\n\n async getActiveBatch(params: {\n projectId: string\n items: readonly {\n readonly ruleId: string\n readonly subject: RuleEventSubject\n }[]\n }): Promise<readonly RuleStateRecord[]> {\n if (params.items.length === 0) return []\n const rows = this.db\n .query(\n `\n WITH requested AS (\n SELECT\n json_extract(value, '$.ruleId') AS rule_id,\n json_extract(value, '$.subject.kind') AS subject_kind,\n json_extract(value, '$.subject.objectTypeId') AS object_type_id,\n json_extract(value, '$.subject.primaryId') AS primary_id\n FROM json_each(?)\n )\n SELECT states.project_id, states.rule_id, states.subject_kind,\n states.object_type_id, states.primary_id, states.triggered_at\n FROM rule_states AS states\n JOIN requested USING (rule_id, subject_kind, object_type_id, primary_id)\n WHERE states.project_id = ?\n `\n )\n .all(JSON.stringify(params.items), params.projectId) as SqliteRuleStateRow[]\n return rows.map(rowToRuleStateRecord)\n }\n\n async listActive(input: ListActiveRuleStatesInput): Promise<ListActiveRuleStatesResult> {\n if (input.objectTypeIds?.length === 0) {\n return { states: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: (string | number)[] = [input.projectId]\n\n if (input.ruleId) {\n whereClauses.push(\"rule_id = ?\")\n args.push(input.ruleId)\n }\n\n if (input.objectTypeId) {\n whereClauses.push(\"object_type_id = ?\")\n args.push(input.objectTypeId)\n }\n\n if (input.objectTypeIds) {\n whereClauses.push(`object_type_id IN (${input.objectTypeIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.objectTypeIds)\n }\n\n if (input.primaryId) {\n whereClauses.push(\"primary_id = ?\")\n args.push(input.primaryId)\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const limit = input.limit\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM rule_states ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT\n project_id,\n rule_id,\n subject_kind,\n object_type_id,\n primary_id,\n triggered_at\n FROM rule_states\n ${where}\n ORDER BY triggered_at ${order}, rule_id ${order}, object_type_id ${order}, primary_id ${order}\n `\n const queryArgs = [...args]\n\n if (limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as SqliteRuleStateRow[]\n const states = rows.map(rowToRuleStateRecord)\n\n return {\n states,\n hasMore: offset + states.length < totalRow.count,\n total: totalRow.count,\n }\n }\n\n async listReconciliationPage(\n input: ListRuleStatesReconciliationPageInput\n ): Promise<ListRuleStatesReconciliationPageResult> {\n assertPositiveLimit(input.limit)\n const rows = this.db\n .query(\n `\n SELECT project_id, rule_id, subject_kind, object_type_id, primary_id, triggered_at\n FROM rule_states\n WHERE project_id = ? AND subject_kind = 'object'\n AND (\n ? IS NULL OR\n (rule_id, object_type_id, primary_id) > (?, ?, ?)\n )\n ORDER BY rule_id ASC, object_type_id ASC, primary_id ASC\n LIMIT ?\n `\n )\n .all(\n input.projectId,\n input.after?.ruleId ?? null,\n input.after?.ruleId ?? null,\n input.after?.objectTypeId ?? null,\n input.after?.primaryId ?? null,\n input.limit + 1\n ) as SqliteRuleStateRow[]\n return reconciliationPage(rows, input.limit)\n }\n\n async applyTriggered(event: StoredRuleTriggeredEvent): Promise<void> {\n this.db\n .query(\n `\n INSERT INTO rule_states (\n project_id,\n rule_id,\n subject_kind,\n object_type_id,\n primary_id,\n triggered_at\n ) VALUES (?, ?, ?, ?, ?, ?)\n ON CONFLICT(project_id, rule_id, subject_kind, object_type_id, primary_id)\n DO UPDATE SET triggered_at = excluded.triggered_at\n `\n )\n .run(\n event.projectId,\n event.payload.ruleId,\n event.payload.subject.kind,\n event.payload.subject.objectTypeId,\n event.payload.subject.primaryId,\n event.payload.triggeredAt\n )\n }\n\n async applyResolved(event: StoredRuleResolvedEvent): Promise<void> {\n this.db\n .query(\n `\n DELETE FROM rule_states\n WHERE project_id = ?\n AND rule_id = ?\n AND subject_kind = ?\n AND object_type_id = ?\n AND primary_id = ?\n `\n )\n .run(\n event.projectId,\n event.payload.ruleId,\n event.payload.subject.kind,\n event.payload.subject.objectTypeId,\n event.payload.subject.primaryId\n )\n }\n\n async applyTransitions(events: readonly RuleStateTransitionEvent[]): Promise<void> {\n if (events.length === 0) return\n const rows = events.map(transitionRow)\n\n runImmediateTransaction(this.db, () => {\n this.db\n .query(\n `\n WITH transitions AS (\n SELECT\n json_extract(value, '$.type') AS type,\n json_extract(value, '$.projectId') AS project_id,\n json_extract(value, '$.ruleId') AS rule_id,\n json_extract(value, '$.subjectKind') AS subject_kind,\n json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id,\n json_extract(value, '$.transitionAt') AS transition_at\n FROM json_each(?)\n )\n INSERT INTO rule_states (\n project_id, rule_id, subject_kind, object_type_id, primary_id, triggered_at\n )\n SELECT project_id, rule_id, subject_kind, object_type_id, primary_id, transition_at\n FROM transitions\n WHERE type = 'rule.triggered'\n ON CONFLICT(project_id, rule_id, subject_kind, object_type_id, primary_id)\n DO UPDATE SET triggered_at = excluded.triggered_at\n `\n )\n .run(JSON.stringify(rows))\n\n this.db\n .query(\n `\n WITH transitions AS (\n SELECT\n json_extract(value, '$.type') AS type,\n json_extract(value, '$.projectId') AS project_id,\n json_extract(value, '$.ruleId') AS rule_id,\n json_extract(value, '$.subjectKind') AS subject_kind,\n json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id\n FROM json_each(?)\n )\n DELETE FROM rule_states\n WHERE EXISTS (\n SELECT 1 FROM transitions\n WHERE transitions.type = 'rule.resolved'\n AND transitions.project_id = rule_states.project_id\n AND transitions.rule_id = rule_states.rule_id\n AND transitions.subject_kind = rule_states.subject_kind\n AND transitions.object_type_id = rule_states.object_type_id\n AND transitions.primary_id = rule_states.primary_id\n )\n `\n )\n .run(JSON.stringify(rows))\n })\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n}\n\nfunction transitionRow(event: RuleStateTransitionEvent) {\n return {\n type: event.type,\n projectId: event.projectId,\n ruleId: event.payload.ruleId,\n subjectKind: event.payload.subject.kind,\n objectTypeId: event.payload.subject.objectTypeId,\n primaryId: event.payload.subject.primaryId,\n transitionAt:\n event.type === \"rule.triggered\" ? event.payload.triggeredAt : event.payload.resolvedAt,\n }\n}\n\nfunction reconciliationPage(\n rows: readonly SqliteRuleStateRow[],\n limit: number\n): ListRuleStatesReconciliationPageResult {\n const hasMore = rows.length > limit\n const states = rows.slice(0, limit).map(rowToRuleStateRecord)\n const last = states.at(-1)\n return {\n states,\n ...(hasMore && last\n ? {\n next: {\n ruleId: last.ruleId,\n objectTypeId: last.subject.objectTypeId,\n primaryId: last.subject.primaryId,\n },\n }\n : {}),\n }\n}\n\nfunction assertPositiveLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error(\"Rules reconciliation page limit must be a positive safe integer.\")\n }\n}\n\ninterface SqliteRuleStateRow {\n readonly project_id: string\n readonly rule_id: string\n readonly subject_kind: RuleEventSubject[\"kind\"]\n readonly object_type_id: string\n readonly primary_id: string\n readonly triggered_at: string\n}\n\nfunction rowToRuleStateRecord(row: SqliteRuleStateRow): RuleStateRecord {\n return {\n projectId: row.project_id,\n ruleId: row.rule_id,\n subject: {\n kind: row.subject_kind,\n objectTypeId: row.object_type_id,\n primaryId: row.primary_id,\n },\n triggeredAt: row.triggered_at,\n }\n}\n",
63
63
  "import type { Database } from \"bun:sqlite\"\nimport {\n normalizeGetShareGrantByIdInput,\n normalizeListShareGrantsInput,\n normalizeRevokeShareGrantInput,\n normalizeShareGrantCreate,\n parseShareGrantRecord,\n} from \"@sixb/core/internal/share-grant-storage-provider\"\nimport type {\n CreateShareGrantInput,\n GetShareGrantByIdInput,\n ListShareGrantsInput,\n ListShareGrantsResult,\n RevokeShareGrantInput,\n ShareGrantRecord,\n ShareGrantStorage,\n} from \"@sixb/core/storage\"\nimport { ShareGrantStorageError } from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteShareGrantStorageOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n}\n\n/** SQLite persistence for issued Share grants. Secret handling remains in Core. */\nexport class SqliteShareGrantStorage implements ShareGrantStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteShareGrantStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n if (this.connection.installFreshSchema) installFreshSqliteSchema(this.db)\n }\n\n async create(input: CreateShareGrantInput): Promise<ShareGrantRecord> {\n const record = normalizeShareGrantCreate(input)\n try {\n this.db\n .query(\n `\n INSERT INTO share_grants (\n project_id, id, definition_id, target_object_type_id, target_primary_id,\n issued_by_type, issued_by_id, authority_version, authority_snapshot,\n authority_digest, token_hash, destination_path, created_at, expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n record.projectId,\n record.id,\n record.definitionId,\n record.target.objectTypeId,\n record.target.primaryId,\n record.issuedBy.type,\n record.issuedBy.id,\n record.authoritySnapshot.version,\n JSON.stringify(record.authoritySnapshot),\n record.authorityDigest,\n record.tokenHash,\n record.destinationPath,\n record.createdAt.toISOString(),\n record.expiresAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new ShareGrantStorageError(\n \"duplicate\",\n `[SixbSqlite] Share grant '${record.id}' conflicts with an existing record.`,\n { cause: error }\n )\n }\n throw error\n }\n return this.require(record.projectId, record.id, \"create\")\n }\n\n async getById(input: GetShareGrantByIdInput): Promise<ShareGrantRecord | null> {\n const normalized = normalizeGetShareGrantByIdInput(input)\n return this.getRow(normalized.projectId, normalized.id)\n }\n\n async list(input: ListShareGrantsInput): Promise<ListShareGrantsResult> {\n const normalized = normalizeListShareGrantsInput(input)\n const where = [\"project_id = ?\"]\n const args: (string | number)[] = [normalized.projectId]\n if (normalized.definitionId !== undefined) {\n where.push(\"definition_id = ?\")\n args.push(normalized.definitionId)\n }\n if (normalized.target !== undefined) {\n where.push(\"target_object_type_id = ?\", \"target_primary_id = ?\")\n args.push(normalized.target.objectTypeId, normalized.target.primaryId)\n }\n if (!normalized.includeRevoked) where.push(\"revoked_at IS NULL\")\n if (!normalized.includeExpired) {\n where.push(\"expires_at > ?\")\n args.push(normalized.now.toISOString())\n }\n\n const predicate = where.join(\" AND \")\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS total FROM share_grants WHERE ${predicate}`)\n .get(...args) as { readonly total: number }\n const rows = this.db\n .query(\n `\n SELECT * FROM share_grants\n WHERE ${predicate}\n ORDER BY created_at DESC, id DESC\n LIMIT ? OFFSET ?\n `\n )\n .all(...args, normalized.limit, normalized.offset) as SqliteShareGrantRow[]\n const grants = rows.map(rowToRecord)\n return {\n grants,\n total: totalRow.total,\n hasMore: normalized.offset + grants.length < totalRow.total,\n }\n }\n\n async revoke(input: RevokeShareGrantInput): Promise<ShareGrantRecord | null> {\n const normalized = normalizeRevokeShareGrantInput(input)\n const current = this.getRow(normalized.projectId, normalized.id)\n if (!current || current.revokedAt) return current\n\n const revocation = normalizeRevokeShareGrantInput(normalized, current.createdAt)\n this.db\n .query(\n `\n UPDATE share_grants\n SET revoked_at = ?, revoked_by_type = ?, revoked_by_id = ?\n WHERE project_id = ? AND id = ? AND revoked_at IS NULL\n `\n )\n .run(\n revocation.revokedAt.toISOString(),\n revocation.revokedBy.type,\n revocation.revokedBy.id,\n revocation.projectId,\n revocation.id\n )\n return this.require(revocation.projectId, revocation.id, \"revoke\")\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private getRow(projectId: string, id: string): ShareGrantRecord | null {\n const row = this.db\n .query(\"SELECT * FROM share_grants WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as SqliteShareGrantRow | null\n return row ? rowToRecord(row) : null\n }\n\n private require(projectId: string, id: string, operation: string): ShareGrantRecord {\n const record = this.getRow(projectId, id)\n if (!record) {\n throw new ShareGrantStorageError(\n \"invalid_record\",\n `[SixbSqlite] Share grant '${id}' disappeared after ${operation}.`\n )\n }\n return record\n }\n}\n\ninterface SqliteShareGrantRow {\n readonly project_id: unknown\n readonly id: unknown\n readonly definition_id: unknown\n readonly target_object_type_id: unknown\n readonly target_primary_id: unknown\n readonly issued_by_type: unknown\n readonly issued_by_id: unknown\n readonly authority_version: unknown\n readonly authority_snapshot: unknown\n readonly authority_digest: unknown\n readonly token_hash: unknown\n readonly destination_path: unknown\n readonly created_at: unknown\n readonly expires_at: unknown\n readonly revoked_at: unknown\n readonly revoked_by_type: unknown\n readonly revoked_by_id: unknown\n}\n\nfunction rowToRecord(row: SqliteShareGrantRow): ShareGrantRecord {\n const authoritySnapshot = parseStoredJson(row.authority_snapshot, \"authority snapshot\")\n if (\n typeof row.authority_version !== \"number\" ||\n !isRecord(authoritySnapshot) ||\n authoritySnapshot.version !== row.authority_version\n ) {\n throw invalidRecord(\"Share authority version does not match its snapshot.\")\n }\n\n const hasRevokedAt = row.revoked_at !== null\n const hasRevokedBy = row.revoked_by_type !== null || row.revoked_by_id !== null\n if (hasRevokedAt !== hasRevokedBy) {\n throw invalidRecord(\"Share revocation time and actor must be stored together.\")\n }\n\n return parseShareGrantRecord({\n projectId: row.project_id,\n id: row.id,\n definitionId: row.definition_id,\n target: {\n objectTypeId: row.target_object_type_id,\n primaryId: row.target_primary_id,\n },\n issuedBy: { type: row.issued_by_type, id: row.issued_by_id },\n authoritySnapshot,\n authorityDigest: row.authority_digest,\n tokenHash: row.token_hash,\n destinationPath: row.destination_path,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n ...(hasRevokedAt ? { revokedAt: row.revoked_at } : {}),\n ...(hasRevokedBy ? { revokedBy: { type: row.revoked_by_type, id: row.revoked_by_id } } : {}),\n })\n}\n\nfunction parseStoredJson(value: unknown, field: string): unknown {\n if (typeof value !== \"string\") throw invalidRecord(`Share ${field} must be stored as JSON text.`)\n try {\n return JSON.parse(value)\n } catch (cause) {\n throw new ShareGrantStorageError(\n \"invalid_record\",\n `[SixbSqlite] Share ${field} contains invalid JSON.`,\n { cause }\n )\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction invalidRecord(message: string): ShareGrantStorageError {\n return new ShareGrantStorageError(\"invalid_record\", `[SixbSqlite] ${message}`)\n}\n",
64
64
  "import type { Database } from \"bun:sqlite\"\nimport {\n normalizeGetShareSessionByIdInput,\n normalizeRenewShareSessionIfValidInput,\n normalizeRevokeShareSessionInput,\n normalizeShareSessionCreate,\n parseShareSessionRecord,\n} from \"@sixb/core/internal/share-session-storage-provider\"\nimport type {\n CreateShareSessionInput,\n GetShareSessionByIdInput,\n RenewShareSessionIfValidInput,\n RevokeShareSessionInput,\n ShareSessionRecord,\n ShareSessionStorage,\n} from \"@sixb/core/storage\"\nimport { ShareSessionStorageError } from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport { isForeignKeyConstraintError, isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteShareSessionStorageOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n}\n\n/** SQLite persistence for short-lived Share access sessions. */\nexport class SqliteShareSessionStorage implements ShareSessionStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteShareSessionStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n if (this.connection.installFreshSchema) installFreshSqliteSchema(this.db)\n }\n\n async create(input: CreateShareSessionInput): Promise<ShareSessionRecord> {\n const record = normalizeShareSessionCreate(input)\n try {\n const row = this.db\n .query(\n `\n INSERT INTO share_sessions (\n project_id, id, grant_id, token_hash, created_at, expires_at,\n absolute_expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?)\n RETURNING *\n `\n )\n .get(\n record.projectId,\n record.id,\n record.grantId,\n record.tokenHash,\n record.createdAt.toISOString(),\n record.expiresAt.toISOString(),\n record.absoluteExpiresAt.toISOString()\n ) as SqliteShareSessionRow | null\n if (!row) throw invalidRecord(`Share session '${record.id}' disappeared after create.`)\n return rowToRecord(row)\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new ShareSessionStorageError(\n \"duplicate\",\n `[SixbSqlite] Share session '${record.id}' conflicts with an existing record.`,\n { cause: error }\n )\n }\n if (isForeignKeyConstraintError(error)) {\n throw new ShareSessionStorageError(\n \"invalid_input\",\n `[SixbSqlite] Share grant '${record.grantId}' does not exist in project '${record.projectId}'.`,\n { cause: error }\n )\n }\n throw error\n }\n }\n\n async getById(input: GetShareSessionByIdInput): Promise<ShareSessionRecord | null> {\n const normalized = normalizeGetShareSessionByIdInput(input)\n return this.getRow(normalized.projectId, normalized.id)\n }\n\n async renewIfValid(input: RenewShareSessionIfValidInput): Promise<ShareSessionRecord | null> {\n const normalized = normalizeRenewShareSessionIfValidInput(input)\n const requestedExpiry = normalized.expiresAt.toISOString()\n const now = normalized.now.toISOString()\n const row = this.db\n .query(\n `\n UPDATE share_sessions\n SET expires_at = CASE\n WHEN ? > absolute_expires_at THEN absolute_expires_at\n WHEN ? > expires_at THEN ?\n ELSE expires_at\n END\n WHERE project_id = ?\n AND id = ?\n AND grant_id = ?\n AND token_hash = ?\n AND revoked_at IS NULL\n AND created_at <= ?\n AND expires_at > ?\n AND absolute_expires_at > ?\n RETURNING *\n `\n )\n .get(\n requestedExpiry,\n requestedExpiry,\n requestedExpiry,\n normalized.projectId,\n normalized.id,\n normalized.grantId,\n normalized.tokenHash,\n now,\n now,\n now\n ) as SqliteShareSessionRow | null\n return row ? rowToRecord(row) : null\n }\n\n async revoke(input: RevokeShareSessionInput): Promise<ShareSessionRecord | null> {\n const normalized = normalizeRevokeShareSessionInput(input)\n const current = this.getRow(normalized.projectId, normalized.id)\n if (!current || current.revokedAt) return current\n const revocation = normalizeRevokeShareSessionInput(normalized, current.createdAt)\n const row = this.db\n .query(\n `\n UPDATE share_sessions\n SET revoked_at = ?\n WHERE project_id = ? AND id = ? AND revoked_at IS NULL\n RETURNING *\n `\n )\n .get(\n revocation.revokedAt.toISOString(),\n revocation.projectId,\n revocation.id\n ) as SqliteShareSessionRow | null\n return row ? rowToRecord(row) : this.getRow(revocation.projectId, revocation.id)\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private getRow(projectId: string, id: string): ShareSessionRecord | null {\n const row = this.db\n .query(\"SELECT * FROM share_sessions WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as SqliteShareSessionRow | null\n return row ? rowToRecord(row) : null\n }\n}\n\ninterface SqliteShareSessionRow {\n readonly project_id: unknown\n readonly id: unknown\n readonly grant_id: unknown\n readonly token_hash: unknown\n readonly created_at: unknown\n readonly expires_at: unknown\n readonly absolute_expires_at: unknown\n readonly revoked_at: unknown\n}\n\nfunction rowToRecord(row: SqliteShareSessionRow): ShareSessionRecord {\n return parseShareSessionRecord({\n projectId: row.project_id,\n id: row.id,\n grantId: row.grant_id,\n tokenHash: row.token_hash,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n absoluteExpiresAt: row.absolute_expires_at,\n ...(row.revoked_at === null ? {} : { revokedAt: row.revoked_at }),\n })\n}\n\nfunction invalidRecord(message: string): ShareSessionStorageError {\n return new ShareSessionStorageError(\"invalid_record\", `[SixbSqlite] ${message}`)\n}\n",
@@ -69,7 +69,7 @@
69
69
  "import type { Database } from \"bun:sqlite\"\nimport type { WorkflowIOSnapshot } from \"@sixb/core/internal/workflows\"\nimport type {\n CancelWorkflowInterventionInput,\n CreateWorkflowInterventionInput,\n ExpireWorkflowInterventionInput,\n ListWorkflowInterventionsInput,\n ListWorkflowInterventionsResult,\n Principal,\n SubmitWorkflowInterventionInput,\n WorkflowInterventionRecord,\n WorkflowInterventionStorage,\n} from \"@sixb/core/storage\"\nimport { WorkflowInterventionError } from \"@sixb/core/storage\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteWorkflowInterventionStorageOptions {\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteWorkflowInterventionStorage implements WorkflowInterventionStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteWorkflowInterventionStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n }\n\n async create(input: CreateWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n assertNonNegativeInteger(input.nodeIndex, \"nodeIndex\")\n\n try {\n this.db\n .query(\n `\n INSERT INTO workflow_interventions (\n project_id,\n id,\n workflow_id,\n workflow_run_id,\n node_run_id,\n node_index,\n node_id,\n node_key,\n intervention_id,\n input,\n default_response,\n status,\n requested_at,\n expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.workflowId,\n input.workflowRunId,\n input.nodeRunId,\n input.nodeIndex,\n input.nodeId,\n input.nodeKey,\n input.interventionId,\n serializeRecord(input.input),\n serializeRecord(input.defaultResponse),\n \"pending\",\n (input.requestedAt ?? new Date()).toISOString(),\n input.expiresAt?.toISOString() ?? null\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Workflow intervention '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n return this.requireIntervention(input.projectId, input.id)\n }\n\n async submit(input: SubmitWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n return this.db.transaction(() => {\n const existing = this.requirePendingIntervention(input.projectId, input.id)\n\n this.db\n .query(\n `\n UPDATE workflow_interventions\n SET\n status = ?,\n submitted_at = ?,\n submitted_by = ?,\n response = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"submitted\",\n (input.submittedAt ?? new Date()).toISOString(),\n serializePrincipal(input.submittedBy),\n serializeRecord(input.response),\n existing.project_id,\n existing.id\n )\n\n return this.requireIntervention(input.projectId, input.id)\n })()\n }\n\n async cancel(input: CancelWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n return this.db.transaction(() => {\n const existing = this.requirePendingIntervention(input.projectId, input.id)\n\n this.db\n .query(\n `\n UPDATE workflow_interventions\n SET\n status = ?,\n cancelled_at = ?,\n cancelled_by = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"cancelled\",\n (input.cancelledAt ?? new Date()).toISOString(),\n serializePrincipal(input.cancelledBy),\n existing.project_id,\n existing.id\n )\n\n return this.requireIntervention(input.projectId, input.id)\n })()\n }\n\n async expire(input: ExpireWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n return this.db.transaction(() => {\n const existing = this.requirePendingIntervention(input.projectId, input.id)\n\n this.db\n .query(\n `\n UPDATE workflow_interventions\n SET\n status = ?,\n expired_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"expired\",\n (input.expiredAt ?? new Date()).toISOString(),\n existing.project_id,\n existing.id\n )\n\n return this.requireIntervention(input.projectId, input.id)\n })()\n }\n\n async getById(params: {\n projectId: string\n id: string\n }): Promise<WorkflowInterventionRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_interventions WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as WorkflowInterventionDatabaseRow | null\n\n return row ? rowToWorkflowInterventionRecord(row) : null\n }\n\n async list(input: ListWorkflowInterventionsInput): Promise<ListWorkflowInterventionsResult> {\n if ((input.statuses && input.statuses.length === 0) || input.workflowIds?.length === 0) {\n return {\n interventions: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n\n if (input.workflowId) {\n whereClauses.push(\"workflow_id = ?\")\n args.push(input.workflowId)\n }\n\n if (input.workflowIds) {\n whereClauses.push(`workflow_id IN (${input.workflowIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.workflowIds)\n }\n\n if (input.workflowRunId) {\n whereClauses.push(\"workflow_run_id = ?\")\n args.push(input.workflowRunId)\n }\n\n if (input.nodeRunId) {\n whereClauses.push(\"node_run_id = ?\")\n args.push(input.nodeRunId)\n }\n\n if (input.nodeId) {\n whereClauses.push(\"node_id = ?\")\n args.push(input.nodeId)\n }\n\n if (input.nodeKey) {\n whereClauses.push(\"node_key = ?\")\n args.push(input.nodeKey)\n }\n\n if (input.interventionId) {\n whereClauses.push(\"intervention_id = ?\")\n args.push(input.interventionId)\n }\n\n if (input.requestedAfter) {\n whereClauses.push(\"requested_at >= ?\")\n args.push(input.requestedAfter.toISOString())\n }\n\n if (input.requestedBefore) {\n whereClauses.push(\"requested_at <= ?\")\n args.push(input.requestedBefore.toISOString())\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM workflow_interventions ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT * FROM workflow_interventions\n ${where}\n ORDER BY requested_at ${order}, id ${order}\n `\n const queryArgs = [...args]\n\n if (input.limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(input.limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as WorkflowInterventionDatabaseRow[]\n\n return {\n interventions: rows.map(rowToWorkflowInterventionRecord),\n hasMore: offset + rows.length < totalRow.count,\n total: totalRow.count,\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private requirePendingIntervention(\n projectId: string,\n id: string\n ): WorkflowInterventionDatabaseRow {\n const row = this.db\n .query(\"SELECT * FROM workflow_interventions WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowInterventionDatabaseRow | null\n\n if (!row) {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Workflow intervention '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.status !== \"pending\") {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Workflow intervention '${id}' for project '${projectId}' is not pending.`\n )\n }\n\n return row\n }\n\n private requireIntervention(projectId: string, id: string): WorkflowInterventionRecord {\n const row = this.db\n .query(\"SELECT * FROM workflow_interventions WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowInterventionDatabaseRow | null\n\n if (!row) {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Failed to load workflow intervention '${id}' for project '${projectId}'.`\n )\n }\n\n return rowToWorkflowInterventionRecord(row)\n }\n}\n\ntype SqliteValue = string | number | null\n\nfunction serializeRecord(value: WorkflowIOSnapshot): string {\n return JSON.stringify(value)\n}\n\nfunction parseRecord(value: string): WorkflowIOSnapshot {\n return JSON.parse(value) as WorkflowIOSnapshot\n}\n\nfunction serializePrincipal(principal: Principal | undefined): string | null {\n return principal ? JSON.stringify(principal) : null\n}\n\nfunction parsePrincipal(value: string | null): Principal | undefined {\n return value ? (JSON.parse(value) as Principal) : undefined\n}\n\nfunction rowToWorkflowInterventionRecord(\n row: WorkflowInterventionDatabaseRow\n): WorkflowInterventionRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n workflowId: row.workflow_id,\n workflowRunId: row.workflow_run_id,\n nodeRunId: row.node_run_id,\n nodeIndex: row.node_index,\n nodeId: row.node_id,\n nodeKey: row.node_key,\n interventionId: row.intervention_id,\n input: parseRecord(row.input),\n defaultResponse: parseRecord(row.default_response),\n status: row.status,\n requestedAt: new Date(row.requested_at),\n expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,\n submittedAt: row.submitted_at ? new Date(row.submitted_at) : undefined,\n submittedBy: parsePrincipal(row.submitted_by),\n response: row.response ? parseRecord(row.response) : undefined,\n cancelledAt: row.cancelled_at ? new Date(row.cancelled_at) : undefined,\n cancelledBy: parsePrincipal(row.cancelled_by),\n expiredAt: row.expired_at ? new Date(row.expired_at) : undefined,\n }\n}\n\nfunction assertNonNegativeInteger(value: number, fieldName: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Workflow intervention ${fieldName} must be a non-negative integer.`\n )\n }\n}\n\ninterface WorkflowInterventionDatabaseRow {\n project_id: string\n id: string\n workflow_id: string\n workflow_run_id: string\n node_run_id: string\n node_index: number\n node_id: string\n node_key: string\n intervention_id: string\n input: string\n default_response: string\n status: WorkflowInterventionRecord[\"status\"]\n requested_at: string\n expires_at: string | null\n submitted_at: string | null\n submitted_by: string | null\n response: string | null\n cancelled_at: string | null\n cancelled_by: string | null\n expired_at: string | null\n}\n",
70
70
  "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure, serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n assertWorkflowAgentNodeRunExecution,\n assertWorkflowRunExecution,\n} from \"@sixb/core/internal/workflow-run-storage-provider\"\nimport type { WorkflowIOSnapshot } from \"@sixb/core/internal/workflows\"\nimport type {\n CancelWorkflowAgentNodeRunInput,\n ConfirmWorkflowAgentNodeRunExecutionOwnershipInput,\n ConfirmWorkflowRunExecutionOwnershipInput,\n CreateWorkflowAgentNodeRunInput,\n ExecutionStorage,\n FinishWorkflowAgentNodeRunInput,\n FinishWorkflowNodeRunInput,\n FinishWorkflowRunInput,\n ListLatestWorkflowRunsInput,\n ListLatestWorkflowRunsResult,\n ListWorkflowAgentNodeRunsInput,\n ListWorkflowAgentNodeRunsResult,\n ListWorkflowNodeRunsInput,\n ListWorkflowNodeRunsResult,\n ListWorkflowRunsInput,\n ListWorkflowRunsResult,\n QueueWorkflowRunInput,\n ReclaimWorkflowAgentNodeRunInput,\n ReclaimWorkflowRunInput,\n ResumeWorkflowRunInput,\n StartWorkflowAgentNodeRunInput,\n StartWorkflowNodeRunInput,\n StartWorkflowRunInput,\n WaitWorkflowNodeRunInput,\n WaitWorkflowRunInput,\n WorkflowAgentNodeRunRecord,\n WorkflowAgentNodeRunStorage,\n WorkflowNodeRunRecord,\n WorkflowNodeRunStorage,\n WorkflowRunRecord,\n WorkflowRunStorage,\n} from \"@sixb/core/storage\"\nimport {\n AGENT_RUN_FAILURE_CODES,\n WORKFLOW_RUN_FAILURE_CODES,\n WorkflowRunError,\n} from \"@sixb/core/storage\"\nimport { queryLatestRunsByOwnerId } from \"./latest-run-query\"\nimport { installFreshSqliteSchema } from \"./migrations\"\nimport {\n appendRunListFilters,\n hasEmptyStatuses,\n queryRunList,\n type SqliteValue,\n} from \"./run-list-query\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteWorkflowRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteWorkflowRunStorage implements WorkflowRunStorage {\n readonly nodes: SqliteWorkflowNodeRunStorage\n readonly agentNodes: SqliteWorkflowAgentNodeRunStorage\n\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteWorkflowRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n\n if (this.connection.installFreshSchema) {\n installFreshSqliteSchema(this.db)\n }\n\n this.nodes = new SqliteWorkflowNodeRunStorage(this.db)\n this.agentNodes = new SqliteWorkflowAgentNodeRunStorage(this.db, this.executions)\n }\n\n async queue(input: QueueWorkflowRunInput): Promise<WorkflowRunRecord> {\n const queuedAt = input.queuedAt ?? new Date()\n await assertWorkflowRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n workflowId: input.workflowId,\n })\n\n try {\n this.db\n .query(\n `\n INSERT INTO workflow_runs (\n project_id,\n id,\n execution_id,\n workflow_id,\n status,\n input,\n queued_at,\n started_at,\n attempt\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.workflowId,\n \"queued\",\n serializeRecord(input.input),\n queuedAt.toISOString(),\n queuedAt.toISOString(),\n 0\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' or execution '${input.executionId}' is already linked for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n return this.requireWorkflowRun(input.projectId, input.id)\n }\n\n async start(input: StartWorkflowRunInput): Promise<WorkflowRunRecord> {\n const startedAt = input.startedAt ?? new Date()\n\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing || existing.status !== \"queued\") {\n throw new WorkflowRunError(\n existing\n ? `[SixbSqlite] Workflow run '${input.id}' cannot start from status '${existing.status}'.`\n : `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n started_at = ?,\n finished_at = NULL,\n error = NULL,\n attempt = attempt + 1,\n execution_token = ?, execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"running\",\n startedAt.toISOString(),\n input.execution?.token ?? null,\n input.execution?.queueLeaseExpiresAt.toISOString() ?? null,\n input.projectId,\n input.id\n )\n\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async reclaim(input: ReclaimWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.id, \"running\")\n this.db\n .query(`\n UPDATE workflow_runs SET attempt = ?, execution_token = ?,\n execution_queue_lease_expires_at = ? WHERE project_id = ? AND id = ?\n `)\n .run(\n row.attempt + 1,\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n input.projectId,\n input.id\n )\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async confirmExecutionOwnership(\n input: ConfirmWorkflowRunExecutionOwnershipInput\n ): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.id, \"running\")\n assertSqliteWorkflowRunOwnership(row, input.executionToken)\n const current = row.execution_queue_lease_expires_at\n ? new Date(row.execution_queue_lease_expires_at)\n : input.queueLeaseExpiresAt\n this.db\n .query(`\n UPDATE workflow_runs SET execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND id = ?\n `)\n .run(\n new Date(Math.max(current.getTime(), input.queueLeaseExpiresAt.getTime())).toISOString(),\n input.projectId,\n input.id\n )\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async finish(input: FinishWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (!canFinishWorkflowRun(existing.status, input.status)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' for project '${input.projectId}' cannot be finished from status '${existing.status}'.`\n )\n }\n assertSqliteWorkflowRunOwnership(existing, input.executionToken)\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n finished_at = ?,\n output = ?,\n error = ?,\n execution_token = NULL,\n execution_queue_lease_expires_at = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" ? serializeRecord(input.output) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, WORKFLOW_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow\n\n return rowToWorkflowRunRecord(updated)\n })()\n }\n\n async wait(input: WaitWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' for project '${input.projectId}' must be running.`\n )\n }\n assertSqliteWorkflowRunOwnership(existing, input.executionToken)\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n finished_at = NULL,\n error = NULL\n , execution_token = NULL, execution_queue_lease_expires_at = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\"waiting\", input.projectId, input.id)\n\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async resume(input: ResumeWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"waiting\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' for project '${input.projectId}' must be waiting.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n finished_at = NULL,\n error = NULL\n , attempt = attempt + 1, execution_token = ?, execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"running\",\n input.execution?.token ?? null,\n input.execution?.queueLeaseExpiresAt.toISOString() ?? null,\n input.projectId,\n input.id\n )\n\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<WorkflowRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as WorkflowRunDatabaseRow | null\n\n return row ? rowToWorkflowRunRecord(row) : null\n }\n\n async list(input: ListWorkflowRunsInput): Promise<ListWorkflowRunsResult> {\n if (hasEmptyStatuses(input) || input.workflowIds?.length === 0) {\n return {\n runs: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.workflowId) {\n whereClauses.push(\"workflow_id = ?\")\n args.push(input.workflowId)\n }\n\n if (input.workflowIds) {\n whereClauses.push(`workflow_id IN (${input.workflowIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.workflowIds)\n }\n\n appendRunListFilters(whereClauses, args, input)\n\n const { rows, total, hasMore } = queryRunList<WorkflowRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n runs: rows.map(rowToWorkflowRunRecord),\n hasMore,\n total,\n }\n }\n\n async listLatestByWorkflowIds(\n input: ListLatestWorkflowRunsInput\n ): Promise<ListLatestWorkflowRunsResult> {\n const rows = queryLatestRunsByOwnerId<WorkflowRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_runs\",\n ownerColumn: \"workflow_id\",\n ownerIds: input.workflowIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.workflow_id,\n })\n\n return {\n runs: rows.map(rowToWorkflowRunRecord),\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private requireWorkflowRun(projectId: string, id: string): WorkflowRunRecord {\n const record = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowRunDatabaseRow | null\n\n if (!record) {\n throw new WorkflowRunError(\n `[SixbSqlite] Failed to load workflow run '${id}' for project '${projectId}'.`\n )\n }\n\n return rowToWorkflowRunRecord(record)\n }\n\n private requireStatus(\n projectId: string,\n id: string,\n status: WorkflowRunRecord[\"status\"]\n ): WorkflowRunDatabaseRow {\n const row = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowRunDatabaseRow | null\n if (!row) throw new WorkflowRunError(`[SixbSqlite] Workflow run '${id}' not found.`)\n if (row.status !== status) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${id}' must be ${status} (status '${row.status}').`\n )\n }\n return row\n }\n}\n\nexport class SqliteWorkflowAgentNodeRunStorage implements WorkflowAgentNodeRunStorage {\n constructor(\n private readonly db: Database,\n private readonly executions: ExecutionStorage\n ) {}\n\n async create(input: CreateWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n const parent = this.db\n .query(\n `\n SELECT workflow_runs.execution_id\n FROM workflow_node_runs\n JOIN workflow_runs\n ON workflow_runs.project_id = workflow_node_runs.project_id\n AND workflow_runs.id = workflow_node_runs.workflow_run_id\n WHERE workflow_node_runs.project_id = ?\n AND workflow_node_runs.id = ?\n AND workflow_node_runs.node_type = 'agent'\n `\n )\n .get(input.projectId, input.nodeRunId) as { execution_id: string } | null\n if (!parent) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${input.nodeRunId}' was not found.`\n )\n }\n await assertWorkflowAgentNodeRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n nodeRunId: input.nodeRunId,\n actorId: input.actorId,\n workflowExecutionId: parent.execution_id,\n })\n\n try {\n this.db\n .query(`\n INSERT INTO workflow_agent_node_runs (\n project_id, node_run_id, execution_id, actor_id, status, prompt, attempt, created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n `)\n .run(\n input.projectId,\n input.nodeRunId,\n input.executionId,\n input.actorId,\n \"queued\",\n input.prompt,\n 0,\n (input.createdAt ?? new Date()).toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent execution already exists for workflow node run '${input.nodeRunId}'.`\n )\n }\n throw error\n }\n return this.require(input.projectId, input.nodeRunId)\n }\n\n async start(input: StartWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n this.requireStatus(input.projectId, input.nodeRunId, \"queued\")\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET\n status = ?, model_id = ?, attempt = 1, execution_token = ?,\n execution_queue_lease_expires_at = ?, started_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n \"running\",\n input.modelId ?? null,\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n (input.startedAt ?? new Date()).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async reclaim(input: ReclaimWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.nodeRunId, \"running\")\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET\n attempt = ?, execution_token = ?, execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n Number(row.attempt) + 1,\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async confirmExecutionOwnership(\n input: ConfirmWorkflowAgentNodeRunExecutionOwnershipInput\n ): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.nodeRunId, \"running\")\n assertSqliteWorkflowAgentNodeOwnership(row, input.executionToken)\n const current = row.execution_queue_lease_expires_at\n ? new Date(row.execution_queue_lease_expires_at)\n : input.queueLeaseExpiresAt\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n new Date(Math.max(current.getTime(), input.queueLeaseExpiresAt.getTime())).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async finish(input: FinishWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.nodeRunId, \"running\")\n assertSqliteWorkflowAgentNodeOwnership(row, input.executionToken)\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET\n status = ?, model_id = COALESCE(?, model_id), finish_reason = ?, trace = ?,\n diagnostics = ?, error = ?, execution_token = NULL,\n execution_queue_lease_expires_at = NULL, completed_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n input.status,\n input.modelId ?? null,\n input.finishReason ?? null,\n input.trace ? JSON.stringify(input.trace) : null,\n input.diagnostics ? JSON.stringify(input.diagnostics) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES),\n (input.completedAt ?? new Date()).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async cancel(input: CancelWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.require(input.projectId, input.nodeRunId)\n if (row.status !== \"queued\" && row.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${input.nodeRunId}' cannot be cancelled from status '${row.status}'.`\n )\n }\n this.db\n .query(\n `UPDATE workflow_agent_node_runs SET status = ?, error = ?, execution_token = NULL,\n execution_queue_lease_expires_at = NULL, completed_at = ?\n WHERE project_id = ? AND node_run_id = ?`\n )\n .run(\n \"cancelled\",\n input.error === undefined\n ? null\n : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES),\n (input.completedAt ?? new Date()).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async getByNodeRunId(params: {\n projectId: string\n nodeRunId: string\n }): Promise<WorkflowAgentNodeRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_agent_node_runs WHERE project_id = ? AND node_run_id = ?\")\n .get(params.projectId, params.nodeRunId) as WorkflowAgentNodeRunDatabaseRow | null\n return row ? rowToWorkflowAgentNodeRunRecord(row) : null\n }\n\n async list(input: ListWorkflowAgentNodeRunsInput): Promise<ListWorkflowAgentNodeRunsResult> {\n if (hasEmptyStatuses(input)) return { runs: [], total: 0, hasMore: false }\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n if (input.actorId) {\n whereClauses.push(\"actor_id = ?\")\n args.push(input.actorId)\n }\n appendRunListFilters(whereClauses, args, input)\n const result = queryRunList<WorkflowAgentNodeRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_agent_node_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n return { ...result, runs: result.rows.map(rowToWorkflowAgentNodeRunRecord) }\n }\n\n private require(projectId: string, nodeRunId: string): WorkflowAgentNodeRunRecord {\n const row = this.db\n .query(\"SELECT * FROM workflow_agent_node_runs WHERE project_id = ? AND node_run_id = ?\")\n .get(projectId, nodeRunId) as WorkflowAgentNodeRunDatabaseRow | null\n if (!row) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${nodeRunId}' not found for project '${projectId}'.`\n )\n }\n return rowToWorkflowAgentNodeRunRecord(row)\n }\n\n private requireStatus(\n projectId: string,\n nodeRunId: string,\n status: WorkflowAgentNodeRunRecord[\"status\"]\n ): WorkflowAgentNodeRunDatabaseRow {\n const row = this.db\n .query(\"SELECT * FROM workflow_agent_node_runs WHERE project_id = ? AND node_run_id = ?\")\n .get(projectId, nodeRunId) as WorkflowAgentNodeRunDatabaseRow | null\n if (!row) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${nodeRunId}' not found for project '${projectId}'.`\n )\n }\n if (row.status !== status) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${nodeRunId}' must be ${status} (status '${row.status}').`\n )\n }\n return row\n }\n}\n\nexport class SqliteWorkflowNodeRunStorage implements WorkflowNodeRunStorage {\n constructor(private readonly db: Database) {}\n\n async start(input: StartWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n assertNonNegativeInteger(input.nodeIndex, \"nodeIndex\")\n\n return this.db.transaction(() => {\n const workflowRun = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.workflowRunId) as WorkflowRunDatabaseRow | null\n\n if (!workflowRun) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.workflowRunId}' not found for project '${input.projectId}'.`\n )\n }\n\n if (workflowRun.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.workflowRunId}' for project '${input.projectId}' must be running.`\n )\n }\n assertSqliteWorkflowRunOwnership(workflowRun, input.executionToken)\n\n if (workflowRun.workflow_id !== input.workflowId) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' workflow '${input.workflowId}' does not match workflow run '${input.workflowRunId}' workflow '${workflowRun.workflow_id}'.`\n )\n }\n\n const startedAt = input.startedAt ?? new Date()\n\n try {\n this.db\n .query(\n `\n INSERT INTO workflow_node_runs (\n project_id,\n id,\n workflow_run_id,\n workflow_id,\n node_index,\n node_type,\n node_id,\n node_key,\n status,\n input,\n started_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.workflowRunId,\n input.workflowId,\n input.nodeIndex,\n input.nodeType,\n input.nodeId,\n input.nodeKey,\n \"running\",\n serializeRecord(input.input),\n startedAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n const row = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow | null\n\n if (!row) {\n throw new WorkflowRunError(\n `[SixbSqlite] Failed to load workflow node run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return rowToWorkflowNodeRunRecord(row)\n })()\n }\n\n async finish(input: FinishWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n this.assertNodeParentOwnership(existing, input.executionToken)\n\n if (existing.status !== \"running\" && existing.status !== \"waiting\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' for project '${input.projectId}' is already terminal.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_node_runs\n SET\n status = ?,\n finished_at = ?,\n output = ?,\n error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" && input.output ? serializeRecord(input.output) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, WORKFLOW_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow\n\n return rowToWorkflowNodeRunRecord(updated)\n })()\n }\n\n async wait(input: WaitWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n this.assertNodeParentOwnership(existing, input.executionToken)\n\n if (existing.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' for project '${input.projectId}' must be running.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_node_runs\n SET\n status = ?,\n finished_at = NULL,\n output = NULL,\n error = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\"waiting\", input.projectId, input.id)\n\n const updated = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow\n\n return rowToWorkflowNodeRunRecord(updated)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<WorkflowNodeRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as WorkflowNodeRunDatabaseRow | null\n\n return row ? rowToWorkflowNodeRunRecord(row) : null\n }\n\n async list(input: ListWorkflowNodeRunsInput): Promise<ListWorkflowNodeRunsResult> {\n if (hasEmptyStatuses(input)) {\n return {\n nodes: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.workflowRunId) {\n whereClauses.push(\"workflow_run_id = ?\")\n args.push(input.workflowRunId)\n }\n\n if (input.workflowId) {\n whereClauses.push(\"workflow_id = ?\")\n args.push(input.workflowId)\n }\n\n if (input.nodeType) {\n whereClauses.push(\"node_type = ?\")\n args.push(input.nodeType)\n }\n\n if (input.nodeId) {\n whereClauses.push(\"node_id = ?\")\n args.push(input.nodeId)\n }\n\n if (input.nodeKey) {\n whereClauses.push(\"node_key = ?\")\n args.push(input.nodeKey)\n }\n\n appendRunListFilters(whereClauses, args, input)\n\n const { rows, total, hasMore } = queryRunList<WorkflowNodeRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_node_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n nodes: rows.map(rowToWorkflowNodeRunRecord),\n hasMore,\n total,\n }\n }\n\n private assertNodeParentOwnership(node: WorkflowNodeRunDatabaseRow, token?: string): void {\n const run = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(node.project_id, node.workflow_run_id) as WorkflowRunDatabaseRow | null\n if (!run) throw new WorkflowRunError(\"[SixbSqlite] Parent workflow run was not found.\")\n assertSqliteWorkflowRunOwnership(run, token)\n }\n}\n\nfunction serializeRecord(value: WorkflowIOSnapshot): string {\n return JSON.stringify(value)\n}\n\nfunction parseRecord(value: string): WorkflowIOSnapshot {\n return JSON.parse(value) as WorkflowIOSnapshot\n}\n\nfunction rowToWorkflowRunRecord(row: WorkflowRunDatabaseRow): WorkflowRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n workflowId: row.workflow_id,\n status: row.status,\n input: parseRecord(row.input),\n output: row.output ? parseRecord(row.output) : undefined,\n queuedAt: row.queued_at ? new Date(row.queued_at) : undefined,\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, WORKFLOW_RUN_FAILURE_CODES),\n attempt: row.attempt,\n ...(row.execution_token && row.execution_queue_lease_expires_at\n ? {\n execution: {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n },\n }\n : {}),\n }\n}\n\nfunction rowToWorkflowNodeRunRecord(row: WorkflowNodeRunDatabaseRow): WorkflowNodeRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n workflowRunId: row.workflow_run_id,\n workflowId: row.workflow_id,\n nodeIndex: row.node_index,\n nodeType: row.node_type,\n nodeId: row.node_id,\n nodeKey: row.node_key,\n status: row.status,\n input: parseRecord(row.input),\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n output: row.output ? parseRecord(row.output) : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, WORKFLOW_RUN_FAILURE_CODES),\n }\n}\n\nfunction assertNonNegativeInteger(value: number, fieldName: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run ${fieldName} must be a non-negative integer.`\n )\n }\n}\n\nfunction canFinishWorkflowRun(\n current: WorkflowRunRecord[\"status\"],\n next: FinishWorkflowRunInput[\"status\"]\n): boolean {\n return (\n current === \"running\" ||\n (current === \"waiting\" && next !== \"succeeded\") ||\n (current === \"queued\" && next !== \"succeeded\")\n )\n}\n\ninterface WorkflowRunDatabaseRow {\n project_id: string\n id: string\n execution_id: string\n workflow_id: string\n status: WorkflowRunRecord[\"status\"]\n input: string\n output: string | null\n queued_at: string | null\n started_at: string\n finished_at: string | null\n error: string | null\n attempt: number\n execution_token: string | null\n execution_queue_lease_expires_at: string | null\n}\n\ninterface WorkflowNodeRunDatabaseRow {\n project_id: string\n id: string\n workflow_run_id: string\n workflow_id: string\n node_index: number\n node_type: WorkflowNodeRunRecord[\"nodeType\"]\n node_id: string\n node_key: string\n status: WorkflowNodeRunRecord[\"status\"]\n input: string\n started_at: string\n finished_at: string | null\n output: string | null\n error: string | null\n}\n\ninterface WorkflowAgentNodeRunDatabaseRow {\n project_id: string\n node_run_id: string\n execution_id: string\n actor_id: string\n status: WorkflowAgentNodeRunRecord[\"status\"]\n prompt: string\n model_id: string | null\n finish_reason: WorkflowAgentNodeRunRecord[\"finishReason\"] | null\n trace: string | null\n diagnostics: string | null\n error: string | null\n attempt: number\n execution_token: string | null\n execution_queue_lease_expires_at: string | null\n created_at: string\n started_at: string | null\n completed_at: string | null\n}\n\nfunction assertSqliteWorkflowAgentNodeOwnership(\n row: WorkflowAgentNodeRunDatabaseRow,\n token: string\n): void {\n if (row.execution_token !== token) {\n throw new WorkflowRunError(\n `[SixbSqlite] Execution token is no longer current on agent workflow node run '${row.node_run_id}'.`\n )\n }\n}\n\nfunction rowToWorkflowAgentNodeRunRecord(\n row: WorkflowAgentNodeRunDatabaseRow\n): WorkflowAgentNodeRunRecord {\n return {\n projectId: row.project_id,\n nodeRunId: row.node_run_id,\n executionId: row.execution_id,\n actorId: row.actor_id,\n status: row.status,\n prompt: row.prompt,\n ...(row.model_id ? { modelId: row.model_id } : {}),\n ...(row.finish_reason ? { finishReason: row.finish_reason } : {}),\n ...(row.trace ? { trace: JSON.parse(row.trace) } : {}),\n ...(row.diagnostics ? { diagnostics: JSON.parse(row.diagnostics) } : {}),\n ...(row.error ? { error: parseSixbFailure(row.error, AGENT_RUN_FAILURE_CODES) } : {}),\n attempt: row.attempt,\n ...(row.execution_token && row.execution_queue_lease_expires_at\n ? {\n execution: {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n },\n }\n : {}),\n createdAt: new Date(row.created_at),\n ...(row.started_at ? { startedAt: new Date(row.started_at) } : {}),\n ...(row.completed_at ? { completedAt: new Date(row.completed_at) } : {}),\n }\n}\n\nfunction assertSqliteWorkflowRunOwnership(row: WorkflowRunDatabaseRow, token?: string): void {\n if (row.execution_token !== (token ?? null)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Execution token is no longer current on workflow run '${row.id}'.`\n )\n }\n}\n"
71
71
  ],
72
- "mappings": ";;AAIA;AAOA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;;;ACvBA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAwBA;;;AC/BA;AACA;AACA;AACA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
73
- "debugId": "A346535172FAF7A764756E2164756E21",
72
+ "mappings": ";;AAIA;AAOA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;;;ACvBA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAwBA;;;AC/BA;AACA;AACA;AACA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHA,IAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAatB,IAAM,4BAA4B;AAClC,IAAM,sBAAsB;AAE5B,IAAM,0BAA0B,iBAAiB;AAAA,EACtD,WAAW;AAAA,EACX,OAAO;AAAA,IACL,UAAU,sBAAsB,2BAAgB;AAAA,IAChD,UAAU,2BAA2B,gCAAoB;AAAA,IACzD,UAAU,uBAAuB,4BAAgB;AAAA,IACjD,UAAU,kBAAkB,uBAAa;AAAA,IACzC,UAAU,2BAA2B,gCAAqB;AAAA,IAC1D,UAAU,yCAAyC,8CAAgC;AAAA,IACnF,UAAU,uBAAuB,4BAAiB;AAAA,IAClD,UAAU,yBAAyB,8BAAmB;AAAA,IACtD,UAAU,wBAAwB,6BAAkB;AAAA,IACpD,UAAU,sCAAsC,2CAA8B;AAAA,IAC9E,UAAU,2BAA2B,gCAAoB;AAAA,IACzD,UAAU,+BAA+B,oCAAwB;AAAA,IACjE,UAAU,+BAA+B,oCAAwB;AAAA,IACjE,UAAU,4BAA4B,iCAAqB;AAAA,IAC3D,UAAU,iCAAiC,sCAA0B;AAAA,IACrE,UAAU,kCAAkC,uCAA0B;AAAA,IACtE,UAAU,6BAA6B,kCAAsB;AAAA,IAC7D,UAAU,sCAAsC,2CAA8B;AAAA,IAC9E,UAAU,uCAAuC,4CAA+B;AAAA,IAChF,UAAU,kCAAkC,uCAA0B;AAAA,IACtE,UAAU,gCAAgC,qCAAyB;AAAA,IACnE,WACE,6BACA,CAAC,OAAO;AAAA,MACN,IAAI,GAAG,MAAM,uCAAuC,EAAE,IAAI,GAAG;AAAA,QAC3D,MAAM,IAAI,MACR,wGACF;AAAA,MACF;AAAA,MACA,GAAG,IAAI,kCAAuB;AAAA,OAEhC,EAAE,UAAU,SAAS,kCAAuB,EAAE,CAChD;AAAA,IACA,WACE,0BACA,CAAC,OAAO;AAAA,MACN,MAAM,UAAU,GAAG,MAAM,oCAAoC,EAAE,IAAI;AAAA,MACnE,MAAM,gBAAgB,GAAG,MAAM,0CAA0C,EAAE,IAAI;AAAA,MAC/E,IAAI,WAAW,eAAe;AAAA,QAC5B,MAAM,IAAI,MACR,mHACF;AAAA,MACF;AAAA,MACA,GAAG,IAAI,+BAAoB;AAAA,OAE7B,EAAE,UAAU,SAAS,+BAAoB,EAAE,CAC7C;AAAA,IACA,WACE,kCACA,CAAC,OAAO;AAAA,MACN,IAAI,GAAG,MAAM,wCAAwC,EAAE,IAAI,GAAG;AAAA,QAC5D,MAAM,IAAI,MACR,yGACF;AAAA,MACF;AAAA,MACA,GAAG,IAAI,uCAA2B;AAAA,OAEpC,EAAE,UAAU,SAAS,uCAA2B,EAAE,CACpD;AAAA,IACA,UAAU,6BAA6B,kCAAuB;AAAA,IAC9D,UAAU,0BAA0B,+BAAmB;AAAA,IACvD,UAAU,iCAAiC,sCAA0B;AAAA,IACrE,UAAU,kCAAkC,uCAA0B;AAAA,IACtE,UAAU,wBAAwB,6BAAkB;AAAA,IACpD,UAAU,uBAAuB,4BAAgB;AAAA,IACjD,UAAU,qBAAqB,0BAAe;AAAA,IAC9C,UAAU,6BAA6B,kCAAsB;AAAA,IAC7D,UAAU,gCAAgC,qCAAyB;AAAA,IACnE,UAAU,6BAA6B,kCAAuB;AAAA,IAC9D,UAAU,oBAAoB,yBAAc;AAAA,IAC5C,UAAU,sBAAsB,2BAAgB;AAAA,IAChD,UAAU,kCAAkC,uCAA2B;AAAA,IACvE,UAAU,+BAA+B,oCAAwB;AAAA,IACjE,UAAU,+BAA+B,oCAAwB;AAAA,IACjE,UAAU,gCAAgC,qCAAyB;AAAA,IACnE,UAAU,+BAA+B,oCAAwB;AAAA,IACjE,UAAU,uBAAuB,4BAAiB;AAAA,IAClD,UAAU,uBAAuB,4BAAiB;AAAA,IAClD,UAAU,uBAAuB,4BAAiB;AAAA,IAClD,UAAU,kCAAkC,uCAA0B;AAAA,IACtE,UAAU,wCAAwC,6CAAiC;AAAA,IACnF,UAAU,mCAAmC,wCAA4B;AAAA,IACzE,UAAU,4BAA4B,iCAAqB;AAAA,IAC3D,UAAU,uBAAuB,4BAAiB;AAAA,IAClD,UAAU,mCAAmC,wCAA4B;AAAA,IACzE,UAAU,mCAAmC,wCAA4B;AAAA,IACzE,WACE,8BACA,CAAC,OAAO;AAAA,MAEN,MAAM,SAAS,oBAAoB,EAAE;AAAA,MACrC,GAAG,IAAI,mCAAuB;AAAA,MAC9B,MAAM,QAAQ,oBAAoB,EAAE;AAAA,MACpC,IACE,MAAM,aAAa,OAAO,YAC1B,MAAM,UAAU,OAAO,SACvB,MAAM,SAAS,OAAO,MACtB;AAAA,QACA,MAAM,IAAI,MACR,+FACF;AAAA,MACF;AAAA,OAEF,EAAE,UAAU,SAAS,mCAAuB,EAAE,CAChD;AAAA,EACF;AACF,CAAC;AAEM,SAAS,iBAAiB,CAAC,UAA0B;AAAA,EAC1D,OAAO,GAAG,YAAY;AAAA;AAGjB,SAAS,SAAS,CAAC,IAAY,SAA0C;AAAA,EAC9E,OAAO,WACL,IACA,CAAC,OAAO;AAAA,IACN,GAAG,IAAI,OAAO;AAAA,KAEhB,EAAE,UAAU,SAAS,OAAO,EAAE,CAChC;AAAA;AAGK,SAAS,UAAU,CACxB,IACA,IACA,UAAgC,CAAC,GACR;AAAA,EACzB,OAAO,KAAe,IAAI,IAAI,OAAO;AAAA;AAGhC,SAAS,wBAAwB,CAAC,IAAoB;AAAA,EAC3D,WAAW,aAAa,wBAAwB,OAAO;AAAA,IACrD,MAAM,YAAY,UAAU,GAAG,EAAE;AAAA,IACjC,IAAI,qBAAqB,SAAS;AAAA,MAChC,MAAM,IAAI,MACR,IAAI,wBAAwB,iEAC9B;AAAA,IACF;AAAA,EACF;AAAA;AAGK,SAAS,4BAA4B,CAAC,UAA8C;AAAA,EACzF,OAAO;AAAA,IACL,qBAAqB;AAAA,MACnB,MAAM,kBAAkB,QAAQ;AAAA,MAChC,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA;AAGK,SAAS,oBAAoB,CAAC,QAGjB;AAAA,EAClB,OAAO;AAAA,IACL,WAAW,OAAO,WAAW;AAAA,IAC7B,eAAe,OAAO,WAAW;AAAA,SAC3B,OAAM,GAAG;AAAA,MACb,OAAO,yBAAyB;AAAA,QAC9B,YAAY,OAAO;AAAA,QACnB,MAAM,MAAM,kBAAkB,OAAO,MAAM,OAAO,WAAW,SAAS;AAAA,MACxE,CAAC;AAAA;AAAA,SAEG,QAAO,GAAG;AAAA,MACd,OAAO,mBAAmB,OAAO,MAAM,CAAC,OACtC,gBAAgB;AAAA,QACd,SAAS;AAAA,QACT,YAAY,OAAO;AAAA,QACnB,OAAO,4BAA4B,EAAE;AAAA,MACvC,CAAC,CACH;AAAA;AAAA,EAEJ;AAAA;AAGF,eAAsB,oBAAoB,CAAC,UAAiC;AAAA,EAC1E,UAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,EAEvC,WAAW,YAAY,6BAA6B,QAAQ,GAAG;AAAA,IAC7D,MAAM,SAAS,QAAQ;AAAA,EACzB;AAAA;AAGF,SAAS,2BAA2B,CAAC,IAAqC;AAAA,EACxE,OAAO;AAAA,IACL,MAAM,GAAG;AAAA,MACP,GAAG,IAAI,oBAAoB;AAAA;AAAA,IAE7B,WAAW,CAAC,WAAW;AAAA,MACrB,OAAO,GACJ,MAAM,qEAAqE,EAC3E,IAAI,SAAS,EACb,IAAI,oBAAoB;AAAA;AAAA,IAE7B,WAAW,CAAC,WAAW,WAAW,IAAI;AAAA,MACpC,GAAG,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUR,EAAE,IAAI,WAAW,UAAU,SAAS,UAAU,IAAI,UAAU,YAAY,MAAM,EAAE;AAAA;AAAA,IAEnF,WAAW,CAAC,WAAW,WAAW,IAAI;AAAA,MACpC,GAAG,MAAM;AAAA;AAAA;AAAA;AAAA,OAIR,EAAE,IAAI,IAAI,WAAW,UAAU,OAAO;AAAA;AAAA,SAEnC,YAAW,CAAC,KAAK;AAAA,MAIrB,GAAG,IAAI,2BAA2B;AAAA,MAClC,GAAG,IAAI,OAAO;AAAA,MAEd,IAAI;AAAA,QACF,MAAM,SAAS,MAAM,IAAI;AAAA,QACzB,MAAM,aAAa,GAAG,MAAM,0BAA0B,EAAE,IAAI;AAAA,QAC5D,IAAI,WAAW,SAAS,GAAG;AAAA,UACzB,MAAM,IAAI,MACR,IAAI,iDAAiD,WAAW,kCAClE;AAAA,QACF;AAAA,QACA,GAAG,IAAI,QAAQ;AAAA,QACf,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,QACd,gBAAgB,EAAE;AAAA,QAClB,MAAM;AAAA,gBACN;AAAA,QACA,GAAG,IAAI,0BAA0B;AAAA;AAAA;AAAA,EAGvC;AAAA;AAGF,SAAS,oBAAoB,CAAC,KAA+B;AAAA,EAC3D,MAAM,YAAY;AAAA,EAUlB,OAAO;AAAA,IACL,WAAW,UAAU;AAAA,IACrB,SAAS,UAAU;AAAA,IACnB,IAAI,UAAU;AAAA,IACd,UAAU,UAAU,YAAY;AAAA,IAChC,QAAQ,UAAU;AAAA,IAClB,WAAW,UAAU;AAAA,IACrB,YAAY,UAAU,eAAe;AAAA,EACvC;AAAA;AAGF,SAAS,mBAAmB,CAAC,IAI3B;AAAA,EACA,OAAO,GACJ,MAAM;AAAA;AAAA,0DAE+C,EACrD,IAAI;AAAA;AAGT,SAAS,QAAQ,CAAC,OAAuB;AAAA,EACvC,OAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA;AAYxD,eAAe,iBAAiB,CAC9B,MACA,WAC4C;AAAA,EAC5C,IAAI,SAAS,cAAc,CAAC,WAAW,IAAI,GAAG;AAAA,IAC5C,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,IAAI,SAAS,MAAM,EAAE,UAAU,KAAK,CAAC;AAAA,EAChD,IAAI;AAAA,IACF,MAAM,QAAQ,GACX,MAAM,kFAAkF,EACxF,IAAI;AAAA,IACP,IAAI,CAAC,OAAO;AAAA,MACV,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,GACJ,MAAM,qEAAqE,EAC3E,IAAI,SAAS,EACb,IAAI,oBAAoB;AAAA,YAC3B;AAAA,IACA,GAAG,MAAM;AAAA;AAAA;AAIb,eAAe,kBAAqB,CAAC,MAAc,KAA+C;AAAA,EAChG,IAAI,SAAS;AAAA,IAAY,UAAU,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EACrE,MAAM,KAAK,IAAI,SAAS,IAAI;AAAA,EAE5B,IAAI;AAAA,IACF,OAAO,MAAM,IAAI,EAAE;AAAA,YACnB;AAAA,IACA,GAAG,MAAM;AAAA;AAAA;AAIb,SAAS,eAAe,CAAC,IAAoB;AAAA,EAC3C,IAAI;AAAA,IACF,GAAG,IAAI,UAAU;AAAA,IACjB,MAAM;AAAA;;;ACtdV,qBAAS;AACT,sBAAS;AACT,oBAAS;AAcF,SAAS,yBAAyB,CACvC,UAAwC,CAAC,GAClB;AAAA,EACvB,IAAI,QAAQ,YAAY;AAAA,IACtB,OAAO;AAAA,MACL,IAAI,QAAQ,WAAW;AAAA,MACvB,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAAQ,QAAQ;AAAA,EAC7B,IAAI,SAAS,cAAc,CAAC,QAAQ;AAAA,IAAU,WAAU,SAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EAC1F,MAAM,KAAK,IAAI,eAAe,MAAM,QAAQ,WAAW,EAAE,UAAU,KAAK,IAAI,SAAS;AAAA,EACrF,GAAG,IAAI,0BAA0B;AAAA,EACjC,GAAG,IAAI,4BAA4B;AAAA,EACnC,OAAO;AAAA,IACL;AAAA,IACA,gBAAgB;AAAA,IAChB,oBAAoB,SAAS,cAAc,CAAC,QAAQ;AAAA,EACtD;AAAA;AAGK,SAAS,0BAA0B,CAAC,YAAyC;AAAA,EAClF,IAAI,WAAW,gBAAgB;AAAA,IAC7B,WAAW,GAAG,MAAM;AAAA,EACtB;AAAA;AAGF,IAAM,8BAA8B,IAAI;AACxC,IAAM,iCAAiC,IAAI;AAEpC,SAAS,uBAA0B,CAAC,IAAc,KAAiB;AAAA,EACxE,IAAI,4BAA4B,IAAI,EAAE,GAAG;AAAA,IACvC,OAAO,IAAI;AAAA,EACb;AAAA,EAEA,GAAG,IAAI,iBAAiB;AAAA,EACxB,4BAA4B,IAAI,EAAE;AAAA,EAElC,IAAI;AAAA,IACF,MAAM,SAAS,IAAI;AAAA,IACnB,GAAG,IAAI,QAAQ;AAAA,IACf,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IACd,iBAAgB,EAAE;AAAA,IAClB,MAAM;AAAA,YACN;AAAA,IACA,4BAA4B,OAAO,EAAE;AAAA;AAAA;AAKlC,SAAS,oBAAoB,GAAkB;AAAA,EACpD,OAAO,IAAI,QAAQ,CAAC,YAAY,aAAa,OAAO,CAAC;AAAA;AAGvD,eAAsB,4BAA+B,CACnD,IACA,KACY;AAAA,EACZ,IAAI,4BAA4B,IAAI,EAAE,GAAG;AAAA,IACvC,OAAO,IAAI;AAAA,EACb;AAAA,EAEA,GAAG,IAAI,iBAAiB;AAAA,EACxB,4BAA4B,IAAI,EAAE;AAAA,EAElC,IAAI;AAAA,IACF,MAAM,SAAS,MAAM,IAAI;AAAA,IACzB,GAAG,IAAI,QAAQ;AAAA,IACf,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IACd,iBAAgB,EAAE;AAAA,IAClB,MAAM;AAAA,YACN;AAAA,IACA,4BAA4B,OAAO,EAAE;AAAA;AAAA;AAWlC,SAAS,0BAA6B,CAAC,IAAc,KAAiB;AAAA,EAC3E,IAAI,4BAA4B,IAAI,EAAE,KAAK,+BAA+B,IAAI,EAAE,GAAG;AAAA,IACjF,OAAO,IAAI;AAAA,EACb;AAAA,EACA,IAAI,GAAG,eAAe;AAAA,IACpB,MAAM,IAAI,MACR,kFACF;AAAA,EACF;AAAA,EAEA,GAAG,IAAI,gBAAgB;AAAA,EACvB,+BAA+B,IAAI,EAAE;AAAA,EACrC,IAAI;AAAA,IACF,MAAM,SAAS,IAAI;AAAA,IACnB,GAAG,IAAI,QAAQ;AAAA,IACf,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IACd,iBAAgB,EAAE;AAAA,IAClB,MAAM;AAAA,YACN;AAAA,IACA,+BAA+B,OAAO,EAAE;AAAA;AAAA;AAI5C,SAAS,gBAAe,CAAC,IAAoB;AAAA,EAC3C,IAAI;AAAA,IACF,GAAG,IAAI,UAAU;AAAA,IACjB,MAAM;AAAA;;;AFnFH,MAAM,uBAAmD;AAAA,EAC7C;AAAA,EACA;AAAA,EAEA;AAAA,EAEjB,WAAW,CAAC,SAAwC;AAAA,IAClD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,aAAa,QAAQ;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,uBAAsB,CAAC,OAAoE;AAAA,IAC/F,MAAM,MAAM,KAAK,GACd,MAAM,2EAA2E,EACjF,IAAI,MAAM,WAAW,MAAM,KAAK;AAAA,IAInC,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,eACR,4BAA4B,MAAM,iCAAiC,MAAM,aAC3E;AAAA,IACF;AAAA,IACA,IAAI,IAAI,cAAc,MAAM,UAAU;AAAA,MACpC,MAAM,IAAI,eACR,4BAA4B,MAAM,qCAAqC,MAAM,YAC/E;AAAA,IACF;AAAA,IACA,IAAI,IAAI,WAAW,WAAW;AAAA,MAC5B,MAAM,IAAI,eACR,4BAA4B,MAAM,0CAA0C,IAAI,UAClF;AAAA,IACF;AAAA,IACA,MAAM,SAAS,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,MAAM,CAAC;AAAA,IACjF,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,eACR,4BAA4B,MAAM,mDACpC;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,MAAK,CAAC,OAAsD;AAAA,IAChE,MAAM,WAAW,MAAM,YAAY,IAAI;AAAA,IACvC,MAAM,yBAAyB;AAAA,MAC7B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,UAAU,MAAM;AAAA,IAClB,CAAC;AAAA,IAED,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA+BF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,UACN,MAAM,QAAQ,MACd,MAAM,QAAQ,SAAS,WAAW,MAAM,QAAQ,eAAe,MAC/D,MAAM,QAAQ,SAAS,WAAW,MAAM,QAAQ,YAAY,MAC5D,UACA,WACA,SAAS,YAAY,GACrB,KAAK,UAAU,MAAM,MAAM,GAC3B,MAAM,cACR;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,QAClC,OAAO,KAAK,2BAA2B,OAAO,QAAQ;AAAA,MACxD;AAAA,MAEA,MAAM;AAAA;AAAA,IAGR,MAAM,SAAS,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,IAC9E,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,eACR,2CAA2C,MAAM,oBAAoB,MAAM,aAC7E;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGK,2BAA0B,CACtC,OACA,UAC0B;AAAA,IAC1B,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IACE,CAAC,YACD,CAAC,uCAAuC,qBAAqB,QAAQ,GAAG,KAAK,GAC7E;AAAA,QACA,MAAM,IAAI,eACR,4BAA4B,MAAM,mCAAmC,MAAM,aAC7E;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAkBF,EACC,IAAI,UAAU,WAAW,SAAS,YAAY,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MAE7E,MAAM,UAAU,KAAK,GAClB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,qBAAqB,OAAO;AAAA,KACpC,EAAE;AAAA;AAAA,OAGC,MAAK,CAAC,OAAsD;AAAA,IAChE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,eACR,4BAA4B,MAAM,8BAA8B,MAAM,aACxE;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,WAAW,UAAU;AAAA,QAChC,MAAM,IAAI,eACR,4BAA4B,MAAM,iCAAiC,SAAS,UAC9E;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IACC,WACA,MAAM,SAAS,eACd,MAAM,aAAa,IAAI,MAAQ,YAAY,GAC5C,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,qBAAqB,OAAO;AAAA,KACpC,EAAE;AAAA;AAAA,OAGC,WAAU,CAAC,OAA2D;AAAA,IAC1E,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,KAAK,kBAAkB,MAAM,WAAW,MAAM,IAAI,kBAAkB;AAAA,MAEpE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IAAI,MAAM,OAAO,MAAM,WAAW,MAAM,EAAE;AAAA,MAE7C,MAAM,UAAU,KAAK,GAClB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,qBAAqB,OAAO;AAAA,KACpC,EAAE;AAAA;AAAA,OAGC,gBAAe,CAAC,OAA6D;AAAA,IACjF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,kBAAkB,MAAM,WAAW,MAAM,IAAI,kBAAkB;AAAA,MACrF,MAAM,gBAAgB,kBAAkB,OAAO,IAAI,KAAK,MAAM,eAAe,IAAI,IAAM,CAAC;AAAA,MACxF,MAAM,mBAAmB,2BAA2B,QAAQ;AAAA,MAE5D,IAAI,kBAAkB;AAAA,QACpB,IAAI,2BAA2B,kBAAkB,aAAa,GAAG;AAAA,UAC/D,OAAO,qBAAqB,QAAQ;AAAA,QACtC;AAAA,QAEA,MAAM,IAAI,eACR,4BAA4B,MAAM,+CACpC;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUF,EACC,IACC,aACA,MAAM,QACN,cAAc,YAAY,YAAY,GACtC,MAAM,WAAW,cAAc,mBAAmB,MAAM,MAAM,IAAI,MAClE,MAAM,WAAW,WAAW,0BAA0B,MAAM,OAAO,WAAW,IAAI,MAClF,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,qBAAqB,OAAO;AAAA,KACpC,EAAE;AAAA;AAAA,OAGC,cAAa,CAAC,OAA2D;AAAA,IAC7E,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,kBAAkB,MAAM,WAAW,MAAM,IAAI,gBAAgB;AAAA,MACnF,MAAM,cAAc,gBAAgB,OAAO,IAAI,KAAK,MAAM,eAAe,IAAI,IAAM,CAAC;AAAA,MACpF,MAAM,iBAAiB,yBAAyB,QAAQ;AAAA,MAExD,IAAI,gBAAgB;AAAA,QAClB,IAAI,2BAA2B,gBAAgB,WAAW,GAAG;AAAA,UAC3D,OAAO,qBAAqB,QAAQ;AAAA,QACtC;AAAA,QAEA,MAAM,IAAI,eACR,4BAA4B,MAAM,6CACpC;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IACC,WACA,MAAM,QACN,YAAY,YAAY,YAAY,GACpC,MAAM,WAAW,WAAW,0BAA0B,MAAM,OAAO,SAAS,IAAI,MAChF,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,qBAAqB,OAAO;AAAA,KACpC,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAAuD;AAAA,IAClE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,eACR,4BAA4B,MAAM,8BAA8B,MAAM,aACxE;AAAA,MACF;AAAA,MAEA,IAAI,oBAAoB,EAAE,QAAQ,SAAS,OAAO,CAAC,GAAG;AAAA,QACpD,MAAM,IAAI,eACR,4BAA4B,MAAM,2CAA2C,SAAS,UACxF;AAAA,MACF;AAAA,MAEA,MAAM,QAAQ,qBAAqB,OAAO,SAAS,KAAK;AAAA,MAExD,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IACC,MAAM,QACN,QACC,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,WAAW,cAAc,OAAO,0BAA0B,MAAM,KAAK,GAC3E,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,2DAA2D,EACjE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,qBAAqB,OAAO;AAAA,KACpC,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA4E;AAAA,IACxF,MAAM,MAAM,KAAK,GACd,MAAM,2DAA2D,EACjE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,qBAAqB,GAAG,IAAI;AAAA;AAAA,OAGrC,KAAI,CAAC,OAA2D;AAAA,IACpE,IAAK,MAAM,YAAY,MAAM,SAAS,WAAW,KAAM,MAAM,WAAW,WAAW,GAAG;AAAA,MACpF,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAA4B,CAAC,MAAM,SAAS;AAAA,IAElD,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,eAAe;AAAA,MACjC,KAAK,KAAK,MAAM,QAAQ;AAAA,IAC1B;AAAA,IAEA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,iBAAiB,MAAM,UAAU,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC/E,KAAK,KAAK,GAAG,MAAM,SAAS;AAAA,IAC9B;AAAA,IAEA,IAAI,MAAM,eAAe;AAAA,MACvB,IAAI,MAAM,cAAc,WAAW,GAAG;AAAA,QACpC,aAAa,KAAK,mBAAmB;AAAA,QACrC,KAAK,KAAK,QAAQ;AAAA,MACpB,EAAO;AAAA,QACL,aAAa,KACX,4CAA4C,MAAM,cAC/C,IAAI,MAAM,GAAG,EACb,KAAK,IAAI,KACd;AAAA,QACA,KAAK,KAAK,UAAU,GAAG,MAAM,aAAa;AAAA;AAAA,IAE9C;AAAA,IAEA,IAAI,MAAM,cAAc;AAAA,MACtB,aAAa,KAAK,kBAAkB;AAAA,MACpC,KAAK,KAAK,QAAQ;AAAA,MAClB,aAAa,KAAK,oBAAoB;AAAA,MACtC,KAAK,KAAK,MAAM,YAAY;AAAA,IAC9B;AAAA,IAEA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,kBAAkB;AAAA,MACpC,KAAK,KAAK,QAAQ;AAAA,MAClB,aAAa,KAAK,gBAAgB;AAAA,MAClC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IAEA,IAAI,MAAM,SAAS;AAAA,MACjB,aAAa,KAAK,kBAAkB;AAAA,MACpC,KAAK,KAAK,MAAM,QAAQ,IAAI;AAAA,MAC5B,IAAI,MAAM,QAAQ,SAAS,UAAU;AAAA,QACnC,aAAa,KAAK,oBAAoB;AAAA,QACtC,KAAK,KAAK,MAAM,QAAQ,YAAY;AAAA,QACpC,aAAa,KAAK,gBAAgB;AAAA,QAClC,KAAK,KAAK,MAAM,QAAQ,SAAS;AAAA,MACnC;AAAA,IACF;AAAA,IAEA,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IAEA,IAAI,MAAM,cAAc;AAAA,MACtB,aAAa,KAAK,sCAAsC;AAAA,MACxD,KAAK,KAAK,MAAM,aAAa,YAAY,CAAC;AAAA,IAC5C;AAAA,IAEA,IAAI,MAAM,eAAe;AAAA,MACvB,aAAa,KAAK,sCAAsC;AAAA,MACxD,KAAK,KAAK,MAAM,cAAc,YAAY,CAAC;AAAA,IAC7C;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC9C,MAAM,SAAS,MAAM,UAAU;AAAA,IAC/B,MAAM,QAAQ,MAAM;AAAA,IAEpB,MAAM,WAAW,KAAK,GACnB,MAAM,6CAA6C,OAAO,EAC1D,IAAI,GAAG,IAAI;AAAA,IAEd,IAAI,QAAQ;AAAA;AAAA,QAER;AAAA,iDACyC,aAAa;AAAA;AAAA,IAE1D,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAE1B,IAAI,UAAU,WAAW;AAAA,MACvB,SAAS;AAAA,MACT,UAAU,KAAK,OAAO,MAAM;AAAA,IAC9B,EAAO,SAAI,SAAS,GAAG;AAAA,MACrB,SAAS;AAAA,MACT,UAAU,KAAK,MAAM;AAAA,IACvB;AAAA,IAEA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAClD,MAAM,OAAO,KAAK,IAAI,CAAC,QAAQ,qBAAqB,GAAG,CAAC;AAAA,IAExD,OAAO;AAAA,MACL;AAAA,MACA,SAAS,SAAS,KAAK,SAAS,SAAS;AAAA,MACzC,OAAO,SAAS;AAAA,IAClB;AAAA;AAAA,EAGF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,iBAAiB,CAAC,WAAmB,IAAY,WAAgC;AAAA,IACvF,MAAM,WAAW,KAAK,GACnB,MAAM,2DAA2D,EACjE,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,eACR,4BAA4B,8BAA8B,aAC5D;AAAA,IACF;AAAA,IAEA,IAAI,SAAS,WAAW,WAAW;AAAA,MACjC,MAAM,IAAI,eACR,4BAA4B,cAAc,0BAA0B,SAAS,UAC/E;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAEX;AAEA,SAAS,kBAAkB,CAAC,OAA0B;AAAA,EACpD,OAAO,KAAK,UAAU,KAAK;AAAA;AAG7B,SAAS,kBAAkB,CAAC,KAAgD;AAAA,EAC1E,OAAO,IAAI,UAAU,OAAO,YAAY,sBAAsB,IAAI,KAAK;AAAA;AAGzE,SAAS,iBAAkF,CACzF,OACA,eAC0B;AAAA,EAC1B,OAAO,sBAAsB,OAAO,aAAa;AAAA;AAGnD,SAAS,0BAA0B,CAAC,KAAwD;AAAA,EAC1F,IAAI,CAAC,IAAI,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,IAAI,yBACpB,IAAI,KAAK,IAAI,sBAAsB,IACnC,IAAI,KAAK,IAAI,SAAS;AAAA,EAE1B,IAAI,IAAI,qBAAqB,aAAa;AAAA,IACxC,OAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA,QACE,IAAI,qBAAqB,OAAO,OAAQ,KAAK,MAAM,IAAI,gBAAgB;AAAA,IAC3E;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,OAAO,kBAAkB,IAAI,iBAAiB,WAAW;AAAA,EAC3D;AAAA;AAGF,SAAS,wBAAwB,CAAC,KAAsD;AAAA,EACtF,IAAI,CAAC,IAAI,gBAAgB;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,IAAI,uBACpB,IAAI,KAAK,IAAI,oBAAoB,IACjC,IAAI,KAAK,IAAI,SAAS;AAAA,EAE1B,IAAI,IAAI,mBAAmB,aAAa;AAAA,IACtC,OAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,OAAO,kBAAkB,IAAI,eAAe,SAAS;AAAA,EACvD;AAAA;AAGF,SAAS,iBAAiB,CACxB,OACA,aAC0B;AAAA,EAC1B,IAAI,MAAM,WAAW,aAAa;AAAA,IAChC,OAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ,MAAM;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AAAA;AAGF,SAAS,eAAe,CACtB,OACA,aACwB;AAAA,EACxB,IAAI,MAAM,WAAW,aAAa;AAAA,IAChC,OAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AAAA;AAGF,SAAS,oBAAoB,CAAC,KAAmC;AAAA,EAC/D,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,UAAU,IAAI;AAAA,IACd,SAAS,mBAAmB,GAAG;AAAA,IAC/B,QAAQ,IAAI;AAAA,IACZ,OAAO,IAAI,SAAS;AAAA,IACpB,UAAU,IAAI,KAAK,IAAI,SAAS;AAAA,IAChC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,QAAQ,KAAK,MAAM,IAAI,MAAM;AAAA,IAC7B,gBAAgB,IAAI;AAAA,IACpB,WAAW,2BAA2B,GAAG;AAAA,IACzC,SAAS,yBAAyB,GAAG;AAAA,IACrC,OAAO,mBAAmB,GAAG;AAAA,EAC/B;AAAA;AAGF,SAAS,kBAAkB,CAAC,KAAiC;AAAA,EAC3D,IAAI,IAAI,iBAAiB,QAAQ;AAAA,IAC/B,OAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAAA,EAEA,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,YAAY;AAAA,IAC1C,MAAM,IAAI,eAAe,4BAA4B,IAAI,oCAAoC;AAAA,EAC/F;AAAA,EAEA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI;AAAA,EACjB;AAAA;AAGF,SAAS,uBAAuB,CAAC,OAAyB;AAAA,EACxD,OAAO,iBAAiB,SAAS,MAAM,QAAQ,SAAS,0BAA0B;AAAA;;;AGrsBpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;;;ACNA;AACA;AACA;AAAA;AAAA;AAAA;AA4FO,SAAS,iBAAiB,CAAC,KAAwC;AAAA,EACxE,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,gBAAgB,EAAE,MAAM,IAAI,sBAAsB,IAAI,IAAI,mBAAmB;AAAA,IAC7E,OAAO,IAAI,SAAS;AAAA,OAChB,IAAI,iBAAiB,OACrB,CAAC,IACD;AAAA,MACE,cAAc,KAAK,MAAM,IAAI,aAAa;AAAA,IAC5C;AAAA,OACA,IAAI,kBAAkB,OACtB,CAAC,IACD,EAAE,eAAe,iCAAiC,KAAK,MAAM,IAAI,cAAc,CAAC,EAAE;AAAA,IACtF,QAAQ,IAAI;AAAA,IACZ,aAAa,IAAI;AAAA,IACjB,eAAe,IAAI,kBAAkB,IAAI,KAAK,IAAI,eAAe,IAAI;AAAA,IACrE,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGK,SAAS,cAAc,CAAC,KAAkC;AAAA,EAC/D,MAAM,OAAO;AAAA,IACX,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI,YAAY;AAAA,IACzB,cAAc,2BAA2B,IAAI,aAAa;AAAA,IAC1D,OAAO,IAAI,UAAU,OAAO,YAAY,iBAAiB,IAAI,OAAO,uBAAuB;AAAA,IAC3F,aACE,IAAI,gBAAgB,OAAO,YAAa,KAAK,MAAM,IAAI,WAAW;AAAA,IACpE,SAAS,IAAI;AAAA,IACb,WACE,IAAI,mBAAmB,IAAI,mCACvB;AAAA,MACE,OAAO,IAAI;AAAA,MACX,qBAAqB,IAAI,KAAK,IAAI,gCAAgC;AAAA,IACpE,IACA;AAAA,IACN,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,aAAa,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,EAC/D;AAAA,EACA,IAAI,IAAI,SAAS,gBAAgB;AAAA,IAC/B,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,oBAAoB;AAAA,MAC7C,MAAM,IAAI,MACR,0CAA0C,IAAI,mCAChD;AAAA,IACF;AAAA,IACA,OAAO;AAAA,SACF;AAAA,MACH,MAAM;AAAA,MACN,UAAU,IAAI;AAAA,MACd,kBAAkB,IAAI;AAAA,SAClB,IAAI,SAAS,OAAO,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,IAAI,IAAI,EAA8B;AAAA,IACxF;AAAA,EACF;AAAA,EACA,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,aAAa,IAAI,SAAS,MAAM;AAAA,IAC7D,MAAM,IAAI,MAAM,8BAA8B,IAAI,mCAAmC;AAAA,EACvF;AAAA,EACA,OAAO;AAAA,OACF;AAAA,IACH,MAAM;AAAA,IACN,aAAa,IAAI;AAAA,IACjB,UAAU,IAAI;AAAA,IACd,MAAM,KAAK,MAAM,IAAI,IAAI;AAAA,OACrB,IAAI,WAAW,OAAO,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,IAAI,MAAM,EAAuB;AAAA,EACvF;AAAA;AAGK,SAAS,kBAAkB,CAAC,KAA0C;AAAA,EAC3E,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,UAAU,IAAI;AAAA,IACd,OAAO,IAAI;AAAA,IACX,MAAM,IAAI;AAAA,IACV,iBAAiB,qBAAqB,IAAI,uBAAuB,IAAI,mBAAmB;AAAA,IACxF,KAAK,IAAI;AAAA,IACT,OAAO,KAAK,MAAM,IAAI,KAAK;AAAA,IAG3B,UAAU,IAAI,aAAa,OAAO,YAAa,KAAK,MAAM,IAAI,QAAQ,KAAK;AAAA,IAC3E,gBAAgB,IAAI;AAAA,IACpB,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,aAAa,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,EAC/D;AAAA;AAGK,SAAS,4BAA4B,CAC1C,KAC8B;AAAA,EAC9B,IAAI,IAAI,2BAA2B,GAAG;AAAA,IACpC,MAAM,IAAI,MACR,6EAA6E,IAAI,0BACnF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,UAAU,IAAI;AAAA,IACd,gBAAgB,IAAI;AAAA,IACpB,sBAAsB,IAAI,0BAA0B;AAAA,IACpD,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,IACb,sBAAsB;AAAA,IACtB,sBAAsB,IAAI;AAAA,IAC1B,iBAAiB,IAAI;AAAA,IACrB,4BAA4B,IAAI;AAAA,IAChC,2BAA2B,IAAI;AAAA,IAC/B,gBAAgB,IAAI;AAAA,IACpB,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGF,SAAS,oBAAoB,CAC3B,MACA,IACuB;AAAA,EACvB,OAAO,QAAQ,KAAK,EAAE,MAAM,GAAG,IAAI;AAAA;AAK9B,SAAS,cAAoB,CAAC,OAQqD;AAAA,EACxF,MAAM,QAAQ,SAAS,MAAM,aAAa,KAAK,OAAO;AAAA,EACtD,MAAM,SAAS,MAAM,UAAU;AAAA,EAE/B,MAAM,WAAW,MAAM,GACpB,MAAM,iCAAiC,MAAM,SAAS,OAAO,EAC7D,IAAI,GAAG,MAAM,IAAI;AAAA,EAEpB,IAAI,QAAQ,iBAAiB,MAAM,SAAS,kBAAkB,MAAM;AAAA,EACpE,MAAM,YAAY,CAAC,GAAG,MAAM,IAAI;AAAA,EAEhC,IAAI,MAAM,UAAU,WAAW;AAAA,IAC7B,SAAS;AAAA,IACT,UAAU,KAAK,MAAM,OAAO,MAAM;AAAA,EACpC,EAAO,SAAI,SAAS,GAAG;AAAA,IACrB,SAAS;AAAA,IACT,UAAU,KAAK,MAAM;AAAA,EACvB;AAAA,EAEA,MAAM,OAAO,MAAM,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,EACnD,MAAM,QAAQ,SAAS;AAAA,EACvB,OAAO,EAAE,MAAM,OAAO,SAAS,SAAS,KAAK,SAAS,MAAM;AAAA;;;ADnO9D,IAAM,sCAAsC;AAAA;AAErC,MAAM,kCAAyE;AAAA,EACvD;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAAiF;AAAA,IAC5F,wCAAwC,OAAO,YAAY;AAAA,IAE3D,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,SAAS,KAAK,GACjB,MAAM,0DAA0D,EAChE,IAAI,MAAM,WAAW,MAAM,cAAc;AAAA,MAC5C,MAAM,YAAY,KAAK,GACpB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,MACtC,sCAAsC;AAAA,QACpC,QAAQ;AAAA,QACR,KAAK,SAAS,eAAe,MAAM,IAAI;AAAA,QACvC,QAAQ,YAAY,kBAAkB,SAAS,IAAI;AAAA,QACnD,QAAQ;AAAA,MACV,CAAC;AAAA,MAED,MAAM,SAAS,KAAK,WAAW,MAAM,WAAW,MAAM,QAAQ;AAAA,MAC9D,MAAM,UAAU,KAAK,GAClB,MACC,gGACF,EACC,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,MAEtC,MAAM,iBAAiB,KAAK,GACzB,MACC,wFACF,EACC,IAAI,MAAM,WAAW,MAAM,cAAc;AAAA,MAC5C,IAAI,gBAAgB;AAAA,QAClB,MAAM,SAAS,6BAA6B,cAAc;AAAA,QAC1D,IAAI,yCAAyC,QAAQ,KAAK,GAAG;AAAA,UAC3D,wCAAwC;AAAA,YACtC,QAAQ;AAAA,YACR,UAAU;AAAA,YACV;AAAA,YACA,SAAS,QAAQ;AAAA,YACjB,QAAQ;AAAA,UACV,CAAC;AAAA,UACD,OAAO;AAAA,QACT;AAAA,QACA,MAAM,IAAI,kBACR,iBACA,2BAA2B,MAAM,iEACnC;AAAA,MACF;AAAA,MAEA,MAAM,cAAc,KAAK,GACtB,MAAM,yEAAyE,EAC/E,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,IAAI,aAAa;AAAA,QACf,MAAM,IAAI,kBACR,gBACA,0CAA0C,MAAM,mCAAmC,MAAM,aAC3F;AAAA,MACF;AAAA,MAEA,MAAM,mBAAmB,KAAK,GAC3B,MACC,0GACF,EACC,IAAI,MAAM,WAAW,MAAM,UAAU,MAAM,oBAAoB;AAAA,MAClE,oCAAoC;AAAA,QAClC,QAAQ;AAAA,QACR;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB,eAAe,mBAAmB,mBAAmB,gBAAgB,IAAI;AAAA,QACzE,QAAQ;AAAA,MACV,CAAC;AAAA,MAED,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,MACzC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAkBF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,UACN,MAAM,gBACN,MAAM,8BACN,MAAM,QACN,MAAM,SACN,MAAM,sBACN,MAAM,sBACN,MAAM,iBACN,MAAM,4BACN,MAAM,2BACN,MAAM,gBACN,UAAU,YAAY,CACxB;AAAA,MAEF,OAAO,KAAK,YAAY,MAAM,WAAW,MAAM,EAAE;AAAA,KAClD,EAAE;AAAA;AAAA,OAGC,UAAS,CAAC,OAGiC;AAAA,IAC/C,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,QAAQ;AAAA;AAAA,OAGlD,YAAW,CAAC,OAGmC;AAAA,IACnD,MAAM,SAAS,CAAC,GAAG,IAAI,IAAI,MAAM,MAAM,CAAC;AAAA,IACxC,IAAI,OAAO,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAEjC,MAAM,OAAoC,CAAC;AAAA,IAC3C,SAAS,SAAS,EAAG,SAAS,OAAO,QAAQ,UAAU,qCAAqC;AAAA,MAC1F,MAAM,QAAQ,OAAO,MAAM,QAAQ,SAAS,mCAAmC;AAAA,MAC/E,MAAM,eAAe,MAAM,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,MACnD,KAAK,KACH,GAAI,KAAK,GACN,MACC,0FAA0F,eAC5F,EACC,IAAI,MAAM,WAAW,GAAG,KAAK,CAClC;AAAA,IACF;AAAA,IACA,MAAM,UAAU,IAAI,IAClB,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,mBAAmB,6BAA6B,GAAG,CAAC,CAAU,CACvF;AAAA,IACA,OAAO,OAAO,QAAQ,CAAC,UAAU;AAAA,MAC/B,MAAM,aAAa,QAAQ,IAAI,KAAK;AAAA,MACpC,OAAO,aAAa,CAAC,UAAU,IAAI,CAAC;AAAA,KACrC;AAAA;AAAA,EAGK,UAAU,CAAC,WAAmB,UAAuD;AAAA,IAC3F,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,WAAW,QAAQ;AAAA,IAC1B,OAAO,MAAM,6BAA6B,GAAG,IAAI;AAAA;AAAA,EAG3C,WAAW,CAAC,WAAmB,IAA0C;AAAA,IAC/E,MAAM,MAAM,KAAK,GACd,MAAM,yEAAyE,EAC/E,IAAI,WAAW,EAAE;AAAA,IACpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,kBACR,iBACA,yDAAyD,oBAAoB,aAC/E;AAAA,IACF;AAAA,IACA,OAAO,6BAA6B,GAAG;AAAA;AAE3C;;;AE3MA;AACA;AAAA,uBAGE;AAAA;;;ACLK,SAAS,wBAAuB,CAAC,OAAyB;AAAA,EAC/D,OAAO,iBAAiB,SAAS,MAAM,QAAQ,SAAS,0BAA0B;AAAA;AAG7E,SAAS,2BAA2B,CAAC,OAAyB;AAAA,EACnE,OAAO,iBAAiB,SAAS,MAAM,QAAQ,SAAS,+BAA+B;AAAA;;;ADUlF,MAAM,wBAAqD;AAAA,EACnC;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAA6D;AAAA,IACxE,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,IAEzC,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,SAAS,KAAK,GACjB,MAAM,wEAAwE,EAC9E,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,MAEtC,IAAI,CAAC,QAAQ;AAAA,QACX,MAAM,IAAI,mBACR,oBACA,8BAA8B,MAAM,oCAAoC,MAAM,aAChF;AAAA,MACF;AAAA,MAEA,IAAI,MAAM,UAAU,MAAM;AAAA,QACxB,MAAM,MAAM,KAAK,GACd,MAAM,qEAAqE,EAC3E,IAAI,MAAM,WAAW,MAAM,KAAK;AAAA,QAEnC,IAAI,CAAC,KAAK;AAAA,UACR,MAAM,IAAI,mBACR,iBACA,2BAA2B,MAAM,iCAAiC,MAAM,aAC1E;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,SAAS,KAAK,GACjB,MACC,qGACF,EACC,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,MAEtC,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAiBF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,UACN,MAAM,OACN,MAAM,MACN,MAAM,iBAAiB,QAAQ,MAC/B,MAAM,iBAAiB,MAAM,MAC7B,OAAO,MACP,KAAK,UAAU,MAAM,KAAK,GAC1B,MAAM,aAAa,YAAY,OAAO,KAAK,UAAU,MAAM,QAAQ,GACnE,+BACA,UAAU,YAAY,GACtB,MAAM,cAAc,MAAM,YAAY,YAAY,IAAI,IACxD;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,IAAI,mBACR,gBACA,+BAA+B,MAAM,mCAAmC,MAAM,aAChF;AAAA,QACF;AAAA,QAEA,MAAM;AAAA;AAAA,MAGR,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IAAI,UAAU,YAAY,GAAG,UAAU,YAAY,GAAG,MAAM,WAAW,MAAM,QAAQ;AAAA,MAExF,OAAO,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,KACrD,EAAE;AAAA;AAAA,OAGC,cAAa,CAAC,OAAuD;AAAA,IACzE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,SAAS,KAAK,GACjB,MAAM,wEAAwE,EAC9E,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,MAEtC,IAAI,CAAC,QAAQ;AAAA,QACX,MAAM,IAAI,mBACR,oBACA,8BAA8B,MAAM,oCAAoC,MAAM,aAChF;AAAA,MACF;AAAA,MAEA,MAAM,UAAU,KAAK,GAClB,MAAM,kFAAkF,EACxF,IAAI,MAAM,WAAW,MAAM,UAAU,MAAM,KAAK;AAAA,MACnD,IAAI,QAAQ,YAAY,GAAG;AAAA,QACzB,OAAO;AAAA,MACT;AAAA,MAEA,MAAM,YAAY,IAAI,KAAK,EAAE,YAAY;AAAA,MACzC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAeF,EACC,IACC,MAAM,WACN,MAAM,UACN,MAAM,WACN,MAAM,UACN,WACA,MAAM,WACN,MAAM,QACR;AAAA,MAEF,OAAO,QAAQ;AAAA,KAChB,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA+E;AAAA,IAC3F,MAAM,MAAM,KAAK,GACd,MAAM,8DAA8D,EACpE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,mBAAmB,GAAG,IAAI;AAAA;AAAA,OAGnC,KAAI,CAAC,OAAiE;AAAA,IAC1E,IAAI,MAAM,UAAU,aAAa,MAAM,MAAM,WAAW,GAAG;AAAA,MACzD,OAAO,EAAE,UAAU,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IAClD;AAAA,IAEA,MAAM,eAAe,CAAC,kBAAkB,eAAe;AAAA,IACvD,MAAM,OAAsB,CAAC,MAAM,WAAW,MAAM,QAAQ;AAAA,IAE5D,IAAI,MAAM,aAAa,WAAW;AAAA,MAChC,aAAa,KAAK,SAAS;AAAA,MAC3B,KAAK,KAAK,MAAM,QAAQ;AAAA,IAC1B;AAAA,IAEA,IAAI,MAAM,OAAO;AAAA,MACf,aAAa,KAAK,YAAY,MAAM,MAAM,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MACtE,KAAK,KAAK,GAAG,MAAM,KAAK;AAAA,IAC1B;AAAA,IAEA,MAAM,MAAM,MAAM,UAAU,SAAS,SAAS;AAAA,IAC9C,QAAQ,MAAM,OAAO,YAAY,eAAgC;AAAA,MAC/D,IAAI,KAAK;AAAA,MACT,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,SAAS,OAAO;AAAA,MAChB,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO,EAAE,UAAU,KAAK,IAAI,kBAAkB,GAAG,SAAS,MAAM;AAAA;AAAA,EAG1D,cAAc,CAAC,WAAmB,IAAgC;AAAA,IACxE,MAAM,MAAM,KAAK,GACd,MAAM,8DAA8D,EACpE,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,mBACR,iBACA,8CAA8C,oBAAoB,aACpE;AAAA,IACF;AAAA,IAEA,OAAO,mBAAmB,GAAG;AAAA;AAEjC;;;AE3NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA,6BACE;AAAA,uBAGA;AAAA;;;ACCK,SAAS,gBAAgB,CAAC,OAA4D;AAAA,EAC3F,OAAO,MAAM,aAAa,aAAa,MAAM,SAAS,WAAW;AAAA;AAQ5D,SAAS,oBAAoB,CAClC,cACA,MACA,OAKA,sBAA2C,cACrC;AAAA,EACN,IAAI,MAAM,UAAU;AAAA,IAClB,IAAI,MAAM,SAAS,WAAW,GAAG;AAAA,MAC/B,aAAa,KAAK,OAAO;AAAA,IAC3B,EAAO;AAAA,MACL,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA;AAAA,EAE/B;AAAA,EAEA,IAAI,MAAM,cAAc;AAAA,IACtB,aAAa,KAAK,GAAG,0BAA0B;AAAA,IAC/C,KAAK,KAAK,MAAM,aAAa,YAAY,CAAC;AAAA,EAC5C;AAAA,EAEA,IAAI,MAAM,eAAe;AAAA,IACvB,aAAa,KAAK,GAAG,0BAA0B;AAAA,IAC/C,KAAK,KAAK,MAAM,cAAc,YAAY,CAAC;AAAA,EAC7C;AAAA;AAGK,SAAS,YAAkB,CAAC,OAQuD;AAAA,EACxF,MAAM,QAAQ,SAAS,MAAM,aAAa,KAAK,OAAO;AAAA,EACtD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,EAC9C,MAAM,SAAS,MAAM,UAAU;AAAA,EAE/B,MAAM,WAAW,MAAM,GACpB,MAAM,iCAAiC,MAAM,aAAa,OAAO,EACjE,IAAI,GAAG,MAAM,IAAI;AAAA,EAEpB,MAAM,cACJ,MAAM,cAAc,eAChB,qCACA,MAAM,cAAc,eAAe,MAAM,cAAc,kBACrD,oCACA,MAAM,cAAc,6BAClB,eACA;AAAA,EACV,MAAM,WAAW,MAAM,cAAc,6BAA6B,gBAAgB;AAAA,EAClF,IAAI,QAAQ;AAAA,oBACM,MAAM;AAAA,MACpB;AAAA,eACS,eAAe,UAAU,YAAY;AAAA;AAAA,EAElD,MAAM,YAAY,CAAC,GAAG,MAAM,IAAI;AAAA,EAEhC,IAAI,MAAM,UAAU,WAAW;AAAA,IAC7B,SAAS;AAAA,IACT,UAAU,KAAK,MAAM,OAAO,MAAM;AAAA,EACpC,EAAO,SAAI,SAAS,GAAG;AAAA,IACrB,SAAS;AAAA,IACT,UAAU,KAAK,MAAM;AAAA,EACvB;AAAA,EAEA,MAAM,OAAO,MAAM,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,EACnD,MAAM,QAAQ,SAAS;AAAA,EAEvB,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,SAAS,SAAS,KAAK,SAAS;AAAA,EAClC;AAAA;;;ADjEF,IAAM,2BAA2B;AAAA;AAE1B,MAAM,oBAA6C;AAAA,EAErC;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,YACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,OAAM,CAAC,OAAiE;AAAA,IAC5E,+BAA+B,MAAM,MAAM,YAAY;AAAA,IACvD,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,IACzC,MAAM,wBAAwB;AAAA,MAC5B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,IAED,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,SAAS,KAAK,GACjB,MAAM,yEAAyE,EAC/E,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,MAEtC,IAAI,CAAC,QAAQ;AAAA,QACX,MAAM,IAAI,mBACR,oBACA,8BAA8B,MAAM,oCAAoC,MAAM,aAChF;AAAA,MACF;AAAA,MACA,IAAI,OAAO,kBAAkB,MAAM;AAAA,QACjC,MAAM,IAAI,mBACR,qBACA,8BAA8B,MAAM,wCAAwC,OAAO,iBACrF;AAAA,MACF;AAAA,MAEA,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAcF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,UACN,MAAM,kBACN,KAAK,UAAU,MAAM,IAAI,GACzB,UAAU,YAAY,CACxB;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,IAAI,mBACR,gBACA,2BAA2B,MAAM,mCAAmC,MAAM,aAC5E;AAAA,QACF;AAAA,QAEA,MAAM;AAAA;AAAA,MAGR,KAAK,GACF,MACC,4FACF,EACC,IAAI,MAAM,IAAI,UAAU,YAAY,GAAG,MAAM,WAAW,MAAM,QAAQ;AAAA,MAEzE,MAAM,UAAU,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,MACzD,IAAI,QAAQ,SAAS,gBAAgB;AAAA,QACnC,MAAM,IAAI,MAAM,kCAAkC,MAAM,kCAAkC;AAAA,MAC5F;AAAA,MACA,OAAO;AAAA,KACR,EAAE;AAAA;AAAA,OAGC,eAAc,CAAC,OAA2D;AAAA,IAC9E,6BAA6B,OAAO,YAAY;AAAA,IAChD,MAAM,YAAY,MAAM,wBAAwB;AAAA,MAC9C,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,IAED,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,YAAY,KAAK,GACpB,MAAM,0DAA0D,EAChE,IAAI,MAAM,WAAW,MAAM,WAAW;AAAA,MACzC,IAAI,CAAC,aAAa,UAAU,SAAS,gBAAgB;AAAA,QACnD,MAAM,IAAI,mBACR,iBACA,kCAAkC,MAAM,6BAC1C;AAAA,MACF;AAAA,MAEA,MAAM,cAAc,KAAK,GACtB,MAAM,0DAA0D,EAChE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,IAAI,aAAa;AAAA,QACf,MAAM,WAAW,eAAe,WAAW;AAAA,QAC3C,IAAI,8BAA8B,UAAU,KAAK;AAAA,UAAG,OAAO;AAAA,QAC3D,MAAM,IAAI,mBACR,gBACA,8BAA8B,MAAM,qDACtC;AAAA,MACF;AAAA,MACA,IAAI,UAAU,WAAW,WAAW;AAAA,QAClC,MAAM,IAAI,mBACR,iBACA,kCAAkC,UAAU,+BAA+B,UAAU,WACvF;AAAA,MACF;AAAA,MACA,IACE,UAAU,OAAO,SAAS,eAC1B,UAAU,OAAO,gBAAgB,UAAU,cAC3C;AAAA,QACA,MAAM,IAAI,mBACR,iBACA,oCAAoC,UAAU,2CAA2C,UAAU,gBACrG;AAAA,MACF;AAAA,MACA,IAAI,UAAU,oBAAoB,MAAM,sBAAsB;AAAA,QAC5D,MAAM,IAAI,mBACR,kBACA,kCAAkC,UAAU,2CAC9C;AAAA,MACF;AAAA,MAEA,MAAM,QAAQ,KAAK,GAChB,MACC;AAAA,0FAEF,EACC,IAAI,MAAM,WAAW,MAAM,WAAW;AAAA,MACzC,IAAI,MAAM,SAAS,MAAM,mBAAmB;AAAA,QAC1C,MAAM,IAAI,mBACR,sBACA,2BAA2B,UAAU,mBAAmB,MAAM,yBAChE;AAAA,MACF;AAAA,MAEA,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,WAMF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,aACN,MAAM,UACN,KAAK,UAAU,MAAM,IAAI,IACxB,MAAM,aAAa,IAAI,MAAQ,YAAY,CAC9C;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,IAAI,mBACR,gBACA,8BAA8B,MAAM,+CACtC;AAAA,QACF;AAAA,QACA,MAAM;AAAA;AAAA,MAGR,MAAM,UAAU,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,MACzD,IAAI,QAAQ,SAAS,YAAY;AAAA,QAC/B,MAAM,IAAI,MAAM,iCAAiC,MAAM,kCAAkC;AAAA,MAC3F;AAAA,MACA,OAAO;AAAA,KACR,EAAE;AAAA;AAAA,OAGC,MAAK,CAAC,OAAoD;AAAA,IAC9D,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,IACzC,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,KAAK,cAAc,MAAM,WAAW,MAAM,IAAI,QAAQ;AAAA,MACtD,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IACC,MAAM,WAAW,MACjB,MAAM,UAAU,OAChB,MAAM,UAAU,oBAAoB,YAAY,GAChD,UAAU,YAAY,GACtB,MAAM,WACN,MAAM,EACR;AAAA,MAEF,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,KACjD,EAAE;AAAA;AAAA,OAGC,aAAY,CAAC,OAA2D;AAAA,IAC5E,MAAM,cAAc,MAAM,eAAe,IAAI;AAAA,IAC7C,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,IAAI,QAAQ;AAAA,MAClE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,MAAM,QACN,MAAM,UAAU,YACZ,OACA,qBAAqB,MAAM,OAAO,wBAAuB,GAC7D,YAAY,YAAY,GACxB,MAAM,WACN,MAAM,EACR;AAAA,MACF,KAAK,cAAc,KAAK,WAAW;AAAA,MACnC,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,KACjD,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,OAAsD;AAAA,IAClE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,MAC7C,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQF,EACC,IACC,MAAM,UAAU,OAChB,MAAM,UAAU,oBAAoB,YAAY,GAChD,MAAM,WACN,MAAM,EACR;AAAA,MAEF,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,KACjD,EAAE;AAAA;AAAA,OAGC,0BAAyB,CAC7B,OACyB;AAAA,IACzB,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,MACzD,IAAI,IAAI,oBAAoB,MAAM,gBAAgB;AAAA,QAChD,MAAM,IAAI,mBACR,kBACA,mEAAmE,MAAM,MAC3E;AAAA,MACF;AAAA,MACA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IAAI,MAAM,oBAAoB,YAAY,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MACzE,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,KACjD,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAAqD;AAAA,IAChE,MAAM,cAAc,MAAM,eAAe,IAAI;AAAA,IAC7C,MAAM,aACJ,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,qBAAqB,MAAM,OAAO,wBAAuB;AAAA,IAE/D,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,MAEzD,IAAI,IAAI,oBAAoB,MAAM,gBAAgB;AAAA,QAChD,MAAM,IAAI,mBACR,kBACA,mEAAmE,MAAM,MAC3E;AAAA,MACF;AAAA,MACA,IAAI,MAAM,WAAW,eAAe,IAAI,SAAS,YAAY;AAAA,QAC3D,wBAAwB,MAAM,QAAQ,IAAI,IAAI,YAAY;AAAA,MAC5D;AAAA,MACA,IACE,MAAM,WAAW,eACjB,IAAI,SAAS,kBACb,MAAM,WAAW,WACjB;AAAA,QACA,MAAM,IAAI,mBACR,iBACA,0CAA0C,IAAI,uCAChD;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcF,EACC,IACC,MAAM,QACN,MAAM,WAAW,MACjB,MAAM,gBAAgB,MACtB,YACA,MAAM,gBAAgB,YAAY,OAAO,KAAK,UAAU,MAAM,WAAW,GACzE,MAAM,WAAW,eAAe,MAAM,WAAW,YAC7C,KAAK,UAAU,MAAM,MAAM,IAC3B,MACJ,YAAY,YAAY,GACxB,MAAM,WACN,MAAM,EACR;AAAA,MAEF,KAAK,cAAc,KAAK,WAAW;AAAA,MAEnC,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,KACjD,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA2E;AAAA,IACvF,MAAM,MAAM,KAAK,GACd,MAAM,0DAA0D,EAChE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,eAAe,GAAG,IAAI;AAAA;AAAA,OAG/B,SAAQ,CAAC,QAGwB;AAAA,IACrC,MAAM,MAAM,CAAC,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC;AAAA,IACnC,IAAI,IAAI,WAAW,GAAG;AAAA,MACpB,OAAO,CAAC;AAAA,IACV;AAAA,IAEA,MAAM,OAAsB,CAAC;AAAA,IAC7B,SAAS,SAAS,EAAG,SAAS,IAAI,QAAQ,UAAU,0BAA0B;AAAA,MAC5E,MAAM,QAAQ,IAAI,MAAM,QAAQ,SAAS,wBAAwB;AAAA,MACjE,MAAM,eAAe,MAAM,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,MACnD,KAAK,KACH,GAAI,KAAK,GACN,MAAM,4DAA4D,eAAe,EACjF,IAAI,OAAO,WAAW,GAAG,KAAK,CACnC;AAAA,IACF;AAAA,IACA,MAAM,OAAO,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC;AAAA,IACrE,OAAO,IAAI,QAAQ,CAAC,OAAO;AAAA,MACzB,MAAM,MAAM,KAAK,IAAI,EAAE;AAAA,MACvB,OAAO,MAAM,CAAC,GAAG,IAAI,CAAC;AAAA,KACvB;AAAA;AAAA,OAGG,KAAI,CAAC,OAAyD;AAAA,IAClE,IAAI,iBAAiB,KAAK,KAAK,MAAM,OAAO,WAAW,GAAG;AAAA,MACxD,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IAC9C;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,OAAO;AAAA,MACf,aAAa,KAAK,YAAY,MAAM,MAAM,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MACtE,KAAK,KAAK,GAAG,MAAM,KAAK;AAAA,IAC1B;AAAA,IAEA,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,eAAe;AAAA,MACjC,KAAK,KAAK,MAAM,QAAQ;AAAA,IAC1B;AAAA,IAEA,IAAI,MAAM,aAAa;AAAA,MACrB,aAAa,KAAK,mBAAmB;AAAA,MACrC,KAAK,KAAK,MAAM,WAAW;AAAA,IAC7B;AAAA,IAEA,qBAAqB,cAAc,MAAM,OAAO,kCAAkC;AAAA,IAElF,QAAQ,MAAM,OAAO,YAAY,aAA0B;AAAA,MACzD,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO,EAAE,MAAM,KAAK,IAAI,cAAc,GAAG,SAAS,MAAM;AAAA;AAAA,EAGlD,cAAc,CAAC,WAAmB,IAAyB;AAAA,IACjE,OAAO,KAAK,cAAc,WAAW,IAAI,SAAS;AAAA;AAAA,EAG5C,aAAa,CACnB,WACA,IACA,QACa;AAAA,IACb,MAAM,MAAM,KAAK,GACd,MAAM,0DAA0D,EAChE,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,mBACR,iBACA,2BAA2B,8BAA8B,aAC3D;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,WAAW,QAAQ;AAAA,MACzB,MAAM,IAAI,mBACR,iBACA,2BAA2B,cAAc,mBAAmB,IAAI,WAClE;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,aAAa,CAAC,KAAkB,aAAyB;AAAA,IAC/D,IAAI,IAAI,SAAS;AAAA,MAAgB;AAAA,IACjC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,OAKF,EACC,IAAI,YAAY,YAAY,GAAG,IAAI,YAAY,IAAI,WAAW,IAAI,EAAE;AAAA;AAAA,EAGjE,UAAU,CAAC,WAAmB,IAA4B;AAAA,IAChE,MAAM,MAAM,KAAK,GACd,MAAM,0DAA0D,EAChE,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,mBACR,iBACA,2BAA2B,8BAA8B,aAC3D;AAAA,IACF;AAAA,IAEA,OAAO,eAAe,GAAG;AAAA;AAE7B;;;AEhhBA;AAAA,sCACE;AAAA;AAAA;AAGF;AAAA,uBACE;AAAA;AAmBK,MAAM,uBAAmD;AAAA,EACjC;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,kBAAiB,CACrB,OACkC;AAAA,IAClC,OAAO,KAAK,GACT,YAAY,MAAM;AAAA,MACjB,MAAM,MACJ,MAAM,WAAW,aACb,OACC,KAAK,GACH,MAAM,0DAA0D,EAChE,IAAI,MAAM,WAAW,MAAM,KAAK;AAAA,MACzC,MAAM,SAAS,KAAK,cAAc,MAAM,WAAW,MAAM,EAAE;AAAA,MAC3D,MAAM,QAAQ,6BAA6B,QAAQ,MAAM,eAAe,GAAG,IAAI,MAAM,KAAK;AAAA,MAC1F,KAAK,GACF,MAAM,4EAA4E,EAClF,IAAI,KAAK,UAAU,KAAK,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MACvD,OAAO;AAAA,KACR,EACA,UAAU;AAAA;AAAA,OAGT,OAAM,CAAC,OAA2D;AAAA,IACtE,MAAM,gBACJ,MAAM,kBAAkB,YACpB,OACA,KAAK,UAAU,kCAAiC,MAAM,aAAa,CAAC;AAAA,IAC1E,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,IACzC,MAAM,YAAY,MAAM,aAAa;AAAA,IAErC,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAgBF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,eAAe,MACrB,MAAM,eAAe,IACrB,MAAM,SAAS,MACf,eACA,MAAM,UAAU,UAChB,UAAU,YAAY,GACtB,UAAU,YAAY,CACxB;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,mBACR,gBACA,8BAA8B,MAAM,mCAAmC,MAAM,aAC/E;AAAA,MACF;AAAA,MAEA,MAAM;AAAA;AAAA,IAGR,OAAO,KAAK,cAAc,MAAM,WAAW,MAAM,EAAE;AAAA;AAAA,OAG/C,QAAO,CAAC,QAA8E;AAAA,IAC1F,MAAM,MAAM,KAAK,GACd,MAAM,6DAA6D,EACnE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,kBAAkB,GAAG,IAAI;AAAA;AAAA,OAGlC,KAAI,CAAC,OAA+D;AAAA,IACxE,IAAI,MAAM,aAAa,aAAa,MAAM,SAAS,WAAW,GAAG;AAAA,MAC/D,OAAO,EAAE,SAAS,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IACjD;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IAEA,IAAI,MAAM,gBAAgB;AAAA,MACxB,aAAa,KAAK,qDAAqD;AAAA,MACvE,KAAK,KAAK,MAAM,eAAe,MAAM,MAAM,eAAe,EAAE;AAAA,IAC9D;AAAA,IAEA,MAAM,MAAM,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC5C,QAAQ,MAAM,OAAO,YAAY,eAA+B;AAAA,MAC9D,IAAI,KAAK;AAAA,MACT,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,SAAS,yCAAyC,WAAW;AAAA,MAC7D,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO,EAAE,SAAS,KAAK,IAAI,iBAAiB,GAAG,SAAS,MAAM;AAAA;AAAA,EAGxD,aAAa,CAAC,WAAmB,IAA+B;AAAA,IACtE,MAAM,MAAM,KAAK,GACd,MAAM,6DAA6D,EACnE,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,mBACR,iBACA,6CAA6C,oBAAoB,aACnE;AAAA,IACF;AAAA,IAEA,OAAO,kBAAkB,GAAG;AAAA;AAEhC;;;AClIO,MAAM,mBAA2C;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEQ;AAAA,EAEjB,WAAW,CAAC,SAAoC;AAAA,IAC9C,KAAK,aAAa,0BAA0B,OAAO;AAAA,IAEnD,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,WAAW,EAAE;AAAA,IAC7C;AAAA,IAEA,KAAK,UAAU,IAAI,uBAAuB,KAAK,WAAW,EAAE;AAAA,IAC5D,KAAK,OAAO,IAAI,oBAAoB,KAAK,WAAW,IAAI,QAAQ,UAAU;AAAA,IAC1E,KAAK,WAAW,IAAI,wBAAwB,KAAK,WAAW,EAAE;AAAA,IAC9D,KAAK,cAAc,IAAI,kCAAkC,KAAK,WAAW,EAAE;AAAA;AAAA,EAG7E,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAE9C;;AClDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAQE;AAAA;AAAA;AAAA;AAAA;AAKF,sCAAS;AAET;AAAA;AAAA;;;ACfA;AAAA;AAAA;AAAA;AAAA;AAUA,eAAsB,qBAAqB,CACzC,YACA,OACsC;AAAA,EACtC,MAAM,QAAQ,oCAAoC,KAAK;AAAA,EACvD,MAAM,aAAa;AAAA,IACjB,MAAM;AAAA,IACN,MAAM,KAAK,YAAY;AAAA,IACvB,MAAM,GAAG,YAAY;AAAA,IACrB,MAAM,cAAc;AAAA,IACpB,MAAM,WAAW;AAAA,IACjB,MAAM,mBAAmB;AAAA,EAC3B;AAAA,EACA,MAAM,QAAQ,WAAW,GAAG,MAAM,SAAS,EAAE,IAAI,GAAG,UAAU;AAAA,EAC9D,MAAM,OAAO,WAAW,GACrB,MAAM,QAAQ,EACd,IAAI,GAAG,YAAY,MAAM,OAAO,MAAM,MAAM;AAAA,EAC/C,MAAM,QAAQ,OAAO,OAAO,KAAK;AAAA,EACjC,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ;AAAA,IAC1C,MAAM,IAAI,WAAW,wCAAwC;AAAA,EAC/D,MAAM,QAAQ,oCAAoC,KAAK,IAAI,+BAA+B,CAAC;AAAA,EAC3F,OAAO,EAAE,OAAO,OAAO,SAAS,MAAM,SAAS,MAAM,SAAS,MAAM;AAAA;AAGtE,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyCrB,IAAM,YAAY,GAAG;AACrB,IAAM,WAAW,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC5EpB;AACA;AAEA;AAAA;AAAA;AAAA;AA4BO,MAAM,qBAA+C;AAAA,EACzC;AAAA,EAEjB,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACrD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,WAAW,EAAE;AAAA,IAC7C;AAAA;AAAA,OAGI,gBAAe,CAAC,OAAiE;AAAA,IACrF,MAAM,SAAS,2BAA2B,KAAK;AAAA,IAC/C,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,WAAW,KAAK,qBAAqB,MAAM;AAAA,MACjD,IAAI;AAAA,QAAU,OAAO,EAAE,QAAQ,UAAU,SAAS,MAAM;AAAA,MACxD,KAAK,sBAAsB,OAAO,WAAW,OAAO,WAAW;AAAA,MAE/D,IAAI;AAAA,QACF,KAAK,aAAa,MAAM;AAAA,QACxB,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,yBAAwB,KAAK;AAAA,UAAG,MAAM;AAAA,QAE3C,MAAM,aAAa,KAAK,qBAAqB,MAAM;AAAA,QACnD,IAAI;AAAA,UAAY,OAAO,EAAE,QAAQ,YAAY,SAAS,MAAM;AAAA,QAC5D,MAAM,IAAI,oBACR,gBACA,iCAAiC,OAAO,mCAAmC,OAAO,aACpF;AAAA;AAAA,MAGF,WAAW,WAAW,OAAO,mBAAmB;AAAA,QAC9C,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA,aAKF,EACC,IAAI,OAAO,WAAW,OAAO,IAAI,SAAS,OAAO,WAAW,YAAY,CAAC;AAAA,MAC9E;AAAA,MAEA,OAAO,EAAE,QAAQ,KAAK,YAAY,OAAO,WAAW,OAAO,EAAE,GAAG,SAAS,KAAK;AAAA,KAC/E;AAAA;AAAA,OAGG,mBAAkB,CACtB,OACkC;AAAA,IAClC,OAAO,WAAW,MAAM,KAAK,oBAAoB;AAAA,MAC/C,WAAW,MAAM;AAAA,MACjB,cAAc,CAAC,MAAM,WAAW;AAAA,IAClC,CAAC;AAAA,IACD,OAAO;AAAA;AAAA,OAGH,sBAAqB,CACzB,OACwC;AAAA,IACxC,wBAAwB,MAAM,SAAS;AAAA,IACvC,yBAAyB,MAAM,WAAW;AAAA,IAC1C,MAAM,MAAM,KAAK,WAAW,GACzB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,MAAM,WAAW,MAAM,WAAW;AAAA,IACzC,OAAO,MAAM,KAAK,YAAY,GAAG,IAAI;AAAA;AAAA,OAGjC,oBAAmB,CACvB,OAC6C;AAAA,IAC7C,wBAAwB,MAAM,SAAS;AAAA,IACvC,WAAW,eAAe,MAAM;AAAA,MAAc,yBAAyB,WAAW;AAAA,IAClF,IAAI,MAAM,aAAa,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAE7C,MAAM,OAAO,KAAK,cAAc,KAAK;AAAA,IACrC,OAAO,uBAAuB,MAAM,cAAc,IAAI;AAAA;AAAA,EAGxD,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,YAAY,CAAC,QAAsC;AAAA,IACzD,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA6BF,EACC,IACC,OAAO,WACP,OAAO,IACP,OAAO,aACP,OAAO,SACP,OAAO,QACP,OAAO,YACP,OAAO,gBAAgB,YAAY,OAAO,KAAK,UAAU,OAAO,WAAW,GAC3E,OAAO,kBACP,OAAO,uBAAuB,YAAY,OAAO,KAAK,UAAU,OAAO,kBAAkB,GACzF,OAAO,mBAAmB,MAC1B,OAAO,YACP,OAAO,MAAM,eAAe,MAC5B,OAAO,MAAM,gBAAgB,MAC7B,OAAO,MAAM,eAAe,MAC5B,OAAO,MAAM,uBAAuB,MACpC,OAAO,MAAM,wBAAwB,MACrC,OAAO,MAAM,yBAAyB,MACtC,OAAO,MAAM,oBAAoB,MACjC,OAAO,MAAM,yBAAyB,MACtC,OAAO,MAAM,iBACb,OAAO,aAAa,YAAY,OAAO,KAAK,UAAU,OAAO,QAAQ,GACrE,OAAO,WAAW,YAAY,GAC9B,OAAO,WAAW,YAAY,CAChC;AAAA;AAAA,EAGI,oBAAoB,CAC1B,QAI+B;AAAA,IAC/B,MAAM,MAAM,KAAK,WAAW,GACzB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQF,EACC,IACC,OAAO,WACP,OAAO,aACP,OAAO,SACP,OAAO,QACP,OAAO,UACT;AAAA,IACF,OAAO,MAAM,KAAK,YAAY,GAAG,IAAI;AAAA;AAAA,EAG/B,WAAW,CAAC,WAAmB,IAAoC;AAAA,IACzE,MAAM,MAAM,KAAK,WAAW,GACzB,MAAM,mEAAmE,EACzE,IAAI,WAAW,EAAE;AAAA,IACpB,IAAI,CAAC;AAAA,MAAK,MAAM,IAAI,MAAM,iCAAiC,+BAA+B;AAAA,IAC1F,OAAO,KAAK,YAAY,GAAG;AAAA;AAAA,EAGrB,WAAW,CAAC,KAAyC;AAAA,IAC3D,MAAM,YAAY,KAAK,WAAW,GAC/B,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IAAI,IAAI,YAAY,IAAI,EAAE;AAAA,IAE7B,OAAO;AAAA,MACL,IAAI,IAAI;AAAA,MACR,WAAW,IAAI;AAAA,MACf,aAAa,IAAI;AAAA,MACjB,SAAS,IAAI;AAAA,MACb,QAAQ,IAAI;AAAA,MACZ,mBAAmB,UAAU,IAAI,CAAC,UAAU,MAAM,QAAQ;AAAA,MAC1D,YAAY,IAAI;AAAA,SACZ,IAAI,iBAAiB,OACrB,CAAC,IACD,EAAE,aAAa,0BAA0B,KAAK,MAAM,IAAI,YAAY,CAAC,EAAE;AAAA,MAC3E,kBAAkB,IAAI;AAAA,SAClB,IAAI,wBAAwB,OAC5B,CAAC,IACD,EAAE,oBAAoB,0BAA0B,IAAI,mBAAmB,EAAE;AAAA,SACzE,IAAI,sBAAsB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,kBAAkB;AAAA,MACnF,YAAY,IAAI;AAAA,MAChB,OAAO;AAAA,WACF,aAAa,GAAG;AAAA,WACf,IAAI,iBAAiB,OAAO,CAAC,IAAI,EAAE,aAAa,IAAI,aAAa;AAAA,QACrE,iBAAiB,IAAI;AAAA,MACvB;AAAA,SACI,IAAI,cAAc,OAClB,CAAC,IACD,EAAE,UAAU,KAAK,MAAM,IAAI,SAAS,EAAwB;AAAA,MAChE,YAAY,IAAI,KAAK,IAAI,WAAW;AAAA,MACpC,YAAY,IAAI,KAAK,IAAI,WAAW;AAAA,IACtC;AAAA;AAAA,EAGM,aAAa,CAAC,OAAsD;AAAA,IAC1E,MAAM,YAAY,KAAK,UAAU,CAAC,GAAG,IAAI,IAAI,MAAM,YAAY,CAAC,CAAC;AAAA,IACjE,OAAO,KAAK,WAAW,GACpB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUF,EACC,IAAI,WAAW,MAAM,SAAS;AAAA;AAAA,EAG3B,qBAAqB,CAAC,WAAmB,aAA2B;AAAA,IAC1E,MAAM,YAAY,KAAK,WAAW,GAC/B,MAAM,0DAA0D,EAChE,IAAI,WAAW,WAAW;AAAA,IAC7B,IAAI;AAAA,MAAW;AAAA,IACf,MAAM,IAAI,oBACR,qBACA,oCAAoC,2CAA2C,aACjF;AAAA;AAEJ;AA4BA,SAAS,sBAAsB,CAC7B,cACA,MACoC;AAAA,EACpC,MAAM,qBAAqB,IAAI;AAAA,EAC/B,WAAW,eAAe;AAAA,IAAc,mBAAmB,IAAI,aAAa,CAAC,CAAC;AAAA,EAC9E,WAAW,OAAO,MAAM;AAAA,IACtB,mBAAmB,IAAI,IAAI,YAAY,GAAG,KAAK,aAAa,GAAG,CAAC;AAAA,EAClE;AAAA,EACA,OAAO,aAAa,IAAI,CAAC,gBAAgB;AAAA,IACvC,MAAM,SAAS,mBAAmB,IAAI,WAAW,KAAK,CAAC;AAAA,IACvD,OAAO;AAAA,MACL,gBAAgB,OAAO;AAAA,MACvB,OAAO,0BAA0B,MAAM;AAAA,IACzC;AAAA,GACD;AAAA;AAGH,SAAS,YAAY,CAAC,KAAwC;AAAA,EAC5D,OAAO;AAAA,OACD,IAAI,iBAAiB,OAAO,CAAC,IAAI,EAAE,aAAa,IAAI,aAAa;AAAA,OACjE,IAAI,kBAAkB,OAAO,CAAC,IAAI,EAAE,cAAc,IAAI,cAAc;AAAA,OACpE,IAAI,0BAA0B,OAC9B,CAAC,IACD,EAAE,qBAAqB,IAAI,sBAAsB;AAAA,OACjD,IAAI,4BAA4B,OAChC,CAAC,IACD,EAAE,sBAAsB,IAAI,wBAAwB;AAAA,OACpD,IAAI,6BAA6B,OACjC,CAAC,IACD,EAAE,uBAAuB,IAAI,yBAAyB;AAAA,OACtD,IAAI,uBAAuB,OAAO,CAAC,IAAI,EAAE,kBAAkB,IAAI,mBAAmB;AAAA,OAClF,IAAI,4BAA4B,OAChC,CAAC,IACD,EAAE,uBAAuB,IAAI,wBAAwB;AAAA,EAC3D;AAAA;AAGK,SAAS,yBAAyB,CACvC,OAC8C;AAAA,EAC9C,MAAM,SAAkB,KAAK,MAAM,KAAK;AAAA,EACxC,IAAI,CAAC,iBAAiB,MAAM,GAAG;AAAA,IAC7B,MAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,uBAAuB,CAAC,WAAyB;AAAA,EACxD,IAAI,OAAO,cAAc,YAAY,UAAU,KAAK,EAAE,WAAW,GAAG;AAAA,IAClE,MAAM,IAAI,UAAU,6CAA6C;AAAA,EACnE;AAAA;;;AFxUK,MAAM,oBAA6C;AAAA,EAC3B;AAAA,EAA7B,WAAW,CAAkB,YAAmC;AAAA,IAAnC;AAAA;AAAA,OAEvB,oBAAmB,CACvB,OACsC;AAAA,IACtC,OAAO,sBAAsB,KAAK,YAAY,KAAK;AAAA;AAAA,OAG/C,oBAAmB,CAAC,OAA6C;AAAA,IACrE,MAAM,SAAS,+BAA+B,KAAK;AAAA,IACnD,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MAChD,MAAM,QAAQ,KAAK,UAAU,OAAO,WAAW,OAAO,aAAa;AAAA,MACnE,IAAI,CAAC;AAAA,QAAO,MAAM,aAAa,MAAM;AAAA,MACrC,uBAAuB,QAAQ,KAAK;AAAA,MACpC,IAAI,KAAK,SAAS,OAAO,WAAW,OAAO,aAAa;AAAA,QAAG;AAAA,MAC3D,IAAI;AAAA,QACF,KAAK,WAAW,MAAM;AAAA,QACtB,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,yBAAwB,KAAK;AAAA,UAAG,MAAM;AAAA,QAC3C,IAAI,CAAC,KAAK,SAAS,OAAO,WAAW,OAAO,aAAa;AAAA,UAAG,MAAM;AAAA;AAAA,KAErE;AAAA;AAAA,OAGG,oBAAmB,CACvB,OACmC;AAAA,IACnC,eAAe,MAAM,WAAW,wBAAwB;AAAA,IACxD,WAAW,MAAM,MAAM;AAAA,MAAc,eAAe,IAAI,0BAA0B;AAAA,IAClF,IAAI,MAAM,aAAa,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAC7C,MAAM,OAAO,KAAK,WAAW,GAC1B,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAYF,EACC,IAAI,KAAK,UAAU,CAAC,GAAG,IAAI,IAAI,MAAM,YAAY,CAAC,CAAC,GAAG,MAAM,SAAS;AAAA,IACxE,OAAO,qBAAqB,MAAM,cAAc,IAAI;AAAA;AAAA,OAGhD,qBAAoB,CAAC,OAAsE;AAAA,IAC/F,MAAM,QAAQ,2BAA2B,KAAK;AAAA,IAC9C,MAAM,OAAO,KAAK,WAAW,GAC1B,MAAM,8BAA8B,EACpC,IACC,MAAM,WACN,MAAM,KAAK,YAAY,GACvB,MAAM,GAAG,YAAY,GACrB,MAAM,cAAc,MACpB,MAAM,cAAc,MACpB,MAAM,WAAW,MACjB,MAAM,WAAW,MACjB,MAAM,MACR;AAAA,IACF,OAAO,uCAAuC,OAAO,KAAK,IAAI,wBAAwB,CAAC;AAAA;AAAA,OAGnF,eAAc,CAClB,OAC0C;AAAA,IAC1C,MAAM,QAAQ,qCAAoC,KAAK;AAAA,IACvD,MAAM,aAAa,+BAA+B,KAAK;AAAA,IACvD,MAAM,QAAQ,KAAK,WAAW,GAC3B,MAAM,gCAAgC,EACtC,IAAI,GAAG,UAAU;AAAA,IACpB,MAAM,OAAO,KAAK,WAAW,GAC1B,MAAM,+BAA+B,EACrC,IAAI,GAAG,YAAY,MAAM,OAAO,MAAM,MAAM;AAAA,IAC/C,MAAM,QAAQ,KAAK,IAAI,CAAC,QAAQ,iBAAiB,sBAAsB,GAAG,CAAC,CAAC;AAAA,IAC5E,MAAM,QAAQ,aAAa,MAAM,OAAO,uBAAuB;AAAA,IAC/D,OAAO,gBAAgB;AAAA,MACrB;AAAA,MACA;AAAA,MACA,SAAS,MAAM,SAAS,MAAM,SAAS;AAAA,IACzC,CAAC;AAAA;AAAA,EAGK,UAAU,CAAC,QAAqC;AAAA,IACtD,MAAM,QAAQ,OAAO,WAAW,UAAU,SAAS;AAAA,IACnD,MAAM,UAAU,uBAAuB,MAAM;AAAA,IAC7C,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA,gDAIF,EACC,IACC,OAAO,WACP,OAAO,eACP,OAAO,QACP,OAAO,iBAAiB,cAAc,MACtC,OAAO,iBAAiB,WAAW,MACnC,OAAO,MAAM,YAAY,MACzB,QAAQ,OAAO,MAAM,MAAM,WAAW,IAAI,MAC1C,OAAO,WAAW,gBAAgB,OAAO,SAAS,MAClD,KAAK,UAAU,OAAO,GACtB,OAAO,QAAQ,YAAY,CAC7B;AAAA;AAAA,EAGI,QAAQ,CAAC,WAAmB,SAA+C;AAAA,IACjF,MAAM,MAAM,KAAK,WAAW,GACzB,MACC;AAAA;AAAA,sDAGF,EACC,IAAI,WAAW,OAAO;AAAA,IACzB,OAAO,MAAM,UAAU,GAAG,IAAI;AAAA;AAAA,EAGxB,SAAS,CAAC,WAAmB,IAA2C;AAAA,IAC9E,MAAM,MAAM,KAAK,WAAW,GACzB,MAAM,mEAAmE,EACzE,IAAI,WAAW,EAAE;AAAA,IACpB,OAAO,MAAM,cAAa,KAAK,CAAC,CAAC,IAAI;AAAA;AAEzC;AAEA,IAAM,gCAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AActC,IAAM,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA,UAK/B;AAAA;AAGV,IAAM,kCAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UA4C9B;AAAA;AAAA;AAAA;AAKV,IAAM,iCAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6GvC,SAAS,8BAA8B,CACrC,OAC4B;AAAA,EAC5B,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK,YAAY;AAAA,IACvB,MAAM,GAAG,YAAY;AAAA,IACrB,MAAM,cAAc;AAAA,IACpB,MAAM,cAAc;AAAA,IACpB,MAAM,WAAW;AAAA,IACjB,MAAM,WAAW;AAAA,IACjB,MAAM,eAAe;AAAA,IACrB,MAAM,eAAe;AAAA,IACrB,MAAM,mBAAmB;AAAA,IACzB,MAAM,mBAAmB;AAAA,EAC3B;AAAA;AA4GF,SAAS,wBAAwB,CAAC,KAAkD;AAAA,EAClF,MAAM,gBACJ,IAAI,cAAc,UACd,EAAE,YAAY,SAAS,IAAI,KAAK,GAAG,SAAS,SAAS,IAAI,KAAK,EAAE,IAChE,IAAI,cAAc,UAChB;AAAA,IACE,WAAW,SAAS,IAAI,KAAK;AAAA,OACzB,IAAI,UAAU,kBACd,EAAE,YAAY,SAAS,IAAI,KAAK,GAAG,aAAa,SAAS,IAAI,KAAK,EAAE,IACpE,CAAC;AAAA,EACP,IACA,IAAI,cAAc,aAChB,EAAE,YAAY,SAAS,IAAI,KAAK,EAAE,IAClC,IAAI,cAAc,WAChB,EAAE,OAAO,IAAI,KAAK,SAAS,IAAI,YAAY,CAAC,EAAE,IAC9C,CAAC;AAAA,EACb,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,OACZ;AAAA,IACH,gBAAgB,IAAI;AAAA,IACpB,OAAO;AAAA,MACL,mBAAmB,IAAI;AAAA,MACvB,mBAAmB,IAAI;AAAA,MACvB,aAAa,cAAc,IAAI,oBAAoB,IAAI,gBAAgB;AAAA,MACvE,cAAc,cAAc,IAAI,qBAAqB,IAAI,iBAAiB;AAAA,MAC1E,qBAAqB,cACnB,IAAI,6BACJ,IAAI,yBACN;AAAA,MACA,sBAAsB,cACpB,IAAI,+BACJ,IAAI,2BACN;AAAA,MACA,uBAAuB,cACrB,IAAI,gCACJ,IAAI,4BACN;AAAA,MACA,kBAAkB,cAAc,IAAI,0BAA0B,IAAI,sBAAsB;AAAA,MACxF,uBAAuB,cACrB,IAAI,+BACJ,IAAI,2BACN;AAAA,IACF;AAAA,IACA,OAAO;AAAA,SACD,IAAI,oBAAoB,QAC5B,IAAI,gBAAgB,QACpB,IAAI,kBAAkB,QACtB,IAAI,eAAe,OACf,CAAC,IACD;AAAA,QACE,QAAQ;AAAA,UACN,UAAU,IAAI;AAAA,UACd,aAAa,sBAAsB,GAAG;AAAA,QACxC;AAAA,MACF;AAAA,MACJ,gBAAgB,IAAI;AAAA,MACpB,sBAAsB,IAAI;AAAA,MAC1B,mBAAmB,IAAI;AAAA,IACzB;AAAA,EACF;AAAA;AAGF,SAAS,aAAa,CAAC,kBAA0B,OAAsB;AAAA,EACrE,OAAO,EAAE,kBAAkB,MAAM;AAAA;AAGnC,SAAS,qBAAqB,CAC5B,KACQ;AAAA,EACR,QACE,OAAO,SAAS,IAAI,WAAW,CAAC,IAAI,iBACpC,OAAO,SAAS,IAAI,aAAa,CAAC,IAAI,WACtC,OAAO,SAAS,IAAI,UAAU,CAAC,GAC/B,SAAS;AAAA;AAGb,SAAS,qBAAqB,CAAC,KAA2C;AAAA,EACxE,MAAM,QAAQ,cAAa,KAAK,iBAAiB,IAAI,mBAAmB,CAAC;AAAA,EACzE,MAAM,OAAO,IAAI,gBAAgB,OAAO,YAAY,kBAAkB,GAAG;AAAA,EACzE,MAAM,cACJ,IAAI,qBAAqB,OACrB,2BAA2B,IAAI,eAAe,IAAI,aAAa,IAAI,YAAY,IAC/E,IAAI,qBAAqB,UACvB;AAAA,IACE,MAAM;AAAA,IACN,YAAY,SAAS,IAAI,wBAAwB;AAAA,IACjD,UAAU,SAAS,IAAI,qBAAqB;AAAA,EAC9C,IACA,IAAI,qBAAqB,aACvB;AAAA,IACE,MAAM;AAAA,IACN,eAAe,SAAS,IAAI,wBAAwB;AAAA,IACpD,aAAa,SAAS,IAAI,yBAAyB;AAAA,EACrD,IACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa,SAAS,IAAI,yBAAyB;AAAA,IACnD,WAAW,SAAS,IAAI,uBAAuB;AAAA,IAC/C,YAAY,SAAS,IAAI,uBAAuB;AAAA,IAChD,eAAe,SAAS,IAAI,2BAA2B;AAAA,EACzD;AAAA,EACV,OAAO;AAAA,IACL;AAAA,OACI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,OACjC,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,EACzB;AAAA;AAGF,SAAS,aAAY,CAAC,KAAe,mBAA8D;AAAA,EACjG,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ;AAAA,IACA,YAAY,IAAI;AAAA,OACZ,IAAI,iBAAiB,OACrB,CAAC,IACD,EAAE,aAAa,2BAA0B,KAAK,MAAM,IAAI,YAAY,CAAC,EAAE;AAAA,IAC3E,kBAAkB,IAAI;AAAA,OAClB,IAAI,wBAAwB,OAC5B,CAAC,IACD,EAAE,oBAAoB,0BAA0B,IAAI,mBAAmB,EAAE;AAAA,OACzE,IAAI,sBAAsB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,kBAAkB;AAAA,IACnF,YAAY,IAAI;AAAA,IAChB,OAAO;AAAA,SACD,IAAI,iBAAiB,OAAO,CAAC,IAAI,EAAE,aAAa,IAAI,aAAa;AAAA,SACjE,IAAI,kBAAkB,OAAO,CAAC,IAAI,EAAE,cAAc,IAAI,cAAc;AAAA,SACpE,IAAI,iBAAiB,OAAO,CAAC,IAAI,EAAE,aAAa,IAAI,aAAa;AAAA,SACjE,IAAI,0BAA0B,OAC9B,CAAC,IACD,EAAE,qBAAqB,IAAI,sBAAsB;AAAA,SACjD,IAAI,4BAA4B,OAChC,CAAC,IACD,EAAE,sBAAsB,IAAI,wBAAwB;AAAA,SACpD,IAAI,6BAA6B,OACjC,CAAC,IACD,EAAE,uBAAuB,IAAI,yBAAyB;AAAA,SACtD,IAAI,uBAAuB,OAAO,CAAC,IAAI,EAAE,kBAAkB,IAAI,mBAAmB;AAAA,SAClF,IAAI,4BAA4B,OAChC,CAAC,IACD,EAAE,uBAAuB,IAAI,wBAAwB;AAAA,MACzD,iBAAiB,IAAI;AAAA,IACvB;AAAA,OACI,IAAI,cAAc,OAClB,CAAC,IACD,EAAE,UAAU,KAAK,MAAM,IAAI,SAAS,EAAwB;AAAA,IAChE,YAAY,IAAI,KAAK,IAAI,WAAW;AAAA,IACpC,YAAY,IAAI,KAAK,IAAI,WAAW;AAAA,EACtC;AAAA;AAGF,SAAS,SAAS,CAAC,KAA0C;AAAA,EAC3D,OAAO,WAAW;AAAA,IAChB,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,YAAY,IAAI;AAAA,IAChB,SAAS,IAAI;AAAA,IACb,UAAU,IAAI;AAAA,IACd,aAAa,IAAI;AAAA,IACjB,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,IACb,SAAS,IAAI;AAAA,EACf,CAAC;AAAA;AAGH,SAAS,iBAAiB,CAAC,KAAuC;AAAA,EAChE,OAAO,WAAW;AAAA,IAChB,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,QAAQ,SAAS,IAAI,WAAW;AAAA,IAChC,YAAY,IAAI;AAAA,IAChB,SAAS,IAAI;AAAA,IACb,UAAU,IAAI;AAAA,IACd,aAAa,IAAI;AAAA,IACjB,QAAQ,IAAI;AAAA,IACZ,SAAS,SAAS,IAAI,YAAY;AAAA,IAClC,SAAS,SAAS,IAAI,aAAa;AAAA,EACrC,CAAC;AAAA;AAGH,SAAS,UAAU,CAAC,OAWM;AAAA,EACxB,MAAM,UAAU,4BAA4B,MAAM,OAAO;AAAA,EACzD,MAAM,cACJ,QAAQ,gBAAgB,YACpB,YACA,KAAK,QAAQ,aAAa,YAAY,IAAI,KAAK,QAAQ,YAAY,UAAU,EAAE;AAAA,EACrF,MAAM,OAAO;AAAA,OACP,QAAQ,aAAa,YAAY,CAAC,IAAI,EAAE,UAAU,QAAQ,SAAS;AAAA,IACvE,WAAW,MAAM;AAAA,IACjB,eAAe,MAAM;AAAA,IACrB,gBAAgB,QAAQ;AAAA,IACxB,SAAS,IAAI,KAAK,MAAM,OAAO;AAAA,EACjC;AAAA,EACA,IAAI,MAAM,WAAW,SAAS;AAAA,IAC5B,OAAO,+BAA+B;AAAA,SACjC;AAAA,MACH,QAAQ;AAAA,MACR,iBAAiB,EAAE,YAAY,SAAS,MAAM,UAAU,GAAG,SAAS,SAAS,MAAM,OAAO,EAAE;AAAA,MAC5F,aAAa,SAAS,WAAW;AAAA,MACjC,OAAO,EAAE,UAAU,SAAS,MAAM,QAAQ,GAAG,aAAa,SAAS,MAAM,WAAW,EAAE;AAAA,MACtF,YAAY,SAAS,QAAQ,UAAU;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EACA,OAAO,+BAA+B;AAAA,OACjC;AAAA,IACH,QAAQ;AAAA,OACJ,MAAM,cAAc,MAAM,UAC1B,EAAE,iBAAiB,EAAE,YAAY,MAAM,YAAY,SAAS,MAAM,QAAQ,EAAE,IAC5E,CAAC;AAAA,OACD,gBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY;AAAA,IACnD,QAAQ,SAAS,MAAM,MAAM;AAAA,OAIzB,QAAQ,gBAAgB,EAAE,eAAe,QAAQ,cAAc,IAAI,CAAC;AAAA,EAC1E,CAAC;AAAA;AAGH,SAAS,oBAAoB,CAC3B,KACA,MACiB;AAAA,EACjB,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC;AAAA,EACxD,WAAW,OAAO,MAAM;AAAA,IACtB,MAAM,QAAQ,IAAI,IAAI,IAAI,YAAY;AAAA,IACtC,IAAI,CAAC;AAAA,MAAO;AAAA,IACZ,IAAI,IAAI,WAAW;AAAA,MAAM,MAAM,qBAAqB;AAAA,IAC/C,SAAI,IAAI,WAAW;AAAA,MAAe,MAAM,wBAAwB;AAAA,IAChE;AAAA,MACH,MAAM,kBAAkB;AAAA,MACxB,IAAI,MAAM,SAAS,SAAS,IAAI,QAAQ,GAAG,SAAS,IAAI,YAAY,CAAC;AAAA;AAAA,EAEzE;AAAA,EACA,OAAO,IAAI,IAAI,CAAC,OAAO,OAAO,IAAI,IAAI,EAAE,CAAE,CAAC;AAAA;AAU7C,SAAS,WAAW,GAAgB;AAAA,EAClC,OAAO;AAAA,IACL,SAAS,IAAI;AAAA,IACb,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,EACrB;AAAA;AAGF,SAAS,MAAM,CAAC,OAAmC;AAAA,EACjD,OAAO;AAAA,IACL,SAAS,CAAC,GAAG,MAAM,OAAO,EACvB,KAAK,EAAE,QAAQ,WAAW,KAAK,cAAc,KAAK,CAAC,EACnD,IAAI,EAAE,UAAU,aAAa,EAAE,UAAU,aAAa,OAAO,SAAS,EAAE,EAAE;AAAA,IAC7E,gBAAgB,MAAM;AAAA,IACtB,sBAAsB,MAAM;AAAA,IAC5B,mBAAmB,MAAM;AAAA,EAC3B;AAAA;AAGF,SAAS,GAAG,CAAC,SAA8B,UAAkB,QAAsB;AAAA,EACjF,QAAQ,IAAI,WAAW,QAAQ,IAAI,QAAQ,KAAK,MAAM,OAAO,MAAM,CAAC;AAAA;AAGtE,SAAS,sBAAsB,CAC7B,QACA,OACM;AAAA,EACN,IAAI,CAAC,4BAA4B,QAAQ,KAAK,GAAG;AAAA,IAC/C,MAAM,IAAI,mBACR,iBACA,wCAAwC,OAAO,iDACjD;AAAA,EACF;AAAA;AAGF,SAAS,YAAY,CAAC,QAAsD;AAAA,EAC1E,OAAO,IAAI,mBACT,iBACA,0BAA0B,OAAO,gCACnC;AAAA;AAGF,SAAS,gBAAgB,CAAC,OAAyB;AAAA,EACjD,MAAM,SAAkB,KAAK,MAAM,KAAK;AAAA,EACxC,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,GAAG;AAAA,IAC7E,MAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,cAAc,CAAC,OAAe,OAAqB;AAAA,EAC1D,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,WAAW,GAAG;AAAA,IAC1D,MAAM,IAAI,UAAU,aAAa,yBAAyB;AAAA,EAC5D;AAAA;AAGF,SAAS,YAAY,CAAC,OAAe,OAAuB;AAAA,EAC1D,IAAI,CAAC,iBAAiB,KAAK,KAAK,GAAG;AAAA,IACjC,MAAM,IAAI,MAAM,8BAA8B,mBAAmB;AAAA,EACnE;AAAA,EACA,MAAM,QAAQ,OAAO,KAAK;AAAA,EAC1B,IAAI,CAAC,OAAO,cAAc,KAAK,GAAG;AAAA,IAChC,MAAM,IAAI,UAAU,wBAAwB,uCAAuC;AAAA,EACrF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,QAAW,CAAC,OAAgC;AAAA,EACnD,IAAI,UAAU,QAAQ,UAAU,WAAW;AAAA,IACzC,MAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AAAA,EACA,OAAO;AAAA;;;AG5xBT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAYE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCF;AAeO,MAAM,qBAA+C;AAAA,EACzC;AAAA,EAEjB,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACrD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,IAAI,KAAK,WAAW;AAAA,MAAoB,yBAAyB,KAAK,WAAW,EAAE;AAAA;AAAA,OAG/E,aAAY,CAAC,OAAyD;AAAA,IAC1E,MAAM,SAAS,6BAA6B,KAAK;AAAA,IACjD,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,UAAU,oBAAoB,OAAO,OAAO;AAAA,MAClD,MAAM,QAAQ,uBAAuB,OAAO,KAAK;AAAA,MACjD,IAAI;AAAA,QACF,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,aAMF,EACC,IACC,OAAO,WACP,OAAO,IACP,QAAQ,MACR,QAAQ,IACR,MAAM,OACN,MAAM,UACN,MAAM,OAAO,SAAS,GACtB,OAAO,QACP,OAAO,UAAU,IAAI,GACrB,OAAO,UAAU,YAAY,GAC7B,OAAO,UAAU,YAAY,CAC/B;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,kBAAkB,KAAK;AAAA,UAAG,MAAM;AAAA,QACrC,MAAM,gBAAgB,MAAM;AAAA;AAAA,MAE9B,OAAO,KAAK,cAAc,OAAO,WAAW,OAAO,EAAE;AAAA,KACtD;AAAA;AAAA,OAGG,aAAY,CAAC,OAAyD;AAAA,IAC1E,MAAM,SAAS,6BAA6B,KAAK;AAAA,IACjD,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,WAAW,KAAK,cAAc,OAAO,WAAW,OAAO,EAAE;AAAA,MAC/D,IAAI,OAAO,UAAU;AAAA,QAAW,oBAAoB,SAAS,OAAO,OAAO,KAAK;AAAA,MAChF,MAAM,QAAQ,uBAAuB,OAAO,SAAS,SAAS,KAAK;AAAA,MACnE,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA,WAKF,EACC,IACC,MAAM,OAAO,SAAS,GACrB,OAAO,WAAW,SAAS,UAAW,IAAI,GAC3C,OAAO,UAAU,YAAY,GAC7B,OAAO,WACP,OAAO,EACT;AAAA,MACF,OAAO,KAAK,cAAc,OAAO,WAAW,OAAO,EAAE;AAAA,KACtD;AAAA;AAAA,OAGG,aAAY,CAAC,OAAmD;AAAA,IACpE,uBAAuB,KAAK;AAAA,IAC5B,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,SAAS,KAAK,WAAW,GAC5B,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,OAAO,OAAO,UAAU;AAAA,KACzB;AAAA;AAAA,OAGG,UAAS,CAAC,OAA6D;AAAA,IAC3E,uBAAuB,KAAK;AAAA,IAC5B,MAAM,MAAM,KAAK,WAAW,GACzB,MAAM,+DAA+D,EACrE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,IAChC,OAAO,MAAM,cAAc,GAAG,IAAI;AAAA;AAAA,OAG9B,aAAY,CAAC,OAAoE;AAAA,IACrF,gBAAe,MAAM,WAAW,WAAW;AAAA,IAC3C,OAAO,KAAK,WAAW,MAAM,WAAW,MAAM,mBAAmB,KAAK,EAAE,IAAI,aAAa;AAAA;AAAA,OAGrF,mBAAkB,CACtB,OACyC;AAAA,IACzC,gBAAe,MAAM,WAAW,WAAW;AAAA,IAC3C,MAAM,SAAS,qBAAqB,MAAM,MAAM,IAAI,IAAM;AAAA,IAC1D,MAAM,iBACJ,MAAM,qBAAqB,YAAY,YAAY,IAAI,IAAI,MAAM,gBAAgB;AAAA,IACnF,OAAO,wBAAwB,KAAK,WAAW,IAAI,MACjD,KAAK,WAAW,MAAM,WAAW,MAAM,mBAAmB,KAAK,EAAE,IAAI,CAAC,QACpE,KAAK,gBAAgB,cAAc,GAAG,GAAG,QAAQ,cAAc,CACjE,CACF;AAAA;AAAA,OAGI,iBAAgB,CAAC,OAAmE;AAAA,IACxF,MAAM,UAAU,4BAA4B,KAAK;AAAA,IACjD,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,WAAW,KAAK,gBAAgB,QAAQ,QAAQ;AAAA,MACtD,IAAI,UAAU;AAAA,QACZ,IAAI,CAAC,iCAAiC,UAAU,OAAO,GAAG;AAAA,UACxD,MAAM,IAAI,oBACR,wBACA,2CAA2C,MAAM,qEACnD;AAAA,QACF;AAAA,QACA,IAAI,SAAS,UAAU,UAAU;AAAA,UAC/B,OAAO,EAAE,QAAQ,YAAY,aAAa,UAAU,SAAS,MAAM;AAAA,QACrE;AAAA,QACA,OAAO,EAAE,QAAQ,YAAY,aAAa,UAAU,SAAS,MAAM;AAAA,MACrE;AAAA,MACA,KAAK,sBAAsB,QAAQ,SAAS,WAAW,QAAQ,SAAS,WAAW;AAAA,MAEnF,MAAM,cAAc,IAAI,IAAI,QAAQ,SAAS,IAAI,iBAAiB,CAAC;AAAA,MACnE,MAAM,YAAY,IAAI,IACpB,QAAQ,UAAU,IAAI,CAAC,aAAa;AAAA,QAClC,MAAM,SAAS,uBAAuB,QAAQ;AAAA,QAC9C,OAAO,CAAC,iBAAiB,MAAM,GAAG,MAAM;AAAA,OACzC,CACH;AAAA,MACA,MAAM,kBAAkB,KAAK,WAAW,QAAQ,SAAS,WAAW,KAAK,EAAE,IAAI,aAAa;AAAA,MAC5F,MAAM,oBAA2C,CAAC;AAAA,MAClD,MAAM,sBAA6C,CAAC;AAAA,MACpD,MAAM,qBAAqB,IAAI;AAAA,MAC/B,WAAW,UAAU,iBAAiB;AAAA,QACpC,IAAI,CAAC,YAAY,IAAI,kBAAkB,OAAO,OAAO,CAAC;AAAA,UAAG;AAAA,QACzD,MAAM,QAAQ,uBAAuB,OAAO,KAAK;AAAA,QACjD,MAAM,WAAW,UAAU,IAAI,iBAAiB,KAAK,CAAC;AAAA,QACtD,MAAM,SAAS,KAAK,gBAAgB,QAAQ,QAAQ,MAAM;AAAA,QAC1D,IAAI,CAAC,YAAY,OAAO,qBAAqB,eAAe;AAAA,UAC1D,oBAAoB,KAAK,MAAM;AAAA,UAC/B,IAAI,CAAC;AAAA,YAAU,mBAAmB,IAAI,iBAAiB;AAAA,UACvD,IAAI,OAAO,qBAAqB,eAAe;AAAA,YAC7C,mBAAmB,IAAI,sBAAsB;AAAA,UAC/C;AAAA,UACA;AAAA,QACF;AAAA,QACA,MAAM,cAAc,OAAO;AAAA,QAC3B,MAAM,WACJ,uBAAuB,YAAY,MAAM,EAAE,SAC3C,uBAAuB,YAAY,QAAQ,EAAE,SAC7C,uBAAuB,YAAY,OAAO,EAAE;AAAA,QAC9C,IAAI,WAAW,SAAS,SAAS,MAAM;AAAA,UAAQ,kBAAkB,KAAK,MAAM;AAAA,MAC9E;AAAA,MACA,IAAI,oBAAoB,SAAS,GAAG;AAAA,QAClC,oBAAoB,KAAK,CAAC,MAAM,UAAU,KAAK,OAAO,GAAG,cAAc,MAAM,OAAO,EAAE,CAAC;AAAA,QACvF,OAAO;AAAA,UACL,QAAQ;AAAA,UACR;AAAA,UACA,SAAS,CAAC,GAAG,kBAAkB,EAAE,KAAK;AAAA,QACxC;AAAA,MACF;AAAA,MACA,IAAI,kBAAkB,SAAS,GAAG;AAAA,QAChC,kBAAkB,KAAK,CAAC,MAAM,UAAU,KAAK,OAAO,GAAG,cAAc,MAAM,OAAO,EAAE,CAAC;AAAA,QACrF,OAAO;AAAA,UACL,QAAQ;AAAA,UACR;AAAA,UACA,SAAS,IAAI,KACX,KAAK,IAAI,GAAG,kBAAkB,IAAI,CAAC,WAAW,OAAO,OAAO,QAAQ,QAAQ,CAAC,CAAC,CAChF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,UAAU,0BACd,iBACA,QAAQ,UACR,QAAQ,SACV;AAAA,MACA,IAAI,QAAQ,WAAW;AAAA,QAAG,OAAO,EAAE,QAAQ,cAAc;AAAA,MACzD,WAAW,UAAU,SAAS;AAAA,QAC5B,MAAM,SAAS,uBAAuB,OAAO,QAAQ;AAAA,QACrD,KAAK,eACH,QAAQ,SAAS,WACjB,OAAO,SACP,QACA,QAAQ,QACR,EAAE,UAAU,OAAO,OAAO,GAC1B,QAAQ,UACV;AAAA,MACF;AAAA,MACA,MAAM,cAAsC;AAAA,WACvC,QAAQ;AAAA,QACX;AAAA,QACA,YAAY,6BAA6B,OAAO;AAAA,QAChD,QAAQ,QAAQ;AAAA,QAChB,OAAO;AAAA,QACP,YAAY,QAAQ;AAAA,QACpB,WAAW,IAAI,KAAK,QAAQ,UAAU;AAAA,MACxC;AAAA,MACA,KAAK,kBAAkB,WAAW;AAAA,MAClC,OAAO,EAAE,QAAQ,YAAY,aAAa,gBAAgB,WAAW,GAAG,SAAS,KAAK;AAAA,KACvF;AAAA;AAAA,OAGG,uBAAsB,CAAC,OAA0D;AAAA,IACrF,gBAAe,MAAM,WAAW,WAAW;AAAA,IAC3C,gBAAe,MAAM,eAAe,eAAe;AAAA,IACnD,MAAM,aAAa,eAAe,MAAM,cAAc,IAAI,MAAQ,YAAY;AAAA,IAC9E,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MAChD,MAAM,QAAQ,KAAK,uBAAuB,MAAM,WAAW,MAAM,aAAa;AAAA,MAC9E,MAAM,SAAS,qBAAqB,MAAM,UAAU;AAAA,MACpD,WAAW,gBAAgB,mCAAmC,KAAK,GAAG;AAAA,QACpE,MAAM,UAAU,oBAAoB,YAAY;AAAA,QAChD,MAAM,OAAO,KAAK,WAAW,GAC1B,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,aAMF,EACC,IACC,MAAM,WACN,QAAQ,MACR,QAAQ,IACR,OAAO,MAAM,YAAY,CAC3B;AAAA,QACF,WAAW,OAAO,MAAM;AAAA,UACtB,MAAM,SAAS,qBAAqB,CAAC,KAAK,GAAG,GAAG;AAAA,UAChD,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,eAMF,EACC,KACE,OAAO,IAAI,aAAa,IAAI,OAAO,QAAQ,SAAS,GACrD,IAAI,sBAAsB,iBAAiB,OAAO,qBAAqB,gBACnE,gBACA,YACJ,WAAW,YAAY,GACvB,MAAM,WACN,QAAQ,MACR,QAAQ,IACR,IAAI,OACJ,IAAI,UACJ,OAAO,MAAM,YAAY,CAC3B;AAAA,QACJ;AAAA,MACF;AAAA,KACD;AAAA;AAAA,OAGG,mBAAkB,CAAC,OAAmE;AAAA,IAC1F,MAAM,WAAW,wCAAwC,KAAK;AAAA,IAC9D,gBAAe,MAAM,eAAe,eAAe;AAAA,IACnD,MAAM,eAAe,eAAe,MAAM,gBAAgB,IAAI,MAAQ,cAAc;AAAA,IACpF,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,cAAc,KAAK,gBAAgB,QAAQ;AAAA,MACjD,IAAI,CAAC;AAAA,QAAa,MAAM,mBAAmB,QAAQ;AAAA,MACnD,IAAI,YAAY,UAAU,cAAc;AAAA,QACtC,IAAI,YAAY,kBAAkB,MAAM,eAAe;AAAA,UACrD,OAAO;AAAA,QACT;AAAA,QACA,MAAM,uBAAuB,SAAS,MAAM;AAAA,MAC9C;AAAA,MACA,MAAM,aAAa,KAAK,uBAAuB,SAAS,WAAW,MAAM,aAAa;AAAA,MACtF,0CAA0C,aAAa,UAAU;AAAA,MACjE,KAAK,0BAA0B,aAAa,YAAY,YAAY;AAAA,MACpE,MAAM,aAAqC;AAAA,WACtC;AAAA,QACH,OAAO;AAAA,QACP,eAAe,MAAM;AAAA,QACrB,WAAW;AAAA,MACb;AAAA,MACA,KAAK,kBAAkB,UAAU;AAAA,MACjC,OAAO,gBAAgB,UAAU;AAAA,KAClC;AAAA;AAAA,OAGG,uBAAsB,CAC1B,OACiC;AAAA,IACjC,MAAM,WAAW,wCAAwC,KAAK;AAAA,IAC9D,MAAM,WAAW,eAAe,MAAM,YAAY,IAAI,MAAQ,UAAU;AAAA,IACxE,OAAO,wBAAwB,KAAK,WAAW,IAAI,MAAM;AAAA,MACvD,MAAM,cAAc,KAAK,gBAAgB,QAAQ;AAAA,MACjD,IAAI,CAAC;AAAA,QAAa,MAAM,mBAAmB,QAAQ;AAAA,MACnD,IAAI,YAAY,UAAU;AAAA,QAAW,OAAO;AAAA,MAC5C,IAAI,YAAY,UAAU;AAAA,QAAU,MAAM,aAAa,aAAa,cAAc;AAAA,MAClF,KAAK,qBAAqB,aAAa,EAAE,UAAU,CAAC,IAAI,SAAS,GAAG,GAAG,QAAQ;AAAA,MAC/E,MAAM,UAAU,KAAK,aAAa,OAAO,WAAoB,WAAW,SAAS;AAAA,MACjF,KAAK,kBAAkB,OAAO;AAAA,MAC9B,OAAO,gBAAgB,OAAO;AAAA,KAC/B;AAAA;AAAA,EAGH,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,UAAU,CAAC,WAAmB,iBAA8C;AAAA,IAClF,OAAO,KAAK,WAAW,GACpB,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IAAI,WAAW,kBAAkB,IAAI,CAAC;AAAA;AAAA,EAGnC,aAAa,CAAC,WAAmB,IAA2B;AAAA,IAClE,MAAM,MAAM,KAAK,WAAW,GACzB,MAAM,+DAA+D,EACrE,IAAI,WAAW,EAAE;AAAA,IACpB,IAAI;AAAA,MAAK,OAAO,cAAc,GAAG;AAAA,IACjC,MAAM,IAAI,oBACR,kBACA,iCAAiC,kCAAkC,aACrE;AAAA;AAAA,EAGM,eAAe,CACrB,QACA,QACA,gBACqB;AAAA,IACrB,MAAM,UAAU,oBAAoB,OAAO,OAAO;AAAA,IAClD,MAAM,QAAQ,uBAAuB,OAAO,KAAK;AAAA,IACjD,IAAI,MAAM,KAAK,WAAW,GACvB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,OAAO,WACP,QAAQ,MACR,QAAQ,IACR,MAAM,OACN,MAAM,UACN,OAAO,MAAM,YAAY,CAC3B;AAAA,IAEF,IAAI,CAAC,OAAO,IAAI,sBAAsB,eAAe;AAAA,MACnD,MAAM,SAAS,qBAAqB,KAAK,kBAAkB,QAAQ,MAAM,GAAG,KAAK;AAAA,MACjF,MAAM;AAAA,QACJ,eAAe,OAAO,OAAO,SAAS;AAAA,QACtC,iBAAiB,KAAK,mBAAmB;AAAA,QACzC,gBAAgB,KAAK,kBAAkB;AAAA,QACvC,mBAAmB,OAAO;AAAA,MAC5B;AAAA,MACA,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAWF,EACC,IACC,OAAO,WACP,QAAQ,MACR,QAAQ,IACR,MAAM,OACN,MAAM,UACN,OAAO,MAAM,YAAY,GACzB,OAAO,IAAI,YAAY,GACvB,IAAI,eACJ,IAAI,mBACJ,IAAI,KAAK,EAAE,YAAY,CACzB;AAAA,IACJ;AAAA,IACA,OAAO,aAAa,QAAQ,QAAQ,KAAK,cAAc;AAAA;AAAA,EAGjD,cAAc,CACpB,WACA,cACA,QACA,QACA,SACA,WACM;AAAA,IACN,MAAM,UAAU,oBAAoB,YAAY;AAAA,IAChD,MAAM,MAAM,KAAK,WAAW,GACzB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,WACA,QAAQ,MACR,QAAQ,IACR,OAAO,OACP,OAAO,UACP,OAAO,MAAM,YAAY,CAC3B;AAAA,IACF,MAAM,WAAW,OAAO,KAAK,mBAAmB,GAAG,KAAK,QAAQ,YAAY;AAAA,IAC5E,MAAM,UAAU,OAAO,KAAK,kBAAkB,GAAG,KAAK,QAAQ,WAAW;AAAA,IACzE,IAAI,WAAW,MAAM,UAAU,IAAI;AAAA,MACjC,MAAM,IAAI,MAAM,uDAAuD;AAAA,IACzE;AAAA,IACA,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcF,EACC,IACC,WACA,QAAQ,MACR,QAAQ,IACR,OAAO,OACP,OAAO,UACP,OAAO,MAAM,YAAY,GACzB,OAAO,IAAI,YAAY,GACvB,KAAK,iBAAiB,KACtB,SAAS,SAAS,GAClB,QAAQ,SAAS,GACjB,KAAK,qBAAqB,YAC1B,UAAU,YAAY,CACxB;AAAA;AAAA,EAGI,oBAAoB,CAC1B,aACA,YACA,WACM;AAAA,IACN,WAAW,UAAU,YAAY,SAAS;AAAA,MACxC,MAAM,SAAS,uBAAuB,OAAO,QAAQ;AAAA,MACrD,KAAK,eACH,YAAY,WACZ,OAAO,SACP,QACA,YAAY,QACZ;AAAA,WACM,WAAW,aAAa,YACxB,CAAC,IACD,EAAE,UAAU,WAAW,WAAW,OAAO,OAAO;AAAA,WAChD,WAAW,YAAY,YACvB,CAAC,IACD,EAAE,SAAS,WAAW,UAAU,OAAO,OAAO;AAAA,MACpD,GACA,SACF;AAAA,IACF;AAAA;AAAA,EAGM,yBAAyB,CAC/B,aACA,OACA,WACM;AAAA,IACN,WAAW,UAAU,YAAY,SAAS;AAAA,MACxC,MAAM,SAAS,uBAAuB,OAAO,QAAQ;AAAA,MACrD,MAAM,SAAS,qBAAqB,CAAC,KAAK,GAAG,MAAM;AAAA,MACnD,IAAI,OAAO,qBAAqB,YAAY;AAAA,QAC1C,KAAK,eACH,YAAY,WACZ,OAAO,SACP,QACA,YAAY,QACZ,YAAY,UAAU,WAClB,EAAE,UAAU,CAAC,OAAO,OAAO,IAC3B,EAAE,SAAS,CAAC,OAAO,OAAO,GAC9B,SACF;AAAA,MACF,EAAO,SAAI,YAAY,UAAU,UAAU;AAAA,QACzC,KAAK,eACH,YAAY,WACZ,OAAO,SACP,QACA,YAAY,QACZ,EAAE,UAAU,CAAC,OAAO,QAAQ,SAAS,OAAO,OAAO,GACnD,SACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EAGM,iBAAiB,CAAC,aAA2C;AAAA,IACnE,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,GAAG,qBAAqB,WAAW,CAAC;AAAA;AAAA,EAGrC,iBAAiB,CAAC,aAA2C;AAAA,IACnE,KAAK,WAAW,GACb,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,YAAY,OACZ,YAAY,iBAAiB,MAC7B,YAAY,UAAU,YAAY,GAClC,YAAY,WACZ,YAAY,aACZ,YAAY,SACZ,YAAY,MACd;AAAA;AAAA,EAGI,eAAe,CAAC,OAKU;AAAA,IAChC,MAAM,MAAM,KAAK,WAAW,GACzB,MACC;AAAA;AAAA;AAAA,SAIF,EACC,IACC,MAAM,WACN,MAAM,aACN,MAAM,SACN,MAAM,MACR;AAAA,IACF,OAAO,MAAM,mBAAmB,GAAG,IAAI;AAAA;AAAA,EAGjC,iBAAiB,CACvB,QACA,QACmC;AAAA,IACnC,MAAM,UAAU,oBAAoB,OAAO,OAAO;AAAA,IAClD,MAAM,OAAO,KAAK,WAAW,GAC1B,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAmCF,EACC,IACC,OAAO,WACP,OAAO,MAAM,YAAY,GACzB,OAAO,IAAI,YAAY,GACvB,QAAQ,MACR,QAAQ,MACR,QAAQ,IACR,QAAQ,MACR,QAAQ,IACR,QAAQ,MACR,QAAQ,EACV;AAAA,IACF,OAAO,KAAK,IAAI,CAAC,QAAQ,uBAAuB,KAAK,OAAO,OAAO,CAAC;AAAA;AAAA,EAG9D,sBAAsB,CAAC,WAAmB,eAA+C;AAAA,IAC/F,MAAM,MAAM,KAAK,WAAW,GACzB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAiBF,EACC,IAAI,WAAW,aAAa;AAAA,IAC/B,IAAI,KAAK;AAAA,MACP,MAAM,SAAS,KAAK,WAAW,GAC5B,MACC;AAAA;AAAA;AAAA;AAAA,WAKF,EACC,IAAI,WAAW,aAAa;AAAA,MAC/B,OAAO,uBACL,KACA,WACA,OAAO,IAAI,CAAC,UAAU,MAAM,QAAQ,CACtC;AAAA,IACF;AAAA,IACA,MAAM,IAAI,oBACR,wBACA,iCAAiC,6CAA6C,aAChF;AAAA;AAAA,EAGM,qBAAqB,CAAC,WAAmB,aAA2B;AAAA,IAC1E,MAAM,MAAM,KAAK,WAAW,GACzB,MAAM,0DAA0D,EAChE,IAAI,WAAW,WAAW;AAAA,IAC7B,IAAI;AAAA,MAAK;AAAA,IACT,MAAM,IAAI,oBACR,qBACA,oCAAoC,2CAA2C,aACjF;AAAA;AAEJ;AA4DA,SAAS,aAAa,CAAC,KAAsC;AAAA,EAC3D,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,SAAS,wBAAwB,IAAI,cAAc,IAAI,UAAU;AAAA,IACjE,OAAO,0BAA0B;AAAA,MAC/B,OAAO,IAAI;AAAA,MACX,UAAU,IAAI;AAAA,MACd,QAAQ,OAAO,IAAI,YAAY;AAAA,IACjC,CAAC;AAAA,IACD,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI,YAAY;AAAA,IACzB,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGF,SAAS,YAAY,CACnB,QACA,QACA,KACA,gBACqB;AAAA,EACrB,MAAM,QAAQ,uBAAuB,OAAO,KAAK;AAAA,EACjD,MAAM,SAAS,OAAO,IAAI,aAAa;AAAA,EACvC,MAAM,WAAW,OAAO,IAAI,eAAe;AAAA,EAC3C,MAAM,UAAU,OAAO,IAAI,cAAc;AAAA,EACzC,MAAM,WAAW,SAAS,WAAW;AAAA,EACrC,MAAM,WAAW,CAAC,WAAmB,0BAA0B,KAAK,OAAO,OAAO,CAAC;AAAA,EACnF,OAAO;AAAA,IACL;AAAA,IACA,QAAQ,gBAAgB,MAAM;AAAA,IAC9B,aAAa;AAAA,MACX,QAAQ,SAAS,MAAM;AAAA,MACvB,UAAU,SAAS,QAAQ;AAAA,MAC3B,SAAS,SAAS,OAAO;AAAA,MACzB,WAAW,SAAS,MAAM,SAAS,WAAW,MAAM,SAAS,WAAW,EAAE;AAAA,IAC5E;AAAA,IACA,kBAAkB,IAAI;AAAA,IACtB,WAAW,YAAY,MAAM;AAAA,IAC7B,UACE,OAAO,QAAQ,SAAS,WACxB,mBAAmB,aACnB,CAAC,eAAe,IAAI,OAAO,QAAQ,EAAE;AAAA,EACzC;AAAA;AAGF,SAAS,sBAAsB,CAC7B,KACA,SACA,oBAAoB,SAAS,SAAS,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,GACxC;AAAA,EACxB,MAAM,cAAc,IAAI,iBAAiB,OAAO,YAAY,OAAO,IAAI,YAAY;AAAA,EACnF,MAAM,YAAY,IAAI,uBACjB,EAAE,MAAM,QAAQ,IAAI,IAAI,qBAAqB,IAC9C,IAAI,kCACD,EAAE,MAAM,kBAAkB,IAAI,IAAI,gCAAgC,IACnE;AAAA,EACN,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,eAAe,IAAI;AAAA,IACnB,aAAa,IAAI;AAAA,IACjB,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,YAAY,IAAI,KAAK,IAAI,WAAW;AAAA,OAChC,gBAAgB,aAAa,OAAO,cAAc,WAAW,IAAI,EAAE,YAAY,IAAI,CAAC;AAAA,IACxF;AAAA,OACI,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,OAC7B,IAAI,qBAAqB,WAC7B,IAAI,uBAAuB,QAC3B,IAAI,2BAA2B,OAC3B;AAAA,MACE,WAAW;AAAA,QACT,QAAQ;AAAA,QACR,OAAO;AAAA,UACL,UAAU,IAAI;AAAA,UACd,aAAa,IAAI;AAAA,QACnB;AAAA,MACF;AAAA,IACF,IACA,IAAI,qBAAqB,gBACvB,EAAE,WAAW,EAAE,QAAQ,cAAuB,EAAE,IAChD,CAAC;AAAA,EACT;AAAA;AAGF,SAAS,kBAAkB,CAAC,KAAwD;AAAA,EAClF,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,SAAS,qBAAqB,IAAI,OAAO;AAAA,IACzC,YAAY,IAAI;AAAA,IAChB,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,OAAO,IAAI,KAAK,IAAI,YAAY;AAAA,MAChC,KAAK,IAAI,KAAK,IAAI,UAAU;AAAA,MAC5B,SAAS,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC;AAAA,IACA,OAAO,IAAI;AAAA,OACP,IAAI,oBAAoB,OAAO,CAAC,IAAI,EAAE,eAAe,IAAI,gBAAgB;AAAA,IAC7E,YAAY,IAAI,KAAK,IAAI,WAAW;AAAA,IACpC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGF,SAAS,oBAAoB,CAAC,OAAoD;AAAA,EAChF,MAAM,UAAU,KAAK,MAAM,KAAK;AAAA,EAChC,OAAO,QAAQ,IAAI,CAAC,YAAY;AAAA,IAC9B,SAAS,gBAAgB,OAAO,OAAO;AAAA,IACvC,UAAU,2BAA2B,CAAC,OAAO,QAAQ,GAAG,eAAe,EAAE;AAAA,EAC3E,EAAE;AAAA;AAGJ,SAAS,oBAAoB,CAAC,aAAyD;AAAA,EACrF,OAAO;AAAA,IACL,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,KAAK,UAAU,YAAY,OAAO;AAAA,IAClC,YAAY;AAAA,IACZ,YAAY,OAAO,MAAM,YAAY;AAAA,IACrC,YAAY,OAAO,IAAI,YAAY;AAAA,IACnC,YAAY;AAAA,IACZ,YAAY,iBAAiB;AAAA,IAC7B,YAAY,WAAW,YAAY;AAAA,IACnC,YAAY,UAAU,YAAY;AAAA,EACpC;AAAA;AAGF,SAAS,mBAAmB,CAAC,UAA2B,MAA6B;AAAA,EACnF,IACE,iBAAiB,uBAAuB,QAAQ,CAAC,MACjD,iBAAiB,uBAAuB,IAAI,CAAC,GAC7C;AAAA,IACA,MAAM,IAAI,UAAU,+DAA+D;AAAA,EACrF;AAAA;AAGF,SAAS,sBAAsB,CAAC,OAAoC;AAAA,EAClE,gBAAe,MAAM,WAAW,WAAW;AAAA,EAC3C,gBAAe,MAAM,IAAI,WAAW;AAAA;AAGtC,SAAS,eAAe,CAAC,QAA4C;AAAA,EACnE,OAAO,IAAI,oBACT,oBACA,4FAA4F,OAAO,MACrG;AAAA;AAGF,SAAS,kBAAkB,CAAC,OAIJ;AAAA,EACtB,OAAO,IAAI,oBACT,uBACA,2CAA2C,MAAM,yCAAyC,MAAM,wBAAwB,MAAM,UAChI;AAAA;AAGF,SAAS,sBAAsB,CAAC,QAAqC;AAAA,EACnE,OAAO,IAAI,oBACT,2BACA,2CAA2C,uDAC7C;AAAA;AAGF,SAAS,YAAY,CAAC,aAAqC,WAAwC;AAAA,EACjG,OAAO,IAAI,oBACT,6BACA,uBAAuB,wCAAwC,YAAY,qBAAqB,YAAY,SAC9G;AAAA;AAGF,SAAS,iBAAiB,CAAC,OAAyB;AAAA,EAClD,OAAO,iBAAiB,SAAS,cAAc,KAAK,MAAM,OAAO;AAAA;;;ACl8BnE,6BAAS;;;ACTT,6BAAS;;;ACiKF,SAAS,eAAe,CAAC,KAAoC;AAAA,EAClE,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,OAAO,IAAI;AAAA,IACX,aAAa,IAAI,gBAAgB;AAAA,IACjC,WAAW,IAAI,cAAc;AAAA,IAC7B,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGK,SAAS,mBAAmB,CAAC,KAAoD;AAAA,EACtF,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,YAAY,IAAI;AAAA,IAChB,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,QAAQ,oBAAoB,IAAI,MAAM;AAAA,IACtC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGK,SAAS,yBAAyB,CAAC,KAAwD;AAAA,EAChG,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,MAAM,IAAI;AAAA,IACV,aAAa,IAAI,eAAe;AAAA,IAChC,QAAQ,IAAI;AAAA,IACZ,oBACE,IAAI,6BAA6B,IAAI,0BACjC;AAAA,MACE,MAAM,IAAI;AAAA,MACV,IAAI,IAAI;AAAA,IACV,IACA;AAAA,IACN,oBAAoB,IAAI,yBAAyB;AAAA,IACjD,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGK,SAAS,wCAAwC,CACtD,KACqC;AAAA,EACrC,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,kBAAkB,IAAI;AAAA,IACtB,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGK,SAAS,kBAAkB,CAAC,KAA0C;AAAA,EAC3E,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,QAAQ,IAAI;AAAA,IACZ,YAAY,IAAI;AAAA,IAChB,UAAU,IAAI;AAAA,IACd,WAAW,IAAI;AAAA,IACf,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,mBAAmB,IAAI,sBAAsB,IAAI,KAAK,IAAI,mBAAmB,IAAI;AAAA,IACjF,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,YAAY,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,IAC5D,WAAW,IAAI,cAAc;AAAA,IAC7B,WAAW,IAAI,cAAc;AAAA,IAC7B,QACE,IAAI,uBAAuB,QAAQ,IAAI,gBAAgB,QAAQ,IAAI,sBAAsB,OACrF;AAAA,MACE,YAAY,IAAI;AAAA,MAChB,iBAAiB,IAAI,KAAK,IAAI,iBAAiB;AAAA,MAC/C,kBAAkB,IAAI;AAAA,MACtB,0BAA0B,IAAI,+BAA+B;AAAA,MAC7D,aAAa,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,IAC/D,IACA;AAAA,EACR;AAAA;AAGK,SAAS,sBAAsB,CAAC,KAAkD;AAAA,EACvF,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,SAAS,EAAE,MAAM,IAAI,cAAc,IAAI,IAAI,WAAW;AAAA,IACtD,WAAW,IAAI;AAAA,IACf,UAAU,yBAAyB,IAAI,SAAS;AAAA,IAChD,oBACE,IAAI,6BAA6B,IAAI,0BACjC;AAAA,MACE,MAAM,IAAI;AAAA,MACV,IAAI,IAAI;AAAA,IACV,IACA;AAAA,IACN,oBAAoB,IAAI,yBAAyB;AAAA,IACjD,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,YAAY,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,IAC5D,mBAAmB,IAAI,wBAAwB;AAAA,IAC/C,mBAAmB,IAAI,wBAAwB;AAAA,EACjD;AAAA;AAGK,SAAS,qBAAqB,CACnC,KACA,UACkB;AAAA,EAClB,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,OAAO,IAAI;AAAA,IACX;AAAA,IACA,QAAQ,IAAI;AAAA,IACZ,oBACE,IAAI,6BAA6B,IAAI,0BACjC;AAAA,MACE,MAAM,IAAI;AAAA,MACV,IAAI,IAAI;AAAA,IACV,IACA;AAAA,IACN,oBAAoB,IAAI,yBAAyB;AAAA,IACjD,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,EACzD;AAAA;AAGK,SAAS,0BAA0B,CACxC,KACuB;AAAA,EACvB,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGK,SAAS,oBAAoB,CAAC,KAA8C;AAAA,EACjF,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,YAAY,IAAI;AAAA,IAChB,UAAU,IAAI;AAAA,IACd,OAAO,IAAI;AAAA,IACX,WAAW,IAAI;AAAA,IACf,UAAU,IAAI,aAAa;AAAA,IAC3B,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,EACzD;AAAA;AAGK,SAAS,mCAAmC,CACjD,KACgC;AAAA,EAChC,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,YAAY,IAAI;AAAA,IAChB,UAAU,IAAI;AAAA,IACd,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,cAAc,IAAI;AAAA,IAClB,UAAU,IAAI,aAAa;AAAA,IAC3B,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,EAC5D;AAAA;AAGK,SAAS,8BAA8B,CAC5C,KAC2B;AAAA,EAC3B,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,gBAAgB,IAAI;AAAA,IACpB,UAAU,IAAI;AAAA,IACd,YAAY,IAAI;AAAA,IAChB,QAAQ,IAAI;AAAA,IACZ,gBAAgB,IAAI,oBAAoB;AAAA,IACxC,mBAAmB,IAAI,uBAAuB;AAAA,IAC9C,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,UAAU,IAAI,YAAY,IAAI,KAAK,IAAI,SAAS,IAAI;AAAA,IACpD,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,EAC5D;AAAA;AAGK,SAAS,uBAAuB,CACrC,OACe;AAAA,EACf,OAAO,QAAQ,KAAK,UAAU,KAAK,IAAI;AAAA;AAGlC,SAAS,4BAA4B,CAAC,OAAqD;AAAA,EAChG,OAAO,UAAU,YAAY,OAAO,KAAK,UAAU,KAAK;AAAA;AAG1D,SAAS,mBAAmB,CAAC,OAAqE;AAAA,EAChG,OAAO,QAAS,KAAK,MAAM,KAAK,IAA0C;AAAA;AAG5E,SAAS,wBAAwB,CAAC,OAAqD;AAAA,EACrF,OAAO,UAAU,OAAO,YAAa,KAAK,MAAM,KAAK;AAAA;;;ACxXvD;AAqBO,SAAS,cAAc,CAAC,OAAe,OAAuB;AAAA,EACnE,MAAM,aAAa,MAAM,KAAK;AAAA,EAC9B,IAAI,CAAC,YAAY;AAAA,IACf,MAAM,IAAI,iBAAiB,iBAAiB,UAAU,mCAAmC;AAAA,EAC3F;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,cAAc,CAAC,OAAuB;AAAA,EACpD,OAAO,eAAe,OAAO,OAAO,EAAE,YAAY;AAAA;AAG7C,SAAS,iBAAiB,CAAC,UAA4D;AAAA,EAC5F,OAAO,CAAC,GAAG,IAAI,KAAK,YAAY,CAAC,GAAG,IAAI,CAAC,YAAY,eAAe,SAAS,UAAU,CAAC,CAAC,CAAC;AAAA;AAGrF,SAAS,SAAS,CAAC,OAA+B;AAAA,EACvD,OAAO,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI;AAAA;AAGhC,SAAS,KAAK,CAAC,OAAqB;AAAA,EACzC,OAAO,MAAM,YAAY;AAAA;AAGpB,SAAS,cAAc,CAAC,QAAiD;AAAA,EAC9E,OAAO,WAAW,aAAa,OAAO,WAAW;AAAA;AAG5C,SAAS,gBAAgB,CAC9B,OACA,MACA,OACQ;AAAA,EACR,MAAM,SAAS,MAAM,UAAU;AAAA,EAE/B,IAAI,MAAM,UAAU,WAAW;AAAA,IAC7B,KAAK,KAAK,MAAM,OAAO,MAAM;AAAA,IAC7B,OAAO,GAAG;AAAA,EACZ;AAAA,EAEA,IAAI,SAAS,GAAG;AAAA,IACd,KAAK,KAAK,MAAM;AAAA,IAChB,OAAO,GAAG;AAAA,EACZ;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,cAAc,CAC5B,IACA,QAC0B;AAAA,EAC1B,OAAO,GACJ,MAAM,0DAA0D,EAChE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA;AAG7B,SAAS,iBAAiB,CAC/B,IACA,QAC0B;AAAA,EAC1B,OAAO,GACJ,MAAM,6DAA6D,EACnE,IAAI,OAAO,WAAW,eAAe,OAAO,KAAK,CAAC;AAAA;AAGhD,SAAS,uBAAuB,CACrC,IACA,QAKkC;AAAA,EAClC,OAAO,GACJ,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOF,EACC,IAAI,OAAO,WAAW,OAAO,YAAY,OAAO,OAAO;AAAA;AAGrD,SAAS,iBAAiB,CAC/B,IACA,QAC6B;AAAA,EAC7B,OAAO,GACJ,MAAM,6DAA6D,EACnE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA;AAG7B,SAAS,cAAc,CAC5B,IACA,QAC8C;AAAA,EAC9C,MAAM,MAAM,kBAAkB,IAAI,MAAM;AAAA,EACxC,OAAO,MAAM,mBAAmB,GAAG,IAAI;AAAA;AAGlC,SAAS,kBAAkB,CAChC,IACA,QACuC;AAAA,EACvC,MAAM,UAAU,eAAe,IAAI,MAAM;AAAA,EACzC,IAAI,CAAC,SAAS;AAAA,IACZ,MAAM,IAAI,iBACR,mBACA,mBAAmB,OAAO,8BAA8B,OAAO,aACjE;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,qBAAqB,CACnC,IACA,QACmB;AAAA,EACnB,MAAM,OAAO,GACV,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOF,EACC,IAAI,OAAO,WAAW,OAAO,YAAY;AAAA,EAE5C,OAAO,KAAK,IAAI,CAAC,QAAQ,IAAI,QAAQ;AAAA;AAGhC,SAAS,iBAAiB,CAC/B,IACA,QACyB;AAAA,EACzB,MAAM,MAAM,GACT,MAAM,gEAAgE,EACtE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,EAElC,OAAO,MAAM,sBAAsB,IAAI,GAAG,IAAI;AAAA;AAGzC,SAAS,qBAAqB,CACnC,IACA,QACkB;AAAA,EAClB,MAAM,aAAa,kBAAkB,IAAI,MAAM;AAAA,EAC/C,IAAI,CAAC,YAAY;AAAA,IACf,MAAM,IAAI,iBACR,sBACA,sBAAsB,OAAO,8BAA8B,OAAO,aACpE;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,0BAA0B,CACxC,IACA,QACyB;AAAA,EACzB,MAAM,MAAM,GACT,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAUF,EACC,IACC,OAAO,WACP,eAAe,OAAO,KAAK,GAC3B,MAAM,OAAO,GAAG,CAClB;AAAA,EAEF,OAAO,MAAM,sBAAsB,IAAI,GAAG,IAAI;AAAA;AAGzC,SAAS,uBAAuB,CACrC,IACA,QAKM;AAAA,EACN,GAAG,MAAM,+EAA+E,EAAE,IACxF,OAAO,WACP,OAAO,YACT;AAAA,EAEA,YAAY,OAAO,YAAY,OAAO,SAAS,QAAQ,GAAG;AAAA,IACxD,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAQF,EAAE,IAAI,OAAO,WAAW,OAAO,cAAc,SAAS,KAAK;AAAA,EAC7D;AAAA;AAGK,SAAS,mBAAmB,CACjC,IACA,QAC+B;AAAA,EAC/B,OAAO,GACJ,MAAM,gEAAgE,EACtE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA;AAG7B,SAAS,gBAAgB,CAC9B,IACA,QACwB;AAAA,EACxB,MAAM,MAAM,oBAAoB,IAAI,MAAM;AAAA,EAC1C,OAAO,MAAM,qBAAqB,GAAG,IAAI;AAAA;AAGpC,SAAS,gBAAgB,CAC9B,IACA,QAMiB;AAAA,EACjB,MAAM,YAAY,eAAe,OAAO,WAAW,YAAY;AAAA,EAC/D,MAAM,KAAK,eAAe,OAAO,IAAI,eAAe;AAAA,EACpD,MAAM,YAAY,eAAe,OAAO,WAAW,uBAAuB;AAAA,EAC1E,MAAM,MAAM,oBAAoB,IAAI,EAAE,WAAW,GAAG,CAAC;AAAA,EAErD,IAAI,CAAC,KAAK;AAAA,IACR,MAAM,IAAI,iBACR,sBACA,sBAAsB,8BAA8B,aACtD;AAAA,EACF;AAAA,EAEA,IAAI,IAAI,eAAe,aAAa,IAAI,eAAe,IAAI,YAAY;AAAA,IACrE,MAAM,IAAI,iBACR,sBACA,sBAAsB,iCAAiC,aACzD;AAAA,EACF;AAAA,EAEA,IAAI,IAAI,KAAK,IAAI,UAAU,KAAK,OAAO,YAAY;AAAA,IACjD,MAAM,IAAI,iBACR,sBACA,sBAAsB,+BAA+B,aACvD;AAAA,EACF;AAAA,EAEA,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA,GAMF,EAAE,IAAI,MAAM,OAAO,UAAU,GAAG,WAAW,EAAE;AAAA,EAE7C,OAAO,qBAAqB;AAAA,OACvB;AAAA,IACH,aAAa,MAAM,OAAO,UAAU;AAAA,EACtC,CAAC;AAAA;AAGI,SAAS,qBAAqB,CACnC,IACA,QACiC;AAAA,EACjC,OAAO,GACJ,MAAM,gFAAgF,EACtF,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA;AAG7B,SAAS,kBAAkB,CAChC,IACA,QACuC;AAAA,EACvC,MAAM,MAAM,sBAAsB,IAAI,MAAM;AAAA,EAC5C,OAAO,MAAM,oCAAoC,GAAG,IAAI;AAAA;AAGnD,SAAS,kBAAkB,CAChC,IACA,QAMgC;AAAA,EAChC,MAAM,YAAY,eAAe,OAAO,WAAW,YAAY;AAAA,EAC/D,MAAM,KAAK,eAAe,OAAO,IAAI,+BAA+B;AAAA,EACpE,MAAM,YAAY,eAAe,OAAO,WAAW,iBAAiB;AAAA,EACpE,MAAM,MAAM,sBAAsB,IAAI,EAAE,WAAW,GAAG,CAAC;AAAA,EAEvD,IAAI,CAAC,KAAK;AAAA,IACR,MAAM,IAAI,iBACR,wBACA,sCAAsC,8BAA8B,aACtE;AAAA,EACF;AAAA,EAEA,IAAI,IAAI,eAAe,aAAa,IAAI,aAAa;AAAA,IACnD,MAAM,IAAI,iBACR,wBACA,sCAAsC,iCAAiC,aACzE;AAAA,EACF;AAAA,EAEA,IAAI,IAAI,KAAK,IAAI,UAAU,KAAK,OAAO,YAAY;AAAA,IACjD,MAAM,IAAI,iBACR,wBACA,sCAAsC,+BAA+B,aACvE;AAAA,EACF;AAAA,EAEA,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA,GAMF,EAAE,IAAI,MAAM,OAAO,UAAU,GAAG,WAAW,EAAE;AAAA,EAE7C,OAAO,oCAAoC;AAAA,OACtC;AAAA,IACH,aAAa,MAAM,OAAO,UAAU;AAAA,EACtC,CAAC;AAAA;AAGI,SAAS,4BAA4B,CAC1C,IACA,WACA,SACM;AAAA,EACN,MAAM,YAAY,eAAe,QAAQ,IAAI,YAAY;AAAA,EACzD,eAAe,QAAQ,UAAU,kBAAkB;AAAA,EACnD,eAAe,QAAQ,WAAW,oBAAoB;AAAA,EACtD,yBAAyB,IAAI,WAAW,SAAS;AAAA;AAG5C,SAAS,wBAAwB,CAAC,IAAc,WAAmB,WAAyB;AAAA,EACjG,IAAI,kBAAkB,IAAI,EAAE,WAAW,IAAI,UAAU,CAAC,GAAG;AAAA,IACvD,MAAM,IAAI,iBACR,qBACA,mBAAmB,0CAA0C,aAC/D;AAAA,EACF;AAAA;AAGK,SAAS,aAAa,CAC3B,IACA,OACuC;AAAA,EACvC,MAAM,KAAK,eAAe,MAAM,IAAI,YAAY;AAAA,EAChD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,EAC9D,MAAM,SAAS,eAAe,MAAM,QAAQ,SAAS;AAAA,EACrD,MAAM,aAAa,eAAe,MAAM,YAAY,aAAa;AAAA,EACjE,MAAM,WAAW,eAAe,MAAM,UAAU,kBAAkB;AAAA,EAClE,MAAM,YAAY,eAAe,MAAM,WAAW,oBAAoB;AAAA,EAEtE,yBAAyB,IAAI,WAAW,EAAE;AAAA,EAE1C,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkBF,EAAE,IACA,WACA,IACA,QACA,YACA,UACA,WACA,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,GACrB,MAAM,oBAAoB,MAAM,MAAM,iBAAiB,IAAI,MAC3D,MAAM,aAAa,MACnB,MAAM,aAAa,MACnB,MAAM,SAAS,eAAe,MAAM,OAAO,YAAY,qBAAqB,IAAI,MAChF,MAAM,SAAS,MAAM,MAAM,OAAO,eAAe,IAAI,MACrD,MAAM,SAAS,eAAe,MAAM,OAAO,kBAAkB,oBAAoB,IAAI,IACvF;AAAA,EAEA,MAAM,UAAU,eAAe,IAAI,EAAE,WAAW,GAAG,CAAC;AAAA,EACpD,IAAI,CAAC,SAAS;AAAA,IACZ,MAAM,IAAI,iBACR,mBACA,kCAAkC,oBAAoB,aACxD;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,2BAA2B,CACzC,IACA,QAMkD;AAAA,EAClD,MAAM,YAAY,MAAM,OAAO,SAAS;AAAA,EACxC,MAAM,oBAAoB,OAAO,aAAa,YAAY,KAAK;AAAA,EAC/D,MAAM,aACJ,OAAO,aAAa,YAChB,CAAC,OAAO,WAAW,OAAO,QAAQ,WAAW,SAAS,IACtD,CAAC,OAAO,WAAW,OAAO,QAAQ,OAAO,UAAU,WAAW,SAAS;AAAA,EAC7E,MAAM,aACJ,OAAO,aAAa,YAChB,CAAC,WAAW,OAAO,WAAW,OAAO,QAAQ,WAAW,SAAS,IACjE,CAAC,WAAW,OAAO,WAAW,OAAO,QAAQ,OAAO,UAAU,WAAW,SAAS;AAAA,EACxF,MAAM,OAAO,GACV,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,UAKI;AAAA;AAAA;AAAA;AAAA;AAAA,KAMN,EACC,IAAI,GAAG,UAAU;AAAA,EAEpB,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA,QAKI;AAAA;AAAA;AAAA;AAAA,GAKN,EAAE,IAAI,GAAG,UAAU;AAAA,EAEnB,OAAO,KAAK,IAAI,CAAC,QACf,mBAAmB;AAAA,OACd;AAAA,IACH,YAAY;AAAA,EACd,CAAC,CACH;AAAA;AAGK,SAAS,qBAAqB,CACnC,IACA,OACuB;AAAA,EACvB,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,EAC9D,MAAM,SAAS,eAAe,MAAM,QAAQ,SAAS;AAAA,EACrD,MAAM,UAAU,eAAe,MAAM,SAAS,UAAU;AAAA,EACxD,IAAI,CAAC,eAAe,IAAI,EAAE,WAAW,IAAI,OAAO,CAAC,GAAG;AAAA,IAClD,MAAM,IAAI,iBACR,gBACA,gBAAgB,kCAAkC,aACpD;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,mBAAmB,IAAI,EAAE,WAAW,QAAQ,QAAQ,CAAC;AAAA,EAEtE,IAAI,UAAU;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,EAC3C,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASF,EAAE,IAAI,WAAW,QAAQ,SAAS,MAAM,QAAQ,MAAM,SAAS,CAAC;AAAA,EAEhE,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,MAAM;AAAA,IACd;AAAA,EACF;AAAA;AAGK,SAAS,qBAAqB,CACnC,IACA,QAC8B;AAAA,EAC9B,MAAM,YAAY,eAAe,OAAO,WAAW,YAAY;AAAA,EAC/D,MAAM,SAAS,eAAe,OAAO,QAAQ,SAAS;AAAA,EACtD,MAAM,UAAU,eAAe,OAAO,SAAS,UAAU;AAAA,EAEzD,MAAM,WAAW,mBAAmB,IAAI,EAAE,WAAW,QAAQ,QAAQ,CAAC;AAAA,EACtE,IAAI,CAAC,UAAU;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EAEA,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA,GAMF,EAAE,IAAI,WAAW,QAAQ,OAAO;AAAA,EAEhC,OAAO;AAAA;AAGF,SAAS,kBAAkB,CAChC,IACA,QAC8B;AAAA,EAC9B,MAAM,MAAM,GACT,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOF,EACC,IAAI,OAAO,WAAW,OAAO,QAAQ,OAAO,OAAO;AAAA,EAEtD,OAAO,MAAM,2BAA2B,GAAG,IAAI;AAAA;AAG1C,SAAS,sBAAsB,CACpC,IACA,QACkC;AAAA,EAClC,MAAM,OAAO,GACV,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOF,EACC,IAAI,OAAO,WAAW,OAAO,MAAM;AAAA,EAEtC,OAAO,KAAK,IAAI,0BAA0B;AAAA;AAGrC,SAAS,8BAA8B,CAC5C,IACA,QAC4B;AAAA,EAC5B,MAAM,QAAQ,eAAe,OAAO,KAAK;AAAA,EACzC,MAAM,YAAY,MAAM,OAAO,SAAS;AAAA,EACxC,MAAM,OAAO,GACV,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAUF,EACC,IAAI,OAAO,WAAW,OAAO,SAAS;AAAA,EAEzC,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASF,EAAE,IAAI,WAAW,OAAO,WAAW,OAAO,SAAS;AAAA,EAEnD,OAAO,KAAK,IAAI,CAAC,QACf,qBAAqB;AAAA,OAChB;AAAA,IACH,YAAY;AAAA,EACd,CAAC,CACH;AAAA;AAGK,SAAS,wBAAwB,CACtC,OACA,MAUA,SACO;AAAA,EACP,IAAI,yBAAwB,KAAK,GAAG;AAAA,IAClC,MAAM,IAAI,iBAAiB,MAAM,OAAO;AAAA,EAC1C;AAAA,EAEA,MAAM;AAAA;AAGR,SAAS,qBAAqB,CAAC,IAAc,KAAgD;AAAA,EAC3F,OAAO,sBACL,KACA,sBAAsB,IAAI;AAAA,IACxB,WAAW,IAAI;AAAA,IACf,cAAc,IAAI;AAAA,EACpB,CAAC,CACH;AAAA;;;AF1pBF,SAAS,qBAAqB,CAAC,IAAc,OAAsD;AAAA,EACjG,MAAM,KAAK,eAAe,MAAM,IAAI,iBAAiB;AAAA,EACrD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,EAC9D,MAAM,OAAO,eAAe,MAAM,MAAM,mBAAmB;AAAA,EAC3D,MAAM,YAAY,eAAe,MAAM,QAAQ,IAAI,yBAAyB;AAAA,EAC5E,MAAM,YAAY,eAAe,MAAM,WAAW,mBAAmB;AAAA,EACrE,yBAAyB,KAAK;AAAA,EAC9B,oBAAoB,IAAI,WAAW,MAAM,QAAQ,MAAM,SAAS;AAAA,EAChE,MAAM,WAAW,MAAM,aAAa,YAAY,YAAY,kBAAkB,MAAM,QAAQ;AAAA,EAE5F,IAAI;AAAA,IACF,GAAG,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAiBF,EAAE,IACA,WACA,IACA,MACA,MAAM,MACN,MAAM,QAAQ,MACd,WACA,WACA,6BAA6B,QAAQ,GACrC,MAAM,oBAAoB,QAAQ,MAClC,MAAM,oBAAoB,MAAM,MAChC,MAAM,sBAAsB,MAC5B,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,CACvB;AAAA,IACA,OAAO,OAAO;AAAA,IACd,yBACE,OACA,0BACA,wBAAwB,mCAAmC,aAC7D;AAAA;AAAA,EAGF,MAAM,MAAM,GACT,MAAM,kEAAkE,EACxE,IAAI,WAAW,EAAE;AAAA,EACpB,MAAM,QAAQ,MAAM,uBAAuB,GAAG,IAAI;AAAA,EAClD,IAAI,CAAC,OAAO;AAAA,IACV,MAAM,IAAI,kBACR,wBACA,wBAAwB,8BAA8B,aACxD;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAAA;AAGF,MAAM,2BAA2D;AAAA,EACzC;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAA+D;AAAA,IAC1E,OAAO,sBAAsB,KAAK,IAAI,KAAK;AAAA;AAAA,OAGvC,QAAO,CAAC,QAGwB;AAAA,IACpC,MAAM,MAAM,KAAK,GACd,MAAM,kEAAkE,EACxE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAClC,OAAO,MAAM,uBAAuB,GAAG,IAAI;AAAA;AAAA,OAGvC,KAAI,CAAC,OAAuE;AAAA,IAChF,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAC5C,IAAI,MAAM,MAAM;AAAA,MACd,aAAa,KAAK,UAAU;AAAA,MAC5B,KAAK,KAAK,MAAM,IAAI;AAAA,IACtB;AAAA,IACA,IAAI,MAAM,SAAS;AAAA,MACjB,aAAa,KAAK,oBAAoB,gBAAgB;AAAA,MACtD,KAAK,KAAK,MAAM,QAAQ,MAAM,MAAM,QAAQ,EAAE;AAAA,IAChD;AAAA,IACA,IAAI,CAAC,MAAM,gBAAgB;AAAA,MACzB,aAAa,KAAK,oBAAoB;AAAA,IACxC;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,SAAS,SAAS;AAAA,IAChD,MAAM,WAAW,KAAK,GACnB,MAAM,oDAAoD,OAAO,EACjE,IAAI,GAAG,IAAI;AAAA,IACd,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAC1B,MAAM,QAAQ,iBACZ;AAAA;AAAA;AAAA,QAGE;AAAA,4BACoB,aAAa;AAAA,OAEnC,WACA,KACF;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAElD,OAAO;AAAA,MACL,cAAc,KAAK,IAAI,sBAAsB;AAAA,MAC7C,SACE,MAAM,UAAU,YAAY,SAAS,MAAM,UAAU,KAAK,MAAM,QAAQ,SAAS;AAAA,MACnF,OAAO,SAAS;AAAA,IAClB;AAAA;AAAA,OAGI,qBAAoB,CAAC,QAMW;AAAA,IACpC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUF,EACC,IACC,OAAO,WACP,OAAO,IACP,OAAO,MACP,OAAO,WACP,MAAM,OAAO,GAAG,CAClB;AAAA,IAEF,OAAO,MAAM,uBAAuB,GAAG,IAAI;AAAA;AAAA,OAGvC,OAAM,CAAC,QAIkB;AAAA,IAC7B,MAAM,WAAW,MAAM,KAAK,QAAQ,MAAM;AAAA,IAC1C,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,kBACR,wBACA,wBAAwB,OAAO,8BAA8B,OAAO,aACtE;AAAA,IACF;AAAA,IAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,OAMF,EACC,IAAI,MAAM,OAAO,SAAS,GAAG,OAAO,WAAW,OAAO,EAAE;AAAA,IAE3D,OAAO,KAAK,UAAU,WAAW,IAAI,KAAK,OAAO,SAAS,EAAE;AAAA;AAAA,OAGxD,MAAK,CAAC,QAMmB;AAAA,IAC7B,MAAM,WAAW,MAAM,KAAK,QAAQ,MAAM;AAAA,IAC1C,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,kBACR,wBACA,wBAAwB,OAAO,8BAA8B,OAAO,aACtE;AAAA,IACF;AAAA,IAEA,MAAM,oBAAoB,OAAO,aAAa,SAAS;AAAA,IACvD,MAAM,oBAAoB,OAAO,aAAa,SAAS;AAAA,IAEvD,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQF,EACC,IACC,MAAM,OAAO,UAAU,GACvB,qBAAqB,MACrB,qBAAqB,MACrB,OAAO,WACP,OAAO,EACT;AAAA,IAEF,OAAO;AAAA,SACF;AAAA,MACH,YAAY,IAAI,KAAK,OAAO,UAAU;AAAA,MACtC;AAAA,MACA;AAAA,IACF;AAAA;AAEJ;AAEA,SAAS,mBAAmB,CAC1B,IACA,WACA,aACA,WACM;AAAA,EACN,IAAI,gBAAgB,QAAQ;AAAA,IAC1B,MAAM,MAAM,GACT,MAAM,0DAA0D,EAChE,IAAI,WAAW,SAAS;AAAA,IAC3B,IAAI;AAAA,MAAK;AAAA,IACT,MAAM,IAAI,kBACR,gBACA,gBAAgB,qCAAqC,aACvD;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,GACT,MAAM,qEAAqE,EAC3E,IAAI,WAAW,SAAS;AAAA,EAC3B,IAAI;AAAA,IAAK;AAAA,EACT,MAAM,IAAI,kBACR,2BACA,2BAA2B,qCAAqC,aAClE;AAAA;AAGF,SAAS,wBAAwB,CAAC,OAAyC;AAAA,EACzE,IACG,MAAM,SAAS,cAAc,MAAM,QAAQ,SAAS,UACpD,MAAM,SAAS,oBAAoB,MAAM,QAAQ,SAAS,kBAC3D;AAAA,IACA;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,kBACR,iBACA,6BAA6B,MAAM,qCAAqC,MAAM,QAAQ,QACxF;AAAA;;;AG3RF,6BAAS;AAMF,MAAM,mCAA2E;AAAA,EACzD;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAA2E;AAAA,IACtF,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,KAAK,GACF,MAAM,iFAAiF,EACvF,IAAI,MAAM,WAAW,MAAM,MAAM,SAAS,CAAC;AAAA,MAC9C,MAAM,UAAU,KAAK,GAClB,MACC,sGACF,EACC,IAAI,MAAM,SAAS;AAAA,MACtB,IAAI,QAAQ,SAAS,mCAAmC;AAAA,QACtD,MAAM,IAAI,kBACR,uCACA,mBAAmB,MAAM,wDAC3B;AAAA,MACF;AAAA,MACA,IAAI;AAAA,QACF,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,SAKR,EACE,IACC,eAAe,MAAM,WAAW,YAAY,GAC5C,eAAe,MAAM,IAAI,yBAAyB,GAClD,eAAe,MAAM,gBAAgB,kBAAkB,GACvD,eAAe,MAAM,UAAU,WAAW,GAC1C,eAAe,MAAM,YAAY,aAAa,GAC9C,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,CACvB;AAAA,QACF,OAAO,OAAO;AAAA,QACd,yBACE,OACA,kCACA,gCAAgC,MAAM,mCAAmC,MAAM,aACjF;AAAA;AAAA,MAEF,OAAO,YAAY,KAAK,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,KACtD;AAAA;AAAA,OAGG,QAAO,CAAC,QAA6D;AAAA,IACzE,OAAO,QAAQ,KAAK,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA;AAAA,OAG/C,cAAa,CAAC,QAAmE;AAAA,IACrF,MAAM,MAAM,KAAK,GACd,MAAM,iFAAiF,EACvF,IAAI,OAAO,WAAW,OAAO,QAAQ;AAAA,IACxC,OAAO,MAAM,+BAA+B,GAAG,IAAI;AAAA;AAAA,OAG/C,QAAO,CAAC,QAMX;AAAA,IACD,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,SAAS,KAAK,GACjB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUR,EACE,IACC,OAAO,QACP,OAAO,WACP,MAAM,OAAO,UAAU,GACvB,OAAO,WACP,OAAO,IACP,MAAM,OAAO,UAAU,GACvB,OAAO,WACP,OAAO,WACP,OAAO,QACP,MAAM,OAAO,UAAU,GACvB,MAAM,OAAO,UAAU,CACzB;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,kBAAkB,OAAO,IAAI,OAAO,SAAS;AAAA,MAC7E,OAAO,YAAY,KAAK,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,KACxD;AAAA;AAAA,OAGG,KAAI,CAAC,QAAsF;AAAA,IAC/F,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,SAAS,KAAK,GACjB,MAAM;AAAA;AAAA;AAAA;AAAA,OAIR,EACE,IAAI,MAAM,OAAO,QAAQ,GAAG,OAAO,WAAW,OAAO,IAAI,MAAM,OAAO,QAAQ,CAAC;AAAA,MAClF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,kBAAkB,OAAO,IAAI,OAAO,SAAS;AAAA,MAC7E,OAAO,YAAY,KAAK,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,KACxD;AAAA;AAEL;AAEO,SAAS,0BAA0B,CAAC,IAAc,WAAmB,IAAY;AAAA,EACtF,OAAO,QAAQ,IAAI,WAAW,EAAE;AAAA;AAGlC,SAAS,OAAO,CAAC,IAAc,WAAmB,IAAY;AAAA,EAC5D,MAAM,MAAM,GACT,MAAM,0EAA0E,EAChF,IAAI,WAAW,EAAE;AAAA,EACpB,OAAO,MAAM,+BAA+B,GAAG,IAAI;AAAA;AAGrD,SAAS,WAAW,CAAC,IAAc,WAAmB,IAAuC;AAAA,EAC3F,MAAM,SAAS,QAAQ,IAAI,WAAW,EAAE;AAAA,EACxC,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,IAAI,kBACR,gCACA,gCAAgC,8BAA8B,aAChE;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,iBAAiB,CAAC,IAAY,WAAqC;AAAA,EAC1E,OAAO,IAAI,kBACT,gCACA,gCAAgC,yCAAyC,aAC3E;AAAA;;;AC1IK,MAAM,+BAAmE;AAAA,EACjD;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAAuE;AAAA,IAClF,OAAO,wBAAwB,KAAK,IAAI,MAAM,sBAAsB,KAAK,IAAI,KAAK,CAAC;AAAA;AAAA,OAG/E,OAAM,CAAC,QAI6B;AAAA,IACxC,OAAO,wBAAwB,KAAK,IAAI,MAAM,sBAAsB,KAAK,IAAI,MAAM,CAAC;AAAA;AAAA,OAGhF,YAAW,CAAC,QAG4B;AAAA,IAC5C,OAAO,uBAAuB,KAAK,IAAI,MAAM;AAAA;AAAA,OAGzC,aAAY,CAAC,QAG2B;AAAA,IAC5C,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IAAI,OAAO,WAAW,OAAO,OAAO;AAAA,IAEvC,OAAO,KAAK,IAAI,0BAA0B;AAAA;AAE9C;;;ACzCO,MAAM,4BAA6D;AAAA,EAC3C;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAAiE;AAAA,IAC5E,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,IAC9D,MAAM,aAAa,eAAe,MAAM,YAAY,aAAa;AAAA,IACjE,MAAM,UAAU,eAAe,MAAM,SAAS,SAAS;AAAA,IACvD,MAAM,SAAS,eAAe,MAAM,QAAQ,SAAS;AAAA,IACrD,MAAM,WAAW,wBAAwB,KAAK,IAAI;AAAA,MAChD;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,MAAM,YAAY,WAAW,IAAI,KAAK,SAAS,UAAU,IAAI,UAAU,MAAM,SAAS;AAAA,IACtF,MAAM,YAAY,MAAM,YACpB,IAAI,KAAK,MAAM,SAAS,IACxB,WACE,IAAI,OACJ;AAAA,IAEN,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAgBF,EACC,IACC,WACA,YACA,SACA,QACA,wBAAwB,MAAM,MAAM,GACpC,MAAM,SAAS,GACf,MAAM,SAAS,CACjB;AAAA,IAEF,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,MAAM,SAAS,gBAAgB,MAAM,MAAM,IAAI;AAAA,MACvD;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,aAAY,CAAC,QAIoB;AAAA,IACrC,MAAM,MAAM,wBAAwB,KAAK,IAAI,MAAM;AAAA,IACnD,OAAO,MAAM,oBAAoB,GAAG,IAAI;AAAA;AAAA,OAGpC,YAAW,CAAC,QAGyB;AAAA,IACzC,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IAAI,OAAO,WAAW,OAAO,MAAM;AAAA,IAEtC,OAAO,KAAK,IAAI,mBAAmB;AAAA;AAEvC;;;ACzFA,6BAAS;AAqBF,MAAM,0BAAyD;AAAA,EACvC;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,qBAAoB,CAAC,OAAqE;AAAA,IAC9F,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,KAAK,eAAe,MAAM,IAAI,eAAe;AAAA,MACnD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,MAC9D,MAAM,QAAQ,eAAe,MAAM,KAAK;AAAA,MACxC,MAAM,WAAW,kBAAkB,MAAM,QAAQ;AAAA,MACjD,MAAM,MAAM,UAAU,MAAM,aAAa,MAAM,SAAS;AAAA,MACxD,MAAM,iBAAiB,2BAA2B,KAAK,IAAI;AAAA,QACzD;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MAED,IAAI,gBAAgB;AAAA,QAClB,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAUF,EACC,IACC,MAAM,oBAAoB,QAAQ,MAClC,MAAM,oBAAoB,MAAM,MAChC,MAAM,sBAAsB,MAC5B,MAAM,MAAM,SAAS,GACrB,MAAM,GAAG,GACT,WACA,eAAe,EACjB;AAAA,QACF,wBAAwB,KAAK,IAAI;AAAA,UAC/B;AAAA,UACA,cAAc,eAAe;AAAA,UAC7B;AAAA,QACF,CAAC;AAAA,QAED,OAAO,sBAAsB,KAAK,IAAI,EAAE,WAAW,IAAI,eAAe,GAAG,CAAC;AAAA,MAC5E;AAAA,MAEA,IAAI,kBAAkB,KAAK,IAAI,EAAE,WAAW,GAAG,CAAC,GAAG;AAAA,QACjD,MAAM,IAAI,kBACR,wBACA,sBAAsB,qDAAqD,aAC7E;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,MAC3C,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAcF,EACC,IACC,WACA,IACA,OACA,MAAM,oBAAoB,QAAQ,MAClC,MAAM,oBAAoB,MAAM,MAChC,MAAM,sBAAsB,MAC5B,MAAM,SAAS,GACf,MAAM,GAAG,GACT,MAAM,MAAM,SAAS,CACvB;AAAA,QACF,OAAO,OAAO;AAAA,QACd,yBACE,OACA,wBACA,sBAAsB,mCAAmC,aAC3D;AAAA;AAAA,MAGF,wBAAwB,KAAK,IAAI,EAAE,WAAW,cAAc,IAAI,SAAS,CAAC;AAAA,MAC1E,OAAO,sBAAsB,KAAK,IAAI,EAAE,WAAW,GAAG,CAAC;AAAA,KACxD;AAAA;AAAA,OAGG,QAAO,CAAC,QAGuB;AAAA,IACnC,OAAO,kBAAkB,KAAK,IAAI,MAAM;AAAA;AAAA,OAGpC,iBAAgB,CAAC,QAIc;AAAA,IACnC,OAAO,2BAA2B,KAAK,IAAI,MAAM;AAAA;AAAA,OAG7C,KAAI,CAAC,OAAqE;AAAA,IAC9E,IAAI,eAAe,MAAM,QAAQ,KAAK,eAAe,MAAM,QAAQ,GAAG;AAAA,MACpE,OAAO,EAAE,aAAa,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IACrD;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,OAAO;AAAA,MACf,aAAa,KAAK,WAAW;AAAA,MAC7B,KAAK,KAAK,eAAe,MAAM,KAAK,CAAC;AAAA,IACvC;AAAA,IAEA,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IAEA,MAAM,WAAW,MAAM,WAAW,kBAAkB,MAAM,QAAQ,IAAI;AAAA,IACtE,IAAI,UAAU;AAAA,MACZ,aAAa,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iDAMyB,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA;AAAA,OAE3E;AAAA,MACD,KAAK,KAAK,GAAG,QAAQ;AAAA,IACvB;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC9C,MAAM,WAAW,KAAK,GACnB,MAAM,kDAAkD,OAAO,EAC/D,IAAI,GAAG,IAAI;AAAA,IAEd,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAC1B,MAAM,QAAQ,iBACZ;AAAA;AAAA;AAAA,QAGE;AAAA,4BACoB,aAAa;AAAA,OAEnC,WACA,KACF;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAElD,OAAO;AAAA,MACL,aAAa,KAAK,IAAI,CAAC,QACrB,sBACE,KACA,sBAAsB,KAAK,IAAI;AAAA,QAC7B,WAAW,IAAI;AAAA,QACf,cAAc,IAAI;AAAA,MACpB,CAAC,CACH,CACF;AAAA,MACA,UAAU,MAAM,UAAU,KAAK,KAAK,SAAS,SAAS;AAAA,MACtD,OAAO,SAAS;AAAA,IAClB;AAAA;AAAA,OAGI,OAAM,CAAC,QAIiB;AAAA,IAC5B,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,sBAAsB,KAAK,IAAI,MAAM;AAAA,MAErC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQF,EACC,IAAI,MAAM,OAAO,UAAU,GAAG,MAAM,OAAO,UAAU,GAAG,OAAO,WAAW,OAAO,EAAE;AAAA,MAEtF,OAAO,sBAAsB,KAAK,IAAI,MAAM;AAAA,KAC7C;AAAA;AAAA,OAGG,OAAM,CAAC,QAIiB;AAAA,IAC5B,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,sBAAsB,KAAK,IAAI,MAAM;AAAA,MAErC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQF,EACC,IAAI,MAAM,OAAO,SAAS,GAAG,MAAM,OAAO,SAAS,GAAG,OAAO,WAAW,OAAO,EAAE;AAAA,MAEpF,OAAO,sBAAsB,KAAK,IAAI,MAAM;AAAA,KAC7C;AAAA;AAEL;;;AChQA;AAMA,6BAAS;AAeF,MAAM,yBAAuD;AAAA,EACrC;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAA2D;AAAA,IACtE,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,KAAK,eAAe,MAAM,IAAI,eAAe;AAAA,MACnD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,MAC9D,MAAM,aAAa,eAAe,MAAM,YAAY,aAAa;AAAA,MACjE,MAAM,WAAW,2BAA2B,MAAM,QAAQ;AAAA,MAC1D,MAAM,QAAQ,eAAe,MAAM,KAAK;AAAA,MACxC,MAAM,YAAY,eAAe,MAAM,WAAW,uBAAuB;AAAA,MAEzE,IAAI,oBAAoB,KAAK,IAAI,EAAE,WAAW,GAAG,CAAC,GAAG;AAAA,QACnD,MAAM,IAAI,kBACR,wBACA,sBAAsB,mCAAmC,aAC3D;AAAA,MACF;AAAA,MAEA,+BAA+B,KAAK,IAAI;AAAA,QACtC;AAAA,QACA;AAAA,QACA,WAAW,MAAM;AAAA,MACnB,CAAC;AAAA,MAED,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAaF,EACC,IACC,WACA,IACA,YACA,UACA,OACA,WACA,MAAM,YAAY,MAClB,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,CACvB;AAAA,QACF,OAAO,OAAO;AAAA,QACd,yBACE,OACA,wBACA,sBAAsB,mCAAmC,aAC3D;AAAA;AAAA,MAGF,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,MAAM;AAAA,QAChB,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,QACnC,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,MACrC;AAAA,KACD;AAAA;AAAA,OAGG,QAAO,CAAC,QAGsB;AAAA,IAClC,OAAO,iBAAiB,KAAK,IAAI,MAAM;AAAA;AAAA,OAGnC,iBAAgB,CAAC,QAIa;AAAA,IAClC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAWF,EACC,IACC,OAAO,WACP,eAAe,OAAO,KAAK,GAC3B,MAAM,OAAO,GAAG,CAClB;AAAA,IAEF,OAAO,MAAM,qBAAqB,GAAG,IAAI;AAAA;AAAA,OAGrC,QAAO,CAAC,QAKe;AAAA,IAC3B,OAAO,wBAAwB,KAAK,IAAI,MAAM,iBAAiB,KAAK,IAAI,MAAM,CAAC;AAAA;AAAA,OAG3E,qBAAoB,CAAC,QAIa;AAAA,IACtC,OAAO,wBAAwB,KAAK,IAAI,MAAM,+BAA+B,KAAK,IAAI,MAAM,CAAC;AAAA;AAEjG;;;ACnJA,uCAAS;AAMT,6BAAS;AAWF,MAAM,wCAAqF;AAAA,EACnE;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CACV,OACyC;AAAA,IACzC,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,KAAK,eAAe,MAAM,IAAI,+BAA+B;AAAA,MACnE,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,MAC9D,MAAM,aAAa,eAAe,MAAM,YAAY,aAAa;AAAA,MACjE,MAAM,WAAW,4BAA2B,MAAM,QAAQ;AAAA,MAC1D,MAAM,YAAY,eAAe,MAAM,WAAW,iBAAiB;AAAA,MACnE,MAAM,YAAY,eAAe,MAAM,WAAW,iBAAiB;AAAA,MACnE,MAAM,eAAe,eAAe,MAAM,cAAc,oBAAoB;AAAA,MAE5E,IAAI,sBAAsB,KAAK,IAAI,EAAE,WAAW,GAAG,CAAC,GAAG;AAAA,QACrD,MAAM,IAAI,kBACR,0BACA,sCAAsC,mCAAmC,aAC3E;AAAA,MACF;AAAA,MAEA,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAcF,EACC,IACC,WACA,IACA,YACA,UACA,WACA,WACA,cACA,MAAM,YAAY,MAClB,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,CACvB;AAAA,QACF,OAAO,OAAO;AAAA,QACd,yBACE,OACA,0BACA,sCAAsC,mCAAmC,aAC3E;AAAA;AAAA,MAGF,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,MAAM;AAAA,QAChB,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,QACnC,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,MACrC;AAAA,KACD;AAAA;AAAA,OAGG,QAAO,CAAC,QAGqC;AAAA,IACjD,OAAO,mBAAmB,KAAK,IAAI,MAAM;AAAA;AAAA,OAGrC,QAAO,CAAC,QAK8B;AAAA,IAC1C,OAAO,wBAAwB,KAAK,IAAI,MAAM,mBAAmB,KAAK,IAAI,MAAM,CAAC;AAAA;AAErF;;;ACrGA,6BAAS;AAQF,MAAM,6CAEb;AAAA,EAC+B;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CACV,OAC8C;AAAA,IAC9C,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,IAC9D,MAAM,mBAAmB,eAAe,MAAM,kBAAkB,oBAAoB;AAAA,IACpF,MAAM,UAAU,eAAe,MAAM,SAAS,UAAU;AAAA,IACxD,MAAM,iBAAiB,KAAK,GACzB,MAAM,qEAAqE,EAC3E,IAAI,WAAW,gBAAgB;AAAA,IAClC,IAAI,CAAC,gBAAgB;AAAA,MACnB,MAAM,IAAI,kBACR,2BACA,2BAA2B,4CAA4C,aACzE;AAAA,IACF;AAAA,IAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASF,EACC,IAAI,WAAW,kBAAkB,SAAS,MAAM,QAAQ,MAAM,UAAU,MAAM,SAAS,CAAC,CAAC;AAAA,IAE5F,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IAAI,WAAW,kBAAkB,OAAO;AAAA,IAC3C,OAAO,yCAAyC,GAAG;AAAA;AAAA,OAG/C,2BAA0B,CAC9B,OACyD;AAAA,IACzD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,IAC9D,MAAM,mBAAmB,eAAe,MAAM,kBAAkB,oBAAoB;AAAA,IACpF,MAAM,iBAAiB,KAAK,GACzB,MAAM,qEAAqE,EAC3E,IAAI,WAAW,gBAAgB;AAAA,IAClC,IAAI,CAAC,gBAAgB;AAAA,MACnB,MAAM,IAAI,kBACR,2BACA,2BAA2B,4CAA4C,aACzE;AAAA,IACF;AAAA,IAEA,MAAM,WAAW,kBAAkB,MAAM,QAAQ;AAAA,IACjD,MAAM,UAAU,IAAI,IAAI,QAAQ;AAAA,IAChC,MAAM,WAAW,MAAM,KAAK,sBAAsB,EAAE,WAAW,iBAAiB,CAAC;AAAA,IACjF,WAAW,cAAc,UAAU;AAAA,MACjC,IAAI,WAAW,WAAW,MAAM,UAAU,CAAC,QAAQ,IAAI,WAAW,OAAO,GAAG;AAAA,QAC1E,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IAAI,WAAW,kBAAkB,WAAW,SAAS,MAAM,MAAM;AAAA,MACtE;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,MAAM,UAAU,MAAM,SAAS,CAAC;AAAA,IAClD,WAAW,WAAW,UAAU;AAAA,MAC9B,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IAAI,WAAW,kBAAkB,SAAS,MAAM,QAAQ,SAAS;AAAA,IACtE;AAAA,IAEA,OAAO,KAAK,sBAAsB,EAAE,WAAW,iBAAiB,CAAC;AAAA;AAAA,OAG7D,sBAAqB,CAAC,QAGgC;AAAA,IAC1D,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IACC,OAAO,WACP,OAAO,gBACT;AAAA,IAEF,OAAO,KAAK,IAAI,wCAAwC;AAAA;AAAA,OAGpD,aAAY,CAAC,QAGyC;AAAA,IAC1D,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IAAI,OAAO,WAAW,OAAO,OAAO;AAAA,IAEvC,OAAO,KAAK,IAAI,wCAAwC;AAAA;AAE5D;;;ACvJA,6BAAS;AAaF,MAAM,8BAAiE;AAAA,EAC/C;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAAqE;AAAA,IAChF,MAAM,KAAK,eAAe,MAAM,IAAI,oBAAoB;AAAA,IACxD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,IAC9D,MAAM,OAAO,eAAe,MAAM,MAAM,sBAAsB;AAAA,IAC9D,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,IAC3C,MAAM,YAAY,MAAM,YAAY,IAAI,KAAK,MAAM,SAAS,IAAI;AAAA,IAEhE,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcF,EACC,IACC,WACA,IACA,MACA,MAAM,eAAe,MACrB,MAAM,UAAU,UAChB,MAAM,oBAAoB,QAAQ,MAClC,MAAM,oBAAoB,MAAM,MAChC,MAAM,sBAAsB,MAC5B,MAAM,SAAS,GACf,MAAM,SAAS,CACjB;AAAA,MACF,OAAO,OAAO;AAAA,MACd,yBACE,OACA,6BACA,2BAA2B,mCAAmC,aAChE;AAAA;AAAA,IAGF,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,MAAM;AAAA,MACnB,QAAQ,MAAM,UAAU;AAAA,MACxB,oBAAoB,MAAM;AAAA,MAC1B,oBAAoB,MAAM;AAAA,MAC1B;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,QAAO,CAAC,QAG2B;AAAA,IACvC,MAAM,MAAM,KAAK,GACd,MAAM,qEAAqE,EAC3E,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAClC,OAAO,MAAM,0BAA0B,GAAG,IAAI;AAAA;AAAA,OAG1C,OAAM,CAAC,OAAqE;AAAA,IAChF,MAAM,KAAK,eAAe,MAAM,IAAI,oBAAoB;AAAA,IACxD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,IAC9D,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,IAC3C,MAAM,OACJ,MAAM,SAAS,YAAY,OAAO,eAAe,MAAM,MAAM,sBAAsB;AAAA,IACrF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASF,EACC,IAAI,MAAM,MAAM,eAAe,MAAM,MAAM,UAAU,MAAM,MAAM,SAAS,GAAG,WAAW,EAAE;AAAA,IAE7F,MAAM,UAAU,MAAM,KAAK,QAAQ,EAAE,WAAW,GAAG,CAAC;AAAA,IACpD,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,kBACR,2BACA,2BAA2B,8BAA8B,aAC3D;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,KAAI,CAAC,OAA6E;AAAA,IACtF,IAAI,eAAe,MAAM,QAAQ,GAAG;AAAA,MAClC,OAAO,EAAE,iBAAiB,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IACzD;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAC5C,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,SAAS,SAAS;AAAA,IAChD,MAAM,WAAW,KAAK,GACnB,MAAM,uDAAuD,OAAO,EACpE,IAAI,GAAG,IAAI;AAAA,IACd,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAC1B,MAAM,QAAQ,iBACZ;AAAA;AAAA;AAAA,QAGE;AAAA,4BACoB,aAAa;AAAA,OAEnC,WACA,KACF;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAElD,OAAO;AAAA,MACL,iBAAiB,KAAK,IAAI,yBAAyB;AAAA,MACnD,SACE,MAAM,UAAU,YAAY,SAAS,MAAM,UAAU,KAAK,MAAM,QAAQ,SAAS;AAAA,MACnF,OAAO,SAAS;AAAA,IAClB;AAAA;AAEJ;;;ACxJA,6BAAS;AAaF,MAAM,uBAAmD;AAAA,EACjC;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAAuD;AAAA,IAClE,OAAO,wBAAwB,KAAK,IAAI,MAAM,cAAc,KAAK,IAAI,KAAK,CAAC;AAAA;AAAA,OAGvE,QAAO,CAAC,QAGoB;AAAA,IAChC,OAAO,eAAe,KAAK,IAAI,MAAM;AAAA;AAAA,OAGjC,kBAAiB,CAAC,QAKU;AAAA,IAChC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAYF,EACC,IACC,OAAO,WACP,OAAO,QACP,OAAO,UACP,MAAM,OAAO,GAAG,GAChB,MAAM,OAAO,GAAG,CAClB;AAAA,IAEF,OAAO,MAAM,mBAAmB,GAAG,IAAI;AAAA;AAAA,OAGnC,mBAAkB,CAAC,QAIa;AAAA,IACpC,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUF,EACC,IACC,OAAO,WACP,OAAO,QACP,MAAM,OAAO,GAAG,GAChB,MAAM,OAAO,GAAG,CAClB;AAAA,IAEF,OAAO,KAAK,IAAI,kBAAkB;AAAA;AAAA,OAG9B,qBAAoB,CAAC,QAMO;AAAA,IAChC,MAAM,MAAM,kBAAkB,KAAK,IAAI,MAAM;AAAA,IAE7C,IACE,CAAC,OACD,IAAI,uBAAuB,QAC3B,IAAI,aAAa,OAAO,YACxB,IAAI,eAAe,OAAO,aAC1B,CAAC,iBAAiB,KAAK,OAAO,GAAG,GACjC;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,mBAAmB,GAAG;AAAA;AAAA,OAGzB,2BAA0B,CAAC,QAKC;AAAA,IAChC,MAAM,MAAM,kBAAkB,KAAK,IAAI,MAAM;AAAA,IAC7C,IACE,CAAC,OACD,IAAI,sBAAsB,QAC1B,IAAI,eAAe,OAAO,aAC1B,IAAI,KAAK,IAAI,iBAAiB,KAAK,OAAO,OAC1C,CAAC,iBAAiB,KAAK,OAAO,GAAG,GACjC;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,mBAAmB,GAAG;AAAA;AAAA,OAGzB,mBAAkB,CACtB,QAC0C;AAAA,IAC1C,OAAO,wBAAwB,KAAK,IAAI,MAAuC;AAAA,MAC7E,MAAM,MAAM,kBAAkB,KAAK,IAAI,MAAM;AAAA,MAC7C,IAAI,CAAC,KAAK,sBAAsB,CAAC,iBAAiB,KAAK,OAAO,GAAG,GAAG;AAAA,QAClE,OAAO,EAAE,QAAQ,UAAU;AAAA,MAC7B;AAAA,MAEA,MAAM,mBACJ,IAAI,gCAAgC,OAAO,oBAC3C,IAAI,iBAAiB,QACrB,OAAO,IAAI,QAAQ,IAAI,IAAI,KAAK,IAAI,YAAY,EAAE,QAAQ,KAAK,OAAO;AAAA,MACxE,IAAI,IAAI,uBAAuB,OAAO,oBAAoB,CAAC,kBAAkB;AAAA,QAC3E,IAAI,IAAI,gCAAgC,OAAO,kBAAkB;AAAA,UAC/D,OAAO,EAAE,QAAQ,UAAU;AAAA,QAC7B;AAAA,QACA,KAAK,GACF,MAAM,yEAAyE,EAC/E,IAAI,MAAM,OAAO,GAAG,GAAG,OAAO,WAAW,OAAO,EAAE;AAAA,QACrD,OAAO,EAAE,QAAQ,SAAS;AAAA,MAC5B;AAAA,MAEA,MAAM,YAAY,MAAM,OAAO,KAAK,SAAS;AAAA,MAC7C,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUN,EACA,IACC,OAAO,KAAK,WACZ,MAAM,OAAO,KAAK,eAAe,GACjC,OAAO,KAAK,kBACZ,MAAM,OAAO,GAAG,GAChB,MAAM,OAAO,GAAG,GAChB,WACA,WACA,OAAO,WACP,OAAO,EACT;AAAA,MACF,MAAM,UAAU,eAAe,KAAK,IAAI,MAAM;AAAA,MAC9C,OAAO,UAAU,EAAE,QAAQ,WAAW,QAAQ,IAAI,EAAE,QAAQ,UAAU;AAAA,KACvE;AAAA;AAAA,OAGG,aAAY,CAAC,QAOe;AAAA,IAChC,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,MAAM,MAAM,OAAO,GAAG;AAAA,MAC5B,MAAM,YAAY,MAAM,OAAO,SAAS;AAAA,MACxC,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAgBF,EACC,IACC,WACA,WACA,KACA,OAAO,WACP,OAAO,IACP,OAAO,UACP,OAAO,WACP,KACA,GACF;AAAA,MAEF,OAAO,OAAO,YAAY,IAAI,OAAO,eAAe,KAAK,IAAI,MAAM;AAAA,KACpE;AAAA;AAAA,OAGG,OAAM,CAAC,QAIc;AAAA,IACzB,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,WAAW,kBAAkB,KAAK,IAAI,MAAM;AAAA,MAElD,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,kBACR,mBACA,mBAAmB,OAAO,8BAA8B,OAAO,aACjE;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,MAAM,OAAO,SAAS,GAAG,OAAO,WAAW,OAAO,EAAE;AAAA,MAE3D,OAAO,mBAAmB;AAAA,WACrB;AAAA,QACH,YAAY,MAAM,OAAO,SAAS;AAAA,MACpC,CAAC;AAAA,KACF;AAAA;AAAA,OAGG,oBAAmB,CAAC,QAKY;AAAA,IACpC,OAAO,wBAAwB,KAAK,IAAI,MAAM,4BAA4B,KAAK,IAAI,MAAM,CAAC;AAAA;AAAA,OAGtF,MAAK,CAAC,QAIe;AAAA,IACzB,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,mBAAmB,KAAK,IAAI,MAAM;AAAA,MAElC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,MAAM,OAAO,UAAU,GAAG,OAAO,WAAW,OAAO,EAAE;AAAA,MAE5D,MAAM,UAAU,eAAe,KAAK,IAAI,MAAM;AAAA,MAC9C,IAAI,CAAC,SAAS;AAAA,QACZ,MAAM,IAAI,kBACR,mBACA,mBAAmB,OAAO,8BAA8B,OAAO,aACjE;AAAA,MACF;AAAA,MACA,OAAO;AAAA,KACR;AAAA;AAEL;AAEA,SAAS,gBAAgB,CAAC,KAA2B,KAAoB;AAAA,EACvE,OACE,IAAI,eAAe,QACnB,IAAI,KAAK,IAAI,UAAU,IAAI,QAC1B,IAAI,wBAAwB,QAAQ,IAAI,KAAK,IAAI,mBAAmB,IAAI;AAAA;;;AC9S7E,6BAAS;AAgBF,MAAM,oBAA6C;AAAA,EAC3B;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,OAAM,CAAC,OAAiD;AAAA,IAC5D,MAAM,KAAK,eAAe,MAAM,IAAI,SAAS;AAAA,IAC7C,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,IAC9D,MAAM,QAAQ,eAAe,MAAM,KAAK;AAAA,IAExC,IAAI,eAAe,KAAK,IAAI,EAAE,WAAW,GAAG,CAAC,GAAG;AAAA,MAC9C,MAAM,IAAI,mBACR,kBACA,gBAAgB,mCAAmC,aACrD;AAAA,IACF;AAAA,IAEA,IAAI,kBAAkB,KAAK,IAAI,EAAE,WAAW,MAAM,CAAC,GAAG;AAAA,MACpD,MAAM,IAAI,mBACR,kBACA,sBAAsB,sCAAsC,aAC9D;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,IAC3C,MAAM,YAAY,MAAM,YAAY,IAAI,KAAK,MAAM,SAAS,IAAI;AAAA,IAEhE,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAYF,EACC,IACC,WACA,IACA,OACA,MAAM,eAAe,MACrB,MAAM,aAAa,MACnB,MAAM,UAAU,UAChB,MAAM,SAAS,GACf,MAAM,SAAS,CACjB;AAAA,MACF,OAAO,OAAO;AAAA,MACd,yBACE,OACA,kBACA,gBAAgB,mCAAmC,aACrD;AAAA;AAAA,IAGF,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,MAAM;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM,UAAU;AAAA,MACxB;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,QAAO,CAAC,QAGiB;AAAA,IAC7B,MAAM,MAAM,eAAe,KAAK,IAAI,MAAM;AAAA,IAC1C,OAAO,MAAM,gBAAgB,GAAG,IAAI;AAAA;AAAA,OAGhC,WAAU,CAAC,QAGc;AAAA,IAC7B,MAAM,MAAM,kBAAkB,KAAK,IAAI,MAAM;AAAA,IAC7C,OAAO,MAAM,gBAAgB,GAAG,IAAI;AAAA;AAAA,OAGhC,cAAa,CAAC,OAAwD;AAAA,IAC1E,MAAM,WAAW,eAAe,KAAK,IAAI;AAAA,MACvC,WAAW,MAAM;AAAA,MACjB,IAAI,MAAM;AAAA,IACZ,CAAC;AAAA,IAED,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,mBACR,gBACA,gBAAgB,MAAM,8BAA8B,MAAM,aAC5D;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,IAC3C,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQF,EACC,IACC,MAAM,eAAe,MACrB,MAAM,aAAa,MACnB,MAAM,SAAS,GACf,MAAM,WACN,MAAM,EACR;AAAA,IAEF,OAAO,gBAAgB;AAAA,SAClB;AAAA,MACH,cAAc,MAAM,eAAe;AAAA,MACnC,YAAY,MAAM,aAAa;AAAA,MAC/B,YAAY,MAAM,SAAS;AAAA,IAC7B,CAAC;AAAA;AAAA,OAGG,aAAY,CAAC,OAAuD;AAAA,IACxE,MAAM,WAAW,eAAe,KAAK,IAAI;AAAA,MACvC,WAAW,MAAM;AAAA,MACjB,IAAI,MAAM;AAAA,IACZ,CAAC;AAAA,IAED,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,mBACR,gBACA,gBAAgB,MAAM,8BAA8B,MAAM,aAC5D;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,UAAU,MAAM,SAAS;AAAA,IAC3C,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IAAI,MAAM,QAAQ,MAAM,SAAS,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,IAEhE,OAAO,gBAAgB;AAAA,SAClB;AAAA,MACH,QAAQ,MAAM;AAAA,MACd,YAAY,MAAM,SAAS;AAAA,IAC7B,CAAC;AAAA;AAAA,OAGG,KAAI,CAAC,OAAyD;AAAA,IAClE,IAAI,eAAe,MAAM,QAAQ,GAAG;AAAA,MAClC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IAC/C;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC9C,MAAM,WAAW,KAAK,GACnB,MAAM,4CAA4C,OAAO,EACzD,IAAI,GAAG,IAAI;AAAA,IAEd,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAC1B,MAAM,QAAQ,iBACZ;AAAA;AAAA;AAAA,QAGE;AAAA,4BACoB,aAAa;AAAA,OAEnC,WACA,KACF;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAElD,OAAO;AAAA,MACL,OAAO,KAAK,IAAI,eAAe;AAAA,MAC/B,UAAU,MAAM,UAAU,KAAK,KAAK,SAAS,SAAS;AAAA,MACtD,OAAO,SAAS;AAAA,IAClB;AAAA;AAEJ;;;AbzJO,MAAM,kBAAyC;AAAA,EACnC;AAAA,EACA;AAAA,EAER;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,WAAW,CAAC,UAAoC,CAAC,GAAG;AAAA,IAClD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA,IAEA,KAAK,QAAQ,IAAI,oBAAoB,KAAK,EAAE;AAAA,IAC5C,KAAK,aAAa,IAAI,4BAA4B,KAAK,EAAE;AAAA,IACzD,KAAK,kBAAkB,IAAI,8BAA8B,KAAK,EAAE;AAAA,IAChE,KAAK,iCAAiC,IAAI,6CAA6C,KAAK,EAAE;AAAA,IAC9F,KAAK,WAAW,IAAI,uBAAuB,KAAK,EAAE;AAAA,IAClD,KAAK,eAAe,IAAI,2BAA2B,KAAK,EAAE;AAAA,IAC1D,KAAK,cAAc,IAAI,0BAA0B,KAAK,EAAE;AAAA,IACxD,KAAK,mBAAmB,IAAI,+BAA+B,KAAK,EAAE;AAAA,IAClE,KAAK,aAAa,IAAI,yBAAyB,KAAK,EAAE;AAAA,IACtD,KAAK,4BAA4B,IAAI,wCAAwC,KAAK,EAAE;AAAA,IACpF,KAAK,uBAAuB,IAAI,mCAAmC,KAAK,EAAE;AAAA;AAAA,OAGtE,4BAA2B,CAC/B,OAC4C;AAAA,IAC5C,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,gBAAgB,2BAA2B,KAAK,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MACnF,IAAI,CAAC,eAAe;AAAA,QAClB,MAAM,IAAI,mBACR,gCACA,gCAAgC,MAAM,8BAA8B,MAAM,aAC5E;AAAA,MACF;AAAA,MACA,qCAAqC,eAAe,KAAK;AAAA,MACzD,MAAM,UAAU,cAAc,KAAK,IAAI,MAAM,OAAO;AAAA,MACpD,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA,OAIR,EACE,IAAI,MAAM,MAAM,WAAW,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MAC1D,OAAO;AAAA,QACL,eAAe;AAAA,aACV;AAAA,UACH,QAAQ;AAAA,UACR,YAAY,IAAI,KAAK,MAAM,WAAW;AAAA,QACxC;AAAA,QACA;AAAA,MACF;AAAA,KACD;AAAA;AAAA,OAGG,wBAAuB,CAC3B,OAC+B;AAAA,IAC/B,MAAM,SAAS,wBACb,KAAK,IACL,MAAmD;AAAA,MACjD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,MAC9D,MAAM,cAAc,IAAI,KAAK,MAAM,WAAW;AAAA,MAC9C,MAAM,YAAY,oBAAoB,KAAK,IAAI;AAAA,QAC7C;AAAA,QACA,IAAI,MAAM;AAAA,MACZ,CAAC;AAAA,MAED,KAAK,sBACH,WACA,MAAM,aACN,MAAM,WACN,aACA,SACF;AAAA,MAEA,MAAM,kBAAkB,kBAAkB,KAAK,IAAI;AAAA,QACjD;AAAA,QACA,OAAO,UAAU;AAAA,MACnB,CAAC;AAAA,MACD,MAAM,mBAAmB,2BAA2B,KAAK,IAAI;AAAA,QAC3D;AAAA,QACA,OAAO,UAAU;AAAA,QACjB,KAAK;AAAA,MACP,CAAC;AAAA,MACD,MAAM,mBAAmB,CAAC;AAAA,MAC1B,MAAM,iBAAiB,kBAAkB,MAAM,cAAc;AAAA,MAE7D,IAAI,iBAAiB,WAAW,aAAa;AAAA,QAC3C,iBAAiB,KAAK,IAAI;AAAA,UACxB;AAAA,UACA,IAAI,MAAM;AAAA,UACV,WAAW,MAAM;AAAA,UACjB,YAAY;AAAA,QACd,CAAC;AAAA,QACD,OAAO;AAAA,UACL,OAAO,IAAI,mBACT,kBACA,gBAAgB,gBAAgB,iCAAiC,aACnE;AAAA,QACF;AAAA,MACF;AAAA,MAEA,IAAI,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,oCAAoC;AAAA,QACtF,iBAAiB,KAAK,IAAI;AAAA,UACxB;AAAA,UACA,IAAI,MAAM;AAAA,UACV,WAAW,MAAM;AAAA,UACjB,YAAY;AAAA,QACd,CAAC;AAAA,QACD,OAAO;AAAA,UACL,OAAO,IAAI,mBACT,6BACA,sBAAsB,MAAM,kDAAkD,aAChF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,6BAA6B,KAAK,IAAI,WAAW,MAAM,OAAO;AAAA,MAC9D,4BAA4B,WAAW,MAAM,QAAQ,UAAU,UAAU,QAAQ;AAAA,MAEjF,IAAI;AAAA,MACJ,IAAI,kBAAkB;AAAA,QACpB,YAAY,eAAe,MAAM,WAAW,SAAS;AAAA,QACrD,IAAI,eAAe,KAAK,IAAI,EAAE,WAAW,IAAI,UAAU,CAAC,GAAG;AAAA,UACzD,MAAM,IAAI,mBACR,kBACA,gBAAgB,0CAA0C,aAC5D;AAAA,QACF;AAAA,MACF;AAAA,MAEA,iBAAiB,KAAK,IAAI;AAAA,QACxB;AAAA,QACA,IAAI,MAAM;AAAA,QACV,WAAW,MAAM;AAAA,QACjB,YAAY;AAAA,MACd,CAAC;AAAA,MAED,MAAM,OAAO,kBACT,gBAAgB,eAAe,IAC/B,KAAK,WAAW;AAAA,QACd,IAAI,aAAa,eAAe,MAAM,WAAW,SAAS;AAAA,QAC1D;AAAA,QACA,OAAO,UAAU;AAAA,QACjB,aAAa,MAAM;AAAA,QACnB,WAAW,MAAM;AAAA,QACjB,WAAW;AAAA,MACb,CAAC;AAAA,MAEL,MAAM,aAAa,KAAK,+BAA+B;AAAA,QACrD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACD,MAAM,mBAAmB,KAAK,YAAY;AAAA,QACxC;AAAA,QACA,QAAQ;AAAA,QACR,UAAU,WAAW;AAAA,QACrB,UAAU;AAAA,QACV;AAAA,QACA,QAAQ,KAAK;AAAA,MACf,CAAC;AAAA,MACD,MAAM,UAAU,KAAK,oBAAoB;AAAA,QACvC;AAAA,QACA,YAAY,UAAU;AAAA,QACtB,SAAS,MAAM;AAAA,QACf,QAAQ,KAAK;AAAA,MACf,CAAC;AAAA,MAED,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,YAAY,WAAW;AAAA,QACvB;AAAA,MACF;AAAA,KAEJ;AAAA,IAEA,IAAI,WAAW,QAAQ;AAAA,MACrB,MAAM,OAAO;AAAA,IACf;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,mBAAkB,CAAC,OAA+D;AAAA,IACtF,MAAM,SAAS,wBACb,KAAK,IACL,MAAmD;AAAA,MACjD,MAAM,YAAY,eAAe,MAAM,WAAW,YAAY;AAAA,MAC9D,MAAM,cAAc,IAAI,KAAK,MAAM,WAAW;AAAA,MAC9C,MAAM,UAAU,sBAAsB,KAAK,IAAI;AAAA,QAC7C;AAAA,QACA,IAAI,MAAM;AAAA,MACZ,CAAC;AAAA,MAED,KAAK,wBACH,WACA,MAAM,4BACN,MAAM,WACN,aACA,OACF;AAAA,MAEA,MAAM,UAAU,eAAe,MAAM,SAAS,SAAS;AAAA,MACvD,MAAM,QAAQ,eAAe,MAAM,KAAK;AAAA,MACxC,MAAM,WAAW,wBAAwB,KAAK,IAAI;AAAA,QAChD;AAAA,QACA,YAAY,QAAQ;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,MACD,MAAM,mBAAmB,WACrB,OACA,2BAA2B,KAAK,IAAI;AAAA,QAClC;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MACP,CAAC;AAAA,MACL,IAAI,UAAU,WACV,eAAe,KAAK,IAAI,EAAE,WAAW,IAAI,SAAS,QAAQ,CAAC,IAC3D,kBAAkB,KAAK,IAAI,EAAE,WAAW,MAAM,CAAC;AAAA,MACnD,MAAM,mBAAmB,CAAC,YAAY,CAAC;AAAA,MACvC,MAAM,iBAAiB,kBAAkB,MAAM,cAAc;AAAA,MAE7D,IAAI,YAAY,CAAC,SAAS;AAAA,QACxB,KAAK,mBAAmB,OAAO,aAAa,SAAS;AAAA,QACrD,OAAO;AAAA,UACL,OAAO,IAAI,mBACT,gBACA,gBAAgB,SAAS,8CAC3B;AAAA,QACF;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,WAAW,aAAa;AAAA,QACnC,KAAK,mBAAmB,OAAO,aAAa,SAAS;AAAA,QACrD,OAAO;AAAA,UACL,OAAO,IAAI,mBACT,kBACA,gBAAgB,QAAQ,iCAAiC,aAC3D;AAAA,QACF;AAAA,MACF;AAAA,MAEA,IAAI,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,oCAAoC;AAAA,QACtF,KAAK,mBAAmB,OAAO,aAAa,SAAS;AAAA,QACrD,OAAO;AAAA,UACL,OAAO,IAAI,mBACT,6BACA,sCAAsC,MAAM,iEAAiE,aAC/G;AAAA,QACF;AAAA,MACF;AAAA,MAEA,6BAA6B,KAAK,IAAI,WAAW,MAAM,OAAO;AAAA,MAC9D,4BAA4B,WAAW,MAAM,QAAQ,UAAU,QAAQ,QAAQ;AAAA,MAE/E,IAAI;AAAA,MACJ,IAAI,kBAAkB;AAAA,QACpB,YAAY,eAAe,MAAM,WAAW,SAAS;AAAA,QACrD,IAAI,eAAe,KAAK,IAAI,EAAE,WAAW,IAAI,UAAU,CAAC,GAAG;AAAA,UACzD,MAAM,IAAI,mBACR,kBACA,gBAAgB,0CAA0C,aAC5D;AAAA,QACF;AAAA,MACF;AAAA,MAEA,KAAK,mBAAmB,OAAO,aAAa,SAAS;AAAA,MAErD,IAAI,CAAC,SAAS;AAAA,QACZ,MAAM,OAAO,KAAK,WAAW;AAAA,UAC3B,IAAI,aAAa,eAAe,MAAM,WAAW,SAAS;AAAA,UAC1D;AAAA,UACA;AAAA,UACA,aAAa,MAAM;AAAA,UACnB,WAAW,MAAM;AAAA,UACjB,WAAW;AAAA,QACb,CAAC;AAAA,QACD,UAAU;AAAA,UACR,YAAY,KAAK;AAAA,UACjB,IAAI,KAAK;AAAA,UACT,OAAO,KAAK;AAAA,UACZ,cAAc,KAAK,eAAe;AAAA,UAClC,YAAY,KAAK,aAAa;AAAA,UAC9B,QAAQ,KAAK;AAAA,UACb,YAAY,MAAM,KAAK,SAAS;AAAA,UAChC,YAAY,MAAM,KAAK,SAAS;AAAA,QAClC;AAAA,MACF;AAAA,MAEA,MAAM,OAAO,gBAAgB,OAAO;AAAA,MACpC,MAAM,aAAa,KAAK,+BAA+B;AAAA,QACrD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACD,MAAM,mBAAmB,KAAK,oBAAoB;AAAA,QAChD;AAAA,QACA,UAAU,KAAK,YAAY;AAAA,UACzB;AAAA,UACA,QAAQ;AAAA,UACR,UAAU,WAAW;AAAA,UACrB,UAAU;AAAA,UACV;AAAA,UACA,QAAQ,KAAK;AAAA,QACf,CAAC;AAAA,QACD,UAAU,MAAM;AAAA,QAChB;AAAA,QACA,QAAQ,KAAK;AAAA,MACf,CAAC;AAAA,MACD,MAAM,eAAe,KAAK,eAAe;AAAA,QACvC;AAAA,QACA,YAAY,QAAQ;AAAA,QACpB;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,QAAQ,MAAM;AAAA,QACd,WAAW,WAAW,IAAI,KAAK,SAAS,UAAU,IAAI;AAAA,QACtD,WAAW;AAAA,MACb,CAAC;AAAA,MACD,MAAM,UAAU,KAAK,oBAAoB;AAAA,QACvC;AAAA,QACA,YAAY,QAAQ;AAAA,QACpB,SAAS,MAAM;AAAA,QACf,QAAQ,KAAK;AAAA,MACf,CAAC;AAAA,MAED,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,YAAY,WAAW;AAAA,QACvB;AAAA,MACF;AAAA,KAEJ;AAAA,IAEA,IAAI,WAAW,QAAQ;AAAA,MACrB,MAAM,OAAO;AAAA,IACf;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,6BAA4B,CAChC,OACqB;AAAA,IACrB,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,WAAW,eAAe,KAAK,IAAI;AAAA,QACvC,WAAW,MAAM;AAAA,QACjB,IAAI,MAAM;AAAA,MACZ,CAAC;AAAA,MAED,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,mBACR,gBACA,gBAAgB,MAAM,kCAAkC,MAAM,aAChE;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAOF,EACC,IAAI,MAAM,MAAM,WAAW,GAAG,MAAM,WAAW,MAAM,MAAM;AAAA,MAC9D,4BAA4B,KAAK,IAAI;AAAA,QACnC,WAAW,MAAM;AAAA,QACjB,QAAQ,MAAM;AAAA,QACd,WAAW,MAAM;AAAA,MACnB,CAAC;AAAA,MAED,OAAO,gBAAgB;AAAA,WAClB;AAAA,QACH,QAAQ;AAAA,QACR,YAAY,MAAM,MAAM,WAAW;AAAA,MACrC,CAAC;AAAA,KACF;AAAA;AAAA,EAGH,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,qBAAqB,CAC3B,WACA,IACA,WACA,aACA,KACuC;AAAA,IACvC,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,mBACR,sBACA,sBAAsB,8BAA8B,aACtD;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,eAAe,aAAa,IAAI,eAAe,IAAI,YAAY;AAAA,MACrE,MAAM,IAAI,mBACR,sBACA,sBAAsB,iCAAiC,aACzD;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,KAAK,IAAI,UAAU,KAAK,aAAa;AAAA,MAC3C,MAAM,IAAI,mBACR,sBACA,sBAAsB,+BAA+B,aACvD;AAAA,IACF;AAAA;AAAA,EAGM,uBAAuB,CAC7B,WACA,IACA,WACA,aACA,KACyC;AAAA,IACzC,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,mBACR,wBACA,sCAAsC,8BAA8B,aACtE;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,eAAe,aAAa,IAAI,aAAa;AAAA,MACnD,MAAM,IAAI,mBACR,wBACA,sCAAsC,iCAAiC,aACzE;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,KAAK,IAAI,UAAU,KAAK,aAAa;AAAA,MAC3C,MAAM,IAAI,mBACR,wBACA,sCAAsC,+BAA+B,aACvE;AAAA,IACF;AAAA;AAAA,EAGM,UAAU,CAAC,OAOJ;AAAA,IACb,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAYF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,OACN,MAAM,eAAe,MACrB,MAAM,aAAa,MACnB,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,CACvB;AAAA,MACF,OAAO,OAAO;AAAA,MACd,yBACE,OACA,kBACA,gBAAgB,MAAM,mCAAmC,MAAM,aACjE;AAAA;AAAA,IAGF,OAAO;AAAA,MACL,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,OAAO,MAAM;AAAA,MACb,aAAa,MAAM;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,QAAQ;AAAA,MACR,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,MACnC,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,IACrC;AAAA;AAAA,EAGM,8BAA8B,CAAC,OAQrC;AAAA,IACA,IAAI,CAAC,MAAM,kBAAkB;AAAA,MAC3B,OAAO,EAAE,kBAAkB,CAAC,EAAE;AAAA,IAChC;AAAA,IAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQF,EACC,IACC,MAAM,MAAM,WAAW,GACvB,MAAM,MAAM,WAAW,GACvB,MAAM,WACN,MAAM,iBAAiB,EACzB;AAAA,IAEF,MAAM,aAA+B;AAAA,SAChC,MAAM;AAAA,MACT,QAAQ;AAAA,MACR,YAAY,IAAI,KAAK,MAAM,WAAW;AAAA,MACtC,WAAW,IAAI,KAAK,MAAM,WAAW;AAAA,IACvC;AAAA,IACA,MAAM,mBAAmB,MAAM,iBAAiB,SAAS,IAAI,CAAC,YAC5D,sBAAsB,KAAK,IAAI;AAAA,MAC7B,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM,KAAK;AAAA,MACnB;AAAA,MACA,QAAQ;AAAA,MACR,WAAW,MAAM;AAAA,IACnB,CAAC,CACH;AAAA,IAEA,OAAO,EAAE,YAAY,iBAAiB;AAAA;AAAA,EAGhC,WAAW,CAAC,OAOiB;AAAA,IACnC,MAAM,mBAAmB,CAAC,GAAG,MAAM,QAAQ;AAAA,IAE3C,WAAW,WAAW,MAAM,UAAU;AAAA,MACpC,iBAAiB,KACf,sBAAsB,KAAK,IAAI;AAAA,QAC7B,WAAW,MAAM;AAAA,QACjB,QAAQ,MAAM;AAAA,QACd;AAAA,QACA,QAAQ,MAAM;AAAA,QACd,WAAW,MAAM;AAAA,MACnB,CAAC,CACH;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAID,mBAAmB,CAAC,OAMS;AAAA,IACnC,IAAI,CAAC,MAAM,UAAU;AAAA,MACnB,OAAO,MAAM;AAAA,IACf;AAAA,IAEA,MAAM,WAAW,kBAAkB,MAAM,QAAQ;AAAA,IACjD,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,iCAKyB,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,OAE5D,EACC,IAAI,MAAM,WAAW,MAAM,QAAQ,GAAG,QAAQ;AAAA,IAEjD,OAAO,KAAK,YAAY,KAAK,OAAO,UAAU,QAAQ,YAAY,CAAC;AAAA;AAAA,EAG7D,mBAAmB,CAAC,OAKV;AAAA,IAChB,OAAO,cAAc,KAAK,IAAI;AAAA,MAC5B,IAAI,MAAM,QAAQ;AAAA,MAClB,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM;AAAA,MACd,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM,QAAQ;AAAA,MACxB,WAAW,MAAM,QAAQ;AAAA,MACzB,WAAW,MAAM,QAAQ;AAAA,MACzB,WAAW,MAAM,QAAQ;AAAA,MACzB,mBAAmB,MAAM,QAAQ;AAAA,MACjC,WAAW,MAAM,QAAQ;AAAA,MACzB,WAAW,MAAM,QAAQ;AAAA,IAC3B,CAAC;AAAA;AAAA,EAGK,kBAAkB,CACxB,OACA,aACA,WACM;AAAA,IACN,mBAAmB,KAAK,IAAI;AAAA,MAC1B;AAAA,MACA,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,YAAY;AAAA,IACd,CAAC;AAAA;AAAA,EAGK,cAAc,CAAC,OAQA;AAAA,IACrB,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAgBF,EACC,IACC,MAAM,WACN,MAAM,YACN,MAAM,SACN,MAAM,QACN,wBAAwB,MAAM,MAAM,GACpC,MAAM,MAAM,SAAS,GACrB,MAAM,MAAM,SAAS,CACvB;AAAA,IAEF,OAAO,oBAAoB;AAAA,MACzB,YAAY,MAAM;AAAA,MAClB,aAAa,MAAM;AAAA,MACnB,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,MACf,QAAQ,wBAAwB,MAAM,MAAM;AAAA,MAC5C,YAAY,MAAM,MAAM,SAAS;AAAA,MACjC,YAAY,MAAM,MAAM,SAAS;AAAA,IACnC,CAAC;AAAA;AAEL;AAEA,SAAS,2BAA2B,CAClC,WACA,iBACA,gBACM;AAAA,EACN,IAAI,oBAAoB,gBAAgB;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,mBACR,iBACA,oCAAoC,yDAAyD,gCAAgC,aAC/H;AAAA;AAGF,SAAS,oCAAoC,CAC3C,eACA,OACM;AAAA,EACN,IAAI,cAAc,mBAAmB,MAAM,gBAAgB;AAAA,IACzD,MAAM,IAAI,mBACR,gCACA,sCACF;AAAA,EACF;AAAA,EACA,IAAI,cAAc,WAAW,WAAW;AAAA,IACtC,MAAM,IAAI,mBACR,gCACA,yCACF;AAAA,EACF;AAAA,EACA,IAAI,cAAc,WAAW,UAAU;AAAA,IACrC,MAAM,IAAI,mBACR,+BACA,yCACF;AAAA,EACF;AAAA,EACA,IACE,cAAc,WAAW,cACzB,cAAc,aAAa,MAAM,eACjC,CAAC,cAAc,kBACf,CAAC,cAAc,qBACf,MAAM,QAAQ,cAAc,MAAM,aAClC,MAAM,QAAQ,WAAW,cAAc,gBACvC;AAAA,IACA,MAAM,IAAI,mBACR,gCACA,yCACF;AAAA,EACF;AAAA;;AcvzBF;AAAA;AAAA;AAgBO,MAAM,yCAAyC,kCAAkC;AAAA,EACrE;AAAA,EAEjB,WAAW,CAAC,YAAmC;AAAA,IAC7C,MAAM,QAAQ,EAAE,UAAU,EAAE;AAAA,IAC5B,MAAM,IAAI,4CAA4C,WAAW,IAAI,KAAK,CAAC;AAAA,IAC3E,KAAK,QAAQ;AAAA;AAAA,EAIf,qBAAqB,CAAC,YAA0B;AAAA,IAC9C,KAAK,MAAM,YAAY;AAAA;AAE3B;AAAA;AAEA,MAAM,4CAA6F;AAAA,EAE9E;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,OACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,EAGnB,IAAO,CACL,OACA,KACY;AAAA,IACZ,OAAO,IAAI,IAAI,qCAAqC,KAAK,IAAI,OAAO,KAAK,KAAK,CAAC;AAAA;AAAA,EAGjF,WAAc,CACZ,OACA,KACY;AAAA,IACZ,OAAO,6BAA6B,KAAK,IAAI,MAC3C,IAAI,IAAI,qCAAqC,KAAK,IAAI,OAAO,KAAK,KAAK,CAAC,CAC1E;AAAA;AAEJ;AAAA;AAEA,MAAM,qCAA+E;AAAA,EAEhE;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,IACA,OACA,OACjB;AAAA,IAHiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,OAGb,IAAG,GAAkB;AAAA,IACzB,MAAM,MAAM,KAAK,GAAG,MAAM,qDAAqD,EAAE,IAAI;AAAA,IAGrF,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,EAAE,QAAQ,IAAI,KAAK,MAAM,QAAQ;AAAA;AAAA,OAG7D,2BAA0B,CAAC,QAA+D;AAAA,IAC9F,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQF,EACC,IACC,OAAO,WACP,OAAO,aACP,OAAO,IACP,OAAO,MACP,OAAO,wBACP,OAAO,WACP,OAAO,iBAAiB,YAAY,OAAO,KAAK,OAAO,YAAY,GACnE,OAAO,aACP,OAAO,mBAAmB,MAC1B,OAAO,YAAY,MACnB,OAAO,uBAAuB,MAC9B,OAAO,qBAAqB,MAC5B,OAAO,2BAA2B,MAClC,OAAO,+BAA+B,KAAK,OAAO,4BAA4B,IAAI,MAClF,IAAI,OAAO,SAAS,GACpB,IAAI,OAAO,SAAS,CACtB;AAAA,MACF,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK;AAAA,QAAG,OAAO;AAAA,MAC3C,MAAM;AAAA;AAAA;AAAA,OAIJ,wBAAuB,CAAC,IAAiE;AAAA,IAC7F,MAAM,MAAM,KAAK,QAAuC,oCAAoC,EAAE;AAAA,IAC9F,OAAO,MAAM,4BAA4B,GAAG,IAAI;AAAA;AAAA,OAG5C,yCAAwC,CAC5C,iBACqD;AAAA,IACrD,IAAI,CAAC,KAAK,MAAM;AAAA,MAAa,OAAO;AAAA,IACpC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA,OAIF,EACC,IACC,KAAK,MAAM,WACX,KAAK,MAAM,aACX,eACF;AAAA,IACF,OAAO,MAAM,4BAA4B,GAAG,IAAI;AAAA;AAAA,OAG5C,2BAA0B,CAAC,IAA8B;AAAA,IAC7D,OAAO,KAAK,WAAW,oCAAoC,EAAE;AAAA;AAAA,OAGzD,oBAAmB,CAAC,QAAwD;AAAA,IAChF,IAAI;AAAA,MACF,KAAK,UAAU,MAAM;AAAA,MACrB,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK;AAAA,QAAG,OAAO;AAAA,MAC3C,MAAM;AAAA;AAAA;AAAA,OAIJ,0BAAyB,GAAqD;AAAA,IAClF,IAAI,CAAC,KAAK,MAAM;AAAA,MAAa,OAAO,CAAC;AAAA,IACrC,MAAM,OAAO,KAAK,GACf,MAAM;AAAA;AAAA,6FAEgF,EACtF,IAAI,KAAK,MAAM,WAAW,KAAK,MAAM,WAAW;AAAA,IACnD,OAAO,KAAK,IAAI,oBAAoB;AAAA;AAAA,OAGhC,iBAAgB,CAAC,IAA0D;AAAA,IAC/E,MAAM,MAAM,KAAK,QAAgC,6BAA6B,EAAE;AAAA,IAChF,OAAO,MAAM,qBAAqB,GAAG,IAAI;AAAA;AAAA,OAGrC,oBAAmB,CAAC,QAAqD;AAAA,IAC7E,MAAM,SAAS,UAAU,MAAM;AAAA,IAC/B,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQF,EACC,IAAI,GAAG,QAAQ,OAAO,WAAW,OAAO,aAAa,OAAO,EAAE;AAAA,IACjE,cAAc,OAAO,SAAS,4BAA4B,OAAO,EAAE;AAAA;AAAA,OAG/D,oBAAmB,CAAC,QAAwD;AAAA,IAChF,IAAI;AAAA,MACF,KAAK,uBAAuB,MAAM;AAAA,MAClC,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK;AAAA,QAAG,OAAO;AAAA,MAC3C,MAAM;AAAA;AAAA;AAAA,OAIJ,iBAAgB,CAAC,IAA0D;AAAA,IAC/E,MAAM,MAAM,KAAK,QAAgC,4BAA4B,EAAE;AAAA,IAC/E,OAAO,MAAM,qBAAqB,GAAG,IAAI;AAAA;AAAA,OAGrC,oBAAmB,CAAC,QAAqD;AAAA,IAC7E,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASF,EACC,IAAI,GAAG,oBAAoB,MAAM,GAAG,OAAO,WAAW,OAAO,aAAa,OAAO,EAAE;AAAA,IACtF,cAAc,OAAO,SAAS,2BAA2B,OAAO,EAAE;AAAA;AAAA,OAG9D,iBAAgB,CAAC,QAAqD;AAAA,IAC1E,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,OAAO,WACP,OAAO,aACP,OAAO,IACP,OAAO,iBACP,OAAO,MACP,KAAK,OAAO,OAAO,GACnB,OAAO,QAAQ,IACf,OAAO,QACP,YAAY,OAAO,cAAc,GACjC,IAAI,OAAO,SAAS,GACpB,IAAI,OAAO,SAAS,CACtB;AAAA,MACF,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK;AAAA,QAAG,OAAO;AAAA,MAC3C,MAAM;AAAA;AAAA;AAAA,OAIJ,kBAAiB,CAAC,IAAuD;AAAA,IAC7E,MAAM,MAAM,KAAK,QAA6B,yBAAyB,EAAE;AAAA,IACzE,OAAO,MAAM,kBAAkB,GAAG,IAAI;AAAA;AAAA,OAGlC,wBAAuB,CAAC,OAGgB;AAAA,IAC5C,IAAI,CAAC,KAAK,MAAM;AAAA,MAAa,OAAO;AAAA,IACpC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA,OAIF,EACC,IAAI,KAAK,MAAM,WAAW,KAAK,MAAM,aAAa,MAAM,IAAI;AAAA,IAC/D,OAAO,MAAM,kBAAkB,GAAG,IAAI;AAAA;AAAA,OAGlC,gBAAe,GAAkD;AAAA,IACrE,IAAI,CAAC,KAAK,MAAM;AAAA,MAAa,OAAO,CAAC;AAAA,IACrC,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA,OAKF,EACC,IAAI,KAAK,MAAM,WAAW,KAAK,MAAM,WAAW;AAAA,IACnD,OAAO,KAAK,IAAI,iBAAiB;AAAA;AAAA,OAG7B,+BAA8B,CAClC,iBACA,UAAgD,CAAC,GACF;AAAA,IAC/C,IAAI,CAAC,KAAK,MAAM;AAAA,MAAa,OAAO,CAAC;AAAA,IACrC,MAAM,OAAO,QAAQ,gBAChB,KAAK,GACH,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,WAMF,EACC,IACC,KAAK,MAAM,WACX,KAAK,MAAM,aACX,eACF,IACD,KAAK,GACH,MACC;AAAA;AAAA;AAAA;AAAA,WAKF,EACC,IACC,KAAK,MAAM,WACX,KAAK,MAAM,aACX,eACF;AAAA,IACN,OAAO,KAAK,IAAI,iBAAiB;AAAA;AAAA,OAG7B,iBAAgB,CAAC,QAAkD;AAAA,IACvE,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,OAMF,EACC,IACC,OAAO,iBACP,OAAO,MACP,KAAK,OAAO,OAAO,GACnB,OAAO,QAAQ,IACf,OAAO,QACP,YAAY,OAAO,cAAc,GACjC,IAAI,OAAO,SAAS,GACpB,OAAO,WACP,OAAO,aACP,OAAO,EACT;AAAA,IACF,cAAc,OAAO,SAAS,wBAAwB,OAAO,EAAE;AAAA;AAAA,EAGzD,SAAS,CAAC,QAA4C;AAAA,IAC5D,MAAM,SAAS,UAAU,MAAM;AAAA,IAC/B,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQF,EACC,IACC,OAAO,WACP,OAAO,aACP,OAAO,IACP,GAAG,OAAO,MAAM,GAAG,EAAE,GACrB,IAAI,OAAO,SAAS,GACpB,GAAG,OAAO,MAAM,EAAE,CACpB;AAAA;AAAA,EAGI,sBAAsB,CAAC,QAA4C;AAAA,IACzE,MAAM,SAAS,oBAAoB,MAAM;AAAA,IACzC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASF,EACC,IACC,OAAO,WACP,OAAO,aACP,OAAO,IACP,GAAG,OAAO,MAAM,GAAG,EAAE,GACrB,IAAI,OAAO,SAAS,GACpB,GAAG,OAAO,MAAM,EAAE,CACpB;AAAA;AAAA,EAGI,OAAa,CAAC,OAAuB,IAAyB;AAAA,IACpE,IAAI,KAAK,MAAM,aAAa;AAAA,MAC1B,OAAO,KAAK,GACT,MAAM,iBAAiB,4DAA4D,EACnF,IAAI,KAAK,MAAM,WAAW,KAAK,MAAM,aAAa,EAAE;AAAA,IACzD;AAAA,IACA,OAAO,KAAK,GACT,MAAM,iBAAiB,uCAAuC,EAC9D,IAAI,KAAK,MAAM,WAAW,EAAE;AAAA;AAAA,EAGzB,UAAU,CAAC,OAAuB,IAAqB;AAAA,IAC7D,MAAM,SAAS,KAAK,MAAM,cACtB,KAAK,GACF,MAAM,eAAe,4DAA4D,EACjF,IAAI,KAAK,MAAM,WAAW,KAAK,MAAM,aAAa,EAAE,IACvD,KAAK,GACF,MAAM,eAAe,uCAAuC,EAC5D,IAAI,KAAK,MAAM,WAAW,EAAE;AAAA,IACnC,OAAO,OAAO,YAAY;AAAA;AAE9B;AAQA,SAAS,2BAA2B,CAClC,KACqC;AAAA,EACrC,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,OAAO,EAAE,MAAM,UAAU;AAAA,IACzB,MAAM,IAAI;AAAA,IACV,wBAAwB,IAAI;AAAA,IAC5B,WAAW,IAAI;AAAA,OACX,IAAI,kBAAkB,OAAO,CAAC,IAAI,EAAE,cAAc,UAAU,IAAI,aAAa,EAAE;AAAA,IACnF,aAAa,IAAI;AAAA,OACb,IAAI,sBAAsB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,kBAAkB;AAAA,OAC/E,IAAI,cAAc,OAAO,CAAC,IAAI,EAAE,UAAU,IAAI,UAAU;AAAA,OACxD,IAAI,0BAA0B,OAC9B,CAAC,IACD,EAAE,qBAAqB,IAAI,sBAAsB;AAAA,OACjD,IAAI,uBAAuB,OAAO,CAAC,IAAI,EAAE,mBAAmB,IAAI,mBAAmB;AAAA,OACnF,IAAI,6BAA6B,OACjC,CAAC,IACD,EAAE,yBAAyB,IAAI,yBAAyB;AAAA,OACxD,IAAI,mCAAmC,OACvC,CAAC,IACD,EAAE,8BAA8B,UAAU,IAAI,8BAA8B,EAAE;AAAA,IAClF,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGF,SAAS,SAAS,CAAC,QAAmE;AAAA,EACpF,MAAM,aAAa,OAAO,WAAW,YAAY,OAAO,aAAa;AAAA,EACrE,MAAM,eAAe,OAAO,WAAW,YAAY,OAAO,eAAe;AAAA,EACzE,MAAM,oBAAoB,OAAO,WAAW,YAAY,IAAI,OAAO,iBAAiB,IAAI;AAAA,EACxF,MAAM,YACJ,OAAO,WAAW,aAAa,OAAO,WAAW,YAAY,IAAI,OAAO,SAAS,IAAI;AAAA,EACvF,MAAM,kBAAkB,qBAAqB,SAAU,OAAO,mBAAmB,OAAQ;AAAA,EACzF,MAAM,yBACJ,OAAO,WAAW,cAAe,OAAO,0BAA0B,OAAQ;AAAA,EAC5E,MAAM,cAAc,OAAO,WAAW,cAAc,KAAK,OAAO,WAAW,IAAI;AAAA,EAC/E,MAAM,QAAQ,OAAO,WAAW,WAAW,KAAK,OAAO,KAAK,IAAI;AAAA,EAChE,MAAM,aACJ,OAAO,WAAW,eAClB,OAAO,WAAW,YAClB,OAAO,WAAW,eAClB,OAAO,WAAW,YACd,IAAI,OAAO,UAAU,IACrB;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,OAAO,SAAS;AAAA,IACpB;AAAA,EACF;AAAA;AAGF,SAAS,oBAAoB,CAAC,KAA2D;AAAA,EACvF,MAAM,OAAO;AAAA,IACX,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,MAAM,IAAI;AAAA,IACV,OAAO,EAAE,MAAM,UAAmB;AAAA,IAClC,MAAM,IAAI;AAAA,IACV,wBAAwB,IAAI;AAAA,IAC5B,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA,EACA,IAAI,IAAI,WAAW,aAAa,IAAI,gBAAgB,0BAA0B;AAAA,IAC5E,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,WAAW,IAAI,KAAK,UAAS,IAAI,YAAY,YAAY,CAAC;AAAA,IAC5D;AAAA,EACF;AAAA,EACA,IAAI,IAAI,WAAW,aAAa,IAAI,gBAAgB,qBAAqB;AAAA,IACvE,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,iBAAiB,UAAS,IAAI,kBAAkB,kBAAkB;AAAA,MAClE,WAAW,IAAI,KAAK,UAAS,IAAI,YAAY,YAAY,CAAC;AAAA,IAC5D;AAAA,EACF;AAAA,EACA,IAAI,IAAI,WAAW,WAAW;AAAA,IAC5B,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,MACR,cAAc,UAAS,IAAI,eAAe,eAAe;AAAA,MACzD,mBAAmB,IAAI,KAAK,UAAS,IAAI,qBAAqB,gBAAgB,CAAC;AAAA,MAC/E,WAAW,IAAI,KAAK,UAAS,IAAI,YAAY,YAAY,CAAC;AAAA,SACtD,IAAI,qBAAqB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,iBAAiB;AAAA,IACnF;AAAA,EACF;AAAA,EACA,MAAM,aAAa,IAAI,KAAK,UAAS,IAAI,aAAa,YAAY,CAAC;AAAA,EACnE,IAAI,IAAI,WAAW,aAAa;AAAA,IAC9B,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,MACR,iBAAiB,UAAS,IAAI,kBAAkB,kBAAkB;AAAA,SAC9D,IAAI,6BAA6B,OACjC,CAAC,IACD,EAAE,wBAAwB,IAAI,yBAAyB;AAAA,MAC3D,aAAa,UACX,UAAS,IAAI,aAAa,aAAa,CACzC,EAAE,IAAI,wBAAwB;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAAA,EACA,IAAI,IAAI,WAAW,UAAU;AAAA,IAC3B,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,MACR,OAAO,UAAU,UAAS,IAAI,OAAO,WAAW,CAAC;AAAA,SAC7C,IAAI,qBAAqB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,iBAAiB;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AAAA,EACA,IAAI,IAAI,WAAW,aAAa;AAAA,IAC9B,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,SACJ,IAAI,qBAAqB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,iBAAiB;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AAAA,EACA,IAAI,IAAI,WAAW,WAAW;AAAA,IAC5B,OAAO;AAAA,SACF;AAAA,MACH,QAAQ;AAAA,SACJ,IAAI,qBAAqB,OAAO,CAAC,IAAI,EAAE,iBAAiB,IAAI,iBAAiB;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM,mBAAmB,mCAAmC,IAAI,MAAM;AAAA;AAGxE,SAAS,mBAAmB,CAAC,QAAmE;AAAA,EAC9F,MAAM,WAAW,OAAO;AAAA,EACxB,MAAM,SAAS,UAAU;AAAA,EACzB,OAAO;AAAA,IACL,KAAK,OAAO,YAAY;AAAA,IACxB,OAAO,cAAc,KAAK,OAAO,WAAW,IAAI;AAAA,IAChD,YAAY,OAAO,mBAAmB;AAAA,IACtC,KAAK,OAAO,MAAM;AAAA,IAClB,KAAK,OAAO,QAAQ;AAAA,IACpB,OAAO;AAAA,IACP,YAAY,OAAO,kBAAkB;AAAA,IACrC,OAAO;AAAA,IACP,UAAU,MAAM;AAAA,IAChB,UAAU,QAAQ;AAAA,IAClB,UAAU,SAAS;AAAA,IACnB,UAAU,YAAY;AAAA,IACtB,YAAY,UAAU,SAAS;AAAA,IAC/B,YAAY,UAAU,UAAU;AAAA,IAChC,UAAU,wBAAwB,KAAK,SAAS,qBAAqB,IAAI;AAAA,IACzE,SAAS,KAAK,OAAO,WAAW,IAAI;AAAA,IACpC,YAAY,QAAQ,mBAAmB;AAAA,IACvC,SAAS,KAAK,OAAO,MAAM,IAAI;AAAA,IAC/B,IAAI,OAAO,SAAS;AAAA,EACtB;AAAA;AAGF,SAAS,oBAAoB,CAAC,KAA2D;AAAA,EACvF,MAAM,WAAW,gBAAgB,GAAG;AAAA,EACpC,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,cAAc,UAAU,IAAI,aAAa;AAAA,OACrC,IAAI,gBAAgB,OAAO,CAAC,IAAI,EAAE,aAAa,UAAU,IAAI,WAAW,EAAE;AAAA,OAC1E,IAAI,0BAA0B,OAC9B,CAAC,IACD,EAAE,qBAAqB,IAAI,KAAK,IAAI,qBAAqB,EAAE;AAAA,IAC/D,QAAQ,UAAU,IAAI,MAAM;AAAA,IAC5B,UAAU,UAAU,IAAI,QAAQ;AAAA,IAChC,QAAQ,IAAI;AAAA,OACR,IAAI,yBAAyB,OAC7B,CAAC,IACD,EAAE,oBAAoB,IAAI,KAAK,IAAI,oBAAoB,EAAE;AAAA,IAC7D,UAAU,IAAI;AAAA,OACV,aAAa,YAAY,CAAC,IAAI,EAAE,oBAAoB,SAAS;AAAA,IACjE,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGF,SAAS,eAAe,CAAC,KAAsE;AAAA,EAC7F,IAAI,IAAI,gBAAgB;AAAA,IAAM;AAAA,EAC9B,MAAM,OAAO,UAAS,IAAI,eAAe,0BAA0B;AAAA,EACnE,MAAM,QAAQ,UAAS,IAAI,gBAAgB,2BAA2B;AAAA,EACtE,MAAM,oBACJ,IAAI,uBAAuB,OACvB,YACA;AAAA,IACE,aAAa,UAEX,IAAI,kBAAkB;AAAA,OACpB,IAAI,iCAAiC,OACrC,CAAC,IACD,EAAE,qBAAqB,IAAI,KAAK,IAAI,4BAA4B,EAAE;AAAA,IACtE,QAAQ,UACN,UAAS,IAAI,eAAe,0BAA0B,CACxD;AAAA,EACF;AAAA,EACN,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR;AAAA,IACA;AAAA,IACA,UAAU,UAAS,IAAI,oBAAoB,4BAA4B;AAAA,IACvE,WAAW,IAAI,KAAK,UAAS,IAAI,qBAAqB,4BAA4B,CAAC;AAAA,IACnF,YAAY,IAAI,KAAK,UAAS,IAAI,sBAAsB,8BAA8B,CAAC;AAAA,OACnF,IAAI,qCAAqC,OACzC,CAAC,IACD;AAAA,MACE,uBAAuB,UAA6B,IAAI,gCAAgC;AAAA,IAC1F;AAAA,OACA,sBAAsB,YAAY,CAAC,IAAI,EAAE,kBAAkB;AAAA,EACjE;AAAA;AAGF,SAAS,iBAAiB,CAAC,KAAqD;AAAA,EAC9E,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,iBAAiB,IAAI;AAAA,IACrB,OAAO,EAAE,MAAM,UAAU;AAAA,IACzB,MAAM,IAAI;AAAA,IACV,SAAS,UAAU,IAAI,OAAO;AAAA,IAC9B,QAAQ,IAAI;AAAA,OACR,IAAI,oBAAoB,OAAO,CAAC,IAAI,EAAE,gBAAgB,IAAI,KAAK,IAAI,eAAe,EAAE;AAAA,IACxF,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAYF,SAAS,wBAAwB,CAC/B,QAC2B;AAAA,EAC3B,QAAQ,WAAW,WAAW,mBAAmB,eAAe;AAAA,EAChE,OAAO;AAAA,OACF;AAAA,IACH,WAAW,IAAI,KAAK,SAAS;AAAA,IAC7B,WAAW,IAAI,KAAK,SAAS;AAAA,OACzB,mBAAmB,YAAY,CAAC,IAAI,EAAE,gBAAgB,IAAI,KAAK,cAAc,EAAE;AAAA,EACrF;AAAA;AAGF,SAAS,IAAI,CAAC,OAAwB;AAAA,EACpC,OAAO,KAAK,UAAU,KAAK;AAAA;AAG7B,SAAS,SAAY,CAAC,OAAkB;AAAA,EACtC,OAAO,KAAK,MAAM,KAAK;AAAA;AAGzB,SAAS,GAAG,CAAC,OAAqB;AAAA,EAChC,OAAO,MAAM,YAAY;AAAA;AAG3B,SAAS,WAAW,CAAC,OAAwC;AAAA,EAC3D,OAAO,OAAO,YAAY,KAAK;AAAA;AAGjC,SAAS,SAAW,CAAC,OAAiB,OAAkB;AAAA,EACtD,IAAI,UAAU;AAAA,IAAM,OAAO;AAAA,EAC3B,MAAM,IAAI,MAAM,uBAAuB,mBAAmB;AAAA;AAG5D,SAAS,kBAAkB,CAAC,OAAe,OAAuB;AAAA,EAChE,OAAO,IAAI,MAAM,uBAAuB,UAAU,OAAO,KAAK,gBAAgB;AAAA;AAGhF,SAAS,aAAa,CAAC,SAAiB,OAAe,IAAkB;AAAA,EACvE,IAAI,YAAY;AAAA,IAAG;AAAA,EACnB,MAAM,IAAI,MAAM,uBAAuB,UAAU,qBAAqB;AAAA;;;ACnsBxE;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AAGO,MAAM,uBAAmD;AAAA,EAE3C;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,IACA,MACA,eACjB;AAAA,IAHiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,OAGb,OAAM,CAAC,OAAuD;AAAA,IAClE,MAAM,SAAS,MAAM,uBAAuB,OAAO;AAAA,MACjD,MAAM,KAAK;AAAA,MACX,cAAc,CAAC,WAAW,KAAK,QAAQ,MAAM;AAAA,MAC7C,iBAAiB,CAAC,WAAW,KAAK,cAAc,QAAQ,MAAM;AAAA,IAChE,CAAC;AAAA,IACD,MAAM,MAAM,4BAA4B,MAAM;AAAA,IAE9C,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA2BF,EACC,IACC,IAAI,WACJ,IAAI,IACJ,IAAI,cACJ,IAAI,YACJ,IAAI,YACJ,IAAI,UACJ,IAAI,mBACJ,IAAI,6BACJ,KAAK,UAAU,IAAI,iBAAiB,GACpC,IAAI,eACJ,IAAI,mBACJ,IAAI,eACJ,IAAI,iBACJ,IAAI,2BACJ,IAAI,oBACJ,IAAI,wBACJ,IAAI,wBACJ,IAAI,sBACJ,IAAI,0BACJ,IAAI,yBACJ,IAAI,uBACJ,IAAI,8BACJ,IAAI,UAAU,YAAY,CAC5B;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,0BAA0B,KAAK,GAAG;AAAA,QACpC,MAAM,IAAI,sBACR,uBACA,2BAA2B,OAAO,kCAAkC,OAAO,eAC3E,EAAE,OAAO,MAAM,CACjB;AAAA,MACF;AAAA,MACA,MAAM;AAAA;AAAA,IAGR,OAAO,8BAA8B,GAAG;AAAA;AAAA,OAGpC,QAAO,CAAC,QAGsB;AAAA,IAClC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA,OAKF,EACC,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,8BAA8B,aAAa,GAAG,CAAC,IAAI;AAAA;AAEpE;AAEA,SAAS,YAAY,CAAC,KAA8C;AAAA,EAClE,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,IAAI,IAAI;AAAA,IACR,cAAc,IAAI;AAAA,IAClB,YAAY,IAAI;AAAA,IAChB,YAAY,IAAI;AAAA,IAChB,UAAU,IAAI;AAAA,IACd,mBAAmB,IAAI;AAAA,IACvB,6BAA6B,IAAI;AAAA,IACjC,mBAAmB,KAAK,MAAM,IAAI,mBAAmB;AAAA,IACrD,eAAe,IAAI;AAAA,IACnB,mBAAmB,IAAI;AAAA,IACvB,eAAe,IAAI;AAAA,IACnB,iBAAiB,IAAI;AAAA,IACrB,2BAA2B,IAAI;AAAA,IAC/B,oBAAoB,IAAI;AAAA,IACxB,wBAAwB,IAAI;AAAA,IAC5B,wBAAwB,IAAI;AAAA,IAC5B,sBAAsB,IAAI;AAAA,IAC1B,0BAA0B,IAAI;AAAA,IAC9B,yBAAyB,IAAI;AAAA,IAC7B,uBAAuB,IAAI;AAAA,IAC3B,8BAA8B,IAAI;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,EACpC;AAAA;AAGF,SAAS,yBAAyB,CAAC,OAAyB;AAAA,EAC1D,OACE,iBAAiB,SACjB,MAAM,QAAQ,SAAS,gEAAgE;AAAA;;;ACrJ3F;AAAA;AAAA;AAAA;AAAA;AAWO,MAAM,uCAAuC,0BAA0B;AAAA,EAC5E,WAAW,CAAC,YAAmC;AAAA,IAC7C,MAAM,IAAI,+BAA+B,WAAW,EAAE,CAAC;AAAA;AAE3D;AAAA;AAEA,MAAM,+BAA8E;AAAA,EAGrD;AAAA,EAFZ;AAAA,EAEjB,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA,IAC3B,KAAK,cAAc,IAAI,mCAAmC,EAAE;AAAA;AAAA,EAG9D,IAAO,CAAC,KAA4E;AAAA,IAClF,OAAO,IAAI,KAAK,WAAW;AAAA;AAAA,EAG7B,WAAc,CAAC,KAA4E;AAAA,IACzF,OAAO,6BAA6B,KAAK,IAAI,MAAM,IAAI,KAAK,WAAW,CAAC;AAAA;AAE5E;AAAA;AAEA,MAAM,mCAA2E;AAAA,EAClD;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,IAAG,GAAkB;AAAA,IACzB,MAAM,MAAM,KAAK,GAAG,MAAM,qDAAqD,EAAE,IAAI;AAAA,IAGrF,OAAO,IAAI,KAAK,IAAI,GAAG;AAAA;AAAA,OAGnB,OAAM,CAAC,SAA8C;AAAA,IACzD,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,6EAKF,EACC,IACC,QAAQ,IACR,QAAQ,WACR,QAAQ,UAAU,MAClB,QAAQ,UAAU,IAClB,QAAQ,UACR,QAAQ,QACR,QAAQ,YAAY,MACpB,QAAQ,aAAa,MACrB,QAAQ,eAAe,MACvB,QAAQ,qBAAqB,MAC7B,QAAQ,kBAAkB,MAC1B,GAAG,eAAe,OAAO,CAC3B;AAAA,MACF,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK;AAAA,QAAG,OAAO;AAAA,MAC3C,MAAM;AAAA;AAAA;AAAA,OAIJ,IAAG,CAAC,UAAqD;AAAA,IAC7D,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,6BAA6B,EAAE,IAAI,QAAQ;AAAA,IACxE,OAAO,MAAM,0BAA0B,GAA8B,IAAI;AAAA;AAAA,OAGrE,OAAM,CAAC,SAA2C;AAAA,IACtD,KAAK,GACF,MACC;AAAA;AAAA;AAAA,sBAIF,EACC,IAAI,QAAQ,QAAQ,GAAG,eAAe,OAAO,GAAG,QAAQ,EAAE;AAAA;AAAA,OAGzD,cAAa,CACjB,OACuC;AAAA,IACvC,MAAM,OAAO,KAAK,GACf,MACC,GAAG;AAAA;AAAA;AAAA;AAAA,iBAKL,EACC,IAAI,MAAM,WAAW,MAAM,IAAI,YAAY,GAAG,MAAM,KAAK;AAAA,IAC5D,OAAO,KAAK,IAAI,CAAC,QAAQ,0BAA0B,GAA8B,CAAC;AAAA;AAAA,OAG9E,eAAc,CAAC,KAA4B;AAAA,IAC/C,OAAO,KAAK,GACT,MAAM,6EAA6E,EACnF,IAAI,IAAI,YAAY,CAAC,EAAE;AAAA;AAE9B;AAEA,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWvB,SAAS,cAAc,CAAC,SAA4B;AAAA,EAClD,OAAO;AAAA,IACL,QAAQ,mBAAmB,YAAY,OAAO,KAAK,UAAU,QAAQ,cAAc;AAAA,IACnF,KAAK,UAAU,QAAQ,WAAW;AAAA,IAClC,QAAQ,YAAY,YAAY,OAAO,KAAK,UAAU,QAAQ,OAAO;AAAA,IACrE,QAAQ,UAAU,YAAY;AAAA,IAC9B,QAAQ,UAAU,YAAY;AAAA,IAC9B,QAAQ,aAAa,YAAY,KAAK;AAAA,IACtC,QAAQ,WAAW,YAAY,KAAK;AAAA,IACpC,wBAAwB,OAAO,GAAG,YAAY,KAAK;AAAA,EACrD;AAAA;;;ACrIF,6BAAS;;;ACDT;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACPO,SAAS,kBAAkB,CAAC,QAAuC;AAAA,EACxE,MAAM,QAAQ,IAAI,WAAW,OAAO,SAAS,CAAC;AAAA,EAC9C,MAAM,OAAO,IAAI,SAAS,MAAM,MAAM;AAAA,EACtC,SAAS,QAAQ,EAAG,QAAQ,OAAO,QAAQ,SAAS;AAAA,IAClD,KAAK,WAAW,QAAQ,GAAG,OAAO,QAAS,IAAI;AAAA,EACjD;AAAA,EACA,OAAO;AAAA;;;AD8ET,IAAM,oBAAoB;AAK1B,IAAM,2BAA2B;AAE1B,SAAS,kBAAkB,CAChC,WACA,OACA,UAAwE,CAAC,GACpD;AAAA,EACrB,IAAI,iBAAiB,KAAK,KAAK,CAAC,qBAAqB,KAAK,GAAG;AAAA,IAC3D,MAAM,IAAI,0BACR,kCACA,yFACF;AAAA,EACF;AAAA,EACA,MAAM,SAAS,QAAQ,UAAU;AAAA,EACjC,MAAM,MAAsB,EAAE,YAAY,QAAQ,iBAAiB,OAAO,OAAO;AAAA,EACjF,OAAO,OAAO,UAAU,2BAA2B,WAAW,OAAO,GAAG,CAAC;AAAA;AAmBpE,IAAM,8BAAuD;AAAA,EAClE,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,eAAe,CAAC,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC,GAAG,IAAI,EAAE;AAAA,EAC3D,WAAW,CAAC,UAAU;AACxB;AAEA,SAAS,YAAY,CAAC,KAAqC;AAAA,EACzD,OAAO,IAAI,aAAa,KAAK,KAAK,YAAY,MAAM,IAAI;AAAA;AAG1D,SAAS,0BAA0B,CACjC,WACA,OACA,KACqB;AAAA,EACrB,QAAQ,MAAM;AAAA,SACP;AAAA,MACH,OAAO,aAAa,WAAW,OAAO,GAAG;AAAA,SACtC;AAAA,MACH,OAAO,YAAY,WAAW,OAAO,GAAG;AAAA,SACrC;AAAA,MACH,OAAO,cAAc,WAAW,MAAM,OAAO,MAAM,WAAW,GAAG;AAAA,SAC9D;AAAA,MACH,OAAO,YAAY,WAAW,MAAM,OAAO,MAAM,QAAQ,GAAG;AAAA,SACzD;AAAA,MACH,OAAO,aAAa,WAAW,MAAM,OAAO,MAAM,OAAO,GAAG;AAAA,SACzD;AAAA,MACH,OAAO,YAAY,WAAW,MAAM,OAAO,MAAM,UAAU,MAAM,WAAW,GAAG;AAAA,SAC5E;AAAA,MACH,OAAO,iBACL,WACA,MAAM,OACN,MAAM,QACN,MAAM,WACN,MAAM,oBACN,GACF;AAAA,SACG;AAAA,MACH,OAAO,WAAW,WAAW,MAAM,IAAI,MAAM,QAAQ,GAAG;AAAA,SACrD;AAAA,MACH,OAAO,eAAe,WAAW,MAAM,OAAO,MAAM,YAAY,GAAG;AAAA,SAChE;AAAA,MACH,OAAO,YACL,WACA,MAAM,OACN,MAAM,OACN,MAAM,QACN,MAAM,oBACN,GACF;AAAA,SACG;AAAA,MACH,OAAO,cAAc,WAAW,MAAM,OAAO,MAAM,YAAY,GAAG;AAAA,SAC/D;AAAA,MACH,OAAO,cAAc,WAAW,OAAO,GAAG;AAAA;AAAA;AAIhD,SAAS,aAAa,CACpB,WACA,OACA,KACqB;AAAA,EACrB,IACE,OAAO,MAAM,WAAW,YACxB,CAAC,qBAAqB,KAAK,KAC3B,CAAC,MAAM,iBACP,CAAC,OAAO,cAAc,MAAM,CAAC,KAC7B,MAAM,IAAI,KACV,MAAM,IAAI,QACV,MAAM,OAAO,SAAS,KACtB,MAAM,OAAO,SAAS,OACtB;AAAA,IACA,MAAM,IAAI,0BACR,wBACA,+CACF;AAAA,EACF;AAAA,EACA,MAAM,QAAQ,2BAA2B,WAAW,MAAM,OAAO,aAAa,GAAG,CAAC;AAAA,EAClF,MAAM,cAAc,IAAI,OAAO;AAAA,EAC/B,MAAM,iBAAiB,cACnB;AAAA;AAAA,aAEO;AAAA;AAAA;AAAA;AAAA,gEAKP;AAAA,EACJ,MAAM,aAAa,cACf;AAAA;AAAA;AAAA,OAIA;AAAA,EACJ,MAAM,aAAa,SAAS,MAAM;AAAA;AAAA;AAAA,MAG9B;AAAA;AAAA,8CAEwC;AAAA,EAC5C,MAAM,gBAAgB,CAAC,GAAG,MAAM,MAAM,MAAM,SAAU,MAAM,eAAe,MAAM,OAAO,MAAM;AAAA,EAE9F,MAAM,QAAQ,2BAA2B,MAAM,OAAO,MAAM;AAAA,EAC5D,MAAM,SAAS,gBAAgB,MAAM,QAAQ,MAAM,OAAO,MAAM;AAAA,EAChE,MAAM,QAAQ,aAAa;AAAA,IACzB,EAAE,MAAM,UAAU,QAAQ,iBAAiB,WAAW,OAAO;AAAA,IAC7D,GAAG,oBAAoB,EAAE,IAAI,CAAC,WAAW,KAAK,OAAO,QAAQ,KAAK,EAAE;AAAA,EACtE,CAAC;AAAA,EACD,MAAM,MAAM;AAAA,MACR,kCAAkC,MAAM;AAAA,EAC5C,MAAM,OAAO,CAAC,mBAAmB,MAAM,GAAG,GAAG,eAAe,MAAM,CAAC;AAAA,EACnE,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IAEA,UAAU,2CAA2C;AAAA,IACrD,WAAW,CAAC,GAAG,eAAe,MAAM,CAAC;AAAA,IACrC;AAAA,IACA,aAAa;AAAA,MACX,KAAK,2CAA2C;AAAA,MAChD,MAAM,CAAC,GAAG,eAAe,QAAQ,CAAC;AAAA,MAClC;AAAA,IACF;AAAA,IACA,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAGF,SAAS,YAAY,CACnB,WACA,OACA,KACqB;AAAA,EACrB,IAAI,MAAM,oBAAoB,MAAM;AAAA,IAClC,MAAM,IAAI,MAAM,qEAAqE;AAAA,EACvF;AAAA,EAEA,MAAM,QAAQ,aAAa,oBAAoB,CAAC;AAAA,EAChD,MAAM,MAAM;AAAA;AAAA,WAEH,IAAI,OAAO;AAAA;AAAA,eAEP,MAAM;AAAA;AAAA,EAEnB,MAAM,OAAO,CAAC,WAAW,MAAM,cAAc,GAAG,MAAM,IAAI;AAAA,EAE1D,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU,iCAAiC,IAAI,OAAO;AAAA,IACtD,WAAW,CAAC,WAAW,MAAM,YAAY;AAAA,IACzC;AAAA,IACA,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAGF,SAAS,WAAW,CAClB,WACA,OACA,KACqB;AAAA,EACrB,IAAI,MAAM,KAAK,WAAW,GAAG;AAAA,IAC3B,MAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AAAA,EAEA,MAAM,QAAQ,aAAa,oBAAoB,CAAC;AAAA,EAChD,MAAM,gBAAgB,aAAa,oBAAoB,GAAG,UAAU;AAAA,EACpE,MAAM,WAAW,KAAK,UAAU,MAAM,IAAI;AAAA,EAC1C,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,MAAM,MAAM;AAAA;AAAA,YAEF;AAAA,WACD,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA,eAIP,cAAc;AAAA;AAAA,EAG3B,OAAO;AAAA,IACL;AAAA,IACA,MAAM,CAAC,UAAU,WAAW,GAAG,cAAc,IAAI;AAAA,IACjD,UAAU;AAAA;AAAA,cAEA;AAAA,aACD,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKpB,WAAW,CAAC,UAAU,SAAS;AAAA,IAC/B;AAAA,IACA,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAGF,SAAS,aAAa,CACpB,WACA,YACA,eACA,KACqB;AAAA,EACrB,MAAM,YAAY,iBAAiB,aAAa;AAAA,EAChD,OAAO,aAAa,WAAW,YAAY,WAAW,GAAG;AAAA;AAG3D,SAAS,YAAY,CACnB,WACA,YACA,WACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,aAAa,GAAG,CAAC;AAAA,EACjF,MAAM,MAAM;AAAA;AAAA,YAEF,MAAM;AAAA,YACN,UAAU;AAAA,eACP,MAAM,MAAM;AAAA;AAAA,EAGzB,OAAO;AAAA,IACL;AAAA,IACA,MAAM,CAAC,GAAG,MAAM,MAAM,GAAG,UAAU,MAAM,GAAG,MAAM,MAAM,IAAI;AAAA,IAC5D,UAAU;AAAA;AAAA,cAEA,MAAM;AAAA,cACN,UAAU;AAAA;AAAA,IAEpB,WAAW,CAAC,GAAG,MAAM,MAAM,GAAG,UAAU,IAAI;AAAA,IAC5C,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,IACb,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAGF,SAAS,WAAW,CAClB,WACA,YACA,OACA,QACA,oBACA,KACqB;AAAA,EACrB,MAAM,YACJ,UAAU,OAAO,SAAS,IACtB,qBAAqB,OAAO,MAAM,IAClC,2BAA2B,OAAO,kBAAkB;AAAA,EAE1D,IAAI,CAAC,WAAW;AAAA,IACd,MAAM,IAAI,MAAM,4EAA4E;AAAA,EAC9F;AAAA,EACA,OAAO,aAAa,WAAW,YAAY,WAAW,GAAG;AAAA;AAG3D,SAAS,WAAW,CAClB,WACA,YACA,QACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,aAAa,GAAG,CAAC;AAAA,EACjF,MAAM,aACJ,IAAI,cAAc,gBAAgB,UAAU,IACxC,2BAA2B,WAAW,YAAY,GAAG,IACrD;AAAA,EACN,MAAM,QAAQ,aAAa,gBAAgB,MAAM,CAAC;AAAA,EAElD,OAAO;AAAA,IACL,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAUqB,MAAM,cAAc,0BAA0B;AAAA,cAC9D,MAAM;AAAA,iBACH,MAAM;AAAA;AAAA,IAEnB,MAAM,CAAC,GAAG,MAAM,MAAM,GAAG,MAAM,IAAI;AAAA,IACnC,UAAU,MAAM;AAAA,IAChB,WAAW,MAAM;AAAA,IACjB;AAAA,IACA,cAAc,aAAa,gBAAgB,UAAU,IAAI,MAAM;AAAA,IAC/D,SAAS,MAAM;AAAA,IACf,UAAU,MAAM;AAAA,IAChB,eAAe,MAAM;AAAA,EACvB;AAAA;AAGF,SAAS,YAAY,CACnB,WACA,YACA,UACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,aAAa,GAAG,CAAC;AAAA,EACjF,MAAM,QAAQ,KAAK,IAAI,GAAG,QAAQ;AAAA,EAClC,MAAM,WAAW,IAAI,aAAa,QAAQ,IAAI;AAAA,EAE9C,OAAO;AAAA,IACL,KAAK;AAAA;AAAA,cAEK,MAAM;AAAA,iBACH,MAAM,MAAM;AAAA;AAAA;AAAA,IAGzB,MAAM,CAAC,GAAG,MAAM,MAAM,GAAG,MAAM,MAAM,MAAM,QAAQ;AAAA,IACnD,UAAU;AAAA;AAAA,cAEA,MAAM;AAAA;AAAA,IAEhB,WAAW,MAAM;AAAA,IACjB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,IACb,SAAS,CAAC,UAAU,UAClB,UAAU,YAAY,IAAI,cAAc,WAAW,QAAQ,QAAQ;AAAA,IACrE,UAAU,IAAI,aAAa,CAAC,SAAS,KAAK,MAAM,GAAG,KAAK,IAAI;AAAA,IAC5D,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAGF,SAAS,WAAW,CAClB,WACA,YACA,aACA,WACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,aAAa,GAAG,CAAC;AAAA,EACjF,MAAM,WAAW,KAAK,IAAI,GAAG,WAAW;AAAA,EACxC,MAAM,SAAS,YAAY,gBAAgB,WAAW,MAAM,MAAM,MAAM,IAAI;AAAA,EAC5E,MAAM,kBAAkB,SACpB,uBAAuB,MAAM,MAAM,QAAQ,QAAQ,MAAM,MAAM,cAAc,IAC7E;AAAA,EACJ,MAAM,WAAW,kBAAkB,SAAS,gBAAgB,QAAQ;AAAA,EAEpE,OAAO;AAAA,IACL,KAAK;AAAA;AAAA,cAEK,MAAM;AAAA,QACZ;AAAA,iBACS,MAAM,MAAM;AAAA;AAAA;AAAA,IAGzB,MAAM,CAAC,GAAG,MAAM,MAAM,GAAI,iBAAiB,QAAQ,CAAC,GAAI,GAAG,MAAM,MAAM,MAAM,WAAW,CAAC;AAAA,IACzF,UAAU;AAAA;AAAA,cAEA,MAAM;AAAA;AAAA,IAEhB,WAAW,MAAM;AAAA,IACjB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,IACb,SAAS,CAAC,aAAa,WAAW;AAAA,IAClC,UAAU,CAAC,SAAS,KAAK,MAAM,GAAG,QAAQ;AAAA,IAC1C,eAAe,CAAC,MAAM,aAAa;AAAA,MACjC,IAAI,YAAY,YAAY,KAAK,WAAW;AAAA,QAAG;AAAA,MAC/C,OAAO,gBAAgB,KAAK,KAAK,SAAS,IAAI,MAAM,MAAM,MAAM;AAAA;AAAA,EAEpE;AAAA;AAGF,SAAS,gBAAgB,CACvB,WACA,YACA,QACA,WACA,oBACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,aAAa,GAAG,CAAC;AAAA,EACjF,MAAM,cAAc,cAAc,aAAa,kBAAkB;AAAA,EACjE,MAAM,UACJ,cAAc,aACV;AAAA,eACO,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,eAKX,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA,UAKlB;AAAA,eACO,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA,+BAIK,uBAAuB,YAAY,KAAK;AAAA;AAAA,eACxD,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxB,MAAM,QAAQ,aAAa,oBAAoB,CAAC;AAAA,EAChD,MAAM,iBAAiB,aAAa,oBAAoB,GAAG,WAAW;AAAA,EACtE,MAAM,MAAM;AAAA,sBACQ,kBAAkB;AAAA,YAC5B,MAAM;AAAA,MACZ;AAAA,eACS,eAAe;AAAA;AAAA,EAE5B,MAAM,OAAO;AAAA,IACX,GAAG,MAAM;AAAA,IACT;AAAA,IACA,GAAI,uBAAuB,YAAY,CAAC,IAAI,CAAC,kBAAkB;AAAA,IAC/D,GAAG,eAAe;AAAA,EACpB;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU,kCAAkC;AAAA,IAC5C,WAAW;AAAA,IACX;AAAA,IACA,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAeF,SAAS,aAAa,CACpB,WACA,YACA,YACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,aAAa,GAAG,CAAC;AAAA,EACjF,MAAM,SAAS,wBACb,YACA,EAAE,SAAS,oBAAoB,MAAM,wBAAwB,IAAI,mBAAmB,GACpF,IACA,GACF;AAAA,EACA,MAAM,aAAa,aAAa,MAAM,MAAM,QAAQ,SAAS,0BAA0B;AAAA,EACvF,MAAM,MAAM;AAAA,sBACQ,OAAO;AAAA,YACjB,MAAM;AAAA,eACH,WAAW;AAAA;AAAA,EAGxB,OAAO;AAAA,IACL;AAAA,IACA,MAAM,CAAC,GAAG,OAAO,MAAM,GAAG,MAAM,MAAM,GAAG,WAAW,IAAI;AAAA,IACxD,UAAU,MAAM;AAAA,IAChB,WAAW,MAAM;AAAA,IACjB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,IACb,cAAc,MAAM;AAAA,IACpB,SAAS,MAAM;AAAA,IACf,UAAU,MAAM;AAAA,IAChB,eAAe,MAAM;AAAA,EACvB;AAAA;AAQF,SAAS,uBAAuB,CAC9B,YACA,QACA,YACA,KACmB;AAAA,EACnB,MAAM,QAAkB,CAAC;AAAA,EACzB,MAAM,OAAsB,CAAC;AAAA,EAC7B,WAAW,QAAQ,CAAC,WAAW,UAAU;AAAA,IACvC,MAAM,OAAO,eAAe,KAAK,GAAG,UAAU,GAAG,cAAc;AAAA,IAC/D,MAAM,QAAQ,sBAAsB,WAAW,QAAQ,MAAM,GAAG;AAAA,IAChE,MAAM,KAAK,KAAK,QAAQ,MAAM,MAAM;AAAA,IACpC,KAAK,KAAK,UAAU,QAAQ,GAAG,MAAM,IAAI;AAAA,GAC1C;AAAA,EACD,OAAO,EAAE,KAAK,eAAe,MAAM,KAAK,IAAI,MAAM,KAAK;AAAA;AASzD,SAAS,qBAAqB,CAC5B,WACA,QACA,MACA,KACmB;AAAA,EACnB,MAAM,OAAO,QAAQ;AAAA,EACrB,MAAM,SAAS,OAAO;AAAA,EACtB,MAAM,SAAS,UAAU;AAAA,EACzB,MAAM,WAAW,UAAU,cAAc;AAAA,EAGzC,MAAM,eAAe,WAAW,GAAG,wBAAwB,GAAG;AAAA,EAC9D,MAAM,aAAa,WAAW,GAAG,mBAAmB,GAAG;AAAA,EACvD,MAAM,aAAa,WAAW,GAAG,wBAAwB,GAAG;AAAA,EAC5D,MAAM,WAAW,WAAW,GAAG,mBAAmB,GAAG;AAAA,EAErD,MAAM,QAAQ,0BAA0B,WAAW,MAAM,QAAQ,MAAM,GAAG;AAAA,EAC1E,MAAM,QAAQ,sBAAsB,WAAW,QAAQ,cAAc,UAAU;AAAA,EAE/E,MAAM,aAAa;AAAA,IACjB,GAAG,qBAAqB,OAAO;AAAA,IAC/B,GAAG,gBAAgB,OAAO;AAAA,IAC1B,GAAG,cAAc,OAAO;AAAA,IACxB,GAAG;AAAA,EACL;AAAA,EACA,MAAM,YAA2B,CAAC,UAAU,MAAM;AAAA,EAClD,IAAI,YAAY,UAAU,uBAAuB,WAAW;AAAA,IAC1D,WAAW,KAAK,GAAG,yBAAyB;AAAA,IAC5C,UAAU,KAAK,UAAU,kBAAkB;AAAA,EAC7C;AAAA,EAEA,MAAM,QAAQ;AAAA,aACH,MAAM,4CAA4C,MAAM;AAAA,WAC1D,IAAI,OAAO,iBAAiB;AAAA,WAC5B,IAAI,OAAO,mBAAmB;AAAA,WAC9B,uBAAuB;AAAA,WACvB,2BAA2B;AAAA,WAC3B,uBAAuB;AAAA,YACtB,WAAW,KAAK,OAAO;AAAA;AAAA,EAEjC,MAAM,YAAY,CAAC,GAAG,MAAM,MAAM,GAAG,MAAM,MAAM,GAAG,SAAS;AAAA,EAE7D,IAAI,UAAU,gBAAgB,OAAO;AAAA,IACnC,OAAO;AAAA,MACL,KAAK,WAAW,qBAAqB,aAAa,gBAAgB;AAAA,MAClE,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EAKA,MAAM,QAAQ,UAAU,SAAS;AAAA,EACjC,OAAO;AAAA,IACL,KAAK,0CAA0C,yBAAyB,sBAAsB,aAAa,gBAAgB;AAAA,IAC3H,MAAM,CAAC,GAAG,WAAW,KAAK;AAAA,EAC5B;AAAA;AAQF,SAAS,yBAAyB,CAChC,WACA,MACA,QACA,MACA,KACmB;AAAA,EACnB,MAAM,SAAS;AAAA,IACb,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,0BAA0B;AAAA,EAC5B;AAAA,EACA,MAAM,OAAsB,CAAC;AAAA,EAE7B,IAAI,UAAU,UAAU,UAAU,OAAO,SAAS,GAAG;AAAA,IACnD,MAAM,SAAS,wBACb,UAAU,QACV;AAAA,MACE,SAAS,GAAG;AAAA,MACZ,MAAM,GAAG;AAAA,MACT,IAAI,GAAG;AAAA,IACT,GACA,MACA,GACF;AAAA,IACA,OAAO,KAAK,YAAY,OAAO,KAAK;AAAA,IACpC,KAAK,KAAK,GAAG,OAAO,IAAI;AAAA,EAC1B;AAAA,EAEA,OAAO,EAAE,KAAK,eAAe,OAAO,KAAK,IAAI,MAAM,KAAK;AAAA;AAM1D,SAAS,qBAAqB,CAC5B,WACA,QACA,cACA,YACmB;AAAA,EACnB,MAAM,iBAAiB,GAAG;AAAA,EAC1B,MAAM,UAAoB,CAAC;AAAA,EAC3B,MAAM,OAAsB,CAAC;AAAA,EAE7B,WAAW,SAAS,UAAU,WAAW,CAAC,GAAG;AAAA,IAE3C,IAAI,MAAM,SAAS;AAAA,MAAY;AAAA,IAC/B,IAAI,MAAM,eAAe,WAAW;AAAA,MAClC,MAAM,IAAI,0BACR,+BACA,0EACA,kBACF;AAAA,IACF;AAAA,IACA,MAAM,YAAY,MAAM,cAAc,SAAS,SAAS;AAAA,IACxD,MAAM,OAAO,SAAS,MAAM,UAAU;AAAA,IACtC,QAAQ,KACN,aAAa,mBAAmB,cAAc,gBAAgB,mBAAmB,cAAc,oCAC/F,GAAG,oBAAoB,cAAc,KAAK,WAC5C;AAAA,IACA,KAAK,KAAK,MAAM,MAAM,IAAI;AAAA,EAC5B;AAAA,EAEA,QAAQ,KAAK,GAAG,oBAAoB,GAAG,gBAAgB;AAAA,EACvD,OAAO,EAAE,KAAK,QAAQ,KAAK,IAAI,GAAG,KAAK;AAAA;AAGzC,SAAS,UAAU,CACjB,WACA,IACA,QACA,KACqB;AAAA,EACrB,IAAI,OAAO,WAAW,GAAG;AAAA,IACvB,MAAM,QAAQ,aAAa,oBAAoB,CAAC;AAAA,IAChD,OAAO;AAAA,MACL,KAAK;AAAA;AAAA,eAEI,IAAI,OAAO;AAAA;AAAA,mBAEP,MAAM;AAAA;AAAA,MAEnB,MAAM,MAAM;AAAA,MACZ,UAAU;AAAA,MACV,WAAW,CAAC;AAAA,MACZ;AAAA,MACA,SAAS,MAAM;AAAA,MACf,UAAU;AAAA,MACV,eAAe,MAAG;AAAA,QAAG;AAAA;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,OAAO,IAAI,CAAC,UACjC,2BAA2B,WAAW,OAAO,aAAa,GAAG,CAAC,CAChE;AAAA,EACA,MAAM,aAAa,qBAAqB,IAAI,cAAc;AAAA,EAC1D,MAAM,QAAQ,aAAa,oBAAoB,CAAC;AAAA,EAChD,MAAM,gBAAgB,aAAa,oBAAoB,GAAG,UAAU;AAAA,EACpE,MAAM,MAAM;AAAA;AAAA,YAEF,WAAW;AAAA,WACZ,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA,eAIP,cAAc;AAAA;AAAA,EAE3B,MAAM,OAAO,CAAC,GAAG,WAAW,MAAM,WAAW,GAAG,cAAc,IAAI;AAAA,EAElE,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU,kCAAkC,WAAW;AAAA,IACvD,WAAW,WAAW;AAAA,IACtB;AAAA,IACA,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,eAAe,MAAG;AAAA,MAAG;AAAA;AAAA,EACvB;AAAA;AAGF,SAAS,cAAc,CACrB,WACA,YACA,YACA,KACqB;AAAA,EACrB,MAAM,QAAQ,2BAA2B,WAAW,YAAY,GAAG;AAAA,EACnE,IAAI,CAAC;AAAA,IAAY,OAAO;AAAA,EAExB,MAAM,aAAa,4BAA4B,UAAU;AAAA,EACzD,MAAM,aAAa,aAAa,MAAM,MAAM,QAAQ,SAAS,0BAA0B;AAAA,EACvF,MAAM,cAAc,aAAa,MAAM,MAAM,QAAQ,WAAW,oBAAoB;AAAA,EAEpF,OAAO;AAAA,IACL,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,UAKC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKS,MAAM,cAAc,0BAA0B;AAAA,cAC9D,MAAM;AAAA,iBACH,WAAW;AAAA;AAAA,IAExB,MAAM,CAAC,GAAG,WAAW,MAAM,GAAG,MAAM,MAAM,GAAG,WAAW,IAAI;AAAA,IAC5D,UAAU,MAAM;AAAA,IAChB,WAAW,MAAM;AAAA,IACjB,aAAa,MAAM;AAAA,IACnB,OAAO;AAAA,IACP,cAAc,MAAM;AAAA,IACpB,SAAS,MAAM;AAAA,IACf,UAAU,MAAM;AAAA,IAChB,eAAe,MAAM;AAAA,EACvB;AAAA;AAGF,SAAS,eAAe,CAAC,OAA6B;AAAA,EACpD,QAAQ,MAAM;AAAA,SACP;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,SACA;AAAA,MACH,OAAO,gBAAgB,MAAM,KAAK;AAAA;AAAA,MAElC,OAAO;AAAA;AAAA;AAIb,SAAS,eAAe,CAAC,UAAqD;AAAA,EAC5E,OACE,SAAS,gBAAgB;AAAA,IACvB,KAAK,SAAS;AAAA,IACd,MAAM,SAAS;AAAA,IACf,SAAS,CAAC,aAAa,SAAS,QAAQ,UAAU,SAAS;AAAA,EAC7D;AAAA;AAIJ,SAAS,oBAAoB,CAC3B,IACA,QACmB;AAAA,EACnB,MAAM,WAAW,OAAO,UAAU,UAAU,OAAO,cAAc,cAAc;AAAA,EAC/E,MAAM,eAAe,OAAO,IAC1B,CAAC,UAAU,2CAA2C,MAAM,eAC9D;AAAA,EAEA,OAAO;AAAA,IACL,KAAK,aAAa,KAAK,IAAI,WAAW;AAAA,IACtC,MAAM,OAAO,QAAQ,CAAC,UAAU,MAAM,IAAI;AAAA,EAC5C;AAAA;AAGF,SAAS,2BAA2B,CAAC,YAAkD;AAAA,EACrF,IAAI,WAAW,WAAW;AAAA,IAAG,OAAO,EAAE,KAAK,cAAc,MAAM,CAAC,EAAE;AAAA,EAElE,OAAO;AAAA,IACL,KAAK;AAAA;AAAA;AAAA,oDAG2C,oBAAoB,WAAW;AAAA;AAAA,oCAE/C,WAAW,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnE,MAAM,CAAC,GAAG,UAAU;AAAA,EACtB;AAAA;AAIK,SAAS,mBAAmB,CAAC,OAAuB;AAAA,EACzD,OAAO,QAAQ;AAAA;AAAA;AAAA,WAGN;AAAA;AAAA;AAIX,SAAS,gBAAgB,CAAC,WAAoD;AAAA,EAC5E,IACE,gBAAgB,aAChB,UAAU,eAAe,cACxB,UAAU,OAAO,QAChB,UAAU,OAAO,SACjB,UAAU,OAAO,QACjB,UAAU,OAAO,QACnB;AAAA,IACA,MAAM,IAAI,0BACR,+BACA,mEACA,aACF;AAAA,EACF;AAAA,EAEA,QAAQ,UAAU;AAAA,SACX;AAAA,SACA,MAAM;AAAA,MACT,MAAM,QAAQ,UAAU,MAAM,IAAI,gBAAgB;AAAA,MAClD,MAAM,SAAS,UAAU,OAAO,QAAQ,UAAU;AAAA,MAClD,OAAO;AAAA,QACL,KAAK,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,KAAK,MAAM;AAAA,QAClD,MAAM,MAAM,QAAQ,CAAC,SAAS,KAAK,IAAI;AAAA,MACzC;AAAA,IACF;AAAA,SACK,OAAO;AAAA,MACV,MAAM,OAAO,iBAAiB,UAAU,IAAI;AAAA,MAC5C,OAAO,gBAAgB,IAAI;AAAA,IAC7B;AAAA,SACK;AAAA,MACH,OAAO,UAAU,eAAe,YAC5B,0BAA0B,UAAU,YAAY,CAAC,UAAU,KAAK,CAAC,IACjE,yBAAyB,UAAU,YAAY,MAAM,UAAU,KAAK;AAAA,SACrE;AAAA,MACH,OAAO,UAAU,eAAe,YAC5B,gBAAgB,0BAA0B,UAAU,YAAY,CAAC,UAAU,KAAK,CAAC,CAAC,IAClF,yBAAyB,UAAU,YAAY,OAAO,UAAU,KAAK;AAAA,SACtE;AAAA,SACA;AAAA,SACA;AAAA,SACA,OAAO;AAAA,MACV,MAAM,KAAK,sBAAsB,UAAU,EAAE;AAAA,MAC7C,OAAO;AAAA,QACL,KAAK,GAAG,oBAAoB,KAAK;AAAA,QACjC,MAAM,CAAC,SAAS,UAAU,UAAU,GAAG,SAAS,UAAU,KAAK,CAAC;AAAA,MAClE;AAAA,IACF;AAAA,SACK;AAAA,MACH,OAAO,UAAU,eAAe,YAC5B,0BAA0B,UAAU,YAAY,UAAU,MAAM,IAChE,mBAAmB,UAAU,YAAY,UAAU,MAAM;AAAA,SAC1D,UAAU;AAAA,MACb,MAAM,MAAM,GAAG,mBAAmB;AAAA,MAClC,MAAM,OAA0B,EAAE,KAAK,MAAM,CAAC,SAAS,UAAU,UAAU,CAAC,EAAE;AAAA,MAC9E,OAAO,UAAU,QAAQ,OAAO,gBAAgB,IAAI;AAAA,IACtD;AAAA,SACK;AAAA,MACH,OAAO,UAAU,eAAe,YAC5B,gCAAgC,UAAU,YAAY,UAAU,KAAK,IACrE,yBAAyB,UAAU,YAAY,UAAU,KAAK;AAAA;AAAA;AAQxE,SAAS,yBAAyB,CAChC,YACA,QACmB;AAAA,EACnB,MAAM,OAAO,SAAS,UAAU;AAAA,EAChC,MAAM,MAAM,OAAO,QAAQ,CAAC,UAAU;AAAA,IACpC,MAAM,KAAK,UAAU,KAAK;AAAA,IAC1B,OAAO,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE;AAAA,GACnC;AAAA,EACD,MAAM,UAAoB,CAAC;AAAA,EAC3B,MAAM,OAAsB,CAAC;AAAA,EAE7B,IAAI,OAAO,SAAS,IAAI,GAAG;AAAA,IACzB,QAAQ,KAAK,GAAG,mBAAmB,YAAY;AAAA,IAC/C,KAAK,KAAK,IAAI;AAAA,EAChB;AAAA,EACA,IAAI,IAAI,SAAS,GAAG;AAAA,IAClB,QAAQ,KACN,IAAI,oBAAoB,kBAAkB,oBAAoB,SAAS,IAAI,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,KACrG;AAAA,IACA,KAAK,KAAK,GAAG,aAAa,GAAG,WAAW,GAAG,GAAG;AAAA,EAChD;AAAA,EACA,IAAI,QAAQ,WAAW;AAAA,IAAG,OAAO,EAAE,KAAK,SAAS,MAAM,CAAC,EAAE;AAAA,EAE1D,OAAO,EAAE,KAAK,IAAI,QAAQ,KAAK,MAAM,MAAM,KAAK;AAAA;AAGlD,SAAS,+BAA+B,CAAC,YAAoB,OAAmC;AAAA,EAC9F,MAAM,KAAK,UAAU,KAAK;AAAA,EAC1B,IAAI,OAAO;AAAA,IAAW,OAAO,EAAE,KAAK,SAAS,MAAM,CAAC,EAAE;AAAA,EACtD,MAAM,OAAO,SAAS,UAAU;AAAA,EAChC,OAAO;AAAA,IACL,KAAK,IAAI,mBAAmB;AAAA,IAC5B,MAAM,CAAC,MAAM,MAAM,EAAE;AAAA,EACvB;AAAA;AAGF,SAAS,SAAS,CAAC,OAAoC;AAAA,EACrD,IAAI,OAAO,UAAU,YAAY,UAAU;AAAA,IAAM;AAAA,EACjD,QAAQ,MAAM,OAAO;AAAA,EACrB,OAAO,SAAS,UAAU,OAAO,OAAO,WAAW,KAAK;AAAA;AAG1D,SAAS,eAAe,CAAC,WAAiD;AAAA,EACxE,OAAO;AAAA,IACL,KAAK,kBAAkB,UAAU;AAAA,IACjC,MAAM,UAAU;AAAA,EAClB;AAAA;AAGF,SAAS,wBAAwB,CAC/B,YACA,IACA,OACmB;AAAA,EACnB,MAAM,OAAO,SAAS,UAAU;AAAA,EAChC,IAAI,UAAU,MAAM;AAAA,IAClB,MAAM,MAAM,GAAG,mBAAmB;AAAA,IAClC,MAAM,OAA0B,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE;AAAA,IACpD,OAAO,OAAO,OAAO,OAAO,gBAAgB,IAAI;AAAA,EAClD;AAAA,EAEA,IAAI,OAAO,MAAM;AAAA,IACf,OAAO;AAAA,MACL,KAAK,GAAG,oBAAoB;AAAA,MAC5B,MAAM,CAAC,MAAM,SAAS,KAAK,CAAC;AAAA,IAC9B;AAAA,EACF;AAAA,EAIA,OAAO;AAAA,IACL,KAAK,IAAI,mBAAmB,gBAAgB,mBAAmB,iBAAiB,oBAAoB;AAAA,IACpG,MAAM,CAAC,MAAM,MAAM,MAAM,SAAS,KAAK,CAAC;AAAA,EAC1C;AAAA;AAGF,SAAS,kBAAkB,CAAC,YAAoB,QAA+C;AAAA,EAC7F,IAAI,OAAO,WAAW;AAAA,IAAG,OAAO,EAAE,KAAK,SAAS,MAAM,CAAC,EAAE;AAAA,EAEzD,MAAM,OAAO,SAAS,UAAU;AAAA,EAChC,MAAM,gBAAgB,OAAO,OAAO,CAAC,UAAU,UAAU,IAAI;AAAA,EAC7D,MAAM,UAAoB,CAAC;AAAA,EAC3B,MAAM,OAAsB,CAAC;AAAA,EAE7B,IAAI,OAAO,WAAW,cAAc,QAAQ;AAAA,IAC1C,QAAQ,KAAK,GAAG,mBAAmB,YAAY;AAAA,IAC/C,KAAK,KAAK,IAAI;AAAA,EAChB;AAAA,EAEA,IAAI,cAAc,SAAS,GAAG;AAAA,IAC5B,QAAQ,KAAK,GAAG,oBAAoB,SAAS,cAAc,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,IACvF,KAAK,KAAK,MAAM,GAAG,cAAc,IAAI,QAAQ,CAAC;AAAA,EAChD;AAAA,EAEA,OAAO;AAAA,IACL,KAAK,IAAI,QAAQ,KAAK,MAAM;AAAA,IAC5B;AAAA,EACF;AAAA;AAGF,SAAS,wBAAwB,CAAC,YAAoB,OAAmC;AAAA,EACvF,MAAM,OAAO,SAAS,UAAU;AAAA,EAChC,MAAM,UAAoB,CAAC;AAAA,EAC3B,MAAM,OAAsB,CAAC;AAAA,EAE7B,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,QAAQ,KAAK,IAAI,mBAAmB,wBAAwB,oBAAoB,YAAY;AAAA,IAC5F,KAAK,KAAK,MAAM,MAAM,KAAK;AAAA,EAC7B;AAAA,EAEA,QAAQ,KACN,IAAI,mBAAmB,gGACzB;AAAA,EACA,KAAK,KAAK,MAAM,MAAM,SAAS,KAAK,CAAC;AAAA,EAErC,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,QAAQ,KACN,IAAI,mBAAmB,8FACzB;AAAA,IACA,KAAK,KAAK,MAAM,MAAM,KAAK;AAAA,EAC7B;AAAA,EAEA,OAAO,EAAE,KAAK,IAAI,QAAQ,KAAK,MAAM,MAAM,KAAK;AAAA;AAGlD,SAAS,oBAAoB,CAAC,OAAe,QAA8C;AAAA,EACzF,MAAM,QAAQ,SAAS,KAAK;AAAA,EAC5B,IAAI,MAAM,WAAW;AAAA,IAAG,OAAO,EAAE,KAAK,SAAS,MAAM,CAAC,EAAE;AAAA,EAExD,MAAM,UAAU,MAAM,IAAI,MAAM;AAAA,IAC9B,MAAM,eAAe,OAAO,IAC1B,MAAM,6BAA6B,oBAAoB,0BACzD;AAAA,IACA,OAAO,IAAI,aAAa,KAAK,MAAM;AAAA,GACpC;AAAA,EACD,MAAM,OAAO,MAAM,QAAQ,CAAC,SAAS,OAAO,QAAQ,CAAC,UAAU,CAAC,SAAS,KAAK,GAAG,IAAI,CAAC,CAAC;AAAA,EAEvF,OAAO,EAAE,KAAK,IAAI,QAAQ,KAAK,OAAO,MAAM,KAAK;AAAA;AAGnD,SAAS,0BAA0B,CACjC,OACA,oBAC0B;AAAA,EAC1B,MAAM,mBAAwC,CAAC;AAAA,EAE/C,YAAY,cAAc,WAAW,OAAO,QAAQ,sBAAsB,CAAC,CAAC,GAAG;AAAA,IAC7E,IAAI,OAAO,WAAW;AAAA,MAAG;AAAA,IACzB,MAAM,YAAY,qBAAqB,OAAO,MAAM;AAAA,IACpD,iBAAiB,KAAK;AAAA,MACpB,KAAK,2BAA2B,UAAU;AAAA,MAC1C,MAAM,CAAC,cAAc,GAAG,UAAU,IAAI;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,iBAAiB,WAAW;AAAA,IAAG,OAAO;AAAA,EAE1C,OAAO;AAAA,IACL,KAAK,IAAI,iBAAiB,IAAI,CAAC,cAAc,UAAU,GAAG,EAAE,KAAK,MAAM;AAAA,IACvE,MAAM,iBAAiB,QAAQ,CAAC,cAAc,UAAU,IAAI;AAAA,EAC9D;AAAA;AAGF,SAAS,YAAY,CACnB,QACA,WACA,iBAAiB,cACF;AAAA,EACf,MAAM,UAAoB,CAAC;AAAA,EAC3B,MAAM,OAAsB,CAAC;AAAA,EAE7B,WAAW,SAAS,QAAQ;AAAA,IAC1B,IAAI,MAAM,SAAS,UAAU;AAAA,MAC3B,QAAQ,KACN,GAAG,iBAAiB,MAAM,QAAQ,SAAS,IAAI,MAAM,SAAS,oBAAoB,MAAM,MAAM,UAAU,YAAY,GACtH;AAAA,MACA;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,MAAM,cAAc,SAAS,SAAS;AAAA,IACxD,MAAM,OAAO,SAAS,MAAM,UAAU;AAAA,IACtC,QAAQ,KACN,aAAa,mBAAmB,cAAc,gBAAgB,mBAAmB,cAAc,oCAC/F,GAAG,oBAAoB,cAAc,KAAK,WAC5C;AAAA,IACA,KAAK,KAAK,MAAM,MAAM,IAAI;AAAA,EAC5B;AAAA,EAEA,OAAO,EAAE,KAAK,QAAQ,KAAK,IAAI,GAAG,MAAM,QAAQ,eAAe;AAAA;AAGjE,SAAS,eAAe,CAAC,QAAwE;AAAA,EAC/F,MAAM,cAAoC,CAAC;AAAA,EAC3C,WAAW,SAAS,QAAQ;AAAA,IAC1B,IAAI,MAAM,SAAS,YAAY;AAAA,MAC7B,MAAM,IAAI,MAAM,iEAAiE;AAAA,IACnF;AAAA,IACA,IAAI,MAAM,eAAe,WAAW;AAAA,MAClC,MAAM,IAAI,0BACR,+BACA,gEACA,QACF;AAAA,IACF;AAAA,IAEA,YAAY,KAAK;AAAA,MACf,MAAM;AAAA,MACN,YAAY,MAAM;AAAA,MAClB,WAAW,MAAM,cAAc,SAAS,SAAS;AAAA,IACnD,CAAC;AAAA,EACH;AAAA,EACA,YAAY,KAAK,GAAG,oBAAoB,CAAC;AAAA,EACzC,OAAO;AAAA;AAGT,SAAS,mBAAmB,GAAkC;AAAA,EAC5D,OAAO;AAAA,IACL,EAAE,MAAM,UAAU,QAAQ,kBAAkB,WAAW,MAAM;AAAA,IAC7D,EAAE,MAAM,UAAU,QAAQ,cAAc,WAAW,MAAM;AAAA,EAC3D;AAAA;AAGF,SAAS,sBAAsB,CAC7B,QACA,QACA,iBAAiB,cACE;AAAA,EACnB,MAAM,YAAiC,CAAC;AAAA,EAExC,SAAS,QAAQ,EAAG,QAAQ,OAAO,QAAQ,SAAS,GAAG;AAAA,IACrD,MAAM,qBAAqB,OACxB,MAAM,GAAG,KAAK,EACd,IAAI,CAAC,OAAO,kBACX,qBAAqB,OAAO,OAAO,gBAAgB,cAAc,CACnE;AAAA,IACF,MAAM,mBAAmB,kBAAkB,OAAO,QAAQ,OAAO,QAAQ,cAAc;AAAA,IACvF,IAAI,CAAC;AAAA,MAAkB;AAAA,IAEvB,MAAM,QAAQ,CAAC,GAAG,oBAAoB,gBAAgB;AAAA,IACtD,UAAU,KAAK;AAAA,MACb,KAAK,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,KAAK,OAAO;AAAA,MACnD,MAAM,MAAM,QAAQ,CAAC,SAAS,KAAK,IAAI;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,UAAU,WAAW;AAAA,IAAG,OAAO,EAAE,KAAK,SAAS,MAAM,CAAC,EAAE;AAAA,EAE5D,OAAO;AAAA,IACL,KAAK,IAAI,UAAU,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,KAAK,MAAM;AAAA,IACtD,MAAM,UAAU,QAAQ,CAAC,SAAS,KAAK,IAAI;AAAA,EAC7C;AAAA;AAGF,SAAS,oBAAoB,CAC3B,OACA,QACA,iBAAiB,cACE;AAAA,EACnB,IAAI,MAAM,SAAS,UAAU;AAAA,IAC3B,OAAO;AAAA,MACL,KAAK,GAAG,iBAAiB,MAAM,MAAM;AAAA,MACrC,MAAM,CAAC,SAAS,OAAO,KAAK,CAAC;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,SAAS,MAAM,UAAU;AAAA,EACtC,IAAI,OAAO,SAAS;AAAA,IAClB,OAAO;AAAA,MACL,KAAK,IAAI,mBAAmB,cAAc,gBAAgB,mBAAmB,cAAc;AAAA,MAC3F,MAAM,CAAC,MAAM,IAAI;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,KAAK,IAAI,mBAAmB,cAAc,qBAAqB,mBAAmB,cAAc,mBAAmB,oBAAoB,cAAc;AAAA,IACrJ,MAAM,CAAC,MAAM,MAAM,MAAM,SAAS,OAAO,KAAK,CAAC;AAAA,EACjD;AAAA;AAGF,SAAS,iBAAiB,CACxB,OACA,QACA,iBAAiB,cACS;AAAA,EAC1B,IAAI,MAAM,SAAS,UAAU;AAAA,IAC3B,OAAO;AAAA,MACL,KAAK,GAAG,iBAAiB,MAAM,MAAM,KAAK,MAAM,cAAc,SAAS,MAAM;AAAA,MAC7E,MAAM,CAAC,SAAS,OAAO,KAAK,CAAC;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,IAAI,OAAO;AAAA,IAAS,OAAO;AAAA,EAE3B,MAAM,OAAO,SAAS,MAAM,UAAU;AAAA,EACtC,MAAM,UAAU,aAAa,mBAAmB,cAAc,gBAAgB,mBAAmB,cAAc;AAAA,EAC/G,MAAM,gBAAgB,MAAM,cAAc,SAAS,MAAM;AAAA,EAEzD,OAAO;AAAA,IACL,KAAK,IAAI,mBAAmB,mBAAmB,oBAAoB,cAAc,KAAK;AAAA,IACtF,MAAM,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS,OAAO,KAAK,CAAC;AAAA,EAC7D;AAAA;AAGF,SAAS,eAAe,CACtB,KACA,QACQ;AAAA,EACR,MAAM,aAAa,KAAK,MAAM,IAAI,sBAAsB,IAAI,UAAU;AAAA,EACtE,MAAM,QAA0B;AAAA,IAC9B,SAAS;AAAA,IACT,OAAO,OAAO,IAAI,aAAa;AAAA,IAC/B,QAAQ,OAAO,IAAI,CAAC,UAAU,oBAAoB,KAAK,YAAY,KAAK,CAAC;AAAA,EAC3E;AAAA,EACA,OAAO,GAAG,oBAAoB,OAAO,KAAK,KAAK,UAAU,KAAK,CAAC,EAAE,SAAS,WAAW;AAAA;AAGvF,SAAS,eAAe,CACtB,OACA,QAC+B;AAAA,EAC/B,IAAI,CAAC,MAAM,WAAW,iBAAiB,GAAG;AAAA,IACxC,sBAAsB,wCAAwC;AAAA,EAChE;AAAA,EAEA,MAAM,MAAM,MAAM,MAAM,kBAAkB,MAAM;AAAA,EAChD,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,UAAU,KAAK,MAAM,OAAO,KAAK,KAAK,WAAW,EAAE,SAAS,MAAM,CAAC;AAAA,IACnE,MAAM;AAAA,IACN,sBAAsB,wCAAwC;AAAA;AAAA,EAGhE,IAAI,CAAC,mBAAmB,OAAO,GAAG;AAAA,IAChC,sBAAsB,wCAAwC;AAAA,EAChE;AAAA,EAEA,MAAM,gBAAgB,OAAO,IAAI,aAAa;AAAA,EAC9C,IACE,QAAQ,MAAM,WAAW,cAAc,UACvC,QAAQ,MAAM,KAAK,CAAC,OAAO,UAAU,UAAU,cAAc,MAAM,GACnE;AAAA,IACA,sBAAsB,2DAA2D;AAAA,EACnF;AAAA,EAEA,OAAO,QAAQ;AAAA;AAGjB,SAAS,qBAAqB,CAAC,SAAwB;AAAA,EACrD,MAAM,IAAI,0BAA0B,sBAAsB,SAAS,aAAa;AAAA;AAGlF,SAAS,kBAAkB,CAAC,OAA2C;AAAA,EACrE,IAAI,CAAC,cAAc,KAAK;AAAA,IAAG,OAAO;AAAA,EAClC,IAAI,MAAM,YAAY;AAAA,IAAG,OAAO;AAAA,EAChC,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,KAAK,MAAM,MAAM,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,GAAG;AAAA,IACvF,OAAO;AAAA,EACT;AAAA,EACA,IAAI,CAAC,MAAM,QAAQ,MAAM,MAAM;AAAA,IAAG,OAAO;AAAA,EACzC,OAAO,MAAM,OAAO,MAClB,CAAC,SACC,cAAc,IAAI,KAClB,OAAO,KAAK,YAAY,cACvB,KAAK,WAAW,OAAO,OAAO,MAAM,OAAO,EAChD;AAAA;AAGF,SAAS,mBAAmB,CAC1B,KACA,YACA,OACoB;AAAA,EACpB,MAAM,QACJ,MAAM,SAAS,WACX,MAAM,WAAW,mBACf,IAAI,iBACJ,IAAI,aACN,WAAW,MAAM;AAAA,EAEvB,OAAO,UAAU,QAAQ,UAAU,YAAY,EAAE,SAAS,KAAK,IAAI,EAAE,SAAS,OAAO,MAAM;AAAA;AAG7F,SAAS,aAAa,CAAC,OAAmC;AAAA,EACxD,OAAO,MAAM,SAAS,WAClB,UAAU,MAAM,UAAU,MAAM,cAChC,YAAY,MAAM,cAAc,MAAM;AAAA;AAG5C,SAAS,gBAAgB,CACvB,QACA,WACQ;AAAA,EACR,OAAO,YAAY,GAAG,aAAa,WAAW;AAAA;AAGhD,SAAS,mBAAmB,CAAC,SAAS,cAAsB;AAAA,EAC1D,OAAO,gBAAgB;AAAA;AAGzB,SAAS,kBAAkB,CAAC,SAAS,cAAsB;AAAA,EACzD,OAAO,aAAa;AAAA;AAGtB,SAAS,QAAQ,CAAC,YAA4B;AAAA,EAC5C,OAAO,MAAM,WAAW,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,MAAK;AAAA;AAGpE,SAAS,QAAQ,CAAC,OAA6B;AAAA,EAC7C,IAAI,iBAAiB;AAAA,IAAM,OAAO,MAAM,YAAY;AAAA,EACpD,IAAI,OAAO,UAAU;AAAA,IAAW,OAAO,QAAQ,IAAI;AAAA,EACnD,IACE,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,UAAU,MACV;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,OAAO,KAAK,UAAU,KAAK;AAAA;AAG7B,SAAS,QAAQ,CAAC,OAAyB;AAAA,EACzC,OAAO,MACJ,KAAK,EACL,YAAY,EACZ,MAAM,KAAK,EACX,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AAAA;AAGrC,SAAS,qBAAqB,CAAC,IAA0D;AAAA,EACvF,QAAQ;AAAA,SACD;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA;AAAA;AAIb,SAAS,YAAe,CAAC,MAAkC;AAAA,EACzD,OAAO;AAAA;AAGT,SAAS,aAAa,CAAC,OAAkD;AAAA,EACvE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;;;AEx6C5E,sCAA2B;AAC3B,6BAAS;AAoBT;;;ACdO,SAAS,WAAW,CAAC,KAA6B;AAAA,EACvD,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI;AAAA,IACf,YAAY,KAAK,MAAM,IAAI,UAAU;AAAA,IACrC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,SAAS,IAAI;AAAA,IACb,cAAc,IAAI;AAAA,EACpB;AAAA;AAIK,SAAS,gBAAgB,CAAC,KAAwC;AAAA,EACvE,MAAM,OAAO;AAAA,OACR,YAAY,GAAG;AAAA,OACd,IAAI,kBAAkB,YAAY,CAAC,IAAI,EAAE,OAAO,IAAI,cAAc;AAAA,EACxE;AAAA,EACA,MAAM,QAAQ,oBAAoB,kBAAkB,IAAI,OAAO,CAAC;AAAA,EAChE,OAAO,QAAQ,KAAK,MAAM,MAAM,IAAI;AAAA;AAG/B,SAAS,SAAS,CAAC,KAAqC;AAAA,EAC7D,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,cAAc,IAAI;AAAA,IAClB,UAAU,IAAI;AAAA,IACd,QAAQ,IAAI;AAAA,IACZ,cAAc,IAAI;AAAA,IAClB,UAAU,IAAI;AAAA,OACV,IAAI,eAAe,OAAO,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,IAAI,UAAU,EAAE;AAAA,IAC5E,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,cAAc,IAAI;AAAA,EACpB;AAAA;AAKF,SAAS,iBAAiB,CAAC,OAAyB;AAAA,EAClD,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,SAAS;AAAA,EAC/C,OAAO,KAAK,MAAM,KAAK;AAAA;AAGzB,SAAS,mBAAmB,CAAC,OAA4C;AAAA,EACvE,IAAI,CAAC,eAAc,KAAK;AAAA,IAAG;AAAA,EAC3B,MAAM,QAAwB,CAAC;AAAA,EAC/B,YAAY,QAAQ,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAAA,IACjD,MAAM,UAAU,wBAAwB,GAAG;AAAA,EAC7C;AAAA,EACA,OAAO;AAAA;AAKT,SAAS,uBAAuB,CAAC,OAAmC;AAAA,EAClE,IAAI,UAAU,QAAQ,UAAU;AAAA,IAAW,OAAO;AAAA,EAClD,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO,MAAM,IAAI,iBAAiB;AAAA,EAC5D,OAAO,kBAAkB,KAAK;AAAA;AAMhC,SAAS,iBAAiB,CAAC,OAAmC;AAAA,EAC5D,MAAM,MAAM,eAAc,KAAK,IAAI,QAAQ,CAAC;AAAA,EAC5C,MAAM,WAA8B;AAAA,IAClC,WAAW,OAAO,IAAI,SAAS;AAAA,IAC/B,cAAc,OAAO,IAAI,YAAY;AAAA,IACrC,WAAW,OAAO,IAAI,SAAS;AAAA,IAC/B,YAAY,eAAc,IAAI,UAAU,IAAI,IAAI,aAAa,CAAC;AAAA,IAC9D,WAAW,IAAI,KAAK,IAAI,SAAmB;AAAA,IAC3C,WAAW,IAAI,KAAK,IAAI,SAAmB;AAAA,IAC3C,SAAS,OAAO,IAAI,OAAO;AAAA,IAC3B,cAAc,OAAO,IAAI,YAAY;AAAA,EACvC;AAAA,EACA,IAAI,eAAc,IAAI,cAAc,KAAK,OAAO,KAAK,IAAI,cAAc,EAAE,SAAS,GAAG;AAAA,IACnF,SAAS,iBAAiB,IAAI;AAAA,EAChC;AAAA,EACA,MAAM,QAAQ,oBAAoB,IAAI,KAAK;AAAA,EAC3C,IAAI;AAAA,IAAO,SAAS,QAAQ;AAAA,EAC5B,OAAO;AAAA;AAGT,SAAS,cAAa,CAAC,OAAkD;AAAA,EACvE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;;;AC7F5E,sCAAS;AACT;AAEA,IAAM,SAAS,IAAI;AAGZ,SAAS,wBAAwB,CAAC,IAAoB;AAAA,EAC3D,IAAI,OAAO,IAAI,EAAE;AAAA,IAAG;AAAA,EACpB,MAAM,UAAU,GAAG,MAAuC,wBAAwB,EAAE,IAAI;AAAA,EACxF,IAAI,QAAQ,KAAK,CAAC,WAAW,OAAO,oBAAoB,qBAAqB,GAAG;AAAA,IAC9E,MAAM,IAAI,2BACR,4BACA,uLACF;AAAA,EACF;AAAA,EACA,IAAI;AAAA,IACF,KAAK,EAAE;AAAA,IACP,OAAO,IAAI,EAAE;AAAA,IACb,OAAO,OAAO;AAAA,IACd,MAAM,IAAI,MACR,mHACA,EAAE,MAAM,CACV;AAAA;AAAA;;;AFkBG,MAAM,mBAAmB;AAAA,EAEX;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,QACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,EAGX,kBAAkB,CACxB,QACM;AAAA,IACN,IAAI,CAAC,kBAAiB,OAAO,KAAK;AAAA,MAAG;AAAA,IACrC,MAAM,WAAW,mBAAmB,OAAO,WAAW,OAAO,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC3F,IAAI,CAAC,SAAS;AAAA,MAAa;AAAA,IAC3B,yBAAyB,KAAK,EAAE;AAAA,IAChC,MAAM,QAAQ,SAAS;AAAA,IACvB,MAAM,MAAM,KAAK,GAAG,MAAwC,MAAM,GAAG,EAAE,IAAI,GAAG,MAAM,IAAI;AAAA,IACxF,IAAI,OAAO,KAAK,SAAS,CAAC,IAAI,MAAM,OAAO;AAAA,MACzC,MAAM,IAAI,2BACR,8BACA,wCAAwC,MAAM,qEAChD;AAAA,IACF;AAAA;AAAA,EAGF,YAAY,CAAC,QAA+C;AAAA,IAC1D,KAAK,mBAAmB,MAAM;AAAA,IAC9B,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,WAAW,mBAAmB,OAAO,WAAW,OAAO,OAAO;AAAA,MAClE,cAAc,OAAO;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,IACD,MAAM,QAAQ,OAAO,iBAAiB,QAAQ,YAAY,UAAU,KAAK,IAAI,QAAQ;AAAA,IACrF,MAAM,UAAU,KAAK,GAAG,MAAM,SAAS,GAAG,EAAE,IAAI,GAAG,SAAS,IAAI;AAAA,IAChE,MAAM,OAAO,SAAS,SAAS,OAAO;AAAA,IACtC,MAAM,UACJ,UAAU,aAAa,SAAS,eAC5B,SAAS,aAAa,QACpB,KAAK,GAAG,MAAM,SAAS,aAAa,GAAG,EAAE,IAAI,GAAG,SAAS,aAAa,IAAI,EAAE,MAC9E,IACA,SAAS,QAAQ,QAAQ,QAAQ,KAAK;AAAA,IAE5C,OAAO;AAAA,MACL,SAAS,KAAK,IAAI,CAAC,QAAQ,iBAAiB,GAAG,CAAC;AAAA,MAChD;AAAA,MACA,eAAe,SAAS,cAAc,MAAM,QAAQ,MAAM;AAAA,SACtD,UAAU,YAAY,CAAC,IAAI,EAAE,MAAM;AAAA,IACzC;AAAA;AAAA,EAGF,YAAY,CAAC,QAA+C;AAAA,IAC1D,KAAK,mBAAmB,MAAM;AAAA,IAC9B,MAAM,SAAS,KAAK;AAAA,IACpB,OAAO;AAAA,MACL,OAAO,UACL,KAAK,IACL,mBAAmB,OAAO,WAAW,mBAAmB,OAAO,KAAK,GAAG;AAAA,QACrE;AAAA,MACF,CAAC,CACH;AAAA,IACF;AAAA;AAAA,EAGF,aAAa,CAAC,QAAiD;AAAA,IAC7D,KAAK,mBAAmB,MAAM;AAAA,IAC9B,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,WAAW,mBAAmB,OAAO,WAAW,iBAAiB,OAAO,KAAK,GAAG;AAAA,MACpF;AAAA,IACF,CAAC;AAAA,IACD,OAAO,EAAE,QAAQ,KAAK,GAAG,MAAM,SAAS,GAAG,EAAE,IAAI,GAAG,SAAS,IAAI,MAAM,KAAK;AAAA;AAAA,EAG9E,YAAY,CAAC,QAA+C;AAAA,IAC1D,KAAK,mBAAmB,MAAM;AAAA,IAC9B,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,WAAW,mBAAmB,OAAO,WAAW,mBAAmB,OAAO,KAAK,GAAG;AAAA,MACtF;AAAA,IACF,CAAC;AAAA,IACD,OAAO;AAAA,MACL,QAAQ,OAAO,OAAO,IAAI,CAAC,WAAW;AAAA,QACpC,YAAY,MAAM;AAAA,QAClB,SAAS,iBAAiB,KAAK,IAAI,UAAU,KAAK;AAAA,MACpD,EAAE;AAAA,IACJ;AAAA;AAAA,EAGF,cAAc,CAAC,QAIM;AAAA,IACnB,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,eAAe,OAAO;AAAA,IAC5B,MAAM,YAAY,OAAO,cACvB,iBAAiB,+EACjB,CAAC,OAAO,WAAW,OAAO,cAAc,OAAO,SAAS,CAC1D;AAAA,IACA,MAAM,MAAM,KAAK,GAAG,MAAM,UAAU,GAAG,EAAE,IAAI,GAAG,UAAU,IAAI;AAAA,IAE9D,OAAO,MAAM,YAAY,GAAG,IAAI;AAAA;AAAA,EAGlC,uBAAuB,CACrB,QACoB;AAAA,IACpB,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,SAAS,OAAO,MAAM,IAAI,MAAM,KAAK;AAAA,IAC3C,IAAI,OAAO,MAAM,WAAW;AAAA,MAAG,OAAO;AAAA,IAEtC,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,MAAM,gBAAgB,KAAK,MAAM,WAAW,EAAE;AAAA,IAC9E,MAAM,gBAAgB;AAAA,IACtB,MAAM,cAAc;AAAA,IACpB,MAAM,oBAAoB;AAAA,IAC1B,MAAM,WAAW,oCAAoC;AAAA,IACrD,MAAM,cAAc,WAAW,OAAO,iCAAiC,OAAO;AAAA,IAC9E,MAAM,eAAe,WAAW,4BAA4B,sBAAsB;AAAA,IAClF,MAAM,YAAY,OAAO,cACvB;AAAA;AAAA,cAEQ;AAAA;AAAA,sCAEwB;AAAA,kCACJ;AAAA,UACxB;AAAA,qCAEJ,CAAC,KAAK,UAAU,KAAK,GAAG,OAAO,SAAS,CAC1C;AAAA,IACA,MAAM,OAAO,KAAK,GACf,MAAM,UAAU,GAAG,EACnB,IAAI,GAAG,UAAU,IAAI;AAAA,IACxB,WAAW,OAAO;AAAA,MAAM,OAAO,IAAI,gBAAgB;AAAA,IACnD,OAAO;AAAA;AAAA,EAGT,SAAS,CAAC,QAMmB;AAAA,IAC3B,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,YAAY,OAAO,aAAa;AAAA,IACtC,MAAM,iBACJ,cAAc,aACV,yCACA,cAAc,SACZ,uFACA;AAAA,IACR,IAAI,QAAQ,iBAAiB,OAAO,uCAAuC;AAAA,IAC3E,MAAM,OACJ,cAAc,SACV;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT,IACA,CAAC,OAAO,WAAW,OAAO,cAAc,OAAO,QAAQ;AAAA,IAE7D,IAAI,OAAO,QAAQ;AAAA,MACjB,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,MAAM;AAAA,IACzB;AAAA,IAEA,MAAM,YAAY,OAAO,cAAc,OAAO,IAAI;AAAA,IAClD,MAAM,OAAO,KAAK,GAAG,MAAM,UAAU,GAAG,EAAE,IAAI,GAAG,UAAU,IAAI;AAAA,IAE/D,OAAO,KAAK,IAAI,CAAC,QAAQ,UAAU,GAAG,CAAC;AAAA;AAAA,EAGzC,mBAAmB,CAAC,QAGe;AAAA,IACjC,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,SAAS,IAAI;AAAA,IACnB,IAAI,OAAO,MAAM,WAAW;AAAA,MAAG,OAAO;AAAA,IAEtC,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,MAAM,gBAAgB,KAAK,MAAM,WAAW,EAAE;AAAA,IAC9E,MAAM,YAAY,OAAO,cACvB;AAAA;AAAA;AAAA;AAAA;AAAA,eAKS,OAAO;AAAA;AAAA;AAAA;AAAA,SAKhB,CAAC,KAAK,UAAU,KAAK,GAAG,OAAO,SAAS,CAC1C;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,UAAU,GAAG,EAAE,IAAI,GAAG,UAAU,IAAI;AAAA,IAC/D,MAAM,cAAc,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC;AAAA,IACtE,YAAY,OAAO,SAAS,OAAO,MAAM,QAAQ,GAAG;AAAA,MAClD,MAAM,MAAM,YAAY,IAAI,KAAK;AAAA,MACjC,IAAI;AAAA,QAAK,OAAO,IAAI,eAAe,KAAK,cAAc,KAAK,SAAS,GAAG,YAAY,GAAG,CAAC;AAAA,IACzF;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,cAAc,CAAC,QAIwB;AAAA,IACrC,MAAM,SAAS,KAAK;AAAA,IACpB,MAAM,SAAS,IAAI;AAAA,IACnB,IAAI,OAAO,MAAM,WAAW;AAAA,MAAG,OAAO;AAAA,IAEtC,MAAM,YAAY,OAAO,aAAa;AAAA,IACtC,MAAM,gBAAgB;AAAA,IACtB,MAAM,cAAc;AAAA,IACpB,MAAM,gBAAgB;AAAA,IACtB,MAAM,WAAW,2BAA2B,wCAAwC;AAAA,IACpF,MAAM,WAAW,2BAA2B,wCAAwC;AAAA,IACpF,MAAM,gBACJ,cAAc,SACV,KAAK,iBAAiB,eACtB,cAAc,aACZ,WACA;AAAA,IACR,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,MAAM,gBAAgB,KAAK,MAAM,WAAW,EAAE;AAAA,IAC9E,MAAM,YAAY,OAAO,cACvB;AAAA;AAAA;AAAA;AAAA,eAIS,OAAO;AAAA;AAAA,eAEP;AAAA,gCACiB;AAAA;AAAA;AAAA,SAI1B,CAAC,KAAK,UAAU,KAAK,GAAG,OAAO,SAAS,CAC1C;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,UAAU,GAAG,EAAE,IAAI,GAAG,UAAU,IAAI;AAAA,IAC/D,MAAM,cAAc,OAAO,MAAM,IAAI,MAAM,IAAI,GAA4B;AAAA,IAC3E,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,OAAO,UAAU,GAAG;AAAA,MAC1B,YAAY,IAAI,eAAe,IAAI,iBAAiB,IAAI,GAAG,IAAI;AAAA,IACjE;AAAA,IACA,YAAY,OAAO,SAAS,OAAO,MAAM,QAAQ,GAAG;AAAA,MAClD,MAAM,QAAQ,CAAC,GAAI,YAAY,QAAQ,OAAO,KAAK,CAAC,CAAE;AAAA,MACtD,IAAI,MAAM,SAAS,GAAG;AAAA,QACpB,OAAO,IAAI,aAAa,KAAK,cAAc,KAAK,UAAU,KAAK,MAAM,GAAG,KAAK;AAAA,MAC/E;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,UAAU,CAAC,QAAuD;AAAA,IAChE,MAAM,SAAS,KAAK;AAAA,IACpB,IAAI,OAAO,WAAW,WAAW,KAAK,OAAO,uBAAuB,WAAW,GAAG;AAAA,MAChF,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,MAAM;AAAA,IACrC;AAAA,IAEA,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMlB,MAAM,aAAa,OAAO;AAAA,IAC1B,MAAM,aAAa;AAAA;AAAA,aAEV;AAAA,cACC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,MAAM,aAAa;AAAA;AAAA,aAEV;AAAA,cACC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,MAAM,cACJ,OAAO,cAAc,aACjB,aACA,OAAO,cAAc,aACnB,aACA,GAAG,oBAAoB;AAAA,IAC/B,MAAM,gBAAgB,KAAK,UAAU,OAAO,UAAU;AAAA,IACtD,MAAM,OACJ,OAAO,cAAc,SACjB,CAAC,eAAe,OAAO,WAAW,eAAe,OAAO,SAAS,IACjE,CAAC,eAAe,OAAO,SAAS;AAAA,IAEtC,MAAM,aAAuB,CAAC;AAAA,IAC9B,IAAI,OAAO,WAAW,WAAW;AAAA,MAC/B,WAAW,KAAK,aAAa;AAAA,MAC7B,KAAK,KAAK,OAAO,MAAM;AAAA,IACzB;AAAA,IACA,IAAI,OAAO,0BAA0B,WAAW;AAAA,MAC9C,MAAM,eAAe,KAAK,UAAU,CAAC,GAAG,IAAI,IAAI,OAAO,qBAAqB,CAAC,CAAC;AAAA,MAC9E,WAAW,KACT,sDACA,oDACF;AAAA,MACA,KAAK,KAAK,cAAc,YAAY;AAAA,IACtC;AAAA,IACA,IAAI,OAAO,OAAO;AAAA,MAChB,WAAW,KACT,mFACF;AAAA,MACA,KAAK,KAAK,GAAG,OAAO,KAAK;AAAA,IAC3B;AAAA,IACA,KAAK,KAAK,OAAO,QAAQ,CAAC;AAAA,IAE1B,MAAM,WAAW,WAAW,SAAS,IAAI,SAAS,WAAW,KAAK,OAAO,MAAM;AAAA,IAC/E,MAAM,YAAY,OAAO,cACvB;AAAA;AAAA,gBAEU;AAAA,UACN;AAAA;AAAA;AAAA,SAIJ,IACF;AAAA,IACA,MAAM,OAAO,KAAK,GAAG,MAAM,UAAU,GAAG,EAAE,IAAI,GAAG,UAAU,IAAI;AAAA,IAE/D,OAAO;AAAA,MACL,OAAO,KAAK,MAAM,GAAG,OAAO,KAAK,EAAE,IAAI,CAAC,QAAQ,UAAU,GAAG,CAAC;AAAA,MAC9D,SAAS,KAAK,SAAS,OAAO;AAAA,IAChC;AAAA;AAAA,EAGF,IAAI,CAAC,QAIH;AAAA,IACA,MAAM,SAAS,KAAK;AAAA,IACpB,IAAI,QAAQ,iBAAiB,OAAO;AAAA,IACpC,MAAM,OAAmC,CAAC,OAAO,SAAS;AAAA,IAE1D,IAAI,OAAO,cAAc;AAAA,MACvB,IAAI,OAAO,OAAO,iBAAiB,UAAU;AAAA,QAC3C,SAAS;AAAA,QACT,KAAK,KAAK,OAAO,YAAY;AAAA,MAC/B,EAAO;AAAA,QACL,SAAS,2BAA2B,OAAO,aAAa,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,QAChF,KAAK,KAAK,GAAG,OAAO,YAAY;AAAA;AAAA,IAEpC;AAAA,IAEA,IAAI,OAAO,iBAAiB;AAAA,MAC1B,SAAS;AAAA,MACT,KAAK,KAAK,GAAG,OAAO,kBAAkB;AAAA,IACxC;AAAA,IAEA,IAAI,OAAO,iBAAiB;AAAA,MAC1B,SAAS;AAAA,MACT,KAAK,KAAK,IAAI,OAAO,iBAAiB;AAAA,IACxC;AAAA,IAEA,IAAI,OAAO,cAAc;AAAA,MACvB,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,aAAa,YAAY,CAAC;AAAA,IAC7C;AAAA,IAEA,IAAI,OAAO,eAAe;AAAA,MACxB,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,cAAc,YAAY,CAAC;AAAA,IAC9C;AAAA,IAEA,IAAI,OAAO,cAAc;AAAA,MACvB,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,aAAa,YAAY,CAAC;AAAA,IAC7C;AAAA,IAEA,IAAI,OAAO,eAAe;AAAA,MACxB,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,cAAc,YAAY,CAAC;AAAA,IAC9C;AAAA,IAGA,MAAM,iBAAiB,OAAO,cAC5B,kCAAkC,8BAClC,IACF;AAAA,IACA,MAAM,cAAc,KAAK,GAAG,MAAM,eAAe,GAAG,EAAE,IAAI,GAAG,eAAe,IAAI;AAAA,IAGhF,MAAM,QAAQ,YAAY;AAAA,IAE1B,MAAM,SAAS,OAAO,UAAU;AAAA,IAChC,MAAM,QAAQ,OAAO,SAAS;AAAA,IAC9B,IAAI,UAAU;AAAA,MAAG,OAAO,EAAE,SAAS,CAAC,GAAG,SAAS,SAAS,OAAO,MAAM;AAAA,IAGtE,MAAM,UAAU,OAAO,WAAW;AAAA,IAClC,MAAM,QAAQ,OAAO,SAAS;AAAA,IAC9B,MAAM,cACJ,YAAY,cAAc,eAAe,YAAY,cAAc,eAAe;AAAA,IACpF,SAAS,aAAa,eAAe,MAAM,YAAY;AAAA,IAGvD,SAAS;AAAA,IACT,KAAK,KAAK,QAAQ,GAAG,MAAM;AAAA,IAE3B,MAAM,gBAAgB,OAAO,cAAc,OAAO,IAAI;AAAA,IACtD,MAAM,OAAO,KAAK,GAAG,MAAM,cAAc,GAAG,EAAE,IAAI,GAAG,cAAc,IAAI;AAAA,IACvE,MAAM,UAAU,KAAK,SAAS;AAAA,IAC9B,MAAM,UAAU,KAAK,MAAM,GAAG,KAAK,EAAE,IAAI,CAAC,QAAQ,YAAY,GAAG,CAAC;AAAA,IAElE,OAAO,EAAE,SAAS,SAAS,MAAM;AAAA;AAErC;AAEA,SAAS,gBAAgB,CAAC,MAA6B;AAAA,EACrD,OAAO,KAAK,UAAU;AAAA,IACpB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP,CAAC;AAAA;AAGI,SAAS,oBAAoB,CAAC,OAAqB;AAAA,EACxD,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAAA,IAC9C,MAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AAAA;AAGF,SAAS,SAAS,CAAC,IAAc,UAAuC;AAAA,EACtE,MAAM,MAAM,GAAG,MAAM,SAAS,QAAQ,EAAE,IAAI,GAAG,SAAS,SAAS;AAAA,EACjE,OAAO,IAAI;AAAA;AAGb,SAAS,gBAAgB,CACvB,IACA,UACA,OACqC;AAAA,EACrC,MAAM,OAAO,eAAe,MAAM,UAAU;AAAA,EAC5C,MAAM,OAAO,GACV,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,cAKQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,KAMnB,EACC,IAAI,MAAM,MAAM,GAAG,SAAS,MAAM,MAAM,MAAM,KAAK;AAAA,EAEtD,OAAO,KAAK,IAAI,CAAC,SAAS;AAAA,IACxB,OAAO,iBAAiB,IAAI,YAAY,IAAI,KAAK;AAAA,IACjD,OAAO,OAAO,IAAI,KAAK;AAAA,EACzB,EAAE;AAAA;AAGJ,SAAS,cAAc,CAAC,YAA4B;AAAA,EAClD,OAAO,MAAM,WAAW,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,MAAK;AAAA;AAGpE,SAAS,gBAAgB,CAAC,WAA0B,OAAyB;AAAA,EAC3E,IAAI,cAAc;AAAA,IAAQ,OAAO;AAAA,EACjC,IAAI,cAAc;AAAA,IAAS,OAAO;AAAA,EAClC,IAAI,cAAc;AAAA,IAAQ,OAAO;AAAA,EAEjC,KAAK,cAAc,YAAY,cAAc,YAAY,OAAO,UAAU,UAAU;AAAA,IAClF,OAAO,KAAK,MAAM,KAAK;AAAA,EACzB;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,gBAAgB,CAAC,OAAiC;AAAA,EACzD,OAAO,EAAE,MAAM,SAAS,OAAO,GAAG,OAAO,mBAAmB,KAAK,EAAE;AAAA;AAGrE,SAAS,kBAAkB,CAAC,OAAiC;AAAA,EAC3D,QAAQ,MAAM;AAAA,SACP;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,MACH,OAAO,mBAAmB,MAAM,KAAK;AAAA;AAAA,MAErC,OAAO;AAAA;AAAA;;;AG9gBb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACkBO,SAAS,qCAAqC,CACnD,WACA,OACA,mBACgC;AAAA,EAChC,MAAM,YAAY,KAAK,UAAU;AAAA,IAC/B,OAAO,MAAM;AAAA,IACb,SAAS,MAAM;AAAA,IACf,OAAO,MAAM;AAAA,EACf,CAAC;AAAA,EACD,MAAM,WAAW,4BAA4B,WAAW,SAAS;AAAA,EACjE,MAAM,gBAAgB,CAAC,KAAa,OAA+B,CAAC,OAAO;AAAA,IACzE,KAAK,GAAG,SAAS;AAAA,EAAQ;AAAA,IACzB,MAAM,CAAC,GAAG,SAAS,MAAM,GAAG,IAAI;AAAA,EAClC;AAAA,EAEA,OAAO,OAAO,OAAO;AAAA,IACnB,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,gCAAgC;AAAA,IAChC;AAAA,IACA,WAAW,CAAC,WAAqD;AAAA,SAC5D;AAAA,SACA,cAAc,MAAM,KAAK,MAAM,IAAI;AAAA,MACtC,aAAa,MAAM,cACf,KAAK,MAAM,gBAAgB,cAAc,MAAM,YAAY,KAAK,MAAM,YAAY,IAAI,EAAE,IACxF;AAAA,MACJ,UAAU,GAAG,SAAS;AAAA,EAAQ,MAAM;AAAA,MACpC,WAAW,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,SAAS;AAAA,SAC5C,MAAM,eACN;AAAA,QACE,cAAc;AAAA,aACT,MAAM;AAAA,aACN,cAAc,MAAM,aAAa,KAAK,MAAM,aAAa,IAAI;AAAA,QAClE;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAAA,IACA,gBAAgB,cACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcA,CAAC,OAAO,iBAAiB,IAAI,EAAE,CACjC;AAAA,EACF,CAAC;AAAA;AAQH,SAAS,2BAA2B,CAAC,WAAmB,WAAyC;AAAA,EAC/F,OAAO;AAAA,IACL,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDAqG4C,oBAAoB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yDAkG1B,oBAAoB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA2BnF,MAAM,CAAC,WAAW,SAAS;AAAA,EAC7B;AAAA;;;ADvSK,SAAS,0BAA0B,CACxC,IACA,QAKA,mBACmB;AAAA,EACnB,MAAM,YAAY,OAAO;AAAA,EACzB,MAAM,SAAS,kCAAkC,OAAO,MAAM;AAAA,EAC9D,MAAM,SAAS,sCACb,WACA,OAAO,OACP,OAAO,iBACT;AAAA,EACA,MAAM,SAAS,IAAI,mBAAmB,IAAI,MAAM;AAAA,EAChD,MAAM,gBAAgB,CAAC,oBACrB,0BAA0B,WAAW,eAAe;AAAA,EACtD,MAAM,OAAO,CAAI,QACf,2BAA2B,IAAI,MAAM;AAAA,IACnC,sBAAsB,IAAI,QAAQ,OAAO,iBAAiB;AAAA,IAC1D,MAAM,QAAQ,IAAI;AAAA,IAClB,kCAAkC,OAAO,MAAM;AAAA,IAC/C,OAAO;AAAA,GACR;AAAA,EACH,MAAM,UAAU,CAAe,QAC7B,2BAA2B,IAAI,MAAM;AAAA,IACnC,sBAAsB,IAAI,QAAQ,OAAO,iBAAiB;AAAA,IAC1D,MAAM,QAAQ,IAAI;AAAA,IAClB,kCAAkC,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,MAAM;AAAA,IAC9D,OAAO;AAAA,GACR;AAAA,EAEH,OAAO,OAAO,OAAO;AAAA,IACnB;AAAA,IACA,cAAc,OAAO,UAAU;AAAA,MAC7B,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,aAAa,KAAK,CAAC;AAAA;AAAA,IAE9C,cAAc,OAAO,UAAU;AAAA,MAC7B,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,aAAa,KAAK,CAAC;AAAA;AAAA,IAE9C,eAAe,OAAO,UAAU;AAAA,MAC9B,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,cAAc,KAAK,CAAC;AAAA;AAAA,IAE/C,cAAc,OAAO,UAAU;AAAA,MAC7B,cAAc,MAAM,SAAS;AAAA,MAC7B,2BAA2B,MAAM,OAAO,MAAM;AAAA,MAC9C,OAAO,KAAK,MAAM,OAAO,aAAa,KAAK,CAAC;AAAA;AAAA,IAE9C,gBAAgB,OAAO,UAAU;AAAA,MAC/B,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,eAAe,KAAK,CAAC;AAAA;AAAA,IAEhD,yBAAyB,OAAO,UAAU;AAAA,MACxC,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,wBAAwB,KAAK,CAAC;AAAA;AAAA,IAEzD,WAAW,OAAO,UAAU;AAAA,MAC1B,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,UAAU,KAAK,CAAC;AAAA;AAAA,IAE3C,qBAAqB,OAAO,UAAU;AAAA,MACpC,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,QAAQ,MAAM,OAAO,oBAAoB,KAAK,CAAC;AAAA;AAAA,IAExD,gBAAgB,OAAO,UAAU;AAAA,MAC/B,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,QAAQ,MAAM,OAAO,eAAe,KAAK,CAAC;AAAA;AAAA,IAEnD,YAAY,OAAO,UAAU;AAAA,MAC3B,cAAc,MAAM,SAAS;AAAA,MAC7B,qBAAqB,MAAM,KAAK;AAAA,MAChC,OAAO,KAAK,MAAM,OAAO,WAAW,KAAK,CAAC;AAAA;AAAA,IAE5C,MAAM,OAAO,UAAU;AAAA,MACrB,cAAc,MAAM,SAAS;AAAA,MAC7B,OAAO,KAAK,MAAM,OAAO,KAAK,KAAK,CAAC;AAAA;AAAA,EAExC,CAA6B;AAAA;AAG/B,SAAS,qBAAqB,CAC5B,IACA,QACA,mBACM;AAAA,EACN,MAAM,MAAM,GAAG,MAAM,OAAO,eAAe,GAAG,EAAE,IAAI,GAAG,OAAO,eAAe,IAAI;AAAA,EAGjF,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,iBAAiB,GAAG;AAAA,IACjD,MAAM,IAAI,6BAA6B,kBAAkB,iBAAiB;AAAA,EAC5E;AAAA;;;AN1EF,IAAM,mCAA4D;AAAA,EAChE,cAAc;AAAA,EACd,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;AAAA,EACd,OAAO;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,IACV,KAAK;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,cAAc;AAAA,IACZ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,qBAAqB;AAAA,IACnB,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,EACZ;AAAA,EACA,kBAAkB;AAAA,IAChB,QAAQ,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IACzC,MAAM,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IACvC,SAAS,EAAE,UAAU,KAAK;AAAA,IAC1B,SAAS,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IAC1C,QAAQ,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IACzC,SAAS,EAAE,UAAU,KAAK;AAAA,IAC1B,MAAM,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IACvC,WAAW,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IAC5C,SAAS,EAAE,UAAU,KAAK;AAAA,EAC5B;AAAA,EACA,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,kBAAkB;AAAA,EACpB;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAAA;AAQO,MAAM,oBAA6C;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,UAAsC,CAAC,GAAG;AAAA,IACpD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,SAAS,IAAI,mBAAmB,KAAK,IAAI,2BAA2B;AAAA,IAEzE,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,EAGF,iBAAiB,GAA4B;AAAA,IAC3C,OAAO;AAAA;AAAA,EAGT,uBAAuB,CAAC,QAIF;AAAA,IACpB,OAAO,2BAA2B,KAAK,IAAI,QAAQ,MAAM,KAAK,kBAAkB,CAAC;AAAA;AAAA,OAG7E,aAAY,CAAC,QAAwD;AAAA,IACzE,IAAI,kBAAiB,OAAO,KAAK;AAAA,MAC/B,OAAO,2BAA2B,KAAK,IAAI,MAAM,KAAK,OAAO,aAAa,MAAM,CAAC;AAAA,IACnF,OAAO,KAAK,OAAO,aAAa,MAAM;AAAA;AAAA,OAGlC,aAAY,CAAC,QAAwD;AAAA,IACzE,IAAI,kBAAiB,OAAO,KAAK;AAAA,MAC/B,OAAO,2BAA2B,KAAK,IAAI,MAAM,KAAK,OAAO,aAAa,MAAM,CAAC;AAAA,IACnF,OAAO,KAAK,OAAO,aAAa,MAAM;AAAA;AAAA,OAGlC,cAAa,CAAC,QAA0D;AAAA,IAC5E,IAAI,kBAAiB,OAAO,KAAK;AAAA,MAC/B,OAAO,2BAA2B,KAAK,IAAI,MAAM,KAAK,OAAO,cAAc,MAAM,CAAC;AAAA,IACpF,OAAO,KAAK,OAAO,cAAc,MAAM;AAAA;AAAA,OAGnC,aAAY,CAAC,QAAwD;AAAA,IACzE,IAAI,kBAAiB,OAAO,KAAK;AAAA,MAC/B,OAAO,2BAA2B,KAAK,IAAI,MAAM,KAAK,OAAO,aAAa,MAAM,CAAC;AAAA,IACnF,OAAO,KAAK,OAAO,aAAa,MAAM;AAAA;AAAA,OAGlC,eAAc,CAAC,QAIS;AAAA,IAC5B,OAAO,KAAK,OAAO,eAAe,MAAM;AAAA;AAAA,OAGpC,wBAAuB,CAC3B,QAC6B;AAAA,IAC7B,OAAO,KAAK,OAAO,wBAAwB,MAAM;AAAA;AAAA,OAG7C,UAAS,CAAC,QAMsB;AAAA,IACpC,OAAO,KAAK,OAAO,UAAU,MAAM;AAAA;AAAA,OAG/B,oBAAmB,CAAC,QAGkB;AAAA,IAC1C,OAAO,KAAK,OAAO,oBAAoB,MAAM;AAAA;AAAA,OAGzC,eAAc,CAAC,QAI2B;AAAA,IAC9C,OAAO,KAAK,OAAO,eAAe,MAAM;AAAA;AAAA,OAGpC,WAAU,CAAC,QAAgE;AAAA,IAC/E,qBAAqB,OAAO,KAAK;AAAA,IACjC,OAAO,KAAK,OAAO,WAAW,MAAM;AAAA;AAAA,OAGhC,uBAAsB,CAAC,QAGS;AAAA,IACpC,IAAI,OAAO,MAAM,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAEvC,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAqBF,EACC,IAAI,KAAK,UAAU,OAAO,KAAK,GAAG,OAAO,WAAW,OAAO,SAAS;AAAA,IAEvE,OAAO,KAAK,IAAI,CAAC,QAAQ,UAAU,GAAG,CAAC;AAAA;AAAA,OAGnC,oBAAmB,CAAC,QAK6C;AAAA,IACrE,8BAA8B,OAAO,KAAK;AAAA,IAC1C,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAOF,EACC,IACC,OAAO,WACP,OAAO,cACP,OAAO,kBAAkB,MACzB,OAAO,kBAAkB,MACzB,OAAO,QAAQ,CACjB;AAAA,IACF,MAAM,UAAU,KAAK,SAAS,OAAO;AAAA,IACrC,MAAM,UAAU,KAAK,MAAM,GAAG,OAAO,KAAK,EAAE,IAAI,CAAC,QAAQ,YAAY,GAAG,CAAC;AAAA,IACzE,MAAM,OAAO,QAAQ,GAAG,EAAE;AAAA,IAC1B,OAAO;AAAA,MACL;AAAA,SACI,WAAW,OAAO,EAAE,eAAe,KAAK,UAAU,IAAI,CAAC;AAAA,IAC7D;AAAA;AAAA,OAGI,KAAI,CAAC,QAaqE;AAAA,IAC9E,OAAO,KAAK,OAAO,KAAK,MAAM;AAAA;AAAA,EAIhC,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAE9C;AAEA,SAAS,6BAA6B,CAAC,OAAqB;AAAA,EAC1D,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAAA,IAC9C,MAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AAAA;;AQjTF,6BAAS;AACT;AACA;AAAA;AAAA;AAAA;AAYA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiGO,SAAS,UAAY,CAAC,OAAkB;AAAA,EAC7C,OAAO,KAAK,MAAM,KAAK;AAAA;AAGlB,SAAS,YAAY,CAAC,KAAoD;AAAA,EAC/E,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,QAAQ,EAAE,cAAc,IAAI,UAAU;AAAA,IACtC,mBAAmB,IAAI;AAAA,IACvB,iBAAiB,IAAI;AAAA,IACrB,gBAAgB,IAAI;AAAA,IACpB,UAAU,IAAI;AAAA,IACd,QAAQ,IAAI;AAAA,IACZ,gBAAgB,IAAI;AAAA,IACpB,gBAAgB;AAAA,MACd,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,IACjB;AAAA,IACA,oBAAoB,IAAI;AAAA,IACxB,eAAe,IAAI;AAAA,IACnB,kBAAkB,IAAI;AAAA,OAClB,IAAI,4BAA4B,OAChC,CAAC,IACD;AAAA,MACE,MAAM;AAAA,QACJ,mBAAmB,IAAI;AAAA,QACvB,cAAc,IAAI;AAAA,MACpB;AAAA,IACF;AAAA,IACJ,WAAW,IAAI;AAAA,IACf,gBAAgB,IAAI;AAAA,IACpB,WAAW,IAAI;AAAA,IACf,SAAS,IAAI;AAAA,IACb,aAAa,IAAI;AAAA,IACjB,YAAY,IAAI;AAAA,IAChB,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI;AAAA,EACjB;AAAA;AAGK,SAAS,eAAe,CAAC,KAA6D;AAAA,EAC3F,OAAO;AAAA,IACL,MAAM,oBAAoB,IAAI,QAAQ;AAAA,IACtC,WAAW,2BACT,KACA,IAAI,YAAY,OAAO,OAAO,WAAmB,IAAI,OAAO,CAC9D;AAAA,IACA,gBAAgB,IAAI;AAAA,EACtB;AAAA;AAGK,SAAS,YAAY,CAAC,KAAoD;AAAA,EAC/E,MAAM,OAAO;AAAA,IACX,WAAW,IAAI;AAAA,IACf,IAAI,IAAI;AAAA,IACR,gBAAgB,IAAI;AAAA,IACpB,aAAa,IAAI;AAAA,IACjB,aAAa,IAAI;AAAA,IACjB,QAAQ,WAAyC,IAAI,MAAM;AAAA,OACvD,IAAI,iBAAiB,OACrB,CAAC,IACD;AAAA,MACE,aAAa,WAA2D,IAAI,YAAY;AAAA,IAC1F;AAAA,IACJ,UAAU,WAA2C,IAAI,QAAQ;AAAA,IACjE,kBAAkB,IAAI;AAAA,OAClB,IAAI,wBAAwB,OAAO,CAAC,IAAI,EAAE,oBAAoB,IAAI,oBAAoB;AAAA,OACtF,IAAI,mBAAmB,OAAO,CAAC,IAAI,EAAE,eAAe,IAAI,eAAe;AAAA,IAC3E,aAAa,IAAI;AAAA,EACnB;AAAA,EACA,MAAM,SAAS,WAAyC,IAAI,MAAM;AAAA,EAClE,MAAM,SAAS,WAA0C,IAAI,MAAM;AAAA,EACnE,OAAO,KAAK,MAAM,QAAQ,OAAO;AAAA;AAG5B,SAAS,YAAY,CAAC,KAAoD;AAAA,EAC/E,OAAO;AAAA,IACL,UAAU,WAA4C,IAAI,QAAQ;AAAA,IAClE,aAAa,IAAI;AAAA,IACjB,UAAU,IAAI;AAAA,IACd,SAAS,IAAI;AAAA,IACb,gBAAgB,IAAI;AAAA,IACpB,aAAa,IAAI;AAAA,IACjB,aACE,IAAI,iBAAiB,OACjB,OACA,kBAAiB,IAAI,cAAc,6BAA6B;AAAA,IACtE,WAAW,IAAI;AAAA,EACjB;AAAA;AAGK,SAAS,yBAAyB,CACvC,IACA,OAOM;AAAA,EACN,MAAM,MAAM,GACT,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF,EACC,IAAI,MAAM,WAAW,MAAM,eAAe;AAAA,EAa7C,IAAI,CAAC,OAAO,IAAI,WAAW,WAAW;AAAA,IACpC,MAAM,IAAI,6BACR,mBACA,mBAAmB,MAAM,gDAC3B;AAAA,EACF;AAAA,EACA,IAAI,IAAI,kBAAkB,MAAM,YAAY,IAAI,6BAA6B,eAAe;AAAA,IAC1F,MAAM,IAAI,6BACR,mBACA,mBAAmB,MAAM,qDAAqD,MAAM,YACtF;AAAA,EACF;AAAA,EACA,IAAI,IAAI,oBAAoB,MAAM,gBAAgB;AAAA,IAChD,MAAM,IAAI,6BACR,kBACA,mBAAmB,MAAM,4CAC3B;AAAA,EACF;AAAA,EACA,MAAM,WAAW,MAAM;AAAA,EACvB,IACE,aACC,IAAI,oBAAoB,SAAS,kBAChC,IAAI,6BAA6B,SAAS,YAC1C,IAAI,eAAe,SAAS,eAAe,aAC3C,IAAI,uBAAuB,SAAS,eAAe,aACnD,IAAI,+BAA+B,SAAS,eAAe,aAC3D,IAAI,sBAAsB,SAAS,oBACnC,IAAI,wBAAwB,SAAS,sBACrC,IAAI,mBAAmB,SAAS,gBAClC;AAAA,IACA,MAAM,IAAI,6BACR,mBACA,mBAAmB,MAAM,4DAC3B;AAAA,EACF;AAAA;AAGK,SAAS,cAAc,CAC5B,SACA,MACA,SACM;AAAA,EACN,IAAI,YAAY;AAAA,IAAG,MAAM,IAAI,6BAA6B,MAAM,OAAO;AAAA;AAGlE,SAAS,uBAAuB,CAAC,OAAyB;AAAA,EAC/D,IAAI,EAAE,iBAAiB;AAAA,IAAQ,OAAO;AAAA,EACtC,MAAM,UAAU;AAAA,EAChB,IAAI,OAAO,QAAQ,SAAS,UAAU;AAAA,IACpC,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,SAAS,QAAQ,IAAI;AAAA,EACzB;AAAA,EACA,OAAO,QAAQ,UAAU;AAAA;;;ACrRpB,MAAM,4BAA6D;AAAA,EAErD;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,kBACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,oBAAmB,CACvB,OACsC;AAAA,IACtC,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,eAAe,MAAM,gBAAgB,iCAAiC;AAAA,MACtE,OAAO,KAAK,QACV,0CACA,MAAM,WACN,MAAM,cACR;AAAA,KACD;AAAA;AAAA,OAGG,QAAO,CAAC,OAAyE;AAAA,IACrF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,eAAe,MAAM,IAAI,oBAAoB;AAAA,MAC7C,OAAO,KAAK,QAAQ,6BAA6B,MAAM,WAAW,MAAM,EAAE;AAAA,KAC3E;AAAA;AAAA,OAGG,YAAW,CAAC,OAA6E;AAAA,IAC7F,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,MAAM,SAAS,YAAY,MAAM,MAAM;AAAA,MACvC,eAAe,OAAO,OAAO,+BAA+B;AAAA,MAC5D,IAAI,OAAO,iBAAiB,MAAM;AAAA,QAChC,yBAAyB,OAAO,cAAc,yCAAyC;AAAA,MACzF;AAAA,MACA,OAAO,OAAO,iBAAiB,OAC3B,KAAK,QACH,6FACA,MAAM,WACN,OAAO,MACP,OAAO,KACT,IACA,KAAK,QACH,yFACA,MAAM,WACN,OAAO,MACP,OAAO,OACP,OAAO,YACT;AAAA,KACL;AAAA;AAAA,OAGG,KAAI,CAAC,OAAqE;AAAA,IAC9E,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,IAAI,MAAM;AAAA,QAAK,eAAe,MAAM,IAAI,IAAI,wBAAwB;AAAA,MACpE,MAAM,SAAS,MAAM,UAAU;AAAA,MAC/B,MAAM,QAAQ,MAAM,SAAS;AAAA,MAC7B,yBAAyB,QAAQ,6BAA6B;AAAA,MAC9D,IAAI,UAAU;AAAA,QAAI,yBAAyB,OAAO,4BAA4B;AAAA,MAC9E,MAAM,UAAU,CAAC,gBAAgB;AAAA,MACjC,MAAM,SAA8B,CAAC,MAAM,SAAS;AAAA,MACpD,IAAI,MAAM,KAAK,SAAS,UAAU;AAAA,QAChC,QAAQ,KAAK,8CAA8C;AAAA,QAC3D,OAAO,KAAK,MAAM,IAAI,EAAE;AAAA,MAC1B,EAAO,SAAI,MAAM,KAAK,SAAS,cAAc;AAAA,QAC3C,QAAQ,KAAK,kEAAkE;AAAA,QAC/E,OAAO,KAAK,MAAM,IAAI,EAAE;AAAA,MAC1B;AAAA,MACA,MAAM,QAAQ,QAAQ,KAAK,OAAO;AAAA,MAClC,MAAM,WAAW,KAAK,GACnB,MAAM,wDAAwD,OAAO,EACrE,IAAI,GAAG,MAAM;AAAA,MAChB,MAAM,YAAY,MAAM,UAAU,SAAS,SAAS;AAAA,MACpD,MAAM,QACJ,MAAM,KAAK,SAAS,eAChB,6EAA6E,2BAA2B,iBAAiB,cACzH,gBAAgB,iBAAiB;AAAA,MACvC,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA,oBAEU;AAAA,uBACG;AAAA;AAAA,WAGf,EACC,IAAI,GAAG,QAAQ,OAAO,MAAM;AAAA,MAC/B,MAAM,UAAU,KAAK,IAAI,YAAY;AAAA,MACrC,OAAO;AAAA,QACL;AAAA,QACA,OAAO,SAAS;AAAA,QAChB,SAAS,SAAS,QAAQ,SAAS,SAAS;AAAA,MAC9C;AAAA,KACD;AAAA;AAAA,EAGK,OAAO,CACb,UACG,QAC0B;AAAA,IAC7B,MAAM,MAAM,KAAK,GACd,MAAM,wCAAwC,OAAO,EACrD,IAAI,GAAG,MAAM;AAAA,IAChB,OAAO,MAAM,aAAa,GAAG,IAAI;AAAA;AAErC;;;AC7HA;AAAA;AAAA,gBAEE;AAAA;AAAA,sBAEA;AAAA,kCACA;AAAA,oCACA;AAAA,kBACA;AAAA;AAAA,uBAEA;AAAA,2BACA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAUE;AAAA,2BACA;AAAA;AAAA;;;ACvBF;AAAA,kCAEE;AAAA;AAEF;AAAA;AAAA,kCAEE;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEF;AAAA;AAAA;AAAA,kCAGE;AAAA;AAAA,yBAEA;AAAA;AAAA;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACfA;AAAA,kCACE;AAAA;AAAA;AAAA;AAIF;AAAA;AAAA;AAAA;AAiBA,IAAM,YAAY;AAGX,IAAM,2BAA2B;AAAA;AAAA;AAAA;AAUjC,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA,6BAIR;AAG7B,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASrB,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUzB,SAAS,eAAe,CAAC,KAA0B;AAAA,EACjD,MAAM,MAAM,oBAAoB,GAAG;AAAA,EACnC,OAAO;AAAA,IACL,YAAY,IAAI;AAAA,OACb,oBAAoB,GAAG;AAAA,IAC1B,UACE,IAAI,SAAS,WACT,CAAC,GAAG,IACJ,CAAC,KAAK,oBAAoB,EAAE,MAAM,UAAU,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC;AAAA,EAC1E;AAAA;AAGF,SAAS,eAAe,CACtB,IACA,OAKe;AAAA,EACf,MAAM,UAAU,GACb,MAAM;AAAA,wEAC6D,EACnE,IAAI,MAAM,WAAW,MAAM,UAAU,MAAM,iBAAiB;AAAA,EAG/D,OAAO,SAAS,cAAc;AAAA;AAIzB,SAAS,qBAAqB,CACnC,IACA,OAMgF;AAAA,EAChF,MAAM,UAAU,gBAAgB,IAAI,KAAK;AAAA,EACzC,MAAM,OAAO;AAAA,wDACyC;AAAA,EACtD,MAAM,WAAW,MAAM,cACnB;AAAA;AAAA;AAAA;AAAA,yCAImC,SACnC;AAAA;AAAA,0CAEoC;AAAA,EACxC,OAAO;AAAA,IACL,KAAK;AAAA;AAAA;AAAA;AAAA,4BAImB;AAAA;AAAA,IAExB,QAAQ,CAAC,SAAS,MAAM,WAAW,GAAI,MAAM,cAAc,CAAC,OAAO,IAAI,CAAC,GAAI,MAAM,QAAQ;AAAA,EAC5F;AAAA;AAGK,SAAS,gBAAgB,CAC9B,IACA,UACA,OACM;AAAA,EACN,MAAM,QAAQ,iBAAiB,SAAS,iBAAiB,KAAK;AAAA,EAC9D,IAAI,CAAC,SAAS,2BAA2B,MAAM,KAAK,CAAC,SAAS,KAAK,OAAO,GAAG;AAAA,IAC3E,MAAM,IAAI,+BAA+B,6CAA6C;AAAA,EACxF;AAAA,EACA,MAAM,WAAW,GAAG,MAAM;AAAA,0CACc;AAAA,EACxC,MAAM,SAAS,GAAG,MAAM;AAAA;AAAA,+DAEqC;AAAA,EAC7D,WAAW,QAAQ,OAAO;AAAA,IACxB,MAAM,WAAW,OAAO,IACtB,SAAS,YACT,MAAM,WACN,KAAK,SACL,KAAK,gBACL,OAAO,KAAK,OAAO,CACrB;AAAA,IACA,IAAI;AAAA,MAAU;AAAA,IACd,MAAM,WAAW,SAAS,IAAI,SAAS,YAAY,KAAK,OAAO;AAAA,IAI/D,IACE,CAAC,YACD,SAAS,oBAAoB,KAAK,kBAClC,QAAQ,SAAS,OAAO,MAAM,KAAK,SACnC;AAAA,MACA,MAAM,IAAI,+BACR,+EACF;AAAA,IACF;AAAA,EACF;AAAA;AAIK,SAAS,mBAAmB,CACjC,IACA,WACA,WACA,YACM;AAAA,EACN,IACE,UAAU,4BAA4B,SACrC,UAAU,4BAA4B,WAAW,SAAS,2BACzD,UAAU,mBAAmB,WAAW,SAAS;AAAA,IAEnD,MAAM,IAAI,8BACR,oBACA,8CACF;AAAA,EACF,IAAI,UAAU,4BAA4B,QAAQ,UAAU,eAAe;AAAA,IAAG;AAAA,EAC9E,MAAM,QAAQ,UAAU,4BAA4B;AAAA,EACpD,GAAG,MAAM;AAAA;AAAA;AAAA,+DAGoD;AAAA,QAEvD,QACI;AAAA,4EAEA,IACJ,EAAE,IACN,WAAW,WACX,WACA,WAAW,OAAO,cAClB,GAAI,QAAQ,CAAC,WAAW,UAAU,UAAU,IAAI,CAAC,CACnD;AAAA,EAEA,GAAG,MAAM;AAAA,yCAC8B,EAAE,IAAI,WAAW,WAAW,UAAU,UAAU;AAAA;AAGlF,SAAS,wBAAwB,CAAC,IAAc,UAAyC;AAAA,EAC9F,MAAM,UAAU,GACb,MAAM;AAAA;AAAA;AAAA;AAAA,gBAIK,EACX,IAAI,SAAS,UAAU;AAAA,EAC1B,IAAI;AAAA,IACF,MAAM,IAAI,+BACR,iFACF;AAAA;AAIG,SAAS,gBAAgB,CAC9B,IACA,WACA,MACoC;AAAA,EACpC,MAAM,YAAY,KAAK,QAAQ,CAAC,QAAQ;AAAA,IACtC,QAAQ,aAAa,WAAW,gBAAgB,GAAG;AAAA,IACnD,OAAO,SAAS,IAAI,CAAC,aAAa,KAAK,QAAQ,QAAQ,EAAE;AAAA,GAC1D;AAAA,EACD,OAAO,GACJ,MAAM;AAAA,oEACyD;AAAA;AAAA,aAEvD;AAAA;AAAA;AAAA;AAAA,+BAIkB;AAAA,6EAC8C,cAAc,EACtF,IAAI,cAAc,SAAS,GAAG,SAAS;AAAA;AAIrC,SAAS,wBAAwB,CACtC,IACA,OAQoC;AAAA,EACpC,MAAM,UAAU,gBAAgB,IAAI,KAAK;AAAA,EACzC,MAAM,WAAW,CAAC,MAAM,kBACpB,KACA;AAAA,aACO;AAAA;AAAA;AAAA;AAAA;AAAA,0DAK6C;AAAA,6EACmB;AAAA,MAEvE,CAAC,MAAM,cACH,KACA;AAAA;AAAA,EAGR,OAAO,GACJ,MAAM;AAAA,sBACW;AAAA;AAAA,aAET;AAAA;AAAA;AAAA;AAAA,6EAIgE;AAAA,MACvE,UAAU,EACX,IACC,cAAc,MAAM,KAAK,IAAI,eAAe,CAAC,GAC7C,SACA,GAAI,MAAM,kBACN,CAAC,MAAM,WAAW,MAAM,UAAU,GAAI,MAAM,cAAc,CAAC,OAAO,IAAI,CAAC,CAAE,IACzE,CAAC,CACP;AAAA;;;ADrOG,IAAM,oCAAoC;AAC1C,IAAM,gCAAgC;AAsC7C,SAAS,oBAAoB,CAC3B,QACQ;AAAA,EACR,OAAO,cACL,OAAO,IAAI,GAAG,QAAQ,cAAc;AAAA,IAClC,cAAc,iBAAiB,QAAQ,MAAM;AAAA,IAC7C,cAAc,OAAO;AAAA,IACrB,UAAU,OAAO;AAAA,IACjB;AAAA,EACF,EAAE,CACJ;AAAA;AAAA;AAqEK,MAAM,iCAAiC;AAAA,EAEzB;AAAA,EACR;AAAA,EAFX,WAAW,CACQ,IACR,WACT;AAAA,IAFiB;AAAA,IACR;AAAA;AAAA,EAGX,WAAW,CAAC,KAAoD;AAAA,IAC9D,OAAO,KAAK,aAAa,CAAC,GAAG,CAAC,EAAE;AAAA;AAAA,EAGlC,YAAY,CAAC,MAA2E;AAAA,IACtF,IAAI,KAAK,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAC/B,MAAM,YAAY,cAChB,KAAK,IAAI,CAAC,SAAS,EAAE,cAAc,IAAI,cAAc,WAAW,IAAI,UAAU,EAAE,CAClF;AAAA,IACA,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,IAQzB,MAAM,gBAAgB,KAAK,GACxB,MACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,wDAMxB,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAChC,MAAM,aAAa,iBACjB,KAAK,IACL,KAAK,WACL,KAAK,IAAI,CAAC,SAAS,EAAE,MAAM,UAAU,IAAI,EAAE,CAC7C;AAAA,IACA,MAAM,eAAe,KAAK,GACvB,MACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,0DAMxB,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAChC,MAAM,gBAAgB,KAAK,GACxB,MACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6CAcxB,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAEhC,MAAM,YAAY,IAAI,IACpB,cAAc,IAAI,CAAC,QAAQ,CAAC,aAAa,qBAAqB,GAAG,CAAC,GAAG,GAAG,CAAU,CACpF;AAAA,IACA,MAAM,UAAU,gBAAgB,UAAU;AAAA,IAC1C,MAAM,YAAY,IAAI,IACpB,aAAa,IACX,CAAC,QAAQ,CAAC,aAAa,qBAAqB,GAAG,CAAC,GAAG,qBAAqB,GAAG,CAAC,CAC9E,CACF;AAAA,IACA,MAAM,YAAY,IAAI;AAAA,IACtB,WAAW,OAAO,eAAe;AAAA,MAC/B,MAAM,MAAM,aAAa,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,UAAU,CAAC;AAAA,MACvF,MAAM,SAAS,UAAU,IAAI,GAAG,KAAK,CAAC;AAAA,MACtC,OAAO,KAAK,YAAY,GAAG,CAAC;AAAA,MAC5B,UAAU,IAAI,KAAK,MAAM;AAAA,IAC3B;AAAA,IACA,WAAW,UAAU,UAAU,OAAO,GAAG;AAAA,MACvC,OAAO,KAAK,CAAC,MAAM,UACjB,sBAAsB,KAAK,QAAQ,KAAK,EAAE,EAAE,cAC1C,sBAAsB,MAAM,QAAQ,MAAM,EAAE,CAC9C,CACF;AAAA,IACF;AAAA,IAEA,OAAO,KAAK,IAAI,CAAC,QAAQ;AAAA,MACvB,MAAM,MAAM,aAAa,GAAG;AAAA,MAC5B,MAAM,eAAe,UAAU,IAAI,GAAG;AAAA,MACtC,OAAO;AAAA,QACL,KAAK,gBAAgB,GAAG;AAAA,QACxB,QAAQ,aAAa,QAAQ,IAAI,qBAAoB,EAAE,MAAM,UAAU,IAAI,CAAC,CAAC,CAAC;AAAA,QAC9E,UAAU,UAAU,IAAI,GAAG,KAAK;AAAA,QAChC,WAAW,eAAe,wBAAwB,YAAY,IAAI;AAAA,QAClE,iBAAiB,UAAU,IAAI,GAAG,KAAK,CAAC;AAAA,MAC1C;AAAA,KACD;AAAA;AAAA,EAGH,SAAS,CAAC,KAAgD;AAAA,IACxD,OAAO,KAAK,WAAW,CAAC,GAAG,CAAC,EAAE;AAAA;AAAA,EAGhC,UAAU,CAAC,MAAuE;AAAA,IAChF,IAAI,KAAK,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAC/B,MAAM,YAAY,cAChB,KAAK,IAAI,CAAC,SAAS;AAAA,MACjB,cAAc,IAAI,OAAO;AAAA,MACzB,UAAU,IAAI,OAAO;AAAA,MACrB,QAAQ,IAAI;AAAA,MACZ,cAAc,IAAI,OAAO;AAAA,MACzB,UAAU,IAAI,OAAO;AAAA,IACvB,EAAE,CACJ;AAAA,IACA,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQzB,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQtB,MAAM,gBAAgB,KAAK,GACxB,MACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oDASxB,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAChC,MAAM,aAAa,iBACjB,KAAK,IACL,KAAK,WACL,KAAK,IAAI,CAAC,SAAS,EAAE,MAAM,QAAQ,IAAI,EAAE,CAC3C;AAAA,IACA,MAAM,eAAe,KAAK,GACvB,MACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wEAUxB,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAChC,MAAM,mBAAmB,KAAK,GAC3B,MACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oDAQxB,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAChC,MAAM,YAAY,IAAI,IACpB,cAAc,IAAI,CAAC,QAAQ,CAAC,WAAW,mBAAmB,GAAG,CAAC,GAAG,GAAG,CAAU,CAChF;AAAA,IACA,MAAM,UAAU,gBAAgB,UAAU;AAAA,IAC1C,MAAM,YAAY,IAAI,IACpB,aAAa,IACX,CAAC,QAAQ,CAAC,WAAW,2BAA2B,GAAG,CAAC,GAAG,mBAAmB,GAAG,CAAC,CAChF,CACF;AAAA,IACA,MAAM,gBAAgB,IAAI,IACxB,iBAAiB,IAAI,CAAC,QAAQ;AAAA,MAC5B,MAAM,SAAS,uBAAuB,GAAG;AAAA,MACzC,OAAO,CAAC,iBAAiB,OAAO,IAAI,QAAQ,OAAO,IAAI,MAAM,GAAG,MAAM;AAAA,KACvE,CACH;AAAA,IACA,OAAO,KAAK,IAAI,CAAC,QAAQ;AAAA,MACvB,MAAM,MAAM,WAAW,GAAG;AAAA,MAC1B,MAAM,eAAe,UAAU,IAAI,GAAG;AAAA,MACtC,OAAO;AAAA,QACL,KAAK,gBAAgB,GAAG;AAAA,QACxB,QAAQ,WAAW,QAAQ,IAAI,qBAAoB,EAAE,MAAM,QAAQ,IAAI,CAAC,CAAC,CAAC;AAAA,QAC1E,UAAU,UAAU,IAAI,GAAG,KAAK;AAAA,QAChC,cAAc,cAAc,IAAI,iBAAiB,IAAI,QAAQ,IAAI,MAAM,CAAC,KAAK;AAAA,QAC7E,WAAW,eAAe,sBAAsB,YAAY,IAAI;AAAA,MAClE;AAAA,KACD;AAAA;AAAA,EAGH,UAAU,CAAC,QAA4B,IAAyC;AAAA,IAC9E,OAAO,KAAK,YAAY,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM;AAAA;AAAA,EAGlD,WAAW,CACT,QACiC;AAAA,IACjC,IAAI,OAAO,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IACjC,MAAM,YAAY,cAChB,OAAO,IAAI,GAAG,QAAQ,UAAU;AAAA,MAC9B,cAAc,OAAO,OAAO;AAAA,MAC5B,UAAU,OAAO,OAAO;AAAA,MACxB,YAAY,OAAO;AAAA,MACnB;AAAA,IACF,EAAE,CACJ;AAAA,IACA,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CAcF,EACC,IAAI,WAAW,KAAK,SAAS;AAAA,IAChC,MAAM,QAAQ,IAAI,IAChB,KAAK,IAAI,CAAC,QAAQ;AAAA,MAChB,MAAM,QAAQ,YAAY,GAAG;AAAA,MAC7B,OAAO,CAAC,sBAAsB,MAAM,QAAQ,MAAM,EAAE,GAAG,KAAK;AAAA,KAC7D,CACH;AAAA,IACA,OAAO,OAAO,QAAQ,CAAC,UAAU;AAAA,MAC/B,MAAM,SAAS,MAAM,IAAI,sBAAsB,MAAM,QAAQ,MAAM,EAAE,CAAC;AAAA,MACtE,OAAO,SAAS,CAAC,MAAM,IAAI,CAAC;AAAA,KAC7B;AAAA;AAAA,EAGH,kBAAkB,CAChB,QAC6C;AAAA,IAC7C,IAAI,OAAO,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IACjC,OAAO,KAAK,wBAAwB,QAAQ,qBAAqB,MAAM,CAAC,EAAE;AAAA;AAAA,EAG5E,cAAc,CACZ,QAC0C;AAAA,IAC1C,IAAI,OAAO,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IACjC,MAAM,gBAAgB,qBAAqB,MAAM;AAAA,IACjD,MAAM,aAAa,KAAK,GACrB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAOU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAMP,uBACL,EACC,IAAI,eAAe,KAAK,SAAS;AAAA,IACpC,MAAM,mBAAmB,KAAK,GAC3B,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oDAcF,EACC,IAAI,eAAe,KAAK,SAAS;AAAA,IACpC,MAAM,UAAU,qBAAqB,UAAU;AAAA,IAC/C,MAAM,YAAY,IAAI,IACpB,iBAAiB,IAAI,CAAC,QAAQ;AAAA,MAC5B,MAAM,SAAS,uBAAuB,GAAG;AAAA,MACzC,OAAO,CAAC,iBAAiB,OAAO,IAAI,QAAQ,OAAO,IAAI,MAAM,GAAG,MAAM;AAAA,KACvE,CACH;AAAA,IACA,QAAQ,WAAW,cAAc,KAAK,wBAAwB,QAAQ,aAAa;AAAA,IACnF,OAAO,OAAO,IAAI,GAAG,QAAQ,UAAU,UAAU;AAAA,MAC/C,MAAM,MAAM,iBAAiB,QAAQ,MAAM;AAAA,MAC3C,OAAO;AAAA,WACF,UAAU;AAAA,QACb,iBAAiB,QAAQ,IAAI,GAAG,KAAK;AAAA,QACrC,UAAU,UAAU,IAAI,GAAG,KAAK;AAAA,QAChC,WAAW,UAAU,IAAI,GAAG,KAAK;AAAA,MACnC;AAAA,KACD;AAAA;AAAA,EAGK,uBAAuB,CAC7B,QACA,eAIA;AAAA,IACA,MAAM,eAAe,IAAI,IACvB,OAAO,IAAI,GAAG,QAAQ,aAAa;AAAA,MACjC,MAAM,MAAM,iBAAiB,QAAQ,MAAM;AAAA,MAC3C,OAAO,CAAC,KAAK,sBAAsB,QAAQ,MAAM,CAAC;AAAA,KACnD,CACH;AAAA,IACA,MAAM,YAAY,IAAI;AAAA,IACtB,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+CAgBuC,mBAAmB,OAAO;AAAA,SAEnE,EACC,QAAQ,eAAe,KAAK,SAAS;AAAA,IACxC,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,cAAc,aAAa,IAAI,IAAI,cAAc;AAAA,MACvD,IAAI,CAAC,aAAa;AAAA,QAChB,MAAM,IAAI,8BACR,mBACA,0BAA0B,IAAI,sCAChC;AAAA,MACF;AAAA,MACA,MAAM,WAAW,sBAAsB,GAAG;AAAA,MAC1C,oBAAoB,aAAa,QAAQ;AAAA,MACzC,UAAU,IAAI,IAAI,gBAAgB,YAAY,mBAAmB,IAAI,WAAW,IAAI;AAAA,IACtF;AAAA,IACA,OAAO;AAAA,MACL,WAAW,OAAO,IAAI,GAAG,QAAQ,aAC/B,uBAAuB,aAAa,IAAI,iBAAiB,QAAQ,MAAM,CAAC,CAAE,CAC5E;AAAA,MACA;AAAA,IACF;AAAA;AAAA,GAGD,aAAa,CACZ,SACA,UAC6B;AAAA,IAC7B,IAAI,QAAQ,WAAW;AAAA,MAAG;AAAA,IAC1B,MAAM,SAAS,QAAQ,IAAI,MAAM,QAAQ,EAAE,KAAK,IAAI;AAAA,IACpD,MAAM,OAAO,QAAQ,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,IAAI,SAAS,CAAC;AAAA,IACvE,IAAI,SAAwB;AAAA,IAC5B,OAAO,MAAM;AAAA,MACX,MAAM,OAAO,KAAK,GACf,MACC;AAAA,oEAC0D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAYpD;AAAA;AAAA;AAAA;AAAA,kBAIE,mBAAmB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAepC,EACC,IACC,GAAG,MACH,KAAK,WACL,KAAK,WACL,KAAK,WACL,QACA,QACA,QACF;AAAA,MACF,IAAI,KAAK,WAAW;AAAA,QAAG;AAAA,MACvB,MAAM,KAAK,IAAI,kBAAkB;AAAA,MACjC,SAAS,KAAK,KAAK,SAAS,IAAI,YAAY;AAAA,IAC9C;AAAA;AAAA,GAGD,qBAAqB,CAAC,OAAkE;AAAA,IACvF,KAAK,6BAA6B,KAAK;AAAA,IACvC,IAAI,SAAmC;AAAA,IACvC,OAAO,MAAM;AAAA,MACX,MAAM,OAAO,KAAK,gBAAgB,OAAO,MAAM;AAAA,MAC/C,IAAI,KAAK,WAAW;AAAA,QAAG;AAAA,MACvB,MAAM,KAAK,IAAI,mBAAmB;AAAA,MAClC,IAAI,KAAK,SAAS,MAAM;AAAA,QAAU;AAAA,MAClC,MAAM,OAAO,KAAK,KAAK,SAAS;AAAA,MAChC,SAAS,EAAE,SAAS,KAAK,UAAU,aAAa,KAAK,aAAa;AAAA,IACpE;AAAA;AAAA,EAGF,uBAAuB,CACrB,UACA,4BACA,MACyC;AAAA,IACzC,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IACnC,MAAM,aAAa,KAAK,mBACtB,UACA,CAAC,0BAA0B,GAC3B,KAAK,IAAI,CAAC,SAAS,EAAE,MAAM,UAAmB,IAAI,EAAE,CACtD;AAAA,IACA,OAAO,KAAK,IAAI,CAAC,WAAW;AAAA,MAC1B,KAAK,MAAM;AAAA,MACX,iBAAiB,aACf,WAAW,kBACR,IAAI,0BAA0B,GAC7B,IAAI,qBAAoB,EAAE,MAAM,UAAU,KAAK,MAAM,IAAI,CAAC,CAAC,CACjE;AAAA,MACA,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,MACjB,iBAAiB,MAAM;AAAA,IACzB,EAAE;AAAA;AAAA,EAGJ,qBAAqB,CACnB,UACA,4BACA,oBACA,YACA,cAAc,OACyB;AAAA,IACvC,MAAM,OAAO,WAAW,IAAI,CAAC,aAAa,SAAS,GAAG;AAAA,IACtD,MAAM,OAAO,KAAK,WAAW,IAAI;AAAA,IACjC,MAAM,eAAe,KAAK,mBACxB,UACA,oBACA,KAAK,IAAI,CAAC,SAAS,EAAE,MAAM,QAAiB,IAAI,EAAE,GAClD,WACF;AAAA,IACA,MAAM,YAAY,aAAa,kBAAkB,IAAI,0BAA0B;AAAA,IAC/E,OAAO,KAAK,IAAI,CAAC,OAAO,UAAU;AAAA,MAChC,MAAM,MAAM,qBAAoB,EAAE,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC;AAAA,MAChE,OAAO;AAAA,QACL,KAAK,MAAM;AAAA,QACX,iBAAiB,aAAa,MAAM,IAAI,GAAG,IACvC,WAAW,WAAW,IAAI,GAAG,CAAC,IAC9B,MAAM;AAAA,QACV,UAAU,MAAM;AAAA,QAChB,cAAc,MAAM;AAAA,QACpB,WAAW,MAAM;AAAA,QACjB,cAAc,WAAW,OAAQ;AAAA,MACnC;AAAA,KACD;AAAA;AAAA,EAGH,uBAAuB,CAAC,KAGf;AAAA,IACP,MAAM,MAAM,KAAK,GACd,MACC;AAAA,wEAEF,EACC,IAAI,KAAK,WAAW,IAAI,cAAc,IAAI,SAAS;AAAA,IAItD,OAAO,MAAM,EAAE,SAAS,IAAI,SAAS,cAAc,IAAI,eAAe,IAAI;AAAA;AAAA,EAG5E,uBAAuB,CAAC,KAAiD;AAAA,IACvE,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,KAAK,WACL,IAAI,OAAO,cACX,IAAI,OAAO,WACX,IAAI,QACJ,IAAI,OAAO,cACX,IAAI,OAAO,SACb;AAAA,IACF,OAAO,MAAM,IAAI,iBAAiB;AAAA;AAAA,EAG5B,kBAAkB,CACxB,UACA,oBACA,MACA,cAAc,OACM;AAAA,IACpB,IAAI,mBAAmB,WAAW,KAAK,KAAK,WAAW,GAAG;AAAA,MACxD,OAAO,EAAE,OAAO,IAAI,KAAO,mBAAmB,IAAI,IAAM;AAAA,IAC1D;AAAA,IACA,MAAM,OAAO,yBAAyB,KAAK,IAAI;AAAA,MAC7C,WAAW,KAAK;AAAA,MAChB;AAAA,MACA,mBAAmB,mBAAmB;AAAA,MACtC;AAAA,MACA,iBAAiB,mBAAmB,SAAS;AAAA,MAC7C;AAAA,IACF,CAAC;AAAA,IACD,MAAM,QAAQ,IAAI;AAAA,IAClB,MAAM,oBAAoB,IAAI;AAAA,IAC9B,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,SAAS,aAAa,GAAG;AAAA,MAC/B,MAAM,MAAM,qBAAoB,OAAO,SAAS;AAAA,MAChD,MAAM,IAAI,GAAG;AAAA,MACb,MAAM,kBAAkB,kBAAkB,IAAI,IAAI,kBAAkB,KAAK,IAAI;AAAA,MAC7E,gBAAgB,IAAI,KAAK,MAAM;AAAA,MAC/B,kBAAkB,IAAI,IAAI,oBAAoB,eAAe;AAAA,IAC/D;AAAA,IACA,OAAO,EAAE,OAAO,kBAAkB;AAAA;AAAA,EAG5B,4BAA4B,CAAC,OAAuC;AAAA,IAC1E,IAAI,MAAM,SAAS,UAAU;AAAA,MAC3B,KAAK,0BAA0B,KAAK;AAAA,MACpC;AAAA,IACF;AAAA,IACA,KAAK,wBAAwB,KAAK;AAAA;AAAA,EAG5B,yBAAyB,CAAC,OAAuC;AAAA,IACvE,MAAM,OAAO,sBAAsB,KAAK,IAAI;AAAA,MAC1C,WAAW,KAAK;AAAA,MAChB,UAAU,MAAM;AAAA,MAChB,mBAAmB,MAAM;AAAA,MACzB,aAAa,MAAM,eAAe;AAAA,IACpC,CAAC;AAAA,IACD,KAAK,GACF,MACC;AAAA,wBACgB;AAAA;AAAA;AAAA;AAAA,cAIV,qBAAqB;AAAA,kBACjB,KAAK;AAAA;AAAA;AAAA,SAIjB,EACC,IAAI,MAAM,WAAW,GAAG,KAAK,MAAM;AAAA;AAAA,EAGhC,uBAAuB,CAAC,OAAuC;AAAA,IACrE,MAAM,OAAO,sBAAsB,KAAK,IAAI;AAAA,MAC1C,WAAW,KAAK;AAAA,MAChB,UAAU,MAAM;AAAA,MAChB,mBAAmB,MAAM;AAAA,MACzB,aAAa,MAAM,eAAe;AAAA,IACpC,CAAC;AAAA,IACD,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,mBAKW;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKC,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cA8CX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBA0BE,mBAAmB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQlB,EACC,IACC,MAAM,WACN,GAAG,KAAK,QACR,KAAK,WACL,KAAK,WACL,KAAK,WACL,KAAK,WACL,KAAK,WACL,KAAK,WACL,KAAK,WACL,KAAK,WACL,MAAM,SACR;AAAA;AAAA,EAGI,eAAe,CACrB,OACA,QACsB;AAAA,IACtB,OAAO,KAAK,GACT,MACC;AAAA;AAAA,iBAES;AAAA;AAAA;AAAA;AAAA;AAAA,SAMX,EACC,IACC,MAAM,WACN,MAAM,MACN,QAAQ,WAAW,MACnB,QAAQ,WAAW,MACnB,QAAQ,eAAe,MACvB,MAAM,QACR;AAAA;AAEN;AAEA,SAAS,mBAAmB,CAAC,KAA8C;AAAA,EACzE,MAAM,QAAQ,WAAoB,IAAI,YAAY;AAAA,EAClD,IAAI,IAAI,gBAAgB,UAAU;AAAA,IAChC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK,EAAE,cAAc,MAAM,IAAK,WAAW,MAAM,GAAI;AAAA,MACrD,SAAS,IAAI;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,MACH,QAAQ,EAAE,cAAc,MAAM,IAAK,WAAW,MAAM,GAAI;AAAA,MACxD,QAAQ,MAAM;AAAA,MACd,QAAQ,EAAE,cAAc,MAAM,IAAK,WAAW,MAAM,GAAI;AAAA,IAC1D;AAAA,IACA,SAAS,IAAI;AAAA,IACb,cAAc,IAAI,kBAAkB;AAAA,EACtC;AAAA;AAGF,SAAS,eAAe,CACtB,MAC4C;AAAA,EAC5C,MAAM,SAAS,IAAI;AAAA,EACnB,WAAW,OAAO,MAAM;AAAA,IACtB,MAAM,SAAS,aAAa,GAAG;AAAA,IAC/B,MAAM,MAAM,qBAAoB,OAAO,SAAS;AAAA,IAChD,IAAI,OAAO,IAAI,GAAG,GAAG;AAAA,MACnB,MAAM,IAAI,8BACR,0BACA,kCAAkC,MACpC;AAAA,IACF;AAAA,IACA,OAAO,IAAI,KAAK,MAAM;AAAA,EACxB;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,oBAAoB,CAC3B,MACgD;AAAA,EAChD,MAAM,SAAS,IAAI;AAAA,EACnB,WAAW,OAAO,MAAM;AAAA,IACtB,MAAM,SAAS,WAAW,aAAa,GAAG,CAAC;AAAA,IAC3C,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,MAAM,MAAM,OAAO,UAAU;AAAA,IAC7B,MAAM,MAAM,iBAAiB,IAAI,QAAQ,IAAI,MAAM;AAAA,IACnD,IAAI,OAAO,IAAI,GAAG,GAAG;AAAA,MACnB,MAAM,IAAI,8BACR,0BACA,4DAA4D,MAC9D;AAAA,IACF;AAAA,IACA,OAAO,IAAI,KAAK,MAAM;AAAA,EACxB;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,YAAY,CACnB,QACoC;AAAA,EACpC,OAAO,QAAQ,UAAU,SAAS,WAAY,SAAyC;AAAA;AAGzF,SAAS,UAAU,CAAC,QAA6E;AAAA,EAC/F,OAAO,QAAQ,UAAU,SAAS,SAAU,SAAuC;AAAA;AAGrF,SAAS,oBAAoB,CAAC,KAA8C;AAAA,EAC1E,MAAM,MAAM,qBAAqB,GAAG;AAAA,EACpC,OAAO;AAAA,IACL;AAAA,IACA,OAAO,WAAyC,IAAI,KAAK;AAAA,IACzD,UAAU,WAA4C,IAAI,SAAS;AAAA,IACnE,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI;AAAA,EACjB;AAAA;AAGF,SAAS,kBAAkB,CAAC,KAA0C;AAAA,EACpE,MAAM,MAAM,2BAA2B,GAAG;AAAA,EAC1C,OAAO;AAAA,IACL;AAAA,IACA,OAAO,WAAuC,IAAI,KAAK;AAAA,IACvD,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI;AAAA,EACjB;AAAA;AAGF,SAAS,sBAAsB,CAAC,KAAkD;AAAA,EAChF,MAAM,MAAM;AAAA,IACV,QAAQ,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,kBAAkB;AAAA,IAC7E,QAAQ,IAAI;AAAA,EACd;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA,OAAO,sBAAsB,WAAmB,IAAI,KAAK,GAAG,eAAe,GAAG,CAAC;AAAA,IAC/E,cAAc,IAAI;AAAA,IAClB,WAAW,IAAI;AAAA,EACjB;AAAA;AAGF,SAAS,0BAA0B,CAAC,KAAuC;AAAA,EACzE,OAAO;AAAA,IACL,QAAQ,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,kBAAkB;AAAA,IAC7E,QAAQ,IAAI;AAAA,IACZ,QAAQ,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,kBAAkB;AAAA,EAC/E;AAAA;AAGF,SAAS,cAAc,CAAC,OAGb;AAAA,EACT,OAAO,KAAK,UAAU,CAAC,MAAM,OAAO,cAAc,MAAM,OAAO,WAAW,MAAM,MAAM,CAAC;AAAA;AAGzF,SAAS,YAAY,CAAC,KAA8D;AAAA,EAClF,OAAO;AAAA,IACL,QAAQ,EAAE,cAAc,IAAI,UAAU;AAAA,IACtC,mBAAmB,IAAI;AAAA,OACpB,gBAAgB,GAAG;AAAA,EACxB;AAAA;AAGF,SAAS,uBAAuB,CAAC,KAAkD;AAAA,EACjF,IAAI,CAAC,IAAI,gBAAgB;AAAA,IACvB,MAAM,IAAI,8BACR,mBACA,oBAAoB,IAAI,kBAAkB,IAAI,2CAChD;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,KAAK,qBAAqB,GAAG;AAAA,IAC7B,YAAY,WAAiD,IAAI,UAAU;AAAA,IAC3E,SAAS,IAAI;AAAA,IACb,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,cAAc,IAAI;AAAA,EACpB;AAAA;AAGF,SAAS,qBAAqB,CAAC,KAA8C;AAAA,EAC3E,IAAI,CAAC,IAAI,gBAAgB;AAAA,IACvB,MAAM,IAAI,8BACR,mBACA,kBAAkB,WAAW,mBAAmB,GAAG,CAAC,kCACtD;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,KAAK,mBAAmB,GAAG;AAAA,OACvB,IAAI,eAAe,OACnB,CAAC,IACD;AAAA,MACE,YAAY,WAA4D,IAAI,UAAU;AAAA,IACxF;AAAA,IACJ,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,cAAc,IAAI;AAAA,EACpB;AAAA;AAGF,SAAS,WAAW,CAAC,KAAyC;AAAA,EAC5D,IAAI,CAAC,IAAI,gBAAgB;AAAA,IACvB,MAAM,IAAI,8BACR,oBACA,mBAAmB,sBACjB;AAAA,MACE,QAAQ,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,UAAU;AAAA,MACrE,YAAY,IAAI;AAAA,IAClB,GACA,IAAI,EACN,kCACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,QAAQ,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,UAAU;AAAA,MACrE,YAAY,IAAI;AAAA,IAClB;AAAA,IACA,OAAO,WAAyC,IAAI,KAAK;AAAA,OACrD,IAAI,SAAS,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK;AAAA,IAC9C,IAAI,IAAI;AAAA,IACR,cAAc,IAAI;AAAA,EACpB;AAAA;AAGF,SAAS,oBAAoB,CAAC,OAAwB;AAAA,EACpD,MAAM,SAAS,QAAQ,GAAG,WAAW;AAAA,EACrC,OAAO,6BAA6B,yBAAyB;AAAA;AAGxD,SAAS,kBAAkB,CAAC,OAAwB;AAAA,EACzD,MAAM,SAAS,QAAQ,GAAG,WAAW;AAAA,EACrC,OAAO,6BAA6B,yBAAyB,oBAAoB,kBAAkB,yBAAyB;AAAA;;;ADthCvH,MAAM,0CAA0C,oCAAoC;AAAA,EACzF,oBAAuC;AAAA,EACvC,qBAAwC;AAAA,EAC/B,UAAuB,iBAAiB;AACnD;AAAA;AAEO,MAAM,8BAA8B;AAAA,EAKtB;AAAA,EACA;AAAA,EALF,WAAW,IAAI;AAAA,EACf,OAAO,IAAI;AAAA,EAE5B,WAAW,CACQ,IACA,SACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,EAGnB,MAAM,CAAC,QAAsE;AAAA,IAC3E,IAAI,CAAC,KAAK,SAAS,QAAQ;AAAA,MACzB,MAAM,IAAI,8BACR,mBACA,iEACF;AAAA,IACF;AAAA,IACA,KAAK,aAAa;AAAA,IAClB,MAAM,UAAU,IAAI,kCAAkC,gBAAgB,MAAM,GAAG,KAAK,QAAQ,EAAE;AAAA,IAC9F,KAAK,SAAS,IAAI,QAAQ,eAAe,OAAO;AAAA,IAChD,KAAK,KAAK,IAAI,OAAO;AAAA,IACrB,KAAK,QAAQ,iBAAiB,SAAS,QAAQ,aAAa;AAAA,IAC5D,OAAO;AAAA;AAAA,EAGT,OAAO,CAAC,SAAoE;AAAA,IAC1E,MAAM,QAAQ,KAAK,SAAS,IAAI,QAAQ,aAAa;AAAA,IACrD,IACE,CAAC,SACD,CAAC,MAAM,UACP,CAAC,KAAK,SAAS,UACf,MAAM,kBAAkB,KAAK,QAAQ,IACrC;AAAA,MACA,MAAM,IAAI,8BACR,mBACA,sCACF;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,OAAO,CAAC,SAAkD;AAAA,IACxD,IAAI,CAAC,QAAQ;AAAA,MAAQ;AAAA,IACrB,QAAQ,SAAS;AAAA,IACjB,QAAQ,cAAc;AAAA,IACtB,KAAK,KAAK,OAAO,OAAO;AAAA,IAIxB,IAAI,KAAK,KAAK,SAAS;AAAA,MAAG,KAAK,eAAe;AAAA,IACzC;AAAA,WAAK,WAAW,QAAQ,EAAE;AAAA,IAC/B,KAAK,SAAS,iBAAiB,SAAS,QAAQ,aAAa;AAAA;AAAA,EAG/D,aAAa,GAAS;AAAA,IACpB,WAAW,WAAW,KAAK;AAAA,MAAM,KAAK,QAAQ,OAAO;AAAA;AAAA,EAGvD,KAAK,CAAC,OAA4C;AAAA,IAChD,MAAM,UAAU,KAAK,QAAQ,MAAM,OAAO;AAAA,IAC1C,MAAM,UAAU,2BAA2B,SAAS,KAAK;AAAA,IACzD,IAAI,QAAQ,WAAW;AAAA,MAAG;AAAA,IAC1B,MAAM,SAAS,KAAK,GAAG,MACrB;AAAA,sBACgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASlB;AAAA,IACA,KAAK,GAAG,IAAI,oCAAoC;AAAA,IAChD,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,aAAa,QAAQ,WAAW,aAAa,SAAS;AAAA,QACpD,mBAAmB,OAAO;AAAA,QAC1B,MAAM,iBAAiB,OAAO,SAAS,mBAAmB,SAAS;AAAA,QACnE,MAAM,cAAc,OAAO,SAAS,gBAAgB,SAAS;AAAA,QAC7D,OAAO,IACL,QAAQ,IACR,OAAO,WACP,WACA,OAAO,MACP,QAAQ,MACR,QAAQ,YACR,QAAQ,YACR,QAAQ,SACR,QAAQ,SACR,gBAAgB,cAAc,MAC9B,gBAAgB,eAAe,MAC/B,aAAa,QAAQ,MACrB,cAAc,OAAO,YAAY,QAAQ,IAAI,MAC7C,aAAa,IAAI,OAAO,gBAAgB,MACxC,aAAa,IAAI,OAAO,aAAa,MACrC,aAAa,IAAI,UAAU,MAC3B,aAAa,IAAI,OAAO,gBAAgB,MACxC,aAAa,IAAI,OAAO,aAAa,MACrC,cAAc,MAAM,CACtB;AAAA,MACF;AAAA,MACA,KAAK,GAAG,IAAI,4CAA4C;AAAA,MACxD,OAAO,OAAO;AAAA,MACd,KAAK,GAAG,IAAI,gDAAgD;AAAA,MAC5D,KAAK,GAAG,IAAI,4CAA4C;AAAA,MACxD,IAAI,wBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,cAAc,gBAAgB;AAAA,MACtC;AAAA,MACA,MAAM;AAAA;AAAA,IAER,WAAW,YAAY;AAAA,MACrB,cAAc,QAAQ,SAAS,SAAS,QAAQ,SAAS,OAAO;AAAA;AAAA,SAG7D,MAAM,CAAC,OAA+E;AAAA,IAC3F,MAAM,UAAU,KAAK,QAAQ,MAAM,OAAO;AAAA,IAC1C,MAAM,SAAS,QAAQ,YAAY,MAAM;AAAA,IACzC,IAAI,OAAO,SAAS;AAAA,MAClB,MAAM,IAAI,8BACR,mBACA,mBAAmB,MAAM,mDAC3B;AAAA,IACF;AAAA,IACA,OAAO,UAAU;AAAA,IACjB,QAAQ,aAAa;AAAA,IACrB,IAAI,SAA4B;AAAA,IAChC,OAAO,MAAM;AAAA,MACX,KAAK,QAAQ,MAAM,OAAO;AAAA,MAC1B,MAAM,OAAO,KAAK,SAAS,MAAM,OAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,MAC1E,IAAI,KAAK,WAAW;AAAA,QAAG;AAAA,MACvB,MAAM,UAAU,KAAK,IAAI,CAAC,QACxB,WAAqC,IAAI,OAAO,CAClD;AAAA,MACA,SAAS,WAAW,KAAK,KAAK,SAAS,EAAG;AAAA,MAC1C,OAAO,gBAAgB,QAAQ;AAAA,MAC/B,MAAM,EAAE,QAAQ;AAAA,IAClB;AAAA,IACA,KAAK,QAAQ,MAAM,OAAO;AAAA,IAC1B,OAAO,YAAY;AAAA;AAAA,EAGrB,mBAAmB,CACjB,SACA,MAIE;AAAA,IACF,MAAM,SAAS,KAAK,GAAG,MACrB;AAAA,8BACwB;AAAA;AAAA,OAG1B;AAAA,IACA,OAAO,KAAK,QAAQ,CAAC,QAAQ;AAAA,MAC3B,MAAM,MAAM,oBAAoB,KAAK,UAAU,CAAC,IAAI,cAAc,IAAI,SAAS,CAAC;AAAA,MAChF,MAAM,MAAM,OAAO,IAAI,QAAQ,IAAI,GAAG;AAAA,MACtC,IAAI,CAAC;AAAA,QAAK,OAAO,CAAC;AAAA,MAClB,MAAM,SAAS,WAEb,IAAI,OAAO;AAAA,MACb,OAAO,CAAC,EAAE,KAAK,OAAO,KAAK,QAAQ,OAAO,OAAO,CAAC;AAAA,KACnD;AAAA;AAAA,EAGH,oBAAoB,CAClB,SACA,OAC6B;AAAA,IAC7B,MAAM,QAAQ,yBAAyB,KAAK;AAAA,IAC5C,MAAM,WAAW,KAAK,SAAS,SAAS,QAAQ,IAAI,QAAQ,mBAAmB,MAAM,MAAM;AAAA,IAC3F,MAAM,gBAAgB,SAAS,IAAI,CAAC,QAAQ;AAAA,MAC1C,MAAM,SAAS,WACb,IAAI,OACN;AAAA,MACA,OAAO,OAAO;AAAA,KACf;AAAA,IACD,MAAM,YAAY,KAAK,SACrB,SACA,QAAQ,IACR,QAAQ,oBACR,MAAM,OAAO,MACf;AAAA,IACA,MAAM,iBAAiB,UAAU,IAAI,CAAC,QACpC,WAA0C,IAAI,OAAO,CACvD;AAAA,IACA,MAAM,WAAW,8BACf,SACA,OACA,OACA,eACA,cACF;AAAA,IACA,OAAO;AAAA,SACF;AAAA,MACH,mBACE,SAAS,WAAW,IAChB,QAAQ,oBACR,WAAW,SAAS,SAAS,SAAS,EAAG;AAAA,MAC/C,oBACE,UAAU,WAAW,IACjB,QAAQ,qBACR,WAAW,UAAU,UAAU,SAAS,EAAG;AAAA,IACnD;AAAA;AAAA,EAGF,mBAAmB,CACjB,SACA,UACM;AAAA,IACN,QAAQ,mBAAmB,SAAS;AAAA,IACpC,QAAQ,qBAAqB,SAAS;AAAA,IACtC,QAAQ,oBAAoB,SAAS;AAAA,IACrC,QAAQ,qBAAqB,SAAS;AAAA;AAAA,EAGxC,UAAU,CAAC,SAIT;AAAA,IACA,OAAO;AAAA,MACL,OAAO,QAAQ,QAAQ;AAAA,MACvB,aAAa,QAAQ,QAAQ;AAAA,MAC7B,OAAO,QAAQ,QAAQ;AAAA,IACzB;AAAA;AAAA,EAGF,gBAAgB,CAAC,SAAmE;AAAA,IAClF,MAAM,UAAU,QAAQ;AAAA,IACxB,OAAO;AAAA,MACL,gBAAgB,QAAQ;AAAA,MACxB,gBAAgB,QAAQ;AAAA,MACxB,gBAAgB,QAAQ;AAAA,MACxB,kBACE,QAAQ,wBACR,QAAQ,iBACR,QAAQ,iBACR,QAAQ;AAAA,MACV,cAAc,QAAQ;AAAA,MACtB,cAAc,QAAQ;AAAA,MACtB,cAAc,QAAQ;AAAA,MACtB,gBACE,QAAQ,sBACR,QAAQ,eACR,QAAQ,eACR,QAAQ;AAAA,IACZ;AAAA;AAAA,EAGF,gBAAgB,CAAC,SAA4C,YAAoB;AAAA,IAC/E,MAAM,UAAU,QAAQ;AAAA,IACxB,OAAO;AAAA,MACL,kBAAkB,QAAQ;AAAA,MAC1B,QAAQ;AAAA,QACN,eAAe,QAAQ;AAAA,QACvB,eAAe,QAAQ;AAAA,QACvB,iBAAiB,aAAa,QAAQ,gBAAgB,QAAQ;AAAA,QAC9D,sBAAsB,QAAQ;AAAA,MAChC;AAAA,IACF;AAAA;AAAA,EAGF,4BAA4B,CAAC,SAAkD;AAAA,IAC7E,IAAI,CAAC,QAAQ;AAAA,MAAa;AAAA,IAC1B,MAAM,iBAAiB,QAAQ,YAAY,mBAAmB,WAAW,IAAI;AAAA,IAC7E,MAAM,WAAW,KAAK,GACnB,MACC;AAAA;AAAA;AAAA,mBAGW;AAAA;AAAA;AAAA;AAAA,gCAIa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAOb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCASe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAW5B,EACC,IAAI,QAAQ,IAAI,gBAAgB,QAAQ,IAAI,cAAc;AAAA,IAC7D,IAAI,UAAU;AAAA,MACZ,mBACE,mFACF;AAAA,IACF;AAAA;AAAA,EAGM,QAAQ,CACd,MACA,WACA,QACA,OACmB;AAAA,IACnB,IAAI,UAAU;AAAA,MAAG,OAAO,CAAC;AAAA,IACzB,MAAM,WAAW;AAAA,IACjB,IAAI,CAAC,QAAQ;AAAA,MACX,OAAO,KAAK,GACT,MACC,UAAU,iBAAiB;AAAA;AAAA;AAAA,mBAI7B,EACC,IAAI,WAAW,MAAM,KAAK;AAAA,IAC/B;AAAA,IACA,OAAO,KAAK,GACT,MACC,UAAU,iBAAiB;AAAA;AAAA;AAAA;AAAA,iBAK7B,EACC,IACC,WACA,MACA,OAAO,YACP,OAAO,YACP,OAAO,SACP,OAAO,SACP,OAAO,WACP,KACF;AAAA;AAAA,EAGI,YAAY,GAAS;AAAA,IAC3B,KAAK,GAAG,IAAI;AAAA,wCACwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAwB3B;AAAA;AAAA;AAAA,wCAG2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAS3B;AAAA;AAAA;AAAA,KAGR;AAAA;AAAA,EAGK,UAAU,CAAC,WAAyB;AAAA,IAC1C,KAAK,GACF,MAAM,eAAe,wDAAwD,EAC7E,IAAI,SAAS;AAAA,IAChB,KAAK,GACF,MAAM,eAAe,oDAAoD,EACzE,IAAI,SAAS;AAAA;AAAA,EAGV,cAAc,GAAS;AAAA,IAC7B,KAAK,GAAG,IAAI;AAAA,6BACa;AAAA,6BACA;AAAA,KACxB;AAAA;AAEL;AAEA,SAAS,UAAU,CAAC,KAAkC;AAAA,EACpD,OAAO;AAAA,IACL,YAAY,IAAI;AAAA,IAChB,YAAY,IAAI;AAAA,IAChB,SAAS,IAAI;AAAA,IACb,SAAS,IAAI;AAAA,IACb,WAAW,IAAI;AAAA,EACjB;AAAA;AAGF,SAAS,gBAAgB,GAAgB;AAAA,EACvC,OAAO;AAAA,IACL,OAAO;AAAA,IACP,aAAa;AAAA,IACb,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,cAAc;AAAA,IACd,cAAc;AAAA,IACd,eAAe;AAAA,IACf,eAAe;AAAA,IACf,sBAAsB;AAAA,EACxB;AAAA;AAGF,SAAS,aAAa,CACpB,SACA,QACA,SACM;AAAA,EACN,IAAI,QAAQ,SAAS;AAAA,IAAQ,QAAQ,QAAQ,SAAS;AAAA,EAEtD,IAAI,OAAO,SAAS,kBAAkB;AAAA,IACpC,IAAI,OAAO,eAAe;AAAA,MAAU,QAAQ,yBAAyB;AAAA,IACrE,IAAI,OAAO,eAAe;AAAA,MAAQ,QAAQ,uBAAuB;AAAA,IACjE,IAAI,OAAO,eAAe;AAAA,MAAS,QAAQ,wBAAwB;AAAA,IACnE;AAAA,EACF;AAAA,EACA,IAAI,OAAO,SAAS;AAAA,IAAQ;AAAA,EAE5B,QAAQ,OAAO,KAAK;AAAA,SACb;AAAA,MACH,QAAQ,wBAAwB;AAAA,MAChC,IAAI,OAAO,KAAK,MAAM,SAAS;AAAA,QAAQ,QAAQ,kBAAkB;AAAA,MAC5D;AAAA,gBAAQ,kBAAkB;AAAA,MAC/B;AAAA,SACG;AAAA,MACH,QAAQ,kBAAkB;AAAA,MAC1B;AAAA,SACG;AAAA,MACH,IAAI,OAAO,KAAK,MAAM,SAAS;AAAA,QAAQ,QAAQ,gBAAgB;AAAA,MAC1D;AAAA,gBAAQ,gBAAgB;AAAA,MAC7B;AAAA,SACG;AAAA,MACH,QAAQ,gBAAgB;AAAA,MACxB;AAAA,SACG;AAAA,MACH,IAAI,OAAO,KAAK,MAAM,SAAS,iBAAiB;AAAA,QAAM,QAAQ,iBAAiB;AAAA,MAC1E;AAAA,gBAAQ,iBAAiB;AAAA,MAC9B;AAAA,SACG;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,MACH;AAAA;AAAA;;;AGnjBN;AAAA,gBACE;AAAA,kCACA;AAAA,kBACA;AAAA;AAAA;AAGF;AAQA,SAAS,2BAA2B,CAAC,cAAuC;AAAA,EAC1E,OAAO,iBAAiB,SACpB,yCACA;AAAA;AAGN,SAAS,oBAAoB,CAAC,cAA6D;AAAA,EACzF,OAAO,kBAAkB,4BAA4B,YAAY,CAAC;AAAA;AAAA;AAI7D,MAAM,4BAA4B;AAAA,EACV;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,EAE7B,KAAK,CAAC,WAAmB,UAAkB,OAAuC;AAAA,IAChF,KAAK,eAAe,WAAW,KAAK;AAAA,IACpC,KAAK,eAAe,WAAW,KAAK;AAAA,IACpC,KAAK,gBAAgB,WAAW,KAAK;AAAA,IACrC,KAAK,YAAY,WAAW,UAAU,KAAK;AAAA;AAAA,EAGrC,cAAc,CAAC,WAAmB,OAAuC;AAAA,IAC/E,WAAW,QAAQ,MAAM,UAAU,QAAQ,SAAS;AAAA,MAClD,IAAI,KAAK,yBAAyB,MAAM;AAAA,QACtC,IAAI;AAAA,UACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA,0DAIF,EACC,IACC,WACA,KAAK,IAAI,cACT,KAAK,IAAI,WACT,cAAc,KAAK,KAAK,GACxB,cAAc,KAAK,QAAQ,GAC3B,KAAK,cACL,KAAK,SACP;AAAA,UACF,OAAO,OAAO;AAAA,UACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,YAClC,MAAM,kBAAkB,mCAAmC;AAAA,UAC7D;AAAA,UACA,MAAM;AAAA;AAAA,QAER;AAAA,MACF;AAAA,MACA,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA,sCAIF,EACC,IACC,cAAc,KAAK,KAAK,GACxB,cAAc,KAAK,QAAQ,GAC3B,KAAK,cACL,KAAK,WACL,WACA,KAAK,IAAI,cACT,KAAK,IAAI,WACT,KAAK,oBACP,EAAE,SACJ,mBACA,mCACF;AAAA,IACF;AAAA,IACA,WAAW,QAAQ,MAAM,UAAU,QAAQ,SAAS;AAAA,MAClD,eACE,KAAK,GACF,MACC;AAAA;AAAA,sCAGF,EACC,IAAI,WAAW,KAAK,IAAI,cAAc,KAAK,IAAI,WAAW,KAAK,oBAAoB,EACnF,SACH,mBACA,mCACF;AAAA,IACF;AAAA,IAEA,MAAM,aAAa,CACjB,cACA,aACA,KAKA,SAGS;AAAA,MACT,IAAI,KAAK,yBAAyB,MAAM;AAAA,QACtC,IAAI;AAAA,UACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,sEAKF,EACC,IACC,WACA,cACA,aACA,IAAI,OAAO,cACX,IAAI,OAAO,WACX,IAAI,QACJ,IAAI,OAAO,cACX,IAAI,OAAO,WACX,cAAc,KAAK,KAAK,GACxB,KAAK,cACL,KAAK,SACP;AAAA,UACF,OAAO,OAAO;AAAA,UACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,YAClC,MAAM,qBAAqB,YAAY;AAAA,UACzC;AAAA,UACA,MAAM;AAAA;AAAA,QAER;AAAA,MACF;AAAA,MACA,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,sCAKF,EACC,IACC,IAAI,OAAO,cACX,IAAI,OAAO,WACX,cAAc,KAAK,KAAK,GACxB,KAAK,cACL,KAAK,WACL,WACA,cACA,aACA,KAAK,oBACP,EAAE,SACJ,mBACA,4BAA4B,YAAY,CAC1C;AAAA;AAAA,IAGF,WAAW,QAAQ,MAAM,UAAU,MAAM,MAAM,SAAS;AAAA,MACtD,WAAW,QAAQ,YAAW,KAAK,GAAG,GAAG,KAAK,KAAK,IAAI;AAAA,IACzD;AAAA,IACA,WAAW,QAAQ,MAAM,UAAU,MAAM,MAAM,SAAS;AAAA,MACtD,WACE,QACA,KAAK,UAAU,CAAC,KAAK,IAAI,OAAO,cAAc,KAAK,IAAI,OAAO,WAAW,KAAK,IAAI,MAAM,CAAC,GACzF,EAAE,QAAQ,KAAK,IAAI,QAAQ,QAAQ,KAAK,IAAI,QAAQ,QAAQ,KAAK,MAAM,OAAO,GAC9E,IACF;AAAA,IACF;AAAA,IAEA,MAAM,aAAa,CACjB,cACA,aACA,yBACS;AAAA,MACT,eACE,KAAK,GACF,MACC;AAAA;AAAA,sCAGF,EACC,IAAI,WAAW,cAAc,aAAa,oBAAoB,EAAE,SACnE,mBACA,4BAA4B,YAAY,CAC1C;AAAA;AAAA,IAEF,WAAW,QAAQ,MAAM,UAAU,MAAM,MAAM,SAAS;AAAA,MACtD,WAAW,QAAQ,YAAW,KAAK,GAAG,GAAG,KAAK,oBAAoB;AAAA,IACpE;AAAA,IACA,WAAW,QAAQ,MAAM,UAAU,MAAM,MAAM,SAAS;AAAA,MACtD,WACE,QACA,KAAK,UAAU,CAAC,KAAK,IAAI,OAAO,cAAc,KAAK,IAAI,OAAO,WAAW,KAAK,IAAI,MAAM,CAAC,GACzF,KAAK,oBACP;AAAA,IACF;AAAA;AAAA,EAGM,cAAc,CAAC,WAAmB,OAAuC;AAAA,IAC/E,WAAW,QAAQ,MAAM,UAAU,aAAa;AAAA,MAC9C,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,aAKF,EACC,IACC,WACA,KAAK,IAAI,OAAO,cAChB,KAAK,IAAI,OAAO,WAChB,KAAK,IAAI,QACT,KAAK,IAAI,OAAO,cAChB,KAAK,IAAI,OAAO,WAChB,KAAK,SAAS,YAChB,EAAE,SACJ,mBACA,iBAAiB,YAAW,KAAK,GAAG,YACtC;AAAA,IACF;AAAA,IACA,WAAW,QAAQ,MAAM,UAAU,eAAe;AAAA,MAChD,eACE,KAAK,GACF,MACC;AAAA;AAAA,sDAGF,EACC,IACC,WACA,KAAK,IAAI,cACT,KAAK,IAAI,WACT,KAAK,SAAS,SACd,KAAK,SAAS,YAChB,EAAE,SACJ,mBACA,mBAAmB,cAAa,KAAK,GAAG,YAC1C;AAAA,IACF;AAAA,IACA,WAAW,QAAQ,MAAM,UAAU;AAAA,MAAe,KAAK,YAAY,WAAW,IAAI;AAAA,IAClF,WAAW,QAAQ,MAAM,UAAU;AAAA,MAAa,KAAK,UAAU,WAAW,IAAI;AAAA;AAAA,EAGxE,WAAW,CAAC,WAAmB,MAAuC;AAAA,IAC5E,QAAQ,KAAK,aAAa;AAAA,IAC1B,IAAI,CAAC,SAAS,QAAQ;AAAA,MACpB,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,aAMF,EACC,IACC,WACA,IAAI,IAAI,cACR,IAAI,IAAI,WACR,cAAc,IAAI,UAAU,GAC5B,IAAI,WACJ,IAAI,WACJ,IAAI,SACJ,IAAI,YACN;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,kBAAkB,mBAAmB,cAAa,IAAI,GAAG,iBAAiB;AAAA,QAClF;AAAA,QACA,MAAM;AAAA;AAAA,MAER;AAAA,IACF;AAAA,IACA,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,cAAc,IAAI,UAAU,GAC5B,IAAI,WACJ,IAAI,WACJ,IAAI,SACJ,IAAI,cACJ,WACA,IAAI,IAAI,cACR,IAAI,IAAI,WACR,SAAS,SACT,SAAS,YACX,EAAE,SACJ,mBACA,mBAAmB,cAAa,IAAI,GAAG,YACzC;AAAA;AAAA,EAGM,SAAS,CAAC,WAAmB,MAAqC;AAAA,IACxE,QAAQ,KAAK,aAAa;AAAA,IAC1B,IAAI,CAAC,SAAS,QAAQ;AAAA,MACpB,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,aAMF,EACC,IACC,WACA,IAAI,IAAI,OAAO,cACf,IAAI,IAAI,OAAO,WACf,IAAI,IAAI,QACR,IAAI,IAAI,OAAO,cACf,IAAI,IAAI,OAAO,WACf,IAAI,eAAe,YAAY,OAAO,cAAc,IAAI,UAAU,GAClE,IAAI,WACJ,IAAI,WACJ,IAAI,YACN;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,kBAAkB,iBAAiB,YAAW,IAAI,GAAG,iBAAiB;AAAA,QAC9E;AAAA,QACA,MAAM;AAAA;AAAA,MAER;AAAA,IACF;AAAA,IACA,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,IAAI,eAAe,YAAY,OAAO,cAAc,IAAI,UAAU,GAClE,IAAI,WACJ,IAAI,WACJ,IAAI,cACJ,WACA,IAAI,IAAI,OAAO,cACf,IAAI,IAAI,OAAO,WACf,IAAI,IAAI,QACR,IAAI,IAAI,OAAO,cACf,IAAI,IAAI,OAAO,WACf,SAAS,YACX,EAAE,SACJ,mBACA,iBAAiB,YAAW,IAAI,GAAG,YACrC;AAAA;AAAA,EAGM,eAAe,CAAC,WAAmB,OAAuC;AAAA,IAChF,WAAW,QAAQ,MAAM,WAAW,cAAc;AAAA,MAChD,QAAQ,OAAO,aAAa;AAAA,MAC5B,IAAI,SAAS,iBAAiB,MAAM;AAAA,QAClC,IAAI;AAAA,UACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,eAMF,EACC,IACC,WACA,MAAM,OAAO,OAAO,cACpB,MAAM,OAAO,OAAO,WACpB,MAAM,OAAO,YACb,cAAc,MAAM,KAAK,GACzB,MAAM,QAAQ,MACd,MAAM,IACN,MAAM,YACR;AAAA,UACF,OAAO,OAAO;AAAA,UACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,YAClC,MAAM,IAAI,8BACR,oBACA,mBAAmB,kBAAkB,MAAM,QAAQ,MAAM,EAAE,YAC7D;AAAA,UACF;AAAA,UACA,MAAM;AAAA;AAAA,MAEV,EAAO;AAAA,QACL,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,eAMF,EACC,IACC,cAAc,MAAM,KAAK,GACzB,MAAM,QAAQ,MACd,MAAM,cACN,WACA,MAAM,OAAO,OAAO,cACpB,MAAM,OAAO,OAAO,WACpB,MAAM,OAAO,YACb,MAAM,IACN,SAAS,YACX,EAAE,SACJ,oBACA,mBAAmB,kBAAkB,MAAM,QAAQ,MAAM,EAAE,YAC7D;AAAA;AAAA,IAEJ;AAAA;AAAA,EAGM,WAAW,CAAC,WAAmB,UAAkB,OAAuC;AAAA,IAC9F,MAAM,SAAS,KAAK,GAAG,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOF;AAAA,IACA,WAAW,QAAQ,MAAM,QAAQ;AAAA,MAC/B,gBAAgB,KAAK,aAAa,oBAAoB;AAAA,MACtD,gBAAgB,KAAK,WAAW,kBAAkB;AAAA,MAClD,IAAI;AAAA,QACF,OAAO,IACL,WACA,KAAK,SAAS,IACd,UACA,KAAK,SAAS,eACd,cAAc,KAAK,QAAQ,GAC3B,KAAK,aACL,KAAK,SACP;AAAA,QACA,OAAO,OAAO;AAAA,QACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,kBAAkB,2BAA2B,KAAK,SAAS,MAAM;AAAA,QACzE;AAAA,QACA,MAAM;AAAA;AAAA,IAEV;AAAA;AAEJ;;;AJlZO,MAAM,qCAA+E;AAAA,EAKvE;AAAA,EAJF;AAAA,EACA;AAAA,EAEjB,WAAW,CACQ,IACjB,SACA;AAAA,IAFiB;AAAA,IAGjB,KAAK,WAAW,IAAI,8BAA8B,IAAI,OAAO;AAAA,IAC7D,KAAK,SAAS,IAAI,4BAA4B,EAAE;AAAA;AAAA,EAGlD,mBAAmB,CAAC,SAAiC,WAAmB,UAAyB;AAAA,IAC/F,MAAM,SAAS,KAAK,SAAS,QAAQ,OAAO;AAAA,IAC5C,IACE,OAAO,OAAO,OAAO,cAAc,aAClC,aAAa,aAAa,OAAO,OAAO,OAAO,OAAO,UACvD;AAAA,MACA,MAAM,IAAI,gCACR,kEACF;AAAA,IACF;AAAA;AAAA,OAGI,MAAK,CAAC,OAAmE;AAAA,IAC7E,4BAA4B,KAAK;AAAA,IACjC,MAAM,UAAU,KAAK,SAAS,OAAO,KAAK;AAAA,IAC1C,IAAI;AAAA,MACF,KAAK,mBAAmB,KAAK;AAAA,MAC7B,MAAM,SAAS,IAAI,iCAAiC,KAAK,IAAI,MAAM,OAAO,SAAS;AAAA,MACnF,WAAW,YAAY,MAAM,SAAS;AAAA,QACpC,KAAK,aAAa,UAAU,MAAM,OAAO,SAAS;AAAA,MACpD,WAAW,YAAY,MAAM,SAAS,SAAS;AAAA,QAC7C,6BAA6B,OAAO,wBAAwB,SAAS,GAAG,GAAG,QAAQ;AAAA,MACrF;AAAA,MACA,WAAW,YAAY,MAAM,SAAS,OAAO;AAAA,QAC3C,2BAA2B,OAAO,wBAAwB,SAAS,GAAG,GAAG,QAAQ;AAAA,MACnF;AAAA,MACA,MAAM,qBAAqB,OAAO,mBAAmB,MAAM,SAAS,UAAU;AAAA,MAC9E,YAAY,OAAO,aAAa,MAAM,SAAS,WAAW,QAAQ,GAAG;AAAA,QACnE,gCAAgC,mBAAmB,QAAQ,aAAa,QAAQ;AAAA,MAClF;AAAA,MACA,WAAW,YAAY,MAAM,SAAS,QAAQ;AAAA,QAC5C,MAAM,QAAQ,OAAO,WAAW,SAAS,QAAQ,SAAS,EAAE;AAAA,QAC5D,KAAK,OAAO,gBAAgB,UAAU,SAAS,cAAc;AAAA,UAC3D,MAAM,IAAI,8BACR,oBACA,mBAAmB,mBAAkB,SAAS,QAAQ,SAAS,EAAE,YACnE;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,QAAQ,cAAc;AAAA,MAC7B,OAAO,OAAO;AAAA,MACd,KAAK,SAAS,QAAQ,OAAO;AAAA,MAC7B,MAAM;AAAA;AAAA;AAAA,SAIH,WAAW,CAChB,OACyC;AAAA,IACzC,MAAM,UAAU,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,IACnD,eAAe,MAAM,QAAQ;AAAA,IAC7B,MAAM,SAAS,IAAI,iCAAiC,KAAK,IAAI,QAAQ,OAAO,OAAO,SAAS;AAAA,IAC5F,iBAAiB,WAAW,MAAM,UAAU;AAAA,MAC1C,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,MACnC,MAAM,UAAU,aAAa,QAAQ,SAAS,eAAc,gBAAgB;AAAA,MAC5E,SAAS,SAAS,EAAG,SAAS,QAAQ,QAAQ,UAAU,MAAM,UAAU;AAAA,QACtE,MAAM,OAAO,OAAO,aAAa,QAAQ,MAAM,QAAQ,SAAS,MAAM,QAAQ,CAAC;AAAA,QAC/E,MAAM,EAAE,SAAS,MAAM,OAAO,CAAC,GAAG,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,MAC/D;AAAA,MACA,MAAM,QAAQ,aAAa,QAAQ,OAAO,aAAY,cAAc;AAAA,MACpE,SAAS,SAAS,EAAG,SAAS,MAAM,QAAQ,UAAU,MAAM,UAAU;AAAA,QACpE,MAAM,OAAO,OAAO,WAAW,MAAM,MAAM,QAAQ,SAAS,MAAM,QAAQ,CAAC;AAAA,QAC3E,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,MAAM,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,MAC/D;AAAA,MACA,WAAW,QAAQ,OAAO,cAAc,QAAQ,iBAAiB,MAAM,QAAQ,GAAG;AAAA,QAChF,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,QACnC,MAAM;AAAA,UACJ,SAAS,CAAC;AAAA,UACV,OAAO,OAAO,WAAW,IAAI;AAAA,UAC7B,YAAY,CAAC;AAAA,UACb,QAAQ,CAAC;AAAA,QACX;AAAA,MACF;AAAA,MACA,MAAM,SAAS,aACb,QAAQ,YACR,CAAC,UACC,KAAK,UAAU,CAAC,MAAM,OAAO,cAAc,MAAM,OAAO,WAAW,MAAM,MAAM,CAAC,GAClF,CAAC,UAAU,kBAAiB,MAAM,QAAQ,MAAM,MAAM,CACxD;AAAA,MACA,SAAS,SAAS,EAAG,SAAS,OAAO,QAAQ,UAAU,MAAM,UAAU;AAAA,QACrE,MAAM;AAAA,UACJ,SAAS,CAAC;AAAA,UACV,OAAO,CAAC;AAAA,UACR,YAAY,OAAO,eAAe,OAAO,MAAM,QAAQ,SAAS,MAAM,QAAQ,CAAC;AAAA,UAC/E,QAAQ,CAAC;AAAA,QACX;AAAA,MACF;AAAA,MACA,MAAM,SAAS,aACb,QAAQ,QACR,CAAC,UAAU,mBAAkB,MAAM,QAAQ,MAAM,EAAE,GACnD,CAAC,UAAU,uBAAsB,MAAM,QAAQ,MAAM,EAAE,CACzD;AAAA,MACA,SAAS,SAAS,EAAG,SAAS,OAAO,QAAQ,UAAU,MAAM,UAAU;AAAA,QACrE,MAAM,OAAO,OAAO,YAAY,OAAO,MAAM,QAAQ,SAAS,MAAM,QAAQ,CAAC;AAAA,QAC7E,IAAI,KAAK,SAAS;AAAA,UAAG,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,GAAG,YAAY,CAAC,GAAG,QAAQ,KAAK;AAAA,MACpF;AAAA,IACF;AAAA;AAAA,SAGK,4BAA4B,CACjC,OAC2C;AAAA,IAC3C,MAAM,UAAU,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,IACnD,eAAe,MAAM,QAAQ;AAAA,IAC7B,MAAM,cAAc,KAAK,mBAAmB,SAAS,KAAK;AAAA,IAC1D,MAAM,SAAS,IAAI,iCAAiC,KAAK,IAAI,QAAQ,OAAO,OAAO,SAAS;AAAA,IAC5F,IAAI,MAAM,eAAe,UAAU;AAAA,MACjC,IAAI,YAAY,mBAAmB,UAAU;AAAA,QAC3C,MAAM,IAAI,8BACR,0BACA,yDACF;AAAA,MACF;AAAA,MACA,IAAI,YAAY,qBAAqB;AAAA,QACnC,MAAM,IAAI,8BACR,mBACA,iEACF;AAAA,MACF;AAAA,MACA,YAAY,sBAAsB;AAAA,MAClC,WAAW,cAAc,OAAO,sBAAsB;AAAA,QACpD,WAAW,QAAQ;AAAA,QACnB,UAAU,YAAY;AAAA,QACtB,4BAA4B,YAAY;AAAA,QACxC,2BAA2B,YAAY;AAAA,QACvC,aAAa,YAAY;AAAA,QACzB,MAAM;AAAA,QACN,UAAU,MAAM;AAAA,MAClB,CAAC,GAAG;AAAA,QACF,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,QACnC,MAAM,OAAO,WAAW,IAAI,CAAC,aAAa;AAAA,UACxC,IAAI,SAAS,SAAS,UAAU;AAAA,YAC9B,oBAAmB,8CAA8C;AAAA,UACnE;AAAA,UACA,OAAO,SAAS;AAAA,SACjB;AAAA,QACD,MAAM,UAAU,OAAO,wBACrB,YAAY,UACZ,YAAY,4BACZ,IACF;AAAA,QACA,MAAM,EAAE,SAAS,OAAO,CAAC,EAAE;AAAA,MAC7B;AAAA,MACA,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,MACnC,YAAY,wBAAwB;AAAA,MACpC;AAAA,IACF;AAAA,IAEA,IAAI,YAAY,mBAAmB,YAAY,CAAC,YAAY,uBAAuB;AAAA,MACjF,MAAM,IAAI,8BACR,mBACA,iFACF;AAAA,IACF;AAAA,IACA,IAAI,YAAY,mBAAmB;AAAA,MACjC,MAAM,IAAI,8BACR,mBACA,+DACF;AAAA,IACF;AAAA,IACA,YAAY,oBAAoB;AAAA,IAChC,MAAM,qBAAqB;AAAA,MACzB,YAAY;AAAA,MACZ,GAAI,YAAY,4BAA4B,CAAC,YAAY,yBAAyB,IAAI,CAAC;AAAA,IACzF;AAAA,IACA,WAAW,cAAc,OAAO,sBAAsB;AAAA,MACpD,WAAW,QAAQ;AAAA,MACnB,UAAU,YAAY;AAAA,MACtB,4BAA4B,YAAY;AAAA,MACxC,2BAA2B,YAAY;AAAA,MACvC,aAAa,YAAY;AAAA,MACzB,MAAM;AAAA,MACN,UAAU,MAAM;AAAA,IAClB,CAAC,GAAG;AAAA,MACF,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,MACnC,MAAM,iBAAiB,WAAW,IAAI,CAAC,aAAa;AAAA,QAClD,IAAI,SAAS,SAAS,QAAQ;AAAA,UAC5B,oBAAmB,+CAA+C;AAAA,QACpE;AAAA,QACA,OAAO;AAAA,OACR;AAAA,MACD,MAAM,QAAQ,OAAO,sBACnB,YAAY,UACZ,YAAY,4BACZ,oBACA,gBACA,YAAY,WACd;AAAA,MACA,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM;AAAA,IAC7B;AAAA,IACA,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,IACnC,YAAY,sBAAsB;AAAA;AAAA,OAG9B,UAAS,CAAC,OAAqD;AAAA,IACnE,KAAK,SAAS,MAAM,KAAK;AAAA,IACzB,MAAM,qBAAqB;AAAA;AAAA,EAG7B,UAAU,CAAC,OAA+E;AAAA,IACxF,eAAe,MAAM,QAAQ;AAAA,IAC7B,OAAO,KAAK,SAAS,OAAO,KAAK;AAAA;AAAA,OAG7B,oBAAmB,CACvB,OACoD;AAAA,IACpD,MAAM,UAAU,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,IACnD,OAAO,KAAK,SAAS,oBAAoB,SAAS,MAAM,IAAI;AAAA;AAAA,OAGxD,WAAU,CAAC,OAAsD;AAAA,IACrE,MAAM,UAAU,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,IACnD,QAAQ,WAAW,QAAQ;AAAA,IAC3B,4BAA4B,MAAM,OAAO,MAAM;AAAA,IAC/C,MAAM,WAAW,KAAK,SAAS,qBAAqB,SAAS,MAAM,KAAK;AAAA,IACxE,KAAK,GAAG,IAAI,qCAAqC;AAAA,IACjD,IAAI;AAAA,MACF,KAAK,OAAO,MAAM,OAAO,WAAW,OAAO,IAAI,MAAM,KAAK;AAAA,MAC1D,KAAK,GAAG,IAAI,6CAA6C;AAAA,MACzD,KAAK,SAAS,oBAAoB,SAAS,QAAQ;AAAA,MACnD,OAAO,OAAO;AAAA,MACd,KAAK,GAAG,IAAI,iDAAiD;AAAA,MAC7D,KAAK,GAAG,IAAI,6CAA6C;AAAA,MACzD,MAAM;AAAA;AAAA,IAER,MAAM,qBAAqB;AAAA;AAAA,OAGvB,SAAQ,CAAC,OAA0E;AAAA,IACvF,MAAM,UAAU,KAAK,SAAS,QAAQ,MAAM,OAAO;AAAA,IACnD,KAAK,mBAAmB,QAAQ,MAAM;AAAA,IACtC,MAAM,KAAK,mBAAmB,SAAS,KAAK;AAAA,IAC5C,WAAW,cAAc,MAAM,aAAa,mBAAmB;AAAA,MAC7D,KAAK,eAAe,SAAS,UAAU;AAAA,IACzC;AAAA,IACA,MAAM,SAAS,KAAK,aAAa,QAAQ,QAAQ,KAAK;AAAA,IACtD,KAAK,SAAS,QAAQ,OAAO;AAAA,IAC7B,OAAO,EAAE,QAAQ,OAAO;AAAA;AAAA,EAG1B,kBAAkB,GAAS;AAAA,IACzB,KAAK,SAAS,cAAc;AAAA;AAAA,EAGtB,kBAAkB,CACxB,SACA,OAC+D;AAAA,IAC/D,IAAI,QAAQ,aAAa;AAAA,MACvB,IACE,QAAQ,YAAY,aAAa,MAAM,OAAO,gBAC9C,QAAQ,YAAY,+BAA+B,MAAM,4BACzD;AAAA,QACA,MAAM,IAAI,8BACR,0BACA,iEACF;AAAA,MACF;AAAA,MACA,OAAO,QAAQ;AAAA,IACjB;AAAA,IACA,MAAM,YAAY,QAAQ,OAAO,OAAO;AAAA,IACxC,MAAM,YAAY,KAAK,UACrB,WACA,MAAM,OAAO,cACb,MAAM,0BACR;AAAA,IACA,IAAI,CAAC,aAAa,UAAU,WAAW,WAAW,UAAU,oBAAoB,MAAM;AAAA,MACpF,MAAM,IAAI,8BACR,0BACA,qCAAqC,MAAM,yDAC7C;AAAA,IACF;AAAA,IACA,0BAA0B,KAAK,IAAI;AAAA,MACjC;AAAA,MACA,UAAU,MAAM,OAAO;AAAA,MACvB,iBAAiB,UAAU;AAAA,MAC3B,gBAAgB,UAAU;AAAA,IAC5B,CAAC;AAAA,IACD,MAAM,WAAW,KAAK,gBAAgB,WAAW,MAAM,OAAO,YAAY;AAAA,IAC1E,IACE,UAAU,aAAa,iBACtB,aACE,SAAS,aAAa,UAAU,YAC/B,SAAS,oBAAoB,UAAU,kBAC3C;AAAA,MACA,MAAM,IAAI,8BACR,0BACA,gFACF;AAAA,IACF;AAAA,IACA,QAAQ,cAAc;AAAA,MACpB,UAAU,MAAM,OAAO;AAAA,MACvB,4BAA4B,MAAM;AAAA,MAClC,2BAA2B,UAAU,sBAAsB;AAAA,MAC3D,aAAa,UAAU,4BAA4B;AAAA,MACnD,gBAAgB,UAAU;AAAA,MAC1B,qBAAqB;AAAA,MACrB,uBAAuB;AAAA,MACvB,mBAAmB;AAAA,MACnB,qBAAqB;AAAA,IACvB;AAAA,IACA,OAAO,QAAQ;AAAA;AAAA,EAGT,kBAAkB,CAAC,QAAyC;AAAA,IAClE,MAAM,SAAS,cAAc,OAAO,OAAO,MAAM;AAAA,IACjD,MAAM,YAAY,KAAK,GACpB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAeF,EACC,IACC,OAAO,OAAO,IACd,OAAO,OAAO,gBACd,OAAO,OAAO,WACd,OAAO,OAAO,IACd,OAAO,OAAO,gBACd,OAAO,OACP,OAAO,MACP,OAAO,OACP,OAAO,cACP,OAAO,YACT;AAAA,IACF,IAAI,CAAC;AAAA,MAAW;AAAA,IAChB,IAAI,UAAU,cAAc,UAAU;AAAA,MACpC,MAAM,IAAI,8BACR,mBACA,6DACF;AAAA,IACF;AAAA,IACA,MAAM,IAAI,8BACR,eACA,UAAU,cAAc,OACpB,oBAAoB,OAAO,OAAO,wBAClC,0CACN;AAAA;AAAA,EAGM,YAAY,CAClB,UACA,WACM;AAAA,IACN,MAAM,SAAS,KAAK,gBAAgB,WAAW,SAAS,OAAO,YAAY;AAAA,IAC3E,KACG,QAAQ,sBAAsB,UAAU,SAAS,4BACjD,QAAQ,kBAAkB,UAAU,SAAS,cAC9C;AAAA,MACA,MAAM,IAAI,8BACR,oBACA,WAAW,SAAS,OAAO,wBAC7B;AAAA,IACF;AAAA;AAAA,OAGY,mBAAkB,CAC9B,SACA,OACe;AAAA,IACf,QAAQ,WAAW,QAAQ;AAAA,IAC3B,QAAQ,WAAW,MAAM;AAAA,IACzB,6CAA6C,SAAS,KAAK;AAAA,IAC3D,MAAM,aAAa,KAAK,SAAS,WAAW,OAAO;AAAA,IACnD,oCAAoC,SAAS,UAAU;AAAA,IACvD,KAAK,uBAAuB,OAAO;AAAA,IACnC,MAAM,qBAAqB;AAAA,IAC3B,MAAM,aAAa,WAAW;AAAA,IAC9B,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA,SAIF,EACC,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAKlC,IACE,OAAO,UAAU,cAChB,aAAa,MAAM,OAAO,YAAY,KAAK,OAAO,YAAY,aAAa,IAC5E;AAAA,MACA,oBAAmB,qDAAqD;AAAA,IAC1E;AAAA,IACA,MAAM,qBAAqB;AAAA,IAE3B,IAAI,OAAO,OAAO,SAAS,aAAa;AAAA,MACtC,MAAM,UAAU,KAAK,SAAS,iBAAiB,SAAS,OAAO,OAAO,UAAU;AAAA,MAChF,MAAM,qBAAqB;AAAA,MAC3B,IAAI,QAAQ,qBAAqB,OAAO,OAAO,YAAY;AAAA,QACzD,oBACE,2EACF;AAAA,MACF;AAAA,MACA,IAAI,OAAO,SAAS,eAAe,CAAC,WAAW,QAAQ,QAAQ,MAAM,GAAG;AAAA,QACtE,oBAAmB,+DAA+D;AAAA,MACpF;AAAA,IACF;AAAA,IACA,IAAI,OAAO,OAAO,SAAS,cAAc;AAAA,MACvC,IAAI,OAAO,SAAS;AAAA,QAAc;AAAA,MAClC,KAAK,SAAS,6BAA6B,OAAO;AAAA,MAClD,MAAM,qBAAqB;AAAA,MAC3B,MAAM,SAAS,KAAK,SAAS,iBAAiB,OAAO;AAAA,MACrD,MAAM,qBAAqB;AAAA,MAC3B,IAAI,CAAC,WAAW,OAAO,QAAQ,MAAM,GAAG;AAAA,QACtC,oBAAmB,gEAAgE;AAAA,MACrF;AAAA,IACF;AAAA;AAAA,EAGM,sBAAsB,CAAC,SAAkD;AAAA,IAC/E,MAAM,YAAY,KAAK,GACpB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAWW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA4Bb,EACC,IAAI,QAAQ,IAAI,QAAQ,OAAO,OAAO,SAAS;AAAA,IAGlD,IAAI,WAAW,WAAW,aAAa;AAAA,MACrC,oBAAmB,4DAA4D;AAAA,IACjF;AAAA,IACA,IAAI,WAAW;AAAA,MACb,oBACE,iFACF;AAAA,IACF;AAAA;AAAA,EAGM,cAAc,CACpB,SACA,YACM;AAAA,IACN,QAAQ,WAAW,QAAQ;AAAA,IAC3B,kCAAkC,SAAS,UAAU;AAAA,IACrD,MAAM,YAAY,KAAK,UACrB,OAAO,WACP,WAAW,OAAO,cAClB,WAAW,iBACb;AAAA,IACA,IAAI,CAAC,aAAa,UAAU,WAAW,WAAW,UAAU,oBAAoB,MAAM;AAAA,MACpF,MAAM,IAAI,8BACR,0BACA,yDACF;AAAA,IACF;AAAA,IACA,0BAA0B,KAAK,IAAI;AAAA,MACjC,WAAW,OAAO;AAAA,MAClB,UAAU,WAAW,OAAO;AAAA,MAC5B,iBAAiB,WAAW,UAAU;AAAA,MACtC,gBAAgB,WAAW,UAAU;AAAA,IACvC,CAAC;AAAA,IACD,IACE,UAAU,sBAAsB,WAAW,UAAU,mBACrD,UAAU,oBAAoB,WAAW,UAAU,kBACnD,UAAU,oBAAoB,WAAW,kBACzC,UAAU,aAAa,WAAW,YAClC,UAAU,eAAe,WAAW,eAAe,aACnD,UAAU,uBAAuB,WAAW,eAAe,aAC3D,UAAU,+BAA+B,WAAW,eAAe,aACnE,UAAU,wBAAwB,WAAW,sBAC7C,UAAU,mBAAmB,WAAW,iBACxC,UAAU,sBAAsB,WAAW,oBAC3C,UAAU,aAAa,QACvB,WAAW,YAAY,UAAU,UACjC;AAAA,MACA,oBAAmB,gEAAgE;AAAA,IACrF;AAAA,IACA,KAAK,aAAa,WAAW,UAAU,OAAO,SAAS;AAAA,IACvD,oBAAoB,KAAK,IAAI,OAAO,WAAW,WAAW,UAAU;AAAA,IACpE,MAAM,WAAW,KAAK,gBAAgB,OAAO,WAAW,WAAW,OAAO,YAAY;AAAA,IACtF,IAAI,UAAU;AAAA,MACZ,6BACE;AAAA,QACE,WAAW,SAAS;AAAA,QACpB,WAAW,SAAS;AAAA,QACpB,WAAW,SAAS;AAAA,MACtB,GACA,WAAW,gBACX,mBACF;AAAA,MACA,IAAI,WAAW,YAAY,SAAS,YAAY;AAAA,QAC9C,oBAAmB,qEAAqE;AAAA,MAC1F;AAAA,MACA,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,aAMF,EACC,IACC,WAAW,WACX,WAAW,WACX,OAAO,WACP,WAAW,OAAO,cAClB,SAAS,oBACT,WAAW,SAAS,YACtB,EAAE,SACJ,oBACA,WAAW,WAAW,OAAO,wBAC/B;AAAA,IACF;AAAA,IACA,eACE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,WAAW,WACX,WAAW,cACX,WAAW,WACX,OAAO,WACP,WAAW,OAAO,cAClB,WAAW,mBACX,WAAW,UAAU,cACvB,EAAE,SACJ,0BACA,sCACF;AAAA;AAAA,EAGM,YAAY,CAClB,QACA,OACsB;AAAA,IACtB,QAAQ,WAAW;AAAA,IACnB,MAAM,SAAS,cAAc,OAAO,MAAM;AAAA,IAC1C,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAUF,EACC,IACC,OAAO,WACP,OAAO,IACP,OAAO,gBACP,OAAO,aACP,OAAO,aACP,OAAO,MACP,OAAO,OACP,OAAO,cACP,cAAc,OAAO,MAAM,GAC3B,OAAO,gBAAgB,YAAY,OAAO,cAAc,OAAO,WAAW,GAC1E,cAAc,OAAO,QAAQ,GAC7B,OAAO,kBACP,OAAO,sBAAsB,MAC7B,OAAO,iBAAiB,MACxB,cAAc,OAAO,MAAM,GAC3B,cAAc,MAAM,aAAa,MAAM,GACvC,OAAO,WACT;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,wBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,8BACR,eACA,0CACF;AAAA,MACF;AAAA,MACA,MAAM;AAAA;AAAA,IAER,MAAM,MAAM,KAAK,GACd,MAAM,gEAAgE,EACtE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAClC,OAAO,aAAa,GAAG;AAAA;AAAA,EAGjB,eAAe,CAAC,WAAmB,UAAkD;AAAA,IAC3F,OAAO,KAAK,GACT,MACC;AAAA,sEAEF,EACC,IAAI,WAAW,QAAQ;AAAA;AAAA,EAGpB,SAAS,CACf,WACA,UACA,mBACgC;AAAA,IAChC,OAAO,KAAK,GACT,MACC;AAAA,2EAEF,EACC,IAAI,WAAW,UAAU,iBAAiB;AAAA;AAEjD;;;AKjuBA,iCAAS;AACT;AAAA,kCACE;AAAA,oCACA;AAAA;AAYF,0CAAS;AAUF,MAAM,4BAA6D;AAAA,EAErD;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,kBACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,MAAK,CAAC,OAA+E;AAAA,IACzF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,sBAAsB,MAAM,OAAO,uBAAuB;AAAA,MAC1D,MAAM,MAAM,gBAAgB,MAAM,KAAK,4BAA4B;AAAA,MACnE,MAAM,cAAc,gBAAgB,MAAM,gBAAgB,8BAA8B;AAAA,MACxF,eAAe,MAAM,SAAS,0BAA0B;AAAA,MACxD,IAAI,eAAe,KAAK;AAAA,QACtB,MAAM,IAAI,gCACR,iEACF;AAAA,MACF;AAAA,MAIA,MAAM,WAAW,KAAK,GACnB,MACC;AAAA;AAAA;AAAA;AAAA,mBAKF,EACC,IAAI,MAAM,WAAW,MAAM,KAAK,MAAM,KAAK,MAAM,QAAQ,CAAC;AAAA,MAC7D,IAAI,SAAS,WAAW;AAAA,QAAG,OAAO,CAAC;AAAA,MACnC,MAAM,WACJ,SAAS,UAAU,MAAM,QACrB,WACC,KAAK,GACH,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,yBAMF,EACC,IAAI,MAAM,WAAW,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK;AAAA,MAC/D,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,MAAM,SACN,MAAM,gBACN,KAAK,UAAU,SAAS,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,CACjD;AAAA,MACF,OAAO,KACJ,IAAI,CAAC,QAAQ,aAAa,GAAG,CAAC,EAC9B,KACC,CAAC,MAAM,UACL,KAAK,UAAU,cAAc,MAAM,SAAS,KAC5C,KAAK,SAAS,GAAG,cAAc,MAAM,SAAS,EAAE,CACpD,EACC,IAAI,CAAC,WAAW;AAAA,QACf,IAAI,OAAO,YAAY,QAAQ,OAAO,mBAAmB,MAAM;AAAA,UAC7D,MAAM,IAAI,8BACR,gBACA,mDACF;AAAA,QACF;AAAA,QACA,OAAO,KAAK,QAAQ,SAAS,OAAO,SAAS,gBAAgB,OAAO,eAAe;AAAA,OACpF;AAAA,KACJ;AAAA;AAAA,OAGG,cAAa,CAAC,OAAwD;AAAA,IAC1E,MAAM,KAAK,iBAAiB,MAAM;AAAA,MAChC,iBAAiB,KAAK;AAAA,MACtB,gBAAgB,MAAM,aAAa,6BAA6B;AAAA,MAChE,MAAM,MAAM,iBAAiB,MAAM,GAAG;AAAA,MACtC,MAAM,UAAU,KAAK,GAClB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAiBF,EACC,IACC,KAAK,UAAU,GAAG,GAClB,MAAM,WACN,MAAM,SACN,IAAI,QACJ,MAAM,aACN,MAAM,WACN,MAAM,OACR,EAAE;AAAA,MACJ,IAAI,YAAY,IAAI;AAAA,QAAQ,MAAM,cAAc;AAAA,KACjD;AAAA;AAAA,OAGG,WAAU,CAAC,OAA0D;AAAA,IACzE,MAAM,KAAK,iBAAiB,MAAM;AAAA,MAChC,iBAAiB,KAAK;AAAA,MACtB,gBAAgB,MAAM,aAAa,6BAA6B;AAAA,MAChE,MAAM,MAAM,iBAAiB,MAAM,GAAG;AAAA,MACtC,MAAM,UACJ,MAAM,YAAY,YACd,OACA,sBAAqB,MAAM,SAAS,8BAA6B;AAAA,MACvE,MAAM,UAAU,KAAK,GAClB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAkBF,EACC,IACC,KAAK,UAAU,GAAG,GAClB,MAAM,WACN,MAAM,SACN,IAAI,QACJ,MAAM,aACN,SACA,MAAM,WACN,MAAM,OACR,EAAE;AAAA,MACJ,IAAI,YAAY,IAAI;AAAA,QAAQ,MAAM,cAAc;AAAA,KACjD;AAAA;AAAA,OAGG,eAAc,CAAC,OAA2D;AAAA,IAC9E,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,sBAAsB,MAAM,OAAO,uBAAuB;AAAA,MAC1D,gBAAgB,MAAM,iBAAiB,8BAA8B;AAAA,MACrE,OAAO,KAAK,GACT,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WASF,EACC,IAAI,MAAM,WAAW,MAAM,iBAAiB,MAAM,KAAK,EAAE;AAAA,KAC7D;AAAA;AAAA,OAGG,UAAS,CAAC,OAAqE;AAAA,IACnF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,MAAM,UAAU,KAAK,GAClB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAQF,EACC,IAAI,MAAM,SAAS;AAAA,MAMtB,OAAO;AAAA,QACL,cAAc,QAAQ;AAAA,QACtB,iBAAiB,QAAQ;AAAA,QACzB,eAAe,QAAQ,kBAAkB;AAAA,QACzC,aAAa,QAAQ;AAAA,MACvB;AAAA,KACD;AAAA;AAEL;AAEA,SAAS,gBAAgB,CAAC,KAAkC;AAAA,EAC1D,MAAM,OAAO,IAAI;AAAA,EACjB,WAAW,MAAM,KAAK;AAAA,IACpB,eAAe,IAAI,0BAA0B;AAAA,IAC7C,IAAI,KAAK,IAAI,EAAE,GAAG;AAAA,MAChB,MAAM,IAAI,gCAA+B,8CAA8C,MAAM;AAAA,IAC/F;AAAA,IACA,KAAK,IAAI,EAAE;AAAA,EACb;AAAA,EACA,OAAO,CAAC,GAAG,IAAI;AAAA;AAGjB,SAAS,gBAAgB,CAAC,OAIjB;AAAA,EACP,eAAe,MAAM,WAAW,4BAA4B;AAAA,EAC5D,eAAe,MAAM,SAAS,0BAA0B;AAAA;AAG1D,SAAS,aAAa,GAAiC;AAAA,EACrD,OAAO,IAAI,8BAA6B,gBAAgB,uCAAuC;AAAA;;;AClQjG,2CAAS;AACT;AAAA,4BACE;AAAA,mCACA;AAAA,yBACA;AAAA;AAAA,+BAEA;AAAA,yBACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACIK,SAAS,4BAA4B,CAC1C,IACA,OAC6C;AAAA,EAC7C,IAAI,YAAY,MAAM;AAAA,EACtB,IAAI,cAAc;AAAA,EAClB,IAAI,0BAA0B;AAAA,EAC9B,MAAM,gBAAgB,GAAG,MAAM;AAAA;AAAA;AAAA;AAAA,GAI9B;AAAA,EACD,MAAM,aAAa,GAAG,MAAM;AAAA;AAAA;AAAA,wCAGU;AAAA,EACtC,MAAM,cAAc,GAAG,MAAM;AAAA,uEACwC;AAAA,EACrE,MAAM,iBAAiB,GAAG,MACxB,4EACF;AAAA,EACA,OAAO,YAAY,GAAG;AAAA,IACpB,MAAM,YAAY,cAAc,IAAI,MAAM,SAAS;AAAA,IACnD,IAAI,CAAC;AAAA,MAAW;AAAA,IAChB,MAAM,OAAO,WAAW,IAAI,UAAU,YAAY,SAAS,EAAE;AAAA,IAC7D,eAAe;AAAA,IACf,aAAa;AAAA,IACb,IAAI,cAAc;AAAA,MAAG;AAAA,IACrB,MAAM,QAAQ,YAAY,IAAI,UAAU,YAAY,SAAS,EAAE;AAAA,IAC/D,eAAe;AAAA,IACf,aAAa;AAAA,IACb,IAAI,cAAc;AAAA,MAAG;AAAA,IACrB,MAAM,WAAW,eAAe,IAAI,UAAU,UAAU,EAAE;AAAA,IAC1D,IAAI,aAAa;AAAA,MAAG;AAAA,IACpB,2BAA2B;AAAA,IAC3B,aAAa;AAAA,EACf;AAAA,EACA,OAAO,EAAE,aAAa,wBAAwB;AAAA;AAGzC,SAAS,qBAAqB,CACnC,IACA,OAC6C;AAAA,EAC7C,IAAI,YAAY,MAAM;AAAA,EACtB,MAAM,UAAU;AAAA,EAChB,IAAI,cAAc,GACf,MAAM;AAAA;AAAA;AAAA;AAAA,YAIC;AAAA;AAAA;AAAA,IAGR,EACC,IAAI,MAAM,WAAW,MAAM,gBAAgB,SAAS,EAAE;AAAA,EACzD,aAAa;AAAA,EACb,IAAI,YAAY,GAAG;AAAA,IACjB,MAAM,UAAU,GACb,MAAM;AAAA;AAAA;AAAA,cAGC;AAAA;AAAA;AAAA,MAGR,EACC,IAAI,MAAM,WAAW,MAAM,gBAAgB,SAAS,EAAE;AAAA,IACzD,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AAAA,EACA,MAAM,0BACJ,cAAc,IACV,IACA,GACG,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMb,EACO,IAAI,MAAM,WAAW,MAAM,gBAAgB,SAAS,EAAE;AAAA,EAC/D,OAAO,EAAE,aAAa,wBAAwB;AAAA;;;ADnCzC,MAAM,4BAA6D;AAAA,EAErD;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,kBACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,qBAAoB,CACxB,OAC+B;AAAA,IAC/B,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,iBAAiB,KAAK;AAAA,MACtB,KAAK,gBAAgB,OAAO,8BAA8B,KAAK,CAAC;AAAA,MAChE,MAAM,WAAW,KAAK,YACpB,MAAM,WACN,MAAM,OAAO,cACb,MAAM,iBACR;AAAA,MACA,IAAI,UAAU;AAAA,QACZ,IAAI,uBAAuB,aAAa,QAAQ,GAAG,KAAK;AAAA,UAAG,OAAO,aAAa,QAAQ;AAAA,QACvF,MAAM,eACJ,2BAA2B,MAAM,qEACnC;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,KAAK,GACpB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IAAI,MAAM,WAAW,MAAM,UAAU,eAAe;AAAA,MACvD,IAAI,WAAW;AAAA,QACb,MAAM,eACJ,mBAAmB,MAAM,UAAU,uGACrC;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAWF,EACC,IACC,MAAM,WACN,MAAM,OAAO,cACb,MAAM,mBACN,MAAM,UAAU,iBAChB,MAAM,gBACN,MAAM,UAAU,gBAChB,MAAM,eAAe,WACrB,MAAM,eAAe,WACrB,MAAM,eAAe,WACrB,MAAM,oBACN,MAAM,eACN,MAAM,kBACN,MAAM,WACN,MAAM,WACN,MAAM,MAAM,qBAAqB,MACjC,MAAM,MAAM,gBAAgB,IAC9B;AAAA,MACF,OAAO,aACL,KAAK,gBAAgB,MAAM,WAAW,MAAM,OAAO,cAAc,MAAM,iBAAiB,CAC1F;AAAA,KACD;AAAA;AAAA,OAGG,UAAS,CAAC,OAA6D;AAAA,IAC3E,MAAM,SAAS,MAAM,KAAK,iBAAiB,MAAM;AAAA,MAC/C,oBAAoB,KAAK;AAAA,MACzB,KAAK,gBAAgB,KAAK;AAAA,MAC1B,MAAM,WAAW,KAAK,gBACpB,MAAM,WACN,MAAM,OAAO,cACb,MAAM,iBACR;AAAA,MACA,2BAA2B,aAAa,QAAQ,GAAG,MAAM,SAAS;AAAA,MAClE,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,eACJ,2BAA2B,MAAM,0BAA0B,SAAS,iCACtE;AAAA,MACF;AAAA,MAEA,MAAM,OAAO,gBAAgB,SAAS,iBAAiB,MAAM,IAAI;AAAA,MACjE,MAAM,WAAW,KAAK,cAAc,UAAU,IAAI;AAAA,MAClD,QAAQ,SAAS,cAAc,yBAAyB,MAAM,QAAQ;AAAA,MACtE,iBAAiB,KAAK,IAAI,UAAU,KAAK;AAAA,MACzC,KAAK,gBAAgB,UAAU,OAAO;AAAA,MACtC,OAAO,EAAE,UAAU,QAAQ,QAAQ,UAAU;AAAA,KAC9C;AAAA,IACD,MAAM,qBAAqB;AAAA,IAC3B,OAAO;AAAA;AAAA,OAGH,UAAS,CAAC,OAA2E;AAAA,IACzF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,oBAAoB,KAAK;AAAA,MACzB,gBAAgB,MAAM,SAAS,kBAAkB,IAAI;AAAA,MACrD,yBAAyB,MAAM,WAAW,mBAAmB;AAAA,MAC7D,yBAAyB,MAAM,gBAAgB,wBAAwB;AAAA,MACvE,KAAK,gBAAgB,KAAK;AAAA,MAC1B,MAAM,WAAW,KAAK,gBACpB,MAAM,WACN,MAAM,OAAO,cACb,MAAM,iBACR;AAAA,MACA,2BAA2B,aAAa,QAAQ,GAAG,MAAM,SAAS;AAAA,MAClE,IAAI,SAAS,WAAW,SAAS;AAAA,QAC/B,IACE,SAAS,eAAe,MAAM,aAC9B,SAAS,oBAAoB,MAAM,kBACnC,SAAS,aAAa,MAAM,SAC5B;AAAA,UACA,OAAO,aAAa,QAAQ;AAAA,QAC9B;AAAA,QACA,MAAM,eACJ,2BAA2B,MAAM,oEACnC;AAAA,MACF;AAAA,MACA,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,eACJ,2BAA2B,MAAM,8CAA8C,SAAS,qBAC1F;AAAA,MACF;AAAA,MACA,IAAI,MAAM,UAAU,SAAS,YAAY;AAAA,QACvC,MAAM,IAAI,gCAA+B,iDAAiD;AAAA,MAC5F;AAAA,MACA,KAAK,iBAAiB,UAAU,MAAM,WAAW,MAAM,cAAc;AAAA,MACrE,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,WAMF,EACC,IACC,MAAM,WACN,MAAM,gBACN,MAAM,SACN,MAAM,SACN,MAAM,WACN,MAAM,OAAO,cACb,MAAM,mBACN,MAAM,UAAU,cAClB;AAAA,MACF,IAAI,OAAO,YAAY,GAAG;AAAA,QACxB,MAAM,eAAe,2BAA2B,MAAM,6BAA6B;AAAA,MACrF;AAAA,MACA,OAAO,aACL,KAAK,gBAAgB,MAAM,WAAW,MAAM,OAAO,cAAc,MAAM,iBAAiB,CAC1F;AAAA,KACD;AAAA;AAAA,OAGG,UAAS,CAAC,OAA2E;AAAA,IACzF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,uBAAuB,KAAK;AAAA,MAC5B,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA,WAIF,EACC,IAAI,MAAM,WAAW,MAAM,OAAO,YAAY;AAAA,MACjD,OAAO,MAAM,aAAa,GAAG,IAAI;AAAA,KAClC;AAAA;AAAA,OAGG,MAAK,CACT,OAC8C;AAAA,IAC9C,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,uBAAuB,KAAK;AAAA,MAC5B,wBAAwB,MAAM,UAAU,iBAAiB,MAAM,UAAU,cAAc;AAAA,MACvF,gBAAgB,MAAM,WAAW,oBAAoB,IAAI;AAAA,MACzD,KAAK,gBAAgB,KAAK;AAAA,MAC1B,MAAM,YAAY,KAAK,iBAAiB,KAAK;AAAA,MAC7C,IAAI,CAAC;AAAA,QAAW,OAAO;AAAA,MAEvB,MAAM,UAAU,KAAK,GAClB,MACC;AAAA;AAAA;AAAA;AAAA,WAKF,EACC,IACC,MAAM,UAAU,gBAChB,MAAM,WACN,UAAU,YACV,UAAU,WACV,UAAU,kBACZ,EAAE;AAAA,MACJ,IAAI,YAAY,GAAG;AAAA,QACjB,MAAM,eAAe,2BAA2B,UAAU,8BAA8B;AAAA,MAC1F;AAAA,MACA,MAAM,UAAU,KAAK,gBACnB,UAAU,YACV,UAAU,WACV,UAAU,kBACZ;AAAA,MACA,OAAO;AAAA,QACL,QAAQ,aAAa,OAAO;AAAA,QAC5B,sBACE,QAAQ,WAAW,UAAU,OAAO,QAAQ,UAAU,IAAI,KAAK,kBAAkB,OAAO;AAAA,MAC5F;AAAA,KACD;AAAA;AAAA,OAKG,QAAO,CAAC,OAAgF;AAAA,IAC5F,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,uBAAuB,KAAK;AAAA,MAC5B,wBAAwB,MAAM,UAAU,iBAAiB,MAAM,UAAU,cAAc;AAAA,MACvF,gBAAgB,MAAM,aAAa,sBAAsB,IAAI;AAAA,MAC7D,KAAK,gBAAgB,KAAK;AAAA,MAC1B,IAAI,MAAM,SAAS;AAAA,QAAa,OAAO,KAAK,iBAAiB,KAAK;AAAA,MAClE,MAAM,YAAY,KAAK,iBAAiB,KAAK;AAAA,MAC7C,OAAO,YAAY,KAAK,sBAAsB,WAAW,MAAM,WAAW,IAAI;AAAA,KAC/E;AAAA;AAAA,OAGG,gBAAe,CACnB,OACsD;AAAA,IACtD,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,oCAAoC;AAAA,MACpE,gBAAgB,MAAM,gBAAgB,kCAAkC,IAAI;AAAA,MAC5E,sBAAsB,MAAM,OAAO,+BAA+B;AAAA,MAClE,OAAO,sBAAsB,KAAK,IAAI,KAAK;AAAA,KAC5C;AAAA;AAAA,OAGG,eAAc,CAClB,OACsD;AAAA,IACtD,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,mCAAmC;AAAA,MACnE,sBAAsB,MAAM,OAAO,8BAA8B;AAAA,MACjE,OAAO,6BAA6B,KAAK,IAAI,KAAK;AAAA,KACnD;AAAA;AAAA,OAGG,kBAAiB,CACrB,OAC+C;AAAA,IAC/C,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,oCAAoC;AAAA,MACpE,MAAM,UAAU,KAAK,GAClB,MACC;AAAA;AAAA;AAAA;AAAA,WAKF,EACC,IAAI,MAAM,SAAS;AAAA,MAItB,OAAO;AAAA,QACL,OAAO,QAAQ;AAAA,QACf,kBAAkB,QAAQ;AAAA,MAC5B;AAAA,KACD;AAAA;AAAA,EAGK,gBAAgB,CACtB,OACsB;AAAA,IACtB,MAAM,WAAW,KAAK,gBACpB,MAAM,WACN,MAAM,OAAO,cACb,MAAM,iBACR;AAAA,IACA,IAAI,SAAS,WAAW,aAAa;AAAA,MACnC,IACE,SAAS,sBAAsB,MAAM,UAAU,mBAC/C,SAAS,gBAAgB,MAAM,aAC/B;AAAA,QACA,OAAO,aAAa,QAAQ;AAAA,MAC9B;AAAA,MACA,MAAM,eACJ,2BAA2B,MAAM,2EACnC;AAAA,IACF;AAAA,IACA,2BAA2B,aAAa,QAAQ,GAAG,MAAM,SAAS;AAAA,IAClE,OAAO,KAAK,sBAAsB,UAAU,MAAM,WAAW;AAAA;AAAA,EAIvD,gBAAgB,CAAC,OAIU;AAAA,IACjC,MAAM,aAAa,KAAK,GACrB,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,MAAM,WACN,MAAM,OAAO,cACb,MAAM,UAAU,eAClB;AAAA,IACF,IAAI,WAAW,SAAS,GAAG;AAAA,MACzB,MAAM,eACJ,mBAAmB,MAAM,UAAU,oEACrC;AAAA,IACF;AAAA,IACA,OAAO,WAAW,MAAM;AAAA;AAAA,EAGlB,iBAAiB,CAAC,UAA2C;AAAA,IACnE,MAAM,OAAO,KAAK,GACf,MACC,wFACF,EACC,IAAI,SAAS,UAAU;AAAA,IAG1B,OAAO,MAAM,WAAW;AAAA;AAAA,EAGlB,qBAAqB,CAC3B,UACA,aACsB;AAAA,IACtB,IACE,cAAc,SAAS,cACtB,SAAS,aAAa,QAAQ,cAAc,SAAS,UACtD;AAAA,MACA,MAAM,IAAI,gCACR,iEACF;AAAA,IACF;AAAA,IACA,MAAM,UAAU,KAAK,GAClB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,aACA,aACA,SAAS,YACT,SAAS,WACT,SAAS,kBACX,EAAE;AAAA,IACJ,IAAI,YAAY,GAAG;AAAA,MACjB,MAAM,eACJ,2BAA2B,SAAS,uDACtC;AAAA,IACF;AAAA,IAEA,OAAO,aACL,KAAK,gBAAgB,SAAS,YAAY,SAAS,WAAW,SAAS,kBAAkB,CAC3F;AAAA;AAAA,EAGM,gBAAgB,CACtB,UACA,WACA,gBACM;AAAA,IACN,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IAAI,SAAS,UAAU;AAAA,IAO1B,IACE,OAAO,eAAe,kBACtB,OAAO,UAAU,aACjB,OAAO,aAAa,aACnB,YAAY,MAAM,OAAO,gBAAgB,KAAK,OAAO,gBAAgB,YAAY,IAClF;AAAA,MACA,MAAM,IAAI,gCACR,mEACF;AAAA,IACF;AAAA,IACA,yBAAyB,KAAK,IAAI,QAAQ;AAAA,IAE1C,MAAM,UAAU,KAAK,GAClB,MACC,SAAS,oBAAoB,SACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAgBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAwBN,EACC,IAAI,SAAS,UAAU;AAAA,IAC1B,IAAI,SAAS;AAAA,MACX,MAAM,IAAI,gCACR,SAAS,oBAAoB,SACzB,8EACA,iHACN;AAAA,IACF;AAAA;AAAA,EAIM,aAAa,CACnB,UACA,MAC2B;AAAA,IAC3B,IAAI,KAAK,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAC/B,MAAM,WAAW,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;AAAA,IAC5D,MAAM,WAAW,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,cAAc,CAAC,CAAC;AAAA,IAEvE,MAAM,WAAW,KAAK,GACnB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAUW;AAAA;AAAA;AAAA;AAAA,SAKb,EACC,IACC,SAAS,YACT,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,QAAQ,CACzB;AAAA,IACF,OAAO,SAAS,IAAI,CAAC,QAAQ,eAAe,gBAAgB,GAAG,CAAC,CAAC;AAAA;AAAA,EAG3D,eAAe,CACrB,UACA,MACM;AAAA,IACN,IAAI,KAAK,WAAW;AAAA,MAAG;AAAA,IACvB,MAAM,UAAU,KAAK,IAAI,GAAG,SAAS,UAAU;AAAA,MAC7C,MAAM,SAAS,cAAc,IAAI,SAAS;AAAA,MAC1C,OAAO;AAAA,QACL;AAAA,QACA,YAAY,IAAI,UAAU;AAAA,QAC1B,cAAc,OAAO;AAAA,QACrB,WAAW,OAAO;AAAA,QAClB,cAAc,OAAO;AAAA,QACrB,iBAAiB,OAAO;AAAA,QACxB,QAAQ,OAAO;AAAA,QACf,cAAc,OAAO;AAAA,QACrB,iBAAiB,OAAO;AAAA,QACxB,SAAS,uBAAuB,IAAI,SAAS;AAAA,MAC/C;AAAA,KACD;AAAA,IACD,MAAM,WAAW,KAAK,GACnB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAeF,EACC,IAAI,cAAc,OAAO,GAAG,SAAS,UAAU,EAAE;AAAA,IACpD,IAAI,aAAa,KAAK,QAAQ;AAAA,MAC5B,MAAM,eAAe,wDAAwD;AAAA,IAC/E;AAAA;AAAA,EAGM,eAAe,CACrB,OAKA,UACM;AAAA,IACN,0BAA0B,KAAK,IAAI;AAAA,MACjC,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM,OAAO;AAAA,MACvB,iBAAiB,MAAM,UAAU;AAAA,MACjC,gBAAgB,MAAM,UAAU;AAAA,SAC5B,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,IACjC,CAAC;AAAA;AAAA,EAGK,WAAW,CACjB,WACA,UACA,mBACgC;AAAA,IAChC,OAAO,KAAK,GACT,MACC;AAAA;AAAA;AAAA,SAIF,EACC,IAAI,WAAW,UAAU,iBAAiB;AAAA;AAAA,EAGvC,eAAe,CACrB,WACA,UACA,mBACyB;AAAA,IACzB,MAAM,MAAM,KAAK,YAAY,WAAW,UAAU,iBAAiB;AAAA,IACnE,IAAI,CAAC;AAAA,MAAK,MAAM,eAAe,2BAA2B,oCAAoC;AAAA,IAC9F,OAAO;AAAA;AAEX;;;AE5oBA,6BAAS;AACT;AAAA;AAAA;AAAA;AAiBO,MAAM,4BAAqE;AAAA,EAE7D;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,IACA,KACA,eACjB;AAAA,IAHiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,OAEb,SAAQ,CAAC,OAAiE;AAAA,IAC9E,KAAK,cAAc,MAAM,SAAS,MAAM,SAAS;AAAA,IACjD,WAAW,OAAO,MAAM;AAAA,MACtB,KAAK,GACF,MACC,mGACF,EACC,IAAI,MAAM,WAAW,IAAI,cAAc,IAAI,SAAS;AAAA,IACzD,MAAM,SACJ,KAAK,GAAG,MAAM;AAAA;AAAA,6RAEyQ;AAAA,IACzR,aAAa,YAAY,aAAa,MAAM;AAAA,MAC1C,OAAO,IACL,MAAM,WACN,QAAQ,IACR,QAAQ,IAAI,cACZ,QAAQ,IAAI,WACZ,QAAQ,SACR,WAAW,MACX,KAAK,UAAU,OAAO,GACtB,MAAM,aACN,MAAM,WACR;AAAA;AAAA,OAEE,SAAQ,CAAC,OAAiE;AAAA,IAC9E,KAAK,cAAc,MAAM,SAAS,MAAM,SAAS;AAAA,IACjD,MAAM,SAAS,KAAK,GAAG,MACrB,yNACF;AAAA,IACA,WAAW,SAAS,MAAM,SAAS;AAAA,MACjC,OAAO,IACL,MAAM,WACN,MAAM,IAAI,cACV,MAAM,IAAI,WACV,MAAM,SACN,MAAM,eACN,MAAM,iBACR;AAAA,IACF;AAAA;AAAA,OAGI,WAAU,CAAC,OAAmE;AAAA,IAClF,MAAM,KAAK,IAAI,MAAM;AAAA,MACnB,MAAM,SAAS,KAAK,GAAG,MACrB,mFACF;AAAA,MACA,WAAW,MAAM,MAAM;AAAA,QAAK,OAAO,IAAI,MAAM,gBAAgB,MAAM,WAAW,EAAE;AAAA,KACjF;AAAA;AAAA,OAEG,IAAG,CAAC,OAA4D;AAAA,IACpE,OAAO,KAAK,IAAI,MAAM;AAAA,MACpB,MAAM,MAAM,KAAK,GACd,MACC,gIACF,EACC,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,OAAO,MAAM,OAAO,GAAG,IAAI;AAAA,KAC5B;AAAA;AAAA,OAEG,SAAQ,CAAC,OAAiE;AAAA,IAC9E,OAAO,KAAK,IAAI,MACd,KAAK,GACF,MAAiC;AAAA;AAAA,wDAEc,EAC/C,IAAI,MAAM,WAAW,MAAM,OAAO,EAClC,IAAI,MAAM,CACf;AAAA;AAAA,OAGI,eAAc,CAAC,OAAuE;AAAA,IAC1F,OAAO,KAAK,IAAI,MAAM;AAAA,MACpB,MAAM,MAAM,KAAK,GACd,MAAyD;AAAA;AAAA;AAAA,4DAGN,EACnD,IACC,MAAM,WACN,MAAM,IAAI,cACV,MAAM,IAAI,WACV,MAAM,SACN,MAAM,OACR;AAAA,MACF,OAAO,MAAM,OAAO,GAAG,IAAI;AAAA,KAC5B;AAAA;AAAA,OAGG,YAAW,CAAC,OAAoE;AAAA,IACpF,OAAO,KAAK,IAAI,MACd,KAAK,GAAG,YAAY,MAAM;AAAA,MACxB,MAAM,SAAS,KAAK,GAAG,MACrB,2EACF;AAAA,MACA,IACE,MAAM,cACN,MAAM,QAAQ,KACZ,CAAC,WAAW,OAAO,IAAI,MAAM,WAAW,OAAO,EAAE,GAAG,WAAW,OAAO,cACxE;AAAA,QAEA,OAAO;AAAA,MACT,MAAM,YAAY,KAAK,GAAG,MAAM;AAAA;AAAA,uDAEe;AAAA,MAC/C,WAAW,UAAU,MAAM;AAAA,QACzB,UAAU,IACR,OAAO,QACP,OAAO,aACP,OAAO,SAAS,KAAK,UAAU,OAAO,MAAM,IAAI,MAChD,OAAO,QAAQ,KAAK,UAAU,OAAO,KAAK,IAAI,MAC9C,MAAM,WACN,OAAO,IACP,OAAO,cACT;AAAA,MACF,OAAO;AAAA,KACR,EAAE,CACL;AAAA;AAAA,OAGI,QAAO,CAAC,OAAgE;AAAA,IAC5E,OAAO,KAAK,IAAI,MACd,KAAK,GACF,MACC,0MACF,EACC,IAAI,MAAM,WAAW,MAAM,KAAK,MAAM,KAAK,EAC3C,IAAI,MAAM,CACf;AAAA;AAAA,OAEI,OAAM,CAAC,OAA+D;AAAA,IAC1E,OAAO,KAAK,IACV,MACE,KAAK,GACF,MACC,kKACF,EACC,IACC,MAAM,QACN,MAAM,aACN,MAAM,SAAS,KAAK,UAAU,MAAM,MAAM,IAAI,MAC9C,MAAM,QAAQ,KAAK,UAAU,MAAM,KAAK,IAAI,MAC5C,MAAM,WACN,MAAM,IACN,MAAM,cACR,EAAE,YAAY,CACpB;AAAA;AAAA,OAEI,OAAM,CAAC,OAA+D;AAAA,IAC1E,MAAM,KAAK,IAAI,MAAM;AAAA,MACnB,KAAK,GACF,MAAM,oEAAoE,EAC1E,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,KACjC;AAAA;AAEL;AACA,SAAS,MAAM,CAAC,KAAkC;AAAA,EAChD,MAAM,UAAU,KAAK,MAAM,IAAI,OAAO;AAAA,EACtC,OAAO;AAAA,OACF;AAAA,OACC,IAAI,WAAW,EAAE,SAAS,IAAI,SAAS,IAAI,CAAC;AAAA,IAChD,QAAQ,IAAI;AAAA,IACZ,aAAa,IAAI;AAAA,OACb,IAAI,cAAc,EAAE,QAAQ,KAAK,MAAM,IAAI,WAAW,EAAc,IAAI,CAAC;AAAA,OACzE,IAAI,QACJ;AAAA,MACE,OAAO,kBAAiB,IAAI,OAAO,6BAA6B;AAAA,IAClE,IACA,CAAC;AAAA,EACP;AAAA;;;ACjMF,yCAAS;AAiBF,MAAM,4BAA6D;AAAA,EAErD;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,IACA,kBACA,eAKjB;AAAA,IAPiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,OAOb,KAAI,CACR,OACuC;AAAA,IACvC,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,OAAO,KAAK,GACf,MAAmD;AAAA;AAAA;AAAA;AAAA;AAAA,OAKrD,EACE,IAAI,MAAM,WAAW,MAAM,IAAI,cAAc,MAAM,IAAI,SAAS;AAAA,MACnE,OAAO,KAAK,IAAI,CAAC,SAAS;AAAA,QACxB,KAAK,KAAK,MAAM,IAAI;AAAA,QACpB,SAAS,IAAI;AAAA,QACb,eAAe,IAAI;AAAA,QACnB,QAAQ,KAAK,MAAM,IAAI,MAAM;AAAA,QAC7B,mBAAmB,IAAI;AAAA,QACvB,cAAc,IAAI;AAAA,MACpB,EAAE;AAAA,KACH;AAAA;AAAA,OAGG,UAAS,CACb,OACuC;AAAA,IACvC,IAAI,CAAC,MAAM,KAAK;AAAA,MAAQ,OAAO,CAAC;AAAA,IAChC,OAAO,KAAK,iBAAiB,MAAM;AAAA,MAEjC,MAAM,OAAO,KAAK,GACf,MAGC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAWH,EACE,IAAI,KAAK,UAAU,MAAM,IAAI,GAAG,MAAM,SAAS;AAAA,MAClD,OAAO,KAAK,IAAI,CAAC,SAAS;AAAA,QACxB,KAAK,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,WAAW;AAAA,QACnE,SAAS,IAAI;AAAA,QACb,eAAe,IAAI;AAAA,QACnB,QAAQ,KAAK,MAAM,IAAI,MAAM;AAAA,QAC7B,mBAAmB,IAAI;AAAA,QACvB,cAAc,IAAI;AAAA,MACpB,EAAE;AAAA,KACH;AAAA;AAAA,OAGG,YAAW,CAAC,OAA2E;AAAA,IAC3F,KAAK,cAAc,MAAM,SAAS,MAAM,SAAS;AAAA,IACjD,IAAI,CAAC,MAAM,QAAQ;AAAA,MAAQ;AAAA,IAC3B,QAAQ,YAAY,KAAK,GACtB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAQR,EACE,IAAI,KAAK,UAAU,MAAM,OAAO,GAAG,MAAM,SAAS;AAAA,IACrD,IAAI,YAAY,MAAM,QAAQ;AAAA,MAAQ,MAAM,eAAe;AAAA;AAAA,OAGvD,MAAK,CAAC,OAAqE;AAAA,IAC/E,QAAQ,UAAU;AAAA,IAClB,KAAK,cAAc,MAAM,SAAS,MAAM,WAAW,MAAM,YAAY;AAAA,IAErE,MAAM,YAAY,mBAAmB,MAAM,MAAM;AAAA,IACjD,MAAM,UACJ,MAAM,qBAAqB,OACvB,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAMV,EACI,IACC,MAAM,WACN,MAAM,IAAI,cACV,MAAM,IAAI,WACV,MAAM,SACN,MAAM,eACN,KAAK,UAAU,MAAM,MAAM,GAC3B,MAAM,mBACN,WACA,MAAM,YACR,EAAE,UACJ,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,SAKV,EACI,IACC,MAAM,eACN,KAAK,UAAU,MAAM,MAAM,GAC3B,MAAM,mBACN,WACA,MAAM,cACN,MAAM,WACN,MAAM,IAAI,cACV,MAAM,IAAI,WACV,MAAM,SACN,MAAM,gBACR,EAAE;AAAA,IACV,IAAI,YAAY;AAAA,MAAG,MAAM,eAAe;AAAA;AAAA,OAGpC,WAAU,CAAC,OAA0E;AAAA,IACzF,WAAW,SAAS,MAAM,SAAS;AAAA,MACjC,MAAM,KAAK,MAAM,EAAE,SAAS,MAAM,SAAS,WAAW,MAAM,cAAc,MAAM,CAAC;AAAA,IACnF;AAAA;AAAA,OAGI,OAAM,CAAC,OAAsE;AAAA,IACjF,KAAK,cAAc,MAAM,SAAS,MAAM,SAAS;AAAA,IACjD,QAAQ,YAAY,KAAK,GACtB,MAAM;AAAA;AAAA;AAAA;AAAA,KAIR,EACE,IACC,MAAM,WACN,MAAM,IAAI,cACV,MAAM,IAAI,WACV,MAAM,SACN,MAAM,gBACR;AAAA,IACF,IAAI,YAAY;AAAA,MAAG,MAAM,eAAe;AAAA;AAE5C;AAEA,SAAS,cAAc,GAAiC;AAAA,EACtD,OAAO,IAAI,8BACT,mBACA,uCACF;AAAA;;;ACxKK,MAAM,sBAAiD;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,WAAW,CAAC,OAIT;AAAA,IACD,KAAK,UAAU,IAAI,4BAA4B,MAAM,IAAI,MAAM,gBAAgB;AAAA,IAC/E,KAAK,UAAU,IAAI,4BAA4B,MAAM,IAAI,MAAM,gBAAgB;AAAA,IAC/E,KAAK,mBAAmB,IAAI,qCAC1B,MAAM,IACN,MAAM,kBACR;AAAA,IACA,KAAK,iBAAiB,IAAI,4BACxB,MAAM,IACN,MAAM,kBACN,CAAC,SAAS,cAAc,KAAK,iBAAiB,oBAAoB,SAAS,SAAS,CACtF;AAAA,IACA,KAAK,UAAU,IAAI,4BACjB,MAAM,IACN,MAAM,kBACN,CAAC,SAAS,WAAW,aACnB,KAAK,iBAAiB,oBAAoB,SAAS,WAAW,QAAQ,CAC1E;AAAA,IACA,KAAK,SAAS,IAAI,4BAA4B,MAAM,IAAI,MAAM,gBAAgB;AAAA;AAAA,EAGhF,kBAAkB,GAAS;AAAA,IACzB,KAAK,iBAAiB,mBAAmB;AAAA;AAE7C;;;AC/CA,6BAAS,2CAAkB;AAC3B;AACA;AAmBA;;;ACbO,SAAS,wBAA8B,CAC5C,OAQiB;AAAA,EACjB,MAAM,WAAW,CAAC,GAAG,IAAI,IAAI,MAAM,QAAQ,CAAC;AAAA,EAC5C,IAAI,SAAS,WAAW,GAAG;AAAA,IACzB,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,MAAM,eAAe,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,EACtD,MAAM,eAAe,MAAM,mBAAmB,YAAY,KAAK;AAAA,EAC/D,MAAM,aAAa,MAAM,mBAAmB,YAAY,CAAC,IAAI,CAAC,MAAM,cAAc;AAAA,EAClF,MAAM,cACJ,MAAM,cAAc,eACpB,MAAM,cAAc,mBACpB,MAAM,cAAc,oBAChB,oCACA;AAAA,EACN,MAAM,OAAO,MAAM,GAChB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAMuB,MAAM;AAAA,yBACV;AAAA;AAAA,iBAER,MAAM;AAAA,qCACc,MAAM,mBAAmB,gBAAgB;AAAA;AAAA;AAAA,OAI1E,EACC,IAAI,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU;AAAA,EAIlD,MAAM,kBAAkB,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,WAAW,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,EAE/E,OAAO,SAAS,QAAQ,CAAC,YAAY;AAAA,IACnC,MAAM,MAAM,gBAAgB,IAAI,OAAO;AAAA,IACvC,OAAO,MAAM,CAAC,GAAG,IAAI,CAAC;AAAA,GACvB;AAAA;;;ADZI,MAAM,yBAAuD;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAA0C;AAAA,IACpD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,aAAa,QAAQ;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,MAAK,CAAC,OAA0D;AAAA,IACpE,MAAM,WAAW,MAAM,YAAY,IAAI;AAAA,IACvC,MAAM,2BAA2B;AAAA,MAC/B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,YAAY,MAAM;AAAA,IACpB,CAAC;AAAA,IAED,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,YACN,UACA,SAAS,YAAY,CACvB;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,OAAO,KAAK,2BAA2B,OAAO,QAAQ;AAAA,MACxD;AAAA,MAEA,MAAM;AAAA;AAAA,IAGR,MAAM,SAAS,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,IAC9E,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,iBACR,6CAA6C,MAAM,oBAAoB,MAAM,aAC/E;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGK,2BAA0B,CACtC,OACA,UAC4B;AAAA,IAC5B,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,IACE,CAAC,YACD,CAAC,yCAAyC,uBAAuB,QAAQ,GAAG,KAAK,GACjF;AAAA,QACA,MAAM,IAAI,iBACR,8BAA8B,MAAM,mCAAmC,MAAM,aAC/E;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,UAAU,SAAS,YAAY,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MAElE,MAAM,UAAU,KAAK,GAClB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,OAAO,uBAAuB,OAAO;AAAA,KACtC,EAAE;AAAA;AAAA,OAGC,MAAK,CAAC,OAA0D;AAAA,IACpE,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA,OAKF,EACC,IACC,YACC,MAAM,aAAa,IAAI,MAAQ,YAAY,GAC5C,MAAM,WACN,MAAM,IACN,QACF;AAAA,IACF,IAAI,OAAO,UAAU,GAAG;AAAA,MACtB,MAAM,SAAS,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,MAC9E,IAAI;AAAA,QAAQ,OAAO;AAAA,IACrB;AAAA,IAEA,MAAM,WAAW,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,IAChF,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,iBACR,8BAA8B,MAAM,8BAA8B,MAAM,aAC1E;AAAA,IACF;AAAA,IACA,MAAM,IAAI,iBACR,8BAA8B,MAAM,iCAAiC,SAAS,UAChF;AAAA;AAAA,OAGI,OAAM,CAAC,OAA2D;AAAA,IACtE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,8BAA8B,MAAM,8BAA8B,MAAM,aAC1E;AAAA,MACF;AAAA,MAEA,MAAM,iBACJ,MAAM,WAAW,YAAY,MAAM,MAAM,SAAS;AAAA,MACpD,IACG,kBAAkB,SAAS,WAAW,YACtC,CAAC,kBAAkB,SAAS,WAAW,WACxC;AAAA,QACA,MAAM,IAAI,iBACR,8BAA8B,MAAM,kCAAkC,SAAS,UACjF;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUF,EACC,IACC,MAAM,SACL,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,WAAW,cAAe,MAAM,QAAQ,aAAa,OAAQ,MACnE,MAAM,WAAW,cAAe,MAAM,QAAQ,aAAa,OAAQ,MACnE,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,sBAAqB,MAAM,OAAO,0BAA0B,GAChE,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,uBAAuB,OAAO;AAAA,KACtC,EAAE;AAAA;AAAA,OAGC,UAAS,CAAC,OAAkE;AAAA,IAChF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,cAAc,KAAK,GACtB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,aAAa;AAAA,MAE3C,IAAI,CAAC,aAAa;AAAA,QAChB,MAAM,IAAI,iBACR,8BAA8B,MAAM,yCAAyC,MAAM,aACrF;AAAA,MACF;AAAA,MAEA,IAAI,YAAY,WAAW,WAAW;AAAA,QACpC,MAAM,IAAI,iBACR,8BAA8B,MAAM,+BAA+B,MAAM,iCAC3E;AAAA,MACF;AAAA,MAEA,IAAI,YAAY,gBAAgB,MAAM,YAAY;AAAA,QAChD,MAAM,IAAI,iBACR,mCAAmC,MAAM,iBAAiB,MAAM,4CAA4C,MAAM,4BAA4B,YAAY,eAC5J;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,MAEzC,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAcF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,eACN,MAAM,YACN,MAAM,QACN,MAAM,WACN,MAAM,MACN,WACA,UAAU,YAAY,GACtB,4BAA4B,MAAM,MAAM,CAC1C;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,IAAI,iBACR,mCAAmC,MAAM,mCAAmC,MAAM,aACpF;AAAA,QACF;AAAA,QAEA,MAAM;AAAA;AAAA,MAGR,MAAM,MAAM,KAAK,GACd,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,KAAK;AAAA,QACR,MAAM,IAAI,iBACR,kDAAkD,MAAM,oBAAoB,MAAM,aACpF;AAAA,MACF;AAAA,MAEA,OAAO,2BAA2B,GAAG;AAAA,KACtC,EAAE;AAAA;AAAA,OAGC,WAAU,CAAC,OAAmE;AAAA,IAClF,iCAAiC,MAAM,aAAa,aAAa;AAAA,IAEjE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,mCAAmC,MAAM,8BAA8B,MAAM,aAC/E;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,IAAI,iBACR,mCAAmC,MAAM,oBAAoB,MAAM,iCACrE;AAAA,MACF;AAAA,MAEA,IAAI,MAAM,WAAW,eAAe,MAAM,OAAO,cAAc,SAAS,YAAY;AAAA,QAClF,MAAM,IAAI,iBACR,mCAAmC,MAAM,uBAAuB,MAAM,OAAO,8BAA8B,SAAS,cACtH;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUF,EACC,IACC,MAAM,SACL,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,WAAW,cAAc,MAAM,OAAO,YAAY,MACxD,MAAM,eAAe,SAAS,gBAAgB,MAC9C,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,sBAAqB,MAAM,OAAO,0BAA0B,GAChE,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,2BAA2B,OAAO;AAAA,KAC1C,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA8E;AAAA,IAC1F,MAAM,MAAM,KAAK,GACd,MAAM,6DAA6D,EACnE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,uBAAuB,GAAG,IAAI;AAAA;AAAA,OAGvC,KAAI,CAAC,OAA+D;AAAA,IACxE,IAAI,iBAAiB,KAAK,KAAK,MAAM,aAAa,WAAW,GAAG;AAAA,MAC9D,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,YAAY;AAAA,MACpB,aAAa,KAAK,iBAAiB;AAAA,MACnC,KAAK,KAAK,MAAM,UAAU;AAAA,IAC5B;AAAA,IAEA,IAAI,MAAM,aAAa;AAAA,MACrB,aAAa,KAAK,mBAAmB,MAAM,YAAY,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MACnF,KAAK,KAAK,GAAG,MAAM,WAAW;AAAA,IAChC;AAAA,IAEA,qBAAqB,cAAc,MAAM,OAAO,iCAAiC;AAAA,IAEjF,QAAQ,MAAM,OAAO,YAAY,aAAqC;AAAA,MACpE,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,sBAAsB;AAAA,MACrC;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,wBAAuB,CAC3B,OACuC;AAAA,IACvC,MAAM,OAAO,yBAAiD;AAAA,MAC5D,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,MACjB,YAAY,CAAC,QAAQ,IAAI;AAAA,IAC3B,CAAC;AAAA,IAED,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,sBAAsB;AAAA,IACvC;AAAA;AAAA,OAGI,UAAS,CAAC,OAAuE;AAAA,IACrF,IAAI,iBAAiB,KAAK,GAAG;AAAA,MAC3B,OAAO;AAAA,QACL,OAAO,CAAC;AAAA,QACR,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,eAAe;AAAA,MACvB,aAAa,KAAK,qBAAqB;AAAA,MACvC,KAAK,KAAK,MAAM,aAAa;AAAA,IAC/B;AAAA,IAEA,IAAI,MAAM,YAAY;AAAA,MACpB,aAAa,KAAK,iBAAiB;AAAA,MACnC,KAAK,KAAK,MAAM,UAAU;AAAA,IAC5B;AAAA,IAEA,IAAI,MAAM,QAAQ;AAAA,MAChB,aAAa,KAAK,aAAa;AAAA,MAC/B,KAAK,KAAK,MAAM,MAAM;AAAA,IACxB;AAAA,IAEA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,gBAAgB;AAAA,MAClC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IAEA,qBAAqB,cAAc,MAAM,KAAK;AAAA,IAE9C,QAAQ,MAAM,OAAO,YAAY,aAAyC;AAAA,MACxE,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO;AAAA,MACL,OAAO,KAAK,IAAI,0BAA0B;AAAA,MAC1C;AAAA,MACA;AAAA,IACF;AAAA;AAAA,EAGF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAE9C;AAEA,SAAS,2BAA2B,CAAC,MAA4C;AAAA,EAC/E,OAAO,KAAK,UAAU,IAAI;AAAA;AAG5B,SAAS,uBAAuB,CAAC,OAA6C;AAAA,EAC5E,OAAO,KAAK,MAAM,KAAK;AAAA;AAGzB,SAAS,sBAAsB,CAAC,KAAgD;AAAA,EAC9E,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,YAAY,IAAI;AAAA,IAChB,QAAQ,IAAI;AAAA,IACZ,UAAU,IAAI,KAAK,IAAI,SAAS;AAAA,IAChC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,QACE,IAAI,qBAAqB,IAAI,oBACzB;AAAA,MACE,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,IACjB,IACA;AAAA,IACN,OAAO,IAAI,UAAU,OAAO,YAAY,kBAAiB,IAAI,OAAO,0BAA0B;AAAA,EAChG;AAAA;AAGF,SAAS,0BAA0B,CAAC,KAAwD;AAAA,EAC1F,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,eAAe,IAAI;AAAA,IACnB,YAAY,IAAI;AAAA,IAChB,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI;AAAA,IACf,MAAM,IAAI;AAAA,IACV,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,QAAQ,wBAAwB,IAAI,MAAM;AAAA,IAC1C,QAAQ,IAAI,oBACR;AAAA,MACE,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,IACjB,IACA;AAAA,IACJ,aAAa,IAAI,gBAAgB;AAAA,IACjC,OAAO,IAAI,UAAU,OAAO,YAAY,kBAAiB,IAAI,OAAO,0BAA0B;AAAA,EAChG;AAAA;AAGF,SAAS,gCAAgC,CAAC,OAA2B,WAAyB;AAAA,EAC5F,IAAI,UAAU,cAAc,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,IAAI;AAAA,IAClE,MAAM,IAAI,iBACR,6BAA6B,2CAC/B;AAAA,EACF;AAAA;;;AE1iBF;AACA,iCAAS;AACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqDA;AAmBO,MAAM,2BAA2D;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAA4C;AAAA,IACtD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,aAAa,QAAQ;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,MAAK,CAAC,OAA8D;AAAA,IACxE,8BAA8B,KAAK;AAAA,IACnC,MAAM,oCAAoC;AAAA,MACxC,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,cAAc,MAAM,SAAS;AAAA,MAC7B,WAAW,MAAM,SAAS,eAAe;AAAA,MACzC,kBAAkB,MAAM,SAAS,eAAe;AAAA,IAClD,CAAC;AAAA,IAED,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,KAAK,gCAAgC,KAAK;AAAA,MAC1C,MAAM,WAAW,KAAK,QAAQ,MAAM,WAAW,MAAM,EAAE;AAAA,MACvD,IAAI,UAAU;AAAA,QACZ,MAAM,WAAW,wBAAwB,QAAQ;AAAA,QACjD,IAAI,CAAC,2CAA2C,UAAU,KAAK,GAAG;AAAA,UAChE,MAAM,uBAAuB,KAAK;AAAA,QACpC;AAAA,QACA,MAAM,WAAW,MAAM,YAAY,IAAI;AAAA,QACvC,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAWF,EACC,IACC,SAAS,YAAY,GACrB,MAAM,mBAAmB,YAAY,OAAO,GAC5C,MAAM,mBAAmB,YAAY,OAAO,GAC5C,MAAM,mBAAmB,YAAY,OAAO,GAC5C,MAAM,WACN,MAAM,EACR;AAAA,QACF,IAAI,OAAO,YAAY;AAAA,UAAG,MAAM,uBAAuB,KAAK;AAAA,QAC5D,OAAO,yBAAyB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,MAC5E;AAAA,MAEA,MAAM,SAAS,0BAA0B,KAAK;AAAA,MAC9C,IAAI;AAAA,QACF,KAAK,aAAa,MAAM;AAAA,QACxB,OAAO,OAAO;AAAA,QACd,IAAI,yBAAwB,KAAK;AAAA,UAAG,MAAM,uBAAuB,KAAK;AAAA,QACtE,MAAM;AAAA;AAAA,MAER,OAAO,yBAAyB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KAC3E;AAAA;AAAA,OAGG,eAAc,CAAC,OAAsE;AAAA,IACzF,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,8BAA8B,KAAK;AAAA,MAEnC,MAAM,mBAAmB,KAAK,GAC3B,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,SAAS,eAAe,WAC9B,MAAM,SAAS,eAAe,WAC9B,MAAM,SAAS,eAAe,SAChC;AAAA,MACF,IAAI,kBAAkB;AAAA,QACpB,MAAM,gCAAgC,MAAM,QAAQ;AAAA,MACtD;AAAA,MAEA,MAAM,WAAW,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,MAC1D,MAAM,iBAAiB,wBAAwB,QAAQ;AAAA,MACvD,MAAM,UAAU,yBAAyB,gBAAgB,KAAK,EAAE;AAAA,MAEhE,MAAM,iBAAiB,0BAA0B,SAAS,eAAe;AAAA,MACzE,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAUF,EACC,KACE,MAAM,aAAa,IAAI,MAAQ,YAAY,GAC5C,SACA,gBACA,MAAM,WACN,MAAM,IACN,SAAS,eACX;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,4BAA4B,MAAM,EAAE;AAAA,MAEpE,OAAO,mBAAmB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KACrE;AAAA;AAAA,OAGG,YAAW,CAAC,OAAoE;AAAA,IACpF,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,WAAW,wBAAwB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,MACnF,MAAM,SAAS,yBAAyB,UAAU,KAAK;AAAA,MACvD,IAAI,CAAC,OAAO,cAAc,CAAC,OAAO,OAAO;AAAA,QACvC,MAAM,IAAI,mBAAmB,gCAAgC,MAAM,qBAAqB;AAAA,MAC1F;AAAA,MACA,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA,WAKF,EACC,IACC,OAAO,WAAW,YAAY,GAC9B,sBAAqB,OAAO,OAAO,4BAA4B,GAC/D,MAAM,WACN,MAAM,EACR;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,uBAAuB,KAAK;AAAA,MAC5D,OAAO,yBAAyB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KAC3E;AAAA;AAAA,OAGG,uBAAsB,CAC1B,OAC8B;AAAA,IAC9B,OAAO,yBAAyB,KAAK,gCAAgC,KAAK,CAAC;AAAA;AAAA,OAGvE,OAAM,CAAC,OAA+D;AAAA,IAC1E,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,cAAc,KAAK,gCAAgC,KAAK;AAAA,MAC9D,MAAM,WAAW,wBAAwB,WAAW;AAAA,MACpD,6CAA6C,UAAU,MAAM,QAAQ;AAAA,MACrE,MAAM,WAAW,2BAA2B,SAAS,UAAU,MAAM,QAAQ;AAAA,MAC7E,MAAM,SAAS,KAAK,eAAe,aAAa,UAAU,MAAM,cAAc;AAAA,MAC9E,IAAI,WAAW;AAAA,QAAG,MAAM,4BAA4B,MAAM,EAAE;AAAA,MAC5D,OAAO,yBAAyB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KAC3E;AAAA;AAAA,OAGG,qBAAoB,CACxB,OAC8B;AAAA,IAC9B,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,cAAc,KAAK,gCAAgC,KAAK;AAAA,MAC9D,MAAM,QAAQ,8BAA8B,wBAAwB,WAAW,GAAG,MAAM,KAAK;AAAA,MAC7F,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,sBAAqB,OAAO,4BAA4B,GACxD,MAAM,WACN,MAAM,IACN,MAAM,cACR;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,4BAA4B,MAAM,EAAE;AAAA,MACpE,OAAO,yBAAyB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KAC3E;AAAA;AAAA,OAGG,OAAM,CAAC,OAA+D;AAAA,IAC1E,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,cAAc,KAAK,gCAAgC,KAAK;AAAA,MAC9D,MAAM,OAAO,wBAAwB,wBAAwB,WAAW,GAAG,KAAK;AAAA,MAChF,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAaF,EACC,IACC,MAAM,QACN,KAAK,WAAW,YAAY,GAC5B,KAAK,SAAS,gBACd,KAAK,SAAS,mBACd,KAAK,SAAS,qBAAqB,MACnC,KAAK,iBAAiB,IAAI,YAAY,iBACtC,KAAK,UAAU,YACX,OACA,sBAAqB,KAAK,OAAO,4BAA4B,GACjE,MAAM,WACN,MAAM,IACN,MAAM,cACR;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,4BAA4B,MAAM,EAAE;AAAA,MACpE,OAAO,yBAAyB,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KAC3E;AAAA;AAAA,OAGG,2BAA0B,CAC9B,OACuC;AAAA,IACvC,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,WAAW,KAAK,gCAAgC,KAAK;AAAA,MAC3D,MAAM,UAAU,2BAA2B,wBAAwB,QAAQ,GAAG,KAAK;AAAA,MACnF,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAeF,EACC,IACC,QAAQ,WAAW,kBACnB,QAAQ,WAAW,eACnB,QAAQ,WAAW,iBAAiB,IAAI,GACxC,QAAQ,SAAS,gBACjB,QAAQ,SAAS,mBACjB,MAAM,WACN,MAAM,IACN,MAAM,gBACN,MAAM,YACR;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,4BAA4B,MAAM,EAAE;AAAA,MACpE,OAAO,kCAAkC,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KACpF;AAAA;AAAA,OAGG,oBAAmB,CACvB,OACuC;AAAA,IACvC,OAAO,wBAAwB,KAAK,IAAI,MAAM;AAAA,MAC5C,MAAM,WAAW,KAAK,gCAAgC,KAAK;AAAA,MAC3D,MAAM,gBAAgB,8BACpB,8BAA8B,wBAAwB,QAAQ,CAAC,GAC/D,MAAM,aACR;AAAA,MACA,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUF,EACC,IACC,cAAc,cACd,cAAc,UACd,cAAc,cACd,cAAc,YAAY,YAAY,GACtC,MAAM,WACN,MAAM,IACN,MAAM,gBACN,cAAc,YAChB;AAAA,MACF,IAAI,OAAO,YAAY;AAAA,QAAG,MAAM,4BAA4B,MAAM,EAAE;AAAA,MACpE,OAAO,kCAAkC,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,KACpF;AAAA;AAAA,OAGG,QAAO,CAAC,QAAgF;AAAA,IAC5F,MAAM,MAAM,KAAK,QAAQ,OAAO,WAAW,OAAO,EAAE;AAAA,IACpD,OAAO,MAAM,yBAAyB,GAAG,IAAI;AAAA;AAAA,OAGzC,KAAI,CAAC,OAAmE;AAAA,IAC5E,4BAA4B,MAAM,WAAW,WAAW;AAAA,IAExD,IAAI,MAAM,YAAY,MAAM,SAAS,WAAW,GAAG;AAAA,MACjD,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IAC9C;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAA4B,CAAC,MAAM,SAAS;AAAA,IAElD,IAAI,MAAM,cAAc;AAAA,MACtB,aAAa,KAAK,mBAAmB;AAAA,MACrC,KAAK,KAAK,MAAM,YAAY;AAAA,IAC9B;AAAA,IACA,IAAI,MAAM,gBAAgB;AAAA,MACxB,aAAa,KAAK,qBAAqB;AAAA,MACvC,KAAK,KAAK,MAAM,cAAc;AAAA,IAChC;AAAA,IACA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,gBAAgB;AAAA,MAClC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA,IAAI,MAAM,kBAAkB;AAAA,MAC1B,aAAa,KAAK,wBAAwB;AAAA,MAC1C,KAAK,KAAK,MAAM,gBAAgB;AAAA,IAClC;AAAA,IACA,IAAI,MAAM,eAAe;AAAA,MACvB,IAAI,MAAM,cAAc,WAAW,GAAG;AAAA,QACpC,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,MAC9C;AAAA,MACA,MAAM,eAAe,MAAM,cAAc,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,MACjE,aAAa,KACX,uBAAuB,kBACrB,kCAAkC,kBAClC,kCAAkC,iBACtC;AAAA,MACA,KAAK,KAAK,GAAG,MAAM,eAAe,GAAG,MAAM,eAAe,GAAG,MAAM,aAAa;AAAA,IAClF;AAAA,IACA,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IACA,IAAI,MAAM,cAAc;AAAA,MACtB,aAAa,KAAK,sCAAsC;AAAA,MACxD,KAAK,KAAK,MAAM,aAAa,YAAY,CAAC;AAAA,IAC5C;AAAA,IACA,IAAI,MAAM,eAAe;AAAA,MACvB,aAAa,KAAK,sCAAsC;AAAA,MACxD,KAAK,KAAK,MAAM,cAAc,YAAY,CAAC;AAAA,IAC7C;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC9C,MAAM,SAAS,MAAM,UAAU;AAAA,IAC/B,MAAM,QAAQ,MAAM;AAAA,IAEpB,MAAM,WAAW,KAAK,GACnB,MAAM,iDAAiD,OAAO,EAC9D,IAAI,GAAG,IAAI;AAAA,IAEd,IAAI,QAAQ;AAAA;AAAA,QAER;AAAA,iDACyC,aAAa;AAAA;AAAA,IAE1D,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAE1B,IAAI,UAAU,WAAW;AAAA,MACvB,8BAA8B,OAAO,OAAO;AAAA,MAC5C,8BAA8B,QAAQ,QAAQ;AAAA,MAC9C,SAAS;AAAA,MACT,UAAU,KAAK,OAAO,MAAM;AAAA,IAC9B,EAAO,SAAI,SAAS,GAAG;AAAA,MACrB,8BAA8B,QAAQ,QAAQ;AAAA,MAC9C,SAAS;AAAA,MACT,UAAU,KAAK,MAAM;AAAA,IACvB;AAAA,IAEA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAClD,MAAM,OAAO,KAAK,IAAI,wBAAwB;AAAA,IAC9C,OAAO,EAAE,MAAM,SAAS,SAAS,KAAK,SAAS,SAAS,OAAO,OAAO,SAAS,MAAM;AAAA;AAAA,OAGjF,mBAAkB,CACtB,OACqC;AAAA,IACrC,MAAM,MAAM,KAAK,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,IACrD,IAAI,IAAI,6BAA6B;AAAA,MAAe,OAAO;AAAA,IAG3D,MAAM,WAAW;AAAA,IACjB,MAAM,QAAQ,KAAK,GAChB,MACC;AAAA;AAAA;AAAA,6BAGqB,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA,SAKxD,EACC,IACC,MAAM,WACN,IAAI,eACJ,GAAG,UACH,IAAI,0BACN;AAAA,IACF,OAAO,QAAQ,yBAAyB,KAAK,IAAI;AAAA;AAAA,OAG7C,0BAAyB,CAC7B,OACyC;AAAA,IACzC,MAAM,OAAO,yBAAsC;AAAA,MACjD,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,MACjB,YAAY,CAAC,QAAQ,IAAI;AAAA,MACzB,gBAAgB;AAAA,IAClB,CAAC;AAAA,IACD,OAAO,EAAE,MAAM,KAAK,IAAI,wBAAwB,EAAE;AAAA;AAAA,EAGpD,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,+BAA+B,CAAC,OAAsC;AAAA,IAC5E,MAAM,WAAW,KAAK,GACnB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,SAAS,eAAe,WAC9B,MAAM,SAAS,eAAe,WAC9B,MAAM,SAAS,eAAe,SAChC;AAAA,IACF,IAAI;AAAA,MAAU,MAAM,gCAAgC,MAAM,QAAQ;AAAA;AAAA,EAG5D,YAAY,CAAC,QAAmC;AAAA,IACtD,MAAM,aAAa,OAAO;AAAA,IAC1B,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcF,EACC,IACC,OAAO,WACP,OAAO,IACP,OAAO,aACP,OAAO,SAAS,cAChB,OAAO,SAAS,gBAChB,OAAO,SAAS,UAChB,OAAO,SAAS,eAAe,WAC/B,OAAO,SAAS,eAAe,WAC/B,OAAO,SAAS,eAAe,WAC/B,OAAO,SAAS,kBAChB,OAAO,SAAS,oBAChB,OAAO,SAAS,eAChB,kBAAkB,OAAO,SAAS,OAAO,OAAO,eAAe,MAC/D,wBAAwB,OAAO,SAAS,OAAO,OAAO,qBAAqB,MAC3E,wBAAwB,OAAO,SAAS,OAAO,OAAO,qBAAqB,MAC3E,OAAO,SAAS,YAAY,GAC5B,YAAY,kBAAkB,MAC9B,YAAY,oBAAoB,MAChC,YAAY,iBAAiB,MAC7B,eAAe,YAAY,OAAO,WAAW,iBAAiB,IAAI,CACpE;AAAA;AAAA,EAGI,cAAc,CACpB,UACA,UACA,gBACQ;AAAA,IACR,MAAM,OAAmC;AAAA,MACvC,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS,qBAAqB;AAAA,MAC9B,SAAS;AAAA,MACT,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IACA,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASF,EACC,IAAI,GAAG,IAAI;AAAA,IACd,OAAO,OAAO;AAAA;AAAA,EAGR,+BAA+B,CACrC,OACa;AAAA,IACb,MAAM,MAAM,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,IACzD,2BAA2B,wBAAwB,GAAG,GAAG,KAAK;AAAA,IAC9D,OAAO;AAAA;AAAA,EAGD,cAAc,CAAC,WAAmB,IAAyB;AAAA,IACjE,MAAM,MAAM,KAAK,WAAW,WAAW,EAAE;AAAA,IACzC,2BAA2B,wBAAwB,GAAG,CAAC;AAAA,IACvD,OAAO;AAAA;AAAA,EAGD,OAAO,CAAC,WAAmB,IAAgC;AAAA,IACjE,OAAO,KAAK,GACT,MAAM,+DAA+D,EACrE,IAAI,WAAW,EAAE;AAAA;AAAA,EAGd,UAAU,CAAC,WAAmB,IAAyB;AAAA,IAC7D,4BAA4B,WAAW,WAAW;AAAA,IAClD,4BAA4B,IAAI,IAAI;AAAA,IACpC,MAAM,MAAM,KAAK,QAAQ,WAAW,EAAE;AAAA,IACtC,IAAI,CAAC;AAAA,MAAK,MAAM,sBAAsB,WAAW,EAAE;AAAA,IACnD,OAAO;AAAA;AAEX;AAEA,SAAS,yBAAyB,CAAC,UAAiC;AAAA,EAClE,IAAI,QAAQ,WAAW;AAAA,EACvB,OAAO,UAAU;AAAA,IAAU,QAAQ,WAAW;AAAA,EAC9C,OAAO;AAAA;AAGT,SAAS,wBAAwB,CAAC,KAAuC;AAAA,EACvE,OAAO,0BAA0B,wBAAwB,GAAG,CAAC;AAAA;AAG/D,SAAS,uBAAuB,CAAC,KAA6C;AAAA,EAC5E,MAAM,YAA0C;AAAA,IAC9C,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,cAAc,IAAI;AAAA,IAClB,gBAAgB,IAAI;AAAA,IACpB,UAAU,IAAI,4BAA4B;AAAA,IAC1C,WAAW,IAAI;AAAA,IACf,kBAAkB,IAAI;AAAA,IACtB,yBAAyB,IAAI,8BAA8B;AAAA,IAC3D,kBAAkB,IAAI,qBAAqB;AAAA,IAC3C,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,eAAe,IAAI,kBAAkB;AAAA,IACrC,cAAc,IAAI,kBAAkB;AAAA,IACpC,oBAAoB,IAAI,yBAAyB;AAAA,IACjD,oBAAoB,IAAI,yBAAyB;AAAA,IACjD,QAAQ,IAAI;AAAA,IACZ,UAAU,IAAI,KAAK,IAAI,SAAS;AAAA,IAChC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,SAAS,oBAAoB,IAAI,SAAS,SAAS;AAAA,IACnD,gBAAgB,IAAI,mBAAmB;AAAA,IACvC,gBAAgB,4BAA4B,IAAI,kBAAkB,gBAAgB;AAAA,IAClF,kBAAkB,4BAA4B,IAAI,oBAAoB,kBAAkB;AAAA,IACxF,eAAe,4BAA4B,IAAI,iBAAiB,eAAe;AAAA,IAC/E,gBAAgB,IAAI,oBAAoB,OAAO,YAAY,IAAI,oBAAoB;AAAA,IACnF,2BAA2B,IAAI,iCAAiC;AAAA,IAChE,uBAAuB,IAAI,4BAA4B;AAAA,IACvD,2BAA2B,4BACzB,IAAI,8BACJ,2BACF;AAAA,IACA,0BAA0B,IAAI,+BAC1B,IAAI,KAAK,IAAI,4BAA4B,IACzC;AAAA,IACJ,UAAU;AAAA,MACR,gBAAgB,oBAAoB,IAAI,kBAAkB,gBAAgB;AAAA,MAC1E,mBAAmB,oBAAoB,IAAI,qBAAqB,mBAAmB;AAAA,SAC/E,IAAI,uBAAuB,OAC3B,CAAC,IACD,EAAE,mBAAmB,oBAAoB,IAAI,qBAAqB,mBAAmB,EAAE;AAAA,IAC7F;AAAA,IACA,OAAO,IAAI,SAAS;AAAA,EACtB;AAAA,EACA,OAAO,qBAAqB,SAAS;AAAA;AAGvC,SAAS,kBAAkB,CAAC,KAAsC;AAAA,EAChE,OAAO,yBAAyB,wBAAwB,GAAG,CAAC;AAAA;AAG9D,SAAS,iCAAiC,CAAC,KAAgD;AAAA,EACzF,OAAO,8BAA8B,yBAAyB,GAAG,CAAC;AAAA;AAGpE,SAAS,2BAA2B,CAAC,OAAsB,WAAuC;AAAA,EAChG,OAAO,UAAU,OAAO,YAAY,oBAAoB,OAAO,SAAS;AAAA;AAG1E,SAAS,mBAAmB,CAAC,OAAe,WAA2B;AAAA,EACrE,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAAA,IAC7C,MAAM,IAAI,mBACR,yCAAyC,+CAC3C;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,wBAAuB,CAAC,OAAyB;AAAA,EACxD,OAAO,iBAAiB,SAAS,MAAM,QAAQ,SAAS,0BAA0B;AAAA;AAuCpF,SAAS,sBAAsB,CAAC,OAA4D;AAAA,EAC1F,OAAO,IAAI,mBACT,gCAAgC,MAAM,mCAAmC,MAAM,aACjF;AAAA;;;ACpuBK,MAAM,mBAA2C;AAAA,EACrC;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,UAAqC,CAAC,GAAG;AAAA,IACnD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,UAAS,CAAC,QAIoB;AAAA,IAClC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAeF,EACC,IACC,OAAO,WACP,OAAO,QACP,OAAO,QAAQ,MACf,OAAO,QAAQ,cACf,OAAO,QAAQ,SACjB;AAAA,IAEF,OAAO,MAAM,qBAAqB,GAAG,IAAI;AAAA;AAAA,OAGrC,eAAc,CAAC,QAMmB;AAAA,IACtC,IAAI,OAAO,MAAM,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IACvC,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAeF,EACC,IAAI,KAAK,UAAU,OAAO,KAAK,GAAG,OAAO,SAAS;AAAA,IACrD,OAAO,KAAK,IAAI,oBAAoB;AAAA;AAAA,OAGhC,WAAU,CAAC,OAAuE;AAAA,IACtF,IAAI,MAAM,eAAe,WAAW,GAAG;AAAA,MACrC,OAAO,EAAE,QAAQ,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IAChD;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAA4B,CAAC,MAAM,SAAS;AAAA,IAElD,IAAI,MAAM,QAAQ;AAAA,MAChB,aAAa,KAAK,aAAa;AAAA,MAC/B,KAAK,KAAK,MAAM,MAAM;AAAA,IACxB;AAAA,IAEA,IAAI,MAAM,cAAc;AAAA,MACtB,aAAa,KAAK,oBAAoB;AAAA,MACtC,KAAK,KAAK,MAAM,YAAY;AAAA,IAC9B;AAAA,IAEA,IAAI,MAAM,eAAe;AAAA,MACvB,aAAa,KAAK,sBAAsB,MAAM,cAAc,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MACxF,KAAK,KAAK,GAAG,MAAM,aAAa;AAAA,IAClC;AAAA,IAEA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,gBAAgB;AAAA,MAClC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC9C,MAAM,SAAS,MAAM,UAAU;AAAA,IAC/B,MAAM,QAAQ,MAAM;AAAA,IACpB,MAAM,WAAW,KAAK,GACnB,MAAM,6CAA6C,OAAO,EAC1D,IAAI,GAAG,IAAI;AAAA,IAEd,IAAI,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASR;AAAA,8BACsB,kBAAkB,yBAAyB,qBAAqB;AAAA;AAAA,IAE1F,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAE1B,IAAI,UAAU,WAAW;AAAA,MACvB,SAAS;AAAA,MACT,UAAU,KAAK,OAAO,MAAM;AAAA,IAC9B,EAAO,SAAI,SAAS,GAAG;AAAA,MACrB,SAAS;AAAA,MACT,UAAU,KAAK,MAAM;AAAA,IACvB;AAAA,IAEA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAClD,MAAM,SAAS,KAAK,IAAI,oBAAoB;AAAA,IAE5C,OAAO;AAAA,MACL;AAAA,MACA,SAAS,SAAS,OAAO,SAAS,SAAS;AAAA,MAC3C,OAAO,SAAS;AAAA,IAClB;AAAA;AAAA,OAGI,uBAAsB,CAC1B,OACiD;AAAA,IACjD,oBAAoB,MAAM,KAAK;AAAA,IAC/B,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IACC,MAAM,WACN,MAAM,OAAO,UAAU,MACvB,MAAM,OAAO,UAAU,MACvB,MAAM,OAAO,gBAAgB,MAC7B,MAAM,OAAO,aAAa,MAC1B,MAAM,QAAQ,CAChB;AAAA,IACF,OAAO,mBAAmB,MAAM,MAAM,KAAK;AAAA;AAAA,OAGvC,eAAc,CAAC,OAAgD;AAAA,IACnE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAYF,EACC,IACC,MAAM,WACN,MAAM,QAAQ,QACd,MAAM,QAAQ,QAAQ,MACtB,MAAM,QAAQ,QAAQ,cACtB,MAAM,QAAQ,QAAQ,WACtB,MAAM,QAAQ,WAChB;AAAA;AAAA,OAGE,cAAa,CAAC,OAA+C;AAAA,IACjE,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQF,EACC,IACC,MAAM,WACN,MAAM,QAAQ,QACd,MAAM,QAAQ,QAAQ,MACtB,MAAM,QAAQ,QAAQ,cACtB,MAAM,QAAQ,QAAQ,SACxB;AAAA;AAAA,OAGE,iBAAgB,CAAC,QAA4D;AAAA,IACjF,IAAI,OAAO,WAAW;AAAA,MAAG;AAAA,IACzB,MAAM,OAAO,OAAO,IAAI,aAAa;AAAA,IAErC,wBAAwB,KAAK,IAAI,MAAM;AAAA,MACrC,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAqBF,EACC,IAAI,KAAK,UAAU,IAAI,CAAC;AAAA,MAE3B,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAsBF,EACC,IAAI,KAAK,UAAU,IAAI,CAAC;AAAA,KAC5B;AAAA;AAAA,EAGH,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAE9C;AAEA,SAAS,aAAa,CAAC,OAAiC;AAAA,EACtD,OAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,WAAW,MAAM;AAAA,IACjB,QAAQ,MAAM,QAAQ;AAAA,IACtB,aAAa,MAAM,QAAQ,QAAQ;AAAA,IACnC,cAAc,MAAM,QAAQ,QAAQ;AAAA,IACpC,WAAW,MAAM,QAAQ,QAAQ;AAAA,IACjC,cACE,MAAM,SAAS,mBAAmB,MAAM,QAAQ,cAAc,MAAM,QAAQ;AAAA,EAChF;AAAA;AAGF,SAAS,kBAAkB,CACzB,MACA,OACwC;AAAA,EACxC,MAAM,UAAU,KAAK,SAAS;AAAA,EAC9B,MAAM,SAAS,KAAK,MAAM,GAAG,KAAK,EAAE,IAAI,oBAAoB;AAAA,EAC5D,MAAM,OAAO,OAAO,GAAG,EAAE;AAAA,EACzB,OAAO;AAAA,IACL;AAAA,OACI,WAAW,OACX;AAAA,MACE,MAAM;AAAA,QACJ,QAAQ,KAAK;AAAA,QACb,cAAc,KAAK,QAAQ;AAAA,QAC3B,WAAW,KAAK,QAAQ;AAAA,MAC1B;AAAA,IACF,IACA,CAAC;AAAA,EACP;AAAA;AAGF,SAAS,mBAAmB,CAAC,OAAqB;AAAA,EAChD,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAAA,IAC9C,MAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AAAA;AAYF,SAAS,oBAAoB,CAAC,KAA0C;AAAA,EACtE,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,QAAQ,IAAI;AAAA,IACZ,SAAS;AAAA,MACP,MAAM,IAAI;AAAA,MACV,cAAc,IAAI;AAAA,MAClB,WAAW,IAAI;AAAA,IACjB;AAAA,IACA,aAAa,IAAI;AAAA,EACnB;AAAA;;;ACpXF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAeO,MAAM,wBAAqD;AAAA,EAC/C;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,UAA0C,CAAC,GAAG;AAAA,IACxD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,IAAI,KAAK,WAAW;AAAA,MAAoB,yBAAyB,KAAK,EAAE;AAAA;AAAA,OAGpE,OAAM,CAAC,OAAyD;AAAA,IACpE,MAAM,SAAS,0BAA0B,KAAK;AAAA,IAC9C,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,OAAO,WACP,OAAO,IACP,OAAO,cACP,OAAO,OAAO,cACd,OAAO,OAAO,WACd,OAAO,SAAS,MAChB,OAAO,SAAS,IAChB,OAAO,kBAAkB,SACzB,KAAK,UAAU,OAAO,iBAAiB,GACvC,OAAO,iBACP,OAAO,WACP,OAAO,iBACP,OAAO,UAAU,YAAY,GAC7B,OAAO,UAAU,YAAY,CAC/B;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,uBACR,aACA,6BAA6B,OAAO,0CACpC,EAAE,OAAO,MAAM,CACjB;AAAA,MACF;AAAA,MACA,MAAM;AAAA;AAAA,IAER,OAAO,KAAK,QAAQ,OAAO,WAAW,OAAO,IAAI,QAAQ;AAAA;AAAA,OAGrD,QAAO,CAAC,OAAiE;AAAA,IAC7E,MAAM,aAAa,gCAAgC,KAAK;AAAA,IACxD,OAAO,KAAK,OAAO,WAAW,WAAW,WAAW,EAAE;AAAA;AAAA,OAGlD,KAAI,CAAC,OAA6D;AAAA,IACtE,MAAM,aAAa,8BAA8B,KAAK;AAAA,IACtD,MAAM,QAAQ,CAAC,gBAAgB;AAAA,IAC/B,MAAM,OAA4B,CAAC,WAAW,SAAS;AAAA,IACvD,IAAI,WAAW,iBAAiB,WAAW;AAAA,MACzC,MAAM,KAAK,mBAAmB;AAAA,MAC9B,KAAK,KAAK,WAAW,YAAY;AAAA,IACnC;AAAA,IACA,IAAI,WAAW,WAAW,WAAW;AAAA,MACnC,MAAM,KAAK,6BAA6B,uBAAuB;AAAA,MAC/D,KAAK,KAAK,WAAW,OAAO,cAAc,WAAW,OAAO,SAAS;AAAA,IACvE;AAAA,IACA,IAAI,CAAC,WAAW;AAAA,MAAgB,MAAM,KAAK,oBAAoB;AAAA,IAC/D,IAAI,CAAC,WAAW,gBAAgB;AAAA,MAC9B,MAAM,KAAK,gBAAgB;AAAA,MAC3B,KAAK,KAAK,WAAW,IAAI,YAAY,CAAC;AAAA,IACxC;AAAA,IAEA,MAAM,YAAY,MAAM,KAAK,OAAO;AAAA,IACpC,MAAM,WAAW,KAAK,GACnB,MAAM,oDAAoD,WAAW,EACrE,IAAI,GAAG,IAAI;AAAA,IACd,MAAM,OAAO,KAAK,GACf,MACC;AAAA;AAAA,kBAEU;AAAA;AAAA;AAAA,SAIZ,EACC,IAAI,GAAG,MAAM,WAAW,OAAO,WAAW,MAAM;AAAA,IACnD,MAAM,SAAS,KAAK,IAAI,WAAW;AAAA,IACnC,OAAO;AAAA,MACL;AAAA,MACA,OAAO,SAAS;AAAA,MAChB,SAAS,WAAW,SAAS,OAAO,SAAS,SAAS;AAAA,IACxD;AAAA;AAAA,OAGI,OAAM,CAAC,OAAgE;AAAA,IAC3E,MAAM,aAAa,+BAA+B,KAAK;AAAA,IACvD,MAAM,UAAU,KAAK,OAAO,WAAW,WAAW,WAAW,EAAE;AAAA,IAC/D,IAAI,CAAC,WAAW,QAAQ;AAAA,MAAW,OAAO;AAAA,IAE1C,MAAM,aAAa,+BAA+B,YAAY,QAAQ,SAAS;AAAA,IAC/E,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,WAAW,UAAU,YAAY,GACjC,WAAW,UAAU,MACrB,WAAW,UAAU,IACrB,WAAW,WACX,WAAW,EACb;AAAA,IACF,OAAO,KAAK,QAAQ,WAAW,WAAW,WAAW,IAAI,QAAQ;AAAA;AAAA,EAGnE,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,MAAM,CAAC,WAAmB,IAAqC;AAAA,IACrE,MAAM,MAAM,KAAK,GACd,MAAM,4DAA4D,EAClE,IAAI,WAAW,EAAE;AAAA,IACpB,OAAO,MAAM,YAAY,GAAG,IAAI;AAAA;AAAA,EAG1B,OAAO,CAAC,WAAmB,IAAY,WAAqC;AAAA,IAClF,MAAM,SAAS,KAAK,OAAO,WAAW,EAAE;AAAA,IACxC,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,uBACR,kBACA,6BAA6B,yBAAyB,YACxD;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAEX;AAsBA,SAAS,WAAW,CAAC,KAA4C;AAAA,EAC/D,MAAM,oBAAoB,gBAAgB,IAAI,oBAAoB,oBAAoB;AAAA,EACtF,IACE,OAAO,IAAI,sBAAsB,YACjC,CAAC,SAAS,iBAAiB,KAC3B,kBAAkB,YAAY,IAAI,mBAClC;AAAA,IACA,MAAM,cAAc,sDAAsD;AAAA,EAC5E;AAAA,EAEA,MAAM,eAAe,IAAI,eAAe;AAAA,EACxC,MAAM,eAAe,IAAI,oBAAoB,QAAQ,IAAI,kBAAkB;AAAA,EAC3E,IAAI,iBAAiB,cAAc;AAAA,IACjC,MAAM,cAAc,0DAA0D;AAAA,EAChF;AAAA,EAEA,OAAO,sBAAsB;AAAA,IAC3B,WAAW,IAAI;AAAA,IACf,IAAI,IAAI;AAAA,IACR,cAAc,IAAI;AAAA,IAClB,QAAQ;AAAA,MACN,cAAc,IAAI;AAAA,MAClB,WAAW,IAAI;AAAA,IACjB;AAAA,IACA,UAAU,EAAE,MAAM,IAAI,gBAAgB,IAAI,IAAI,aAAa;AAAA,IAC3D;AAAA,IACA,iBAAiB,IAAI;AAAA,IACrB,WAAW,IAAI;AAAA,IACf,iBAAiB,IAAI;AAAA,IACrB,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,OACX,eAAe,EAAE,WAAW,IAAI,WAAW,IAAI,CAAC;AAAA,OAChD,eAAe,EAAE,WAAW,EAAE,MAAM,IAAI,iBAAiB,IAAI,IAAI,cAAc,EAAE,IAAI,CAAC;AAAA,EAC5F,CAAC;AAAA;AAGH,SAAS,eAAe,CAAC,OAAgB,OAAwB;AAAA,EAC/D,IAAI,OAAO,UAAU;AAAA,IAAU,MAAM,cAAc,SAAS,oCAAoC;AAAA,EAChG,IAAI;AAAA,IACF,OAAO,KAAK,MAAM,KAAK;AAAA,IACvB,OAAO,OAAO;AAAA,IACd,MAAM,IAAI,uBACR,kBACA,sBAAsB,gCACtB,EAAE,MAAM,CACV;AAAA;AAAA;AAIJ,SAAS,QAAQ,CAAC,OAAkD;AAAA,EAClE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;AAG5E,SAAS,aAAa,CAAC,SAAyC;AAAA,EAC9D,OAAO,IAAI,uBAAuB,kBAAkB,gBAAgB,SAAS;AAAA;;;ACzP/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAeO,MAAM,0BAAyD;AAAA,EACnD;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,UAA4C,CAAC,GAAG;AAAA,IAC1D,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,IAAI,KAAK,WAAW;AAAA,MAAoB,yBAAyB,KAAK,EAAE;AAAA;AAAA,OAGpE,OAAM,CAAC,OAA6D;AAAA,IACxE,MAAM,SAAS,4BAA4B,KAAK;AAAA,IAChD,IAAI;AAAA,MACF,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOF,EACC,IACC,OAAO,WACP,OAAO,IACP,OAAO,SACP,OAAO,WACP,OAAO,UAAU,YAAY,GAC7B,OAAO,UAAU,YAAY,GAC7B,OAAO,kBAAkB,YAAY,CACvC;AAAA,MACF,IAAI,CAAC;AAAA,QAAK,MAAM,eAAc,kBAAkB,OAAO,+BAA+B;AAAA,MACtF,OAAO,aAAY,GAAG;AAAA,MACtB,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,yBACR,aACA,+BAA+B,OAAO,0CACtC,EAAE,OAAO,MAAM,CACjB;AAAA,MACF;AAAA,MACA,IAAI,4BAA4B,KAAK,GAAG;AAAA,QACtC,MAAM,IAAI,yBACR,iBACA,6BAA6B,OAAO,uCAAuC,OAAO,eAClF,EAAE,OAAO,MAAM,CACjB;AAAA,MACF;AAAA,MACA,MAAM;AAAA;AAAA;AAAA,OAIJ,QAAO,CAAC,OAAqE;AAAA,IACjF,MAAM,aAAa,kCAAkC,KAAK;AAAA,IAC1D,OAAO,KAAK,OAAO,WAAW,WAAW,WAAW,EAAE;AAAA;AAAA,OAGlD,aAAY,CAAC,OAA0E;AAAA,IAC3F,MAAM,aAAa,uCAAuC,KAAK;AAAA,IAC/D,MAAM,kBAAkB,WAAW,UAAU,YAAY;AAAA,IACzD,MAAM,MAAM,WAAW,IAAI,YAAY;AAAA,IACvC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAiBF,EACC,IACC,iBACA,iBACA,iBACA,WAAW,WACX,WAAW,IACX,WAAW,SACX,WAAW,WACX,KACA,KACA,GACF;AAAA,IACF,OAAO,MAAM,aAAY,GAAG,IAAI;AAAA;AAAA,OAG5B,OAAM,CAAC,OAAoE;AAAA,IAC/E,MAAM,aAAa,iCAAiC,KAAK;AAAA,IACzD,MAAM,UAAU,KAAK,OAAO,WAAW,WAAW,WAAW,EAAE;AAAA,IAC/D,IAAI,CAAC,WAAW,QAAQ;AAAA,MAAW,OAAO;AAAA,IAC1C,MAAM,aAAa,iCAAiC,YAAY,QAAQ,SAAS;AAAA,IACjF,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,WAAW,UAAU,YAAY,GACjC,WAAW,WACX,WAAW,EACb;AAAA,IACF,OAAO,MAAM,aAAY,GAAG,IAAI,KAAK,OAAO,WAAW,WAAW,WAAW,EAAE;AAAA;AAAA,EAGjF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,MAAM,CAAC,WAAmB,IAAuC;AAAA,IACvE,MAAM,MAAM,KAAK,GACd,MAAM,8DAA8D,EACpE,IAAI,WAAW,EAAE;AAAA,IACpB,OAAO,MAAM,aAAY,GAAG,IAAI;AAAA;AAEpC;AAaA,SAAS,YAAW,CAAC,KAAgD;AAAA,EACnE,OAAO,wBAAwB;AAAA,IAC7B,WAAW,IAAI;AAAA,IACf,IAAI,IAAI;AAAA,IACR,SAAS,IAAI;AAAA,IACb,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,mBAAmB,IAAI;AAAA,OACnB,IAAI,eAAe,OAAO,CAAC,IAAI,EAAE,WAAW,IAAI,WAAW;AAAA,EACjE,CAAC;AAAA;AAGH,SAAS,cAAa,CAAC,SAA2C;AAAA,EAChE,OAAO,IAAI,yBAAyB,kBAAkB,gBAAgB,SAAS;AAAA;;;ACzLjF,6BAAS,2CAAkB;AAC3B;AACA;AAaA;AAwBO,MAAM,qBAA+C;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAAsC;AAAA,IAChD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,aAAa,QAAQ;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,MAAK,CAAC,OAAkD;AAAA,IAC5D,MAAM,WAAW,MAAM,YAAY,IAAI;AAAA,IACvC,MAAM,uBAAuB;AAAA,MAC3B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAeF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,QACN,MAAM,WACN,MAAM,MACN,UACA,SAAS,YAAY,GACrB,MAAM,2BAA2B,MACjC,MAAM,iBAAiB,IACzB;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,OAAO,KAAK,2BAA2B,OAAO,QAAQ;AAAA,MACxD;AAAA,MAEA,MAAM;AAAA;AAAA,IAGR,MAAM,SAAS,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,IAC9E,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,aACR,yCAAyC,MAAM,oBAAoB,MAAM,aAC3E;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGK,2BAA0B,CACtC,OACA,UACwB;AAAA,IACxB,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,yDAAyD,EAC/D,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,IAAI,CAAC,YAAY,CAAC,qCAAqC,mBAAmB,QAAQ,GAAG,KAAK,GAAG;AAAA,QAC3F,MAAM,IAAI,aACR,0BAA0B,MAAM,mCAAmC,MAAM,aAC3E;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IAAI,UAAU,SAAS,YAAY,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MAElE,MAAM,UAAU,KAAK,GAClB,MAAM,yDAAyD,EAC/D,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAChC,OAAO,mBAAmB,OAAO;AAAA,KAClC,EAAE;AAAA;AAAA,OAGC,MAAK,CAAC,OAAkD;AAAA,IAC5D,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA,OAKF,EACC,IACC,YACC,MAAM,aAAa,IAAI,MAAQ,YAAY,GAC5C,MAAM,WACN,MAAM,IACN,QACF;AAAA,IACF,IAAI,OAAO,UAAU,GAAG;AAAA,MACtB,MAAM,SAAS,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,MAC9E,IAAI;AAAA,QAAQ,OAAO;AAAA,IACrB;AAAA,IAEA,MAAM,WAAW,MAAM,KAAK,QAAQ,EAAE,WAAW,MAAM,WAAW,IAAI,MAAM,GAAG,CAAC;AAAA,IAChF,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,aACR,0BAA0B,MAAM,8BAA8B,MAAM,aACtE;AAAA,IACF;AAAA,IACA,MAAM,IAAI,aACR,0BAA0B,MAAM,iCAAiC,SAAS,UAC5E;AAAA;AAAA,OAGI,OAAM,CAAC,OAAmD;AAAA,IAC9D,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,yDAAyD,EAC/D,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,aACR,0BAA0B,MAAM,8BAA8B,MAAM,aACtE;AAAA,MACF;AAAA,MAEA,MAAM,iBACJ,MAAM,WAAW,YAAY,MAAM,MAAM,SAAS;AAAA,MACpD,IACG,kBAAkB,SAAS,WAAW,YACtC,CAAC,kBAAkB,SAAS,WAAW,WACxC;AAAA,QACA,MAAM,IAAI,aACR,0BAA0B,MAAM,kCAAkC,SAAS,UAC7E;AAAA,MACF;AAAA,MAEA,IAAI,MAAM,WAAW,aAAa;AAAA,QAChC,IAAI,MAAM,UAAU,MAAM,OAAO,cAAc,SAAS,YAAY;AAAA,UAClE,MAAM,IAAI,aACR,0BAA0B,MAAM,uBAAuB,MAAM,OAAO,8BAA8B,SAAS,cAC7G;AAAA,QACF;AAAA,QACA,IAAI,CAAC,MAAM,UAAU,MAAM,aAAa,KAAK,SAAS,SAAS,SAAS;AAAA,UACtE,MAAM,IAAI,aACR,0BAA0B,MAAM,yEAClC;AAAA,QACF;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IACC,MAAM,SACL,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,WAAW,cACb,MAAM,WACL,MAAM,YAAY,SAAS,aAAa,MAC7C,MAAM,WAAW,cAAe,MAAM,QAAQ,aAAa,OAAQ,MACnE,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,sBAAqB,MAAM,OAAO,sBAAsB,GAC5D,MAAM,WAAW,cAAc,oBAAoB,MAAM,UAAU,IAAI,MACvE,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,yDAAyD,EAC/D,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,mBAAmB,OAAO;AAAA,KAClC,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA0E;AAAA,IACtF,MAAM,MAAM,KAAK,GACd,MAAM,yDAAyD,EAC/D,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,mBAAmB,GAAG,IAAI;AAAA;AAAA,OAGnC,KAAI,CAAC,OAAuD;AAAA,IAChE,IAAI,iBAAiB,KAAK,KAAK,MAAM,SAAS,WAAW,GAAG;AAAA,MAC1D,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,QAAQ;AAAA,MAChB,aAAa,KAAK,aAAa;AAAA,MAC/B,KAAK,KAAK,MAAM,MAAM;AAAA,IACxB;AAAA,IAEA,IAAI,MAAM,SAAS;AAAA,MACjB,aAAa,KAAK,eAAe,MAAM,QAAQ,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,OAAO;AAAA,IAC5B;AAAA,IAEA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,gBAAgB;AAAA,MAClC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IAEA,qBAAqB,cAAc,MAAM,OAAO,iCAAiC;AAAA,IAEjF,QAAQ,MAAM,OAAO,YAAY,aAA0B;AAAA,MACzD,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,kBAAkB;AAAA,MACjC;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,oBAAmB,CAAC,OAAmE;AAAA,IAC3F,MAAM,OAAO,yBAAsC;AAAA,MACjD,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,MACjB,YAAY,CAAC,QAAQ,IAAI;AAAA,IAC3B,CAAC;AAAA,IAED,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,kBAAkB;AAAA,IACnC;AAAA;AAAA,EAGF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAE9C;AAEA,SAAS,mBAAmB,CAAC,YAAkD;AAAA,EAC7E,OAAO,eAAe,YAAY,KAAK,UAAU,UAAU,IAAI;AAAA;AAGjE,SAAS,eAAe,CAAC,OAAyD;AAAA,EAChF,OAAO,SAAS,OAAQ,KAAK,MAAM,KAAK,IAAkB;AAAA;AAG5D,SAAS,kBAAkB,CAAC,KAAiC;AAAA,EAC3D,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,QAAQ,IAAI;AAAA,IACZ,WAAW,IAAI;AAAA,IACf,MAAM,IAAI;AAAA,IACV,QAAQ,IAAI;AAAA,IACZ,UAAU,IAAI,KAAK,IAAI,SAAS;AAAA,IAChC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,UAAU,IAAI,aAAa;AAAA,IAC3B,QAAQ,IAAI,oBACR;AAAA,MACE,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,IACjB,IACA;AAAA,IACJ,yBAAyB,IAAI,8BAA8B;AAAA,IAC3D,eAAe,IAAI,kBAAkB;AAAA,IACrC,OAAO,IAAI,UAAU,OAAO,YAAY,kBAAiB,IAAI,OAAO,sBAAsB;AAAA,IAC1F,YAAY,gBAAgB,IAAI,UAAU;AAAA,EAC5C;AAAA;AAGF,SAAS,wBAAuB,CAAC,OAAyB;AAAA,EACxD,OAAO,iBAAiB,SAAS,MAAM,QAAQ,SAAS,0BAA0B;AAAA;;;ACrWpF,IAAM,WAAW,IAAI;AAEd,SAAS,mCAAmC,CACjD,SACA,gCACM;AAAA,EACN,SAAS,IAAI,SAAS;AAAA,IACpB;AAAA,EACF,CAAC;AAAA;;;ACcI,MAAM,wBAAqD;AAAA,EAC/C;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,UAA0C,CAAC,GAAG;AAAA,IACxD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,WAAU,CAAC,QASuB;AAAA,IACtC,IAAI,QAAQ;AAAA;AAAA;AAAA;AAAA,IAIZ,MAAM,OAAmC;AAAA,MACvC,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,OAAO,MAAM;AAAA,MACf,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,KAAK,YAAY,CAAC;AAAA,IACrC;AAAA,IAEA,IAAI,OAAO,IAAI;AAAA,MACb,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,GAAG,YAAY,CAAC;AAAA,IACnC;AAAA,IAEA,SAAS,gBAAgB,OAAO,UAAU,SAAS,SAAS;AAAA,IAE5D,IAAI,OAAO,UAAU,WAAW;AAAA,MAC9B,SAAS;AAAA,MACT,KAAK,KAAK,OAAO,KAAK;AAAA,IACxB;AAAA,IAEA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,IAAI;AAAA,IAE7C,OAAO,KAAK,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,CAAC;AAAA;AAAA,OAGzC,gBAAe,CACnB,OACkD;AAAA,IAClD,IAAI,MAAM,OAAO,WAAW,GAAG;AAAA,MAC7B,OAAO,CAAC;AAAA,IACV;AAAA,IAEA,MAAM,QAAQ,MAAM,UAAU,SAAS,SAAS;AAAA,IAChD,MAAM,SAAS,MAAM,OAAO,IAAI,MAAM,cAAc,EAAE,KAAK,IAAI;AAAA,IAC/D,MAAM,OAAmC,CAAC;AAAA,IAE1C,MAAM,OAAO,QAAQ,CAAC,QAAQ,UAAU;AAAA,MACtC,KAAK,KAAK,OAAO,OAAO,cAAc,OAAO,UAAU,OAAO,UAAU;AAAA,KACzE;AAAA,IAED,IAAI,QAAQ;AAAA;AAAA,iBAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qCAQoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUjC,KAAK,KAAK,MAAM,SAAS;AAAA,IAEzB,IAAI,MAAM,MAAM;AAAA,MACd,SAAS;AAAA,MACT,KAAK,KAAK,MAAM,KAAK,YAAY,CAAC;AAAA,IACpC;AAAA,IAEA,IAAI,MAAM,IAAI;AAAA,MACZ,SAAS;AAAA,MACT,KAAK,KAAK,MAAM,GAAG,YAAY,CAAC;AAAA,IAClC;AAAA,IAEA,SAAS;AAAA;AAAA;AAAA,IAET,IAAI,MAAM,mBAAmB,WAAW;AAAA,MACtC,SAAS;AAAA,MACT,KAAK,KAAK,KAAK,IAAI,GAAG,MAAM,cAAc,CAAC;AAAA,IAC7C;AAAA,IAEA,SAAS,kCAAkC;AAAA,IAE3C,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,IAAI;AAAA,IAI7C,MAAM,UAAU,MAAM,OAAO,IAAI,CAAC,YAAY;AAAA,SACzC;AAAA,MACH,QAAQ,CAAC;AAAA,IACX,EAAE;AAAA,IAEF,WAAW,OAAO,MAAM;AAAA,MACtB,MAAM,SAAS,QAAQ,IAAI;AAAA,MAC3B,IAAI,QAAQ;AAAA,QACV,OAAO,OAAO,KAAK,KAAK,WAAW,GAAG,CAAC;AAAA,MACzC;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,UAAS,CAAC,QAKoB;AAAA,IAClC,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,OAMF,EACC,IACC,OAAO,WACP,OAAO,cACP,OAAO,UACP,OAAO,UACT;AAAA,IAEF,OAAO,MAAM,KAAK,WAAW,GAAG,IAAI;AAAA;AAAA,EAE9B,UAAU,CAAC,KAAmC;AAAA,IACpD,OAAO;AAAA,MACL,WAAW,IAAI;AAAA,MACf,cAAc,IAAI;AAAA,MAClB,UAAU,IAAI;AAAA,MACd,YAAY,IAAI;AAAA,MAChB,OAAO,KAAK,MAAM,IAAI,KAAK;AAAA,MAC3B,MAAM,IAAI,QAAQ;AAAA,MAClB,IAAI,IAAI,KAAK,IAAI,EAAE;AAAA,MACnB,cAAc,IAAI;AAAA,IACpB;AAAA;AAAA,EAMF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAE9C;;;ACvMA,6BAAS,2CAAkB;AAC3B;AAYA;AAwBO,MAAM,wBAAqD;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAAyC;AAAA,IACnD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,aAAa,QAAQ;AAAA,IAE1B,IAAI,KAAK,WAAW;AAAA,MAAoB,yBAAyB,KAAK,EAAE;AAAA;AAAA,OAGpE,MAAK,CAAC,OAAwD;AAAA,IAClE,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,IACzC,MAAM,0BAA0B;AAAA,MAC9B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,IAED,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,aACN,MAAM,WACN,WACA,MAAM,QACN,MAAM,OACN,UAAU,YAAY,GACtB,MAAM,kBACN,MAAM,mBACN,MAAM,kBAAkB,IAC1B;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,gBACR,6BAA6B,MAAM,mDAAmD,MAAM,eAC5F,eACF;AAAA,MACF;AAAA,MACA,MAAM;AAAA;AAAA,IAGR,OAAO,KAAK,kBAAkB,MAAM,WAAW,MAAM,EAAE;AAAA;AAAA,OAGnD,QAAO,CAAC,OAA0D;AAAA,IACtE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,iBAAiB,MAAM,WAAW,MAAM,EAAE;AAAA,MAChE,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,gBACR,6BAA6B,MAAM,8BAA8B,MAAM,eACvE,WACF;AAAA,MACF;AAAA,MACA,IAAI,CAAC,mBAAmB,sBAAsB,QAAQ,CAAC,GAAG;AAAA,QACxD,MAAM,IAAI,gBACR,6BAA6B,MAAM,mCAAmC,SAAS,YAC/E,oBACF;AAAA,MACF;AAAA,MAEA,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,SAMF,EACC,KAAK,MAAM,aAAa,IAAI,MAAQ,YAAY,GAAG,MAAM,WAAW,MAAM,EAAE;AAAA,MAC/E,IAAI,OAAO,YAAY,GAAG;AAAA,QACxB,MAAM,IAAI,gBACR,6BAA6B,MAAM,iCACnC,oBACF;AAAA,MACF;AAAA,MACA,OAAO,KAAK,kBAAkB,MAAM,WAAW,MAAM,EAAE;AAAA,KACxD,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAAyD;AAAA,IACpE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,iBAAiB,MAAM,WAAW,MAAM,EAAE;AAAA,MAChE,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,gBACR,6BAA6B,MAAM,8BAA8B,MAAM,eACvE,WACF;AAAA,MACF;AAAA,MACA,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,IAAI,gBACR,6BAA6B,MAAM,oBAAoB,MAAM,mCAC7D,oBACF;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA,SAKF,EACC,IACC,MAAM,SACL,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,kBAAkB,MACxB,MAAM,WAAW,cACb,OACA,sBAAqB,MAAM,OAAO,yBAAyB,GAC/D,MAAM,WACN,MAAM,EACR;AAAA,MACF,OAAO,KAAK,kBAAkB,MAAM,WAAW,MAAM,EAAE;AAAA,KACxD,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA6E;AAAA,IACzF,MAAM,MAAM,KAAK,iBAAiB,OAAO,WAAW,OAAO,EAAE;AAAA,IAC7D,OAAO,MAAM,sBAAsB,GAAG,IAAI;AAAA;AAAA,OAGtC,cAAa,CAAC,OAAuE;AAAA,IACzF,MAAM,MAAM,KAAK,GACd,MACC;AAAA;AAAA;AAAA,OAIF,EACC,IACC,MAAM,WACN,MAAM,aACN,MAAM,WACN,MAAM,cACR;AAAA,IACF,OAAO,MAAM,sBAAsB,GAAG,IAAI;AAAA;AAAA,OAGtC,KAAI,CAAC,OAA6D;AAAA,IACtE,IAAI,iBAAiB,KAAK;AAAA,MAAG,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IAEzE,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAC5C,IAAI,MAAM,aAAa;AAAA,MACrB,aAAa,KAAK,kBAAkB;AAAA,MACpC,KAAK,KAAK,MAAM,WAAW;AAAA,IAC7B;AAAA,IACA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,gBAAgB;AAAA,MAClC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA,IAAI,MAAM,gBAAgB;AAAA,MACxB,aAAa,KAAK,qBAAqB;AAAA,MACvC,KAAK,KAAK,MAAM,cAAc;AAAA,IAChC;AAAA,IACA,qBAAqB,cAAc,MAAM,KAAK;AAAA,IAE9C,QAAQ,MAAM,OAAO,YAAY,aAAoC;AAAA,MACnE,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IACD,OAAO,EAAE,MAAM,KAAK,IAAI,qBAAqB,GAAG,SAAS,MAAM;AAAA;AAAA,EAGjE,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,gBAAgB,CAAC,WAAmB,IAA0C;AAAA,IACpF,OAAO,KAAK,GACT,MAAM,4DAA4D,EAClE,IAAI,WAAW,EAAE;AAAA;AAAA,EAGd,iBAAiB,CAAC,WAAmB,IAA8B;AAAA,IACzE,MAAM,MAAM,KAAK,iBAAiB,WAAW,EAAE;AAAA,IAC/C,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,gBACR,4CAA4C,oBAAoB,eAChE,WACF;AAAA,IACF;AAAA,IACA,OAAO,sBAAsB,GAAG;AAAA;AAEpC;AAEA,SAAS,qBAAqB,CAAC,KAA8C;AAAA,EAC3E,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,aAAa,IAAI;AAAA,IACjB,WAAW,IAAI;AAAA,IACf,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI;AAAA,IACZ,OAAO,IAAI;AAAA,IACX,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,kBAAkB,IAAI;AAAA,IACtB,mBAAmB,IAAI;AAAA,IACvB,gBAAgB,IAAI,mBAAmB;AAAA,IACvC,gBAAgB,IAAI,mBAAmB;AAAA,IACvC,OAAO,IAAI,UAAU,OAAO,YAAY,kBAAiB,IAAI,OAAO,yBAAyB;AAAA,EAC/F;AAAA;;;AC3PF;AAgBO,MAAM,kCAAyE;AAAA,EACnE;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,UAAoD,CAAC,GAAG;AAAA,IAClE,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA;AAAA,OAGI,OAAM,CAAC,OAA6E;AAAA,IACxF,yBAAyB,MAAM,WAAW,WAAW;AAAA,IAErD,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAkBF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,YACN,MAAM,eACN,MAAM,WACN,MAAM,WACN,MAAM,QACN,MAAM,SACN,MAAM,gBACN,gBAAgB,MAAM,KAAK,GAC3B,gBAAgB,MAAM,eAAe,GACrC,YACC,MAAM,eAAe,IAAI,MAAQ,YAAY,GAC9C,MAAM,WAAW,YAAY,KAAK,IACpC;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,0BACR,uCAAuC,MAAM,mCAAmC,MAAM,aACxF;AAAA,MACF;AAAA,MAEA,MAAM;AAAA;AAAA,IAGR,OAAO,KAAK,oBAAoB,MAAM,WAAW,MAAM,EAAE;AAAA;AAAA,OAGrD,OAAM,CAAC,OAA6E;AAAA,IACxF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,2BAA2B,MAAM,WAAW,MAAM,EAAE;AAAA,MAE1E,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IACC,cACC,MAAM,eAAe,IAAI,MAAQ,YAAY,GAC9C,mBAAmB,MAAM,WAAW,GACpC,gBAAgB,MAAM,QAAQ,GAC9B,SAAS,YACT,SAAS,EACX;AAAA,MAEF,OAAO,KAAK,oBAAoB,MAAM,WAAW,MAAM,EAAE;AAAA,KAC1D,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAA6E;AAAA,IACxF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,2BAA2B,MAAM,WAAW,MAAM,EAAE;AAAA,MAE1E,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQF,EACC,IACC,cACC,MAAM,eAAe,IAAI,MAAQ,YAAY,GAC9C,mBAAmB,MAAM,WAAW,GACpC,SAAS,YACT,SAAS,EACX;AAAA,MAEF,OAAO,KAAK,oBAAoB,MAAM,WAAW,MAAM,EAAE;AAAA,KAC1D,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAA6E;AAAA,IACxF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,2BAA2B,MAAM,WAAW,MAAM,EAAE;AAAA,MAE1E,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAOF,EACC,IACC,YACC,MAAM,aAAa,IAAI,MAAQ,YAAY,GAC5C,SAAS,YACT,SAAS,EACX;AAAA,MAEF,OAAO,KAAK,oBAAoB,MAAM,WAAW,MAAM,EAAE;AAAA,KAC1D,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAGiC;AAAA,IAC7C,MAAM,MAAM,KAAK,GACd,MAAM,sEAAsE,EAC5E,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,gCAAgC,GAAG,IAAI;AAAA;AAAA,OAGhD,KAAI,CAAC,OAAiF;AAAA,IAC1F,IAAK,MAAM,YAAY,MAAM,SAAS,WAAW,KAAM,MAAM,aAAa,WAAW,GAAG;AAAA,MACtF,OAAO;AAAA,QACL,eAAe,CAAC;AAAA,QAChB,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,cAAc,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MAC3E,KAAK,KAAK,GAAG,MAAM,QAAQ;AAAA,IAC7B;AAAA,IAEA,IAAI,MAAM,YAAY;AAAA,MACpB,aAAa,KAAK,iBAAiB;AAAA,MACnC,KAAK,KAAK,MAAM,UAAU;AAAA,IAC5B;AAAA,IAEA,IAAI,MAAM,aAAa;AAAA,MACrB,aAAa,KAAK,mBAAmB,MAAM,YAAY,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MACnF,KAAK,KAAK,GAAG,MAAM,WAAW;AAAA,IAChC;AAAA,IAEA,IAAI,MAAM,eAAe;AAAA,MACvB,aAAa,KAAK,qBAAqB;AAAA,MACvC,KAAK,KAAK,MAAM,aAAa;AAAA,IAC/B;AAAA,IAEA,IAAI,MAAM,WAAW;AAAA,MACnB,aAAa,KAAK,iBAAiB;AAAA,MACnC,KAAK,KAAK,MAAM,SAAS;AAAA,IAC3B;AAAA,IAEA,IAAI,MAAM,QAAQ;AAAA,MAChB,aAAa,KAAK,aAAa;AAAA,MAC/B,KAAK,KAAK,MAAM,MAAM;AAAA,IACxB;AAAA,IAEA,IAAI,MAAM,SAAS;AAAA,MACjB,aAAa,KAAK,cAAc;AAAA,MAChC,KAAK,KAAK,MAAM,OAAO;AAAA,IACzB;AAAA,IAEA,IAAI,MAAM,gBAAgB;AAAA,MACxB,aAAa,KAAK,qBAAqB;AAAA,MACvC,KAAK,KAAK,MAAM,cAAc;AAAA,IAChC;AAAA,IAEA,IAAI,MAAM,gBAAgB;AAAA,MACxB,aAAa,KAAK,mBAAmB;AAAA,MACrC,KAAK,KAAK,MAAM,eAAe,YAAY,CAAC;AAAA,IAC9C;AAAA,IAEA,IAAI,MAAM,iBAAiB;AAAA,MACzB,aAAa,KAAK,mBAAmB;AAAA,MACrC,KAAK,KAAK,MAAM,gBAAgB,YAAY,CAAC;AAAA,IAC/C;AAAA,IAEA,MAAM,QAAQ,SAAS,aAAa,KAAK,OAAO;AAAA,IAChD,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AAAA,IAC9C,MAAM,SAAS,MAAM,UAAU;AAAA,IAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,wDAAwD,OAAO,EACrE,IAAI,GAAG,IAAI;AAAA,IAEd,IAAI,QAAQ;AAAA;AAAA,QAER;AAAA,8BACsB,aAAa;AAAA;AAAA,IAEvC,MAAM,YAAY,CAAC,GAAG,IAAI;AAAA,IAE1B,IAAI,MAAM,UAAU,WAAW;AAAA,MAC7B,SAAS;AAAA,MACT,UAAU,KAAK,MAAM,OAAO,MAAM;AAAA,IACpC,EAAO,SAAI,SAAS,GAAG;AAAA,MACrB,SAAS;AAAA,MACT,UAAU,KAAK,MAAM;AAAA,IACvB;AAAA,IAEA,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,GAAG,SAAS;AAAA,IAElD,OAAO;AAAA,MACL,eAAe,KAAK,IAAI,+BAA+B;AAAA,MACvD,SAAS,SAAS,KAAK,SAAS,SAAS;AAAA,MACzC,OAAO,SAAS;AAAA,IAClB;AAAA;AAAA,EAGF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,0BAA0B,CAChC,WACA,IACiC;AAAA,IACjC,MAAM,MAAM,KAAK,GACd,MAAM,sEAAsE,EAC5E,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,0BACR,uCAAuC,8BAA8B,aACvE;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,WAAW,WAAW;AAAA,MAC5B,MAAM,IAAI,0BACR,uCAAuC,oBAAoB,4BAC7D;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,mBAAmB,CAAC,WAAmB,IAAwC;AAAA,IACrF,MAAM,MAAM,KAAK,GACd,MAAM,sEAAsE,EAC5E,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,0BACR,sDAAsD,oBAAoB,aAC5E;AAAA,IACF;AAAA,IAEA,OAAO,gCAAgC,GAAG;AAAA;AAE9C;AAIA,SAAS,eAAe,CAAC,OAAmC;AAAA,EAC1D,OAAO,KAAK,UAAU,KAAK;AAAA;AAG7B,SAAS,WAAW,CAAC,OAAmC;AAAA,EACtD,OAAO,KAAK,MAAM,KAAK;AAAA;AAGzB,SAAS,kBAAkB,CAAC,WAAiD;AAAA,EAC3E,OAAO,YAAY,KAAK,UAAU,SAAS,IAAI;AAAA;AAGjD,SAAS,cAAc,CAAC,OAA6C;AAAA,EACnE,OAAO,QAAS,KAAK,MAAM,KAAK,IAAkB;AAAA;AAGpD,SAAS,+BAA+B,CACtC,KAC4B;AAAA,EAC5B,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,YAAY,IAAI;AAAA,IAChB,eAAe,IAAI;AAAA,IACnB,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,IACb,gBAAgB,IAAI;AAAA,IACpB,OAAO,YAAY,IAAI,KAAK;AAAA,IAC5B,iBAAiB,YAAY,IAAI,gBAAgB;AAAA,IACjD,QAAQ,IAAI;AAAA,IACZ,aAAa,IAAI,KAAK,IAAI,YAAY;AAAA,IACtC,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,IACvD,aAAa,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,IAC7D,aAAa,eAAe,IAAI,YAAY;AAAA,IAC5C,UAAU,IAAI,WAAW,YAAY,IAAI,QAAQ,IAAI;AAAA,IACrD,aAAa,IAAI,eAAe,IAAI,KAAK,IAAI,YAAY,IAAI;AAAA,IAC7D,aAAa,eAAe,IAAI,YAAY;AAAA,IAC5C,WAAW,IAAI,aAAa,IAAI,KAAK,IAAI,UAAU,IAAI;AAAA,EACzD;AAAA;AAGF,SAAS,wBAAwB,CAAC,OAAe,WAAyB;AAAA,EACxE,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AAAA,IACzC,MAAM,IAAI,0BACR,sCAAsC,2CACxC;AAAA,EACF;AAAA;;;ACpXF,6BAAS,2CAAkB;AAC3B;AAAA;AAAA;AAAA;AAsCA;AAAA,6BACE;AAAA;AAAA;AAAA;AA4BK,MAAM,yBAAuD;AAAA,EACzD;AAAA,EACA;AAAA,EAEQ;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,SAA0C;AAAA,IACpD,KAAK,aAAa,0BAA0B,OAAO;AAAA,IACnD,KAAK,KAAK,KAAK,WAAW;AAAA,IAC1B,KAAK,aAAa,QAAQ;AAAA,IAE1B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,EAAE;AAAA,IAClC;AAAA,IAEA,KAAK,QAAQ,IAAI,6BAA6B,KAAK,EAAE;AAAA,IACrD,KAAK,aAAa,IAAI,kCAAkC,KAAK,IAAI,KAAK,UAAU;AAAA;AAAA,OAG5E,MAAK,CAAC,OAA0D;AAAA,IACpE,MAAM,WAAW,MAAM,YAAY,IAAI;AAAA,IACvC,MAAM,2BAA2B;AAAA,MAC/B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,YAAY,MAAM;AAAA,IACpB,CAAC;AAAA,IAED,IAAI;AAAA,MACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAaF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,aACN,MAAM,YACN,UACA,iBAAgB,MAAM,KAAK,GAC3B,SAAS,YAAY,GACrB,SAAS,YAAY,GACrB,CACF;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,iBACR,8BAA8B,MAAM,qBAAqB,MAAM,+CAA+C,MAAM,aACtH;AAAA,MACF;AAAA,MAEA,MAAM;AAAA;AAAA,IAGR,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,EAAE;AAAA;AAAA,OAGpD,MAAK,CAAC,OAA0D;AAAA,IACpE,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,IAEzC,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,YAAY,SAAS,WAAW,UAAU;AAAA,QAC7C,MAAM,IAAI,iBACR,WACI,8BAA8B,MAAM,iCAAiC,SAAS,aAC9E,8BAA8B,MAAM,8BAA8B,MAAM,aAC9E;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IACC,WACA,UAAU,YAAY,GACtB,MAAM,WAAW,SAAS,MAC1B,MAAM,WAAW,oBAAoB,YAAY,KAAK,MACtD,MAAM,WACN,MAAM,EACR;AAAA,MAEF,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,EAAE;AAAA,KACzD,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,OAA4D;AAAA,IACxE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,IAAI,SAAS;AAAA,MACnE,KAAK,GACF,MAAM;AAAA;AAAA;AAAA,OAGR,EACE,IACC,IAAI,UAAU,GACd,MAAM,UAAU,OAChB,MAAM,UAAU,oBAAoB,YAAY,GAChD,MAAM,WACN,MAAM,EACR;AAAA,MACF,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,EAAE;AAAA,KACzD,EAAE;AAAA;AAAA,OAGC,0BAAyB,CAC7B,OAC4B;AAAA,IAC5B,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,IAAI,SAAS;AAAA,MACnE,iCAAiC,KAAK,MAAM,cAAc;AAAA,MAC1D,MAAM,UAAU,IAAI,mCAChB,IAAI,KAAK,IAAI,gCAAgC,IAC7C,MAAM;AAAA,MACV,KAAK,GACF,MAAM;AAAA;AAAA;AAAA,OAGR,EACE,IACC,IAAI,KAAK,KAAK,IAAI,QAAQ,QAAQ,GAAG,MAAM,oBAAoB,QAAQ,CAAC,CAAC,EAAE,YAAY,GACvF,MAAM,WACN,MAAM,EACR;AAAA,MACF,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,EAAE;AAAA,KACzD,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAA2D;AAAA,IACtE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,8BAA8B,MAAM,8BAA8B,MAAM,aAC1E;AAAA,MACF;AAAA,MAEA,IAAI,CAAC,qBAAqB,SAAS,QAAQ,MAAM,MAAM,GAAG;AAAA,QACxD,MAAM,IAAI,iBACR,8BAA8B,MAAM,oBAAoB,MAAM,8CAA8C,SAAS,UACvH;AAAA,MACF;AAAA,MACA,iCAAiC,UAAU,MAAM,cAAc;AAAA,MAE/D,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWF,EACC,IACC,MAAM,SACL,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,WAAW,cAAc,iBAAgB,MAAM,MAAM,IAAI,MAC/D,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,sBAAqB,MAAM,OAAO,0BAA0B,GAChE,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,uBAAuB,OAAO;AAAA,KACtC,EAAE;AAAA;AAAA,OAGC,KAAI,CAAC,OAAyD;AAAA,IAClE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,8BAA8B,MAAM,8BAA8B,MAAM,aAC1E;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,IAAI,iBACR,8BAA8B,MAAM,oBAAoB,MAAM,6BAChE;AAAA,MACF;AAAA,MACA,iCAAiC,UAAU,MAAM,cAAc;AAAA,MAE/D,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,MAE3C,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,EAAE;AAAA,KACzD,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAA2D;AAAA,IACtE,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,8BAA8B,MAAM,8BAA8B,MAAM,aAC1E;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,IAAI,iBACR,8BAA8B,MAAM,oBAAoB,MAAM,6BAChE;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IACC,WACA,MAAM,WAAW,SAAS,MAC1B,MAAM,WAAW,oBAAoB,YAAY,KAAK,MACtD,MAAM,WACN,MAAM,EACR;AAAA,MAEF,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,EAAE;AAAA,KACzD,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAA8E;AAAA,IAC1F,MAAM,MAAM,KAAK,GACd,MAAM,6DAA6D,EACnE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,uBAAuB,GAAG,IAAI;AAAA;AAAA,OAGvC,KAAI,CAAC,OAA+D;AAAA,IACxE,IAAI,iBAAiB,KAAK,KAAK,MAAM,aAAa,WAAW,GAAG;AAAA,MAC9D,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,YAAY;AAAA,MACpB,aAAa,KAAK,iBAAiB;AAAA,MACnC,KAAK,KAAK,MAAM,UAAU;AAAA,IAC5B;AAAA,IAEA,IAAI,MAAM,aAAa;AAAA,MACrB,aAAa,KAAK,mBAAmB,MAAM,YAAY,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AAAA,MACnF,KAAK,KAAK,GAAG,MAAM,WAAW;AAAA,IAChC;AAAA,IAEA,qBAAqB,cAAc,MAAM,KAAK;AAAA,IAE9C,QAAQ,MAAM,OAAO,YAAY,aAAqC;AAAA,MACpE,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,sBAAsB;AAAA,MACrC;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,wBAAuB,CAC3B,OACuC;AAAA,IACvC,MAAM,OAAO,yBAAiD;AAAA,MAC5D,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,MACjB,YAAY,CAAC,QAAQ,IAAI;AAAA,IAC3B,CAAC;AAAA,IAED,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,sBAAsB;AAAA,IACvC;AAAA;AAAA,EAGF,KAAK,GAAS;AAAA,IACZ,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,kBAAkB,CAAC,WAAmB,IAA+B;AAAA,IAC3E,MAAM,SAAS,KAAK,GACjB,MAAM,6DAA6D,EACnE,IAAI,WAAW,EAAE;AAAA,IAEpB,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,iBACR,6CAA6C,oBAAoB,aACnE;AAAA,IACF;AAAA,IAEA,OAAO,uBAAuB,MAAM;AAAA;AAAA,EAG9B,aAAa,CACnB,WACA,IACA,QACwB;AAAA,IACxB,MAAM,MAAM,KAAK,GACd,MAAM,6DAA6D,EACnE,IAAI,WAAW,EAAE;AAAA,IACpB,IAAI,CAAC;AAAA,MAAK,MAAM,IAAI,iBAAiB,8BAA8B,gBAAgB;AAAA,IACnF,IAAI,IAAI,WAAW,QAAQ;AAAA,MACzB,MAAM,IAAI,iBACR,8BAA8B,eAAe,mBAAmB,IAAI,WACtE;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAEX;AAAA;AAEO,MAAM,kCAAyE;AAAA,EAEjE;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,IACA,YACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,OAAM,CAAC,OAA6E;AAAA,IACxF,MAAM,SAAS,KAAK,GACjB,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUF,EACC,IAAI,MAAM,WAAW,MAAM,SAAS;AAAA,IACvC,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,iBACR,yCAAyC,MAAM,2BACjD;AAAA,IACF;AAAA,IACA,MAAM,oCAAoC;AAAA,MACxC,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,SAAS,MAAM;AAAA,MACf,qBAAqB,OAAO;AAAA,IAC9B,CAAC;AAAA,IAED,IAAI;AAAA,MACF,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA,SAIN,EACA,IACC,MAAM,WACN,MAAM,WACN,MAAM,aACN,MAAM,SACN,UACA,MAAM,QACN,IACC,MAAM,aAAa,IAAI,MAAQ,YAAY,CAC9C;AAAA,MACF,OAAO,OAAO;AAAA,MACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,QAClC,MAAM,IAAI,iBACR,sEAAsE,MAAM,aAC9E;AAAA,MACF;AAAA,MACA,MAAM;AAAA;AAAA,IAER,OAAO,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA;AAAA,OAGhD,MAAK,CAAC,OAA4E;AAAA,IACtF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,KAAK,cAAc,MAAM,WAAW,MAAM,WAAW,QAAQ;AAAA,MAC7D,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,OAKR,EACE,IACC,WACA,MAAM,WAAW,MACjB,MAAM,UAAU,OAChB,MAAM,UAAU,oBAAoB,YAAY,IAC/C,MAAM,aAAa,IAAI,MAAQ,YAAY,GAC5C,MAAM,WACN,MAAM,SACR;AAAA,MACF,OAAO,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,KACrD,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,OAA8E;AAAA,IAC1F,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,WAAW,SAAS;AAAA,MAC1E,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA,OAIR,EACE,IACC,OAAO,IAAI,OAAO,IAAI,GACtB,MAAM,UAAU,OAChB,MAAM,UAAU,oBAAoB,YAAY,GAChD,MAAM,WACN,MAAM,SACR;AAAA,MACF,OAAO,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,KACrD,EAAE;AAAA;AAAA,OAGC,0BAAyB,CAC7B,OACqC;AAAA,IACrC,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,WAAW,SAAS;AAAA,MAC1E,uCAAuC,KAAK,MAAM,cAAc;AAAA,MAChE,MAAM,UAAU,IAAI,mCAChB,IAAI,KAAK,IAAI,gCAAgC,IAC7C,MAAM;AAAA,MACV,KAAK,GACF,MAAM;AAAA;AAAA;AAAA,OAGR,EACE,IACC,IAAI,KAAK,KAAK,IAAI,QAAQ,QAAQ,GAAG,MAAM,oBAAoB,QAAQ,CAAC,CAAC,EAAE,YAAY,GACvF,MAAM,WACN,MAAM,SACR;AAAA,MACF,OAAO,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,KACrD,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAA6E;AAAA,IACxF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,WAAW,SAAS;AAAA,MAC1E,uCAAuC,KAAK,MAAM,cAAc;AAAA,MAChE,KAAK,GACF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAMR,EACE,IACC,MAAM,QACN,MAAM,WAAW,MACjB,MAAM,gBAAgB,MACtB,MAAM,QAAQ,KAAK,UAAU,MAAM,KAAK,IAAI,MAC5C,MAAM,cAAc,KAAK,UAAU,MAAM,WAAW,IAAI,MACxD,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,sBAAqB,MAAM,OAAO,wBAAuB,IAC5D,MAAM,eAAe,IAAI,MAAQ,YAAY,GAC9C,MAAM,WACN,MAAM,SACR;AAAA,MACF,OAAO,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,KACrD,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAA6E;AAAA,IACxF,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,MAAM,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,MACzD,IAAI,IAAI,WAAW,YAAY,IAAI,WAAW,WAAW;AAAA,QACvD,MAAM,IAAI,iBACR,yCAAyC,MAAM,+CAA+C,IAAI,UACpG;AAAA,MACF;AAAA,MACA,KAAK,GACF,MACC;AAAA;AAAA,oDAGF,EACC,IACC,aACA,MAAM,UAAU,YACZ,OACA,sBAAqB,MAAM,OAAO,wBAAuB,IAC5D,MAAM,eAAe,IAAI,MAAQ,YAAY,GAC9C,MAAM,WACN,MAAM,SACR;AAAA,MACF,OAAO,KAAK,QAAQ,MAAM,WAAW,MAAM,SAAS;AAAA,KACrD,EAAE;AAAA;AAAA,OAGC,eAAc,CAAC,QAG0B;AAAA,IAC7C,MAAM,MAAM,KAAK,GACd,MAAM,iFAAiF,EACvF,IAAI,OAAO,WAAW,OAAO,SAAS;AAAA,IACzC,OAAO,MAAM,gCAAgC,GAAG,IAAI;AAAA;AAAA,OAGhD,KAAI,CAAC,OAAiF;AAAA,IAC1F,IAAI,iBAAiB,KAAK;AAAA,MAAG,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,GAAG,SAAS,MAAM;AAAA,IACzE,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAC5C,IAAI,MAAM,SAAS;AAAA,MACjB,aAAa,KAAK,cAAc;AAAA,MAChC,KAAK,KAAK,MAAM,OAAO;AAAA,IACzB;AAAA,IACA,qBAAqB,cAAc,MAAM,KAAK;AAAA,IAC9C,MAAM,SAAS,aAA8C;AAAA,MAC3D,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IACD,OAAO,KAAK,QAAQ,MAAM,OAAO,KAAK,IAAI,+BAA+B,EAAE;AAAA;AAAA,EAGrE,OAAO,CAAC,WAAmB,WAA+C;AAAA,IAChF,MAAM,MAAM,KAAK,GACd,MAAM,iFAAiF,EACvF,IAAI,WAAW,SAAS;AAAA,IAC3B,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,iBACR,yCAAyC,qCAAqC,aAChF;AAAA,IACF;AAAA,IACA,OAAO,gCAAgC,GAAG;AAAA;AAAA,EAGpC,aAAa,CACnB,WACA,WACA,QACiC;AAAA,IACjC,MAAM,MAAM,KAAK,GACd,MAAM,iFAAiF,EACvF,IAAI,WAAW,SAAS;AAAA,IAC3B,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,iBACR,yCAAyC,qCAAqC,aAChF;AAAA,IACF;AAAA,IACA,IAAI,IAAI,WAAW,QAAQ;AAAA,MACzB,MAAM,IAAI,iBACR,yCAAyC,sBAAsB,mBAAmB,IAAI,WACxF;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAEX;AAAA;AAEO,MAAM,6BAA+D;AAAA,EAC7C;AAAA,EAA7B,WAAW,CAAkB,IAAc;AAAA,IAAd;AAAA;AAAA,OAEvB,MAAK,CAAC,OAAkE;AAAA,IAC5E,0BAAyB,MAAM,WAAW,WAAW;AAAA,IAErD,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,cAAc,KAAK,GACtB,MAAM,6DAA6D,EACnE,IAAI,MAAM,WAAW,MAAM,aAAa;AAAA,MAE3C,IAAI,CAAC,aAAa;AAAA,QAChB,MAAM,IAAI,iBACR,8BAA8B,MAAM,yCAAyC,MAAM,aACrF;AAAA,MACF;AAAA,MAEA,IAAI,YAAY,WAAW,WAAW;AAAA,QACpC,MAAM,IAAI,iBACR,8BAA8B,MAAM,+BAA+B,MAAM,6BAC3E;AAAA,MACF;AAAA,MACA,iCAAiC,aAAa,MAAM,cAAc;AAAA,MAElE,IAAI,YAAY,gBAAgB,MAAM,YAAY;AAAA,QAChD,MAAM,IAAI,iBACR,mCAAmC,MAAM,iBAAiB,MAAM,4CAA4C,MAAM,4BAA4B,YAAY,eAC5J;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,MAAM,aAAa,IAAI;AAAA,MAEzC,IAAI;AAAA,QACF,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAeF,EACC,IACC,MAAM,WACN,MAAM,IACN,MAAM,eACN,MAAM,YACN,MAAM,WACN,MAAM,UACN,MAAM,QACN,MAAM,SACN,WACA,iBAAgB,MAAM,KAAK,GAC3B,UAAU,YAAY,CACxB;AAAA,QACF,OAAO,OAAO;AAAA,QACd,IAAI,yBAAwB,KAAK,GAAG;AAAA,UAClC,MAAM,IAAI,iBACR,mCAAmC,MAAM,mCAAmC,MAAM,aACpF;AAAA,QACF;AAAA,QAEA,MAAM;AAAA;AAAA,MAGR,MAAM,MAAM,KAAK,GACd,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,KAAK;AAAA,QACR,MAAM,IAAI,iBACR,kDAAkD,MAAM,oBAAoB,MAAM,aACpF;AAAA,MACF;AAAA,MAEA,OAAO,2BAA2B,GAAG;AAAA,KACtC,EAAE;AAAA;AAAA,OAGC,OAAM,CAAC,OAAmE;AAAA,IAC9E,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,mCAAmC,MAAM,8BAA8B,MAAM,aAC/E;AAAA,MACF;AAAA,MACA,KAAK,0BAA0B,UAAU,MAAM,cAAc;AAAA,MAE7D,IAAI,SAAS,WAAW,aAAa,SAAS,WAAW,WAAW;AAAA,QAClE,MAAM,IAAI,iBACR,mCAAmC,MAAM,oBAAoB,MAAM,iCACrE;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IACC,MAAM,SACL,MAAM,cAAc,IAAI,MAAQ,YAAY,GAC7C,MAAM,WAAW,eAAe,MAAM,SAAS,iBAAgB,MAAM,MAAM,IAAI,MAC/E,MAAM,WAAW,eAAe,MAAM,UAAU,YAC5C,OACA,sBAAqB,MAAM,OAAO,0BAA0B,GAChE,MAAM,WACN,MAAM,EACR;AAAA,MAEF,MAAM,UAAU,KAAK,GAClB,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,2BAA2B,OAAO;AAAA,KAC1C,EAAE;AAAA;AAAA,OAGC,KAAI,CAAC,OAAiE;AAAA,IAC1E,OAAO,KAAK,GAAG,YAAY,MAAM;AAAA,MAC/B,MAAM,WAAW,KAAK,GACnB,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iBACR,mCAAmC,MAAM,8BAA8B,MAAM,aAC/E;AAAA,MACF;AAAA,MACA,KAAK,0BAA0B,UAAU,MAAM,cAAc;AAAA,MAE7D,IAAI,SAAS,WAAW,WAAW;AAAA,QACjC,MAAM,IAAI,iBACR,mCAAmC,MAAM,oBAAoB,MAAM,6BACrE;AAAA,MACF;AAAA,MAEA,KAAK,GACF,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASF,EACC,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,MAE3C,MAAM,UAAU,KAAK,GAClB,MAAM,kEAAkE,EACxE,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,MAEhC,OAAO,2BAA2B,OAAO;AAAA,KAC1C,EAAE;AAAA;AAAA,OAGC,QAAO,CAAC,QAAkF;AAAA,IAC9F,MAAM,MAAM,KAAK,GACd,MAAM,kEAAkE,EACxE,IAAI,OAAO,WAAW,OAAO,EAAE;AAAA,IAElC,OAAO,MAAM,2BAA2B,GAAG,IAAI;AAAA;AAAA,OAG3C,KAAI,CAAC,OAAuE;AAAA,IAChF,IAAI,iBAAiB,KAAK,GAAG;AAAA,MAC3B,OAAO;AAAA,QACL,OAAO,CAAC;AAAA,QACR,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,CAAC,gBAAgB;AAAA,IACtC,MAAM,OAAsB,CAAC,MAAM,SAAS;AAAA,IAE5C,IAAI,MAAM,eAAe;AAAA,MACvB,aAAa,KAAK,qBAAqB;AAAA,MACvC,KAAK,KAAK,MAAM,aAAa;AAAA,IAC/B;AAAA,IAEA,IAAI,MAAM,YAAY;AAAA,MACpB,aAAa,KAAK,iBAAiB;AAAA,MACnC,KAAK,KAAK,MAAM,UAAU;AAAA,IAC5B;AAAA,IAEA,IAAI,MAAM,UAAU;AAAA,MAClB,aAAa,KAAK,eAAe;AAAA,MACjC,KAAK,KAAK,MAAM,QAAQ;AAAA,IAC1B;AAAA,IAEA,IAAI,MAAM,QAAQ;AAAA,MAChB,aAAa,KAAK,aAAa;AAAA,MAC/B,KAAK,KAAK,MAAM,MAAM;AAAA,IACxB;AAAA,IAEA,IAAI,MAAM,SAAS;AAAA,MACjB,aAAa,KAAK,cAAc;AAAA,MAChC,KAAK,KAAK,MAAM,OAAO;AAAA,IACzB;AAAA,IAEA,qBAAqB,cAAc,MAAM,KAAK;AAAA,IAE9C,QAAQ,MAAM,OAAO,YAAY,aAAyC;AAAA,MACxE,IAAI,KAAK;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,OAAO;AAAA,MACL,OAAO,KAAK,IAAI,0BAA0B;AAAA,MAC1C;AAAA,MACA;AAAA,IACF;AAAA;AAAA,EAGM,yBAAyB,CAAC,MAAkC,OAAsB;AAAA,IACxF,MAAM,MAAM,KAAK,GACd,MAAM,6DAA6D,EACnE,IAAI,KAAK,YAAY,KAAK,eAAe;AAAA,IAC5C,IAAI,CAAC;AAAA,MAAK,MAAM,IAAI,iBAAiB,iDAAiD;AAAA,IACtF,iCAAiC,KAAK,KAAK;AAAA;AAE/C;AAEA,SAAS,gBAAe,CAAC,OAAmC;AAAA,EAC1D,OAAO,KAAK,UAAU,KAAK;AAAA;AAG7B,SAAS,YAAW,CAAC,OAAmC;AAAA,EACtD,OAAO,KAAK,MAAM,KAAK;AAAA;AAGzB,SAAS,sBAAsB,CAAC,KAAgD;AAAA,EAC9E,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,YAAY,IAAI;AAAA,IAChB,QAAQ,IAAI;AAAA,IACZ,OAAO,aAAY,IAAI,KAAK;AAAA,IAC5B,QAAQ,IAAI,SAAS,aAAY,IAAI,MAAM,IAAI;AAAA,IAC/C,UAAU,IAAI,YAAY,IAAI,KAAK,IAAI,SAAS,IAAI;AAAA,IACpD,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,OAAO,IAAI,UAAU,OAAO,YAAY,kBAAiB,IAAI,OAAO,0BAA0B;AAAA,IAC9F,SAAS,IAAI;AAAA,OACT,IAAI,mBAAmB,IAAI,mCAC3B;AAAA,MACE,WAAW;AAAA,QACT,OAAO,IAAI;AAAA,QACX,qBAAqB,IAAI,KAAK,IAAI,gCAAgC;AAAA,MACpE;AAAA,IACF,IACA,CAAC;AAAA,EACP;AAAA;AAGF,SAAS,0BAA0B,CAAC,KAAwD;AAAA,EAC1F,OAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,WAAW,IAAI;AAAA,IACf,eAAe,IAAI;AAAA,IACnB,YAAY,IAAI;AAAA,IAChB,WAAW,IAAI;AAAA,IACf,UAAU,IAAI;AAAA,IACd,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,OAAO,aAAY,IAAI,KAAK;AAAA,IAC5B,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,IAClC,YAAY,IAAI,cAAc,IAAI,KAAK,IAAI,WAAW,IAAI;AAAA,IAC1D,QAAQ,IAAI,SAAS,aAAY,IAAI,MAAM,IAAI;AAAA,IAC/C,OAAO,IAAI,UAAU,OAAO,YAAY,kBAAiB,IAAI,OAAO,0BAA0B;AAAA,EAChG;AAAA;AAGF,SAAS,yBAAwB,CAAC,OAAe,WAAyB;AAAA,EACxE,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AAAA,IACzC,MAAM,IAAI,iBACR,6BAA6B,2CAC/B;AAAA,EACF;AAAA;AAGF,SAAS,oBAAoB,CAC3B,SACA,MACS;AAAA,EACT,OACE,YAAY,aACX,YAAY,aAAa,SAAS,eAClC,YAAY,YAAY,SAAS;AAAA;AA0DtC,SAAS,sCAAsC,CAC7C,KACA,OACM;AAAA,EACN,IAAI,IAAI,oBAAoB,OAAO;AAAA,IACjC,MAAM,IAAI,iBACR,iFAAiF,IAAI,eACvF;AAAA,EACF;AAAA;AAGF,SAAS,+BAA+B,CACtC,KAC4B;AAAA,EAC5B,OAAO;AAAA,IACL,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,QAAQ,IAAI;AAAA,OACR,IAAI,WAAW,EAAE,SAAS,IAAI,SAAS,IAAI,CAAC;AAAA,OAC5C,IAAI,gBAAgB,EAAE,cAAc,IAAI,cAAc,IAAI,CAAC;AAAA,OAC3D,IAAI,QAAQ,EAAE,OAAO,KAAK,MAAM,IAAI,KAAK,EAAE,IAAI,CAAC;AAAA,OAChD,IAAI,cAAc,EAAE,aAAa,KAAK,MAAM,IAAI,WAAW,EAAE,IAAI,CAAC;AAAA,OAClE,IAAI,QAAQ,EAAE,OAAO,kBAAiB,IAAI,OAAO,wBAAuB,EAAE,IAAI,CAAC;AAAA,IACnF,SAAS,IAAI;AAAA,OACT,IAAI,mBAAmB,IAAI,mCAC3B;AAAA,MACE,WAAW;AAAA,QACT,OAAO,IAAI;AAAA,QACX,qBAAqB,IAAI,KAAK,IAAI,gCAAgC;AAAA,MACpE;AAAA,IACF,IACA,CAAC;AAAA,IACL,WAAW,IAAI,KAAK,IAAI,UAAU;AAAA,OAC9B,IAAI,aAAa,EAAE,WAAW,IAAI,KAAK,IAAI,UAAU,EAAE,IAAI,CAAC;AAAA,OAC5D,IAAI,eAAe,EAAE,aAAa,IAAI,KAAK,IAAI,YAAY,EAAE,IAAI,CAAC;AAAA,EACxE;AAAA;AAGF,SAAS,gCAAgC,CAAC,KAA6B,OAAsB;AAAA,EAC3F,IAAI,IAAI,qBAAqB,SAAS,OAAO;AAAA,IAC3C,MAAM,IAAI,iBACR,sEAAsE,IAAI,MAC5E;AAAA,EACF;AAAA;;;AjEphCK,MAAM,cAAiD;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEQ;AAAA,EACA;AAAA,EACA,mBAAmB,IAAI;AAAA,EAChC,kBAAiC,QAAQ,QAAQ;AAAA,EAEzD,WAAW,CAAC,UAAgC,CAAC,GAAG;AAAA,IAC9C,MAAM,OAAO,QAAQ,OAAO,kBAAkB,QAAQ,IAAI,IAAI;AAAA,IAC9D,KAAK,aAAa,0BAA0B,EAAE,KAAK,CAAC;AAAA,IACpD,IAAI,MAAM;AAAA,MACR,KAAK,WAAW,GAAG,IAAI,2BAA2B;AAAA,MAClD,KAAK,iBAAiB,0BAA0B,EAAE,MAAM,UAAU,KAAK,CAAC;AAAA,IAC1E,EAAO;AAAA,MACL,KAAK,iBAAiB,KAAK;AAAA;AAAA,IAG7B,IAAI,KAAK,WAAW,oBAAoB;AAAA,MACtC,yBAAyB,KAAK,WAAW,EAAE;AAAA,IAC7C;AAAA,IAEA,MAAM,SAAS,mBAAmB,KAAK,YAAY;AAAA,MACjD,sBAAsB,OAAO,QAAQ,IAAI;AAAA,MACzC,oBAAoB;AAAA,IACtB,CAAC;AAAA,IACD,MAAM,+BAA+B,MAAM,KAAK,6BAA6B;AAAA,IAC7E,MAAM,QAAQ,4BACZ,CAAC,QAAQ,KAAK,wBAAwB,GAAG,GACzC,4BACF;AAAA,IACA,MAAM,gBAAgB,4BACpB,CAAC,QAAQ,KAAK,yBAAyB,GAAG,GAC1C,4BACF;AAAA,IACA,MAAM,YAAY,OACd,4BAA4B,OAAO,QAAQ;AAAA,MACzC,KAAK,6BAA6B;AAAA,MAClC,OAAO,IAAI;AAAA,OACV,4BAA4B,IAC/B;AAAA,IACJ,MAAM,cAAc,OAChB,IAAI,oBAAoB,EAAE,YAAY,KAAK,eAAe,CAAC,IAC3D,OAAO;AAAA,IACX,MAAM,iBAAiB,OACnB,IAAI,wBAAwB,EAAE,YAAY,KAAK,eAAe,CAAC,IAC/D,OAAO;AAAA,IACX,KAAK,UAAU,2BAA2B,aAAa,SAAS;AAAA,IAChE,KAAK,WAAW,6BAA6B,OAAO,UAAU,aAAa;AAAA,IAC3E,KAAK,OAAO,yBAAyB,OAAO,MAAM,KAAK;AAAA,IACvD,KAAK,aAAa,4BAA4B,OAAO,YAAY,KAAK;AAAA,IACtE,KAAK,SAAS,0BAA0B,OAAO,QAAQ,KAAK;AAAA,IAC5D,KAAK,UAAU,4BAA4B,OAAO,SAAS,KAAK;AAAA,IAChE,KAAK,UAAU,4BAA4B,OAAO,SAAS,KAAK;AAAA,IAChE,KAAK,WAAW,4BAA4B,OAAO,UAAU,KAAK;AAAA,IAClE,KAAK,aAAa,4BAA4B,OAAO,YAAY,KAAK;AAAA,IACtE,KAAK,eAAe,4BAA4B,OAAO,cAAc,KAAK;AAAA,IAC1E,KAAK,aAAa,4BAA4B,gBAAgB,SAAS;AAAA,IACvE,KAAK,WAAW,4BAA4B,OAAO,UAAU,KAAK;AAAA,IAClE,KAAK,iBAAiB,4BAA4B,OAAO,gBAAgB,KAAK;AAAA,IAC9E,KAAK,eAAe,gCAAgC,OAAO,cAAc,KAAK;AAAA,IAC9E,KAAK,wBAAwB,4BAA4B,OAAO,uBAAuB,KAAK;AAAA,IAC5F,KAAK,cAAc,4BAA4B,OAAO,aAAa,KAAK;AAAA,IACxE,KAAK,QAAQ,4BAA4B,OAAO,OAAO,KAAK;AAAA,IAC5D,KAAK,cAAc,4BAA4B,OAAO,aAAa,KAAK;AAAA,IACxE,KAAK,gBAAgB,4BAA4B,OAAO,eAAe,KAAK;AAAA,IAC5E,KAAK,uBAAuB,4BAA4B,OAAO,sBAAsB,KAAK;AAAA,IAC1F,KAAK,qBAAqB,4BAA4B,OAAO,oBAAoB,KAAK;AAAA,IACtF,KAAK,YAAY,QAAQ,OAAO,6BAA6B,QAAQ,IAAI,IAAI,CAAC;AAAA,IAC9E,oCAAoC,MAAM,CAAC,eACzC,OAAO,qBAAqB,sBAAsB,UAAU,CAC9D;AAAA;AAAA,OAGI,KAAI,GAAkB;AAAA,IAC1B,KAAK,6BAA6B;AAAA,IAClC,IAAI,KAAK,mBAAmB,KAAK,YAAY;AAAA,MAC3C,KAAK,eAAe,GAAG,MAAM,UAAU,EAAE,IAAI;AAAA,MAC7C;AAAA,IACF;AAAA,IACA,MAAM,KAAK,wBAAwB,MAAM;AAAA,MACvC,KAAK,WAAW,GAAG,MAAM,UAAU,EAAE,IAAI;AAAA,KAC1C;AAAA;AAAA,OASG,YAAc,CAClB,KACA,WAAsC,CAAC,GAC3B;AAAA,IACZ,IAAI,KAAK,iBAAiB,SAAS,GAAG;AAAA,MACpC,8BAA8B;AAAA,IAChC;AAAA,IAEA,OAAO,KAAK,oBAAoB,YAAY;AAAA,MAC1C,IAAI,SAAS;AAAA,MACb,MAAM,QAAQ,EAAE,QAAQ,KAAK;AAAA,MAC7B,MAAM,qBAAuD;AAAA,QAC3D,IAAI,CAAC;AAAA,QACL,kBAAkB,IAAI;AAAA,QACtB,QAAQ;AAAA,MACV;AAAA,MACA,MAAM,YAAY,KAAK,yBAAyB,kBAAkB;AAAA,MAClE,MAAM,KAAK,8BAA8B,WAAW,MAAM,MAAM;AAAA,MAEhE,IAAI;AAAA,QACF,OAAO,MAAM,6BAA6B,KAAK,WAAW,IAAI,MAC5D,KAAK,iBAAiB,IAAI,OAAO,YAAY;AAAA,UAC3C,IAAI;AAAA,YACF,MAAM,SAAS,MAAM,IAAI,EAAE;AAAA,YAC3B,mBAAmB,iBAAiB,kBAAkB;AAAA,YACtD,OAAO;AAAA,oBACP;AAAA,YACA,MAAM,SAAS;AAAA,YACf,mBAAmB,SAAS;AAAA,YAC5B,UAAU,SAAS,mBAAmB;AAAA,YACtC,mBAAmB,iBAAiB,WAAW;AAAA;AAAA,SAElD,CACH;AAAA,gBACA;AAAA,QACA,SAAS;AAAA;AAAA,KAEZ;AAAA;AAAA,EAGH,KAAK,GAAS;AAAA,IACZ,IAAI,KAAK,mBAAmB,KAAK;AAAA,MAAY,2BAA2B,KAAK,cAAc;AAAA,IAC3F,2BAA2B,KAAK,UAAU;AAAA;AAAA,EAGpC,wBAAwB,CAC9B,oBACwD;AAAA,IACxD,OAAO;AAAA,SACF,mBACD;AAAA,QACE,IAAI,KAAK,WAAW;AAAA,QACpB,gBAAgB;AAAA,QAChB,oBAAoB;AAAA,MACtB,GACA;AAAA,QACE,sBAAsB,OAAO,QAAQ,IAAI;AAAA,QACzC;AAAA,MACF,CACF;AAAA,MACA,MAAM,YAAY;AAAA,QAChB,KAAK,WAAW,GAAG,MAAM,UAAU,EAAE,IAAI;AAAA;AAAA,MAE3C,aAAa,YAA2B;AAAA,QACtC,8BAA8B;AAAA;AAAA,IAElC;AAAA;AAAA,EAGM,uBAA0B,CAAC,KAAuC;AAAA,IACxE,KAAK,6BAA6B;AAAA,IAClC,OAAO,KAAK,oBAAoB,YAAY,IAAI,CAAC;AAAA;AAAA,EAG3C,wBAA2B,CAAC,KAAuC;AAAA,IACzE,KAAK,6BAA6B;AAAA,IAClC,OAAO,KAAK,oBAAoB,MAAM,6BAA6B,KAAK,WAAW,IAAI,GAAG,CAAC;AAAA;AAAA,EAGrF,4BAA4B,GAAS;AAAA,IAC3C,IAAI,CAAC,KAAK,iBAAiB,SAAS,GAAG;AAAA,MAAQ;AAAA,IAC/C,MAAM,IAAI,wBACR,sGACF;AAAA;AAAA,OAGY,oBAAsB,CAAC,KAAmC;AAAA,IACtE,MAAM,WAAW,KAAK;AAAA,IACtB,IAAI;AAAA,IACJ,KAAK,kBAAkB,IAAI,QAAc,CAAC,YAAY;AAAA,MACpD,UAAU;AAAA,KACX;AAAA,IAED,MAAM;AAAA,IACN,IAAI;AAAA,MACF,OAAO,MAAM,IAAI;AAAA,cACjB;AAAA,MACA,QAAQ;AAAA;AAAA;AAGd;AAEA,SAAS,kBAAkB,CACzB,YACA,SAIgB;AAAA,EAChB,MAAM,OAAO,IAAI,kBAAkB,EAAE,WAAW,CAAC;AAAA,EACjD,MAAM,cAAc,IAAI,wBAAwB,EAAE,WAAW,CAAC;AAAA,EAC9D,MAAM,gBAAgB,IAAI,0BAA0B,EAAE,WAAW,CAAC;AAAA,EAClE,MAAM,aAAa,IAAI,uBAAuB,WAAW,IAAI,MAAM,aAAa;AAAA,EAChF,OAAO;AAAA,IACL,SAAS,IAAI,oBAAoB,EAAE,WAAW,CAAC;AAAA,IAC/C,UAAU,IAAI,sBAAsB;AAAA,MAClC,IAAI,WAAW;AAAA,MACf,kBAAkB,QAAQ;AAAA,MAC1B,oBAAoB,QAAQ;AAAA,IAC9B,CAAC;AAAA,IACD;AAAA,IACA;AAAA,IACA,QAAQ,IAAI,mBAAmB,EAAE,YAAY,WAAW,CAAC;AAAA,IACzD,SAAS,IAAI,qBAAqB,EAAE,WAAW,CAAC;AAAA,IAChD,SAAS,IAAI,oBAAoB,UAAU;AAAA,IAC3C,UAAU,IAAI,qBAAqB,EAAE,WAAW,CAAC;AAAA,IACjD,YAAY,IAAI,uBAAuB,EAAE,YAAY,WAAW,CAAC;AAAA,IACjE,cAAc,IAAI,yBAAyB,EAAE,YAAY,WAAW,CAAC;AAAA,IACrE,YAAY,IAAI,wBAAwB,EAAE,WAAW,CAAC;AAAA,IACtD,UAAU,IAAI,qBAAqB,EAAE,YAAY,WAAW,CAAC;AAAA,IAC7D,gBAAgB,IAAI,2BAA2B,EAAE,YAAY,WAAW,CAAC;AAAA,IACzE,cAAc,IAAI,yBAAyB,EAAE,YAAY,WAAW,CAAC;AAAA,IACrE,uBAAuB,IAAI,kCAAkC,EAAE,WAAW,CAAC;AAAA,IAC3E,aAAa,IAAI,wBAAwB,EAAE,YAAY,WAAW,CAAC;AAAA,IACnE,OAAO,IAAI,mBAAmB,EAAE,WAAW,CAAC;AAAA,IAC5C;AAAA,IACA;AAAA,IACA,sBAAsB,IAAI,iCAAiC,UAAU;AAAA,IACrE,oBAAoB,IAAI,+BAA+B,UAAU;AAAA,EACnE;AAAA;",
73
+ "debugId": "1D3AEE45CA656B6464756E2164756E21",
74
74
  "names": []
75
75
  }