@syntero/orca-cli 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/dist/assistant.d.ts +17 -3
  2. package/dist/assistant.d.ts.map +1 -1
  3. package/dist/assistant.js +217 -22
  4. package/dist/assistant.js.map +1 -1
  5. package/dist/auth.d.ts +97 -0
  6. package/dist/auth.d.ts.map +1 -0
  7. package/dist/auth.js +438 -0
  8. package/dist/auth.js.map +1 -0
  9. package/dist/autocomplete.d.ts +24 -0
  10. package/dist/autocomplete.d.ts.map +1 -0
  11. package/dist/autocomplete.js +43 -0
  12. package/dist/autocomplete.js.map +1 -0
  13. package/dist/components/ChatApp.d.ts +32 -0
  14. package/dist/components/ChatApp.d.ts.map +1 -0
  15. package/dist/components/ChatApp.js +470 -0
  16. package/dist/components/ChatApp.js.map +1 -0
  17. package/dist/components/CommandPalette.d.ts +15 -0
  18. package/dist/components/CommandPalette.d.ts.map +1 -0
  19. package/dist/components/CommandPalette.js +22 -0
  20. package/dist/components/CommandPalette.js.map +1 -0
  21. package/dist/components/ConfigWizard.d.ts +25 -0
  22. package/dist/components/ConfigWizard.d.ts.map +1 -0
  23. package/dist/components/ConfigWizard.js +401 -0
  24. package/dist/components/ConfigWizard.js.map +1 -0
  25. package/dist/components/InputFooter.d.ts +33 -0
  26. package/dist/components/InputFooter.d.ts.map +1 -0
  27. package/dist/components/InputFooter.js +618 -0
  28. package/dist/components/InputFooter.js.map +1 -0
  29. package/dist/components/InputModal.d.ts +25 -0
  30. package/dist/components/InputModal.d.ts.map +1 -0
  31. package/dist/components/InputModal.js +529 -0
  32. package/dist/components/InputModal.js.map +1 -0
  33. package/dist/components/ModelMenu.d.ts +24 -0
  34. package/dist/components/ModelMenu.d.ts.map +1 -0
  35. package/dist/components/ModelMenu.js +175 -0
  36. package/dist/components/ModelMenu.js.map +1 -0
  37. package/dist/components/ProviderMenu.d.ts +20 -0
  38. package/dist/components/ProviderMenu.d.ts.map +1 -0
  39. package/dist/components/ProviderMenu.js +31 -0
  40. package/dist/components/ProviderMenu.js.map +1 -0
  41. package/dist/components/SyncMenu.d.ts +23 -0
  42. package/dist/components/SyncMenu.d.ts.map +1 -0
  43. package/dist/components/SyncMenu.js +135 -0
  44. package/dist/components/SyncMenu.js.map +1 -0
  45. package/dist/components/TokenInput.d.ts +15 -0
  46. package/dist/components/TokenInput.d.ts.map +1 -0
  47. package/dist/components/TokenInput.js +103 -0
  48. package/dist/components/TokenInput.js.map +1 -0
  49. package/dist/index.js +323 -173
  50. package/dist/index.js.map +1 -1
  51. package/dist/ink-input.d.ts +14 -0
  52. package/dist/ink-input.d.ts.map +1 -0
  53. package/dist/ink-input.js +92 -0
  54. package/dist/ink-input.js.map +1 -0
  55. package/dist/models.d.ts +115 -0
  56. package/dist/models.d.ts.map +1 -0
  57. package/dist/models.js +221 -0
  58. package/dist/models.js.map +1 -0
  59. package/dist/providers.d.ts +19 -4
  60. package/dist/providers.d.ts.map +1 -1
  61. package/dist/providers.js +80 -112
  62. package/dist/providers.js.map +1 -1
  63. package/dist/settings.d.ts +15 -0
  64. package/dist/settings.d.ts.map +1 -1
  65. package/dist/settings.js +56 -21
  66. package/dist/settings.js.map +1 -1
  67. package/dist/sync/docker.d.ts +68 -0
  68. package/dist/sync/docker.d.ts.map +1 -0
  69. package/dist/sync/docker.js +234 -0
  70. package/dist/sync/docker.js.map +1 -0
  71. package/dist/sync/download.d.ts +87 -0
  72. package/dist/sync/download.d.ts.map +1 -0
  73. package/dist/sync/download.js +291 -0
  74. package/dist/sync/download.js.map +1 -0
  75. package/dist/sync/hash.d.ts +60 -0
  76. package/dist/sync/hash.d.ts.map +1 -0
  77. package/dist/sync/hash.js +92 -0
  78. package/dist/sync/hash.js.map +1 -0
  79. package/dist/sync/index.d.ts +15 -0
  80. package/dist/sync/index.d.ts.map +1 -0
  81. package/dist/sync/index.js +21 -0
  82. package/dist/sync/index.js.map +1 -0
  83. package/dist/sync/manifest.d.ts +132 -0
  84. package/dist/sync/manifest.d.ts.map +1 -0
  85. package/dist/sync/manifest.js +260 -0
  86. package/dist/sync/manifest.js.map +1 -0
  87. package/dist/sync/progress.d.ts +164 -0
  88. package/dist/sync/progress.d.ts.map +1 -0
  89. package/dist/sync/progress.js +233 -0
  90. package/dist/sync/progress.js.map +1 -0
  91. package/dist/sync/services.d.ts +70 -0
  92. package/dist/sync/services.d.ts.map +1 -0
  93. package/dist/sync/services.js +134 -0
  94. package/dist/sync/services.js.map +1 -0
  95. package/dist/sync/sync-engine.d.ts +69 -0
  96. package/dist/sync/sync-engine.d.ts.map +1 -0
  97. package/dist/sync/sync-engine.js +533 -0
  98. package/dist/sync/sync-engine.js.map +1 -0
  99. package/dist/tokens.d.ts +70 -0
  100. package/dist/tokens.d.ts.map +1 -0
  101. package/dist/tokens.js +198 -0
  102. package/dist/tokens.js.map +1 -0
  103. package/dist/tools.d.ts +60 -0
  104. package/dist/tools.d.ts.map +1 -1
  105. package/dist/tools.js +34 -0
  106. package/dist/tools.js.map +1 -1
  107. package/dist/types/sync.d.ts +284 -0
  108. package/dist/types/sync.d.ts.map +1 -0
  109. package/dist/types/sync.js +5 -0
  110. package/dist/types/sync.js.map +1 -0
  111. package/package.json +10 -2
