@openai/agents-core 0.4.0 → 0.4.2

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 (58) hide show
  1. package/dist/agent.d.ts +5 -4
  2. package/dist/agent.js +22 -3
  3. package/dist/agent.js.map +1 -1
  4. package/dist/agent.mjs +22 -3
  5. package/dist/agent.mjs.map +1 -1
  6. package/dist/index.d.ts +2 -1
  7. package/dist/index.js +5 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.mjs +1 -0
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/mcpServers.d.ts +55 -0
  12. package/dist/mcpServers.js +472 -0
  13. package/dist/mcpServers.js.map +1 -0
  14. package/dist/mcpServers.mjs +467 -0
  15. package/dist/mcpServers.mjs.map +1 -0
  16. package/dist/memory/session.d.ts +12 -0
  17. package/dist/memory/session.js.map +1 -1
  18. package/dist/memory/session.mjs.map +1 -1
  19. package/dist/metadata.js +2 -2
  20. package/dist/metadata.mjs +2 -2
  21. package/dist/result.d.ts +5 -0
  22. package/dist/result.js +7 -0
  23. package/dist/result.js.map +1 -1
  24. package/dist/result.mjs +7 -0
  25. package/dist/result.mjs.map +1 -1
  26. package/dist/run.d.ts +16 -9
  27. package/dist/run.js +56 -0
  28. package/dist/run.js.map +1 -1
  29. package/dist/run.mjs +57 -1
  30. package/dist/run.mjs.map +1 -1
  31. package/dist/runState.d.ts +15 -1
  32. package/dist/runState.js +15 -0
  33. package/dist/runState.js.map +1 -1
  34. package/dist/runState.mjs +15 -0
  35. package/dist/runState.mjs.map +1 -1
  36. package/dist/runner/errorHandlers.d.ts +57 -0
  37. package/dist/runner/errorHandlers.js +65 -0
  38. package/dist/runner/errorHandlers.js.map +1 -0
  39. package/dist/runner/errorHandlers.mjs +61 -0
  40. package/dist/runner/errorHandlers.mjs.map +1 -0
  41. package/dist/runner/runLoop.js +4 -0
  42. package/dist/runner/runLoop.js.map +1 -1
  43. package/dist/runner/runLoop.mjs +4 -0
  44. package/dist/runner/runLoop.mjs.map +1 -1
  45. package/dist/runner/sessionPersistence.js +8 -1
  46. package/dist/runner/sessionPersistence.js.map +1 -1
  47. package/dist/runner/sessionPersistence.mjs +8 -1
  48. package/dist/runner/sessionPersistence.mjs.map +1 -1
  49. package/dist/runner/toolExecution.js +29 -10
  50. package/dist/runner/toolExecution.js.map +1 -1
  51. package/dist/runner/toolExecution.mjs +29 -10
  52. package/dist/runner/toolExecution.mjs.map +1 -1
  53. package/dist/runner/tracing.d.ts +14 -1
  54. package/dist/runner/tracing.js +43 -0
  55. package/dist/runner/tracing.js.map +1 -1
  56. package/dist/runner/tracing.mjs +42 -0
  57. package/dist/runner/tracing.mjs.map +1 -1
  58. package/package.json +1 -1
