@rpcbase/worker 0.14.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -0
- package/dist/queue.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import { MongoClient } from "mongodb";
|
|
|
3
3
|
import mongoose from "mongoose";
|
|
4
4
|
const DEFAULT_QUEUE_NAME = "rb-queue-default";
|
|
5
5
|
const DEFAULT_CONCURRENCY = 2;
|
|
6
|
+
const DEFAULT_RENTENTION = 128;
|
|
6
7
|
const tasksByName = /* @__PURE__ */ Object.create(null);
|
|
7
8
|
let queueInstance = null;
|
|
8
9
|
let workerInstance = null;
|
|
@@ -24,7 +25,13 @@ const getConcurrency = () => {
|
|
|
24
25
|
const getConnection = () => ({ url: getRedisUrl() });
|
|
25
26
|
const ensureQueue = () => {
|
|
26
27
|
if (queueInstance) return queueInstance;
|
|
27
|
-
queueInstance = new Queue(getQueueName(), {
|
|
28
|
+
queueInstance = new Queue(getQueueName(), {
|
|
29
|
+
connection: getConnection(),
|
|
30
|
+
defaultJobOptions: {
|
|
31
|
+
removeOnComplete: DEFAULT_RENTENTION,
|
|
32
|
+
removeOnFail: DEFAULT_RENTENTION
|
|
33
|
+
}
|
|
34
|
+
});
|
|
28
35
|
return queueInstance;
|
|
29
36
|
};
|
|
30
37
|
function registerTask(name, handler) {
|
|
@@ -468,3 +475,4 @@ export {
|
|
|
468
475
|
scheduleTask,
|
|
469
476
|
start
|
|
470
477
|
};
|
|
478
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/queue.ts","../src/queueListener.ts","../src/taskNames.ts"],"sourcesContent":["import { Queue, Worker, type Job, type JobsOptions as JobOptions } from \"bullmq\"\n\nimport type { WorkerTasksMap } from \"./tasksMap\"\n\n\nexport type TaskHandler<TPayload = unknown> = (payload: TPayload, job: Job) => unknown | Promise<unknown>\n\nconst DEFAULT_QUEUE_NAME = \"rb-queue-default\"\nconst DEFAULT_CONCURRENCY = 2\nconst DEFAULT_RENTENTION = 128\n\nconst tasksByName: Record<string, TaskHandler<any>> = Object.create(null)\n\nlet queueInstance: Queue | null = null\nlet workerInstance: Worker | null = null\nlet hasStarted = false\n\nconst getRedisUrl = (): string => {\n const redisUrl = process.env.REDIS_URL?.trim()\n if (!redisUrl) {\n throw new Error(\"Missing REDIS_URL (required for @rpcbase/worker queue)\")\n }\n return redisUrl\n}\n\nconst getQueueName = (): string => process.env.RB_QUEUE_NAME?.trim() || DEFAULT_QUEUE_NAME\n\nconst getConcurrency = (): number => {\n const raw = process.env.RB_QUEUE_CONCURRENCY?.trim()\n const value = raw ? Number(raw) : DEFAULT_CONCURRENCY\n if (!Number.isFinite(value) || value <= 0) return DEFAULT_CONCURRENCY\n return Math.floor(value)\n}\n\nconst getConnection = () => ({ url: getRedisUrl() })\n\nconst ensureQueue = (): Queue => {\n if (queueInstance) return queueInstance\n queueInstance = new Queue(getQueueName(), {\n connection: getConnection(),\n defaultJobOptions: {\n removeOnComplete: DEFAULT_RENTENTION,\n removeOnFail: DEFAULT_RENTENTION\n },\n })\n\n return queueInstance\n}\n\nexport function registerTask<TName extends keyof WorkerTasksMap & string>(\n name: TName,\n handler: TaskHandler<WorkerTasksMap[TName]>,\n): void\nexport function registerTask(name: string, handler: TaskHandler<any>): void\nexport function registerTask(name: string, handler: TaskHandler<any>): void {\n tasksByName[name] = handler\n}\n\nexport const getTasks = (): Record<string, TaskHandler<any>> => tasksByName\n\nexport function add<TName extends keyof WorkerTasksMap & string>(\n taskName: TName,\n payload: WorkerTasksMap[TName],\n options?: JobOptions,\n): Promise<Job>\nexport function add(taskName: string, payload: unknown, options?: JobOptions): Promise<Job>\nexport function add(taskName: string, payload: any, options?: JobOptions): Promise<Job> {\n return ensureQueue().add(taskName, payload, options)\n}\n\nexport const getJob = async (jobId: string): Promise<Job | null> => (await ensureQueue().getJob(jobId)) ?? null\n\nexport const getJobs = async (...args: Parameters<Queue[\"getJobs\"]>): Promise<Job[]> =>\n ensureQueue().getJobs(...args) as unknown as Job[]\n\nexport const getInstance = (): Queue => ensureQueue()\n\nexport const start = async (): Promise<Queue> => {\n if (hasStarted) return ensureQueue()\n hasStarted = true\n\n const queue = ensureQueue()\n const concurrency = getConcurrency()\n\n console.log(\"start worker queue\", { queue: queue.name, redisUrl: getRedisUrl(), concurrency })\n\n queue.on(\"error\", (err) => {\n console.log(`queue error: ${err.message}`)\n })\n\n if (!workerInstance) {\n workerInstance = new Worker(\n queue.name,\n async (job) => {\n const taskName = job.name\n\n const handler = tasksByName[taskName]\n if (!handler) {\n throw new Error(`No task registered for '${taskName}'`)\n }\n\n return await handler(job.data, job)\n },\n {\n concurrency,\n connection: getConnection(),\n },\n )\n }\n\n workerInstance.on(\"error\", (err) => {\n console.log(`worker error: ${err.message}`)\n })\n\n workerInstance.on(\"stalled\", (jobId) => {\n console.log(`job ${jobId} stalled`)\n })\n\n workerInstance.on(\"failed\", (job, err) => {\n console.log(`job ${job?.id ?? \"unknown\"} failed`, err)\n })\n\n await workerInstance.waitUntilReady()\n\n return queue\n}\n\nexport const close = async (): Promise<void> => {\n if (!queueInstance && !workerInstance) return\n try {\n await workerInstance?.close()\n await queueInstance?.close()\n } finally {\n workerInstance = null\n queueInstance = null\n hasStarted = false\n }\n}\n\nexport const getUrl = (): string => getRedisUrl()\n\nexport type ScheduleTaskOptions = Omit<JobOptions, \"repeat\"> & {\n jobId?: string\n repeat: NonNullable<JobOptions[\"repeat\"]>\n}\n\nexport function scheduleTask<TName extends keyof WorkerTasksMap & string>(\n taskName: TName,\n payload: WorkerTasksMap[TName],\n options: ScheduleTaskOptions,\n): Promise<Job>\nexport function scheduleTask(taskName: string, payload: unknown, options: ScheduleTaskOptions): Promise<Job>\nexport async function scheduleTask(taskName: string, payload: any, options: ScheduleTaskOptions): Promise<Job> {\n const { jobId, repeat, ...rest } = options\n return add(taskName, payload, {\n ...rest,\n jobId: jobId ?? `schedule|${taskName}`,\n repeat,\n })\n}\n\nconst queueApi = {\n start,\n close,\n registerTask,\n getTasks,\n add,\n scheduleTask,\n getJob,\n getJobs,\n getInstance,\n getUrl,\n}\n\nexport default queueApi\n","import { MongoClient, type ChangeStream, type Document, type MongoClientOptions } from \"mongodb\"\nimport mongoose from \"mongoose\"\n\nimport queue from \"./queue\"\n\n\nexport type QueueListenerRetryDelays = {\n minMs?: number\n maxMs?: number\n factor?: number\n}\n\nexport type QueueListenerStatus =\n | { state: \"connecting\"; attempt: number }\n | { state: \"ready\" }\n | { state: \"error\"; attempt: number; error: unknown; nextRetryInMs: number }\n | { state: \"failed\"; attempt: number; error: unknown }\n | { state: \"closed\" }\n\nexport type QueueListenerHandle = {\n ready: Promise<void>\n close: () => Promise<void>\n getStatus: () => QueueListenerStatus\n}\n\nexport type QueueListenerOptions = {\n maxRetries?: number | \"infinite\"\n fatalOnMaxRetries?: boolean\n onStateChange?: (status: QueueListenerStatus) => void\n onFatal?: (err: unknown) => void\n retryDelays?: QueueListenerRetryDelays\n mongoClientOptions?: MongoClientOptions\n}\n\nconst RETRY_MAXIMUM_DELAY_MS = 3000\nconst RETRY_MINIMUM_DELAY_MS = 50\nconst RETRY_DEFAULT_FACTOR = 2\n\nconst sleep = async (ms: number, signal?: AbortSignal): Promise<void> => new Promise((resolve) => {\n if (signal?.aborted) {\n resolve()\n return\n }\n\n let timeout: ReturnType<typeof setTimeout> | null = null\n\n const cleanup = () => {\n if (timeout) clearTimeout(timeout)\n signal?.removeEventListener(\"abort\", onAbort)\n }\n\n const onAbort = () => {\n cleanup()\n resolve()\n }\n\n timeout = setTimeout(() => {\n cleanup()\n resolve()\n }, ms)\n timeout.unref?.()\n\n signal?.addEventListener(\"abort\", onAbort)\n})\n\nconst getMongoUrl = (): string => {\n const explicit =\n process.env.MONGODB_URL\n ?? process.env.MONGO_URL\n ?? process.env.MONGODB_URI\n ?? process.env.DB_URL\n\n if (explicit && explicit.trim()) return explicit.trim()\n\n const port = process.env.DB_PORT?.trim()\n if (!port) throw new Error(\"Missing Mongo connection details (MONGODB_URL/MONGO_URL/MONGODB_URI/DB_URL/DB_PORT)\")\n\n const host = process.env.DB_HOST?.trim() || \"localhost\"\n return `mongodb://${host}:${port}`\n}\n\nconst escapeRegex = (value: string): string => value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n\nconst resolveModelNameFromCollection = (collName: string): string | null => {\n const models = mongoose.models\n\n for (const modelName of Object.keys(models)) {\n const model = models[modelName]\n const collectionName =\n (model as any)?.collection?.collectionName\n ?? (model as any)?.collection?.name\n\n if (collectionName === collName) {\n return modelName\n }\n }\n\n return null\n}\n\nconst normalizeUpdateDescription = (updateDescription: any): any => {\n if (!updateDescription || typeof updateDescription !== \"object\") return updateDescription\n\n if (updateDescription.updatedFields && typeof updateDescription.updatedFields === \"object\") {\n return {\n ...updateDescription,\n updatedFieldsKeys: Object.keys(updateDescription.updatedFields),\n }\n }\n\n return updateDescription\n}\n\nconst normalizeOpForTaskName = (op: string): string => (op === \"replace\" ? \"update\" : op)\n\nconst dispatchWorkerQueue = async ({\n dbName,\n modelName,\n op,\n doc,\n updateDescription,\n}: {\n dbName: string\n modelName: string\n op: string\n doc: any\n updateDescription?: any\n}): Promise<void> => {\n const tasks = queue.getTasks()\n const taskOp = normalizeOpForTaskName(op)\n const handlerName = `on-${taskOp}-${modelName}`\n\n if (!tasks[handlerName]) return\n\n const normalizedUpdateDescription = normalizeUpdateDescription(updateDescription)\n\n await queue.add(handlerName, { doc, updateDescription: normalizedUpdateDescription }, {\n jobId: `${dbName}|${taskOp}-${doc?._id ?? \"unknown\"}`,\n removeOnComplete: true,\n removeOnFail: true,\n })\n}\n\nconst shouldSkipCollection = (collName: string): boolean =>\n collName.endsWith(\".files\") || collName.endsWith(\".chunks\")\n\nconst INTERNAL_IGNORED_MODEL_NAMES = new Set([\"RBRtsChange\", \"RBRtsCounter\"])\n\nconst INTERNAL_IGNORED_COLLECTION_NAMES = new Set([\"rtschanges\", \"rtscounters\"])\n\nconst normalizeRetryDelays = (input: QueueListenerRetryDelays | undefined): Required<QueueListenerRetryDelays> => {\n const minMs = Math.max(0, Math.floor(input?.minMs ?? RETRY_MINIMUM_DELAY_MS))\n const rawMaxMs = Math.max(0, Math.floor(input?.maxMs ?? RETRY_MAXIMUM_DELAY_MS))\n const maxMs = Math.max(minMs, rawMaxMs)\n const factor = Math.max(1, Number.isFinite(input?.factor) ? (input?.factor ?? RETRY_DEFAULT_FACTOR) : RETRY_DEFAULT_FACTOR)\n return { minMs, maxMs, factor }\n}\n\nconst getRetryDelayMs = (attempt: number, delays: Required<QueueListenerRetryDelays>): number =>\n Math.min(delays.maxMs, Math.round(delays.minMs * Math.pow(delays.factor, Math.max(0, attempt - 1))))\n\nconst normalizeMaxRetries = (value: number | \"infinite\"): number | \"infinite\" => {\n if (value === \"infinite\") return value\n const parsed = Math.floor(value)\n return Number.isFinite(parsed) ? Math.max(0, parsed) : 0\n}\n\nexport const registerQueueListener = async (options: QueueListenerOptions = {}): Promise<QueueListenerHandle> => {\n const maxRetries = normalizeMaxRetries(options.maxRetries ?? \"infinite\")\n const fatalOnMaxRetries = options.fatalOnMaxRetries ?? false\n const retryDelays = normalizeRetryDelays(options.retryDelays)\n\n const appName = process.env.APP_NAME?.trim()\n if (!appName) {\n throw new Error(\"Missing APP_NAME (required to configure the worker DB change listener)\")\n }\n\n const mongoUrl = getMongoUrl()\n const mongoClientOptions: MongoClientOptions = {\n family: 4,\n serverSelectionTimeoutMS: 2000,\n connectTimeoutMS: 2000,\n ...options.mongoClientOptions,\n }\n\n let stopped = false\n const abortController = new AbortController()\n let client: MongoClient | null = null\n let stream: ChangeStream<Document, Document> | null = null\n let resumeAfter: Document | null = null\n let processing = Promise.resolve()\n\n let status: QueueListenerStatus = { state: \"connecting\", attempt: 1 }\n const setStatus = (next: QueueListenerStatus): void => {\n status = next\n try {\n options.onStateChange?.(next)\n } catch (err) {\n console.warn(\"queue listener onStateChange failed\", err)\n }\n }\n\n let readySettled = false\n let readyResolve: (() => void) | null = null\n let readyReject: ((err: unknown) => void) | null = null\n const ready = new Promise<void>((resolve, reject) => {\n readyResolve = resolve\n readyReject = reject\n })\n\n const resolveReady = (): void => {\n if (readySettled) return\n readySettled = true\n readyResolve?.()\n }\n\n const rejectReady = (err: unknown): void => {\n if (readySettled) return\n readySettled = true\n readyReject?.(err)\n }\n\n const isChangeStreamHistoryLost = (err: unknown): boolean => {\n const anyErr = err as any\n const code = typeof anyErr?.code === \"number\" ? anyErr.code : null\n const codeName = typeof anyErr?.codeName === \"string\" ? anyErr.codeName : \"\"\n const message = err instanceof Error ? err.message : String(err ?? \"\")\n\n return (\n code === 286\n || codeName === \"ChangeStreamHistoryLost\"\n || message.includes(\"ChangeStreamHistoryLost\")\n || message.includes(\"resume token\")\n || message.includes(\"Resume token\")\n || message.includes(\"resume of change stream was not possible\")\n || message.includes(\"cannot resume\")\n )\n }\n\n const close = async (): Promise<void> => {\n stopped = true\n abortController.abort()\n try {\n stream?.removeAllListeners()\n await stream?.close()\n } catch {\n // ignore\n }\n stream = null\n\n try {\n await client?.close()\n } catch {\n // ignore\n }\n client = null\n\n if (!readySettled) {\n rejectReady(new Error(\"queue listener closed before ready\"))\n }\n\n setStatus({ state: \"closed\" })\n }\n\n const closeResources = async (): Promise<void> => {\n try {\n stream?.removeAllListeners()\n await stream?.close()\n } catch {\n // ignore\n }\n stream = null\n\n try {\n await client?.close()\n } catch {\n // ignore\n }\n client = null\n }\n\n const startStream = async (): Promise<{ stoppedPromise: Promise<{ reason: \"close\" | \"error\"; error?: unknown }> }> => {\n if (stopped) return { stoppedPromise: Promise.resolve({ reason: \"close\" }) }\n\n if (stream) {\n try {\n stream.removeAllListeners()\n await stream.close()\n } catch {\n // ignore\n }\n stream = null\n }\n\n if (client) {\n try {\n await client.close()\n } catch {\n // ignore\n }\n client = null\n }\n\n client = new MongoClient(mongoUrl, mongoClientOptions)\n\n await client.connect()\n\n const dbMatch = { \"ns.db\": { $regex: `^${escapeRegex(appName)}-.*-db$` } }\n\n const pipeline: Document[] = [\n { $match: dbMatch },\n {\n $match: {\n operationType: { $in: [\"insert\", \"update\", \"replace\", \"delete\"] },\n }\n },\n { $match: { \"ns.coll\": { $nin: Array.from(INTERNAL_IGNORED_COLLECTION_NAMES) } } },\n ]\n\n stream = client.watch(pipeline, {\n fullDocument: \"updateLookup\",\n ...(resumeAfter ? { resumeAfter } : {}),\n })\n\n const stoppedPromise = new Promise<{ reason: \"close\" | \"error\"; error?: unknown }>((resolve) => {\n let settled = false\n const onAbort = () => settle({ reason: \"close\" })\n\n const settle = (result: { reason: \"close\" | \"error\"; error?: unknown }) => {\n if (settled) return\n settled = true\n abortController.signal.removeEventListener(\"abort\", onAbort)\n resolve(result)\n }\n\n abortController.signal.addEventListener(\"abort\", onAbort)\n stream?.once(\"close\", () => settle({ reason: \"close\" }))\n stream?.once(\"error\", (err) => settle({ reason: \"error\", error: err }))\n })\n\n stream.on(\"change\", (change: any) => {\n const streamRef = stream\n processing = processing.then(async () => {\n const dbName = String(change?.ns?.db ?? \"\")\n if (!dbName) return\n\n const collName = String(change?.ns?.coll ?? \"\")\n if (!collName) return\n if (shouldSkipCollection(collName)) return\n if (INTERNAL_IGNORED_COLLECTION_NAMES.has(collName)) return\n\n const modelName = resolveModelNameFromCollection(collName)\n if (!modelName) return\n if (INTERNAL_IGNORED_MODEL_NAMES.has(modelName)) return\n\n const op = String(change.operationType ?? \"\")\n if (!op) return\n const normalizedOp = normalizeOpForTaskName(op)\n\n let doc = change.fullDocument\n if (!doc && normalizedOp === \"delete\") {\n doc = change.documentKey\n }\n if (!doc) return\n\n try {\n await dispatchWorkerQueue({\n dbName,\n modelName,\n op: normalizedOp,\n doc,\n updateDescription: change.updateDescription,\n })\n\n resumeAfter = change?._id ?? resumeAfter\n } catch (err) {\n console.warn(\"queue listener failed to dispatch change\", err)\n try {\n await streamRef?.close()\n } catch {\n // ignore\n }\n }\n }).catch((err) => {\n console.warn(\"queue listener change handler failed\", err)\n })\n })\n\n stream.on(\"error\", (err) => {\n if (stopped) return\n if (resumeAfter && isChangeStreamHistoryLost(err)) {\n resumeAfter = null\n }\n try {\n void Promise.resolve(stream?.close()).catch(() => {})\n } catch {\n // ignore\n }\n })\n\n return { stoppedPromise }\n }\n\n const run = async (): Promise<void> => {\n let retryCounter = 0\n\n while (!stopped) {\n try {\n setStatus({ state: \"connecting\", attempt: retryCounter + 1 })\n\n const { stoppedPromise } = await startStream()\n retryCounter = 0\n setStatus({ state: \"ready\" })\n resolveReady()\n\n const end = await stoppedPromise\n if (stopped) return\n\n retryCounter += 1\n if (maxRetries !== \"infinite\" && retryCounter > maxRetries) {\n const err = end.reason === \"error\" ? end.error : new Error(\"queue listener closed\")\n setStatus({ state: \"failed\", attempt: retryCounter, error: err })\n if (fatalOnMaxRetries) {\n try {\n options.onFatal?.(err)\n } catch (fatalErr) {\n console.warn(\"queue listener onFatal failed\", fatalErr)\n }\n }\n rejectReady(err)\n abortController.abort()\n await closeResources()\n return\n }\n\n const delayMs = getRetryDelayMs(retryCounter, retryDelays)\n const err = end.reason === \"error\" ? end.error : new Error(\"queue listener closed\")\n console.warn(\"queue listener not ready, retrying in\", delayMs, err)\n setStatus({ state: \"error\", attempt: retryCounter, error: err, nextRetryInMs: delayMs })\n await closeResources()\n await sleep(delayMs, abortController.signal)\n } catch (err) {\n if (stopped) return\n\n retryCounter += 1\n if (maxRetries !== \"infinite\" && retryCounter > maxRetries) {\n setStatus({ state: \"failed\", attempt: retryCounter, error: err })\n if (fatalOnMaxRetries) {\n try {\n options.onFatal?.(err)\n } catch (fatalErr) {\n console.warn(\"queue listener onFatal failed\", fatalErr)\n }\n }\n rejectReady(err)\n abortController.abort()\n await closeResources()\n return\n }\n\n const delayMs = getRetryDelayMs(retryCounter, retryDelays)\n console.warn(\"queue listener not ready, retrying in\", delayMs, err)\n setStatus({ state: \"error\", attempt: retryCounter, error: err, nextRetryInMs: delayMs })\n await closeResources()\n await sleep(delayMs, abortController.signal)\n }\n }\n }\n\n const handle: QueueListenerHandle = {\n ready,\n close,\n getStatus: () => status,\n }\n\n void run().catch(async (err) => {\n if (stopped) return\n setStatus({ state: \"failed\", attempt: 0, error: err })\n rejectReady(err)\n await closeResources()\n })\n\n return handle\n}\n","export type DbEventOp = \"insert\" | \"update\" | \"delete\"\n\nexport type DbEventTaskName<TOp extends DbEventOp = DbEventOp, TModelName extends string = string> =\n `on-${TOp}-${TModelName}`\n\nexport type DbEventTaskPayload<TDoc = unknown, TUpdateDescription = unknown> = {\n doc: TDoc\n updateDescription?: TUpdateDescription\n}\n\nexport const dbEventTaskName = <TOp extends DbEventOp, TModelName extends string>(\n op: TOp,\n modelName: TModelName,\n): DbEventTaskName<TOp, TModelName> => `on-${op}-${modelName}`\n"],"names":["queue","close","err"],"mappings":"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"}
|
package/dist/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAU,KAAK,GAAG,EAAE,KAAK,WAAW,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAA;AAEhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAGhD,MAAM,MAAM,WAAW,CAAC,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAU,KAAK,GAAG,EAAE,KAAK,WAAW,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAA;AAEhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAGhD,MAAM,MAAM,WAAW,CAAC,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AA4CzG,wBAAgB,YAAY,CAAC,KAAK,SAAS,MAAM,cAAc,GAAG,MAAM,EACtE,IAAI,EAAE,KAAK,EACX,OAAO,EAAE,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,GAC1C,IAAI,CAAA;AACP,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;AAK3E,eAAO,MAAM,QAAQ,QAAO,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAgB,CAAA;AAE3E,wBAAgB,GAAG,CAAC,KAAK,SAAS,MAAM,cAAc,GAAG,MAAM,EAC7D,QAAQ,EAAE,KAAK,EACf,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,EAC9B,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,GAAG,CAAC,CAAA;AACf,wBAAgB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;AAK3F,eAAO,MAAM,MAAM,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAgD,CAAA;AAE/G,eAAO,MAAM,OAAO,GAAU,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAG,OAAO,CAAC,GAAG,EAAE,CAC/B,CAAA;AAEpD,eAAO,MAAM,WAAW,QAAO,KAAsB,CAAA;AAErD,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,KAAK,CAgD3C,CAAA;AAED,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,IAAI,CAU1C,CAAA;AAED,eAAO,MAAM,MAAM,QAAO,MAAuB,CAAA;AAEjD,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAA;CAC1C,CAAA;AAED,wBAAgB,YAAY,CAAC,KAAK,SAAS,MAAM,cAAc,GAAG,MAAM,EACtE,QAAQ,EAAE,KAAK,EACf,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,EAC9B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,GAAG,CAAC,CAAA;AACf,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;AAU5G,QAAA,MAAM,QAAQ;iBApFiB,OAAO,CAAC,KAAK,CAAC;iBAkDd,OAAO,CAAC,IAAI,CAAC;;oBArEhB,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;;;oBAYxB,MAAM,KAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;6KAEM,OAAO,CAAC,GAAG,EAAE,CAAC;uBAGrD,KAAK;kBAgEV,MAAM;CAiC/B,CAAA;AAED,eAAe,QAAQ,CAAA"}
|