@@ -0,0 +1,618 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useCallback, useMemo, useEffect } from 'react';
3
+ import { Box, Text, useInput, useApp } from 'ink';
4
+ import { CommandPalette } from './CommandPalette.js';
5
+ import { ModelMenu } from './ModelMenu.js';
6
+ import { ConfigWizard } from './ConfigWizard.js';
7
+ import { TokenInput } from './TokenInput.js';
8
+ import { SyncMenu } from './SyncMenu.js';
9
+ import { filterCommands } from '../autocomplete.js';
10
+ import { Settings, Provider, saveSettings, debugLog as settingsDebugLog } from '../settings.js';
11
+ import { isAuthenticated, setSelectedCloudProvider } from '../auth.js';
12
+ /**
13
+ * InputFooter - Persistent input component for the chat footer.
14
+ *
15
+ * This is a simplified, controlled version of InputModal designed to stay
16
+ * mounted throughout the session. It handles:
17
+ * - Multi-line input with cursor navigation
18
+ * - Command history navigation (up/down arrows)
19
+ * - Command palette (triggered by "/")
20
+ * - Inline config wizard, model menu, and token input
21
+ *
22
+ * Unlike InputModal, this doesn't resolve a promise on submit - it calls
23
+ * the onSubmit callback and clears the input.
24
+ *
25
+ * Controls:
26
+ * - Enter: Submit the input (or select command when palette is open)
27
+ * - Ctrl+J: Add a new line
28
+ * - Arrow Up/Down: Navigate between lines (or navigate palette/history when appropriate)
29
+ * - Arrow Left/Right: Navigate within a line
30
+ * - Backspace: Delete character or merge lines
31
+ * - Escape: Close command palette (during streaming, parent handles interrupt)
32
+ * - Ctrl+C: Exit
33
+ */
34
+ export function InputFooter({ onSubmit, history = [], isDisabled = false, settings, }) {
35
+ const { exit } = useApp();
36
+ // State for multi-line input - combined into single object for atomic updates
37
+ const [inputState, setInputState] = useState({
38
+ lines: [''],
39
+ currentLine: 0,
40
+ cursorPos: 0,
41
+ });
42
+ // State for command history navigation
43
+ // historyIndex: -1 means not navigating, 0 = most recent, length-1 = oldest
44
+ const [historyIndex, setHistoryIndex] = useState(-1);
45
+ // savedInput: saves the current input when user starts navigating history
46
+ const [savedInput, setSavedInput] = useState('');
47
+ // Destructure for easier access in render
48
+ const { lines, currentLine, cursorPos } = inputState;
49
+ // Helper to update input state atomically
50
+ const updateInputState = (updates) => {
51
+ setInputState(prev => ({ ...prev, ...updates }));
52
+ };
53
+ // State for command palette
54
+ const [showPalette, setShowPalette] = useState(false);
55
+ const [paletteFilter, setPaletteFilter] = useState('');
56
+ const [selectedIndex, setSelectedIndex] = useState(0);
57
+ // State for model menu
58
+ const [showModelMenu, setShowModelMenu] = useState(false);
59
+ const [confirmationMessage, setConfirmationMessage] = useState(null);
60
+ // State for config wizard
61
+ const [showConfigWizard, setShowConfigWizard] = useState(false);
62
+ const [currentSettings, setCurrentSettings] = useState(settings);
63
+ // State for token input
64
+ const [showTokenInput, setShowTokenInput] = useState(false);
65
+ // State for sync menu
66
+ const [showSyncMenu, setShowSyncMenu] = useState(false);
67
+ // Get filtered commands based on paletteFilter
68
+ const filteredCommands = useMemo(() => {
69
+ if (!showPalette)
70
+ return [];
71
+ return filterCommands(paletteFilter);
72
+ }, [showPalette, paletteFilter]);
73
+ // Reset selected index when filtered commands change
74
+ useMemo(() => {
75
+ if (selectedIndex >= filteredCommands.length) {
76
+ setSelectedIndex(Math.max(0, filteredCommands.length - 1));
77
+ }
78
+ }, [filteredCommands.length, selectedIndex]);
79
+ // Clear confirmation message after a delay
80
+ useEffect(() => {
81
+ if (confirmationMessage) {
82
+ const timer = setTimeout(() => {
83
+ setConfirmationMessage(null);
84
+ }, 2000);
85
+ return () => clearTimeout(timer);
86
+ }
87
+ }, [confirmationMessage]);
88
+ // Sync settings prop with local state
89
+ useEffect(() => {
90
+ if (settings) {
91
+ setCurrentSettings(settings);
92
+ }
93
+ }, [settings]);
94
+ // Config wizard callbacks
95
+ const closeConfigWizard = useCallback(() => {
96
+ setShowConfigWizard(false);
97
+ updateInputState({ lines: [''], cursorPos: 0 });
98
+ }, []);
99
+ const handleConfigComplete = useCallback((newSettings) => {
100
+ // Save the settings
101
+ saveSettings(newSettings);
102
+ setCurrentSettings(newSettings);
103
+ setConfirmationMessage(`Configuration saved for ${newSettings.provider}`);
104
+ closeConfigWizard();
105
+ // Trigger reconnect by submitting a special token
106
+ setTimeout(() => {
107
+ onSubmit('__CONFIG_SAVED__');
108
+ }, 100);
109
+ }, [closeConfigWizard, onSubmit]);
110
+ const handleConfigCancel = useCallback(() => {
111
+ setConfirmationMessage('Configuration cancelled');
112
+ closeConfigWizard();
113
+ }, [closeConfigWizard]);
114
+ // Token input callbacks
115
+ const closeTokenInput = useCallback(() => {
116
+ setShowTokenInput(false);
117
+ updateInputState({ lines: [''], cursorPos: 0 });
118
+ }, []);
119
+ const handleTokenSubmit = useCallback((token) => {
120
+ closeTokenInput();
121
+ // Submit with special prefix for ChatApp to handle
122
+ onSubmit(`__TOKEN__:${token}`);
123
+ }, [closeTokenInput, onSubmit]);
124
+ const handleTokenCancel = useCallback(() => {
125
+ setConfirmationMessage('Token entry cancelled');
126
+ closeTokenInput();
127
+ }, [closeTokenInput]);
128
+ // Sync menu callbacks
129
+ const closeSyncMenu = useCallback(() => {
130
+ setShowSyncMenu(false);
131
+ updateInputState({ lines: [''], cursorPos: 0 });
132
+ }, []);
133
+ const handleSyncSelect = useCallback(async (result) => {
134
+ closeSyncMenu();
135
+ // Execute the sync action - we'll submit a special command for ChatApp to handle
136
+ switch (result.action) {
137
+ case 'sync':
138
+ if (result.force) {
139
+ onSubmit('__SYNC__:force');
140
+ }
141
+ else {
142
+ onSubmit('__SYNC__:normal');
143
+ }
144
+ break;
145
+ case 'preview':
146
+ onSubmit('__SYNC__:preview');
147
+ break;
148
+ case 'status':
149
+ onSubmit('__SYNC__:status');
150
+ break;
151
+ case 'resume':
152
+ onSubmit('__SYNC__:resume');
153
+ break;
154
+ case 'cancel':
155
+ // Already closed menu, nothing else to do
156
+ break;
157
+ }
158
+ }, [closeSyncMenu, onSubmit]);
159
+ const handleSyncCancel = useCallback(() => {
160
+ setConfirmationMessage('Sync cancelled');
161
+ closeSyncMenu();
162
+ }, [closeSyncMenu]);
163
+ const handleSubmit = useCallback(() => {
164
+ const result = lines.join('\n').trim();
165
+ if (!result)
166
+ return;
167
+ // Reset history navigation state
168
+ setHistoryIndex(-1);
169
+ setSavedInput('');
170
+ // Clear input
171
+ setInputState({ lines: [''], currentLine: 0, cursorPos: 0 });
172
+ // Call the onSubmit callback (parent handles queuing if streaming)
173
+ onSubmit(result);
174
+ }, [lines, onSubmit]);
175
+ const closePalette = useCallback(() => {
176
+ setShowPalette(false);
177
+ setPaletteFilter('');
178
+ setSelectedIndex(0);
179
+ }, []);
180
+ // Model menu callbacks
181
+ const closeModelMenu = useCallback(() => {
182
+ setShowModelMenu(false);
183
+ updateInputState({ lines: [''], cursorPos: 0 });
184
+ }, []);
185
+ const handleModelSelect = useCallback((provider, modelId) => {
186
+ if (!currentSettings) {
187
+ settingsDebugLog('[handleModelSelect] No currentSettings, aborting');
188
+ closeModelMenu();
189
+ return;
190
+ }
191
+ settingsDebugLog(`[handleModelSelect] Changing to provider=${provider}, model=${modelId}`);
192
+ settingsDebugLog(`[handleModelSelect] Before: provider=${currentSettings.provider}, isAuthenticated=${isAuthenticated()}`);
193
+ // Create a deep copy of settings to avoid mutation issues
194
+ const updatedSettings = Settings.fromDict(currentSettings.toDict());
195
+ // Update the provider
196
+ updatedSettings.provider = provider;
197
+ // Update the model in settings based on provider
198
+ if (provider === Provider.ANTHROPIC || provider === 'anthropic') {
199
+ updatedSettings.anthropic.model = modelId;
200
+ }
201
+ else if (provider === Provider.OPENAI || provider === 'openai') {
202
+ updatedSettings.openai.model = modelId;
203
+ }
204
+ else if (provider === Provider.AZURE || provider === 'azure') {
205
+ updatedSettings.azure.deployment = modelId;
206
+ }
207
+ // Save the updated settings to disk
208
+ settingsDebugLog(`[handleModelSelect] Saving settings: provider=${updatedSettings.provider}`);
209
+ saveSettings(updatedSettings);
210
+ // CRITICAL: If cloud authenticated, also update the selected cloud provider
211
+ // This ensures getSelectedCloudProvider() returns the correct provider
212
+ if (isAuthenticated()) {
213
+ settingsDebugLog(`[handleModelSelect] Cloud authenticated, calling setSelectedCloudProvider(${provider})`);
214
+ const cloudProviderSet = setSelectedCloudProvider(provider);
215
+ if (!cloudProviderSet) {
216
+ settingsDebugLog(`[handleModelSelect] WARNING: setSelectedCloudProvider returned false - provider ${provider} may not be available in cloud config`);
217
+ }
218
+ else {
219
+ settingsDebugLog(`[handleModelSelect] Cloud provider selection saved successfully`);
220
+ }
221
+ }
222
+ // Update local state with the new settings
223
+ setCurrentSettings(updatedSettings);
224
+ // Format confirmation message with provider and model
225
+ const providerName = provider.charAt(0).toUpperCase() + provider.slice(1);
226
+ setConfirmationMessage(`Provider changed to ${providerName}, model: ${modelId}`);
227
+ closeModelMenu();
228
+ settingsDebugLog(`[handleModelSelect] Triggering reconnect via __CONFIG_SAVED__`);
229
+ // Trigger reconnect to use the new provider/model
230
+ setTimeout(() => {
231
+ onSubmit('__CONFIG_SAVED__');
232
+ }, 100);
233
+ }, [currentSettings, closeModelMenu, onSubmit]);
234
+ const handleModelCancel = useCallback(() => {
235
+ setConfirmationMessage('Model selection cancelled');
236
+ closeModelMenu();
237
+ }, [closeModelMenu]);
238
+ useInput((input, key) => {
239
+ // Ctrl+C to exit
240
+ if (input === 'c' && key.ctrl) {
241
+ exit();
242
+ return;
243
+ }
244
+ // Config wizard handles its own input
245
+ if (showConfigWizard) {
246
+ return;
247
+ }
248
+ // Token input handles its own input
249
+ if (showTokenInput) {
250
+ return;
251
+ }
252
+ // Model menu handles its own input
253
+ if (showModelMenu) {
254
+ return;
255
+ }
256
+ // Sync menu handles its own input
257
+ if (showSyncMenu) {
258
+ return;
259
+ }
260
+ // NOTE: We no longer block input when streaming (isDisabled).
261
+ // Users can type, search history, and submit messages while streaming.
262
+ // The parent component handles queuing messages submitted during streaming.
263
+ // Handle command palette navigation when it's open
264
+ if (showPalette) {
265
+ // Escape to close palette
266
+ if (key.escape) {
267
+ closePalette();
268
+ return;
269
+ }
270
+ // Arrow Up: navigate up in palette
271
+ if (key.upArrow) {
272
+ setSelectedIndex(prev => (prev > 0 ? prev - 1 : filteredCommands.length - 1));
273
+ return;
274
+ }
275
+ // Arrow Down: navigate down in palette
276
+ if (key.downArrow) {
277
+ setSelectedIndex(prev => (prev < filteredCommands.length - 1 ? prev + 1 : 0));
278
+ return;
279
+ }
280
+ // Tab: autocomplete with the highlighted command (keep palette open)
281
+ if (key.tab) {
282
+ if (filteredCommands.length > 0 && selectedIndex < filteredCommands.length) {
283
+ const selectedCommand = filteredCommands[selectedIndex].name;
284
+ // Update the input line with the full command and cursor position atomically
285
+ setInputState(prev => {
286
+ const newLines = [...prev.lines];
287
+ newLines[prev.currentLine] = selectedCommand;
288
+ return { ...prev, lines: newLines, cursorPos: selectedCommand.length };
289
+ });
290
+ // Reset filter to match the full command (minus the leading "/")
291
+ setPaletteFilter(selectedCommand.slice(1));
292
+ // Reset selected index
293
+ setSelectedIndex(0);
294
+ // Keep palette open - don't close it
295
+ }
296
+ return;
297
+ }
298
+ // Enter: select the highlighted command or submit full input
299
+ if (key.return) {
300
+ if (filteredCommands.length > 0 && selectedIndex < filteredCommands.length) {
301
+ const selectedCommand = filteredCommands[selectedIndex].name;
302
+ // Special handling for /config command
303
+ if (selectedCommand === '/config' && currentSettings) {
304
+ closePalette();
305
+ setShowConfigWizard(true);
306
+ // Clear the input since we're handling it inline
307
+ updateInputState({ lines: [''], cursorPos: 0 });
308
+ return;
309
+ }
310
+ // Special handling for /token command
311
+ if (selectedCommand === '/token') {
312
+ closePalette();
313
+ setShowTokenInput(true);
314
+ // Clear the input since we're handling it inline
315
+ updateInputState({ lines: [''], cursorPos: 0 });
316
+ return;
317
+ }
318
+ // Special handling for /model command
319
+ if (selectedCommand === '/model' && currentSettings) {
320
+ closePalette();
321
+ setShowModelMenu(true);
322
+ // Clear the input since we're handling it inline
323
+ updateInputState({ lines: [''], cursorPos: 0 });
324
+ return;
325
+ }
326
+ // Special handling for /sync command
327
+ if (selectedCommand === '/sync') {
328
+ closePalette();
329
+ setShowSyncMenu(true);
330
+ // Clear the input since we're handling it inline
331
+ updateInputState({ lines: [''], cursorPos: 0 });
332
+ return;
333
+ }
334
+ // Set the command in input and submit immediately
335
+ closePalette();
336
+ setInputState({ lines: [''], currentLine: 0, cursorPos: 0 });
337
+ onSubmit(selectedCommand);
338
+ }
339
+ else {
340
+ // No matching commands - submit the full input as-is (for commands with arguments)
341
+ const fullInput = '/' + paletteFilter;
342
+ closePalette();
343
+ setInputState({ lines: [''], currentLine: 0, cursorPos: 0 });
344
+ onSubmit(fullInput);
345
+ }
346
+ return;
347
+ }
348
+ // Backspace: remove from filter or close palette
349
+ if (key.backspace || key.delete) {
350
+ if (paletteFilter.length > 0) {
351
+ // Remove last character from filter
352
+ const newFilter = paletteFilter.slice(0, -1);
353
+ setPaletteFilter(newFilter);
354
+ setSelectedIndex(0);
355
+ // Update the input line and cursor atomically
356
+ setInputState(prev => {
357
+ const newLines = [...prev.lines];
358
+ newLines[prev.currentLine] = '/' + newFilter;
359
+ return { ...prev, lines: newLines, cursorPos: 1 + newFilter.length };
360
+ });
361
+ }
362
+ else {
363
+ // Filter is empty, delete the "/" and close palette
364
+ setInputState(prev => {
365
+ const newLines = [...prev.lines];
366
+ const line = newLines[prev.currentLine];
367
+ if (line.startsWith('/')) {
368
+ newLines[prev.currentLine] = line.slice(1);
369
+ }
370
+ return { ...prev, lines: newLines, cursorPos: Math.max(0, prev.cursorPos - 1) };
371
+ });
372
+ closePalette();
373
+ }
374
+ return;
375
+ }
376
+ // Regular character input: add to filter
377
+ if (input && !key.ctrl && !key.meta) {
378
+ const newFilter = paletteFilter + input;
379
+ setPaletteFilter(newFilter);
380
+ setSelectedIndex(0);
381
+ // Update the input line and cursor atomically
382
+ setInputState(prev => {
383
+ const newLines = [...prev.lines];
384
+ newLines[prev.currentLine] = '/' + newFilter;
385
+ return { ...prev, lines: newLines, cursorPos: 1 + newFilter.length };
386
+ });
387
+ return;
388
+ }
389
+ return;
390
+ }
391
+ // Normal input handling when palette is closed
392
+ // Ctrl+J for new line
393
+ if (input === 'j' && key.ctrl) {
394
+ setInputState(prev => {
395
+ const newLines = [...prev.lines];
396
+ // Split current line at cursor position
397
+ const currentLineContent = newLines[prev.currentLine];
398
+ const beforeCursor = currentLineContent.slice(0, prev.cursorPos);
399
+ const afterCursor = currentLineContent.slice(prev.cursorPos);
400
+ newLines[prev.currentLine] = beforeCursor;
401
+ newLines.splice(prev.currentLine + 1, 0, afterCursor);
402
+ return { lines: newLines, currentLine: prev.currentLine + 1, cursorPos: 0 };
403
+ });
404
+ return;
405
+ }
406
+ // Enter to submit
407
+ if (key.return) {
408
+ handleSubmit();
409
+ return;
410
+ }
411
+ // Arrow Up - navigate lines or history
412
+ if (key.upArrow) {
413
+ // If on first line, navigate history backward
414
+ if (currentLine === 0 && history.length > 0) {
415
+ const nextIndex = historyIndex + 1;
416
+ if (nextIndex < history.length) {
417
+ // Save current input when first starting to navigate
418
+ if (historyIndex === -1) {
419
+ setSavedInput(lines.join('\n'));
420
+ }
421
+ setHistoryIndex(nextIndex);
422
+ // History is stored newest first, so index 0 = most recent
423
+ const historyItem = history[nextIndex];
424
+ const historyLines = historyItem.split('\n');
425
+ setInputState({
426
+ lines: historyLines,
427
+ currentLine: 0,
428
+ cursorPos: historyLines[0].length,
429
+ });
430
+ }
431
+ return;
432
+ }
433
+ // Otherwise navigate between lines
434
+ setInputState(prev => {
435
+ if (prev.currentLine > 0) {
436
+ const newLine = prev.currentLine - 1;
437
+ return {
438
+ ...prev,
439
+ currentLine: newLine,
440
+ cursorPos: Math.min(prev.cursorPos, prev.lines[newLine].length),
441
+ };
442
+ }
443
+ return prev;
444
+ });
445
+ return;
446
+ }
447
+ // Arrow Down - navigate lines or history
448
+ if (key.downArrow) {
449
+ // If navigating history, move forward (toward more recent)
450
+ if (historyIndex >= 0) {
451
+ const nextIndex = historyIndex - 1;
452
+ if (nextIndex >= 0) {
453
+ // Still in history
454
+ setHistoryIndex(nextIndex);
455
+ const historyItem = history[nextIndex];
456
+ const historyLines = historyItem.split('\n');
457
+ setInputState({
458
+ lines: historyLines,
459
+ currentLine: 0,
460
+ cursorPos: historyLines[0].length,
461
+ });
462
+ }
463
+ else {
464
+ // Reached end of history, restore saved input
465
+ setHistoryIndex(-1);
466
+ const restoredLines = savedInput ? savedInput.split('\n') : [''];
467
+ setInputState({
468
+ lines: restoredLines,
469
+ currentLine: 0,
470
+ cursorPos: restoredLines[0].length,
471
+ });
472
+ setSavedInput('');
473
+ }
474
+ return;
475
+ }
476
+ // Otherwise navigate between lines
477
+ setInputState(prev => {
478
+ if (prev.currentLine < prev.lines.length - 1) {
479
+ const newLine = prev.currentLine + 1;
480
+ return {
481
+ ...prev,
482
+ currentLine: newLine,
483
+ cursorPos: Math.min(prev.cursorPos, prev.lines[newLine].length),
484
+ };
485
+ }
486
+ return prev;
487
+ });
488
+ return;
489
+ }
490
+ // Arrow Left
491
+ if (key.leftArrow) {
492
+ setInputState(prev => {
493
+ if (prev.cursorPos > 0) {
494
+ return { ...prev, cursorPos: prev.cursorPos - 1 };
495
+ }
496
+ else if (prev.currentLine > 0) {
497
+ // Move to end of previous line
498
+ const newLine = prev.currentLine - 1;
499
+ return { ...prev, currentLine: newLine, cursorPos: prev.lines[newLine].length };
500
+ }
501
+ return prev;
502
+ });
503
+ return;
504
+ }
505
+ // Arrow Right
506
+ if (key.rightArrow) {
507
+ setInputState(prev => {
508
+ if (prev.cursorPos < prev.lines[prev.currentLine].length) {
509
+ return { ...prev, cursorPos: prev.cursorPos + 1 };
510
+ }
511
+ else if (prev.currentLine < prev.lines.length - 1) {
512
+ // Move to start of next line
513
+ return { ...prev, currentLine: prev.currentLine + 1, cursorPos: 0 };
514
+ }
515
+ return prev;
516
+ });
517
+ return;
518
+ }
519
+ // Alt+Backspace: delete word before cursor
520
+ if (key.meta && (key.backspace || key.delete)) {
521
+ setInputState(prev => {
522
+ if (prev.cursorPos === 0)
523
+ return prev;
524
+ const line = prev.lines[prev.currentLine];
525
+ let pos = prev.cursorPos;
526
+ // Skip any whitespace immediately before cursor
527
+ while (pos > 0 && /\s/.test(line[pos - 1])) {
528
+ pos--;
529
+ }
530
+ // Delete back to the previous whitespace or start of line
531
+ while (pos > 0 && !/\s/.test(line[pos - 1])) {
532
+ pos--;
533
+ }
534
+ const newLines = [...prev.lines];
535
+ newLines[prev.currentLine] = line.slice(0, pos) + line.slice(prev.cursorPos);
536
+ return { ...prev, lines: newLines, cursorPos: pos };
537
+ });
538
+ return;
539
+ }
540
+ // Backspace
541
+ if (key.backspace || key.delete) {
542
+ setInputState(prev => {
543
+ if (prev.cursorPos > 0) {
544
+ // Delete character before cursor
545
+ const newLines = [...prev.lines];
546
+ const line = newLines[prev.currentLine];
547
+ newLines[prev.currentLine] = line.slice(0, prev.cursorPos - 1) + line.slice(prev.cursorPos);
548
+ return { ...prev, lines: newLines, cursorPos: prev.cursorPos - 1 };
549
+ }
550
+ else if (prev.currentLine > 0) {
551
+ // Merge with previous line
552
+ const prevLineLen = prev.lines[prev.currentLine - 1].length;
553
+ const newLines = [...prev.lines];
554
+ newLines[prev.currentLine - 1] += newLines[prev.currentLine];
555
+ newLines.splice(prev.currentLine, 1);
556
+ return { lines: newLines, currentLine: prev.currentLine - 1, cursorPos: prevLineLen };
557
+ }
558
+ return prev;
559
+ });
560
+ return;
561
+ }
562
+ // Home key (Ctrl+A in some terminals)
563
+ if (input === 'a' && key.ctrl) {
564
+ updateInputState({ cursorPos: 0 });
565
+ return;
566
+ }
567
+ // End key (Ctrl+E in some terminals)
568
+ if (input === 'e' && key.ctrl) {
569
+ setInputState(prev => ({ ...prev, cursorPos: prev.lines[prev.currentLine].length }));
570
+ return;
571
+ }
572
+ // Regular character input (including multi-character paste)
573
+ if (input && !key.ctrl && !key.meta) {
574
+ // Check if "/" is typed at the beginning of an empty line or at cursor position 0
575
+ if (input === '/' && (inputState.lines[inputState.currentLine] === '' || inputState.cursorPos === 0)) {
576
+ setShowPalette(true);
577
+ setPaletteFilter('');
578
+ setSelectedIndex(0);
579
+ }
580
+ setInputState(prev => {
581
+ const newLines = [...prev.lines];
582
+ const line = newLines[prev.currentLine];
583
+ newLines[prev.currentLine] = line.slice(0, prev.cursorPos) + input + line.slice(prev.cursorPos);
584
+ return {
585
+ ...prev,
586
+ lines: newLines,
587
+ cursorPos: prev.cursorPos + input.length
588
+ };
589
+ });
590
+ return;
591
+ }
592
+ });
593
+ // Render lines with cursor indicator
594
+ const renderLines = () => {
595
+ const maxDisplayLines = 5;
596
+ const displayLines = lines.slice(0, maxDisplayLines);
597
+ return displayLines.map((line, index) => {
598
+ const isCurrentLine = index === currentLine;
599
+ if (isCurrentLine) {
600
+ // Show cursor in current line
601
+ // Use sibling Text components instead of nesting to avoid Ink layout bugs
602
+ const beforeCursor = line.slice(0, cursorPos);
603
+ const cursorChar = line[cursorPos] || ' ';
604
+ const afterCursor = line.slice(cursorPos + 1);
605
+ return (_jsxs(Box, { children: [_jsx(Text, { children: beforeCursor }), _jsx(Text, { inverse: true, children: cursorChar }), _jsx(Text, { children: afterCursor })] }, index));
606
+ }
607
+ return (_jsx(Box, { children: _jsx(Text, { children: line || ' ' }) }, index));
608
+ });
609
+ };
610
+ // Calculate minimum height (at least 1 line)
611
+ const minHeight = Math.max(1, Math.min(lines.length, 5));
612
+ // Determine hint text based on state
613
+ const hintText = isDisabled
614
+ ? '(Streaming... Escape to interrupt, Enter to queue next message)'
615
+ : '(Enter to send, Ctrl+J for new line, "/" for commands, Up/Down for history)';
616
+ return (_jsxs(Box, { flexDirection: "column", children: [confirmationMessage && (_jsx(Box, { marginBottom: 0, children: _jsx(Text, { color: "green", children: confirmationMessage }) })), _jsx(Text, { dimColor: true, children: hintText }), _jsxs(Box, { borderStyle: "round", borderColor: isDisabled ? 'gray' : 'cyan', paddingX: 1, flexDirection: "column", minHeight: minHeight + 2, children: [_jsx(Box, { marginTop: -1, marginLeft: -1, children: _jsx(Text, { color: isDisabled ? 'gray' : 'cyan', children: " You " }) }), _jsx(Box, { flexDirection: "column", minHeight: minHeight, children: renderLines() })] }), _jsx(CommandPalette, { commands: filteredCommands, selectedIndex: selectedIndex, filterText: paletteFilter, isOpen: showPalette }), currentSettings && (_jsx(ModelMenu, { isOpen: showModelMenu, settings: currentSettings, onSelect: handleModelSelect, onCancel: handleModelCancel })), currentSettings && (_jsx(ConfigWizard, { isOpen: showConfigWizard, settings: currentSettings, onComplete: handleConfigComplete, onCancel: handleConfigCancel })), _jsx(TokenInput, { isOpen: showTokenInput, onSubmit: handleTokenSubmit, onCancel: handleTokenCancel }), _jsx(SyncMenu, { isOpen: showSyncMenu, onSelect: handleSyncSelect, onCancel: handleSyncCancel }), lines.length > 1 && !showPalette && !showModelMenu && !showConfigWizard && !showTokenInput && !showSyncMenu && (_jsxs(Text, { dimColor: true, children: ["Line ", currentLine + 1, "/", lines.length] }))] }));
617
+ }
618
+ //# sourceMappingURL=InputFooter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputFooter.js","sourceRoot":"","sources":["../../src/components/InputFooter.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAkB,MAAM,eAAe,CAAC;AACzD,OAAO,EAAY,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AASvE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,OAAO,GAAG,EAAE,EACZ,UAAU,GAAG,KAAK,EAClB,QAAQ,GACS;IACjB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAE1B,8EAA8E;IAC9E,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC;QAC3C,KAAK,EAAE,CAAC,EAAE,CAAa;QACvB,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;KACb,CAAC,CAAC;IAEH,uCAAuC;IACvC,4EAA4E;IAC5E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,0EAA0E;IAC1E,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEjD,0CAA0C;IAC1C,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC;IAErD,0CAA0C;IAC1C,MAAM,gBAAgB,GAAG,CAAC,OAAmC,EAAE,EAAE;QAC/D,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC;IAEF,4BAA4B;IAC5B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtD,uBAAuB;IACvB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAEpF,0BAA0B;IAC1B,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAuB,QAAQ,CAAC,CAAC;IAEvF,wBAAwB;IACxB,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5D,sBAAsB;IACtB,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,+CAA+C;IAC/C,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAC5B,OAAO,cAAc,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;IAEjC,qDAAqD;IACrD,OAAO,CAAC,GAAG,EAAE;QACX,IAAI,aAAa,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAC7C,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAE7C,2CAA2C;IAC3C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,sCAAsC;IACtC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,EAAE,CAAC;YACb,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,0BAA0B;IAC1B,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3B,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,oBAAoB,GAAG,WAAW,CAAC,CAAC,WAAqB,EAAE,EAAE;QACjE,oBAAoB;QACpB,YAAY,CAAC,WAAW,CAAC,CAAC;QAC1B,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAChC,sBAAsB,CAAC,2BAA2B,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,iBAAiB,EAAE,CAAC;QACpB,kDAAkD;QAClD,UAAU,CAAC,GAAG,EAAE;YACd,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAC/B,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,EAAE,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAElC,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1C,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;QAClD,iBAAiB,EAAE,CAAC;IACtB,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,wBAAwB;IACxB,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzB,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QACtD,eAAe,EAAE,CAAC;QAClB,mDAAmD;QACnD,QAAQ,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEhC,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;QAChD,eAAe,EAAE,CAAC;IACpB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,sBAAsB;IACtB,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,EAAE,MAAsB,EAAE,EAAE;QACpE,aAAa,EAAE,CAAC;QAEhB,iFAAiF;QACjF,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,MAAM;gBACT,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,QAAQ,CAAC,gBAAgB,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,iBAAiB,CAAC,CAAC;gBAC9B,CAAC;gBACD,MAAM;YACR,KAAK,SAAS;gBACZ,QAAQ,CAAC,kBAAkB,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,QAAQ;gBACX,QAAQ,CAAC,iBAAiB,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,QAAQ;gBACX,QAAQ,CAAC,iBAAiB,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,QAAQ;gBACX,0CAA0C;gBAC1C,MAAM;QACV,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE9B,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QACzC,aAAa,EAAE,CAAC;IAClB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,iCAAiC;QACjC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,cAAc;QACd,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7D,mEAAmE;QACnE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtB,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtB,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACrB,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,uBAAuB;IACvB,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACxB,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,QAAgB,EAAE,OAAe,EAAE,EAAE;QAC1E,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,gBAAgB,CAAC,kDAAkD,CAAC,CAAC;YACrE,cAAc,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,gBAAgB,CAAC,4CAA4C,QAAQ,WAAW,OAAO,EAAE,CAAC,CAAC;QAC3F,gBAAgB,CAAC,wCAAwC,eAAe,CAAC,QAAQ,qBAAqB,eAAe,EAAE,EAAE,CAAC,CAAC;QAE3H,0DAA0D;QAC1D,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;QAEpE,sBAAsB;QACtB,eAAe,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEpC,iDAAiD;QACjD,IAAI,QAAQ,KAAK,QAAQ,CAAC,SAAS,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAChE,eAAe,CAAC,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC;QAC5C,CAAC;aAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjE,eAAe,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;QACzC,CAAC;aAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC,KAAK,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC/D,eAAe,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC;QAC7C,CAAC;QAED,oCAAoC;QACpC,gBAAgB,CAAC,iDAAiD,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9F,YAAY,CAAC,eAAe,CAAC,CAAC;QAE9B,4EAA4E;QAC5E,uEAAuE;QACvE,IAAI,eAAe,EAAE,EAAE,CAAC;YACtB,gBAAgB,CAAC,6EAA6E,QAAQ,GAAG,CAAC,CAAC;YAC3G,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,gBAAgB,CAAC,mFAAmF,QAAQ,uCAAuC,CAAC,CAAC;YACvJ,CAAC;iBAAM,CAAC;gBACN,gBAAgB,CAAC,iEAAiE,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAEpC,sDAAsD;QACtD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1E,sBAAsB,CAAC,uBAAuB,YAAY,YAAY,OAAO,EAAE,CAAC,CAAC;QACjF,cAAc,EAAE,CAAC;QAEjB,gBAAgB,CAAC,+DAA+D,CAAC,CAAC;QAClF,kDAAkD;QAClD,UAAU,CAAC,GAAG,EAAE;YACd,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAC/B,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEhD,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,sBAAsB,CAAC,2BAA2B,CAAC,CAAC;QACpD,cAAc,EAAE,CAAC;IACnB,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,iBAAiB;QACjB,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,sCAAsC;QACtC,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,oCAAoC;QACpC,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,mCAAmC;QACnC,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,kCAAkC;QAClC,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,8DAA8D;QAC9D,uEAAuE;QACvE,4EAA4E;QAE5E,mDAAmD;QACnD,IAAI,WAAW,EAAE,CAAC;YAChB,0BAA0B;YAC1B,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,mCAAmC;YACnC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;YAED,uCAAuC;YACvC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;YAED,qEAAqE;YACrE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;gBACZ,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAC3E,MAAM,eAAe,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;oBAC7D,6EAA6E;oBAC7E,aAAa,CAAC,IAAI,CAAC,EAAE;wBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;wBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC;wBAC7C,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,MAAM,EAAE,CAAC;oBACzE,CAAC,CAAC,CAAC;oBACH,iEAAiE;oBACjE,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3C,uBAAuB;oBACvB,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBACpB,qCAAqC;gBACvC,CAAC;gBACD,OAAO;YACT,CAAC;YAED,6DAA6D;YAC7D,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAC3E,MAAM,eAAe,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;oBAE7D,uCAAuC;oBACvC,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,EAAE,CAAC;wBACrD,YAAY,EAAE,CAAC;wBACf,mBAAmB,CAAC,IAAI,CAAC,CAAC;wBAC1B,iDAAiD;wBACjD,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;wBAChD,OAAO;oBACT,CAAC;oBAED,sCAAsC;oBACtC,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;wBACjC,YAAY,EAAE,CAAC;wBACf,iBAAiB,CAAC,IAAI,CAAC,CAAC;wBACxB,iDAAiD;wBACjD,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;wBAChD,OAAO;oBACT,CAAC;oBAED,sCAAsC;oBACtC,IAAI,eAAe,KAAK,QAAQ,IAAI,eAAe,EAAE,CAAC;wBACpD,YAAY,EAAE,CAAC;wBACf,gBAAgB,CAAC,IAAI,CAAC,CAAC;wBACvB,iDAAiD;wBACjD,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;wBAChD,OAAO;oBACT,CAAC;oBAED,qCAAqC;oBACrC,IAAI,eAAe,KAAK,OAAO,EAAE,CAAC;wBAChC,YAAY,EAAE,CAAC;wBACf,eAAe,CAAC,IAAI,CAAC,CAAC;wBACtB,iDAAiD;wBACjD,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;wBAChD,OAAO;oBACT,CAAC;oBAED,kDAAkD;oBAClD,YAAY,EAAE,CAAC;oBACf,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC7D,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,mFAAmF;oBACnF,MAAM,SAAS,GAAG,GAAG,GAAG,aAAa,CAAC;oBACtC,YAAY,EAAE,CAAC;oBACf,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC7D,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACtB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,iDAAiD;YACjD,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,oCAAoC;oBACpC,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC7C,gBAAgB,CAAC,SAAS,CAAC,CAAC;oBAC5B,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBACpB,8CAA8C;oBAC9C,aAAa,CAAC,IAAI,CAAC,EAAE;wBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;wBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC;wBAC7C,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;oBACvE,CAAC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,oDAAoD;oBACpD,aAAa,CAAC,IAAI,CAAC,EAAE;wBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;wBACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBACxC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;4BACzB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC7C,CAAC;wBACD,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;oBAClF,CAAC,CAAC,CAAC;oBACH,YAAY,EAAE,CAAC;gBACjB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,yCAAyC;YACzC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,SAAS,GAAG,aAAa,GAAG,KAAK,CAAC;gBACxC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC5B,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACpB,8CAA8C;gBAC9C,aAAa,CAAC,IAAI,CAAC,EAAE;oBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC;oBAC7C,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;gBACvE,CAAC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,OAAO;QACT,CAAC;QAED,+CAA+C;QAE/C,sBAAsB;QACtB,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,wCAAwC;gBACxC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACtD,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjE,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7D,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC;gBAC1C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;gBACtD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;YAC9E,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,kBAAkB;QAClB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,uCAAuC;QACvC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,8CAA8C;YAC9C,IAAI,WAAW,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC;gBACnC,IAAI,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC/B,qDAAqD;oBACrD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;wBACxB,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBAClC,CAAC;oBACD,eAAe,CAAC,SAAS,CAAC,CAAC;oBAC3B,2DAA2D;oBAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;oBACvC,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7C,aAAa,CAAC;wBACZ,KAAK,EAAE,YAAY;wBACnB,WAAW,EAAE,CAAC;wBACd,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM;qBAClC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO;YACT,CAAC;YACD,mCAAmC;YACnC,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACrC,OAAO;wBACL,GAAG,IAAI;wBACP,WAAW,EAAE,OAAO;wBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;qBAChE,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,yCAAyC;QACzC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,2DAA2D;YAC3D,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;gBACtB,MAAM,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC;gBACnC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;oBACnB,mBAAmB;oBACnB,eAAe,CAAC,SAAS,CAAC,CAAC;oBAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;oBACvC,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7C,aAAa,CAAC;wBACZ,KAAK,EAAE,YAAY;wBACnB,WAAW,EAAE,CAAC;wBACd,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM;qBAClC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,8CAA8C;oBAC9C,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpB,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACjE,aAAa,CAAC;wBACZ,KAAK,EAAE,aAAa;wBACpB,WAAW,EAAE,CAAC;wBACd,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM;qBACnC,CAAC,CAAC;oBACH,aAAa,CAAC,EAAE,CAAC,CAAC;gBACpB,CAAC;gBACD,OAAO;YACT,CAAC;YACD,mCAAmC;YACnC,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACrC,OAAO;wBACL,GAAG,IAAI;wBACP,WAAW,EAAE,OAAO;wBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;qBAChE,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,aAAa;QACb,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;oBACvB,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBACpD,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;oBAChC,+BAA+B;oBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACrC,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;gBAClF,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,cAAc;QACd,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC;oBACzD,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBACpD,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpD,6BAA6B;oBAC7B,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;gBACtE,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,2CAA2C;QAC3C,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC1C,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;gBAEzB,gDAAgD;gBAChD,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3C,GAAG,EAAE,CAAC;gBACR,CAAC;gBAED,0DAA0D;gBAC1D,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5C,GAAG,EAAE,CAAC;gBACR,CAAC;gBAED,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7E,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,YAAY;QACZ,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAChC,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;oBACvB,iCAAiC;oBACjC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACxC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC5F,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBACrE,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;oBAChC,2BAA2B;oBAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC5D,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC7D,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;gBACxF,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,sCAAsC;QACtC,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QAED,qCAAqC;QACrC,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QAED,4DAA4D;QAC5D,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACpC,kFAAkF;YAClF,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrG,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrB,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACrB,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YAED,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACxC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChG,OAAO;oBACL,GAAG,IAAI;oBACP,KAAK,EAAE,QAAQ;oBACf,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM;iBACzC,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,qCAAqC;IACrC,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,MAAM,eAAe,GAAG,CAAC,CAAC;QAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;QAErD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACtC,MAAM,aAAa,GAAG,KAAK,KAAK,WAAW,CAAC;YAE5C,IAAI,aAAa,EAAE,CAAC;gBAClB,8BAA8B;gBAC9B,0EAA0E;gBAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;gBAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;gBAE9C,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,cAAE,YAAY,GAAQ,EAC3B,KAAC,IAAI,IAAC,OAAO,kBAAE,UAAU,GAAQ,EACjC,KAAC,IAAI,cAAE,WAAW,GAAQ,KAHlB,KAAK,CAIT,CACP,CAAC;YACJ,CAAC;YAED,OAAO,CACL,KAAC,GAAG,cACF,KAAC,IAAI,cAAE,IAAI,IAAI,GAAG,GAAQ,IADlB,KAAK,CAET,CACP,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,6CAA6C;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAEzD,qCAAqC;IACrC,MAAM,QAAQ,GAAG,UAAU;QACzB,CAAC,CAAC,iEAAiE;QACnE,CAAC,CAAC,6EAA6E,CAAC;IAElF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aAExB,mBAAmB,IAAI,CACtB,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,mBAAmB,GAAQ,GAC5C,CACP,EAGD,KAAC,IAAI,IAAC,QAAQ,kBAAE,QAAQ,GAAQ,EAGhC,MAAC,GAAG,IACF,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EACzC,QAAQ,EAAE,CAAC,EACX,aAAa,EAAC,QAAQ,EACtB,SAAS,EAAE,SAAS,GAAG,CAAC,aAGxB,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,YAChC,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,sBAAc,GACnD,EAGN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,SAAS,YAC7C,WAAW,EAAE,GACV,IACF,EAGN,KAAC,cAAc,IACb,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,aAAa,EACzB,MAAM,EAAE,WAAW,GACnB,EAGD,eAAe,IAAI,CAClB,KAAC,SAAS,IACR,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,iBAAiB,GAC3B,CACH,EAGA,eAAe,IAAI,CAClB,KAAC,YAAY,IACX,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,oBAAoB,EAChC,QAAQ,EAAE,kBAAkB,GAC5B,CACH,EAGD,KAAC,UAAU,IACT,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,iBAAiB,GAC3B,EAGF,KAAC,QAAQ,IACP,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,GAC1B,EAGD,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,IAAI,CAAC,gBAAgB,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,IAAI,CAC9G,MAAC,IAAI,IAAC,QAAQ,4BAAO,WAAW,GAAG,CAAC,OAAG,KAAK,CAAC,MAAM,IAAQ,CAC5D,IACG,CACP,CAAC;AACJ,CAAC"}