@@ -0,0 +1,472 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MCPServers = void 0;
4
+ exports.connectMcpServers = connectMcpServers;
5
+ const logger_1 = require("./logger.js");
6
+ const DEFAULT_CONNECT_TIMEOUT_MS = 10_000;
7
+ const DEFAULT_CLOSE_TIMEOUT_MS = 10_000;
8
+ const logger = (0, logger_1.getLogger)('openai-agents:mcp-servers');
9
+ class ServerWorker {
10
+ server;
11
+ connectTimeoutMs;
12
+ closeTimeoutMs;
13
+ queue = [];
14
+ draining = false;
15
+ done = false;
16
+ closing = null;
17
+ closeResult = null;
18
+ constructor(server, connectTimeoutMs, closeTimeoutMs) {
19
+ this.server = server;
20
+ this.connectTimeoutMs = connectTimeoutMs;
21
+ this.closeTimeoutMs = closeTimeoutMs;
22
+ }
23
+ get isDone() {
24
+ return this.done;
25
+ }
26
+ connect() {
27
+ return this.submit('connect', this.connectTimeoutMs);
28
+ }
29
+ close() {
30
+ return this.submit('close', this.closeTimeoutMs);
31
+ }
32
+ submit(action, timeoutMs) {
33
+ if (this.done) {
34
+ return Promise.reject(createClosedError(this.server));
35
+ }
36
+ if (this.closeResult || this.closing) {
37
+ if (action === 'close' && this.closeResult) {
38
+ return this.closeResult;
39
+ }
40
+ return Promise.reject(createClosingError(this.server));
41
+ }
42
+ let resolveCommand;
43
+ let rejectCommand;
44
+ const promise = new Promise((resolve, reject) => {
45
+ resolveCommand = resolve;
46
+ rejectCommand = reject;
47
+ });
48
+ const command = {
49
+ action,
50
+ timeoutMs,
51
+ resolve: resolveCommand,
52
+ reject: rejectCommand,
53
+ };
54
+ if (action === 'close') {
55
+ this.closeResult = promise;
56
+ }
57
+ this.queue.push(command);
58
+ void this.drain();
59
+ return promise;
60
+ }
61
+ async drain() {
62
+ if (this.draining) {
63
+ return;
64
+ }
65
+ this.draining = true;
66
+ while (this.queue.length > 0) {
67
+ const command = this.queue.shift();
68
+ if (!command) {
69
+ continue;
70
+ }
71
+ const shouldExit = command.action === 'close';
72
+ let closeError = null;
73
+ try {
74
+ if (command.action === 'connect') {
75
+ await runWithTimeout(() => this.server.connect(), command.timeoutMs, createTimeoutError('connect', this.server, command.timeoutMs));
76
+ }
77
+ else {
78
+ const closeTask = this.server.close();
79
+ this.closing = closeTask
80
+ .then(() => undefined, () => undefined)
81
+ .finally(() => {
82
+ this.closing = null;
83
+ });
84
+ await runWithTimeoutTask(closeTask, command.timeoutMs, createTimeoutError('close', this.server, command.timeoutMs));
85
+ }
86
+ command.resolve();
87
+ }
88
+ catch (error) {
89
+ const err = toError(error);
90
+ command.reject(err);
91
+ if (shouldExit) {
92
+ closeError = err;
93
+ }
94
+ }
95
+ if (shouldExit) {
96
+ const pendingError = closeError ?? createClosedError(this.server);
97
+ while (this.queue.length > 0) {
98
+ const pending = this.queue.shift();
99
+ if (pending) {
100
+ pending.reject(pendingError);
101
+ }
102
+ }
103
+ this.closeResult = null;
104
+ if (!closeError) {
105
+ this.done = true;
106
+ }
107
+ break;
108
+ }
109
+ }
110
+ this.draining = false;
111
+ }
112
+ }
113
+ /**
114
+ * Manages MCP server lifecycle and exposes only connected servers.
115
+ */
116
+ class MCPServers {
117
+ allServers;
118
+ activeServers;
119
+ failedServers = [];
120
+ failedServerSet = new Set();
121
+ errorsByServer = new Map();
122
+ suppressedAbortFailures = new Set();
123
+ workers = new Map();
124
+ connectTimeoutMs;
125
+ closeTimeoutMs;
126
+ dropFailed;
127
+ strict;
128
+ suppressAbortError;
129
+ connectInParallel;
130
+ static {
131
+ const asyncDispose = Symbol.asyncDispose;
132
+ if (asyncDispose) {
133
+ Object.defineProperty(this.prototype, asyncDispose, {
134
+ value: function () {
135
+ return this.close();
136
+ },
137
+ configurable: true,
138
+ });
139
+ }
140
+ }
141
+ constructor(servers, options) {
142
+ this.allServers = [...servers];
143
+ this.activeServers = [...servers];
144
+ this.connectTimeoutMs =
145
+ options?.connectTimeoutMs === undefined
146
+ ? DEFAULT_CONNECT_TIMEOUT_MS
147
+ : options.connectTimeoutMs;
148
+ this.closeTimeoutMs =
149
+ options?.closeTimeoutMs === undefined
150
+ ? DEFAULT_CLOSE_TIMEOUT_MS
151
+ : options.closeTimeoutMs;
152
+ this.dropFailed = options?.dropFailed ?? true;
153
+ this.strict = options?.strict ?? false;
154
+ this.suppressAbortError = options?.suppressAbortError ?? true;
155
+ this.connectInParallel = options?.connectInParallel ?? false;
156
+ }
157
+ static async open(servers, options) {
158
+ const session = new MCPServers(servers, options);
159
+ logger.debug(`Opening MCPServers with ${session.allServers.length} server(s).`);
160
+ await session.connectAll();
161
+ return session;
162
+ }
163
+ get all() {
164
+ return [...this.allServers];
165
+ }
166
+ get active() {
167
+ return [...this.activeServers];
168
+ }
169
+ get failed() {
170
+ return [...this.failedServers];
171
+ }
172
+ get errors() {
173
+ return new Map(this.errorsByServer);
174
+ }
175
+ async reconnect(options = {}) {
176
+ const failedOnly = options.failedOnly ?? true;
177
+ let serversToRetry;
178
+ if (failedOnly) {
179
+ serversToRetry = uniqueServers(this.failedServers);
180
+ }
181
+ else {
182
+ serversToRetry = [...this.allServers];
183
+ this.failedServers = [];
184
+ this.failedServerSet = new Set();
185
+ this.errorsByServer = new Map();
186
+ this.suppressedAbortFailures = new Set();
187
+ }
188
+ logger.debug(`Reconnecting MCP servers (failedOnly=${failedOnly}) with ${serversToRetry.length} target(s).`);
189
+ if (this.connectInParallel) {
190
+ await this.connectAllParallel(serversToRetry);
191
+ }
192
+ else {
193
+ for (const server of serversToRetry) {
194
+ await this.attemptConnect(server);
195
+ }
196
+ }
197
+ this.refreshActiveServers();
198
+ return this.active;
199
+ }
200
+ async close() {
201
+ await this.closeAll();
202
+ }
203
+ async connectAll() {
204
+ this.failedServers = [];
205
+ this.failedServerSet = new Set();
206
+ this.errorsByServer = new Map();
207
+ this.suppressedAbortFailures = new Set();
208
+ const serversToConnect = [...this.allServers];
209
+ let connectedServers = [];
210
+ logger.debug(`Connecting ${serversToConnect.length} MCP server(s).`);
211
+ try {
212
+ if (this.connectInParallel) {
213
+ await this.connectAllParallel(serversToConnect);
214
+ }
215
+ else {
216
+ for (const server of serversToConnect) {
217
+ await this.attemptConnect(server);
218
+ if (!this.failedServerSet.has(server)) {
219
+ connectedServers.push(server);
220
+ }
221
+ }
222
+ }
223
+ }
224
+ catch (error) {
225
+ if (this.connectInParallel) {
226
+ connectedServers = serversToConnect.filter((server) => !this.failedServerSet.has(server));
227
+ }
228
+ const serversToCleanup = uniqueServers([
229
+ ...connectedServers,
230
+ ...this.failedServers,
231
+ ]);
232
+ await this.closeServers(serversToCleanup);
233
+ this.activeServers = [];
234
+ throw error;
235
+ }
236
+ this.refreshActiveServers();
237
+ return this.active;
238
+ }
239
+ async closeAll() {
240
+ for (const server of [...this.allServers].reverse()) {
241
+ await this.closeServer(server);
242
+ }
243
+ }
244
+ async attemptConnect(server) {
245
+ const raiseOnError = this.strict;
246
+ try {
247
+ logger.debug(`Connecting MCP server '${server.name}'.`);
248
+ await this.runConnect(server);
249
+ logger.debug(`Connected MCP server '${server.name}'.`);
250
+ if (this.failedServerSet.has(server)) {
251
+ this.removeFailedServer(server);
252
+ this.errorsByServer.delete(server);
253
+ }
254
+ }
255
+ catch (error) {
256
+ const err = toError(error);
257
+ if (isAbortError(err)) {
258
+ this.recordFailure(server, err, 'connect');
259
+ if (!this.suppressAbortError) {
260
+ this.suppressedAbortFailures.delete(server);
261
+ throw err;
262
+ }
263
+ this.suppressedAbortFailures.add(server);
264
+ return;
265
+ }
266
+ this.suppressedAbortFailures.delete(server);
267
+ this.recordFailure(server, err, 'connect');
268
+ if (raiseOnError) {
269
+ throw err;
270
+ }
271
+ }
272
+ }
273
+ refreshActiveServers() {
274
+ if (this.dropFailed) {
275
+ const failed = new Set(this.failedServerSet);
276
+ this.activeServers = this.allServers.filter((server) => !failed.has(server));
277
+ }
278
+ else {
279
+ this.activeServers = [...this.allServers];
280
+ }
281
+ logger.debug(`Active MCP servers: ${this.activeServers.length}; failed: ${this.failedServers.length}.`);
282
+ }
283
+ recordFailure(server, error, phase) {
284
+ logger.error(`Failed to ${phase} MCP server '${server.name}':`, error);
285
+ if (!this.failedServerSet.has(server)) {
286
+ this.failedServers.push(server);
287
+ this.failedServerSet.add(server);
288
+ }
289
+ this.errorsByServer.set(server, error);
290
+ }
291
+ async runConnect(server) {
292
+ if (this.connectInParallel) {
293
+ const worker = this.getWorker(server);
294
+ await worker.connect();
295
+ return;
296
+ }
297
+ await runWithTimeout(() => server.connect(), this.connectTimeoutMs, createTimeoutError('connect', server, this.connectTimeoutMs));
298
+ }
299
+ async closeServer(server) {
300
+ try {
301
+ logger.debug(`Closing MCP server '${server.name}'.`);
302
+ await this.runClose(server);
303
+ logger.debug(`Closed MCP server '${server.name}'.`);
304
+ }
305
+ catch (error) {
306
+ const err = toError(error);
307
+ if (isAbortError(err)) {
308
+ if (!this.suppressAbortError) {
309
+ throw err;
310
+ }
311
+ logger.debug(`Close cancelled for MCP server '${server.name}': ${err}`);
312
+ this.errorsByServer.set(server, err);
313
+ return;
314
+ }
315
+ logger.error(`Failed to close MCP server '${server.name}':`, err);
316
+ this.errorsByServer.set(server, err);
317
+ }
318
+ }
319
+ async runClose(server) {
320
+ if (this.connectInParallel && this.workers.has(server)) {
321
+ const worker = this.workers.get(server);
322
+ if (worker) {
323
+ await worker.close();
324
+ if (worker.isDone) {
325
+ this.workers.delete(server);
326
+ }
327
+ return;
328
+ }
329
+ }
330
+ await runWithTimeout(() => server.close(), this.closeTimeoutMs, createTimeoutError('close', server, this.closeTimeoutMs));
331
+ }
332
+ async closeServers(servers) {
333
+ for (const server of [...servers].reverse()) {
334
+ await this.closeServer(server);
335
+ }
336
+ }
337
+ async connectAllParallel(servers) {
338
+ const results = await Promise.allSettled(servers.map((server) => this.attemptConnect(server)));
339
+ const rejection = results.find((result) => result.status === 'rejected');
340
+ if (rejection) {
341
+ throw rejection.reason;
342
+ }
343
+ if (this.strict && this.failedServers.length > 0) {
344
+ const firstFailure = this.failedServers.find((server) => !this.suppressedAbortFailures.has(server));
345
+ if (firstFailure) {
346
+ const error = this.errorsByServer.get(firstFailure);
347
+ if (error) {
348
+ throw error;
349
+ }
350
+ throw new Error(`Failed to connect MCP server '${firstFailure.name}'.`);
351
+ }
352
+ }
353
+ }
354
+ getWorker(server) {
355
+ const worker = this.workers.get(server);
356
+ if (!worker || worker.isDone) {
357
+ const next = new ServerWorker(server, this.connectTimeoutMs, this.closeTimeoutMs);
358
+ this.workers.set(server, next);
359
+ return next;
360
+ }
361
+ return worker;
362
+ }
363
+ removeFailedServer(server) {
364
+ if (this.failedServerSet.has(server)) {
365
+ this.failedServerSet.delete(server);
366
+ }
367
+ this.suppressedAbortFailures.delete(server);
368
+ this.failedServers = this.failedServers.filter((failedServer) => failedServer !== server);
369
+ }
370
+ }
371
+ exports.MCPServers = MCPServers;
372
+ /**
373
+ * Connect to multiple MCP servers and return a managed MCPServers instance.
374
+ */
375
+ async function connectMcpServers(servers, options) {
376
+ return MCPServers.open(servers, options);
377
+ }
378
+ function createTimeoutError(action, server, timeoutMs) {
379
+ if (timeoutMs === null) {
380
+ return new Error(`MCP server ${action} timed out.`);
381
+ }
382
+ const error = new Error(`MCP server ${action} timed out after ${timeoutMs}ms for '${server.name}'.`);
383
+ error.name = 'TimeoutError';
384
+ return error;
385
+ }
386
+ function createClosedError(server) {
387
+ const error = new Error(`MCP server '${server.name}' is closed.`);
388
+ error.name = 'ClosedError';
389
+ return error;
390
+ }
391
+ function createClosingError(server) {
392
+ const error = new Error(`MCP server '${server.name}' is closing.`);
393
+ error.name = 'ClosingError';
394
+ return error;
395
+ }
396
+ async function runWithTimeout(fn, timeoutMs, timeoutError) {
397
+ if (timeoutMs === null) {
398
+ await fn();
399
+ return;
400
+ }
401
+ let timer;
402
+ let timedOut = false;
403
+ const task = fn();
404
+ const timeoutPromise = new Promise((_, reject) => {
405
+ timer = setTimeout(() => {
406
+ timedOut = true;
407
+ reject(timeoutError);
408
+ }, timeoutMs);
409
+ });
410
+ try {
411
+ await Promise.race([task, timeoutPromise]);
412
+ }
413
+ finally {
414
+ if (timer) {
415
+ clearTimeout(timer);
416
+ }
417
+ if (timedOut) {
418
+ task.catch(() => undefined);
419
+ }
420
+ }
421
+ }
422
+ async function runWithTimeoutTask(task, timeoutMs, timeoutError) {
423
+ if (timeoutMs === null) {
424
+ await task;
425
+ return;
426
+ }
427
+ let timer;
428
+ let timedOut = false;
429
+ const timeoutPromise = new Promise((_, reject) => {
430
+ timer = setTimeout(() => {
431
+ timedOut = true;
432
+ reject(timeoutError);
433
+ }, timeoutMs);
434
+ });
435
+ try {
436
+ await Promise.race([task, timeoutPromise]);
437
+ }
438
+ finally {
439
+ if (timer) {
440
+ clearTimeout(timer);
441
+ }
442
+ if (timedOut) {
443
+ task.catch(() => undefined);
444
+ }
445
+ }
446
+ }
447
+ function toError(error) {
448
+ if (error instanceof Error) {
449
+ return error;
450
+ }
451
+ return new Error(String(error));
452
+ }
453
+ function isAbortError(error) {
454
+ const code = error.code;
455
+ return (error.name === 'AbortError' ||
456
+ error.name === 'CanceledError' ||
457
+ error.name === 'CancelledError' ||
458
+ code === 'ABORT_ERR' ||
459
+ code === 'ERR_ABORTED');
460
+ }
461
+ function uniqueServers(servers) {
462
+ const seen = new Set();
463
+ const unique = [];
464
+ for (const server of servers) {
465
+ if (!seen.has(server)) {
466
+ seen.add(server);
467
+ unique.push(server);
468
+ }
469
+ }
470
+ return unique;
471
+ }
472
+ //# sourceMappingURL=mcpServers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpServers.js","sourceRoot":"","sources":["../src/mcpServers.ts"],"names":[],"mappings":";;;AAudA,8CAKC;AA5dD,wCAAqC;AAGrC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAC1C,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAExC,MAAM,MAAM,GAAG,IAAA,kBAAS,EAAC,2BAA2B,CAAC,CAAC;AAWtD,MAAM,YAAY;IAQG;IACA;IACA;IATX,KAAK,GAAoB,EAAE,CAAC;IAC5B,QAAQ,GAAG,KAAK,CAAC;IACjB,IAAI,GAAG,KAAK,CAAC;IACb,OAAO,GAAyB,IAAI,CAAC;IACrC,WAAW,GAAyB,IAAI,CAAC;IAEjD,YACmB,MAAiB,EACjB,gBAA+B,EAC/B,cAA6B;QAF7B,WAAM,GAAN,MAAM,CAAW;QACjB,qBAAgB,GAAhB,gBAAgB,CAAe;QAC/B,mBAAc,GAAd,cAAc,CAAe;IAC7C,CAAC;IAEJ,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACvD,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC;IAEO,MAAM,CACZ,MAAoB,EACpB,SAAwB;QAExB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC3C,OAAO,IAAI,CAAC,WAAW,CAAC;YAC1B,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,cAAwC,CAAC;QAC7C,IAAI,aAAmD,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpD,cAAc,GAAG,OAAO,CAAC;YACzB,aAAa,GAAG,MAAM,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG;YACd,MAAM;YACN,SAAS;YACT,OAAO,EAAE,cAAe;YACxB,MAAM,EAAE,aAAc;SACvB,CAAC;QACF,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;YACD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC;YAC9C,IAAI,UAAU,GAAiB,IAAI,CAAC;YACpC,IAAI,CAAC;gBACH,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACjC,MAAM,cAAc,CAClB,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAC3B,OAAO,CAAC,SAAS,EACjB,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAC9D,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACtC,IAAI,CAAC,OAAO,GAAG,SAAS;yBACrB,IAAI,CACH,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB;yBACA,OAAO,CAAC,GAAG,EAAE;wBACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACtB,CAAC,CAAC,CAAC;oBACL,MAAM,kBAAkB,CACtB,SAAS,EACT,OAAO,CAAC,SAAS,EACjB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAC5D,CAAC;gBACJ,CAAC;gBACD,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC3B,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACpB,IAAI,UAAU,EAAE,CAAC;oBACf,UAAU,GAAG,GAAG,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG,UAAU,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACnC,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACnB,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;CACF;AAeD;;GAEG;AACH,MAAa,UAAU;IACJ,UAAU,CAAc;IACjC,aAAa,CAAc;IAC3B,aAAa,GAAgB,EAAE,CAAC;IAChC,eAAe,GAAG,IAAI,GAAG,EAAa,CAAC;IACvC,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,uBAAuB,GAAG,IAAI,GAAG,EAAa,CAAC;IAC/C,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEpC,gBAAgB,CAAgB;IAChC,cAAc,CAAgB;IAC9B,UAAU,CAAU;IACpB,MAAM,CAAU;IAChB,kBAAkB,CAAU;IAC5B,iBAAiB,CAAU;IAI5C;QACE,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACzC,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE;gBAClD,KAAK,EAAE;oBACL,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtB,CAAC;gBACD,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,YAAoB,OAAoB,EAAE,OAA2B;QACnE,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAElC,IAAI,CAAC,gBAAgB;YACnB,OAAO,EAAE,gBAAgB,KAAK,SAAS;gBACrC,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC/B,IAAI,CAAC,cAAc;YACjB,OAAO,EAAE,cAAc,KAAK,SAAS;gBACnC,CAAC,CAAC,wBAAwB;gBAC1B,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC;QACvC,IAAI,CAAC,kBAAkB,GAAG,OAAO,EAAE,kBAAkB,IAAI,IAAI,CAAC;QAC9D,IAAI,CAAC,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,IAAI,KAAK,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CACf,OAAoB,EACpB,OAA2B;QAE3B,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CACV,2BAA2B,OAAO,CAAC,UAAU,CAAC,MAAM,aAAa,CAClE,CAAC;QACF,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,GAAG;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,SAAS,CACb,UAAsC,EAAE;QAExC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;QAC9C,IAAI,cAA2B,CAAC;QAEhC,IAAI,UAAU,EAAE,CAAC;YACf,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;YACjC,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;YAChC,IAAI,CAAC,uBAAuB,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3C,CAAC;QAED,MAAM,CAAC,KAAK,CACV,wCAAwC,UAAU,UAAU,cAAc,CAAC,MAAM,aAAa,CAC/F,CAAC;QACF,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;gBACpC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,uBAAuB,GAAG,IAAI,GAAG,EAAE,CAAC;QAEzC,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,gBAAgB,GAAgB,EAAE,CAAC;QAEvC,MAAM,CAAC,KAAK,CAAC,cAAc,gBAAgB,CAAC,MAAM,iBAAiB,CAAC,CAAC;QACrE,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;oBACtC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;oBAClC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;wBACtC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CACxC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAC9C,CAAC;YACJ,CAAC;YACD,MAAM,gBAAgB,GAAG,aAAa,CAAC;gBACrC,GAAG,gBAAgB;gBACnB,GAAG,IAAI,CAAC,aAAa;aACtB,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;YAC1C,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YACxB,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACpD,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,MAAiB;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YACxD,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAChC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC7B,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC5C,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACzC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;YAC3C,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC7C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CACzC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAChC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,CAAC,KAAK,CACV,uBAAuB,IAAI,CAAC,aAAa,CAAC,MAAM,aAAa,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAC1F,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,MAAiB,EAAE,KAAY,EAAE,KAAa;QAClE,MAAM,CAAC,KAAK,CAAC,aAAa,KAAK,gBAAgB,MAAM,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,MAAiB;QACxC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,cAAc,CAClB,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EACtB,IAAI,CAAC,gBAAgB,EACrB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAC7D,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAiB;QACzC,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YACrD,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC7B,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,MAAM,CAAC,KAAK,CAAC,mCAAmC,MAAM,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC;gBACxE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,+BAA+B,MAAM,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;YAClE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,MAAiB;QACtC,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACrB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC9B,CAAC;gBACD,OAAO;YACT,CAAC;QACH,CAAC;QACD,MAAM,cAAc,CAClB,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EACpB,IAAI,CAAC,cAAc,EACnB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CACzD,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAAoB;QAC7C,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,OAAoB;QACnD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CACrD,CAAC;QACF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAC5B,CAAC,MAAM,EAAmC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAC1E,CAAC;QACF,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,CAAC,MAAM,CAAC;QACzB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAC1C,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,CACtD,CAAC;YACF,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACpD,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,iCAAiC,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,MAAiB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,YAAY,CAC3B,MAAM,EACN,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,cAAc,CACpB,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,kBAAkB,CAAC,MAAiB;QAC1C,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAC5C,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,KAAK,MAAM,CAC1C,CAAC;IACJ,CAAC;CACF;AAzTD,gCAyTC;AAED;;GAEG;AACI,KAAK,UAAU,iBAAiB,CACrC,OAAoB,EACpB,OAA2B;IAE3B,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAoB,EACpB,MAAiB,EACjB,SAAwB;IAExB,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,IAAI,KAAK,CAAC,cAAc,MAAM,aAAa,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,cAAc,MAAM,oBAAoB,SAAS,WAAW,MAAM,CAAC,IAAI,IAAI,CAC5E,CAAC;IACF,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC;IAC5B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAiB;IAC1C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,GAAG,aAAa,CAAC;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAiB;IAC3C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,IAAI,eAAe,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC;IAC5B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,EAAuB,EACvB,SAAwB,EACxB,YAAmB;IAEnB,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IAED,IAAI,KAAgD,CAAC;IACrD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,IAAI,GAAG,EAAE,EAAE,CAAC;IAElB,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACtD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,CAAC,YAAY,CAAC,CAAC;QACvB,CAAC,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,IAAmB,EACnB,SAAwB,EACxB,YAAmB;IAEnB,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC;QACX,OAAO;IACT,CAAC;IAED,IAAI,KAAgD,CAAC;IACrD,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACtD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,CAAC,YAAY,CAAC,CAAC;QACvB,CAAC,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,YAAY,CAAC,KAAY;IAChC,MAAM,IAAI,GAAI,KAA2B,CAAC,IAAI,CAAC;IAC/C,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,YAAY;QAC3B,KAAK,CAAC,IAAI,KAAK,eAAe;QAC9B,KAAK,CAAC,IAAI,KAAK,gBAAgB;QAC/B,IAAI,KAAK,WAAW;QACpB,IAAI,KAAK,aAAa,CACvB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,OAAoB;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAa,CAAC;IAClC,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}