@suds-cli/textinput 0.0.1-alpha.0 → 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/model.js DELETED
@@ -1,613 +0,0 @@
1
- var _a;
2
- import { Style, width as stringWidth, clampWidth } from '@suds-cli/chapstick';
3
- import { CursorModel, CursorMode } from '@suds-cli/cursor';
4
- import { matches } from '@suds-cli/key';
5
- import { batch, KeyMsg, KeyType } from '@suds-cli/tea';
6
- import { newSanitizer } from '@suds-cli/runeutil';
7
- import GraphemeSplitter from 'grapheme-splitter';
8
- import { PasteErrorMsg, PasteMsg, pasteCommand } from './messages.js';
9
- import { EchoMode, defaultKeyMap, } from './types.js';
10
- const splitter = new GraphemeSplitter();
11
- const sanitizer = newSanitizer({ replaceNewLine: ' ', replaceTab: ' ' });
12
- /**
13
- * Single-line text input model with cursor control and clipboard support.
14
- * @public
15
- */
16
- export class TextInputModel {
17
- value;
18
- position;
19
- focused;
20
- placeholder;
21
- echoMode;
22
- echoCharacter;
23
- charLimit;
24
- width;
25
- prompt;
26
- promptStyle;
27
- textStyle;
28
- placeholderStyle;
29
- cursorStyle;
30
- validateFn;
31
- keyMap;
32
- cursor;
33
- error;
34
- constructor(state) {
35
- this.value = state.value;
36
- this.position = state.position;
37
- this.focused = state.focused;
38
- this.placeholder = state.placeholder;
39
- this.echoMode = state.echoMode;
40
- this.echoCharacter = state.echoCharacter;
41
- this.charLimit = state.charLimit;
42
- this.width = state.width;
43
- this.prompt = state.prompt;
44
- this.promptStyle = state.promptStyle;
45
- this.textStyle = state.textStyle;
46
- this.placeholderStyle = state.placeholderStyle;
47
- this.cursorStyle = state.cursorStyle;
48
- this.validateFn = state.validateFn;
49
- this.keyMap = state.keyMap;
50
- this.cursor = state.cursor;
51
- this.error = state.error;
52
- }
53
- /** Create a new text input model. */
54
- static new(options = {}) {
55
- const sanitized = clampToLimit(sanitizeValue(options.value ?? ''), options.charLimit ?? 0);
56
- const baseTextStyle = options.textStyle ?? new Style();
57
- const cursorMode = options.cursorMode ?? CursorMode.Blink;
58
- const cursor = new CursorModel({
59
- style: options.cursorStyle ?? new Style(),
60
- textStyle: baseTextStyle,
61
- mode: cursorMode,
62
- focused: false,
63
- char: ' ',
64
- });
65
- const model = new _a({
66
- value: sanitized,
67
- position: runeCount(sanitized),
68
- focused: false,
69
- placeholder: options.placeholder ?? '',
70
- echoMode: options.echoMode ?? EchoMode.Normal,
71
- echoCharacter: options.echoCharacter ?? '•',
72
- charLimit: options.charLimit ?? 0,
73
- width: options.width ?? 0,
74
- prompt: options.prompt ?? '> ',
75
- promptStyle: options.promptStyle ?? new Style(),
76
- textStyle: baseTextStyle,
77
- placeholderStyle: options.placeholderStyle ?? new Style(),
78
- cursorStyle: options.cursorStyle ?? new Style(),
79
- validateFn: options.validate,
80
- keyMap: options.keyMap ?? defaultKeyMap,
81
- cursor,
82
- error: null,
83
- });
84
- return model.#withError(model.#runValidation(sanitized));
85
- }
86
- /** Initial command (none needed by default). */
87
- init() {
88
- return null;
89
- }
90
- /** Current value. */
91
- valueOf() {
92
- return this.value;
93
- }
94
- /** Length in graphemes. */
95
- length() {
96
- return runeCount(this.value);
97
- }
98
- /** True if no content. */
99
- isEmpty() {
100
- return this.length() === 0;
101
- }
102
- /** Cursor position in graphemes. */
103
- cursorPosition() {
104
- return this.position;
105
- }
106
- /** Focus the input (shows cursor, enables key handling). */
107
- focus() {
108
- if (this.focused) {
109
- return [this, null];
110
- }
111
- const [cursor, cmd] = this.cursor.focus();
112
- const next = this.#with({ focused: true, cursor });
113
- return [next, cmd];
114
- }
115
- /** Blur the input (hides cursor, ignores key handling). */
116
- blur() {
117
- if (!this.focused) {
118
- return this;
119
- }
120
- return this.#with({ focused: false, cursor: this.cursor.blur() });
121
- }
122
- /** Move cursor to start. */
123
- cursorStart() {
124
- return this.#withPosition(0);
125
- }
126
- /** Move cursor to end. */
127
- cursorEnd() {
128
- return this.#withPosition(this.length());
129
- }
130
- /** Move cursor left by n (default 1). */
131
- cursorLeft(n = 1) {
132
- return this.#withPosition(Math.max(0, this.position - Math.max(1, n)));
133
- }
134
- /** Move cursor right by n (default 1). */
135
- cursorRight(n = 1) {
136
- return this.#withPosition(Math.min(this.length(), this.position + Math.max(1, n)));
137
- }
138
- /** Move cursor one word to the left. */
139
- wordLeft() {
140
- if (this.position === 0 || this.isEmpty()) {
141
- return this;
142
- }
143
- if (this.echoMode !== EchoMode.Normal) {
144
- return this.cursorStart();
145
- }
146
- const graphemes = splitGraphemes(this.value);
147
- let i = this.position - 1;
148
- while (i >= 0) {
149
- const g = graphemes[i];
150
- if (g && isWhitespace(g)) {
151
- i--;
152
- continue;
153
- }
154
- break;
155
- }
156
- while (i >= 0) {
157
- const g = graphemes[i];
158
- if (g && !isWhitespace(g)) {
159
- i--;
160
- continue;
161
- }
162
- break;
163
- }
164
- return this.#withPosition(Math.max(0, i + 1));
165
- }
166
- /** Move cursor one word to the right. */
167
- wordRight() {
168
- if (this.position >= this.length() || this.isEmpty()) {
169
- return this;
170
- }
171
- if (this.echoMode !== EchoMode.Normal) {
172
- return this.cursorEnd();
173
- }
174
- const graphemes = splitGraphemes(this.value);
175
- let i = this.position;
176
- while (i < graphemes.length) {
177
- const g = graphemes[i];
178
- if (g && isWhitespace(g)) {
179
- i++;
180
- continue;
181
- }
182
- break;
183
- }
184
- while (i < graphemes.length) {
185
- const g = graphemes[i];
186
- if (g && !isWhitespace(g)) {
187
- i++;
188
- continue;
189
- }
190
- break;
191
- }
192
- return this.#withPosition(Math.min(this.length(), i));
193
- }
194
- /** Insert runes at the cursor position. */
195
- insertRunes(runes) {
196
- if (!runes) {
197
- return this;
198
- }
199
- const sanitized = sanitizeValue(runes);
200
- if (!sanitized) {
201
- return this;
202
- }
203
- const before = sliceGraphemes(this.value, 0, this.position);
204
- const after = sliceGraphemes(this.value, this.position);
205
- const insertion = clampGraphemes(sanitized, this.#remainingCapacity(before + after));
206
- const nextValue = before + insertion + after;
207
- const nextPos = this.position + runeCount(insertion);
208
- return this.#withValue(nextValue, nextPos);
209
- }
210
- /** Delete up to n runes to the left of the cursor. */
211
- deleteLeft(n = 1) {
212
- if (this.position === 0 || n <= 0) {
213
- return this;
214
- }
215
- const remove = Math.min(n, this.position);
216
- const before = sliceGraphemes(this.value, 0, this.position - remove);
217
- const after = sliceGraphemes(this.value, this.position);
218
- return this.#withValue(before + after, this.position - remove);
219
- }
220
- /** Delete up to n runes to the right of the cursor. */
221
- deleteRight(n = 1) {
222
- if (this.position >= this.length() || n <= 0) {
223
- return this;
224
- }
225
- const before = sliceGraphemes(this.value, 0, this.position);
226
- const after = sliceGraphemes(this.value, this.position + Math.max(1, n));
227
- return this.#withValue(before + after, this.position);
228
- }
229
- /** Delete the word to the left of the cursor. */
230
- deleteWordLeft() {
231
- if (this.position === 0 || this.isEmpty()) {
232
- return this;
233
- }
234
- if (this.echoMode !== EchoMode.Normal) {
235
- return this.deleteToStart();
236
- }
237
- const graphemes = splitGraphemes(this.value);
238
- let start = this.position;
239
- // Walk left over whitespace
240
- while (start > 0) {
241
- const g = graphemes[start - 1];
242
- if (g && isWhitespace(g)) {
243
- start--;
244
- continue;
245
- }
246
- break;
247
- }
248
- // Walk left over word
249
- while (start > 0) {
250
- const g = graphemes[start - 1];
251
- if (g && !isWhitespace(g)) {
252
- start--;
253
- continue;
254
- }
255
- break;
256
- }
257
- const before = graphemes.slice(0, start).join('');
258
- const after = graphemes.slice(this.position).join('');
259
- return this.#withValue(before + after, start);
260
- }
261
- /** Delete the word to the right of the cursor. */
262
- deleteWordRight() {
263
- if (this.position >= this.length() || this.isEmpty()) {
264
- return this;
265
- }
266
- if (this.echoMode !== EchoMode.Normal) {
267
- return this.deleteToEnd();
268
- }
269
- const graphemes = splitGraphemes(this.value);
270
- let end = this.position;
271
- while (end < graphemes.length) {
272
- const g = graphemes[end];
273
- if (g && isWhitespace(g)) {
274
- end++;
275
- continue;
276
- }
277
- break;
278
- }
279
- while (end < graphemes.length) {
280
- const g = graphemes[end];
281
- if (g && !isWhitespace(g)) {
282
- end++;
283
- continue;
284
- }
285
- break;
286
- }
287
- const before = graphemes.slice(0, this.position).join('');
288
- const after = graphemes.slice(end).join('');
289
- return this.#withValue(before + after, this.position);
290
- }
291
- /** Delete everything before the cursor. */
292
- deleteToStart() {
293
- const after = sliceGraphemes(this.value, this.position);
294
- return this.#withValue(after, 0);
295
- }
296
- /** Delete everything after the cursor. */
297
- deleteToEnd() {
298
- const before = sliceGraphemes(this.value, 0, this.position);
299
- return this.#withValue(before, before.length === 0 ? 0 : runeCount(before));
300
- }
301
- /** Reset to empty value and cursor at start. */
302
- reset() {
303
- return this.#withValue('', 0);
304
- }
305
- /** Replace the value and re-run validation. */
306
- setValue(value) {
307
- const sanitized = clampToLimit(sanitizeValue(value), this.charLimit);
308
- return this.#withValue(sanitized, Math.min(this.position, runeCount(sanitized)));
309
- }
310
- /** Run validation and return the error (if any). */
311
- validate() {
312
- return this.#runValidation(this.value);
313
- }
314
- /** Set a new validation function (re-validates current value). */
315
- setValidateFunc(fn) {
316
- const next = this.#with({ validateFn: fn });
317
- return next.#withError(next.#runValidation(next.value));
318
- }
319
- /** Command to paste from the clipboard. */
320
- paste() {
321
- return [this, pasteCommand()];
322
- }
323
- /** Handle Tea messages (keys, cursor, paste). */
324
- update(msg) {
325
- // eslint-disable-next-line @typescript-eslint/no-this-alias
326
- let model = this;
327
- const cmds = [];
328
- if (msg instanceof KeyMsg) {
329
- if (model.focused) {
330
- const [nextModel, keyCmd] = model.#handleKey(msg);
331
- model = nextModel;
332
- if (keyCmd) {
333
- cmds.push(keyCmd);
334
- }
335
- }
336
- }
337
- else if (msg instanceof PasteMsg) {
338
- model = model.insertRunes(msg.text);
339
- }
340
- else if (msg instanceof PasteErrorMsg) {
341
- model = model.#withError(asError(msg.error));
342
- }
343
- const [cursor, cursorCmd] = model.cursor.update(msg);
344
- model = model.#with({ cursor });
345
- if (cursorCmd) {
346
- cmds.push(cursorCmd);
347
- }
348
- return [model, batch(...cmds)];
349
- }
350
- /** Render the input with prompt, text, and cursor. */
351
- view() {
352
- const promptRendered = this.promptStyle.inline(true).render(this.prompt);
353
- const availableWidth = this.width > 0
354
- ? Math.max(0, this.width - stringWidth(promptRendered))
355
- : Number.POSITIVE_INFINITY;
356
- if (this.isEmpty() && this.placeholder) {
357
- const placeholder = this.#placeholderView(availableWidth);
358
- return promptRendered + placeholder;
359
- }
360
- const rendered = this.#valueView(availableWidth);
361
- return promptRendered + rendered;
362
- }
363
- #handleKey(msg) {
364
- // eslint-disable-next-line @typescript-eslint/no-this-alias
365
- let next = this;
366
- let cmd = null;
367
- const keyMap = this.keyMap;
368
- switch (true) {
369
- case matches(msg, keyMap.deleteWordBackward):
370
- next = next.deleteWordLeft();
371
- break;
372
- case matches(msg, keyMap.deleteCharacterBackward):
373
- next = next.deleteLeft();
374
- break;
375
- case matches(msg, keyMap.wordBackward):
376
- next = next.wordLeft();
377
- break;
378
- case matches(msg, keyMap.characterBackward):
379
- next = next.cursorLeft();
380
- break;
381
- case matches(msg, keyMap.wordForward):
382
- next = next.wordRight();
383
- break;
384
- case matches(msg, keyMap.characterForward):
385
- next = next.cursorRight();
386
- break;
387
- case matches(msg, keyMap.lineStart):
388
- next = next.cursorStart();
389
- break;
390
- case matches(msg, keyMap.deleteCharacterForward):
391
- next = next.deleteRight();
392
- break;
393
- case matches(msg, keyMap.lineEnd):
394
- next = next.cursorEnd();
395
- break;
396
- case matches(msg, keyMap.deleteAfterCursor):
397
- next = next.deleteToEnd();
398
- break;
399
- case matches(msg, keyMap.deleteBeforeCursor):
400
- next = next.deleteToStart();
401
- break;
402
- case matches(msg, keyMap.paste):
403
- cmd = pasteCommand();
404
- break;
405
- case matches(msg, keyMap.deleteWordForward):
406
- next = next.deleteWordRight();
407
- break;
408
- default:
409
- if ((msg.key.type === KeyType.Runes || msg.key.type === KeyType.Space) &&
410
- !msg.key.alt) {
411
- next = next.insertRunes(msg.key.runes);
412
- }
413
- break;
414
- }
415
- return [next, cmd];
416
- }
417
- #placeholderView(availableWidth) {
418
- const graphemes = splitGraphemes(this.placeholder);
419
- const cursorChar = graphemes[0] ?? ' ';
420
- const rest = graphemes.slice(1).join('');
421
- const budget = Number.isFinite(availableWidth)
422
- ? Math.max(0, availableWidth - stringWidth(cursorChar))
423
- : undefined;
424
- const visibleRest = budget === undefined ? rest : clampWidth(rest, budget);
425
- const cursorView = this.cursor.withChar(cursorChar || ' ').view();
426
- const styledRest = this.placeholderStyle.inline(true).render(visibleRest);
427
- const usedWidth = stringWidth(cursorChar + visibleRest);
428
- const padding = Number.isFinite(availableWidth) && availableWidth > 0
429
- ? Math.max(0, availableWidth - usedWidth)
430
- : 0;
431
- return cursorView + styledRest + ' '.repeat(padding);
432
- }
433
- #valueView(availableWidth) {
434
- const graphemes = splitGraphemes(this.value);
435
- const displayGraphemes = graphemes.map((g) => this.#echoTransform(g));
436
- const widths = displayGraphemes.map((g) => stringWidth(g));
437
- const [start, end] = visibleRange(widths, this.position, availableWidth);
438
- const slice = displayGraphemes.slice(start, end);
439
- const cursorOffset = clamp(this.position - start, 0, slice.length);
440
- const before = slice.slice(0, cursorOffset).join('');
441
- const after = cursorOffset < slice.length ? slice.slice(cursorOffset + 1).join('') : '';
442
- const cursorChar = cursorOffset < slice.length ? (slice[cursorOffset] ?? ' ') : ' ';
443
- const beforeStyled = this.textStyle.inline(true).render(before);
444
- const afterStyled = this.textStyle.inline(true).render(after);
445
- const cursorView = this.cursor.withChar(cursorChar || ' ').view();
446
- const usedWidth = stringWidth(before) + stringWidth(cursorChar || ' ') + stringWidth(after);
447
- const padding = Number.isFinite(availableWidth) && availableWidth > 0
448
- ? Math.max(0, availableWidth - usedWidth)
449
- : 0;
450
- return beforeStyled + cursorView + afterStyled + ' '.repeat(padding);
451
- }
452
- #echoTransform(s) {
453
- switch (this.echoMode) {
454
- case EchoMode.Password:
455
- return this.echoCharacter.repeat(Math.max(0, runeCount(s)));
456
- case EchoMode.None:
457
- return '';
458
- case EchoMode.Normal:
459
- default:
460
- return s;
461
- }
462
- }
463
- #withPosition(position) {
464
- const clamped = clamp(position, 0, this.length());
465
- if (clamped === this.position) {
466
- return this;
467
- }
468
- return this.#with({ position: clamped });
469
- }
470
- #withValue(value, position) {
471
- const clamped = clampToLimit(value, this.charLimit);
472
- const pos = clamp(position ?? this.position, 0, runeCount(clamped));
473
- const next = this.#with({ value: clamped, position: pos });
474
- return next.#withError(next.#runValidation(clamped));
475
- }
476
- #withError(error) {
477
- if (error === this.error) {
478
- return this;
479
- }
480
- return this.#with({ error });
481
- }
482
- #with(patch) {
483
- return new _a({
484
- value: this.value,
485
- position: this.position,
486
- focused: this.focused,
487
- placeholder: this.placeholder,
488
- echoMode: this.echoMode,
489
- echoCharacter: this.echoCharacter,
490
- charLimit: this.charLimit,
491
- width: this.width,
492
- prompt: this.prompt,
493
- promptStyle: this.promptStyle,
494
- textStyle: this.textStyle,
495
- placeholderStyle: this.placeholderStyle,
496
- cursorStyle: this.cursorStyle,
497
- validateFn: this.validateFn,
498
- keyMap: this.keyMap,
499
- cursor: this.cursor,
500
- error: this.error,
501
- ...patch,
502
- });
503
- }
504
- #runValidation(value) {
505
- return this.validateFn ? this.validateFn(value) : null;
506
- }
507
- #remainingCapacity(current) {
508
- if (this.charLimit <= 0) {
509
- return Number.POSITIVE_INFINITY;
510
- }
511
- const remaining = this.charLimit - runeCount(current);
512
- return Math.max(0, remaining);
513
- }
514
- }
515
- _a = TextInputModel;
516
- function sanitizeValue(value) {
517
- return sanitizer.sanitize(value ?? '');
518
- }
519
- function clampToLimit(value, charLimit) {
520
- if (charLimit <= 0) {
521
- return value;
522
- }
523
- return clampGraphemes(value, charLimit);
524
- }
525
- function clampGraphemes(value, limit) {
526
- if (limit <= 0) {
527
- return '';
528
- }
529
- const graphemes = splitGraphemes(value);
530
- if (graphemes.length <= limit) {
531
- return graphemes.join('');
532
- }
533
- return graphemes.slice(0, limit).join('');
534
- }
535
- function splitGraphemes(value) {
536
- return splitter.splitGraphemes(value ?? '');
537
- }
538
- function sliceGraphemes(value, start, end) {
539
- const graphemes = splitGraphemes(value);
540
- return graphemes.slice(start, end).join('');
541
- }
542
- function runeCount(value) {
543
- return splitter.countGraphemes(value ?? '');
544
- }
545
- function clamp(value, min, max) {
546
- const lower = Math.min(min, max);
547
- const upper = Math.max(min, max);
548
- return Math.min(upper, Math.max(lower, value));
549
- }
550
- function isWhitespace(grapheme) {
551
- return /^\s+$/.test(grapheme);
552
- }
553
- function visibleRange(widths, position, maxWidth) {
554
- const len = widths.length;
555
- if (!Number.isFinite(maxWidth) || maxWidth <= 0) {
556
- return [0, len];
557
- }
558
- if (len === 0) {
559
- return [0, 0];
560
- }
561
- const widthAt = (i) => (i >= 0 && i < len ? (widths[i] ?? 0) : 0);
562
- const budget = maxWidth;
563
- let start = Math.min(position, len);
564
- let end = start;
565
- let current = 0;
566
- if (position < len) {
567
- current = widthAt(position);
568
- start = position;
569
- end = position + 1;
570
- }
571
- else {
572
- // Cursor is at the end - reserve 1 cell for the cursor space character
573
- current = 1;
574
- }
575
- while (start > 0) {
576
- const w = widthAt(start - 1);
577
- if (current > 0 && current + w > budget) {
578
- break;
579
- }
580
- start--;
581
- current += w;
582
- if (current >= budget) {
583
- break;
584
- }
585
- }
586
- while (end < len) {
587
- const w = widthAt(end);
588
- if (current > 0 && current + w > budget) {
589
- break;
590
- }
591
- end++;
592
- current += w;
593
- if (current >= budget) {
594
- break;
595
- }
596
- }
597
- while (current > budget && start < end) {
598
- current -= widthAt(start);
599
- start++;
600
- }
601
- return [start, end];
602
- }
603
- function asError(err) {
604
- if (err instanceof Error) {
605
- return err;
606
- }
607
- if (typeof err === 'string')
608
- return new Error(err);
609
- if (typeof err === 'number' || typeof err === 'boolean')
610
- return new Error(String(err));
611
- return new Error('clipboard error');
612
- }
613
- //# sourceMappingURL=model.js.map
package/dist/model.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC7E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,KAAK,EAAsB,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,gBAAgB,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EACL,QAAQ,EAIR,aAAa,GACd,MAAM,YAAY,CAAA;AAEnB,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAA;AACvC,MAAM,SAAS,GAAG,YAAY,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAA;AAsBxE;;;GAGG;AACH,MAAM,OAAO,cAAc;IAChB,KAAK,CAAQ;IACb,QAAQ,CAAQ;IAChB,OAAO,CAAS;IAChB,WAAW,CAAQ;IACnB,QAAQ,CAAU;IAClB,aAAa,CAAQ;IACrB,SAAS,CAAQ;IACjB,KAAK,CAAQ;IACb,MAAM,CAAQ;IACd,WAAW,CAAO;IAClB,SAAS,CAAO;IAChB,gBAAgB,CAAO;IACvB,WAAW,CAAO;IAClB,UAAU,CAAe;IACzB,MAAM,CAAQ;IACd,MAAM,CAAa;IACnB,KAAK,CAAc;IAE5B,YAAoB,KAAqB;QACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;QAC9B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;QAC5B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;QACpC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;QAC9B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAA;QACxC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC1B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;QACpC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;QAChC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAA;QAC9C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;QACpC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IAC1B,CAAC;IAED,qCAAqC;IACrC,MAAM,CAAC,GAAG,CAAC,UAA4B,EAAE;QACvC,MAAM,SAAS,GAAG,YAAY,CAC5B,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAClC,OAAO,CAAC,SAAS,IAAI,CAAC,CACvB,CAAA;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,KAAK,EAAE,CAAA;QACtD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,CAAA;QACzD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC;YAC7B,KAAK,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,KAAK,EAAE;YACzC,SAAS,EAAE,aAAa;YACxB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,GAAG;SACV,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,IAAI,EAAc,CAAC;YAC/B,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC;YAC9B,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;YACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM;YAC7C,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,GAAG;YAC3C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;YACzB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,KAAK,EAAE;YAC/C,SAAS,EAAE,aAAa;YACxB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,IAAI,KAAK,EAAE;YACzD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,KAAK,EAAE;YAC/C,UAAU,EAAE,OAAO,CAAC,QAAQ;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,aAAa;YACvC,MAAM;YACN,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,gDAAgD;IAChD,IAAI;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,qBAAqB;IACrB,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,2BAA2B;IAC3B,MAAM;QACJ,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IAED,0BAA0B;IAC1B,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,oCAAoC;IACpC,cAAc;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,4DAA4D;IAC5D,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACrB,CAAC;QACD,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAClD,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACpB,CAAC;IAED,2DAA2D;IAC3D,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACnE,CAAC;IAED,4BAA4B;IAC5B,WAAW;QACT,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC;IAED,0BAA0B;IAC1B,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,yCAAyC;IACzC,UAAU,CAAC,CAAC,GAAG,CAAC;QACd,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACxE,CAAC;IAED,0CAA0C;IAC1C,WAAW,CAAC,CAAC,GAAG,CAAC;QACf,OAAO,IAAI,CAAC,aAAa,CACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACxD,CAAA;IACH,CAAC;IAED,wCAAwC;IACxC,QAAQ;QACN,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAA;QAC3B,CAAC;QACD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACzB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;YACtB,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YACD,MAAK;QACP,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;YACtB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YACD,MAAK;QACP,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,yCAAyC;IACzC,SAAS;QACP,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAA;QACzB,CAAC;QACD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA;QACrB,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;YACtB,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YACD,MAAK;QACP,CAAC;QACD,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;YACtB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,CAAC,EAAE,CAAA;gBACH,SAAQ;YACV,CAAC;YACD,MAAK;QACP,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACvD,CAAC;IAED,2CAA2C;IAC3C,WAAW,CAAC,KAAa;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3D,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvD,MAAM,SAAS,GAAG,cAAc,CAC9B,SAAS,EACT,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,KAAK,CAAC,CACxC,CAAA;QAED,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAA;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;QACpD,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;IAED,sDAAsD;IACtD,UAAU,CAAC,CAAC,GAAG,CAAC;QACd,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QACzC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAA;QACpE,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,EAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAA;IAChE,CAAC;IAED,uDAAuD;IACvD,WAAW,CAAC,CAAC,GAAG,CAAC;QACf,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3D,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACxE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IACvD,CAAC;IAED,iDAAiD;IACjD,cAAc;QACZ,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAA;QAC7B,CAAC;QACD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAA;QACzB,4BAA4B;QAC5B,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;YAC9B,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,KAAK,EAAE,CAAA;gBACP,SAAQ;YACV,CAAC;YACD,MAAK;QACP,CAAC;QACD,sBAAsB;QACtB,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;YAC9B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,KAAK,EAAE,CAAA;gBACP,SAAQ;YACV,CAAC;YACD,MAAK;QACP,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,EAAE,KAAK,CAAC,CAAA;IAC/C,CAAC;IAED,kDAAkD;IAClD,eAAe;QACb,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAA;QAC3B,CAAC;QACD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAA;QACvB,OAAO,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;YACxB,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,GAAG,EAAE,CAAA;gBACL,SAAQ;YACV,CAAC;YACD,MAAK;QACP,CAAC;QACD,OAAO,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;YACxB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,GAAG,EAAE,CAAA;gBACL,SAAQ;YACV,CAAC;YACD,MAAK;QACP,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACzD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IACvD,CAAC;IAED,2CAA2C;IAC3C,aAAa;QACX,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAClC,CAAC;IAED,0CAA0C;IAC1C,WAAW;QACT,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3D,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;IAC7E,CAAC;IAED,gDAAgD;IAChD,KAAK;QACH,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IAC/B,CAAC;IAED,+CAA+C;IAC/C,QAAQ,CAAC,KAAa;QACpB,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QACpE,OAAO,IAAI,CAAC,UAAU,CACpB,SAAS,EACT,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAC9C,CAAA;IACH,CAAC;IAED,oDAAoD;IACpD,QAAQ;QACN,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACxC,CAAC;IAED,kEAAkE;IAClE,eAAe,CAAC,EAAgB;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAA;QAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,2CAA2C;IAC3C,KAAK;QACH,OAAO,CAAC,IAAI,EAAE,YAAY,EAAc,CAAC,CAAA;IAC3C,CAAC;IAED,iDAAiD;IACjD,MAAM,CAAC,GAAQ;QACb,4DAA4D;QAC5D,IAAI,KAAK,GAAmB,IAAI,CAAA;QAChC,MAAM,IAAI,GAAe,EAAE,CAAA;QAE3B,IAAI,GAAG,YAAY,MAAM,EAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;gBACjD,KAAK,GAAG,SAAS,CAAA;gBACjB,IAAI,MAAM,EAAE,CAAC;oBACX,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YACnC,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACrC,CAAC;aAAM,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;YACxC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9C,CAAC;QAED,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACpD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QAC/B,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,SAAqB,CAAC,CAAA;QAClC,CAAC;QAED,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IAChC,CAAC;IAED,sDAAsD;IACtD,IAAI;QACF,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACxE,MAAM,cAAc,GAClB,IAAI,CAAC,KAAK,GAAG,CAAC;YACZ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;YACvD,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAA;QAE9B,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAA;YACzD,OAAO,cAAc,GAAG,WAAW,CAAA;QACrC,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;QAChD,OAAO,cAAc,GAAG,QAAQ,CAAA;IAClC,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,4DAA4D;QAC5D,IAAI,IAAI,GAAmB,IAAI,CAAA;QAC/B,IAAI,GAAG,GAAoB,IAAI,CAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAE1B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,kBAAkB,CAAC;gBAC1C,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;gBAC5B,MAAK;YACP,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,uBAAuB,CAAC;gBAC/C,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;gBACxB,MAAK;YACP,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC;gBACpC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACtB,MAAK;YACP,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,iBAAiB,CAAC;gBACzC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;gBACxB,MAAK;YACP,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC;gBACnC,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;gBACvB,MAAK;YACP,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC;gBACxC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;gBACzB,MAAK;YACP,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;gBACjC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;gBACzB,MAAK;YACP,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,sBAAsB,CAAC;gBAC9C,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;gBACzB,MAAK;YACP,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC;gBAC/B,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;gBACvB,MAAK;YACP,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,iBAAiB,CAAC;gBACzC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;gBACzB,MAAK;YACP,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,kBAAkB,CAAC;gBAC1C,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;gBAC3B,MAAK;YACP,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;gBAC7B,GAAG,GAAG,YAAY,EAAc,CAAA;gBAChC,MAAK;YACP,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,iBAAiB,CAAC;gBACzC,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;gBAC7B,MAAK;YACP;gBACE,IACE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC;oBAClE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EACZ,CAAC;oBACD,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACxC,CAAC;gBACD,MAAK;QACT,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACpB,CAAC;IAED,gBAAgB,CAAC,cAAsB;QACrC,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAClD,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAA;QACtC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAExC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC5C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;YACvD,CAAC,CAAC,SAAS,CAAA;QACb,MAAM,WAAW,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAE1E,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAEzE,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,CAAA;QACvD,MAAM,OAAO,GACX,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC;YACnD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;YACzC,CAAC,CAAC,CAAC,CAAA;QAEP,OAAO,UAAU,GAAG,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACtD,CAAC;IAED,UAAU,CAAC,cAAsB;QAC/B,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;QACrE,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;QAE1D,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;QACxE,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAChD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QAElE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACpD,MAAM,KAAK,GACT,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAE3E,MAAM,UAAU,GACd,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QAElE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QAEjE,MAAM,SAAS,GACb,WAAW,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,UAAU,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;QAC3E,MAAM,OAAO,GACX,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC;YACnD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;YACzC,CAAC,CAAC,CAAC,CAAA;QAEP,OAAO,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACtE,CAAC;IAED,cAAc,CAAC,CAAS;QACtB,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,KAAK,QAAQ,CAAC,QAAQ;gBACpB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7D,KAAK,QAAQ,CAAC,IAAI;gBAChB,OAAO,EAAE,CAAA;YACX,KAAK,QAAQ,CAAC,MAAM,CAAC;YACrB;gBACE,OAAO,CAAC,CAAA;QACZ,CAAC;IACH,CAAC;IAED,aAAa,CAAC,QAAgB;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QACjD,IAAI,OAAO,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,QAAiB;QACzC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QACnD,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAA;QAC1D,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,UAAU,CAAC,KAAmB;QAC5B,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,KAA8B;QAClC,OAAO,IAAI,EAAc,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,KAAK;SACT,CAAC,CAAA;IACJ,CAAC;IAED,cAAc,CAAC,KAAa;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACxD,CAAC;IAED,kBAAkB,CAAC,OAAe;QAChC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC,iBAAiB,CAAA;QACjC,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;QACrD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAC/B,CAAC;CACF;;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;AACxC,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,SAAiB;IACpD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;AACzC,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,KAAa;IAClD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IACvC,IAAI,SAAS,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;AAC7C,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,KAAa,EAAE,GAAY;IAChE,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IACvC,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC7C,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;AAC7C,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAChC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC/B,CAAC;AAED,SAAS,YAAY,CACnB,MAAgB,EAChB,QAAgB,EAChB,QAAgB;IAEhB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAA;IACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACjB,CAAC;IACD,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACf,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACzE,MAAM,MAAM,GAAG,QAAQ,CAAA;IAEvB,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IACnC,IAAI,GAAG,GAAG,KAAK,CAAA;IACf,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,IAAI,QAAQ,GAAG,GAAG,EAAE,CAAC;QACnB,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC3B,KAAK,GAAG,QAAQ,CAAA;QAChB,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAA;IACpB,CAAC;SAAM,CAAC;QACN,uEAAuE;QACvE,OAAO,GAAG,CAAC,CAAA;IACb,CAAC;IAED,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QAC5B,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;YACxC,MAAK;QACP,CAAC;QACD,KAAK,EAAE,CAAA;QACP,OAAO,IAAI,CAAC,CAAA;QACZ,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,MAAK;QACP,CAAC;IACH,CAAC;IAED,OAAO,GAAG,GAAG,GAAG,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QACtB,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;YACxC,MAAK;QACP,CAAC;QACD,GAAG,EAAE,CAAA;QACL,OAAO,IAAI,CAAC,CAAA;QACZ,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,MAAK;QACP,CAAC;IACH,CAAC;IAED,OAAO,OAAO,GAAG,MAAM,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QACvC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAA;QACzB,KAAK,EAAE,CAAA;IACT,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AACrB,CAAC;AAED,SAAS,OAAO,CAAC,GAAY;IAC3B,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAA;IAClD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS;QACrD,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/B,OAAO,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;AACrC,CAAC"}