@powerhousedao/reactor 5.0.0-staging.6 → 5.0.0-staging.8
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/bench/event-bus.bench.js +17 -27
- package/dist/bench/event-bus.bench.js.map +1 -1
- package/dist/bench/reactor-throughput.bench.js +34 -54
- package/dist/bench/reactor-throughput.bench.js.map +1 -1
- package/dist/src/events/event-bus.d.ts +2 -2
- package/dist/src/events/event-bus.d.ts.map +1 -1
- package/dist/src/events/event-bus.js.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.js +9 -9
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.js.map +1 -1
- package/dist/src/queue/interfaces.d.ts +20 -5
- package/dist/src/queue/interfaces.d.ts.map +1 -1
- package/dist/src/queue/job-execution-handle.d.ts +23 -0
- package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
- package/dist/src/queue/job-execution-handle.js +62 -0
- package/dist/src/queue/job-execution-handle.js.map +1 -0
- package/dist/src/queue/queue.d.ts +22 -3
- package/dist/src/queue/queue.d.ts.map +1 -1
- package/dist/src/queue/queue.js +97 -30
- package/dist/src/queue/queue.js.map +1 -1
- package/dist/src/queue/types.d.ts +21 -0
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js +12 -0
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/reactor.d.ts.map +1 -1
- package/dist/src/reactor.js +13 -5
- package/dist/src/reactor.js.map +1 -1
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +3 -1
- package/dist/src/utils.js.map +1 -1
- package/dist/test/event-bus.test.js +19 -10
- package/dist/test/event-bus.test.js.map +1 -1
- package/dist/test/executor/executor-integration.test.d.ts.map +1 -0
- package/dist/test/{executor-integration.test.js → executor/executor-integration.test.js} +17 -20
- package/dist/test/executor/executor-integration.test.js.map +1 -0
- package/dist/test/executor/job-execution-handle.test.d.ts +2 -0
- package/dist/test/executor/job-execution-handle.test.d.ts.map +1 -0
- package/dist/test/executor/job-execution-handle.test.js +272 -0
- package/dist/test/executor/job-execution-handle.test.js.map +1 -0
- package/dist/test/executor/simple-job-executor-manager.test.d.ts.map +1 -0
- package/dist/test/{simple-job-executor-manager.test.js → executor/simple-job-executor-manager.test.js} +3 -3
- package/dist/test/executor/simple-job-executor-manager.test.js.map +1 -0
- package/dist/test/executor/simple-job-executor.test.d.ts.map +1 -0
- package/dist/test/{simple-job-executor.test.js → executor/simple-job-executor.test.js} +2 -2
- package/dist/test/executor/simple-job-executor.test.js.map +1 -0
- package/dist/test/factories.d.ts +10 -19
- package/dist/test/factories.d.ts.map +1 -1
- package/dist/test/factories.js +3 -31
- package/dist/test/factories.js.map +1 -1
- package/dist/test/integration/document-drive-integration.test.d.ts +2 -0
- package/dist/test/integration/document-drive-integration.test.d.ts.map +1 -0
- package/dist/test/integration/document-drive-integration.test.js +1102 -0
- package/dist/test/integration/document-drive-integration.test.js.map +1 -0
- package/dist/test/integration/reactor-read.test.d.ts.map +1 -0
- package/dist/test/{reactor-read.test.js → integration/reactor-read.test.js} +35 -90
- package/dist/test/integration/reactor-read.test.js.map +1 -0
- package/dist/test/queue/queue-integration.test.d.ts +2 -0
- package/dist/test/queue/queue-integration.test.d.ts.map +1 -0
- package/dist/test/{reactor-queue.test.js → queue/queue-integration.test.js} +31 -37
- package/dist/test/queue/queue-integration.test.js.map +1 -0
- package/dist/test/{queue.test.d.ts.map → queue/queue.test.d.ts.map} +1 -1
- package/dist/test/{queue.test.js → queue/queue.test.js} +219 -36
- package/dist/test/queue/queue.test.js.map +1 -0
- package/dist/test/registry/registry.test.d.ts.map +1 -0
- package/dist/test/{registry.test.js → registry/registry.test.js} +1 -1
- package/dist/test/registry/registry.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
- package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
- package/dist/bench/end-to-end-flow.bench.js +0 -284
- package/dist/bench/end-to-end-flow.bench.js.map +0 -1
- package/dist/test/executor-integration.test.d.ts.map +0 -1
- package/dist/test/executor-integration.test.js.map +0 -1
- package/dist/test/queue.test.js.map +0 -1
- package/dist/test/reactor-queue.test.d.ts +0 -2
- package/dist/test/reactor-queue.test.d.ts.map +0 -1
- package/dist/test/reactor-queue.test.js.map +0 -1
- package/dist/test/reactor-read.test.d.ts.map +0 -1
- package/dist/test/reactor-read.test.js.map +0 -1
- package/dist/test/registry.test.d.ts.map +0 -1
- package/dist/test/registry.test.js.map +0 -1
- package/dist/test/simple-job-executor-manager.test.d.ts.map +0 -1
- package/dist/test/simple-job-executor-manager.test.js.map +0 -1
- package/dist/test/simple-job-executor.test.d.ts.map +0 -1
- package/dist/test/simple-job-executor.test.js.map +0 -1
- /package/dist/test/{executor-integration.test.d.ts → executor/executor-integration.test.d.ts} +0 -0
- /package/dist/test/{simple-job-executor-manager.test.d.ts → executor/simple-job-executor-manager.test.d.ts} +0 -0
- /package/dist/test/{simple-job-executor.test.d.ts → executor/simple-job-executor.test.d.ts} +0 -0
- /package/dist/test/{reactor-read.test.d.ts → integration/reactor-read.test.d.ts} +0 -0
- /package/dist/test/{queue.test.d.ts → queue/queue.test.d.ts} +0 -0
- /package/dist/test/{registry.test.d.ts → registry/registry.test.d.ts} +0 -0
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it } from "vitest";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { EventBus } from "../../src/events/event-bus.js";
|
|
3
|
+
import { InMemoryQueue } from "../../src/queue/queue.js";
|
|
4
|
+
import { QueueEventTypes, } from "../../src/queue/types.js";
|
|
5
|
+
import { createJobDependencyChain, createJobWithDependencies, createTestJob, createTestOperation, } from "../factories.js";
|
|
5
6
|
describe("InMemoryQueue", () => {
|
|
6
7
|
let queue;
|
|
7
8
|
let eventBus;
|
|
8
9
|
let mockEventBusEmit;
|
|
9
10
|
beforeEach(() => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
eventBus = new EventBus();
|
|
12
|
+
mockEventBusEmit = vi.fn().mockResolvedValue(undefined);
|
|
13
|
+
eventBus.emit = mockEventBusEmit;
|
|
13
14
|
queue = new InMemoryQueue(eventBus);
|
|
14
15
|
});
|
|
15
16
|
describe("enqueue", () => {
|
|
@@ -54,9 +55,9 @@ describe("InMemoryQueue", () => {
|
|
|
54
55
|
const dequeuedJob1 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
55
56
|
const dequeuedJob2 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
56
57
|
const dequeuedJob3 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
57
|
-
expect(dequeuedJob1?.id).toBe("job-1");
|
|
58
|
-
expect(dequeuedJob2?.id).toBe("job-2");
|
|
59
|
-
expect(dequeuedJob3?.id).toBe("job-3");
|
|
58
|
+
expect(dequeuedJob1?.job.id).toBe("job-1");
|
|
59
|
+
expect(dequeuedJob2?.job.id).toBe("job-2");
|
|
60
|
+
expect(dequeuedJob3?.job.id).toBe("job-3");
|
|
60
61
|
});
|
|
61
62
|
});
|
|
62
63
|
describe("dequeue", () => {
|
|
@@ -68,7 +69,7 @@ describe("InMemoryQueue", () => {
|
|
|
68
69
|
const testJob = createTestJob();
|
|
69
70
|
await queue.enqueue(testJob);
|
|
70
71
|
const dequeuedJob = await queue.dequeue(testJob.documentId, testJob.scope, testJob.branch);
|
|
71
|
-
expect(dequeuedJob).toEqual(testJob);
|
|
72
|
+
expect(dequeuedJob?.job).toEqual(testJob);
|
|
72
73
|
expect(await queue.size(testJob.documentId, testJob.scope, testJob.branch)).toBe(0);
|
|
73
74
|
});
|
|
74
75
|
it("should only dequeue from the specified document/scope/branch", async () => {
|
|
@@ -77,7 +78,7 @@ describe("InMemoryQueue", () => {
|
|
|
77
78
|
await queue.enqueue(job1);
|
|
78
79
|
await queue.enqueue(job2);
|
|
79
80
|
const dequeuedJob = await queue.dequeue("doc-1", "global", "main");
|
|
80
|
-
expect(dequeuedJob?.id).toBe("job-1");
|
|
81
|
+
expect(dequeuedJob?.job.id).toBe("job-1");
|
|
81
82
|
expect(await queue.size("doc-2", "global", "main")).toBe(1);
|
|
82
83
|
});
|
|
83
84
|
it("should clean up empty queues after dequeuing", async () => {
|
|
@@ -100,7 +101,7 @@ describe("InMemoryQueue", () => {
|
|
|
100
101
|
await queue.enqueue(job2);
|
|
101
102
|
const dequeuedJob = await queue.dequeueNext();
|
|
102
103
|
expect(dequeuedJob).toBeDefined();
|
|
103
|
-
expect([job1.id, job2.id]).toContain(dequeuedJob?.id);
|
|
104
|
+
expect([job1.id, job2.id]).toContain(dequeuedJob?.job.id);
|
|
104
105
|
expect(await queue.totalSize()).toBe(1);
|
|
105
106
|
});
|
|
106
107
|
it("should clean up empty queues after dequeuing", async () => {
|
|
@@ -177,8 +178,8 @@ describe("InMemoryQueue", () => {
|
|
|
177
178
|
// Verify correct jobs remain
|
|
178
179
|
const dequeuedJob1 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
179
180
|
const dequeuedJob2 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
180
|
-
expect(dequeuedJob1?.id).toBe("job-1");
|
|
181
|
-
expect(dequeuedJob2?.id).toBe("job-3");
|
|
181
|
+
expect(dequeuedJob1?.job.id).toBe("job-1");
|
|
182
|
+
expect(dequeuedJob2?.job.id).toBe("job-3");
|
|
182
183
|
});
|
|
183
184
|
it("should clean up empty queue after removing last job", async () => {
|
|
184
185
|
const job = createTestJob();
|
|
@@ -333,7 +334,7 @@ describe("InMemoryQueue", () => {
|
|
|
333
334
|
const job = createTestJob({ id: "job-1", queueHint: [] });
|
|
334
335
|
await queue.enqueue(job);
|
|
335
336
|
const dequeuedJob = await queue.dequeue(job.documentId, job.scope, job.branch);
|
|
336
|
-
expect(dequeuedJob?.id).toBe("job-1");
|
|
337
|
+
expect(dequeuedJob?.job.id).toBe("job-1");
|
|
337
338
|
});
|
|
338
339
|
it("should block job with unmet dependencies", async () => {
|
|
339
340
|
const job1 = createTestJob({ id: "job-1", queueHint: ["job-0"] });
|
|
@@ -349,7 +350,7 @@ describe("InMemoryQueue", () => {
|
|
|
349
350
|
await queue.enqueue(job2);
|
|
350
351
|
// First job should be dequeued
|
|
351
352
|
const dequeuedJob1 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
352
|
-
expect(dequeuedJob1?.id).toBe("job-1");
|
|
353
|
+
expect(dequeuedJob1?.job.id).toBe("job-1");
|
|
353
354
|
// Second job should be blocked
|
|
354
355
|
const blockedJob = await queue.dequeue(job2.documentId, job2.scope, job2.branch);
|
|
355
356
|
expect(blockedJob).toBeNull();
|
|
@@ -357,7 +358,7 @@ describe("InMemoryQueue", () => {
|
|
|
357
358
|
await queue.completeJob("job-1");
|
|
358
359
|
// Now second job should be available
|
|
359
360
|
const dequeuedJob2 = await queue.dequeue(job2.documentId, job2.scope, job2.branch);
|
|
360
|
-
expect(dequeuedJob2?.id).toBe("job-2");
|
|
361
|
+
expect(dequeuedJob2?.job.id).toBe("job-2");
|
|
361
362
|
});
|
|
362
363
|
it("should handle multiple dependencies", async () => {
|
|
363
364
|
const job1 = createTestJob({ id: "job-1", queueHint: [] });
|
|
@@ -371,15 +372,15 @@ describe("InMemoryQueue", () => {
|
|
|
371
372
|
await queue.enqueue(job3);
|
|
372
373
|
// Dequeue and complete first job
|
|
373
374
|
const dequeuedJob1 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
374
|
-
expect(dequeuedJob1?.id).toBe("job-1");
|
|
375
|
+
expect(dequeuedJob1?.job.id).toBe("job-1");
|
|
375
376
|
await queue.completeJob("job-1");
|
|
376
377
|
// Next dequeue should return job-2 (not blocked), not job-3 (still blocked)
|
|
377
378
|
const nextJob = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
378
|
-
expect(nextJob?.id).toBe("job-2");
|
|
379
|
+
expect(nextJob?.job.id).toBe("job-2");
|
|
379
380
|
await queue.completeJob("job-2");
|
|
380
381
|
// Now job 3 should be available
|
|
381
382
|
const dequeuedJob3 = await queue.dequeue(job3.documentId, job3.scope, job3.branch);
|
|
382
|
-
expect(dequeuedJob3?.id).toBe("job-3");
|
|
383
|
+
expect(dequeuedJob3?.job.id).toBe("job-3");
|
|
383
384
|
});
|
|
384
385
|
it("should handle dependency chains", async () => {
|
|
385
386
|
const jobs = createJobDependencyChain(4);
|
|
@@ -388,25 +389,25 @@ describe("InMemoryQueue", () => {
|
|
|
388
389
|
}
|
|
389
390
|
// Process in order
|
|
390
391
|
const d1 = await queue.dequeue(jobs[0].documentId, jobs[0].scope, jobs[0].branch);
|
|
391
|
-
expect(d1?.id).toBe("job-1");
|
|
392
|
+
expect(d1?.job.id).toBe("job-1");
|
|
392
393
|
// Others should be blocked
|
|
393
394
|
expect(await queue.dequeue(jobs[1].documentId, jobs[1].scope, jobs[1].branch)).toBeNull();
|
|
394
395
|
expect(await queue.dequeue(jobs[2].documentId, jobs[2].scope, jobs[2].branch)).toBeNull();
|
|
395
396
|
expect(await queue.dequeue(jobs[3].documentId, jobs[3].scope, jobs[3].branch)).toBeNull();
|
|
396
397
|
await queue.completeJob("job-1");
|
|
397
398
|
const d2 = await queue.dequeue(jobs[1].documentId, jobs[1].scope, jobs[1].branch);
|
|
398
|
-
expect(d2?.id).toBe("job-2");
|
|
399
|
+
expect(d2?.job.id).toBe("job-2");
|
|
399
400
|
// job-3 and job-4 still blocked
|
|
400
401
|
expect(await queue.dequeue(jobs[2].documentId, jobs[2].scope, jobs[2].branch)).toBeNull();
|
|
401
402
|
expect(await queue.dequeue(jobs[3].documentId, jobs[3].scope, jobs[3].branch)).toBeNull();
|
|
402
403
|
await queue.completeJob("job-2");
|
|
403
404
|
const d3 = await queue.dequeue(jobs[2].documentId, jobs[2].scope, jobs[2].branch);
|
|
404
|
-
expect(d3?.id).toBe("job-3");
|
|
405
|
+
expect(d3?.job.id).toBe("job-3");
|
|
405
406
|
// job-4 still blocked
|
|
406
407
|
expect(await queue.dequeue(jobs[3].documentId, jobs[3].scope, jobs[3].branch)).toBeNull();
|
|
407
408
|
await queue.completeJob("job-3");
|
|
408
409
|
const d4 = await queue.dequeue(jobs[3].documentId, jobs[3].scope, jobs[3].branch);
|
|
409
|
-
expect(d4?.id).toBe("job-4");
|
|
410
|
+
expect(d4?.job.id).toBe("job-4");
|
|
410
411
|
});
|
|
411
412
|
it("should dequeue jobs out of order based on dependencies", async () => {
|
|
412
413
|
const job1 = createTestJob({ id: "job-1", queueHint: ["job-0"] });
|
|
@@ -417,7 +418,7 @@ describe("InMemoryQueue", () => {
|
|
|
417
418
|
await queue.enqueue(job3);
|
|
418
419
|
// Job 1 is blocked, so job 2 should be dequeued
|
|
419
420
|
const dequeuedJob = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
420
|
-
expect(dequeuedJob?.id).toBe("job-2");
|
|
421
|
+
expect(dequeuedJob?.job.id).toBe("job-2");
|
|
421
422
|
});
|
|
422
423
|
it("should handle dependencies across different queues", async () => {
|
|
423
424
|
const job1 = createTestJob({
|
|
@@ -437,11 +438,11 @@ describe("InMemoryQueue", () => {
|
|
|
437
438
|
expect(blockedJob).toBeNull();
|
|
438
439
|
// Dequeue and complete job 1
|
|
439
440
|
const dequeuedJob1 = await queue.dequeue("doc-1", "global", "main");
|
|
440
|
-
expect(dequeuedJob1?.id).toBe("job-1");
|
|
441
|
+
expect(dequeuedJob1?.job.id).toBe("job-1");
|
|
441
442
|
await queue.completeJob("job-1");
|
|
442
443
|
// Now job 2 should be available
|
|
443
444
|
const dequeuedJob2 = await queue.dequeue("doc-2", "global", "main");
|
|
444
|
-
expect(dequeuedJob2?.id).toBe("job-2");
|
|
445
|
+
expect(dequeuedJob2?.job.id).toBe("job-2");
|
|
445
446
|
});
|
|
446
447
|
it("should work with dequeueNext respecting dependencies", async () => {
|
|
447
448
|
const job1 = createTestJob({
|
|
@@ -458,7 +459,7 @@ describe("InMemoryQueue", () => {
|
|
|
458
459
|
await queue.enqueue(job2);
|
|
459
460
|
// Should dequeue job-2 since job-1 is blocked
|
|
460
461
|
const dequeuedJob = await queue.dequeueNext();
|
|
461
|
-
expect(dequeuedJob?.id).toBe("job-2");
|
|
462
|
+
expect(dequeuedJob?.job.id).toBe("job-2");
|
|
462
463
|
});
|
|
463
464
|
it("should handle circular dependencies by blocking all involved jobs", async () => {
|
|
464
465
|
const job1 = createJobWithDependencies("job-1", ["job-2"]);
|
|
@@ -499,7 +500,7 @@ describe("InMemoryQueue", () => {
|
|
|
499
500
|
await queue.enqueue(job1);
|
|
500
501
|
// Should be able to dequeue since dependency is already complete
|
|
501
502
|
const dequeuedJob = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
502
|
-
expect(dequeuedJob?.id).toBe("job-1");
|
|
503
|
+
expect(dequeuedJob?.job.id).toBe("job-1");
|
|
503
504
|
});
|
|
504
505
|
it("should handle mixed dependencies (some met, some unmet)", async () => {
|
|
505
506
|
// Complete one dependency
|
|
@@ -518,7 +519,7 @@ describe("InMemoryQueue", () => {
|
|
|
518
519
|
await queue.completeJob("job-2");
|
|
519
520
|
// Now should be available
|
|
520
521
|
dequeuedJob = await queue.dequeue(job.documentId, job.scope, job.branch);
|
|
521
|
-
expect(dequeuedJob?.id).toBe("job-3");
|
|
522
|
+
expect(dequeuedJob?.job.id).toBe("job-3");
|
|
522
523
|
});
|
|
523
524
|
it("should handle failJob without marking as completed", async () => {
|
|
524
525
|
const job1 = createTestJob({ id: "job-1", queueHint: [] });
|
|
@@ -527,13 +528,195 @@ describe("InMemoryQueue", () => {
|
|
|
527
528
|
await queue.enqueue(job2);
|
|
528
529
|
// Dequeue and fail job 1
|
|
529
530
|
const d1 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
530
|
-
expect(d1?.id).toBe("job-1");
|
|
531
|
+
expect(d1?.job.id).toBe("job-1");
|
|
531
532
|
await queue.failJob("job-1", "Test error");
|
|
532
533
|
// Job 2 should still be blocked since job 1 wasn't completed
|
|
533
534
|
const dequeuedJob = await queue.dequeue(job2.documentId, job2.scope, job2.branch);
|
|
534
535
|
expect(dequeuedJob).toBeNull();
|
|
535
536
|
});
|
|
536
537
|
});
|
|
538
|
+
describe("isDrained", () => {
|
|
539
|
+
it("should return true when queue is empty", () => {
|
|
540
|
+
expect(queue.isDrained).toBe(true);
|
|
541
|
+
});
|
|
542
|
+
it("should return false when jobs are pending", async () => {
|
|
543
|
+
const job = createTestJob();
|
|
544
|
+
await queue.enqueue(job);
|
|
545
|
+
expect(queue.isDrained).toBe(false);
|
|
546
|
+
});
|
|
547
|
+
it("should return false when jobs are executing", async () => {
|
|
548
|
+
const job = createTestJob();
|
|
549
|
+
await queue.enqueue(job);
|
|
550
|
+
// Dequeue the job (marks it as executing)
|
|
551
|
+
await queue.dequeueNext();
|
|
552
|
+
expect(queue.isDrained).toBe(false);
|
|
553
|
+
});
|
|
554
|
+
it("should return true after all jobs are completed", async () => {
|
|
555
|
+
const job = createTestJob();
|
|
556
|
+
await queue.enqueue(job);
|
|
557
|
+
const dequeuedJob = await queue.dequeueNext();
|
|
558
|
+
expect(queue.isDrained).toBe(false);
|
|
559
|
+
await queue.completeJob(dequeuedJob.job.id);
|
|
560
|
+
expect(queue.isDrained).toBe(true);
|
|
561
|
+
});
|
|
562
|
+
it("should return true after all jobs are failed", async () => {
|
|
563
|
+
const job = createTestJob();
|
|
564
|
+
await queue.enqueue(job);
|
|
565
|
+
const dequeuedJob = await queue.dequeueNext();
|
|
566
|
+
expect(queue.isDrained).toBe(false);
|
|
567
|
+
await queue.failJob(dequeuedJob.job.id, "Test failure");
|
|
568
|
+
expect(queue.isDrained).toBe(true);
|
|
569
|
+
});
|
|
570
|
+
it("should handle multiple queues", async () => {
|
|
571
|
+
const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
|
|
572
|
+
const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
|
|
573
|
+
await queue.enqueue(job1);
|
|
574
|
+
await queue.enqueue(job2);
|
|
575
|
+
expect(queue.isDrained).toBe(false);
|
|
576
|
+
const dequeued1 = await queue.dequeueNext();
|
|
577
|
+
await queue.completeJob(dequeued1.job.id);
|
|
578
|
+
expect(queue.isDrained).toBe(false);
|
|
579
|
+
const dequeued2 = await queue.dequeueNext();
|
|
580
|
+
await queue.completeJob(dequeued2.job.id);
|
|
581
|
+
expect(queue.isDrained).toBe(true);
|
|
582
|
+
});
|
|
583
|
+
});
|
|
584
|
+
describe("block", () => {
|
|
585
|
+
it("should prevent new jobs from being enqueued", async () => {
|
|
586
|
+
queue.block();
|
|
587
|
+
const job = createTestJob();
|
|
588
|
+
await expect(queue.enqueue(job)).rejects.toThrow("Queue is blocked");
|
|
589
|
+
});
|
|
590
|
+
it("should allow existing jobs to be processed", async () => {
|
|
591
|
+
const job = createTestJob();
|
|
592
|
+
await queue.enqueue(job);
|
|
593
|
+
queue.block();
|
|
594
|
+
const dequeuedJob = await queue.dequeueNext();
|
|
595
|
+
expect(dequeuedJob).toBeDefined();
|
|
596
|
+
expect(dequeuedJob?.job.id).toBe(job.id);
|
|
597
|
+
});
|
|
598
|
+
it("should call onDrained callback when queue becomes drained", async () => {
|
|
599
|
+
const onDrained = vi.fn();
|
|
600
|
+
const job = createTestJob();
|
|
601
|
+
await queue.enqueue(job);
|
|
602
|
+
queue.block(onDrained);
|
|
603
|
+
expect(onDrained).not.toHaveBeenCalled();
|
|
604
|
+
const dequeuedJob = await queue.dequeueNext();
|
|
605
|
+
await queue.completeJob(dequeuedJob.job.id);
|
|
606
|
+
expect(onDrained).toHaveBeenCalledTimes(1);
|
|
607
|
+
});
|
|
608
|
+
it("should call onDrained immediately if already drained", () => {
|
|
609
|
+
const onDrained = vi.fn();
|
|
610
|
+
queue.block(onDrained);
|
|
611
|
+
expect(onDrained).toHaveBeenCalledTimes(1);
|
|
612
|
+
});
|
|
613
|
+
it("should not call onDrained if unblocked before draining", async () => {
|
|
614
|
+
const onDrained = vi.fn();
|
|
615
|
+
const job = createTestJob();
|
|
616
|
+
await queue.enqueue(job);
|
|
617
|
+
queue.block(onDrained);
|
|
618
|
+
queue.unblock();
|
|
619
|
+
const dequeuedJob = await queue.dequeueNext();
|
|
620
|
+
await queue.completeJob(dequeuedJob.job.id);
|
|
621
|
+
expect(onDrained).not.toHaveBeenCalled();
|
|
622
|
+
});
|
|
623
|
+
it("should handle multiple block calls", () => {
|
|
624
|
+
const onDrained1 = vi.fn();
|
|
625
|
+
const onDrained2 = vi.fn();
|
|
626
|
+
queue.block(onDrained1);
|
|
627
|
+
queue.block(onDrained2);
|
|
628
|
+
// Only the second callback should be registered
|
|
629
|
+
expect(onDrained1).toHaveBeenCalledTimes(1);
|
|
630
|
+
expect(onDrained2).toHaveBeenCalledTimes(1);
|
|
631
|
+
});
|
|
632
|
+
it("should handle block without callback", async () => {
|
|
633
|
+
queue.block();
|
|
634
|
+
const job = createTestJob();
|
|
635
|
+
await expect(queue.enqueue(job)).rejects.toThrow("Queue is blocked");
|
|
636
|
+
});
|
|
637
|
+
});
|
|
638
|
+
describe("unblock", () => {
|
|
639
|
+
it("should allow new jobs to be enqueued after unblocking", async () => {
|
|
640
|
+
queue.block();
|
|
641
|
+
const job1 = createTestJob({ id: "job-1" });
|
|
642
|
+
await expect(queue.enqueue(job1)).rejects.toThrow("Queue is blocked");
|
|
643
|
+
queue.unblock();
|
|
644
|
+
const job2 = createTestJob({ id: "job-2" });
|
|
645
|
+
await expect(queue.enqueue(job2)).resolves.not.toThrow();
|
|
646
|
+
const dequeuedJob = await queue.dequeueNext();
|
|
647
|
+
expect(dequeuedJob?.job.id).toBe("job-2");
|
|
648
|
+
});
|
|
649
|
+
it("should clear onDrained callback", async () => {
|
|
650
|
+
const onDrained = vi.fn();
|
|
651
|
+
const job = createTestJob();
|
|
652
|
+
await queue.enqueue(job);
|
|
653
|
+
queue.block(onDrained);
|
|
654
|
+
queue.unblock();
|
|
655
|
+
// Complete the job after unblocking
|
|
656
|
+
const dequeuedJob = await queue.dequeueNext();
|
|
657
|
+
await queue.completeJob(dequeuedJob.job.id);
|
|
658
|
+
// Callback should not be called since we unblocked
|
|
659
|
+
expect(onDrained).not.toHaveBeenCalled();
|
|
660
|
+
});
|
|
661
|
+
it("should handle unblock when not blocked", async () => {
|
|
662
|
+
expect(() => queue.unblock()).not.toThrow();
|
|
663
|
+
const job = createTestJob();
|
|
664
|
+
await expect(queue.enqueue(job)).resolves.not.toThrow();
|
|
665
|
+
});
|
|
666
|
+
});
|
|
667
|
+
describe("block/unblock integration", () => {
|
|
668
|
+
it("should handle complex block/unblock scenarios", async () => {
|
|
669
|
+
const onDrained1 = vi.fn();
|
|
670
|
+
const onDrained2 = vi.fn();
|
|
671
|
+
// Add some jobs
|
|
672
|
+
const job1 = createTestJob({ id: "job-1" });
|
|
673
|
+
const job2 = createTestJob({ id: "job-2" });
|
|
674
|
+
await queue.enqueue(job1);
|
|
675
|
+
await queue.enqueue(job2);
|
|
676
|
+
// Block with callback
|
|
677
|
+
queue.block(onDrained1);
|
|
678
|
+
// Process one job
|
|
679
|
+
const dequeued1 = await queue.dequeueNext();
|
|
680
|
+
await queue.completeJob(dequeued1.job.id);
|
|
681
|
+
expect(onDrained1).not.toHaveBeenCalled();
|
|
682
|
+
// Unblock and re-block with new callback
|
|
683
|
+
queue.unblock();
|
|
684
|
+
queue.block(onDrained2);
|
|
685
|
+
// Process last job
|
|
686
|
+
const dequeued2 = await queue.dequeueNext();
|
|
687
|
+
await queue.completeJob(dequeued2.job.id);
|
|
688
|
+
// Only second callback should be called
|
|
689
|
+
expect(onDrained1).not.toHaveBeenCalled();
|
|
690
|
+
expect(onDrained2).toHaveBeenCalledTimes(1);
|
|
691
|
+
});
|
|
692
|
+
it("should handle retry while blocked", async () => {
|
|
693
|
+
const job = createTestJob({ id: "job-1", maxRetries: 3 });
|
|
694
|
+
await queue.enqueue(job);
|
|
695
|
+
queue.block();
|
|
696
|
+
const dequeuedJob = await queue.dequeueNext();
|
|
697
|
+
// Retry should fail because queue is blocked
|
|
698
|
+
await expect(queue.retryJob(dequeuedJob.job.id, "Test error")).rejects.toThrow("Queue is blocked");
|
|
699
|
+
});
|
|
700
|
+
it("should track drain state correctly with dependencies", async () => {
|
|
701
|
+
const job1 = createTestJob({ id: "job-1", queueHint: [] });
|
|
702
|
+
const job2 = createTestJob({ id: "job-2", queueHint: ["job-1"] });
|
|
703
|
+
await queue.enqueue(job1);
|
|
704
|
+
await queue.enqueue(job2);
|
|
705
|
+
expect(queue.isDrained).toBe(false);
|
|
706
|
+
// Process first job
|
|
707
|
+
const dequeued1 = await queue.dequeueNext();
|
|
708
|
+
expect(dequeued1?.job.id).toBe("job-1");
|
|
709
|
+
expect(queue.isDrained).toBe(false);
|
|
710
|
+
await queue.completeJob("job-1");
|
|
711
|
+
expect(queue.isDrained).toBe(false); // job-2 still pending
|
|
712
|
+
// Process second job
|
|
713
|
+
const dequeued2 = await queue.dequeueNext();
|
|
714
|
+
expect(dequeued2?.job.id).toBe("job-2");
|
|
715
|
+
expect(queue.isDrained).toBe(false);
|
|
716
|
+
await queue.completeJob("job-2");
|
|
717
|
+
expect(queue.isDrained).toBe(true);
|
|
718
|
+
});
|
|
719
|
+
});
|
|
537
720
|
describe("job properties", () => {
|
|
538
721
|
it("should preserve all job properties", async () => {
|
|
539
722
|
const operation = createTestOperation({
|
|
@@ -563,7 +746,7 @@ describe("InMemoryQueue", () => {
|
|
|
563
746
|
});
|
|
564
747
|
await queue.enqueue(job);
|
|
565
748
|
const dequeuedJob = await queue.dequeue(job.documentId, job.scope, job.branch);
|
|
566
|
-
expect(dequeuedJob).toEqual(job);
|
|
749
|
+
expect(dequeuedJob?.job).toEqual(job);
|
|
567
750
|
});
|
|
568
751
|
it("should handle jobs with optional properties", async () => {
|
|
569
752
|
const job = {
|
|
@@ -578,9 +761,9 @@ describe("InMemoryQueue", () => {
|
|
|
578
761
|
};
|
|
579
762
|
await queue.enqueue(job);
|
|
580
763
|
const dequeuedJob = await queue.dequeue(job.documentId, job.scope, job.branch);
|
|
581
|
-
expect(dequeuedJob).toEqual(job);
|
|
582
|
-
expect(dequeuedJob?.retryCount).toBeUndefined();
|
|
583
|
-
expect(dequeuedJob?.maxRetries).toBeUndefined();
|
|
764
|
+
expect(dequeuedJob?.job).toEqual(job);
|
|
765
|
+
expect(dequeuedJob?.job.retryCount).toBeUndefined();
|
|
766
|
+
expect(dequeuedJob?.job.maxRetries).toBeUndefined();
|
|
584
767
|
});
|
|
585
768
|
});
|
|
586
769
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.test.js","sourceRoot":"","sources":["../../../test/queue/queue.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAGzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EACL,eAAe,GAGhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,aAAa,EACb,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,KAAa,CAAC;IAClB,IAAI,QAAmB,CAAC;IACxB,IAAI,gBAA0C,CAAC;IAE/C,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACxD,QAAQ,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAEjC,KAAK,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAE5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACrE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAE5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAC3C,eAAe,CAAC,aAAa,EAC7B;gBACE,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,KAAK,EAAE,GAAG,CAAC,EAAE;aACO,CACvB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,OAAO;gBACnB,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAE5C,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CACtC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CACtC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CACtC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YAEF,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC3D,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAChC,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE7B,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CACrC,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,CACf,CAAC;YAEF,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,CACJ,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CACpE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YAEjE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEnE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAE3D,oDAAoD;YACpD,MAAM,CAAC,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YAEjE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAE9C,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1D,MAAM,CAAC,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAE1B,MAAM,CAAC,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAE5C,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YAEjE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,OAAO;gBACnB,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACvD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE3C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAE5C,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE5C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACrE,CAAC,CACF,CAAC;YAEF,6BAA6B;YAC7B,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CACtC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CACtC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YAEF,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE3B,MAAM,CAAC,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,wDAAwD;YACxD,MAAM,aAAa,GAAG,KAAsB,CAAC;YAC7C,sDAAsD;YACtD,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAE7B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE3C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YAEjE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE7C,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,MAAM,CACV,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,CAC9C,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAE5C,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAE5D,2DAA2D;YAC3D,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,OAAO;gBACnB,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;YAEvB,MAAM,CAAC,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAE5C,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;YAEvB,2DAA2D;YAC3D,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACtD,MAAM,CAAC,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,GAAG,GAAG,aAAa,CAAC;gBACxB,EAAE,EAAE,aAAa;gBACjB,UAAU,EAAE,aAAa;gBACzB,KAAK,EAAE,YAAY;gBACnB,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAC3C,eAAe,CAAC,aAAa,EAC7B;gBACE,UAAU,EAAE,aAAa;gBACzB,KAAK,EAAE,YAAY;gBACnB,MAAM,EAAE,aAAa;gBACrB,KAAK,EAAE,aAAa;aACrB,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACjE,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAE5B,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAE5C,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;YAC1F,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,OAAO;gBACnB,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,OAAO;gBACnB,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,OAAO;gBACnB,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,OAAO;gBACnB,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,GAAG,GAAG,aAAa,CAAC;gBACxB,UAAU,EAAE,iBAAiB;gBAC7B,KAAK,EAAE,mBAAmB;gBAC1B,MAAM,EAAE,yBAAyB;aAClC,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,MAAM,CACJ,MAAM,KAAK,CAAC,IAAI,CACd,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,CAC1B,CACF,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CACrC,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,CACX,CAAC;YAEF,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAClE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CACrC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACrE,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAElE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,+BAA+B;YAC/B,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CACtC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE3C,+BAA+B;YAC/B,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,OAAO,CACpC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;YAE9B,qBAAqB;YACrB,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEjC,qCAAqC;YACrC,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CACtC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,EAAE,EAAE,OAAO;gBACX,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;aAC9B,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,iCAAiC;YACjC,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CACtC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEjC,4EAA4E;YAC5E,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CACjC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEjC,gCAAgC;YAChC,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CACtC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,IAAI,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC;YAEzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;YAED,mBAAmB;YACnB,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,CAC5B,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAClB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EACb,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CACf,CAAC;YACF,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEjC,2BAA2B;YAC3B,MAAM,CACJ,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CACvE,CAAC,QAAQ,EAAE,CAAC;YACb,MAAM,CACJ,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CACvE,CAAC,QAAQ,EAAE,CAAC;YACb,MAAM,CACJ,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CACvE,CAAC,QAAQ,EAAE,CAAC;YAEb,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEjC,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,CAC5B,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAClB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EACb,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CACf,CAAC;YACF,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEjC,gCAAgC;YAChC,MAAM,CACJ,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CACvE,CAAC,QAAQ,EAAE,CAAC;YACb,MAAM,CACJ,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CACvE,CAAC,QAAQ,EAAE,CAAC;YAEb,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEjC,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,CAC5B,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAClB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EACb,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CACf,CAAC;YACF,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEjC,sBAAsB;YACtB,MAAM,CACJ,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CACvE,CAAC,QAAQ,EAAE,CAAC;YAEb,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEjC,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,CAC5B,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAClB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EACb,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CACf,CAAC;YACF,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAClE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAE3D,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,gDAAgD;YAChD,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CACrC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,OAAO;gBACnB,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,OAAO;gBACnB,SAAS,EAAE,CAAC,OAAO,CAAC;aACrB,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,gEAAgE;YAChE,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;YAE9B,6BAA6B;YAC7B,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACpE,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEjC,gCAAgC;YAChC,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACpE,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,OAAO;gBACnB,SAAS,EAAE,CAAC,OAAO,CAAC;aACrB,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,OAAO;gBACnB,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,8CAA8C;YAC9C,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,IAAI,GAAG,yBAAyB,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,yBAAyB,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAE3D,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,8BAA8B;YAC9B,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CACtC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAEhC,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CACtC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,GAAG,GAAG,yBAAyB,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CACrC,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,CACX,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAElE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,iBAAiB;YACjB,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9D,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEjC,YAAY;YACZ,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;YAEvB,kFAAkF;YAClF,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CACrC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,6CAA6C;YAC7C,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEjC,mCAAmC;YACnC,MAAM,IAAI,GAAG,yBAAyB,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3D,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,iEAAiE;YACjE,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CACrC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,0BAA0B;YAC1B,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEjC,wCAAwC;YACxC,MAAM,GAAG,GAAG,aAAa,CAAC;gBACxB,EAAE,EAAE,OAAO;gBACX,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;aACvC,CAAC,CAAC;YACH,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,mDAAmD;YACnD,IAAI,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CACnC,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,CACX,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;YAE/B,kCAAkC;YAClC,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEjC,0BAA0B;YAC1B,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACzE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAElE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,yBAAyB;YACzB,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACzE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAE3C,6DAA6D;YAC7D,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CACrC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,0CAA0C;YAC1C,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAE1B,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpC,MAAM,KAAK,CAAC,WAAW,CAAC,WAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpC,MAAM,KAAK,CAAC,OAAO,CAAC,WAAY,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;YACzD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YAEjE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,KAAK,CAAC,KAAK,EAAE,CAAC;YAEd,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,KAAK,CAAC,KAAK,EAAE,CAAC;YAEd,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvB,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAEzC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,KAAK,CAAC,WAAW,CAAC,WAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE7C,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAE1B,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAEvB,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvB,KAAK,CAAC,OAAO,EAAE,CAAC;YAEhB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,KAAK,CAAC,WAAW,CAAC,WAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE7C,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAE3B,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACxB,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAExB,gDAAgD;YAChD,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,KAAK,CAAC,KAAK,EAAE,CAAC;YAEd,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,KAAK,CAAC,KAAK,EAAE,CAAC;YAEd,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YAEtE,KAAK,CAAC,OAAO,EAAE,CAAC;YAEhB,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAEzD,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvB,KAAK,CAAC,OAAO,EAAE,CAAC;YAEhB,oCAAoC;YACpC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,KAAK,CAAC,WAAW,CAAC,WAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE7C,mDAAmD;YACnD,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAE5C,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAE3B,gBAAgB;YAChB,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,sBAAsB;YACtB,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAExB,kBAAkB;YAClB,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAE1C,yCAAyC;YACzC,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAExB,mBAAmB;YACnB,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,KAAK,CAAC,WAAW,CAAC,SAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE3C,wCAAwC;YACxC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAC1C,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEzB,KAAK,CAAC,KAAK,EAAE,CAAC;YAEd,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAE9C,6CAA6C;YAC7C,MAAM,MAAM,CACV,KAAK,CAAC,QAAQ,CAAC,WAAY,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAClD,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAElE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE1B,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpC,oBAAoB;YACpB,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpC,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB;YAE3D,qBAAqB;YACrB,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpC,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,SAAS,GAAG,mBAAmB,CAAC;gBACpC,KAAK,EAAE,EAAE;gBACT,cAAc,EAAE,0BAA0B;gBAC1C,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE;oBACN,EAAE,EAAE,UAAU;oBACd,IAAI,EAAE,kBAAkB;oBACxB,cAAc,EAAE,0BAA0B;oBAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;oBAC1B,KAAK,EAAE,QAAQ;iBAChB;gBACD,KAAK,EAAE,YAAY;gBACnB,EAAE,EAAE,cAAc;aACnB,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,aAAa,CAAC;gBACxB,EAAE,EAAE,eAAe;gBACnB,UAAU,EAAE,eAAe;gBAC3B,KAAK,EAAE,cAAc;gBACrB,MAAM,EAAE,eAAe;gBACvB,SAAS;gBACT,SAAS,EAAE,0BAA0B;gBACrC,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC;aACd,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CACrC,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,CACX,CAAC;YAEF,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,GAAG,GAAG;gBACV,EAAE,EAAE,aAAa;gBACjB,UAAU,EAAE,OAAO;gBACnB,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,mBAAmB,EAAE;gBAChC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,SAAS,EAAE,EAAE;gBACb,yCAAyC;aAC5B,CAAC;YAEhB,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CACrC,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,CACX,CAAC;YAEF,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;YACpD,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../../test/registry/registry.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { driveDocumentModelModule } from "document-drive";
|
|
2
2
|
import { documentModelDocumentModelModule, } from "document-model";
|
|
3
3
|
import { beforeEach, describe, expect, it } from "vitest";
|
|
4
|
-
import { DocumentModelRegistry, DuplicateModuleError, ModuleNotFoundError, } from "
|
|
4
|
+
import { DocumentModelRegistry, DuplicateModuleError, ModuleNotFoundError, } from "../../src/registry/implementation.js";
|
|
5
5
|
describe("DocumentModelRegistry", () => {
|
|
6
6
|
let registry;
|
|
7
7
|
// Use real document model modules with proper type casting
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../test/registry/registry.test.ts"],"names":[],"mappings":"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"}
|